From d004074c90525442a69cebe226440bb318abad29 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 10 Mar 2026 21:28:40 -0700 Subject: [PATCH 001/192] feat(auth): Add pluggable support for auth integrations using AuthProviderRegistry within CredentialManager The flow for integrating a new auth method will be as follows. The ADK framework contributor will 1. extend the `AuthScheme` to create their own within `adk/auth/auth_scheme.py` 2. implement `BaseAuthProvider` within their dedicated directory in `adk/integrations/auth` 3. do the static registration of the new scheme and provider with AuthProviderRegistry of CredentialManager. PiperOrigin-RevId: 881775983 --- src/google/adk/auth/__init__.py | 1 + src/google/adk/auth/auth_provider_registry.py | 54 +++++++++ src/google/adk/auth/base_auth_provider.py | 43 ++++++++ src/google/adk/auth/credential_manager.py | 25 +++++ src/google/adk/features/_feature_registry.py | 4 + .../auth/test_auth_provider_registry.py | 59 ++++++++++ .../unittests/auth/test_credential_manager.py | 104 ++++++++++++++++++ 7 files changed, 290 insertions(+) create mode 100644 src/google/adk/auth/auth_provider_registry.py create mode 100644 src/google/adk/auth/base_auth_provider.py create mode 100644 tests/unittests/auth/test_auth_provider_registry.py diff --git a/src/google/adk/auth/__init__.py b/src/google/adk/auth/__init__.py index 2426b512c1..f2148a75f6 100644 --- a/src/google/adk/auth/__init__.py +++ b/src/google/adk/auth/__init__.py @@ -20,3 +20,4 @@ from .auth_schemes import AuthSchemeType from .auth_schemes import OpenIdConnectWithConfig from .auth_tool import AuthConfig +from .base_auth_provider import BaseAuthProvider diff --git a/src/google/adk/auth/auth_provider_registry.py b/src/google/adk/auth/auth_provider_registry.py new file mode 100644 index 0000000000..db6997ae04 --- /dev/null +++ b/src/google/adk/auth/auth_provider_registry.py @@ -0,0 +1,54 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Auth provider registry.""" + +from __future__ import annotations + +from ..features import experimental +from ..features import FeatureName +from .auth_schemes import AuthScheme +from .base_auth_provider import BaseAuthProvider + + +@experimental(FeatureName.PLUGGABLE_AUTH) +class AuthProviderRegistry: + """Registry for auth provider instances.""" + + def __init__(self): + self._providers: dict[type[AuthScheme], BaseAuthProvider] = {} + + def register( + self, + auth_scheme_type: type[AuthScheme], + provider_instance: BaseAuthProvider, + ) -> None: + """Register a provider instance for an auth scheme type. + + Args: + auth_scheme_type: The auth scheme type to register for. + provider_instance: The provider instance to register. + """ + self._providers[auth_scheme_type] = provider_instance + + def get_provider(self, auth_scheme: AuthScheme) -> BaseAuthProvider | None: + """Get the provider instance for an auth scheme. + + Args: + auth_scheme: The auth scheme to get provider for. + + Returns: + The provider instance if registered, None otherwise. + """ + return self._providers.get(type(auth_scheme)) diff --git a/src/google/adk/auth/base_auth_provider.py b/src/google/adk/auth/base_auth_provider.py new file mode 100644 index 0000000000..902f35aa25 --- /dev/null +++ b/src/google/adk/auth/base_auth_provider.py @@ -0,0 +1,43 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from abc import ABC +from abc import abstractmethod + +from ..agents.callback_context import CallbackContext +from ..features import experimental +from ..features import FeatureName +from .auth_credential import AuthCredential +from .auth_tool import AuthConfig + + +@experimental(FeatureName.PLUGGABLE_AUTH) +class BaseAuthProvider(ABC): + """Abstract base class for custom authentication providers.""" + + @abstractmethod + async def get_auth_credential( + self, auth_config: AuthConfig, context: CallbackContext + ) -> AuthCredential | None: + """Provide an AuthCredential asynchronously. + + Args: + auth_config: The current authentication configuration. + context: The current callback context. + + Returns: + The retrieved AuthCredential, or None if unavailable. + """ diff --git a/src/google/adk/auth/credential_manager.py b/src/google/adk/auth/credential_manager.py index d037a43e6b..08d1184d4d 100644 --- a/src/google/adk/auth/credential_manager.py +++ b/src/google/adk/auth/credential_manager.py @@ -24,6 +24,7 @@ from ..utils.feature_decorator import experimental from .auth_credential import AuthCredential from .auth_credential import AuthCredentialTypes +from .auth_provider_registry import AuthProviderRegistry from .auth_schemes import AuthSchemeType from .auth_schemes import ExtendedOAuth2 from .auth_schemes import OpenIdConnectWithConfig @@ -81,6 +82,7 @@ def __init__( auth_config: AuthConfig, ): self._auth_config = auth_config + self._auth_provider_registry = AuthProviderRegistry() self._exchanger_registry = CredentialExchangerRegistry() self._refresher_registry = CredentialRefresherRegistry() self._discovery_manager = OAuth2DiscoveryManager() @@ -137,6 +139,29 @@ async def get_auth_credential( ) -> Optional[AuthCredential]: """Load and prepare authentication credential through a structured workflow.""" + # First, check if a registered auth provider is available before attempting + # to retrieve tokens natively. + provider = self._auth_provider_registry.get_provider( + self._auth_config.auth_scheme + ) + if provider: + provided_credential = await provider.get_auth_credential( + self._auth_config, context + ) + if not provided_credential: + raise ValueError("AuthProvider did not return a credential.") + # Handle special case for OAuth2 user consent flow. + if ( + provided_credential.oauth2 + and not provided_credential.oauth2.access_token + and provided_credential.oauth2.auth_uri + ): + # User consent is required. We save the auth uri and return None + # to signal the need for user consent. + self._auth_config.exchanged_auth_credential = provided_credential + return None + return provided_credential + # Step 1: Validate credential configuration await self._validate_credential() diff --git a/src/google/adk/features/_feature_registry.py b/src/google/adk/features/_feature_registry.py index 9b633c2d34..08f58adba9 100644 --- a/src/google/adk/features/_feature_registry.py +++ b/src/google/adk/features/_feature_registry.py @@ -49,6 +49,7 @@ class FeatureName(str, Enum): SPANNER_VECTOR_STORE = "SPANNER_VECTOR_STORE" TOOL_CONFIG = "TOOL_CONFIG" TOOL_CONFIRMATION = "TOOL_CONFIRMATION" + PLUGGABLE_AUTH = "PLUGGABLE_AUTH" class FeatureStage(Enum): @@ -150,6 +151,9 @@ class FeatureConfig: FeatureName.TOOL_CONFIRMATION: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), + FeatureName.PLUGGABLE_AUTH: FeatureConfig( + FeatureStage.EXPERIMENTAL, default_on=True + ), } # Track which experimental features have already warned (warn only once) diff --git a/tests/unittests/auth/test_auth_provider_registry.py b/tests/unittests/auth/test_auth_provider_registry.py new file mode 100644 index 0000000000..ca7b567e4c --- /dev/null +++ b/tests/unittests/auth/test_auth_provider_registry.py @@ -0,0 +1,59 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for the AuthProviderRegistry.""" + +from google.adk.auth.auth_provider_registry import AuthProviderRegistry +from google.adk.auth.base_auth_provider import BaseAuthProvider +from pydantic import BaseModel + + +class SchemeA(BaseModel): + pass + + +class SchemeB(BaseModel): + pass + + +class TestAuthProviderRegistry: + """Test cases for AuthProviderRegistry.""" + + def test_register_and_get_provider(self, mocker): + """Test registering and retrieving providers for different auth scheme types.""" + registry = AuthProviderRegistry() + provider_a = mocker.create_autospec(BaseAuthProvider, instance=True) + provider_b = mocker.create_autospec(BaseAuthProvider, instance=True) + + registry.register(SchemeA, provider_a) + registry.register(SchemeB, provider_b) + + assert registry.get_provider(SchemeA()) is provider_a + assert registry.get_provider(SchemeB()) is provider_b + + def test_get_unregistered_provider_returns_none(self): + """Test that get_provider returns None for unregistered scheme types.""" + registry = AuthProviderRegistry() + assert registry.get_provider(SchemeA()) is None + + def test_register_duplicate_type_overwrites_existing(self, mocker): + """Test that registering a provider for an existing type overwrites the previous one.""" + registry = AuthProviderRegistry() + provider_1 = mocker.create_autospec(BaseAuthProvider, instance=True) + provider_2 = mocker.create_autospec(BaseAuthProvider, instance=True) + + registry.register(SchemeA, provider_1) + registry.register(SchemeA, provider_2) + + assert registry.get_provider(SchemeA()) is provider_2 diff --git a/tests/unittests/auth/test_credential_manager.py b/tests/unittests/auth/test_credential_manager.py index 7000c9b8f8..0cb999e5d9 100644 --- a/tests/unittests/auth/test_credential_manager.py +++ b/tests/unittests/auth/test_credential_manager.py @@ -21,6 +21,7 @@ from fastapi.openapi.models import OAuthFlowAuthorizationCode from fastapi.openapi.models import OAuthFlowImplicit from fastapi.openapi.models import OAuthFlows +from google.adk.agents.callback_context import CallbackContext from google.adk.agents.invocation_context import InvocationContext from google.adk.agents.llm_agent import Agent from google.adk.auth.auth_credential import AuthCredential @@ -32,6 +33,7 @@ from google.adk.auth.auth_schemes import AuthSchemeType from google.adk.auth.auth_schemes import ExtendedOAuth2 from google.adk.auth.auth_tool import AuthConfig +from google.adk.auth.base_auth_provider import BaseAuthProvider from google.adk.auth.credential_manager import CredentialManager from google.adk.auth.credential_manager import ServiceAccountCredentialExchanger from google.adk.auth.oauth2_discovery import AuthorizationServerMetadata @@ -63,6 +65,107 @@ async def test_request_credential(self): tool_context.request_credential.assert_called_once_with(auth_config) + @pytest.mark.asyncio + async def test_get_auth_credential_uses_registered_provider(self, mocker): + """Test get_auth_credential uses registered provider if available.""" + credential = AuthCredential( + auth_type=AuthCredentialTypes.API_KEY, api_key="test-key" + ) + provider = mocker.AsyncMock(spec=BaseAuthProvider) + provider.get_auth_credential.return_value = credential + manager = CredentialManager( + mocker.Mock(spec=AuthConfig, auth_scheme="scheme") + ) + mocker.patch.object( + manager._auth_provider_registry, "get_provider", return_value=provider + ) + mock_context = mocker.Mock(spec=CallbackContext) + + received_credential = await manager.get_auth_credential(mock_context) + + assert received_credential is credential + + @pytest.mark.asyncio + async def test_get_auth_credential_fallback_when_no_provider(self, mocker): + """Test fallback to standard flow when no provider is registered.""" + api_key_cred = AuthCredential( + auth_type=AuthCredentialTypes.API_KEY, + api_key="fallback-key-no-provider", + ) + + auth_scheme = mocker.Mock(spec=AuthScheme) + auth_scheme.type_ = AuthSchemeType.apiKey + + auth_config = mocker.Mock(spec=AuthConfig) + auth_config.auth_scheme = auth_scheme + auth_config.raw_auth_credential = api_key_cred + auth_config.exchanged_auth_credential = None + + manager = CredentialManager(auth_config) + + # Setup registry to return None (no provider found) + mocker.patch.object( + manager._auth_provider_registry, "get_provider", return_value=None + ) + + result = await manager.get_auth_credential(mocker.Mock()) + + assert result == api_key_cred + + @pytest.mark.asyncio + async def test_get_auth_credential_raises_error_when_provider_returns_none( + self, mocker + ): + """Test that a ValueError is raised when registered provider returns None.""" + api_key_cred = AuthCredential( + auth_type=AuthCredentialTypes.API_KEY, api_key="fallback-key" + ) + + auth_scheme = mocker.Mock(spec=AuthScheme) + auth_scheme.type_ = AuthSchemeType.apiKey + + auth_config = mocker.Mock(spec=AuthConfig) + auth_config.auth_scheme = auth_scheme + auth_config.raw_auth_credential = api_key_cred + auth_config.exchanged_auth_credential = None + + manager = CredentialManager(auth_config) + + # Setup provider to return None + provider = mocker.AsyncMock(spec=BaseAuthProvider) + provider.get_auth_credential.return_value = None + mocker.patch.object( + manager._auth_provider_registry, "get_provider", return_value=provider + ) + mock_context = mocker.Mock(spec=CallbackContext) + + with pytest.raises( + ValueError, match="AuthProvider did not return a credential." + ): + await manager.get_auth_credential(mock_context) + + @pytest.mark.asyncio + async def test_get_auth_credential_triggers_user_consent_when_provider_returns_auth_uri( + self, mocker + ): + """Test get_auth_credential triggers user consent when provider returns oauth2 credential with auth_uri.""" + credential = mocker.Mock(spec=AuthCredential) + credential.oauth2 = mocker.Mock(auth_uri="http://auth", access_token=None) + + provider = mocker.AsyncMock(spec=BaseAuthProvider) + provider.get_auth_credential.return_value = credential + + manager = CredentialManager( + mocker.Mock(spec=AuthConfig, auth_scheme="scheme") + ) + mocker.patch.object( + manager._auth_provider_registry, "get_provider", return_value=provider + ) + mock_context = mocker.Mock(spec=CallbackContext) + + assert await manager.get_auth_credential(mock_context) is None + assert manager._auth_config.exchanged_auth_credential is credential + @pytest.mark.asyncio async def test_load_auth_credentials_success(self): """Test load_auth_credential with successful flow.""" @@ -70,6 +173,7 @@ async def test_load_auth_credentials_success(self): auth_config = Mock(spec=AuthConfig) auth_config.raw_auth_credential = None auth_config.exchanged_auth_credential = None + auth_config.auth_scheme = Mock(spec=AuthScheme) # Mock the credential that will be returned mock_credential = Mock(spec=AuthCredential) From 0ad4de73502b62e13fef17dc5d865e3e51e39024 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 10 Mar 2026 21:47:59 -0700 Subject: [PATCH 002/192] ADK changes PiperOrigin-RevId: 881782296 --- contributing/samples/gepa/OWNERS | 3 --- tests/integration/fixture/context_update_test/OWNERS | 1 - 2 files changed, 4 deletions(-) delete mode 100644 contributing/samples/gepa/OWNERS delete mode 100644 tests/integration/fixture/context_update_test/OWNERS diff --git a/contributing/samples/gepa/OWNERS b/contributing/samples/gepa/OWNERS deleted file mode 100644 index 36064e743f..0000000000 --- a/contributing/samples/gepa/OWNERS +++ /dev/null @@ -1,3 +0,0 @@ -aarg -jief -paulxz \ No newline at end of file diff --git a/tests/integration/fixture/context_update_test/OWNERS b/tests/integration/fixture/context_update_test/OWNERS deleted file mode 100644 index 02f72c401c..0000000000 --- a/tests/integration/fixture/context_update_test/OWNERS +++ /dev/null @@ -1 +0,0 @@ -gkcng From ab4b736807dabee65659486a68135d9f1530834c Mon Sep 17 00:00:00 2001 From: Luke Street Date: Wed, 11 Mar 2026 09:19:53 -0700 Subject: [PATCH 003/192] fix: Refactor type string update in Anthropic tool param conversion The _update_type_string function now recursively processes "properties" at any level of the schema, ensuring that all "type" fields within nested objects are correctly lowercased. This improves handling of complex Co-authored-by: George Weale PiperOrigin-RevId: 882050939 --- src/google/adk/models/anthropic_llm.py | 79 +++++-- tests/unittests/models/test_anthropic_llm.py | 214 +++++++++++++++++++ 2 files changed, 273 insertions(+), 20 deletions(-) diff --git a/src/google/adk/models/anthropic_llm.py b/src/google/adk/models/anthropic_llm.py index 45c80b1595..7dd050a1cb 100644 --- a/src/google/adk/models/anthropic_llm.py +++ b/src/google/adk/models/anthropic_llm.py @@ -17,6 +17,7 @@ from __future__ import annotations import base64 +import copy import dataclasses from functools import cached_property import json @@ -250,22 +251,60 @@ def message_to_generate_content_response( ) -def _update_type_string(value_dict: dict[str, Any]): - """Updates 'type' field to expected JSON schema format.""" - if "type" in value_dict: - value_dict["type"] = value_dict["type"].lower() - - if "items" in value_dict: - # 'type' field could exist for items as well, this would be the case if - # items represent primitive types. - _update_type_string(value_dict["items"]) - - if "properties" in value_dict["items"]: - # There could be properties as well on the items, especially if the items - # are complex object themselves. We recursively traverse each individual - # property as well and fix the "type" value. - for _, value in value_dict["items"]["properties"].items(): - _update_type_string(value) +def _update_type_string(value: Any): + """Lowercases nested JSON schema type strings for Anthropic compatibility.""" + if isinstance(value, list): + for item in value: + _update_type_string(item) + return + + if not isinstance(value, dict): + return + + schema_type = value.get("type") + if isinstance(schema_type, str): + value["type"] = schema_type.lower() + + for dict_key in ( + "$defs", + "defs", + "dependentSchemas", + "patternProperties", + "properties", + ): + child_dict = value.get(dict_key) + if isinstance(child_dict, dict): + for child_value in child_dict.values(): + _update_type_string(child_value) + + for single_key in ( + "additionalProperties", + "additional_properties", + "contains", + "else", + "if", + "items", + "not", + "propertyNames", + "then", + "unevaluatedProperties", + ): + child_value = value.get(single_key) + if isinstance(child_value, (dict, list)): + _update_type_string(child_value) + + for list_key in ( + "allOf", + "all_of", + "anyOf", + "any_of", + "oneOf", + "one_of", + "prefixItems", + ): + child_list = value.get(list_key) + if isinstance(child_list, list): + _update_type_string(child_list) def function_declaration_to_tool_param( @@ -276,16 +315,15 @@ def function_declaration_to_tool_param( # Use parameters_json_schema if available, otherwise convert from parameters if function_declaration.parameters_json_schema: - input_schema = function_declaration.parameters_json_schema + input_schema = copy.deepcopy(function_declaration.parameters_json_schema) + _update_type_string(input_schema) else: properties = {} required_params = [] if function_declaration.parameters: if function_declaration.parameters.properties: for key, value in function_declaration.parameters.properties.items(): - value_dict = value.model_dump(exclude_none=True) - _update_type_string(value_dict) - properties[key] = value_dict + properties[key] = value.model_dump(by_alias=True, exclude_none=True) if function_declaration.parameters.required: required_params = function_declaration.parameters.required @@ -295,6 +333,7 @@ def function_declaration_to_tool_param( } if required_params: input_schema["required"] = required_params + _update_type_string(input_schema) return anthropic_types.ToolParam( name=function_declaration.name, diff --git a/tests/unittests/models/test_anthropic_llm.py b/tests/unittests/models/test_anthropic_llm.py index 8273d74aac..3df9f567be 100644 --- a/tests/unittests/models/test_anthropic_llm.py +++ b/tests/unittests/models/test_anthropic_llm.py @@ -280,6 +280,220 @@ def test_supported_models(): }, ), ), + ( + "function_with_nested_object_parameter", + types.FunctionDeclaration( + name="update_profile", + description="Updates a user profile.", + parameters=types.Schema( + type=types.Type.OBJECT, + properties={ + "profile": types.Schema( + type=types.Type.OBJECT, + description="The profile data", + properties={ + "name": types.Schema( + type=types.Type.STRING, + description="Full name", + ), + "address": types.Schema( + type=types.Type.OBJECT, + description="Mailing address", + properties={ + "city": types.Schema( + type=types.Type.STRING, + ), + "state": types.Schema( + type=types.Type.STRING, + ), + }, + ), + }, + ), + }, + required=["profile"], + ), + ), + anthropic_types.ToolParam( + name="update_profile", + description="Updates a user profile.", + input_schema={ + "type": "object", + "properties": { + "profile": { + "type": "object", + "description": "The profile data", + "properties": { + "name": { + "type": "string", + "description": "Full name", + }, + "address": { + "type": "object", + "description": "Mailing address", + "properties": { + "city": {"type": "string"}, + "state": {"type": "string"}, + }, + }, + }, + }, + }, + "required": ["profile"], + }, + ), + ), + ( + "function_with_any_of_parameter", + types.FunctionDeclaration( + name="set_value", + description="Sets a value that can be a string or integer.", + parameters=types.Schema( + type=types.Type.OBJECT, + properties={ + "value": types.Schema( + description="A string or integer value", + any_of=[ + types.Schema(type=types.Type.STRING), + types.Schema(type=types.Type.INTEGER), + ], + ), + }, + required=["value"], + ), + ), + anthropic_types.ToolParam( + name="set_value", + description="Sets a value that can be a string or integer.", + input_schema={ + "type": "object", + "properties": { + "value": { + "description": "A string or integer value", + "anyOf": [ + {"type": "string"}, + {"type": "integer"}, + ], + }, + }, + "required": ["value"], + }, + ), + ), + ( + "function_with_additional_properties_parameter", + types.FunctionDeclaration( + name="store_metadata", + description="Stores arbitrary key-value metadata.", + parameters=types.Schema( + type=types.Type.OBJECT, + properties={ + "metadata": types.Schema( + type=types.Type.OBJECT, + description="Arbitrary metadata", + additional_properties=types.Schema( + type=types.Type.STRING, + ), + ), + }, + required=["metadata"], + ), + ), + anthropic_types.ToolParam( + name="store_metadata", + description="Stores arbitrary key-value metadata.", + input_schema={ + "type": "object", + "properties": { + "metadata": { + "type": "object", + "description": "Arbitrary metadata", + "additionalProperties": {"type": "string"}, + }, + }, + "required": ["metadata"], + }, + ), + ), + ( + "function_with_parameters_json_schema_combinators", + types.FunctionDeclaration( + name="validate_payload", + description="Validates a payload with schema combinators.", + parameters_json_schema={ + "type": "OBJECT", + "properties": { + "choice": { + "oneOf": [ + {"type": "STRING"}, + {"type": "INTEGER"}, + ], + }, + "config": { + "allOf": [ + { + "type": "OBJECT", + "properties": { + "enabled": {"type": "BOOLEAN"}, + }, + }, + ], + }, + "blocked": { + "not": { + "type": "NULL", + }, + }, + "tuple_value": { + "type": "ARRAY", + "items": [ + {"type": "STRING"}, + {"type": "INTEGER"}, + ], + }, + }, + "required": ["choice"], + }, + ), + anthropic_types.ToolParam( + name="validate_payload", + description="Validates a payload with schema combinators.", + input_schema={ + "type": "object", + "properties": { + "choice": { + "oneOf": [ + {"type": "string"}, + {"type": "integer"}, + ], + }, + "config": { + "allOf": [ + { + "type": "object", + "properties": { + "enabled": {"type": "boolean"}, + }, + }, + ], + }, + "blocked": { + "not": { + "type": "null", + }, + }, + "tuple_value": { + "type": "array", + "items": [ + {"type": "string"}, + {"type": "integer"}, + ], + }, + }, + "required": ["choice"], + }, + ), + ), ( "function_with_parameters_json_schema", types.FunctionDeclaration( From 3117446293d30039c2f21f3d17a64a456c42c47d Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Wed, 11 Mar 2026 12:26:33 -0700 Subject: [PATCH 004/192] feat: Added tracking headers for ADK CLI command to Agent Engine PiperOrigin-RevId: 882138997 --- src/google/adk/cli/cli_deploy.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/google/adk/cli/cli_deploy.py b/src/google/adk/cli/cli_deploy.py index 465ca6c3e1..9d1cbc0d40 100644 --- a/src/google/adk/cli/cli_deploy.py +++ b/src/google/adk/cli/cli_deploy.py @@ -1061,12 +1061,20 @@ def to_agent_engine( import vertexai + from ..utils._google_client_headers import get_tracking_headers + if project and region: click.echo('Initializing Vertex AI...') - client = vertexai.Client(project=project, location=region) + client = vertexai.Client( + project=project, + location=region, + http_options={'headers': get_tracking_headers()}, + ) elif api_key: click.echo('Initializing Vertex AI in Express Mode with API key...') - client = vertexai.Client(api_key=api_key) + client = vertexai.Client( + api_key=api_key, http_options={'headers': get_tracking_headers()} + ) else: click.echo( 'No project/region or api_key provided. ' From 22799c0833569753021078f7bd8dcd11ece562fe Mon Sep 17 00:00:00 2001 From: Yifan Wang Date: Wed, 11 Mar 2026 14:15:50 -0700 Subject: [PATCH 005/192] chore: update adk web, see changelog [web] section Co-authored-by: Yifan Wang PiperOrigin-RevId: 882192675 --- .../{chunk-M3M3P5CP.js => chunk-5MGPUGAY.js} | 2 +- .../{chunk-CHLIPOEM.js => chunk-66RH7XMI.js} | 2 +- .../{chunk-XB75PFJS.js => chunk-AF27AUNK.js} | 2 +- .../{chunk-UATSMTT5.js => chunk-ARP3QDVK.js} | 2 +- .../{chunk-AK5ESGDJ.js => chunk-BI6TV3NL.js} | 2 +- .../{chunk-RLBEOMT4.js => chunk-FZZPD3K2.js} | 2 +- .../{chunk-4MSGFQCD.js => chunk-GFARMTUE.js} | 2 +- .../{chunk-HYLIZOX5.js => chunk-GLGQFQO2.js} | 2 +- .../{chunk-RUWE7IJV.js => chunk-MBYWPZQV.js} | 2 +- .../{chunk-HAQR6HJ6.js => chunk-N3RKSFBU.js} | 2 +- .../{chunk-VPVAD56Y.js => chunk-R2IMOXM4.js} | 2 +- .../{chunk-BX7YU7E6.js => chunk-RGCH6K7F.js} | 36 +- .../{chunk-BWFUMX67.js => chunk-ROC2DVJ2.js} | 2 +- .../{chunk-IXLBQLFI.js => chunk-SGO5R2ED.js} | 2 +- .../{chunk-A6XEKK5I.js => chunk-YI5XBR2B.js} | 2 +- .../{chunk-7MR4QDTO.js => chunk-ZLSAKILO.js} | 2 +- src/google/adk/cli/browser/index.html | 10 +- src/google/adk/cli/browser/main-7SJG752M.js | 4133 ++++++++++++++++ src/google/adk/cli/browser/main-QQBY56NS.js | 4134 ----------------- .../adk/cli/browser/styles-SI5RXIFC.css | 1 - .../adk/cli/browser/styles-YY6V3TJU.css | 1 + 21 files changed, 4172 insertions(+), 4173 deletions(-) rename src/google/adk/cli/browser/{chunk-M3M3P5CP.js => chunk-5MGPUGAY.js} (95%) rename src/google/adk/cli/browser/{chunk-CHLIPOEM.js => chunk-66RH7XMI.js} (93%) rename src/google/adk/cli/browser/{chunk-XB75PFJS.js => chunk-AF27AUNK.js} (95%) rename src/google/adk/cli/browser/{chunk-UATSMTT5.js => chunk-ARP3QDVK.js} (96%) rename src/google/adk/cli/browser/{chunk-AK5ESGDJ.js => chunk-BI6TV3NL.js} (93%) rename src/google/adk/cli/browser/{chunk-RLBEOMT4.js => chunk-FZZPD3K2.js} (97%) rename src/google/adk/cli/browser/{chunk-4MSGFQCD.js => chunk-GFARMTUE.js} (93%) rename src/google/adk/cli/browser/{chunk-HYLIZOX5.js => chunk-GLGQFQO2.js} (84%) rename src/google/adk/cli/browser/{chunk-RUWE7IJV.js => chunk-MBYWPZQV.js} (96%) rename src/google/adk/cli/browser/{chunk-HAQR6HJ6.js => chunk-N3RKSFBU.js} (79%) rename src/google/adk/cli/browser/{chunk-VPVAD56Y.js => chunk-R2IMOXM4.js} (89%) rename src/google/adk/cli/browser/{chunk-BX7YU7E6.js => chunk-RGCH6K7F.js} (90%) rename src/google/adk/cli/browser/{chunk-BWFUMX67.js => chunk-ROC2DVJ2.js} (97%) rename src/google/adk/cli/browser/{chunk-IXLBQLFI.js => chunk-SGO5R2ED.js} (93%) rename src/google/adk/cli/browser/{chunk-A6XEKK5I.js => chunk-YI5XBR2B.js} (94%) rename src/google/adk/cli/browser/{chunk-7MR4QDTO.js => chunk-ZLSAKILO.js} (95%) create mode 100644 src/google/adk/cli/browser/main-7SJG752M.js delete mode 100644 src/google/adk/cli/browser/main-QQBY56NS.js delete mode 100644 src/google/adk/cli/browser/styles-SI5RXIFC.css create mode 100644 src/google/adk/cli/browser/styles-YY6V3TJU.css diff --git a/src/google/adk/cli/browser/chunk-M3M3P5CP.js b/src/google/adk/cli/browser/chunk-5MGPUGAY.js similarity index 95% rename from src/google/adk/cli/browser/chunk-M3M3P5CP.js rename to src/google/adk/cli/browser/chunk-5MGPUGAY.js index f83cb5b679..4ca3c6da60 100644 --- a/src/google/adk/cli/browser/chunk-M3M3P5CP.js +++ b/src/google/adk/cli/browser/chunk-5MGPUGAY.js @@ -1 +1 @@ -import{$b as b,Bb as l,Bc as c,Cb as r,Da as m,Ib as d,Kb as h,Qa as o,Yb as v,Zb as a,_b as g,ab as p,eb as u,md as f,vc as s}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var E=(()=>{class i extends f{value=c.required();label=c.required();inputChecked=s(()=>super.resolvePrimitive(this.value())??!1);resolvedLabel=s(()=>super.resolvePrimitive(this.label()));inputId=super.getUniqueId("a2ui-checkbox");handleChange(t){let n=this.value()?.path;!(t.target instanceof HTMLInputElement)||!n||this.processor.setData(this.component(),n,t.target.checked,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(i)))(e||i)}})();static \u0275cmp=p({type:i,selectors:[["a2ui-checkbox"]],inputs:{value:[1,"value"],label:[1,"label"]},features:[u],decls:4,vars:12,consts:[["autocomplete","off","type","checkbox",3,"change","id","checked"],[3,"htmlFor"]],template:function(n,e){n&1&&(l(0,"section")(1,"input",0),h("change",function(k){return e.handleChange(k)}),r(),l(2,"label",1),g(3),r()()),n&2&&(v(e.theme.additionalStyles==null?null:e.theme.additionalStyles.CheckBox),a(e.theme.components.CheckBox.container),o(),a(e.theme.components.CheckBox.element),d("id",e.inputId)("checked",e.inputChecked()),o(),a(e.theme.components.CheckBox.label),d("htmlFor",e.inputId),o(),b(e.resolvedLabel()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}input[_ngcontent-%COMP%]{display:block;width:100%}"]})}return i})();export{E as Checkbox}; +import{$b as b,Bb as l,Bc as c,Cb as r,Da as m,Ib as d,Kb as h,Qa as o,Yb as v,Zb as a,_b as g,ab as p,eb as u,md as f,vc as s}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";var E=(()=>{class i extends f{value=c.required();label=c.required();inputChecked=s(()=>super.resolvePrimitive(this.value())??!1);resolvedLabel=s(()=>super.resolvePrimitive(this.label()));inputId=super.getUniqueId("a2ui-checkbox");handleChange(t){let n=this.value()?.path;!(t.target instanceof HTMLInputElement)||!n||this.processor.setData(this.component(),n,t.target.checked,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(i)))(e||i)}})();static \u0275cmp=p({type:i,selectors:[["a2ui-checkbox"]],inputs:{value:[1,"value"],label:[1,"label"]},features:[u],decls:4,vars:12,consts:[["autocomplete","off","type","checkbox",3,"change","id","checked"],[3,"htmlFor"]],template:function(n,e){n&1&&(l(0,"section")(1,"input",0),h("change",function(k){return e.handleChange(k)}),r(),l(2,"label",1),g(3),r()()),n&2&&(v(e.theme.additionalStyles==null?null:e.theme.additionalStyles.CheckBox),a(e.theme.components.CheckBox.container),o(),a(e.theme.components.CheckBox.element),d("id",e.inputId)("checked",e.inputChecked()),o(),a(e.theme.components.CheckBox.label),d("htmlFor",e.inputId),o(),b(e.resolvedLabel()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}input[_ngcontent-%COMP%]{display:block;width:100%}"]})}return i})();export{E as Checkbox}; diff --git a/src/google/adk/cli/browser/chunk-CHLIPOEM.js b/src/google/adk/cli/browser/chunk-66RH7XMI.js similarity index 93% rename from src/google/adk/cli/browser/chunk-CHLIPOEM.js rename to src/google/adk/cli/browser/chunk-66RH7XMI.js index c793b46fd7..a6bcdd39ef 100644 --- a/src/google/adk/cli/browser/chunk-CHLIPOEM.js +++ b/src/google/adk/cli/browser/chunk-66RH7XMI.js @@ -1 +1 @@ -import{Bc as h,Da as o,Gb as u,Jb as p,Qa as a,Yb as m,Zb as f,ab as r,eb as c,md as y,nd as g,xb as s,yb as l,zb as d}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var _=(()=>{class n extends y{action=h.required();handleClick(){let t=this.action();t&&super.sendAction(t)}static \u0275fac=(()=>{let t;return function(e){return(t||(t=o(n)))(e||n)}})();static \u0275cmp=r({type:n,selectors:[["a2ui-button"]],inputs:{action:[1,"action"]},features:[c],decls:2,vars:6,consts:[[3,"click"],["a2ui-renderer","",3,"surfaceId","component"]],template:function(i,e){i&1&&(l(0,"button",0),p("click",function(){return e.handleClick()}),u(1,1),d()),i&2&&(m(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Button),f(e.theme.components.Button),a(),s("surfaceId",e.surfaceId())("component",e.component().properties.child))},dependencies:[g],styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0}"]})}return n})();export{_ as Button}; +import{Bc as h,Da as o,Gb as u,Jb as p,Qa as a,Yb as m,Zb as f,ab as r,eb as c,md as y,nd as g,xb as s,yb as l,zb as d}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";var _=(()=>{class n extends y{action=h.required();handleClick(){let t=this.action();t&&super.sendAction(t)}static \u0275fac=(()=>{let t;return function(e){return(t||(t=o(n)))(e||n)}})();static \u0275cmp=r({type:n,selectors:[["a2ui-button"]],inputs:{action:[1,"action"]},features:[c],decls:2,vars:6,consts:[[3,"click"],["a2ui-renderer","",3,"surfaceId","component"]],template:function(i,e){i&1&&(l(0,"button",0),p("click",function(){return e.handleClick()}),u(1,1),d()),i&2&&(m(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Button),f(e.theme.components.Button),a(),s("surfaceId",e.surfaceId())("component",e.component().properties.child))},dependencies:[g],styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0}"]})}return n})();export{_ as Button}; diff --git a/src/google/adk/cli/browser/chunk-XB75PFJS.js b/src/google/adk/cli/browser/chunk-AF27AUNK.js similarity index 95% rename from src/google/adk/cli/browser/chunk-XB75PFJS.js rename to src/google/adk/cli/browser/chunk-AF27AUNK.js index 2c2d9b8430..9dd976b1f9 100644 --- a/src/google/adk/cli/browser/chunk-XB75PFJS.js +++ b/src/google/adk/cli/browser/chunk-AF27AUNK.js @@ -1 +1 @@ -import{Bb as r,Bc as n,Cb as u,Da as m,Ib as d,Kb as c,Qa as l,Yb as v,Zb as o,_b as g,ab as s,ac as f,eb as p,md as b,vc as h}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var M=["a2ui-slider",""],E=(()=>{class a extends b{value=n.required();label=n("");minValue=n.required();maxValue=n.required();inputId=super.getUniqueId("a2ui-slider");resolvedValue=h(()=>super.resolvePrimitive(this.value())??0);handleInput(t){let i=this.value()?.path;!(t.target instanceof HTMLInputElement)||!i||this.processor.setData(this.component(),i,t.target.valueAsNumber,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(a)))(e||a)}})();static \u0275cmp=s({type:a,selectors:[["","a2ui-slider",""]],inputs:{value:[1,"value"],label:[1,"label"],minValue:[1,"minValue"],maxValue:[1,"maxValue"]},features:[p],attrs:M,decls:4,vars:14,consts:[[3,"for"],["autocomplete","off","type","range",3,"input","value","min","max","id"]],template:function(i,e){i&1&&(r(0,"section")(1,"label",0),g(2),u(),r(3,"input",1),c("input",function(y){return e.handleInput(y)}),u()()),i&2&&(o(e.theme.components.Slider.container),l(),o(e.theme.components.Slider.label),d("htmlFor",e.inputId),l(),f(" ",e.label()," "),l(),v(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Slider),o(e.theme.components.Slider.element),d("value",e.resolvedValue())("min",e.minValue())("max",e.maxValue())("id",e.inputId))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight)}input[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return a})();export{E as Slider}; +import{Bb as r,Bc as n,Cb as u,Da as m,Ib as d,Kb as c,Qa as l,Yb as v,Zb as o,_b as g,ab as s,ac as f,eb as p,md as b,vc as h}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";var M=["a2ui-slider",""],E=(()=>{class a extends b{value=n.required();label=n("");minValue=n.required();maxValue=n.required();inputId=super.getUniqueId("a2ui-slider");resolvedValue=h(()=>super.resolvePrimitive(this.value())??0);handleInput(t){let i=this.value()?.path;!(t.target instanceof HTMLInputElement)||!i||this.processor.setData(this.component(),i,t.target.valueAsNumber,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(a)))(e||a)}})();static \u0275cmp=s({type:a,selectors:[["","a2ui-slider",""]],inputs:{value:[1,"value"],label:[1,"label"],minValue:[1,"minValue"],maxValue:[1,"maxValue"]},features:[p],attrs:M,decls:4,vars:14,consts:[[3,"for"],["autocomplete","off","type","range",3,"input","value","min","max","id"]],template:function(i,e){i&1&&(r(0,"section")(1,"label",0),g(2),u(),r(3,"input",1),c("input",function(y){return e.handleInput(y)}),u()()),i&2&&(o(e.theme.components.Slider.container),l(),o(e.theme.components.Slider.label),d("htmlFor",e.inputId),l(),f(" ",e.label()," "),l(),v(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Slider),o(e.theme.components.Slider.element),d("value",e.resolvedValue())("min",e.minValue())("max",e.maxValue())("id",e.inputId))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight)}input[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return a})();export{E as Slider}; diff --git a/src/google/adk/cli/browser/chunk-UATSMTT5.js b/src/google/adk/cli/browser/chunk-ARP3QDVK.js similarity index 96% rename from src/google/adk/cli/browser/chunk-UATSMTT5.js rename to src/google/adk/cli/browser/chunk-ARP3QDVK.js index 9a18a187be..f46a390dde 100644 --- a/src/google/adk/cli/browser/chunk-UATSMTT5.js +++ b/src/google/adk/cli/browser/chunk-ARP3QDVK.js @@ -1 +1 @@ -import{$b as C,Bb as l,Bc as r,Cb as s,Da as b,Hb as x,Ib as p,Kb as y,Lb as M,Qa as o,Yb as _,Zb as a,_b as T,ab as g,eb as v,gc as F,hc as I,ic as P,md as D,na as m,oa as c,qb as f,sb as h,vc as u}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function E(n,O){if(n&1&&(l(0,"label",2),T(1),s()),n&2){let t=M(),i=P(0);a(t.theme.components.TextField.label),p("htmlFor",t.inputId),o(),C(i)}}var k=(()=>{class n extends D{text=r.required();label=r.required();inputType=r.required();inputValue=u(()=>super.resolvePrimitive(this.text())||"");resolvedLabel=u(()=>super.resolvePrimitive(this.label()));inputId=super.getUniqueId("a2ui-input");handleInput(t){let i=this.text()?.path;!(t.target instanceof HTMLInputElement)||!i||this.processor.setData(this.component(),i,t.target.value,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=b(n)))(e||n)}})();static \u0275cmp=g({type:n,selectors:[["a2ui-text-field"]],inputs:{text:[1,"text"],label:[1,"label"],inputType:[1,"inputType"]},features:[v],decls:4,vars:11,consts:[[3,"for","class"],["autocomplete","off","placeholder","Please enter a value",3,"input","id","value","type"],[3,"for"]],template:function(i,e){if(i&1){let d=x();F(0),l(1,"section"),f(2,E,2,4,"label",0),l(3,"input",1),y("input",function(L){return m(d),c(e.handleInput(L))}),s()()}if(i&2){let d=I(e.resolvedLabel());o(),a(e.theme.components.TextField.container),o(),h(d?2:-1),o(),_(e.theme.additionalStyles==null?null:e.theme.additionalStyles.TextField),a(e.theme.components.TextField.element),p("id",e.inputId)("value",e.inputValue())("type",e.inputType()==="number"?"number":"text")}},styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%], input[_ngcontent-%COMP%], label[_ngcontent-%COMP%]{box-sizing:border-box}input[_ngcontent-%COMP%]{display:block;width:100%}label[_ngcontent-%COMP%]{display:block;margin-bottom:4px}"]})}return n})();export{k as TextField}; +import{$b as C,Bb as l,Bc as r,Cb as s,Da as b,Hb as x,Ib as p,Kb as y,Lb as M,Qa as o,Yb as _,Zb as a,_b as T,ab as g,eb as v,gc as F,hc as I,ic as P,md as D,na as m,oa as c,qb as f,sb as h,vc as u}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";function E(n,O){if(n&1&&(l(0,"label",2),T(1),s()),n&2){let t=M(),i=P(0);a(t.theme.components.TextField.label),p("htmlFor",t.inputId),o(),C(i)}}var k=(()=>{class n extends D{text=r.required();label=r.required();inputType=r.required();inputValue=u(()=>super.resolvePrimitive(this.text())||"");resolvedLabel=u(()=>super.resolvePrimitive(this.label()));inputId=super.getUniqueId("a2ui-input");handleInput(t){let i=this.text()?.path;!(t.target instanceof HTMLInputElement)||!i||this.processor.setData(this.component(),i,t.target.value,this.surfaceId())}static \u0275fac=(()=>{let t;return function(e){return(t||(t=b(n)))(e||n)}})();static \u0275cmp=g({type:n,selectors:[["a2ui-text-field"]],inputs:{text:[1,"text"],label:[1,"label"],inputType:[1,"inputType"]},features:[v],decls:4,vars:11,consts:[[3,"for","class"],["autocomplete","off","placeholder","Please enter a value",3,"input","id","value","type"],[3,"for"]],template:function(i,e){if(i&1){let d=x();F(0),l(1,"section"),f(2,E,2,4,"label",0),l(3,"input",1),y("input",function(L){return m(d),c(e.handleInput(L))}),s()()}if(i&2){let d=I(e.resolvedLabel());o(),a(e.theme.components.TextField.container),o(),h(d?2:-1),o(),_(e.theme.additionalStyles==null?null:e.theme.additionalStyles.TextField),a(e.theme.components.TextField.element),p("id",e.inputId)("value",e.inputValue())("type",e.inputType()==="number"?"number":"text")}},styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%], input[_ngcontent-%COMP%], label[_ngcontent-%COMP%]{box-sizing:border-box}input[_ngcontent-%COMP%]{display:block;width:100%}label[_ngcontent-%COMP%]{display:block;margin-bottom:4px}"]})}return n})();export{k as TextField}; diff --git a/src/google/adk/cli/browser/chunk-AK5ESGDJ.js b/src/google/adk/cli/browser/chunk-BI6TV3NL.js similarity index 93% rename from src/google/adk/cli/browser/chunk-AK5ESGDJ.js rename to src/google/adk/cli/browser/chunk-BI6TV3NL.js index 29ffacad65..f50dad0856 100644 --- a/src/google/adk/cli/browser/chunk-AK5ESGDJ.js +++ b/src/google/adk/cli/browser/chunk-BI6TV3NL.js @@ -1 +1 @@ -import{Bb as c,Bc as M,Cb as u,Da as r,Db as m,Ib as p,Lb as v,Qa as n,Yb as f,Zb as y,ab as l,eb as d,gc as g,hc as h,ic as x,md as _,qb as a,sb as s,vc as C}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function D(e,P){if(e&1&&(c(0,"section"),m(1,"audio",1),u()),e&2){let t=v(),o=x(0);f(t.theme.additionalStyles==null?null:t.theme.additionalStyles.AudioPlayer),y(t.theme.components.AudioPlayer),n(),p("src",o)}}var w=(()=>{class e extends _{url=M.required();resolvedUrl=C(()=>this.resolvePrimitive(this.url()));static \u0275fac=(()=>{let t;return function(i){return(t||(t=r(e)))(i||e)}})();static \u0275cmp=l({type:e,selectors:[["a2ui-audio"]],inputs:{url:[1,"url"]},features:[d],decls:2,vars:2,consts:[[3,"class","style"],["controls","",3,"src"]],template:function(o,i){if(o&1&&(g(0),a(1,D,2,5,"section",0)),o&2){let b=h(i.resolvedUrl());n(),s(b?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}audio[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return e})();export{w as Audio}; +import{Bb as c,Bc as M,Cb as u,Da as r,Db as m,Ib as p,Lb as v,Qa as n,Yb as f,Zb as y,ab as l,eb as d,gc as g,hc as h,ic as x,md as _,qb as a,sb as s,vc as C}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";function D(e,P){if(e&1&&(c(0,"section"),m(1,"audio",1),u()),e&2){let t=v(),o=x(0);f(t.theme.additionalStyles==null?null:t.theme.additionalStyles.AudioPlayer),y(t.theme.components.AudioPlayer),n(),p("src",o)}}var w=(()=>{class e extends _{url=M.required();resolvedUrl=C(()=>this.resolvePrimitive(this.url()));static \u0275fac=(()=>{let t;return function(i){return(t||(t=r(e)))(i||e)}})();static \u0275cmp=l({type:e,selectors:[["a2ui-audio"]],inputs:{url:[1,"url"]},features:[d],decls:2,vars:2,consts:[[3,"class","style"],["controls","",3,"src"]],template:function(o,i){if(o&1&&(g(0),a(1,D,2,5,"section",0)),o&2){let b=h(i.resolvedUrl());n(),s(b?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}audio[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return e})();export{w as Audio}; diff --git a/src/google/adk/cli/browser/chunk-RLBEOMT4.js b/src/google/adk/cli/browser/chunk-FZZPD3K2.js similarity index 97% rename from src/google/adk/cli/browser/chunk-RLBEOMT4.js rename to src/google/adk/cli/browser/chunk-FZZPD3K2.js index 1379101957..e6a2e64aa7 100644 --- a/src/google/adk/cli/browser/chunk-RLBEOMT4.js +++ b/src/google/adk/cli/browser/chunk-FZZPD3K2.js @@ -1 +1 @@ -import{$b as M,Bb as s,Bc as l,Cb as m,Da as g,Ib as d,Kb as y,Qa as u,Yb as T,Zb as r,_b as I,ab as f,eb as D,md as N,ob as v,vc as o}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var S=(()=>{class i extends N{value=l.required();enableDate=l.required();enableTime=l.required();inputId=super.getUniqueId("a2ui-datetime-input");inputType=o(()=>{let t=this.enableDate(),n=this.enableTime();return t&&n?"datetime-local":t?"date":n?"time":"datetime-local"});label=o(()=>{let t=this.inputType();return t==="date"?"Date":t==="time"?"Time":"Date & Time"});inputValue=o(()=>{let t=this.inputType(),n=super.resolvePrimitive(this.value())||"",e=n?new Date(n):null;if(!e||isNaN(e.getTime()))return"";let p=this.padNumber(e.getFullYear()),a=this.padNumber(e.getMonth()),c=this.padNumber(e.getDate()),b=this.padNumber(e.getHours()),h=this.padNumber(e.getMinutes());return t==="date"?`${p}-${a}-${c}`:t==="time"?`${b}:${h}`:`${p}-${a}-${c}T${b}:${h}`});handleInput(t){let n=this.value()?.path;!(t.target instanceof HTMLInputElement)||!n||this.processor.setData(this.component(),n,t.target.value,this.surfaceId())}padNumber(t){return t.toString().padStart(2,"0")}static \u0275fac=(()=>{let t;return function(e){return(t||(t=g(i)))(e||i)}})();static \u0275cmp=f({type:i,selectors:[["a2ui-datetime-input"]],inputs:{value:[1,"value"],enableDate:[1,"enableDate"],enableTime:[1,"enableTime"]},features:[D],decls:4,vars:13,consts:[[3,"for"],["autocomplete","off",3,"input","id","value"]],template:function(n,e){n&1&&(s(0,"section")(1,"label",0),I(2),m(),s(3,"input",1),y("input",function(a){return e.handleInput(a)}),m()()),n&2&&(r(e.theme.components.DateTimeInput.container),u(),r(e.theme.components.DateTimeInput.label),d("htmlFor",e.inputId),u(),M(e.label()),u(),T(e.theme.additionalStyles==null?null:e.theme.additionalStyles.DateTimeInput),r(e.theme.components.DateTimeInput.element),d("id",e.inputId)("value",e.inputValue()),v("type",e.inputType()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}input[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return i})();export{S as DatetimeInput}; +import{$b as M,Bb as s,Bc as l,Cb as m,Da as g,Ib as d,Kb as y,Qa as u,Yb as T,Zb as r,_b as I,ab as f,eb as D,md as N,ob as v,vc as o}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";var S=(()=>{class i extends N{value=l.required();enableDate=l.required();enableTime=l.required();inputId=super.getUniqueId("a2ui-datetime-input");inputType=o(()=>{let t=this.enableDate(),n=this.enableTime();return t&&n?"datetime-local":t?"date":n?"time":"datetime-local"});label=o(()=>{let t=this.inputType();return t==="date"?"Date":t==="time"?"Time":"Date & Time"});inputValue=o(()=>{let t=this.inputType(),n=super.resolvePrimitive(this.value())||"",e=n?new Date(n):null;if(!e||isNaN(e.getTime()))return"";let p=this.padNumber(e.getFullYear()),a=this.padNumber(e.getMonth()),c=this.padNumber(e.getDate()),b=this.padNumber(e.getHours()),h=this.padNumber(e.getMinutes());return t==="date"?`${p}-${a}-${c}`:t==="time"?`${b}:${h}`:`${p}-${a}-${c}T${b}:${h}`});handleInput(t){let n=this.value()?.path;!(t.target instanceof HTMLInputElement)||!n||this.processor.setData(this.component(),n,t.target.value,this.surfaceId())}padNumber(t){return t.toString().padStart(2,"0")}static \u0275fac=(()=>{let t;return function(e){return(t||(t=g(i)))(e||i)}})();static \u0275cmp=f({type:i,selectors:[["a2ui-datetime-input"]],inputs:{value:[1,"value"],enableDate:[1,"enableDate"],enableTime:[1,"enableTime"]},features:[D],decls:4,vars:13,consts:[[3,"for"],["autocomplete","off",3,"input","id","value"]],template:function(n,e){n&1&&(s(0,"section")(1,"label",0),I(2),m(),s(3,"input",1),y("input",function(a){return e.handleInput(a)}),m()()),n&2&&(r(e.theme.components.DateTimeInput.container),u(),r(e.theme.components.DateTimeInput.label),d("htmlFor",e.inputId),u(),M(e.label()),u(),T(e.theme.additionalStyles==null?null:e.theme.additionalStyles.DateTimeInput),r(e.theme.components.DateTimeInput.element),d("id",e.inputId)("value",e.inputValue()),v("type",e.inputType()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}input[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return i})();export{S as DatetimeInput}; diff --git a/src/google/adk/cli/browser/chunk-4MSGFQCD.js b/src/google/adk/cli/browser/chunk-GFARMTUE.js similarity index 93% rename from src/google/adk/cli/browser/chunk-4MSGFQCD.js rename to src/google/adk/cli/browser/chunk-GFARMTUE.js index 644f65e1d1..23f8108152 100644 --- a/src/google/adk/cli/browser/chunk-4MSGFQCD.js +++ b/src/google/adk/cli/browser/chunk-GFARMTUE.js @@ -1 +1 @@ -import{$b as y,Bb as m,Bc as I,Cb as d,Da as a,Lb as p,Qa as i,Yb as u,Zb as v,_b as f,ab as s,eb as r,gc as g,hc as h,ic as x,md as M,qb as c,sb as l,vc as C}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function _(e,D){if(e&1&&(m(0,"section")(1,"span",1),f(2),d()()),e&2){let t=p(),n=x(0);u(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Icon),v(t.theme.components.Icon),i(2),y(n)}}var S=(()=>{class e extends M{name=I.required();resolvedName=C(()=>this.resolvePrimitive(this.name()));static \u0275fac=(()=>{let t;return function(o){return(t||(t=a(e)))(o||e)}})();static \u0275cmp=s({type:e,selectors:[["a2ui-icon"]],inputs:{name:[1,"name"]},features:[r],decls:2,vars:2,consts:[[3,"class","style"],[1,"g-icon"]],template:function(n,o){if(n&1&&(g(0),c(1,_,3,5,"section",0)),n&2){let N=h(o.resolvedName());i(),l(N?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}"]})}return e})();export{S as Icon}; +import{$b as y,Bb as m,Bc as I,Cb as d,Da as a,Lb as p,Qa as i,Yb as u,Zb as v,_b as f,ab as s,eb as r,gc as g,hc as h,ic as x,md as M,qb as c,sb as l,vc as C}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";function _(e,D){if(e&1&&(m(0,"section")(1,"span",1),f(2),d()()),e&2){let t=p(),n=x(0);u(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Icon),v(t.theme.components.Icon),i(2),y(n)}}var S=(()=>{class e extends M{name=I.required();resolvedName=C(()=>this.resolvePrimitive(this.name()));static \u0275fac=(()=>{let t;return function(o){return(t||(t=a(e)))(o||e)}})();static \u0275cmp=s({type:e,selectors:[["a2ui-icon"]],inputs:{name:[1,"name"]},features:[r],decls:2,vars:2,consts:[[3,"class","style"],[1,"g-icon"]],template:function(n,o){if(n&1&&(g(0),c(1,_,3,5,"section",0)),n&2){let N=h(o.resolvedName());i(),l(N?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}"]})}return e})();export{S as Icon}; diff --git a/src/google/adk/cli/browser/chunk-HYLIZOX5.js b/src/google/adk/cli/browser/chunk-GLGQFQO2.js similarity index 84% rename from src/google/adk/cli/browser/chunk-HYLIZOX5.js rename to src/google/adk/cli/browser/chunk-GLGQFQO2.js index 460e433783..56bb9bea07 100644 --- a/src/google/adk/cli/browser/chunk-HYLIZOX5.js +++ b/src/google/adk/cli/browser/chunk-GLGQFQO2.js @@ -1 +1 @@ -import{Bc as w,Da as _,Gb as I,Hb as g,Jb as T,Lb as c,Qa as a,Yb as C,Zb as r,_b as M,ab as f,ac as D,bd as E,eb as h,gc as F,hc as k,ic as S,md as L,na as p,nd as N,oa as u,ub as x,vb as v,vc as $,wb as y,xb as d,yb as l,za as b,zb as o}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function B(n,m){if(n&1){let t=g();l(0,"button",2),T("click",function(){let e=p(t).$index,i=c();return u(i.selectedIndex.set(e))}),M(1),o()}if(n&2){let t=m.$implicit,s=m.$index,e=c(),i=S(0);r(e.buttonClasses()[i]),d("disabled",i===s),a(),D(" ",e.resolvePrimitive(t.title)," ")}}var z=(()=>{class n extends L{selectedIndex=b(0);tabs=w.required();buttonClasses=$(()=>{let t=this.selectedIndex();return this.tabs().map((s,e)=>e===t?E.merge(this.theme.components.Tabs.controls.all,this.theme.components.Tabs.controls.selected):this.theme.components.Tabs.controls.all)});static \u0275fac=(()=>{let t;return function(e){return(t||(t=_(n)))(e||n)}})();static \u0275cmp=f({type:n,selectors:[["a2ui-tabs"]],inputs:{tabs:[1,"tabs"]},features:[h],decls:6,vars:9,consts:[[3,"disabled","class"],["a2ui-renderer","",3,"surfaceId","component"],[3,"click","disabled"]],template:function(s,e){if(s&1&&(F(0),l(1,"section")(2,"div"),v(3,B,2,4,"button",0,x),o(),I(5,1),o()),s&2){let i=e.tabs(),V=k(e.selectedIndex());a(),C(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Tabs),r(e.theme.components.Tabs.container),a(),r(e.theme.components.Tabs.element),a(),y(i),a(2),d("surfaceId",e.surfaceId())("component",i[V].child)}},dependencies:[N],styles:["[_nghost-%COMP%]{display:block;flex:var(--weight)}"]})}return n})();export{z as Tabs}; +import{Bc as w,Da as _,Gb as I,Hb as g,Jb as T,Lb as c,Mc as E,Qa as a,Yb as C,Zb as r,_b as M,ab as f,ac as D,eb as h,gc as F,hc as k,ic as S,md as L,na as p,nd as N,oa as u,ub as x,vb as v,vc as $,wb as y,xb as d,yb as l,za as b,zb as o}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";function B(n,m){if(n&1){let t=g();l(0,"button",2),T("click",function(){let e=p(t).$index,i=c();return u(i.selectedIndex.set(e))}),M(1),o()}if(n&2){let t=m.$implicit,s=m.$index,e=c(),i=S(0);r(e.buttonClasses()[i]),d("disabled",i===s),a(),D(" ",e.resolvePrimitive(t.title)," ")}}var z=(()=>{class n extends L{selectedIndex=b(0);tabs=w.required();buttonClasses=$(()=>{let t=this.selectedIndex();return this.tabs().map((s,e)=>e===t?E.merge(this.theme.components.Tabs.controls.all,this.theme.components.Tabs.controls.selected):this.theme.components.Tabs.controls.all)});static \u0275fac=(()=>{let t;return function(e){return(t||(t=_(n)))(e||n)}})();static \u0275cmp=f({type:n,selectors:[["a2ui-tabs"]],inputs:{tabs:[1,"tabs"]},features:[h],decls:6,vars:9,consts:[[3,"disabled","class"],["a2ui-renderer","",3,"surfaceId","component"],[3,"click","disabled"]],template:function(s,e){if(s&1&&(F(0),l(1,"section")(2,"div"),v(3,B,2,4,"button",0,x),o(),I(5,1),o()),s&2){let i=e.tabs(),V=k(e.selectedIndex());a(),C(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Tabs),r(e.theme.components.Tabs.container),a(),r(e.theme.components.Tabs.element),a(),y(i),a(2),d("surfaceId",e.surfaceId())("component",i[V].child)}},dependencies:[N],styles:["[_nghost-%COMP%]{display:block;flex:var(--weight)}"]})}return n})();export{z as Tabs}; diff --git a/src/google/adk/cli/browser/chunk-RUWE7IJV.js b/src/google/adk/cli/browser/chunk-MBYWPZQV.js similarity index 96% rename from src/google/adk/cli/browser/chunk-RUWE7IJV.js rename to src/google/adk/cli/browser/chunk-MBYWPZQV.js index 92ced3a3df..793c89f3a7 100644 --- a/src/google/adk/cli/browser/chunk-RUWE7IJV.js +++ b/src/google/adk/cli/browser/chunk-MBYWPZQV.js @@ -1 +1 @@ -import{$b as u,Bb as l,Bc as c,Cb as a,Da as m,Ib as r,Kb as M,Lb as C,Qa as n,Yb as y,Zb as s,_b as d,ab as h,eb as v,md as b,vb as g,vc as _,wb as f}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var D=(i,p)=>p.value;function P(i,p){if(i&1&&(l(0,"option",2),d(1),a()),i&2){let t=p.$implicit,o=C();r("value",t.value),n(),u(o.resolvePrimitive(t.label))}}var x=(()=>{class i extends b{options=c.required();value=c.required();description=c.required();selectId=super.getUniqueId("a2ui-multiple-choice");selectValue=_(()=>super.resolvePrimitive(this.value()));handleChange(t){let o=this.value()?.path;!(t.target instanceof HTMLSelectElement)||!t.target.value||!o||this.processor.setData(this.component(),this.processor.resolvePath(o,this.component().dataContextPath),t.target.value)}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(i)))(e||i)}})();static \u0275cmp=h({type:i,selectors:[["a2ui-multiple-choice"]],inputs:{options:[1,"options"],value:[1,"value"],description:[1,"description"]},features:[v],decls:6,vars:12,consts:[[3,"for"],[3,"change","id","value"],[3,"value"]],template:function(o,e){o&1&&(l(0,"section")(1,"label",0),d(2),a(),l(3,"select",1),M("change",function(E){return e.handleChange(E)}),g(4,P,2,2,"option",2,D),a()()),o&2&&(s(e.theme.components.MultipleChoice.container),n(),s(e.theme.components.MultipleChoice.label),r("htmlFor",e.selectId),n(),u(e.description()),n(),y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.MultipleChoice),s(e.theme.components.MultipleChoice.element),r("id",e.selectId)("value",e.selectValue()),n(),f(e.options()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}select[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}"]})}return i})();export{x as MultipleChoice}; +import{$b as u,Bb as l,Bc as c,Cb as a,Da as m,Ib as r,Kb as M,Lb as C,Qa as n,Yb as y,Zb as s,_b as d,ab as h,eb as v,md as b,vb as g,vc as _,wb as f}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";var D=(i,p)=>p.value;function P(i,p){if(i&1&&(l(0,"option",2),d(1),a()),i&2){let t=p.$implicit,o=C();r("value",t.value),n(),u(o.resolvePrimitive(t.label))}}var x=(()=>{class i extends b{options=c.required();value=c.required();description=c.required();selectId=super.getUniqueId("a2ui-multiple-choice");selectValue=_(()=>super.resolvePrimitive(this.value()));handleChange(t){let o=this.value()?.path;!(t.target instanceof HTMLSelectElement)||!t.target.value||!o||this.processor.setData(this.component(),this.processor.resolvePath(o,this.component().dataContextPath),t.target.value)}static \u0275fac=(()=>{let t;return function(e){return(t||(t=m(i)))(e||i)}})();static \u0275cmp=h({type:i,selectors:[["a2ui-multiple-choice"]],inputs:{options:[1,"options"],value:[1,"value"],description:[1,"description"]},features:[v],decls:6,vars:12,consts:[[3,"for"],[3,"change","id","value"],[3,"value"]],template:function(o,e){o&1&&(l(0,"section")(1,"label",0),d(2),a(),l(3,"select",1),M("change",function(E){return e.handleChange(E)}),g(4,P,2,2,"option",2,D),a()()),o&2&&(s(e.theme.components.MultipleChoice.container),n(),s(e.theme.components.MultipleChoice.label),r("htmlFor",e.selectId),n(),u(e.description()),n(),y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.MultipleChoice),s(e.theme.components.MultipleChoice.element),r("id",e.selectId)("value",e.selectValue()),n(),f(e.options()))},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}select[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}"]})}return i})();export{x as MultipleChoice}; diff --git a/src/google/adk/cli/browser/chunk-HAQR6HJ6.js b/src/google/adk/cli/browser/chunk-N3RKSFBU.js similarity index 79% rename from src/google/adk/cli/browser/chunk-HAQR6HJ6.js rename to src/google/adk/cli/browser/chunk-N3RKSFBU.js index 03be74513b..071b266a70 100644 --- a/src/google/adk/cli/browser/chunk-HAQR6HJ6.js +++ b/src/google/adk/cli/browser/chunk-N3RKSFBU.js @@ -1 +1 @@ -import{Bb as g,Bc as r,Cb as p,Da as a,Db as v,Ib as h,Lb as f,Na as l,Qa as o,Yb as y,Zb as x,ab as m,bd as D,eb as d,gc as M,hc as b,ic as C,md as I,qb as c,sb as u,vc as s}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function H(t,U){if(t&1&&(g(0,"section"),v(1,"img",1),p()),t&2){let e=f(),i=C(0);y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Image),x(e.classes()),o(),h("src",i,l)}}var w=(()=>{class t extends I{url=r.required();usageHint=r.required();resolvedUrl=s(()=>this.resolvePrimitive(this.url()));classes=s(()=>{let e=this.usageHint();return D.merge(this.theme.components.Image.all,e?this.theme.components.Image[e]:{})});static \u0275fac=(()=>{let e;return function(n){return(e||(e=a(t)))(n||t)}})();static \u0275cmp=m({type:t,selectors:[["a2ui-image"]],inputs:{url:[1,"url"],usageHint:[1,"usageHint"]},features:[d],decls:2,vars:2,consts:[[3,"class","style"],[3,"src"]],template:function(i,n){if(i&1&&(M(0),c(1,H,2,5,"section",0)),i&2){let _=b(n.resolvedUrl());o(),u(_?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}img[_ngcontent-%COMP%]{display:block;width:100%;height:100%;box-sizing:border-box}"]})}return t})();export{w as Image}; +import{Bb as g,Bc as r,Cb as p,Da as a,Db as v,Ib as h,Lb as f,Mc as D,Na as l,Qa as o,Yb as y,Zb as x,ab as m,eb as d,gc as M,hc as b,ic as C,md as I,qb as c,sb as u,vc as s}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";function H(t,U){if(t&1&&(g(0,"section"),v(1,"img",1),p()),t&2){let e=f(),i=C(0);y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Image),x(e.classes()),o(),h("src",i,l)}}var w=(()=>{class t extends I{url=r.required();usageHint=r.required();resolvedUrl=s(()=>this.resolvePrimitive(this.url()));classes=s(()=>{let e=this.usageHint();return D.merge(this.theme.components.Image.all,e?this.theme.components.Image[e]:{})});static \u0275fac=(()=>{let e;return function(n){return(e||(e=a(t)))(n||t)}})();static \u0275cmp=m({type:t,selectors:[["a2ui-image"]],inputs:{url:[1,"url"],usageHint:[1,"usageHint"]},features:[d],decls:2,vars:2,consts:[[3,"class","style"],[3,"src"]],template:function(i,n){if(i&1&&(M(0),c(1,H,2,5,"section",0)),i&2){let _=b(n.resolvedUrl());o(),u(_?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}img[_ngcontent-%COMP%]{display:block;width:100%;height:100%;box-sizing:border-box}"]})}return t})();export{w as Image}; diff --git a/src/google/adk/cli/browser/chunk-VPVAD56Y.js b/src/google/adk/cli/browser/chunk-R2IMOXM4.js similarity index 89% rename from src/google/adk/cli/browser/chunk-VPVAD56Y.js rename to src/google/adk/cli/browser/chunk-R2IMOXM4.js index d5e96825d3..9f00c13026 100644 --- a/src/google/adk/cli/browser/chunk-VPVAD56Y.js +++ b/src/google/adk/cli/browser/chunk-R2IMOXM4.js @@ -1 +1 @@ -import{Da as o,Db as d,Yb as l,Zb as s,ab as r,eb as a,md as m}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var f=(()=>{class e extends m{static \u0275fac=(()=>{let i;return function(t){return(i||(i=o(e)))(t||e)}})();static \u0275cmp=r({type:e,selectors:[["a2ui-divider"]],features:[a],decls:1,vars:4,template:function(n,t){n&1&&d(0,"hr"),n&2&&(l(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Divider),s(t.theme.components.Divider))},styles:["[_nghost-%COMP%]{display:block;min-height:0;overflow:auto}hr[_ngcontent-%COMP%]{height:1px;background:#ccc;border:none}"]})}return e})();export{f as Divider}; +import{Da as o,Db as d,Yb as l,Zb as s,ab as r,eb as a,md as m}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";var f=(()=>{class e extends m{static \u0275fac=(()=>{let i;return function(t){return(i||(i=o(e)))(t||e)}})();static \u0275cmp=r({type:e,selectors:[["a2ui-divider"]],features:[a],decls:1,vars:4,template:function(n,t){n&1&&d(0,"hr"),n&2&&(l(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Divider),s(t.theme.components.Divider))},styles:["[_nghost-%COMP%]{display:block;min-height:0;overflow:auto}hr[_ngcontent-%COMP%]{height:1px;background:#ccc;border:none}"]})}return e})();export{f as Divider}; diff --git a/src/google/adk/cli/browser/chunk-BX7YU7E6.js b/src/google/adk/cli/browser/chunk-RGCH6K7F.js similarity index 90% rename from src/google/adk/cli/browser/chunk-BX7YU7E6.js rename to src/google/adk/cli/browser/chunk-RGCH6K7F.js index e7ed117838..b2f707c399 100644 --- a/src/google/adk/cli/browser/chunk-BX7YU7E6.js +++ b/src/google/adk/cli/browser/chunk-RGCH6K7F.js @@ -1,7 +1,7 @@ import{a as S,b as P,e as lr,g as at}from"./chunk-W7GRJBO5.js";var me=null,Li=!1,ja=1,Kv=null,ne=Symbol("SIGNAL");function M(e){let t=me;return me=e,t}function ji(){return me}var Kt={version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:"unknown",producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function Jt(e){if(Li)throw new Error("");if(me===null)return;me.consumerOnSignalRead(e);let t=me.producersTail;if(t!==void 0&&t.producer===e)return;let n,r=me.recomputing;if(r&&(n=t!==void 0?t.nextProducer:me.producers,n!==void 0&&n.producer===e)){me.producersTail=n,n.lastReadVersion=e.version;return}let o=e.consumersTail;if(o!==void 0&&o.consumer===me&&(!r||Xv(o,me)))return;let i=pr(me),s={producer:e,consumer:me,nextProducer:n,prevConsumer:o,lastReadVersion:e.version,nextConsumer:void 0};me.producersTail=s,t!==void 0?t.nextProducer=s:me.producers=s,i&&Sh(e,s)}function xh(){ja++}function wn(e){if(!(pr(e)&&!e.dirty)&&!(!e.dirty&&e.lastCleanEpoch===ja)){if(!e.producerMustRecompute(e)&&!fr(e)){dr(e);return}e.producerRecomputeValue(e),dr(e)}}function Ba(e){if(e.consumers===void 0)return;let t=Li;Li=!0;try{for(let n=e.consumers;n!==void 0;n=n.nextConsumer){let r=n.consumer;r.dirty||Jv(r)}}finally{Li=t}}function Va(){return me?.consumerAllowSignalWrites!==!1}function Jv(e){e.dirty=!0,Ba(e),e.consumerMarkedDirty?.(e)}function dr(e){e.dirty=!1,e.lastCleanEpoch=ja}function It(e){return e&&Ih(e),M(e)}function Ih(e){e.producersTail=void 0,e.recomputing=!0}function Xt(e,t){M(t),e&&Th(e)}function Th(e){e.recomputing=!1;let t=e.producersTail,n=t!==void 0?t.nextProducer:e.producers;if(n!==void 0){if(pr(e))do n=Ha(n);while(n!==void 0);t!==void 0?t.nextProducer=void 0:e.producers=void 0}}function fr(e){for(let t=e.producers;t!==void 0;t=t.nextProducer){let n=t.producer,r=t.lastReadVersion;if(r!==n.version||(wn(n),r!==n.version))return!0}return!1}function en(e){if(pr(e)){let t=e.producers;for(;t!==void 0;)t=Ha(t)}e.producers=void 0,e.producersTail=void 0,e.consumers=void 0,e.consumersTail=void 0}function Sh(e,t){let n=e.consumersTail,r=pr(e);if(n!==void 0?(t.nextConsumer=n.nextConsumer,n.nextConsumer=t):(t.nextConsumer=void 0,e.consumers=t),t.prevConsumer=n,e.consumersTail=t,!r)for(let o=e.producers;o!==void 0;o=o.nextProducer)Sh(o.producer,o)}function Ha(e){let t=e.producer,n=e.nextProducer,r=e.nextConsumer,o=e.prevConsumer;if(e.nextConsumer=void 0,e.prevConsumer=void 0,r!==void 0?r.prevConsumer=o:t.consumersTail=o,o!==void 0)o.nextConsumer=r;else if(t.consumers=r,!pr(t)){let i=t.producers;for(;i!==void 0;)i=Ha(i)}return n}function pr(e){return e.consumerIsAlwaysLive||e.consumers!==void 0}function yo(e){Kv?.(e)}function Xv(e,t){let n=t.producersTail;if(n!==void 0){let r=t.producers;do{if(r===e)return!0;if(r===n)break;r=r.nextProducer}while(r!==void 0)}return!1}function bo(e,t){return Object.is(e,t)}function vo(e,t){let n=Object.create(eD);n.computation=e,t!==void 0&&(n.equal=t);let r=()=>{if(wn(n),Jt(n),n.value===xt)throw n.error;return n.value};return r[ne]=n,yo(n),r}var Qt=Symbol("UNSET"),Cn=Symbol("COMPUTING"),xt=Symbol("ERRORED"),eD=P(S({},Kt),{value:Qt,dirty:!0,error:null,equal:bo,kind:"computed",producerMustRecompute(e){return e.value===Qt||e.value===Cn},producerRecomputeValue(e){if(e.value===Cn)throw new Error("");let t=e.value;e.value=Cn;let n=It(e),r,o=!1;try{r=e.computation(),M(null),o=t!==Qt&&t!==xt&&r!==xt&&e.equal(t,r)}catch(i){r=xt,e.error=i}finally{Xt(e,n)}if(o){e.value=t;return}e.value=r,e.version++}});function tD(){throw new Error}var Mh=tD;function Ah(e){Mh(e)}function $a(e){Mh=e}var nD=null;function Ua(e,t){let n=Object.create(Do);n.value=e,t!==void 0&&(n.equal=t);let r=()=>Nh(n);return r[ne]=n,yo(n),[r,s=>xn(n,s),s=>Bi(n,s)]}function Nh(e){return Jt(e),e.value}function xn(e,t){Va()||Ah(e),e.equal(e.value,t)||(e.value=t,rD(e))}function Bi(e,t){Va()||Ah(e),xn(e,t(e.value))}var Do=P(S({},Kt),{equal:bo,value:void 0,kind:"signal"});function rD(e){e.version++,xh(),Ba(e),nD?.(e)}function za(e){let t=M(null);try{return e()}finally{M(t)}}var qa=P(S({},Kt),{consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:"effect"});function Ga(e){if(e.dirty=!1,e.version>0&&!fr(e))return;e.version++;let t=It(e);try{e.cleanup(),e.fn()}finally{Xt(e,t)}}function k(e){return typeof e=="function"}function hr(e){let n=e(r=>{Error.call(r),r.stack=new Error().stack});return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}var Vi=hr(e=>function(n){e(this),this.message=n?`${n.length} errors occurred during unsubscription: ${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` `)}`:"",this.name="UnsubscriptionError",this.errors=n});function In(e,t){if(e){let n=e.indexOf(t);0<=n&&e.splice(n,1)}}var X=class e{constructor(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let t;if(!this.closed){this.closed=!0;let{_parentage:n}=this;if(n)if(this._parentage=null,Array.isArray(n))for(let i of n)i.remove(this);else n.remove(this);let{initialTeardown:r}=this;if(k(r))try{r()}catch(i){t=i instanceof Vi?i.errors:[i]}let{_finalizers:o}=this;if(o){this._finalizers=null;for(let i of o)try{kh(i)}catch(s){t=t??[],s instanceof Vi?t=[...t,...s.errors]:t.push(s)}}if(t)throw new Vi(t)}}add(t){var n;if(t&&t!==this)if(this.closed)kh(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(t)}}_hasParent(t){let{_parentage:n}=this;return n===t||Array.isArray(n)&&n.includes(t)}_addParent(t){let{_parentage:n}=this;this._parentage=Array.isArray(n)?(n.push(t),n):n?[n,t]:t}_removeParent(t){let{_parentage:n}=this;n===t?this._parentage=null:Array.isArray(n)&&In(n,t)}remove(t){let{_finalizers:n}=this;n&&In(n,t),t instanceof e&&t._removeParent(this)}};X.EMPTY=(()=>{let e=new X;return e.closed=!0,e})();var Wa=X.EMPTY;function Hi(e){return e instanceof X||e&&"closed"in e&&k(e.remove)&&k(e.add)&&k(e.unsubscribe)}function kh(e){k(e)?e():e.unsubscribe()}var We={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var gr={setTimeout(e,t,...n){let{delegate:r}=gr;return r?.setTimeout?r.setTimeout(e,t,...n):setTimeout(e,t,...n)},clearTimeout(e){let{delegate:t}=gr;return(t?.clearTimeout||clearTimeout)(e)},delegate:void 0};function $i(e){gr.setTimeout(()=>{let{onUnhandledError:t}=We;if(t)t(e);else throw e})}function Tt(){}var Rh=Za("C",void 0,void 0);function Fh(e){return Za("E",void 0,e)}function Oh(e){return Za("N",e,void 0)}function Za(e,t,n){return{kind:e,value:t,error:n}}var Tn=null;function mr(e){if(We.useDeprecatedSynchronousErrorHandling){let t=!Tn;if(t&&(Tn={errorThrown:!1,error:null}),e(),t){let{errorThrown:n,error:r}=Tn;if(Tn=null,n)throw r}}else e()}function Ph(e){We.useDeprecatedSynchronousErrorHandling&&Tn&&(Tn.errorThrown=!0,Tn.error=e)}var Sn=class extends X{constructor(t){super(),this.isStopped=!1,t?(this.destination=t,Hi(t)&&t.add(this)):this.destination=sD}static create(t,n,r){return new Ze(t,n,r)}next(t){this.isStopped?Qa(Oh(t),this):this._next(t)}error(t){this.isStopped?Qa(Fh(t),this):(this.isStopped=!0,this._error(t))}complete(){this.isStopped?Qa(Rh,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(t){this.destination.next(t)}_error(t){try{this.destination.error(t)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}},oD=Function.prototype.bind;function Ya(e,t){return oD.call(e,t)}var Ka=class{constructor(t){this.partialObserver=t}next(t){let{partialObserver:n}=this;if(n.next)try{n.next(t)}catch(r){Ui(r)}}error(t){let{partialObserver:n}=this;if(n.error)try{n.error(t)}catch(r){Ui(r)}else Ui(t)}complete(){let{partialObserver:t}=this;if(t.complete)try{t.complete()}catch(n){Ui(n)}}},Ze=class extends Sn{constructor(t,n,r){super();let o;if(k(t)||!t)o={next:t??void 0,error:n??void 0,complete:r??void 0};else{let i;this&&We.useDeprecatedNextContext?(i=Object.create(t),i.unsubscribe=()=>this.unsubscribe(),o={next:t.next&&Ya(t.next,i),error:t.error&&Ya(t.error,i),complete:t.complete&&Ya(t.complete,i)}):o=t}this.destination=new Ka(o)}};function Ui(e){We.useDeprecatedSynchronousErrorHandling?Ph(e):$i(e)}function iD(e){throw e}function Qa(e,t){let{onStoppedNotification:n}=We;n&&gr.setTimeout(()=>n(e,t))}var sD={closed:!0,next:Tt,error:iD,complete:Tt};var yr=typeof Symbol=="function"&&Symbol.observable||"@@observable";function De(e){return e}function uD(...e){return Ja(e)}function Ja(e){return e.length===0?De:e.length===1?e[0]:function(n){return e.reduce((r,o)=>o(r),n)}}var B=(()=>{class e{constructor(n){n&&(this._subscribe=n)}lift(n){let r=new e;return r.source=this,r.operator=n,r}subscribe(n,r,o){let i=cD(n)?n:new Ze(n,r,o);return mr(()=>{let{operator:s,source:u}=this;i.add(s?s.call(i,u):u?this._subscribe(i):this._trySubscribe(i))}),i}_trySubscribe(n){try{return this._subscribe(n)}catch(r){n.error(r)}}forEach(n,r){return r=Lh(r),new r((o,i)=>{let s=new Ze({next:u=>{try{n(u)}catch(a){i(a),s.unsubscribe()}},error:i,complete:o});this.subscribe(s)})}_subscribe(n){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(n)}[yr](){return this}pipe(...n){return Ja(n)(this)}toPromise(n){return n=Lh(n),new n((r,o)=>{let i;this.subscribe(s=>i=s,s=>o(s),()=>r(i))})}}return e.create=t=>new e(t),e})();function Lh(e){var t;return(t=e??We.Promise)!==null&&t!==void 0?t:Promise}function aD(e){return e&&k(e.next)&&k(e.error)&&k(e.complete)}function cD(e){return e&&e instanceof Sn||aD(e)&&Hi(e)}function Xa(e){return k(e?.lift)}function j(e){return t=>{if(Xa(t))return t.lift(function(n){try{return e(n,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function R(e,t,n,r,o){return new ec(e,t,n,r,o)}var ec=class extends Sn{constructor(t,n,r,o,i,s){super(t),this.onFinalize=i,this.shouldUnsubscribe=s,this._next=n?function(u){try{n(u)}catch(a){t.error(a)}}:super._next,this._error=o?function(u){try{o(u)}catch(a){t.error(a)}finally{this.unsubscribe()}}:super._error,this._complete=r?function(){try{r()}catch(u){t.error(u)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){let{closed:n}=this;super.unsubscribe(),!n&&((t=this.onFinalize)===null||t===void 0||t.call(this))}}};function jh(){return j((e,t)=>{let n=null;e._refCount++;let r=R(t,void 0,void 0,void 0,()=>{if(!e||e._refCount<=0||0<--e._refCount){n=null;return}let o=e._connection,i=n;n=null,o&&(!i||o===i)&&o.unsubscribe(),t.unsubscribe()});e.subscribe(r),r.closed||(n=e.connect())})}var tc=class extends B{constructor(t,n){super(),this.source=t,this.subjectFactory=n,this._subject=null,this._refCount=0,this._connection=null,Xa(t)&&(this.lift=t.lift)}_subscribe(t){return this.getSubject().subscribe(t)}getSubject(){let t=this._subject;return(!t||t.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;let{_connection:t}=this;this._subject=this._connection=null,t?.unsubscribe()}connect(){let t=this._connection;if(!t){t=this._connection=new X;let n=this.getSubject();t.add(this.source.subscribe(R(n,void 0,()=>{this._teardown(),n.complete()},r=>{this._teardown(),n.error(r)},()=>this._teardown()))),t.closed&&(this._connection=null,t=X.EMPTY)}return t}refCount(){return jh()(this)}};var br={schedule(e){let t=requestAnimationFrame,n=cancelAnimationFrame,{delegate:r}=br;r&&(t=r.requestAnimationFrame,n=r.cancelAnimationFrame);let o=t(i=>{n=void 0,e(i)});return new X(()=>n?.(o))},requestAnimationFrame(...e){let{delegate:t}=br;return(t?.requestAnimationFrame||requestAnimationFrame)(...e)},cancelAnimationFrame(...e){let{delegate:t}=br;return(t?.cancelAnimationFrame||cancelAnimationFrame)(...e)},delegate:void 0};var Bh=hr(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var le=(()=>{class e extends B{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(n){let r=new zi(this,this);return r.operator=n,r}_throwIfClosed(){if(this.closed)throw new Bh}next(n){mr(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(let r of this.currentObservers)r.next(n)}})}error(n){mr(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=n;let{observers:r}=this;for(;r.length;)r.shift().error(n)}})}complete(){mr(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;let{observers:n}=this;for(;n.length;)n.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var n;return((n=this.observers)===null||n===void 0?void 0:n.length)>0}_trySubscribe(n){return this._throwIfClosed(),super._trySubscribe(n)}_subscribe(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)}_innerSubscribe(n){let{hasError:r,isStopped:o,observers:i}=this;return r||o?Wa:(this.currentObservers=null,i.push(n),new X(()=>{this.currentObservers=null,In(i,n)}))}_checkFinalizedStatuses(n){let{hasError:r,thrownError:o,isStopped:i}=this;r?n.error(o):i&&n.complete()}asObservable(){let n=new B;return n.source=this,n}}return e.create=(t,n)=>new zi(t,n),e})(),zi=class extends le{constructor(t,n){super(),this.destination=t,this.source=n}next(t){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.next)===null||r===void 0||r.call(n,t)}error(t){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.error)===null||r===void 0||r.call(n,t)}complete(){var t,n;(n=(t=this.destination)===null||t===void 0?void 0:t.complete)===null||n===void 0||n.call(t)}_subscribe(t){var n,r;return(r=(n=this.source)===null||n===void 0?void 0:n.subscribe(t))!==null&&r!==void 0?r:Wa}};var Eo=class extends le{constructor(t){super(),this._value=t}get value(){return this.getValue()}_subscribe(t){let n=super._subscribe(t);return!n.closed&&t.next(this._value),n}getValue(){let{hasError:t,thrownError:n,_value:r}=this;if(t)throw n;return this._throwIfClosed(),r}next(t){super.next(this._value=t)}};var _o={now(){return(_o.delegate||Date).now()},delegate:void 0};var Co=class extends le{constructor(t=1/0,n=1/0,r=_o){super(),this._bufferSize=t,this._windowTime=n,this._timestampProvider=r,this._buffer=[],this._infiniteTimeWindow=!0,this._infiniteTimeWindow=n===1/0,this._bufferSize=Math.max(1,t),this._windowTime=Math.max(1,n)}next(t){let{isStopped:n,_buffer:r,_infiniteTimeWindow:o,_timestampProvider:i,_windowTime:s}=this;n||(r.push(t),!o&&r.push(i.now()+s)),this._trimBuffer(),super.next(t)}_subscribe(t){this._throwIfClosed(),this._trimBuffer();let n=this._innerSubscribe(t),{_infiniteTimeWindow:r,_buffer:o}=this,i=o.slice();for(let s=0;sVh(t)&&e()),t},clearImmediate(e){Vh(e)}};var{setImmediate:dD,clearImmediate:fD}=Hh,xo={setImmediate(...e){let{delegate:t}=xo;return(t?.setImmediate||dD)(...e)},clearImmediate(e){let{delegate:t}=xo;return(t?.clearImmediate||fD)(e)},delegate:void 0};var Gi=class extends tn{constructor(t,n){super(t,n),this.scheduler=t,this.work=n}requestAsyncId(t,n,r=0){return r!==null&&r>0?super.requestAsyncId(t,n,r):(t.actions.push(this),t._scheduled||(t._scheduled=xo.setImmediate(t.flush.bind(t,void 0))))}recycleAsyncId(t,n,r=0){var o;if(r!=null?r>0:this.delay>0)return super.recycleAsyncId(t,n,r);let{actions:i}=t;n!=null&&((o=i[i.length-1])===null||o===void 0?void 0:o.id)!==n&&(xo.clearImmediate(n),t._scheduled===n&&(t._scheduled=void 0))}};var vr=class e{constructor(t,n=e.now){this.schedulerActionCtor=t,this.now=n}schedule(t,n=0,r){return new this.schedulerActionCtor(this,t).schedule(r,n)}};vr.now=_o.now;var nn=class extends vr{constructor(t,n=vr.now){super(t,n),this.actions=[],this._active=!1}flush(t){let{actions:n}=this;if(this._active){n.push(t);return}let r;this._active=!0;do if(r=t.execute(t.state,t.delay))break;while(t=n.shift());if(this._active=!1,r){for(;t=n.shift();)t.unsubscribe();throw r}}};var Wi=class extends nn{flush(t){this._active=!0;let n=this._scheduled;this._scheduled=void 0;let{actions:r}=this,o;t=t||r.shift();do if(o=t.execute(t.state,t.delay))break;while((t=r[0])&&t.id===n&&r.shift());if(this._active=!1,o){for(;(t=r[0])&&t.id===n&&r.shift();)t.unsubscribe();throw o}}};var pD=new Wi(Gi);var Dr=new nn(tn),oc=Dr;var Zi=class extends tn{constructor(t,n){super(t,n),this.scheduler=t,this.work=n}requestAsyncId(t,n,r=0){return r!==null&&r>0?super.requestAsyncId(t,n,r):(t.actions.push(this),t._scheduled||(t._scheduled=br.requestAnimationFrame(()=>t.flush(void 0))))}recycleAsyncId(t,n,r=0){var o;if(r!=null?r>0:this.delay>0)return super.recycleAsyncId(t,n,r);let{actions:i}=t;n!=null&&n===t._scheduled&&((o=i[i.length-1])===null||o===void 0?void 0:o.id)!==n&&(br.cancelAnimationFrame(n),t._scheduled=void 0)}};var Yi=class extends nn{flush(t){this._active=!0;let n;t?n=t.id:(n=this._scheduled,this._scheduled=void 0);let{actions:r}=this,o;t=t||r.shift();do if(o=t.execute(t.state,t.delay))break;while((t=r[0])&&t.id===n&&r.shift());if(this._active=!1,o){for(;(t=r[0])&&t.id===n&&r.shift();)t.unsubscribe();throw o}}};var hD=new Yi(Zi);var St=new B(e=>e.complete());function Qi(e){return e&&k(e.schedule)}function ic(e){return e[e.length-1]}function rn(e){return k(ic(e))?e.pop():void 0}function ct(e){return Qi(ic(e))?e.pop():void 0}function $h(e,t){return typeof ic(e)=="number"?e.pop():t}function ZN(e,t,n,r){var o=arguments.length,i=o<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(e,t,n,r);else for(var u=e.length-1;u>=0;u--)(s=e[u])&&(i=(o<3?s(i):o>3?s(t,n,i):s(t,n))||i);return o>3&&i&&Object.defineProperty(t,n,i),i}function zh(e,t,n,r){function o(i){return i instanceof n?i:new n(function(s){s(i)})}return new(n||(n=Promise))(function(i,s){function u(l){try{c(r.next(l))}catch(d){s(d)}}function a(l){try{c(r.throw(l))}catch(d){s(d)}}function c(l){l.done?i(l.value):o(l.value).then(u,a)}c((r=r.apply(e,t||[])).next())})}function Uh(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Mn(e){return this instanceof Mn?(this.v=e,this):new Mn(e)}function qh(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=n.apply(e,t||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),u("next"),u("throw"),u("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(f){return function(p){return Promise.resolve(p).then(f,d)}}function u(f,p){r[f]&&(o[f]=function(g){return new Promise(function(m,y){i.push([f,g,m,y])>1||a(f,g)})},p&&(o[f]=p(o[f])))}function a(f,p){try{c(r[f](p))}catch(g){h(i[0][3],g)}}function c(f){f.value instanceof Mn?Promise.resolve(f.value.v).then(l,d):h(i[0][2],f)}function l(f){a("next",f)}function d(f){a("throw",f)}function h(f,p){f(p),i.shift(),i.length&&a(i[0][0],i[0][1])}}function Gh(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof Uh=="function"?Uh(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(i){n[i]=e[i]&&function(s){return new Promise(function(u,a){s=e[i](s),o(u,a,s.done,s.value)})}}function o(i,s,u,a){Promise.resolve(a).then(function(c){i({value:c,done:u})},s)}}var Er=e=>e&&typeof e.length=="number"&&typeof e!="function";function Ki(e){return k(e?.then)}function Ji(e){return k(e[yr])}function Xi(e){return Symbol.asyncIterator&&k(e?.[Symbol.asyncIterator])}function es(e){return new TypeError(`You provided ${e!==null&&typeof e=="object"?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}function gD(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var ts=gD();function ns(e){return k(e?.[ts])}function rs(e){return qh(this,arguments,function*(){let n=e.getReader();try{for(;;){let{value:r,done:o}=yield Mn(n.read());if(o)return yield Mn(void 0);yield yield Mn(r)}}finally{n.releaseLock()}})}function os(e){return k(e?.getReader)}function z(e){if(e instanceof B)return e;if(e!=null){if(Ji(e))return mD(e);if(Er(e))return yD(e);if(Ki(e))return bD(e);if(Xi(e))return Wh(e);if(ns(e))return vD(e);if(os(e))return DD(e)}throw es(e)}function mD(e){return new B(t=>{let n=e[yr]();if(k(n.subscribe))return n.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function yD(e){return new B(t=>{for(let n=0;n{e.then(n=>{t.closed||(t.next(n),t.complete())},n=>t.error(n)).then(null,$i)})}function vD(e){return new B(t=>{for(let n of e)if(t.next(n),t.closed)return;t.complete()})}function Wh(e){return new B(t=>{ED(e,t).catch(n=>t.error(n))})}function DD(e){return Wh(rs(e))}function ED(e,t){var n,r,o,i;return zh(this,void 0,void 0,function*(){try{for(n=Gh(e);r=yield n.next(),!r.done;){let s=r.value;if(t.next(s),t.closed)return}}catch(s){o={error:s}}finally{try{r&&!r.done&&(i=n.return)&&(yield i.call(n))}finally{if(o)throw o.error}}t.complete()})}function Se(e,t,n,r=0,o=!1){let i=t.schedule(function(){n(),o?e.add(this.schedule(null,r)):this.unsubscribe()},r);if(e.add(i),!o)return i}function Io(e,t=0){return j((n,r)=>{n.subscribe(R(r,o=>Se(r,e,()=>r.next(o),t),()=>Se(r,e,()=>r.complete(),t),o=>Se(r,e,()=>r.error(o),t)))})}function is(e,t=0){return j((n,r)=>{r.add(e.schedule(()=>n.subscribe(r),t))})}function Zh(e,t){return z(e).pipe(is(t),Io(t))}function Yh(e,t){return z(e).pipe(is(t),Io(t))}function Qh(e,t){return new B(n=>{let r=0;return t.schedule(function(){r===e.length?n.complete():(n.next(e[r++]),n.closed||this.schedule())})})}function Kh(e,t){return new B(n=>{let r;return Se(n,t,()=>{r=e[ts](),Se(n,t,()=>{let o,i;try{({value:o,done:i}=r.next())}catch(s){n.error(s);return}i?n.complete():n.next(o)},0,!0)}),()=>k(r?.return)&&r.return()})}function ss(e,t){if(!e)throw new Error("Iterable cannot be null");return new B(n=>{Se(n,t,()=>{let r=e[Symbol.asyncIterator]();Se(n,t,()=>{r.next().then(o=>{o.done?n.complete():n.next(o.value)})},0,!0)})})}function Jh(e,t){return ss(rs(e),t)}function Xh(e,t){if(e!=null){if(Ji(e))return Zh(e,t);if(Er(e))return Qh(e,t);if(Ki(e))return Yh(e,t);if(Xi(e))return ss(e,t);if(ns(e))return Kh(e,t);if(os(e))return Jh(e,t)}throw es(e)}function lt(e,t){return t?Xh(e,t):z(e)}function us(...e){let t=ct(e);return lt(e,t)}function _D(e,t){let n=k(e)?e:()=>e,r=o=>o.error(n());return new B(t?o=>t.schedule(r,0,o):r)}function CD(e){return!!e&&(e instanceof B||k(e.lift)&&k(e.subscribe))}var An=hr(e=>function(){e(this),this.name="EmptyError",this.message="no elements in sequence"});function sc(e,t){let n=typeof t=="object";return new Promise((r,o)=>{let i=new Ze({next:s=>{r(s),i.unsubscribe()},error:o,complete:()=>{n?r(t.defaultValue):o(new An)}});e.subscribe(i)})}function e0(e){return e instanceof Date&&!isNaN(e)}function Ee(e,t){return j((n,r)=>{let o=0;n.subscribe(R(r,i=>{r.next(e.call(t,i,o++))}))})}var{isArray:wD}=Array;function xD(e,t){return wD(t)?e(...t):e(t)}function _r(e){return Ee(t=>xD(e,t))}var{isArray:ID}=Array,{getPrototypeOf:TD,prototype:SD,keys:MD}=Object;function as(e){if(e.length===1){let t=e[0];if(ID(t))return{args:t,keys:null};if(AD(t)){let n=MD(t);return{args:n.map(r=>t[r]),keys:n}}}return{args:e,keys:null}}function AD(e){return e&&typeof e=="object"&&TD(e)===SD}function cs(e,t){return e.reduce((n,r,o)=>(n[r]=t[o],n),{})}function ND(...e){let t=ct(e),n=rn(e),{args:r,keys:o}=as(e);if(r.length===0)return lt([],t);let i=new B(kD(r,t,o?s=>cs(o,s):De));return n?i.pipe(_r(n)):i}function kD(e,t,n=De){return r=>{t0(t,()=>{let{length:o}=e,i=new Array(o),s=o,u=o;for(let a=0;a{let c=lt(e[a],t),l=!1;c.subscribe(R(r,d=>{i[a]=d,l||(l=!0,u--),u||r.next(n(i.slice()))},()=>{--s||r.complete()}))},r)},r)}}function t0(e,t,n){e?Se(n,e,t):t()}function n0(e,t,n,r,o,i,s,u){let a=[],c=0,l=0,d=!1,h=()=>{d&&!a.length&&!c&&t.complete()},f=g=>c{i&&t.next(g),c++;let m=!1;z(n(g,l++)).subscribe(R(t,y=>{o?.(y),i?f(y):t.next(y)},()=>{m=!0},void 0,()=>{if(m)try{for(c--;a.length&&cp(y)):p(y)}h()}catch(y){t.error(y)}}))};return e.subscribe(R(t,f,()=>{d=!0,h()})),()=>{u?.()}}function Mt(e,t,n=1/0){return k(t)?Mt((r,o)=>Ee((i,s)=>t(r,i,o,s))(z(e(r,o))),n):(typeof t=="number"&&(n=t),j((r,o)=>n0(r,o,e,n)))}function To(e=1/0){return Mt(De,e)}function r0(){return To(1)}function ls(...e){return r0()(lt(e,ct(e)))}function RD(e){return new B(t=>{z(e()).subscribe(t)})}function FD(...e){let t=rn(e),{args:n,keys:r}=as(e),o=new B(i=>{let{length:s}=n;if(!s){i.complete();return}let u=new Array(s),a=s,c=s;for(let l=0;l{d||(d=!0,c--),u[l]=h},()=>a--,void 0,()=>{(!a||!d)&&(c||i.next(r?cs(r,u):u),i.complete())}))}});return t?o.pipe(_r(t)):o}var OD=["addListener","removeListener"],PD=["addEventListener","removeEventListener"],LD=["on","off"];function uc(e,t,n,r){if(k(n)&&(r=n,n=void 0),r)return uc(e,t,n).pipe(_r(r));let[o,i]=VD(e)?PD.map(s=>u=>e[s](t,u,n)):jD(e)?OD.map(o0(e,t)):BD(e)?LD.map(o0(e,t)):[];if(!o&&Er(e))return Mt(s=>uc(s,t,n))(z(e));if(!o)throw new TypeError("Invalid event target");return new B(s=>{let u=(...a)=>s.next(1i(u)})}function o0(e,t){return n=>r=>e[n](t,r)}function jD(e){return k(e.addListener)&&k(e.removeListener)}function BD(e){return k(e.on)&&k(e.off)}function VD(e){return k(e.addEventListener)&&k(e.removeEventListener)}function ac(e=0,t,n=oc){let r=-1;return t!=null&&(Qi(t)?n=t:r=t),new B(o=>{let i=e0(e)?+e-n.now():e;i<0&&(i=0);let s=0;return n.schedule(function(){o.closed||(o.next(s++),0<=r?this.schedule(void 0,r):o.complete())},i)})}function HD(...e){let t=ct(e),n=$h(e,1/0),r=e;return r.length?r.length===1?z(r[0]):To(n)(lt(r,t)):St}var $D=new B(Tt);var{isArray:UD}=Array;function i0(e){return e.length===1&&UD(e[0])?e[0]:e}function on(e,t){return j((n,r)=>{let o=0;n.subscribe(R(r,i=>e.call(t,i,o++)&&r.next(i)))})}function zD(...e){let t=rn(e),n=i0(e);return n.length?new B(r=>{let o=n.map(()=>[]),i=n.map(()=>!1);r.add(()=>{o=i=null});for(let s=0;!r.closed&&s{if(o[s].push(u),o.every(a=>a.length)){let a=o.map(c=>c.shift());r.next(t?t(...a):a),o.some((c,l)=>!c.length&&i[l])&&r.complete()}},()=>{i[s]=!0,!o[s].length&&r.complete()}));return()=>{o=i=null}}):St}function s0(e){return j((t,n)=>{let r=!1,o=null,i=null,s=!1,u=()=>{if(i?.unsubscribe(),i=null,r){r=!1;let c=o;o=null,n.next(c)}s&&n.complete()},a=()=>{i=null,s&&n.complete()};t.subscribe(R(n,c=>{r=!0,o=c,i||z(e(c)).subscribe(i=R(n,u,a))},()=>{s=!0,(!r||!i||i.closed)&&n.complete()}))})}function qD(e,t=Dr){return s0(()=>ac(e,t))}function cc(e){return j((t,n)=>{let r=null,o=!1,i;r=t.subscribe(R(n,void 0,void 0,s=>{i=z(e(s,cc(e)(t))),r?(r.unsubscribe(),r=null,i.subscribe(n)):o=!0})),o&&(r.unsubscribe(),r=null,i.subscribe(n))})}function lc(e,t){return k(t)?Mt(e,t,1):Mt(e,1)}function u0(e,t=Dr){return j((n,r)=>{let o=null,i=null,s=null,u=()=>{if(o){o.unsubscribe(),o=null;let c=i;i=null,r.next(c)}};function a(){let c=s+e,l=t.now();if(l{i=c,s=t.now(),o||(o=t.schedule(a,e),r.add(o))},()=>{u(),r.complete()},void 0,()=>{i=o=null}))})}function a0(e){return j((t,n)=>{let r=!1;t.subscribe(R(n,o=>{r=!0,n.next(o)},()=>{r||n.next(e),n.complete()}))})}function dc(e){return e<=0?()=>St:j((t,n)=>{let r=0;t.subscribe(R(n,o=>{++r<=e&&(n.next(o),e<=r&&n.complete())}))})}function GD(e){return Ee(()=>e)}function c0(e,t=De){return e=e??WD,j((n,r)=>{let o,i=!0;n.subscribe(R(r,s=>{let u=t(s);(i||!e(o,u))&&(i=!1,o=u,r.next(s))}))})}function WD(e,t){return e===t}function l0(e=ZD){return j((t,n)=>{let r=!1;t.subscribe(R(n,o=>{r=!0,n.next(o)},()=>r?n.complete():n.error(e())))})}function ZD(){return new An}function ds(e){return j((t,n)=>{try{t.subscribe(n)}finally{n.add(e)}})}function YD(e,t){let n=arguments.length>=2;return r=>r.pipe(e?on((o,i)=>e(o,i,r)):De,dc(1),n?a0(t):l0(()=>new An))}function QD(e){return e<=0?()=>St:j((t,n)=>{let r=[];t.subscribe(R(n,o=>{r.push(o),e{for(let o of r)n.next(o);n.complete()},void 0,()=>{r=null}))})}function d0(){return j((e,t)=>{let n,r=!1;e.subscribe(R(t,o=>{let i=n;n=o,r&&t.next([i,o]),r=!0}))})}function fs(e={}){let{connector:t=()=>new le,resetOnError:n=!0,resetOnComplete:r=!0,resetOnRefCountZero:o=!0}=e;return i=>{let s,u,a,c=0,l=!1,d=!1,h=()=>{u?.unsubscribe(),u=void 0},f=()=>{h(),s=a=void 0,l=d=!1},p=()=>{let g=s;f(),g?.unsubscribe()};return j((g,m)=>{c++,!d&&!l&&h();let y=a=a??t();m.add(()=>{c--,c===0&&!d&&!l&&(u=fc(p,o))}),y.subscribe(m),!s&&c>0&&(s=new Ze({next:v=>y.next(v),error:v=>{d=!0,h(),u=fc(f,n,v),y.error(v)},complete:()=>{l=!0,h(),u=fc(f,r),y.complete()}}),z(g).subscribe(s))})(i)}}function fc(e,t,...n){if(t===!0){e();return}if(t===!1)return;let r=new Ze({next:()=>{r.unsubscribe(),e()}});return z(t(...n)).subscribe(r)}function f0(e,t,n){let r,o=!1;return e&&typeof e=="object"?{bufferSize:r=1/0,windowTime:t=1/0,refCount:o=!1,scheduler:n}=e:r=e??1/0,fs({connector:()=>new Co(r,t,n),resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:o})}function p0(e){return on((t,n)=>e<=n)}function h0(...e){let t=ct(e);return j((n,r)=>{(t?ls(e,n,t):ls(e,n)).subscribe(r)})}function ps(e,t){return j((n,r)=>{let o=null,i=0,s=!1,u=()=>s&&!o&&r.complete();n.subscribe(R(r,a=>{o?.unsubscribe();let c=0,l=i++;z(e(a,l)).subscribe(o=R(r,d=>r.next(t?t(a,d,l,c++):d),()=>{o=null,u()}))},()=>{s=!0,u()}))})}function KD(e){return j((t,n)=>{z(e).subscribe(R(n,()=>n.complete(),Tt)),!n.closed&&t.subscribe(n)})}function JD(e,t=!1){return j((n,r)=>{let o=0;n.subscribe(R(r,i=>{let s=e(i,o++);(s||t)&&r.next(i),!s&&r.complete()}))})}function g0(e,t,n){let r=k(e)||t||n?{next:e,error:t,complete:n}:e;return r?j((o,i)=>{var s;(s=r.subscribe)===null||s===void 0||s.call(r);let u=!0;o.subscribe(R(i,a=>{var c;(c=r.next)===null||c===void 0||c.call(r,a),i.next(a)},()=>{var a;u=!1,(a=r.complete)===null||a===void 0||a.call(r),i.complete()},a=>{var c;u=!1,(c=r.error)===null||c===void 0||c.call(r,a),i.error(a)},()=>{var a,c;u&&((a=r.unsubscribe)===null||a===void 0||a.call(r)),(c=r.finalize)===null||c===void 0||c.call(r)}))}):De}function XD(...e){let t=rn(e);return j((n,r)=>{let o=e.length,i=new Array(o),s=e.map(()=>!1),u=!1;for(let a=0;a{i[a]=c,!u&&!s[a]&&(s[a]=!0,(u=s.every(De))&&(s=null))},Tt));n.subscribe(R(r,a=>{if(u){let c=[a,...i];r.next(t?t(...c):c)}}))})}var pc;function hs(){return pc}function dt(e){let t=pc;return pc=e,t}var m0=Symbol("NotFound");function Cr(e){return e===m0||e?.name==="\u0275NotFound"}function hc(e,t,n){let r=Object.create(eE);r.source=e,r.computation=t,n!=null&&(r.equal=n);let i=()=>{if(wn(r),Jt(r),r.value===xt)throw r.error;return r.value};return i[ne]=r,yo(r),i}function y0(e,t){wn(e),xn(e,t),dr(e)}function b0(e,t){wn(e),Bi(e,t),dr(e)}var eE=P(S({},Kt),{value:Qt,dirty:!0,error:null,equal:bo,kind:"linkedSignal",producerMustRecompute(e){return e.value===Qt||e.value===Cn},producerRecomputeValue(e){if(e.value===Cn)throw new Error("");let t=e.value;e.value=Cn;let n=It(e),r;try{let o=e.source(),i=t===Qt||t===xt?void 0:{source:e.sourceValue,value:t};r=e.computation(o,i),e.sourceValue=o}catch(o){r=xt,e.error=o}finally{Xt(e,n)}if(t!==Qt&&r!==xt&&e.equal(t,r)){e.value=t;return}e.value=r,e.version++}});var Es="https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss",_=class extends Error{code;constructor(t,n){super(pt(t,n)),this.code=t}};function tE(e){return`NG0${Math.abs(e)}`}function pt(e,t){return`${tE(e)}${t?": "+t:""}`}var xe=globalThis;function G(e){for(let t in e)if(e[t]===G)return t;throw Error("")}function C0(e,t){for(let n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n])}function kt(e){if(typeof e=="string")return e;if(Array.isArray(e))return`[${e.map(kt).join(", ")}]`;if(e==null)return""+e;let t=e.overriddenName||e.name;if(t)return`${t}`;let n=e.toString();if(n==null)return""+n;let r=n.indexOf(` -`);return r>=0?n.slice(0,r):n}function _s(e,t){return e?t?`${e} ${t}`:e:t||""}var nE=G({__forward_ref__:G});function Cs(e){return e.__forward_ref__=Cs,e.toString=function(){return kt(this())},e}function ue(e){return Tc(e)?e():e}function Tc(e){return typeof e=="function"&&e.hasOwnProperty(nE)&&e.__forward_ref__===Cs}function I(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function ht(e){return{providers:e.providers||[],imports:e.imports||[]}}function Fo(e){return oE(e,ws)}function rE(e){return Fo(e)!==null}function oE(e,t){return e.hasOwnProperty(t)&&e[t]||null}function iE(e){let t=e?.[ws]??null;return t||null}function mc(e){return e&&e.hasOwnProperty(ms)?e[ms]:null}var ws=G({\u0275prov:G}),ms=G({\u0275inj:G}),x=class{_desc;ngMetadataName="InjectionToken";\u0275prov;constructor(t,n){this._desc=t,this.\u0275prov=void 0,typeof n=="number"?this.__NG_ELEMENT_ID__=n:n!==void 0&&(this.\u0275prov=I({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function Sc(e){return e&&!!e.\u0275providers}var Mc=G({\u0275cmp:G}),Ac=G({\u0275dir:G}),Nc=G({\u0275pipe:G}),kc=G({\u0275mod:G}),Mo=G({\u0275fac:G}),On=G({__NG_ELEMENT_ID__:G}),v0=G({__NG_ENV_ID__:G});function Rc(e){return Is(e,"@NgModule"),e[kc]||null}function gt(e){return Is(e,"@Component"),e[Mc]||null}function xs(e){return Is(e,"@Directive"),e[Ac]||null}function w0(e){return Is(e,"@Pipe"),e[Nc]||null}function Is(e,t){if(e==null)throw new _(-919,!1)}function Ne(e){return typeof e=="string"?e:e==null?"":String(e)}function x0(e){return typeof e=="function"?e.name||e.toString():typeof e=="object"&&e!=null&&typeof e.type=="function"?e.type.name||e.type.toString():Ne(e)}var I0=G({ngErrorCode:G}),sE=G({ngErrorMessage:G}),uE=G({ngTokenPath:G});function Fc(e,t){return T0("",-200,t)}function Ts(e,t){throw new _(-201,!1)}function T0(e,t,n){let r=new _(t,e);return r[I0]=t,r[sE]=e,n&&(r[uE]=n),r}function aE(e){return e[I0]}var yc;function S0(){return yc}function _e(e){let t=yc;return yc=e,t}function Oc(e,t,n){let r=Fo(e);if(r&&r.providedIn=="root")return r.value===void 0?r.value=r.factory():r.value;if(n&8)return null;if(t!==void 0)return t;Ts(e,"")}var cE={},Nn=cE,lE="__NG_DI_FLAG__",bc=class{injector;constructor(t){this.injector=t}retrieve(t,n){let r=kn(n)||0;try{return this.injector.get(t,r&8?null:Nn,r)}catch(o){if(Cr(o))return o;throw o}}};function dE(e,t=0){let n=hs();if(n===void 0)throw new _(-203,!1);if(n===null)return Oc(e,void 0,t);{let r=fE(t),o=n.retrieve(e,r);if(Cr(o)){if(r.optional)return null;throw o}return o}}function A(e,t=0){return(S0()||dE)(ue(e),t)}function b(e,t){return A(e,kn(t))}function kn(e){return typeof e>"u"||typeof e=="number"?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function fE(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function vc(e){let t=[];for(let n=0;nArray.isArray(n)?Ss(n,t):t(n))}function Pc(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function Oo(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function N0(e,t){let n=[];for(let r=0;rt;){let i=o-2;e[o]=e[i],o--}e[t]=n,e[t+1]=r}}function Po(e,t,n){let r=xr(e,t);return r>=0?e[r|1]=n:(r=~r,k0(e,r,t,n)),r}function Ms(e,t){let n=xr(e,t);if(n>=0)return e[n|1]}function xr(e,t){return hE(e,t,1)}function hE(e,t,n){let r=0,o=e.length>>n;for(;o!==r;){let i=r+(o-r>>1),s=e[i<t?o=i:r=i+1}return~(o<{n.push(s)};return Ss(t,s=>{let u=s;ys(u,i,[],r)&&(o||=[],o.push(u))}),o!==void 0&&F0(o,i),n}function F0(e,t){for(let n=0;n{t(i,r)})}}function ys(e,t,n,r){if(e=ue(e),!e)return!1;let o=null,i=mc(e),s=!i&>(e);if(!i&&!s){let a=e.ngModule;if(i=mc(a),i)o=a;else return!1}else{if(s&&!s.standalone)return!1;o=e}let u=r.has(o);if(s){if(u)return!1;if(r.add(o),s.dependencies){let a=typeof s.dependencies=="function"?s.dependencies():s.dependencies;for(let c of a)ys(c,t,n,r)}}else if(i){if(i.imports!=null&&!u){r.add(o);let c;Ss(i.imports,l=>{ys(l,t,n,r)&&(c||=[],c.push(l))}),c!==void 0&&F0(c,t)}if(!u){let c=sn(o)||(()=>new o);t({provide:o,useFactory:c,deps:ye},o),t({provide:jc,useValue:o,multi:!0},o),t({provide:Ir,useValue:()=>A(o),multi:!0},o)}let a=i.providers;if(a!=null&&!u){let c=e;Vc(a,l=>{t(l,c)})}}else return!1;return o!==e&&e.providers!==void 0}function Vc(e,t){for(let n of e)Sc(n)&&(n=n.\u0275providers),Array.isArray(n)?Vc(n,t):t(n)}var gE=G({provide:String,useValue:G});function O0(e){return e!==null&&typeof e=="object"&&gE in e}function mE(e){return!!(e&&e.useExisting)}function yE(e){return!!(e&&e.useFactory)}function Rn(e){return typeof e=="function"}function P0(e){return!!e.useClass}var Lo=new x(""),gs={},D0={},gc;function Tr(){return gc===void 0&&(gc=new Ao),gc}var Ce=class{},Fn=class extends Ce{parent;source;scopes;records=new Map;_ngOnDestroyHooks=new Set;_onDestroyHooks=[];get destroyed(){return this._destroyed}_destroyed=!1;injectorDefTypes;constructor(t,n,r,o){super(),this.parent=n,this.source=r,this.scopes=o,Ec(t,s=>this.processProvider(s)),this.records.set(Lc,wr(void 0,this)),o.has("environment")&&this.records.set(Ce,wr(void 0,this));let i=this.records.get(Lo);i!=null&&typeof i.value=="string"&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(jc,ye,{self:!0}))}retrieve(t,n){let r=kn(n)||0;try{return this.get(t,Nn,r)}catch(o){if(Cr(o))return o;throw o}}destroy(){So(this),this._destroyed=!0;let t=M(null);try{for(let r of this._ngOnDestroyHooks)r.ngOnDestroy();let n=this._onDestroyHooks;this._onDestroyHooks=[];for(let r of n)r()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),M(t)}}onDestroy(t){return So(this),this._onDestroyHooks.push(t),()=>this.removeOnDestroy(t)}runInContext(t){So(this);let n=dt(this),r=_e(void 0),o;try{return t()}finally{dt(n),_e(r)}}get(t,n=Nn,r){if(So(this),t.hasOwnProperty(v0))return t[v0](this);let o=kn(r),i,s=dt(this),u=_e(void 0);try{if(!(o&4)){let c=this.records.get(t);if(c===void 0){let l=_E(t)&&Fo(t);l&&this.injectableDefInScope(l)?c=wr(Dc(t),gs):c=null,this.records.set(t,c)}if(c!=null)return this.hydrate(t,c,o)}let a=o&2?Tr():this.parent;return n=o&8&&n===Nn?null:n,a.get(t,n)}catch(a){let c=aE(a);throw c===-200||c===-201?new _(c,null):a}finally{_e(u),dt(s)}}resolveInjectorInitializers(){let t=M(null),n=dt(this),r=_e(void 0),o;try{let i=this.get(Ir,ye,{self:!0});for(let s of i)s()}finally{dt(n),_e(r),M(t)}}toString(){let t=[],n=this.records;for(let r of n.keys())t.push(kt(r));return`R3Injector[${t.join(", ")}]`}processProvider(t){t=ue(t);let n=Rn(t)?t:ue(t&&t.provide),r=vE(t);if(!Rn(t)&&t.multi===!0){let o=this.records.get(n);o||(o=wr(void 0,gs,!0),o.factory=()=>vc(o.multi),this.records.set(n,o)),n=t,o.multi.push(t)}this.records.set(n,r)}hydrate(t,n,r){let o=M(null);try{if(n.value===D0)throw Fc(kt(t));return n.value===gs&&(n.value=D0,n.value=n.factory(void 0,r)),typeof n.value=="object"&&n.value&&EE(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}finally{M(o)}}injectableDefInScope(t){if(!t.providedIn)return!1;let n=ue(t.providedIn);return typeof n=="string"?n==="any"||this.scopes.has(n):this.injectorDefTypes.has(n)}removeOnDestroy(t){let n=this._onDestroyHooks.indexOf(t);n!==-1&&this._onDestroyHooks.splice(n,1)}};function Dc(e){let t=Fo(e),n=t!==null?t.factory:sn(e);if(n!==null)return n;if(e instanceof x)throw new _(204,!1);if(e instanceof Function)return bE(e);throw new _(204,!1)}function bE(e){if(e.length>0)throw new _(204,!1);let n=iE(e);return n!==null?()=>n.factory(e):()=>new e}function vE(e){if(O0(e))return wr(void 0,e.useValue);{let t=Hc(e);return wr(t,gs)}}function Hc(e,t,n){let r;if(Rn(e)){let o=ue(e);return sn(o)||Dc(o)}else if(O0(e))r=()=>ue(e.useValue);else if(yE(e))r=()=>e.useFactory(...vc(e.deps||[]));else if(mE(e))r=(o,i)=>A(ue(e.useExisting),i!==void 0&&i&8?8:void 0);else{let o=ue(e&&(e.useClass||e.provide));if(DE(e))r=()=>new o(...vc(e.deps));else return sn(o)||Dc(o)}return r}function So(e){if(e.destroyed)throw new _(205,!1)}function wr(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function DE(e){return!!e.deps}function EE(e){return e!==null&&typeof e=="object"&&typeof e.ngOnDestroy=="function"}function _E(e){return typeof e=="function"||typeof e=="object"&&e.ngMetadataName==="InjectionToken"}function Ec(e,t){for(let n of e)Array.isArray(n)?Ec(n,t):n&&Sc(n)?Ec(n.\u0275providers,t):t(n)}function Sr(e,t){let n;e instanceof Fn?(So(e),n=e):n=new bc(e);let r,o=dt(n),i=_e(void 0);try{return t()}finally{dt(o),_e(i)}}function As(){return S0()!==void 0||hs()!=null}function CE(e){if(!As())throw new _(-203,!1)}var Qe=0,T=1,L=2,ae=3,He=4,Ie=5,Ln=6,Mr=7,ee=8,Rt=9,mt=10,Z=11,Ar=12,$c=13,jn=14,ve=15,cn=16,Bn=17,yt=18,Ft=19,Uc=20,Nt=21,Ns=22,un=23,ke=24,Vn=25,Hn=26,Q=27,L0=1,zc=6,ln=7,jo=8,$n=9,te=10;function bt(e){return Array.isArray(e)&&typeof e[L0]=="object"}function Ke(e){return Array.isArray(e)&&e[L0]===!0}function qc(e){return(e.flags&4)!==0}function Ot(e){return e.componentOffset>-1}function Nr(e){return(e.flags&1)===1}function Je(e){return!!e.template}function kr(e){return(e[L]&512)!==0}function Un(e){return(e[L]&256)===256}var Gc="svg",j0="math";function $e(e){for(;Array.isArray(e);)e=e[Qe];return e}function Wc(e,t){return $e(t[e])}function Ue(e,t){return $e(t[e.index])}function Bo(e,t){return e.data[t]}function Vo(e,t){return e[t]}function Ho(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function Re(e,t){let n=t[e];return bt(n)?n:n[Qe]}function B0(e){return(e[L]&4)===4}function ks(e){return(e[L]&128)===128}function V0(e){return Ke(e[ae])}function Fe(e,t){return t==null?null:e[t]}function Zc(e){e[Bn]=0}function Yc(e){e[L]&1024||(e[L]|=1024,ks(e)&&zn(e))}function H0(e,t){for(;e>0;)t=t[jn],e--;return t}function $o(e){return!!(e[L]&9216||e[ke]?.dirty)}function Rs(e){e[mt].changeDetectionScheduler?.notify(8),e[L]&64&&(e[L]|=1024),$o(e)&&zn(e)}function zn(e){e[mt].changeDetectionScheduler?.notify(0);let t=an(e);for(;t!==null&&!(t[L]&8192||(t[L]|=8192,!ks(t)));)t=an(t)}function Qc(e,t){if(Un(e))throw new _(911,!1);e[Nt]===null&&(e[Nt]=[]),e[Nt].push(t)}function $0(e,t){if(e[Nt]===null)return;let n=e[Nt].indexOf(t);n!==-1&&e[Nt].splice(n,1)}function an(e){let t=e[ae];return Ke(t)?t[ae]:t}function Kc(e){return e[Mr]??=[]}function Jc(e){return e.cleanup??=[]}function U0(e,t,n,r){let o=Kc(t);o.push(n),e.firstCreatePass&&Jc(e).push(r,o.length-1)}var V={lFrame:tg(null),bindingsEnabled:!0,skipHydrationRootTNode:null};var _c=!1;function z0(){return V.lFrame.elementDepthCount}function q0(){V.lFrame.elementDepthCount++}function Xc(){V.lFrame.elementDepthCount--}function Fs(){return V.bindingsEnabled}function el(){return V.skipHydrationRootTNode!==null}function tl(e){return V.skipHydrationRootTNode===e}function nl(){V.skipHydrationRootTNode=null}function C(){return V.lFrame.lView}function Y(){return V.lFrame.tView}function G0(e){return V.lFrame.contextLView=e,e[ee]}function W0(e){return V.lFrame.contextLView=null,e}function re(){let e=rl();for(;e!==null&&e.type===64;)e=e.parent;return e}function rl(){return V.lFrame.currentTNode}function Z0(){let e=V.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function qn(e,t){let n=V.lFrame;n.currentTNode=e,n.isParent=t}function ol(){return V.lFrame.isParent}function il(){V.lFrame.isParent=!1}function sl(){return V.lFrame.contextLView}function ul(){return _c}function No(e){let t=_c;return _c=e,t}function Rr(){let e=V.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function al(){return V.lFrame.bindingIndex}function Y0(e){return V.lFrame.bindingIndex=e}function Xe(){return V.lFrame.bindingIndex++}function Uo(e){let t=V.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function Q0(){return V.lFrame.inI18n}function K0(e,t){let n=V.lFrame;n.bindingIndex=n.bindingRootIndex=e,Os(t)}function J0(){return V.lFrame.currentDirectiveIndex}function Os(e){V.lFrame.currentDirectiveIndex=e}function X0(e){let t=V.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function Ps(){return V.lFrame.currentQueryIndex}function zo(e){V.lFrame.currentQueryIndex=e}function wE(e){let t=e[T];return t.type===2?t.declTNode:t.type===1?e[Ie]:null}function cl(e,t,n){if(n&4){let o=t,i=e;for(;o=o.parent,o===null&&!(n&1);)if(o=wE(i),o===null||(i=i[jn],o.type&10))break;if(o===null)return!1;t=o,e=i}let r=V.lFrame=eg();return r.currentTNode=t,r.lView=e,!0}function Ls(e){let t=eg(),n=e[T];V.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function eg(){let e=V.lFrame,t=e===null?null:e.child;return t===null?tg(e):t}function tg(e){let t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return e!==null&&(e.child=t),t}function ng(){let e=V.lFrame;return V.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var ll=ng;function js(){let e=ng();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function rg(e){return(V.lFrame.contextLView=H0(e,V.lFrame.contextLView))[ee]}function ze(){return V.lFrame.selectedIndex}function dn(e){V.lFrame.selectedIndex=e}function fn(){let e=V.lFrame;return Bo(e.tView,e.selectedIndex)}function og(){V.lFrame.currentNamespace=Gc}function ig(){xE()}function xE(){V.lFrame.currentNamespace=null}function sg(){return V.lFrame.currentNamespace}var ug=!0;function Bs(){return ug}function qo(e){ug=e}function Cc(e,t=null,n=null,r){let o=dl(e,t,n,r);return o.resolveInjectorInitializers(),o}function dl(e,t=null,n=null,r,o=new Set){let i=[n||ye,R0(e)];return r=r||(typeof e=="object"?void 0:kt(e)),new Fn(i,t||Tr(),r||null,o)}var we=class e{static THROW_IF_NOT_FOUND=Nn;static NULL=new Ao;static create(t,n){if(Array.isArray(t))return Cc({name:""},n,t,"");{let r=t.name??"";return Cc({name:r},t.parent,t.providers,r)}}static \u0275prov=I({token:e,providedIn:"any",factory:()=>A(Lc)});static __NG_ELEMENT_ID__=-1},K=new x(""),Oe=(()=>{class e{static __NG_ELEMENT_ID__=IE;static __NG_ENV_ID__=n=>n}return e})(),bs=class extends Oe{_lView;constructor(t){super(),this._lView=t}get destroyed(){return Un(this._lView)}onDestroy(t){let n=this._lView;return Qc(n,t),()=>$0(n,t)}};function IE(){return new bs(C())}var ag=!1,cg=new x(""),Gn=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Eo(!1);debugTaskTracker=b(cg,{optional:!0});get hasPendingTasks(){return this.destroyed?!1:this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new B(n=>{n.next(!1),n.complete()}):this.pendingTask}add(){!this.hasPendingTasks&&!this.destroyed&&this.pendingTask.next(!0);let n=this.taskId++;return this.pendingTasks.add(n),this.debugTaskTracker?.add(n),n}has(n){return this.pendingTasks.has(n)}remove(n){this.pendingTasks.delete(n),this.debugTaskTracker?.remove(n),this.pendingTasks.size===0&&this.hasPendingTasks&&this.pendingTask.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks&&this.pendingTask.next(!1),this.destroyed=!0,this.pendingTask.unsubscribe()}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),wc=class extends le{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(t=!1){super(),this.__isAsync=t,As()&&(this.destroyRef=b(Oe,{optional:!0})??void 0,this.pendingTasks=b(Gn,{optional:!0})??void 0)}emit(t){let n=M(null);try{super.next(t)}finally{M(n)}}subscribe(t,n,r){let o=t,i=n||(()=>null),s=r;if(t&&typeof t=="object"){let a=t;o=a.next?.bind(a),i=a.error?.bind(a),s=a.complete?.bind(a)}this.__isAsync&&(i=this.wrapInTimeout(i),o&&(o=this.wrapInTimeout(o)),s&&(s=this.wrapInTimeout(s)));let u=super.subscribe({next:o,error:i,complete:s});return t instanceof X&&t.add(u),u}wrapInTimeout(t){return n=>{let r=this.pendingTasks?.add();setTimeout(()=>{try{t(n)}finally{r!==void 0&&this.pendingTasks?.remove(r)}})}}},At=wc;function vs(...e){}function fl(e){let t,n;function r(){e=vs;try{n!==void 0&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(n),t!==void 0&&clearTimeout(t)}catch{}}return t=setTimeout(()=>{e(),r()}),typeof requestAnimationFrame=="function"&&(n=requestAnimationFrame(()=>{e(),r()})),()=>r()}function lg(e){return queueMicrotask(()=>e()),()=>{e=vs}}var pl="isAngularZone",ko=pl+"_ID",TE=0,be=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new At(!1);onMicrotaskEmpty=new At(!1);onStable=new At(!1);onError=new At(!1);constructor(t){let{enableLongStackTrace:n=!1,shouldCoalesceEventChangeDetection:r=!1,shouldCoalesceRunChangeDetection:o=!1,scheduleInRootZone:i=ag}=t;if(typeof Zone>"u")throw new _(908,!1);Zone.assertZonePatched();let s=this;s._nesting=0,s._outer=s._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(s._inner=s._inner.fork(new Zone.TaskTrackingZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(s._inner=s._inner.fork(Zone.longStackTraceZoneSpec)),s.shouldCoalesceEventChangeDetection=!o&&r,s.shouldCoalesceRunChangeDetection=o,s.callbackScheduled=!1,s.scheduleInRootZone=i,AE(s)}static isInAngularZone(){return typeof Zone<"u"&&Zone.current.get(pl)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new _(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new _(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){let i=this._inner,s=i.scheduleEventTask("NgZoneEvent: "+o,t,SE,vs,vs);try{return i.runTask(s,n,r)}finally{i.cancelTask(s)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}},SE={};function hl(e){if(e._nesting==0&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function ME(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){fl(()=>{e.callbackScheduled=!1,xc(e),e.isCheckStableRunning=!0,hl(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),xc(e)}function AE(e){let t=()=>{ME(e)},n=TE++;e._inner=e._inner.fork({name:"angular",properties:{[pl]:!0,[ko]:n,[ko+n]:!0},onInvokeTask:(r,o,i,s,u,a)=>{if(NE(a))return r.invokeTask(i,s,u,a);try{return E0(e),r.invokeTask(i,s,u,a)}finally{(e.shouldCoalesceEventChangeDetection&&s.type==="eventTask"||e.shouldCoalesceRunChangeDetection)&&t(),_0(e)}},onInvoke:(r,o,i,s,u,a,c)=>{try{return E0(e),r.invoke(i,s,u,a,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!kE(a)&&t(),_0(e)}},onHasTask:(r,o,i,s)=>{r.hasTask(i,s),o===i&&(s.change=="microTask"?(e._hasPendingMicrotasks=s.microTask,xc(e),hl(e)):s.change=="macroTask"&&(e.hasPendingMacrotasks=s.macroTask))},onHandleError:(r,o,i,s)=>(r.handleError(i,s),e.runOutsideAngular(()=>e.onError.emit(s)),!1)})}function xc(e){e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0?e.hasPendingMicrotasks=!0:e.hasPendingMicrotasks=!1}function E0(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function _0(e){e._nesting--,hl(e)}var Ro=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new At;onMicrotaskEmpty=new At;onStable=new At;onError=new At;run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}};function NE(e){return dg(e,"__ignore_ng_zone__")}function kE(e){return dg(e,"__scheduler_tick__")}function dg(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var Ve=class{_console=console;handleError(t){this._console.error("ERROR",t)}},Pt=new x("",{factory:()=>{let e=b(be),t=b(Ce),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(Ve),n.handleError(r))})}}}),fg={provide:Ir,useValue:()=>{let e=b(Ve,{optional:!0})},multi:!0};function pn(e,t){let[n,r,o]=Ua(e,t?.equal),i=n,s=i[ne];return i.set=r,i.update=o,i.asReadonly=Go.bind(i),i}function Go(){let e=this[ne];if(e.readonlyFn===void 0){let t=()=>this();t[ne]=e,e.readonlyFn=t}return e.readonlyFn}var Fr=(()=>{class e{view;node;constructor(n,r){this.view=n,this.node=r}static __NG_ELEMENT_ID__=RE}return e})();function RE(){return new Fr(C(),re())}var ft=class{},Wo=new x("",{factory:()=>!0});var gl=new x(""),Wn=(()=>{class e{internalPendingTasks=b(Gn);scheduler=b(ft);errorHandler=b(Pt);add(){let n=this.internalPendingTasks.add();return()=>{this.internalPendingTasks.has(n)&&(this.scheduler.notify(11),this.internalPendingTasks.remove(n))}}run(n){let r=this.add();n().catch(this.errorHandler).finally(r)}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),Vs=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:()=>new Ic})}return e})(),Ic=class{dirtyEffectCount=0;queues=new Map;add(t){this.enqueue(t),this.schedule(t)}schedule(t){t.dirty&&this.dirtyEffectCount++}remove(t){let n=t.zone,r=this.queues.get(n);r.has(t)&&(r.delete(t),t.dirty&&this.dirtyEffectCount--)}enqueue(t){let n=t.zone;this.queues.has(n)||this.queues.set(n,new Set);let r=this.queues.get(n);r.has(t)||r.add(t)}flush(){for(;this.dirtyEffectCount>0;){let t=!1;for(let[n,r]of this.queues)n===null?t||=this.flushQueue(r):t||=n.run(()=>this.flushQueue(r));t||(this.dirtyEffectCount=0)}}flushQueue(t){let n=!1;for(let r of t)r.dirty&&(this.dirtyEffectCount--,n=!0,r.run());return n}},Ds=class{[ne];constructor(t){this[ne]=t}destroy(){this[ne].destroy()}};function Zo(e,t){let n=t?.injector??b(we),r=t?.manualCleanup!==!0?n.get(Oe):null,o,i=n.get(Fr,null,{optional:!0}),s=n.get(ft);return i!==null?(o=PE(i.view,s,e),r instanceof bs&&r._lView===i.view&&(r=null)):o=LE(e,n.get(Vs),s),o.injector=n,r!==null&&(o.onDestroyFns=[r.onDestroy(()=>o.destroy())]),new Ds(o)}var pg=P(S({},qa),{cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=No(!1);try{Ga(this)}finally{No(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=M(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],M(e)}}}),FE=P(S({},pg),{consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(en(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}}),OE=P(S({},pg),{consumerMarkedDirty(){this.view[L]|=8192,zn(this.view),this.notifier.notify(13)},destroy(){if(en(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[un]?.delete(this)}});function PE(e,t,n){let r=Object.create(OE);return r.view=e,r.zone=typeof Zone<"u"?Zone.current:null,r.notifier=t,r.fn=hg(r,n),e[un]??=new Set,e[un].add(r),r.consumerMarkedDirty(r),r}function LE(e,t,n){let r=Object.create(FE);return r.fn=hg(r,e),r.scheduler=t,r.notifier=n,r.zone=typeof Zone<"u"?Zone.current:null,r.scheduler.add(r),r.notifier.notify(12),r}function hg(e,t){return()=>{t(n=>(e.cleanupFns??=[]).push(n))}}function de(e){return za(e)}function si(e){return{toString:e}.toString()}function zE(e){return typeof e=="function"}function Kg(e,t,n,r){t!==null?t.applyValueToInputSignal(t,r):e[n]=r}var Qs=class{previousValue;currentValue;firstChange;constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}},hu=(()=>{let e=()=>Jg;return e.ngInherit=!0,e})();function Jg(e){return e.type.prototype.ngOnChanges&&(e.setInput=GE),qE}function qE(){let e=em(this),t=e?.current;if(t){let n=e.previous;if(n===Ye)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function GE(e,t,n,r,o){let i=this.declaredInputs[r],s=em(e)||WE(e,{previous:Ye,current:null}),u=s.current||(s.current={}),a=s.previous,c=a[i];u[i]=new Qs(c&&c.currentValue,n,a===Ye),Kg(e,t,o,n)}var Xg="__ngSimpleChanges__";function em(e){return e[Xg]||null}function WE(e,t){return e[Xg]=t}var gg=[];var W=function(e,t=null,n){for(let r=0;r=r)break}else t[a]<0&&(e[Bn]+=65536),(u>14>16&&(e[L]&3)===t&&(e[L]+=16384,mg(u,i)):mg(u,i)}var Pr=-1,Yn=class{factory;name;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(t,n,r,o){this.factory=t,this.name=o,this.canSeeViewProviders=n,this.injectImpl=r}};function QE(e){return(e.flags&8)!==0}function KE(e){return(e.flags&16)!==0}function JE(e,t,n){let r=0;for(;rt){s=i-1;break}}}for(;i>16}function Js(e,t){let n=e_(e),r=t;for(;n>0;)r=r[jn],n--;return r}var Il=!0;function Xs(e){let t=Il;return Il=e,t}var t_=256,im=t_-1,sm=5,n_=0,vt={};function r_(e,t,n){let r;typeof n=="string"?r=n.charCodeAt(0)||0:n.hasOwnProperty(On)&&(r=n[On]),r==null&&(r=n[On]=n_++);let o=r&im,i=1<>sm)]|=i}function eu(e,t){let n=um(e,t);if(n!==-1)return n;let r=t[T];r.firstCreatePass&&(e.injectorIndex=t.length,yl(r.data,e),yl(t,null),yl(r.blueprint,null));let o=sd(e,t),i=e.injectorIndex;if(om(o)){let s=Ks(o),u=Js(o,t),a=u[T].data;for(let c=0;c<8;c++)t[i+c]=u[s+c]|a[s+c]}return t[i+8]=o,i}function yl(e,t){e.push(0,0,0,0,0,0,0,0,t)}function um(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function sd(e,t){if(e.parent&&e.parent.injectorIndex!==-1)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;o!==null;){if(r=fm(o),r===null)return Pr;if(n++,o=o[jn],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return Pr}function Tl(e,t,n){r_(e,t,n)}function o_(e,t){if(t==="class")return e.classes;if(t==="style")return e.styles;let n=e.attrs;if(n){let r=n.length,o=0;for(;o>20,d=r?u:u+l,h=o?u+l:c;for(let f=d;f=a&&p.type===n)return f}if(o){let f=s[a];if(f&&Je(f)&&f.type===n)return a}return null}function Ko(e,t,n,r,o){let i=e[n],s=t.data;if(i instanceof Yn){let u=i;if(u.resolving){let f=x0(s[n]);throw Fc(f)}let a=Xs(u.canSeeViewProviders);u.resolving=!0;let c=s[n].type||s[n],l,d=u.injectImpl?_e(u.injectImpl):null,h=cl(e,r,0);try{i=e[n]=u.factory(void 0,o,s,e,r),t.firstCreatePass&&n>=r.directiveStart&&ZE(n,s[n],t)}finally{d!==null&&_e(d),Xs(a),u.resolving=!1,ll()}}return i}function s_(e){if(typeof e=="string")return e.charCodeAt(0)||0;let t=e.hasOwnProperty(On)?e[On]:void 0;return typeof t=="number"?t>=0?t&im:u_:t}function bg(e,t,n){let r=1<>sm)]&r)}function vg(e,t){return!(e&2)&&!(e&1&&t)}var Zn=class{_tNode;_lView;constructor(t,n){this._tNode=t,this._lView=n}get(t,n,r){return lm(this._tNode,this._lView,t,kn(r),n)}};function u_(){return new Zn(re(),C())}function Ur(e){return si(()=>{let t=e.prototype.constructor,n=t[Mo]||Sl(t),r=Object.prototype,o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){let i=o[Mo]||Sl(o);if(i&&i!==n)return i;o=Object.getPrototypeOf(o)}return i=>new i})}function Sl(e){return Tc(e)?()=>{let t=Sl(ue(e));return t&&t()}:sn(e)}function a_(e,t,n,r,o){let i=e,s=t;for(;i!==null&&s!==null&&s[L]&2048&&!kr(s);){let u=dm(i,s,n,r|2,vt);if(u!==vt)return u;let a=i.parent;if(!a){let c=s[Uc];if(c){let l=c.get(n,vt,r);if(l!==vt)return l}a=fm(s),s=s[jn]}i=a}return o}function fm(e){let t=e[T],n=t.type;return n===2?t.declTNode:n===1?e[Ie]:null}function ud(e){return o_(re(),e)}function c_(){return zr(re(),C())}function zr(e,t){return new jt(Ue(e,t))}var jt=(()=>{class e{nativeElement;constructor(n){this.nativeElement=n}static __NG_ELEMENT_ID__=c_}return e})();function pm(e){return e instanceof jt?e.nativeElement:e}function l_(){return this._results[Symbol.iterator]()}var tu=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new le}constructor(t=!1){this._emitDistinctChangesOnly=t}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){this.dirty=!1;let r=A0(t);(this._changesDetected=!M0(this._results,r,n))&&(this._results=r,this.length=r.length,this.last=r[this.length-1],this.first=r[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(t){this._onDirty=t}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=l_};function hm(e){return(e.flags&128)===128}var ad=(function(e){return e[e.OnPush=0]="OnPush",e[e.Default=1]="Default",e})(ad||{}),gm=new Map,d_=0;function f_(){return d_++}function p_(e){gm.set(e[Ft],e)}function Ml(e){gm.delete(e[Ft])}var Dg="__ngContext__";function jr(e,t){bt(t)?(e[Dg]=t[Ft],p_(t)):e[Dg]=t}function mm(e){return bm(e[Ar])}function ym(e){return bm(e[He])}function bm(e){for(;e!==null&&!Ke(e);)e=e[He];return e}var Al;function cd(e){Al=e}function vm(){if(Al!==void 0)return Al;if(typeof document<"u")return document;throw new _(210,!1)}var gu=new x("",{factory:()=>h_}),h_="ng";var mu=new x(""),Xn=new x("",{providedIn:"platform",factory:()=>"unknown"}),g_=new x(""),yu=new x("",{factory:()=>b(K).body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});var Dm="r";var Em="di";var _m=!1,Cm=new x("",{factory:()=>_m});var wm=new x("");var m_=(e,t,n,r)=>{};function y_(e,t,n,r){m_(e,t,n,r)}function bu(e){return(e.flags&32)===32}var b_=()=>null;function xm(e,t,n=!1){return b_(e,t,n)}function Im(e,t){let n=e.contentQueries;if(n!==null){let r=M(null);try{for(let o=0;oe,createScript:e=>e,createScriptURL:e=>e})}catch{}return Hs}function vu(e){return v_()?.createHTML(e)||e}var $s;function D_(){if($s===void 0&&($s=null,xe.trustedTypes))try{$s=xe.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return $s}function Eg(e){return D_()?.createHTML(e)||e}var Lt=class{changingThisBreaksApplicationSecurity;constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Es})`}},kl=class extends Lt{getTypeName(){return"HTML"}},Rl=class extends Lt{getTypeName(){return"Style"}},Fl=class extends Lt{getTypeName(){return"Script"}},Ol=class extends Lt{getTypeName(){return"URL"}},Pl=class extends Lt{getTypeName(){return"ResourceURL"}};function Pe(e){return e instanceof Lt?e.changingThisBreaksApplicationSecurity:e}function Bt(e,t){let n=Tm(e);if(n!=null&&n!==t){if(n==="ResourceURL"&&t==="URL")return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${Es})`)}return n===t}function Tm(e){return e instanceof Lt&&e.getTypeName()||null}function dd(e){return new kl(e)}function fd(e){return new Rl(e)}function pd(e){return new Fl(e)}function hd(e){return new Ol(e)}function gd(e){return new Pl(e)}function E_(e){let t=new jl(e);return __()?new Ll(t):t}var Ll=class{inertDocumentHelper;constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{let n=new window.DOMParser().parseFromString(vu(t),"text/html").body;return n===null?this.inertDocumentHelper.getInertBodyElement(t):(n.firstChild?.remove(),n)}catch{return null}}},jl=class{defaultDoc;inertDocument;constructor(t){this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert")}getInertBodyElement(t){let n=this.inertDocument.createElement("template");return n.innerHTML=vu(t),n}};function __(){try{return!!new window.DOMParser().parseFromString(vu(""),"text/html")}catch{return!1}}var C_=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function ui(e){return e=String(e),e.match(C_)?e:"unsafe:"+e}function Vt(e){let t={};for(let n of e.split(","))t[n]=!0;return t}function ai(...e){let t={};for(let n of e)for(let r in n)n.hasOwnProperty(r)&&(t[r]=!0);return t}var Sm=Vt("area,br,col,hr,img,wbr"),Mm=Vt("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),Am=Vt("rp,rt"),w_=ai(Am,Mm),x_=ai(Mm,Vt("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),I_=ai(Am,Vt("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),_g=ai(Sm,x_,I_,w_),Nm=Vt("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),T_=Vt("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),S_=Vt("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext"),M_=ai(Nm,T_,S_),A_=Vt("script,style,template"),Bl=class{sanitizedSomething=!1;buf=[];sanitizeChildren(t){let n=t.firstChild,r=!0,o=[];for(;n;){if(n.nodeType===Node.ELEMENT_NODE?r=this.startElement(n):n.nodeType===Node.TEXT_NODE?this.chars(n.nodeValue):this.sanitizedSomething=!0,r&&n.firstChild){o.push(n),n=R_(n);continue}for(;n;){n.nodeType===Node.ELEMENT_NODE&&this.endElement(n);let i=k_(n);if(i){n=i;break}n=o.pop()}}return this.buf.join("")}startElement(t){let n=Cg(t).toLowerCase();if(!_g.hasOwnProperty(n))return this.sanitizedSomething=!0,!A_.hasOwnProperty(n);this.buf.push("<"),this.buf.push(n);let r=t.attributes;for(let o=0;o"),!0}endElement(t){let n=Cg(t).toLowerCase();_g.hasOwnProperty(n)&&!Sm.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(wg(t))}};function N_(e,t){return(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)!==Node.DOCUMENT_POSITION_CONTAINED_BY}function k_(e){let t=e.nextSibling;if(t&&e!==t.previousSibling)throw km(t);return t}function R_(e){let t=e.firstChild;if(t&&N_(e,t))throw km(t);return t}function Cg(e){let t=e.nodeName;return typeof t=="string"?t:"FORM"}function km(e){return new Error(`Failed to sanitize html because the element is clobbered: ${e.outerHTML}`)}var F_=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,O_=/([^\#-~ |!])/g;function wg(e){return e.replace(/&/g,"&").replace(F_,function(t){let n=t.charCodeAt(0),r=t.charCodeAt(1);return"&#"+((n-55296)*1024+(r-56320)+65536)+";"}).replace(O_,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}var Us;function Du(e,t){let n=null;try{Us=Us||E_(e);let r=t?String(t):"";n=Us.getInertBodyElement(r);let o=5,i=r;do{if(o===0)throw new Error("Failed to sanitize html because the input is unstable");o--,r=i,i=n.innerHTML,n=Us.getInertBodyElement(r)}while(r!==i);let u=new Bl().sanitizeChildren(xg(n)||n);return vu(u)}finally{if(n){let r=xg(n)||n;for(;r.firstChild;)r.firstChild.remove()}}}function xg(e){return"content"in e&&P_(e)?e.content:null}function P_(e){return e.nodeType===Node.ELEMENT_NODE&&e.nodeName==="TEMPLATE"}var L_=/^>|^->||--!>|)/g,B_="\u200B$1\u200B";function V_(e){return e.replace(L_,t=>t.replace(j_,B_))}function H_(e,t){return e.createText(t)}function $_(e,t,n){e.setValue(t,n)}function U_(e,t){return e.createComment(V_(t))}function Rm(e,t,n){return e.createElement(t,n)}function nu(e,t,n,r,o){e.insertBefore(t,n,r,o)}function Fm(e,t,n){e.appendChild(t,n)}function Ig(e,t,n,r,o){r!==null?nu(e,t,n,r,o):Fm(e,t,n)}function Om(e,t,n,r){e.removeChild(null,t,n,r)}function z_(e,t,n){e.setAttribute(t,"style",n)}function q_(e,t,n){n===""?e.removeAttribute(t,"class"):e.setAttribute(t,"class",n)}function Pm(e,t,n){let{mergedAttrs:r,classes:o,styles:i}=n;r!==null&&JE(e,t,r),o!==null&&q_(e,t,o),i!==null&&z_(e,t,i)}var Le=(function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e})(Le||{});function md(e){let t=Lm();return t?Eg(t.sanitize(Le.HTML,e)||""):Bt(e,"HTML")?Eg(Pe(e)):Du(vm(),Ne(e))}function G_(e){let t=Lm();return t?t.sanitize(Le.URL,e)||"":Bt(e,"URL")?Pe(e):ui(Ne(e))}function Lm(){let e=C();return e&&e[mt].sanitizer}function W_(e){return e.ownerDocument.defaultView}function Z_(e){return e.ownerDocument}function jm(e){return e instanceof Function?e():e}function Y_(e,t,n){let r=e.length;for(;;){let o=e.indexOf(t,n);if(o===-1)return o;if(o===0||e.charCodeAt(o-1)<=32){let i=t.length;if(o+i===r||e.charCodeAt(o+i)<=32)return o}n=o+1}}var Bm="ng-template";function Q_(e,t,n,r){let o=0;if(r){for(;o-1){let i;for(;++oi?d="":d=o[l+1].toLowerCase(),r&2&&c!==d){if(et(r))return!1;s=!0}}}}return et(r)||s}function et(e){return(e&1)===0}function X_(e,t,n,r){if(t===null)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+u+'"':"")+"]"}else r&8?o+="."+s:r&4&&(o+=" "+s);else o!==""&&!et(s)&&(t+=Tg(i,o),o=""),r=s,i=i||!et(r);n++}return o!==""&&(t+=Tg(i,o)),t}function iC(e){return e.map(oC).join(",")}function sC(e){let t=[],n=[],r=1,o=2;for(;r{class e{impl=null;execute(){this.impl?.execute()}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),_d=[0,1,2,3],Cd=(()=>{class e{ngZone=b(be);scheduler=b(ft);errorHandler=b(Ve,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){b(Dt,{optional:!0})}execute(){let n=this.sequences.size>0;n&&W(q.AfterRenderHooksStart),this.executing=!0;for(let r of _d)for(let o of this.sequences)if(!(o.erroredOrDestroyed||!o.hooks[r]))try{o.pipelinedValue=this.ngZone.runOutsideAngular(()=>this.maybeTrace(()=>{let i=o.hooks[r];return i(o.pipelinedValue)},o.snapshot))}catch(i){o.erroredOrDestroyed=!0,this.errorHandler?.handleError(i)}this.executing=!1;for(let r of this.sequences)r.afterRun(),r.once&&(this.sequences.delete(r),r.destroy());for(let r of this.deferredRegistrations)this.sequences.add(r);this.deferredRegistrations.size>0&&this.scheduler.notify(7),this.deferredRegistrations.clear(),n&&W(q.AfterRenderHooksEnd)}register(n){let{view:r}=n;r!==void 0?((r[Vn]??=[]).push(n),zn(r),r[L]|=8192):this.executing?this.deferredRegistrations.add(n):this.addSequence(n)}addSequence(n){this.sequences.add(n),this.scheduler.notify(7)}unregister(n){this.executing&&this.sequences.has(n)?(n.erroredOrDestroyed=!0,n.pipelinedValue=void 0,n.once=!0):(this.sequences.delete(n),this.deferredRegistrations.delete(n))}maybeTrace(n,r){return r?r.run(_u.AFTER_NEXT_RENDER,n):n()}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),Xo=class{impl;hooks;view;once;snapshot;erroredOrDestroyed=!1;pipelinedValue=void 0;unregisterOnDestroy;constructor(t,n,r,o,i,s=null){this.impl=t,this.hooks=n,this.view=r,this.once=o,this.snapshot=s,this.unregisterOnDestroy=i?.onDestroy(()=>this.destroy())}afterRun(){this.erroredOrDestroyed=!1,this.pipelinedValue=void 0,this.snapshot?.dispose(),this.snapshot=null}destroy(){this.impl.unregister(this),this.unregisterOnDestroy?.();let t=this.view?.[Vn];t&&(this.view[Vn]=t.filter(n=>n!==this))}};function dC(e,t){let n=t?.injector??b(we);return Ht("NgAfterNextRender"),pC(e,n,t,!0)}function fC(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function pC(e,t,n,r){let o=t.get(Cu);o.impl??=t.get(Cd);let i=t.get(Dt,null,{optional:!0}),s=n?.manualCleanup!==!0?t.get(Oe):null,u=t.get(Fr,null,{optional:!0}),a=new Xo(o.impl,fC(e),u?.view,r,s,i?.snapshot(null));return o.impl.register(a),a}var zm=new x("",{factory:()=>({queue:new Set,isScheduled:!1,scheduler:null,injector:b(Ce)})});function qm(e,t,n){let r=e.get(zm);if(Array.isArray(t))for(let o of t)r.queue.add(o),n?.detachedLeaveAnimationFns?.push(o);else r.queue.add(t),n?.detachedLeaveAnimationFns?.push(t);r.scheduler&&r.scheduler(e)}function hC(e,t){let n=e.get(zm);if(t.detachedLeaveAnimationFns){for(let r of t.detachedLeaveAnimationFns)n.queue.delete(r);t.detachedLeaveAnimationFns=void 0}}function gC(e,t){for(let[n,r]of t)qm(e,r.animateFns)}function Mg(e,t,n,r){let o=e?.[Hn]?.enter;t!==null&&o&&o.has(n.index)&&gC(r,o)}function Or(e,t,n,r,o,i,s,u){if(o!=null){let a,c=!1;Ke(o)?a=o:bt(o)&&(c=!0,o=o[Qe]);let l=$e(o);e===0&&r!==null?(Mg(u,r,i,n),s==null?Fm(t,r,l):nu(t,r,l,s||null,!0)):e===1&&r!==null?(Mg(u,r,i,n),nu(t,r,l,s||null,!0)):e===2?Ag(u,i,n,d=>{Om(t,l,c,d)}):e===3&&Ag(u,i,n,()=>{t.destroyNode(l)}),a!=null&&IC(t,e,n,a,i,r,s)}}function mC(e,t){Gm(e,t),t[Qe]=null,t[Ie]=null}function yC(e,t,n,r,o,i){r[Qe]=o,r[Ie]=t,xu(e,r,n,1,o,i)}function Gm(e,t){t[mt].changeDetectionScheduler?.notify(9),xu(e,t,t[Z],2,null,null)}function bC(e){let t=e[Ar];if(!t)return bl(e[T],e);for(;t;){let n=null;if(bt(t))n=t[Ar];else{let r=t[te];r&&(n=r)}if(!n){for(;t&&!t[He]&&t!==e;)bt(t)&&bl(t[T],t),t=t[ae];t===null&&(t=e),bt(t)&&bl(t[T],t),n=t&&t[He]}t=n}}function wd(e,t){let n=e[$n],r=n.indexOf(t);n.splice(r,1)}function wu(e,t){if(Un(t))return;let n=t[Z];n.destroyNode&&xu(e,t,n,3,null,null),bC(t)}function bl(e,t){if(Un(t))return;let n=M(null);try{t[L]&=-129,t[L]|=256,t[ke]&&en(t[ke]),EC(e,t),DC(e,t),t[T].type===1&&t[Z].destroy();let r=t[cn];if(r!==null&&Ke(t[ae])){r!==t[ae]&&wd(r,t);let o=t[yt];o!==null&&o.detachView(e)}Ml(t)}finally{M(n)}}function Ag(e,t,n,r){let o=e?.[Hn];if(o==null||o.leave==null||!o.leave.has(t.index))return r(!1);e&&Qn.add(e[Ft]),qm(n,()=>{if(o.leave&&o.leave.has(t.index)){let s=o.leave.get(t.index),u=[];if(s){for(let a=0;a{e[Hn].running=void 0,Qn.delete(e[Ft]),t(!0)});return}t(!1)}function DC(e,t){let n=e.cleanup,r=t[Mr];if(n!==null)for(let s=0;s=0?r[u]():r[-u].unsubscribe(),s+=2}else{let u=r[n[s+1]];n[s].call(u)}r!==null&&(t[Mr]=null);let o=t[Nt];if(o!==null){t[Nt]=null;for(let s=0;sQ&&Um(e,t,Q,!1);let u=s?q.TemplateUpdateStart:q.TemplateCreateStart;W(u,o,n),n(r,o)}finally{dn(i);let u=s?q.TemplateUpdateEnd:q.TemplateCreateEnd;W(u,o,n)}}function Iu(e,t,n){kC(e,t,n),(n.flags&64)===64&&RC(e,t,n)}function ci(e,t,n=Ue){let r=t.localNames;if(r!==null){let o=t.index+1;for(let i=0;inull;function NC(e){return e==="class"?"className":e==="for"?"htmlFor":e==="formaction"?"formAction":e==="innerHtml"?"innerHTML":e==="readonly"?"readOnly":e==="tabindex"?"tabIndex":e}function Jm(e,t,n,r,o,i){let s=t[T];if(Tu(e,s,t,n,r)){Ot(e)&&ey(t,e.index);return}e.type&3&&(n=NC(n)),Xm(e,t,n,r,o,i)}function Xm(e,t,n,r,o,i){if(e.type&3){let s=Ue(e,t);r=i!=null?i(r,e.value||"",n):r,o.setProperty(s,n,r)}else e.type&12}function ey(e,t){let n=Re(t,e);n[L]&16||(n[L]|=64)}function kC(e,t,n){let r=n.directiveStart,o=n.directiveEnd;Ot(n)&&cC(t,n,e.data[r+n.componentOffset]),e.firstCreatePass||eu(n,t);let i=n.initialInputs;for(let s=r;s=u&&f<=a){let p=t.data[f],g=d[h+1];Jo(p,n[f],g,i),c=!0}else if(f>a)break}}return s!==null&&r.inputs.hasOwnProperty(o)&&(Jo(r,n[s],o,i),c=!0),c}function BC(e,t){let n=Re(t,e),r=n[T];VC(r,n);let o=n[Qe];o!==null&&n[Ln]===null&&(n[Ln]=xm(o,n[Rt])),W(q.ComponentStart);try{Ad(r,n,n[ee])}finally{W(q.ComponentEnd,n[ee])}}function VC(e,t){for(let n=t.length;n{zn(e.lView)},consumerOnSignalRead(){this.lView[ke]=this}});function GC(e){let t=e[ke]??Object.create(WC);return t.lView=e,t}var WC=P(S({},Kt),{consumerIsAlwaysLive:!0,kind:"template",consumerMarkedDirty:e=>{let t=an(e.lView);for(;t&&!iy(t[T]);)t=an(t);t&&Yc(t)},consumerOnSignalRead(){this.lView[ke]=this}});function iy(e){return e.type!==2}function sy(e){if(e[un]===null)return;let t=!0;for(;t;){let n=!1;for(let r of e[un])r.dirty&&(n=!0,r.zone===null||Zone.current===r.zone?r.run():r.zone.run(()=>r.run()));t=n&&!!(e[L]&8192)}}var ZC=100;function uy(e,t=0){let r=e[mt].rendererFactory,o=!1;o||r.begin?.();try{YC(e,t)}finally{o||r.end?.()}}function YC(e,t){let n=ul();try{No(!0),Hl(e,t);let r=0;for(;$o(e);){if(r===ZC)throw new _(103,!1);r++,Hl(e,1)}}finally{No(n)}}function QC(e,t,n,r){if(Un(t))return;let o=t[L],i=!1,s=!1;Ls(t);let u=!0,a=null,c=null;i||(iy(e)?(c=$C(t),a=It(c)):ji()===null?(u=!1,c=GC(t),a=It(c)):t[ke]&&(en(t[ke]),t[ke]=null));try{Zc(t),Y0(e.bindingStartIndex),n!==null&&Km(e,t,n,2,r);let l=(o&3)===3;if(!i)if(l){let f=e.preOrderCheckHooks;f!==null&&qs(t,f,null)}else{let f=e.preOrderHooks;f!==null&&Gs(t,f,0,null),ml(t,0)}if(s||KC(t),sy(t),ay(t,0),e.contentQueries!==null&&Im(e,t),!i)if(l){let f=e.contentCheckHooks;f!==null&&qs(t,f)}else{let f=e.contentHooks;f!==null&&Gs(t,f,1),ml(t,1)}XC(e,t);let d=e.components;d!==null&&ly(t,d,0);let h=e.viewQuery;if(h!==null&&Nl(2,h,r),!i)if(l){let f=e.viewCheckHooks;f!==null&&qs(t,f)}else{let f=e.viewHooks;f!==null&&Gs(t,f,2),ml(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[Ns]){for(let f of t[Ns])f();t[Ns]=null}i||(ry(t),t[L]&=-73)}catch(l){throw i||zn(t),l}finally{c!==null&&(Xt(c,a),u&&zC(c)),js()}}function ay(e,t){for(let n=mm(e);n!==null;n=ym(n))for(let r=te;r0&&(e[n-1][He]=r[He]);let i=Oo(e,te+t);mC(r[T],r);let s=i[yt];s!==null&&s.detachView(i[T]),r[ae]=null,r[He]=null,r[L]&=-129}return r}function ew(e,t,n,r){let o=te+r,i=n.length;r>0&&(n[o-1][He]=t),r-1&&(ti(t,r),Oo(n,r))}this._attachedToViewContainer=!1}wu(this._lView[T],this._lView)}onDestroy(t){Qc(this._lView,t)}markForCheck(){Su(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[L]&=-129}reattach(){Rs(this._lView),this._lView[L]|=128}detectChanges(){this._lView[L]|=1024,uy(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new _(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let t=kr(this._lView),n=this._lView[cn];n!==null&&!t&&wd(n,this._lView),Gm(this._lView[T],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new _(902,!1);this._appRef=t;let n=kr(this._lView),r=this._lView[cn];r!==null&&!n&&hy(r,this._lView),Rs(this._lView)}};var gn=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=tw;constructor(n,r,o){this._declarationLView=n,this._declarationTContainer=r,this.elementRef=o}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(n,r){return this.createEmbeddedViewImpl(n,r)}createEmbeddedViewImpl(n,r,o){let i=li(this._declarationLView,this._declarationTContainer,n,{embeddedViewInjector:r,dehydratedView:o});return new hn(i)}}return e})();function tw(){return Mu(re(),C())}function Mu(e,t){return e.type&4?new gn(t,e,zr(e,t)):null}function er(e,t,n,r,o){let i=e.data[t];if(i===null)i=nw(e,t,n,r,o),Q0()&&(i.flags|=32);else if(i.type&64){i.type=n,i.value=r,i.attrs=o;let s=Z0();i.injectorIndex=s===null?-1:s.injectorIndex}return qn(i,!0),i}function nw(e,t,n,r,o){let i=rl(),s=ol(),u=s?i:i&&i.parent,a=e.data[t]=ow(e,u,n,t,r,o);return rw(e,a,i,s),a}function rw(e,t,n,r){e.firstChild===null&&(e.firstChild=t),n!==null&&(r?n.child==null&&t.parent!==null&&(n.child=t):n.next===null&&(n.next=t,t.prev=n))}function ow(e,t,n,r,o,i){let s=t?t.injectorIndex:-1,u=0;return el()&&(u|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:s,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,fieldIndex:-1,customControlIndex:-1,propertyBindings:null,flags:u,providerIndexes:0,value:o,attrs:i,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}function iw(e){let t=e[zc]??[],r=e[ae][Z],o=[];for(let i of t)i.data[Em]!==void 0?o.push(i):sw(i,r);e[zc]=o}function sw(e,t){let n=0,r=e.firstChild;if(r){let o=e.data[Dm];for(;nnull,aw=()=>null;function ru(e,t){return uw(e,t)}function gy(e,t,n){return aw(e,t,n)}var my=class{},Au=class{},$l=class{resolveComponentFactory(t){throw new _(917,!1)}},fi=class{static NULL=new $l},Kn=class{},pi=(()=>{class e{destroyNode=null;static __NG_ELEMENT_ID__=()=>cw()}return e})();function cw(){let e=C(),t=re(),n=Re(t.index,e);return(bt(n)?n:e)[Z]}var yy=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:()=>null})}return e})();var Zs={},Ul=class{injector;parentInjector;constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){let o=this.injector.get(t,Zs,r);return o!==Zs||n===Zs?o:this.parentInjector.get(t,n,r)}};function ou(e,t,n){let r=n?e.styles:null,o=n?e.classes:null,i=0;if(t!==null)for(let s=0;s0&&(n.directiveToIndex=new Map);for(let h=0;h0;){let n=e[--t];if(typeof n=="number"&&n<0)return n}return 0}function bw(e,t,n){if(n){if(t.exportAs)for(let r=0;rr($e(g[e.index])):e.index;Cy(p,t,n,i,u,f,!1)}}return c}function Cw(e){return e.startsWith("animation")||e.startsWith("transition")}function ww(e,t,n,r){let o=e.cleanup;if(o!=null)for(let i=0;ia?u[a]:null}typeof s=="string"&&(i+=2)}return null}function Cy(e,t,n,r,o,i,s){let u=t.firstCreatePass?Jc(t):null,a=Kc(n),c=a.length;a.push(o,i),u&&u.push(r,e,c,(c+1)*(s?-1:1))}function Pg(e,t,n,r,o,i){let s=t[n],u=t[T],c=u.data[n].outputs[r],d=s[c].subscribe(i);Cy(e.index,u,t,o,i,d,!0)}var ni=Symbol("BINDING"),xw={kind:"input",requiredVars:1},Iw={kind:"field",requiredVars:2};function Lg(e,t,n){let r=C(),o=Xe();if(Te(r,o,n)){let i=r[T],s=fn(),u=Re(s.index,r);Su(u,1);let a=i.directiveRegistry[e],c=jC(s,i,r,a,t,n)}}function jg(e,t){return C()[t.directiveStart+e.targetIdx][Ey]}function U(e,t){if(e==="formField"){let r={[ni]:Iw,create:()=>{jg(r,re())?.create()},update:()=>{Lg(r.targetIdx,e,t()),jg(r,fn())?.update()}};return r}let n={[ni]:xw,update:()=>Lg(n.targetIdx,e,t())};return n}var su=class extends fi{ngModule;constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){let n=gt(t);return new mn(n,this.ngModule)}};function Tw(e){return Object.keys(e).map(t=>{let[n,r,o]=e[t],i={propName:n,templateName:t,isSignal:(r&Eu.SignalBased)!==0};return o&&(i.transform=o),i})}function Sw(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function Mw(e,t,n){let r=t instanceof Ce?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new Ul(n,r):n}function Aw(e){let t=e.get(Kn,null);if(t===null)throw new _(407,!1);let n=e.get(yy,null),r=e.get(ft,null);return{rendererFactory:t,sanitizer:n,changeDetectionScheduler:r,ngReflect:!1}}function Nw(e,t){let n=wy(e);return Rm(t,n,n==="svg"?Gc:n==="math"?j0:null)}function wy(e){return(e.selectors[0][0]||"div").toLowerCase()}var mn=class extends Au{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=Tw(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=Sw(this.componentDef.outputs),this.cachedOutputs}constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=iC(t.selectors),this.ngContentSelectors=t.ngContentSelectors??[],this.isBoundToModule=!!n}create(t,n,r,o,i,s){W(q.DynamicComponentStart);let u=M(null);try{let a=this.componentDef,c=kw(r,a,s,i),l=Mw(a,o||this.ngModule,t),d=Aw(l),h=d.rendererFactory.createRenderer(null,a),f=r?SC(h,r,a.encapsulation,l):Nw(a,h),p=s?.some(Bg)||i?.some(y=>typeof y!="function"&&y.bindings.some(Bg)),g=vd(null,c,null,512|Hm(a),null,null,d,h,l,null,xm(f,l,!0));g[Q]=f,Ls(g);let m=null;try{let y=Nd(Q,g,2,"#host",()=>c.directiveRegistry,!0,0);Pm(h,f,y),jr(f,g),Iu(c,g,y),ld(c,y,g),kd(c,y),n!==void 0&&Fw(y,this.ngContentSelectors,n),m=Re(y.index,g),g[ee]=m[ee],Ad(c,g,null)}catch(y){throw m!==null&&Ml(m),Ml(g),y}finally{W(q.DynamicComponentEnd),js()}return new uu(this.componentType,g,!!p)}finally{M(u)}}};function kw(e,t,n,r){let o=e?["ng-version","21.1.0"]:sC(t.selectors[0]),i=null,s=null,u=0;if(n)for(let l of n)u+=l[ni].requiredVars,l.create&&(l.targetIdx=0,(i??=[]).push(l)),l.update&&(l.targetIdx=0,(s??=[]).push(l));if(r)for(let l=0;l{if(n&1&&e)for(let r of e)r.create();if(n&2&&t)for(let r of t)r.update()}}function Bg(e){let t=e[ni].kind;return t==="input"||t==="twoWay"}var uu=class extends my{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(t,n,r){super(),this._rootLView=n,this._hasInputBindings=r,this._tNode=Bo(n[T],Q),this.location=zr(this._tNode,n),this.instance=Re(this._tNode.index,n)[ee],this.hostView=this.changeDetectorRef=new hn(n,void 0),this.componentType=t}setInput(t,n){this._hasInputBindings;let r=this._tNode;if(this.previousInputValues??=new Map,this.previousInputValues.has(t)&&Object.is(this.previousInputValues.get(t),n))return;let o=this._rootLView,i=Tu(r,o[T],o,t,n);this.previousInputValues.set(t,n);let s=Re(r.index,o);Su(s,1)}get injector(){return new Zn(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(t){this.hostView.onDestroy(t)}};function Fw(e,t,n){let r=e.projection=[];for(let o=0;o{class e{static __NG_ELEMENT_ID__=Ow}return e})();function Ow(){let e=re();return Iy(e,C())}var Pw=rt,xy=class extends Pw{_lContainer;_hostTNode;_hostLView;constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return zr(this._hostTNode,this._hostLView)}get injector(){return new Zn(this._hostTNode,this._hostLView)}get parentInjector(){let t=sd(this._hostTNode,this._hostLView);if(om(t)){let n=Js(t,this._hostLView),r=Ks(t),o=n[T].data[r+8];return new Zn(o,n)}else return new Zn(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){let n=Vg(this._lContainer);return n!==null&&n[t]||null}get length(){return this._lContainer.length-te}createEmbeddedView(t,n,r){let o,i;typeof r=="number"?o=r:r!=null&&(o=r.index,i=r.injector);let s=ru(this._lContainer,t.ssrId),u=t.createEmbeddedViewImpl(n||{},i,s);return this.insertImpl(u,o,Br(this._hostTNode,s)),u}createComponent(t,n,r,o,i,s,u){let a=t&&!zE(t),c;if(a)c=n;else{let m=n||{};c=m.index,r=m.injector,o=m.projectableNodes,i=m.environmentInjector||m.ngModuleRef,s=m.directives,u=m.bindings}let l=a?t:new mn(gt(t)),d=r||this.parentInjector;if(!i&&l.ngModule==null){let y=(a?d:this.parentInjector).get(Ce,null);y&&(i=y)}let h=gt(l.componentType??{}),f=ru(this._lContainer,h?.id??null),p=f?.firstChild??null,g=l.create(d,o,p,i,s,u);return this.insertImpl(g.hostView,c,Br(this._hostTNode,f)),g}insert(t,n){return this.insertImpl(t,n,!0)}insertImpl(t,n,r){let o=t._lView;if(V0(o)){let u=this.indexOf(t);if(u!==-1)this.detach(u);else{let a=o[ae],c=new xy(a,a[Ie],a[ae]);c.detach(c.indexOf(t))}}let i=this._adjustIndex(n),s=this._lContainer;return di(s,o,i,r),t.attachToViewContainerRef(),Pc(vl(s),i,t),t}move(t,n){return this.insert(t,n)}indexOf(t){let n=Vg(this._lContainer);return n!==null?n.indexOf(t):-1}remove(t){let n=this._adjustIndex(t,-1),r=ti(this._lContainer,n);r&&(Oo(vl(this._lContainer),n),wu(r[T],r))}detach(t){let n=this._adjustIndex(t,-1),r=ti(this._lContainer,n);return r&&Oo(vl(this._lContainer),n)!=null?new hn(r):null}_adjustIndex(t,n=0){return t??this.length+n}};function Vg(e){return e[jo]}function vl(e){return e[jo]||(e[jo]=[])}function Iy(e,t){let n,r=t[e.index];return Ke(r)?n=r:(n=dy(r,t,null,e),t[e.index]=n,Dd(t,n)),jw(n,t,e,r),new xy(n,e,t)}function Lw(e,t){let n=e[Z],r=n.createComment(""),o=Ue(t,e),i=n.parentNode(o);return nu(n,i,r,n.nextSibling(o),!1),r}var jw=Hw,Bw=()=>!1;function Vw(e,t,n){return Bw(e,t,n)}function Hw(e,t,n,r){if(e[ln])return;let o;n.type&8?o=$e(r):o=Lw(t,n),e[ln]=o}var zl=class e{queryList;matches=null;constructor(t){this.queryList=t}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},ql=class e{queries;constructor(t=[]){this.queries=t}createEmbeddedView(t){let n=t.queries;if(n!==null){let r=t.contentQueries!==null?t.contentQueries[0]:n.length,o=[];for(let i=0;i0)r.push(s[u/2]);else{let c=i[u+1],l=t[-a];for(let d=te;dt.trim())}function Ny(e,t,n){e.queries===null&&(e.queries=new Gl),e.queries.track(new Wl(t,n))}function Ww(e,t){let n=e.contentQueries||(e.contentQueries=[]),r=n.length?n[n.length-1]:-1;t!==r&&n.push(e.queries.length-1,t)}function Pd(e,t){return e.queries.getByIndex(t)}function ky(e,t){let n=e[T],r=Pd(n,t);return r.crossesNgTemplate?Zl(n,e,t,[]):Ty(n,e,r,t)}function Ld(e,t,n){let r,o=vo(()=>{r._dirtyCounter();let i=Zw(r,e);if(t&&i===void 0)throw new _(-951,!1);return i});return r=o[ne],r._dirtyCounter=pn(0),r._flatValue=void 0,o}function jd(e){return Ld(!0,!1,e)}function Bd(e){return Ld(!0,!0,e)}function Ry(e){return Ld(!1,!1,e)}function Fy(e,t){let n=e[ne];n._lView=C(),n._queryIndex=t,n._queryList=Od(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(r=>r+1))}function Zw(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[L]&4)return t?void 0:ye;let o=Od(n,r),i=ky(n,r);return o.reset(i,pm),t?o.first:o._changesDetected||e._flatValue===void 0?e._flatValue=o.toArray():e._flatValue}var yn=class{},Oy=class{};function Vd(e,t){return new ri(e,t??null,[])}var ri=class extends yn{ngModuleType;_parent;_bootstrapComponents=[];_r3Injector;instance;destroyCbs=[];componentFactoryResolver=new su(this);constructor(t,n,r,o=!0){super(),this.ngModuleType=t,this._parent=n;let i=Rc(t);this._bootstrapComponents=jm(i.bootstrap),this._r3Injector=dl(t,n,[{provide:yn,useValue:this},{provide:fi,useValue:this.componentFactoryResolver},...r],kt(t),new Set(["environment"])),o&&this.resolveInjectorInitializers()}resolveInjectorInitializers(){this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(this.ngModuleType)}get injector(){return this._r3Injector}destroy(){let t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}},cu=class extends Oy{moduleType;constructor(t){super(),this.moduleType=t}create(t){return new ri(this.moduleType,t,[])}};var oi=class extends yn{injector;componentFactoryResolver=new su(this);instance=null;constructor(t){super();let n=new Fn([...t.providers,{provide:yn,useValue:this},{provide:fi,useValue:this.componentFactoryResolver}],t.parent||Tr(),t.debugName,new Set(["environment"]));this.injector=n,t.runEnvironmentInitializers&&n.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}};function Py(e,t,n=null){return new oi({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var Yw=(()=>{class e{_injector;cachedInjectors=new Map;constructor(n){this._injector=n}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n)){let r=Bc(!1,n.type),o=r.length>0?Py([r],this._injector,""):null;this.cachedInjectors.set(n,o)}return this.cachedInjectors.get(n)}ngOnDestroy(){try{for(let n of this.cachedInjectors.values())n!==null&&n.destroy()}finally{this.cachedInjectors.clear()}}static \u0275prov=I({token:e,providedIn:"environment",factory:()=>new e(A(Ce))})}return e})();function Gr(e){return si(()=>{let t=Ly(e),n=P(S({},t),{decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===ad.OnPush,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?o=>o.get(Yw).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||tt.Emulated,styles:e.styles||ye,_:null,schemas:e.schemas||null,tView:null,id:""});t.standalone&&Ht("NgStandalone"),jy(n);let r=e.dependencies;return n.directiveDefs=Hg(r,Qw),n.pipeDefs=Hg(r,w0),n.id=Xw(n),n})}function Qw(e){return gt(e)||xs(e)}function $t(e){return si(()=>({type:e.type,bootstrap:e.bootstrap||ye,declarations:e.declarations||ye,imports:e.imports||ye,exports:e.exports||ye,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function Kw(e,t){if(e==null)return Ye;let n={};for(let r in e)if(e.hasOwnProperty(r)){let o=e[r],i,s,u,a;Array.isArray(o)?(u=o[0],i=o[1],s=o[2]??i,a=o[3]||null):(i=o,s=o,u=Eu.None,a=null),n[i]=[r,u,a],t[i]=s}return n}function Jw(e){if(e==null)return Ye;let t={};for(let n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function ot(e){return si(()=>{let t=Ly(e);return jy(t),t})}function ku(e){return{type:e.type,name:e.name,factory:null,pure:e.pure!==!1,standalone:e.standalone??!0,onDestroy:e.type.prototype.ngOnDestroy||null}}function Ly(e){let t={};return{type:e.type,providersResolver:null,viewProvidersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:t,inputConfig:e.inputs||Ye,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||ye,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,inputs:Kw(e.inputs,t),outputs:Jw(e.outputs),debugInfo:null}}function jy(e){e.features?.forEach(t=>t(e))}function Hg(e,t){return e?()=>{let n=typeof e=="function"?e():e,r=[];for(let o of n){let i=t(o);i!==null&&r.push(i)}return r}:null}function Xw(e){let t=0,n=typeof e.consts=="function"?"":e.consts,r=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,n,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery];for(let i of r.join("|"))t=Math.imul(31,t)+i.charCodeAt(0)<<0;return t+=2147483648,"c"+t}function ex(e){let t=n=>{let r=Array.isArray(e);n.hostDirectives===null?(n.resolveHostDirectives=tx,n.hostDirectives=r?e.map(Yl):[e]):r?n.hostDirectives.unshift(...e.map(Yl)):n.hostDirectives.unshift(e)};return t.ngInherit=!0,t}function tx(e){let t=[],n=!1,r=null,o=null;for(let i=0;i=0;r--){let o=e[r];o.hostVars=t+=o.hostVars,o.hostAttrs=Lr(o.hostAttrs,n=Lr(n,o.hostAttrs))}}function Dl(e){return e===Ye?{}:e===ye?[]:e}function sx(e,t){let n=e.viewQuery;n?e.viewQuery=(r,o)=>{t(r,o),n(r,o)}:e.viewQuery=t}function ux(e,t){let n=e.contentQueries;n?e.contentQueries=(r,o,i)=>{t(r,o,i),n(r,o,i)}:e.contentQueries=t}function ax(e,t){let n=e.hostBindings;n?e.hostBindings=(r,o)=>{t(r,o),n(r,o)}:e.hostBindings=t}function Vy(e,t,n,r,o,i,s,u){if(n.firstCreatePass){e.mergedAttrs=Lr(e.mergedAttrs,e.attrs);let l=e.tView=bd(2,e,o,i,s,n.directiveRegistry,n.pipeRegistry,null,n.schemas,n.consts,null);n.queries!==null&&(n.queries.template(n,e),l.queries=n.queries.embeddedTView(e))}u&&(e.flags|=u),qn(e,!1);let a=lx(n,t,e,r);Bs()&&xd(n,t,a,e),jr(a,t);let c=dy(a,t,a,e);t[r+Q]=c,Dd(t,c),Vw(c,e,t)}function cx(e,t,n,r,o,i,s,u,a,c,l){let d=n+Q,h;return t.firstCreatePass?(h=er(t,d,4,s||null,u||null),Fs()&&by(t,e,h,Fe(t.consts,c),Td),tm(t,h)):h=t.data[d],Vy(h,e,t,n,r,o,i,a),Nr(h)&&Iu(t,e,h),c!=null&&ci(e,h,l),h}function Vr(e,t,n,r,o,i,s,u,a,c,l){let d=n+Q,h;if(t.firstCreatePass){if(h=er(t,d,4,s||null,u||null),c!=null){let f=Fe(t.consts,c);h.localNames=[];for(let p=0;p{class e{log(n){console.log(n)}warn(n){console.warn(n)}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();function zy(e){return typeof e=="function"&&e[ne]!==void 0}function Hd(e){return zy(e)&&typeof e.set=="function"}var Ru=new x(""),Fu=new x(""),hi=(()=>{class e{_ngZone;registry;_isZoneStable=!0;_callbacks=[];_taskTrackingZone=null;_destroyRef;constructor(n,r,o){this._ngZone=n,this.registry=r,As()&&(this._destroyRef=b(Oe,{optional:!0})??void 0),$d||(Gy(o),o.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this._taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){let n=this._ngZone.onUnstable.subscribe({next:()=>{this._isZoneStable=!1}}),r=this._ngZone.runOutsideAngular(()=>this._ngZone.onStable.subscribe({next:()=>{be.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}}));this._destroyRef?.onDestroy(()=>{n.unsubscribe(),r.unsubscribe()})}isStable(){return this._isZoneStable&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;this._callbacks.length!==0;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb()}});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>r.updateCb&&r.updateCb(n)?(clearTimeout(r.timeoutId),!1):!0)}}getPendingTasks(){return this._taskTrackingZone?this._taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==i),n()},r)),this._callbacks.push({doneCb:n,timeoutId:i,updateCb:o})}whenStable(n,r,o){if(o&&!this._taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,o),this._runCallbacksIfReady()}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,o){return[]}static \u0275fac=function(r){return new(r||e)(A(be),A(qy),A(Fu))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),qy=(()=>{class e{_applications=new Map;registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return $d?.findTestabilityInTree(this,n,r)??null}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();function Gy(e){$d=e}var $d;function gi(e){return!!e&&typeof e.then=="function"}function Ou(e){return!!e&&typeof e.subscribe=="function"}var Ud=new x("");function fx(e){return Pn([{provide:Ud,multi:!0,useValue:e}])}var zd=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((n,r)=>{this.resolve=n,this.reject=r});appInits=b(Ud,{optional:!0})??[];injector=b(we);constructor(){}runInitializers(){if(this.initialized)return;let n=[];for(let o of this.appInits){let i=Sr(this.injector,o);if(gi(i))n.push(i);else if(Ou(i)){let s=new Promise((u,a)=>{i.subscribe({complete:u,error:a})});n.push(s)}}let r=()=>{this.done=!0,this.resolve()};Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),n.length===0&&r(),this.initialized=!0}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Wy=new x("");function Zy(){$a(()=>{let e="";throw new _(600,e)})}function Yy(e){return e.isBoundToModule}var px=10;var Zr=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=b(Pt);afterRenderManager=b(Cu);zonelessEnabled=b(Wo);rootEffectScheduler=b(Vs);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new le;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=b(Gn);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(Ee(n=>!n))}constructor(){b(Dt,{optional:!0})}whenStable(){let n;return new Promise(r=>{n=this.isStable.subscribe({next:o=>{o&&r()}})}).finally(()=>{n.unsubscribe()})}_injector=b(Ce);_rendererFactory=null;get injector(){return this._injector}bootstrap(n,r){return this.bootstrapImpl(n,r)}bootstrapImpl(n,r,o=we.NULL){return this._injector.get(be).run(()=>{W(q.BootstrapComponentStart);let s=n instanceof Au;if(!this._injector.get(zd).done){let p="";throw new _(405,p)}let a;s?a=n:a=this._injector.get(fi).resolveComponentFactory(n),this.componentTypes.push(a.componentType);let c=Yy(a)?void 0:this._injector.get(yn),l=r||a.selector,d=a.create(o,[],l,c),h=d.location.nativeElement,f=d.injector.get(Ru,null);return f?.registerApplication(h),d.onDestroy(()=>{this.detachView(d.hostView),Qo(this.components,d),f?.unregisterApplication(h)}),this._loadComponent(d),W(q.BootstrapComponentEnd,d),d})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){W(q.ChangeDetectionStart),this.tracingSnapshot!==null?this.tracingSnapshot.run(_u.CHANGE_DETECTION,this.tickImpl):this.tickImpl()}tickImpl=()=>{if(this._runningTick)throw W(q.ChangeDetectionEnd),new _(101,!1);let n=M(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,M(n),this.afterTick.next(),W(q.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(Kn,null,{optional:!0}));let n=0;for(;this.dirtyFlags!==0&&n++$o(n))){this.dirtyFlags|=2;return}else this.dirtyFlags&=-8}attachView(n){let r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){let r=n;Qo(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView);try{this.tick()}catch(o){this.internalErrorHandler(o)}this.components.push(n),this._injector.get(Wy,[]).forEach(o=>o(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy())}finally{this._destroyed=!0,this._views=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>Qo(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new _(406,!1);let n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Qo(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Qy(e,t){let n=C(),r=Xe();if(Te(n,r,t)){let o=Y(),i=fn();if(Tu(i,o,n,e,t))Ot(i)&&ey(n,i.index);else{let u=Ue(i,n);ty(n[Z],u,null,i.value,e,t,null)}}return Qy}function Pu(e,t,n,r){let o=C(),i=Xe();if(Te(o,i,t)){let s=Y(),u=fn();OC(u,o,e,t,n,r)}return Pu}var BP=typeof document<"u"&&typeof document?.documentElement?.getAnimations=="function";function hx(){return C()[ve][ee]}var Ql=class{destroy(t){}updateValue(t,n){}swap(t,n){let r=Math.min(t,n),o=Math.max(t,n),i=this.detach(o);if(o-r>1){let s=this.detach(r);this.attach(r,i),this.attach(o,s)}else this.attach(r,i)}move(t,n){this.attach(n,this.detach(t))}};function El(e,t,n,r,o){return e===n&&Object.is(t,r)?1:Object.is(o(e,t),o(n,r))?-1:0}function gx(e,t,n,r){let o,i,s=0,u=e.length-1,a=void 0;if(Array.isArray(t)){M(r);let c=t.length-1;for(M(null);s<=u&&s<=c;){let l=e.at(s),d=t[s],h=El(s,l,s,d,n);if(h!==0){h<0&&e.updateValue(s,d),s++;continue}let f=e.at(u),p=t[c],g=El(u,f,c,p,n);if(g!==0){g<0&&e.updateValue(u,p),u--,c--;continue}let m=n(s,l),y=n(u,f),v=n(s,d);if(Object.is(v,y)){let w=n(c,p);Object.is(w,m)?(e.swap(s,u),e.updateValue(u,p),c--,u--):e.move(u,s),e.updateValue(s,d),s++;continue}if(o??=new lu,i??=qg(e,s,u,n),Kl(e,o,s,v))e.updateValue(s,d),s++,u++;else if(i.has(v))o.set(m,e.detach(s)),u--;else{let w=e.create(s,t[s]);e.attach(s,w),s++,u++}}for(;s<=c;)zg(e,o,n,s,t[s]),s++}else if(t!=null){M(r);let c=t[Symbol.iterator]();M(null);let l=c.next();for(;!l.done&&s<=u;){let d=e.at(s),h=l.value,f=El(s,d,s,h,n);if(f!==0)f<0&&e.updateValue(s,h),s++,l=c.next();else{o??=new lu,i??=qg(e,s,u,n);let p=n(s,h);if(Kl(e,o,s,p))e.updateValue(s,h),s++,u++,l=c.next();else if(!i.has(p))e.attach(s,e.create(s,h)),s++,u++,l=c.next();else{let g=n(s,d);o.set(g,e.detach(s)),u--}}}for(;!l.done;)zg(e,o,n,e.length,l.value),l=c.next()}for(;s<=u;)e.destroy(e.detach(u--));o?.forEach(c=>{e.destroy(c)})}function Kl(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function zg(e,t,n,r,o){if(Kl(e,t,r,n(r,o)))e.updateValue(r,o);else{let i=e.create(r,o);e.attach(r,i)}}function qg(e,t,n,r){let o=new Set;for(let i=t;i<=n;i++)o.add(r(i,e.at(i)));return o}var lu=class{kvMap=new Map;_vMap=void 0;has(t){return this.kvMap.has(t)}delete(t){if(!this.has(t))return!1;let n=this.kvMap.get(t);return this._vMap!==void 0&&this._vMap.has(n)?(this.kvMap.set(t,this._vMap.get(n)),this._vMap.delete(n)):this.kvMap.delete(t),!0}get(t){return this.kvMap.get(t)}set(t,n){if(this.kvMap.has(t)){let r=this.kvMap.get(t);this._vMap===void 0&&(this._vMap=new Map);let o=this._vMap;for(;o.has(r);)r=o.get(r);o.set(r,n)}else this.kvMap.set(t,n)}forEach(t){for(let[n,r]of this.kvMap)if(t(r,n),this._vMap!==void 0){let o=this._vMap;for(;o.has(r);)r=o.get(r),t(r,n)}}};function qd(e,t,n,r,o,i,s,u){Ht("NgControlFlow");let a=C(),c=Y(),l=Fe(c.consts,i);return Vr(a,c,e,t,n,r,o,l,256,s,u),Gd}function Gd(e,t,n,r,o,i,s,u){Ht("NgControlFlow");let a=C(),c=Y(),l=Fe(c.consts,i);return Vr(a,c,e,t,n,r,o,l,512,s,u),Gd}function Wd(e,t){Ht("NgControlFlow");let n=C(),r=Xe(),o=n[r]!==fe?n[r]:-1,i=o!==-1?du(n,Q+o):void 0,s=0;if(Te(n,r,e)){let u=M(null);try{if(i!==void 0&&py(i,s),e!==-1){let a=Q+e,c=du(n,a),l=td(n[T],a),d=gy(c,l,n),h=li(n,l,t,{dehydratedView:d});di(c,h,s,Br(l,d))}}finally{M(u)}}else if(i!==void 0){let u=fy(i,s);u!==void 0&&(u[ee]=t)}}var Jl=class{lContainer;$implicit;$index;constructor(t,n,r){this.lContainer=t,this.$implicit=n,this.$index=r}get $count(){return this.lContainer.length-te}};function mx(e){return e}function Lu(e,t){return t}var Xl=class{hasEmptyBlock;trackByFn;liveCollection;constructor(t,n,r){this.hasEmptyBlock=t,this.trackByFn=n,this.liveCollection=r}};function ju(e,t,n,r,o,i,s,u,a,c,l,d,h){Ht("NgControlFlow");let f=C(),p=Y(),g=a!==void 0,m=C(),y=u?s.bind(m[ve][ee]):s,v=new Xl(g,y);m[Q+e]=v,Vr(f,p,e+1,t,n,r,o,Fe(p.consts,i),256),g&&Vr(f,p,e+2,a,c,l,d,Fe(p.consts,h),512)}var ed=class extends Ql{lContainer;hostLView;templateTNode;operationsCounter=void 0;needsIndexUpdate=!1;constructor(t,n,r){super(),this.lContainer=t,this.hostLView=n,this.templateTNode=r}get length(){return this.lContainer.length-te}at(t){return this.getLView(t)[ee].$implicit}attach(t,n){let r=n[Ln];this.needsIndexUpdate||=t!==this.length,di(this.lContainer,n,t,Br(this.templateTNode,r)),yx(this.lContainer,t)}detach(t){return this.needsIndexUpdate||=t!==this.length-1,bx(this.lContainer,t),vx(this.lContainer,t)}create(t,n){let r=ru(this.lContainer,this.templateTNode.tView.ssrId);return li(this.hostLView,this.templateTNode,new Jl(this.lContainer,n,t),{dehydratedView:r})}destroy(t){wu(t[T],t)}updateValue(t,n){this.getLView(t)[ee].$implicit=n}reset(){this.needsIndexUpdate=!1}updateIndexes(){if(this.needsIndexUpdate)for(let t=0;t0){let i=r[Rt];hC(i,o),Qn.delete(r[Ft]),o.detachedLeaveAnimationFns=void 0}}function bx(e,t){if(e.length<=te)return;let n=te+t,r=e[n],o=r?r[Hn]:void 0;o&&o.leave&&o.leave.size>0&&(o.detachedLeaveAnimationFns=[])}function vx(e,t){return ti(e,t)}function Dx(e,t){return fy(e,t)}function td(e,t){return Bo(e,t)}function Yr(e,t,n){let r=C(),o=Xe();if(Te(r,o,t)){let i=Y(),s=fn();Jm(s,r,e,t,r[Z],n)}return Yr}function nd(e,t,n,r,o){Tu(t,e,n,o?"class":"style",r)}function Qr(e,t,n,r){let o=C(),i=o[T],s=e+Q,u=i.firstCreatePass?Nd(s,o,2,t,Td,Fs(),n,r):i.data[s];if(Sd(u,o,e,t,Jy),Nr(u)){let a=o[T];Iu(a,o,u),ld(a,u,o)}return r!=null&&ci(o,u),Qr}function Kr(){let e=Y(),t=re(),n=Md(t);return e.firstCreatePass&&kd(e,n),tl(n)&&nl(),Xc(),n.classesWithoutHost!=null&&QE(n)&&nd(e,n,C(),n.classesWithoutHost,!0),n.stylesWithoutHost!=null&&KE(n)&&nd(e,n,C(),n.stylesWithoutHost,!1),Kr}function Ky(e,t,n,r){return Qr(e,t,n,r),Kr(),Ky}function Zd(e,t,n,r){let o=C(),i=o[T],s=e+Q,u=i.firstCreatePass?Dw(s,i,2,t,n,r):i.data[s];return Sd(u,o,e,t,Jy),r!=null&&ci(o,u),Zd}function Yd(){let e=re(),t=Md(e);return tl(t)&&nl(),Xc(),Yd}function Vu(e,t,n,r){return Zd(e,t,n,r),Yd(),Vu}var Jy=(e,t,n,r,o)=>(qo(!0),Rm(t[Z],r,sg()));function Qd(e,t,n){let r=C(),o=r[T],i=e+Q,s=o.firstCreatePass?Nd(i,r,8,"ng-container",Td,Fs(),t,n):o.data[i];if(Sd(s,r,e,"ng-container",Ex),Nr(s)){let u=r[T];Iu(u,r,s),ld(u,s,r)}return n!=null&&ci(r,s),Qd}function Kd(){let e=Y(),t=re(),n=Md(t);return e.firstCreatePass&&kd(e,n),Kd}function Jr(e,t,n){return Qd(e,t,n),Kd(),Jr}var Ex=(e,t,n,r,o)=>(qo(!0),U_(t[Z],""));function _x(){return C()}function Hu(e,t,n){let r=C(),o=Xe();if(Te(r,o,t)){let i=Y(),s=fn();Xm(s,r,e,t,r[Z],n)}return Hu}var mi="en-US";var Cx=mi;function Xy(e){typeof e=="string"&&(Cx=e.toLowerCase().replace(/_/g,"-"))}function eb(e,t,n){let r=C(),o=Y(),i=re();return nb(o,r,r[Z],i,e,t,n),eb}function tb(e,t,n){let r=C(),o=Y(),i=re();return(i.type&3||n)&&_y(i,o,r,n,r[Z],e,t,Ys(i,r,t)),tb}function nb(e,t,n,r,o,i,s){let u=!0,a=null;if((r.type&3||s)&&(a??=Ys(r,t,i),_y(r,e,t,s,n,o,i,a)&&(u=!1)),u){let c=r.outputs?.[o],l=r.hostDirectiveOutputs?.[o];if(l&&l.length)for(let d=0;d>17&32767}function kx(e){return(e&2)==2}function Rx(e,t){return e&131071|t<<17}function rd(e){return e|2}function Hr(e){return(e&131068)>>2}function _l(e,t){return e&-131069|t<<2}function Fx(e){return(e&1)===1}function od(e){return e|1}function Ox(e,t,n,r,o,i){let s=i?t.classBindings:t.styleBindings,u=Jn(s),a=Hr(s);e[r]=n;let c=!1,l;if(Array.isArray(n)){let d=n;l=d[1],(l===null||xr(d,l)>0)&&(c=!0)}else l=n;if(o)if(a!==0){let h=Jn(e[u+1]);e[r+1]=zs(h,u),h!==0&&(e[h+1]=_l(e[h+1],r)),e[u+1]=Rx(e[u+1],r)}else e[r+1]=zs(u,0),u!==0&&(e[u+1]=_l(e[u+1],r)),u=r;else e[r+1]=zs(a,0),u===0?u=r:e[a+1]=_l(e[a+1],r),a=r;c&&(e[r+1]=rd(e[r+1])),Gg(e,l,r,!0),Gg(e,l,r,!1),Px(t,l,e,r,i),s=zs(u,a),i?t.classBindings=s:t.styleBindings=s}function Px(e,t,n,r,o){let i=o?e.residualClasses:e.residualStyles;i!=null&&typeof t=="string"&&xr(i,t)>=0&&(n[r+1]=od(n[r+1]))}function Gg(e,t,n,r){let o=e[n+1],i=t===null,s=r?Jn(o):Hr(o),u=!1;for(;s!==0&&(u===!1||i);){let a=e[s],c=e[s+1];Lx(a,t)&&(u=!0,e[s+1]=r?od(c):rd(c)),s=r?Jn(c):Hr(c)}u&&(e[n+1]=r?rd(o):od(o))}function Lx(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t=="string"?xr(e,t)>=0:!1}var ce={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function ub(e){return e.substring(ce.key,ce.keyEnd)}function jx(e){return e.substring(ce.value,ce.valueEnd)}function Bx(e){return lb(e),ab(e,$r(e,0,ce.textEnd))}function ab(e,t){let n=ce.textEnd;return n===t?-1:(t=ce.keyEnd=Hx(e,ce.key=t,n),$r(e,t,n))}function Vx(e){return lb(e),cb(e,$r(e,0,ce.textEnd))}function cb(e,t){let n=ce.textEnd,r=ce.key=$r(e,t,n);return n===r?-1:(r=ce.keyEnd=$x(e,r,n),r=Wg(e,r,n,58),r=ce.value=$r(e,r,n),r=ce.valueEnd=Ux(e,r,n),Wg(e,r,n,59))}function lb(e){ce.key=0,ce.keyEnd=0,ce.value=0,ce.valueEnd=0,ce.textEnd=e.length}function $r(e,t,n){for(;t32;)t++;return t}function $x(e,t,n){let r;for(;t=65&&(r&-33)<=90||r>=48&&r<=57);)t++;return t}function Wg(e,t,n,r){return t=$r(e,t,n),t32&&(u=s),i=o,o=r,r=a&-33}return u}function Zg(e,t,n,r){let o=-1,i=n;for(;i=0;n=cb(t,n))mb(e,ub(t),jx(t))}function bi(e){pb(Kx,qx,e,!0)}function qx(e,t){for(let n=Bx(t);n>=0;n=ab(t,n))Po(e,ub(t),!0)}function fb(e,t,n,r){let o=C(),i=Y(),s=Uo(2);if(i.firstUpdatePass&&gb(i,e,s,r),t!==fe&&Te(o,s,t)){let u=i.data[ze()];yb(i,u,o,o[Z],e,o[s+1]=Xx(t,n),r,s)}}function pb(e,t,n,r){let o=Y(),i=Uo(2);o.firstUpdatePass&&gb(o,null,i,r);let s=C();if(n!==fe&&Te(s,i,n)){let u=o.data[ze()];if(bb(u,r)&&!hb(o,i)){let a=r?u.classesWithoutHost:u.stylesWithoutHost;a!==null&&(n=_s(a,n||"")),nd(o,u,s,n,r)}else Jx(o,u,s,s[Z],s[i+1],s[i+1]=Qx(e,t,n),r,i)}}function hb(e,t){return t>=e.expandoStartIndex}function gb(e,t,n,r){let o=e.data;if(o[n+1]===null){let i=o[ze()],s=hb(e,n);bb(i,r)&&t===null&&!s&&(t=!1),t=Gx(o,i,t,r),Ox(o,i,t,n,s,r)}}function Gx(e,t,n,r){let o=X0(e),i=r?t.residualClasses:t.residualStyles;if(o===null)(r?t.classBindings:t.styleBindings)===0&&(n=Cl(null,e,t,n,r),n=ii(n,t.attrs,r),i=null);else{let s=t.directiveStylingLast;if(s===-1||e[s]!==o)if(n=Cl(o,e,t,n,r),i===null){let a=Wx(e,t,r);a!==void 0&&Array.isArray(a)&&(a=Cl(null,e,t,a[1],r),a=ii(a,t.attrs,r),Zx(e,t,r,a))}else i=Yx(e,t,r)}return i!==void 0&&(r?t.residualClasses=i:t.residualStyles=i),n}function Wx(e,t,n){let r=n?t.classBindings:t.styleBindings;if(Hr(r)!==0)return e[Jn(r)]}function Zx(e,t,n,r){let o=n?t.classBindings:t.styleBindings;e[Jn(o)]=r}function Yx(e,t,n){let r,o=t.directiveEnd;for(let i=1+t.directiveStylingLast;i0;){let a=e[o],c=Array.isArray(a),l=c?a[1]:a,d=l===null,h=n[o+1];h===fe&&(h=d?ye:void 0);let f=d?Ms(h,r):l===r?h:void 0;if(c&&!fu(f)&&(f=Ms(a,r)),fu(f)&&(u=f,s))return u;let p=e[o+1];o=s?Jn(p):Hr(p)}if(t!==null){let a=i?t.residualClasses:t.residualStyles;a!=null&&(u=Ms(a,r))}return u}function fu(e){return e!==void 0}function Xx(e,t){return e==null||e===""||(typeof t=="string"?e=e+t:typeof e=="object"&&(e=kt(Pe(e)))),e}function bb(e,t){return(e.flags&(t?8:16))!==0}function eI(e,t=""){let n=C(),r=Y(),o=e+Q,i=r.firstCreatePass?er(r,o,1,t,null):r.data[o],s=tI(r,n,i,t,e);n[o]=s,Bs()&&xd(r,n,s,i),qn(i,!1)}var tI=(e,t,n,r,o)=>(qo(!0),H_(t[Z],r));function vb(e,t,n,r=""){return Te(e,Xe(),n)?t+Ne(n)+r:fe}function nI(e,t,n,r,o,i=""){let s=al(),u=iu(e,s,n,o);return Uo(2),u?t+Ne(n)+r+Ne(o)+i:fe}function rI(e,t,n,r,o,i,s,u,a,c=""){let l=al(),d=_w(e,l,n,o,s,a);return Uo(4),d?t+Ne(n)+r+Ne(o)+i+Ne(s)+u+Ne(a)+c:fe}function Db(e){return Jd("",e),Db}function Jd(e,t,n){let r=C(),o=vb(r,e,t,n);return o!==fe&&Xd(r,ze(),o),Jd}function Eb(e,t,n,r,o){let i=C(),s=nI(i,e,t,n,r,o);return s!==fe&&Xd(i,ze(),s),Eb}function _b(e,t,n,r,o,i,s,u,a){let c=C(),l=rI(c,e,t,n,r,o,i,s,u,a);return l!==fe&&Xd(c,ze(),l),_b}function Xd(e,t,n){let r=Wc(t,e);$_(e[Z],r,n)}function Cb(e,t,n){Hd(t)&&(t=t());let r=C(),o=Xe();if(Te(r,o,t)){let i=Y(),s=fn();Jm(s,r,e,t,r[Z],n)}return Cb}function oI(e,t){let n=Hd(e);return n&&e.set(t),n}function wb(e,t){let n=C(),r=Y(),o=re();return nb(r,n,n[Z],o,e,t),wb}var xb={};function Uu(e){Ht("NgLet");let t=Y(),n=C(),r=e+Q,o=er(t,r,128,null,null);return qn(o,!1),Ho(t,n,r,xb),Uu}function zu(e){let t=Y(),n=C(),r=ze();return Ho(t,n,r,e),e}function qu(e){let t=sl(),n=Vo(t,Q+e);if(n===xb)throw new _(314,!1);return n}function iI(e){return Te(C(),Xe(),e)?Ne(e):fe}function sI(e,t,n=""){return vb(C(),e,t,n)}function Qg(e,t,n){let r=Y();r.firstCreatePass&&Ib(t,r.data,r.blueprint,Je(e),n)}function Ib(e,t,n,r,o){if(e=ue(e),Array.isArray(e))for(let i=0;i>20;if(Rn(e)||!e.multi){let f=new Yn(c,o,oe,null),p=xl(a,t,o?l:l+h,d);p===-1?(Tl(eu(u,s),i,a),wl(i,e,t.length),t.push(a),u.directiveStart++,u.directiveEnd++,o&&(u.providerIndexes+=1048576),n.push(f),s.push(f)):(n[p]=f,s[p]=f)}else{let f=xl(a,t,l+h,d),p=xl(a,t,l,l+h),g=f>=0&&n[f],m=p>=0&&n[p];if(o&&!m||!o&&!g){Tl(eu(u,s),i,a);let y=cI(o?aI:uI,n.length,o,r,c,e);!o&&m&&(n[p].providerFactory=y),wl(i,e,t.length,0),t.push(a),u.directiveStart++,u.directiveEnd++,o&&(u.providerIndexes+=1048576),n.push(y),s.push(y)}else{let y=Tb(n[o?p:f],c,!o&&r);wl(i,e,f>-1?f:p,y)}!o&&r&&m&&n[p].componentProviders++}}}function wl(e,t,n,r){let o=Rn(t),i=P0(t);if(o||i){let a=(i?ue(t.useClass):t).prototype.ngOnDestroy;if(a){let c=e.destroyHooks||(e.destroyHooks=[]);if(!o&&t.multi){let l=c.indexOf(n);l===-1?c.push(n,[r,a]):c[l+1].push(r,a)}else c.push(n,a)}}}function Tb(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function xl(e,t,n,r){for(let o=n;o{n.providersResolver=(r,o)=>Qg(r,o?o(e):e,!1),t&&(n.viewProvidersResolver=(r,o)=>Qg(r,o?o(t):t,!0))}}function dI(e,t){let n=Rr()+e,r=C();return r[n]===fe?Fd(r,n,t()):Ew(r,n)}function fI(e,t,n){return Mb(C(),Rr(),e,t,n)}function pI(e,t,n,r){return Ab(C(),Rr(),e,t,n,r)}function Sb(e,t){let n=e[t];return n===fe?void 0:n}function Mb(e,t,n,r,o,i){let s=t+n;return Te(e,s,o)?Fd(e,s+1,i?r.call(i,o):r(o)):Sb(e,s+1)}function Ab(e,t,n,r,o,i,s){let u=t+n;return iu(e,u,o,i)?Fd(e,u+2,s?r.call(s,o,i):r(o,i)):Sb(e,u+2)}function hI(e,t){let n=Y(),r,o=e+Q;n.firstCreatePass?(r=gI(t,n.pipeRegistry),n.data[o]=r,r.onDestroy&&(n.destroyHooks??=[]).push(o,r.onDestroy)):r=n.data[o];let i=r.factory||(r.factory=sn(r.type,!0)),s,u=_e(oe);try{let a=Xs(!1),c=i();return Xs(a),Ho(n,C(),o,c),c}finally{_e(u)}}function gI(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function mI(e,t,n){let r=e+Q,o=C(),i=Vo(o,r);return Nb(o,r)?Mb(o,Rr(),t,i.transform,n,i):i.transform(n)}function yI(e,t,n,r){let o=e+Q,i=C(),s=Vo(i,o);return Nb(i,o)?Ab(i,Rr(),t,s.transform,n,r,s):s.transform(n,r)}function Nb(e,t){return e[T].data[t].pure}function bI(e,t){return Mu(e,t)}var pu=class{ngModuleFactory;componentFactories;constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}},vI=(()=>{class e{compileModuleSync(n){return new cu(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){let r=this.compileModuleSync(n),o=Rc(n),i=jm(o.declarations).reduce((s,u)=>{let a=gt(u);return a&&s.push(new mn(a)),s},[]);return new pu(r,i)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var kb=(()=>{class e{applicationErrorHandler=b(Pt);appRef=b(Zr);taskService=b(Gn);ngZone=b(be);zonelessEnabled=b(Wo);tracing=b(Dt,{optional:!0});zoneIsDefined=typeof Zone<"u"&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new X;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(ko):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(b(gl,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{let n=this.taskService.add();if(!this.runningTick&&(this.cleanup(),!this.zonelessEnabled||this.appRef.includeAllTestViews)){this.taskService.remove(n);return}this.switchToMicrotaskScheduler(),this.taskService.remove(n)})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()}))}switchToMicrotaskScheduler(){this.ngZone.runOutsideAngular(()=>{let n=this.taskService.add();this.useMicrotaskScheduler=!0,queueMicrotask(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(n)})})}notify(n){if(!this.zonelessEnabled&&n===5)return;switch(n){case 0:{this.appRef.dirtyFlags|=2;break}case 3:case 2:case 4:case 5:case 1:{this.appRef.dirtyFlags|=4;break}case 6:{this.appRef.dirtyFlags|=2;break}case 12:{this.appRef.dirtyFlags|=16;break}case 13:{this.appRef.dirtyFlags|=2;break}case 11:break;default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick())return;let r=this.useMicrotaskScheduler?lg:fl;this.pendingRenderTaskId=this.taskService.add(),this.scheduleInRootZone?this.cancelScheduledCallback=Zone.root.run(()=>r(()=>this.tick())):this.cancelScheduledCallback=this.ngZone.runOutsideAngular(()=>r(()=>this.tick()))}shouldScheduleTick(){return!(this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(ko+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let n=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(r){this.applicationErrorHandler(r)}finally{this.taskService.remove(n),this.cleanup()}}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let n=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(n)}}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Rb(){return[{provide:ft,useExisting:kb},{provide:be,useClass:Ro},{provide:Wo,useValue:!0}]}function DI(){return typeof $localize<"u"&&$localize.locale||mi}var Gu=new x("",{factory:()=>b(Gu,{optional:!0,skipSelf:!0})||DI()});var Wu=class{destroyed=!1;listeners=null;errorHandler=b(Ve,{optional:!0});destroyRef=b(Oe);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(t){if(this.destroyed)throw new _(953,!1);return(this.listeners??=[]).push(t),{unsubscribe:()=>{let n=this.listeners?.indexOf(t);n!==void 0&&n!==-1&&this.listeners?.splice(n,1)}}}emit(t){if(this.destroyed){console.warn(pt(953,!1));return}if(this.listeners===null)return;let n=M(null);try{for(let r of this.listeners)try{r(t)}catch(o){this.errorHandler?.handleError(o)}}finally{M(n)}}};function Me(e,t){return vo(e,t?.equal)}var EI=e=>e;function ef(e,t){if(typeof e=="function"){let n=hc(e,EI,t?.equal);return Fb(n,t?.debugName)}else{let n=hc(e.source,e.computation,e.equal);return Fb(n,e.debugName)}}function Fb(e,t){let n=e[ne],r=e;return r.set=o=>y0(n,o),r.update=o=>b0(n,o),r.asReadonly=Go.bind(e),r}function _I(e){let t=e.request,n=e.params??t??(()=>null);return new Zu(n,wI(e),e.defaultValue,e.equal?CI(e.equal):void 0,e.debugName,e.injector??b(we))}var tf=class{value;isLoading;constructor(t,n){this.value=t,this.value.set=this.set.bind(this),this.value.update=this.update.bind(this),this.value.asReadonly=Go,this.isLoading=Me(()=>this.status()==="loading"||this.status()==="reloading",void 0)}isError=Me(()=>this.status()==="error");update(t){this.set(t(de(this.value)))}isValueDefined=Me(()=>this.isError()?!1:this.value()!==void 0);hasValue(){return this.isValueDefined()}asReadonly(){return this}},Zu=class extends tf{loaderFn;equal;debugName;pendingTasks;state;extRequest;effectRef;pendingController;resolvePendingTask=void 0;destroyed=!1;unregisterOnDestroy;status;error;constructor(t,n,r,o,i,s){super(Me(()=>{let u=this.state().stream?.();if(!u||this.state().status==="loading"&&this.error())return r;if(!nf(u))throw new rf(this.error());return u.value},{equal:o}),i),this.loaderFn=n,this.equal=o,this.debugName=i,this.extRequest=ef({source:t,computation:u=>({request:u,reload:0})}),this.state=ef({source:this.extRequest,computation:(u,a)=>{let c=u.request===void 0?"idle":"loading";return a?{extRequest:u,status:c,previousStatus:Ob(a.value),stream:a.value.extRequest.request===u.request?a.value.stream:void 0}:{extRequest:u,status:c,previousStatus:"idle",stream:void 0}}}),this.effectRef=Zo(this.loadEffect.bind(this),{injector:s,manualCleanup:!0}),this.pendingTasks=s.get(Wn),this.unregisterOnDestroy=s.get(Oe).onDestroy(()=>this.destroy()),this.status=Me(()=>Ob(this.state()),void 0),this.error=Me(()=>{let u=this.state().stream?.();return u&&!nf(u)?u.error:void 0},void 0)}set(t){if(this.destroyed)return;let n=de(this.error),r=de(this.state);if(!n){let o=de(this.value);if(r.status==="local"&&(this.equal?this.equal(o,t):o===t))return}this.state.set({extRequest:r.extRequest,status:"local",previousStatus:"local",stream:pn({value:t},void 0)}),this.abortInProgressLoad()}reload(){let{status:t}=de(this.state);return t==="idle"||t==="loading"?!1:(this.extRequest.update(({request:n,reload:r})=>({request:n,reload:r+1})),!0)}destroy(){this.destroyed=!0,this.unregisterOnDestroy(),this.effectRef.destroy(),this.abortInProgressLoad(),this.state.set({extRequest:{request:void 0,reload:0},status:"idle",previousStatus:"idle",stream:void 0})}loadEffect(){return at(this,null,function*(){let t=this.extRequest(),{status:n,previousStatus:r}=de(this.state);if(t.request===void 0)return;if(n!=="loading")return;this.abortInProgressLoad();let o=this.resolvePendingTask=this.pendingTasks.add(),{signal:i}=this.pendingController=new AbortController;try{let s=yield de(()=>this.loaderFn({params:t.request,request:t.request,abortSignal:i,previous:{status:r}}));if(i.aborted||de(this.extRequest)!==t)return;this.state.set({extRequest:t,status:"resolved",previousStatus:"resolved",stream:s})}catch(s){if(i.aborted||de(this.extRequest)!==t)return;this.state.set({extRequest:t,status:"resolved",previousStatus:"error",stream:pn({error:sf(s)},void 0)})}finally{o?.(),o=void 0}})}abortInProgressLoad(){de(()=>this.pendingController?.abort()),this.pendingController=void 0,this.resolvePendingTask?.(),this.resolvePendingTask=void 0}};function CI(e){return(t,n)=>t===void 0||n===void 0?t===n:e(t,n)}function wI(e){return xI(e)?e.stream:t=>at(null,null,function*(){try{return pn({value:yield e.loader(t)},void 0)}catch(n){return pn({error:sf(n)},void 0)}})}function xI(e){return!!e.stream}function Ob(e){switch(e.status){case"loading":return e.extRequest.reload===0?"loading":"reloading";case"resolved":return nf(e.stream())?"resolved":"error";default:return e.status}}function nf(e){return e.error===void 0}function sf(e){return II(e)?e:new of(e)}function II(e){return e instanceof Error||typeof e=="object"&&typeof e.name=="string"&&typeof e.message=="string"}var rf=class extends Error{constructor(t){super(t.message,{cause:t})}},of=class extends Error{constructor(t){super(String(t),{cause:t})}};var qb=Symbol("InputSignalNode#UNSET"),LI=P(S({},Do),{transformFn:void 0,applyValueToInputSignal(e,t){xn(e,t)}});function Gb(e,t){let n=Object.create(LI);n.value=e,n.transformFn=t?.transform;function r(){if(Jt(n),n.value===qb){let o=null;throw new _(-950,o)}return n.value}return r[ne]=n,r}var Pb=class{attributeName;constructor(t){this.attributeName=t}__NG_ELEMENT_ID__=()=>ud(this.attributeName);toString(){return`HostAttributeToken ${this.attributeName}`}},iB=(()=>{let e=new x("");return e.__NG_ELEMENT_ID__=t=>{let n=re();if(n===null)throw new _(204,!1);if(n.type&2)return n.value;if(t&8)return null;throw new _(204,!1)},e})();function sB(e){return new Wu}function Lb(e,t){return Gb(e,t)}function jI(e){return Gb(qb,e)}var Ae=(Lb.required=jI,Lb);function jb(e,t){return jd(t)}function BI(e,t){return Bd(t)}var uB=(jb.required=BI,jb);function aB(e,t){return Ry(t)}function Bb(e,t){return jd(t)}function VI(e,t){return Bd(t)}var cB=(Bb.required=VI,Bb);var af=new x(""),HI=new x("");function vi(e){return!e.moduleRef}function $I(e){let t=vi(e)?e.r3Injector:e.moduleRef.injector,n=t.get(be);return n.run(()=>{vi(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(Pt),o;if(n.runOutsideAngular(()=>{o=n.onError.subscribe({next:r})}),vi(e)){let i=()=>t.destroy(),s=e.platformInjector.get(af);s.add(i),t.onDestroy(()=>{o.unsubscribe(),s.delete(i)})}else{let i=()=>e.moduleRef.destroy(),s=e.platformInjector.get(af);s.add(i),e.moduleRef.onDestroy(()=>{Qo(e.allPlatformModules,e.moduleRef),o.unsubscribe(),s.delete(i)})}return zI(r,n,()=>{let i=t.get(Gn),s=i.add(),u=t.get(zd);return u.runInitializers(),u.donePromise.then(()=>{let a=t.get(Gu,mi);if(Xy(a||mi),!t.get(HI,!0))return vi(e)?t.get(Zr):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(vi(e)){let l=t.get(Zr);return e.rootComponent!==void 0&&l.bootstrap(e.rootComponent),l}else return UI?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>{i.remove(s)})})})}var UI;function zI(e,t,n){try{let r=n();return gi(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e(r)),r}}var Yu=null;function qI(e=[],t){return we.create({name:t,providers:[{provide:Lo,useValue:"platform"},{provide:af,useValue:new Set([()=>Yu=null])},...e]})}function GI(e=[]){if(Yu)return Yu;let t=qI(e);return Yu=t,Zy(),WI(t),t}function WI(e){let t=e.get(mu,null);Sr(e,()=>{t?.forEach(n=>n())})}var ZI=1e4;var lB=ZI-1e3;var yf=(()=>{class e{static __NG_ELEMENT_ID__=YI}return e})();function YI(e){return QI(re(),C(),(e&16)===16)}function QI(e,t,n){if(Ot(e)&&!n){let r=Re(e.index,t);return new hn(r,r)}else if(e.type&175){let r=t[ve];return new hn(r,t)}return null}var cf=class{constructor(){}supports(t){return Rd(t)}create(t){return new lf(t)}},KI=(e,t)=>t,lf=class{length=0;collection;_linkedRecords=null;_unlinkedRecords=null;_previousItHead=null;_itHead=null;_itTail=null;_additionsHead=null;_additionsTail=null;_movesHead=null;_movesTail=null;_removalsHead=null;_removalsTail=null;_identityChangesHead=null;_identityChangesTail=null;_trackByFn;constructor(t){this._trackByFn=t||KI}forEachItem(t){let n;for(n=this._itHead;n!==null;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,o=0,i=null;for(;n||r;){let s=!r||n&&n.currentIndex{s=this._trackByFn(o,u),n===null||!Object.is(n.trackById,s)?(n=this._mismatch(n,u,s,o),r=!0):(r&&(n=this._verifyReinsertion(n,u,s,o)),Object.is(n.item,u)||this._addIdentityChange(n,u)),n=n._next,o++}),this.length=o;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return this._additionsHead!==null||this._movesHead!==null||this._removalsHead!==null||this._identityChangesHead!==null}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;t!==null;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;t!==null;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;t!==null;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,o){let i;return t===null?i=this._itTail:(i=t._prev,this._remove(t)),t=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null),t!==null?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,i,o)):(t=this._linkedRecords===null?null:this._linkedRecords.get(r,o),t!==null?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,i,o)):t=this._addAfter(new df(n,r),i,o)),t}_verifyReinsertion(t,n,r,o){let i=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null);return i!==null?t=this._reinsertAfter(i,t._prev,o):t.currentIndex!=o&&(t.currentIndex=o,this._addToMoves(t,o)),t}_truncate(t){for(;t!==null;){let n=t._next;this._addToRemovals(this._unlink(t)),t=n}this._unlinkedRecords!==null&&this._unlinkedRecords.clear(),this._additionsTail!==null&&(this._additionsTail._nextAdded=null),this._movesTail!==null&&(this._movesTail._nextMoved=null),this._itTail!==null&&(this._itTail._next=null),this._removalsTail!==null&&(this._removalsTail._nextRemoved=null),this._identityChangesTail!==null&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){this._unlinkedRecords!==null&&this._unlinkedRecords.remove(t);let o=t._prevRemoved,i=t._nextRemoved;return o===null?this._removalsHead=i:o._nextRemoved=i,i===null?this._removalsTail=o:i._prevRemoved=o,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail===null?this._additionsTail=this._additionsHead=t:this._additionsTail=this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){let o=n===null?this._itHead:n._next;return t._next=o,t._prev=n,o===null?this._itTail=t:o._prev=t,n===null?this._itHead=t:n._next=t,this._linkedRecords===null&&(this._linkedRecords=new Qu),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){this._linkedRecords!==null&&this._linkedRecords.remove(t);let n=t._prev,r=t._next;return n===null?this._itHead=r:n._next=r,r===null?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail===null?this._movesTail=this._movesHead=t:this._movesTail=this._movesTail._nextMoved=t),t}_addToRemovals(t){return this._unlinkedRecords===null&&(this._unlinkedRecords=new Qu),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,this._removalsTail===null?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail===null?this._identityChangesTail=this._identityChangesHead=t:this._identityChangesTail=this._identityChangesTail._nextIdentityChange=t,t}},df=class{item;trackById;currentIndex=null;previousIndex=null;_nextPrevious=null;_prev=null;_next=null;_prevDup=null;_nextDup=null;_prevRemoved=null;_nextRemoved=null;_nextAdded=null;_nextMoved=null;_nextIdentityChange=null;constructor(t,n){this.item=t,this.trackById=n}},ff=class{_head=null;_tail=null;add(t){this._head===null?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;r!==null;r=r._nextDup)if((n===null||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){let n=t._prevDup,r=t._nextDup;return n===null?this._head=r:n._nextDup=r,r===null?this._tail=n:r._prevDup=n,this._head===null}},Qu=class{map=new Map;put(t){let n=t.trackById,r=this.map.get(n);r||(r=new ff,this.map.set(n,r)),r.add(t)}get(t,n){let r=t,o=this.map.get(r);return o?o.get(t,n):null}remove(t){let n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return this.map.size===0}clear(){this.map.clear()}};function Vb(e,t,n){let r=e.previousIndex;if(r===null)return r;let o=0;return n&&r{if(n&&n.key===o)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{let i=this._getOrCreateRecordForKey(o,r);n=this._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;r!==null;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){let r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){let o=this._records.get(t);this._maybeAddToChanges(o,n);let i=o._prev,s=o._next;return i&&(i._next=s),s&&(s._prev=i),o._next=null,o._prev=null,o}let r=new gf(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;t!==null;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;t!==null;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;t!=null;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){this._additionsHead===null?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){this._changesHead===null?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}},gf=class{key;previousValue=null;currentValue=null;_nextPrevious=null;_next=null;_prev=null;_nextAdded=null;_nextRemoved=null;_nextChanged=null;constructor(t){this.key=t}};function Hb(){return new bf([new cf])}var bf=(()=>{class e{factories;static \u0275prov=I({token:e,providedIn:"root",factory:Hb});constructor(n){this.factories=n}static create(n,r){if(r!=null){let o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:()=>{let r=b(e,{optional:!0,skipSelf:!0});return e.create(n,r||Hb())}}}find(n){let r=this.factories.find(o=>o.supports(n));if(r!=null)return r;throw new _(901,!1)}}return e})();function $b(){return new Ku([new pf])}var Ku=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:$b});factories;constructor(n){this.factories=n}static create(n,r){if(r){let o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:()=>{let r=b(e,{optional:!0,skipSelf:!0});return e.create(n,r||$b())}}}find(n){let r=this.factories.find(o=>o.supports(n));if(r)return r;throw new _(901,!1)}}return e})();var Wb=(()=>{class e{constructor(n){}static \u0275fac=function(r){return new(r||e)(A(Zr))};static \u0275mod=$t({type:e});static \u0275inj=ht({})}return e})();function Zb(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:o}=e;W(q.BootstrapApplicationStart);try{let i=o?.injector??GI(r),s=[Rb(),fg,...n||[]],u=new oi({providers:s,parent:i,debugName:"",runEnvironmentInitializers:!1});return $I({r3Injector:u.injector,platformInjector:i,rootComponent:t})}catch(i){return Promise.reject(i)}finally{W(q.BootstrapApplicationEnd)}}function JI(e){return typeof e=="boolean"?e:e!=null&&e!=="false"}function XI(e,t=NaN){return!isNaN(parseFloat(e))&&!isNaN(Number(e))?Number(e):t}var uf=Symbol("NOT_SET"),Yb=new Set,e2=P(S({},Do),{kind:"afterRenderEffectPhase",consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:uf,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(Jt(c),c.value),c.signal[ne]=c,c.registerCleanupFn=l=>(c.cleanup??=new Set).add(l),this.nodes[u]=c,this.hooks[u]=l=>c.phaseFn(l)}}afterRun(){super.afterRun(),this.lastPhase=null}destroy(){if(this.onDestroyFns!==null)for(let t of this.onDestroyFns)t();super.destroy();for(let t of this.nodes)if(t)try{for(let n of t.cleanup??Yb)n()}finally{en(t)}}};function dB(e,t){let n=t?.injector??b(we),r=n.get(ft),o=n.get(Cu),i=n.get(Dt,null,{optional:!0});o.impl??=n.get(Cd);let s=e;typeof s=="function"&&(s={mixedReadWrite:e});let u=n.get(Fr,null,{optional:!0}),a=new mf(o.impl,[s.earlyRead,s.write,s.mixedReadWrite,s.read],u?.view,r,n,i?.snapshot(null));return o.impl.register(a),a}function fB(e,t){let n=gt(e),r=t.elementInjector||Tr();return new mn(n).create(r,t.projectableNodes,t.hostElement,t.environmentInjector,t.directives,t.bindings)}function pB(e){let t=gt(e);if(!t)return null;let n=new mn(t);return{get selector(){return n.selector},get type(){return n.componentType},get inputs(){return n.inputs},get outputs(){return n.outputs},get ngContentSelectors(){return n.ngContentSelectors},get isStandalone(){return t.standalone},get isSignal(){return t.signals}}}var Qb=null;function Et(){return Qb}function vf(e){Qb??=e}var Di=class{},vn=(()=>{class e{historyGo(n){throw new Error("")}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:()=>b(Kb),providedIn:"platform"})}return e})(),t2=new x(""),Kb=(()=>{class e extends vn{_location;_history;_doc=b(K);constructor(){super(),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return Et().getBaseHref(this._doc)}onPopState(n){let r=Et().getGlobalEventTarget(this._doc,"window");return r.addEventListener("popstate",n,!1),()=>r.removeEventListener("popstate",n)}onHashChange(n){let r=Et().getGlobalEventTarget(this._doc,"window");return r.addEventListener("hashchange",n,!1),()=>r.removeEventListener("hashchange",n)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(n){this._location.pathname=n}pushState(n,r,o){this._history.pushState(n,r,o)}replaceState(n,r,o){this._history.replaceState(n,r,o)}forward(){this._history.forward()}back(){this._history.back()}historyGo(n=0){this._history.go(n)}getState(){return this._history.state}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:()=>new e,providedIn:"platform"})}return e})();function Ju(e,t){return e?t?e.endsWith("/")?t.startsWith("/")?e+t.slice(1):e+t:t.startsWith("/")?e+t:`${e}/${t}`:e:t}function Jb(e){let t=e.search(/#|\?|$/);return e[t-1]==="/"?e.slice(0,t-1)+e.slice(t):e}function it(e){return e&&e[0]!=="?"?`?${e}`:e}var eo=(()=>{class e{historyGo(n){throw new Error("")}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:()=>b(e1),providedIn:"root"})}return e})(),Xu=new x(""),e1=(()=>{class e extends eo{_platformLocation;_baseHref;_removeListenerFns=[];constructor(n,r){super(),this._platformLocation=n,this._baseHref=r??this._platformLocation.getBaseHrefFromDOM()??b(K).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}prepareExternalUrl(n){return Ju(this._baseHref,n)}path(n=!1){let r=this._platformLocation.pathname+it(this._platformLocation.search),o=this._platformLocation.hash;return o&&n?`${r}${o}`:r}pushState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i));this._platformLocation.pushState(n,r,s)}replaceState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i));this._platformLocation.replaceState(n,r,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static \u0275fac=function(r){return new(r||e)(A(vn),A(Xu,8))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),t1=(()=>{class e{_subject=new le;_basePath;_locationStrategy;_urlChangeListeners=[];_urlChangeSubscription=null;constructor(n){this._locationStrategy=n;let r=this._locationStrategy.getBaseHref();this._basePath=o2(Jb(Xb(r))),this._locationStrategy.onPopState(o=>{this._subject.next({url:this.path(!0),pop:!0,state:o.state,type:o.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(n=!1){return this.normalize(this._locationStrategy.path(n))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(n,r=""){return this.path()==this.normalize(n+it(r))}normalize(n){return e.stripTrailingSlash(r2(this._basePath,Xb(n)))}prepareExternalUrl(n){return n&&n[0]!=="/"&&(n="/"+n),this._locationStrategy.prepareExternalUrl(n)}go(n,r="",o=null){this._locationStrategy.pushState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+it(r)),o)}replaceState(n,r="",o=null){this._locationStrategy.replaceState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+it(r)),o)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(n=0){this._locationStrategy.historyGo?.(n)}onUrlChange(n){return this._urlChangeListeners.push(n),this._urlChangeSubscription??=this.subscribe(r=>{this._notifyUrlChangeListeners(r.url,r.state)}),()=>{let r=this._urlChangeListeners.indexOf(n);this._urlChangeListeners.splice(r,1),this._urlChangeListeners.length===0&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(n="",r){this._urlChangeListeners.forEach(o=>o(n,r))}subscribe(n,r,o){return this._subject.subscribe({next:n,error:r??void 0,complete:o??void 0})}static normalizeQueryParams=it;static joinWithSlash=Ju;static stripTrailingSlash=Jb;static \u0275fac=function(r){return new(r||e)(A(eo))};static \u0275prov=I({token:e,factory:()=>n2(),providedIn:"root"})}return e})();function n2(){return new t1(A(eo))}function r2(e,t){if(!e||!t.startsWith(e))return t;let n=t.substring(e.length);return n===""||["/",";","?","#"].includes(n[0])?n:t}function Xb(e){return e.replace(/\/index.html$/,"")}function o2(e){if(new RegExp("^(https?:)?//").test(e)){let[,n]=e.split(/\/\/[^\/]+/);return n}return e}var i2=(()=>{class e extends eo{_platformLocation;_baseHref="";_removeListenerFns=[];constructor(n,r){super(),this._platformLocation=n,r!=null&&(this._baseHref=r)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}path(n=!1){let r=this._platformLocation.hash??"#";return r.length>0?r.substring(1):r}prepareExternalUrl(n){let r=Ju(this._baseHref,n);return r.length>0?"#"+r:r}pushState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i))||this._platformLocation.pathname;this._platformLocation.pushState(n,r,s)}replaceState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i))||this._platformLocation.pathname;this._platformLocation.replaceState(n,r,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static \u0275fac=function(r){return new(r||e)(A(vn),A(Xu,8))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})();var Df=/\s+/,n1=[],s2=(()=>{class e{_ngEl;_renderer;initialClasses=n1;rawClass;stateMap=new Map;constructor(n,r){this._ngEl=n,this._renderer=r}set klass(n){this.initialClasses=n!=null?n.trim().split(Df):n1}set ngClass(n){this.rawClass=typeof n=="string"?n.trim().split(Df):n}ngDoCheck(){for(let r of this.initialClasses)this._updateState(r,!0);let n=this.rawClass;if(Array.isArray(n)||n instanceof Set)for(let r of n)this._updateState(r,!0);else if(n!=null)for(let r of Object.keys(n))this._updateState(r,!!n[r]);this._applyStateDiff()}_updateState(n,r){let o=this.stateMap.get(n);o!==void 0?(o.enabled!==r&&(o.changed=!0,o.enabled=r),o.touched=!0):this.stateMap.set(n,{enabled:r,changed:!0,touched:!0})}_applyStateDiff(){for(let n of this.stateMap){let r=n[0],o=n[1];o.changed?(this._toggleClass(r,o.enabled),o.changed=!1):o.touched||(o.enabled&&this._toggleClass(r,!1),this.stateMap.delete(r)),o.touched=!1}}_toggleClass(n,r){n=n.trim(),n.length>0&&n.split(Df).forEach(o=>{r?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}static \u0275fac=function(r){return new(r||e)(oe(jt),oe(pi))};static \u0275dir=ot({type:e,selectors:[["","ngClass",""]],inputs:{klass:[0,"class","klass"],ngClass:"ngClass"}})}return e})(),u2=(()=>{class e{_viewContainerRef;ngComponentOutlet=null;ngComponentOutletInputs;ngComponentOutletInjector;ngComponentOutletEnvironmentInjector;ngComponentOutletContent;ngComponentOutletNgModule;_componentRef;_moduleRef;_inputsUsed=new Map;get componentInstance(){return this._componentRef?.instance??null}constructor(n){this._viewContainerRef=n}_needToReCreateNgModuleInstance(n){return n.ngComponentOutletNgModule!==void 0}_needToReCreateComponentInstance(n){return n.ngComponentOutlet!==void 0||n.ngComponentOutletContent!==void 0||n.ngComponentOutletInjector!==void 0||n.ngComponentOutletEnvironmentInjector!==void 0||this._needToReCreateNgModuleInstance(n)}ngOnChanges(n){if(this._needToReCreateComponentInstance(n)&&(this._viewContainerRef.clear(),this._inputsUsed.clear(),this._componentRef=void 0,this.ngComponentOutlet)){let r=this.ngComponentOutletInjector||this._viewContainerRef.parentInjector;this._needToReCreateNgModuleInstance(n)&&(this._moduleRef?.destroy(),this.ngComponentOutletNgModule?this._moduleRef=Vd(this.ngComponentOutletNgModule,a2(r)):this._moduleRef=void 0),this._componentRef=this._viewContainerRef.createComponent(this.ngComponentOutlet,{injector:r,ngModuleRef:this._moduleRef,projectableNodes:this.ngComponentOutletContent,environmentInjector:this.ngComponentOutletEnvironmentInjector})}}ngDoCheck(){if(this._componentRef){if(this.ngComponentOutletInputs)for(let n of Object.keys(this.ngComponentOutletInputs))this._inputsUsed.set(n,!0);this._applyInputStateDiff(this._componentRef)}}ngOnDestroy(){this._moduleRef?.destroy()}_applyInputStateDiff(n){for(let[r,o]of this._inputsUsed)o?(n.setInput(r,this.ngComponentOutletInputs[r]),this._inputsUsed.set(r,!1)):(n.setInput(r,void 0),this._inputsUsed.delete(r))}static \u0275fac=function(r){return new(r||e)(oe(rt))};static \u0275dir=ot({type:e,selectors:[["","ngComponentOutlet",""]],inputs:{ngComponentOutlet:"ngComponentOutlet",ngComponentOutletInputs:"ngComponentOutletInputs",ngComponentOutletInjector:"ngComponentOutletInjector",ngComponentOutletEnvironmentInjector:"ngComponentOutletEnvironmentInjector",ngComponentOutletContent:"ngComponentOutletContent",ngComponentOutletNgModule:"ngComponentOutletNgModule"},exportAs:["ngComponentOutlet"],features:[hu]})}return e})();function a2(e){return e.get(yn).injector}var ea=class{$implicit;ngForOf;index;count;constructor(t,n,r,o){this.$implicit=t,this.ngForOf=n,this.index=r,this.count=o}get first(){return this.index===0}get last(){return this.index===this.count-1}get even(){return this.index%2===0}get odd(){return!this.even}},s1=(()=>{class e{_viewContainer;_template;_differs;set ngForOf(n){this._ngForOf=n,this._ngForOfDirty=!0}set ngForTrackBy(n){this._trackByFn=n}get ngForTrackBy(){return this._trackByFn}_ngForOf=null;_ngForOfDirty=!0;_differ=null;_trackByFn;constructor(n,r,o){this._viewContainer=n,this._template=r,this._differs=o}set ngForTemplate(n){n&&(this._template=n)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;let n=this._ngForOf;!this._differ&&n&&(this._differ=this._differs.find(n).create(this.ngForTrackBy))}if(this._differ){let n=this._differ.diff(this._ngForOf);n&&this._applyChanges(n)}}_applyChanges(n){let r=this._viewContainer;n.forEachOperation((o,i,s)=>{if(o.previousIndex==null)r.createEmbeddedView(this._template,new ea(o.item,this._ngForOf,-1,-1),s===null?void 0:s);else if(s==null)r.remove(i===null?void 0:i);else if(i!==null){let u=r.get(i);r.move(u,s),r1(u,o)}});for(let o=0,i=r.length;o{let i=r.get(o.currentIndex);r1(i,o)})}static ngTemplateContextGuard(n,r){return!0}static \u0275fac=function(r){return new(r||e)(oe(rt),oe(gn),oe(bf))};static \u0275dir=ot({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"}})}return e})();function r1(e,t){e.context.$implicit=t.item}var c2=(()=>{class e{_viewContainer;_context=new ta;_thenTemplateRef=null;_elseTemplateRef=null;_thenViewRef=null;_elseViewRef=null;constructor(n,r){this._viewContainer=n,this._thenTemplateRef=r}set ngIf(n){this._context.$implicit=this._context.ngIf=n,this._updateView()}set ngIfThen(n){o1(n,!1),this._thenTemplateRef=n,this._thenViewRef=null,this._updateView()}set ngIfElse(n){o1(n,!1),this._elseTemplateRef=n,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngIfUseIfTypeGuard;static ngTemplateGuard_ngIf;static ngTemplateContextGuard(n,r){return!0}static \u0275fac=function(r){return new(r||e)(oe(rt),oe(gn))};static \u0275dir=ot({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"}})}return e})(),ta=class{$implicit=null;ngIf=null};function o1(e,t){if(e&&!e.createEmbeddedView)throw new _(2020,!1)}var l2=(()=>{class e{_ngEl;_differs;_renderer;_ngStyle=null;_differ=null;constructor(n,r,o){this._ngEl=n,this._differs=r,this._renderer=o}set ngStyle(n){this._ngStyle=n,!this._differ&&n&&(this._differ=this._differs.find(n).create())}ngDoCheck(){if(this._differ){let n=this._differ.diff(this._ngStyle);n&&this._applyChanges(n)}}_setStyle(n,r){let[o,i]=n.split("."),s=o.indexOf("-")===-1?void 0:nt.DashCase;r!=null?this._renderer.setStyle(this._ngEl.nativeElement,o,i?`${r}${i}`:r,s):this._renderer.removeStyle(this._ngEl.nativeElement,o,s)}_applyChanges(n){n.forEachRemovedItem(r=>this._setStyle(r.key,null)),n.forEachAddedItem(r=>this._setStyle(r.key,r.currentValue)),n.forEachChangedItem(r=>this._setStyle(r.key,r.currentValue))}static \u0275fac=function(r){return new(r||e)(oe(jt),oe(Ku),oe(pi))};static \u0275dir=ot({type:e,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"}})}return e})(),d2=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;constructor(n){this._viewContainerRef=n}ngOnChanges(n){if(this._shouldRecreateView(n)){let r=this._viewContainerRef;if(this._viewRef&&r.remove(r.indexOf(this._viewRef)),!this.ngTemplateOutlet){this._viewRef=null;return}let o=this._createContextForwardProxy();this._viewRef=r.createEmbeddedView(this.ngTemplateOutlet,o,{injector:this.ngTemplateOutletInjector??void 0})}}_shouldRecreateView(n){return!!n.ngTemplateOutlet||!!n.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(n,r,o)=>this.ngTemplateOutletContext?Reflect.set(this.ngTemplateOutletContext,r,o):!1,get:(n,r,o)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,r,o)}})}static \u0275fac=function(r){return new(r||e)(oe(rt))};static \u0275dir=ot({type:e,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},features:[hu]})}return e})();function f2(e,t){return new _(2100,!1)}var Ef=class{createSubscription(t,n,r){return de(()=>t.subscribe({next:n,error:r}))}dispose(t){de(()=>t.unsubscribe())}},_f=class{createSubscription(t,n,r){return t.then(o=>n?.(o),o=>r?.(o)),{unsubscribe:()=>{n=null,r=null}}}dispose(t){t.unsubscribe()}},p2=new _f,h2=new Ef,g2=(()=>{class e{_ref;_latestValue=null;markForCheckOnValueUpdate=!0;_subscription=null;_obj=null;_strategy=null;applicationErrorHandler=b(Pt);constructor(n){this._ref=n}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(n){if(!this._obj){if(n)try{this.markForCheckOnValueUpdate=!1,this._subscribe(n)}finally{this.markForCheckOnValueUpdate=!0}return this._latestValue}return n!==this._obj?(this._dispose(),this.transform(n)):this._latestValue}_subscribe(n){this._obj=n,this._strategy=this._selectStrategy(n),this._subscription=this._strategy.createSubscription(n,r=>this._updateLatestValue(n,r),r=>this.applicationErrorHandler(r))}_selectStrategy(n){if(gi(n))return p2;if(Ou(n))return h2;throw f2(e,n)}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(n,r){n===this._obj&&(this._latestValue=r,this.markForCheckOnValueUpdate&&this._ref?.markForCheck())}static \u0275fac=function(r){return new(r||e)(oe(yf,16))};static \u0275pipe=ku({name:"async",type:e,pure:!1})}return e})();function m2(e,t){return{key:e,value:t}}var y2=(()=>{class e{differs;constructor(n){this.differs=n}differ;keyValues=[];compareFn=i1;transform(n,r=i1){if(!n||!(n instanceof Map)&&typeof n!="object")return null;this.differ??=this.differs.find(n).create();let o=this.differ.diff(n),i=r!==this.compareFn;return o&&(this.keyValues=[],o.forEachItem(s=>{this.keyValues.push(m2(s.key,s.currentValue))})),(o||i)&&(r&&this.keyValues.sort(r),this.compareFn=r),this.keyValues}static \u0275fac=function(r){return new(r||e)(oe(Ku,16))};static \u0275pipe=ku({name:"keyvalue",type:e,pure:!1})}return e})();function i1(e,t){let n=e.key,r=t.key;if(n===r)return 0;if(n==null)return 1;if(r==null)return-1;if(typeof n=="string"&&typeof r=="string")return n{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=$t({type:e});static \u0275inj=ht({})}return e})();function Ei(e,t){t=encodeURIComponent(t);for(let n of e.split(";")){let r=n.indexOf("="),[o,i]=r==-1?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}var tr=class{};var xf="browser";function u1(e){return e===xf}var Z7=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:()=>new wf(b(K),window)})}return e})(),wf=class{document;window;offset=()=>[0,0];constructor(t,n){this.document=t,this.window=n}setOffset(t){Array.isArray(t)?this.offset=()=>t:this.offset=t}getScrollPosition(){return[this.window.scrollX,this.window.scrollY]}scrollToPosition(t,n){this.window.scrollTo(P(S({},n),{left:t[0],top:t[1]}))}scrollToAnchor(t,n){let r=b2(this.document,t);r&&(this.scrollToElement(r,n),r.focus())}setHistoryScrollRestoration(t){try{this.window.history.scrollRestoration=t}catch{console.warn(pt(2400,!1))}}scrollToElement(t,n){let r=t.getBoundingClientRect(),o=r.left+this.window.pageXOffset,i=r.top+this.window.pageYOffset,s=this.offset();this.window.scrollTo(P(S({},n),{left:o-s[0],top:i-s[1]}))}};function b2(e,t){let n=e.getElementById(t)||e.getElementsByName(t)[0];if(n)return n;if(typeof e.createTreeWalker=="function"&&e.body&&typeof e.body.attachShadow=="function"){let r=e.createTreeWalker(e.body,NodeFilter.SHOW_ELEMENT),o=r.currentNode;for(;o;){let i=o.shadowRoot;if(i){let s=i.getElementById(t)||i.querySelector(`[name="${t}"]`);if(s)return s}o=r.nextNode()}}return null}var ro={};lr(ro,{appendToAll:()=>E2,createThemeStyles:()=>_2,merge:()=>D2,structuralStyles:()=>C2,toProp:()=>je});var v2=` +`);return r>=0?n.slice(0,r):n}function _s(e,t){return e?t?`${e} ${t}`:e:t||""}var nE=G({__forward_ref__:G});function Cs(e){return e.__forward_ref__=Cs,e.toString=function(){return kt(this())},e}function ue(e){return Tc(e)?e():e}function Tc(e){return typeof e=="function"&&e.hasOwnProperty(nE)&&e.__forward_ref__===Cs}function I(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function ht(e){return{providers:e.providers||[],imports:e.imports||[]}}function Fo(e){return oE(e,ws)}function rE(e){return Fo(e)!==null}function oE(e,t){return e.hasOwnProperty(t)&&e[t]||null}function iE(e){let t=e?.[ws]??null;return t||null}function mc(e){return e&&e.hasOwnProperty(ms)?e[ms]:null}var ws=G({\u0275prov:G}),ms=G({\u0275inj:G}),x=class{_desc;ngMetadataName="InjectionToken";\u0275prov;constructor(t,n){this._desc=t,this.\u0275prov=void 0,typeof n=="number"?this.__NG_ELEMENT_ID__=n:n!==void 0&&(this.\u0275prov=I({token:this,providedIn:n.providedIn||"root",factory:n.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function Sc(e){return e&&!!e.\u0275providers}var Mc=G({\u0275cmp:G}),Ac=G({\u0275dir:G}),Nc=G({\u0275pipe:G}),kc=G({\u0275mod:G}),Mo=G({\u0275fac:G}),On=G({__NG_ELEMENT_ID__:G}),v0=G({__NG_ENV_ID__:G});function Rc(e){return Is(e,"@NgModule"),e[kc]||null}function gt(e){return Is(e,"@Component"),e[Mc]||null}function xs(e){return Is(e,"@Directive"),e[Ac]||null}function w0(e){return Is(e,"@Pipe"),e[Nc]||null}function Is(e,t){if(e==null)throw new _(-919,!1)}function Ne(e){return typeof e=="string"?e:e==null?"":String(e)}function x0(e){return typeof e=="function"?e.name||e.toString():typeof e=="object"&&e!=null&&typeof e.type=="function"?e.type.name||e.type.toString():Ne(e)}var I0=G({ngErrorCode:G}),sE=G({ngErrorMessage:G}),uE=G({ngTokenPath:G});function Fc(e,t){return T0("",-200,t)}function Ts(e,t){throw new _(-201,!1)}function T0(e,t,n){let r=new _(t,e);return r[I0]=t,r[sE]=e,n&&(r[uE]=n),r}function aE(e){return e[I0]}var yc;function S0(){return yc}function _e(e){let t=yc;return yc=e,t}function Oc(e,t,n){let r=Fo(e);if(r&&r.providedIn=="root")return r.value===void 0?r.value=r.factory():r.value;if(n&8)return null;if(t!==void 0)return t;Ts(e,"")}var cE={},Nn=cE,lE="__NG_DI_FLAG__",bc=class{injector;constructor(t){this.injector=t}retrieve(t,n){let r=kn(n)||0;try{return this.injector.get(t,r&8?null:Nn,r)}catch(o){if(Cr(o))return o;throw o}}};function dE(e,t=0){let n=hs();if(n===void 0)throw new _(-203,!1);if(n===null)return Oc(e,void 0,t);{let r=fE(t),o=n.retrieve(e,r);if(Cr(o)){if(r.optional)return null;throw o}return o}}function A(e,t=0){return(S0()||dE)(ue(e),t)}function b(e,t){return A(e,kn(t))}function kn(e){return typeof e>"u"||typeof e=="number"?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function fE(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function vc(e){let t=[];for(let n=0;nArray.isArray(n)?Ss(n,t):t(n))}function Pc(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function Oo(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function N0(e,t){let n=[];for(let r=0;rt;){let i=o-2;e[o]=e[i],o--}e[t]=n,e[t+1]=r}}function Po(e,t,n){let r=xr(e,t);return r>=0?e[r|1]=n:(r=~r,k0(e,r,t,n)),r}function Ms(e,t){let n=xr(e,t);if(n>=0)return e[n|1]}function xr(e,t){return hE(e,t,1)}function hE(e,t,n){let r=0,o=e.length>>n;for(;o!==r;){let i=r+(o-r>>1),s=e[i<t?o=i:r=i+1}return~(o<{n.push(s)};return Ss(t,s=>{let u=s;ys(u,i,[],r)&&(o||=[],o.push(u))}),o!==void 0&&F0(o,i),n}function F0(e,t){for(let n=0;n{t(i,r)})}}function ys(e,t,n,r){if(e=ue(e),!e)return!1;let o=null,i=mc(e),s=!i&>(e);if(!i&&!s){let a=e.ngModule;if(i=mc(a),i)o=a;else return!1}else{if(s&&!s.standalone)return!1;o=e}let u=r.has(o);if(s){if(u)return!1;if(r.add(o),s.dependencies){let a=typeof s.dependencies=="function"?s.dependencies():s.dependencies;for(let c of a)ys(c,t,n,r)}}else if(i){if(i.imports!=null&&!u){r.add(o);let c;Ss(i.imports,l=>{ys(l,t,n,r)&&(c||=[],c.push(l))}),c!==void 0&&F0(c,t)}if(!u){let c=sn(o)||(()=>new o);t({provide:o,useFactory:c,deps:ye},o),t({provide:jc,useValue:o,multi:!0},o),t({provide:Ir,useValue:()=>A(o),multi:!0},o)}let a=i.providers;if(a!=null&&!u){let c=e;Vc(a,l=>{t(l,c)})}}else return!1;return o!==e&&e.providers!==void 0}function Vc(e,t){for(let n of e)Sc(n)&&(n=n.\u0275providers),Array.isArray(n)?Vc(n,t):t(n)}var gE=G({provide:String,useValue:G});function O0(e){return e!==null&&typeof e=="object"&&gE in e}function mE(e){return!!(e&&e.useExisting)}function yE(e){return!!(e&&e.useFactory)}function Rn(e){return typeof e=="function"}function P0(e){return!!e.useClass}var Lo=new x(""),gs={},D0={},gc;function Tr(){return gc===void 0&&(gc=new Ao),gc}var Ce=class{},Fn=class extends Ce{parent;source;scopes;records=new Map;_ngOnDestroyHooks=new Set;_onDestroyHooks=[];get destroyed(){return this._destroyed}_destroyed=!1;injectorDefTypes;constructor(t,n,r,o){super(),this.parent=n,this.source=r,this.scopes=o,Ec(t,s=>this.processProvider(s)),this.records.set(Lc,wr(void 0,this)),o.has("environment")&&this.records.set(Ce,wr(void 0,this));let i=this.records.get(Lo);i!=null&&typeof i.value=="string"&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(jc,ye,{self:!0}))}retrieve(t,n){let r=kn(n)||0;try{return this.get(t,Nn,r)}catch(o){if(Cr(o))return o;throw o}}destroy(){So(this),this._destroyed=!0;let t=M(null);try{for(let r of this._ngOnDestroyHooks)r.ngOnDestroy();let n=this._onDestroyHooks;this._onDestroyHooks=[];for(let r of n)r()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),M(t)}}onDestroy(t){return So(this),this._onDestroyHooks.push(t),()=>this.removeOnDestroy(t)}runInContext(t){So(this);let n=dt(this),r=_e(void 0),o;try{return t()}finally{dt(n),_e(r)}}get(t,n=Nn,r){if(So(this),t.hasOwnProperty(v0))return t[v0](this);let o=kn(r),i,s=dt(this),u=_e(void 0);try{if(!(o&4)){let c=this.records.get(t);if(c===void 0){let l=_E(t)&&Fo(t);l&&this.injectableDefInScope(l)?c=wr(Dc(t),gs):c=null,this.records.set(t,c)}if(c!=null)return this.hydrate(t,c,o)}let a=o&2?Tr():this.parent;return n=o&8&&n===Nn?null:n,a.get(t,n)}catch(a){let c=aE(a);throw c===-200||c===-201?new _(c,null):a}finally{_e(u),dt(s)}}resolveInjectorInitializers(){let t=M(null),n=dt(this),r=_e(void 0),o;try{let i=this.get(Ir,ye,{self:!0});for(let s of i)s()}finally{dt(n),_e(r),M(t)}}toString(){let t=[],n=this.records;for(let r of n.keys())t.push(kt(r));return`R3Injector[${t.join(", ")}]`}processProvider(t){t=ue(t);let n=Rn(t)?t:ue(t&&t.provide),r=vE(t);if(!Rn(t)&&t.multi===!0){let o=this.records.get(n);o||(o=wr(void 0,gs,!0),o.factory=()=>vc(o.multi),this.records.set(n,o)),n=t,o.multi.push(t)}this.records.set(n,r)}hydrate(t,n,r){let o=M(null);try{if(n.value===D0)throw Fc(kt(t));return n.value===gs&&(n.value=D0,n.value=n.factory(void 0,r)),typeof n.value=="object"&&n.value&&EE(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}finally{M(o)}}injectableDefInScope(t){if(!t.providedIn)return!1;let n=ue(t.providedIn);return typeof n=="string"?n==="any"||this.scopes.has(n):this.injectorDefTypes.has(n)}removeOnDestroy(t){let n=this._onDestroyHooks.indexOf(t);n!==-1&&this._onDestroyHooks.splice(n,1)}};function Dc(e){let t=Fo(e),n=t!==null?t.factory:sn(e);if(n!==null)return n;if(e instanceof x)throw new _(204,!1);if(e instanceof Function)return bE(e);throw new _(204,!1)}function bE(e){if(e.length>0)throw new _(204,!1);let n=iE(e);return n!==null?()=>n.factory(e):()=>new e}function vE(e){if(O0(e))return wr(void 0,e.useValue);{let t=Hc(e);return wr(t,gs)}}function Hc(e,t,n){let r;if(Rn(e)){let o=ue(e);return sn(o)||Dc(o)}else if(O0(e))r=()=>ue(e.useValue);else if(yE(e))r=()=>e.useFactory(...vc(e.deps||[]));else if(mE(e))r=(o,i)=>A(ue(e.useExisting),i!==void 0&&i&8?8:void 0);else{let o=ue(e&&(e.useClass||e.provide));if(DE(e))r=()=>new o(...vc(e.deps));else return sn(o)||Dc(o)}return r}function So(e){if(e.destroyed)throw new _(205,!1)}function wr(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function DE(e){return!!e.deps}function EE(e){return e!==null&&typeof e=="object"&&typeof e.ngOnDestroy=="function"}function _E(e){return typeof e=="function"||typeof e=="object"&&e.ngMetadataName==="InjectionToken"}function Ec(e,t){for(let n of e)Array.isArray(n)?Ec(n,t):n&&Sc(n)?Ec(n.\u0275providers,t):t(n)}function Sr(e,t){let n;e instanceof Fn?(So(e),n=e):n=new bc(e);let r,o=dt(n),i=_e(void 0);try{return t()}finally{dt(o),_e(i)}}function As(){return S0()!==void 0||hs()!=null}function CE(e){if(!As())throw new _(-203,!1)}var Qe=0,T=1,L=2,ae=3,He=4,Ie=5,Ln=6,Mr=7,ee=8,Rt=9,mt=10,Z=11,Ar=12,$c=13,jn=14,ve=15,cn=16,Bn=17,yt=18,Ft=19,Uc=20,Nt=21,Ns=22,un=23,ke=24,Vn=25,Hn=26,Q=27,L0=1,zc=6,ln=7,jo=8,$n=9,te=10;function bt(e){return Array.isArray(e)&&typeof e[L0]=="object"}function Ke(e){return Array.isArray(e)&&e[L0]===!0}function qc(e){return(e.flags&4)!==0}function Ot(e){return e.componentOffset>-1}function Nr(e){return(e.flags&1)===1}function Je(e){return!!e.template}function kr(e){return(e[L]&512)!==0}function Un(e){return(e[L]&256)===256}var Gc="svg",j0="math";function $e(e){for(;Array.isArray(e);)e=e[Qe];return e}function Wc(e,t){return $e(t[e])}function Ue(e,t){return $e(t[e.index])}function Bo(e,t){return e.data[t]}function Vo(e,t){return e[t]}function Ho(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function Re(e,t){let n=t[e];return bt(n)?n:n[Qe]}function B0(e){return(e[L]&4)===4}function ks(e){return(e[L]&128)===128}function V0(e){return Ke(e[ae])}function Fe(e,t){return t==null?null:e[t]}function Zc(e){e[Bn]=0}function Yc(e){e[L]&1024||(e[L]|=1024,ks(e)&&zn(e))}function H0(e,t){for(;e>0;)t=t[jn],e--;return t}function $o(e){return!!(e[L]&9216||e[ke]?.dirty)}function Rs(e){e[mt].changeDetectionScheduler?.notify(8),e[L]&64&&(e[L]|=1024),$o(e)&&zn(e)}function zn(e){e[mt].changeDetectionScheduler?.notify(0);let t=an(e);for(;t!==null&&!(t[L]&8192||(t[L]|=8192,!ks(t)));)t=an(t)}function Qc(e,t){if(Un(e))throw new _(911,!1);e[Nt]===null&&(e[Nt]=[]),e[Nt].push(t)}function $0(e,t){if(e[Nt]===null)return;let n=e[Nt].indexOf(t);n!==-1&&e[Nt].splice(n,1)}function an(e){let t=e[ae];return Ke(t)?t[ae]:t}function Kc(e){return e[Mr]??=[]}function Jc(e){return e.cleanup??=[]}function U0(e,t,n,r){let o=Kc(t);o.push(n),e.firstCreatePass&&Jc(e).push(r,o.length-1)}var V={lFrame:tg(null),bindingsEnabled:!0,skipHydrationRootTNode:null};var _c=!1;function z0(){return V.lFrame.elementDepthCount}function q0(){V.lFrame.elementDepthCount++}function Xc(){V.lFrame.elementDepthCount--}function Fs(){return V.bindingsEnabled}function el(){return V.skipHydrationRootTNode!==null}function tl(e){return V.skipHydrationRootTNode===e}function nl(){V.skipHydrationRootTNode=null}function C(){return V.lFrame.lView}function Y(){return V.lFrame.tView}function G0(e){return V.lFrame.contextLView=e,e[ee]}function W0(e){return V.lFrame.contextLView=null,e}function re(){let e=rl();for(;e!==null&&e.type===64;)e=e.parent;return e}function rl(){return V.lFrame.currentTNode}function Z0(){let e=V.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function qn(e,t){let n=V.lFrame;n.currentTNode=e,n.isParent=t}function ol(){return V.lFrame.isParent}function il(){V.lFrame.isParent=!1}function sl(){return V.lFrame.contextLView}function ul(){return _c}function No(e){let t=_c;return _c=e,t}function Rr(){let e=V.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function al(){return V.lFrame.bindingIndex}function Y0(e){return V.lFrame.bindingIndex=e}function Xe(){return V.lFrame.bindingIndex++}function Uo(e){let t=V.lFrame,n=t.bindingIndex;return t.bindingIndex=t.bindingIndex+e,n}function Q0(){return V.lFrame.inI18n}function K0(e,t){let n=V.lFrame;n.bindingIndex=n.bindingRootIndex=e,Os(t)}function J0(){return V.lFrame.currentDirectiveIndex}function Os(e){V.lFrame.currentDirectiveIndex=e}function X0(e){let t=V.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function Ps(){return V.lFrame.currentQueryIndex}function zo(e){V.lFrame.currentQueryIndex=e}function wE(e){let t=e[T];return t.type===2?t.declTNode:t.type===1?e[Ie]:null}function cl(e,t,n){if(n&4){let o=t,i=e;for(;o=o.parent,o===null&&!(n&1);)if(o=wE(i),o===null||(i=i[jn],o.type&10))break;if(o===null)return!1;t=o,e=i}let r=V.lFrame=eg();return r.currentTNode=t,r.lView=e,!0}function Ls(e){let t=eg(),n=e[T];V.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function eg(){let e=V.lFrame,t=e===null?null:e.child;return t===null?tg(e):t}function tg(e){let t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return e!==null&&(e.child=t),t}function ng(){let e=V.lFrame;return V.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var ll=ng;function js(){let e=ng();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function rg(e){return(V.lFrame.contextLView=H0(e,V.lFrame.contextLView))[ee]}function ze(){return V.lFrame.selectedIndex}function dn(e){V.lFrame.selectedIndex=e}function fn(){let e=V.lFrame;return Bo(e.tView,e.selectedIndex)}function og(){V.lFrame.currentNamespace=Gc}function ig(){xE()}function xE(){V.lFrame.currentNamespace=null}function sg(){return V.lFrame.currentNamespace}var ug=!0;function Bs(){return ug}function qo(e){ug=e}function Cc(e,t=null,n=null,r){let o=dl(e,t,n,r);return o.resolveInjectorInitializers(),o}function dl(e,t=null,n=null,r,o=new Set){let i=[n||ye,R0(e)];return r=r||(typeof e=="object"?void 0:kt(e)),new Fn(i,t||Tr(),r||null,o)}var we=class e{static THROW_IF_NOT_FOUND=Nn;static NULL=new Ao;static create(t,n){if(Array.isArray(t))return Cc({name:""},n,t,"");{let r=t.name??"";return Cc({name:r},t.parent,t.providers,r)}}static \u0275prov=I({token:e,providedIn:"any",factory:()=>A(Lc)});static __NG_ELEMENT_ID__=-1},K=new x(""),Oe=(()=>{class e{static __NG_ELEMENT_ID__=IE;static __NG_ENV_ID__=n=>n}return e})(),bs=class extends Oe{_lView;constructor(t){super(),this._lView=t}get destroyed(){return Un(this._lView)}onDestroy(t){let n=this._lView;return Qc(n,t),()=>$0(n,t)}};function IE(){return new bs(C())}var ag=!1,cg=new x(""),Gn=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Eo(!1);debugTaskTracker=b(cg,{optional:!0});get hasPendingTasks(){return this.destroyed?!1:this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new B(n=>{n.next(!1),n.complete()}):this.pendingTask}add(){!this.hasPendingTasks&&!this.destroyed&&this.pendingTask.next(!0);let n=this.taskId++;return this.pendingTasks.add(n),this.debugTaskTracker?.add(n),n}has(n){return this.pendingTasks.has(n)}remove(n){this.pendingTasks.delete(n),this.debugTaskTracker?.remove(n),this.pendingTasks.size===0&&this.hasPendingTasks&&this.pendingTask.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks&&this.pendingTask.next(!1),this.destroyed=!0,this.pendingTask.unsubscribe()}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),wc=class extends le{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(t=!1){super(),this.__isAsync=t,As()&&(this.destroyRef=b(Oe,{optional:!0})??void 0,this.pendingTasks=b(Gn,{optional:!0})??void 0)}emit(t){let n=M(null);try{super.next(t)}finally{M(n)}}subscribe(t,n,r){let o=t,i=n||(()=>null),s=r;if(t&&typeof t=="object"){let a=t;o=a.next?.bind(a),i=a.error?.bind(a),s=a.complete?.bind(a)}this.__isAsync&&(i=this.wrapInTimeout(i),o&&(o=this.wrapInTimeout(o)),s&&(s=this.wrapInTimeout(s)));let u=super.subscribe({next:o,error:i,complete:s});return t instanceof X&&t.add(u),u}wrapInTimeout(t){return n=>{let r=this.pendingTasks?.add();setTimeout(()=>{try{t(n)}finally{r!==void 0&&this.pendingTasks?.remove(r)}})}}},At=wc;function vs(...e){}function fl(e){let t,n;function r(){e=vs;try{n!==void 0&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(n),t!==void 0&&clearTimeout(t)}catch{}}return t=setTimeout(()=>{e(),r()}),typeof requestAnimationFrame=="function"&&(n=requestAnimationFrame(()=>{e(),r()})),()=>r()}function lg(e){return queueMicrotask(()=>e()),()=>{e=vs}}var pl="isAngularZone",ko=pl+"_ID",TE=0,be=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new At(!1);onMicrotaskEmpty=new At(!1);onStable=new At(!1);onError=new At(!1);constructor(t){let{enableLongStackTrace:n=!1,shouldCoalesceEventChangeDetection:r=!1,shouldCoalesceRunChangeDetection:o=!1,scheduleInRootZone:i=ag}=t;if(typeof Zone>"u")throw new _(908,!1);Zone.assertZonePatched();let s=this;s._nesting=0,s._outer=s._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(s._inner=s._inner.fork(new Zone.TaskTrackingZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(s._inner=s._inner.fork(Zone.longStackTraceZoneSpec)),s.shouldCoalesceEventChangeDetection=!o&&r,s.shouldCoalesceRunChangeDetection=o,s.callbackScheduled=!1,s.scheduleInRootZone=i,AE(s)}static isInAngularZone(){return typeof Zone<"u"&&Zone.current.get(pl)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new _(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new _(909,!1)}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){let i=this._inner,s=i.scheduleEventTask("NgZoneEvent: "+o,t,SE,vs,vs);try{return i.runTask(s,n,r)}finally{i.cancelTask(s)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}},SE={};function hl(e){if(e._nesting==0&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function ME(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){fl(()=>{e.callbackScheduled=!1,xc(e),e.isCheckStableRunning=!0,hl(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),xc(e)}function AE(e){let t=()=>{ME(e)},n=TE++;e._inner=e._inner.fork({name:"angular",properties:{[pl]:!0,[ko]:n,[ko+n]:!0},onInvokeTask:(r,o,i,s,u,a)=>{if(NE(a))return r.invokeTask(i,s,u,a);try{return E0(e),r.invokeTask(i,s,u,a)}finally{(e.shouldCoalesceEventChangeDetection&&s.type==="eventTask"||e.shouldCoalesceRunChangeDetection)&&t(),_0(e)}},onInvoke:(r,o,i,s,u,a,c)=>{try{return E0(e),r.invoke(i,s,u,a,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!kE(a)&&t(),_0(e)}},onHasTask:(r,o,i,s)=>{r.hasTask(i,s),o===i&&(s.change=="microTask"?(e._hasPendingMicrotasks=s.microTask,xc(e),hl(e)):s.change=="macroTask"&&(e.hasPendingMacrotasks=s.macroTask))},onHandleError:(r,o,i,s)=>(r.handleError(i,s),e.runOutsideAngular(()=>e.onError.emit(s)),!1)})}function xc(e){e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0?e.hasPendingMicrotasks=!0:e.hasPendingMicrotasks=!1}function E0(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function _0(e){e._nesting--,hl(e)}var Ro=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new At;onMicrotaskEmpty=new At;onStable=new At;onError=new At;run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}};function NE(e){return dg(e,"__ignore_ng_zone__")}function kE(e){return dg(e,"__scheduler_tick__")}function dg(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var Ve=class{_console=console;handleError(t){this._console.error("ERROR",t)}},Pt=new x("",{factory:()=>{let e=b(be),t=b(Ce),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(Ve),n.handleError(r))})}}}),fg={provide:Ir,useValue:()=>{let e=b(Ve,{optional:!0})},multi:!0};function pn(e,t){let[n,r,o]=Ua(e,t?.equal),i=n,s=i[ne];return i.set=r,i.update=o,i.asReadonly=Go.bind(i),i}function Go(){let e=this[ne];if(e.readonlyFn===void 0){let t=()=>this();t[ne]=e,e.readonlyFn=t}return e.readonlyFn}var Fr=(()=>{class e{view;node;constructor(n,r){this.view=n,this.node=r}static __NG_ELEMENT_ID__=RE}return e})();function RE(){return new Fr(C(),re())}var ft=class{},Wo=new x("",{factory:()=>!0});var gl=new x(""),Wn=(()=>{class e{internalPendingTasks=b(Gn);scheduler=b(ft);errorHandler=b(Pt);add(){let n=this.internalPendingTasks.add();return()=>{this.internalPendingTasks.has(n)&&(this.scheduler.notify(11),this.internalPendingTasks.remove(n))}}run(n){let r=this.add();n().catch(this.errorHandler).finally(r)}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),Vs=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:()=>new Ic})}return e})(),Ic=class{dirtyEffectCount=0;queues=new Map;add(t){this.enqueue(t),this.schedule(t)}schedule(t){t.dirty&&this.dirtyEffectCount++}remove(t){let n=t.zone,r=this.queues.get(n);r.has(t)&&(r.delete(t),t.dirty&&this.dirtyEffectCount--)}enqueue(t){let n=t.zone;this.queues.has(n)||this.queues.set(n,new Set);let r=this.queues.get(n);r.has(t)||r.add(t)}flush(){for(;this.dirtyEffectCount>0;){let t=!1;for(let[n,r]of this.queues)n===null?t||=this.flushQueue(r):t||=n.run(()=>this.flushQueue(r));t||(this.dirtyEffectCount=0)}}flushQueue(t){let n=!1;for(let r of t)r.dirty&&(this.dirtyEffectCount--,n=!0,r.run());return n}},Ds=class{[ne];constructor(t){this[ne]=t}destroy(){this[ne].destroy()}};function Zo(e,t){let n=t?.injector??b(we),r=t?.manualCleanup!==!0?n.get(Oe):null,o,i=n.get(Fr,null,{optional:!0}),s=n.get(ft);return i!==null?(o=PE(i.view,s,e),r instanceof bs&&r._lView===i.view&&(r=null)):o=LE(e,n.get(Vs),s),o.injector=n,r!==null&&(o.onDestroyFns=[r.onDestroy(()=>o.destroy())]),new Ds(o)}var pg=P(S({},qa),{cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=No(!1);try{Ga(this)}finally{No(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=M(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],M(e)}}}),FE=P(S({},pg),{consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(en(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}}),OE=P(S({},pg),{consumerMarkedDirty(){this.view[L]|=8192,zn(this.view),this.notifier.notify(13)},destroy(){if(en(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[un]?.delete(this)}});function PE(e,t,n){let r=Object.create(OE);return r.view=e,r.zone=typeof Zone<"u"?Zone.current:null,r.notifier=t,r.fn=hg(r,n),e[un]??=new Set,e[un].add(r),r.consumerMarkedDirty(r),r}function LE(e,t,n){let r=Object.create(FE);return r.fn=hg(r,e),r.scheduler=t,r.notifier=n,r.zone=typeof Zone<"u"?Zone.current:null,r.scheduler.add(r),r.notifier.notify(12),r}function hg(e,t){return()=>{t(n=>(e.cleanupFns??=[]).push(n))}}function de(e){return za(e)}function si(e){return{toString:e}.toString()}function zE(e){return typeof e=="function"}function Kg(e,t,n,r){t!==null?t.applyValueToInputSignal(t,r):e[n]=r}var Qs=class{previousValue;currentValue;firstChange;constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}},hu=(()=>{let e=()=>Jg;return e.ngInherit=!0,e})();function Jg(e){return e.type.prototype.ngOnChanges&&(e.setInput=GE),qE}function qE(){let e=em(this),t=e?.current;if(t){let n=e.previous;if(n===Ye)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function GE(e,t,n,r,o){let i=this.declaredInputs[r],s=em(e)||WE(e,{previous:Ye,current:null}),u=s.current||(s.current={}),a=s.previous,c=a[i];u[i]=new Qs(c&&c.currentValue,n,a===Ye),Kg(e,t,o,n)}var Xg="__ngSimpleChanges__";function em(e){return e[Xg]||null}function WE(e,t){return e[Xg]=t}var gg=[];var W=function(e,t=null,n){for(let r=0;r=r)break}else t[a]<0&&(e[Bn]+=65536),(u>14>16&&(e[L]&3)===t&&(e[L]+=16384,mg(u,i)):mg(u,i)}var Pr=-1,Yn=class{factory;name;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(t,n,r,o){this.factory=t,this.name=o,this.canSeeViewProviders=n,this.injectImpl=r}};function QE(e){return(e.flags&8)!==0}function KE(e){return(e.flags&16)!==0}function JE(e,t,n){let r=0;for(;rt){s=i-1;break}}}for(;i>16}function Js(e,t){let n=e_(e),r=t;for(;n>0;)r=r[jn],n--;return r}var Il=!0;function Xs(e){let t=Il;return Il=e,t}var t_=256,im=t_-1,sm=5,n_=0,vt={};function r_(e,t,n){let r;typeof n=="string"?r=n.charCodeAt(0)||0:n.hasOwnProperty(On)&&(r=n[On]),r==null&&(r=n[On]=n_++);let o=r&im,i=1<>sm)]|=i}function eu(e,t){let n=um(e,t);if(n!==-1)return n;let r=t[T];r.firstCreatePass&&(e.injectorIndex=t.length,yl(r.data,e),yl(t,null),yl(r.blueprint,null));let o=sd(e,t),i=e.injectorIndex;if(om(o)){let s=Ks(o),u=Js(o,t),a=u[T].data;for(let c=0;c<8;c++)t[i+c]=u[s+c]|a[s+c]}return t[i+8]=o,i}function yl(e,t){e.push(0,0,0,0,0,0,0,0,t)}function um(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function sd(e,t){if(e.parent&&e.parent.injectorIndex!==-1)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;o!==null;){if(r=fm(o),r===null)return Pr;if(n++,o=o[jn],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return Pr}function Tl(e,t,n){r_(e,t,n)}function o_(e,t){if(t==="class")return e.classes;if(t==="style")return e.styles;let n=e.attrs;if(n){let r=n.length,o=0;for(;o>20,d=r?u:u+l,h=o?u+l:c;for(let f=d;f=a&&p.type===n)return f}if(o){let f=s[a];if(f&&Je(f)&&f.type===n)return a}return null}function Ko(e,t,n,r,o){let i=e[n],s=t.data;if(i instanceof Yn){let u=i;if(u.resolving){let f=x0(s[n]);throw Fc(f)}let a=Xs(u.canSeeViewProviders);u.resolving=!0;let c=s[n].type||s[n],l,d=u.injectImpl?_e(u.injectImpl):null,h=cl(e,r,0);try{i=e[n]=u.factory(void 0,o,s,e,r),t.firstCreatePass&&n>=r.directiveStart&&ZE(n,s[n],t)}finally{d!==null&&_e(d),Xs(a),u.resolving=!1,ll()}}return i}function s_(e){if(typeof e=="string")return e.charCodeAt(0)||0;let t=e.hasOwnProperty(On)?e[On]:void 0;return typeof t=="number"?t>=0?t&im:u_:t}function bg(e,t,n){let r=1<>sm)]&r)}function vg(e,t){return!(e&2)&&!(e&1&&t)}var Zn=class{_tNode;_lView;constructor(t,n){this._tNode=t,this._lView=n}get(t,n,r){return lm(this._tNode,this._lView,t,kn(r),n)}};function u_(){return new Zn(re(),C())}function Ur(e){return si(()=>{let t=e.prototype.constructor,n=t[Mo]||Sl(t),r=Object.prototype,o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){let i=o[Mo]||Sl(o);if(i&&i!==n)return i;o=Object.getPrototypeOf(o)}return i=>new i})}function Sl(e){return Tc(e)?()=>{let t=Sl(ue(e));return t&&t()}:sn(e)}function a_(e,t,n,r,o){let i=e,s=t;for(;i!==null&&s!==null&&s[L]&2048&&!kr(s);){let u=dm(i,s,n,r|2,vt);if(u!==vt)return u;let a=i.parent;if(!a){let c=s[Uc];if(c){let l=c.get(n,vt,r);if(l!==vt)return l}a=fm(s),s=s[jn]}i=a}return o}function fm(e){let t=e[T],n=t.type;return n===2?t.declTNode:n===1?e[Ie]:null}function ud(e){return o_(re(),e)}function c_(){return zr(re(),C())}function zr(e,t){return new jt(Ue(e,t))}var jt=(()=>{class e{nativeElement;constructor(n){this.nativeElement=n}static __NG_ELEMENT_ID__=c_}return e})();function pm(e){return e instanceof jt?e.nativeElement:e}function l_(){return this._results[Symbol.iterator]()}var tu=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new le}constructor(t=!1){this._emitDistinctChangesOnly=t}get(t){return this._results[t]}map(t){return this._results.map(t)}filter(t){return this._results.filter(t)}find(t){return this._results.find(t)}reduce(t,n){return this._results.reduce(t,n)}forEach(t){this._results.forEach(t)}some(t){return this._results.some(t)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(t,n){this.dirty=!1;let r=A0(t);(this._changesDetected=!M0(this._results,r,n))&&(this._results=r,this.length=r.length,this.last=r[this.length-1],this.first=r[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(t){this._onDirty=t}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=l_};function hm(e){return(e.flags&128)===128}var ad=(function(e){return e[e.OnPush=0]="OnPush",e[e.Default=1]="Default",e})(ad||{}),gm=new Map,d_=0;function f_(){return d_++}function p_(e){gm.set(e[Ft],e)}function Ml(e){gm.delete(e[Ft])}var Dg="__ngContext__";function jr(e,t){bt(t)?(e[Dg]=t[Ft],p_(t)):e[Dg]=t}function mm(e){return bm(e[Ar])}function ym(e){return bm(e[He])}function bm(e){for(;e!==null&&!Ke(e);)e=e[He];return e}var Al;function cd(e){Al=e}function vm(){if(Al!==void 0)return Al;if(typeof document<"u")return document;throw new _(210,!1)}var gu=new x("",{factory:()=>h_}),h_="ng";var mu=new x(""),Xn=new x("",{providedIn:"platform",factory:()=>"unknown"}),g_=new x(""),yu=new x("",{factory:()=>b(K).body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});var Dm="r";var Em="di";var _m=!1,Cm=new x("",{factory:()=>_m});var wm=new x("");var m_=(e,t,n,r)=>{};function y_(e,t,n,r){m_(e,t,n,r)}function bu(e){return(e.flags&32)===32}var b_=()=>null;function xm(e,t,n=!1){return b_(e,t,n)}function Im(e,t){let n=e.contentQueries;if(n!==null){let r=M(null);try{for(let o=0;oe,createScript:e=>e,createScriptURL:e=>e})}catch{}return Hs}function vu(e){return v_()?.createHTML(e)||e}var $s;function D_(){if($s===void 0&&($s=null,xe.trustedTypes))try{$s=xe.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return $s}function Eg(e){return D_()?.createHTML(e)||e}var Lt=class{changingThisBreaksApplicationSecurity;constructor(t){this.changingThisBreaksApplicationSecurity=t}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Es})`}},kl=class extends Lt{getTypeName(){return"HTML"}},Rl=class extends Lt{getTypeName(){return"Style"}},Fl=class extends Lt{getTypeName(){return"Script"}},Ol=class extends Lt{getTypeName(){return"URL"}},Pl=class extends Lt{getTypeName(){return"ResourceURL"}};function Pe(e){return e instanceof Lt?e.changingThisBreaksApplicationSecurity:e}function Bt(e,t){let n=Tm(e);if(n!=null&&n!==t){if(n==="ResourceURL"&&t==="URL")return!0;throw new Error(`Required a safe ${t}, got a ${n} (see ${Es})`)}return n===t}function Tm(e){return e instanceof Lt&&e.getTypeName()||null}function dd(e){return new kl(e)}function fd(e){return new Rl(e)}function pd(e){return new Fl(e)}function hd(e){return new Ol(e)}function gd(e){return new Pl(e)}function E_(e){let t=new jl(e);return __()?new Ll(t):t}var Ll=class{inertDocumentHelper;constructor(t){this.inertDocumentHelper=t}getInertBodyElement(t){t=""+t;try{let n=new window.DOMParser().parseFromString(vu(t),"text/html").body;return n===null?this.inertDocumentHelper.getInertBodyElement(t):(n.firstChild?.remove(),n)}catch{return null}}},jl=class{defaultDoc;inertDocument;constructor(t){this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert")}getInertBodyElement(t){let n=this.inertDocument.createElement("template");return n.innerHTML=vu(t),n}};function __(){try{return!!new window.DOMParser().parseFromString(vu(""),"text/html")}catch{return!1}}var C_=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function ui(e){return e=String(e),e.match(C_)?e:"unsafe:"+e}function Vt(e){let t={};for(let n of e.split(","))t[n]=!0;return t}function ai(...e){let t={};for(let n of e)for(let r in n)n.hasOwnProperty(r)&&(t[r]=!0);return t}var Sm=Vt("area,br,col,hr,img,wbr"),Mm=Vt("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),Am=Vt("rp,rt"),w_=ai(Am,Mm),x_=ai(Mm,Vt("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),I_=ai(Am,Vt("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),_g=ai(Sm,x_,I_,w_),Nm=Vt("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),T_=Vt("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),S_=Vt("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext"),M_=ai(Nm,T_,S_),A_=Vt("script,style,template"),Bl=class{sanitizedSomething=!1;buf=[];sanitizeChildren(t){let n=t.firstChild,r=!0,o=[];for(;n;){if(n.nodeType===Node.ELEMENT_NODE?r=this.startElement(n):n.nodeType===Node.TEXT_NODE?this.chars(n.nodeValue):this.sanitizedSomething=!0,r&&n.firstChild){o.push(n),n=R_(n);continue}for(;n;){n.nodeType===Node.ELEMENT_NODE&&this.endElement(n);let i=k_(n);if(i){n=i;break}n=o.pop()}}return this.buf.join("")}startElement(t){let n=Cg(t).toLowerCase();if(!_g.hasOwnProperty(n))return this.sanitizedSomething=!0,!A_.hasOwnProperty(n);this.buf.push("<"),this.buf.push(n);let r=t.attributes;for(let o=0;o"),!0}endElement(t){let n=Cg(t).toLowerCase();_g.hasOwnProperty(n)&&!Sm.hasOwnProperty(n)&&(this.buf.push(""))}chars(t){this.buf.push(wg(t))}};function N_(e,t){return(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)!==Node.DOCUMENT_POSITION_CONTAINED_BY}function k_(e){let t=e.nextSibling;if(t&&e!==t.previousSibling)throw km(t);return t}function R_(e){let t=e.firstChild;if(t&&N_(e,t))throw km(t);return t}function Cg(e){let t=e.nodeName;return typeof t=="string"?t:"FORM"}function km(e){return new Error(`Failed to sanitize html because the element is clobbered: ${e.outerHTML}`)}var F_=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,O_=/([^\#-~ |!])/g;function wg(e){return e.replace(/&/g,"&").replace(F_,function(t){let n=t.charCodeAt(0),r=t.charCodeAt(1);return"&#"+((n-55296)*1024+(r-56320)+65536)+";"}).replace(O_,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(//g,">")}var Us;function Du(e,t){let n=null;try{Us=Us||E_(e);let r=t?String(t):"";n=Us.getInertBodyElement(r);let o=5,i=r;do{if(o===0)throw new Error("Failed to sanitize html because the input is unstable");o--,r=i,i=n.innerHTML,n=Us.getInertBodyElement(r)}while(r!==i);let u=new Bl().sanitizeChildren(xg(n)||n);return vu(u)}finally{if(n){let r=xg(n)||n;for(;r.firstChild;)r.firstChild.remove()}}}function xg(e){return"content"in e&&P_(e)?e.content:null}function P_(e){return e.nodeType===Node.ELEMENT_NODE&&e.nodeName==="TEMPLATE"}var L_=/^>|^->||--!>|)/g,B_="\u200B$1\u200B";function V_(e){return e.replace(L_,t=>t.replace(j_,B_))}function H_(e,t){return e.createText(t)}function $_(e,t,n){e.setValue(t,n)}function U_(e,t){return e.createComment(V_(t))}function Rm(e,t,n){return e.createElement(t,n)}function nu(e,t,n,r,o){e.insertBefore(t,n,r,o)}function Fm(e,t,n){e.appendChild(t,n)}function Ig(e,t,n,r,o){r!==null?nu(e,t,n,r,o):Fm(e,t,n)}function Om(e,t,n,r){e.removeChild(null,t,n,r)}function z_(e,t,n){e.setAttribute(t,"style",n)}function q_(e,t,n){n===""?e.removeAttribute(t,"class"):e.setAttribute(t,"class",n)}function Pm(e,t,n){let{mergedAttrs:r,classes:o,styles:i}=n;r!==null&&JE(e,t,r),o!==null&&q_(e,t,o),i!==null&&z_(e,t,i)}var Le=(function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e})(Le||{});function md(e){let t=Lm();return t?Eg(t.sanitize(Le.HTML,e)||""):Bt(e,"HTML")?Eg(Pe(e)):Du(vm(),Ne(e))}function G_(e){let t=Lm();return t?t.sanitize(Le.URL,e)||"":Bt(e,"URL")?Pe(e):ui(Ne(e))}function Lm(){let e=C();return e&&e[mt].sanitizer}function W_(e){return e.ownerDocument.defaultView}function Z_(e){return e.ownerDocument}function jm(e){return e instanceof Function?e():e}function Y_(e,t,n){let r=e.length;for(;;){let o=e.indexOf(t,n);if(o===-1)return o;if(o===0||e.charCodeAt(o-1)<=32){let i=t.length;if(o+i===r||e.charCodeAt(o+i)<=32)return o}n=o+1}}var Bm="ng-template";function Q_(e,t,n,r){let o=0;if(r){for(;o-1){let i;for(;++oi?d="":d=o[l+1].toLowerCase(),r&2&&c!==d){if(et(r))return!1;s=!0}}}}return et(r)||s}function et(e){return(e&1)===0}function X_(e,t,n,r){if(t===null)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+u+'"':"")+"]"}else r&8?o+="."+s:r&4&&(o+=" "+s);else o!==""&&!et(s)&&(t+=Tg(i,o),o=""),r=s,i=i||!et(r);n++}return o!==""&&(t+=Tg(i,o)),t}function iC(e){return e.map(oC).join(",")}function sC(e){let t=[],n=[],r=1,o=2;for(;r{class e{impl=null;execute(){this.impl?.execute()}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),_d=[0,1,2,3],Cd=(()=>{class e{ngZone=b(be);scheduler=b(ft);errorHandler=b(Ve,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){b(Dt,{optional:!0})}execute(){let n=this.sequences.size>0;n&&W(q.AfterRenderHooksStart),this.executing=!0;for(let r of _d)for(let o of this.sequences)if(!(o.erroredOrDestroyed||!o.hooks[r]))try{o.pipelinedValue=this.ngZone.runOutsideAngular(()=>this.maybeTrace(()=>{let i=o.hooks[r];return i(o.pipelinedValue)},o.snapshot))}catch(i){o.erroredOrDestroyed=!0,this.errorHandler?.handleError(i)}this.executing=!1;for(let r of this.sequences)r.afterRun(),r.once&&(this.sequences.delete(r),r.destroy());for(let r of this.deferredRegistrations)this.sequences.add(r);this.deferredRegistrations.size>0&&this.scheduler.notify(7),this.deferredRegistrations.clear(),n&&W(q.AfterRenderHooksEnd)}register(n){let{view:r}=n;r!==void 0?((r[Vn]??=[]).push(n),zn(r),r[L]|=8192):this.executing?this.deferredRegistrations.add(n):this.addSequence(n)}addSequence(n){this.sequences.add(n),this.scheduler.notify(7)}unregister(n){this.executing&&this.sequences.has(n)?(n.erroredOrDestroyed=!0,n.pipelinedValue=void 0,n.once=!0):(this.sequences.delete(n),this.deferredRegistrations.delete(n))}maybeTrace(n,r){return r?r.run(_u.AFTER_NEXT_RENDER,n):n()}static \u0275prov=I({token:e,providedIn:"root",factory:()=>new e})}return e})(),Xo=class{impl;hooks;view;once;snapshot;erroredOrDestroyed=!1;pipelinedValue=void 0;unregisterOnDestroy;constructor(t,n,r,o,i,s=null){this.impl=t,this.hooks=n,this.view=r,this.once=o,this.snapshot=s,this.unregisterOnDestroy=i?.onDestroy(()=>this.destroy())}afterRun(){this.erroredOrDestroyed=!1,this.pipelinedValue=void 0,this.snapshot?.dispose(),this.snapshot=null}destroy(){this.impl.unregister(this),this.unregisterOnDestroy?.();let t=this.view?.[Vn];t&&(this.view[Vn]=t.filter(n=>n!==this))}};function dC(e,t){let n=t?.injector??b(we);return Ht("NgAfterNextRender"),pC(e,n,t,!0)}function fC(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function pC(e,t,n,r){let o=t.get(Cu);o.impl??=t.get(Cd);let i=t.get(Dt,null,{optional:!0}),s=n?.manualCleanup!==!0?t.get(Oe):null,u=t.get(Fr,null,{optional:!0}),a=new Xo(o.impl,fC(e),u?.view,r,s,i?.snapshot(null));return o.impl.register(a),a}var zm=new x("",{factory:()=>({queue:new Set,isScheduled:!1,scheduler:null,injector:b(Ce)})});function qm(e,t,n){let r=e.get(zm);if(Array.isArray(t))for(let o of t)r.queue.add(o),n?.detachedLeaveAnimationFns?.push(o);else r.queue.add(t),n?.detachedLeaveAnimationFns?.push(t);r.scheduler&&r.scheduler(e)}function hC(e,t){let n=e.get(zm);if(t.detachedLeaveAnimationFns){for(let r of t.detachedLeaveAnimationFns)n.queue.delete(r);t.detachedLeaveAnimationFns=void 0}}function gC(e,t){for(let[n,r]of t)qm(e,r.animateFns)}function Mg(e,t,n,r){let o=e?.[Hn]?.enter;t!==null&&o&&o.has(n.index)&&gC(r,o)}function Or(e,t,n,r,o,i,s,u){if(o!=null){let a,c=!1;Ke(o)?a=o:bt(o)&&(c=!0,o=o[Qe]);let l=$e(o);e===0&&r!==null?(Mg(u,r,i,n),s==null?Fm(t,r,l):nu(t,r,l,s||null,!0)):e===1&&r!==null?(Mg(u,r,i,n),nu(t,r,l,s||null,!0)):e===2?Ag(u,i,n,d=>{Om(t,l,c,d)}):e===3&&Ag(u,i,n,()=>{t.destroyNode(l)}),a!=null&&IC(t,e,n,a,i,r,s)}}function mC(e,t){Gm(e,t),t[Qe]=null,t[Ie]=null}function yC(e,t,n,r,o,i){r[Qe]=o,r[Ie]=t,xu(e,r,n,1,o,i)}function Gm(e,t){t[mt].changeDetectionScheduler?.notify(9),xu(e,t,t[Z],2,null,null)}function bC(e){let t=e[Ar];if(!t)return bl(e[T],e);for(;t;){let n=null;if(bt(t))n=t[Ar];else{let r=t[te];r&&(n=r)}if(!n){for(;t&&!t[He]&&t!==e;)bt(t)&&bl(t[T],t),t=t[ae];t===null&&(t=e),bt(t)&&bl(t[T],t),n=t&&t[He]}t=n}}function wd(e,t){let n=e[$n],r=n.indexOf(t);n.splice(r,1)}function wu(e,t){if(Un(t))return;let n=t[Z];n.destroyNode&&xu(e,t,n,3,null,null),bC(t)}function bl(e,t){if(Un(t))return;let n=M(null);try{t[L]&=-129,t[L]|=256,t[ke]&&en(t[ke]),EC(e,t),DC(e,t),t[T].type===1&&t[Z].destroy();let r=t[cn];if(r!==null&&Ke(t[ae])){r!==t[ae]&&wd(r,t);let o=t[yt];o!==null&&o.detachView(e)}Ml(t)}finally{M(n)}}function Ag(e,t,n,r){let o=e?.[Hn];if(o==null||o.leave==null||!o.leave.has(t.index))return r(!1);e&&Qn.add(e[Ft]),qm(n,()=>{if(o.leave&&o.leave.has(t.index)){let s=o.leave.get(t.index),u=[];if(s){for(let a=0;a{e[Hn].running=void 0,Qn.delete(e[Ft]),t(!0)});return}t(!1)}function DC(e,t){let n=e.cleanup,r=t[Mr];if(n!==null)for(let s=0;s=0?r[u]():r[-u].unsubscribe(),s+=2}else{let u=r[n[s+1]];n[s].call(u)}r!==null&&(t[Mr]=null);let o=t[Nt];if(o!==null){t[Nt]=null;for(let s=0;sQ&&Um(e,t,Q,!1);let u=s?q.TemplateUpdateStart:q.TemplateCreateStart;W(u,o,n),n(r,o)}finally{dn(i);let u=s?q.TemplateUpdateEnd:q.TemplateCreateEnd;W(u,o,n)}}function Iu(e,t,n){kC(e,t,n),(n.flags&64)===64&&RC(e,t,n)}function ci(e,t,n=Ue){let r=t.localNames;if(r!==null){let o=t.index+1;for(let i=0;inull;function NC(e){return e==="class"?"className":e==="for"?"htmlFor":e==="formaction"?"formAction":e==="innerHtml"?"innerHTML":e==="readonly"?"readOnly":e==="tabindex"?"tabIndex":e}function Jm(e,t,n,r,o,i){let s=t[T];if(Tu(e,s,t,n,r)){Ot(e)&&ey(t,e.index);return}e.type&3&&(n=NC(n)),Xm(e,t,n,r,o,i)}function Xm(e,t,n,r,o,i){if(e.type&3){let s=Ue(e,t);r=i!=null?i(r,e.value||"",n):r,o.setProperty(s,n,r)}else e.type&12}function ey(e,t){let n=Re(t,e);n[L]&16||(n[L]|=64)}function kC(e,t,n){let r=n.directiveStart,o=n.directiveEnd;Ot(n)&&cC(t,n,e.data[r+n.componentOffset]),e.firstCreatePass||eu(n,t);let i=n.initialInputs;for(let s=r;s=u&&f<=a){let p=t.data[f],g=d[h+1];Jo(p,n[f],g,i),c=!0}else if(f>a)break}}return s!==null&&r.inputs.hasOwnProperty(o)&&(Jo(r,n[s],o,i),c=!0),c}function BC(e,t){let n=Re(t,e),r=n[T];VC(r,n);let o=n[Qe];o!==null&&n[Ln]===null&&(n[Ln]=xm(o,n[Rt])),W(q.ComponentStart);try{Ad(r,n,n[ee])}finally{W(q.ComponentEnd,n[ee])}}function VC(e,t){for(let n=t.length;n{zn(e.lView)},consumerOnSignalRead(){this.lView[ke]=this}});function GC(e){let t=e[ke]??Object.create(WC);return t.lView=e,t}var WC=P(S({},Kt),{consumerIsAlwaysLive:!0,kind:"template",consumerMarkedDirty:e=>{let t=an(e.lView);for(;t&&!iy(t[T]);)t=an(t);t&&Yc(t)},consumerOnSignalRead(){this.lView[ke]=this}});function iy(e){return e.type!==2}function sy(e){if(e[un]===null)return;let t=!0;for(;t;){let n=!1;for(let r of e[un])r.dirty&&(n=!0,r.zone===null||Zone.current===r.zone?r.run():r.zone.run(()=>r.run()));t=n&&!!(e[L]&8192)}}var ZC=100;function uy(e,t=0){let r=e[mt].rendererFactory,o=!1;o||r.begin?.();try{YC(e,t)}finally{o||r.end?.()}}function YC(e,t){let n=ul();try{No(!0),Hl(e,t);let r=0;for(;$o(e);){if(r===ZC)throw new _(103,!1);r++,Hl(e,1)}}finally{No(n)}}function QC(e,t,n,r){if(Un(t))return;let o=t[L],i=!1,s=!1;Ls(t);let u=!0,a=null,c=null;i||(iy(e)?(c=$C(t),a=It(c)):ji()===null?(u=!1,c=GC(t),a=It(c)):t[ke]&&(en(t[ke]),t[ke]=null));try{Zc(t),Y0(e.bindingStartIndex),n!==null&&Km(e,t,n,2,r);let l=(o&3)===3;if(!i)if(l){let f=e.preOrderCheckHooks;f!==null&&qs(t,f,null)}else{let f=e.preOrderHooks;f!==null&&Gs(t,f,0,null),ml(t,0)}if(s||KC(t),sy(t),ay(t,0),e.contentQueries!==null&&Im(e,t),!i)if(l){let f=e.contentCheckHooks;f!==null&&qs(t,f)}else{let f=e.contentHooks;f!==null&&Gs(t,f,1),ml(t,1)}XC(e,t);let d=e.components;d!==null&&ly(t,d,0);let h=e.viewQuery;if(h!==null&&Nl(2,h,r),!i)if(l){let f=e.viewCheckHooks;f!==null&&qs(t,f)}else{let f=e.viewHooks;f!==null&&Gs(t,f,2),ml(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[Ns]){for(let f of t[Ns])f();t[Ns]=null}i||(ry(t),t[L]&=-73)}catch(l){throw i||zn(t),l}finally{c!==null&&(Xt(c,a),u&&zC(c)),js()}}function ay(e,t){for(let n=mm(e);n!==null;n=ym(n))for(let r=te;r0&&(e[n-1][He]=r[He]);let i=Oo(e,te+t);mC(r[T],r);let s=i[yt];s!==null&&s.detachView(i[T]),r[ae]=null,r[He]=null,r[L]&=-129}return r}function ew(e,t,n,r){let o=te+r,i=n.length;r>0&&(n[o-1][He]=t),r-1&&(ti(t,r),Oo(n,r))}this._attachedToViewContainer=!1}wu(this._lView[T],this._lView)}onDestroy(t){Qc(this._lView,t)}markForCheck(){Su(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[L]&=-129}reattach(){Rs(this._lView),this._lView[L]|=128}detectChanges(){this._lView[L]|=1024,uy(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new _(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let t=kr(this._lView),n=this._lView[cn];n!==null&&!t&&wd(n,this._lView),Gm(this._lView[T],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new _(902,!1);this._appRef=t;let n=kr(this._lView),r=this._lView[cn];r!==null&&!n&&hy(r,this._lView),Rs(this._lView)}};var gn=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=tw;constructor(n,r,o){this._declarationLView=n,this._declarationTContainer=r,this.elementRef=o}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(n,r){return this.createEmbeddedViewImpl(n,r)}createEmbeddedViewImpl(n,r,o){let i=li(this._declarationLView,this._declarationTContainer,n,{embeddedViewInjector:r,dehydratedView:o});return new hn(i)}}return e})();function tw(){return Mu(re(),C())}function Mu(e,t){return e.type&4?new gn(t,e,zr(e,t)):null}function er(e,t,n,r,o){let i=e.data[t];if(i===null)i=nw(e,t,n,r,o),Q0()&&(i.flags|=32);else if(i.type&64){i.type=n,i.value=r,i.attrs=o;let s=Z0();i.injectorIndex=s===null?-1:s.injectorIndex}return qn(i,!0),i}function nw(e,t,n,r,o){let i=rl(),s=ol(),u=s?i:i&&i.parent,a=e.data[t]=ow(e,u,n,t,r,o);return rw(e,a,i,s),a}function rw(e,t,n,r){e.firstChild===null&&(e.firstChild=t),n!==null&&(r?n.child==null&&t.parent!==null&&(n.child=t):n.next===null&&(n.next=t,t.prev=n))}function ow(e,t,n,r,o,i){let s=t?t.injectorIndex:-1,u=0;return el()&&(u|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:s,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,fieldIndex:-1,customControlIndex:-1,propertyBindings:null,flags:u,providerIndexes:0,value:o,attrs:i,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}function iw(e){let t=e[zc]??[],r=e[ae][Z],o=[];for(let i of t)i.data[Em]!==void 0?o.push(i):sw(i,r);e[zc]=o}function sw(e,t){let n=0,r=e.firstChild;if(r){let o=e.data[Dm];for(;nnull,aw=()=>null;function ru(e,t){return uw(e,t)}function gy(e,t,n){return aw(e,t,n)}var my=class{},Au=class{},$l=class{resolveComponentFactory(t){throw new _(917,!1)}},fi=class{static NULL=new $l},Kn=class{},pi=(()=>{class e{destroyNode=null;static __NG_ELEMENT_ID__=()=>cw()}return e})();function cw(){let e=C(),t=re(),n=Re(t.index,e);return(bt(n)?n:e)[Z]}var yy=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:()=>null})}return e})();var Zs={},Ul=class{injector;parentInjector;constructor(t,n){this.injector=t,this.parentInjector=n}get(t,n,r){let o=this.injector.get(t,Zs,r);return o!==Zs||n===Zs?o:this.parentInjector.get(t,n,r)}};function ou(e,t,n){let r=n?e.styles:null,o=n?e.classes:null,i=0;if(t!==null)for(let s=0;s0&&(n.directiveToIndex=new Map);for(let h=0;h0;){let n=e[--t];if(typeof n=="number"&&n<0)return n}return 0}function bw(e,t,n){if(n){if(t.exportAs)for(let r=0;rr($e(g[e.index])):e.index;Cy(p,t,n,i,u,f,!1)}}return c}function Cw(e){return e.startsWith("animation")||e.startsWith("transition")}function ww(e,t,n,r){let o=e.cleanup;if(o!=null)for(let i=0;ia?u[a]:null}typeof s=="string"&&(i+=2)}return null}function Cy(e,t,n,r,o,i,s){let u=t.firstCreatePass?Jc(t):null,a=Kc(n),c=a.length;a.push(o,i),u&&u.push(r,e,c,(c+1)*(s?-1:1))}function Pg(e,t,n,r,o,i){let s=t[n],u=t[T],c=u.data[n].outputs[r],d=s[c].subscribe(i);Cy(e.index,u,t,o,i,d,!0)}var ni=Symbol("BINDING"),xw={kind:"input",requiredVars:1},Iw={kind:"field",requiredVars:2};function Lg(e,t,n){let r=C(),o=Xe();if(Te(r,o,n)){let i=r[T],s=fn(),u=Re(s.index,r);Su(u,1);let a=i.directiveRegistry[e],c=jC(s,i,r,a,t,n)}}function jg(e,t){return C()[t.directiveStart+e.targetIdx][Ey]}function U(e,t){if(e==="formField"){let r={[ni]:Iw,create:()=>{jg(r,re())?.create()},update:()=>{Lg(r.targetIdx,e,t()),jg(r,fn())?.update()}};return r}let n={[ni]:xw,update:()=>Lg(n.targetIdx,e,t())};return n}var su=class extends fi{ngModule;constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){let n=gt(t);return new mn(n,this.ngModule)}};function Tw(e){return Object.keys(e).map(t=>{let[n,r,o]=e[t],i={propName:n,templateName:t,isSignal:(r&Eu.SignalBased)!==0};return o&&(i.transform=o),i})}function Sw(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function Mw(e,t,n){let r=t instanceof Ce?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new Ul(n,r):n}function Aw(e){let t=e.get(Kn,null);if(t===null)throw new _(407,!1);let n=e.get(yy,null),r=e.get(ft,null);return{rendererFactory:t,sanitizer:n,changeDetectionScheduler:r,ngReflect:!1}}function Nw(e,t){let n=wy(e);return Rm(t,n,n==="svg"?Gc:n==="math"?j0:null)}function wy(e){return(e.selectors[0][0]||"div").toLowerCase()}var mn=class extends Au{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=Tw(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=Sw(this.componentDef.outputs),this.cachedOutputs}constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=iC(t.selectors),this.ngContentSelectors=t.ngContentSelectors??[],this.isBoundToModule=!!n}create(t,n,r,o,i,s){W(q.DynamicComponentStart);let u=M(null);try{let a=this.componentDef,c=kw(r,a,s,i),l=Mw(a,o||this.ngModule,t),d=Aw(l),h=d.rendererFactory.createRenderer(null,a),f=r?SC(h,r,a.encapsulation,l):Nw(a,h),p=s?.some(Bg)||i?.some(y=>typeof y!="function"&&y.bindings.some(Bg)),g=vd(null,c,null,512|Hm(a),null,null,d,h,l,null,xm(f,l,!0));g[Q]=f,Ls(g);let m=null;try{let y=Nd(Q,g,2,"#host",()=>c.directiveRegistry,!0,0);Pm(h,f,y),jr(f,g),Iu(c,g,y),ld(c,y,g),kd(c,y),n!==void 0&&Fw(y,this.ngContentSelectors,n),m=Re(y.index,g),g[ee]=m[ee],Ad(c,g,null)}catch(y){throw m!==null&&Ml(m),Ml(g),y}finally{W(q.DynamicComponentEnd),js()}return new uu(this.componentType,g,!!p)}finally{M(u)}}};function kw(e,t,n,r){let o=e?["ng-version","21.1.0"]:sC(t.selectors[0]),i=null,s=null,u=0;if(n)for(let l of n)u+=l[ni].requiredVars,l.create&&(l.targetIdx=0,(i??=[]).push(l)),l.update&&(l.targetIdx=0,(s??=[]).push(l));if(r)for(let l=0;l{if(n&1&&e)for(let r of e)r.create();if(n&2&&t)for(let r of t)r.update()}}function Bg(e){let t=e[ni].kind;return t==="input"||t==="twoWay"}var uu=class extends my{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(t,n,r){super(),this._rootLView=n,this._hasInputBindings=r,this._tNode=Bo(n[T],Q),this.location=zr(this._tNode,n),this.instance=Re(this._tNode.index,n)[ee],this.hostView=this.changeDetectorRef=new hn(n,void 0),this.componentType=t}setInput(t,n){this._hasInputBindings;let r=this._tNode;if(this.previousInputValues??=new Map,this.previousInputValues.has(t)&&Object.is(this.previousInputValues.get(t),n))return;let o=this._rootLView,i=Tu(r,o[T],o,t,n);this.previousInputValues.set(t,n);let s=Re(r.index,o);Su(s,1)}get injector(){return new Zn(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(t){this.hostView.onDestroy(t)}};function Fw(e,t,n){let r=e.projection=[];for(let o=0;o{class e{static __NG_ELEMENT_ID__=Ow}return e})();function Ow(){let e=re();return Iy(e,C())}var Pw=rt,xy=class extends Pw{_lContainer;_hostTNode;_hostLView;constructor(t,n,r){super(),this._lContainer=t,this._hostTNode=n,this._hostLView=r}get element(){return zr(this._hostTNode,this._hostLView)}get injector(){return new Zn(this._hostTNode,this._hostLView)}get parentInjector(){let t=sd(this._hostTNode,this._hostLView);if(om(t)){let n=Js(t,this._hostLView),r=Ks(t),o=n[T].data[r+8];return new Zn(o,n)}else return new Zn(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(t){let n=Vg(this._lContainer);return n!==null&&n[t]||null}get length(){return this._lContainer.length-te}createEmbeddedView(t,n,r){let o,i;typeof r=="number"?o=r:r!=null&&(o=r.index,i=r.injector);let s=ru(this._lContainer,t.ssrId),u=t.createEmbeddedViewImpl(n||{},i,s);return this.insertImpl(u,o,Br(this._hostTNode,s)),u}createComponent(t,n,r,o,i,s,u){let a=t&&!zE(t),c;if(a)c=n;else{let m=n||{};c=m.index,r=m.injector,o=m.projectableNodes,i=m.environmentInjector||m.ngModuleRef,s=m.directives,u=m.bindings}let l=a?t:new mn(gt(t)),d=r||this.parentInjector;if(!i&&l.ngModule==null){let y=(a?d:this.parentInjector).get(Ce,null);y&&(i=y)}let h=gt(l.componentType??{}),f=ru(this._lContainer,h?.id??null),p=f?.firstChild??null,g=l.create(d,o,p,i,s,u);return this.insertImpl(g.hostView,c,Br(this._hostTNode,f)),g}insert(t,n){return this.insertImpl(t,n,!0)}insertImpl(t,n,r){let o=t._lView;if(V0(o)){let u=this.indexOf(t);if(u!==-1)this.detach(u);else{let a=o[ae],c=new xy(a,a[Ie],a[ae]);c.detach(c.indexOf(t))}}let i=this._adjustIndex(n),s=this._lContainer;return di(s,o,i,r),t.attachToViewContainerRef(),Pc(vl(s),i,t),t}move(t,n){return this.insert(t,n)}indexOf(t){let n=Vg(this._lContainer);return n!==null?n.indexOf(t):-1}remove(t){let n=this._adjustIndex(t,-1),r=ti(this._lContainer,n);r&&(Oo(vl(this._lContainer),n),wu(r[T],r))}detach(t){let n=this._adjustIndex(t,-1),r=ti(this._lContainer,n);return r&&Oo(vl(this._lContainer),n)!=null?new hn(r):null}_adjustIndex(t,n=0){return t??this.length+n}};function Vg(e){return e[jo]}function vl(e){return e[jo]||(e[jo]=[])}function Iy(e,t){let n,r=t[e.index];return Ke(r)?n=r:(n=dy(r,t,null,e),t[e.index]=n,Dd(t,n)),jw(n,t,e,r),new xy(n,e,t)}function Lw(e,t){let n=e[Z],r=n.createComment(""),o=Ue(t,e),i=n.parentNode(o);return nu(n,i,r,n.nextSibling(o),!1),r}var jw=Hw,Bw=()=>!1;function Vw(e,t,n){return Bw(e,t,n)}function Hw(e,t,n,r){if(e[ln])return;let o;n.type&8?o=$e(r):o=Lw(t,n),e[ln]=o}var zl=class e{queryList;matches=null;constructor(t){this.queryList=t}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},ql=class e{queries;constructor(t=[]){this.queries=t}createEmbeddedView(t){let n=t.queries;if(n!==null){let r=t.contentQueries!==null?t.contentQueries[0]:n.length,o=[];for(let i=0;i0)r.push(s[u/2]);else{let c=i[u+1],l=t[-a];for(let d=te;dt.trim())}function Ny(e,t,n){e.queries===null&&(e.queries=new Gl),e.queries.track(new Wl(t,n))}function Ww(e,t){let n=e.contentQueries||(e.contentQueries=[]),r=n.length?n[n.length-1]:-1;t!==r&&n.push(e.queries.length-1,t)}function Pd(e,t){return e.queries.getByIndex(t)}function ky(e,t){let n=e[T],r=Pd(n,t);return r.crossesNgTemplate?Zl(n,e,t,[]):Ty(n,e,r,t)}function Ld(e,t,n){let r,o=vo(()=>{r._dirtyCounter();let i=Zw(r,e);if(t&&i===void 0)throw new _(-951,!1);return i});return r=o[ne],r._dirtyCounter=pn(0),r._flatValue=void 0,o}function jd(e){return Ld(!0,!1,e)}function Bd(e){return Ld(!0,!0,e)}function Ry(e){return Ld(!1,!1,e)}function Fy(e,t){let n=e[ne];n._lView=C(),n._queryIndex=t,n._queryList=Od(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(r=>r+1))}function Zw(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[L]&4)return t?void 0:ye;let o=Od(n,r),i=ky(n,r);return o.reset(i,pm),t?o.first:o._changesDetected||e._flatValue===void 0?e._flatValue=o.toArray():e._flatValue}var yn=class{},Oy=class{};function Vd(e,t){return new ri(e,t??null,[])}var ri=class extends yn{ngModuleType;_parent;_bootstrapComponents=[];_r3Injector;instance;destroyCbs=[];componentFactoryResolver=new su(this);constructor(t,n,r,o=!0){super(),this.ngModuleType=t,this._parent=n;let i=Rc(t);this._bootstrapComponents=jm(i.bootstrap),this._r3Injector=dl(t,n,[{provide:yn,useValue:this},{provide:fi,useValue:this.componentFactoryResolver},...r],kt(t),new Set(["environment"])),o&&this.resolveInjectorInitializers()}resolveInjectorInitializers(){this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(this.ngModuleType)}get injector(){return this._r3Injector}destroy(){let t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}},cu=class extends Oy{moduleType;constructor(t){super(),this.moduleType=t}create(t){return new ri(this.moduleType,t,[])}};var oi=class extends yn{injector;componentFactoryResolver=new su(this);instance=null;constructor(t){super();let n=new Fn([...t.providers,{provide:yn,useValue:this},{provide:fi,useValue:this.componentFactoryResolver}],t.parent||Tr(),t.debugName,new Set(["environment"]));this.injector=n,t.runEnvironmentInitializers&&n.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(t){this.injector.onDestroy(t)}};function Py(e,t,n=null){return new oi({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var Yw=(()=>{class e{_injector;cachedInjectors=new Map;constructor(n){this._injector=n}getOrCreateStandaloneInjector(n){if(!n.standalone)return null;if(!this.cachedInjectors.has(n)){let r=Bc(!1,n.type),o=r.length>0?Py([r],this._injector,""):null;this.cachedInjectors.set(n,o)}return this.cachedInjectors.get(n)}ngOnDestroy(){try{for(let n of this.cachedInjectors.values())n!==null&&n.destroy()}finally{this.cachedInjectors.clear()}}static \u0275prov=I({token:e,providedIn:"environment",factory:()=>new e(A(Ce))})}return e})();function Gr(e){return si(()=>{let t=Ly(e),n=P(S({},t),{decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===ad.OnPush,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?o=>o.get(Yw).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||tt.Emulated,styles:e.styles||ye,_:null,schemas:e.schemas||null,tView:null,id:""});t.standalone&&Ht("NgStandalone"),jy(n);let r=e.dependencies;return n.directiveDefs=Hg(r,Qw),n.pipeDefs=Hg(r,w0),n.id=Xw(n),n})}function Qw(e){return gt(e)||xs(e)}function $t(e){return si(()=>({type:e.type,bootstrap:e.bootstrap||ye,declarations:e.declarations||ye,imports:e.imports||ye,exports:e.exports||ye,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function Kw(e,t){if(e==null)return Ye;let n={};for(let r in e)if(e.hasOwnProperty(r)){let o=e[r],i,s,u,a;Array.isArray(o)?(u=o[0],i=o[1],s=o[2]??i,a=o[3]||null):(i=o,s=o,u=Eu.None,a=null),n[i]=[r,u,a],t[i]=s}return n}function Jw(e){if(e==null)return Ye;let t={};for(let n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function ot(e){return si(()=>{let t=Ly(e);return jy(t),t})}function ku(e){return{type:e.type,name:e.name,factory:null,pure:e.pure!==!1,standalone:e.standalone??!0,onDestroy:e.type.prototype.ngOnDestroy||null}}function Ly(e){let t={};return{type:e.type,providersResolver:null,viewProvidersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:t,inputConfig:e.inputs||Ye,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||ye,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,inputs:Kw(e.inputs,t),outputs:Jw(e.outputs),debugInfo:null}}function jy(e){e.features?.forEach(t=>t(e))}function Hg(e,t){return e?()=>{let n=typeof e=="function"?e():e,r=[];for(let o of n){let i=t(o);i!==null&&r.push(i)}return r}:null}function Xw(e){let t=0,n=typeof e.consts=="function"?"":e.consts,r=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,n,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery];for(let i of r.join("|"))t=Math.imul(31,t)+i.charCodeAt(0)<<0;return t+=2147483648,"c"+t}function ex(e){let t=n=>{let r=Array.isArray(e);n.hostDirectives===null?(n.resolveHostDirectives=tx,n.hostDirectives=r?e.map(Yl):[e]):r?n.hostDirectives.unshift(...e.map(Yl)):n.hostDirectives.unshift(e)};return t.ngInherit=!0,t}function tx(e){let t=[],n=!1,r=null,o=null;for(let i=0;i=0;r--){let o=e[r];o.hostVars=t+=o.hostVars,o.hostAttrs=Lr(o.hostAttrs,n=Lr(n,o.hostAttrs))}}function Dl(e){return e===Ye?{}:e===ye?[]:e}function sx(e,t){let n=e.viewQuery;n?e.viewQuery=(r,o)=>{t(r,o),n(r,o)}:e.viewQuery=t}function ux(e,t){let n=e.contentQueries;n?e.contentQueries=(r,o,i)=>{t(r,o,i),n(r,o,i)}:e.contentQueries=t}function ax(e,t){let n=e.hostBindings;n?e.hostBindings=(r,o)=>{t(r,o),n(r,o)}:e.hostBindings=t}function Vy(e,t,n,r,o,i,s,u){if(n.firstCreatePass){e.mergedAttrs=Lr(e.mergedAttrs,e.attrs);let l=e.tView=bd(2,e,o,i,s,n.directiveRegistry,n.pipeRegistry,null,n.schemas,n.consts,null);n.queries!==null&&(n.queries.template(n,e),l.queries=n.queries.embeddedTView(e))}u&&(e.flags|=u),qn(e,!1);let a=lx(n,t,e,r);Bs()&&xd(n,t,a,e),jr(a,t);let c=dy(a,t,a,e);t[r+Q]=c,Dd(t,c),Vw(c,e,t)}function cx(e,t,n,r,o,i,s,u,a,c,l){let d=n+Q,h;return t.firstCreatePass?(h=er(t,d,4,s||null,u||null),Fs()&&by(t,e,h,Fe(t.consts,c),Td),tm(t,h)):h=t.data[d],Vy(h,e,t,n,r,o,i,a),Nr(h)&&Iu(t,e,h),c!=null&&ci(e,h,l),h}function Vr(e,t,n,r,o,i,s,u,a,c,l){let d=n+Q,h;if(t.firstCreatePass){if(h=er(t,d,4,s||null,u||null),c!=null){let f=Fe(t.consts,c);h.localNames=[];for(let p=0;p{class e{log(n){console.log(n)}warn(n){console.warn(n)}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();function zy(e){return typeof e=="function"&&e[ne]!==void 0}function Hd(e){return zy(e)&&typeof e.set=="function"}var Ru=new x(""),Fu=new x(""),hi=(()=>{class e{_ngZone;registry;_isZoneStable=!0;_callbacks=[];_taskTrackingZone=null;_destroyRef;constructor(n,r,o){this._ngZone=n,this.registry=r,As()&&(this._destroyRef=b(Oe,{optional:!0})??void 0),$d||(Gy(o),o.addToWindow(r)),this._watchAngularEvents(),n.run(()=>{this._taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){let n=this._ngZone.onUnstable.subscribe({next:()=>{this._isZoneStable=!1}}),r=this._ngZone.runOutsideAngular(()=>this._ngZone.onStable.subscribe({next:()=>{be.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}}));this._destroyRef?.onDestroy(()=>{n.unsubscribe(),r.unsubscribe()})}isStable(){return this._isZoneStable&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;this._callbacks.length!==0;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb()}});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>r.updateCb&&r.updateCb(n)?(clearTimeout(r.timeoutId),!1):!0)}}getPendingTasks(){return this._taskTrackingZone?this._taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==i),n()},r)),this._callbacks.push({doneCb:n,timeoutId:i,updateCb:o})}whenStable(n,r,o){if(o&&!this._taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,o),this._runCallbacksIfReady()}registerApplication(n){this.registry.registerApplication(n,this)}unregisterApplication(n){this.registry.unregisterApplication(n)}findProviders(n,r,o){return[]}static \u0275fac=function(r){return new(r||e)(A(be),A(qy),A(Fu))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),qy=(()=>{class e{_applications=new Map;registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return $d?.findTestabilityInTree(this,n,r)??null}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();function Gy(e){$d=e}var $d;function gi(e){return!!e&&typeof e.then=="function"}function Ou(e){return!!e&&typeof e.subscribe=="function"}var Ud=new x("");function fx(e){return Pn([{provide:Ud,multi:!0,useValue:e}])}var zd=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((n,r)=>{this.resolve=n,this.reject=r});appInits=b(Ud,{optional:!0})??[];injector=b(we);constructor(){}runInitializers(){if(this.initialized)return;let n=[];for(let o of this.appInits){let i=Sr(this.injector,o);if(gi(i))n.push(i);else if(Ou(i)){let s=new Promise((u,a)=>{i.subscribe({complete:u,error:a})});n.push(s)}}let r=()=>{this.done=!0,this.resolve()};Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),n.length===0&&r(),this.initialized=!0}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),Wy=new x("");function Zy(){$a(()=>{let e="";throw new _(600,e)})}function Yy(e){return e.isBoundToModule}var px=10;var Zr=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=b(Pt);afterRenderManager=b(Cu);zonelessEnabled=b(Wo);rootEffectScheduler=b(Vs);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new le;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=b(Gn);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(Ee(n=>!n))}constructor(){b(Dt,{optional:!0})}whenStable(){let n;return new Promise(r=>{n=this.isStable.subscribe({next:o=>{o&&r()}})}).finally(()=>{n.unsubscribe()})}_injector=b(Ce);_rendererFactory=null;get injector(){return this._injector}bootstrap(n,r){return this.bootstrapImpl(n,r)}bootstrapImpl(n,r,o=we.NULL){return this._injector.get(be).run(()=>{W(q.BootstrapComponentStart);let s=n instanceof Au;if(!this._injector.get(zd).done){let p="";throw new _(405,p)}let a;s?a=n:a=this._injector.get(fi).resolveComponentFactory(n),this.componentTypes.push(a.componentType);let c=Yy(a)?void 0:this._injector.get(yn),l=r||a.selector,d=a.create(o,[],l,c),h=d.location.nativeElement,f=d.injector.get(Ru,null);return f?.registerApplication(h),d.onDestroy(()=>{this.detachView(d.hostView),Qo(this.components,d),f?.unregisterApplication(h)}),this._loadComponent(d),W(q.BootstrapComponentEnd,d),d})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){W(q.ChangeDetectionStart),this.tracingSnapshot!==null?this.tracingSnapshot.run(_u.CHANGE_DETECTION,this.tickImpl):this.tickImpl()}tickImpl=()=>{if(this._runningTick)throw W(q.ChangeDetectionEnd),new _(101,!1);let n=M(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,M(n),this.afterTick.next(),W(q.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(Kn,null,{optional:!0}));let n=0;for(;this.dirtyFlags!==0&&n++$o(n))){this.dirtyFlags|=2;return}else this.dirtyFlags&=-8}attachView(n){let r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){let r=n;Qo(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView);try{this.tick()}catch(o){this.internalErrorHandler(o)}this.components.push(n),this._injector.get(Wy,[]).forEach(o=>o(n))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(n=>n()),this._views.slice().forEach(n=>n.destroy())}finally{this._destroyed=!0,this._views=[],this._destroyListeners=[]}}onDestroy(n){return this._destroyListeners.push(n),()=>Qo(this._destroyListeners,n)}destroy(){if(this._destroyed)throw new _(406,!1);let n=this._injector;n.destroy&&!n.destroyed&&n.destroy()}get viewCount(){return this._views.length}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Qo(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Qy(e,t){let n=C(),r=Xe();if(Te(n,r,t)){let o=Y(),i=fn();if(Tu(i,o,n,e,t))Ot(i)&&ey(n,i.index);else{let u=Ue(i,n);ty(n[Z],u,null,i.value,e,t,null)}}return Qy}function Pu(e,t,n,r){let o=C(),i=Xe();if(Te(o,i,t)){let s=Y(),u=fn();OC(u,o,e,t,n,r)}return Pu}var BP=typeof document<"u"&&typeof document?.documentElement?.getAnimations=="function";function hx(){return C()[ve][ee]}var Ql=class{destroy(t){}updateValue(t,n){}swap(t,n){let r=Math.min(t,n),o=Math.max(t,n),i=this.detach(o);if(o-r>1){let s=this.detach(r);this.attach(r,i),this.attach(o,s)}else this.attach(r,i)}move(t,n){this.attach(n,this.detach(t))}};function El(e,t,n,r,o){return e===n&&Object.is(t,r)?1:Object.is(o(e,t),o(n,r))?-1:0}function gx(e,t,n,r){let o,i,s=0,u=e.length-1,a=void 0;if(Array.isArray(t)){M(r);let c=t.length-1;for(M(null);s<=u&&s<=c;){let l=e.at(s),d=t[s],h=El(s,l,s,d,n);if(h!==0){h<0&&e.updateValue(s,d),s++;continue}let f=e.at(u),p=t[c],g=El(u,f,c,p,n);if(g!==0){g<0&&e.updateValue(u,p),u--,c--;continue}let m=n(s,l),y=n(u,f),v=n(s,d);if(Object.is(v,y)){let w=n(c,p);Object.is(w,m)?(e.swap(s,u),e.updateValue(u,p),c--,u--):e.move(u,s),e.updateValue(s,d),s++;continue}if(o??=new lu,i??=qg(e,s,u,n),Kl(e,o,s,v))e.updateValue(s,d),s++,u++;else if(i.has(v))o.set(m,e.detach(s)),u--;else{let w=e.create(s,t[s]);e.attach(s,w),s++,u++}}for(;s<=c;)zg(e,o,n,s,t[s]),s++}else if(t!=null){M(r);let c=t[Symbol.iterator]();M(null);let l=c.next();for(;!l.done&&s<=u;){let d=e.at(s),h=l.value,f=El(s,d,s,h,n);if(f!==0)f<0&&e.updateValue(s,h),s++,l=c.next();else{o??=new lu,i??=qg(e,s,u,n);let p=n(s,h);if(Kl(e,o,s,p))e.updateValue(s,h),s++,u++,l=c.next();else if(!i.has(p))e.attach(s,e.create(s,h)),s++,u++,l=c.next();else{let g=n(s,d);o.set(g,e.detach(s)),u--}}}for(;!l.done;)zg(e,o,n,e.length,l.value),l=c.next()}for(;s<=u;)e.destroy(e.detach(u--));o?.forEach(c=>{e.destroy(c)})}function Kl(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function zg(e,t,n,r,o){if(Kl(e,t,r,n(r,o)))e.updateValue(r,o);else{let i=e.create(r,o);e.attach(r,i)}}function qg(e,t,n,r){let o=new Set;for(let i=t;i<=n;i++)o.add(r(i,e.at(i)));return o}var lu=class{kvMap=new Map;_vMap=void 0;has(t){return this.kvMap.has(t)}delete(t){if(!this.has(t))return!1;let n=this.kvMap.get(t);return this._vMap!==void 0&&this._vMap.has(n)?(this.kvMap.set(t,this._vMap.get(n)),this._vMap.delete(n)):this.kvMap.delete(t),!0}get(t){return this.kvMap.get(t)}set(t,n){if(this.kvMap.has(t)){let r=this.kvMap.get(t);this._vMap===void 0&&(this._vMap=new Map);let o=this._vMap;for(;o.has(r);)r=o.get(r);o.set(r,n)}else this.kvMap.set(t,n)}forEach(t){for(let[n,r]of this.kvMap)if(t(r,n),this._vMap!==void 0){let o=this._vMap;for(;o.has(r);)r=o.get(r),t(r,n)}}};function qd(e,t,n,r,o,i,s,u){Ht("NgControlFlow");let a=C(),c=Y(),l=Fe(c.consts,i);return Vr(a,c,e,t,n,r,o,l,256,s,u),Gd}function Gd(e,t,n,r,o,i,s,u){Ht("NgControlFlow");let a=C(),c=Y(),l=Fe(c.consts,i);return Vr(a,c,e,t,n,r,o,l,512,s,u),Gd}function Wd(e,t){Ht("NgControlFlow");let n=C(),r=Xe(),o=n[r]!==fe?n[r]:-1,i=o!==-1?du(n,Q+o):void 0,s=0;if(Te(n,r,e)){let u=M(null);try{if(i!==void 0&&py(i,s),e!==-1){let a=Q+e,c=du(n,a),l=td(n[T],a),d=gy(c,l,n),h=li(n,l,t,{dehydratedView:d});di(c,h,s,Br(l,d))}}finally{M(u)}}else if(i!==void 0){let u=fy(i,s);u!==void 0&&(u[ee]=t)}}var Jl=class{lContainer;$implicit;$index;constructor(t,n,r){this.lContainer=t,this.$implicit=n,this.$index=r}get $count(){return this.lContainer.length-te}};function mx(e){return e}function Lu(e,t){return t}var Xl=class{hasEmptyBlock;trackByFn;liveCollection;constructor(t,n,r){this.hasEmptyBlock=t,this.trackByFn=n,this.liveCollection=r}};function ju(e,t,n,r,o,i,s,u,a,c,l,d,h){Ht("NgControlFlow");let f=C(),p=Y(),g=a!==void 0,m=C(),y=u?s.bind(m[ve][ee]):s,v=new Xl(g,y);m[Q+e]=v,Vr(f,p,e+1,t,n,r,o,Fe(p.consts,i),256),g&&Vr(f,p,e+2,a,c,l,d,Fe(p.consts,h),512)}var ed=class extends Ql{lContainer;hostLView;templateTNode;operationsCounter=void 0;needsIndexUpdate=!1;constructor(t,n,r){super(),this.lContainer=t,this.hostLView=n,this.templateTNode=r}get length(){return this.lContainer.length-te}at(t){return this.getLView(t)[ee].$implicit}attach(t,n){let r=n[Ln];this.needsIndexUpdate||=t!==this.length,di(this.lContainer,n,t,Br(this.templateTNode,r)),yx(this.lContainer,t)}detach(t){return this.needsIndexUpdate||=t!==this.length-1,bx(this.lContainer,t),vx(this.lContainer,t)}create(t,n){let r=ru(this.lContainer,this.templateTNode.tView.ssrId);return li(this.hostLView,this.templateTNode,new Jl(this.lContainer,n,t),{dehydratedView:r})}destroy(t){wu(t[T],t)}updateValue(t,n){this.getLView(t)[ee].$implicit=n}reset(){this.needsIndexUpdate=!1}updateIndexes(){if(this.needsIndexUpdate)for(let t=0;t0){let i=r[Rt];hC(i,o),Qn.delete(r[Ft]),o.detachedLeaveAnimationFns=void 0}}function bx(e,t){if(e.length<=te)return;let n=te+t,r=e[n],o=r?r[Hn]:void 0;o&&o.leave&&o.leave.size>0&&(o.detachedLeaveAnimationFns=[])}function vx(e,t){return ti(e,t)}function Dx(e,t){return fy(e,t)}function td(e,t){return Bo(e,t)}function Yr(e,t,n){let r=C(),o=Xe();if(Te(r,o,t)){let i=Y(),s=fn();Jm(s,r,e,t,r[Z],n)}return Yr}function nd(e,t,n,r,o){Tu(t,e,n,o?"class":"style",r)}function Qr(e,t,n,r){let o=C(),i=o[T],s=e+Q,u=i.firstCreatePass?Nd(s,o,2,t,Td,Fs(),n,r):i.data[s];if(Sd(u,o,e,t,Jy),Nr(u)){let a=o[T];Iu(a,o,u),ld(a,u,o)}return r!=null&&ci(o,u),Qr}function Kr(){let e=Y(),t=re(),n=Md(t);return e.firstCreatePass&&kd(e,n),tl(n)&&nl(),Xc(),n.classesWithoutHost!=null&&QE(n)&&nd(e,n,C(),n.classesWithoutHost,!0),n.stylesWithoutHost!=null&&KE(n)&&nd(e,n,C(),n.stylesWithoutHost,!1),Kr}function Ky(e,t,n,r){return Qr(e,t,n,r),Kr(),Ky}function Zd(e,t,n,r){let o=C(),i=o[T],s=e+Q,u=i.firstCreatePass?Dw(s,i,2,t,n,r):i.data[s];return Sd(u,o,e,t,Jy),r!=null&&ci(o,u),Zd}function Yd(){let e=re(),t=Md(e);return tl(t)&&nl(),Xc(),Yd}function Vu(e,t,n,r){return Zd(e,t,n,r),Yd(),Vu}var Jy=(e,t,n,r,o)=>(qo(!0),Rm(t[Z],r,sg()));function Qd(e,t,n){let r=C(),o=r[T],i=e+Q,s=o.firstCreatePass?Nd(i,r,8,"ng-container",Td,Fs(),t,n):o.data[i];if(Sd(s,r,e,"ng-container",Ex),Nr(s)){let u=r[T];Iu(u,r,s),ld(u,s,r)}return n!=null&&ci(r,s),Qd}function Kd(){let e=Y(),t=re(),n=Md(t);return e.firstCreatePass&&kd(e,n),Kd}function Jr(e,t,n){return Qd(e,t,n),Kd(),Jr}var Ex=(e,t,n,r,o)=>(qo(!0),U_(t[Z],""));function _x(){return C()}function Hu(e,t,n){let r=C(),o=Xe();if(Te(r,o,t)){let i=Y(),s=fn();Xm(s,r,e,t,r[Z],n)}return Hu}var mi="en-US";var Cx=mi;function Xy(e){typeof e=="string"&&(Cx=e.toLowerCase().replace(/_/g,"-"))}function eb(e,t,n){let r=C(),o=Y(),i=re();return nb(o,r,r[Z],i,e,t,n),eb}function tb(e,t,n){let r=C(),o=Y(),i=re();return(i.type&3||n)&&_y(i,o,r,n,r[Z],e,t,Ys(i,r,t)),tb}function nb(e,t,n,r,o,i,s){let u=!0,a=null;if((r.type&3||s)&&(a??=Ys(r,t,i),_y(r,e,t,s,n,o,i,a)&&(u=!1)),u){let c=r.outputs?.[o],l=r.hostDirectiveOutputs?.[o];if(l&&l.length)for(let d=0;d>17&32767}function kx(e){return(e&2)==2}function Rx(e,t){return e&131071|t<<17}function rd(e){return e|2}function Hr(e){return(e&131068)>>2}function _l(e,t){return e&-131069|t<<2}function Fx(e){return(e&1)===1}function od(e){return e|1}function Ox(e,t,n,r,o,i){let s=i?t.classBindings:t.styleBindings,u=Jn(s),a=Hr(s);e[r]=n;let c=!1,l;if(Array.isArray(n)){let d=n;l=d[1],(l===null||xr(d,l)>0)&&(c=!0)}else l=n;if(o)if(a!==0){let h=Jn(e[u+1]);e[r+1]=zs(h,u),h!==0&&(e[h+1]=_l(e[h+1],r)),e[u+1]=Rx(e[u+1],r)}else e[r+1]=zs(u,0),u!==0&&(e[u+1]=_l(e[u+1],r)),u=r;else e[r+1]=zs(a,0),u===0?u=r:e[a+1]=_l(e[a+1],r),a=r;c&&(e[r+1]=rd(e[r+1])),Gg(e,l,r,!0),Gg(e,l,r,!1),Px(t,l,e,r,i),s=zs(u,a),i?t.classBindings=s:t.styleBindings=s}function Px(e,t,n,r,o){let i=o?e.residualClasses:e.residualStyles;i!=null&&typeof t=="string"&&xr(i,t)>=0&&(n[r+1]=od(n[r+1]))}function Gg(e,t,n,r){let o=e[n+1],i=t===null,s=r?Jn(o):Hr(o),u=!1;for(;s!==0&&(u===!1||i);){let a=e[s],c=e[s+1];Lx(a,t)&&(u=!0,e[s+1]=r?od(c):rd(c)),s=r?Jn(c):Hr(c)}u&&(e[n+1]=r?rd(o):od(o))}function Lx(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t=="string"?xr(e,t)>=0:!1}var ce={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function ub(e){return e.substring(ce.key,ce.keyEnd)}function jx(e){return e.substring(ce.value,ce.valueEnd)}function Bx(e){return lb(e),ab(e,$r(e,0,ce.textEnd))}function ab(e,t){let n=ce.textEnd;return n===t?-1:(t=ce.keyEnd=Hx(e,ce.key=t,n),$r(e,t,n))}function Vx(e){return lb(e),cb(e,$r(e,0,ce.textEnd))}function cb(e,t){let n=ce.textEnd,r=ce.key=$r(e,t,n);return n===r?-1:(r=ce.keyEnd=$x(e,r,n),r=Wg(e,r,n,58),r=ce.value=$r(e,r,n),r=ce.valueEnd=Ux(e,r,n),Wg(e,r,n,59))}function lb(e){ce.key=0,ce.keyEnd=0,ce.value=0,ce.valueEnd=0,ce.textEnd=e.length}function $r(e,t,n){for(;t32;)t++;return t}function $x(e,t,n){let r;for(;t=65&&(r&-33)<=90||r>=48&&r<=57);)t++;return t}function Wg(e,t,n,r){return t=$r(e,t,n),t32&&(u=s),i=o,o=r,r=a&-33}return u}function Zg(e,t,n,r){let o=-1,i=n;for(;i=0;n=cb(t,n))mb(e,ub(t),jx(t))}function bi(e){pb(Kx,qx,e,!0)}function qx(e,t){for(let n=Bx(t);n>=0;n=ab(t,n))Po(e,ub(t),!0)}function fb(e,t,n,r){let o=C(),i=Y(),s=Uo(2);if(i.firstUpdatePass&&gb(i,e,s,r),t!==fe&&Te(o,s,t)){let u=i.data[ze()];yb(i,u,o,o[Z],e,o[s+1]=Xx(t,n),r,s)}}function pb(e,t,n,r){let o=Y(),i=Uo(2);o.firstUpdatePass&&gb(o,null,i,r);let s=C();if(n!==fe&&Te(s,i,n)){let u=o.data[ze()];if(bb(u,r)&&!hb(o,i)){let a=r?u.classesWithoutHost:u.stylesWithoutHost;a!==null&&(n=_s(a,n||"")),nd(o,u,s,n,r)}else Jx(o,u,s,s[Z],s[i+1],s[i+1]=Qx(e,t,n),r,i)}}function hb(e,t){return t>=e.expandoStartIndex}function gb(e,t,n,r){let o=e.data;if(o[n+1]===null){let i=o[ze()],s=hb(e,n);bb(i,r)&&t===null&&!s&&(t=!1),t=Gx(o,i,t,r),Ox(o,i,t,n,s,r)}}function Gx(e,t,n,r){let o=X0(e),i=r?t.residualClasses:t.residualStyles;if(o===null)(r?t.classBindings:t.styleBindings)===0&&(n=Cl(null,e,t,n,r),n=ii(n,t.attrs,r),i=null);else{let s=t.directiveStylingLast;if(s===-1||e[s]!==o)if(n=Cl(o,e,t,n,r),i===null){let a=Wx(e,t,r);a!==void 0&&Array.isArray(a)&&(a=Cl(null,e,t,a[1],r),a=ii(a,t.attrs,r),Zx(e,t,r,a))}else i=Yx(e,t,r)}return i!==void 0&&(r?t.residualClasses=i:t.residualStyles=i),n}function Wx(e,t,n){let r=n?t.classBindings:t.styleBindings;if(Hr(r)!==0)return e[Jn(r)]}function Zx(e,t,n,r){let o=n?t.classBindings:t.styleBindings;e[Jn(o)]=r}function Yx(e,t,n){let r,o=t.directiveEnd;for(let i=1+t.directiveStylingLast;i0;){let a=e[o],c=Array.isArray(a),l=c?a[1]:a,d=l===null,h=n[o+1];h===fe&&(h=d?ye:void 0);let f=d?Ms(h,r):l===r?h:void 0;if(c&&!fu(f)&&(f=Ms(a,r)),fu(f)&&(u=f,s))return u;let p=e[o+1];o=s?Jn(p):Hr(p)}if(t!==null){let a=i?t.residualClasses:t.residualStyles;a!=null&&(u=Ms(a,r))}return u}function fu(e){return e!==void 0}function Xx(e,t){return e==null||e===""||(typeof t=="string"?e=e+t:typeof e=="object"&&(e=kt(Pe(e)))),e}function bb(e,t){return(e.flags&(t?8:16))!==0}function eI(e,t=""){let n=C(),r=Y(),o=e+Q,i=r.firstCreatePass?er(r,o,1,t,null):r.data[o],s=tI(r,n,i,t,e);n[o]=s,Bs()&&xd(r,n,s,i),qn(i,!1)}var tI=(e,t,n,r,o)=>(qo(!0),H_(t[Z],r));function vb(e,t,n,r=""){return Te(e,Xe(),n)?t+Ne(n)+r:fe}function nI(e,t,n,r,o,i=""){let s=al(),u=iu(e,s,n,o);return Uo(2),u?t+Ne(n)+r+Ne(o)+i:fe}function rI(e,t,n,r,o,i,s,u,a,c=""){let l=al(),d=_w(e,l,n,o,s,a);return Uo(4),d?t+Ne(n)+r+Ne(o)+i+Ne(s)+u+Ne(a)+c:fe}function Db(e){return Jd("",e),Db}function Jd(e,t,n){let r=C(),o=vb(r,e,t,n);return o!==fe&&Xd(r,ze(),o),Jd}function Eb(e,t,n,r,o){let i=C(),s=nI(i,e,t,n,r,o);return s!==fe&&Xd(i,ze(),s),Eb}function _b(e,t,n,r,o,i,s,u,a){let c=C(),l=rI(c,e,t,n,r,o,i,s,u,a);return l!==fe&&Xd(c,ze(),l),_b}function Xd(e,t,n){let r=Wc(t,e);$_(e[Z],r,n)}function Cb(e,t,n){Hd(t)&&(t=t());let r=C(),o=Xe();if(Te(r,o,t)){let i=Y(),s=fn();Jm(s,r,e,t,r[Z],n)}return Cb}function oI(e,t){let n=Hd(e);return n&&e.set(t),n}function wb(e,t){let n=C(),r=Y(),o=re();return nb(r,n,n[Z],o,e,t),wb}var xb={};function Uu(e){Ht("NgLet");let t=Y(),n=C(),r=e+Q,o=er(t,r,128,null,null);return qn(o,!1),Ho(t,n,r,xb),Uu}function zu(e){let t=Y(),n=C(),r=ze();return Ho(t,n,r,e),e}function qu(e){let t=sl(),n=Vo(t,Q+e);if(n===xb)throw new _(314,!1);return n}function iI(e){return Te(C(),Xe(),e)?Ne(e):fe}function sI(e,t,n=""){return vb(C(),e,t,n)}function Qg(e,t,n){let r=Y();r.firstCreatePass&&Ib(t,r.data,r.blueprint,Je(e),n)}function Ib(e,t,n,r,o){if(e=ue(e),Array.isArray(e))for(let i=0;i>20;if(Rn(e)||!e.multi){let f=new Yn(c,o,oe,null),p=xl(a,t,o?l:l+h,d);p===-1?(Tl(eu(u,s),i,a),wl(i,e,t.length),t.push(a),u.directiveStart++,u.directiveEnd++,o&&(u.providerIndexes+=1048576),n.push(f),s.push(f)):(n[p]=f,s[p]=f)}else{let f=xl(a,t,l+h,d),p=xl(a,t,l,l+h),g=f>=0&&n[f],m=p>=0&&n[p];if(o&&!m||!o&&!g){Tl(eu(u,s),i,a);let y=cI(o?aI:uI,n.length,o,r,c,e);!o&&m&&(n[p].providerFactory=y),wl(i,e,t.length,0),t.push(a),u.directiveStart++,u.directiveEnd++,o&&(u.providerIndexes+=1048576),n.push(y),s.push(y)}else{let y=Tb(n[o?p:f],c,!o&&r);wl(i,e,f>-1?f:p,y)}!o&&r&&m&&n[p].componentProviders++}}}function wl(e,t,n,r){let o=Rn(t),i=P0(t);if(o||i){let a=(i?ue(t.useClass):t).prototype.ngOnDestroy;if(a){let c=e.destroyHooks||(e.destroyHooks=[]);if(!o&&t.multi){let l=c.indexOf(n);l===-1?c.push(n,[r,a]):c[l+1].push(r,a)}else c.push(n,a)}}}function Tb(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function xl(e,t,n,r){for(let o=n;o{n.providersResolver=(r,o)=>Qg(r,o?o(e):e,!1),t&&(n.viewProvidersResolver=(r,o)=>Qg(r,o?o(t):t,!0))}}function dI(e,t){let n=Rr()+e,r=C();return r[n]===fe?Fd(r,n,t()):Ew(r,n)}function fI(e,t,n){return Mb(C(),Rr(),e,t,n)}function pI(e,t,n,r){return Ab(C(),Rr(),e,t,n,r)}function Sb(e,t){let n=e[t];return n===fe?void 0:n}function Mb(e,t,n,r,o,i){let s=t+n;return Te(e,s,o)?Fd(e,s+1,i?r.call(i,o):r(o)):Sb(e,s+1)}function Ab(e,t,n,r,o,i,s){let u=t+n;return iu(e,u,o,i)?Fd(e,u+2,s?r.call(s,o,i):r(o,i)):Sb(e,u+2)}function hI(e,t){let n=Y(),r,o=e+Q;n.firstCreatePass?(r=gI(t,n.pipeRegistry),n.data[o]=r,r.onDestroy&&(n.destroyHooks??=[]).push(o,r.onDestroy)):r=n.data[o];let i=r.factory||(r.factory=sn(r.type,!0)),s,u=_e(oe);try{let a=Xs(!1),c=i();return Xs(a),Ho(n,C(),o,c),c}finally{_e(u)}}function gI(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function mI(e,t,n){let r=e+Q,o=C(),i=Vo(o,r);return Nb(o,r)?Mb(o,Rr(),t,i.transform,n,i):i.transform(n)}function yI(e,t,n,r){let o=e+Q,i=C(),s=Vo(i,o);return Nb(i,o)?Ab(i,Rr(),t,s.transform,n,r,s):s.transform(n,r)}function Nb(e,t){return e[T].data[t].pure}function bI(e,t){return Mu(e,t)}var pu=class{ngModuleFactory;componentFactories;constructor(t,n){this.ngModuleFactory=t,this.componentFactories=n}},vI=(()=>{class e{compileModuleSync(n){return new cu(n)}compileModuleAsync(n){return Promise.resolve(this.compileModuleSync(n))}compileModuleAndAllComponentsSync(n){let r=this.compileModuleSync(n),o=Rc(n),i=jm(o.declarations).reduce((s,u)=>{let a=gt(u);return a&&s.push(new mn(a)),s},[]);return new pu(r,i)}compileModuleAndAllComponentsAsync(n){return Promise.resolve(this.compileModuleAndAllComponentsSync(n))}clearCache(){}clearCacheFor(n){}getModuleId(n){}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var kb=(()=>{class e{applicationErrorHandler=b(Pt);appRef=b(Zr);taskService=b(Gn);ngZone=b(be);zonelessEnabled=b(Wo);tracing=b(Dt,{optional:!0});zoneIsDefined=typeof Zone<"u"&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new X;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(ko):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(b(gl,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{let n=this.taskService.add();if(!this.runningTick&&(this.cleanup(),!this.zonelessEnabled||this.appRef.includeAllTestViews)){this.taskService.remove(n);return}this.switchToMicrotaskScheduler(),this.taskService.remove(n)})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()}))}switchToMicrotaskScheduler(){this.ngZone.runOutsideAngular(()=>{let n=this.taskService.add();this.useMicrotaskScheduler=!0,queueMicrotask(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(n)})})}notify(n){if(!this.zonelessEnabled&&n===5)return;switch(n){case 0:{this.appRef.dirtyFlags|=2;break}case 3:case 2:case 4:case 5:case 1:{this.appRef.dirtyFlags|=4;break}case 6:{this.appRef.dirtyFlags|=2;break}case 12:{this.appRef.dirtyFlags|=16;break}case 13:{this.appRef.dirtyFlags|=2;break}case 11:break;default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick())return;let r=this.useMicrotaskScheduler?lg:fl;this.pendingRenderTaskId=this.taskService.add(),this.scheduleInRootZone?this.cancelScheduledCallback=Zone.root.run(()=>r(()=>this.tick())):this.cancelScheduledCallback=this.ngZone.runOutsideAngular(()=>r(()=>this.tick()))}shouldScheduleTick(){return!(this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(ko+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let n=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(r){this.applicationErrorHandler(r)}finally{this.taskService.remove(n),this.cleanup()}}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let n=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(n)}}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Rb(){return[{provide:ft,useExisting:kb},{provide:be,useClass:Ro},{provide:Wo,useValue:!0}]}function DI(){return typeof $localize<"u"&&$localize.locale||mi}var Gu=new x("",{factory:()=>b(Gu,{optional:!0,skipSelf:!0})||DI()});var Wu=class{destroyed=!1;listeners=null;errorHandler=b(Ve,{optional:!0});destroyRef=b(Oe);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(t){if(this.destroyed)throw new _(953,!1);return(this.listeners??=[]).push(t),{unsubscribe:()=>{let n=this.listeners?.indexOf(t);n!==void 0&&n!==-1&&this.listeners?.splice(n,1)}}}emit(t){if(this.destroyed){console.warn(pt(953,!1));return}if(this.listeners===null)return;let n=M(null);try{for(let r of this.listeners)try{r(t)}catch(o){this.errorHandler?.handleError(o)}}finally{M(n)}}};function Me(e,t){return vo(e,t?.equal)}var EI=e=>e;function ef(e,t){if(typeof e=="function"){let n=hc(e,EI,t?.equal);return Fb(n,t?.debugName)}else{let n=hc(e.source,e.computation,e.equal);return Fb(n,e.debugName)}}function Fb(e,t){let n=e[ne],r=e;return r.set=o=>y0(n,o),r.update=o=>b0(n,o),r.asReadonly=Go.bind(e),r}function _I(e){let t=e.request,n=e.params??t??(()=>null);return new Zu(n,wI(e),e.defaultValue,e.equal?CI(e.equal):void 0,e.debugName,e.injector??b(we))}var tf=class{value;isLoading;constructor(t,n){this.value=t,this.value.set=this.set.bind(this),this.value.update=this.update.bind(this),this.value.asReadonly=Go,this.isLoading=Me(()=>this.status()==="loading"||this.status()==="reloading",void 0)}isError=Me(()=>this.status()==="error");update(t){this.set(t(de(this.value)))}isValueDefined=Me(()=>this.isError()?!1:this.value()!==void 0);hasValue(){return this.isValueDefined()}asReadonly(){return this}},Zu=class extends tf{loaderFn;equal;debugName;pendingTasks;state;extRequest;effectRef;pendingController;resolvePendingTask=void 0;destroyed=!1;unregisterOnDestroy;status;error;constructor(t,n,r,o,i,s){super(Me(()=>{let u=this.state().stream?.();if(!u||this.state().status==="loading"&&this.error())return r;if(!nf(u))throw new rf(this.error());return u.value},{equal:o}),i),this.loaderFn=n,this.equal=o,this.debugName=i,this.extRequest=ef({source:t,computation:u=>({request:u,reload:0})}),this.state=ef({source:this.extRequest,computation:(u,a)=>{let c=u.request===void 0?"idle":"loading";return a?{extRequest:u,status:c,previousStatus:Ob(a.value),stream:a.value.extRequest.request===u.request?a.value.stream:void 0}:{extRequest:u,status:c,previousStatus:"idle",stream:void 0}}}),this.effectRef=Zo(this.loadEffect.bind(this),{injector:s,manualCleanup:!0}),this.pendingTasks=s.get(Wn),this.unregisterOnDestroy=s.get(Oe).onDestroy(()=>this.destroy()),this.status=Me(()=>Ob(this.state()),void 0),this.error=Me(()=>{let u=this.state().stream?.();return u&&!nf(u)?u.error:void 0},void 0)}set(t){if(this.destroyed)return;let n=de(this.error),r=de(this.state);if(!n){let o=de(this.value);if(r.status==="local"&&(this.equal?this.equal(o,t):o===t))return}this.state.set({extRequest:r.extRequest,status:"local",previousStatus:"local",stream:pn({value:t},void 0)}),this.abortInProgressLoad()}reload(){let{status:t}=de(this.state);return t==="idle"||t==="loading"?!1:(this.extRequest.update(({request:n,reload:r})=>({request:n,reload:r+1})),!0)}destroy(){this.destroyed=!0,this.unregisterOnDestroy(),this.effectRef.destroy(),this.abortInProgressLoad(),this.state.set({extRequest:{request:void 0,reload:0},status:"idle",previousStatus:"idle",stream:void 0})}loadEffect(){return at(this,null,function*(){let t=this.extRequest(),{status:n,previousStatus:r}=de(this.state);if(t.request===void 0)return;if(n!=="loading")return;this.abortInProgressLoad();let o=this.resolvePendingTask=this.pendingTasks.add(),{signal:i}=this.pendingController=new AbortController;try{let s=yield de(()=>this.loaderFn({params:t.request,request:t.request,abortSignal:i,previous:{status:r}}));if(i.aborted||de(this.extRequest)!==t)return;this.state.set({extRequest:t,status:"resolved",previousStatus:"resolved",stream:s})}catch(s){if(i.aborted||de(this.extRequest)!==t)return;this.state.set({extRequest:t,status:"resolved",previousStatus:"error",stream:pn({error:sf(s)},void 0)})}finally{o?.(),o=void 0}})}abortInProgressLoad(){de(()=>this.pendingController?.abort()),this.pendingController=void 0,this.resolvePendingTask?.(),this.resolvePendingTask=void 0}};function CI(e){return(t,n)=>t===void 0||n===void 0?t===n:e(t,n)}function wI(e){return xI(e)?e.stream:t=>at(null,null,function*(){try{return pn({value:yield e.loader(t)},void 0)}catch(n){return pn({error:sf(n)},void 0)}})}function xI(e){return!!e.stream}function Ob(e){switch(e.status){case"loading":return e.extRequest.reload===0?"loading":"reloading";case"resolved":return nf(e.stream())?"resolved":"error";default:return e.status}}function nf(e){return e.error===void 0}function sf(e){return II(e)?e:new of(e)}function II(e){return e instanceof Error||typeof e=="object"&&typeof e.name=="string"&&typeof e.message=="string"}var rf=class extends Error{constructor(t){super(t.message,{cause:t})}},of=class extends Error{constructor(t){super(String(t),{cause:t})}};var qb=Symbol("InputSignalNode#UNSET"),LI=P(S({},Do),{transformFn:void 0,applyValueToInputSignal(e,t){xn(e,t)}});function Gb(e,t){let n=Object.create(LI);n.value=e,n.transformFn=t?.transform;function r(){if(Jt(n),n.value===qb){let o=null;throw new _(-950,o)}return n.value}return r[ne]=n,r}var Pb=class{attributeName;constructor(t){this.attributeName=t}__NG_ELEMENT_ID__=()=>ud(this.attributeName);toString(){return`HostAttributeToken ${this.attributeName}`}},iB=(()=>{let e=new x("");return e.__NG_ELEMENT_ID__=t=>{let n=re();if(n===null)throw new _(204,!1);if(n.type&2)return n.value;if(t&8)return null;throw new _(204,!1)},e})();function sB(e){return new Wu}function Lb(e,t){return Gb(e,t)}function jI(e){return Gb(qb,e)}var Ae=(Lb.required=jI,Lb);function jb(e,t){return jd(t)}function BI(e,t){return Bd(t)}var uB=(jb.required=BI,jb);function aB(e,t){return Ry(t)}function Bb(e,t){return jd(t)}function VI(e,t){return Bd(t)}var cB=(Bb.required=VI,Bb);var af=new x(""),HI=new x("");function vi(e){return!e.moduleRef}function $I(e){let t=vi(e)?e.r3Injector:e.moduleRef.injector,n=t.get(be);return n.run(()=>{vi(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(Pt),o;if(n.runOutsideAngular(()=>{o=n.onError.subscribe({next:r})}),vi(e)){let i=()=>t.destroy(),s=e.platformInjector.get(af);s.add(i),t.onDestroy(()=>{o.unsubscribe(),s.delete(i)})}else{let i=()=>e.moduleRef.destroy(),s=e.platformInjector.get(af);s.add(i),e.moduleRef.onDestroy(()=>{Qo(e.allPlatformModules,e.moduleRef),o.unsubscribe(),s.delete(i)})}return zI(r,n,()=>{let i=t.get(Gn),s=i.add(),u=t.get(zd);return u.runInitializers(),u.donePromise.then(()=>{let a=t.get(Gu,mi);if(Xy(a||mi),!t.get(HI,!0))return vi(e)?t.get(Zr):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(vi(e)){let l=t.get(Zr);return e.rootComponent!==void 0&&l.bootstrap(e.rootComponent),l}else return UI?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>{i.remove(s)})})})}var UI;function zI(e,t,n){try{let r=n();return gi(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e(r)),r}}var Yu=null;function qI(e=[],t){return we.create({name:t,providers:[{provide:Lo,useValue:"platform"},{provide:af,useValue:new Set([()=>Yu=null])},...e]})}function GI(e=[]){if(Yu)return Yu;let t=qI(e);return Yu=t,Zy(),WI(t),t}function WI(e){let t=e.get(mu,null);Sr(e,()=>{t?.forEach(n=>n())})}var ZI=1e4;var lB=ZI-1e3;var yf=(()=>{class e{static __NG_ELEMENT_ID__=YI}return e})();function YI(e){return QI(re(),C(),(e&16)===16)}function QI(e,t,n){if(Ot(e)&&!n){let r=Re(e.index,t);return new hn(r,r)}else if(e.type&175){let r=t[ve];return new hn(r,t)}return null}var cf=class{constructor(){}supports(t){return Rd(t)}create(t){return new lf(t)}},KI=(e,t)=>t,lf=class{length=0;collection;_linkedRecords=null;_unlinkedRecords=null;_previousItHead=null;_itHead=null;_itTail=null;_additionsHead=null;_additionsTail=null;_movesHead=null;_movesTail=null;_removalsHead=null;_removalsTail=null;_identityChangesHead=null;_identityChangesTail=null;_trackByFn;constructor(t){this._trackByFn=t||KI}forEachItem(t){let n;for(n=this._itHead;n!==null;n=n._next)t(n)}forEachOperation(t){let n=this._itHead,r=this._removalsHead,o=0,i=null;for(;n||r;){let s=!r||n&&n.currentIndex{s=this._trackByFn(o,u),n===null||!Object.is(n.trackById,s)?(n=this._mismatch(n,u,s,o),r=!0):(r&&(n=this._verifyReinsertion(n,u,s,o)),Object.is(n.item,u)||this._addIdentityChange(n,u)),n=n._next,o++}),this.length=o;return this._truncate(n),this.collection=t,this.isDirty}get isDirty(){return this._additionsHead!==null||this._movesHead!==null||this._removalsHead!==null||this._identityChangesHead!==null}_reset(){if(this.isDirty){let t;for(t=this._previousItHead=this._itHead;t!==null;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;t!==null;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;t!==null;t=t._nextMoved)t.previousIndex=t.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(t,n,r,o){let i;return t===null?i=this._itTail:(i=t._prev,this._remove(t)),t=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null),t!==null?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._reinsertAfter(t,i,o)):(t=this._linkedRecords===null?null:this._linkedRecords.get(r,o),t!==null?(Object.is(t.item,n)||this._addIdentityChange(t,n),this._moveAfter(t,i,o)):t=this._addAfter(new df(n,r),i,o)),t}_verifyReinsertion(t,n,r,o){let i=this._unlinkedRecords===null?null:this._unlinkedRecords.get(r,null);return i!==null?t=this._reinsertAfter(i,t._prev,o):t.currentIndex!=o&&(t.currentIndex=o,this._addToMoves(t,o)),t}_truncate(t){for(;t!==null;){let n=t._next;this._addToRemovals(this._unlink(t)),t=n}this._unlinkedRecords!==null&&this._unlinkedRecords.clear(),this._additionsTail!==null&&(this._additionsTail._nextAdded=null),this._movesTail!==null&&(this._movesTail._nextMoved=null),this._itTail!==null&&(this._itTail._next=null),this._removalsTail!==null&&(this._removalsTail._nextRemoved=null),this._identityChangesTail!==null&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(t,n,r){this._unlinkedRecords!==null&&this._unlinkedRecords.remove(t);let o=t._prevRemoved,i=t._nextRemoved;return o===null?this._removalsHead=i:o._nextRemoved=i,i===null?this._removalsTail=o:i._prevRemoved=o,this._insertAfter(t,n,r),this._addToMoves(t,r),t}_moveAfter(t,n,r){return this._unlink(t),this._insertAfter(t,n,r),this._addToMoves(t,r),t}_addAfter(t,n,r){return this._insertAfter(t,n,r),this._additionsTail===null?this._additionsTail=this._additionsHead=t:this._additionsTail=this._additionsTail._nextAdded=t,t}_insertAfter(t,n,r){let o=n===null?this._itHead:n._next;return t._next=o,t._prev=n,o===null?this._itTail=t:o._prev=t,n===null?this._itHead=t:n._next=t,this._linkedRecords===null&&(this._linkedRecords=new Qu),this._linkedRecords.put(t),t.currentIndex=r,t}_remove(t){return this._addToRemovals(this._unlink(t))}_unlink(t){this._linkedRecords!==null&&this._linkedRecords.remove(t);let n=t._prev,r=t._next;return n===null?this._itHead=r:n._next=r,r===null?this._itTail=n:r._prev=n,t}_addToMoves(t,n){return t.previousIndex===n||(this._movesTail===null?this._movesTail=this._movesHead=t:this._movesTail=this._movesTail._nextMoved=t),t}_addToRemovals(t){return this._unlinkedRecords===null&&(this._unlinkedRecords=new Qu),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,this._removalsTail===null?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t}_addIdentityChange(t,n){return t.item=n,this._identityChangesTail===null?this._identityChangesTail=this._identityChangesHead=t:this._identityChangesTail=this._identityChangesTail._nextIdentityChange=t,t}},df=class{item;trackById;currentIndex=null;previousIndex=null;_nextPrevious=null;_prev=null;_next=null;_prevDup=null;_nextDup=null;_prevRemoved=null;_nextRemoved=null;_nextAdded=null;_nextMoved=null;_nextIdentityChange=null;constructor(t,n){this.item=t,this.trackById=n}},ff=class{_head=null;_tail=null;add(t){this._head===null?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)}get(t,n){let r;for(r=this._head;r!==null;r=r._nextDup)if((n===null||n<=r.currentIndex)&&Object.is(r.trackById,t))return r;return null}remove(t){let n=t._prevDup,r=t._nextDup;return n===null?this._head=r:n._nextDup=r,r===null?this._tail=n:r._prevDup=n,this._head===null}},Qu=class{map=new Map;put(t){let n=t.trackById,r=this.map.get(n);r||(r=new ff,this.map.set(n,r)),r.add(t)}get(t,n){let r=t,o=this.map.get(r);return o?o.get(t,n):null}remove(t){let n=t.trackById;return this.map.get(n).remove(t)&&this.map.delete(n),t}get isEmpty(){return this.map.size===0}clear(){this.map.clear()}};function Vb(e,t,n){let r=e.previousIndex;if(r===null)return r;let o=0;return n&&r{if(n&&n.key===o)this._maybeAddToChanges(n,r),this._appendAfter=n,n=n._next;else{let i=this._getOrCreateRecordForKey(o,r);n=this._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let r=n;r!==null;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(t,n){if(t){let r=t._prev;return n._next=t,n._prev=r,t._prev=n,r&&(r._next=n),t===this._mapHead&&(this._mapHead=n),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(t,n){if(this._records.has(t)){let o=this._records.get(t);this._maybeAddToChanges(o,n);let i=o._prev,s=o._next;return i&&(i._next=s),s&&(s._prev=i),o._next=null,o._prev=null,o}let r=new gf(t);return this._records.set(t,r),r.currentValue=n,this._addToAdditions(r),r}_reset(){if(this.isDirty){let t;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;t!==null;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;t!==null;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;t!=null;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(t,n){Object.is(n,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=n,this._addToChanges(t))}_addToAdditions(t){this._additionsHead===null?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)}_addToChanges(t){this._changesHead===null?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)}_forEach(t,n){t instanceof Map?t.forEach(n):Object.keys(t).forEach(r=>n(t[r],r))}},gf=class{key;previousValue=null;currentValue=null;_nextPrevious=null;_next=null;_prev=null;_nextAdded=null;_nextRemoved=null;_nextChanged=null;constructor(t){this.key=t}};function Hb(){return new bf([new cf])}var bf=(()=>{class e{factories;static \u0275prov=I({token:e,providedIn:"root",factory:Hb});constructor(n){this.factories=n}static create(n,r){if(r!=null){let o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:()=>{let r=b(e,{optional:!0,skipSelf:!0});return e.create(n,r||Hb())}}}find(n){let r=this.factories.find(o=>o.supports(n));if(r!=null)return r;throw new _(901,!1)}}return e})();function $b(){return new Ku([new pf])}var Ku=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:$b});factories;constructor(n){this.factories=n}static create(n,r){if(r){let o=r.factories.slice();n=n.concat(o)}return new e(n)}static extend(n){return{provide:e,useFactory:()=>{let r=b(e,{optional:!0,skipSelf:!0});return e.create(n,r||$b())}}}find(n){let r=this.factories.find(o=>o.supports(n));if(r)return r;throw new _(901,!1)}}return e})();var Wb=(()=>{class e{constructor(n){}static \u0275fac=function(r){return new(r||e)(A(Zr))};static \u0275mod=$t({type:e});static \u0275inj=ht({})}return e})();function Zb(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:o}=e;W(q.BootstrapApplicationStart);try{let i=o?.injector??GI(r),s=[Rb(),fg,...n||[]],u=new oi({providers:s,parent:i,debugName:"",runEnvironmentInitializers:!1});return $I({r3Injector:u.injector,platformInjector:i,rootComponent:t})}catch(i){return Promise.reject(i)}finally{W(q.BootstrapApplicationEnd)}}function JI(e){return typeof e=="boolean"?e:e!=null&&e!=="false"}function XI(e,t=NaN){return!isNaN(parseFloat(e))&&!isNaN(Number(e))?Number(e):t}var uf=Symbol("NOT_SET"),Yb=new Set,e2=P(S({},Do),{kind:"afterRenderEffectPhase",consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:uf,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(Jt(c),c.value),c.signal[ne]=c,c.registerCleanupFn=l=>(c.cleanup??=new Set).add(l),this.nodes[u]=c,this.hooks[u]=l=>c.phaseFn(l)}}afterRun(){super.afterRun(),this.lastPhase=null}destroy(){if(this.onDestroyFns!==null)for(let t of this.onDestroyFns)t();super.destroy();for(let t of this.nodes)if(t)try{for(let n of t.cleanup??Yb)n()}finally{en(t)}}};function dB(e,t){let n=t?.injector??b(we),r=n.get(ft),o=n.get(Cu),i=n.get(Dt,null,{optional:!0});o.impl??=n.get(Cd);let s=e;typeof s=="function"&&(s={mixedReadWrite:e});let u=n.get(Fr,null,{optional:!0}),a=new mf(o.impl,[s.earlyRead,s.write,s.mixedReadWrite,s.read],u?.view,r,n,i?.snapshot(null));return o.impl.register(a),a}function fB(e,t){let n=gt(e),r=t.elementInjector||Tr();return new mn(n).create(r,t.projectableNodes,t.hostElement,t.environmentInjector,t.directives,t.bindings)}function pB(e){let t=gt(e);if(!t)return null;let n=new mn(t);return{get selector(){return n.selector},get type(){return n.componentType},get inputs(){return n.inputs},get outputs(){return n.outputs},get ngContentSelectors(){return n.ngContentSelectors},get isStandalone(){return t.standalone},get isSignal(){return t.signals}}}var no={};lr(no,{appendToAll:()=>r2,createThemeStyles:()=>o2,merge:()=>n2,structuralStyles:()=>i2,toProp:()=>je});var t2=` &:not([disabled]) { cursor: pointer; opacity: var(--opacity, 0); @@ -11,10 +11,10 @@ ${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` &:focus { opacity: 1; } - }`,a1=` + }`,Qb=` ${new Array(21).fill(0).map((e,t)=>`.behavior-ho-${t*5} { --opacity: ${t/20}; - ${v2} + ${t2} }`).join(` `)} @@ -33,7 +33,7 @@ ${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` .behavior-sw-n { scrollbar-width: none; } -`;var c1=` +`;var Kb=` ${new Array(25).fill(0).map((e,t)=>` .border-bw-${t} { border-width: ${t}px; } .border-btw-${t} { border-top-width: ${t}px; } @@ -52,20 +52,20 @@ ${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` .border-bs-s { border-style: solid; } -`;var If=[0,5,10,15,20,25,30,35,40,50,60,70,80,90,95,98,99,100];function D2(...e){let t={};for(let n of e)for(let[r,o]of Object.entries(n)){let i=r.split("-").with(-1,"").join("-"),s=Object.keys(t).filter(u=>u.startsWith(i));for(let u of s)delete t[u];t[r]=o}return t}function E2(e,t,...n){let r=structuredClone(e);for(let o of n)for(let i of Object.keys(o)){let s=i.split("-").with(-1,"").join("-");for(let[u,a]of Object.entries(r)){if(t.includes(u))continue;let c=!1;for(let l=0;l` - ${e.map(t=>{let n=Tf(t);return`.color-bc-${t} { border-color: light-dark(var(${je(t)}), var(${je(n)})); }`}).join(` +`;var vf=[0,5,10,15,20,25,30,35,40,50,60,70,80,90,95,98,99,100];function n2(...e){let t={};for(let n of e)for(let[r,o]of Object.entries(n)){let i=r.split("-").with(-1,"").join("-"),s=Object.keys(t).filter(u=>u.startsWith(i));for(let u of s)delete t[u];t[r]=o}return t}function r2(e,t,...n){let r=structuredClone(e);for(let o of n)for(let i of Object.keys(o)){let s=i.split("-").with(-1,"").join("-");for(let[u,a]of Object.entries(r)){if(t.includes(u))continue;let c=!1;for(let l=0;l` + ${e.map(t=>{let n=Df(t);return`.color-bc-${t} { border-color: light-dark(var(${je(t)}), var(${je(n)})); }`}).join(` `)} - ${e.map(t=>{let n=Tf(t),r=[`.color-bgc-${t} { background-color: light-dark(var(${je(t)}), var(${je(n)})); }`,`.color-bbgc-${t}::backdrop { background-color: light-dark(var(${je(t)}), var(${je(n)})); }`];for(let o=.1;o<1;o+=.1)r.push(`.color-bbgc-${t}_${(o*100).toFixed(0)}::backdrop { + ${e.map(t=>{let n=Df(t),r=[`.color-bgc-${t} { background-color: light-dark(var(${je(t)}), var(${je(n)})); }`,`.color-bbgc-${t}::backdrop { background-color: light-dark(var(${je(t)}), var(${je(n)})); }`];for(let o=.1;o<1;o+=.1)r.push(`.color-bbgc-${t}_${(o*100).toFixed(0)}::backdrop { background-color: light-dark(oklch(from var(${je(t)}) l c h / calc(alpha * ${o.toFixed(1)})), oklch(from var(${je(n)}) l c h / calc(alpha * ${o.toFixed(1)})) ); } `);return r.join(` `)}).join(` `)} - ${e.map(t=>{let n=Tf(t);return`.color-c-${t} { color: light-dark(var(${je(t)}), var(${je(n)})); }`}).join(` + ${e.map(t=>{let n=Df(t);return`.color-c-${t} { color: light-dark(var(${je(t)}), var(${je(n)})); }`}).join(` `)} - `,Tf=e=>{let t=e.match(/^([a-z]+)(\d+)$/);if(!t)return e;let[,n,r]=t,i=100-parseInt(r,10),s=If.reduce((u,a)=>Math.abs(a-i)If.map(t=>`${e}${t}`),l1=[to(no("p")),to(no("s")),to(no("t")),to(no("n")),to(no("nv")),to(no("e")),` + `,Df=e=>{let t=e.match(/^([a-z]+)(\d+)$/);if(!t)return e;let[,n,r]=t,i=100-parseInt(r,10),s=vf.reduce((u,a)=>Math.abs(a-i)vf.map(t=>`${e}${t}`),Jb=[eo(to("p")),eo(to("s")),eo(to("t")),eo(to("n")),eo(to("nv")),eo(to("e")),` .color-bgc-transparent { background-color: transparent; } @@ -73,7 +73,7 @@ ${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` :host { color-scheme: var(--color-scheme); } - `];var d1=` + `];var Xb=` .g-icon { font-family: "Material Symbols Outlined", "Google Symbols"; font-weight: normal; @@ -107,7 +107,7 @@ ${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` "ROND" 100; } } -`;var f1=` +`;var e1=` :host { ${new Array(16).fill(0).map((e,t)=>`--g-${t+1}: ${(t+1)*4}px;`).join(` `)} @@ -281,10 +281,10 @@ ${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` width: calc(100% + var(--padding) * 2); height: calc(100% + var(--padding) * 2); } -`;var p1=` +`;var t1=` ${new Array(21).fill(0).map((e,t)=>`.opacity-el-${t*5} { opacity: ${t/20}; }`).join(` `)} -`;var h1=` +`;var n1=` :host { --default-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; --default-font-family-mono: "Courier New", Courier, monospace; @@ -418,9 +418,9 @@ ${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` ${new Array(9).fill(0).map((e,t)=>{let n=(t+1)*100;return`.typography-w-${n} { font-weight: ${n}; }`}).join(` `)} -`;var C2=[a1,c1,l1,d1,f1,p1,h1].flat(1/0).join(` -`);var Zf={};lr(Zf,{isComponentArrayReference:()=>Mf,isObject:()=>$,isPath:()=>Sf,isResolvedAudioPlayer:()=>Af,isResolvedButton:()=>Nf,isResolvedCard:()=>kf,isResolvedCheckbox:()=>Rf,isResolvedColumn:()=>Ff,isResolvedDateTimeInput:()=>Of,isResolvedDivider:()=>Pf,isResolvedIcon:()=>jf,isResolvedImage:()=>Lf,isResolvedList:()=>Bf,isResolvedModal:()=>Vf,isResolvedMultipleChoice:()=>Hf,isResolvedRow:()=>$f,isResolvedSlider:()=>Uf,isResolvedTabs:()=>zf,isResolvedText:()=>qf,isResolvedTextField:()=>Gf,isResolvedVideo:()=>Wf,isValueMap:()=>x2});function x2(e){return $(e)&&"key"in e}function Sf(e,t){return e==="path"&&typeof t=="string"}function $(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Mf(e){return $(e)?"explicitList"in e||"template"in e:!1}function zt(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="string"||"literalString"in e)}function I2(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="number"||"literalNumber"in e)}function T2(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="boolean"||"literalBoolean"in e)}function Ut(e){return!(!$(e)||!("id"in e&&"type"in e&&"properties"in e))}function Af(e){return $(e)&&"url"in e&&zt(e.url)}function Nf(e){return $(e)&&"child"in e&&Ut(e.child)&&"action"in e}function kf(e){return $(e)?"child"in e?Ut(e.child):"children"in e?Array.isArray(e.children)&&e.children.every(Ut):!1:!1}function Rf(e){return $(e)&&"label"in e&&zt(e.label)&&"value"in e&&T2(e.value)}function Ff(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Ut)}function Of(e){return $(e)&&"value"in e&&zt(e.value)}function Pf(e){return $(e)}function Lf(e){return $(e)&&"url"in e&&zt(e.url)}function jf(e){return $(e)&&"name"in e&&zt(e.name)}function Bf(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Ut)}function Vf(e){return $(e)&&"entryPointChild"in e&&Ut(e.entryPointChild)&&"contentChild"in e&&Ut(e.contentChild)}function Hf(e){return $(e)&&"selections"in e}function $f(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Ut)}function Uf(e){return $(e)&&"value"in e&&I2(e.value)}function S2(e){return $(e)&&"title"in e&&zt(e.title)&&"child"in e&&Ut(e.child)}function zf(e){return $(e)&&"tabItems"in e&&Array.isArray(e.tabItems)&&e.tabItems.every(S2)}function qf(e){return $(e)&&"text"in e&&zt(e.text)}function Gf(e){return $(e)&&"label"in e&&zt(e.label)}function Wf(e){return $(e)&&"url"in e&&zt(e.url)}var na=(()=>{class e{static{this.DEFAULT_SURFACE_ID="@default"}#t=Map;#n=Array;#o=Set;#e=Object;#r;constructor(n={mapCtor:Map,arrayCtor:Array,setCtor:Set,objCtor:Object}){this.opts=n,this.#n=n.arrayCtor,this.#t=n.mapCtor,this.#o=n.setCtor,this.#e=n.objCtor,this.#r=new n.mapCtor}getSurfaces(){return this.#r}clearSurfaces(){this.#r.clear()}processMessages(n){for(let r of n)r.beginRendering&&this.#g(r.beginRendering,r.beginRendering.surfaceId),r.surfaceUpdate&&this.#m(r.surfaceUpdate,r.surfaceUpdate.surfaceId),r.dataModelUpdate&&this.#y(r.dataModelUpdate,r.dataModelUpdate.surfaceId),r.deleteSurface&&this.#b(r.deleteSurface)}getData(n,r,o=e.DEFAULT_SURFACE_ID){let i=this.#i(o);if(!i)return null;let s;return r==="."||r===""?s=n.dataContextPath??"/":s=this.resolvePath(r,n.dataContextPath),this.#p(i.dataModel,s)}setData(n,r,o,i=e.DEFAULT_SURFACE_ID){if(!n){console.warn("No component node set");return}let s=this.#i(i);if(!s)return;let u;r==="."||r===""?u=n.dataContextPath??"/":u=this.resolvePath(r,n.dataContextPath),this.#a(s.dataModel,u,o)}resolvePath(n,r){return n.startsWith("/")?n:r&&r!=="/"?r.endsWith("/")?`${r}${n}`:`${r}/${n}`:`/${n}`}#d(n){if(typeof n!="string")return n;let r=n.trim();if(r.startsWith("{")&&r.endsWith("}")||r.startsWith("[")&&r.endsWith("]"))try{return JSON.parse(n)}catch(o){return console.warn(`Failed to parse potential JSON string: "${n.substring(0,50)}..."`,o),n}return n}#u(n){let r=new this.#t;for(let o of n){if(!$(o)||!("key"in o))continue;let i=o.key,s=this.#h(o);if(!s)continue;let u=o[s];s==="valueMap"&&Array.isArray(u)?u=this.#u(u):typeof u=="string"&&(u=this.#d(u)),this.#a(r,i,u)}return r}#a(n,r,o){if(Array.isArray(o)&&(o.length===0||$(o[0])&&"key"in o[0]))if(o.length===1&&$(o[0])&&o[0].key==="."){let c=o[0],l=this.#h(c);l?(o=c[l],l==="valueMap"&&Array.isArray(o)?o=this.#u(o):typeof o=="string"&&(o=this.#d(o))):o=this.#u(o)}else o=this.#u(o);let i=this.#f(r).split("/").filter(c=>c);if(i.length===0){if(o instanceof Map||$(o)){!(o instanceof Map)&&$(o)&&(o=new this.#t(Object.entries(o))),n.clear();for(let[c,l]of o.entries())n.set(c,l)}else console.error("Cannot set root of DataModel to a non-Map value.");return}let s=n;for(let c=0;ci.length>0).join("/")}#p(n,r){let o=this.#f(r).split("/").filter(s=>s),i=n;for(let s of o){if(i==null)return null;if(i instanceof Map)i=i.get(s);else if(Array.isArray(i)&&/^\d+$/.test(s))i=i[parseInt(s,10)];else if($(i))i=i[s];else return null}return i}#i(n){let r=this.#r.get(n);return r||(r=new this.#e({rootComponentId:null,componentTree:null,dataModel:new this.#t,components:new this.#t,styles:new this.#e}),this.#r.set(n,r)),r}#g(n,r){let o=this.#i(r);o.rootComponentId=n.root,o.styles=n.styles??{},this.#c(o)}#m(n,r){let o=this.#i(r);for(let i of n.components)o.components.set(i.id,i);this.#c(o)}#y(n,r){let o=this.#i(r),i=n.path??"/";this.#a(o.dataModel,i,n.contents),this.#c(o)}#b(n){this.#r.delete(n.surfaceId)}#c(n){if(!n.rootComponentId){n.componentTree=null;return}let r=new this.#o;n.componentTree=this.#s(n.rootComponentId,n,r,"/","")}#h(n){return Object.keys(n).find(r=>r.startsWith("value"))}#s(n,r,o,i,s=""){let u=`${n}${s}`,{components:a}=r;if(!a.has(n))return null;if(o.has(u))throw new Error(`Circular dependency for component "${u}".`);o.add(u);let c=a.get(n),l=c.component??{},d=Object.keys(l)[0],h=l[d],f=new this.#e;if($(h))for(let[g,m]of Object.entries(h))f[g]=this.#l(m,r,o,i,s);o.delete(u);let p={id:u,dataContextPath:i,weight:c.weight??"initial"};switch(d){case"Text":if(!qf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Text",properties:f}));case"Image":if(!Lf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Image",properties:f}));case"Icon":if(!jf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Icon",properties:f}));case"Video":if(!Wf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Video",properties:f}));case"AudioPlayer":if(!Af(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"AudioPlayer",properties:f}));case"Row":if(!$f(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Row",properties:f}));case"Column":if(!Ff(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Column",properties:f}));case"List":if(!Bf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"List",properties:f}));case"Card":if(!kf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Card",properties:f}));case"Tabs":if(!zf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Tabs",properties:f}));case"Divider":if(!Pf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Divider",properties:f}));case"Modal":if(!Vf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Modal",properties:f}));case"Button":if(!Nf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Button",properties:f}));case"CheckBox":if(!Rf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"CheckBox",properties:f}));case"TextField":if(!Gf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"TextField",properties:f}));case"DateTimeInput":if(!Of(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"DateTimeInput",properties:f}));case"MultipleChoice":if(!Hf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"MultipleChoice",properties:f}));case"Slider":if(!Uf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Slider",properties:f}));default:return new this.#e(P(S({},p),{type:d,properties:f}))}}#l(n,r,o,i,s=""){if(typeof n=="string"&&r.components.has(n))return this.#s(n,r,o,i,s);if(Mf(n)){if(n.explicitList)return n.explicitList.map(u=>this.#s(u,r,o,i,s));if(n.template){let u=this.resolvePath(n.template.dataBinding,i),a=this.#p(r.dataModel,u),c=n.template;if(Array.isArray(a))return a.map((d,h)=>{let g=`:${[...i.split("/").filter(y=>/^\d+$/.test(y)),h].join(":")}`,m=`${u}/${h}`;return this.#s(c.componentId,r,o,m,g)});let l=this.#t;return a instanceof l?Array.from(a.keys(),d=>{let h=`:${d}`,f=`${u}/${d}`;return this.#s(c.componentId,r,o,f,h)}):new this.#n}}if(Array.isArray(n))return n.map(u=>this.#l(u,r,o,i,s));if($(n)){let u=new this.#e;for(let[a,c]of Object.entries(n)){let l=c;if(Sf(a,c)&&i!=="/"){l=c.replace(/^\.?\/item/,"").replace(/^\.?\/text/,"").replace(/^\.?\/label/,"").replace(/^\.?\//,""),u[a]=l;continue}u[a]=this.#l(l,r,o,i,s)}return u}return n}}return e})();var M2=Object.defineProperty,A2=(e,t,n)=>t in e?M2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Yf=(e,t,n)=>(A2(e,typeof t!="symbol"?t+"":t,n),n),N2=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},Qf=(e,t)=>{if(Object(t)!==t)throw TypeError('Cannot use the "in" operator on this value');return e.has(t)},ra=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},g1=(e,t,n)=>(N2(e,t,"access private method"),n);function m1(e,t){return Object.is(e,t)}var se=null,_i=!1,oa=1,ia=Symbol("SIGNAL");function oo(e){let t=se;return se=e,t}function k2(){return se}function R2(){return _i}var tp={version:0,lastCleanEpoch:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function ua(e){if(_i)throw new Error("");if(se===null)return;se.consumerOnSignalRead(e);let t=se.nextProducerIndex++;if(io(se),te.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}function B2(e){io(e);for(let t=0;t0}function io(e){e.producerNode??(e.producerNode=[]),e.producerIndexOfThis??(e.producerIndexOfThis=[]),e.producerLastReadVersion??(e.producerLastReadVersion=[])}function np(e){e.liveConsumerNode??(e.liveConsumerNode=[]),e.liveConsumerIndexOfThis??(e.liveConsumerIndexOfThis=[])}function D1(e){if(y1(e),ua(e),e.value===ep)throw e.error;return e.value}function V2(e){let t=Object.create(H2);t.computation=e;let n=()=>D1(t);return n[ia]=t,n}var Kf=Symbol("UNSET"),Jf=Symbol("COMPUTING"),ep=Symbol("ERRORED"),H2=P(S({},tp),{value:Kf,dirty:!0,error:null,equal:m1,producerMustRecompute(e){return e.value===Kf||e.value===Jf},producerRecomputeValue(e){if(e.value===Jf)throw new Error("Detected cycle in computations.");let t=e.value;e.value=Jf;let n=L2(e),r,o=!1;try{r=e.computation.call(e.wrapper),o=t!==Kf&&t!==ep&&e.equal.call(e.wrapper,t,r)}catch(i){r=ep,e.error=i}finally{j2(e,n)}if(o){e.value=t;return}e.value=r,e.version++}});function $2(){throw new Error}var U2=$2;function z2(){U2()}function q2(e){let t=Object.create(Z2);t.value=e;let n=()=>(ua(t),t.value);return n[ia]=t,n}function G2(){return ua(this),this.value}function W2(e,t){O2()||z2(),e.equal.call(e.wrapper,e.value,t)||(e.value=t,Y2(e))}var Z2=P(S({},tp),{equal:m1,value:void 0});function Y2(e){e.version++,F2(),b1(e)}var pe=Symbol("node"),sa;(e=>{var t,n,r,o,i,s;class u{constructor(l,d={}){ra(this,n),Yf(this,t);let f=q2(l)[ia];if(this[pe]=f,f.wrapper=this,d){let p=d.equals;p&&(f.equal=p),f.watched=d[e.subtle.watched],f.unwatched=d[e.subtle.unwatched]}}get(){if(!(0,e.isState)(this))throw new TypeError("Wrong receiver type for Signal.State.prototype.get");return G2.call(this[pe])}set(l){if(!(0,e.isState)(this))throw new TypeError("Wrong receiver type for Signal.State.prototype.set");if(R2())throw new Error("Writes to signals not permitted during Watcher callback");let d=this[pe];W2(d,l)}}t=pe,n=new WeakSet,r=function(){},e.isState=c=>typeof c=="object"&&Qf(n,c),e.State=u;class a{constructor(l,d){ra(this,i),Yf(this,o);let f=V2(l)[ia];if(f.consumerAllowSignalWrites=!0,this[pe]=f,f.wrapper=this,d){let p=d.equals;p&&(f.equal=p),f.watched=d[e.subtle.watched],f.unwatched=d[e.subtle.unwatched]}}get(){if(!(0,e.isComputed)(this))throw new TypeError("Wrong receiver type for Signal.Computed.prototype.get");return D1(this[pe])}}o=pe,i=new WeakSet,s=function(){},e.isComputed=c=>typeof c=="object"&&Qf(i,c),e.Computed=a,(c=>{var l,d,h,f,p;function g(E){let N,O=null;try{O=oo(null),N=E()}finally{oo(O)}return N}c.untrack=g;function m(E){var N;if(!(0,e.isComputed)(E)&&!(0,e.isWatcher)(E))throw new TypeError("Called introspectSources without a Computed or Watcher argument");return((N=E[pe].producerNode)==null?void 0:N.map(O=>O.wrapper))??[]}c.introspectSources=m;function y(E){var N;if(!(0,e.isComputed)(E)&&!(0,e.isState)(E))throw new TypeError("Called introspectSinks without a Signal argument");return((N=E[pe].liveConsumerNode)==null?void 0:N.map(O=>O.wrapper))??[]}c.introspectSinks=y;function v(E){if(!(0,e.isComputed)(E)&&!(0,e.isState)(E))throw new TypeError("Called hasSinks without a Signal argument");let N=E[pe].liveConsumerNode;return N?N.length>0:!1}c.hasSinks=v;function w(E){if(!(0,e.isComputed)(E)&&!(0,e.isWatcher)(E))throw new TypeError("Called hasSources without a Computed or Watcher argument");let N=E[pe].producerNode;return N?N.length>0:!1}c.hasSources=w;class D{constructor(N){ra(this,d),ra(this,f),Yf(this,l);let O=Object.create(tp);O.wrapper=this,O.consumerMarkedDirty=N,O.consumerIsAlwaysLive=!0,O.consumerAllowSignalWrites=!1,O.producerNode=[],this[pe]=O}watch(...N){if(!(0,e.isWatcher)(this))throw new TypeError("Called unwatch without Watcher receiver");g1(this,f,p).call(this,N);let O=this[pe];O.dirty=!1;let J=oo(O);for(let ut of N)ua(ut[pe]);oo(J)}unwatch(...N){if(!(0,e.isWatcher)(this))throw new TypeError("Called unwatch without Watcher receiver");g1(this,f,p).call(this,N);let O=this[pe];io(O);for(let J=O.producerNode.length-1;J>=0;J--)if(N.includes(O.producerNode[J].wrapper)){aa(O.producerNode[J],O.producerIndexOfThis[J]);let ut=O.producerNode.length-1;if(O.producerNode[J]=O.producerNode[ut],O.producerIndexOfThis[J]=O.producerIndexOfThis[ut],O.producerNode.length--,O.producerIndexOfThis.length--,O.nextProducerIndex--,JO.dirty).map(O=>O.wrapper)}}l=pe,d=new WeakSet,h=function(){},f=new WeakSet,p=function(E){for(let N of E)if(!(0,e.isComputed)(N)&&!(0,e.isState)(N))throw new TypeError("Called watch/unwatch without a Computed or State argument")},e.isWatcher=E=>Qf(d,E),c.Watcher=D;function F(){var E;return(E=k2())==null?void 0:E.wrapper}c.currentComputed=F,c.watched=Symbol("watched"),c.unwatched=Symbol("unwatched")})(e.subtle||(e.subtle={}))})(sa||(sa={}));var qe=(e=null)=>new sa.State(e,{equals:()=>!1});var Q2=new Set([Symbol.iterator,"concat","entries","every","filter","find","findIndex","flat","flatMap","forEach","includes","indexOf","join","keys","lastIndexOf","map","reduce","reduceRight","slice","some","values"]),K2=new Set(["fill","push","unshift"]);function E1(e){if(typeof e=="symbol")return null;let t=Number(e);return isNaN(t)?null:t%1===0?t:null}var Ci=class e{static from(t,n,r){return n?new e(Array.from(t,n,r)):new e(Array.from(t))}static of(...t){return new e(t)}constructor(t=[]){let n=t.slice(),r=this,o=new Map,i=!1;return new Proxy(n,{get(s,u){let a=E1(u);if(a!==null)return r.#o(a),r.#t.get(),s[a];if(u==="length")return i?i=!1:r.#t.get(),s[u];if(K2.has(u)&&(i=!0),Q2.has(u)){let c=o.get(u);return c===void 0&&(c=(...l)=>(r.#t.get(),s[u](...l)),o.set(u,c)),c}return s[u]},set(s,u,a){s[u]=a;let c=E1(u);return c!==null?(r.#e(c),r.#t.set(null)):u==="length"&&r.#t.set(null),!0},getPrototypeOf(){return e.prototype}})}#t=qe();#n=new Map;#o(t){let n=this.#n.get(t);n===void 0&&(n=qe(),this.#n.set(t,n)),n.get()}#e(t){let n=this.#n.get(t);n&&n.set(null)}};Object.setPrototypeOf(Ci.prototype,Array.prototype);var wi=class{collection=qe();storages=new Map;vals;readStorageFor(t){let{storages:n}=this,r=n.get(t);r===void 0&&(r=qe(),n.set(t,r)),r.get()}dirtyStorageFor(t){let n=this.storages.get(t);n&&n.set(null)}constructor(t){this.vals=t?new Map(t):new Map}get(t){return this.readStorageFor(t),this.vals.get(t)}has(t){return this.readStorageFor(t),this.vals.has(t)}entries(){return this.collection.get(),this.vals.entries()}keys(){return this.collection.get(),this.vals.keys()}values(){return this.collection.get(),this.vals.values()}forEach(t){this.collection.get(),this.vals.forEach(t)}get size(){return this.collection.get(),this.vals.size}[Symbol.iterator](){return this.collection.get(),this.vals[Symbol.iterator]()}get[Symbol.toStringTag](){return this.vals[Symbol.toStringTag]}set(t,n){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.set(t,n),this}delete(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.delete(t)}clear(){this.storages.forEach(t=>t.set(null)),this.collection.set(null),this.vals.clear()}};Object.setPrototypeOf(wi.prototype,Map.prototype);var rp=class e{static fromEntries(t){return new e(Object.fromEntries(t))}#t=new Map;#n=qe();constructor(t={}){let n=Object.getPrototypeOf(t),r=Object.getOwnPropertyDescriptors(t),o=Object.create(n);for(let s in r)Object.defineProperty(o,s,r[s]);let i=this;return new Proxy(o,{get(s,u,a){return i.#o(u),Reflect.get(s,u,a)},has(s,u){return i.#o(u),u in s},ownKeys(s){return i.#n.get(),Reflect.ownKeys(s)},set(s,u,a,c){let l=Reflect.set(s,u,a,c);return i.#e(u),i.#r(),l},deleteProperty(s,u){return u in s&&(delete s[u],i.#e(u),i.#r()),!0},getPrototypeOf(){return e.prototype}})}#o(t){let n=this.#t.get(t);n===void 0&&(n=qe(),this.#t.set(t,n)),n.get()}#e(t){let n=this.#t.get(t);n&&n.set(null)}#r(){this.#n.set(null)}},_1=rp;var xi=class{collection=qe();storages=new Map;vals;storageFor(t){let n=this.storages,r=n.get(t);return r===void 0&&(r=qe(),n.set(t,r)),r}dirtyStorageFor(t){let n=this.storages.get(t);n&&n.set(null)}constructor(t){this.vals=new Set(t)}has(t){return this.storageFor(t).get(),this.vals.has(t)}entries(){return this.collection.get(),this.vals.entries()}keys(){return this.collection.get(),this.vals.keys()}values(){return this.collection.get(),this.vals.values()}forEach(t){this.collection.get(),this.vals.forEach(t)}get size(){return this.collection.get(),this.vals.size}[Symbol.iterator](){return this.collection.get(),this.vals[Symbol.iterator]()}get[Symbol.toStringTag](){return this.vals[Symbol.toStringTag]}add(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.add(t),this}delete(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.delete(t)}clear(){this.storages.forEach(t=>t.set(null)),this.collection.set(null),this.vals.clear()}};Object.setPrototypeOf(xi.prototype,Set.prototype);function C1(){return new na({arrayCtor:Ci,mapCtor:wi,objCtor:_1,setCtor:xi})}var w1={createSignalA2uiMessageProcessor:C1,A2uiMessageProcessor:na,Guards:Zf};var Ii=class{_doc;constructor(t){this._doc=t}manager},ca=(()=>{class e extends Ii{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o,i){return n.addEventListener(r,o,i),()=>this.removeEventListener(n,r,o,i)}removeEventListener(n,r,o,i){return n.removeEventListener(r,o,i)}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),fa=new x(""),up=(()=>{class e{_zone;_plugins;_eventNameToPlugin=new Map;constructor(n,r){this._zone=r,n.forEach(s=>{s.manager=this});let o=n.filter(s=>!(s instanceof ca));this._plugins=o.slice().reverse();let i=n.find(s=>s instanceof ca);i&&this._plugins.push(i)}addEventListener(n,r,o,i){return this._findPluginFor(r).addEventListener(n,r,o,i)}getZone(){return this._zone}_findPluginFor(n){let r=this._eventNameToPlugin.get(n);if(r)return r;if(r=this._plugins.find(i=>i.supports(n)),!r)throw new _(5101,!1);return this._eventNameToPlugin.set(n,r),r}static \u0275fac=function(r){return new(r||e)(A(fa),A(be))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),op="ng-app-id";function x1(e){for(let t of e)t.remove()}function I1(e,t){let n=t.createElement("style");return n.textContent=e,n}function J2(e,t,n,r){let o=e.head?.querySelectorAll(`style[${op}="${t}"],link[${op}="${t}"]`);if(o)for(let i of o)i.removeAttribute(op),i instanceof HTMLLinkElement?r.set(i.href.slice(i.href.lastIndexOf("/")+1),{usage:0,elements:[i]}):i.textContent&&n.set(i.textContent,{usage:0,elements:[i]})}function sp(e,t){let n=t.createElement("link");return n.setAttribute("rel","stylesheet"),n.setAttribute("href",e),n}var ap=(()=>{class e{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;constructor(n,r,o,i={}){this.doc=n,this.appId=r,this.nonce=o,J2(n,r,this.inline,this.external),this.hosts.add(n.head)}addStyles(n,r){for(let o of n)this.addUsage(o,this.inline,I1);r?.forEach(o=>this.addUsage(o,this.external,sp))}removeStyles(n,r){for(let o of n)this.removeUsage(o,this.inline);r?.forEach(o=>this.removeUsage(o,this.external))}addUsage(n,r,o){let i=r.get(n);i?i.usage++:r.set(n,{usage:1,elements:[...this.hosts].map(s=>this.addElement(s,o(n,this.doc)))})}removeUsage(n,r){let o=r.get(n);o&&(o.usage--,o.usage<=0&&(x1(o.elements),r.delete(n)))}ngOnDestroy(){for(let[,{elements:n}]of[...this.inline,...this.external])x1(n);this.hosts.clear()}addHost(n){this.hosts.add(n);for(let[r,{elements:o}]of this.inline)o.push(this.addElement(n,I1(r,this.doc)));for(let[r,{elements:o}]of this.external)o.push(this.addElement(n,sp(r,this.doc)))}removeHost(n){this.hosts.delete(n)}addElement(n,r){return this.nonce&&r.setAttribute("nonce",this.nonce),n.appendChild(r)}static \u0275fac=function(r){return new(r||e)(A(K),A(gu),A(yu,8),A(Xn))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),ip={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/Math/MathML"},cp=/%COMP%/g;var S1="%COMP%",X2=`_nghost-${S1}`,eT=`_ngcontent-${S1}`,tT=!0,nT=new x("",{factory:()=>tT});function rT(e){return eT.replace(cp,e)}function oT(e){return X2.replace(cp,e)}function M1(e,t){return t.map(n=>n.replace(cp,e))}var lp=(()=>{class e{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;ngZone;nonce;tracingService;rendererByCompId=new Map;defaultRenderer;constructor(n,r,o,i,s,u,a=null,c=null){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.removeStylesOnCompDestroy=i,this.doc=s,this.ngZone=u,this.nonce=a,this.tracingService=c,this.defaultRenderer=new Ti(n,s,u,this.tracingService)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;let o=this.getOrCreateRenderer(n,r);return o instanceof da?o.applyToHost(n):o instanceof Si&&o.applyStyles(),o}getOrCreateRenderer(n,r){let o=this.rendererByCompId,i=o.get(r.id);if(!i){let s=this.doc,u=this.ngZone,a=this.eventManager,c=this.sharedStylesHost,l=this.removeStylesOnCompDestroy,d=this.tracingService;switch(r.encapsulation){case tt.Emulated:i=new da(a,c,r,this.appId,l,s,u,d);break;case tt.ShadowDom:return new la(a,n,r,s,u,this.nonce,d,c);case tt.ExperimentalIsolatedShadowDom:return new la(a,n,r,s,u,this.nonce,d);default:i=new Si(a,c,r,l,s,u,d);break}o.set(r.id,i)}return i}ngOnDestroy(){this.rendererByCompId.clear()}componentReplaced(n){this.rendererByCompId.delete(n)}static \u0275fac=function(r){return new(r||e)(A(up),A(ap),A(gu),A(nT),A(K),A(be),A(yu),A(Dt,8))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),Ti=class{eventManager;doc;ngZone;tracingService;data=Object.create(null);throwOnSyntheticProps=!0;constructor(t,n,r,o){this.eventManager=t,this.doc=n,this.ngZone=r,this.tracingService=o}destroy(){}destroyNode=null;createElement(t,n){return n?this.doc.createElementNS(ip[n]||n,t):this.doc.createElement(t)}createComment(t){return this.doc.createComment(t)}createText(t){return this.doc.createTextNode(t)}appendChild(t,n){(T1(t)?t.content:t).appendChild(n)}insertBefore(t,n,r){t&&(T1(t)?t.content:t).insertBefore(n,r)}removeChild(t,n){n.remove()}selectRootElement(t,n){let r=typeof t=="string"?this.doc.querySelector(t):t;if(!r)throw new _(-5104,!1);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;let i=ip[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){let o=ip[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&(nt.DashCase|nt.Important)?t.style.setProperty(n,r,o&nt.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&nt.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t!=null&&(t[n]=r)}setValue(t,n){t.nodeValue=n}listen(t,n,r,o){if(typeof t=="string"&&(t=Et().getGlobalEventTarget(this.doc,t),!t))throw new _(5102,!1);let i=this.decoratePreventDefault(r);return this.tracingService?.wrapEventListener&&(i=this.tracingService.wrapEventListener(t,n,i)),this.eventManager.addEventListener(t,n,i,o)}decoratePreventDefault(t){return n=>{if(n==="__ngUnwrap__")return t;t(n)===!1&&n.preventDefault()}}};function T1(e){return e.tagName==="TEMPLATE"&&e.content!==void 0}var la=class extends Ti{hostEl;sharedStylesHost;shadowRoot;constructor(t,n,r,o,i,s,u,a){super(t,o,i,u),this.hostEl=n,this.sharedStylesHost=a,this.shadowRoot=n.attachShadow({mode:"open"}),this.sharedStylesHost&&this.sharedStylesHost.addHost(this.shadowRoot);let c=r.styles;c=M1(r.id,c);for(let d of c){let h=document.createElement("style");s&&h.setAttribute("nonce",s),h.textContent=d,this.shadowRoot.appendChild(h)}let l=r.getExternalStyles?.();if(l)for(let d of l){let h=sp(d,o);s&&h.setAttribute("nonce",s),this.shadowRoot.appendChild(h)}}nodeOrShadowRoot(t){return t===this.hostEl?this.shadowRoot:t}appendChild(t,n){return super.appendChild(this.nodeOrShadowRoot(t),n)}insertBefore(t,n,r){return super.insertBefore(this.nodeOrShadowRoot(t),n,r)}removeChild(t,n){return super.removeChild(null,n)}parentNode(t){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(t)))}destroy(){this.sharedStylesHost&&this.sharedStylesHost.removeHost(this.shadowRoot)}},Si=class extends Ti{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;constructor(t,n,r,o,i,s,u,a){super(t,i,s,u),this.sharedStylesHost=n,this.removeStylesOnCompDestroy=o;let c=r.styles;this.styles=a?M1(a,c):c,this.styleUrls=r.getExternalStyles?.(a)}applyStyles(){this.sharedStylesHost.addStyles(this.styles,this.styleUrls)}destroy(){this.removeStylesOnCompDestroy&&Qn.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},da=class extends Si{contentAttr;hostAttr;constructor(t,n,r,o,i,s,u,a){let c=o+"-"+r.id;super(t,n,r,i,s,u,a,c),this.contentAttr=rT(c),this.hostAttr=oT(c)}applyToHost(t){this.applyStyles(),this.setAttribute(t,this.hostAttr,"")}createElement(t,n){let r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}};var pa=class e extends Di{supportsDOMEvents=!0;static makeCurrent(){vf(new e)}onAndCancel(t,n,r,o){return t.addEventListener(n,r,o),()=>{t.removeEventListener(n,r,o)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.remove()}createElement(t,n){return n=n||this.getDefaultDocument(),n.createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return n==="window"?window:n==="document"?t:n==="body"?t.body:null}getBaseHref(t){let n=iT();return n==null?null:sT(n)}resetBaseElement(){Mi=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return Ei(document.cookie,t)}},Mi=null;function iT(){return Mi=Mi||document.head.querySelector("base"),Mi?Mi.getAttribute("href"):null}function sT(e){return new URL(e,document.baseURI).pathname}var ha=class{addToWindow(t){xe.getAngularTestability=(r,o=!0)=>{let i=t.findTestabilityInTree(r,o);if(i==null)throw new _(5103,!1);return i},xe.getAllAngularTestabilities=()=>t.getAllTestabilities(),xe.getAllAngularRootElements=()=>t.getAllRootElements();let n=r=>{let o=xe.getAllAngularTestabilities(),i=o.length,s=function(){i--,i==0&&r()};o.forEach(u=>{u.whenStable(s)})};xe.frameworkStabilizers||(xe.frameworkStabilizers=[]),xe.frameworkStabilizers.push(n)}findTestabilityInTree(t,n,r){if(n==null)return null;let o=t.getTestability(n);return o??(r?Et().isShadowRoot(n)?this.findTestabilityInTree(t,n.host,!0):this.findTestabilityInTree(t,n.parentElement,!0):null)}},uT=(()=>{class e{build(){return new XMLHttpRequest}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),A1=["alt","control","meta","shift"],aT={"\b":"Backspace"," ":"Tab","\x7F":"Delete","\x1B":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},cT={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},N1=(()=>{class e extends Ii{constructor(n){super(n)}supports(n){return e.parseEventName(n)!=null}addEventListener(n,r,o,i){let s=e.parseEventName(r),u=e.eventCallback(s.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Et().onAndCancel(n,s.domEventName,u,i))}static parseEventName(n){let r=n.toLowerCase().split("."),o=r.shift();if(r.length===0||!(o==="keydown"||o==="keyup"))return null;let i=e._normalizeKey(r.pop()),s="",u=r.indexOf("code");if(u>-1&&(r.splice(u,1),s="code."),A1.forEach(c=>{let l=r.indexOf(c);l>-1&&(r.splice(l,1),s+=c+".")}),s+=i,r.length!=0||i.length===0)return null;let a={};return a.domEventName=o,a.fullKey=s,a}static matchEventFullKeyCode(n,r){let o=aT[n.key]||n.key,i="";return r.indexOf("code.")>-1&&(o=n.code,i="code."),o==null||!o?!1:(o=o.toLowerCase(),o===" "?o="space":o==="."&&(o="dot"),A1.forEach(s=>{if(s!==o){let u=cT[s];u(n)&&(i+=s+".")}}),i+=o,i===r)}static eventCallback(n,r,o){return i=>{e.matchEventFullKeyCode(i,n)&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){return n==="esc"?"escape":n}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})();function lT(e,t,n){return at(this,null,function*(){let r=S({rootComponent:e},dT(t,n));return Zb(r)})}function dT(e,t){return{platformRef:t?.platformRef,appProviders:[...k1,...e?.providers??[]],platformProviders:gT}}function fT(){pa.makeCurrent()}function pT(){return new Ve}function hT(){return cd(document),document}var gT=[{provide:Xn,useValue:xf},{provide:mu,useValue:fT,multi:!0},{provide:K,useFactory:hT}];var mT=[{provide:Fu,useClass:ha},{provide:Ru,useClass:hi},{provide:hi,useClass:hi}],k1=[{provide:Lo,useValue:"root"},{provide:Ve,useFactory:pT},{provide:fa,useClass:ca,multi:!0},{provide:fa,useClass:N1,multi:!0},lp,ap,up,{provide:Kn,useExisting:lp},{provide:tr,useClass:uT},[]],yT=(()=>{class e{constructor(){}static \u0275fac=function(r){return new(r||e)};static \u0275mod=$t({type:e});static \u0275inj=ht({providers:[...k1,...mT],imports:[Cf,Wb]})}return e})();var Dn=class e{headers;normalizedNames=new Map;lazyInit;lazyUpdate=null;constructor(t){t?typeof t=="string"?this.lazyInit=()=>{this.headers=new Map,t.split(` -`).forEach(n=>{let r=n.indexOf(":");if(r>0){let o=n.slice(0,r),i=n.slice(r+1).trim();this.addHeaderEntry(o,i)}})}:typeof Headers<"u"&&t instanceof Headers?(this.headers=new Map,t.forEach((n,r)=>{this.addHeaderEntry(r,n)})):this.lazyInit=()=>{this.headers=new Map,Object.entries(t).forEach(([n,r])=>{this.setHeaderEntries(n,r)})}:this.headers=new Map}has(t){return this.init(),this.headers.has(t.toLowerCase())}get(t){this.init();let n=this.headers.get(t.toLowerCase());return n&&n.length>0?n[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(t){return this.init(),this.headers.get(t.toLowerCase())||null}append(t,n){return this.clone({name:t,value:n,op:"a"})}set(t,n){return this.clone({name:t,value:n,op:"s"})}delete(t,n){return this.clone({name:t,value:n,op:"d"})}maybeSetNormalizedName(t,n){this.normalizedNames.has(n)||this.normalizedNames.set(n,t)}init(){this.lazyInit&&(this.lazyInit instanceof e?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(t=>this.applyUpdate(t)),this.lazyUpdate=null))}copyFrom(t){t.init(),Array.from(t.headers.keys()).forEach(n=>{this.headers.set(n,t.headers.get(n)),this.normalizedNames.set(n,t.normalizedNames.get(n))})}clone(t){let n=new e;return n.lazyInit=this.lazyInit&&this.lazyInit instanceof e?this.lazyInit:this,n.lazyUpdate=(this.lazyUpdate||[]).concat([t]),n}applyUpdate(t){let n=t.name.toLowerCase();switch(t.op){case"a":case"s":let r=t.value;if(typeof r=="string"&&(r=[r]),r.length===0)return;this.maybeSetNormalizedName(t.name,n);let o=(t.op==="a"?this.headers.get(n):void 0)||[];o.push(...r),this.headers.set(n,o);break;case"d":let i=t.value;if(!i)this.headers.delete(n),this.normalizedNames.delete(n);else{let s=this.headers.get(n);if(!s)return;s=s.filter(u=>i.indexOf(u)===-1),s.length===0?(this.headers.delete(n),this.normalizedNames.delete(n)):this.headers.set(n,s)}break}}addHeaderEntry(t,n){let r=t.toLowerCase();this.maybeSetNormalizedName(t,r),this.headers.has(r)?this.headers.get(r).push(n):this.headers.set(r,[n])}setHeaderEntries(t,n){let r=(Array.isArray(n)?n:[n]).map(i=>i.toString()),o=t.toLowerCase();this.headers.set(o,r),this.maybeSetNormalizedName(t,o)}forEach(t){this.init(),Array.from(this.normalizedNames.keys()).forEach(n=>t(this.normalizedNames.get(n),this.headers.get(n)))}};var ma=class{map=new Map;set(t,n){return this.map.set(t,n),this}get(t){return this.map.has(t)||this.map.set(t,t.defaultValue()),this.map.get(t)}delete(t){return this.map.delete(t),this}has(t){return this.map.has(t)}keys(){return this.map.keys()}},ya=class{encodeKey(t){return R1(t)}encodeValue(t){return R1(t)}decodeKey(t){return decodeURIComponent(t)}decodeValue(t){return decodeURIComponent(t)}};function bT(e,t){let n=new Map;return e.length>0&&e.replace(/^\?/,"").split("&").forEach(o=>{let i=o.indexOf("="),[s,u]=i==-1?[t.decodeKey(o),""]:[t.decodeKey(o.slice(0,i)),t.decodeValue(o.slice(i+1))],a=n.get(s)||[];a.push(u),n.set(s,a)}),n}var vT=/%(\d[a-f0-9])/gi,DT={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function R1(e){return encodeURIComponent(e).replace(vT,(t,n)=>DT[n]??t)}function ga(e){return`${e}`}var qt=class e{map;encoder;updates=null;cloneFrom=null;constructor(t={}){if(this.encoder=t.encoder||new ya,t.fromString){if(t.fromObject)throw new _(2805,!1);this.map=bT(t.fromString,this.encoder)}else t.fromObject?(this.map=new Map,Object.keys(t.fromObject).forEach(n=>{let r=t.fromObject[n],o=Array.isArray(r)?r.map(ga):[ga(r)];this.map.set(n,o)})):this.map=null}has(t){return this.init(),this.map.has(t)}get(t){this.init();let n=this.map.get(t);return n?n[0]:null}getAll(t){return this.init(),this.map.get(t)||null}keys(){return this.init(),Array.from(this.map.keys())}append(t,n){return this.clone({param:t,value:n,op:"a"})}appendAll(t){let n=[];return Object.keys(t).forEach(r=>{let o=t[r];Array.isArray(o)?o.forEach(i=>{n.push({param:r,value:i,op:"a"})}):n.push({param:r,value:o,op:"a"})}),this.clone(n)}set(t,n){return this.clone({param:t,value:n,op:"s"})}delete(t,n){return this.clone({param:t,value:n,op:"d"})}toString(){return this.init(),this.keys().map(t=>{let n=this.encoder.encodeKey(t);return this.map.get(t).map(r=>n+"="+this.encoder.encodeValue(r)).join("&")}).filter(t=>t!=="").join("&")}clone(t){let n=new e({encoder:this.encoder});return n.cloneFrom=this.cloneFrom||this,n.updates=(this.updates||[]).concat(t),n}init(){this.map===null&&(this.map=new Map),this.cloneFrom!==null&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(t=>this.map.set(t,this.cloneFrom.map.get(t))),this.updates.forEach(t=>{switch(t.op){case"a":case"s":let n=(t.op==="a"?this.map.get(t.param):void 0)||[];n.push(ga(t.value)),this.map.set(t.param,n);break;case"d":if(t.value!==void 0){let r=this.map.get(t.param)||[],o=r.indexOf(ga(t.value));o!==-1&&r.splice(o,1),r.length>0?this.map.set(t.param,r):this.map.delete(t.param)}else{this.map.delete(t.param);break}}}),this.cloneFrom=this.updates=null)}};function ET(e){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}function F1(e){return typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer}function O1(e){return typeof Blob<"u"&&e instanceof Blob}function P1(e){return typeof FormData<"u"&&e instanceof FormData}function _T(e){return typeof URLSearchParams<"u"&&e instanceof URLSearchParams}var L1="Content-Type",j1="Accept",V1="text/plain",H1="application/json",CT=`${H1}, ${V1}, */*`,so=class e{url;body=null;headers;context;reportProgress=!1;withCredentials=!1;credentials;keepalive=!1;cache;priority;mode;redirect;referrer;integrity;referrerPolicy;responseType="json";method;params;urlWithParams;transferCache;timeout;constructor(t,n,r,o){this.url=n,this.method=t.toUpperCase();let i;if(ET(this.method)||o?(this.body=r!==void 0?r:null,i=o):i=r,i){if(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,this.keepalive=!!i.keepalive,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.context&&(this.context=i.context),i.params&&(this.params=i.params),i.priority&&(this.priority=i.priority),i.cache&&(this.cache=i.cache),i.credentials&&(this.credentials=i.credentials),typeof i.timeout=="number"){if(i.timeout<1||!Number.isInteger(i.timeout))throw new _(2822,"");this.timeout=i.timeout}i.mode&&(this.mode=i.mode),i.redirect&&(this.redirect=i.redirect),i.integrity&&(this.integrity=i.integrity),i.referrer&&(this.referrer=i.referrer),i.referrerPolicy&&(this.referrerPolicy=i.referrerPolicy),this.transferCache=i.transferCache}if(this.headers??=new Dn,this.context??=new ma,!this.params)this.params=new qt,this.urlWithParams=n;else{let s=this.params.toString();if(s.length===0)this.urlWithParams=n;else{let u=n.indexOf("?"),a=u===-1?"?":uE.set(N,t.setHeaders[N]),w)),t.setParams&&(D=Object.keys(t.setParams).reduce((E,N)=>E.set(N,t.setParams[N]),D)),new e(n,r,m,{params:D,headers:w,context:F,reportProgress:v,responseType:o,withCredentials:y,transferCache:p,keepalive:i,cache:u,priority:s,timeout:g,mode:a,redirect:c,credentials:l,referrer:d,integrity:h,referrerPolicy:f})}},nr=(function(e){return e[e.Sent=0]="Sent",e[e.UploadProgress=1]="UploadProgress",e[e.ResponseHeader=2]="ResponseHeader",e[e.DownloadProgress=3]="DownloadProgress",e[e.Response=4]="Response",e[e.User=5]="User",e})(nr||{}),ao=class{headers;status;statusText;url;ok;type;redirected;responseType;constructor(t,n=200,r="OK"){this.headers=t.headers||new Dn,this.status=t.status!==void 0?t.status:n,this.statusText=t.statusText||r,this.url=t.url||null,this.redirected=t.redirected,this.responseType=t.responseType,this.ok=this.status>=200&&this.status<300}},ba=class e extends ao{constructor(t={}){super(t)}type=nr.ResponseHeader;clone(t={}){return new e({headers:t.headers||this.headers,status:t.status!==void 0?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}},Ai=class e extends ao{body;constructor(t={}){super(t),this.body=t.body!==void 0?t.body:null}type=nr.Response;clone(t={}){return new e({body:t.body!==void 0?t.body:this.body,headers:t.headers||this.headers,status:t.status!==void 0?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0,redirected:t.redirected??this.redirected,responseType:t.responseType??this.responseType})}},uo=class extends ao{name="HttpErrorResponse";message;error;ok=!1;constructor(t){super(t,0,"Unknown Error"),this.status>=200&&this.status<300?this.message=`Http failure during parsing for ${t.url||"(unknown url)"}`:this.message=`Http failure response for ${t.url||"(unknown url)"}: ${t.status} ${t.statusText}`,this.error=t.error||null}},wT=200,xT=204;var IT=new x("");var TT=/^\)\]\}',?\n/;var fp=(()=>{class e{xhrFactory;tracingService=b(Dt,{optional:!0});constructor(n){this.xhrFactory=n}maybePropagateTrace(n){return this.tracingService?.propagate?this.tracingService.propagate(n):n}handle(n){if(n.method==="JSONP")throw new _(-2800,!1);let r=this.xhrFactory;return us(null).pipe(ps(()=>new B(i=>{let s=r.build();if(s.open(n.method,n.urlWithParams),n.withCredentials&&(s.withCredentials=!0),n.headers.forEach((m,y)=>s.setRequestHeader(m,y.join(","))),n.headers.has(j1)||s.setRequestHeader(j1,CT),!n.headers.has(L1)){let m=n.detectContentTypeHeader();m!==null&&s.setRequestHeader(L1,m)}if(n.timeout&&(s.timeout=n.timeout),n.responseType){let m=n.responseType.toLowerCase();s.responseType=m!=="json"?m:"text"}let u=n.serializeBody(),a=null,c=()=>{if(a!==null)return a;let m=s.statusText||"OK",y=new Dn(s.getAllResponseHeaders()),v=s.responseURL||n.url;return a=new ba({headers:y,status:s.status,statusText:m,url:v}),a},l=this.maybePropagateTrace(()=>{let{headers:m,status:y,statusText:v,url:w}=c(),D=null;y!==xT&&(D=typeof s.response>"u"?s.responseText:s.response),y===0&&(y=D?wT:0);let F=y>=200&&y<300;if(n.responseType==="json"&&typeof D=="string"){let E=D;D=D.replace(TT,"");try{D=D!==""?JSON.parse(D):null}catch(N){D=E,F&&(F=!1,D={error:N,text:D})}}F?(i.next(new Ai({body:D,headers:m,status:y,statusText:v,url:w||void 0})),i.complete()):i.error(new uo({error:D,headers:m,status:y,statusText:v,url:w||void 0}))}),d=this.maybePropagateTrace(m=>{let{url:y}=c(),v=new uo({error:m,status:s.status||0,statusText:s.statusText||"Unknown Error",url:y||void 0});i.error(v)}),h=d;n.timeout&&(h=this.maybePropagateTrace(m=>{let{url:y}=c(),v=new uo({error:new DOMException("Request timed out","TimeoutError"),status:s.status||0,statusText:s.statusText||"Request timeout",url:y||void 0});i.error(v)}));let f=!1,p=this.maybePropagateTrace(m=>{f||(i.next(c()),f=!0);let y={type:nr.DownloadProgress,loaded:m.loaded};m.lengthComputable&&(y.total=m.total),n.responseType==="text"&&s.responseText&&(y.partialText=s.responseText),i.next(y)}),g=this.maybePropagateTrace(m=>{let y={type:nr.UploadProgress,loaded:m.loaded};m.lengthComputable&&(y.total=m.total),i.next(y)});return s.addEventListener("load",l),s.addEventListener("error",d),s.addEventListener("timeout",h),s.addEventListener("abort",d),n.reportProgress&&(s.addEventListener("progress",p),u!==null&&s.upload&&s.upload.addEventListener("progress",g)),s.send(u),i.next({type:nr.Sent}),()=>{s.removeEventListener("error",d),s.removeEventListener("abort",d),s.removeEventListener("load",l),s.removeEventListener("timeout",h),n.reportProgress&&(s.removeEventListener("progress",p),u!==null&&s.upload&&s.upload.removeEventListener("progress",g)),s.readyState!==s.DONE&&s.abort()}})))}static \u0275fac=function(r){return new(r||e)(A(tr))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function $1(e,t){return t(e)}function ST(e,t){return(n,r)=>t.intercept(n,{handle:o=>e(o,r)})}function MT(e,t,n){return(r,o)=>Sr(n,()=>t(r,i=>e(i,o)))}var U1=new x(""),pp=new x("",{factory:()=>[]}),z1=new x(""),hp=new x("",{factory:()=>!0});function AT(){let e=null;return(t,n)=>{e===null&&(e=(b(U1,{optional:!0})??[]).reduceRight(ST,$1));let r=b(Wn);if(b(hp)){let i=r.add();return e(t,n).pipe(ds(i))}else return e(t,n)}}var gp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(fp),o},providedIn:"root"})}return e})();var va=(()=>{class e{backend;injector;chain=null;pendingTasks=b(Wn);contributeToStability=b(hp);constructor(n,r){this.backend=n,this.injector=r}handle(n){if(this.chain===null){let r=Array.from(new Set([...this.injector.get(pp),...this.injector.get(z1,[])]));this.chain=r.reduceRight((o,i)=>MT(o,i,this.injector),$1)}if(this.contributeToStability){let r=this.pendingTasks.add();return this.chain(n,o=>this.backend.handle(o)).pipe(ds(r))}else return this.chain(n,r=>this.backend.handle(r))}static \u0275fac=function(r){return new(r||e)(A(gp),A(Ce))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),mp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(va),o},providedIn:"root"})}return e})();function dp(e,t){return{body:t,headers:e.headers,context:e.context,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials,credentials:e.credentials,transferCache:e.transferCache,timeout:e.timeout,keepalive:e.keepalive,priority:e.priority,cache:e.cache,mode:e.mode,redirect:e.redirect,integrity:e.integrity,referrer:e.referrer,referrerPolicy:e.referrerPolicy}}var q1=(()=>{class e{handler;constructor(n){this.handler=n}request(n,r,o={}){let i;if(n instanceof so)i=n;else{let a;o.headers instanceof Dn?a=o.headers:a=new Dn(o.headers);let c;o.params&&(o.params instanceof qt?c=o.params:c=new qt({fromObject:o.params})),i=new so(n,r,o.body!==void 0?o.body:null,{headers:a,context:o.context,params:c,reportProgress:o.reportProgress,responseType:o.responseType||"json",withCredentials:o.withCredentials,transferCache:o.transferCache,keepalive:o.keepalive,priority:o.priority,cache:o.cache,mode:o.mode,redirect:o.redirect,credentials:o.credentials,referrer:o.referrer,referrerPolicy:o.referrerPolicy,integrity:o.integrity,timeout:o.timeout})}let s=us(i).pipe(lc(a=>this.handler.handle(a)));if(n instanceof so||o.observe==="events")return s;let u=s.pipe(on(a=>a instanceof Ai));switch(o.observe||"body"){case"body":switch(i.responseType){case"arraybuffer":return u.pipe(Ee(a=>{if(a.body!==null&&!(a.body instanceof ArrayBuffer))throw new _(2806,!1);return a.body}));case"blob":return u.pipe(Ee(a=>{if(a.body!==null&&!(a.body instanceof Blob))throw new _(2807,!1);return a.body}));case"text":return u.pipe(Ee(a=>{if(a.body!==null&&typeof a.body!="string")throw new _(2808,!1);return a.body}));default:return u.pipe(Ee(a=>a.body))}case"response":return u;default:throw new _(2809,!1)}}delete(n,r={}){return this.request("DELETE",n,r)}get(n,r={}){return this.request("GET",n,r)}head(n,r={}){return this.request("HEAD",n,r)}jsonp(n,r){return this.request("JSONP",n,{params:new qt().append(r,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(n,r={}){return this.request("OPTIONS",n,r)}patch(n,r,o={}){return this.request("PATCH",n,dp(o,r))}post(n,r,o={}){return this.request("POST",n,dp(o,r))}put(n,r,o={}){return this.request("PUT",n,dp(o,r))}static \u0275fac=function(r){return new(r||e)(A(mp))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var NT=new x("",{factory:()=>!0}),kT="XSRF-TOKEN",RT=new x("",{factory:()=>kT}),FT="X-XSRF-TOKEN",OT=new x("",{factory:()=>FT}),PT=(()=>{class e{cookieName=b(RT);doc=b(K);lastCookieString="";lastToken=null;parseCount=0;getToken(){let n=this.doc.cookie||"";return n!==this.lastCookieString&&(this.parseCount++,this.lastToken=Ei(n,this.cookieName),this.lastCookieString=n),this.lastToken}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),G1=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(PT),o},providedIn:"root"})}return e})();function LT(e,t){if(!b(NT)||e.method==="GET"||e.method==="HEAD")return t(e);try{let o=b(vn).href,{origin:i}=new URL(o),{origin:s}=new URL(e.url,i);if(i!==s)return t(e)}catch{return t(e)}let n=b(G1).getToken(),r=b(OT);return n!=null&&!e.headers.has(r)&&(e=e.clone({headers:e.headers.set(r,n)})),t(e)}var yp=(function(e){return e[e.Interceptors=0]="Interceptors",e[e.LegacyInterceptors=1]="LegacyInterceptors",e[e.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",e[e.NoXsrfProtection=3]="NoXsrfProtection",e[e.JsonpSupport=4]="JsonpSupport",e[e.RequestsMadeViaParent=5]="RequestsMadeViaParent",e[e.Fetch=6]="Fetch",e})(yp||{});function jT(e,t){return{\u0275kind:e,\u0275providers:t}}function W1(...e){let t=[q1,va,{provide:mp,useExisting:va},{provide:gp,useFactory:()=>b(IT,{optional:!0})??b(fp)},{provide:pp,useValue:LT,multi:!0}];for(let n of e)t.push(...n.\u0275providers);return Pn(t)}var B1=new x("");function Z1(){return jT(yp.LegacyInterceptors,[{provide:B1,useFactory:AT},{provide:pp,useExisting:B1,multi:!0}])}var BT=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=$t({type:e});static \u0275inj=ht({providers:[W1(Z1())]})}return e})();var s$=(()=>{class e{_doc;constructor(n){this._doc=n}getTitle(){return this._doc.title}setTitle(n){this._doc.title=n||""}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var bp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(VT),o},providedIn:"root"})}return e})(),VT=(()=>{class e extends bp{_doc;constructor(n){super(),this._doc=n}sanitize(n,r){if(r==null)return null;switch(n){case Le.NONE:return r;case Le.HTML:return Bt(r,"HTML")?Pe(r):Du(this._doc,String(r)).toString();case Le.STYLE:return Bt(r,"Style")?Pe(r):r;case Le.SCRIPT:if(Bt(r,"Script"))return Pe(r);throw new _(5200,!1);case Le.URL:return Bt(r,"URL")?Pe(r):ui(String(r));case Le.RESOURCE_URL:if(Bt(r,"ResourceURL"))return Pe(r);throw new _(5201,!1);default:throw new _(5202,!1)}}bypassSecurityTrustHtml(n){return dd(n)}bypassSecurityTrustStyle(n){return fd(n)}bypassSecurityTrustScript(n){return pd(n)}bypassSecurityTrustUrl(n){return hd(n)}bypassSecurityTrustResourceUrl(n){return gd(n)}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var Tp={};lr(Tp,{arrayReplaceAt:()=>Ip,assign:()=>fo,escapeHtml:()=>Zt,escapeRE:()=>CS,fromCodePoint:()=>Ri,has:()=>fS,isMdAsciiPunct:()=>sr,isPunctChar:()=>ir,isSpace:()=>H,isString:()=>Na,isValidEntityCode:()=>ka,isWhiteSpace:()=>or,lib:()=>wS,normalizeReference:()=>ur,unescapeAll:()=>Wt,unescapeMd:()=>yS});var wa={};lr(wa,{decode:()=>Ni,encode:()=>_a,format:()=>co,parse:()=>ki});var Y1={};function HT(e){let t=Y1[e];if(t)return t;t=Y1[e]=[];for(let n=0;n<128;n++){let r=String.fromCharCode(n);t.push(r)}for(let n=0;n=55296&&l<=57343?o+="\uFFFD\uFFFD\uFFFD":o+=String.fromCharCode(l),i+=6;continue}}if((u&248)===240&&i+91114111?o+="\uFFFD\uFFFD\uFFFD\uFFFD":(d-=65536,o+=String.fromCharCode(55296+(d>>10),56320+(d&1023))),i+=9;continue}}o+="\uFFFD"}return o})}Da.defaultChars=";/?:@&=+$,#";Da.componentChars="";var Ni=Da;var Q1={};function $T(e){let t=Q1[e];if(t)return t;t=Q1[e]=[];for(let n=0;n<128;n++){let r=String.fromCharCode(n);/^[0-9a-z]$/i.test(r)?t.push(r):t.push("%"+("0"+n.toString(16).toUpperCase()).slice(-2))}for(let n=0;n"u"&&(n=!0);let r=$T(t),o="";for(let i=0,s=e.length;i=55296&&u<=57343){if(u>=55296&&u<=56319&&i+1=56320&&a<=57343){o+=encodeURIComponent(e[i]+e[i+1]),i++;continue}}o+="%EF%BF%BD";continue}o+=encodeURIComponent(e[i])}return o}Ea.defaultChars=";/?:@&=+$,-_.!~*'()#";Ea.componentChars="-_.!~*'()";var _a=Ea;function co(e){let t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&e.hostname.indexOf(":")!==-1?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||"",t}function Ca(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var UT=/^([a-z0-9.+-]+:)/i,zT=/:[0-9]*$/,qT=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,GT=["<",">",'"',"`"," ","\r",` +`;var i2=[Qb,Kb,Jb,Xb,e1,t1,n1].flat(1/0).join(` +`);var Hf={};lr(Hf,{isComponentArrayReference:()=>_f,isObject:()=>$,isPath:()=>Ef,isResolvedAudioPlayer:()=>Cf,isResolvedButton:()=>wf,isResolvedCard:()=>xf,isResolvedCheckbox:()=>If,isResolvedColumn:()=>Tf,isResolvedDateTimeInput:()=>Sf,isResolvedDivider:()=>Mf,isResolvedIcon:()=>Nf,isResolvedImage:()=>Af,isResolvedList:()=>kf,isResolvedModal:()=>Rf,isResolvedMultipleChoice:()=>Ff,isResolvedRow:()=>Of,isResolvedSlider:()=>Pf,isResolvedTabs:()=>Lf,isResolvedText:()=>jf,isResolvedTextField:()=>Bf,isResolvedVideo:()=>Vf,isValueMap:()=>u2});function u2(e){return $(e)&&"key"in e}function Ef(e,t){return e==="path"&&typeof t=="string"}function $(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function _f(e){return $(e)?"explicitList"in e||"template"in e:!1}function zt(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="string"||"literalString"in e)}function a2(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="number"||"literalNumber"in e)}function c2(e){return $(e)&&("path"in e||"literal"in e&&typeof e.literal=="boolean"||"literalBoolean"in e)}function Ut(e){return!(!$(e)||!("id"in e&&"type"in e&&"properties"in e))}function Cf(e){return $(e)&&"url"in e&&zt(e.url)}function wf(e){return $(e)&&"child"in e&&Ut(e.child)&&"action"in e}function xf(e){return $(e)?"child"in e?Ut(e.child):"children"in e?Array.isArray(e.children)&&e.children.every(Ut):!1:!1}function If(e){return $(e)&&"label"in e&&zt(e.label)&&"value"in e&&c2(e.value)}function Tf(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Ut)}function Sf(e){return $(e)&&"value"in e&&zt(e.value)}function Mf(e){return $(e)}function Af(e){return $(e)&&"url"in e&&zt(e.url)}function Nf(e){return $(e)&&"name"in e&&zt(e.name)}function kf(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Ut)}function Rf(e){return $(e)&&"entryPointChild"in e&&Ut(e.entryPointChild)&&"contentChild"in e&&Ut(e.contentChild)}function Ff(e){return $(e)&&"selections"in e}function Of(e){return $(e)&&"children"in e&&Array.isArray(e.children)&&e.children.every(Ut)}function Pf(e){return $(e)&&"value"in e&&a2(e.value)}function l2(e){return $(e)&&"title"in e&&zt(e.title)&&"child"in e&&Ut(e.child)}function Lf(e){return $(e)&&"tabItems"in e&&Array.isArray(e.tabItems)&&e.tabItems.every(l2)}function jf(e){return $(e)&&"text"in e&&zt(e.text)}function Bf(e){return $(e)&&"label"in e&&zt(e.label)}function Vf(e){return $(e)&&"url"in e&&zt(e.url)}var Ju=(()=>{class e{static{this.DEFAULT_SURFACE_ID="@default"}#t=Map;#n=Array;#o=Set;#e=Object;#r;constructor(n={mapCtor:Map,arrayCtor:Array,setCtor:Set,objCtor:Object}){this.opts=n,this.#n=n.arrayCtor,this.#t=n.mapCtor,this.#o=n.setCtor,this.#e=n.objCtor,this.#r=new n.mapCtor}getSurfaces(){return this.#r}clearSurfaces(){this.#r.clear()}processMessages(n){for(let r of n)r.beginRendering&&this.#g(r.beginRendering,r.beginRendering.surfaceId),r.surfaceUpdate&&this.#m(r.surfaceUpdate,r.surfaceUpdate.surfaceId),r.dataModelUpdate&&this.#y(r.dataModelUpdate,r.dataModelUpdate.surfaceId),r.deleteSurface&&this.#b(r.deleteSurface)}getData(n,r,o=e.DEFAULT_SURFACE_ID){let i=this.#i(o);if(!i)return null;let s;return r==="."||r===""?s=n.dataContextPath??"/":s=this.resolvePath(r,n.dataContextPath),this.#p(i.dataModel,s)}setData(n,r,o,i=e.DEFAULT_SURFACE_ID){if(!n){console.warn("No component node set");return}let s=this.#i(i);if(!s)return;let u;r==="."||r===""?u=n.dataContextPath??"/":u=this.resolvePath(r,n.dataContextPath),this.#a(s.dataModel,u,o)}resolvePath(n,r){return n.startsWith("/")?n:r&&r!=="/"?r.endsWith("/")?`${r}${n}`:`${r}/${n}`:`/${n}`}#d(n){if(typeof n!="string")return n;let r=n.trim();if(r.startsWith("{")&&r.endsWith("}")||r.startsWith("[")&&r.endsWith("]"))try{return JSON.parse(n)}catch(o){return console.warn(`Failed to parse potential JSON string: "${n.substring(0,50)}..."`,o),n}return n}#u(n){let r=new this.#t;for(let o of n){if(!$(o)||!("key"in o))continue;let i=o.key,s=this.#h(o);if(!s)continue;let u=o[s];s==="valueMap"&&Array.isArray(u)?u=this.#u(u):typeof u=="string"&&(u=this.#d(u)),this.#a(r,i,u)}return r}#a(n,r,o){if(Array.isArray(o)&&(o.length===0||$(o[0])&&"key"in o[0]))if(o.length===1&&$(o[0])&&o[0].key==="."){let c=o[0],l=this.#h(c);l?(o=c[l],l==="valueMap"&&Array.isArray(o)?o=this.#u(o):typeof o=="string"&&(o=this.#d(o))):o=this.#u(o)}else o=this.#u(o);let i=this.#f(r).split("/").filter(c=>c);if(i.length===0){if(o instanceof Map||$(o)){!(o instanceof Map)&&$(o)&&(o=new this.#t(Object.entries(o))),n.clear();for(let[c,l]of o.entries())n.set(c,l)}else console.error("Cannot set root of DataModel to a non-Map value.");return}let s=n;for(let c=0;ci.length>0).join("/")}#p(n,r){let o=this.#f(r).split("/").filter(s=>s),i=n;for(let s of o){if(i==null)return null;if(i instanceof Map)i=i.get(s);else if(Array.isArray(i)&&/^\d+$/.test(s))i=i[parseInt(s,10)];else if($(i))i=i[s];else return null}return i}#i(n){let r=this.#r.get(n);return r||(r=new this.#e({rootComponentId:null,componentTree:null,dataModel:new this.#t,components:new this.#t,styles:new this.#e}),this.#r.set(n,r)),r}#g(n,r){let o=this.#i(r);o.rootComponentId=n.root,o.styles=n.styles??{},this.#c(o)}#m(n,r){let o=this.#i(r);for(let i of n.components)o.components.set(i.id,i);this.#c(o)}#y(n,r){let o=this.#i(r),i=n.path??"/";this.#a(o.dataModel,i,n.contents),this.#c(o)}#b(n){this.#r.delete(n.surfaceId)}#c(n){if(!n.rootComponentId){n.componentTree=null;return}let r=new this.#o;n.componentTree=this.#s(n.rootComponentId,n,r,"/","")}#h(n){return Object.keys(n).find(r=>r.startsWith("value"))}#s(n,r,o,i,s=""){let u=`${n}${s}`,{components:a}=r;if(!a.has(n))return null;if(o.has(u))throw new Error(`Circular dependency for component "${u}".`);o.add(u);let c=a.get(n),l=c.component??{},d=Object.keys(l)[0],h=l[d],f=new this.#e;if($(h))for(let[g,m]of Object.entries(h))f[g]=this.#l(m,r,o,i,s);o.delete(u);let p={id:u,dataContextPath:i,weight:c.weight??"initial"};switch(d){case"Text":if(!jf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Text",properties:f}));case"Image":if(!Af(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Image",properties:f}));case"Icon":if(!Nf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Icon",properties:f}));case"Video":if(!Vf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Video",properties:f}));case"AudioPlayer":if(!Cf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"AudioPlayer",properties:f}));case"Row":if(!Of(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Row",properties:f}));case"Column":if(!Tf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Column",properties:f}));case"List":if(!kf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"List",properties:f}));case"Card":if(!xf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Card",properties:f}));case"Tabs":if(!Lf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Tabs",properties:f}));case"Divider":if(!Mf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Divider",properties:f}));case"Modal":if(!Rf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Modal",properties:f}));case"Button":if(!wf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Button",properties:f}));case"CheckBox":if(!If(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"CheckBox",properties:f}));case"TextField":if(!Bf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"TextField",properties:f}));case"DateTimeInput":if(!Sf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"DateTimeInput",properties:f}));case"MultipleChoice":if(!Ff(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"MultipleChoice",properties:f}));case"Slider":if(!Pf(f))throw new Error(`Invalid data; expected ${d}`);return new this.#e(P(S({},p),{type:"Slider",properties:f}));default:return new this.#e(P(S({},p),{type:d,properties:f}))}}#l(n,r,o,i,s=""){if(typeof n=="string"&&r.components.has(n))return this.#s(n,r,o,i,s);if(_f(n)){if(n.explicitList)return n.explicitList.map(u=>this.#s(u,r,o,i,s));if(n.template){let u=this.resolvePath(n.template.dataBinding,i),a=this.#p(r.dataModel,u),c=n.template;if(Array.isArray(a))return a.map((d,h)=>{let g=`:${[...i.split("/").filter(y=>/^\d+$/.test(y)),h].join(":")}`,m=`${u}/${h}`;return this.#s(c.componentId,r,o,m,g)});let l=this.#t;return a instanceof l?Array.from(a.keys(),d=>{let h=`:${d}`,f=`${u}/${d}`;return this.#s(c.componentId,r,o,f,h)}):new this.#n}}if(Array.isArray(n))return n.map(u=>this.#l(u,r,o,i,s));if($(n)){let u=new this.#e;for(let[a,c]of Object.entries(n)){let l=c;if(Ef(a,c)&&i!=="/"){l=c.replace(/^\.?\/item/,"").replace(/^\.?\/text/,"").replace(/^\.?\/label/,"").replace(/^\.?\//,""),u[a]=l;continue}u[a]=this.#l(l,r,o,i,s)}return u}return n}}return e})();var d2=Object.defineProperty,f2=(e,t,n)=>t in e?d2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,$f=(e,t,n)=>(f2(e,typeof t!="symbol"?t+"":t,n),n),p2=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},Uf=(e,t)=>{if(Object(t)!==t)throw TypeError('Cannot use the "in" operator on this value');return e.has(t)},Xu=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},r1=(e,t,n)=>(p2(e,t,"access private method"),n);function o1(e,t){return Object.is(e,t)}var se=null,Di=!1,ea=1,ta=Symbol("SIGNAL");function ro(e){let t=se;return se=e,t}function h2(){return se}function g2(){return Di}var Zf={version:0,lastCleanEpoch:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function ra(e){if(Di)throw new Error("");if(se===null)return;se.consumerOnSignalRead(e);let t=se.nextProducerIndex++;if(oo(se),te.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}function E2(e){oo(e);for(let t=0;t0}function oo(e){e.producerNode??(e.producerNode=[]),e.producerIndexOfThis??(e.producerIndexOfThis=[]),e.producerLastReadVersion??(e.producerLastReadVersion=[])}function Yf(e){e.liveConsumerNode??(e.liveConsumerNode=[]),e.liveConsumerIndexOfThis??(e.liveConsumerIndexOfThis=[])}function a1(e){if(i1(e),ra(e),e.value===Wf)throw e.error;return e.value}function _2(e){let t=Object.create(C2);t.computation=e;let n=()=>a1(t);return n[ta]=t,n}var zf=Symbol("UNSET"),qf=Symbol("COMPUTING"),Wf=Symbol("ERRORED"),C2=P(S({},Zf),{value:zf,dirty:!0,error:null,equal:o1,producerMustRecompute(e){return e.value===zf||e.value===qf},producerRecomputeValue(e){if(e.value===qf)throw new Error("Detected cycle in computations.");let t=e.value;e.value=qf;let n=v2(e),r,o=!1;try{r=e.computation.call(e.wrapper),o=t!==zf&&t!==Wf&&e.equal.call(e.wrapper,t,r)}catch(i){r=Wf,e.error=i}finally{D2(e,n)}if(o){e.value=t;return}e.value=r,e.version++}});function w2(){throw new Error}var x2=w2;function I2(){x2()}function T2(e){let t=Object.create(A2);t.value=e;let n=()=>(ra(t),t.value);return n[ta]=t,n}function S2(){return ra(this),this.value}function M2(e,t){y2()||I2(),e.equal.call(e.wrapper,e.value,t)||(e.value=t,N2(e))}var A2=P(S({},Zf),{equal:o1,value:void 0});function N2(e){e.version++,m2(),s1(e)}var pe=Symbol("node"),na;(e=>{var t,n,r,o,i,s;class u{constructor(l,d={}){Xu(this,n),$f(this,t);let f=T2(l)[ta];if(this[pe]=f,f.wrapper=this,d){let p=d.equals;p&&(f.equal=p),f.watched=d[e.subtle.watched],f.unwatched=d[e.subtle.unwatched]}}get(){if(!(0,e.isState)(this))throw new TypeError("Wrong receiver type for Signal.State.prototype.get");return S2.call(this[pe])}set(l){if(!(0,e.isState)(this))throw new TypeError("Wrong receiver type for Signal.State.prototype.set");if(g2())throw new Error("Writes to signals not permitted during Watcher callback");let d=this[pe];M2(d,l)}}t=pe,n=new WeakSet,r=function(){},e.isState=c=>typeof c=="object"&&Uf(n,c),e.State=u;class a{constructor(l,d){Xu(this,i),$f(this,o);let f=_2(l)[ta];if(f.consumerAllowSignalWrites=!0,this[pe]=f,f.wrapper=this,d){let p=d.equals;p&&(f.equal=p),f.watched=d[e.subtle.watched],f.unwatched=d[e.subtle.unwatched]}}get(){if(!(0,e.isComputed)(this))throw new TypeError("Wrong receiver type for Signal.Computed.prototype.get");return a1(this[pe])}}o=pe,i=new WeakSet,s=function(){},e.isComputed=c=>typeof c=="object"&&Uf(i,c),e.Computed=a,(c=>{var l,d,h,f,p;function g(E){let N,O=null;try{O=ro(null),N=E()}finally{ro(O)}return N}c.untrack=g;function m(E){var N;if(!(0,e.isComputed)(E)&&!(0,e.isWatcher)(E))throw new TypeError("Called introspectSources without a Computed or Watcher argument");return((N=E[pe].producerNode)==null?void 0:N.map(O=>O.wrapper))??[]}c.introspectSources=m;function y(E){var N;if(!(0,e.isComputed)(E)&&!(0,e.isState)(E))throw new TypeError("Called introspectSinks without a Signal argument");return((N=E[pe].liveConsumerNode)==null?void 0:N.map(O=>O.wrapper))??[]}c.introspectSinks=y;function v(E){if(!(0,e.isComputed)(E)&&!(0,e.isState)(E))throw new TypeError("Called hasSinks without a Signal argument");let N=E[pe].liveConsumerNode;return N?N.length>0:!1}c.hasSinks=v;function w(E){if(!(0,e.isComputed)(E)&&!(0,e.isWatcher)(E))throw new TypeError("Called hasSources without a Computed or Watcher argument");let N=E[pe].producerNode;return N?N.length>0:!1}c.hasSources=w;class D{constructor(N){Xu(this,d),Xu(this,f),$f(this,l);let O=Object.create(Zf);O.wrapper=this,O.consumerMarkedDirty=N,O.consumerIsAlwaysLive=!0,O.consumerAllowSignalWrites=!1,O.producerNode=[],this[pe]=O}watch(...N){if(!(0,e.isWatcher)(this))throw new TypeError("Called unwatch without Watcher receiver");r1(this,f,p).call(this,N);let O=this[pe];O.dirty=!1;let J=ro(O);for(let ut of N)ra(ut[pe]);ro(J)}unwatch(...N){if(!(0,e.isWatcher)(this))throw new TypeError("Called unwatch without Watcher receiver");r1(this,f,p).call(this,N);let O=this[pe];oo(O);for(let J=O.producerNode.length-1;J>=0;J--)if(N.includes(O.producerNode[J].wrapper)){oa(O.producerNode[J],O.producerIndexOfThis[J]);let ut=O.producerNode.length-1;if(O.producerNode[J]=O.producerNode[ut],O.producerIndexOfThis[J]=O.producerIndexOfThis[ut],O.producerNode.length--,O.producerIndexOfThis.length--,O.nextProducerIndex--,JO.dirty).map(O=>O.wrapper)}}l=pe,d=new WeakSet,h=function(){},f=new WeakSet,p=function(E){for(let N of E)if(!(0,e.isComputed)(N)&&!(0,e.isState)(N))throw new TypeError("Called watch/unwatch without a Computed or State argument")},e.isWatcher=E=>Uf(d,E),c.Watcher=D;function F(){var E;return(E=h2())==null?void 0:E.wrapper}c.currentComputed=F,c.watched=Symbol("watched"),c.unwatched=Symbol("unwatched")})(e.subtle||(e.subtle={}))})(na||(na={}));var qe=(e=null)=>new na.State(e,{equals:()=>!1});var k2=new Set([Symbol.iterator,"concat","entries","every","filter","find","findIndex","flat","flatMap","forEach","includes","indexOf","join","keys","lastIndexOf","map","reduce","reduceRight","slice","some","values"]),R2=new Set(["fill","push","unshift"]);function c1(e){if(typeof e=="symbol")return null;let t=Number(e);return isNaN(t)?null:t%1===0?t:null}var Ei=class e{static from(t,n,r){return n?new e(Array.from(t,n,r)):new e(Array.from(t))}static of(...t){return new e(t)}constructor(t=[]){let n=t.slice(),r=this,o=new Map,i=!1;return new Proxy(n,{get(s,u){let a=c1(u);if(a!==null)return r.#o(a),r.#t.get(),s[a];if(u==="length")return i?i=!1:r.#t.get(),s[u];if(R2.has(u)&&(i=!0),k2.has(u)){let c=o.get(u);return c===void 0&&(c=(...l)=>(r.#t.get(),s[u](...l)),o.set(u,c)),c}return s[u]},set(s,u,a){s[u]=a;let c=c1(u);return c!==null?(r.#e(c),r.#t.set(null)):u==="length"&&r.#t.set(null),!0},getPrototypeOf(){return e.prototype}})}#t=qe();#n=new Map;#o(t){let n=this.#n.get(t);n===void 0&&(n=qe(),this.#n.set(t,n)),n.get()}#e(t){let n=this.#n.get(t);n&&n.set(null)}};Object.setPrototypeOf(Ei.prototype,Array.prototype);var _i=class{collection=qe();storages=new Map;vals;readStorageFor(t){let{storages:n}=this,r=n.get(t);r===void 0&&(r=qe(),n.set(t,r)),r.get()}dirtyStorageFor(t){let n=this.storages.get(t);n&&n.set(null)}constructor(t){this.vals=t?new Map(t):new Map}get(t){return this.readStorageFor(t),this.vals.get(t)}has(t){return this.readStorageFor(t),this.vals.has(t)}entries(){return this.collection.get(),this.vals.entries()}keys(){return this.collection.get(),this.vals.keys()}values(){return this.collection.get(),this.vals.values()}forEach(t){this.collection.get(),this.vals.forEach(t)}get size(){return this.collection.get(),this.vals.size}[Symbol.iterator](){return this.collection.get(),this.vals[Symbol.iterator]()}get[Symbol.toStringTag](){return this.vals[Symbol.toStringTag]}set(t,n){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.set(t,n),this}delete(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.delete(t)}clear(){this.storages.forEach(t=>t.set(null)),this.collection.set(null),this.vals.clear()}};Object.setPrototypeOf(_i.prototype,Map.prototype);var Qf=class e{static fromEntries(t){return new e(Object.fromEntries(t))}#t=new Map;#n=qe();constructor(t={}){let n=Object.getPrototypeOf(t),r=Object.getOwnPropertyDescriptors(t),o=Object.create(n);for(let s in r)Object.defineProperty(o,s,r[s]);let i=this;return new Proxy(o,{get(s,u,a){return i.#o(u),Reflect.get(s,u,a)},has(s,u){return i.#o(u),u in s},ownKeys(s){return i.#n.get(),Reflect.ownKeys(s)},set(s,u,a,c){let l=Reflect.set(s,u,a,c);return i.#e(u),i.#r(),l},deleteProperty(s,u){return u in s&&(delete s[u],i.#e(u),i.#r()),!0},getPrototypeOf(){return e.prototype}})}#o(t){let n=this.#t.get(t);n===void 0&&(n=qe(),this.#t.set(t,n)),n.get()}#e(t){let n=this.#t.get(t);n&&n.set(null)}#r(){this.#n.set(null)}},l1=Qf;var Ci=class{collection=qe();storages=new Map;vals;storageFor(t){let n=this.storages,r=n.get(t);return r===void 0&&(r=qe(),n.set(t,r)),r}dirtyStorageFor(t){let n=this.storages.get(t);n&&n.set(null)}constructor(t){this.vals=new Set(t)}has(t){return this.storageFor(t).get(),this.vals.has(t)}entries(){return this.collection.get(),this.vals.entries()}keys(){return this.collection.get(),this.vals.keys()}values(){return this.collection.get(),this.vals.values()}forEach(t){this.collection.get(),this.vals.forEach(t)}get size(){return this.collection.get(),this.vals.size}[Symbol.iterator](){return this.collection.get(),this.vals[Symbol.iterator]()}get[Symbol.toStringTag](){return this.vals[Symbol.toStringTag]}add(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.add(t),this}delete(t){return this.dirtyStorageFor(t),this.collection.set(null),this.vals.delete(t)}clear(){this.storages.forEach(t=>t.set(null)),this.collection.set(null),this.vals.clear()}};Object.setPrototypeOf(Ci.prototype,Set.prototype);function d1(){return new Ju({arrayCtor:Ei,mapCtor:_i,objCtor:l1,setCtor:Ci})}var f1={createSignalA2uiMessageProcessor:d1,A2uiMessageProcessor:Ju,Guards:Hf};var p1=null;function Et(){return p1}function Kf(e){p1??=e}var wi=class{},vn=(()=>{class e{historyGo(n){throw new Error("")}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:()=>b(h1),providedIn:"platform"})}return e})(),F2=new x(""),h1=(()=>{class e extends vn{_location;_history;_doc=b(K);constructor(){super(),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return Et().getBaseHref(this._doc)}onPopState(n){let r=Et().getGlobalEventTarget(this._doc,"window");return r.addEventListener("popstate",n,!1),()=>r.removeEventListener("popstate",n)}onHashChange(n){let r=Et().getGlobalEventTarget(this._doc,"window");return r.addEventListener("hashchange",n,!1),()=>r.removeEventListener("hashchange",n)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(n){this._location.pathname=n}pushState(n,r,o){this._history.pushState(n,r,o)}replaceState(n,r,o){this._history.replaceState(n,r,o)}forward(){this._history.forward()}back(){this._history.back()}historyGo(n=0){this._history.go(n)}getState(){return this._history.state}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:()=>new e,providedIn:"platform"})}return e})();function ia(e,t){return e?t?e.endsWith("/")?t.startsWith("/")?e+t.slice(1):e+t:t.startsWith("/")?e+t:`${e}/${t}`:e:t}function g1(e){let t=e.search(/#|\?|$/);return e[t-1]==="/"?e.slice(0,t-1)+e.slice(t):e}function it(e){return e&&e[0]!=="?"?`?${e}`:e}var io=(()=>{class e{historyGo(n){throw new Error("")}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:()=>b(y1),providedIn:"root"})}return e})(),sa=new x(""),y1=(()=>{class e extends io{_platformLocation;_baseHref;_removeListenerFns=[];constructor(n,r){super(),this._platformLocation=n,this._baseHref=r??this._platformLocation.getBaseHrefFromDOM()??b(K).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}prepareExternalUrl(n){return ia(this._baseHref,n)}path(n=!1){let r=this._platformLocation.pathname+it(this._platformLocation.search),o=this._platformLocation.hash;return o&&n?`${r}${o}`:r}pushState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i));this._platformLocation.pushState(n,r,s)}replaceState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i));this._platformLocation.replaceState(n,r,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static \u0275fac=function(r){return new(r||e)(A(vn),A(sa,8))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),b1=(()=>{class e{_subject=new le;_basePath;_locationStrategy;_urlChangeListeners=[];_urlChangeSubscription=null;constructor(n){this._locationStrategy=n;let r=this._locationStrategy.getBaseHref();this._basePath=L2(g1(m1(r))),this._locationStrategy.onPopState(o=>{this._subject.next({url:this.path(!0),pop:!0,state:o.state,type:o.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(n=!1){return this.normalize(this._locationStrategy.path(n))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(n,r=""){return this.path()==this.normalize(n+it(r))}normalize(n){return e.stripTrailingSlash(P2(this._basePath,m1(n)))}prepareExternalUrl(n){return n&&n[0]!=="/"&&(n="/"+n),this._locationStrategy.prepareExternalUrl(n)}go(n,r="",o=null){this._locationStrategy.pushState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+it(r)),o)}replaceState(n,r="",o=null){this._locationStrategy.replaceState(o,"",n,r),this._notifyUrlChangeListeners(this.prepareExternalUrl(n+it(r)),o)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(n=0){this._locationStrategy.historyGo?.(n)}onUrlChange(n){return this._urlChangeListeners.push(n),this._urlChangeSubscription??=this.subscribe(r=>{this._notifyUrlChangeListeners(r.url,r.state)}),()=>{let r=this._urlChangeListeners.indexOf(n);this._urlChangeListeners.splice(r,1),this._urlChangeListeners.length===0&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(n="",r){this._urlChangeListeners.forEach(o=>o(n,r))}subscribe(n,r,o){return this._subject.subscribe({next:n,error:r??void 0,complete:o??void 0})}static normalizeQueryParams=it;static joinWithSlash=ia;static stripTrailingSlash=g1;static \u0275fac=function(r){return new(r||e)(A(io))};static \u0275prov=I({token:e,factory:()=>O2(),providedIn:"root"})}return e})();function O2(){return new b1(A(io))}function P2(e,t){if(!e||!t.startsWith(e))return t;let n=t.substring(e.length);return n===""||["/",";","?","#"].includes(n[0])?n:t}function m1(e){return e.replace(/\/index.html$/,"")}function L2(e){if(new RegExp("^(https?:)?//").test(e)){let[,n]=e.split(/\/\/[^\/]+/);return n}return e}var j2=(()=>{class e extends io{_platformLocation;_baseHref="";_removeListenerFns=[];constructor(n,r){super(),this._platformLocation=n,r!=null&&(this._baseHref=r)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(n){this._removeListenerFns.push(this._platformLocation.onPopState(n),this._platformLocation.onHashChange(n))}getBaseHref(){return this._baseHref}path(n=!1){let r=this._platformLocation.hash??"#";return r.length>0?r.substring(1):r}prepareExternalUrl(n){let r=ia(this._baseHref,n);return r.length>0?"#"+r:r}pushState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i))||this._platformLocation.pathname;this._platformLocation.pushState(n,r,s)}replaceState(n,r,o,i){let s=this.prepareExternalUrl(o+it(i))||this._platformLocation.pathname;this._platformLocation.replaceState(n,r,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(n=0){this._platformLocation.historyGo?.(n)}static \u0275fac=function(r){return new(r||e)(A(vn),A(sa,8))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})();var Jf=/\s+/,v1=[],B2=(()=>{class e{_ngEl;_renderer;initialClasses=v1;rawClass;stateMap=new Map;constructor(n,r){this._ngEl=n,this._renderer=r}set klass(n){this.initialClasses=n!=null?n.trim().split(Jf):v1}set ngClass(n){this.rawClass=typeof n=="string"?n.trim().split(Jf):n}ngDoCheck(){for(let r of this.initialClasses)this._updateState(r,!0);let n=this.rawClass;if(Array.isArray(n)||n instanceof Set)for(let r of n)this._updateState(r,!0);else if(n!=null)for(let r of Object.keys(n))this._updateState(r,!!n[r]);this._applyStateDiff()}_updateState(n,r){let o=this.stateMap.get(n);o!==void 0?(o.enabled!==r&&(o.changed=!0,o.enabled=r),o.touched=!0):this.stateMap.set(n,{enabled:r,changed:!0,touched:!0})}_applyStateDiff(){for(let n of this.stateMap){let r=n[0],o=n[1];o.changed?(this._toggleClass(r,o.enabled),o.changed=!1):o.touched||(o.enabled&&this._toggleClass(r,!1),this.stateMap.delete(r)),o.touched=!1}}_toggleClass(n,r){n=n.trim(),n.length>0&&n.split(Jf).forEach(o=>{r?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}static \u0275fac=function(r){return new(r||e)(oe(jt),oe(pi))};static \u0275dir=ot({type:e,selectors:[["","ngClass",""]],inputs:{klass:[0,"class","klass"],ngClass:"ngClass"}})}return e})(),V2=(()=>{class e{_viewContainerRef;ngComponentOutlet=null;ngComponentOutletInputs;ngComponentOutletInjector;ngComponentOutletEnvironmentInjector;ngComponentOutletContent;ngComponentOutletNgModule;_componentRef;_moduleRef;_inputsUsed=new Map;get componentInstance(){return this._componentRef?.instance??null}constructor(n){this._viewContainerRef=n}_needToReCreateNgModuleInstance(n){return n.ngComponentOutletNgModule!==void 0}_needToReCreateComponentInstance(n){return n.ngComponentOutlet!==void 0||n.ngComponentOutletContent!==void 0||n.ngComponentOutletInjector!==void 0||n.ngComponentOutletEnvironmentInjector!==void 0||this._needToReCreateNgModuleInstance(n)}ngOnChanges(n){if(this._needToReCreateComponentInstance(n)&&(this._viewContainerRef.clear(),this._inputsUsed.clear(),this._componentRef=void 0,this.ngComponentOutlet)){let r=this.ngComponentOutletInjector||this._viewContainerRef.parentInjector;this._needToReCreateNgModuleInstance(n)&&(this._moduleRef?.destroy(),this.ngComponentOutletNgModule?this._moduleRef=Vd(this.ngComponentOutletNgModule,H2(r)):this._moduleRef=void 0),this._componentRef=this._viewContainerRef.createComponent(this.ngComponentOutlet,{injector:r,ngModuleRef:this._moduleRef,projectableNodes:this.ngComponentOutletContent,environmentInjector:this.ngComponentOutletEnvironmentInjector})}}ngDoCheck(){if(this._componentRef){if(this.ngComponentOutletInputs)for(let n of Object.keys(this.ngComponentOutletInputs))this._inputsUsed.set(n,!0);this._applyInputStateDiff(this._componentRef)}}ngOnDestroy(){this._moduleRef?.destroy()}_applyInputStateDiff(n){for(let[r,o]of this._inputsUsed)o?(n.setInput(r,this.ngComponentOutletInputs[r]),this._inputsUsed.set(r,!1)):(n.setInput(r,void 0),this._inputsUsed.delete(r))}static \u0275fac=function(r){return new(r||e)(oe(rt))};static \u0275dir=ot({type:e,selectors:[["","ngComponentOutlet",""]],inputs:{ngComponentOutlet:"ngComponentOutlet",ngComponentOutletInputs:"ngComponentOutletInputs",ngComponentOutletInjector:"ngComponentOutletInjector",ngComponentOutletEnvironmentInjector:"ngComponentOutletEnvironmentInjector",ngComponentOutletContent:"ngComponentOutletContent",ngComponentOutletNgModule:"ngComponentOutletNgModule"},exportAs:["ngComponentOutlet"],features:[hu]})}return e})();function H2(e){return e.get(yn).injector}var ua=class{$implicit;ngForOf;index;count;constructor(t,n,r,o){this.$implicit=t,this.ngForOf=n,this.index=r,this.count=o}get first(){return this.index===0}get last(){return this.index===this.count-1}get even(){return this.index%2===0}get odd(){return!this.even}},C1=(()=>{class e{_viewContainer;_template;_differs;set ngForOf(n){this._ngForOf=n,this._ngForOfDirty=!0}set ngForTrackBy(n){this._trackByFn=n}get ngForTrackBy(){return this._trackByFn}_ngForOf=null;_ngForOfDirty=!0;_differ=null;_trackByFn;constructor(n,r,o){this._viewContainer=n,this._template=r,this._differs=o}set ngForTemplate(n){n&&(this._template=n)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;let n=this._ngForOf;!this._differ&&n&&(this._differ=this._differs.find(n).create(this.ngForTrackBy))}if(this._differ){let n=this._differ.diff(this._ngForOf);n&&this._applyChanges(n)}}_applyChanges(n){let r=this._viewContainer;n.forEachOperation((o,i,s)=>{if(o.previousIndex==null)r.createEmbeddedView(this._template,new ua(o.item,this._ngForOf,-1,-1),s===null?void 0:s);else if(s==null)r.remove(i===null?void 0:i);else if(i!==null){let u=r.get(i);r.move(u,s),D1(u,o)}});for(let o=0,i=r.length;o{let i=r.get(o.currentIndex);D1(i,o)})}static ngTemplateContextGuard(n,r){return!0}static \u0275fac=function(r){return new(r||e)(oe(rt),oe(gn),oe(bf))};static \u0275dir=ot({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"}})}return e})();function D1(e,t){e.context.$implicit=t.item}var $2=(()=>{class e{_viewContainer;_context=new aa;_thenTemplateRef=null;_elseTemplateRef=null;_thenViewRef=null;_elseViewRef=null;constructor(n,r){this._viewContainer=n,this._thenTemplateRef=r}set ngIf(n){this._context.$implicit=this._context.ngIf=n,this._updateView()}set ngIfThen(n){E1(n,!1),this._thenTemplateRef=n,this._thenViewRef=null,this._updateView()}set ngIfElse(n){E1(n,!1),this._elseTemplateRef=n,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngIfUseIfTypeGuard;static ngTemplateGuard_ngIf;static ngTemplateContextGuard(n,r){return!0}static \u0275fac=function(r){return new(r||e)(oe(rt),oe(gn))};static \u0275dir=ot({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"}})}return e})(),aa=class{$implicit=null;ngIf=null};function E1(e,t){if(e&&!e.createEmbeddedView)throw new _(2020,!1)}var U2=(()=>{class e{_ngEl;_differs;_renderer;_ngStyle=null;_differ=null;constructor(n,r,o){this._ngEl=n,this._differs=r,this._renderer=o}set ngStyle(n){this._ngStyle=n,!this._differ&&n&&(this._differ=this._differs.find(n).create())}ngDoCheck(){if(this._differ){let n=this._differ.diff(this._ngStyle);n&&this._applyChanges(n)}}_setStyle(n,r){let[o,i]=n.split("."),s=o.indexOf("-")===-1?void 0:nt.DashCase;r!=null?this._renderer.setStyle(this._ngEl.nativeElement,o,i?`${r}${i}`:r,s):this._renderer.removeStyle(this._ngEl.nativeElement,o,s)}_applyChanges(n){n.forEachRemovedItem(r=>this._setStyle(r.key,null)),n.forEachAddedItem(r=>this._setStyle(r.key,r.currentValue)),n.forEachChangedItem(r=>this._setStyle(r.key,r.currentValue))}static \u0275fac=function(r){return new(r||e)(oe(jt),oe(Ku),oe(pi))};static \u0275dir=ot({type:e,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"}})}return e})(),z2=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;constructor(n){this._viewContainerRef=n}ngOnChanges(n){if(this._shouldRecreateView(n)){let r=this._viewContainerRef;if(this._viewRef&&r.remove(r.indexOf(this._viewRef)),!this.ngTemplateOutlet){this._viewRef=null;return}let o=this._createContextForwardProxy();this._viewRef=r.createEmbeddedView(this.ngTemplateOutlet,o,{injector:this.ngTemplateOutletInjector??void 0})}}_shouldRecreateView(n){return!!n.ngTemplateOutlet||!!n.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(n,r,o)=>this.ngTemplateOutletContext?Reflect.set(this.ngTemplateOutletContext,r,o):!1,get:(n,r,o)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,r,o)}})}static \u0275fac=function(r){return new(r||e)(oe(rt))};static \u0275dir=ot({type:e,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},features:[hu]})}return e})();function q2(e,t){return new _(2100,!1)}var Xf=class{createSubscription(t,n,r){return de(()=>t.subscribe({next:n,error:r}))}dispose(t){de(()=>t.unsubscribe())}},ep=class{createSubscription(t,n,r){return t.then(o=>n?.(o),o=>r?.(o)),{unsubscribe:()=>{n=null,r=null}}}dispose(t){t.unsubscribe()}},G2=new ep,W2=new Xf,Z2=(()=>{class e{_ref;_latestValue=null;markForCheckOnValueUpdate=!0;_subscription=null;_obj=null;_strategy=null;applicationErrorHandler=b(Pt);constructor(n){this._ref=n}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(n){if(!this._obj){if(n)try{this.markForCheckOnValueUpdate=!1,this._subscribe(n)}finally{this.markForCheckOnValueUpdate=!0}return this._latestValue}return n!==this._obj?(this._dispose(),this.transform(n)):this._latestValue}_subscribe(n){this._obj=n,this._strategy=this._selectStrategy(n),this._subscription=this._strategy.createSubscription(n,r=>this._updateLatestValue(n,r),r=>this.applicationErrorHandler(r))}_selectStrategy(n){if(gi(n))return G2;if(Ou(n))return W2;throw q2(e,n)}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(n,r){n===this._obj&&(this._latestValue=r,this.markForCheckOnValueUpdate&&this._ref?.markForCheck())}static \u0275fac=function(r){return new(r||e)(oe(yf,16))};static \u0275pipe=ku({name:"async",type:e,pure:!1})}return e})();function Y2(e,t){return{key:e,value:t}}var Q2=(()=>{class e{differs;constructor(n){this.differs=n}differ;keyValues=[];compareFn=_1;transform(n,r=_1){if(!n||!(n instanceof Map)&&typeof n!="object")return null;this.differ??=this.differs.find(n).create();let o=this.differ.diff(n),i=r!==this.compareFn;return o&&(this.keyValues=[],o.forEachItem(s=>{this.keyValues.push(Y2(s.key,s.currentValue))})),(o||i)&&(r&&this.keyValues.sort(r),this.compareFn=r),this.keyValues}static \u0275fac=function(r){return new(r||e)(oe(Ku,16))};static \u0275pipe=ku({name:"keyvalue",type:e,pure:!1})}return e})();function _1(e,t){let n=e.key,r=t.key;if(n===r)return 0;if(n==null)return 1;if(r==null)return-1;if(typeof n=="string"&&typeof r=="string")return n{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=$t({type:e});static \u0275inj=ht({})}return e})();function xi(e,t){t=encodeURIComponent(t);for(let n of e.split(";")){let r=n.indexOf("="),[o,i]=r==-1?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}var tr=class{};var rp="browser";function w1(e){return e===rp}var UV=(()=>{class e{static \u0275prov=I({token:e,providedIn:"root",factory:()=>new np(b(K),window)})}return e})(),np=class{document;window;offset=()=>[0,0];constructor(t,n){this.document=t,this.window=n}setOffset(t){Array.isArray(t)?this.offset=()=>t:this.offset=t}getScrollPosition(){return[this.window.scrollX,this.window.scrollY]}scrollToPosition(t,n){this.window.scrollTo(P(S({},n),{left:t[0],top:t[1]}))}scrollToAnchor(t,n){let r=K2(this.document,t);r&&(this.scrollToElement(r,n),r.focus())}setHistoryScrollRestoration(t){try{this.window.history.scrollRestoration=t}catch{console.warn(pt(2400,!1))}}scrollToElement(t,n){let r=t.getBoundingClientRect(),o=r.left+this.window.pageXOffset,i=r.top+this.window.pageYOffset,s=this.offset();this.window.scrollTo(P(S({},n),{left:o-s[0],top:i-s[1]}))}};function K2(e,t){let n=e.getElementById(t)||e.getElementsByName(t)[0];if(n)return n;if(typeof e.createTreeWalker=="function"&&e.body&&typeof e.body.attachShadow=="function"){let r=e.createTreeWalker(e.body,NodeFilter.SHOW_ELEMENT),o=r.currentNode;for(;o;){let i=o.shadowRoot;if(i){let s=i.getElementById(t)||i.querySelector(`[name="${t}"]`);if(s)return s}o=r.nextNode()}}return null}var Ii=class{_doc;constructor(t){this._doc=t}manager},ca=(()=>{class e extends Ii{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o,i){return n.addEventListener(r,o,i),()=>this.removeEventListener(n,r,o,i)}removeEventListener(n,r,o,i){return n.removeEventListener(r,o,i)}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),fa=new x(""),up=(()=>{class e{_zone;_plugins;_eventNameToPlugin=new Map;constructor(n,r){this._zone=r,n.forEach(s=>{s.manager=this});let o=n.filter(s=>!(s instanceof ca));this._plugins=o.slice().reverse();let i=n.find(s=>s instanceof ca);i&&this._plugins.push(i)}addEventListener(n,r,o,i){return this._findPluginFor(r).addEventListener(n,r,o,i)}getZone(){return this._zone}_findPluginFor(n){let r=this._eventNameToPlugin.get(n);if(r)return r;if(r=this._plugins.find(i=>i.supports(n)),!r)throw new _(5101,!1);return this._eventNameToPlugin.set(n,r),r}static \u0275fac=function(r){return new(r||e)(A(fa),A(be))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),op="ng-app-id";function x1(e){for(let t of e)t.remove()}function I1(e,t){let n=t.createElement("style");return n.textContent=e,n}function J2(e,t,n,r){let o=e.head?.querySelectorAll(`style[${op}="${t}"],link[${op}="${t}"]`);if(o)for(let i of o)i.removeAttribute(op),i instanceof HTMLLinkElement?r.set(i.href.slice(i.href.lastIndexOf("/")+1),{usage:0,elements:[i]}):i.textContent&&n.set(i.textContent,{usage:0,elements:[i]})}function sp(e,t){let n=t.createElement("link");return n.setAttribute("rel","stylesheet"),n.setAttribute("href",e),n}var ap=(()=>{class e{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;constructor(n,r,o,i={}){this.doc=n,this.appId=r,this.nonce=o,J2(n,r,this.inline,this.external),this.hosts.add(n.head)}addStyles(n,r){for(let o of n)this.addUsage(o,this.inline,I1);r?.forEach(o=>this.addUsage(o,this.external,sp))}removeStyles(n,r){for(let o of n)this.removeUsage(o,this.inline);r?.forEach(o=>this.removeUsage(o,this.external))}addUsage(n,r,o){let i=r.get(n);i?i.usage++:r.set(n,{usage:1,elements:[...this.hosts].map(s=>this.addElement(s,o(n,this.doc)))})}removeUsage(n,r){let o=r.get(n);o&&(o.usage--,o.usage<=0&&(x1(o.elements),r.delete(n)))}ngOnDestroy(){for(let[,{elements:n}]of[...this.inline,...this.external])x1(n);this.hosts.clear()}addHost(n){this.hosts.add(n);for(let[r,{elements:o}]of this.inline)o.push(this.addElement(n,I1(r,this.doc)));for(let[r,{elements:o}]of this.external)o.push(this.addElement(n,sp(r,this.doc)))}removeHost(n){this.hosts.delete(n)}addElement(n,r){return this.nonce&&r.setAttribute("nonce",this.nonce),n.appendChild(r)}static \u0275fac=function(r){return new(r||e)(A(K),A(gu),A(yu,8),A(Xn))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),ip={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/Math/MathML"},cp=/%COMP%/g;var S1="%COMP%",X2=`_nghost-${S1}`,eT=`_ngcontent-${S1}`,tT=!0,nT=new x("",{factory:()=>tT});function rT(e){return eT.replace(cp,e)}function oT(e){return X2.replace(cp,e)}function M1(e,t){return t.map(n=>n.replace(cp,e))}var lp=(()=>{class e{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;ngZone;nonce;tracingService;rendererByCompId=new Map;defaultRenderer;constructor(n,r,o,i,s,u,a=null,c=null){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.removeStylesOnCompDestroy=i,this.doc=s,this.ngZone=u,this.nonce=a,this.tracingService=c,this.defaultRenderer=new Ti(n,s,u,this.tracingService)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;let o=this.getOrCreateRenderer(n,r);return o instanceof da?o.applyToHost(n):o instanceof Si&&o.applyStyles(),o}getOrCreateRenderer(n,r){let o=this.rendererByCompId,i=o.get(r.id);if(!i){let s=this.doc,u=this.ngZone,a=this.eventManager,c=this.sharedStylesHost,l=this.removeStylesOnCompDestroy,d=this.tracingService;switch(r.encapsulation){case tt.Emulated:i=new da(a,c,r,this.appId,l,s,u,d);break;case tt.ShadowDom:return new la(a,n,r,s,u,this.nonce,d,c);case tt.ExperimentalIsolatedShadowDom:return new la(a,n,r,s,u,this.nonce,d);default:i=new Si(a,c,r,l,s,u,d);break}o.set(r.id,i)}return i}ngOnDestroy(){this.rendererByCompId.clear()}componentReplaced(n){this.rendererByCompId.delete(n)}static \u0275fac=function(r){return new(r||e)(A(up),A(ap),A(gu),A(nT),A(K),A(be),A(yu),A(Dt,8))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),Ti=class{eventManager;doc;ngZone;tracingService;data=Object.create(null);throwOnSyntheticProps=!0;constructor(t,n,r,o){this.eventManager=t,this.doc=n,this.ngZone=r,this.tracingService=o}destroy(){}destroyNode=null;createElement(t,n){return n?this.doc.createElementNS(ip[n]||n,t):this.doc.createElement(t)}createComment(t){return this.doc.createComment(t)}createText(t){return this.doc.createTextNode(t)}appendChild(t,n){(T1(t)?t.content:t).appendChild(n)}insertBefore(t,n,r){t&&(T1(t)?t.content:t).insertBefore(n,r)}removeChild(t,n){n.remove()}selectRootElement(t,n){let r=typeof t=="string"?this.doc.querySelector(t):t;if(!r)throw new _(-5104,!1);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;let i=ip[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){let o=ip[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&(nt.DashCase|nt.Important)?t.style.setProperty(n,r,o&nt.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&nt.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t!=null&&(t[n]=r)}setValue(t,n){t.nodeValue=n}listen(t,n,r,o){if(typeof t=="string"&&(t=Et().getGlobalEventTarget(this.doc,t),!t))throw new _(5102,!1);let i=this.decoratePreventDefault(r);return this.tracingService?.wrapEventListener&&(i=this.tracingService.wrapEventListener(t,n,i)),this.eventManager.addEventListener(t,n,i,o)}decoratePreventDefault(t){return n=>{if(n==="__ngUnwrap__")return t;t(n)===!1&&n.preventDefault()}}};function T1(e){return e.tagName==="TEMPLATE"&&e.content!==void 0}var la=class extends Ti{hostEl;sharedStylesHost;shadowRoot;constructor(t,n,r,o,i,s,u,a){super(t,o,i,u),this.hostEl=n,this.sharedStylesHost=a,this.shadowRoot=n.attachShadow({mode:"open"}),this.sharedStylesHost&&this.sharedStylesHost.addHost(this.shadowRoot);let c=r.styles;c=M1(r.id,c);for(let d of c){let h=document.createElement("style");s&&h.setAttribute("nonce",s),h.textContent=d,this.shadowRoot.appendChild(h)}let l=r.getExternalStyles?.();if(l)for(let d of l){let h=sp(d,o);s&&h.setAttribute("nonce",s),this.shadowRoot.appendChild(h)}}nodeOrShadowRoot(t){return t===this.hostEl?this.shadowRoot:t}appendChild(t,n){return super.appendChild(this.nodeOrShadowRoot(t),n)}insertBefore(t,n,r){return super.insertBefore(this.nodeOrShadowRoot(t),n,r)}removeChild(t,n){return super.removeChild(null,n)}parentNode(t){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(t)))}destroy(){this.sharedStylesHost&&this.sharedStylesHost.removeHost(this.shadowRoot)}},Si=class extends Ti{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;constructor(t,n,r,o,i,s,u,a){super(t,i,s,u),this.sharedStylesHost=n,this.removeStylesOnCompDestroy=o;let c=r.styles;this.styles=a?M1(a,c):c,this.styleUrls=r.getExternalStyles?.(a)}applyStyles(){this.sharedStylesHost.addStyles(this.styles,this.styleUrls)}destroy(){this.removeStylesOnCompDestroy&&Qn.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},da=class extends Si{contentAttr;hostAttr;constructor(t,n,r,o,i,s,u,a){let c=o+"-"+r.id;super(t,n,r,i,s,u,a,c),this.contentAttr=rT(c),this.hostAttr=oT(c)}applyToHost(t){this.applyStyles(),this.setAttribute(t,this.hostAttr,"")}createElement(t,n){let r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}};var pa=class e extends wi{supportsDOMEvents=!0;static makeCurrent(){Kf(new e)}onAndCancel(t,n,r,o){return t.addEventListener(n,r,o),()=>{t.removeEventListener(n,r,o)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.remove()}createElement(t,n){return n=n||this.getDefaultDocument(),n.createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return n==="window"?window:n==="document"?t:n==="body"?t.body:null}getBaseHref(t){let n=iT();return n==null?null:sT(n)}resetBaseElement(){Mi=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return xi(document.cookie,t)}},Mi=null;function iT(){return Mi=Mi||document.head.querySelector("base"),Mi?Mi.getAttribute("href"):null}function sT(e){return new URL(e,document.baseURI).pathname}var ha=class{addToWindow(t){xe.getAngularTestability=(r,o=!0)=>{let i=t.findTestabilityInTree(r,o);if(i==null)throw new _(5103,!1);return i},xe.getAllAngularTestabilities=()=>t.getAllTestabilities(),xe.getAllAngularRootElements=()=>t.getAllRootElements();let n=r=>{let o=xe.getAllAngularTestabilities(),i=o.length,s=function(){i--,i==0&&r()};o.forEach(u=>{u.whenStable(s)})};xe.frameworkStabilizers||(xe.frameworkStabilizers=[]),xe.frameworkStabilizers.push(n)}findTestabilityInTree(t,n,r){if(n==null)return null;let o=t.getTestability(n);return o??(r?Et().isShadowRoot(n)?this.findTestabilityInTree(t,n.host,!0):this.findTestabilityInTree(t,n.parentElement,!0):null)}},uT=(()=>{class e{build(){return new XMLHttpRequest}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})(),A1=["alt","control","meta","shift"],aT={"\b":"Backspace"," ":"Tab","\x7F":"Delete","\x1B":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},cT={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},N1=(()=>{class e extends Ii{constructor(n){super(n)}supports(n){return e.parseEventName(n)!=null}addEventListener(n,r,o,i){let s=e.parseEventName(r),u=e.eventCallback(s.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Et().onAndCancel(n,s.domEventName,u,i))}static parseEventName(n){let r=n.toLowerCase().split("."),o=r.shift();if(r.length===0||!(o==="keydown"||o==="keyup"))return null;let i=e._normalizeKey(r.pop()),s="",u=r.indexOf("code");if(u>-1&&(r.splice(u,1),s="code."),A1.forEach(c=>{let l=r.indexOf(c);l>-1&&(r.splice(l,1),s+=c+".")}),s+=i,r.length!=0||i.length===0)return null;let a={};return a.domEventName=o,a.fullKey=s,a}static matchEventFullKeyCode(n,r){let o=aT[n.key]||n.key,i="";return r.indexOf("code.")>-1&&(o=n.code,i="code."),o==null||!o?!1:(o=o.toLowerCase(),o===" "?o="space":o==="."&&(o="dot"),A1.forEach(s=>{if(s!==o){let u=cT[s];u(n)&&(i+=s+".")}}),i+=o,i===r)}static eventCallback(n,r,o){return i=>{e.matchEventFullKeyCode(i,n)&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){return n==="esc"?"escape":n}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac})}return e})();function lT(e,t,n){return at(this,null,function*(){let r=S({rootComponent:e},dT(t,n));return Zb(r)})}function dT(e,t){return{platformRef:t?.platformRef,appProviders:[...k1,...e?.providers??[]],platformProviders:gT}}function fT(){pa.makeCurrent()}function pT(){return new Ve}function hT(){return cd(document),document}var gT=[{provide:Xn,useValue:rp},{provide:mu,useValue:fT,multi:!0},{provide:K,useFactory:hT}];var mT=[{provide:Fu,useClass:ha},{provide:Ru,useClass:hi},{provide:hi,useClass:hi}],k1=[{provide:Lo,useValue:"root"},{provide:Ve,useFactory:pT},{provide:fa,useClass:ca,multi:!0},{provide:fa,useClass:N1,multi:!0},lp,ap,up,{provide:Kn,useExisting:lp},{provide:tr,useClass:uT},[]],yT=(()=>{class e{constructor(){}static \u0275fac=function(r){return new(r||e)};static \u0275mod=$t({type:e});static \u0275inj=ht({providers:[...k1,...mT],imports:[tp,Wb]})}return e})();var Dn=class e{headers;normalizedNames=new Map;lazyInit;lazyUpdate=null;constructor(t){t?typeof t=="string"?this.lazyInit=()=>{this.headers=new Map,t.split(` +`).forEach(n=>{let r=n.indexOf(":");if(r>0){let o=n.slice(0,r),i=n.slice(r+1).trim();this.addHeaderEntry(o,i)}})}:typeof Headers<"u"&&t instanceof Headers?(this.headers=new Map,t.forEach((n,r)=>{this.addHeaderEntry(r,n)})):this.lazyInit=()=>{this.headers=new Map,Object.entries(t).forEach(([n,r])=>{this.setHeaderEntries(n,r)})}:this.headers=new Map}has(t){return this.init(),this.headers.has(t.toLowerCase())}get(t){this.init();let n=this.headers.get(t.toLowerCase());return n&&n.length>0?n[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(t){return this.init(),this.headers.get(t.toLowerCase())||null}append(t,n){return this.clone({name:t,value:n,op:"a"})}set(t,n){return this.clone({name:t,value:n,op:"s"})}delete(t,n){return this.clone({name:t,value:n,op:"d"})}maybeSetNormalizedName(t,n){this.normalizedNames.has(n)||this.normalizedNames.set(n,t)}init(){this.lazyInit&&(this.lazyInit instanceof e?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(t=>this.applyUpdate(t)),this.lazyUpdate=null))}copyFrom(t){t.init(),Array.from(t.headers.keys()).forEach(n=>{this.headers.set(n,t.headers.get(n)),this.normalizedNames.set(n,t.normalizedNames.get(n))})}clone(t){let n=new e;return n.lazyInit=this.lazyInit&&this.lazyInit instanceof e?this.lazyInit:this,n.lazyUpdate=(this.lazyUpdate||[]).concat([t]),n}applyUpdate(t){let n=t.name.toLowerCase();switch(t.op){case"a":case"s":let r=t.value;if(typeof r=="string"&&(r=[r]),r.length===0)return;this.maybeSetNormalizedName(t.name,n);let o=(t.op==="a"?this.headers.get(n):void 0)||[];o.push(...r),this.headers.set(n,o);break;case"d":let i=t.value;if(!i)this.headers.delete(n),this.normalizedNames.delete(n);else{let s=this.headers.get(n);if(!s)return;s=s.filter(u=>i.indexOf(u)===-1),s.length===0?(this.headers.delete(n),this.normalizedNames.delete(n)):this.headers.set(n,s)}break}}addHeaderEntry(t,n){let r=t.toLowerCase();this.maybeSetNormalizedName(t,r),this.headers.has(r)?this.headers.get(r).push(n):this.headers.set(r,[n])}setHeaderEntries(t,n){let r=(Array.isArray(n)?n:[n]).map(i=>i.toString()),o=t.toLowerCase();this.headers.set(o,r),this.maybeSetNormalizedName(t,o)}forEach(t){this.init(),Array.from(this.normalizedNames.keys()).forEach(n=>t(this.normalizedNames.get(n),this.headers.get(n)))}};var ma=class{map=new Map;set(t,n){return this.map.set(t,n),this}get(t){return this.map.has(t)||this.map.set(t,t.defaultValue()),this.map.get(t)}delete(t){return this.map.delete(t),this}has(t){return this.map.has(t)}keys(){return this.map.keys()}},ya=class{encodeKey(t){return R1(t)}encodeValue(t){return R1(t)}decodeKey(t){return decodeURIComponent(t)}decodeValue(t){return decodeURIComponent(t)}};function bT(e,t){let n=new Map;return e.length>0&&e.replace(/^\?/,"").split("&").forEach(o=>{let i=o.indexOf("="),[s,u]=i==-1?[t.decodeKey(o),""]:[t.decodeKey(o.slice(0,i)),t.decodeValue(o.slice(i+1))],a=n.get(s)||[];a.push(u),n.set(s,a)}),n}var vT=/%(\d[a-f0-9])/gi,DT={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function R1(e){return encodeURIComponent(e).replace(vT,(t,n)=>DT[n]??t)}function ga(e){return`${e}`}var qt=class e{map;encoder;updates=null;cloneFrom=null;constructor(t={}){if(this.encoder=t.encoder||new ya,t.fromString){if(t.fromObject)throw new _(2805,!1);this.map=bT(t.fromString,this.encoder)}else t.fromObject?(this.map=new Map,Object.keys(t.fromObject).forEach(n=>{let r=t.fromObject[n],o=Array.isArray(r)?r.map(ga):[ga(r)];this.map.set(n,o)})):this.map=null}has(t){return this.init(),this.map.has(t)}get(t){this.init();let n=this.map.get(t);return n?n[0]:null}getAll(t){return this.init(),this.map.get(t)||null}keys(){return this.init(),Array.from(this.map.keys())}append(t,n){return this.clone({param:t,value:n,op:"a"})}appendAll(t){let n=[];return Object.keys(t).forEach(r=>{let o=t[r];Array.isArray(o)?o.forEach(i=>{n.push({param:r,value:i,op:"a"})}):n.push({param:r,value:o,op:"a"})}),this.clone(n)}set(t,n){return this.clone({param:t,value:n,op:"s"})}delete(t,n){return this.clone({param:t,value:n,op:"d"})}toString(){return this.init(),this.keys().map(t=>{let n=this.encoder.encodeKey(t);return this.map.get(t).map(r=>n+"="+this.encoder.encodeValue(r)).join("&")}).filter(t=>t!=="").join("&")}clone(t){let n=new e({encoder:this.encoder});return n.cloneFrom=this.cloneFrom||this,n.updates=(this.updates||[]).concat(t),n}init(){this.map===null&&(this.map=new Map),this.cloneFrom!==null&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(t=>this.map.set(t,this.cloneFrom.map.get(t))),this.updates.forEach(t=>{switch(t.op){case"a":case"s":let n=(t.op==="a"?this.map.get(t.param):void 0)||[];n.push(ga(t.value)),this.map.set(t.param,n);break;case"d":if(t.value!==void 0){let r=this.map.get(t.param)||[],o=r.indexOf(ga(t.value));o!==-1&&r.splice(o,1),r.length>0?this.map.set(t.param,r):this.map.delete(t.param)}else{this.map.delete(t.param);break}}}),this.cloneFrom=this.updates=null)}};function ET(e){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}function F1(e){return typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer}function O1(e){return typeof Blob<"u"&&e instanceof Blob}function P1(e){return typeof FormData<"u"&&e instanceof FormData}function _T(e){return typeof URLSearchParams<"u"&&e instanceof URLSearchParams}var L1="Content-Type",j1="Accept",V1="text/plain",H1="application/json",CT=`${H1}, ${V1}, */*`,so=class e{url;body=null;headers;context;reportProgress=!1;withCredentials=!1;credentials;keepalive=!1;cache;priority;mode;redirect;referrer;integrity;referrerPolicy;responseType="json";method;params;urlWithParams;transferCache;timeout;constructor(t,n,r,o){this.url=n,this.method=t.toUpperCase();let i;if(ET(this.method)||o?(this.body=r!==void 0?r:null,i=o):i=r,i){if(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,this.keepalive=!!i.keepalive,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.context&&(this.context=i.context),i.params&&(this.params=i.params),i.priority&&(this.priority=i.priority),i.cache&&(this.cache=i.cache),i.credentials&&(this.credentials=i.credentials),typeof i.timeout=="number"){if(i.timeout<1||!Number.isInteger(i.timeout))throw new _(2822,"");this.timeout=i.timeout}i.mode&&(this.mode=i.mode),i.redirect&&(this.redirect=i.redirect),i.integrity&&(this.integrity=i.integrity),i.referrer&&(this.referrer=i.referrer),i.referrerPolicy&&(this.referrerPolicy=i.referrerPolicy),this.transferCache=i.transferCache}if(this.headers??=new Dn,this.context??=new ma,!this.params)this.params=new qt,this.urlWithParams=n;else{let s=this.params.toString();if(s.length===0)this.urlWithParams=n;else{let u=n.indexOf("?"),a=u===-1?"?":uE.set(N,t.setHeaders[N]),w)),t.setParams&&(D=Object.keys(t.setParams).reduce((E,N)=>E.set(N,t.setParams[N]),D)),new e(n,r,m,{params:D,headers:w,context:F,reportProgress:v,responseType:o,withCredentials:y,transferCache:p,keepalive:i,cache:u,priority:s,timeout:g,mode:a,redirect:c,credentials:l,referrer:d,integrity:h,referrerPolicy:f})}},nr=(function(e){return e[e.Sent=0]="Sent",e[e.UploadProgress=1]="UploadProgress",e[e.ResponseHeader=2]="ResponseHeader",e[e.DownloadProgress=3]="DownloadProgress",e[e.Response=4]="Response",e[e.User=5]="User",e})(nr||{}),ao=class{headers;status;statusText;url;ok;type;redirected;responseType;constructor(t,n=200,r="OK"){this.headers=t.headers||new Dn,this.status=t.status!==void 0?t.status:n,this.statusText=t.statusText||r,this.url=t.url||null,this.redirected=t.redirected,this.responseType=t.responseType,this.ok=this.status>=200&&this.status<300}},ba=class e extends ao{constructor(t={}){super(t)}type=nr.ResponseHeader;clone(t={}){return new e({headers:t.headers||this.headers,status:t.status!==void 0?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})}},Ai=class e extends ao{body;constructor(t={}){super(t),this.body=t.body!==void 0?t.body:null}type=nr.Response;clone(t={}){return new e({body:t.body!==void 0?t.body:this.body,headers:t.headers||this.headers,status:t.status!==void 0?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0,redirected:t.redirected??this.redirected,responseType:t.responseType??this.responseType})}},uo=class extends ao{name="HttpErrorResponse";message;error;ok=!1;constructor(t){super(t,0,"Unknown Error"),this.status>=200&&this.status<300?this.message=`Http failure during parsing for ${t.url||"(unknown url)"}`:this.message=`Http failure response for ${t.url||"(unknown url)"}: ${t.status} ${t.statusText}`,this.error=t.error||null}},wT=200,xT=204;var IT=new x("");var TT=/^\)\]\}',?\n/;var fp=(()=>{class e{xhrFactory;tracingService=b(Dt,{optional:!0});constructor(n){this.xhrFactory=n}maybePropagateTrace(n){return this.tracingService?.propagate?this.tracingService.propagate(n):n}handle(n){if(n.method==="JSONP")throw new _(-2800,!1);let r=this.xhrFactory;return us(null).pipe(ps(()=>new B(i=>{let s=r.build();if(s.open(n.method,n.urlWithParams),n.withCredentials&&(s.withCredentials=!0),n.headers.forEach((m,y)=>s.setRequestHeader(m,y.join(","))),n.headers.has(j1)||s.setRequestHeader(j1,CT),!n.headers.has(L1)){let m=n.detectContentTypeHeader();m!==null&&s.setRequestHeader(L1,m)}if(n.timeout&&(s.timeout=n.timeout),n.responseType){let m=n.responseType.toLowerCase();s.responseType=m!=="json"?m:"text"}let u=n.serializeBody(),a=null,c=()=>{if(a!==null)return a;let m=s.statusText||"OK",y=new Dn(s.getAllResponseHeaders()),v=s.responseURL||n.url;return a=new ba({headers:y,status:s.status,statusText:m,url:v}),a},l=this.maybePropagateTrace(()=>{let{headers:m,status:y,statusText:v,url:w}=c(),D=null;y!==xT&&(D=typeof s.response>"u"?s.responseText:s.response),y===0&&(y=D?wT:0);let F=y>=200&&y<300;if(n.responseType==="json"&&typeof D=="string"){let E=D;D=D.replace(TT,"");try{D=D!==""?JSON.parse(D):null}catch(N){D=E,F&&(F=!1,D={error:N,text:D})}}F?(i.next(new Ai({body:D,headers:m,status:y,statusText:v,url:w||void 0})),i.complete()):i.error(new uo({error:D,headers:m,status:y,statusText:v,url:w||void 0}))}),d=this.maybePropagateTrace(m=>{let{url:y}=c(),v=new uo({error:m,status:s.status||0,statusText:s.statusText||"Unknown Error",url:y||void 0});i.error(v)}),h=d;n.timeout&&(h=this.maybePropagateTrace(m=>{let{url:y}=c(),v=new uo({error:new DOMException("Request timed out","TimeoutError"),status:s.status||0,statusText:s.statusText||"Request timeout",url:y||void 0});i.error(v)}));let f=!1,p=this.maybePropagateTrace(m=>{f||(i.next(c()),f=!0);let y={type:nr.DownloadProgress,loaded:m.loaded};m.lengthComputable&&(y.total=m.total),n.responseType==="text"&&s.responseText&&(y.partialText=s.responseText),i.next(y)}),g=this.maybePropagateTrace(m=>{let y={type:nr.UploadProgress,loaded:m.loaded};m.lengthComputable&&(y.total=m.total),i.next(y)});return s.addEventListener("load",l),s.addEventListener("error",d),s.addEventListener("timeout",h),s.addEventListener("abort",d),n.reportProgress&&(s.addEventListener("progress",p),u!==null&&s.upload&&s.upload.addEventListener("progress",g)),s.send(u),i.next({type:nr.Sent}),()=>{s.removeEventListener("error",d),s.removeEventListener("abort",d),s.removeEventListener("load",l),s.removeEventListener("timeout",h),n.reportProgress&&(s.removeEventListener("progress",p),u!==null&&s.upload&&s.upload.removeEventListener("progress",g)),s.readyState!==s.DONE&&s.abort()}})))}static \u0275fac=function(r){return new(r||e)(A(tr))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function $1(e,t){return t(e)}function ST(e,t){return(n,r)=>t.intercept(n,{handle:o=>e(o,r)})}function MT(e,t,n){return(r,o)=>Sr(n,()=>t(r,i=>e(i,o)))}var U1=new x(""),pp=new x("",{factory:()=>[]}),z1=new x(""),hp=new x("",{factory:()=>!0});function AT(){let e=null;return(t,n)=>{e===null&&(e=(b(U1,{optional:!0})??[]).reduceRight(ST,$1));let r=b(Wn);if(b(hp)){let i=r.add();return e(t,n).pipe(ds(i))}else return e(t,n)}}var gp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(fp),o},providedIn:"root"})}return e})();var va=(()=>{class e{backend;injector;chain=null;pendingTasks=b(Wn);contributeToStability=b(hp);constructor(n,r){this.backend=n,this.injector=r}handle(n){if(this.chain===null){let r=Array.from(new Set([...this.injector.get(pp),...this.injector.get(z1,[])]));this.chain=r.reduceRight((o,i)=>MT(o,i,this.injector),$1)}if(this.contributeToStability){let r=this.pendingTasks.add();return this.chain(n,o=>this.backend.handle(o)).pipe(ds(r))}else return this.chain(n,r=>this.backend.handle(r))}static \u0275fac=function(r){return new(r||e)(A(gp),A(Ce))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),mp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(va),o},providedIn:"root"})}return e})();function dp(e,t){return{body:t,headers:e.headers,context:e.context,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials,credentials:e.credentials,transferCache:e.transferCache,timeout:e.timeout,keepalive:e.keepalive,priority:e.priority,cache:e.cache,mode:e.mode,redirect:e.redirect,integrity:e.integrity,referrer:e.referrer,referrerPolicy:e.referrerPolicy}}var q1=(()=>{class e{handler;constructor(n){this.handler=n}request(n,r,o={}){let i;if(n instanceof so)i=n;else{let a;o.headers instanceof Dn?a=o.headers:a=new Dn(o.headers);let c;o.params&&(o.params instanceof qt?c=o.params:c=new qt({fromObject:o.params})),i=new so(n,r,o.body!==void 0?o.body:null,{headers:a,context:o.context,params:c,reportProgress:o.reportProgress,responseType:o.responseType||"json",withCredentials:o.withCredentials,transferCache:o.transferCache,keepalive:o.keepalive,priority:o.priority,cache:o.cache,mode:o.mode,redirect:o.redirect,credentials:o.credentials,referrer:o.referrer,referrerPolicy:o.referrerPolicy,integrity:o.integrity,timeout:o.timeout})}let s=us(i).pipe(lc(a=>this.handler.handle(a)));if(n instanceof so||o.observe==="events")return s;let u=s.pipe(on(a=>a instanceof Ai));switch(o.observe||"body"){case"body":switch(i.responseType){case"arraybuffer":return u.pipe(Ee(a=>{if(a.body!==null&&!(a.body instanceof ArrayBuffer))throw new _(2806,!1);return a.body}));case"blob":return u.pipe(Ee(a=>{if(a.body!==null&&!(a.body instanceof Blob))throw new _(2807,!1);return a.body}));case"text":return u.pipe(Ee(a=>{if(a.body!==null&&typeof a.body!="string")throw new _(2808,!1);return a.body}));default:return u.pipe(Ee(a=>a.body))}case"response":return u;default:throw new _(2809,!1)}}delete(n,r={}){return this.request("DELETE",n,r)}get(n,r={}){return this.request("GET",n,r)}head(n,r={}){return this.request("HEAD",n,r)}jsonp(n,r){return this.request("JSONP",n,{params:new qt().append(r,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(n,r={}){return this.request("OPTIONS",n,r)}patch(n,r,o={}){return this.request("PATCH",n,dp(o,r))}post(n,r,o={}){return this.request("POST",n,dp(o,r))}put(n,r,o={}){return this.request("PUT",n,dp(o,r))}static \u0275fac=function(r){return new(r||e)(A(mp))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var NT=new x("",{factory:()=>!0}),kT="XSRF-TOKEN",RT=new x("",{factory:()=>kT}),FT="X-XSRF-TOKEN",OT=new x("",{factory:()=>FT}),PT=(()=>{class e{cookieName=b(RT);doc=b(K);lastCookieString="";lastToken=null;parseCount=0;getToken(){let n=this.doc.cookie||"";return n!==this.lastCookieString&&(this.parseCount++,this.lastToken=xi(n,this.cookieName),this.lastCookieString=n),this.lastToken}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),G1=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(PT),o},providedIn:"root"})}return e})();function LT(e,t){if(!b(NT)||e.method==="GET"||e.method==="HEAD")return t(e);try{let o=b(vn).href,{origin:i}=new URL(o),{origin:s}=new URL(e.url,i);if(i!==s)return t(e)}catch{return t(e)}let n=b(G1).getToken(),r=b(OT);return n!=null&&!e.headers.has(r)&&(e=e.clone({headers:e.headers.set(r,n)})),t(e)}var yp=(function(e){return e[e.Interceptors=0]="Interceptors",e[e.LegacyInterceptors=1]="LegacyInterceptors",e[e.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",e[e.NoXsrfProtection=3]="NoXsrfProtection",e[e.JsonpSupport=4]="JsonpSupport",e[e.RequestsMadeViaParent=5]="RequestsMadeViaParent",e[e.Fetch=6]="Fetch",e})(yp||{});function jT(e,t){return{\u0275kind:e,\u0275providers:t}}function W1(...e){let t=[q1,va,{provide:mp,useExisting:va},{provide:gp,useFactory:()=>b(IT,{optional:!0})??b(fp)},{provide:pp,useValue:LT,multi:!0}];for(let n of e)t.push(...n.\u0275providers);return Pn(t)}var B1=new x("");function Z1(){return jT(yp.LegacyInterceptors,[{provide:B1,useFactory:AT},{provide:pp,useExisting:B1,multi:!0}])}var BT=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275mod=$t({type:e});static \u0275inj=ht({providers:[W1(Z1())]})}return e})();var s$=(()=>{class e{_doc;constructor(n){this._doc=n}getTitle(){return this._doc.title}setTitle(n){this._doc.title=n||""}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var bp=(()=>{class e{static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:function(r){let o=null;return r?o=new(r||e):o=A(VT),o},providedIn:"root"})}return e})(),VT=(()=>{class e extends bp{_doc;constructor(n){super(),this._doc=n}sanitize(n,r){if(r==null)return null;switch(n){case Le.NONE:return r;case Le.HTML:return Bt(r,"HTML")?Pe(r):Du(this._doc,String(r)).toString();case Le.STYLE:return Bt(r,"Style")?Pe(r):r;case Le.SCRIPT:if(Bt(r,"Script"))return Pe(r);throw new _(5200,!1);case Le.URL:return Bt(r,"URL")?Pe(r):ui(String(r));case Le.RESOURCE_URL:if(Bt(r,"ResourceURL"))return Pe(r);throw new _(5201,!1);default:throw new _(5202,!1)}}bypassSecurityTrustHtml(n){return dd(n)}bypassSecurityTrustStyle(n){return fd(n)}bypassSecurityTrustScript(n){return pd(n)}bypassSecurityTrustUrl(n){return hd(n)}bypassSecurityTrustResourceUrl(n){return gd(n)}static \u0275fac=function(r){return new(r||e)(A(K))};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var Tp={};lr(Tp,{arrayReplaceAt:()=>Ip,assign:()=>fo,escapeHtml:()=>Zt,escapeRE:()=>CS,fromCodePoint:()=>Ri,has:()=>fS,isMdAsciiPunct:()=>sr,isPunctChar:()=>ir,isSpace:()=>H,isString:()=>Na,isValidEntityCode:()=>ka,isWhiteSpace:()=>or,lib:()=>wS,normalizeReference:()=>ur,unescapeAll:()=>Wt,unescapeMd:()=>yS});var wa={};lr(wa,{decode:()=>Ni,encode:()=>_a,format:()=>co,parse:()=>ki});var Y1={};function HT(e){let t=Y1[e];if(t)return t;t=Y1[e]=[];for(let n=0;n<128;n++){let r=String.fromCharCode(n);t.push(r)}for(let n=0;n=55296&&l<=57343?o+="\uFFFD\uFFFD\uFFFD":o+=String.fromCharCode(l),i+=6;continue}}if((u&248)===240&&i+91114111?o+="\uFFFD\uFFFD\uFFFD\uFFFD":(d-=65536,o+=String.fromCharCode(55296+(d>>10),56320+(d&1023))),i+=9;continue}}o+="\uFFFD"}return o})}Da.defaultChars=";/?:@&=+$,#";Da.componentChars="";var Ni=Da;var Q1={};function $T(e){let t=Q1[e];if(t)return t;t=Q1[e]=[];for(let n=0;n<128;n++){let r=String.fromCharCode(n);/^[0-9a-z]$/i.test(r)?t.push(r):t.push("%"+("0"+n.toString(16).toUpperCase()).slice(-2))}for(let n=0;n"u"&&(n=!0);let r=$T(t),o="";for(let i=0,s=e.length;i=55296&&u<=57343){if(u>=55296&&u<=56319&&i+1=56320&&a<=57343){o+=encodeURIComponent(e[i]+e[i+1]),i++;continue}}o+="%EF%BF%BD";continue}o+=encodeURIComponent(e[i])}return o}Ea.defaultChars=";/?:@&=+$,-_.!~*'()#";Ea.componentChars="-_.!~*'()";var _a=Ea;function co(e){let t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&e.hostname.indexOf(":")!==-1?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||"",t}function Ca(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var UT=/^([a-z0-9.+-]+:)/i,zT=/:[0-9]*$/,qT=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,GT=["<",">",'"',"`"," ","\r",` `," "],WT=["{","}","|","\\","^","`"].concat(GT),ZT=["'"].concat(WT),K1=["%","/","?",";","#"].concat(ZT),J1=["/","?","#"],YT=255,X1=/^[+a-z0-9A-Z_-]{0,63}$/,QT=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,ev={javascript:!0,"javascript:":!0},tv={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function KT(e,t){if(e&&e instanceof Ca)return e;let n=new Ca;return n.parse(e,t),n}Ca.prototype.parse=function(e,t){let n,r,o,i=e;if(i=i.trim(),!t&&e.split("#").length===1){let c=qT.exec(i);if(c)return this.pathname=c[1],c[2]&&(this.search=c[2]),this}let s=UT.exec(i);if(s&&(s=s[0],n=s.toLowerCase(),this.protocol=s,i=i.substr(s.length)),(t||s||i.match(/^\/\/[^@\/]+@[^@\/]+/))&&(o=i.substr(0,2)==="//",o&&!(s&&ev[s])&&(i=i.substr(2),this.slashes=!0)),!ev[s]&&(o||s&&!tv[s])){let c=-1;for(let p=0;p127?v+="x":v+=y[w];if(!v.match(X1)){let w=p.slice(0,g),D=p.slice(g+1),F=y.match(QT);F&&(w.push(F[1]),D.unshift(F[2])),D.length&&(i=D.join(".")+i),this.hostname=w.join(".");break}}}}this.hostname.length>YT&&(this.hostname=""),f&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}let u=i.indexOf("#");u!==-1&&(this.hash=i.substr(u),i=i.slice(0,u));let a=i.indexOf("?");return a!==-1&&(this.search=i.substr(a),i=i.slice(0,a)),i&&(this.pathname=i),tv[n]&&this.hostname&&!this.pathname&&(this.pathname=""),this};Ca.prototype.parseHost=function(e){let t=zT.exec(e);t&&(t=t[0],t!==":"&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var ki=KT;var vp={};lr(vp,{Any:()=>xa,Cc:()=>Ia,Cf:()=>nv,P:()=>lo,S:()=>Ta,Z:()=>Sa});var xa=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;var Ia=/[\0-\x1F\x7F-\x9F]/;var nv=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/;var lo=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/;var Ta=/[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/;var Sa=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;var rv=new Uint16Array('\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map(e=>e.charCodeAt(0)));var ov=new Uint16Array("\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map(e=>e.charCodeAt(0)));var Dp,JT=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),Ep=(Dp=String.fromCodePoint)!==null&&Dp!==void 0?Dp:function(e){let t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),t+=String.fromCharCode(e),t};function _p(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=JT.get(e))!==null&&t!==void 0?t:e}var ge=(function(e){return e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z",e})(ge||{}),XT=32,rr=(function(e){return e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE",e})(rr||{});function Cp(e){return e>=ge.ZERO&&e<=ge.NINE}function eS(e){return e>=ge.UPPER_A&&e<=ge.UPPER_F||e>=ge.LOWER_A&&e<=ge.LOWER_F}function tS(e){return e>=ge.UPPER_A&&e<=ge.UPPER_Z||e>=ge.LOWER_A&&e<=ge.LOWER_Z||Cp(e)}function nS(e){return e===ge.EQUALS||tS(e)}var he=(function(e){return e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity",e})(he||{}),Gt=(function(e){return e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute",e})(Gt||{}),Ma=class{constructor(t,n,r){this.decodeTree=t,this.emitCodePoint=n,this.errors=r,this.state=he.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Gt.Strict}startEntity(t){this.decodeMode=t,this.state=he.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,n){switch(this.state){case he.EntityStart:return t.charCodeAt(n)===ge.NUM?(this.state=he.NumericStart,this.consumed+=1,this.stateNumericStart(t,n+1)):(this.state=he.NamedEntity,this.stateNamedEntity(t,n));case he.NumericStart:return this.stateNumericStart(t,n);case he.NumericDecimal:return this.stateNumericDecimal(t,n);case he.NumericHex:return this.stateNumericHex(t,n);case he.NamedEntity:return this.stateNamedEntity(t,n)}}stateNumericStart(t,n){return n>=t.length?-1:(t.charCodeAt(n)|XT)===ge.LOWER_X?(this.state=he.NumericHex,this.consumed+=1,this.stateNumericHex(t,n+1)):(this.state=he.NumericDecimal,this.stateNumericDecimal(t,n))}addToNumericResult(t,n,r,o){if(n!==r){let i=r-n;this.result=this.result*Math.pow(o,i)+parseInt(t.substr(n,i),o),this.consumed+=i}}stateNumericHex(t,n){let r=n;for(;n>14;for(;n>14,i!==0){if(s===ge.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Gt.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var t;let{result:n,decodeTree:r}=this,o=(r[n]&rr.VALUE_LENGTH)>>14;return this.emitNamedEntityData(n,o,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,n,r){let{decodeTree:o}=this;return this.emitCodePoint(n===1?o[t]&~rr.VALUE_LENGTH:o[t+1],r),n===3&&this.emitCodePoint(o[t+2],r),r}end(){var t;switch(this.state){case he.NamedEntity:return this.result!==0&&(this.decodeMode!==Gt.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case he.NumericDecimal:return this.emitNumericEntity(0,2);case he.NumericHex:return this.emitNumericEntity(0,3);case he.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case he.EntityStart:return 0}}};function iv(e){let t="",n=new Ma(e,r=>t+=Ep(r));return function(o,i){let s=0,u=0;for(;(u=o.indexOf("&",u))>=0;){t+=o.slice(s,u),n.startEntity(i);let c=n.write(o,u+1);if(c<0){s=u+n.end();break}s=u+c,u=c===0?s+1:s}let a=t+o.slice(s);return t="",a}}function rS(e,t,n,r){let o=(t&rr.BRANCH_LENGTH)>>7,i=t&rr.JUMP_TABLE;if(o===0)return i!==0&&r===i?n:-1;if(i){let a=r-i;return a<0||a>=o?-1:e[n+a]-1}let s=n,u=s+o-1;for(;s<=u;){let a=s+u>>>1,c=e[a];if(cr)u=a-1;else return e[a+o]}return-1}var oS=iv(rv),P$=iv(ov);function En(e,t=Gt.Legacy){return oS(e,t)}function Aa(e){for(let t=1;te.codePointAt(t):(e,t)=>(e.charCodeAt(t)&64512)===55296?(e.charCodeAt(t)-55296)*1024+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t);function wp(e,t){return function(r){let o,i=0,s="";for(;o=e.exec(r);)i!==o.index&&(s+=r.substring(i,o.index)),s+=t.get(o[0].charCodeAt(0)),i=o.index+1;return s+r.substring(i)}}var sv=wp(/[&<>'"]/g,sS),uv=wp(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),av=wp(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]));function lS(e){return Object.prototype.toString.call(e)}function Na(e){return lS(e)==="[object String]"}var dS=Object.prototype.hasOwnProperty;function fS(e,t){return dS.call(e,t)}function fo(e){return Array.prototype.slice.call(arguments,1).forEach(function(n){if(n){if(typeof n!="object")throw new TypeError(n+"must be object");Object.keys(n).forEach(function(r){e[r]=n[r]})}}),e}function Ip(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))}function ka(e){return!(e>=55296&&e<=57343||e>=64976&&e<=65007||(e&65535)===65535||(e&65535)===65534||e>=0&&e<=8||e===11||e>=14&&e<=31||e>=127&&e<=159||e>1114111)}function Ri(e){if(e>65535){e-=65536;let t=55296+(e>>10),n=56320+(e&1023);return String.fromCharCode(t,n)}return String.fromCharCode(e)}var dv=/\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g,pS=/&([a-z#][a-z0-9]{1,31});/gi,hS=new RegExp(dv.source+"|"+pS.source,"gi"),gS=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;function mS(e,t){if(t.charCodeAt(0)===35&&gS.test(t)){let r=t[1].toLowerCase()==="x"?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return ka(r)?Ri(r):e}let n=En(e);return n!==e?n:e}function yS(e){return e.indexOf("\\")<0?e:e.replace(dv,"$1")}function Wt(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(hS,function(t,n,r){return n||mS(t,r)})}var bS=/[&<>"]/,vS=/[&<>"]/g,DS={"&":"&","<":"<",">":">",'"':"""};function ES(e){return DS[e]}function Zt(e){return bS.test(e)?e.replace(vS,ES):e}var _S=/[.?*+^$[\]\\(){}|-]/g;function CS(e){return e.replace(_S,"\\$&")}function H(e){switch(e){case 9:case 32:return!0}return!1}function or(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}function ir(e){return lo.test(e)||Ta.test(e)}function sr(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function ur(e){return e=e.trim().replace(/\s+/g," "),"\u1E9E".toLowerCase()==="\u1E7E"&&(e=e.replace(/ẞ/g,"\xDF")),e.toLowerCase().toUpperCase()}var wS={mdurl:wa,ucmicro:vp};var Np={};lr(Np,{parseLinkDestination:()=>Mp,parseLinkLabel:()=>Sp,parseLinkTitle:()=>Ap});function Sp(e,t,n){let r,o,i,s,u=e.posMax,a=e.pos;for(e.pos=t+1,r=1;e.pos32))return i;if(r===41){if(s===0)break;s--}o++}return t===o||s!==0||(i.str=Wt(e.slice(t,o)),i.pos=o,i.ok=!0),i}function Ap(e,t,n,r){let o,i=t,s={ok:!1,can_continue:!1,pos:0,str:"",marker:0};if(r)s.str=r.str,s.marker=r.marker;else{if(i>=n)return s;let u=e.charCodeAt(i);if(u!==34&&u!==39&&u!==40)return s;t++,i++,u===40&&(u=41),s.marker=u}for(;i"+Zt(i.content)+""};_t.code_block=function(e,t,n,r,o){let i=e[t];return""+Zt(e[t].content)+` `};_t.fence=function(e,t,n,r,o){let i=e[t],s=i.info?Wt(i.info).trim():"",u="",a="";if(s){let l=s.split(/(\s+)/g);u=l[0],a=l.slice(2).join("")}let c;if(n.highlight?c=n.highlight(i.content,u,a)||Zt(i.content):c=Zt(i.content),c.indexOf("${c} @@ -435,5 +435,5 @@ ${n.map((r,o)=>`${o+1}) ${r.toString()}`).join(` `:">",i};po.prototype.renderInline=function(e,t,n){let r="",o=this.rules;for(let i=0,s=e.length;i=0&&(r=this.attrs[n][1]),r};ho.prototype.attrJoin=function(t,n){let r=this.attrIndex(t);r<0?this.attrPush([t,n]):this.attrs[r][1]=this.attrs[r][1]+" "+n};var Yt=ho;function pv(e,t,n){this.src=e,this.env=n,this.tokens=[],this.inlineMode=!1,this.md=t}pv.prototype.Token=Yt;var hv=pv;var xS=/\r\n?|\n/g,IS=/\0/g;function kp(e){let t;t=e.src.replace(xS,` `),t=t.replace(IS,"\uFFFD"),e.src=t}function Rp(e){let t;e.inlineMode?(t=new e.Token("inline","",0),t.content=e.src,t.map=[0,1],t.children=[],e.tokens.push(t)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}function Fp(e){let t=e.tokens;for(let n=0,r=t.length;n\s]/i.test(e)}function SS(e){return/^<\/a\s*>/i.test(e)}function Op(e){let t=e.tokens;if(e.md.options.linkify)for(let n=0,r=t.length;n=0;s--){let u=o[s];if(u.type==="link_close"){for(s--;o[s].level!==u.level&&o[s].type!=="link_open";)s--;continue}if(u.type==="html_inline"&&(TS(u.content)&&i>0&&i--,SS(u.content)&&i++),!(i>0)&&u.type==="text"&&e.md.linkify.test(u.content)){let a=u.content,c=e.md.linkify.match(a),l=[],d=u.level,h=0;c.length>0&&c[0].index===0&&s>0&&o[s-1].type==="text_special"&&(c=c.slice(1));for(let f=0;fh){let F=new e.Token("text","",0);F.content=a.slice(h,y),F.level=d,l.push(F)}let v=new e.Token("link_open","a",1);v.attrs=[["href",g]],v.level=d++,v.markup="linkify",v.info="auto",l.push(v);let w=new e.Token("text","",0);w.content=m,w.level=d,l.push(w);let D=new e.Token("link_close","a",-1);D.level=--d,D.markup="linkify",D.info="auto",l.push(D),h=c[f].lastIndex}if(h=0;n--){let r=e[n];r.type==="text"&&!t&&(r.content=r.content.replace(AS,kS)),r.type==="link_open"&&r.info==="auto"&&t--,r.type==="link_close"&&r.info==="auto"&&t++}}function FS(e){let t=0;for(let n=e.length-1;n>=0;n--){let r=e[n];r.type==="text"&&!t&&gv.test(r.content)&&(r.content=r.content.replace(/\+-/g,"\xB1").replace(/\.{2,}/g,"\u2026").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/mg,"$1\u2014").replace(/(^|\s)--(?=\s|$)/mg,"$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/mg,"$1\u2013")),r.type==="link_open"&&r.info==="auto"&&t--,r.type==="link_close"&&r.info==="auto"&&t++}}function Pp(e){let t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)e.tokens[t].type==="inline"&&(MS.test(e.tokens[t].content)&&RS(e.tokens[t].children),gv.test(e.tokens[t].content)&&FS(e.tokens[t].children))}var OS=/['"]/,mv=/['"]/g,yv="\u2019";function Ra(e,t,n){return e.slice(0,t)+n+e.slice(t+1)}function PS(e,t){let n,r=[];for(let o=0;o=0&&!(r[n].level<=s);n--);if(r.length=n+1,i.type!=="text")continue;let u=i.content,a=0,c=u.length;e:for(;a=0)p=u.charCodeAt(l.index-1);else for(n=o-1;n>=0&&!(e[n].type==="softbreak"||e[n].type==="hardbreak");n--)if(e[n].content){p=e[n].content.charCodeAt(e[n].content.length-1);break}let g=32;if(a=48&&p<=57&&(h=d=!1),d&&h&&(d=m,h=y),!d&&!h){f&&(i.content=Ra(i.content,l.index,yv));continue}if(h)for(n=r.length-1;n>=0;n--){let D=r[n];if(r[n].level=0;t--)e.tokens[t].type!=="inline"||!OS.test(e.tokens[t].content)||PS(e.tokens[t].children,e)}function jp(e){let t,n,r=e.tokens,o=r.length;for(let i=0;i0&&this.level++,this.tokens.push(r),r};Ct.prototype.isEmpty=function(t){return this.bMarks[t]+this.tShift[t]>=this.eMarks[t]};Ct.prototype.skipEmptyLines=function(t){for(let n=this.lineMax;tn;)if(!H(this.src.charCodeAt(--t)))return t+1;return t};Ct.prototype.skipChars=function(t,n){for(let r=this.src.length;tr;)if(n!==this.src.charCodeAt(--t))return t+1;return t};Ct.prototype.getLines=function(t,n,r,o){if(t>=n)return"";let i=new Array(n-t);for(let s=0,u=t;ur?i[s]=new Array(a-r+1).join(" ")+this.src.slice(l,d):i[s]=this.src.slice(l,d)}return i.join("")};Ct.prototype.Token=Yt;var vv=Ct;var LS=65536;function Hp(e,t){let n=e.bMarks[t]+e.tShift[t],r=e.eMarks[t];return e.src.slice(n,r)}function Dv(e){let t=[],n=e.length,r=0,o=e.charCodeAt(r),i=!1,s=0,u="";for(;rn)return!1;let o=t+1;if(e.sCount[o]=4)return!1;let i=e.bMarks[o]+e.tShift[o];if(i>=e.eMarks[o])return!1;let s=e.src.charCodeAt(i++);if(s!==124&&s!==45&&s!==58||i>=e.eMarks[o])return!1;let u=e.src.charCodeAt(i++);if(u!==124&&u!==45&&u!==58&&!H(u)||s===45&&H(u))return!1;for(;i=4)return!1;c=Dv(a),c.length&&c[0]===""&&c.shift(),c.length&&c[c.length-1]===""&&c.pop();let d=c.length;if(d===0||d!==l.length)return!1;if(r)return!0;let h=e.parentType;e.parentType="table";let f=e.md.block.ruler.getRules("blockquote"),p=e.push("table_open","table",1),g=[t,0];p.map=g;let m=e.push("thead_open","thead",1);m.map=[t,t+1];let y=e.push("tr_open","tr",1);y.map=[t,t+1];for(let D=0;D=4||(c=Dv(a),c.length&&c[0]===""&&c.shift(),c.length&&c[c.length-1]===""&&c.pop(),w+=d-c.length,w>LS))break;if(o===t+2){let E=e.push("tbody_open","tbody",1);E.map=v=[t+2,0]}let F=e.push("tr_open","tr",1);F.map=[o,o+1];for(let E=0;E=4){r++,o=r;continue}break}e.line=o;let i=e.push("code_block","code",0);return i.content=e.getLines(t,o,4+e.blkIndent,!1)+` -`,i.map=[t,e.line],!0}function zp(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||o+3>i)return!1;let s=e.src.charCodeAt(o);if(s!==126&&s!==96)return!1;let u=o;o=e.skipChars(o,s);let a=o-u;if(a<3)return!1;let c=e.src.slice(u,o),l=e.src.slice(o,i);if(s===96&&l.indexOf(String.fromCharCode(s))>=0)return!1;if(r)return!0;let d=t,h=!1;for(;d++,!(d>=n||(o=u=e.bMarks[d]+e.tShift[d],i=e.eMarks[d],o=4)&&(o=e.skipChars(o,s),!(o-u=4||e.src.charCodeAt(o)!==62)return!1;if(r)return!0;let u=[],a=[],c=[],l=[],d=e.md.block.ruler.getRules("blockquote"),h=e.parentType;e.parentType="blockquote";let f=!1,p;for(p=t;p=i)break;if(e.src.charCodeAt(o++)===62&&!w){let F=e.sCount[p]+1,E,N;e.src.charCodeAt(o)===32?(o++,F++,N=!1,E=!0):e.src.charCodeAt(o)===9?(E=!0,(e.bsCount[p]+F)%4===3?(o++,F++,N=!1):N=!0):E=!1;let O=F;for(u.push(e.bMarks[p]),e.bMarks[p]=o;o=i,a.push(e.bsCount[p]),e.bsCount[p]=e.sCount[p]+1+(E?1:0),c.push(e.sCount[p]),e.sCount[p]=O-F,l.push(e.tShift[p]),e.tShift[p]=o-e.bMarks[p];continue}if(f)break;let D=!1;for(let F=0,E=d.length;F";let y=[t,0];m.map=y,e.md.block.tokenize(e,t,p);let v=e.push("blockquote_close","blockquote",-1);v.markup=">",e.lineMax=s,e.parentType=h,y[1]=e.line;for(let w=0;w=4)return!1;let i=e.bMarks[t]+e.tShift[t],s=e.src.charCodeAt(i++);if(s!==42&&s!==45&&s!==95)return!1;let u=1;for(;i=r)return-1;let i=e.src.charCodeAt(o++);if(i<48||i>57)return-1;for(;;){if(o>=r)return-1;if(i=e.src.charCodeAt(o++),i>=48&&i<=57){if(o-n>=10)return-1;continue}if(i===41||i===46)break;return-1}return o=4||e.listIndent>=0&&e.sCount[a]-e.listIndent>=4&&e.sCount[a]=e.blkIndent&&(l=!0);let d,h,f;if((f=_v(e,a))>=0){if(d=!0,s=e.bMarks[a]+e.tShift[a],h=Number(e.src.slice(s,f-1)),l&&h!==1)return!1}else if((f=Ev(e,a))>=0)d=!1;else return!1;if(l&&e.skipSpaces(f)>=e.eMarks[a])return!1;if(r)return!0;let p=e.src.charCodeAt(f-1),g=e.tokens.length;d?(u=e.push("ordered_list_open","ol",1),h!==1&&(u.attrs=[["start",h]])):u=e.push("bullet_list_open","ul",1);let m=[a,0];u.map=m,u.markup=String.fromCharCode(p);let y=!1,v=e.md.block.ruler.getRules("list"),w=e.parentType;for(e.parentType="list";a=o?N=1:N=F-D,N>4&&(N=1);let O=D+N;u=e.push("list_item_open","li",1),u.markup=String.fromCharCode(p);let J=[a,0];u.map=J,d&&(u.info=e.src.slice(s,f-1));let ut=e.tight,mo=e.tShift[a],Pi=e.sCount[a],Yv=e.listIndent;if(e.listIndent=e.blkIndent,e.blkIndent=O,e.tight=!0,e.tShift[a]=E-e.bMarks[a],e.sCount[a]=F,E>=o&&e.isEmpty(a+1)?e.line=Math.min(e.line+2,n):e.md.block.tokenize(e,a,n,!0),(!e.tight||y)&&(c=!1),y=e.line-a>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=Yv,e.tShift[a]=mo,e.sCount[a]=Pi,e.tight=ut,u=e.push("list_item_close","li",-1),u.markup=String.fromCharCode(p),a=e.line,J[1]=a,a>=n||e.sCount[a]=4)break;let wh=!1;for(let cr=0,Qv=v.length;cr=4||e.src.charCodeAt(o)!==91)return!1;function u(v){let w=e.lineMax;if(v>=w||e.isEmpty(v))return null;let D=!1;if(e.sCount[v]-e.blkIndent>3&&(D=!0),e.sCount[v]<0&&(D=!0),!D){let N=e.md.block.ruler.getRules("reference"),O=e.parentType;e.parentType="reference";let J=!1;for(let ut=0,mo=N.length;ut"u"&&(e.env.references={}),typeof e.env.references[y]>"u"&&(e.env.references[y]={title:m,href:d}),e.line=s),!0):!1}var Cv=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"];var BS="[a-zA-Z_:][a-zA-Z0-9:._-]*",VS="[^\"'=<>`\\x00-\\x20]+",HS="'[^']*'",$S='"[^"]*"',US="(?:"+VS+"|"+HS+"|"+$S+")",zS="(?:\\s+"+BS+"(?:\\s*=\\s*"+US+")?)",wv="<[A-Za-z][A-Za-z0-9\\-]*"+zS+"*\\s*\\/?>",xv="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",qS="",GS="<[?][\\s\\S]*?[?]>",WS="]*>",ZS="",Iv=new RegExp("^(?:"+wv+"|"+xv+"|"+qS+"|"+GS+"|"+WS+"|"+ZS+")"),Tv=new RegExp("^(?:"+wv+"|"+xv+")");var go=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(Tv.source+"\\s*$"),/^$/,!1]];function Yp(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||!e.md.options.html||e.src.charCodeAt(o)!==60)return!1;let s=e.src.slice(o,i),u=0;for(;u=4)return!1;let s=e.src.charCodeAt(o);if(s!==35||o>=i)return!1;let u=1;for(s=e.src.charCodeAt(++o);s===35&&o6||oo&&H(e.src.charCodeAt(a-1))&&(i=a),e.line=t+1;let c=e.push("heading_open","h"+String(u),1);c.markup="########".slice(0,u),c.map=[t,e.line];let l=e.push("inline","",0);l.content=e.src.slice(o,i).trim(),l.map=[t,e.line],l.children=[];let d=e.push("heading_close","h"+String(u),-1);return d.markup="########".slice(0,u),!0}function Kp(e,t,n){let r=e.md.block.ruler.getRules("paragraph");if(e.sCount[t]-e.blkIndent>=4)return!1;let o=e.parentType;e.parentType="paragraph";let i=0,s,u=t+1;for(;u3)continue;if(e.sCount[u]>=e.blkIndent){let f=e.bMarks[u]+e.tShift[u],p=e.eMarks[u];if(f=p))){i=s===61?1:2;break}}if(e.sCount[u]<0)continue;let h=!1;for(let f=0,p=r.length;f3||e.sCount[i]<0)continue;let c=!1;for(let l=0,d=r.length;l=n||e.sCount[s]=i){e.line=n;break}let a=e.line,c=!1;for(let l=0;l=e.line)throw new Error("block rule didn't increment state.line");break}if(!c)throw new Error("none of the block rules matched");e.tight=!u,e.isEmpty(e.line-1)&&(u=!0),s=e.line,s0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],o={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(r),this.tokens_meta.push(o),r};Fi.prototype.scanDelims=function(e,t){let n=this.posMax,r=this.src.charCodeAt(e),o=e>0?this.src.charCodeAt(e-1):32,i=e;for(;i0)return!1;let n=e.pos,r=e.posMax;if(n+3>r||e.src.charCodeAt(n)!==58||e.src.charCodeAt(n+1)!==47||e.src.charCodeAt(n+2)!==47)return!1;let o=e.pending.match(QS);if(!o)return!1;let i=o[1],s=e.md.linkify.matchAtStart(e.src.slice(n-i.length));if(!s)return!1;let u=s.url;if(u.length<=i.length)return!1;u=u.replace(/\*+$/,"");let a=e.md.normalizeLink(u);if(!e.md.validateLink(a))return!1;if(!t){e.pending=e.pending.slice(0,-i.length);let c=e.push("link_open","a",1);c.attrs=[["href",a]],c.markup="linkify",c.info="auto";let l=e.push("text","",0);l.content=e.md.normalizeLinkText(u);let d=e.push("link_close","a",-1);d.markup="linkify",d.info="auto"}return e.pos+=u.length-i.length,!0}function th(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==10)return!1;let r=e.pending.length-1,o=e.posMax;if(!t)if(r>=0&&e.pending.charCodeAt(r)===32)if(r>=1&&e.pending.charCodeAt(r-1)===32){let i=r-1;for(;i>=1&&e.pending.charCodeAt(i-1)===32;)i--;e.pending=e.pending.slice(0,i),e.push("hardbreak","br",0)}else e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0);else e.push("softbreak","br",0);for(n++;n?@[]^_`{|}~-".split("").forEach(function(e){nh[e.charCodeAt(0)]=1});function rh(e,t){let n=e.pos,r=e.posMax;if(e.src.charCodeAt(n)!==92||(n++,n>=r))return!1;let o=e.src.charCodeAt(n);if(o===10){for(t||e.push("hardbreak","br",0),n++;n=55296&&o<=56319&&n+1=56320&&u<=57343&&(i+=e.src[n+1],n++)}let s="\\"+i;if(!t){let u=e.push("text_special","",0);o<256&&nh[o]!==0?u.content=i:u.content=s,u.markup=s,u.info="escape"}return e.pos=n+1,!0}function oh(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==96)return!1;let o=n;n++;let i=e.posMax;for(;n=0;r--){let o=t[r];if(o.marker!==95&&o.marker!==42||o.end===-1)continue;let i=t[o.end],s=r>0&&t[r-1].end===o.end+1&&t[r-1].marker===o.marker&&t[r-1].token===o.token-1&&t[o.end+1].token===i.token+1,u=String.fromCharCode(o.marker),a=e.tokens[o.token];a.type=s?"strong_open":"em_open",a.tag=s?"strong":"em",a.nesting=1,a.markup=s?u+u:u,a.content="";let c=e.tokens[i.token];c.type=s?"strong_close":"em_close",c.tag=s?"strong":"em",c.nesting=-1,c.markup=s?u+u:u,c.content="",s&&(e.tokens[t[r-1].token].content="",e.tokens[t[o.end+1].token].content="",r--)}}function eM(e){let t=e.tokens_meta,n=e.tokens_meta.length;Nv(e,e.delimiters);for(let r=0;r=d)return!1;if(a=p,o=e.md.helpers.parseLinkDestination(e.src,p,e.posMax),o.ok){for(s=e.md.normalizeLink(o.str),e.md.validateLink(s)?p=o.pos:s="",a=p;p=d||e.src.charCodeAt(p)!==41)&&(c=!0),p++}if(c){if(typeof e.env.references>"u")return!1;if(p=0?r=e.src.slice(a,p++):p=f+1):p=f+1,r||(r=e.src.slice(h,f)),i=e.env.references[ur(r)],!i)return e.pos=l,!1;s=i.href,u=i.title}if(!t){e.pos=h,e.posMax=f;let g=e.push("link_open","a",1),m=[["href",s]];g.attrs=m,u&&m.push(["title",u]),e.linkLevel++,e.md.inline.tokenize(e),e.linkLevel--,e.push("link_close","a",-1)}return e.pos=p,e.posMax=d,!0}function ah(e,t){let n,r,o,i,s,u,a,c,l="",d=e.pos,h=e.posMax;if(e.src.charCodeAt(e.pos)!==33||e.src.charCodeAt(e.pos+1)!==91)return!1;let f=e.pos+2,p=e.md.helpers.parseLinkLabel(e,e.pos+1,!1);if(p<0)return!1;if(i=p+1,i=h)return!1;for(c=i,u=e.md.helpers.parseLinkDestination(e.src,i,e.posMax),u.ok&&(l=e.md.normalizeLink(u.str),e.md.validateLink(l)?i=u.pos:l=""),c=i;i=h||e.src.charCodeAt(i)!==41)return e.pos=d,!1;i++}else{if(typeof e.env.references>"u")return!1;if(i=0?o=e.src.slice(c,i++):i=p+1):i=p+1,o||(o=e.src.slice(f,p)),s=e.env.references[ur(o)],!s)return e.pos=d,!1;l=s.href,a=s.title}if(!t){r=e.src.slice(f,p);let g=[];e.md.inline.parse(r,e.md,e.env,g);let m=e.push("image","img",0),y=[["src",l],["alt",""]];m.attrs=y,m.children=g,m.content=r,a&&y.push(["title",a])}return e.pos=i,e.posMax=h,!0}var tM=/^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/,nM=/^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\x00-\x20]*)$/;function ch(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==60)return!1;let r=e.pos,o=e.posMax;for(;;){if(++n>=o)return!1;let s=e.src.charCodeAt(n);if(s===60)return!1;if(s===62)break}let i=e.src.slice(r+1,n);if(nM.test(i)){let s=e.md.normalizeLink(i);if(!e.md.validateLink(s))return!1;if(!t){let u=e.push("link_open","a",1);u.attrs=[["href",s]],u.markup="autolink",u.info="auto";let a=e.push("text","",0);a.content=e.md.normalizeLinkText(i);let c=e.push("link_close","a",-1);c.markup="autolink",c.info="auto"}return e.pos+=i.length+2,!0}if(tM.test(i)){let s=e.md.normalizeLink("mailto:"+i);if(!e.md.validateLink(s))return!1;if(!t){let u=e.push("link_open","a",1);u.attrs=[["href",s]],u.markup="autolink",u.info="auto";let a=e.push("text","",0);a.content=e.md.normalizeLinkText(i);let c=e.push("link_close","a",-1);c.markup="autolink",c.info="auto"}return e.pos+=i.length+2,!0}return!1}function rM(e){return/^\s]/i.test(e)}function oM(e){return/^<\/a\s*>/i.test(e)}function iM(e){let t=e|32;return t>=97&&t<=122}function lh(e,t){if(!e.md.options.html)return!1;let n=e.posMax,r=e.pos;if(e.src.charCodeAt(r)!==60||r+2>=n)return!1;let o=e.src.charCodeAt(r+1);if(o!==33&&o!==63&&o!==47&&!iM(o))return!1;let i=e.src.slice(r).match(Iv);if(!i)return!1;if(!t){let s=e.push("html_inline","",0);s.content=i[0],rM(s.content)&&e.linkLevel++,oM(s.content)&&e.linkLevel--}return e.pos+=i[0].length,!0}var sM=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,uM=/^&([a-z][a-z0-9]{1,31});/i;function dh(e,t){let n=e.pos,r=e.posMax;if(e.src.charCodeAt(n)!==38||n+1>=r)return!1;if(e.src.charCodeAt(n+1)===35){let i=e.src.slice(n).match(sM);if(i){if(!t){let s=i[1][0].toLowerCase()==="x"?parseInt(i[1].slice(1),16):parseInt(i[1],10),u=e.push("text_special","",0);u.content=ka(s)?Ri(s):Ri(65533),u.markup=i[0],u.info="entity"}return e.pos+=i[0].length,!0}}else{let i=e.src.slice(n).match(uM);if(i){let s=En(i[0]);if(s!==i[0]){if(!t){let u=e.push("text_special","",0);u.content=s,u.markup=i[0],u.info="entity"}return e.pos+=i[0].length,!0}}}return!1}function kv(e){let t={},n=e.length;if(!n)return;let r=0,o=-2,i=[];for(let s=0;sa;c-=i[c]+1){let d=e[c];if(d.marker===u.marker&&d.open&&d.end<0){let h=!1;if((d.close||u.open)&&(d.length+u.length)%3===0&&(d.length%3!==0||u.length%3!==0)&&(h=!0),!h){let f=c>0&&!e[c-1].open?i[c-1]+1:0;i[s]=s-c+f,i[c]=f,u.open=!1,d.end=s,d.close=!1,l=-1,o=-2;break}}}l!==-1&&(t[u.marker][(u.open?3:0)+(u.length||0)%3]=l)}}function fh(e){let t=e.tokens_meta,n=e.tokens_meta.length;kv(e.delimiters);for(let r=0;r0&&r++,o[t].type==="text"&&t+1=e.pos)throw new Error("inline rule didn't increment state.pos");break}}else e.pos=e.posMax;s||e.pos++,i[t]=e.pos};Oi.prototype.tokenize=function(e){let t=this.ruler.getRules(""),n=t.length,r=e.posMax,o=e.md.options.maxNesting;for(;e.pos=e.pos)throw new Error("inline rule didn't increment state.pos");break}}if(s){if(e.pos>=r)break;continue}e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()};Oi.prototype.parse=function(e,t,n,r){let o=new this.State(e,t,n,r);this.tokenize(o);let i=this.ruler2.getRules(""),s=i.length;for(let u=0;u|$))",t.tpl_email_fuzzy="(^|"+n+'|"|\\(|'+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}function mh(e){return Array.prototype.slice.call(arguments,1).forEach(function(n){n&&Object.keys(n).forEach(function(r){e[r]=n[r]})}),e}function La(e){return Object.prototype.toString.call(e)}function aM(e){return La(e)==="[object String]"}function cM(e){return La(e)==="[object Object]"}function lM(e){return La(e)==="[object RegExp]"}function Ov(e){return La(e)==="[object Function]"}function dM(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var Lv={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};function fM(e){return Object.keys(e||{}).reduce(function(t,n){return t||Lv.hasOwnProperty(n)},!1)}var pM={"http:":{validate:function(e,t,n){let r=e.slice(t);return n.re.http||(n.re.http=new RegExp("^\\/\\/"+n.re.src_auth+n.re.src_host_port_strict+n.re.src_path,"i")),n.re.http.test(r)?r.match(n.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,t,n){let r=e.slice(t);return n.re.no_http||(n.re.no_http=new RegExp("^"+n.re.src_auth+"(?:localhost|(?:(?:"+n.re.src_domain+")\\.)+"+n.re.src_domain_root+")"+n.re.src_port+n.re.src_host_terminator+n.re.src_path,"i")),n.re.no_http.test(r)?t>=3&&e[t-3]===":"||t>=3&&e[t-3]==="/"?0:r.match(n.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,n){let r=e.slice(t);return n.re.mailto||(n.re.mailto=new RegExp("^"+n.re.src_email_name+"@"+n.re.src_host_strict,"i")),n.re.mailto.test(r)?r.match(n.re.mailto)[0].length:0}}},hM="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]",gM="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");function mM(e){e.__index__=-1,e.__text_cache__=""}function yM(e){return function(t,n){let r=t.slice(n);return e.test(r)?r.match(e)[0].length:0}}function Pv(){return function(e,t){t.normalize(e)}}function Pa(e){let t=e.re=Fv(e.__opts__),n=e.__tlds__.slice();e.onCompile(),e.__tlds_replaced__||n.push(hM),n.push(t.src_xn),t.src_tlds=n.join("|");function r(u){return u.replace("%TLDS%",t.src_tlds)}t.email_fuzzy=RegExp(r(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(r(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(r(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(r(t.tpl_host_fuzzy_test),"i");let o=[];e.__compiled__={};function i(u,a){throw new Error('(LinkifyIt) Invalid schema "'+u+'": '+a)}Object.keys(e.__schemas__).forEach(function(u){let a=e.__schemas__[u];if(a===null)return;let c={validate:null,link:null};if(e.__compiled__[u]=c,cM(a)){lM(a.validate)?c.validate=yM(a.validate):Ov(a.validate)?c.validate=a.validate:i(u,a),Ov(a.normalize)?c.normalize=a.normalize:a.normalize?i(u,a):c.normalize=Pv();return}if(aM(a)){o.push(u);return}i(u,a)}),o.forEach(function(u){e.__compiled__[e.__schemas__[u]]&&(e.__compiled__[u].validate=e.__compiled__[e.__schemas__[u]].validate,e.__compiled__[u].normalize=e.__compiled__[e.__schemas__[u]].normalize)}),e.__compiled__[""]={validate:null,normalize:Pv()};let s=Object.keys(e.__compiled__).filter(function(u){return u.length>0&&e.__compiled__[u]}).map(dM).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","ig"),e.re.schema_at_start=RegExp("^"+e.re.schema_search.source,"i"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),mM(e)}function bM(e,t){let n=e.__index__,r=e.__last_index__,o=e.__text_cache__.slice(n,r);this.schema=e.__schema__.toLowerCase(),this.index=n+t,this.lastIndex=r+t,this.raw=o,this.text=o,this.url=o}function yh(e,t){let n=new bM(e,t);return e.__compiled__[n.schema].normalize(n,e),n}function Be(e,t){if(!(this instanceof Be))return new Be(e,t);t||fM(e)&&(t=e,e={}),this.__opts__=mh({},Lv,t),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=mh({},pM,e),this.__compiled__={},this.__tlds__=gM,this.__tlds_replaced__=!1,this.re={},Pa(this)}Be.prototype.add=function(t,n){return this.__schemas__[t]=n,Pa(this),this};Be.prototype.set=function(t){return this.__opts__=mh(this.__opts__,t),this};Be.prototype.test=function(t){if(this.__text_cache__=t,this.__index__=-1,!t.length)return!1;let n,r,o,i,s,u,a,c,l;if(this.re.schema_test.test(t)){for(a=this.re.schema_search,a.lastIndex=0;(n=a.exec(t))!==null;)if(i=this.testSchemaAt(t,n[2],a.lastIndex),i){this.__schema__=n[2],this.__index__=n.index+n[1].length,this.__last_index__=n.index+n[0].length+i;break}}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=t.search(this.re.host_fuzzy_test),c>=0&&(this.__index__<0||c=0&&(o=t.match(this.re.email_fuzzy))!==null&&(s=o.index+o[1].length,u=o.index+o[0].length,(this.__index__<0||sthis.__last_index__)&&(this.__schema__="mailto:",this.__index__=s,this.__last_index__=u))),this.__index__>=0};Be.prototype.pretest=function(t){return this.re.pretest.test(t)};Be.prototype.testSchemaAt=function(t,n,r){return this.__compiled__[n.toLowerCase()]?this.__compiled__[n.toLowerCase()].validate(t,r,this):0};Be.prototype.match=function(t){let n=[],r=0;this.__index__>=0&&this.__text_cache__===t&&(n.push(yh(this,r)),r=this.__last_index__);let o=r?t.slice(r):t;for(;this.test(o);)n.push(yh(this,r)),o=o.slice(this.__last_index__),r+=this.__last_index__;return n.length?n:null};Be.prototype.matchAtStart=function(t){if(this.__text_cache__=t,this.__index__=-1,!t.length)return null;let n=this.re.schema_at_start.exec(t);if(!n)return null;let r=this.testSchemaAt(t,n[2],n[0].length);return r?(this.__schema__=n[2],this.__index__=n.index+n[1].length,this.__last_index__=n.index+n[0].length+r,yh(this,0)):null};Be.prototype.tlds=function(t,n){return t=Array.isArray(t)?t:[t],n?(this.__tlds__=this.__tlds__.concat(t).sort().filter(function(r,o,i){return r!==i[o-1]}).reverse(),Pa(this),this):(this.__tlds__=t.slice(),this.__tlds_replaced__=!0,Pa(this),this)};Be.prototype.normalize=function(t){t.schema||(t.url="http://"+t.url),t.schema==="mailto:"&&!/^mailto:/i.test(t.url)&&(t.url="mailto:"+t.url)};Be.prototype.onCompile=function(){};var jv=Be;var vM=/^xn--/,DM=/[^\0-\x7F]/,EM=/[\x2E\u3002\uFF0E\uFF61]/g,_M={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},bh=35,wt=Math.floor,vh=String.fromCharCode;function _n(e){throw new RangeError(_M[e])}function CM(e,t){let n=[],r=e.length;for(;r--;)n[r]=t(e[r]);return n}function Vv(e,t){let n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),e=e.replace(EM,".");let o=e.split("."),i=CM(o,t).join(".");return r+i}function Hv(e){let t=[],n=0,r=e.length;for(;n=55296&&o<=56319&&nString.fromCodePoint(...e),xM=function(e){return e>=48&&e<58?26+(e-48):e>=65&&e<91?e-65:e>=97&&e<123?e-97:36},Bv=function(e,t){return e+22+75*(e<26)-((t!=0)<<5)},$v=function(e,t,n){let r=0;for(e=n?wt(e/700):e>>1,e+=wt(e/t);e>bh*26>>1;r+=36)e=wt(e/bh);return wt(r+(bh+1)*e/(e+38))},Uv=function(e){let t=[],n=e.length,r=0,o=128,i=72,s=e.lastIndexOf("-");s<0&&(s=0);for(let u=0;u=128&&_n("not-basic"),t.push(e.charCodeAt(u));for(let u=s>0?s+1:0;u=n&&_n("invalid-input");let h=xM(e.charCodeAt(u++));h>=36&&_n("invalid-input"),h>wt((2147483647-r)/l)&&_n("overflow"),r+=h*l;let f=d<=i?1:d>=i+26?26:d-i;if(hwt(2147483647/p)&&_n("overflow"),l*=p}let c=t.length+1;i=$v(r-a,c,a==0),wt(r/c)>2147483647-o&&_n("overflow"),o+=wt(r/c),r%=c,t.splice(r++,0,o)}return String.fromCodePoint(...t)},zv=function(e){let t=[];e=Hv(e);let n=e.length,r=128,o=0,i=72;for(let a of e)a<128&&t.push(vh(a));let s=t.length,u=s;for(s&&t.push("-");u=r&&lwt((2147483647-o)/c)&&_n("overflow"),o+=(a-r)*c,r=a;for(let l of e)if(l2147483647&&_n("overflow"),l===r){let d=o;for(let h=36;;h+=36){let f=h<=i?1:h>=i+26?26:h-i;if(d=0))try{t.hostname=Dh.toASCII(t.hostname)}catch{}return _a(co(t))}function FM(e){let t=ki(e,!0);if(t.hostname&&(!t.protocol||Zv.indexOf(t.protocol)>=0))try{t.hostname=Dh.toUnicode(t.hostname)}catch{}return Ni(co(t),Ni.defaultChars+"%")}function Ge(e,t){if(!(this instanceof Ge))return new Ge(e,t);t||Na(e)||(t=e||{},e="default"),this.inline=new Rv,this.block=new Sv,this.core=new bv,this.renderer=new fv,this.linkify=new jv,this.validateLink=kM,this.normalizeLink=RM,this.normalizeLinkText=FM,this.utils=Tp,this.helpers=fo({},Np),this.options={},this.configure(e),t&&this.set(t)}Ge.prototype.set=function(e){return fo(this.options,e),this};Ge.prototype.configure=function(e){let t=this;if(Na(e)){let n=e;if(e=MM[n],!e)throw new Error('Wrong `markdown-it` preset "'+n+'", check name')}if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(n){e.components[n].rules&&t[n].ruler.enableOnly(e.components[n].rules),e.components[n].rules2&&t[n].ruler2.enableOnly(e.components[n].rules2)}),this};Ge.prototype.enable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(o){n=n.concat(this[o].ruler.enable(e,!0))},this),n=n.concat(this.inline.ruler2.enable(e,!0));let r=e.filter(function(o){return n.indexOf(o)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+r);return this};Ge.prototype.disable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(o){n=n.concat(this[o].ruler.disable(e,!0))},this),n=n.concat(this.inline.ruler2.disable(e,!0));let r=e.filter(function(o){return n.indexOf(o)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+r);return this};Ge.prototype.use=function(e){let t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this};Ge.prototype.parse=function(e,t){if(typeof e!="string")throw new Error("Input data should be a String");let n=new this.core.State(e,this,t);return this.core.process(n),n.tokens};Ge.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)};Ge.prototype.parseInline=function(e,t){let n=new this.core.State(e,this,t);return n.inlineMode=!0,this.core.process(n),n.tokens};Ge.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};var Eh=Ge;function OM(e,t){if(e&1&&Jr(0,0),e&2){let n=t.$implicit,r=yi();Yr("surfaceId",r.surfaceId())("component",n)}}function PM(e,t){if(e&1&&Jr(0,0),e&2){let n=t.$implicit,r=yi();Yr("surfaceId",r.surfaceId())("component",n)}}function LM(e,t){if(e&1&&Jr(0,0),e&2){yi();let n=qu(0),r=qu(1);Yr("surfaceId",n)("component",r.componentTree)}}var jM=new x("Catalog"),BM=(()=>{class e extends w1.A2uiMessageProcessor{events=new le;setData(n,r,o,i){return super.setData(n,r,o,i??void 0)}dispatch(n){let r=new le;return this.events.next({message:n,completion:r}),sc(r)}static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),VM=new x("Theme"),HM=0,_h=(()=>{class e{processor=b(BM);theme=b(VM);surfaceId=Ae.required();component=Ae.required();weight=Ae.required();sendAction(n){let r=this.component(),o=this.surfaceId()??void 0,i={};if(n.context){for(let u of n.context)if(u.value.literalBoolean)i[u.key]=u.value.literalBoolean;else if(u.value.literalNumber)i[u.key]=u.value.literalNumber;else if(u.value.literalString)i[u.key]=u.value.literalString;else if(u.value.path){let a=this.processor.resolvePath(u.value.path,r.dataContextPath),c=this.processor.getData(r,a,o);i[u.key]=c}}let s={userAction:{name:n.name,sourceComponentId:r.id,surfaceId:o,timestamp:new Date().toISOString(),context:i}};return this.processor.dispatch(s)}resolvePrimitive(n){let r=this.component(),o=this.surfaceId();return!n||typeof n!="object"?null:n.literal!=null?n.literal:n.path?this.processor.getData(r,n.path,o??void 0):"literalString"in n?n.literalString:"literalNumber"in n?n.literalNumber:"literalBoolean"in n?n.literalBoolean:null}getUniqueId(n){return`${n}-${HM++}`}static \u0275fac=function(r){return new(r||e)};static \u0275dir=ot({type:e,hostVars:2,hostBindings:function(r,o){r&2&&$u("--weight",o.weight())},inputs:{surfaceId:[1,"surfaceId"],component:[1,"component"],weight:[1,"weight"]}})}return e})(),Ch=(()=>{class e{viewContainerRef=b(rt);catalog=b(jM);static hasInsertedStyles=!1;currentRef=null;isDestroyed=!1;surfaceId=Ae.required();component=Ae.required();constructor(){Zo(()=>{let o=this.surfaceId(),i=this.component();de(()=>this.render(o,i))});let n=b(Xn),r=b(K);if(!e.hasInsertedStyles&&u1(n)){let o=r.createElement("style");o.textContent=ro.structuralStyles,r.head.appendChild(o),e.hasInsertedStyles=!0}}ngOnDestroy(){this.isDestroyed=!0,this.clear()}render(n,r){return at(this,null,function*(){let o=this.catalog[r.type],i=null,s=null;if(typeof o=="function"?i=yield o():typeof o=="object"&&(i=yield o.type(),s=o.bindings(r)),this.clear(),i&&!this.isDestroyed){let u=[U("surfaceId",()=>n),U("component",()=>r),U("weight",()=>r.weight??"initial")];s&&u.push(...s),this.currentRef=this.viewContainerRef.createComponent(i,{bindings:u,injector:this.viewContainerRef.injector})}})}clear(){this.currentRef?.destroy(),this.currentRef=null}static \u0275fac=function(r){return new(r||e)};static \u0275dir=ot({type:e,selectors:[["ng-container","a2ui-renderer",""]],inputs:{surfaceId:[1,"surfaceId"],component:[1,"component"]}})}return e})();var $M=(()=>{class e extends _h{alignment=Ae("stretch");distribution=Ae("start");classes=Me(()=>P(S({},this.theme.components.Row),{[`align-${this.alignment()}`]:!0,[`distribute-${this.distribution()}`]:!0}));static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275cmp=Gr({type:e,selectors:[["a2ui-row"]],hostVars:2,hostBindings:function(r,o){r&2&&Pu("alignment",o.alignment())("distribution",o.distribution())},inputs:{alignment:[1,"alignment"],distribution:[1,"distribution"]},features:[Wr],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){r&1&&(Qr(0,"section"),ju(1,OM,1,2,"ng-container",0,Lu),Kr()),r&2&&(Xr(o.theme.additionalStyles==null?null:o.theme.additionalStyles.Row),bi(o.classes()),qr(),Bu(o.component().properties.children))},dependencies:[Ch],styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%]{display:flex;flex-direction:row;width:100%;min-height:100%;box-sizing:border-box}.align-start[_ngcontent-%COMP%]{align-items:start}.align-center[_ngcontent-%COMP%]{align-items:center}.align-end[_ngcontent-%COMP%]{align-items:end}.align-stretch[_ngcontent-%COMP%]{align-items:stretch}.distribute-start[_ngcontent-%COMP%]{justify-content:start}.distribute-center[_ngcontent-%COMP%]{justify-content:center}.distribute-end[_ngcontent-%COMP%]{justify-content:end}.distribute-spaceBetween[_ngcontent-%COMP%]{justify-content:space-between}.distribute-spaceAround[_ngcontent-%COMP%]{justify-content:space-around}.distribute-spaceEvenly[_ngcontent-%COMP%]{justify-content:space-evenly}"]})}return e})(),UM=(()=>{class e extends _h{alignment=Ae("stretch");distribution=Ae("start");classes=Me(()=>P(S({},this.theme.components.Column),{[`align-${this.alignment()}`]:!0,[`distribute-${this.distribution()}`]:!0}));static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275cmp=Gr({type:e,selectors:[["a2ui-column"]],inputs:{alignment:[1,"alignment"],distribution:[1,"distribution"]},features:[Wr],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){r&1&&(Qr(0,"section"),ju(1,PM,1,2,"ng-container",0,Lu),Kr()),r&2&&(Xr(o.theme.additionalStyles==null?null:o.theme.additionalStyles.Column),bi(o.classes()),qr(),Bu(o.component().properties.children))},dependencies:[Ch],styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:100%;height:100%;box-sizing:border-box}.align-start[_ngcontent-%COMP%]{align-items:start}.align-center[_ngcontent-%COMP%]{align-items:center}.align-end[_ngcontent-%COMP%]{align-items:end}.align-stretch[_ngcontent-%COMP%]{align-items:stretch}.distribute-start[_ngcontent-%COMP%]{justify-content:start}.distribute-center[_ngcontent-%COMP%]{justify-content:center}.distribute-end[_ngcontent-%COMP%]{justify-content:end}.distribute-spaceBetween[_ngcontent-%COMP%]{justify-content:space-between}.distribute-spaceAround[_ngcontent-%COMP%]{justify-content:space-around}.distribute-spaceEvenly[_ngcontent-%COMP%]{justify-content:space-evenly}"]})}return e})(),zM=(()=>{class e{originalClassMap=new Map;sanitizer=b(bp);markdownIt=Eh({highlight:(n,r)=>{if(r==="html"){let o=document.createElement("iframe");return o.classList.add("html-view"),o.srcdoc=n,o.sandbox="",o.innerHTML}return n}});render(n,r){r&&this.applyTagClassMap(r);let o=this.markdownIt.render(n);return this.unapplyTagClassMap(),this.sanitizer.sanitize(Le.HTML,o)}applyTagClassMap(n){Object.entries(n).forEach(([r,o])=>{let i;switch(r){case"p":i="paragraph";break;case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":i="heading";break;case"ul":i="bullet_list";break;case"ol":i="ordered_list";break;case"li":i="list_item";break;case"a":i="link";break;case"strong":i="strong";break;case"em":i="em";break}if(!i)return;let s=`${i}_open`,u=this.markdownIt.renderer.rules[s];this.originalClassMap.set(s,u),this.markdownIt.renderer.rules[s]=(a,c,l,d,h)=>{let f=a[c];for(let p of o)f.attrJoin("class",p);return u?u.call(this,a,c,l,d,h):h.renderToken(a,c,l)}})}unapplyTagClassMap(){for(let[n,r]of this.originalClassMap)this.markdownIt.renderer.rules[n]=r;this.originalClassMap.clear()}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),qM=(()=>{class e extends _h{markdownRenderer=b(zM);text=Ae.required();usageHint=Ae.required();resolvedText=Me(()=>{let n=this.usageHint(),r=super.resolvePrimitive(this.text());if(r==null)return"(empty)";switch(n){case"h1":r=`# ${r}`;break;case"h2":r=`## ${r}`;break;case"h3":r=`### ${r}`;break;case"h4":r=`#### ${r}`;break;case"h5":r=`##### ${r}`;break;case"caption":r=`*${r}*`;break;default:r=String(r);break}return this.markdownRenderer.render(r,ro.appendToAll(this.theme.markdown,["ol","ul","li"],{}))});classes=Me(()=>{let n=this.usageHint();return ro.merge(this.theme.components.Text.all,n?this.theme.components.Text[n]:{})});additionalStyles=Me(()=>{let n=this.usageHint(),r=this.theme.additionalStyles?.Text;if(!r)return null;let o={};return this.areHintedStyles(r)?o=r[n??"body"]:o=r,o});areHintedStyles(n){return typeof n!="object"||!n||Array.isArray(n)?!1:["h1","h2","h3","h4","h5","h6","caption","body"].every(o=>o in n)}static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275cmp=Gr({type:e,selectors:[["a2ui-text"]],inputs:{text:[1,"text"],usageHint:[1,"usageHint"]},features:[Wr],decls:1,vars:5,consts:[[3,"innerHTML"]],template:function(r,o){r&1&&Vu(0,"section",0),r&2&&(Xr(o.additionalStyles()),bi(o.classes()),Hu("innerHTML",o.resolvedText(),md))},styles:[`a2ui-text{display:block;flex:var(--weight)}a2ui-text h1,a2ui-text h2,a2ui-text h3,a2ui-text h4,a2ui-text h5{line-height:inherit;font:inherit} -`],encapsulation:2})}return e})(),Oq={Row:{type:()=>$M,bindings:e=>{let t=e.properties;return[U("alignment",()=>t.alignment??"stretch"),U("distribution",()=>t.distribution??"start")]}},Column:{type:()=>UM,bindings:e=>{let t=e.properties;return[U("alignment",()=>t.alignment??"stretch"),U("distribution",()=>t.distribution??"start")]}},List:{type:()=>import("./chunk-7MR4QDTO.js").then(e=>e.List),bindings:e=>{let t=e.properties;return[U("direction",()=>t.direction??"vertical")]}},Card:()=>import("./chunk-A6XEKK5I.js").then(e=>e.Card),Image:{type:()=>import("./chunk-HAQR6HJ6.js").then(e=>e.Image),bindings:e=>{let t=e.properties;return[U("url",()=>t.url),U("usageHint",()=>t.usageHint)]}},Icon:{type:()=>import("./chunk-4MSGFQCD.js").then(e=>e.Icon),bindings:e=>{let t=e.properties;return[U("name",()=>t.name)]}},Video:{type:()=>import("./chunk-IXLBQLFI.js").then(e=>e.Video),bindings:e=>{let t=e.properties;return[U("url",()=>t.url)]}},AudioPlayer:{type:()=>import("./chunk-AK5ESGDJ.js").then(e=>e.Audio),bindings:e=>{let t=e.properties;return[U("url",()=>t.url)]}},Text:{type:()=>qM,bindings:e=>{let t=e.properties;return[U("text",()=>t.text),U("usageHint",()=>t.usageHint||null)]}},Button:{type:()=>import("./chunk-CHLIPOEM.js").then(e=>e.Button),bindings:e=>{let t=e.properties;return[U("action",()=>t.action)]}},Divider:()=>import("./chunk-VPVAD56Y.js").then(e=>e.Divider),MultipleChoice:{type:()=>import("./chunk-RUWE7IJV.js").then(e=>e.MultipleChoice),bindings:e=>{let t=e.properties;return[U("options",()=>t.options||[]),U("value",()=>t.selections),U("description",()=>"Select an item")]}},TextField:{type:()=>import("./chunk-UATSMTT5.js").then(e=>e.TextField),bindings:e=>{let t=e.properties;return[U("text",()=>t.text??null),U("label",()=>t.label),U("inputType",()=>t.type)]}},DateTimeInput:{type:()=>import("./chunk-RLBEOMT4.js").then(e=>e.DatetimeInput),bindings:e=>{let t=e.properties;return[U("enableDate",()=>t.enableDate),U("enableTime",()=>t.enableTime),U("value",()=>t.value)]}},CheckBox:{type:()=>import("./chunk-M3M3P5CP.js").then(e=>e.Checkbox),bindings:e=>{let t=e.properties;return[U("label",()=>t.label),U("value",()=>t.value)]}},Slider:{type:()=>import("./chunk-XB75PFJS.js").then(e=>e.Slider),bindings:e=>{let t=e.properties;return[U("value",()=>t.value),U("minValue",()=>t.minValue),U("maxValue",()=>t.maxValue),U("label",()=>"")]}},Tabs:{type:()=>import("./chunk-HYLIZOX5.js").then(e=>e.Tabs),bindings:e=>{let t=e.properties;return[U("tabs",()=>t.tabItems)]}},Modal:{type:()=>import("./chunk-BWFUMX67.js").then(e=>e.Modal),bindings:()=>[]}},Pq=(()=>{class e{surfaceId=Ae.required();surface=Ae.required();styles=Me(()=>{let n=this.surface(),r={};if(n?.styles)for(let[o,i]of Object.entries(n.styles))switch(o){case"primaryColor":{r["--p-100"]="#ffffff",r["--p-99"]=`color-mix(in srgb, ${i} 2%, white 98%)`,r["--p-98"]=`color-mix(in srgb, ${i} 4%, white 96%)`,r["--p-95"]=`color-mix(in srgb, ${i} 10%, white 90%)`,r["--p-90"]=`color-mix(in srgb, ${i} 20%, white 80%)`,r["--p-80"]=`color-mix(in srgb, ${i} 40%, white 60%)`,r["--p-70"]=`color-mix(in srgb, ${i} 60%, white 40%)`,r["--p-60"]=`color-mix(in srgb, ${i} 80%, white 20%)`,r["--p-50"]=i,r["--p-40"]=`color-mix(in srgb, ${i} 80%, black 20%)`,r["--p-35"]=`color-mix(in srgb, ${i} 70%, black 30%)`,r["--p-30"]=`color-mix(in srgb, ${i} 60%, black 40%)`,r["--p-25"]=`color-mix(in srgb, ${i} 50%, black 50%)`,r["--p-20"]=`color-mix(in srgb, ${i} 40%, black 60%)`,r["--p-15"]=`color-mix(in srgb, ${i} 30%, black 70%)`,r["--p-10"]=`color-mix(in srgb, ${i} 20%, black 80%)`,r["--p-5"]=`color-mix(in srgb, ${i} 10%, black 90%)`,r["--0"]="#00000";break}case"font":{r["--font-family"]=i,r["--font-family-flex"]=i;break}}return r});static \u0275fac=function(r){return new(r||e)};static \u0275cmp=Gr({type:e,selectors:[["a2ui-surface"]],hostVars:2,hostBindings:function(r,o){r&2&&Xr(o.styles())},inputs:{surfaceId:[1,"surfaceId"],surface:[1,"surface"]},decls:3,vars:3,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){if(r&1&&(Uu(0)(1),qd(2,LM,1,2,"ng-container",0)),r&2){let i=zu(o.surfaceId());qr();let s=zu(o.surface());qr(),Wd(i&&s?2:-1)}},dependencies:[Ch],styles:["[_nghost-%COMP%]{display:flex;min-height:0;max-height:100%;flex-direction:column;gap:16px}"]})}return e})();export{X as a,Sn as b,uD as c,B as d,tc as e,le as f,zi as g,Eo as h,Co as i,pD as j,Dr as k,hD as l,St as m,ZN as n,Io as o,lt as p,us as q,_D as r,CD as s,An as t,sc as u,Ee as v,ND as w,Mt as x,To as y,ls as z,RD as A,FD as B,uc as C,ac as D,HD as E,$D as F,on as G,zD as H,qD as I,cc as J,lc as K,u0 as L,dc as M,GD as N,c0 as O,ds as P,YD as Q,QD as R,d0 as S,fs as T,f0 as U,p0 as V,h0 as W,ps as X,KD as Y,JD as Z,g0 as _,XD as $,_ as aa,pt as ba,Cs as ca,I as da,ht as ea,rE as fa,x as ga,A as ha,b as ia,R0 as ja,Ce as ka,Sr as la,CE as ma,G0 as na,W0 as oa,og as pa,ig as qa,we as ra,K as sa,Oe as ta,Gn as ua,At as va,be as wa,Ve as xa,Pt as ya,pn as za,Zo as Aa,de as Ba,hu as Ca,Ur as Da,jt as Ea,tu as Fa,gu as Ga,Xn as Ha,g_ as Ia,yu as Ja,wm as Ka,Le as La,md as Ma,G_ as Na,W_ as Oa,Z_ as Pa,qr as Qa,Ht as Ra,dC as Sa,gn as Ta,Kn as Ua,pi as Va,oe as Wa,lw as Xa,rt as Ya,yn as Za,Oy as _a,Py as $a,Gr as ab,$t as bb,ot as cb,ex as db,Wr as eb,Hy as fb,$y as gb,Uy as hb,zy as ib,gi as jb,fx as kb,Wy as lb,Zr as mb,Qy as nb,Pu as ob,hx as pb,qd as qb,Gd as rb,Wd as sb,mx as tb,Lu as ub,ju as vb,Bu as wb,Yr as xb,Qr as yb,Kr as zb,Ky as Ab,Zd as Bb,Yd as Cb,Vu as Db,Qd as Eb,Kd as Fb,Jr as Gb,_x as Hb,Hu as Ib,eb as Jb,tb as Kb,yi as Lb,xx as Mb,Ix as Nb,rb as Ob,ob as Pb,Sx as Qb,Mx as Rb,ib as Sb,sb as Tb,Ax as Ub,Nx as Vb,$u as Wb,db as Xb,Xr as Yb,bi as Zb,eI as _b,Db as $b,Jd as ac,Eb as bc,_b as cc,Cb as dc,oI as ec,wb as fc,Uu as gc,zu as hc,qu as ic,iI as jc,sI as kc,lI as lc,dI as mc,fI as nc,pI as oc,hI as pc,mI as qc,yI as rc,bI as sc,vI as tc,Wu as uc,Me as vc,_I as wc,sf as xc,Pb as yc,iB as zc,sB as Ac,Ae as Bc,uB as Cc,aB as Dc,cB as Ec,yf as Fc,bf as Gc,JI as Hc,XI as Ic,dB as Jc,fB as Kc,pB as Lc,Et as Mc,t2 as Nc,eo as Oc,e1 as Pc,t1 as Qc,i2 as Rc,s2 as Sc,u2 as Tc,s1 as Uc,c2 as Vc,l2 as Wc,d2 as Xc,g2 as Yc,y2 as Zc,Cf as _c,u1 as $c,Z7 as ad,ro as bd,lp as cd,lT as dd,yT as ed,q1 as fd,BT as gd,s$ as hd,bp as id,jM as jd,BM as kd,VM as ld,_h as md,Ch as nd,Oq as od,Pq as pd}; +`,i.map=[t,e.line],!0}function zp(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||o+3>i)return!1;let s=e.src.charCodeAt(o);if(s!==126&&s!==96)return!1;let u=o;o=e.skipChars(o,s);let a=o-u;if(a<3)return!1;let c=e.src.slice(u,o),l=e.src.slice(o,i);if(s===96&&l.indexOf(String.fromCharCode(s))>=0)return!1;if(r)return!0;let d=t,h=!1;for(;d++,!(d>=n||(o=u=e.bMarks[d]+e.tShift[d],i=e.eMarks[d],o=4)&&(o=e.skipChars(o,s),!(o-u=4||e.src.charCodeAt(o)!==62)return!1;if(r)return!0;let u=[],a=[],c=[],l=[],d=e.md.block.ruler.getRules("blockquote"),h=e.parentType;e.parentType="blockquote";let f=!1,p;for(p=t;p=i)break;if(e.src.charCodeAt(o++)===62&&!w){let F=e.sCount[p]+1,E,N;e.src.charCodeAt(o)===32?(o++,F++,N=!1,E=!0):e.src.charCodeAt(o)===9?(E=!0,(e.bsCount[p]+F)%4===3?(o++,F++,N=!1):N=!0):E=!1;let O=F;for(u.push(e.bMarks[p]),e.bMarks[p]=o;o=i,a.push(e.bsCount[p]),e.bsCount[p]=e.sCount[p]+1+(E?1:0),c.push(e.sCount[p]),e.sCount[p]=O-F,l.push(e.tShift[p]),e.tShift[p]=o-e.bMarks[p];continue}if(f)break;let D=!1;for(let F=0,E=d.length;F";let y=[t,0];m.map=y,e.md.block.tokenize(e,t,p);let v=e.push("blockquote_close","blockquote",-1);v.markup=">",e.lineMax=s,e.parentType=h,y[1]=e.line;for(let w=0;w=4)return!1;let i=e.bMarks[t]+e.tShift[t],s=e.src.charCodeAt(i++);if(s!==42&&s!==45&&s!==95)return!1;let u=1;for(;i=r)return-1;let i=e.src.charCodeAt(o++);if(i<48||i>57)return-1;for(;;){if(o>=r)return-1;if(i=e.src.charCodeAt(o++),i>=48&&i<=57){if(o-n>=10)return-1;continue}if(i===41||i===46)break;return-1}return o=4||e.listIndent>=0&&e.sCount[a]-e.listIndent>=4&&e.sCount[a]=e.blkIndent&&(l=!0);let d,h,f;if((f=_v(e,a))>=0){if(d=!0,s=e.bMarks[a]+e.tShift[a],h=Number(e.src.slice(s,f-1)),l&&h!==1)return!1}else if((f=Ev(e,a))>=0)d=!1;else return!1;if(l&&e.skipSpaces(f)>=e.eMarks[a])return!1;if(r)return!0;let p=e.src.charCodeAt(f-1),g=e.tokens.length;d?(u=e.push("ordered_list_open","ol",1),h!==1&&(u.attrs=[["start",h]])):u=e.push("bullet_list_open","ul",1);let m=[a,0];u.map=m,u.markup=String.fromCharCode(p);let y=!1,v=e.md.block.ruler.getRules("list"),w=e.parentType;for(e.parentType="list";a=o?N=1:N=F-D,N>4&&(N=1);let O=D+N;u=e.push("list_item_open","li",1),u.markup=String.fromCharCode(p);let J=[a,0];u.map=J,d&&(u.info=e.src.slice(s,f-1));let ut=e.tight,mo=e.tShift[a],Pi=e.sCount[a],Yv=e.listIndent;if(e.listIndent=e.blkIndent,e.blkIndent=O,e.tight=!0,e.tShift[a]=E-e.bMarks[a],e.sCount[a]=F,E>=o&&e.isEmpty(a+1)?e.line=Math.min(e.line+2,n):e.md.block.tokenize(e,a,n,!0),(!e.tight||y)&&(c=!1),y=e.line-a>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=Yv,e.tShift[a]=mo,e.sCount[a]=Pi,e.tight=ut,u=e.push("list_item_close","li",-1),u.markup=String.fromCharCode(p),a=e.line,J[1]=a,a>=n||e.sCount[a]=4)break;let wh=!1;for(let cr=0,Qv=v.length;cr=4||e.src.charCodeAt(o)!==91)return!1;function u(v){let w=e.lineMax;if(v>=w||e.isEmpty(v))return null;let D=!1;if(e.sCount[v]-e.blkIndent>3&&(D=!0),e.sCount[v]<0&&(D=!0),!D){let N=e.md.block.ruler.getRules("reference"),O=e.parentType;e.parentType="reference";let J=!1;for(let ut=0,mo=N.length;ut"u"&&(e.env.references={}),typeof e.env.references[y]>"u"&&(e.env.references[y]={title:m,href:d}),e.line=s),!0):!1}var Cv=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"];var BS="[a-zA-Z_:][a-zA-Z0-9:._-]*",VS="[^\"'=<>`\\x00-\\x20]+",HS="'[^']*'",$S='"[^"]*"',US="(?:"+VS+"|"+HS+"|"+$S+")",zS="(?:\\s+"+BS+"(?:\\s*=\\s*"+US+")?)",wv="<[A-Za-z][A-Za-z0-9\\-]*"+zS+"*\\s*\\/?>",xv="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",qS="",GS="<[?][\\s\\S]*?[?]>",WS="]*>",ZS="",Iv=new RegExp("^(?:"+wv+"|"+xv+"|"+qS+"|"+GS+"|"+WS+"|"+ZS+")"),Tv=new RegExp("^(?:"+wv+"|"+xv+")");var go=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(Tv.source+"\\s*$"),/^$/,!1]];function Yp(e,t,n,r){let o=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4||!e.md.options.html||e.src.charCodeAt(o)!==60)return!1;let s=e.src.slice(o,i),u=0;for(;u=4)return!1;let s=e.src.charCodeAt(o);if(s!==35||o>=i)return!1;let u=1;for(s=e.src.charCodeAt(++o);s===35&&o6||oo&&H(e.src.charCodeAt(a-1))&&(i=a),e.line=t+1;let c=e.push("heading_open","h"+String(u),1);c.markup="########".slice(0,u),c.map=[t,e.line];let l=e.push("inline","",0);l.content=e.src.slice(o,i).trim(),l.map=[t,e.line],l.children=[];let d=e.push("heading_close","h"+String(u),-1);return d.markup="########".slice(0,u),!0}function Kp(e,t,n){let r=e.md.block.ruler.getRules("paragraph");if(e.sCount[t]-e.blkIndent>=4)return!1;let o=e.parentType;e.parentType="paragraph";let i=0,s,u=t+1;for(;u3)continue;if(e.sCount[u]>=e.blkIndent){let f=e.bMarks[u]+e.tShift[u],p=e.eMarks[u];if(f=p))){i=s===61?1:2;break}}if(e.sCount[u]<0)continue;let h=!1;for(let f=0,p=r.length;f3||e.sCount[i]<0)continue;let c=!1;for(let l=0,d=r.length;l=n||e.sCount[s]=i){e.line=n;break}let a=e.line,c=!1;for(let l=0;l=e.line)throw new Error("block rule didn't increment state.line");break}if(!c)throw new Error("none of the block rules matched");e.tight=!u,e.isEmpty(e.line-1)&&(u=!0),s=e.line,s0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],o={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(r),this.tokens_meta.push(o),r};Fi.prototype.scanDelims=function(e,t){let n=this.posMax,r=this.src.charCodeAt(e),o=e>0?this.src.charCodeAt(e-1):32,i=e;for(;i0)return!1;let n=e.pos,r=e.posMax;if(n+3>r||e.src.charCodeAt(n)!==58||e.src.charCodeAt(n+1)!==47||e.src.charCodeAt(n+2)!==47)return!1;let o=e.pending.match(QS);if(!o)return!1;let i=o[1],s=e.md.linkify.matchAtStart(e.src.slice(n-i.length));if(!s)return!1;let u=s.url;if(u.length<=i.length)return!1;u=u.replace(/\*+$/,"");let a=e.md.normalizeLink(u);if(!e.md.validateLink(a))return!1;if(!t){e.pending=e.pending.slice(0,-i.length);let c=e.push("link_open","a",1);c.attrs=[["href",a]],c.markup="linkify",c.info="auto";let l=e.push("text","",0);l.content=e.md.normalizeLinkText(u);let d=e.push("link_close","a",-1);d.markup="linkify",d.info="auto"}return e.pos+=u.length-i.length,!0}function th(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==10)return!1;let r=e.pending.length-1,o=e.posMax;if(!t)if(r>=0&&e.pending.charCodeAt(r)===32)if(r>=1&&e.pending.charCodeAt(r-1)===32){let i=r-1;for(;i>=1&&e.pending.charCodeAt(i-1)===32;)i--;e.pending=e.pending.slice(0,i),e.push("hardbreak","br",0)}else e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0);else e.push("softbreak","br",0);for(n++;n?@[]^_`{|}~-".split("").forEach(function(e){nh[e.charCodeAt(0)]=1});function rh(e,t){let n=e.pos,r=e.posMax;if(e.src.charCodeAt(n)!==92||(n++,n>=r))return!1;let o=e.src.charCodeAt(n);if(o===10){for(t||e.push("hardbreak","br",0),n++;n=55296&&o<=56319&&n+1=56320&&u<=57343&&(i+=e.src[n+1],n++)}let s="\\"+i;if(!t){let u=e.push("text_special","",0);o<256&&nh[o]!==0?u.content=i:u.content=s,u.markup=s,u.info="escape"}return e.pos=n+1,!0}function oh(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==96)return!1;let o=n;n++;let i=e.posMax;for(;n=0;r--){let o=t[r];if(o.marker!==95&&o.marker!==42||o.end===-1)continue;let i=t[o.end],s=r>0&&t[r-1].end===o.end+1&&t[r-1].marker===o.marker&&t[r-1].token===o.token-1&&t[o.end+1].token===i.token+1,u=String.fromCharCode(o.marker),a=e.tokens[o.token];a.type=s?"strong_open":"em_open",a.tag=s?"strong":"em",a.nesting=1,a.markup=s?u+u:u,a.content="";let c=e.tokens[i.token];c.type=s?"strong_close":"em_close",c.tag=s?"strong":"em",c.nesting=-1,c.markup=s?u+u:u,c.content="",s&&(e.tokens[t[r-1].token].content="",e.tokens[t[o.end+1].token].content="",r--)}}function eM(e){let t=e.tokens_meta,n=e.tokens_meta.length;Nv(e,e.delimiters);for(let r=0;r=d)return!1;if(a=p,o=e.md.helpers.parseLinkDestination(e.src,p,e.posMax),o.ok){for(s=e.md.normalizeLink(o.str),e.md.validateLink(s)?p=o.pos:s="",a=p;p=d||e.src.charCodeAt(p)!==41)&&(c=!0),p++}if(c){if(typeof e.env.references>"u")return!1;if(p=0?r=e.src.slice(a,p++):p=f+1):p=f+1,r||(r=e.src.slice(h,f)),i=e.env.references[ur(r)],!i)return e.pos=l,!1;s=i.href,u=i.title}if(!t){e.pos=h,e.posMax=f;let g=e.push("link_open","a",1),m=[["href",s]];g.attrs=m,u&&m.push(["title",u]),e.linkLevel++,e.md.inline.tokenize(e),e.linkLevel--,e.push("link_close","a",-1)}return e.pos=p,e.posMax=d,!0}function ah(e,t){let n,r,o,i,s,u,a,c,l="",d=e.pos,h=e.posMax;if(e.src.charCodeAt(e.pos)!==33||e.src.charCodeAt(e.pos+1)!==91)return!1;let f=e.pos+2,p=e.md.helpers.parseLinkLabel(e,e.pos+1,!1);if(p<0)return!1;if(i=p+1,i=h)return!1;for(c=i,u=e.md.helpers.parseLinkDestination(e.src,i,e.posMax),u.ok&&(l=e.md.normalizeLink(u.str),e.md.validateLink(l)?i=u.pos:l=""),c=i;i=h||e.src.charCodeAt(i)!==41)return e.pos=d,!1;i++}else{if(typeof e.env.references>"u")return!1;if(i=0?o=e.src.slice(c,i++):i=p+1):i=p+1,o||(o=e.src.slice(f,p)),s=e.env.references[ur(o)],!s)return e.pos=d,!1;l=s.href,a=s.title}if(!t){r=e.src.slice(f,p);let g=[];e.md.inline.parse(r,e.md,e.env,g);let m=e.push("image","img",0),y=[["src",l],["alt",""]];m.attrs=y,m.children=g,m.content=r,a&&y.push(["title",a])}return e.pos=i,e.posMax=h,!0}var tM=/^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/,nM=/^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\x00-\x20]*)$/;function ch(e,t){let n=e.pos;if(e.src.charCodeAt(n)!==60)return!1;let r=e.pos,o=e.posMax;for(;;){if(++n>=o)return!1;let s=e.src.charCodeAt(n);if(s===60)return!1;if(s===62)break}let i=e.src.slice(r+1,n);if(nM.test(i)){let s=e.md.normalizeLink(i);if(!e.md.validateLink(s))return!1;if(!t){let u=e.push("link_open","a",1);u.attrs=[["href",s]],u.markup="autolink",u.info="auto";let a=e.push("text","",0);a.content=e.md.normalizeLinkText(i);let c=e.push("link_close","a",-1);c.markup="autolink",c.info="auto"}return e.pos+=i.length+2,!0}if(tM.test(i)){let s=e.md.normalizeLink("mailto:"+i);if(!e.md.validateLink(s))return!1;if(!t){let u=e.push("link_open","a",1);u.attrs=[["href",s]],u.markup="autolink",u.info="auto";let a=e.push("text","",0);a.content=e.md.normalizeLinkText(i);let c=e.push("link_close","a",-1);c.markup="autolink",c.info="auto"}return e.pos+=i.length+2,!0}return!1}function rM(e){return/^\s]/i.test(e)}function oM(e){return/^<\/a\s*>/i.test(e)}function iM(e){let t=e|32;return t>=97&&t<=122}function lh(e,t){if(!e.md.options.html)return!1;let n=e.posMax,r=e.pos;if(e.src.charCodeAt(r)!==60||r+2>=n)return!1;let o=e.src.charCodeAt(r+1);if(o!==33&&o!==63&&o!==47&&!iM(o))return!1;let i=e.src.slice(r).match(Iv);if(!i)return!1;if(!t){let s=e.push("html_inline","",0);s.content=i[0],rM(s.content)&&e.linkLevel++,oM(s.content)&&e.linkLevel--}return e.pos+=i[0].length,!0}var sM=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,uM=/^&([a-z][a-z0-9]{1,31});/i;function dh(e,t){let n=e.pos,r=e.posMax;if(e.src.charCodeAt(n)!==38||n+1>=r)return!1;if(e.src.charCodeAt(n+1)===35){let i=e.src.slice(n).match(sM);if(i){if(!t){let s=i[1][0].toLowerCase()==="x"?parseInt(i[1].slice(1),16):parseInt(i[1],10),u=e.push("text_special","",0);u.content=ka(s)?Ri(s):Ri(65533),u.markup=i[0],u.info="entity"}return e.pos+=i[0].length,!0}}else{let i=e.src.slice(n).match(uM);if(i){let s=En(i[0]);if(s!==i[0]){if(!t){let u=e.push("text_special","",0);u.content=s,u.markup=i[0],u.info="entity"}return e.pos+=i[0].length,!0}}}return!1}function kv(e){let t={},n=e.length;if(!n)return;let r=0,o=-2,i=[];for(let s=0;sa;c-=i[c]+1){let d=e[c];if(d.marker===u.marker&&d.open&&d.end<0){let h=!1;if((d.close||u.open)&&(d.length+u.length)%3===0&&(d.length%3!==0||u.length%3!==0)&&(h=!0),!h){let f=c>0&&!e[c-1].open?i[c-1]+1:0;i[s]=s-c+f,i[c]=f,u.open=!1,d.end=s,d.close=!1,l=-1,o=-2;break}}}l!==-1&&(t[u.marker][(u.open?3:0)+(u.length||0)%3]=l)}}function fh(e){let t=e.tokens_meta,n=e.tokens_meta.length;kv(e.delimiters);for(let r=0;r0&&r++,o[t].type==="text"&&t+1=e.pos)throw new Error("inline rule didn't increment state.pos");break}}else e.pos=e.posMax;s||e.pos++,i[t]=e.pos};Oi.prototype.tokenize=function(e){let t=this.ruler.getRules(""),n=t.length,r=e.posMax,o=e.md.options.maxNesting;for(;e.pos=e.pos)throw new Error("inline rule didn't increment state.pos");break}}if(s){if(e.pos>=r)break;continue}e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()};Oi.prototype.parse=function(e,t,n,r){let o=new this.State(e,t,n,r);this.tokenize(o);let i=this.ruler2.getRules(""),s=i.length;for(let u=0;u|$))",t.tpl_email_fuzzy="(^|"+n+'|"|\\(|'+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}function mh(e){return Array.prototype.slice.call(arguments,1).forEach(function(n){n&&Object.keys(n).forEach(function(r){e[r]=n[r]})}),e}function La(e){return Object.prototype.toString.call(e)}function aM(e){return La(e)==="[object String]"}function cM(e){return La(e)==="[object Object]"}function lM(e){return La(e)==="[object RegExp]"}function Ov(e){return La(e)==="[object Function]"}function dM(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var Lv={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};function fM(e){return Object.keys(e||{}).reduce(function(t,n){return t||Lv.hasOwnProperty(n)},!1)}var pM={"http:":{validate:function(e,t,n){let r=e.slice(t);return n.re.http||(n.re.http=new RegExp("^\\/\\/"+n.re.src_auth+n.re.src_host_port_strict+n.re.src_path,"i")),n.re.http.test(r)?r.match(n.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,t,n){let r=e.slice(t);return n.re.no_http||(n.re.no_http=new RegExp("^"+n.re.src_auth+"(?:localhost|(?:(?:"+n.re.src_domain+")\\.)+"+n.re.src_domain_root+")"+n.re.src_port+n.re.src_host_terminator+n.re.src_path,"i")),n.re.no_http.test(r)?t>=3&&e[t-3]===":"||t>=3&&e[t-3]==="/"?0:r.match(n.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,n){let r=e.slice(t);return n.re.mailto||(n.re.mailto=new RegExp("^"+n.re.src_email_name+"@"+n.re.src_host_strict,"i")),n.re.mailto.test(r)?r.match(n.re.mailto)[0].length:0}}},hM="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]",gM="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");function mM(e){e.__index__=-1,e.__text_cache__=""}function yM(e){return function(t,n){let r=t.slice(n);return e.test(r)?r.match(e)[0].length:0}}function Pv(){return function(e,t){t.normalize(e)}}function Pa(e){let t=e.re=Fv(e.__opts__),n=e.__tlds__.slice();e.onCompile(),e.__tlds_replaced__||n.push(hM),n.push(t.src_xn),t.src_tlds=n.join("|");function r(u){return u.replace("%TLDS%",t.src_tlds)}t.email_fuzzy=RegExp(r(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(r(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(r(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(r(t.tpl_host_fuzzy_test),"i");let o=[];e.__compiled__={};function i(u,a){throw new Error('(LinkifyIt) Invalid schema "'+u+'": '+a)}Object.keys(e.__schemas__).forEach(function(u){let a=e.__schemas__[u];if(a===null)return;let c={validate:null,link:null};if(e.__compiled__[u]=c,cM(a)){lM(a.validate)?c.validate=yM(a.validate):Ov(a.validate)?c.validate=a.validate:i(u,a),Ov(a.normalize)?c.normalize=a.normalize:a.normalize?i(u,a):c.normalize=Pv();return}if(aM(a)){o.push(u);return}i(u,a)}),o.forEach(function(u){e.__compiled__[e.__schemas__[u]]&&(e.__compiled__[u].validate=e.__compiled__[e.__schemas__[u]].validate,e.__compiled__[u].normalize=e.__compiled__[e.__schemas__[u]].normalize)}),e.__compiled__[""]={validate:null,normalize:Pv()};let s=Object.keys(e.__compiled__).filter(function(u){return u.length>0&&e.__compiled__[u]}).map(dM).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","ig"),e.re.schema_at_start=RegExp("^"+e.re.schema_search.source,"i"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),mM(e)}function bM(e,t){let n=e.__index__,r=e.__last_index__,o=e.__text_cache__.slice(n,r);this.schema=e.__schema__.toLowerCase(),this.index=n+t,this.lastIndex=r+t,this.raw=o,this.text=o,this.url=o}function yh(e,t){let n=new bM(e,t);return e.__compiled__[n.schema].normalize(n,e),n}function Be(e,t){if(!(this instanceof Be))return new Be(e,t);t||fM(e)&&(t=e,e={}),this.__opts__=mh({},Lv,t),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=mh({},pM,e),this.__compiled__={},this.__tlds__=gM,this.__tlds_replaced__=!1,this.re={},Pa(this)}Be.prototype.add=function(t,n){return this.__schemas__[t]=n,Pa(this),this};Be.prototype.set=function(t){return this.__opts__=mh(this.__opts__,t),this};Be.prototype.test=function(t){if(this.__text_cache__=t,this.__index__=-1,!t.length)return!1;let n,r,o,i,s,u,a,c,l;if(this.re.schema_test.test(t)){for(a=this.re.schema_search,a.lastIndex=0;(n=a.exec(t))!==null;)if(i=this.testSchemaAt(t,n[2],a.lastIndex),i){this.__schema__=n[2],this.__index__=n.index+n[1].length,this.__last_index__=n.index+n[0].length+i;break}}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=t.search(this.re.host_fuzzy_test),c>=0&&(this.__index__<0||c=0&&(o=t.match(this.re.email_fuzzy))!==null&&(s=o.index+o[1].length,u=o.index+o[0].length,(this.__index__<0||sthis.__last_index__)&&(this.__schema__="mailto:",this.__index__=s,this.__last_index__=u))),this.__index__>=0};Be.prototype.pretest=function(t){return this.re.pretest.test(t)};Be.prototype.testSchemaAt=function(t,n,r){return this.__compiled__[n.toLowerCase()]?this.__compiled__[n.toLowerCase()].validate(t,r,this):0};Be.prototype.match=function(t){let n=[],r=0;this.__index__>=0&&this.__text_cache__===t&&(n.push(yh(this,r)),r=this.__last_index__);let o=r?t.slice(r):t;for(;this.test(o);)n.push(yh(this,r)),o=o.slice(this.__last_index__),r+=this.__last_index__;return n.length?n:null};Be.prototype.matchAtStart=function(t){if(this.__text_cache__=t,this.__index__=-1,!t.length)return null;let n=this.re.schema_at_start.exec(t);if(!n)return null;let r=this.testSchemaAt(t,n[2],n[0].length);return r?(this.__schema__=n[2],this.__index__=n.index+n[1].length,this.__last_index__=n.index+n[0].length+r,yh(this,0)):null};Be.prototype.tlds=function(t,n){return t=Array.isArray(t)?t:[t],n?(this.__tlds__=this.__tlds__.concat(t).sort().filter(function(r,o,i){return r!==i[o-1]}).reverse(),Pa(this),this):(this.__tlds__=t.slice(),this.__tlds_replaced__=!0,Pa(this),this)};Be.prototype.normalize=function(t){t.schema||(t.url="http://"+t.url),t.schema==="mailto:"&&!/^mailto:/i.test(t.url)&&(t.url="mailto:"+t.url)};Be.prototype.onCompile=function(){};var jv=Be;var vM=/^xn--/,DM=/[^\0-\x7F]/,EM=/[\x2E\u3002\uFF0E\uFF61]/g,_M={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},bh=35,wt=Math.floor,vh=String.fromCharCode;function _n(e){throw new RangeError(_M[e])}function CM(e,t){let n=[],r=e.length;for(;r--;)n[r]=t(e[r]);return n}function Vv(e,t){let n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),e=e.replace(EM,".");let o=e.split("."),i=CM(o,t).join(".");return r+i}function Hv(e){let t=[],n=0,r=e.length;for(;n=55296&&o<=56319&&nString.fromCodePoint(...e),xM=function(e){return e>=48&&e<58?26+(e-48):e>=65&&e<91?e-65:e>=97&&e<123?e-97:36},Bv=function(e,t){return e+22+75*(e<26)-((t!=0)<<5)},$v=function(e,t,n){let r=0;for(e=n?wt(e/700):e>>1,e+=wt(e/t);e>bh*26>>1;r+=36)e=wt(e/bh);return wt(r+(bh+1)*e/(e+38))},Uv=function(e){let t=[],n=e.length,r=0,o=128,i=72,s=e.lastIndexOf("-");s<0&&(s=0);for(let u=0;u=128&&_n("not-basic"),t.push(e.charCodeAt(u));for(let u=s>0?s+1:0;u=n&&_n("invalid-input");let h=xM(e.charCodeAt(u++));h>=36&&_n("invalid-input"),h>wt((2147483647-r)/l)&&_n("overflow"),r+=h*l;let f=d<=i?1:d>=i+26?26:d-i;if(hwt(2147483647/p)&&_n("overflow"),l*=p}let c=t.length+1;i=$v(r-a,c,a==0),wt(r/c)>2147483647-o&&_n("overflow"),o+=wt(r/c),r%=c,t.splice(r++,0,o)}return String.fromCodePoint(...t)},zv=function(e){let t=[];e=Hv(e);let n=e.length,r=128,o=0,i=72;for(let a of e)a<128&&t.push(vh(a));let s=t.length,u=s;for(s&&t.push("-");u=r&&lwt((2147483647-o)/c)&&_n("overflow"),o+=(a-r)*c,r=a;for(let l of e)if(l2147483647&&_n("overflow"),l===r){let d=o;for(let h=36;;h+=36){let f=h<=i?1:h>=i+26?26:h-i;if(d=0))try{t.hostname=Dh.toASCII(t.hostname)}catch{}return _a(co(t))}function FM(e){let t=ki(e,!0);if(t.hostname&&(!t.protocol||Zv.indexOf(t.protocol)>=0))try{t.hostname=Dh.toUnicode(t.hostname)}catch{}return Ni(co(t),Ni.defaultChars+"%")}function Ge(e,t){if(!(this instanceof Ge))return new Ge(e,t);t||Na(e)||(t=e||{},e="default"),this.inline=new Rv,this.block=new Sv,this.core=new bv,this.renderer=new fv,this.linkify=new jv,this.validateLink=kM,this.normalizeLink=RM,this.normalizeLinkText=FM,this.utils=Tp,this.helpers=fo({},Np),this.options={},this.configure(e),t&&this.set(t)}Ge.prototype.set=function(e){return fo(this.options,e),this};Ge.prototype.configure=function(e){let t=this;if(Na(e)){let n=e;if(e=MM[n],!e)throw new Error('Wrong `markdown-it` preset "'+n+'", check name')}if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(n){e.components[n].rules&&t[n].ruler.enableOnly(e.components[n].rules),e.components[n].rules2&&t[n].ruler2.enableOnly(e.components[n].rules2)}),this};Ge.prototype.enable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(o){n=n.concat(this[o].ruler.enable(e,!0))},this),n=n.concat(this.inline.ruler2.enable(e,!0));let r=e.filter(function(o){return n.indexOf(o)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+r);return this};Ge.prototype.disable=function(e,t){let n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(o){n=n.concat(this[o].ruler.disable(e,!0))},this),n=n.concat(this.inline.ruler2.disable(e,!0));let r=e.filter(function(o){return n.indexOf(o)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+r);return this};Ge.prototype.use=function(e){let t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this};Ge.prototype.parse=function(e,t){if(typeof e!="string")throw new Error("Input data should be a String");let n=new this.core.State(e,this,t);return this.core.process(n),n.tokens};Ge.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)};Ge.prototype.parseInline=function(e,t){let n=new this.core.State(e,this,t);return n.inlineMode=!0,this.core.process(n),n.tokens};Ge.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};var Eh=Ge;function OM(e,t){if(e&1&&Jr(0,0),e&2){let n=t.$implicit,r=yi();Yr("surfaceId",r.surfaceId())("component",n)}}function PM(e,t){if(e&1&&Jr(0,0),e&2){let n=t.$implicit,r=yi();Yr("surfaceId",r.surfaceId())("component",n)}}function LM(e,t){if(e&1&&Jr(0,0),e&2){yi();let n=qu(0),r=qu(1);Yr("surfaceId",n)("component",r.componentTree)}}var jM=new x("Catalog"),BM=(()=>{class e extends f1.A2uiMessageProcessor{events=new le;setData(n,r,o,i){return super.setData(n,r,o,i??void 0)}dispatch(n){let r=new le;return this.events.next({message:n,completion:r}),sc(r)}static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),VM=new x("Theme"),HM=0,_h=(()=>{class e{processor=b(BM);theme=b(VM);surfaceId=Ae.required();component=Ae.required();weight=Ae.required();sendAction(n){let r=this.component(),o=this.surfaceId()??void 0,i={};if(n.context){for(let u of n.context)if(u.value.literalBoolean)i[u.key]=u.value.literalBoolean;else if(u.value.literalNumber)i[u.key]=u.value.literalNumber;else if(u.value.literalString)i[u.key]=u.value.literalString;else if(u.value.path){let a=this.processor.resolvePath(u.value.path,r.dataContextPath),c=this.processor.getData(r,a,o);i[u.key]=c}}let s={userAction:{name:n.name,sourceComponentId:r.id,surfaceId:o,timestamp:new Date().toISOString(),context:i}};return this.processor.dispatch(s)}resolvePrimitive(n){let r=this.component(),o=this.surfaceId();return!n||typeof n!="object"?null:n.literal!=null?n.literal:n.path?this.processor.getData(r,n.path,o??void 0):"literalString"in n?n.literalString:"literalNumber"in n?n.literalNumber:"literalBoolean"in n?n.literalBoolean:null}getUniqueId(n){return`${n}-${HM++}`}static \u0275fac=function(r){return new(r||e)};static \u0275dir=ot({type:e,hostVars:2,hostBindings:function(r,o){r&2&&$u("--weight",o.weight())},inputs:{surfaceId:[1,"surfaceId"],component:[1,"component"],weight:[1,"weight"]}})}return e})(),Ch=(()=>{class e{viewContainerRef=b(rt);catalog=b(jM);static hasInsertedStyles=!1;currentRef=null;isDestroyed=!1;surfaceId=Ae.required();component=Ae.required();constructor(){Zo(()=>{let o=this.surfaceId(),i=this.component();de(()=>this.render(o,i))});let n=b(Xn),r=b(K);if(!e.hasInsertedStyles&&w1(n)){let o=r.createElement("style");o.textContent=no.structuralStyles,r.head.appendChild(o),e.hasInsertedStyles=!0}}ngOnDestroy(){this.isDestroyed=!0,this.clear()}render(n,r){return at(this,null,function*(){let o=this.catalog[r.type],i=null,s=null;if(typeof o=="function"?i=yield o():typeof o=="object"&&(i=yield o.type(),s=o.bindings(r)),this.clear(),i&&!this.isDestroyed){let u=[U("surfaceId",()=>n),U("component",()=>r),U("weight",()=>r.weight??"initial")];s&&u.push(...s),this.currentRef=this.viewContainerRef.createComponent(i,{bindings:u,injector:this.viewContainerRef.injector})}})}clear(){this.currentRef?.destroy(),this.currentRef=null}static \u0275fac=function(r){return new(r||e)};static \u0275dir=ot({type:e,selectors:[["ng-container","a2ui-renderer",""]],inputs:{surfaceId:[1,"surfaceId"],component:[1,"component"]}})}return e})();var $M=(()=>{class e extends _h{alignment=Ae("stretch");distribution=Ae("start");classes=Me(()=>P(S({},this.theme.components.Row),{[`align-${this.alignment()}`]:!0,[`distribute-${this.distribution()}`]:!0}));static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275cmp=Gr({type:e,selectors:[["a2ui-row"]],hostVars:2,hostBindings:function(r,o){r&2&&Pu("alignment",o.alignment())("distribution",o.distribution())},inputs:{alignment:[1,"alignment"],distribution:[1,"distribution"]},features:[Wr],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){r&1&&(Qr(0,"section"),ju(1,OM,1,2,"ng-container",0,Lu),Kr()),r&2&&(Xr(o.theme.additionalStyles==null?null:o.theme.additionalStyles.Row),bi(o.classes()),qr(),Bu(o.component().properties.children))},dependencies:[Ch],styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%]{display:flex;flex-direction:row;width:100%;min-height:100%;box-sizing:border-box}.align-start[_ngcontent-%COMP%]{align-items:start}.align-center[_ngcontent-%COMP%]{align-items:center}.align-end[_ngcontent-%COMP%]{align-items:end}.align-stretch[_ngcontent-%COMP%]{align-items:stretch}.distribute-start[_ngcontent-%COMP%]{justify-content:start}.distribute-center[_ngcontent-%COMP%]{justify-content:center}.distribute-end[_ngcontent-%COMP%]{justify-content:end}.distribute-spaceBetween[_ngcontent-%COMP%]{justify-content:space-between}.distribute-spaceAround[_ngcontent-%COMP%]{justify-content:space-around}.distribute-spaceEvenly[_ngcontent-%COMP%]{justify-content:space-evenly}"]})}return e})(),UM=(()=>{class e extends _h{alignment=Ae("stretch");distribution=Ae("start");classes=Me(()=>P(S({},this.theme.components.Column),{[`align-${this.alignment()}`]:!0,[`distribute-${this.distribution()}`]:!0}));static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275cmp=Gr({type:e,selectors:[["a2ui-column"]],inputs:{alignment:[1,"alignment"],distribution:[1,"distribution"]},features:[Wr],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){r&1&&(Qr(0,"section"),ju(1,PM,1,2,"ng-container",0,Lu),Kr()),r&2&&(Xr(o.theme.additionalStyles==null?null:o.theme.additionalStyles.Column),bi(o.classes()),qr(),Bu(o.component().properties.children))},dependencies:[Ch],styles:["[_nghost-%COMP%]{display:flex;flex:var(--weight)}section[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:100%;height:100%;box-sizing:border-box}.align-start[_ngcontent-%COMP%]{align-items:start}.align-center[_ngcontent-%COMP%]{align-items:center}.align-end[_ngcontent-%COMP%]{align-items:end}.align-stretch[_ngcontent-%COMP%]{align-items:stretch}.distribute-start[_ngcontent-%COMP%]{justify-content:start}.distribute-center[_ngcontent-%COMP%]{justify-content:center}.distribute-end[_ngcontent-%COMP%]{justify-content:end}.distribute-spaceBetween[_ngcontent-%COMP%]{justify-content:space-between}.distribute-spaceAround[_ngcontent-%COMP%]{justify-content:space-around}.distribute-spaceEvenly[_ngcontent-%COMP%]{justify-content:space-evenly}"]})}return e})(),zM=(()=>{class e{originalClassMap=new Map;sanitizer=b(bp);markdownIt=Eh({highlight:(n,r)=>{if(r==="html"){let o=document.createElement("iframe");return o.classList.add("html-view"),o.srcdoc=n,o.sandbox="",o.innerHTML}return n}});render(n,r){r&&this.applyTagClassMap(r);let o=this.markdownIt.render(n);return this.unapplyTagClassMap(),this.sanitizer.sanitize(Le.HTML,o)}applyTagClassMap(n){Object.entries(n).forEach(([r,o])=>{let i;switch(r){case"p":i="paragraph";break;case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":i="heading";break;case"ul":i="bullet_list";break;case"ol":i="ordered_list";break;case"li":i="list_item";break;case"a":i="link";break;case"strong":i="strong";break;case"em":i="em";break}if(!i)return;let s=`${i}_open`,u=this.markdownIt.renderer.rules[s];this.originalClassMap.set(s,u),this.markdownIt.renderer.rules[s]=(a,c,l,d,h)=>{let f=a[c];for(let p of o)f.attrJoin("class",p);return u?u.call(this,a,c,l,d,h):h.renderToken(a,c,l)}})}unapplyTagClassMap(){for(let[n,r]of this.originalClassMap)this.markdownIt.renderer.rules[n]=r;this.originalClassMap.clear()}static \u0275fac=function(r){return new(r||e)};static \u0275prov=I({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})(),qM=(()=>{class e extends _h{markdownRenderer=b(zM);text=Ae.required();usageHint=Ae.required();resolvedText=Me(()=>{let n=this.usageHint(),r=super.resolvePrimitive(this.text());if(r==null)return"(empty)";switch(n){case"h1":r=`# ${r}`;break;case"h2":r=`## ${r}`;break;case"h3":r=`### ${r}`;break;case"h4":r=`#### ${r}`;break;case"h5":r=`##### ${r}`;break;case"caption":r=`*${r}*`;break;default:r=String(r);break}return this.markdownRenderer.render(r,no.appendToAll(this.theme.markdown,["ol","ul","li"],{}))});classes=Me(()=>{let n=this.usageHint();return no.merge(this.theme.components.Text.all,n?this.theme.components.Text[n]:{})});additionalStyles=Me(()=>{let n=this.usageHint(),r=this.theme.additionalStyles?.Text;if(!r)return null;let o={};return this.areHintedStyles(r)?o=r[n??"body"]:o=r,o});areHintedStyles(n){return typeof n!="object"||!n||Array.isArray(n)?!1:["h1","h2","h3","h4","h5","h6","caption","body"].every(o=>o in n)}static \u0275fac=(()=>{let n;return function(o){return(n||(n=Ur(e)))(o||e)}})();static \u0275cmp=Gr({type:e,selectors:[["a2ui-text"]],inputs:{text:[1,"text"],usageHint:[1,"usageHint"]},features:[Wr],decls:1,vars:5,consts:[[3,"innerHTML"]],template:function(r,o){r&1&&Vu(0,"section",0),r&2&&(Xr(o.additionalStyles()),bi(o.classes()),Hu("innerHTML",o.resolvedText(),md))},styles:[`a2ui-text{display:block;flex:var(--weight)}a2ui-text h1,a2ui-text h2,a2ui-text h3,a2ui-text h4,a2ui-text h5{line-height:inherit;font:inherit} +`],encapsulation:2})}return e})(),Oq={Row:{type:()=>$M,bindings:e=>{let t=e.properties;return[U("alignment",()=>t.alignment??"stretch"),U("distribution",()=>t.distribution??"start")]}},Column:{type:()=>UM,bindings:e=>{let t=e.properties;return[U("alignment",()=>t.alignment??"stretch"),U("distribution",()=>t.distribution??"start")]}},List:{type:()=>import("./chunk-ZLSAKILO.js").then(e=>e.List),bindings:e=>{let t=e.properties;return[U("direction",()=>t.direction??"vertical")]}},Card:()=>import("./chunk-YI5XBR2B.js").then(e=>e.Card),Image:{type:()=>import("./chunk-N3RKSFBU.js").then(e=>e.Image),bindings:e=>{let t=e.properties;return[U("url",()=>t.url),U("usageHint",()=>t.usageHint)]}},Icon:{type:()=>import("./chunk-GFARMTUE.js").then(e=>e.Icon),bindings:e=>{let t=e.properties;return[U("name",()=>t.name)]}},Video:{type:()=>import("./chunk-SGO5R2ED.js").then(e=>e.Video),bindings:e=>{let t=e.properties;return[U("url",()=>t.url)]}},AudioPlayer:{type:()=>import("./chunk-BI6TV3NL.js").then(e=>e.Audio),bindings:e=>{let t=e.properties;return[U("url",()=>t.url)]}},Text:{type:()=>qM,bindings:e=>{let t=e.properties;return[U("text",()=>t.text),U("usageHint",()=>t.usageHint||null)]}},Button:{type:()=>import("./chunk-66RH7XMI.js").then(e=>e.Button),bindings:e=>{let t=e.properties;return[U("action",()=>t.action)]}},Divider:()=>import("./chunk-R2IMOXM4.js").then(e=>e.Divider),MultipleChoice:{type:()=>import("./chunk-MBYWPZQV.js").then(e=>e.MultipleChoice),bindings:e=>{let t=e.properties;return[U("options",()=>t.options||[]),U("value",()=>t.selections),U("description",()=>"Select an item")]}},TextField:{type:()=>import("./chunk-ARP3QDVK.js").then(e=>e.TextField),bindings:e=>{let t=e.properties;return[U("text",()=>t.text??null),U("label",()=>t.label),U("inputType",()=>t.type)]}},DateTimeInput:{type:()=>import("./chunk-FZZPD3K2.js").then(e=>e.DatetimeInput),bindings:e=>{let t=e.properties;return[U("enableDate",()=>t.enableDate),U("enableTime",()=>t.enableTime),U("value",()=>t.value)]}},CheckBox:{type:()=>import("./chunk-5MGPUGAY.js").then(e=>e.Checkbox),bindings:e=>{let t=e.properties;return[U("label",()=>t.label),U("value",()=>t.value)]}},Slider:{type:()=>import("./chunk-AF27AUNK.js").then(e=>e.Slider),bindings:e=>{let t=e.properties;return[U("value",()=>t.value),U("minValue",()=>t.minValue),U("maxValue",()=>t.maxValue),U("label",()=>"")]}},Tabs:{type:()=>import("./chunk-GLGQFQO2.js").then(e=>e.Tabs),bindings:e=>{let t=e.properties;return[U("tabs",()=>t.tabItems)]}},Modal:{type:()=>import("./chunk-ROC2DVJ2.js").then(e=>e.Modal),bindings:()=>[]}},Pq=(()=>{class e{surfaceId=Ae.required();surface=Ae.required();styles=Me(()=>{let n=this.surface(),r={};if(n?.styles)for(let[o,i]of Object.entries(n.styles))switch(o){case"primaryColor":{r["--p-100"]="#ffffff",r["--p-99"]=`color-mix(in srgb, ${i} 2%, white 98%)`,r["--p-98"]=`color-mix(in srgb, ${i} 4%, white 96%)`,r["--p-95"]=`color-mix(in srgb, ${i} 10%, white 90%)`,r["--p-90"]=`color-mix(in srgb, ${i} 20%, white 80%)`,r["--p-80"]=`color-mix(in srgb, ${i} 40%, white 60%)`,r["--p-70"]=`color-mix(in srgb, ${i} 60%, white 40%)`,r["--p-60"]=`color-mix(in srgb, ${i} 80%, white 20%)`,r["--p-50"]=i,r["--p-40"]=`color-mix(in srgb, ${i} 80%, black 20%)`,r["--p-35"]=`color-mix(in srgb, ${i} 70%, black 30%)`,r["--p-30"]=`color-mix(in srgb, ${i} 60%, black 40%)`,r["--p-25"]=`color-mix(in srgb, ${i} 50%, black 50%)`,r["--p-20"]=`color-mix(in srgb, ${i} 40%, black 60%)`,r["--p-15"]=`color-mix(in srgb, ${i} 30%, black 70%)`,r["--p-10"]=`color-mix(in srgb, ${i} 20%, black 80%)`,r["--p-5"]=`color-mix(in srgb, ${i} 10%, black 90%)`,r["--0"]="#00000";break}case"font":{r["--font-family"]=i,r["--font-family-flex"]=i;break}}return r});static \u0275fac=function(r){return new(r||e)};static \u0275cmp=Gr({type:e,selectors:[["a2ui-surface"]],hostVars:2,hostBindings:function(r,o){r&2&&Xr(o.styles())},inputs:{surfaceId:[1,"surfaceId"],surface:[1,"surface"]},decls:3,vars:3,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(r,o){if(r&1&&(Uu(0)(1),qd(2,LM,1,2,"ng-container",0)),r&2){let i=zu(o.surfaceId());qr();let s=zu(o.surface());qr(),Wd(i&&s?2:-1)}},dependencies:[Ch],styles:["[_nghost-%COMP%]{display:flex;min-height:0;max-height:100%;flex-direction:column;gap:16px}"]})}return e})();export{X as a,Sn as b,uD as c,B as d,tc as e,le as f,zi as g,Eo as h,Co as i,pD as j,Dr as k,hD as l,St as m,ZN as n,Io as o,lt as p,us as q,_D as r,CD as s,An as t,sc as u,Ee as v,ND as w,Mt as x,To as y,ls as z,RD as A,FD as B,uc as C,ac as D,HD as E,$D as F,on as G,zD as H,qD as I,cc as J,lc as K,u0 as L,dc as M,GD as N,c0 as O,ds as P,YD as Q,QD as R,d0 as S,fs as T,f0 as U,p0 as V,h0 as W,ps as X,KD as Y,JD as Z,g0 as _,XD as $,_ as aa,pt as ba,Cs as ca,I as da,ht as ea,rE as fa,x as ga,A as ha,b as ia,R0 as ja,Ce as ka,Sr as la,CE as ma,G0 as na,W0 as oa,og as pa,ig as qa,we as ra,K as sa,Oe as ta,Gn as ua,At as va,be as wa,Ve as xa,Pt as ya,pn as za,Zo as Aa,de as Ba,hu as Ca,Ur as Da,jt as Ea,tu as Fa,gu as Ga,Xn as Ha,g_ as Ia,yu as Ja,wm as Ka,Le as La,md as Ma,G_ as Na,W_ as Oa,Z_ as Pa,qr as Qa,Ht as Ra,dC as Sa,gn as Ta,Kn as Ua,pi as Va,oe as Wa,lw as Xa,rt as Ya,yn as Za,Oy as _a,Py as $a,Gr as ab,$t as bb,ot as cb,ex as db,Wr as eb,Hy as fb,$y as gb,Uy as hb,zy as ib,gi as jb,fx as kb,Wy as lb,Zr as mb,Qy as nb,Pu as ob,hx as pb,qd as qb,Gd as rb,Wd as sb,mx as tb,Lu as ub,ju as vb,Bu as wb,Yr as xb,Qr as yb,Kr as zb,Ky as Ab,Zd as Bb,Yd as Cb,Vu as Db,Qd as Eb,Kd as Fb,Jr as Gb,_x as Hb,Hu as Ib,eb as Jb,tb as Kb,yi as Lb,xx as Mb,Ix as Nb,rb as Ob,ob as Pb,Sx as Qb,Mx as Rb,ib as Sb,sb as Tb,Ax as Ub,Nx as Vb,$u as Wb,db as Xb,Xr as Yb,bi as Zb,eI as _b,Db as $b,Jd as ac,Eb as bc,_b as cc,Cb as dc,oI as ec,wb as fc,Uu as gc,zu as hc,qu as ic,iI as jc,sI as kc,lI as lc,dI as mc,fI as nc,pI as oc,hI as pc,mI as qc,yI as rc,bI as sc,vI as tc,Wu as uc,Me as vc,_I as wc,sf as xc,Pb as yc,iB as zc,sB as Ac,Ae as Bc,uB as Cc,aB as Dc,cB as Ec,yf as Fc,bf as Gc,JI as Hc,XI as Ic,dB as Jc,fB as Kc,pB as Lc,no as Mc,Et as Nc,F2 as Oc,io as Pc,y1 as Qc,b1 as Rc,j2 as Sc,B2 as Tc,V2 as Uc,C1 as Vc,$2 as Wc,U2 as Xc,z2 as Yc,Z2 as Zc,Q2 as _c,tp as $c,w1 as ad,UV as bd,lp as cd,lT as dd,yT as ed,q1 as fd,BT as gd,s$ as hd,bp as id,jM as jd,BM as kd,VM as ld,_h as md,Ch as nd,Oq as od,Pq as pd}; diff --git a/src/google/adk/cli/browser/chunk-BWFUMX67.js b/src/google/adk/cli/browser/chunk-ROC2DVJ2.js similarity index 97% rename from src/google/adk/cli/browser/chunk-BWFUMX67.js rename to src/google/adk/cli/browser/chunk-ROC2DVJ2.js index cf3e47dd03..f0d6677557 100644 --- a/src/google/adk/cli/browser/chunk-BWFUMX67.js +++ b/src/google/adk/cli/browser/chunk-ROC2DVJ2.js @@ -1 +1 @@ -import{Aa as f,Cc as k,Gb as m,Hb as p,Jb as d,Lb as o,Qa as r,Tb as w,Ub as v,Yb as y,Zb as u,_b as D,ab as C,eb as M,md as b,na as a,nd as P,oa as c,qb as x,sb as h,xb as g,yb as l,za as _,zb as s}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var V=["dialog"];function S(t,E){if(t&1){let e=p();l(0,"dialog",2,0),d("click",function(i){a(e);let O=o();return c(O.handleDialogClick(i))}),l(2,"section")(3,"div",3)(4,"button",2),d("click",function(){a(e);let i=o();return c(i.closeDialog())}),l(5,"span",4),D(6,"close"),s()()(),m(7,5),s()()}if(t&2){let e=o();u(e.theme.components.Modal.backdrop),r(2),y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Modal),u(e.theme.components.Modal.element),r(5),g("surfaceId",e.surfaceId())("component",e.component().properties.contentChild)}}function T(t,E){if(t&1){let e=p();l(0,"section",2),d("click",function(){a(e);let i=o();return c(i.showDialog.set(!0))}),m(1,5),s()}if(t&2){let e=o();r(),g("surfaceId",e.surfaceId())("component",e.component().properties.entryPointChild)}}var j=(()=>{class t extends b{showDialog=_(!1);dialog=k("dialog");constructor(){super(),f(()=>{let e=this.dialog();e&&!e.nativeElement.open&&e.nativeElement.showModal()})}handleDialogClick(e){e.target instanceof HTMLDialogElement&&this.closeDialog()}closeDialog(){let e=this.dialog();e&&(e.nativeElement.open||e.nativeElement.close(),this.showDialog.set(!1))}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=C({type:t,selectors:[["a2ui-modal"]],viewQuery:function(n,i){n&1&&w(i.dialog,V,5),n&2&&v()},features:[M],decls:2,vars:1,consts:[["dialog",""],[3,"class"],[3,"click"],[1,"controls"],[1,"g-icon"],["a2ui-renderer","",3,"surfaceId","component"]],template:function(n,i){n&1&&x(0,S,8,8,"dialog",1)(1,T,2,2,"section"),n&2&&h(i.showDialog()?0:1)},dependencies:[P],styles:["dialog[_ngcontent-%COMP%]{padding:0;border:none;background:none}dialog[_ngcontent-%COMP%] section[_ngcontent-%COMP%] .controls[_ngcontent-%COMP%]{display:flex;justify-content:end;margin-bottom:4px}dialog[_ngcontent-%COMP%] section[_ngcontent-%COMP%] .controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:0;background:none;width:20px;height:20px;pointer:cursor;border:none;cursor:pointer}"]})}return t})();export{j as Modal}; +import{Aa as f,Cc as k,Gb as m,Hb as p,Jb as d,Lb as o,Qa as r,Tb as w,Ub as v,Yb as y,Zb as u,_b as D,ab as C,eb as M,md as b,na as a,nd as P,oa as c,qb as x,sb as h,xb as g,yb as l,za as _,zb as s}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";var V=["dialog"];function S(t,E){if(t&1){let e=p();l(0,"dialog",2,0),d("click",function(i){a(e);let O=o();return c(O.handleDialogClick(i))}),l(2,"section")(3,"div",3)(4,"button",2),d("click",function(){a(e);let i=o();return c(i.closeDialog())}),l(5,"span",4),D(6,"close"),s()()(),m(7,5),s()()}if(t&2){let e=o();u(e.theme.components.Modal.backdrop),r(2),y(e.theme.additionalStyles==null?null:e.theme.additionalStyles.Modal),u(e.theme.components.Modal.element),r(5),g("surfaceId",e.surfaceId())("component",e.component().properties.contentChild)}}function T(t,E){if(t&1){let e=p();l(0,"section",2),d("click",function(){a(e);let i=o();return c(i.showDialog.set(!0))}),m(1,5),s()}if(t&2){let e=o();r(),g("surfaceId",e.surfaceId())("component",e.component().properties.entryPointChild)}}var j=(()=>{class t extends b{showDialog=_(!1);dialog=k("dialog");constructor(){super(),f(()=>{let e=this.dialog();e&&!e.nativeElement.open&&e.nativeElement.showModal()})}handleDialogClick(e){e.target instanceof HTMLDialogElement&&this.closeDialog()}closeDialog(){let e=this.dialog();e&&(e.nativeElement.open||e.nativeElement.close(),this.showDialog.set(!1))}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=C({type:t,selectors:[["a2ui-modal"]],viewQuery:function(n,i){n&1&&w(i.dialog,V,5),n&2&&v()},features:[M],decls:2,vars:1,consts:[["dialog",""],[3,"class"],[3,"click"],[1,"controls"],[1,"g-icon"],["a2ui-renderer","",3,"surfaceId","component"]],template:function(n,i){n&1&&x(0,S,8,8,"dialog",1)(1,T,2,2,"section"),n&2&&h(i.showDialog()?0:1)},dependencies:[P],styles:["dialog[_ngcontent-%COMP%]{padding:0;border:none;background:none}dialog[_ngcontent-%COMP%] section[_ngcontent-%COMP%] .controls[_ngcontent-%COMP%]{display:flex;justify-content:end;margin-bottom:4px}dialog[_ngcontent-%COMP%] section[_ngcontent-%COMP%] .controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:0;background:none;width:20px;height:20px;pointer:cursor;border:none;cursor:pointer}"]})}return t})();export{j as Modal}; diff --git a/src/google/adk/cli/browser/chunk-IXLBQLFI.js b/src/google/adk/cli/browser/chunk-SGO5R2ED.js similarity index 93% rename from src/google/adk/cli/browser/chunk-IXLBQLFI.js rename to src/google/adk/cli/browser/chunk-SGO5R2ED.js index c1a0434ee9..15b4e2f1e6 100644 --- a/src/google/adk/cli/browser/chunk-IXLBQLFI.js +++ b/src/google/adk/cli/browser/chunk-SGO5R2ED.js @@ -1 +1 @@ -import{Bb as m,Bc as _,Cb as u,Da as r,Db as p,Ib as v,Lb as f,Na as l,Qa as n,Yb as y,Zb as g,ab as d,eb as s,gc as h,hc as x,ic as C,md as b,qb as a,sb as c,vc as M}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function U(e,V){if(e&1&&(m(0,"section"),p(1,"video",1),u()),e&2){let t=f(),i=C(0);y(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Video),g(t.theme.components.Video),n(),v("src",i,l)}}var L=(()=>{class e extends b{url=_.required();resolvedUrl=M(()=>this.resolvePrimitive(this.url()));static \u0275fac=(()=>{let t;return function(o){return(t||(t=r(e)))(o||e)}})();static \u0275cmp=d({type:e,selectors:[["a2ui-video"]],inputs:{url:[1,"url"]},features:[s],decls:2,vars:2,consts:[[3,"class","style"],["controls","",3,"src"]],template:function(i,o){if(i&1&&(h(0),a(1,U,2,5,"section",0)),i&2){let D=x(o.resolvedUrl());n(),c(D?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}video[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return e})();export{L as Video}; +import{Bb as m,Bc as _,Cb as u,Da as r,Db as p,Ib as v,Lb as f,Na as l,Qa as n,Yb as y,Zb as g,ab as d,eb as s,gc as h,hc as x,ic as C,md as b,qb as a,sb as c,vc as M}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";function U(e,V){if(e&1&&(m(0,"section"),p(1,"video",1),u()),e&2){let t=f(),i=C(0);y(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Video),g(t.theme.components.Video),n(),v("src",i,l)}}var L=(()=>{class e extends b{url=_.required();resolvedUrl=M(()=>this.resolvePrimitive(this.url()));static \u0275fac=(()=>{let t;return function(o){return(t||(t=r(e)))(o||e)}})();static \u0275cmp=d({type:e,selectors:[["a2ui-video"]],inputs:{url:[1,"url"]},features:[s],decls:2,vars:2,consts:[[3,"class","style"],["controls","",3,"src"]],template:function(i,o){if(i&1&&(h(0),a(1,U,2,5,"section",0)),i&2){let D=x(o.resolvedUrl());n(),c(D?1:-1)}},styles:["[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}video[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box}"]})}return e})();export{L as Video}; diff --git a/src/google/adk/cli/browser/chunk-A6XEKK5I.js b/src/google/adk/cli/browser/chunk-YI5XBR2B.js similarity index 94% rename from src/google/adk/cli/browser/chunk-A6XEKK5I.js rename to src/google/adk/cli/browser/chunk-YI5XBR2B.js index a2032f5271..6e7f080920 100644 --- a/src/google/adk/cli/browser/chunk-A6XEKK5I.js +++ b/src/google/adk/cli/browser/chunk-YI5XBR2B.js @@ -1,2 +1,2 @@ -import{Da as o,Gb as h,Lb as y,Qa as a,Yb as C,Zb as g,ab as c,eb as d,md as _,nc as v,nd as w,ub as s,vb as l,wb as p,xb as m,yb as u,zb as f}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";var D=e=>[e];function M(e,F){if(e&1&&h(0,0),e&2){let i=F.$implicit,n=y();m("surfaceId",n.surfaceId())("component",i)}}var T=(()=>{class e extends _{static \u0275fac=(()=>{let i;return function(t){return(i||(i=o(e)))(t||e)}})();static \u0275cmp=c({type:e,selectors:[["a2ui-card"]],features:[d],decls:3,vars:6,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(n,t){if(n&1&&(u(0,"section"),l(1,M,1,2,"ng-container",0,s),f()),n&2){let r=t.component().properties,I=r.children||v(4,D,r.child);C(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Card),g(t.theme.components.Card),a(),p(I)}},dependencies:[w],styles:[`a2ui-card{display:block;flex:var(--weight);min-height:0;overflow:auto}a2ui-card>section{height:100%;width:100%;min-height:0;overflow:auto}a2ui-card>section>*{height:100%;width:100%} +import{Da as o,Gb as h,Lb as y,Qa as a,Yb as C,Zb as g,ab as c,eb as d,md as _,nc as v,nd as w,ub as s,vb as l,wb as p,xb as m,yb as u,zb as f}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";var D=e=>[e];function M(e,F){if(e&1&&h(0,0),e&2){let i=F.$implicit,n=y();m("surfaceId",n.surfaceId())("component",i)}}var T=(()=>{class e extends _{static \u0275fac=(()=>{let i;return function(t){return(i||(i=o(e)))(t||e)}})();static \u0275cmp=c({type:e,selectors:[["a2ui-card"]],features:[d],decls:3,vars:6,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(n,t){if(n&1&&(u(0,"section"),l(1,M,1,2,"ng-container",0,s),f()),n&2){let r=t.component().properties,I=r.children||v(4,D,r.child);C(t.theme.additionalStyles==null?null:t.theme.additionalStyles.Card),g(t.theme.components.Card),a(),p(I)}},dependencies:[w],styles:[`a2ui-card{display:block;flex:var(--weight);min-height:0;overflow:auto}a2ui-card>section{height:100%;width:100%;min-height:0;overflow:auto}a2ui-card>section>*{height:100%;width:100%} `],encapsulation:2})}return e})();export{T as Card}; diff --git a/src/google/adk/cli/browser/chunk-7MR4QDTO.js b/src/google/adk/cli/browser/chunk-ZLSAKILO.js similarity index 95% rename from src/google/adk/cli/browser/chunk-7MR4QDTO.js rename to src/google/adk/cli/browser/chunk-ZLSAKILO.js index b5e69c1ba1..2c39033bda 100644 --- a/src/google/adk/cli/browser/chunk-7MR4QDTO.js +++ b/src/google/adk/cli/browser/chunk-ZLSAKILO.js @@ -1 +1 @@ -import{Bc as _,Da as o,Gb as u,Lb as g,Qa as r,Yb as y,Zb as C,ab as s,eb as c,md as M,nd as v,ob as a,ub as d,vb as l,wb as p,xb as m,yb as f,zb as h}from"./chunk-BX7YU7E6.js";import"./chunk-W7GRJBO5.js";function O(e,x){if(e&1&&u(0,0),e&2){let n=x.$implicit,i=g();m("surfaceId",i.surfaceId())("component",n)}}var D=(()=>{class e extends M{direction=_("vertical");static \u0275fac=(()=>{let n;return function(t){return(n||(n=o(e)))(t||e)}})();static \u0275cmp=s({type:e,selectors:[["a2ui-list"]],hostVars:1,hostBindings:function(i,t){i&2&&a("direction",t.direction())},inputs:{direction:[1,"direction"]},features:[c],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(i,t){i&1&&(f(0,"section"),l(1,O,1,2,"ng-container",0,d),h()),i&2&&(y(t.theme.additionalStyles==null?null:t.theme.additionalStyles.List),C(t.theme.components.List),r(),p(t.component().properties.children))},dependencies:[v],styles:['[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}[direction="vertical"][_nghost-%COMP%] section[_ngcontent-%COMP%]{display:grid}[direction="horizontal"][_nghost-%COMP%] section[_ngcontent-%COMP%]{display:flex;max-width:100%;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}[direction="horizontal"][_nghost-%COMP%] section[_ngcontent-%COMP%] > [_ngcontent-%COMP%]::slotted(*){flex:1 0 fit-content;max-width:min(80%,400px)}']})}return e})();export{D as List}; +import{Bc as _,Da as o,Gb as u,Lb as g,Qa as r,Yb as y,Zb as C,ab as s,eb as c,md as M,nd as v,ob as a,ub as d,vb as l,wb as p,xb as m,yb as f,zb as h}from"./chunk-RGCH6K7F.js";import"./chunk-W7GRJBO5.js";function O(e,x){if(e&1&&u(0,0),e&2){let n=x.$implicit,i=g();m("surfaceId",i.surfaceId())("component",n)}}var D=(()=>{class e extends M{direction=_("vertical");static \u0275fac=(()=>{let n;return function(t){return(n||(n=o(e)))(t||e)}})();static \u0275cmp=s({type:e,selectors:[["a2ui-list"]],hostVars:1,hostBindings:function(i,t){i&2&&a("direction",t.direction())},inputs:{direction:[1,"direction"]},features:[c],decls:3,vars:4,consts:[["a2ui-renderer","",3,"surfaceId","component"]],template:function(i,t){i&1&&(f(0,"section"),l(1,O,1,2,"ng-container",0,d),h()),i&2&&(y(t.theme.additionalStyles==null?null:t.theme.additionalStyles.List),C(t.theme.components.List),r(),p(t.component().properties.children))},dependencies:[v],styles:['[_nghost-%COMP%]{display:block;flex:var(--weight);min-height:0;overflow:auto}[direction="vertical"][_nghost-%COMP%] section[_ngcontent-%COMP%]{display:grid}[direction="horizontal"][_nghost-%COMP%] section[_ngcontent-%COMP%]{display:flex;max-width:100%;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}[direction="horizontal"][_nghost-%COMP%] section[_ngcontent-%COMP%] > [_ngcontent-%COMP%]::slotted(*){flex:1 0 fit-content;max-width:min(80%,400px)}']})}return e})();export{D as List}; diff --git a/src/google/adk/cli/browser/index.html b/src/google/adk/cli/browser/index.html index 653a24e2a9..655dacd9f1 100644 --- a/src/google/adk/cli/browser/index.html +++ b/src/google/adk/cli/browser/index.html @@ -1,6 +1,6 @@ |$))/,I2A=Ao("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",cM).replace("tag",B6).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),MT=Ao(gM).replace("hr",Xu).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",B6).getRegex(),d2A=Ao(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",MT).getRegex(),CM={blockquote:d2A,code:a2A,def:c2A,fences:r2A,heading:s2A,hr:Xu,html:I2A,lheading:bT,list:C2A,newline:o2A,paragraph:MT,table:Zu,text:l2A},uT=Ao("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Xu).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",B6).getRegex(),B2A=be(gA({},CM),{lheading:g2A,table:uT,paragraph:Ao(gM).replace("hr",Xu).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",uT).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",B6).getRegex()}),E2A=be(gA({},CM),{html:Ao(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",cM).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Zu,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Ao(gM).replace("hr",Xu).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",bT).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()}),Q2A=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,h2A=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,kT=/^( {2,}|\\)\n(?!\s*$)/,u2A=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",n2A?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),RT=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,D2A=Ao(RT,"u").replace(/punct/g,E6).getRegex(),y2A=Ao(RT,"u").replace(/punct/g,xT).getRegex(),NT="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",v2A=Ao(NT,"gu").replace(/notPunctSpace/g,ST).replace(/punctSpace/g,IM).replace(/punct/g,E6).getRegex(),b2A=Ao(NT,"gu").replace(/notPunctSpace/g,p2A).replace(/punctSpace/g,m2A).replace(/punct/g,xT).getRegex(),M2A=Ao("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ST).replace(/punctSpace/g,IM).replace(/punct/g,E6).getRegex(),k2A=Ao(/\\(punct)/,"gu").replace(/punct/g,E6).getRegex(),S2A=Ao(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),x2A=Ao(cM).replace("(?:-->|$)","-->").getRegex(),R2A=Ao("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",x2A).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),I6=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,N2A=Ao(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",I6).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),FT=Ao(/^!?\[(label)\]\[(ref)\]/).replace("label",I6).replace("ref",lM).getRegex(),_T=Ao(/^!?\[(ref)\](?:\[\])?/).replace("ref",lM).getRegex(),F2A=Ao("reflink|nolink(?!\\()","g").replace("reflink",FT).replace("nolink",_T).getRegex(),fT=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,dM={_backpedal:Zu,anyPunctuation:k2A,autolink:S2A,blockSkip:w2A,br:kT,code:h2A,del:Zu,emStrongLDelim:D2A,emStrongRDelimAst:v2A,emStrongRDelimUnd:M2A,escape:Q2A,link:N2A,nolink:_T,punctuation:f2A,reflink:FT,reflinkSearch:F2A,tag:R2A,text:u2A,url:Zu},_2A=be(gA({},dM),{link:Ao(/^!?\[(label)\]\((.*?)\)/).replace("label",I6).getRegex(),reflink:Ao(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",I6).getRegex()}),nM=be(gA({},dM),{emStrongRDelimAst:b2A,emStrongLDelim:y2A,url:Ao(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",fT).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:Ao(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},mT=t=>G2A[t];function lC(t,e){if(e){if(Ls.escapeTest.test(t))return t.replace(Ls.escapeReplace,mT)}else if(Ls.escapeTestNoEncode.test(t))return t.replace(Ls.escapeReplaceNoEncode,mT);return t}function pT(t){try{t=encodeURI(t).replace(Ls.percentDecode,"%")}catch{return null}return t}function wT(t,e){let A=t.replace(Ls.findPipe,(o,a,r)=>{let s=!1,g=a;for(;--g>=0&&r[g]==="\\";)s=!s;return s?"|":" |"}),i=A.split(Ls.splitPipe),n=0;if(i[0].trim()||i.shift(),i.length>0&&!i.at(-1)?.trim()&&i.pop(),e)if(i.length>e)i.splice(e);else for(;i.length0?-2:-1}function DT(t,e,A,i,n){let o=e.href,a=e.title||null,r=t[1].replace(n.other.outputLinkReplace,"$1");i.state.inLink=!0;let s={type:t[0].charAt(0)==="!"?"image":"link",raw:A,href:o,title:a,text:r,tokens:i.inlineTokens(r)};return i.state.inLink=!1,s}function U2A(t,e,A){let i=t.match(A.other.indentCodeCompensation);if(i===null)return e;let n=i[1];return e.split(` +`).map(o=>{let a=o.match(A.other.beginningSpace);if(a===null)return o;let[r]=a;return r.length>=n.length?o.slice(n.length):o}).join(` +`)}var d6=class{options;rules;lexer;constructor(t){this.options=t||K1}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let A=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?A:Vu(A,` +`)}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let A=e[0],i=U2A(A,e[3]||"",this.rules);return{type:"code",raw:A,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:i}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let A=e[2].trim();if(this.rules.other.endingHash.test(A)){let i=Vu(A,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(A=i.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:A,tokens:this.lexer.inline(A)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:Vu(e[0],` +`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let A=Vu(e[0],` +`).split(` +`),i="",n="",o=[];for(;A.length>0;){let a=!1,r=[],s;for(s=0;s1,n={type:"list",raw:"",ordered:i,start:i?+A.slice(0,-1):"",loose:!1,items:[]};A=i?`\\d{1,9}\\${A.slice(-1)}`:`\\${A}`,this.options.pedantic&&(A=i?A:"[*+-]");let o=this.rules.other.listItemRegex(A),a=!1;for(;t;){let s=!1,g="",l="";if(!(e=o.exec(t))||this.rules.block.hr.test(t))break;g=e[0],t=t.substring(g.length);let C=e[2].split(` +`,1)[0].replace(this.rules.other.listReplaceTabs,E=>" ".repeat(3*E.length)),I=t.split(` +`,1)[0],d=!C.trim(),B=0;if(this.options.pedantic?(B=2,l=C.trimStart()):d?B=e[1].length+1:(B=e[2].search(this.rules.other.nonSpaceChar),B=B>4?1:B,l=C.slice(B),B+=e[1].length),d&&this.rules.other.blankLine.test(I)&&(g+=I+` +`,t=t.substring(I.length+1),s=!0),!s){let E=this.rules.other.nextBulletRegex(B),Q=this.rules.other.hrRegex(B),f=this.rules.other.fencesBeginRegex(B),b=this.rules.other.headingBeginRegex(B),S=this.rules.other.htmlBeginRegex(B);for(;t;){let M=t.split(` +`,1)[0],D;if(I=M,this.options.pedantic?(I=I.replace(this.rules.other.listReplaceNesting," "),D=I):D=I.replace(this.rules.other.tabCharGlobal," "),f.test(I)||b.test(I)||S.test(I)||E.test(I)||Q.test(I))break;if(D.search(this.rules.other.nonSpaceChar)>=B||!I.trim())l+=` +`+D.slice(B);else{if(d||C.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||f.test(C)||b.test(C)||Q.test(C))break;l+=` +`+I}!d&&!I.trim()&&(d=!0),g+=M+` +`,t=t.substring(M.length+1),C=D.slice(B)}}n.loose||(a?n.loose=!0:this.rules.other.doubleBlankLine.test(g)&&(a=!0)),n.items.push({type:"list_item",raw:g,task:!!this.options.gfm&&this.rules.other.listIsTask.test(l),loose:!1,text:l,tokens:[]}),n.raw+=g}let r=n.items.at(-1);if(r)r.raw=r.raw.trimEnd(),r.text=r.text.trimEnd();else return;n.raw=n.raw.trimEnd();for(let s of n.items){if(this.lexer.state.top=!1,s.tokens=this.lexer.blockTokens(s.text,[]),s.task){if(s.text=s.text.replace(this.rules.other.listReplaceTask,""),s.tokens[0]?.type==="text"||s.tokens[0]?.type==="paragraph"){s.tokens[0].raw=s.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),s.tokens[0].text=s.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let l=this.lexer.inlineQueue.length-1;l>=0;l--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[l].src)){this.lexer.inlineQueue[l].src=this.lexer.inlineQueue[l].src.replace(this.rules.other.listReplaceTask,"");break}}let g=this.rules.other.listTaskCheckbox.exec(s.raw);if(g){let l={type:"checkbox",raw:g[0]+" ",checked:g[0]!=="[ ]"};s.checked=l.checked,n.loose?s.tokens[0]&&["paragraph","text"].includes(s.tokens[0].type)&&"tokens"in s.tokens[0]&&s.tokens[0].tokens?(s.tokens[0].raw=l.raw+s.tokens[0].raw,s.tokens[0].text=l.raw+s.tokens[0].text,s.tokens[0].tokens.unshift(l)):s.tokens.unshift({type:"paragraph",raw:l.raw,text:l.raw,tokens:[l]}):s.tokens.unshift(l)}}if(!n.loose){let g=s.tokens.filter(C=>C.type==="space"),l=g.length>0&&g.some(C=>this.rules.other.anyLine.test(C.raw));n.loose=l}}if(n.loose)for(let s of n.items){s.loose=!0;for(let g of s.tokens)g.type==="text"&&(g.type="paragraph")}return n}}html(t){let e=this.rules.block.html.exec(t);if(e)return{type:"html",block:!0,raw:e[0],pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:e[0]}}def(t){let e=this.rules.block.def.exec(t);if(e){let A=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),i=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",n=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:A,raw:e[0],href:i,title:n}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let A=wT(e[1]),i=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),n=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(` +`):[],o={type:"table",raw:e[0],header:[],align:[],rows:[]};if(A.length===i.length){for(let a of i)this.rules.other.tableAlignRight.test(a)?o.align.push("right"):this.rules.other.tableAlignCenter.test(a)?o.align.push("center"):this.rules.other.tableAlignLeft.test(a)?o.align.push("left"):o.align.push(null);for(let a=0;a({text:r,tokens:this.lexer.inline(r),header:!1,align:o.align[s]})));return o}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let A=e[1].charAt(e[1].length-1)===` +`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:A,tokens:this.lexer.inline(A)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let A=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(A)){if(!this.rules.other.endAngleBracket.test(A))return;let o=Vu(A.slice(0,-1),"\\");if((A.length-o.length)%2===0)return}else{let o=K2A(e[2],"()");if(o===-2)return;if(o>-1){let a=(e[0].indexOf("!")===0?5:4)+e[1].length+o;e[2]=e[2].substring(0,o),e[0]=e[0].substring(0,a).trim(),e[3]=""}}let i=e[2],n="";if(this.options.pedantic){let o=this.rules.other.pedanticHrefTitle.exec(i);o&&(i=o[1],n=o[3])}else n=e[3]?e[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(A)?i=i.slice(1):i=i.slice(1,-1)),DT(e,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:n&&n.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let A;if((A=this.rules.inline.reflink.exec(t))||(A=this.rules.inline.nolink.exec(t))){let i=(A[2]||A[1]).replace(this.rules.other.multipleSpaceGlobal," "),n=e[i.toLowerCase()];if(!n){let o=A[0].charAt(0);return{type:"text",raw:o,text:o}}return DT(A,n,A[0],this.lexer,this.rules)}}emStrong(t,e,A=""){let i=this.rules.inline.emStrongLDelim.exec(t);if(!(!i||i[3]&&A.match(this.rules.other.unicodeAlphaNumeric))&&(!(i[1]||i[2])||!A||this.rules.inline.punctuation.exec(A))){let n=[...i[0]].length-1,o,a,r=n,s=0,g=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(g.lastIndex=0,e=e.slice(-1*t.length+n);(i=g.exec(e))!=null;){if(o=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!o)continue;if(a=[...o].length,i[3]||i[4]){r+=a;continue}else if((i[5]||i[6])&&n%3&&!((n+a)%3)){s+=a;continue}if(r-=a,r>0)continue;a=Math.min(a,a+r+s);let l=[...i[0]][0].length,C=t.slice(0,n+i.index+l+a);if(Math.min(n,a)%2){let d=C.slice(1,-1);return{type:"em",raw:C,text:d,tokens:this.lexer.inlineTokens(d)}}let I=C.slice(2,-2);return{type:"strong",raw:C,text:I,tokens:this.lexer.inlineTokens(I)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let A=e[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(A),n=this.rules.other.startingSpaceChar.test(A)&&this.rules.other.endingSpaceChar.test(A);return i&&n&&(A=A.substring(1,A.length-1)),{type:"codespan",raw:e[0],text:A}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){let e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let A,i;return e[2]==="@"?(A=e[1],i="mailto:"+A):(A=e[1],i=A),{type:"link",raw:e[0],text:A,href:i,tokens:[{type:"text",raw:A,text:A}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let A,i;if(e[2]==="@")A=e[0],i="mailto:"+A;else{let n;do n=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(n!==e[0]);A=e[0],e[1]==="www."?i="http://"+e[0]:i=e[0]}return{type:"link",raw:e[0],text:A,href:i,tokens:[{type:"text",raw:A,text:A}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let A=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:A}}}},ec=class oM{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||K1,this.options.tokenizer=this.options.tokenizer||new d6,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let A={other:Ls,block:C6.normal,inline:qu.normal};this.options.pedantic?(A.block=C6.pedantic,A.inline=qu.pedantic):this.options.gfm&&(A.block=C6.gfm,this.options.breaks?A.inline=qu.breaks:A.inline=qu.gfm),this.tokenizer.rules=A}static get rules(){return{block:C6,inline:qu}}static lex(e,A){return new oM(A).lex(e)}static lexInline(e,A){return new oM(A).inlineTokens(e)}lex(e){e=e.replace(Ls.carriageReturn,` +`),this.blockTokens(e,this.tokens);for(let A=0;A(n=a.call({lexer:this},e,A))?(e=e.substring(n.raw.length),A.push(n),!0):!1))continue;if(n=this.tokenizer.space(e)){e=e.substring(n.raw.length);let a=A.at(-1);n.raw.length===1&&a!==void 0?a.raw+=` +`:A.push(n);continue}if(n=this.tokenizer.code(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(` +`)?"":` +`)+n.raw,a.text+=` +`+n.text,this.inlineQueue.at(-1).src=a.text):A.push(n);continue}if(n=this.tokenizer.fences(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.heading(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.hr(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.blockquote(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.list(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.html(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.def(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(` +`)?"":` +`)+n.raw,a.text+=` +`+n.raw,this.inlineQueue.at(-1).src=a.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title},A.push(n));continue}if(n=this.tokenizer.table(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.lheading(e)){e=e.substring(n.raw.length),A.push(n);continue}let o=e;if(this.options.extensions?.startBlock){let a=1/0,r=e.slice(1),s;this.options.extensions.startBlock.forEach(g=>{s=g.call({lexer:this},r),typeof s=="number"&&s>=0&&(a=Math.min(a,s))}),a<1/0&&a>=0&&(o=e.substring(0,a+1))}if(this.state.top&&(n=this.tokenizer.paragraph(o))){let a=A.at(-1);i&&a?.type==="paragraph"?(a.raw+=(a.raw.endsWith(` +`)?"":` +`)+n.raw,a.text+=` +`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):A.push(n),i=o.length!==e.length,e=e.substring(n.raw.length);continue}if(n=this.tokenizer.text(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="text"?(a.raw+=(a.raw.endsWith(` +`)?"":` +`)+n.raw,a.text+=` +`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):A.push(n);continue}if(e){let a="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(a);break}else throw new Error(a)}}return this.state.top=!0,A}inline(e,A=[]){return this.inlineQueue.push({src:e,tokens:A}),A}inlineTokens(e,A=[]){let i=e,n=null;if(this.tokens.links){let s=Object.keys(this.tokens.links);if(s.length>0)for(;(n=this.tokenizer.rules.inline.reflinkSearch.exec(i))!=null;)s.includes(n[0].slice(n[0].lastIndexOf("[")+1,-1))&&(i=i.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(n=this.tokenizer.rules.inline.anyPunctuation.exec(i))!=null;)i=i.slice(0,n.index)+"++"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let o;for(;(n=this.tokenizer.rules.inline.blockSkip.exec(i))!=null;)o=n[2]?n[2].length:0,i=i.slice(0,n.index+o)+"["+"a".repeat(n[0].length-o-2)+"]"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);i=this.options.hooks?.emStrongMask?.call({lexer:this},i)??i;let a=!1,r="";for(;e;){a||(r=""),a=!1;let s;if(this.options.extensions?.inline?.some(l=>(s=l.call({lexer:this},e,A))?(e=e.substring(s.raw.length),A.push(s),!0):!1))continue;if(s=this.tokenizer.escape(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.tag(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.link(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(s.raw.length);let l=A.at(-1);s.type==="text"&&l?.type==="text"?(l.raw+=s.raw,l.text+=s.text):A.push(s);continue}if(s=this.tokenizer.emStrong(e,i,r)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.codespan(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.br(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.del(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.autolink(e)){e=e.substring(s.raw.length),A.push(s);continue}if(!this.state.inLink&&(s=this.tokenizer.url(e))){e=e.substring(s.raw.length),A.push(s);continue}let g=e;if(this.options.extensions?.startInline){let l=1/0,C=e.slice(1),I;this.options.extensions.startInline.forEach(d=>{I=d.call({lexer:this},C),typeof I=="number"&&I>=0&&(l=Math.min(l,I))}),l<1/0&&l>=0&&(g=e.substring(0,l+1))}if(s=this.tokenizer.inlineText(g)){e=e.substring(s.raw.length),s.raw.slice(-1)!=="_"&&(r=s.raw.slice(-1)),a=!0;let l=A.at(-1);l?.type==="text"?(l.raw+=s.raw,l.text+=s.text):A.push(s);continue}if(e){let l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return A}},R2=class{options;parser;constructor(t){this.options=t||K1}space(t){return""}code({text:t,lang:e,escaped:A}){let i=(e||"").match(Ls.notSpaceStart)?.[0],n=t.replace(Ls.endingNewline,"")+` +`;return i?'
'+(A?n:lC(n,!0))+`
+`:"
"+(A?n:lC(n,!0))+`
+`}blockquote({tokens:t}){return`
+${this.parser.parse(t)}
+`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`${this.parser.parseInline(t)} +`}hr(t){return`
+`}list(t){let e=t.ordered,A=t.start,i="";for(let a=0;a +`+i+" +`}listitem(t){return`
  • ${this.parser.parse(t.tokens)}
  • +`}checkbox({checked:t}){return" '}paragraph({tokens:t}){return`

    ${this.parser.parseInline(t)}

    +`}table(t){let e="",A="";for(let n=0;n${i}`),` + +`+e+` +`+i+`
    +`}tablerow({text:t}){return` +${t} +`}tablecell(t){let e=this.parser.parseInline(t.tokens),A=t.header?"th":"td";return(t.align?`<${A} align="${t.align}">`:`<${A}>`)+e+` +`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${lC(t,!0)}`}br(t){return"
    "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,tokens:A}){let i=this.parser.parseInline(A),n=pT(t);if(n===null)return i;t=n;let o='
    ",o}image({href:t,title:e,text:A,tokens:i}){i&&(A=this.parser.parseInline(i,this.parser.textRenderer));let n=pT(t);if(n===null)return lC(A);t=n;let o=`${A}{let a=n[o].flat(1/0);A=A.concat(this.walkTokens(a,e))}):n.tokens&&(A=A.concat(this.walkTokens(n.tokens,e)))}}return A}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(A=>{let i=gA({},A);if(i.async=this.defaults.async||i.async||!1,A.extensions&&(A.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let o=e.renderers[n.name];o?e.renderers[n.name]=function(...a){let r=n.renderer.apply(this,a);return r===!1&&(r=o.apply(this,a)),r}:e.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||n.level!=="block"&&n.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let o=e[n.level];o?o.unshift(n.tokenizer):e[n.level]=[n.tokenizer],n.start&&(n.level==="block"?e.startBlock?e.startBlock.push(n.start):e.startBlock=[n.start]:n.level==="inline"&&(e.startInline?e.startInline.push(n.start):e.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(e.childTokens[n.name]=n.childTokens)}),i.extensions=e),A.renderer){let n=this.defaults.renderer||new R2(this.defaults);for(let o in A.renderer){if(!(o in n))throw new Error(`renderer '${o}' does not exist`);if(["options","parser"].includes(o))continue;let a=o,r=A.renderer[a],s=n[a];n[a]=(...g)=>{let l=r.apply(n,g);return l===!1&&(l=s.apply(n,g)),l||""}}i.renderer=n}if(A.tokenizer){let n=this.defaults.tokenizer||new d6(this.defaults);for(let o in A.tokenizer){if(!(o in n))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;let a=o,r=A.tokenizer[a],s=n[a];n[a]=(...g)=>{let l=r.apply(n,g);return l===!1&&(l=s.apply(n,g)),l}}i.tokenizer=n}if(A.hooks){let n=this.defaults.hooks||new Wu;for(let o in A.hooks){if(!(o in n))throw new Error(`hook '${o}' does not exist`);if(["options","block"].includes(o))continue;let a=o,r=A.hooks[a],s=n[a];Wu.passThroughHooks.has(o)?n[a]=g=>{if(this.defaults.async&&Wu.passThroughHooksRespectAsync.has(o))return nt(this,null,function*(){let C=yield r.call(n,g);return s.call(n,C)});let l=r.call(n,g);return s.call(n,l)}:n[a]=(...g)=>{if(this.defaults.async)return nt(this,null,function*(){let C=yield r.apply(n,g);return C===!1&&(C=yield s.apply(n,g)),C});let l=r.apply(n,g);return l===!1&&(l=s.apply(n,g)),l}}i.hooks=n}if(A.walkTokens){let n=this.defaults.walkTokens,o=A.walkTokens;i.walkTokens=function(a){let r=[];return r.push(o.call(this,a)),n&&(r=r.concat(n.call(this,a))),r}}this.defaults=gA(gA({},this.defaults),i)}),this}setOptions(t){return this.defaults=gA(gA({},this.defaults),t),this}lexer(t,e){return ec.lex(t,e??this.defaults)}parser(t,e){return tc.parse(t,e??this.defaults)}parseMarkdown(t){return(e,A)=>{let i=gA({},A),n=gA(gA({},this.defaults),i),o=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(n.hooks&&(n.hooks.options=n,n.hooks.block=t),n.async)return nt(this,null,function*(){let a=n.hooks?yield n.hooks.preprocess(e):e,r=yield(n.hooks?yield n.hooks.provideLexer():t?ec.lex:ec.lexInline)(a,n),s=n.hooks?yield n.hooks.processAllTokens(r):r;n.walkTokens&&(yield Promise.all(this.walkTokens(s,n.walkTokens)));let g=yield(n.hooks?yield n.hooks.provideParser():t?tc.parse:tc.parseInline)(s,n);return n.hooks?yield n.hooks.postprocess(g):g}).catch(o);try{n.hooks&&(e=n.hooks.preprocess(e));let a=(n.hooks?n.hooks.provideLexer():t?ec.lex:ec.lexInline)(e,n);n.hooks&&(a=n.hooks.processAllTokens(a)),n.walkTokens&&this.walkTokens(a,n.walkTokens);let r=(n.hooks?n.hooks.provideParser():t?tc.parse:tc.parseInline)(a,n);return n.hooks&&(r=n.hooks.postprocess(r)),r}catch(a){return o(a)}}}onError(t,e){return A=>{if(A.message+=` +Please report this to https://github.com/markedjs/marked.`,t){let i="

    An error occurred:

    "+lC(A.message+"",!0)+"
    ";return e?Promise.resolve(i):i}if(e)return Promise.reject(A);throw A}}},G1=new J2A;function Hn(t,e){return G1.parse(t,e)}Hn.options=Hn.setOptions=function(t){return G1.setOptions(t),Hn.defaults=G1.defaults,yT(Hn.defaults),Hn};Hn.getDefaults=rM;Hn.defaults=K1;Hn.use=function(...t){return G1.use(...t),Hn.defaults=G1.defaults,yT(Hn.defaults),Hn};Hn.walkTokens=function(t,e){return G1.walkTokens(t,e)};Hn.parseInline=G1.parseInline;Hn.Parser=tc;Hn.parser=tc.parse;Hn.Renderer=R2;Hn.TextRenderer=BM;Hn.Lexer=ec;Hn.lexer=ec.lex;Hn.Tokenizer=d6;Hn.Hooks=Wu;Hn.parse=Hn;var LAe=Hn.options,GAe=Hn.setOptions,KAe=Hn.use,UAe=Hn.walkTokens,JAe=Hn.parseInline;var YAe=tc.parse,TAe=ec.lex;var Y2A=["*"],T2A="Copy",H2A="Copied",z2A=(()=>{class t{constructor(){this._buttonClick$=new $A,this.copied=_s(this._buttonClick$.pipe(ki(()=>hi(se(!0),Xm(3e3).pipe(cu(!1)))),jl(),js(1))),this.copiedText=Ke(()=>this.copied()?H2A:T2A)}onCopyToClipboardClick(){this._buttonClick$.next()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["markdown-clipboard"]],decls:2,vars:3,consts:[[1,"markdown-clipboard-button",3,"click"]],template:function(i,n){i&1&&(ci(0,"button",0),f2("click",function(){return n.onCopyToClipboardClick()}),K(1),fi()),i&2&&(ae("copied",n.copied()),p(),qA(n.copiedText()))},encapsulation:2,changeDetection:0})}}return t})(),O2A=new yA("CLIPBOARD_OPTIONS");var P2A=new yA("MARKED_EXTENSIONS"),j2A=new yA("MARKED_OPTIONS"),q2A=new yA("MERMAID_OPTIONS"),V2A=new yA("SANITIZE");function W2A(t){return typeof t=="function"}var Z2A="[ngx-markdown] When using the `emoji` attribute you *have to* include Emoji-Toolkit files to `angular.json` or use imports. See README for more information",X2A="[ngx-markdown] When using the `katex` attribute you *have to* include KaTeX files to `angular.json` or use imports. See README for more information",$2A="[ngx-markdown] When using the `mermaid` attribute you *have to* include Mermaid files to `angular.json` or use imports. See README for more information",AIA="[ngx-markdown] When using the `clipboard` attribute you *have to* include Clipboard files to `angular.json` or use imports. See README for more information",eIA="[ngx-markdown] When using the `clipboard` attribute you *have to* provide the `viewContainerRef` parameter to `MarkdownService.render()` function",tIA="[ngx-markdown] When using the `src` attribute you *have to* pass the `HttpClient` as a parameter of the `forRoot` method. See README for more information";var LT=(()=>{class t{get options(){return this._options}set options(A){this._options=gA(gA({},this.DEFAULT_MARKED_OPTIONS),A)}get renderer(){return this.options.renderer}set renderer(A){this.options.renderer=A}constructor(){this.clipboardOptions=h(O2A,{optional:!0}),this.extensions=h(P2A,{optional:!0}),this.http=h($s,{optional:!0}),this.mermaidOptions=h(q2A,{optional:!0}),this.platform=h(tp),this.sanitize=h(V2A,{optional:!0}),this.sanitizer=h(w2),this.DEFAULT_MARKED_OPTIONS={renderer:new R2},this.DEFAULT_KATEX_OPTIONS={delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}]},this.DEFAULT_MERMAID_OPTIONS={startOnLoad:!1},this.DEFAULT_CLIPBOARD_OPTIONS={buttonComponent:void 0},this.DEFAULT_PARSE_OPTIONS={decodeHtml:!1,inline:!1,emoji:!1,mermaid:!1,markedOptions:void 0,disableSanitizer:!1},this.DEFAULT_RENDER_OPTIONS={clipboard:!1,clipboardOptions:void 0,katex:!1,katexOptions:void 0,mermaid:!1,mermaidOptions:void 0},this.DEFAULT_SECURITY_CONTEXT=ql.HTML,this._options=null,this._reload$=new $A,this.reload$=this._reload$.asObservable(),this.options=h(j2A,{optional:!0})}parse(A,i=this.DEFAULT_PARSE_OPTIONS){let{decodeHtml:n,inline:o,emoji:a,mermaid:r,disableSanitizer:s}=i,g=gA(gA({},this.options),i.markedOptions),l=g.renderer||this.renderer||new R2;this.extensions&&(this.renderer=this.extendsRendererForExtensions(l)),r&&(this.renderer=this.extendsRendererForMermaid(l));let C=this.trimIndentation(A),I=n?this.decodeHtml(C):C,d=a?this.parseEmoji(I):I,B=this.parseMarked(d,g,o);return s?B:this.sanitizeHtml(B)}render(A,i=this.DEFAULT_RENDER_OPTIONS,n){let{clipboard:o,clipboardOptions:a,katex:r,katexOptions:s,mermaid:g,mermaidOptions:l}=i;r&&this.renderKatex(A,gA(gA({},this.DEFAULT_KATEX_OPTIONS),s)),g&&this.renderMermaid(A,gA(gA(gA({},this.DEFAULT_MERMAID_OPTIONS),this.mermaidOptions),l)),o&&this.renderClipboard(A,n,gA(gA(gA({},this.DEFAULT_CLIPBOARD_OPTIONS),this.clipboardOptions),a)),this.highlight(A)}reload(){this._reload$.next()}getSource(A){if(!this.http)throw new Error(tIA);return this.http.get(A,{responseType:"text"}).pipe(fe(i=>this.handleExtension(A,i)))}highlight(A){if(!aC(this.platform)||typeof Prism>"u"||typeof Prism.highlightAllUnder>"u")return;A||(A=document);let i=A.querySelectorAll('pre code:not([class*="language-"])');Array.prototype.forEach.call(i,n=>n.classList.add("language-none")),Prism.highlightAllUnder(A)}decodeHtml(A){if(!aC(this.platform))return A;let i=document.createElement("textarea");return i.innerHTML=A,i.value}extendsRendererForExtensions(A){let i=A;return i.\u0275NgxMarkdownRendererExtendedForExtensions===!0||(this.extensions&&this.extensions.length>0&&Hn.use(...this.extensions),i.\u0275NgxMarkdownRendererExtendedForExtensions=!0),A}extendsRendererForMermaid(A){let i=A;if(i.\u0275NgxMarkdownRendererExtendedForMermaid===!0)return A;let n=A.code;return A.code=o=>o.lang==="mermaid"?`
    ${o.text}
    `:n(o),i.\u0275NgxMarkdownRendererExtendedForMermaid=!0,A}handleExtension(A,i){let n=A.lastIndexOf("://"),o=n>-1?A.substring(n+4):A,a=o.lastIndexOf("/"),r=a>-1?o.substring(a+1).split("?")[0]:"",s=r.lastIndexOf("."),g=s>-1?r.substring(s+1):"";return g&&g!=="md"?"```"+g+` +`+i+"\n```":i}parseMarked(A,i,n=!1){if(i.renderer){let o=gA({},i.renderer);delete o.\u0275NgxMarkdownRendererExtendedForExtensions,delete o.\u0275NgxMarkdownRendererExtendedForMermaid,delete i.renderer,Hn.use({renderer:o})}return n?Hn.parseInline(A,i):Hn.parse(A,i)}parseEmoji(A){if(!aC(this.platform))return A;if(typeof joypixels>"u"||typeof joypixels.shortnameToUnicode>"u")throw new Error(Z2A);return joypixels.shortnameToUnicode(A)}renderKatex(A,i){if(aC(this.platform)){if(typeof katex>"u"||typeof renderMathInElement>"u")throw new Error(X2A);renderMathInElement(A,i)}}renderClipboard(A,i,n){if(!aC(this.platform))return;if(typeof ClipboardJS>"u")throw new Error(AIA);if(!i)throw new Error(eIA);let{buttonComponent:o,buttonTemplate:a}=n,r=A.querySelectorAll("pre");for(let s=0;sC.classList.add("hover"),l.onmouseleave=()=>C.classList.remove("hover");let I;if(o){let B=i.createComponent(o);I=B.hostView,B.changeDetectorRef.markForCheck()}else if(a)I=i.createEmbeddedView(a);else{let B=i.createComponent(z2A);I=B.hostView,B.changeDetectorRef.markForCheck()}let d;I.rootNodes.forEach(B=>{C.appendChild(B),d=new ClipboardJS(B,{text:()=>g.innerText})}),I.onDestroy(()=>d.destroy())}}renderMermaid(A,i=this.DEFAULT_MERMAID_OPTIONS){if(!aC(this.platform))return;if(typeof mermaid>"u"||typeof mermaid.initialize>"u")throw new Error($2A);let n=A.querySelectorAll(".mermaid");n.length!==0&&(mermaid.initialize(i),mermaid.run({nodes:n}))}trimIndentation(A){if(!A)return"";let i;return A.split(` +`).map(n=>{let o=i;return n.length>0&&(o=isNaN(o)?n.search(/\S|$/):Math.min(n.search(/\S|$/),o)),isNaN(i)&&(i=o),o?n.substring(o):n}).join(` +`)}sanitizeHtml(A){return nt(this,null,function*(){return W2A(this.sanitize)?this.sanitize(yield A):this.sanitize!==ql.NONE?this.sanitizer.sanitize(this.sanitize??this.DEFAULT_SECURITY_CONTEXT,A)??"":A})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),EM=(function(t){return t.CommandLine="command-line",t.LineHighlight="line-highlight",t.LineNumbers="line-numbers",t})(EM||{}),GT=(()=>{class t{constructor(){this.element=h(ge),this.markdownService=h(LT),this.viewContainerRef=h(Ho),this.error=new WA,this.load=new WA,this.ready=new WA,this._clipboard=!1,this._commandLine=!1,this._disableSanitizer=!1,this._emoji=!1,this._inline=!1,this._katex=!1,this._lineHighlight=!1,this._lineNumbers=!1,this._mermaid=!1,this.destroyed$=new $A}get disableSanitizer(){return this._disableSanitizer}set disableSanitizer(A){this._disableSanitizer=this.coerceBooleanProperty(A)}get inline(){return this._inline}set inline(A){this._inline=this.coerceBooleanProperty(A)}get clipboard(){return this._clipboard}set clipboard(A){this._clipboard=this.coerceBooleanProperty(A)}get emoji(){return this._emoji}set emoji(A){this._emoji=this.coerceBooleanProperty(A)}get katex(){return this._katex}set katex(A){this._katex=this.coerceBooleanProperty(A)}get mermaid(){return this._mermaid}set mermaid(A){this._mermaid=this.coerceBooleanProperty(A)}get lineHighlight(){return this._lineHighlight}set lineHighlight(A){this._lineHighlight=this.coerceBooleanProperty(A)}get lineNumbers(){return this._lineNumbers}set lineNumbers(A){this._lineNumbers=this.coerceBooleanProperty(A)}get commandLine(){return this._commandLine}set commandLine(A){this._commandLine=this.coerceBooleanProperty(A)}ngOnChanges(){this.loadContent()}loadContent(){if(this.data!=null){this.handleData();return}if(this.src!=null){this.handleSrc();return}}ngAfterViewInit(){!this.data&&!this.src&&this.handleTransclusion(),this.markdownService.reload$.pipe(Bt(this.destroyed$)).subscribe(()=>this.loadContent())}ngOnDestroy(){this.destroyed$.next(),this.destroyed$.complete()}render(A,i=!1){return nt(this,null,function*(){let n={decodeHtml:i,inline:this.inline,emoji:this.emoji,mermaid:this.mermaid,disableSanitizer:this.disableSanitizer},o={clipboard:this.clipboard,clipboardOptions:this.getClipboardOptions(),katex:this.katex,katexOptions:this.katexOptions,mermaid:this.mermaid,mermaidOptions:this.mermaidOptions},a=yield this.markdownService.parse(A,n);this.element.nativeElement.innerHTML=a,this.handlePlugins(),this.markdownService.render(this.element.nativeElement,o,this.viewContainerRef),this.ready.emit()})}coerceBooleanProperty(A){return A!=null&&`${String(A)}`!="false"}getClipboardOptions(){if(this.clipboardButtonComponent||this.clipboardButtonTemplate)return{buttonComponent:this.clipboardButtonComponent,buttonTemplate:this.clipboardButtonTemplate}}handleData(){this.render(this.data)}handleSrc(){this.markdownService.getSource(this.src).subscribe({next:A=>{this.render(A).then(()=>{this.load.emit(A)})},error:A=>this.error.emit(A)})}handleTransclusion(){this.render(this.element.nativeElement.innerHTML,!0)}handlePlugins(){this.commandLine&&(this.setPluginClass(this.element.nativeElement,EM.CommandLine),this.setPluginOptions(this.element.nativeElement,{dataFilterOutput:this.filterOutput,dataHost:this.host,dataPrompt:this.prompt,dataOutput:this.output,dataUser:this.user})),this.lineHighlight&&this.setPluginOptions(this.element.nativeElement,{dataLine:this.line,dataLineOffset:this.lineOffset}),this.lineNumbers&&(this.setPluginClass(this.element.nativeElement,EM.LineNumbers),this.setPluginOptions(this.element.nativeElement,{dataStart:this.start}))}setPluginClass(A,i){let n=A.querySelectorAll("pre");for(let o=0;o{let r=i[a];if(r){let s=this.toLispCase(a);n.item(o).setAttribute(s,r.toString())}})}toLispCase(A){let i=A.match(/([A-Z])/g);if(!i)return A;let n=A.toString();for(let o=0,a=i.length;o{class t{static forRoot(A){return{ngModule:t,providers:[$u(A)]}}static forChild(){return{ngModule:t}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275mod=$e({type:t})}static{this.\u0275inj=Xe({})}}return t})();var Di="primary",g4=Symbol("RouteTitle"),mM=class{params;constructor(e){this.params=e||{}}has(e){return Object.prototype.hasOwnProperty.call(this.params,e)}get(e){if(this.has(e)){let A=this.params[e];return Array.isArray(A)?A[0]:A}return null}getAll(e){if(this.has(e)){let A=this.params[e];return Array.isArray(A)?A:[A]}return[]}get keys(){return Object.keys(this.params)}};function Y1(t){return new mM(t)}function QM(t,e,A){for(let i=0;it.length||A.pathMatch==="full"&&(e.hasChildren()||i.lengtht.length||A.pathMatch==="full"&&e.hasChildren()&&A.path!=="**")return null;let r={};return!QM(o,t.slice(0,o.length),r)||!QM(a,t.slice(t.length-a.length),r)?null:{consumed:t,posParams:r}}function p6(t){return new Promise((e,A)=>{t.pipe(To()).subscribe({next:i=>e(i),error:i=>A(i)})})}function oIA(t,e){if(t.length!==e.length)return!1;for(let A=0;Ai[o]===n)}else return t===e}function aIA(t){return t.length>0?t[t.length-1]:null}function H1(t){return mB(t)?t:sp(t)?ks(Promise.resolve(t)):se(t)}function WT(t){return mB(t)?p6(t):Promise.resolve(t)}var rIA={exact:XT,subset:$T},ZT={exact:sIA,subset:gIA,ignored:()=>!0};function UT(t,e,A){return rIA[A.paths](t.root,e.root,A.matrixParams)&&ZT[A.queryParams](t.queryParams,e.queryParams)&&!(A.fragment==="exact"&&t.fragment!==e.fragment)}function sIA(t,e){return l0(t,e)}function XT(t,e,A){if(!U1(t.segments,e.segments)||!u6(t.segments,e.segments,A)||t.numberOfChildren!==e.numberOfChildren)return!1;for(let i in e.children)if(!t.children[i]||!XT(t.children[i],e.children[i],A))return!1;return!0}function gIA(t,e){return Object.keys(e).length<=Object.keys(t).length&&Object.keys(e).every(A=>VT(t[A],e[A]))}function $T(t,e,A){return AH(t,e,e.segments,A)}function AH(t,e,A,i){if(t.segments.length>A.length){let n=t.segments.slice(0,A.length);return!(!U1(n,A)||e.hasChildren()||!u6(n,A,i))}else if(t.segments.length===A.length){if(!U1(t.segments,A)||!u6(t.segments,A,i))return!1;for(let n in e.children)if(!t.children[n]||!$T(t.children[n],e.children[n],i))return!1;return!0}else{let n=A.slice(0,t.segments.length),o=A.slice(t.segments.length);return!U1(t.segments,n)||!u6(t.segments,n,i)||!t.children[Di]?!1:AH(t.children[Di],e,o,i)}}function u6(t,e,A){return e.every((i,n)=>ZT[A](t[n].parameters,i.parameters))}var nc=class{root;queryParams;fragment;_queryParamMap;constructor(e=new ro([],{}),A={},i=null){this.root=e,this.queryParams=A,this.fragment=i}get queryParamMap(){return this._queryParamMap??=Y1(this.queryParams),this._queryParamMap}toString(){return CIA.serialize(this)}},ro=class{segments;children;parent=null;constructor(e,A){this.segments=e,this.children=A,Object.values(A).forEach(i=>i.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return f6(this)}},N2=class{path;parameters;_parameterMap;constructor(e,A){this.path=e,this.parameters=A}get parameterMap(){return this._parameterMap??=Y1(this.parameters),this._parameterMap}toString(){return tH(this)}};function lIA(t,e){return U1(t,e)&&t.every((A,i)=>l0(A.parameters,e[i].parameters))}function U1(t,e){return t.length!==e.length?!1:t.every((A,i)=>A.path===e[i].path)}function cIA(t,e){let A=[];return Object.entries(t.children).forEach(([i,n])=>{i===Di&&(A=A.concat(e(n,i)))}),Object.entries(t.children).forEach(([i,n])=>{i!==Di&&(A=A.concat(e(n,i)))}),A}var z1=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>new CC,providedIn:"root"})}return t})(),CC=class{parse(e){let A=new DM(e);return new nc(A.parseRootSegment(),A.parseQueryParams(),A.parseFragment())}serialize(e){let A=`/${A4(e.root,!0)}`,i=BIA(e.queryParams),n=typeof e.fragment=="string"?`#${IIA(e.fragment)}`:"";return`${A}${i}${n}`}},CIA=new CC;function f6(t){return t.segments.map(e=>tH(e)).join("/")}function A4(t,e){if(!t.hasChildren())return f6(t);if(e){let A=t.children[Di]?A4(t.children[Di],!1):"",i=[];return Object.entries(t.children).forEach(([n,o])=>{n!==Di&&i.push(`${n}:${A4(o,!1)}`)}),i.length>0?`${A}(${i.join("//")})`:A}else{let A=cIA(t,(i,n)=>n===Di?[A4(t.children[Di],!1)]:[`${n}:${A4(i,!1)}`]);return Object.keys(t.children).length===1&&t.children[Di]!=null?`${f6(t)}/${A[0]}`:`${f6(t)}/(${A.join("//")})`}}function eH(t){return encodeURIComponent(t).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Q6(t){return eH(t).replace(/%3B/gi,";")}function IIA(t){return encodeURI(t)}function wM(t){return eH(t).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function m6(t){return decodeURIComponent(t)}function JT(t){return m6(t.replace(/\+/g,"%20"))}function tH(t){return`${wM(t.path)}${dIA(t.parameters)}`}function dIA(t){return Object.entries(t).map(([e,A])=>`;${wM(e)}=${wM(A)}`).join("")}function BIA(t){let e=Object.entries(t).map(([A,i])=>Array.isArray(i)?i.map(n=>`${Q6(A)}=${Q6(n)}`).join("&"):`${Q6(A)}=${Q6(i)}`).filter(A=>A);return e.length?`?${e.join("&")}`:""}var EIA=/^[^\/()?;#]+/;function hM(t){let e=t.match(EIA);return e?e[0]:""}var QIA=/^[^\/()?;=#]+/;function hIA(t){let e=t.match(QIA);return e?e[0]:""}var uIA=/^[^=?&#]+/;function fIA(t){let e=t.match(uIA);return e?e[0]:""}var mIA=/^[^&#]+/;function pIA(t){let e=t.match(mIA);return e?e[0]:""}var DM=class{url;remaining;constructor(e){this.url=e,this.remaining=e}parseRootSegment(){return this.consumeOptional("/"),this.remaining===""||this.peekStartsWith("?")||this.peekStartsWith("#")?new ro([],{}):new ro([],this.parseChildren())}parseQueryParams(){let e={};if(this.consumeOptional("?"))do this.parseQueryParam(e);while(this.consumeOptional("&"));return e}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(this.remaining==="")return{};this.consumeOptional("/");let e=[];for(this.peekStartsWith("(")||e.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),e.push(this.parseSegment());let A={};this.peekStartsWith("/(")&&(this.capture("/"),A=this.parseParens(!0));let i={};return this.peekStartsWith("(")&&(i=this.parseParens(!1)),(e.length>0||Object.keys(A).length>0)&&(i[Di]=new ro(e,A)),i}parseSegment(){let e=hM(this.remaining);if(e===""&&this.peekStartsWith(";"))throw new kt(4009,!1);return this.capture(e),new N2(m6(e),this.parseMatrixParams())}parseMatrixParams(){let e={};for(;this.consumeOptional(";");)this.parseParam(e);return e}parseParam(e){let A=hIA(this.remaining);if(!A)return;this.capture(A);let i="";if(this.consumeOptional("=")){let n=hM(this.remaining);n&&(i=n,this.capture(i))}e[m6(A)]=m6(i)}parseQueryParam(e){let A=fIA(this.remaining);if(!A)return;this.capture(A);let i="";if(this.consumeOptional("=")){let a=pIA(this.remaining);a&&(i=a,this.capture(i))}let n=JT(A),o=JT(i);if(e.hasOwnProperty(n)){let a=e[n];Array.isArray(a)||(a=[a],e[n]=a),a.push(o)}else e[n]=o}parseParens(e){let A={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){let i=hM(this.remaining),n=this.remaining[i.length];if(n!=="/"&&n!==")"&&n!==";")throw new kt(4010,!1);let o;i.indexOf(":")>-1?(o=i.slice(0,i.indexOf(":")),this.capture(o),this.capture(":")):e&&(o=Di);let a=this.parseChildren();A[o??Di]=Object.keys(a).length===1&&a[Di]?a[Di]:new ro([],a),this.consumeOptional("//")}return A}peekStartsWith(e){return this.remaining.startsWith(e)}consumeOptional(e){return this.peekStartsWith(e)?(this.remaining=this.remaining.substring(e.length),!0):!1}capture(e){if(!this.consumeOptional(e))throw new kt(4011,!1)}};function iH(t){return t.segments.length>0?new ro([],{[Di]:t}):t}function nH(t){let e={};for(let[i,n]of Object.entries(t.children)){let o=nH(n);if(i===Di&&o.segments.length===0&&o.hasChildren())for(let[a,r]of Object.entries(o.children))e[a]=r;else(o.segments.length>0||o.hasChildren())&&(e[i]=o)}let A=new ro(t.segments,e);return wIA(A)}function wIA(t){if(t.numberOfChildren===1&&t.children[Di]){let e=t.children[Di];return new ro(t.segments.concat(e.segments),e.children)}return t}function WB(t){return t instanceof nc}function oH(t,e,A=null,i=null,n=new CC){let o=aH(t);return rH(o,e,A,i,n)}function aH(t){let e;function A(o){let a={};for(let s of o.children){let g=A(s);a[s.outlet]=g}let r=new ro(o.url,a);return o===t&&(e=r),r}let i=A(t.root),n=iH(i);return e??n}function rH(t,e,A,i,n){let o=t;for(;o.parent;)o=o.parent;if(e.length===0)return uM(o,o,o,A,i,n);let a=DIA(e);if(a.toRoot())return uM(o,o,new ro([],{}),A,i,n);let r=yIA(a,o,t),s=r.processChildren?t4(r.segmentGroup,r.index,a.commands):gH(r.segmentGroup,r.index,a.commands);return uM(o,r.segmentGroup,s,A,i,n)}function w6(t){return typeof t=="object"&&t!=null&&!t.outlets&&!t.segmentPath}function n4(t){return typeof t=="object"&&t!=null&&t.outlets}function YT(t,e,A){t||="\u0275";let i=new nc;return i.queryParams={[t]:e},A.parse(A.serialize(i)).queryParams[t]}function uM(t,e,A,i,n,o){let a={};for(let[g,l]of Object.entries(i??{}))a[g]=Array.isArray(l)?l.map(C=>YT(g,C,o)):YT(g,l,o);let r;t===e?r=A:r=sH(t,e,A);let s=iH(nH(r));return new nc(s,a,n)}function sH(t,e,A){let i={};return Object.entries(t.children).forEach(([n,o])=>{o===e?i[n]=A:i[n]=sH(o,e,A)}),new ro(t.segments,i)}var D6=class{isAbsolute;numberOfDoubleDots;commands;constructor(e,A,i){if(this.isAbsolute=e,this.numberOfDoubleDots=A,this.commands=i,e&&i.length>0&&w6(i[0]))throw new kt(4003,!1);let n=i.find(n4);if(n&&n!==aIA(i))throw new kt(4004,!1)}toRoot(){return this.isAbsolute&&this.commands.length===1&&this.commands[0]=="/"}};function DIA(t){if(typeof t[0]=="string"&&t.length===1&&t[0]==="/")return new D6(!0,0,t);let e=0,A=!1,i=t.reduce((n,o,a)=>{if(typeof o=="object"&&o!=null){if(o.outlets){let r={};return Object.entries(o.outlets).forEach(([s,g])=>{r[s]=typeof g=="string"?g.split("/"):g}),[...n,{outlets:r}]}if(o.segmentPath)return[...n,o.segmentPath]}return typeof o!="string"?[...n,o]:a===0?(o.split("/").forEach((r,s)=>{s==0&&r==="."||(s==0&&r===""?A=!0:r===".."?e++:r!=""&&n.push(r))}),n):[...n,o]},[]);return new D6(A,e,i)}var jB=class{segmentGroup;processChildren;index;constructor(e,A,i){this.segmentGroup=e,this.processChildren=A,this.index=i}};function yIA(t,e,A){if(t.isAbsolute)return new jB(e,!0,0);if(!A)return new jB(e,!1,NaN);if(A.parent===null)return new jB(A,!0,0);let i=w6(t.commands[0])?0:1,n=A.segments.length-1+i;return vIA(A,n,t.numberOfDoubleDots)}function vIA(t,e,A){let i=t,n=e,o=A;for(;o>n;){if(o-=n,i=i.parent,!i)throw new kt(4005,!1);n=i.segments.length}return new jB(i,!1,n-o)}function bIA(t){return n4(t[0])?t[0].outlets:{[Di]:t}}function gH(t,e,A){if(t??=new ro([],{}),t.segments.length===0&&t.hasChildren())return t4(t,e,A);let i=MIA(t,e,A),n=A.slice(i.commandIndex);if(i.match&&i.pathIndexo!==Di)&&t.children[Di]&&t.numberOfChildren===1&&t.children[Di].segments.length===0){let o=t4(t.children[Di],e,A);return new ro(t.segments,o.children)}return Object.entries(i).forEach(([o,a])=>{typeof a=="string"&&(a=[a]),a!==null&&(n[o]=gH(t.children[o],e,a))}),Object.entries(t.children).forEach(([o,a])=>{i[o]===void 0&&(n[o]=a)}),new ro(t.segments,n)}}function MIA(t,e,A){let i=0,n=e,o={match:!1,pathIndex:0,commandIndex:0};for(;n=A.length)return o;let a=t.segments[n],r=A[i];if(n4(r))break;let s=`${r}`,g=i0&&s===void 0)break;if(s&&g&&typeof g=="object"&&g.outlets===void 0){if(!HT(s,g,a))return o;i+=2}else{if(!HT(s,{},a))return o;i++}n++}return{match:!0,pathIndex:n,commandIndex:i}}function yM(t,e,A){let i=t.segments.slice(0,e),n=0;for(;n{typeof i=="string"&&(i=[i]),i!==null&&(e[A]=yM(new ro([],{}),0,i))}),e}function TT(t){let e={};return Object.entries(t).forEach(([A,i])=>e[A]=`${i}`),e}function HT(t,e,A){return t==A.path&&l0(e,A.parameters)}var qB="imperative",dr=(function(t){return t[t.NavigationStart=0]="NavigationStart",t[t.NavigationEnd=1]="NavigationEnd",t[t.NavigationCancel=2]="NavigationCancel",t[t.NavigationError=3]="NavigationError",t[t.RoutesRecognized=4]="RoutesRecognized",t[t.ResolveStart=5]="ResolveStart",t[t.ResolveEnd=6]="ResolveEnd",t[t.GuardsCheckStart=7]="GuardsCheckStart",t[t.GuardsCheckEnd=8]="GuardsCheckEnd",t[t.RouteConfigLoadStart=9]="RouteConfigLoadStart",t[t.RouteConfigLoadEnd=10]="RouteConfigLoadEnd",t[t.ChildActivationStart=11]="ChildActivationStart",t[t.ChildActivationEnd=12]="ChildActivationEnd",t[t.ActivationStart=13]="ActivationStart",t[t.ActivationEnd=14]="ActivationEnd",t[t.Scroll=15]="Scroll",t[t.NavigationSkipped=16]="NavigationSkipped",t})(dr||{}),Kg=class{id;url;constructor(e,A){this.id=e,this.url=A}},F2=class extends Kg{type=dr.NavigationStart;navigationTrigger;restoredState;constructor(e,A,i="imperative",n=null){super(e,A),this.navigationTrigger=i,this.restoredState=n}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}},oc=class extends Kg{urlAfterRedirects;type=dr.NavigationEnd;constructor(e,A,i){super(e,A),this.urlAfterRedirects=i}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}},cs=(function(t){return t[t.Redirect=0]="Redirect",t[t.SupersededByNewNavigation=1]="SupersededByNewNavigation",t[t.NoDataFromResolver=2]="NoDataFromResolver",t[t.GuardRejected=3]="GuardRejected",t[t.Aborted=4]="Aborted",t})(cs||{}),ZB=(function(t){return t[t.IgnoredSameUrlNavigation=0]="IgnoredSameUrlNavigation",t[t.IgnoredByUrlHandlingStrategy=1]="IgnoredByUrlHandlingStrategy",t})(ZB||{}),gl=class extends Kg{reason;code;type=dr.NavigationCancel;constructor(e,A,i,n){super(e,A),this.reason=i,this.code=n}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}};function lH(t){return t instanceof gl&&(t.code===cs.Redirect||t.code===cs.SupersededByNewNavigation)}var c0=class extends Kg{reason;code;type=dr.NavigationSkipped;constructor(e,A,i,n){super(e,A),this.reason=i,this.code=n}},T1=class extends Kg{error;target;type=dr.NavigationError;constructor(e,A,i,n){super(e,A),this.error=i,this.target=n}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}},XB=class extends Kg{urlAfterRedirects;state;type=dr.RoutesRecognized;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},y6=class extends Kg{urlAfterRedirects;state;type=dr.GuardsCheckStart;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},v6=class extends Kg{urlAfterRedirects;state;shouldActivate;type=dr.GuardsCheckEnd;constructor(e,A,i,n,o){super(e,A),this.urlAfterRedirects=i,this.state=n,this.shouldActivate=o}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}},b6=class extends Kg{urlAfterRedirects;state;type=dr.ResolveStart;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},M6=class extends Kg{urlAfterRedirects;state;type=dr.ResolveEnd;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},k6=class{route;type=dr.RouteConfigLoadStart;constructor(e){this.route=e}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}},S6=class{route;type=dr.RouteConfigLoadEnd;constructor(e){this.route=e}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}},x6=class{snapshot;type=dr.ChildActivationStart;constructor(e){this.snapshot=e}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},R6=class{snapshot;type=dr.ChildActivationEnd;constructor(e){this.snapshot=e}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},N6=class{snapshot;type=dr.ActivationStart;constructor(e){this.snapshot=e}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},F6=class{snapshot;type=dr.ActivationEnd;constructor(e){this.snapshot=e}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},$B=class{routerEvent;position;anchor;scrollBehavior;type=dr.Scroll;constructor(e,A,i,n){this.routerEvent=e,this.position=A,this.anchor=i,this.scrollBehavior=n}toString(){let e=this.position?`${this.position[0]}, ${this.position[1]}`:null;return`Scroll(anchor: '${this.anchor}', position: '${e}')`}},AE=class{},eE=class{url;navigationBehaviorOptions;constructor(e,A){this.url=e,this.navigationBehaviorOptions=A}};function SIA(t){return!(t instanceof AE)&&!(t instanceof eE)}var _6=class{rootInjector;outlet=null;route=null;children;attachRef=null;get injector(){return this.route?.snapshot._environmentInjector??this.rootInjector}constructor(e){this.rootInjector=e,this.children=new O1(this.rootInjector)}},O1=(()=>{class t{rootInjector;contexts=new Map;constructor(A){this.rootInjector=A}onChildOutletCreated(A,i){let n=this.getOrCreateContext(A);n.outlet=i,this.contexts.set(A,n)}onChildOutletDestroyed(A){let i=this.getContext(A);i&&(i.outlet=null,i.attachRef=null)}onOutletDeactivated(){let A=this.contexts;return this.contexts=new Map,A}onOutletReAttached(A){this.contexts=A}getOrCreateContext(A){let i=this.getContext(A);return i||(i=new _6(this.rootInjector),this.contexts.set(A,i)),i}getContext(A){return this.contexts.get(A)||null}static \u0275fac=function(i){return new(i||t)(So(Gr))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),L6=class{_root;constructor(e){this._root=e}get root(){return this._root.value}parent(e){let A=this.pathFromRoot(e);return A.length>1?A[A.length-2]:null}children(e){let A=vM(e,this._root);return A?A.children.map(i=>i.value):[]}firstChild(e){let A=vM(e,this._root);return A&&A.children.length>0?A.children[0].value:null}siblings(e){let A=bM(e,this._root);return A.length<2?[]:A[A.length-2].children.map(n=>n.value).filter(n=>n!==e)}pathFromRoot(e){return bM(e,this._root).map(A=>A.value)}};function vM(t,e){if(t===e.value)return e;for(let A of e.children){let i=vM(t,A);if(i)return i}return null}function bM(t,e){if(t===e.value)return[e];for(let A of e.children){let i=bM(t,A);if(i.length)return i.unshift(e),i}return[]}var Gg=class{value;children;constructor(e,A){this.value=e,this.children=A}toString(){return`TreeNode(${this.value})`}};function PB(t){let e={};return t&&t.children.forEach(A=>e[A.value.outlet]=A),e}var o4=class extends L6{snapshot;constructor(e,A){super(e),this.snapshot=A,_M(this,e)}toString(){return this.snapshot.toString()}};function cH(t,e){let A=xIA(t,e),i=new Tt([new N2("",{})]),n=new Tt({}),o=new Tt({}),a=new Tt({}),r=new Tt(""),s=new ag(i,n,a,r,o,Di,t,A.root);return s.snapshot=A.root,new o4(new Gg(s,[]),A)}function xIA(t,e){let A={},i={},n={},a=new J1([],A,n,"",i,Di,t,null,{},e);return new a4("",new Gg(a,[]))}var ag=class{urlSubject;paramsSubject;queryParamsSubject;fragmentSubject;dataSubject;outlet;component;snapshot;_futureSnapshot;_routerState;_paramMap;_queryParamMap;title;url;params;queryParams;fragment;data;constructor(e,A,i,n,o,a,r,s){this.urlSubject=e,this.paramsSubject=A,this.queryParamsSubject=i,this.fragmentSubject=n,this.dataSubject=o,this.outlet=a,this.component=r,this._futureSnapshot=s,this.title=this.dataSubject?.pipe(fe(g=>g[g4]))??se(void 0),this.url=e,this.params=A,this.queryParams=i,this.fragment=n,this.data=o}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=this.params.pipe(fe(e=>Y1(e))),this._paramMap}get queryParamMap(){return this._queryParamMap??=this.queryParams.pipe(fe(e=>Y1(e))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}};function G6(t,e,A="emptyOnly"){let i,{routeConfig:n}=t;return e!==null&&(A==="always"||n?.path===""||!e.component&&!e.routeConfig?.loadComponent)?i={params:gA(gA({},e.params),t.params),data:gA(gA({},e.data),t.data),resolve:gA(gA(gA(gA({},t.data),e.data),n?.data),t._resolvedData)}:i={params:gA({},t.params),data:gA({},t.data),resolve:gA(gA({},t.data),t._resolvedData??{})},n&&IH(n)&&(i.resolve[g4]=n.title),i}var J1=class{url;params;queryParams;fragment;data;outlet;component;routeConfig;_resolve;_resolvedData;_routerState;_paramMap;_queryParamMap;_environmentInjector;get title(){return this.data?.[g4]}constructor(e,A,i,n,o,a,r,s,g,l){this.url=e,this.params=A,this.queryParams=i,this.fragment=n,this.data=o,this.outlet=a,this.component=r,this.routeConfig=s,this._resolve=g,this._environmentInjector=l}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=Y1(this.params),this._paramMap}get queryParamMap(){return this._queryParamMap??=Y1(this.queryParams),this._queryParamMap}toString(){let e=this.url.map(i=>i.toString()).join("/"),A=this.routeConfig?this.routeConfig.path:"";return`Route(url:'${e}', path:'${A}')`}},a4=class extends L6{url;constructor(e,A){super(A),this.url=e,_M(this,A)}toString(){return CH(this._root)}};function _M(t,e){e.value._routerState=t,e.children.forEach(A=>_M(t,A))}function CH(t){let e=t.children.length>0?` { ${t.children.map(CH).join(", ")} } `:"";return`${t.value}${e}`}function fM(t){if(t.snapshot){let e=t.snapshot,A=t._futureSnapshot;t.snapshot=A,l0(e.queryParams,A.queryParams)||t.queryParamsSubject.next(A.queryParams),e.fragment!==A.fragment&&t.fragmentSubject.next(A.fragment),l0(e.params,A.params)||t.paramsSubject.next(A.params),oIA(e.url,A.url)||t.urlSubject.next(A.url),l0(e.data,A.data)||t.dataSubject.next(A.data)}else t.snapshot=t._futureSnapshot,t.dataSubject.next(t._futureSnapshot.data)}function MM(t,e){let A=l0(t.params,e.params)&&lIA(t.url,e.url),i=!t.parent!=!e.parent;return A&&!i&&(!t.parent||MM(t.parent,e.parent))}function IH(t){return typeof t.title=="string"||t.title===null}var dH=new yA(""),LM=(()=>{class t{activated=null;get activatedComponentRef(){return this.activated}_activatedRoute=null;name=Di;activateEvents=new WA;deactivateEvents=new WA;attachEvents=new WA;detachEvents=new WA;routerOutletData=at();parentContexts=h(O1);location=h(Ho);changeDetector=h(mt);inputBinder=h(l4,{optional:!0});supportsBindingToComponentInputs=!0;ngOnChanges(A){if(A.name){let{firstChange:i,previousValue:n}=A.name;if(i)return;this.isTrackedInParentContexts(n)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(n)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(A){return this.parentContexts.getContext(A)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;let A=this.parentContexts.getContext(this.name);A?.route&&(A.attachRef?this.attach(A.attachRef,A.route):this.activateWith(A.route,A.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new kt(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new kt(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new kt(4012,!1);this.location.detach();let A=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(A.instance),A}attach(A,i){this.activated=A,this._activatedRoute=i,this.location.insert(A.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(A.instance)}deactivate(){if(this.activated){let A=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(A)}}activateWith(A,i){if(this.isActivated)throw new kt(4013,!1);this._activatedRoute=A;let n=this.location,a=A.snapshot.component,r=this.parentContexts.getOrCreateContext(this.name).children,s=new kM(A,r,n.injector,this.routerOutletData);this.activated=n.createComponent(a,{index:n.length,injector:s,environmentInjector:i}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["router-outlet"]],inputs:{name:"name",routerOutletData:[1,"routerOutletData"]},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],features:[ti]})}return t})(),kM=class{route;childContexts;parent;outletData;constructor(e,A,i,n){this.route=e,this.childContexts=A,this.parent=i,this.outletData=n}get(e,A){return e===ag?this.route:e===O1?this.childContexts:e===dH?this.outletData:this.parent.get(e,A)}},l4=new yA(""),GM=(()=>{class t{outletDataSubscriptions=new Map;bindActivatedRouteToOutletComponent(A){this.unsubscribeFromRouteData(A),this.subscribeToRouteData(A)}unsubscribeFromRouteData(A){this.outletDataSubscriptions.get(A)?.unsubscribe(),this.outletDataSubscriptions.delete(A)}subscribeToRouteData(A){let{activatedRoute:i}=A,n=cr([i.queryParams,i.params,i.data]).pipe(ki(([o,a,r],s)=>(r=gA(gA(gA({},o),a),r),s===0?se(r):Promise.resolve(r)))).subscribe(o=>{if(!A.isActivated||!A.activatedComponentRef||A.activatedRoute!==i||i.component===null){this.unsubscribeFromRouteData(A);return}let a=SU(i.component);if(!a){this.unsubscribeFromRouteData(A);return}for(let{templateName:r}of a.inputs)A.activatedComponentRef.setInput(r,o[r])});this.outletDataSubscriptions.set(A,n)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac})}return t})(),KM=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],exportAs:["emptyRouterOutlet"],decls:1,vars:0,template:function(i,n){i&1&&GA(0,"router-outlet")},dependencies:[LM],encapsulation:2})}return t})();function UM(t){let e=t.children&&t.children.map(UM),A=e?be(gA({},t),{children:e}):gA({},t);return!A.component&&!A.loadComponent&&(e||A.loadChildren)&&A.outlet&&A.outlet!==Di&&(A.component=KM),A}function RIA(t,e,A){let i=r4(t,e._root,A?A._root:void 0);return new o4(i,e)}function r4(t,e,A){if(A&&t.shouldReuseRoute(e.value,A.value.snapshot)){let i=A.value;i._futureSnapshot=e.value;let n=NIA(t,e,A);return new Gg(i,n)}else{if(t.shouldAttach(e.value)){let o=t.retrieve(e.value);if(o!==null){let a=o.route;return a.value._futureSnapshot=e.value,a.children=e.children.map(r=>r4(t,r)),a}}let i=FIA(e.value),n=e.children.map(o=>r4(t,o));return new Gg(i,n)}}function NIA(t,e,A){return e.children.map(i=>{for(let n of A.children)if(t.shouldReuseRoute(i.value,n.value.snapshot))return r4(t,i,n);return r4(t,i)})}function FIA(t){return new ag(new Tt(t.url),new Tt(t.params),new Tt(t.queryParams),new Tt(t.fragment),new Tt(t.data),t.outlet,t.component,t)}var tE=class{redirectTo;navigationBehaviorOptions;constructor(e,A){this.redirectTo=e,this.navigationBehaviorOptions=A}},BH="ngNavigationCancelingError";function K6(t,e){let{redirectTo:A,navigationBehaviorOptions:i}=WB(e)?{redirectTo:e,navigationBehaviorOptions:void 0}:e,n=EH(!1,cs.Redirect);return n.url=A,n.navigationBehaviorOptions=i,n}function EH(t,e){let A=new Error(`NavigationCancelingError: ${t||""}`);return A[BH]=!0,A.cancellationCode=e,A}function _IA(t){return QH(t)&&WB(t.url)}function QH(t){return!!t&&t[BH]}var SM=class{routeReuseStrategy;futureState;currState;forwardEvent;inputBindingEnabled;constructor(e,A,i,n,o){this.routeReuseStrategy=e,this.futureState=A,this.currState=i,this.forwardEvent=n,this.inputBindingEnabled=o}activate(e){let A=this.futureState._root,i=this.currState?this.currState._root:null;this.deactivateChildRoutes(A,i,e),fM(this.futureState.root),this.activateChildRoutes(A,i,e)}deactivateChildRoutes(e,A,i){let n=PB(A);e.children.forEach(o=>{let a=o.value.outlet;this.deactivateRoutes(o,n[a],i),delete n[a]}),Object.values(n).forEach(o=>{this.deactivateRouteAndItsChildren(o,i)})}deactivateRoutes(e,A,i){let n=e.value,o=A?A.value:null;if(n===o)if(n.component){let a=i.getContext(n.outlet);a&&this.deactivateChildRoutes(e,A,a.children)}else this.deactivateChildRoutes(e,A,i);else o&&this.deactivateRouteAndItsChildren(A,i)}deactivateRouteAndItsChildren(e,A){e.value.component&&this.routeReuseStrategy.shouldDetach(e.value.snapshot)?this.detachAndStoreRouteSubtree(e,A):this.deactivateRouteAndOutlet(e,A)}detachAndStoreRouteSubtree(e,A){let i=A.getContext(e.value.outlet),n=i&&e.value.component?i.children:A,o=PB(e);for(let a of Object.values(o))this.deactivateRouteAndItsChildren(a,n);if(i&&i.outlet){let a=i.outlet.detach(),r=i.children.onOutletDeactivated();this.routeReuseStrategy.store(e.value.snapshot,{componentRef:a,route:e,contexts:r})}}deactivateRouteAndOutlet(e,A){let i=A.getContext(e.value.outlet),n=i&&e.value.component?i.children:A,o=PB(e);for(let a of Object.values(o))this.deactivateRouteAndItsChildren(a,n);i&&(i.outlet&&(i.outlet.deactivate(),i.children.onOutletDeactivated()),i.attachRef=null,i.route=null)}activateChildRoutes(e,A,i){let n=PB(A);e.children.forEach(o=>{this.activateRoutes(o,n[o.value.outlet],i),this.forwardEvent(new F6(o.value.snapshot))}),e.children.length&&this.forwardEvent(new R6(e.value.snapshot))}activateRoutes(e,A,i){let n=e.value,o=A?A.value:null;if(fM(n),n===o)if(n.component){let a=i.getOrCreateContext(n.outlet);this.activateChildRoutes(e,A,a.children)}else this.activateChildRoutes(e,A,i);else if(n.component){let a=i.getOrCreateContext(n.outlet);if(this.routeReuseStrategy.shouldAttach(n.snapshot)){let r=this.routeReuseStrategy.retrieve(n.snapshot);this.routeReuseStrategy.store(n.snapshot,null),a.children.onOutletReAttached(r.contexts),a.attachRef=r.componentRef,a.route=r.route.value,a.outlet&&a.outlet.attach(r.componentRef,r.route.value),fM(r.route.value),this.activateChildRoutes(e,null,a.children)}else a.attachRef=null,a.route=n,a.outlet&&a.outlet.activateWith(n,a.injector),this.activateChildRoutes(e,null,a.children)}else this.activateChildRoutes(e,null,i)}},U6=class{path;route;constructor(e){this.path=e,this.route=this.path[this.path.length-1]}},VB=class{component;route;constructor(e,A){this.component=e,this.route=A}};function LIA(t,e,A){let i=t._root,n=e?e._root:null;return e4(i,n,A,[i.value])}function GIA(t){let e=t.routeConfig?t.routeConfig.canActivateChild:null;return!e||e.length===0?null:{node:t,guards:e}}function nE(t,e){let A=Symbol(),i=e.get(t,A);return i===A?typeof t=="function"&&!lU(t)?t:e.get(t):i}function e4(t,e,A,i,n={canDeactivateChecks:[],canActivateChecks:[]}){let o=PB(e);return t.children.forEach(a=>{KIA(a,o[a.value.outlet],A,i.concat([a.value]),n),delete o[a.value.outlet]}),Object.entries(o).forEach(([a,r])=>i4(r,A.getContext(a),n)),n}function KIA(t,e,A,i,n={canDeactivateChecks:[],canActivateChecks:[]}){let o=t.value,a=e?e.value:null,r=A?A.getContext(t.value.outlet):null;if(a&&o.routeConfig===a.routeConfig){let s=UIA(a,o,o.routeConfig.runGuardsAndResolvers);s?n.canActivateChecks.push(new U6(i)):(o.data=a.data,o._resolvedData=a._resolvedData),o.component?e4(t,e,r?r.children:null,i,n):e4(t,e,A,i,n),s&&r&&r.outlet&&r.outlet.isActivated&&n.canDeactivateChecks.push(new VB(r.outlet.component,a))}else a&&i4(e,r,n),n.canActivateChecks.push(new U6(i)),o.component?e4(t,null,r?r.children:null,i,n):e4(t,null,A,i,n);return n}function UIA(t,e,A){if(typeof A=="function")return ir(e._environmentInjector,()=>A(t,e));switch(A){case"pathParamsChange":return!U1(t.url,e.url);case"pathParamsOrQueryParamsChange":return!U1(t.url,e.url)||!l0(t.queryParams,e.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!MM(t,e)||!l0(t.queryParams,e.queryParams);default:return!MM(t,e)}}function i4(t,e,A){let i=PB(t),n=t.value;Object.entries(i).forEach(([o,a])=>{n.component?e?i4(a,e.children.getContext(o),A):i4(a,null,A):i4(a,e,A)}),n.component?e&&e.outlet&&e.outlet.isActivated?A.canDeactivateChecks.push(new VB(e.outlet.component,n)):A.canDeactivateChecks.push(new VB(null,n)):A.canDeactivateChecks.push(new VB(null,n))}function c4(t){return typeof t=="function"}function JIA(t){return typeof t=="boolean"}function YIA(t){return t&&c4(t.canLoad)}function TIA(t){return t&&c4(t.canActivate)}function HIA(t){return t&&c4(t.canActivateChild)}function zIA(t){return t&&c4(t.canDeactivate)}function OIA(t){return t&&c4(t.canMatch)}function hH(t){return t instanceof nU||t?.name==="EmptyError"}var h6=Symbol("INITIAL_VALUE");function iE(){return ki(t=>cr(t.map(e=>e.pipe(oo(1),cn(h6)))).pipe(fe(e=>{for(let A of e)if(A!==!0){if(A===h6)return h6;if(A===!1||PIA(A))return A}return!0}),Ze(e=>e!==h6),oo(1)))}function PIA(t){return WB(t)||t instanceof tE}function uH(t){return t.aborted?se(void 0).pipe(oo(1)):new ji(e=>{let A=()=>{e.next(),e.complete()};return t.addEventListener("abort",A),()=>t.removeEventListener("abort",A)})}function fH(t){return Bt(uH(t))}function jIA(t){return e0(e=>{let{targetSnapshot:A,currentSnapshot:i,guards:{canActivateChecks:n,canDeactivateChecks:o}}=e;return o.length===0&&n.length===0?se(be(gA({},e),{guardsResult:!0})):qIA(o,A,i).pipe(e0(a=>a&&JIA(a)?VIA(A,n,t):se(a)),fe(a=>be(gA({},e),{guardsResult:a})))})}function qIA(t,e,A){return ks(t).pipe(e0(i=>A1A(i.component,i.route,A,e)),To(i=>i!==!0,!0))}function VIA(t,e,A){return ks(e).pipe(lu(i=>Wm(ZIA(i.route.parent,A),WIA(i.route,A),$IA(t,i.path),XIA(t,i.route))),To(i=>i!==!0,!0))}function WIA(t,e){return t!==null&&e&&e(new N6(t)),se(!0)}function ZIA(t,e){return t!==null&&e&&e(new x6(t)),se(!0)}function XIA(t,e){let A=e.routeConfig?e.routeConfig.canActivate:null;if(!A||A.length===0)return se(!0);let i=A.map(n=>t0(()=>{let o=e._environmentInjector,a=nE(n,o),r=TIA(a)?a.canActivate(e,t):ir(o,()=>a(e,t));return H1(r).pipe(To())}));return se(i).pipe(iE())}function $IA(t,e){let A=e[e.length-1],n=e.slice(0,e.length-1).reverse().map(o=>GIA(o)).filter(o=>o!==null).map(o=>t0(()=>{let a=o.guards.map(r=>{let s=o.node._environmentInjector,g=nE(r,s),l=HIA(g)?g.canActivateChild(A,t):ir(s,()=>g(A,t));return H1(l).pipe(To())});return se(a).pipe(iE())}));return se(n).pipe(iE())}function A1A(t,e,A,i){let n=e&&e.routeConfig?e.routeConfig.canDeactivate:null;if(!n||n.length===0)return se(!0);let o=n.map(a=>{let r=e._environmentInjector,s=nE(a,r),g=zIA(s)?s.canDeactivate(t,e,A,i):ir(r,()=>s(t,e,A,i));return H1(g).pipe(To())});return se(o).pipe(iE())}function e1A(t,e,A,i,n){let o=e.canLoad;if(o===void 0||o.length===0)return se(!0);let a=o.map(r=>{let s=nE(r,t),g=YIA(s)?s.canLoad(e,A):ir(t,()=>s(e,A)),l=H1(g);return n?l.pipe(fH(n)):l});return se(a).pipe(iE(),mH(i))}function mH(t){return eU(oi(e=>{if(typeof e!="boolean")throw K6(t,e)}),fe(e=>e===!0))}function t1A(t,e,A,i,n){let o=e.canMatch;if(!o||o.length===0)return se(!0);let a=o.map(r=>{let s=nE(r,t),g=OIA(s)?s.canMatch(e,A):ir(t,()=>s(e,A));return H1(g).pipe(fH(n))});return se(a).pipe(iE(),mH(i))}var cC=class t extends Error{segmentGroup;constructor(e){super(),this.segmentGroup=e||null,Object.setPrototypeOf(this,t.prototype)}},s4=class t extends Error{urlTree;constructor(e){super(),this.urlTree=e,Object.setPrototypeOf(this,t.prototype)}};function i1A(t){throw new kt(4e3,!1)}function n1A(t){throw EH(!1,cs.GuardRejected)}var xM=class{urlSerializer;urlTree;constructor(e,A){this.urlSerializer=e,this.urlTree=A}lineralizeSegments(e,A){return nt(this,null,function*(){let i=[],n=A.root;for(;;){if(i=i.concat(n.segments),n.numberOfChildren===0)return i;if(n.numberOfChildren>1||!n.children[Di])throw i1A(`${e.redirectTo}`);n=n.children[Di]}})}applyRedirectCommands(e,A,i,n,o){return nt(this,null,function*(){let a=yield o1A(A,n,o);if(a instanceof nc)throw new s4(a);let r=this.applyRedirectCreateUrlTree(a,this.urlSerializer.parse(a),e,i);if(a[0]==="/")throw new s4(r);return r})}applyRedirectCreateUrlTree(e,A,i,n){let o=this.createSegmentGroup(e,A.root,i,n);return new nc(o,this.createQueryParams(A.queryParams,this.urlTree.queryParams),A.fragment)}createQueryParams(e,A){let i={};return Object.entries(e).forEach(([n,o])=>{if(typeof o=="string"&&o[0]===":"){let r=o.substring(1);i[n]=A[r]}else i[n]=o}),i}createSegmentGroup(e,A,i,n){let o=this.createSegments(e,A.segments,i,n),a={};return Object.entries(A.children).forEach(([r,s])=>{a[r]=this.createSegmentGroup(e,s,i,n)}),new ro(o,a)}createSegments(e,A,i,n){return A.map(o=>o.path[0]===":"?this.findPosParam(e,o,n):this.findOrReturn(o,i))}findPosParam(e,A,i){let n=i[A.path.substring(1)];if(!n)throw new kt(4001,!1);return n}findOrReturn(e,A){let i=0;for(let n of A){if(n.path===e.path)return A.splice(i),n;i++}return e}};function o1A(t,e,A){if(typeof t=="string")return Promise.resolve(t);let i=t,{queryParams:n,fragment:o,routeConfig:a,url:r,outlet:s,params:g,data:l,title:C,paramMap:I,queryParamMap:d}=e;return p6(H1(ir(A,()=>i({params:g,data:l,queryParams:n,fragment:o,routeConfig:a,url:r,outlet:s,title:C,paramMap:I,queryParamMap:d}))))}function a1A(t,e){return t.providers&&!t._injector&&(t._injector=op(t.providers,e,`Route: ${t.path}`)),t._injector??e}function ic(t){return t.outlet||Di}function r1A(t,e){let A=t.filter(i=>ic(i)===e);return A.push(...t.filter(i=>ic(i)!==e)),A}var RM={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function s1A(t,e,A,i,n,o){let a=pH(t,e,A);return a.matched?(i=a1A(e,i),t1A(i,e,A,n,o).pipe(fe(r=>r===!0?a:gA({},RM)))):se(a)}function pH(t,e,A){if(e.path==="")return e.pathMatch==="full"&&(t.hasChildren()||A.length>0)?gA({},RM):{matched:!0,consumedSegments:[],remainingSegments:A,parameters:{},positionalParamSegments:{}};let n=(e.matcher||qT)(A,t,e);if(!n)return gA({},RM);let o={};Object.entries(n.posParams??{}).forEach(([r,s])=>{o[r]=s.path});let a=n.consumed.length>0?gA(gA({},o),n.consumed[n.consumed.length-1].parameters):o;return{matched:!0,consumedSegments:n.consumed,remainingSegments:A.slice(n.consumed.length),parameters:a,positionalParamSegments:n.posParams??{}}}function zT(t,e,A,i){return A.length>0&&c1A(t,A,i)?{segmentGroup:new ro(e,l1A(i,new ro(A,t.children))),slicedSegments:[]}:A.length===0&&C1A(t,A,i)?{segmentGroup:new ro(t.segments,g1A(t,A,i,t.children)),slicedSegments:A}:{segmentGroup:new ro(t.segments,t.children),slicedSegments:A}}function g1A(t,e,A,i){let n={};for(let o of A)if(Y6(t,e,o)&&!i[ic(o)]){let a=new ro([],{});n[ic(o)]=a}return gA(gA({},i),n)}function l1A(t,e){let A={};A[Di]=e;for(let i of t)if(i.path===""&&ic(i)!==Di){let n=new ro([],{});A[ic(i)]=n}return A}function c1A(t,e,A){return A.some(i=>Y6(t,e,i)&&ic(i)!==Di)}function C1A(t,e,A){return A.some(i=>Y6(t,e,i))}function Y6(t,e,A){return(t.hasChildren()||e.length>0)&&A.pathMatch==="full"?!1:A.path===""}function I1A(t,e,A){return e.length===0&&!t.children[A]}var NM=class{};function d1A(t,e,A,i,n,o,a="emptyOnly",r){return nt(this,null,function*(){return new FM(t,e,A,i,n,a,o,r).recognize()})}var B1A=31,FM=class{injector;configLoader;rootComponentType;config;urlTree;paramsInheritanceStrategy;urlSerializer;abortSignal;applyRedirects;absoluteRedirectCount=0;allowRedirects=!0;constructor(e,A,i,n,o,a,r,s){this.injector=e,this.configLoader=A,this.rootComponentType=i,this.config=n,this.urlTree=o,this.paramsInheritanceStrategy=a,this.urlSerializer=r,this.abortSignal=s,this.applyRedirects=new xM(this.urlSerializer,this.urlTree)}noMatchError(e){return new kt(4002,`'${e.segmentGroup}'`)}recognize(){return nt(this,null,function*(){let e=zT(this.urlTree.root,[],[],this.config).segmentGroup,{children:A,rootSnapshot:i}=yield this.match(e),n=new Gg(i,A),o=new a4("",n),a=oH(i,[],this.urlTree.queryParams,this.urlTree.fragment);return a.queryParams=this.urlTree.queryParams,o.url=this.urlSerializer.serialize(a),{state:o,tree:a}})}match(e){return nt(this,null,function*(){let A=new J1([],Object.freeze({}),Object.freeze(gA({},this.urlTree.queryParams)),this.urlTree.fragment,Object.freeze({}),Di,this.rootComponentType,null,{},this.injector);try{return{children:yield this.processSegmentGroup(this.injector,this.config,e,Di,A),rootSnapshot:A}}catch(i){if(i instanceof s4)return this.urlTree=i.urlTree,this.match(i.urlTree.root);throw i instanceof cC?this.noMatchError(i):i}})}processSegmentGroup(e,A,i,n,o){return nt(this,null,function*(){if(i.segments.length===0&&i.hasChildren())return this.processChildren(e,A,i,o);let a=yield this.processSegment(e,A,i,i.segments,n,!0,o);return a instanceof Gg?[a]:[]})}processChildren(e,A,i,n){return nt(this,null,function*(){let o=[];for(let s of Object.keys(i.children))s==="primary"?o.unshift(s):o.push(s);let a=[];for(let s of o){let g=i.children[s],l=r1A(A,s),C=yield this.processSegmentGroup(e,l,g,s,n);a.push(...C)}let r=wH(a);return E1A(r),r})}processSegment(e,A,i,n,o,a,r){return nt(this,null,function*(){for(let s of A)try{return yield this.processSegmentAgainstRoute(s._injector??e,A,s,i,n,o,a,r)}catch(g){if(g instanceof cC||hH(g))continue;throw g}if(I1A(i,n,o))return new NM;throw new cC(i)})}processSegmentAgainstRoute(e,A,i,n,o,a,r,s){return nt(this,null,function*(){if(ic(i)!==a&&(a===Di||!Y6(n,o,i)))throw new cC(n);if(i.redirectTo===void 0)return this.matchSegmentAgainstRoute(e,n,i,o,a,s);if(this.allowRedirects&&r)return this.expandSegmentAgainstRouteUsingRedirect(e,n,A,i,o,a,s);throw new cC(n)})}expandSegmentAgainstRouteUsingRedirect(e,A,i,n,o,a,r){return nt(this,null,function*(){let{matched:s,parameters:g,consumedSegments:l,positionalParamSegments:C,remainingSegments:I}=pH(A,n,o);if(!s)throw new cC(A);typeof n.redirectTo=="string"&&n.redirectTo[0]==="/"&&(this.absoluteRedirectCount++,this.absoluteRedirectCount>B1A&&(this.allowRedirects=!1));let d=new J1(o,g,Object.freeze(gA({},this.urlTree.queryParams)),this.urlTree.fragment,OT(n),ic(n),n.component??n._loadedComponent??null,n,PT(n),e),B=G6(d,r,this.paramsInheritanceStrategy);if(d.params=Object.freeze(B.params),d.data=Object.freeze(B.data),this.abortSignal.aborted)throw new Error(this.abortSignal.reason);let E=yield this.applyRedirects.applyRedirectCommands(l,n.redirectTo,C,d,e),Q=yield this.applyRedirects.lineralizeSegments(n,E);return this.processSegment(e,i,A,Q.concat(I),a,!1,r)})}matchSegmentAgainstRoute(e,A,i,n,o,a){return nt(this,null,function*(){if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);let r=yield p6(s1A(A,i,n,e,this.urlSerializer,this.abortSignal));if(i.path==="**"&&(A.children={}),!r?.matched)throw new cC(A);e=i._injector??e;let{routes:s}=yield this.getChildConfig(e,i,n),g=i._loadedInjector??e,{parameters:l,consumedSegments:C,remainingSegments:I}=r,d=new J1(C,l,Object.freeze(gA({},this.urlTree.queryParams)),this.urlTree.fragment,OT(i),ic(i),i.component??i._loadedComponent??null,i,PT(i),e),B=G6(d,a,this.paramsInheritanceStrategy);d.params=Object.freeze(B.params),d.data=Object.freeze(B.data);let{segmentGroup:E,slicedSegments:Q}=zT(A,C,I,s);if(Q.length===0&&E.hasChildren()){let S=yield this.processChildren(g,s,E,d);return new Gg(d,S)}if(s.length===0&&Q.length===0)return new Gg(d,[]);let f=ic(i)===o,b=yield this.processSegment(g,s,E,Q,f?Di:o,!0,d);return new Gg(d,b instanceof Gg?[b]:[])})}getChildConfig(e,A,i){return nt(this,null,function*(){if(A.children)return{routes:A.children,injector:e};if(A.loadChildren){if(A._loadedRoutes!==void 0){let o=A._loadedNgModuleFactory;return o&&!A._loadedInjector&&(A._loadedInjector=o.create(e).injector),{routes:A._loadedRoutes,injector:A._loadedInjector}}if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);if(yield p6(e1A(e,A,i,this.urlSerializer,this.abortSignal))){let o=yield this.configLoader.loadChildren(e,A);return A._loadedRoutes=o.routes,A._loadedInjector=o.injector,A._loadedNgModuleFactory=o.factory,o}throw n1A(A)}return{routes:[],injector:e}})}};function E1A(t){t.sort((e,A)=>e.value.outlet===Di?-1:A.value.outlet===Di?1:e.value.outlet.localeCompare(A.value.outlet))}function Q1A(t){let e=t.value.routeConfig;return e&&e.path===""}function wH(t){let e=[],A=new Set;for(let i of t){if(!Q1A(i)){e.push(i);continue}let n=e.find(o=>i.value.routeConfig===o.value.routeConfig);n!==void 0?(n.children.push(...i.children),A.add(n)):e.push(i)}for(let i of A){let n=wH(i.children);e.push(new Gg(i.value,n))}return e.filter(i=>!A.has(i))}function OT(t){return t.data||{}}function PT(t){return t.resolve||{}}function h1A(t,e,A,i,n,o,a){return e0(r=>nt(null,null,function*(){let{state:s,tree:g}=yield d1A(t,e,A,i,r.extractedUrl,n,o,a);return be(gA({},r),{targetSnapshot:s,urlAfterRedirects:g})}))}function u1A(t){return e0(e=>{let{targetSnapshot:A,guards:{canActivateChecks:i}}=e;if(!i.length)return se(e);let n=new Set(i.map(r=>r.route)),o=new Set;for(let r of n)if(!o.has(r))for(let s of DH(r))o.add(s);let a=0;return ks(o).pipe(lu(r=>n.has(r)?f1A(r,A,t):(r.data=G6(r,r.parent,t).resolve,se(void 0))),oi(()=>a++),Gb(1),e0(r=>a===o.size?se(e):ja))})}function DH(t){let e=t.children.map(A=>DH(A)).flat();return[t,...e]}function f1A(t,e,A){let i=t.routeConfig,n=t._resolve;return i?.title!==void 0&&!IH(i)&&(n[g4]=i.title),t0(()=>(t.data=G6(t,t.parent,A).resolve,m1A(n,t,e).pipe(fe(o=>(t._resolvedData=o,t.data=gA(gA({},t.data),o),null)))))}function m1A(t,e,A){let i=pM(t);if(i.length===0)return se({});let n={};return ks(i).pipe(e0(o=>p1A(t[o],e,A).pipe(To(),oi(a=>{if(a instanceof tE)throw K6(new CC,a);n[o]=a}))),Gb(1),fe(()=>n),ea(o=>hH(o)?ja:Vm(o)))}function p1A(t,e,A){let i=e._environmentInjector,n=nE(t,i),o=n.resolve?n.resolve(e,A):ir(i,()=>n(e,A));return H1(o)}function jT(t){return ki(e=>{let A=t(e);return A?ks(A).pipe(fe(()=>e)):se(e)})}var JM=(()=>{class t{buildTitle(A){let i,n=A.root;for(;n!==void 0;)i=this.getResolvedTitleForRoute(n)??i,n=n.children.find(o=>o.outlet===Di);return i}getResolvedTitleForRoute(A){return A.data[g4]}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(yH),providedIn:"root"})}return t})(),yH=(()=>{class t extends JM{title;constructor(A){super(),this.title=A}updateTitle(A){let i=this.buildTitle(A);i!==void 0&&this.title.setTitle(i)}static \u0275fac=function(i){return new(i||t)(So(KU))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),P1=new yA("",{factory:()=>({})}),oE=new yA(""),T6=(()=>{class t{componentLoaders=new WeakMap;childrenLoaders=new WeakMap;onLoadStartListener;onLoadEndListener;compiler=h(wU);loadComponent(A,i){return nt(this,null,function*(){if(this.componentLoaders.get(i))return this.componentLoaders.get(i);if(i._loadedComponent)return Promise.resolve(i._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(i);let n=nt(this,null,function*(){try{let o=yield WT(ir(A,()=>i.loadComponent())),a=yield MH(bH(o));return this.onLoadEndListener&&this.onLoadEndListener(i),i._loadedComponent=a,a}finally{this.componentLoaders.delete(i)}});return this.componentLoaders.set(i,n),n})}loadChildren(A,i){if(this.childrenLoaders.get(i))return this.childrenLoaders.get(i);if(i._loadedRoutes)return Promise.resolve({routes:i._loadedRoutes,injector:i._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(i);let n=nt(this,null,function*(){try{let o=yield vH(i,this.compiler,A,this.onLoadEndListener);return i._loadedRoutes=o.routes,i._loadedInjector=o.injector,i._loadedNgModuleFactory=o.factory,o}finally{this.childrenLoaders.delete(i)}});return this.childrenLoaders.set(i,n),n}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function vH(t,e,A,i){return nt(this,null,function*(){let n=yield WT(ir(A,()=>t.loadChildren())),o=yield MH(bH(n)),a;o instanceof EU||Array.isArray(o)?a=o:a=yield e.compileModuleAsync(o),i&&i(t);let r,s,g=!1,l;return Array.isArray(a)?(s=a,g=!0):(r=a.create(A).injector,l=a,s=r.get(oE,[],{optional:!0,self:!0}).flat()),{routes:s.map(UM),injector:r,factory:l}})}function w1A(t){return t&&typeof t=="object"&&"default"in t}function bH(t){return w1A(t)?t.default:t}function MH(t){return nt(this,null,function*(){return t})}var H6=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(D1A),providedIn:"root"})}return t})(),D1A=(()=>{class t{shouldProcessUrl(A){return!0}extract(A){return A}merge(A,i){return A}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),YM=new yA(""),TM=new yA("");function kH(t,e,A){let i=t.get(TM),n=t.get(Xt);if(!n.startViewTransition||i.skipNextTransition)return i.skipNextTransition=!1,new Promise(g=>setTimeout(g));let o,a=new Promise(g=>{o=g}),r=n.startViewTransition(()=>(o(),y1A(t)));r.updateCallbackDone.catch(g=>{}),r.ready.catch(g=>{}),r.finished.catch(g=>{});let{onViewTransitionCreated:s}=i;return s&&ir(t,()=>s({transition:r,from:e,to:A})),a}function y1A(t){return new Promise(e=>{Yn({read:()=>setTimeout(e)},{injector:t})})}var v1A=()=>{},HM=new yA(""),z6=(()=>{class t{currentNavigation=jA(null,{equal:()=>!1});currentTransition=null;lastSuccessfulNavigation=jA(null);events=new $A;transitionAbortWithErrorSubject=new $A;configLoader=h(T6);environmentInjector=h(Gr);destroyRef=h(Cr);urlSerializer=h(z1);rootContexts=h(O1);location=h(n0);inputBindingEnabled=h(l4,{optional:!0})!==null;titleStrategy=h(JM);options=h(P1,{optional:!0})||{};paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly";urlHandlingStrategy=h(H6);createViewTransition=h(YM,{optional:!0});navigationErrorHandler=h(HM,{optional:!0});navigationId=0;get hasRequestedNavigation(){return this.navigationId!==0}transitions;afterPreactivation=()=>se(void 0);rootComponentType=null;destroyed=!1;constructor(){let A=n=>this.events.next(new k6(n)),i=n=>this.events.next(new S6(n));this.configLoader.onLoadEndListener=i,this.configLoader.onLoadStartListener=A,this.destroyRef.onDestroy(()=>{this.destroyed=!0})}complete(){this.transitions?.complete()}handleNavigationRequest(A){let i=++this.navigationId;la(()=>{this.transitions?.next(be(gA({},A),{extractedUrl:this.urlHandlingStrategy.extract(A.rawUrl),targetSnapshot:null,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null,id:i}))})}setupNavigations(A){return this.transitions=new Tt(null),this.transitions.pipe(Ze(i=>i!==null),ki(i=>{let n=!1,o=new AbortController,a=()=>!n&&this.currentTransition?.id===i.id;return se(i).pipe(ki(r=>{if(this.navigationId>i.id)return this.cancelNavigationTransition(i,"",cs.SupersededByNewNavigation),ja;this.currentTransition=i;let s=this.lastSuccessfulNavigation();this.currentNavigation.set({id:r.id,initialUrl:r.rawUrl,extractedUrl:r.extractedUrl,targetBrowserUrl:typeof r.extras.browserUrl=="string"?this.urlSerializer.parse(r.extras.browserUrl):r.extras.browserUrl,trigger:r.source,extras:r.extras,previousNavigation:s?be(gA({},s),{previousNavigation:null}):null,abort:()=>o.abort()});let g=!A.navigated||this.isUpdatingInternalState()||this.isUpdatedBrowserUrl(),l=r.extras.onSameUrlNavigation??A.onSameUrlNavigation;if(!g&&l!=="reload")return this.events.next(new c0(r.id,this.urlSerializer.serialize(r.rawUrl),"",ZB.IgnoredSameUrlNavigation)),r.resolve(!1),ja;if(this.urlHandlingStrategy.shouldProcessUrl(r.rawUrl))return se(r).pipe(ki(C=>(this.events.next(new F2(C.id,this.urlSerializer.serialize(C.extractedUrl),C.source,C.restoredState)),C.id!==this.navigationId?ja:Promise.resolve(C))),h1A(this.environmentInjector,this.configLoader,this.rootComponentType,A.config,this.urlSerializer,this.paramsInheritanceStrategy,o.signal),oi(C=>{i.targetSnapshot=C.targetSnapshot,i.urlAfterRedirects=C.urlAfterRedirects,this.currentNavigation.update(d=>(d.finalUrl=C.urlAfterRedirects,d));let I=new XB(C.id,this.urlSerializer.serialize(C.extractedUrl),this.urlSerializer.serialize(C.urlAfterRedirects),C.targetSnapshot);this.events.next(I)}));if(g&&this.urlHandlingStrategy.shouldProcessUrl(r.currentRawUrl)){let{id:C,extractedUrl:I,source:d,restoredState:B,extras:E}=r,Q=new F2(C,this.urlSerializer.serialize(I),d,B);this.events.next(Q);let f=cH(this.rootComponentType,this.environmentInjector).snapshot;return this.currentTransition=i=be(gA({},r),{targetSnapshot:f,urlAfterRedirects:I,extras:be(gA({},E),{skipLocationChange:!1,replaceUrl:!1})}),this.currentNavigation.update(b=>(b.finalUrl=I,b)),se(i)}else return this.events.next(new c0(r.id,this.urlSerializer.serialize(r.extractedUrl),"",ZB.IgnoredByUrlHandlingStrategy)),r.resolve(!1),ja}),fe(r=>{let s=new y6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);return this.events.next(s),this.currentTransition=i=be(gA({},r),{guards:LIA(r.targetSnapshot,r.currentSnapshot,this.rootContexts)}),i}),jIA(r=>this.events.next(r)),ki(r=>{if(i.guardsResult=r.guardsResult,r.guardsResult&&typeof r.guardsResult!="boolean")throw K6(this.urlSerializer,r.guardsResult);let s=new v6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot,!!r.guardsResult);if(this.events.next(s),!a())return ja;if(!r.guardsResult)return this.cancelNavigationTransition(r,"",cs.GuardRejected),ja;if(r.guards.canActivateChecks.length===0)return se(r);let g=new b6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);if(this.events.next(g),!a())return ja;let l=!1;return se(r).pipe(u1A(this.paramsInheritanceStrategy),oi({next:()=>{l=!0;let C=new M6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);this.events.next(C)},complete:()=>{l||this.cancelNavigationTransition(r,"",cs.NoDataFromResolver)}}))}),jT(r=>{let s=l=>{let C=[];if(l.routeConfig?._loadedComponent)l.component=l.routeConfig?._loadedComponent;else if(l.routeConfig?.loadComponent){let I=l._environmentInjector;C.push(this.configLoader.loadComponent(I,l.routeConfig).then(d=>{l.component=d}))}for(let I of l.children)C.push(...s(I));return C},g=s(r.targetSnapshot.root);return g.length===0?se(r):ks(Promise.all(g).then(()=>r))}),jT(()=>this.afterPreactivation()),ki(()=>{let{currentSnapshot:r,targetSnapshot:s}=i,g=this.createViewTransition?.(this.environmentInjector,r.root,s.root);return g?ks(g).pipe(fe(()=>i)):se(i)}),oo(1),fe(r=>{let s=RIA(A.routeReuseStrategy,r.targetSnapshot,r.currentRouterState);this.currentTransition=i=r=be(gA({},r),{targetRouterState:s}),this.currentNavigation.update(g=>(g.targetRouterState=s,g)),this.events.next(new AE),a()&&(new SM(A.routeReuseStrategy,i.targetRouterState,i.currentRouterState,g=>this.events.next(g),this.inputBindingEnabled).activate(this.rootContexts),a()&&(n=!0,this.currentNavigation.update(g=>(g.abort=v1A,g)),this.lastSuccessfulNavigation.set(la(this.currentNavigation)),this.events.next(new oc(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects))),this.titleStrategy?.updateTitle(r.targetRouterState.snapshot),r.resolve(!0)))}),Bt(uH(o.signal).pipe(Ze(()=>!n&&!i.targetRouterState),oi(()=>{this.cancelNavigationTransition(i,o.signal.reason+"",cs.Aborted)}))),oi({complete:()=>{n=!0}}),Bt(this.transitionAbortWithErrorSubject.pipe(oi(r=>{throw r}))),$m(()=>{o.abort(),n||this.cancelNavigationTransition(i,"",cs.SupersededByNewNavigation),this.currentTransition?.id===i.id&&(this.currentNavigation.set(null),this.currentTransition=null)}),ea(r=>{if(n=!0,this.destroyed)return i.resolve(!1),ja;if(QH(r))this.events.next(new gl(i.id,this.urlSerializer.serialize(i.extractedUrl),r.message,r.cancellationCode)),_IA(r)?this.events.next(new eE(r.url,r.navigationBehaviorOptions)):i.resolve(!1);else{let s=new T1(i.id,this.urlSerializer.serialize(i.extractedUrl),r,i.targetSnapshot??void 0);try{let g=ir(this.environmentInjector,()=>this.navigationErrorHandler?.(s));if(g instanceof tE){let{message:l,cancellationCode:C}=K6(this.urlSerializer,g);this.events.next(new gl(i.id,this.urlSerializer.serialize(i.extractedUrl),l,C)),this.events.next(new eE(g.redirectTo,g.navigationBehaviorOptions))}else throw this.events.next(s),r}catch(g){this.options.resolveNavigationPromiseOnError?i.resolve(!1):i.reject(g)}}return ja}))}))}cancelNavigationTransition(A,i,n){let o=new gl(A.id,this.urlSerializer.serialize(A.extractedUrl),i,n);this.events.next(o),A.resolve(!1)}isUpdatingInternalState(){return this.currentTransition?.extractedUrl.toString()!==this.currentTransition?.currentUrlTree.toString()}isUpdatedBrowserUrl(){let A=this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(!0))),i=la(this.currentNavigation),n=i?.targetBrowserUrl??i?.extractedUrl;return A.toString()!==n?.toString()&&!i?.extras.skipLocationChange}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function b1A(t){return t!==qB}var SH=new yA("");var xH=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(M1A),providedIn:"root"})}return t})(),J6=class{shouldDetach(e){return!1}store(e,A){}shouldAttach(e){return!1}retrieve(e){return null}shouldReuseRoute(e,A){return e.routeConfig===A.routeConfig}shouldDestroyInjector(e){return!0}},M1A=(()=>{class t extends J6{static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),zM=(()=>{class t{urlSerializer=h(z1);options=h(P1,{optional:!0})||{};canceledNavigationResolution=this.options.canceledNavigationResolution||"replace";location=h(n0);urlHandlingStrategy=h(H6);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";currentUrlTree=new nc;getCurrentUrlTree(){return this.currentUrlTree}rawUrlTree=this.currentUrlTree;getRawUrlTree(){return this.rawUrlTree}createBrowserPath({finalUrl:A,initialUrl:i,targetBrowserUrl:n}){let o=A!==void 0?this.urlHandlingStrategy.merge(A,i):i,a=n??o;return a instanceof nc?this.urlSerializer.serialize(a):a}commitTransition({targetRouterState:A,finalUrl:i,initialUrl:n}){i&&A?(this.currentUrlTree=i,this.rawUrlTree=this.urlHandlingStrategy.merge(i,n),this.routerState=A):this.rawUrlTree=n}routerState=cH(null,h(Gr));getRouterState(){return this.routerState}_stateMemento=this.createStateMemento();get stateMemento(){return this._stateMemento}updateStateMemento(){this._stateMemento=this.createStateMemento()}createStateMemento(){return{rawUrlTree:this.rawUrlTree,currentUrlTree:this.currentUrlTree,routerState:this.routerState}}restoredState(){return this.location.getState()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(k1A),providedIn:"root"})}return t})(),k1A=(()=>{class t extends zM{currentPageId=0;lastSuccessfulId=-1;get browserPageId(){return this.canceledNavigationResolution!=="computed"?this.currentPageId:this.restoredState()?.\u0275routerPageId??this.currentPageId}registerNonRouterCurrentEntryChangeListener(A){return this.location.subscribe(i=>{i.type==="popstate"&&setTimeout(()=>{A(i.url,i.state,"popstate")})})}handleRouterEvent(A,i){A instanceof F2?this.updateStateMemento():A instanceof c0?this.commitTransition(i):A instanceof XB?this.urlUpdateStrategy==="eager"&&(i.extras.skipLocationChange||this.setBrowserUrl(this.createBrowserPath(i),i)):A instanceof AE?(this.commitTransition(i),this.urlUpdateStrategy==="deferred"&&!i.extras.skipLocationChange&&this.setBrowserUrl(this.createBrowserPath(i),i)):A instanceof gl&&!lH(A)?this.restoreHistory(i):A instanceof T1?this.restoreHistory(i,!0):A instanceof oc&&(this.lastSuccessfulId=A.id,this.currentPageId=this.browserPageId)}setBrowserUrl(A,{extras:i,id:n}){let{replaceUrl:o,state:a}=i;if(this.location.isCurrentPathEqualTo(A)||o){let r=this.browserPageId,s=gA(gA({},a),this.generateNgRouterState(n,r));this.location.replaceState(A,"",s)}else{let r=gA(gA({},a),this.generateNgRouterState(n,this.browserPageId+1));this.location.go(A,"",r)}}restoreHistory(A,i=!1){if(this.canceledNavigationResolution==="computed"){let n=this.browserPageId,o=this.currentPageId-n;o!==0?this.location.historyGo(o):this.getCurrentUrlTree()===A.finalUrl&&o===0&&(this.resetInternalState(A),this.resetUrlToCurrentUrlTree())}else this.canceledNavigationResolution==="replace"&&(i&&this.resetInternalState(A),this.resetUrlToCurrentUrlTree())}resetInternalState({finalUrl:A}){this.routerState=this.stateMemento.routerState,this.currentUrlTree=this.stateMemento.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,A??this.rawUrlTree)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.getRawUrlTree()),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(A,i){return this.canceledNavigationResolution==="computed"?{navigationId:A,\u0275routerPageId:i}:{navigationId:A}}static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function O6(t,e){t.events.pipe(Ze(A=>A instanceof oc||A instanceof gl||A instanceof T1||A instanceof c0),fe(A=>A instanceof oc||A instanceof c0?0:(A instanceof gl?A.code===cs.Redirect||A.code===cs.SupersededByNewNavigation:!1)?2:1),Ze(A=>A!==2),oo(1)).subscribe(()=>{e()})}var RH={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},NH={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"},Cs=(()=>{class t{get currentUrlTree(){return this.stateManager.getCurrentUrlTree()}get rawUrlTree(){return this.stateManager.getRawUrlTree()}disposed=!1;nonRouterCurrentEntryChangeSubscription;console=h(QU);stateManager=h(zM);options=h(P1,{optional:!0})||{};pendingTasks=h(IU);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";navigationTransitions=h(z6);urlSerializer=h(z1);location=h(n0);urlHandlingStrategy=h(H6);injector=h(Gr);_events=new $A;get events(){return this._events}get routerState(){return this.stateManager.getRouterState()}navigated=!1;routeReuseStrategy=h(xH);injectorCleanup=h(SH,{optional:!0});onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore";config=h(oE,{optional:!0})?.flat()??[];componentInputBindingEnabled=!!h(l4,{optional:!0});currentNavigation=this.navigationTransitions.currentNavigation.asReadonly();constructor(){this.resetConfig(this.config),this.navigationTransitions.setupNavigations(this).subscribe({error:A=>{}}),this.subscribeToNavigationEvents()}eventsSubscription=new Jn;subscribeToNavigationEvents(){let A=this.navigationTransitions.events.subscribe(i=>{try{let n=this.navigationTransitions.currentTransition,o=la(this.navigationTransitions.currentNavigation);if(n!==null&&o!==null){if(this.stateManager.handleRouterEvent(i,o),i instanceof gl&&i.code!==cs.Redirect&&i.code!==cs.SupersededByNewNavigation)this.navigated=!0;else if(i instanceof oc)this.navigated=!0,this.injectorCleanup?.(this.routeReuseStrategy,this.routerState,this.config);else if(i instanceof eE){let a=i.navigationBehaviorOptions,r=this.urlHandlingStrategy.merge(i.url,n.currentRawUrl),s=gA({scroll:n.extras.scroll,browserUrl:n.extras.browserUrl,info:n.extras.info,skipLocationChange:n.extras.skipLocationChange,replaceUrl:n.extras.replaceUrl||this.urlUpdateStrategy==="eager"||b1A(n.source)},a);this.scheduleNavigation(r,qB,null,s,{resolve:n.resolve,reject:n.reject,promise:n.promise})}}SIA(i)&&this._events.next(i)}catch(n){this.navigationTransitions.transitionAbortWithErrorSubject.next(n)}});this.eventsSubscription.add(A)}resetRootComponentType(A){this.routerState.root.component=A,this.navigationTransitions.rootComponentType=A}initialNavigation(){this.setUpLocationChangeListener(),this.navigationTransitions.hasRequestedNavigation||this.navigateToSyncWithBrowser(this.location.path(!0),qB,this.stateManager.restoredState())}setUpLocationChangeListener(){this.nonRouterCurrentEntryChangeSubscription??=this.stateManager.registerNonRouterCurrentEntryChangeListener((A,i,n)=>{this.navigateToSyncWithBrowser(A,n,i)})}navigateToSyncWithBrowser(A,i,n){let o={replaceUrl:!0},a=n?.navigationId?n:null;if(n){let s=gA({},n);delete s.navigationId,delete s.\u0275routerPageId,Object.keys(s).length!==0&&(o.state=s)}let r=this.parseUrl(A);this.scheduleNavigation(r,i,a,o).catch(s=>{this.disposed||this.injector.get(Kb)(s)})}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return la(this.navigationTransitions.currentNavigation)}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(A){this.config=A.map(UM),this.navigated=!1}ngOnDestroy(){this.dispose()}dispose(){this._events.unsubscribe(),this.navigationTransitions.complete(),this.nonRouterCurrentEntryChangeSubscription?.unsubscribe(),this.nonRouterCurrentEntryChangeSubscription=void 0,this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(A,i={}){let{relativeTo:n,queryParams:o,fragment:a,queryParamsHandling:r,preserveFragment:s}=i,g=s?this.currentUrlTree.fragment:a,l=null;switch(r??this.options.defaultQueryParamsHandling){case"merge":l=gA(gA({},this.currentUrlTree.queryParams),o);break;case"preserve":l=this.currentUrlTree.queryParams;break;default:l=o||null}l!==null&&(l=this.removeEmptyProps(l));let C;try{let I=n?n.snapshot:this.routerState.snapshot.root;C=aH(I)}catch{(typeof A[0]!="string"||A[0][0]!=="/")&&(A=[]),C=this.currentUrlTree.root}return rH(C,A,l,g??null,this.urlSerializer)}navigateByUrl(A,i={skipLocationChange:!1}){let n=WB(A)?A:this.parseUrl(A),o=this.urlHandlingStrategy.merge(n,this.rawUrlTree);return this.scheduleNavigation(o,qB,null,i)}navigate(A,i={skipLocationChange:!1}){return S1A(A),this.navigateByUrl(this.createUrlTree(A,i),i)}serializeUrl(A){return this.urlSerializer.serialize(A)}parseUrl(A){try{return this.urlSerializer.parse(A)}catch{return this.console.warn(gU(4018,!1)),this.urlSerializer.parse("/")}}isActive(A,i){let n;if(i===!0?n=gA({},RH):i===!1?n=gA({},NH):n=i,WB(A))return UT(this.currentUrlTree,A,n);let o=this.parseUrl(A);return UT(this.currentUrlTree,o,n)}removeEmptyProps(A){return Object.entries(A).reduce((i,[n,o])=>(o!=null&&(i[n]=o),i),{})}scheduleNavigation(A,i,n,o,a){if(this.disposed)return Promise.resolve(!1);let r,s,g;a?(r=a.resolve,s=a.reject,g=a.promise):g=new Promise((C,I)=>{r=C,s=I});let l=this.pendingTasks.add();return O6(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(l))}),this.navigationTransitions.handleNavigationRequest({source:i,restoredState:n,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:A,extras:o,resolve:r,reject:s,promise:g,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),g.catch(C=>Promise.reject(C))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function S1A(t){for(let e=0;e{class t{router;injector;preloadingStrategy;loader;subscription;constructor(A,i,n,o){this.router=A,this.injector=i,this.preloadingStrategy=n,this.loader=o}setUpPreloading(){this.subscription=this.router.events.pipe(Ze(A=>A instanceof oc),lu(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription?.unsubscribe()}processRoutes(A,i){let n=[];for(let o of i){o.providers&&!o._injector&&(o._injector=op(o.providers,A,""));let a=o._injector??A;o._loadedNgModuleFactory&&!o._loadedInjector&&(o._loadedInjector=o._loadedNgModuleFactory.create(a).injector);let r=o._loadedInjector??a;(o.loadChildren&&!o._loadedRoutes&&o.canLoad===void 0||o.loadComponent&&!o._loadedComponent)&&n.push(this.preloadConfig(a,o)),(o.children||o._loadedRoutes)&&n.push(this.processRoutes(r,o.children??o._loadedRoutes))}return ks(n).pipe(Lb())}preloadConfig(A,i){return this.preloadingStrategy.preload(i,()=>{if(A.destroyed)return se(null);let n;i.loadChildren&&i.canLoad===void 0?n=ks(this.loader.loadChildren(A,i)):n=se(null);let o=n.pipe(e0(a=>a===null?se(void 0):(i._loadedRoutes=a.routes,i._loadedInjector=a.injector,i._loadedNgModuleFactory=a.factory,this.processRoutes(a.injector??A,a.routes))));if(i.loadComponent&&!i._loadedComponent){let a=this.loader.loadComponent(A,i);return ks([o,a]).pipe(Lb())}else return o})}static \u0275fac=function(i){return new(i||t)(So(Cs),So(Gr),So(C4),So(T6))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),_H=new yA(""),R1A=(()=>{class t{options;routerEventsSubscription;scrollEventsSubscription;lastId=0;lastSource=qB;restoredId=0;store={};urlSerializer=h(z1);zone=h(Oe);viewportScroller=h(Hb);transitions=h(z6);constructor(A){this.options=A,this.options.scrollPositionRestoration||="disabled",this.options.anchorScrolling||="disabled"}init(){this.options.scrollPositionRestoration!=="disabled"&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(A=>{A instanceof F2?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=A.navigationTrigger,this.restoredId=A.restoredState?A.restoredState.navigationId:0):A instanceof oc?(this.lastId=A.id,this.scheduleScrollEvent(A,this.urlSerializer.parse(A.urlAfterRedirects).fragment)):A instanceof c0&&A.code===ZB.IgnoredSameUrlNavigation&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(A,this.urlSerializer.parse(A.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(A=>{if(!(A instanceof $B)||A.scrollBehavior==="manual")return;let i={behavior:"instant"};A.position?this.options.scrollPositionRestoration==="top"?this.viewportScroller.scrollToPosition([0,0],i):this.options.scrollPositionRestoration==="enabled"&&this.viewportScroller.scrollToPosition(A.position,i):A.anchor&&this.options.anchorScrolling==="enabled"?this.viewportScroller.scrollToAnchor(A.anchor):this.options.scrollPositionRestoration!=="disabled"&&this.viewportScroller.scrollToPosition([0,0])})}scheduleScrollEvent(A,i){let n=la(this.transitions.currentNavigation)?.extras.scroll;this.zone.runOutsideAngular(()=>nt(this,null,function*(){yield new Promise(o=>{setTimeout(o),typeof requestAnimationFrame<"u"&&requestAnimationFrame(o)}),this.zone.run(()=>{this.transitions.events.next(new $B(A,this.lastSource==="popstate"?this.store[this.restoredId]:null,i,n))})}))}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}static \u0275fac=function(i){np()};static \u0275prov=zA({token:t,factory:t.\u0275fac})}return t})();function N1A(){return h(Cs).routerState.root}function I4(t,e){return{\u0275kind:t,\u0275providers:e}}function F1A(){let t=h(ft);return e=>{let A=t.get(iC);if(e!==A.components[0])return;let i=t.get(Cs),n=t.get(LH);t.get(PM)===1&&i.initialNavigation(),t.get(UH,null,{optional:!0})?.setUpPreloading(),t.get(_H,null,{optional:!0})?.init(),i.resetRootComponentType(A.componentTypes[0]),n.closed||(n.next(),n.complete(),n.unsubscribe())}}var LH=new yA("",{factory:()=>new $A}),PM=new yA("",{factory:()=>1});function GH(){let t=[{provide:BU,useValue:!0},{provide:PM,useValue:0},Jb(()=>{let e=h(ft);return e.get(xU,Promise.resolve()).then(()=>new Promise(i=>{let n=e.get(Cs),o=e.get(LH);O6(n,()=>{i(!0)}),e.get(z6).afterPreactivation=()=>(i(!0),o.closed?se(void 0):o),n.initialNavigation()}))})];return I4(2,t)}function KH(){let t=[Jb(()=>{h(Cs).setUpLocationChangeListener()}),{provide:PM,useValue:2}];return I4(3,t)}var UH=new yA("");function JH(t){return I4(0,[{provide:UH,useExisting:FH},{provide:C4,useExisting:t}])}function YH(){return I4(8,[GM,{provide:l4,useExisting:GM}])}function TH(t){ip("NgRouterViewTransitions");let e=[{provide:YM,useValue:kH},{provide:TM,useValue:gA({skipNextTransition:!!t?.skipInitialTransition},t)}];return I4(9,e)}var HH=[n0,{provide:z1,useClass:CC},Cs,O1,{provide:ag,useFactory:N1A},T6,[]],P6=(()=>{class t{constructor(){}static forRoot(A,i){return{ngModule:t,providers:[HH,[],{provide:oE,multi:!0,useValue:A},[],i?.errorHandler?{provide:HM,useValue:i.errorHandler}:[],{provide:P1,useValue:i||{}},i?.useHash?L1A():G1A(),_1A(),i?.preloadingStrategy?JH(i.preloadingStrategy).\u0275providers:[],i?.initialNavigation?K1A(i):[],i?.bindToComponentInputs?YH().\u0275providers:[],i?.enableViewTransitions?TH().\u0275providers:[],U1A()]}}static forChild(A){return{ngModule:t,providers:[{provide:oE,multi:!0,useValue:A}]}}static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();function _1A(){return{provide:_H,useFactory:()=>{let t=h(Hb),e=h(P1);return e.scrollOffset&&t.setOffset(e.scrollOffset),new R1A(e)}}}function L1A(){return{provide:Tb,useClass:NU}}function G1A(){return{provide:Tb,useClass:RU}}function K1A(t){return[t.initialNavigation==="disabled"?KH().\u0275providers:[],t.initialNavigation==="enabledBlocking"?GH().\u0275providers:[]]}var OM=new yA("");function U1A(){return[{provide:OM,useFactory:F1A},{provide:hU,multi:!0,useExisting:OM}]}var T1A=["*"];var H1A=new yA("MAT_CARD_CONFIG"),aE=(()=>{class t{appearance;constructor(){let A=h(H1A,{optional:!0});this.appearance=A?.appearance||"raised"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-card"]],hostAttrs:[1,"mat-mdc-card","mdc-card"],hostVars:8,hostBindings:function(i,n){i&2&&ae("mat-mdc-card-outlined",n.appearance==="outlined")("mdc-card--outlined",n.appearance==="outlined")("mat-mdc-card-filled",n.appearance==="filled")("mdc-card--filled",n.appearance==="filled")},inputs:{appearance:"appearance"},exportAs:["matCard"],ngContentSelectors:T1A,decls:1,vars:0,template:function(i,n){i&1&&(Ht(),He(0))},styles:[`.mat-mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-elevated-container-elevation, var(--mat-sys-level1))}.mat-mdc-card::after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px rgba(0,0,0,0);content:"";display:block;pointer-events:none;box-sizing:border-box;border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium))}.mat-mdc-card-outlined{background-color:var(--mat-card-outlined-container-color, var(--mat-sys-surface));border-radius:var(--mat-card-outlined-container-shape, var(--mat-sys-corner-medium));border-width:var(--mat-card-outlined-outline-width, 1px);border-color:var(--mat-card-outlined-outline-color, var(--mat-sys-outline-variant));box-shadow:var(--mat-card-outlined-container-elevation, var(--mat-sys-level0))}.mat-mdc-card-outlined::after{border:none}.mat-mdc-card-filled{background-color:var(--mat-card-filled-container-color, var(--mat-sys-surface-container-highest));border-radius:var(--mat-card-filled-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-filled-container-elevation, var(--mat-sys-level0))}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:""}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mat-mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mat-mdc-card-title{font-family:var(--mat-card-title-text-font, var(--mat-sys-title-large-font));line-height:var(--mat-card-title-text-line-height, var(--mat-sys-title-large-line-height));font-size:var(--mat-card-title-text-size, var(--mat-sys-title-large-size));letter-spacing:var(--mat-card-title-text-tracking, var(--mat-sys-title-large-tracking));font-weight:var(--mat-card-title-text-weight, var(--mat-sys-title-large-weight))}.mat-mdc-card-subtitle{color:var(--mat-card-subtitle-text-color, var(--mat-sys-on-surface));font-family:var(--mat-card-subtitle-text-font, var(--mat-sys-title-medium-font));line-height:var(--mat-card-subtitle-text-line-height, var(--mat-sys-title-medium-line-height));font-size:var(--mat-card-subtitle-text-size, var(--mat-sys-title-medium-size));letter-spacing:var(--mat-card-subtitle-text-tracking, var(--mat-sys-title-medium-tracking));font-weight:var(--mat-card-subtitle-text-weight, var(--mat-sys-title-medium-weight))}.mat-mdc-card-title,.mat-mdc-card-subtitle{display:block;margin:0}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle{padding:16px 16px 0}.mat-mdc-card-header{display:flex;padding:16px 16px 0}.mat-mdc-card-content{display:block;padding:0 16px}.mat-mdc-card-content:first-child{padding-top:16px}.mat-mdc-card-content:last-child{padding-bottom:16px}.mat-mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mat-mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title{line-height:normal}.mat-mdc-card-sm-image{width:80px;height:80px}.mat-mdc-card-md-image{width:112px;height:112px}.mat-mdc-card-lg-image{width:152px;height:152px}.mat-mdc-card-xl-image{width:240px;height:240px}.mat-mdc-card-subtitle~.mat-mdc-card-title,.mat-mdc-card-title~.mat-mdc-card-subtitle,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-title-group .mat-mdc-card-title,.mat-mdc-card-title-group .mat-mdc-card-subtitle{padding-top:0}.mat-mdc-card-content>:last-child:not(.mat-mdc-card-footer){margin-bottom:0}.mat-mdc-card-actions-align-end{justify-content:flex-end} +`],encapsulation:2,changeDetection:0})}return t})();var zH=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var d4=class{};function B4(t){return t&&typeof t.connect=="function"&&!(t instanceof tU)}var ac=(function(t){return t[t.REPLACED=0]="REPLACED",t[t.INSERTED=1]="INSERTED",t[t.MOVED=2]="MOVED",t[t.REMOVED=3]="REMOVED",t})(ac||{}),j6=class{viewCacheSize=20;_viewCache=[];applyChanges(e,A,i,n,o){e.forEachOperation((a,r,s)=>{let g,l;if(a.previousIndex==null){let C=()=>i(a,r,s);g=this._insertView(C,s,A,n(a)),l=g?ac.INSERTED:ac.REPLACED}else s==null?(this._detachAndCacheView(r,A),l=ac.REMOVED):(g=this._moveView(r,s,A,n(a)),l=ac.MOVED);o&&o({context:g?.context,operation:l,record:a})})}detach(){for(let e of this._viewCache)e.destroy();this._viewCache=[]}_insertView(e,A,i,n){let o=this._insertViewFromCache(A,i);if(o){o.context.$implicit=n;return}let a=e();return i.createEmbeddedView(a.templateRef,a.context,a.index)}_detachAndCacheView(e,A){let i=A.detach(e);this._maybeCacheView(i,A)}_moveView(e,A,i,n){let o=i.get(e);return i.move(o,A),o.context.$implicit=n,o}_maybeCacheView(e,A){if(this._viewCache.length{class t{_ngZone=h(Oe);_platform=h(Ii);_renderer=h(Kr).createRenderer(null,null);_cleanupGlobalListener;constructor(){}_scrolled=new $A;_scrolledCount=0;scrollContainers=new Map;register(A){this.scrollContainers.has(A)||this.scrollContainers.set(A,A.elementScrolled().subscribe(()=>this._scrolled.next(A)))}deregister(A){let i=this.scrollContainers.get(A);i&&(i.unsubscribe(),this.scrollContainers.delete(A))}scrolled(A=O1A){return this._platform.isBrowser?new ji(i=>{this._cleanupGlobalListener||(this._cleanupGlobalListener=this._ngZone.runOutsideAngular(()=>this._renderer.listen("document","scroll",()=>this._scrolled.next())));let n=A>0?this._scrolled.pipe(m1(A)).subscribe(i):this._scrolled.subscribe(i);return this._scrolledCount++,()=>{n.unsubscribe(),this._scrolledCount--,this._scrolledCount||(this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0)}}):se()}ngOnDestroy(){this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0,this.scrollContainers.forEach((A,i)=>this.deregister(i)),this._scrolled.complete()}ancestorScrolled(A,i){let n=this.getAncestorScrollContainers(A);return this.scrolled(i).pipe(Ze(o=>!o||n.indexOf(o)>-1))}getAncestorScrollContainers(A){let i=[];return this.scrollContainers.forEach((n,o)=>{this._scrollableContainsElement(o,A)&&i.push(o)}),i}_scrollableContainsElement(A,i){let n=Rs(i),o=A.getElementRef().nativeElement;do if(n==o)return!0;while(n=n.parentElement);return!1}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),IC=(()=>{class t{elementRef=h(ge);scrollDispatcher=h(I0);ngZone=h(Oe);dir=h(xo,{optional:!0});_scrollElement=this.elementRef.nativeElement;_destroyed=new $A;_renderer=h(Fi);_cleanupScroll;_elementScrolled=new $A;constructor(){}ngOnInit(){this._cleanupScroll=this.ngZone.runOutsideAngular(()=>this._renderer.listen(this._scrollElement,"scroll",A=>this._elementScrolled.next(A))),this.scrollDispatcher.register(this)}ngOnDestroy(){this._cleanupScroll?.(),this._elementScrolled.complete(),this.scrollDispatcher.deregister(this),this._destroyed.next(),this._destroyed.complete()}elementScrolled(){return this._elementScrolled}getElementRef(){return this.elementRef}scrollTo(A){let i=this.elementRef.nativeElement,n=this.dir&&this.dir.value=="rtl";A.left==null&&(A.left=n?A.end:A.start),A.right==null&&(A.right=n?A.start:A.end),A.bottom!=null&&(A.top=i.scrollHeight-i.clientHeight-A.bottom),n&&_B()!=Wl.NORMAL?(A.left!=null&&(A.right=i.scrollWidth-i.clientWidth-A.left),_B()==Wl.INVERTED?A.left=A.right:_B()==Wl.NEGATED&&(A.left=A.right?-A.right:A.right)):A.right!=null&&(A.left=i.scrollWidth-i.clientWidth-A.right),this._applyScrollToOptions(A)}_applyScrollToOptions(A){let i=this.elementRef.nativeElement;Gp()?i.scrollTo(A):(A.top!=null&&(i.scrollTop=A.top),A.left!=null&&(i.scrollLeft=A.left))}measureScrollOffset(A){let i="left",n="right",o=this.elementRef.nativeElement;if(A=="top")return o.scrollTop;if(A=="bottom")return o.scrollHeight-o.clientHeight-o.scrollTop;let a=this.dir&&this.dir.value=="rtl";return A=="start"?A=a?n:i:A=="end"&&(A=a?i:n),a&&_B()==Wl.INVERTED?A==i?o.scrollWidth-o.clientWidth-o.scrollLeft:o.scrollLeft:a&&_B()==Wl.NEGATED?A==i?o.scrollLeft+o.scrollWidth-o.clientWidth:-o.scrollLeft:A==i?o.scrollLeft:o.scrollWidth-o.clientWidth-o.scrollLeft}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdk-scrollable",""],["","cdkScrollable",""]]})}return t})(),P1A=20,Gs=(()=>{class t{_platform=h(Ii);_listeners;_viewportSize=null;_change=new $A;_document=h(Xt);constructor(){let A=h(Oe),i=h(Kr).createRenderer(null,null);A.runOutsideAngular(()=>{if(this._platform.isBrowser){let n=o=>this._change.next(o);this._listeners=[i.listen("window","resize",n),i.listen("window","orientationchange",n)]}this.change().subscribe(()=>this._viewportSize=null)})}ngOnDestroy(){this._listeners?.forEach(A=>A()),this._change.complete()}getViewportSize(){this._viewportSize||this._updateViewportSize();let A={width:this._viewportSize.width,height:this._viewportSize.height};return this._platform.isBrowser||(this._viewportSize=null),A}getViewportRect(){let A=this.getViewportScrollPosition(),{width:i,height:n}=this.getViewportSize();return{top:A.top,left:A.left,bottom:A.top+n,right:A.left+i,height:n,width:i}}getViewportScrollPosition(){if(!this._platform.isBrowser)return{top:0,left:0};let A=this._document,i=this._getWindow(),n=A.documentElement,o=n.getBoundingClientRect(),a=-o.top||A.body?.scrollTop||i.scrollY||n.scrollTop||0,r=-o.left||A.body?.scrollLeft||i.scrollX||n.scrollLeft||0;return{top:a,left:r}}change(A=P1A){return A>0?this._change.pipe(m1(A)):this._change}_getWindow(){return this._document.defaultView||window}_updateViewportSize(){let A=this._getWindow();this._viewportSize=this._platform.isBrowser?{width:A.innerWidth,height:A.innerHeight}:{width:0,height:0}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var OH=new yA("CDK_VIRTUAL_SCROLL_VIEWPORT");var C0=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})(),q6=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi,C0,Gi,C0]})}return t})();var E4=class{_attachedHost=null;attach(e){return this._attachedHost=e,e.attach(this)}detach(){let e=this._attachedHost;e!=null&&(this._attachedHost=null,e.detach())}get isAttached(){return this._attachedHost!=null}setAttachedHost(e){this._attachedHost=e}},Ug=class extends E4{component;viewContainerRef;injector;projectableNodes;constructor(e,A,i,n){super(),this.component=e,this.viewContainerRef=A,this.injector=i,this.projectableNodes=n}},Is=class extends E4{templateRef;viewContainerRef;context;injector;constructor(e,A,i,n){super(),this.templateRef=e,this.viewContainerRef=A,this.context=i,this.injector=n}get origin(){return this.templateRef.elementRef}attach(e,A=this.context){return this.context=A,super.attach(e)}detach(){return this.context=void 0,super.detach()}},jM=class extends E4{element;constructor(e){super(),this.element=e instanceof ge?e.nativeElement:e}},_2=class{_attachedPortal=null;_disposeFn=null;_isDisposed=!1;hasAttached(){return!!this._attachedPortal}attach(e){if(e instanceof Ug)return this._attachedPortal=e,this.attachComponentPortal(e);if(e instanceof Is)return this._attachedPortal=e,this.attachTemplatePortal(e);if(this.attachDomPortal&&e instanceof jM)return this._attachedPortal=e,this.attachDomPortal(e)}attachDomPortal=null;detach(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()}dispose(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0}setDisposeFn(e){this._disposeFn=e}_invokeDisposeFn(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)}},Q4=class extends _2{outletElement;_appRef;_defaultInjector;constructor(e,A,i){super(),this.outletElement=e,this._appRef=A,this._defaultInjector=i}attachComponentPortal(e){let A;if(e.viewContainerRef){let i=e.injector||e.viewContainerRef.injector,n=i.get(Ub,null,{optional:!0})||void 0;A=e.viewContainerRef.createComponent(e.component,{index:e.viewContainerRef.length,injector:i,ngModuleRef:n,projectableNodes:e.projectableNodes||void 0}),this.setDisposeFn(()=>A.destroy())}else{let i=this._appRef,n=e.injector||this._defaultInjector||ft.NULL,o=n.get(Gr,i.injector);A=cp(e.component,{elementInjector:n,environmentInjector:o,projectableNodes:e.projectableNodes||void 0}),i.attachView(A.hostView),this.setDisposeFn(()=>{i.viewCount>0&&i.detachView(A.hostView),A.destroy()})}return this.outletElement.appendChild(this._getComponentRootNode(A)),this._attachedPortal=e,A}attachTemplatePortal(e){let A=e.viewContainerRef,i=A.createEmbeddedView(e.templateRef,e.context,{injector:e.injector});return i.rootNodes.forEach(n=>this.outletElement.appendChild(n)),i.detectChanges(),this.setDisposeFn(()=>{let n=A.indexOf(i);n!==-1&&A.remove(n)}),this._attachedPortal=e,i}attachDomPortal=e=>{let A=e.element;A.parentNode;let i=this.outletElement.ownerDocument.createComment("dom-portal");A.parentNode.insertBefore(i,A),this.outletElement.appendChild(A),this._attachedPortal=e,super.setDisposeFn(()=>{i.parentNode&&i.parentNode.replaceChild(A,i)})};dispose(){super.dispose(),this.outletElement.remove()}_getComponentRootNode(e){return e.hostView.rootNodes[0]}},PH=(()=>{class t extends Is{constructor(){let A=h(Tn),i=h(Ho);super(A,i)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkPortal",""]],exportAs:["cdkPortal"],features:[dt]})}return t})(),Jg=(()=>{class t extends _2{_moduleRef=h(Ub,{optional:!0});_document=h(Xt);_viewContainerRef=h(Ho);_isInitialized=!1;_attachedRef=null;constructor(){super()}get portal(){return this._attachedPortal}set portal(A){this.hasAttached()&&!A&&!this._isInitialized||(this.hasAttached()&&super.detach(),A&&super.attach(A),this._attachedPortal=A||null)}attached=new WA;get attachedRef(){return this._attachedRef}ngOnInit(){this._isInitialized=!0}ngOnDestroy(){super.dispose(),this._attachedRef=this._attachedPortal=null}attachComponentPortal(A){A.setAttachedHost(this);let i=A.viewContainerRef!=null?A.viewContainerRef:this._viewContainerRef,n=i.createComponent(A.component,{index:i.length,injector:A.injector||i.injector,projectableNodes:A.projectableNodes||void 0,ngModuleRef:this._moduleRef||void 0});return i!==this._viewContainerRef&&this._getRootNode().appendChild(n.hostView.rootNodes[0]),super.setDisposeFn(()=>n.destroy()),this._attachedPortal=A,this._attachedRef=n,this.attached.emit(n),n}attachTemplatePortal(A){A.setAttachedHost(this);let i=this._viewContainerRef.createEmbeddedView(A.templateRef,A.context,{injector:A.injector});return super.setDisposeFn(()=>this._viewContainerRef.clear()),this._attachedPortal=A,this._attachedRef=i,this.attached.emit(i),i}attachDomPortal=A=>{let i=A.element;i.parentNode;let n=this._document.createComment("dom-portal");A.setAttachedHost(this),i.parentNode.insertBefore(n,i),this._getRootNode().appendChild(i),this._attachedPortal=A,super.setDisposeFn(()=>{n.parentNode&&n.parentNode.replaceChild(i,n)})};_getRootNode(){let A=this._viewContainerRef.element.nativeElement;return A.nodeType===A.ELEMENT_NODE?A:A.parentNode}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkPortalOutlet",""]],inputs:{portal:[0,"cdkPortalOutlet","portal"]},outputs:{attached:"attached"},exportAs:["cdkPortalOutlet"],features:[dt]})}return t})(),d0=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();var jH=Gp();function gE(t){return new V6(t.get(Gs),t.get(Xt))}var V6=class{_viewportRuler;_previousHTMLStyles={top:"",left:""};_previousScrollPosition;_isEnabled=!1;_document;constructor(e,A){this._viewportRuler=e,this._document=A}attach(){}enable(){if(this._canBeEnabled()){let e=this._document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=e.style.left||"",this._previousHTMLStyles.top=e.style.top||"",e.style.left=qa(-this._previousScrollPosition.left),e.style.top=qa(-this._previousScrollPosition.top),e.classList.add("cdk-global-scrollblock"),this._isEnabled=!0}}disable(){if(this._isEnabled){let e=this._document.documentElement,A=this._document.body,i=e.style,n=A.style,o=i.scrollBehavior||"",a=n.scrollBehavior||"";this._isEnabled=!1,i.left=this._previousHTMLStyles.left,i.top=this._previousHTMLStyles.top,e.classList.remove("cdk-global-scrollblock"),jH&&(i.scrollBehavior=n.scrollBehavior="auto"),window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),jH&&(i.scrollBehavior=o,n.scrollBehavior=a)}}_canBeEnabled(){if(this._document.documentElement.classList.contains("cdk-global-scrollblock")||this._isEnabled)return!1;let A=this._document.documentElement,i=this._viewportRuler.getViewportSize();return A.scrollHeight>i.height||A.scrollWidth>i.width}};function Az(t,e){return new W6(t.get(I0),t.get(Oe),t.get(Gs),e)}var W6=class{_scrollDispatcher;_ngZone;_viewportRuler;_config;_scrollSubscription=null;_overlayRef;_initialScrollPosition;constructor(e,A,i,n){this._scrollDispatcher=e,this._ngZone=A,this._viewportRuler=i,this._config=n}attach(e){this._overlayRef,this._overlayRef=e}enable(){if(this._scrollSubscription)return;let e=this._scrollDispatcher.scrolled(0).pipe(Ze(A=>!A||!this._overlayRef.overlayElement.contains(A.getElementRef().nativeElement)));this._config&&this._config.threshold&&this._config.threshold>1?(this._initialScrollPosition=this._viewportRuler.getViewportScrollPosition().top,this._scrollSubscription=e.subscribe(()=>{let A=this._viewportRuler.getViewportScrollPosition().top;Math.abs(A-this._initialScrollPosition)>this._config.threshold?this._detach():this._overlayRef.updatePosition()})):this._scrollSubscription=e.subscribe(this._detach)}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}_detach=()=>{this.disable(),this._overlayRef.hasAttached()&&this._ngZone.run(()=>this._overlayRef.detach())}};var h4=class{enable(){}disable(){}attach(){}};function qM(t,e){return e.some(A=>{let i=t.bottomA.bottom,o=t.rightA.right;return i||n||o||a})}function qH(t,e){return e.some(A=>{let i=t.topA.bottom,o=t.leftA.right;return i||n||o||a})}function dC(t,e){return new Z6(t.get(I0),t.get(Gs),t.get(Oe),e)}var Z6=class{_scrollDispatcher;_viewportRuler;_ngZone;_config;_scrollSubscription=null;_overlayRef;constructor(e,A,i,n){this._scrollDispatcher=e,this._viewportRuler=A,this._ngZone=i,this._config=n}attach(e){this._overlayRef,this._overlayRef=e}enable(){if(!this._scrollSubscription){let e=this._config?this._config.scrollThrottle:0;this._scrollSubscription=this._scrollDispatcher.scrolled(e).subscribe(()=>{if(this._overlayRef.updatePosition(),this._config&&this._config.autoClose){let A=this._overlayRef.overlayElement.getBoundingClientRect(),{width:i,height:n}=this._viewportRuler.getViewportSize();qM(A,[{width:i,height:n,bottom:n,right:i,top:0,left:0}])&&(this.disable(),this._ngZone.run(()=>this._overlayRef.detach()))}})}}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}},ez=(()=>{class t{_injector=h(ft);constructor(){}noop=()=>new h4;close=A=>Az(this._injector,A);block=()=>gE(this._injector);reposition=A=>dC(this._injector,A);static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),rc=class{positionStrategy;scrollStrategy=new h4;panelClass="";hasBackdrop=!1;backdropClass="cdk-overlay-dark-backdrop";disableAnimations;width;height;minWidth;minHeight;maxWidth;maxHeight;direction;disposeOnNavigation=!1;usePopover;constructor(e){if(e){let A=Object.keys(e);for(let i of A)e[i]!==void 0&&(this[i]=e[i])}}};var X6=class{connectionPair;scrollableViewProperties;constructor(e,A){this.connectionPair=e,this.scrollableViewProperties=A}};var tz=(()=>{class t{_attachedOverlays=[];_document=h(Xt);_isAttached=!1;constructor(){}ngOnDestroy(){this.detach()}add(A){this.remove(A),this._attachedOverlays.push(A)}remove(A){let i=this._attachedOverlays.indexOf(A);i>-1&&this._attachedOverlays.splice(i,1),this._attachedOverlays.length===0&&this.detach()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),iz=(()=>{class t extends tz{_ngZone=h(Oe);_renderer=h(Kr).createRenderer(null,null);_cleanupKeydown;add(A){super.add(A),this._isAttached||(this._ngZone.runOutsideAngular(()=>{this._cleanupKeydown=this._renderer.listen("body","keydown",this._keydownListener)}),this._isAttached=!0)}detach(){this._isAttached&&(this._cleanupKeydown?.(),this._isAttached=!1)}_keydownListener=A=>{let i=this._attachedOverlays;for(let n=i.length-1;n>-1;n--)if(i[n]._keydownEvents.observers.length>0){this._ngZone.run(()=>i[n]._keydownEvents.next(A));break}};static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),nz=(()=>{class t extends tz{_platform=h(Ii);_ngZone=h(Oe);_renderer=h(Kr).createRenderer(null,null);_cursorOriginalValue;_cursorStyleIsSet=!1;_pointerDownEventTarget=null;_cleanups;add(A){if(super.add(A),!this._isAttached){let i=this._document.body,n={capture:!0},o=this._renderer;this._cleanups=this._ngZone.runOutsideAngular(()=>[o.listen(i,"pointerdown",this._pointerDownListener,n),o.listen(i,"click",this._clickListener,n),o.listen(i,"auxclick",this._clickListener,n),o.listen(i,"contextmenu",this._clickListener,n)]),this._platform.IOS&&!this._cursorStyleIsSet&&(this._cursorOriginalValue=i.style.cursor,i.style.cursor="pointer",this._cursorStyleIsSet=!0),this._isAttached=!0}}detach(){this._isAttached&&(this._cleanups?.forEach(A=>A()),this._cleanups=void 0,this._platform.IOS&&this._cursorStyleIsSet&&(this._document.body.style.cursor=this._cursorOriginalValue,this._cursorStyleIsSet=!1),this._isAttached=!1)}_pointerDownListener=A=>{this._pointerDownEventTarget=Jr(A)};_clickListener=A=>{let i=Jr(A),n=A.type==="click"&&this._pointerDownEventTarget?this._pointerDownEventTarget:i;this._pointerDownEventTarget=null;let o=this._attachedOverlays.slice();for(let a=o.length-1;a>-1;a--){let r=o[a];if(r._outsidePointerEvents.observers.length<1||!r.hasAttached())continue;if(VH(r.overlayElement,i)||VH(r.overlayElement,n))break;let s=r._outsidePointerEvents;this._ngZone?this._ngZone.run(()=>s.next(A)):s.next(A)}};static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function VH(t,e){let A=typeof ShadowRoot<"u"&&ShadowRoot,i=e;for(;i;){if(i===t)return!0;i=A&&i instanceof ShadowRoot?i.host:i.parentNode}return!1}var oz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],hostAttrs:["cdk-overlay-style-loader",""],decls:0,vars:0,template:function(i,n){},styles:[`.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed}@layer cdk-overlay{.cdk-overlay-container{z-index:1000}}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute}@layer cdk-overlay{.cdk-global-overlay-wrapper{z-index:1000}}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;display:flex;max-width:100%;max-height:100%}@layer cdk-overlay{.cdk-overlay-pane{z-index:1000}}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);opacity:0;touch-action:manipulation}@layer cdk-overlay{.cdk-overlay-backdrop{z-index:1000;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}}@media(prefers-reduced-motion){.cdk-overlay-backdrop{transition-duration:1ms}}.cdk-overlay-backdrop-showing{opacity:1}@media(forced-colors: active){.cdk-overlay-backdrop-showing{opacity:.6}}@layer cdk-overlay{.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing,.cdk-high-contrast-active .cdk-overlay-transparent-backdrop{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;display:flex;flex-direction:column;min-width:1px;min-height:1px}@layer cdk-overlay{.cdk-overlay-connected-position-bounding-box{z-index:1000}}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cdk-overlay-popover{background:none;border:none;padding:0;outline:0;overflow:visible;position:fixed;pointer-events:none;white-space:normal;color:inherit;text-decoration:none;width:100%;height:100%;inset:auto;top:0;left:0}.cdk-overlay-popover::backdrop{display:none}.cdk-overlay-popover .cdk-overlay-backdrop{position:fixed;z-index:auto} +`],encapsulation:2,changeDetection:0})}return t})(),e8=(()=>{class t{_platform=h(Ii);_containerElement;_document=h(Xt);_styleLoader=h(Xn);constructor(){}ngOnDestroy(){this._containerElement?.remove()}getContainerElement(){return this._loadStyles(),this._containerElement||this._createContainer(),this._containerElement}_createContainer(){let A="cdk-overlay-container";if(this._platform.isBrowser||E9()){let n=this._document.querySelectorAll(`.${A}[platform="server"], .${A}[platform="test"]`);for(let o=0;o{let e=this.element;clearTimeout(this._fallbackTimeout),this._cleanupTransitionEnd?.(),this._cleanupTransitionEnd=this._renderer.listen(e,"transitionend",this.dispose),this._fallbackTimeout=setTimeout(this.dispose,500),e.style.pointerEvents="none",e.classList.remove("cdk-overlay-backdrop-showing")})}dispose=()=>{clearTimeout(this._fallbackTimeout),this._cleanupClick?.(),this._cleanupTransitionEnd?.(),this._cleanupClick=this._cleanupTransitionEnd=this._fallbackTimeout=void 0,this.element.remove()}};function WM(t){return t&&t.nodeType===1}var rE=class{_portalOutlet;_host;_pane;_config;_ngZone;_keyboardDispatcher;_document;_location;_outsideClickDispatcher;_animationsDisabled;_injector;_renderer;_backdropClick=new $A;_attachments=new $A;_detachments=new $A;_positionStrategy;_scrollStrategy;_locationChanges=Jn.EMPTY;_backdropRef=null;_detachContentMutationObserver;_detachContentAfterRenderRef;_disposed=!1;_previousHostParent;_keydownEvents=new $A;_outsidePointerEvents=new $A;_afterNextRenderRef;constructor(e,A,i,n,o,a,r,s,g,l=!1,C,I){this._portalOutlet=e,this._host=A,this._pane=i,this._config=n,this._ngZone=o,this._keyboardDispatcher=a,this._document=r,this._location=s,this._outsideClickDispatcher=g,this._animationsDisabled=l,this._injector=C,this._renderer=I,n.scrollStrategy&&(this._scrollStrategy=n.scrollStrategy,this._scrollStrategy.attach(this)),this._positionStrategy=n.positionStrategy}get overlayElement(){return this._pane}get backdropElement(){return this._backdropRef?.element||null}get hostElement(){return this._host}attach(e){if(this._disposed)return null;this._attachHost();let A=this._portalOutlet.attach(e);return this._positionStrategy?.attach(this),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._scrollStrategy&&this._scrollStrategy.enable(),this._afterNextRenderRef?.destroy(),this._afterNextRenderRef=Yn(()=>{this.hasAttached()&&this.updatePosition()},{injector:this._injector}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!0),this._attachments.next(),this._completeDetachContent(),this._keyboardDispatcher.add(this),this._config.disposeOnNavigation&&(this._locationChanges=this._location.subscribe(()=>this.dispose())),this._outsideClickDispatcher.add(this),typeof A?.onDestroy=="function"&&A.onDestroy(()=>{this.hasAttached()&&this._ngZone.runOutsideAngular(()=>Promise.resolve().then(()=>this.detach()))}),A}detach(){if(!this.hasAttached())return;this.detachBackdrop(),this._togglePointerEvents(!1),this._positionStrategy&&this._positionStrategy.detach&&this._positionStrategy.detach(),this._scrollStrategy&&this._scrollStrategy.disable();let e=this._portalOutlet.detach();return this._detachments.next(),this._completeDetachContent(),this._keyboardDispatcher.remove(this),this._detachContentWhenEmpty(),this._locationChanges.unsubscribe(),this._outsideClickDispatcher.remove(this),e}dispose(){if(this._disposed)return;let e=this.hasAttached();this._positionStrategy&&this._positionStrategy.dispose(),this._disposeScrollStrategy(),this._backdropRef?.dispose(),this._locationChanges.unsubscribe(),this._keyboardDispatcher.remove(this),this._portalOutlet.dispose(),this._attachments.complete(),this._backdropClick.complete(),this._keydownEvents.complete(),this._outsidePointerEvents.complete(),this._outsideClickDispatcher.remove(this),this._host?.remove(),this._afterNextRenderRef?.destroy(),this._previousHostParent=this._pane=this._host=this._backdropRef=null,e&&this._detachments.next(),this._detachments.complete(),this._completeDetachContent(),this._disposed=!0}hasAttached(){return this._portalOutlet.hasAttached()}backdropClick(){return this._backdropClick}attachments(){return this._attachments}detachments(){return this._detachments}keydownEvents(){return this._keydownEvents}outsidePointerEvents(){return this._outsidePointerEvents}getConfig(){return this._config}updatePosition(){this._positionStrategy&&this._positionStrategy.apply()}updatePositionStrategy(e){e!==this._positionStrategy&&(this._positionStrategy&&this._positionStrategy.dispose(),this._positionStrategy=e,this.hasAttached()&&(e.attach(this),this.updatePosition()))}updateSize(e){this._config=gA(gA({},this._config),e),this._updateElementSize()}setDirection(e){this._config=be(gA({},this._config),{direction:e}),this._updateElementDirection()}addPanelClass(e){this._pane&&this._toggleClasses(this._pane,e,!0)}removePanelClass(e){this._pane&&this._toggleClasses(this._pane,e,!1)}getDirection(){let e=this._config.direction;return e?typeof e=="string"?e:e.value:"ltr"}updateScrollStrategy(e){e!==this._scrollStrategy&&(this._disposeScrollStrategy(),this._scrollStrategy=e,this.hasAttached()&&(e.attach(this),e.enable()))}_updateElementDirection(){this._host.setAttribute("dir",this.getDirection())}_updateElementSize(){if(!this._pane)return;let e=this._pane.style;e.width=qa(this._config.width),e.height=qa(this._config.height),e.minWidth=qa(this._config.minWidth),e.minHeight=qa(this._config.minHeight),e.maxWidth=qa(this._config.maxWidth),e.maxHeight=qa(this._config.maxHeight)}_togglePointerEvents(e){this._pane.style.pointerEvents=e?"":"none"}_attachHost(){if(!this._host.parentElement){let e=this._config.usePopover?this._positionStrategy?.getPopoverInsertionPoint?.():null;WM(e)?e.after(this._host):e?.type==="parent"?e.element.appendChild(this._host):this._previousHostParent?.appendChild(this._host)}if(this._config.usePopover)try{this._host.showPopover()}catch{}}_attachBackdrop(){let e="cdk-overlay-backdrop-showing";this._backdropRef?.dispose(),this._backdropRef=new VM(this._document,this._renderer,this._ngZone,A=>{this._backdropClick.next(A)}),this._animationsDisabled&&this._backdropRef.element.classList.add("cdk-overlay-backdrop-noop-animation"),this._config.backdropClass&&this._toggleClasses(this._backdropRef.element,this._config.backdropClass,!0),this._config.usePopover?this._host.prepend(this._backdropRef.element):this._host.parentElement.insertBefore(this._backdropRef.element,this._host),!this._animationsDisabled&&typeof requestAnimationFrame<"u"?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>this._backdropRef?.element.classList.add(e))}):this._backdropRef.element.classList.add(e)}_updateStackingOrder(){!this._config.usePopover&&this._host.nextSibling&&this._host.parentNode.appendChild(this._host)}detachBackdrop(){this._animationsDisabled?(this._backdropRef?.dispose(),this._backdropRef=null):this._backdropRef?.detach()}_toggleClasses(e,A,i){let n=xB(A||[]).filter(o=>!!o);n.length&&(i?e.classList.add(...n):e.classList.remove(...n))}_detachContentWhenEmpty(){let e=!1;try{this._detachContentAfterRenderRef=Yn(()=>{e=!0,this._detachContent()},{injector:this._injector})}catch(A){if(e)throw A;this._detachContent()}globalThis.MutationObserver&&this._pane&&(this._detachContentMutationObserver||=new globalThis.MutationObserver(()=>{this._detachContent()}),this._detachContentMutationObserver.observe(this._pane,{childList:!0}))}_detachContent(){(!this._pane||!this._host||this._pane.children.length===0)&&(this._pane&&this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!1),this._host&&this._host.parentElement&&(this._previousHostParent=this._host.parentElement,this._host.remove()),this._completeDetachContent())}_completeDetachContent(){this._detachContentAfterRenderRef?.destroy(),this._detachContentAfterRenderRef=void 0,this._detachContentMutationObserver?.disconnect()}_disposeScrollStrategy(){let e=this._scrollStrategy;e?.disable(),e?.detach?.()}},WH="cdk-overlay-connected-position-bounding-box",q1A=/([A-Za-z%]+)$/;function q1(t,e){return new $6(e,t.get(Gs),t.get(Xt),t.get(Ii),t.get(e8))}var $6=class{_viewportRuler;_document;_platform;_overlayContainer;_overlayRef;_isInitialRender=!1;_lastBoundingBoxSize={width:0,height:0};_isPushed=!1;_canPush=!0;_growAfterOpen=!1;_hasFlexibleDimensions=!0;_positionLocked=!1;_originRect;_overlayRect;_viewportRect;_containerRect;_viewportMargin=0;_scrollables=[];_preferredPositions=[];_origin;_pane;_isDisposed=!1;_boundingBox=null;_lastPosition=null;_lastScrollVisibility=null;_positionChanges=new $A;_resizeSubscription=Jn.EMPTY;_offsetX=0;_offsetY=0;_transformOriginSelector;_appliedPanelClasses=[];_previousPushAmount=null;_popoverLocation="global";positionChanges=this._positionChanges;get positions(){return this._preferredPositions}constructor(e,A,i,n,o){this._viewportRuler=A,this._document=i,this._platform=n,this._overlayContainer=o,this.setOrigin(e)}attach(e){this._overlayRef&&this._overlayRef,this._validatePositions(),e.hostElement.classList.add(WH),this._overlayRef=e,this._boundingBox=e.hostElement,this._pane=e.overlayElement,this._isDisposed=!1,this._isInitialRender=!0,this._lastPosition=null,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(()=>{this._isInitialRender=!0,this.apply()})}apply(){if(this._isDisposed||!this._platform.isBrowser)return;if(!this._isInitialRender&&this._positionLocked&&this._lastPosition){this.reapplyLastPosition();return}this._clearPanelClasses(),this._resetOverlayElementStyles(),this._resetBoundingBoxStyles(),this._viewportRect=this._getNarrowedViewportRect(),this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._containerRect=this._getContainerRect();let e=this._originRect,A=this._overlayRect,i=this._viewportRect,n=this._containerRect,o=[],a;for(let r of this._preferredPositions){let s=this._getOriginPoint(e,n,r),g=this._getOverlayPoint(s,A,r),l=this._getOverlayFit(g,A,i,r);if(l.isCompletelyWithinViewport){this._isPushed=!1,this._applyPosition(r,s);return}if(this._canFitWithFlexibleDimensions(l,g,i)){o.push({position:r,origin:s,overlayRect:A,boundingBoxRect:this._calculateBoundingBoxRect(s,r)});continue}(!a||a.overlayFit.visibleAreas&&(s=l,r=g)}this._isPushed=!1,this._applyPosition(r.position,r.origin);return}if(this._canPush){this._isPushed=!0,this._applyPosition(a.position,a.originPoint);return}this._applyPosition(a.position,a.originPoint)}detach(){this._clearPanelClasses(),this._lastPosition=null,this._previousPushAmount=null,this._resizeSubscription.unsubscribe()}dispose(){this._isDisposed||(this._boundingBox&&j1(this._boundingBox.style,{top:"",left:"",right:"",bottom:"",height:"",width:"",alignItems:"",justifyContent:""}),this._pane&&this._resetOverlayElementStyles(),this._overlayRef&&this._overlayRef.hostElement.classList.remove(WH),this.detach(),this._positionChanges.complete(),this._overlayRef=this._boundingBox=null,this._isDisposed=!0)}reapplyLastPosition(){if(this._isDisposed||!this._platform.isBrowser)return;let e=this._lastPosition;e?(this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._viewportRect=this._getNarrowedViewportRect(),this._containerRect=this._getContainerRect(),this._applyPosition(e,this._getOriginPoint(this._originRect,this._containerRect,e))):this.apply()}withScrollableContainers(e){return this._scrollables=e,this}withPositions(e){return this._preferredPositions=e,e.indexOf(this._lastPosition)===-1&&(this._lastPosition=null),this._validatePositions(),this}withViewportMargin(e){return this._viewportMargin=e,this}withFlexibleDimensions(e=!0){return this._hasFlexibleDimensions=e,this}withGrowAfterOpen(e=!0){return this._growAfterOpen=e,this}withPush(e=!0){return this._canPush=e,this}withLockedPosition(e=!0){return this._positionLocked=e,this}setOrigin(e){return this._origin=e,this}withDefaultOffsetX(e){return this._offsetX=e,this}withDefaultOffsetY(e){return this._offsetY=e,this}withTransformOriginOn(e){return this._transformOriginSelector=e,this}withPopoverLocation(e){return this._popoverLocation=e,this}getPopoverInsertionPoint(){return this._popoverLocation==="global"?null:this._popoverLocation!=="inline"?this._popoverLocation:this._origin instanceof ge?this._origin.nativeElement:WM(this._origin)?this._origin:null}_getOriginPoint(e,A,i){let n;if(i.originX=="center")n=e.left+e.width/2;else{let a=this._isRtl()?e.right:e.left,r=this._isRtl()?e.left:e.right;n=i.originX=="start"?a:r}A.left<0&&(n-=A.left);let o;return i.originY=="center"?o=e.top+e.height/2:o=i.originY=="top"?e.top:e.bottom,A.top<0&&(o-=A.top),{x:n,y:o}}_getOverlayPoint(e,A,i){let n;i.overlayX=="center"?n=-A.width/2:i.overlayX==="start"?n=this._isRtl()?-A.width:0:n=this._isRtl()?0:-A.width;let o;return i.overlayY=="center"?o=-A.height/2:o=i.overlayY=="top"?0:-A.height,{x:e.x+n,y:e.y+o}}_getOverlayFit(e,A,i,n){let o=XH(A),{x:a,y:r}=e,s=this._getOffset(n,"x"),g=this._getOffset(n,"y");s&&(a+=s),g&&(r+=g);let l=0-a,C=a+o.width-i.width,I=0-r,d=r+o.height-i.height,B=this._subtractOverflows(o.width,l,C),E=this._subtractOverflows(o.height,I,d),Q=B*E;return{visibleArea:Q,isCompletelyWithinViewport:o.width*o.height===Q,fitsInViewportVertically:E===o.height,fitsInViewportHorizontally:B==o.width}}_canFitWithFlexibleDimensions(e,A,i){if(this._hasFlexibleDimensions){let n=i.bottom-A.y,o=i.right-A.x,a=ZH(this._overlayRef.getConfig().minHeight),r=ZH(this._overlayRef.getConfig().minWidth),s=e.fitsInViewportVertically||a!=null&&a<=n,g=e.fitsInViewportHorizontally||r!=null&&r<=o;return s&&g}return!1}_pushOverlayOnScreen(e,A,i){if(this._previousPushAmount&&this._positionLocked)return{x:e.x+this._previousPushAmount.x,y:e.y+this._previousPushAmount.y};let n=XH(A),o=this._viewportRect,a=Math.max(e.x+n.width-o.width,0),r=Math.max(e.y+n.height-o.height,0),s=Math.max(o.top-i.top-e.y,0),g=Math.max(o.left-i.left-e.x,0),l=0,C=0;return n.width<=o.width?l=g||-a:l=e.xB&&!this._isInitialRender&&!this._growAfterOpen&&(a=e.y-B/2)}let s=A.overlayX==="start"&&!n||A.overlayX==="end"&&n,g=A.overlayX==="end"&&!n||A.overlayX==="start"&&n,l,C,I;if(g)I=i.width-e.x+this._getViewportMarginStart()+this._getViewportMarginEnd(),l=e.x-this._getViewportMarginStart();else if(s)C=e.x,l=i.right-e.x-this._getViewportMarginEnd();else{let d=Math.min(i.right-e.x+i.left,e.x),B=this._lastBoundingBoxSize.width;l=d*2,C=e.x-d,l>B&&!this._isInitialRender&&!this._growAfterOpen&&(C=e.x-B/2)}return{top:a,left:C,bottom:r,right:I,width:l,height:o}}_setBoundingBoxStyles(e,A){let i=this._calculateBoundingBoxRect(e,A);!this._isInitialRender&&!this._growAfterOpen&&(i.height=Math.min(i.height,this._lastBoundingBoxSize.height),i.width=Math.min(i.width,this._lastBoundingBoxSize.width));let n={};if(this._hasExactPosition())n.top=n.left="0",n.bottom=n.right="auto",n.maxHeight=n.maxWidth="",n.width=n.height="100%";else{let o=this._overlayRef.getConfig().maxHeight,a=this._overlayRef.getConfig().maxWidth;n.width=qa(i.width),n.height=qa(i.height),n.top=qa(i.top)||"auto",n.bottom=qa(i.bottom)||"auto",n.left=qa(i.left)||"auto",n.right=qa(i.right)||"auto",A.overlayX==="center"?n.alignItems="center":n.alignItems=A.overlayX==="end"?"flex-end":"flex-start",A.overlayY==="center"?n.justifyContent="center":n.justifyContent=A.overlayY==="bottom"?"flex-end":"flex-start",o&&(n.maxHeight=qa(o)),a&&(n.maxWidth=qa(a))}this._lastBoundingBoxSize=i,j1(this._boundingBox.style,n)}_resetBoundingBoxStyles(){j1(this._boundingBox.style,{top:"0",left:"0",right:"0",bottom:"0",height:"",width:"",alignItems:"",justifyContent:""})}_resetOverlayElementStyles(){j1(this._pane.style,{top:"",left:"",bottom:"",right:"",position:"",transform:""})}_setOverlayElementStyles(e,A){let i={},n=this._hasExactPosition(),o=this._hasFlexibleDimensions,a=this._overlayRef.getConfig();if(n){let l=this._viewportRuler.getViewportScrollPosition();j1(i,this._getExactOverlayY(A,e,l)),j1(i,this._getExactOverlayX(A,e,l))}else i.position="static";let r="",s=this._getOffset(A,"x"),g=this._getOffset(A,"y");s&&(r+=`translateX(${s}px) `),g&&(r+=`translateY(${g}px)`),i.transform=r.trim(),a.maxHeight&&(n?i.maxHeight=qa(a.maxHeight):o&&(i.maxHeight="")),a.maxWidth&&(n?i.maxWidth=qa(a.maxWidth):o&&(i.maxWidth="")),j1(this._pane.style,i)}_getExactOverlayY(e,A,i){let n={top:"",bottom:""},o=this._getOverlayPoint(A,this._overlayRect,e);if(this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i)),e.overlayY==="bottom"){let a=this._document.documentElement.clientHeight;n.bottom=`${a-(o.y+this._overlayRect.height)}px`}else n.top=qa(o.y);return n}_getExactOverlayX(e,A,i){let n={left:"",right:""},o=this._getOverlayPoint(A,this._overlayRect,e);this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i));let a;if(this._isRtl()?a=e.overlayX==="end"?"left":"right":a=e.overlayX==="end"?"right":"left",a==="right"){let r=this._document.documentElement.clientWidth;n.right=`${r-(o.x+this._overlayRect.width)}px`}else n.left=qa(o.x);return n}_getScrollVisibility(){let e=this._getOriginRect(),A=this._pane.getBoundingClientRect(),i=this._scrollables.map(n=>n.getElementRef().nativeElement.getBoundingClientRect());return{isOriginClipped:qH(e,i),isOriginOutsideView:qM(e,i),isOverlayClipped:qH(A,i),isOverlayOutsideView:qM(A,i)}}_subtractOverflows(e,...A){return A.reduce((i,n)=>i-Math.max(n,0),e)}_getNarrowedViewportRect(){let e=this._document.documentElement.clientWidth,A=this._document.documentElement.clientHeight,i=this._viewportRuler.getViewportScrollPosition();return{top:i.top+this._getViewportMarginTop(),left:i.left+this._getViewportMarginStart(),right:i.left+e-this._getViewportMarginEnd(),bottom:i.top+A-this._getViewportMarginBottom(),width:e-this._getViewportMarginStart()-this._getViewportMarginEnd(),height:A-this._getViewportMarginTop()-this._getViewportMarginBottom()}}_isRtl(){return this._overlayRef.getDirection()==="rtl"}_hasExactPosition(){return!this._hasFlexibleDimensions||this._isPushed}_getOffset(e,A){return A==="x"?e.offsetX==null?this._offsetX:e.offsetX:e.offsetY==null?this._offsetY:e.offsetY}_validatePositions(){}_addPanelClasses(e){this._pane&&xB(e).forEach(A=>{A!==""&&this._appliedPanelClasses.indexOf(A)===-1&&(this._appliedPanelClasses.push(A),this._pane.classList.add(A))})}_clearPanelClasses(){this._pane&&(this._appliedPanelClasses.forEach(e=>{this._pane.classList.remove(e)}),this._appliedPanelClasses=[])}_getViewportMarginStart(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.start??0}_getViewportMarginEnd(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.end??0}_getViewportMarginTop(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.top??0}_getViewportMarginBottom(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.bottom??0}_getOriginRect(){let e=this._origin;if(e instanceof ge)return e.nativeElement.getBoundingClientRect();if(e instanceof Element)return e.getBoundingClientRect();let A=e.width||0,i=e.height||0;return{top:e.y,bottom:e.y+i,left:e.x,right:e.x+A,height:i,width:A}}_getContainerRect(){let e=this._overlayRef.getConfig().usePopover&&this._popoverLocation!=="global",A=this._overlayContainer.getContainerElement();e&&(A.style.display="block");let i=A.getBoundingClientRect();return e&&(A.style.display=""),i}};function j1(t,e){for(let A in e)e.hasOwnProperty(A)&&(t[A]=e[A]);return t}function ZH(t){if(typeof t!="number"&&t!=null){let[e,A]=t.split(q1A);return!A||A==="px"?parseFloat(e):null}return t||null}function XH(t){return{top:Math.floor(t.top),right:Math.floor(t.right),bottom:Math.floor(t.bottom),left:Math.floor(t.left),width:Math.floor(t.width),height:Math.floor(t.height)}}function V1A(t,e){return t===e?!0:t.isOriginClipped===e.isOriginClipped&&t.isOriginOutsideView===e.isOriginOutsideView&&t.isOverlayClipped===e.isOverlayClipped&&t.isOverlayOutsideView===e.isOverlayOutsideView}var $H="cdk-global-overlay-wrapper";function L2(t){return new A8}var A8=class{_overlayRef;_cssPosition="static";_topOffset="";_bottomOffset="";_alignItems="";_xPosition="";_xOffset="";_width="";_height="";_isDisposed=!1;attach(e){let A=e.getConfig();this._overlayRef=e,this._width&&!A.width&&e.updateSize({width:this._width}),this._height&&!A.height&&e.updateSize({height:this._height}),e.hostElement.classList.add($H),this._isDisposed=!1}top(e=""){return this._bottomOffset="",this._topOffset=e,this._alignItems="flex-start",this}left(e=""){return this._xOffset=e,this._xPosition="left",this}bottom(e=""){return this._topOffset="",this._bottomOffset=e,this._alignItems="flex-end",this}right(e=""){return this._xOffset=e,this._xPosition="right",this}start(e=""){return this._xOffset=e,this._xPosition="start",this}end(e=""){return this._xOffset=e,this._xPosition="end",this}width(e=""){return this._overlayRef?this._overlayRef.updateSize({width:e}):this._width=e,this}height(e=""){return this._overlayRef?this._overlayRef.updateSize({height:e}):this._height=e,this}centerHorizontally(e=""){return this.left(e),this._xPosition="center",this}centerVertically(e=""){return this.top(e),this._alignItems="center",this}apply(){if(!this._overlayRef||!this._overlayRef.hasAttached())return;let e=this._overlayRef.overlayElement.style,A=this._overlayRef.hostElement.style,i=this._overlayRef.getConfig(),{width:n,height:o,maxWidth:a,maxHeight:r}=i,s=(n==="100%"||n==="100vw")&&(!a||a==="100%"||a==="100vw"),g=(o==="100%"||o==="100vh")&&(!r||r==="100%"||r==="100vh"),l=this._xPosition,C=this._xOffset,I=this._overlayRef.getConfig().direction==="rtl",d="",B="",E="";s?E="flex-start":l==="center"?(E="center",I?B=C:d=C):I?l==="left"||l==="end"?(E="flex-end",d=C):(l==="right"||l==="start")&&(E="flex-start",B=C):l==="left"||l==="start"?(E="flex-start",d=C):(l==="right"||l==="end")&&(E="flex-end",B=C),e.position=this._cssPosition,e.marginLeft=s?"0":d,e.marginTop=g?"0":this._topOffset,e.marginBottom=this._bottomOffset,e.marginRight=s?"0":B,A.justifyContent=E,A.alignItems=g?"flex-start":this._alignItems}dispose(){if(this._isDisposed||!this._overlayRef)return;let e=this._overlayRef.overlayElement.style,A=this._overlayRef.hostElement,i=A.style;A.classList.remove($H),i.justifyContent=i.alignItems=e.marginTop=e.marginBottom=e.marginLeft=e.marginRight=e.position="",this._overlayRef=null,this._isDisposed=!0}},az=(()=>{class t{_injector=h(ft);constructor(){}global(){return L2()}flexibleConnectedTo(A){return q1(this._injector,A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),u4=new yA("OVERLAY_DEFAULT_CONFIG");function gc(t,e){t.get(Xn).load(oz);let A=t.get(e8),i=t.get(Xt),n=t.get(an),o=t.get(iC),a=t.get(xo),r=t.get(Fi,null,{optional:!0})||t.get(Kr).createRenderer(null,null),s=new rc(e),g=t.get(u4,null,{optional:!0})?.usePopover??!0;s.direction=s.direction||a.value,"showPopover"in i.body?s.usePopover=e?.usePopover??g:s.usePopover=!1;let l=i.createElement("div"),C=i.createElement("div");l.id=n.getId("cdk-overlay-"),l.classList.add("cdk-overlay-pane"),C.appendChild(l),s.usePopover&&(C.setAttribute("popover","manual"),C.classList.add("cdk-overlay-popover"));let I=s.usePopover?s.positionStrategy?.getPopoverInsertionPoint?.():null;return WM(I)?I.after(C):I?.type==="parent"?I.element.appendChild(C):A.getContainerElement().appendChild(C),new rE(new Q4(l,o,t),C,l,s,t.get(Oe),t.get(iz),i,t.get(n0),t.get(nz),e?.disableAnimations??t.get(p1,null,{optional:!0})==="NoopAnimations",t.get(Gr),r)}var t8=(()=>{class t{scrollStrategies=h(ez);_positionBuilder=h(az);_injector=h(ft);constructor(){}create(A){return gc(this._injector,A)}position(){return this._positionBuilder}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),W1A=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom"},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"}],Z1A=new yA("cdk-connected-overlay-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>dC(t)}}),sE=(()=>{class t{elementRef=h(ge);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdk-overlay-origin",""],["","overlay-origin",""],["","cdkOverlayOrigin",""]],exportAs:["cdkOverlayOrigin"]})}return t})(),rz=new yA("cdk-connected-overlay-default-config"),i8=(()=>{class t{_dir=h(xo,{optional:!0});_injector=h(ft);_overlayRef;_templatePortal;_backdropSubscription=Jn.EMPTY;_attachSubscription=Jn.EMPTY;_detachSubscription=Jn.EMPTY;_positionSubscription=Jn.EMPTY;_offsetX;_offsetY;_position;_scrollStrategyFactory=h(Z1A);_ngZone=h(Oe);origin;positions;positionStrategy;get offsetX(){return this._offsetX}set offsetX(A){this._offsetX=A,this._position&&this._updatePositionStrategy(this._position)}get offsetY(){return this._offsetY}set offsetY(A){this._offsetY=A,this._position&&this._updatePositionStrategy(this._position)}width;height;minWidth;minHeight;backdropClass;panelClass;viewportMargin=0;scrollStrategy;open=!1;disableClose=!1;transformOriginSelector;hasBackdrop=!1;lockPosition=!1;flexibleDimensions=!1;growAfterOpen=!1;push=!1;disposeOnNavigation=!1;usePopover;matchWidth=!1;set _config(A){typeof A!="string"&&this._assignConfig(A)}backdropClick=new WA;positionChange=new WA;attach=new WA;detach=new WA;overlayKeydown=new WA;overlayOutsideClick=new WA;constructor(){let A=h(Tn),i=h(Ho),n=h(rz,{optional:!0}),o=h(u4,{optional:!0});this.usePopover=o?.usePopover===!1?null:"global",this._templatePortal=new Is(A,i),this.scrollStrategy=this._scrollStrategyFactory(),n&&this._assignConfig(n)}get overlayRef(){return this._overlayRef}get dir(){return this._dir?this._dir.value:"ltr"}ngOnDestroy(){this._attachSubscription.unsubscribe(),this._detachSubscription.unsubscribe(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this._overlayRef?.dispose()}ngOnChanges(A){this._position&&(this._updatePositionStrategy(this._position),this._overlayRef?.updateSize({width:this._getWidth(),minWidth:this.minWidth,height:this.height,minHeight:this.minHeight}),A.origin&&this.open&&this._position.apply()),A.open&&(this.open?this.attachOverlay():this.detachOverlay())}_createOverlay(){(!this.positions||!this.positions.length)&&(this.positions=W1A);let A=this._overlayRef=gc(this._injector,this._buildConfig());this._attachSubscription=A.attachments().subscribe(()=>this.attach.emit()),this._detachSubscription=A.detachments().subscribe(()=>this.detach.emit()),A.keydownEvents().subscribe(i=>{this.overlayKeydown.next(i),i.keyCode===27&&!this.disableClose&&!ma(i)&&(i.preventDefault(),this.detachOverlay())}),this._overlayRef.outsidePointerEvents().subscribe(i=>{let n=this._getOriginElement(),o=Jr(i);(!n||n!==o&&!n.contains(o))&&this.overlayOutsideClick.next(i)})}_buildConfig(){let A=this._position=this.positionStrategy||this._createPositionStrategy(),i=new rc({direction:this._dir||"ltr",positionStrategy:A,scrollStrategy:this.scrollStrategy,hasBackdrop:this.hasBackdrop,disposeOnNavigation:this.disposeOnNavigation,usePopover:!!this.usePopover});return(this.height||this.height===0)&&(i.height=this.height),(this.minWidth||this.minWidth===0)&&(i.minWidth=this.minWidth),(this.minHeight||this.minHeight===0)&&(i.minHeight=this.minHeight),this.backdropClass&&(i.backdropClass=this.backdropClass),this.panelClass&&(i.panelClass=this.panelClass),i}_updatePositionStrategy(A){let i=this.positions.map(n=>({originX:n.originX,originY:n.originY,overlayX:n.overlayX,overlayY:n.overlayY,offsetX:n.offsetX||this.offsetX,offsetY:n.offsetY||this.offsetY,panelClass:n.panelClass||void 0}));return A.setOrigin(this._getOrigin()).withPositions(i).withFlexibleDimensions(this.flexibleDimensions).withPush(this.push).withGrowAfterOpen(this.growAfterOpen).withViewportMargin(this.viewportMargin).withLockedPosition(this.lockPosition).withTransformOriginOn(this.transformOriginSelector).withPopoverLocation(this.usePopover===null?"global":this.usePopover)}_createPositionStrategy(){let A=q1(this._injector,this._getOrigin());return this._updatePositionStrategy(A),A}_getOrigin(){return this.origin instanceof sE?this.origin.elementRef:this.origin}_getOriginElement(){return this.origin instanceof sE?this.origin.elementRef.nativeElement:this.origin instanceof ge?this.origin.nativeElement:typeof Element<"u"&&this.origin instanceof Element?this.origin:null}_getWidth(){return this.width?this.width:this.matchWidth?this._getOriginElement()?.getBoundingClientRect?.().width:void 0}attachOverlay(){this._overlayRef||this._createOverlay();let A=this._overlayRef;A.getConfig().hasBackdrop=this.hasBackdrop,A.updateSize({width:this._getWidth()}),A.hasAttached()||A.attach(this._templatePortal),this.hasBackdrop?this._backdropSubscription=A.backdropClick().subscribe(i=>this.backdropClick.emit(i)):this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this.positionChange.observers.length>0&&(this._positionSubscription=this._position.positionChanges.pipe(sU(()=>this.positionChange.observers.length>0)).subscribe(i=>{this._ngZone.run(()=>this.positionChange.emit(i)),this.positionChange.observers.length===0&&this._positionSubscription.unsubscribe()})),this.open=!0}detachOverlay(){this._overlayRef?.detach(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this.open=!1}_assignConfig(A){this.origin=A.origin??this.origin,this.positions=A.positions??this.positions,this.positionStrategy=A.positionStrategy??this.positionStrategy,this.offsetX=A.offsetX??this.offsetX,this.offsetY=A.offsetY??this.offsetY,this.width=A.width??this.width,this.height=A.height??this.height,this.minWidth=A.minWidth??this.minWidth,this.minHeight=A.minHeight??this.minHeight,this.backdropClass=A.backdropClass??this.backdropClass,this.panelClass=A.panelClass??this.panelClass,this.viewportMargin=A.viewportMargin??this.viewportMargin,this.scrollStrategy=A.scrollStrategy??this.scrollStrategy,this.disableClose=A.disableClose??this.disableClose,this.transformOriginSelector=A.transformOriginSelector??this.transformOriginSelector,this.hasBackdrop=A.hasBackdrop??this.hasBackdrop,this.lockPosition=A.lockPosition??this.lockPosition,this.flexibleDimensions=A.flexibleDimensions??this.flexibleDimensions,this.growAfterOpen=A.growAfterOpen??this.growAfterOpen,this.push=A.push??this.push,this.disposeOnNavigation=A.disposeOnNavigation??this.disposeOnNavigation,this.usePopover=A.usePopover??this.usePopover,this.matchWidth=A.matchWidth??this.matchWidth}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdk-connected-overlay",""],["","connected-overlay",""],["","cdkConnectedOverlay",""]],inputs:{origin:[0,"cdkConnectedOverlayOrigin","origin"],positions:[0,"cdkConnectedOverlayPositions","positions"],positionStrategy:[0,"cdkConnectedOverlayPositionStrategy","positionStrategy"],offsetX:[0,"cdkConnectedOverlayOffsetX","offsetX"],offsetY:[0,"cdkConnectedOverlayOffsetY","offsetY"],width:[0,"cdkConnectedOverlayWidth","width"],height:[0,"cdkConnectedOverlayHeight","height"],minWidth:[0,"cdkConnectedOverlayMinWidth","minWidth"],minHeight:[0,"cdkConnectedOverlayMinHeight","minHeight"],backdropClass:[0,"cdkConnectedOverlayBackdropClass","backdropClass"],panelClass:[0,"cdkConnectedOverlayPanelClass","panelClass"],viewportMargin:[0,"cdkConnectedOverlayViewportMargin","viewportMargin"],scrollStrategy:[0,"cdkConnectedOverlayScrollStrategy","scrollStrategy"],open:[0,"cdkConnectedOverlayOpen","open"],disableClose:[0,"cdkConnectedOverlayDisableClose","disableClose"],transformOriginSelector:[0,"cdkConnectedOverlayTransformOriginOn","transformOriginSelector"],hasBackdrop:[2,"cdkConnectedOverlayHasBackdrop","hasBackdrop",he],lockPosition:[2,"cdkConnectedOverlayLockPosition","lockPosition",he],flexibleDimensions:[2,"cdkConnectedOverlayFlexibleDimensions","flexibleDimensions",he],growAfterOpen:[2,"cdkConnectedOverlayGrowAfterOpen","growAfterOpen",he],push:[2,"cdkConnectedOverlayPush","push",he],disposeOnNavigation:[2,"cdkConnectedOverlayDisposeOnNavigation","disposeOnNavigation",he],usePopover:[0,"cdkConnectedOverlayUsePopover","usePopover"],matchWidth:[2,"cdkConnectedOverlayMatchWidth","matchWidth",he],_config:[0,"cdkConnectedOverlay","_config"]},outputs:{backdropClick:"backdropClick",positionChange:"positionChange",attach:"attach",detach:"detach",overlayKeydown:"overlayKeydown",overlayOutsideClick:"overlayOutsideClick"},exportAs:["cdkConnectedOverlay"],features:[ti]})}return t})(),ll=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[t8],imports:[Gi,d0,q6,q6]})}return t})();function X1A(t,e){}var G2=class{viewContainerRef;injector;id;role="dialog";panelClass="";hasBackdrop=!0;backdropClass="";disableClose=!1;closePredicate;width="";height="";minWidth;minHeight;maxWidth;maxHeight;positionStrategy;data=null;direction;ariaDescribedBy=null;ariaLabelledBy=null;ariaLabel=null;ariaModal=!1;autoFocus="first-tabbable";restoreFocus=!0;scrollStrategy;closeOnNavigation=!0;closeOnDestroy=!0;closeOnOverlayDetachments=!0;disableAnimations=!1;providers;container;templateContext};var XM=(()=>{class t extends _2{_elementRef=h(ge);_focusTrapFactory=h(yu);_config;_interactivityChecker=h(NB);_ngZone=h(Oe);_focusMonitor=h(nr);_renderer=h(Fi);_changeDetectorRef=h(mt);_injector=h(ft);_platform=h(Ii);_document=h(Xt);_portalOutlet;_focusTrapped=new $A;_focusTrap=null;_elementFocusedBeforeDialogWasOpened=null;_closeInteractionType=null;_ariaLabelledByQueue=[];_isDestroyed=!1;constructor(){super(),this._config=h(G2,{optional:!0})||new G2,this._config.ariaLabelledBy&&this._ariaLabelledByQueue.push(this._config.ariaLabelledBy)}_addAriaLabelledBy(A){this._ariaLabelledByQueue.push(A),this._changeDetectorRef.markForCheck()}_removeAriaLabelledBy(A){let i=this._ariaLabelledByQueue.indexOf(A);i>-1&&(this._ariaLabelledByQueue.splice(i,1),this._changeDetectorRef.markForCheck())}_contentAttached(){this._initializeFocusTrap(),this._captureInitialFocus()}_captureInitialFocus(){this._trapFocus()}ngOnDestroy(){this._focusTrapped.complete(),this._isDestroyed=!0,this._restoreFocus()}attachComponentPortal(A){this._portalOutlet.hasAttached();let i=this._portalOutlet.attachComponentPortal(A);return this._contentAttached(),i}attachTemplatePortal(A){this._portalOutlet.hasAttached();let i=this._portalOutlet.attachTemplatePortal(A);return this._contentAttached(),i}attachDomPortal=A=>{this._portalOutlet.hasAttached();let i=this._portalOutlet.attachDomPortal(A);return this._contentAttached(),i};_recaptureFocus(){this._containsFocus()||this._trapFocus()}_forceFocus(A,i){this._interactivityChecker.isFocusable(A)||(A.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let n=()=>{o(),a(),A.removeAttribute("tabindex")},o=this._renderer.listen(A,"blur",n),a=this._renderer.listen(A,"mousedown",n)})),A.focus(i)}_focusByCssSelector(A,i){let n=this._elementRef.nativeElement.querySelector(A);n&&this._forceFocus(n,i)}_trapFocus(A){this._isDestroyed||Yn(()=>{let i=this._elementRef.nativeElement;switch(this._config.autoFocus){case!1:case"dialog":this._containsFocus()||i.focus(A);break;case!0:case"first-tabbable":this._focusTrap?.focusInitialElement(A)||this._focusDialogContainer(A);break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]',A);break;default:this._focusByCssSelector(this._config.autoFocus,A);break}this._focusTrapped.next()},{injector:this._injector})}_restoreFocus(){let A=this._config.restoreFocus,i=null;if(typeof A=="string"?i=this._document.querySelector(A):typeof A=="boolean"?i=A?this._elementFocusedBeforeDialogWasOpened:null:A&&(i=A),this._config.restoreFocus&&i&&typeof i.focus=="function"){let n=mu(),o=this._elementRef.nativeElement;(!n||n===this._document.body||n===o||o.contains(n))&&(this._focusMonitor?(this._focusMonitor.focusVia(i,this._closeInteractionType),this._closeInteractionType=null):i.focus())}this._focusTrap&&this._focusTrap.destroy()}_focusDialogContainer(A){this._elementRef.nativeElement.focus?.(A)}_containsFocus(){let A=this._elementRef.nativeElement,i=mu();return A===i||A.contains(i)}_initializeFocusTrap(){this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._document&&(this._elementFocusedBeforeDialogWasOpened=mu()))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-dialog-container"]],viewQuery:function(i,n){if(i&1&&ai(Jg,7),i&2){let o;ce(o=Ce())&&(n._portalOutlet=o.first)}},hostAttrs:["tabindex","-1",1,"cdk-dialog-container"],hostVars:6,hostBindings:function(i,n){i&2&&ie("id",n._config.id||null)("role",n._config.role)("aria-modal",n._config.ariaModal)("aria-labelledby",n._config.ariaLabel?null:n._ariaLabelledByQueue[0])("aria-label",n._config.ariaLabel)("aria-describedby",n._config.ariaDescribedBy||null)},features:[dt],decls:1,vars:0,consts:[["cdkPortalOutlet",""]],template:function(i,n){i&1&&vt(0,X1A,0,0,"ng-template",0)},dependencies:[Jg],styles:[`.cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit} +`],encapsulation:2})}return t})(),f4=class{overlayRef;config;componentInstance=null;componentRef=null;containerInstance;disableClose;closed=new $A;backdropClick;keydownEvents;outsidePointerEvents;id;_detachSubscription;constructor(e,A){this.overlayRef=e,this.config=A,this.disableClose=A.disableClose,this.backdropClick=e.backdropClick(),this.keydownEvents=e.keydownEvents(),this.outsidePointerEvents=e.outsidePointerEvents(),this.id=A.id,this.keydownEvents.subscribe(i=>{i.keyCode===27&&!this.disableClose&&!ma(i)&&(i.preventDefault(),this.close(void 0,{focusOrigin:"keyboard"}))}),this.backdropClick.subscribe(()=>{!this.disableClose&&this._canClose()?this.close(void 0,{focusOrigin:"mouse"}):this.containerInstance._recaptureFocus?.()}),this._detachSubscription=e.detachments().subscribe(()=>{A.closeOnOverlayDetachments!==!1&&this.close()})}close(e,A){if(this._canClose(e)){let i=this.closed;this.containerInstance._closeInteractionType=A?.focusOrigin||"program",this._detachSubscription.unsubscribe(),this.overlayRef.dispose(),i.next(e),i.complete(),this.componentInstance=this.containerInstance=null}}updatePosition(){return this.overlayRef.updatePosition(),this}updateSize(e="",A=""){return this.overlayRef.updateSize({width:e,height:A}),this}addPanelClass(e){return this.overlayRef.addPanelClass(e),this}removePanelClass(e){return this.overlayRef.removePanelClass(e),this}_canClose(e){let A=this.config;return!!this.containerInstance&&(!A.closePredicate||A.closePredicate(e,A,this.componentInstance))}},$1A=new yA("DialogScrollStrategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>gE(t)}}),AdA=new yA("DialogData"),edA=new yA("DefaultDialogConfig");function tdA(t){let e=jA(t),A=new WA;return{valueSignal:e,get value(){return e()},change:A,ngOnDestroy(){A.complete()}}}var $M=(()=>{class t{_injector=h(ft);_defaultOptions=h(edA,{optional:!0});_parentDialog=h(t,{optional:!0,skipSelf:!0});_overlayContainer=h(e8);_idGenerator=h(an);_openDialogsAtThisLevel=[];_afterAllClosedAtThisLevel=new $A;_afterOpenedAtThisLevel=new $A;_ariaHiddenElements=new Map;_scrollStrategy=h($1A);get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}afterAllClosed=t0(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(cn(void 0)));constructor(){}open(A,i){let n=this._defaultOptions||new G2;i=gA(gA({},n),i),i.id=i.id||this._idGenerator.getId("cdk-dialog-"),i.id&&this.getDialogById(i.id);let o=this._getOverlayConfig(i),a=gc(this._injector,o),r=new f4(a,i),s=this._attachContainer(a,r,i);if(r.containerInstance=s,!this.openDialogs.length){let g=this._overlayContainer.getContainerElement();s._focusTrapped?s._focusTrapped.pipe(oo(1)).subscribe(()=>{this._hideNonDialogContentFromAssistiveTechnology(g)}):this._hideNonDialogContentFromAssistiveTechnology(g)}return this._attachDialogContent(A,r,s,i),this.openDialogs.push(r),r.closed.subscribe(()=>this._removeOpenDialog(r,!0)),this.afterOpened.next(r),r}closeAll(){ZM(this.openDialogs,A=>A.close())}getDialogById(A){return this.openDialogs.find(i=>i.id===A)}ngOnDestroy(){ZM(this._openDialogsAtThisLevel,A=>{A.config.closeOnDestroy===!1&&this._removeOpenDialog(A,!1)}),ZM(this._openDialogsAtThisLevel,A=>A.close()),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete(),this._openDialogsAtThisLevel=[]}_getOverlayConfig(A){let i=new rc({positionStrategy:A.positionStrategy||L2().centerHorizontally().centerVertically(),scrollStrategy:A.scrollStrategy||this._scrollStrategy(),panelClass:A.panelClass,hasBackdrop:A.hasBackdrop,direction:A.direction,minWidth:A.minWidth,minHeight:A.minHeight,maxWidth:A.maxWidth,maxHeight:A.maxHeight,width:A.width,height:A.height,disposeOnNavigation:A.closeOnNavigation,disableAnimations:A.disableAnimations});return A.backdropClass&&(i.backdropClass=A.backdropClass),i}_attachContainer(A,i,n){let o=n.injector||n.viewContainerRef?.injector,a=[{provide:G2,useValue:n},{provide:f4,useValue:i},{provide:rE,useValue:A}],r;n.container?typeof n.container=="function"?r=n.container:(r=n.container.type,a.push(...n.container.providers(n))):r=XM;let s=new Ug(r,n.viewContainerRef,ft.create({parent:o||this._injector,providers:a}));return A.attach(s).instance}_attachDialogContent(A,i,n,o){if(A instanceof Tn){let a=this._createInjector(o,i,n,void 0),r={$implicit:o.data,dialogRef:i};o.templateContext&&(r=gA(gA({},r),typeof o.templateContext=="function"?o.templateContext():o.templateContext)),n.attachTemplatePortal(new Is(A,null,r,a))}else{let a=this._createInjector(o,i,n,this._injector),r=n.attachComponentPortal(new Ug(A,o.viewContainerRef,a));i.componentRef=r,i.componentInstance=r.instance}}_createInjector(A,i,n,o){let a=A.injector||A.viewContainerRef?.injector,r=[{provide:AdA,useValue:A.data},{provide:f4,useValue:i}];return A.providers&&(typeof A.providers=="function"?r.push(...A.providers(i,A,n)):r.push(...A.providers)),A.direction&&(!a||!a.get(xo,null,{optional:!0}))&&r.push({provide:xo,useValue:tdA(A.direction)}),ft.create({parent:a||o,providers:r})}_removeOpenDialog(A,i){let n=this.openDialogs.indexOf(A);n>-1&&(this.openDialogs.splice(n,1),this.openDialogs.length||(this._ariaHiddenElements.forEach((o,a)=>{o?a.setAttribute("aria-hidden",o):a.removeAttribute("aria-hidden")}),this._ariaHiddenElements.clear(),i&&this._getAfterAllClosed().next()))}_hideNonDialogContentFromAssistiveTechnology(A){if(A.parentElement){let i=A.parentElement.children;for(let n=i.length-1;n>-1;n--){let o=i[n];o!==A&&o.nodeName!=="SCRIPT"&&o.nodeName!=="STYLE"&&!o.hasAttribute("aria-live")&&!o.hasAttribute("popover")&&(this._ariaHiddenElements.set(o,o.getAttribute("aria-hidden")),o.setAttribute("aria-hidden","true"))}}}_getAfterAllClosed(){let A=this._parentDialog;return A?A._getAfterAllClosed():this._afterAllClosedAtThisLevel}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function ZM(t,e){let A=t.length;for(;A--;)e(t[A])}var sz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[$M],imports:[ll,d0,bu,d0]})}return t})();function idA(t,e){}var o8=class{viewContainerRef;injector;id;role="dialog";panelClass="";hasBackdrop=!0;backdropClass="";disableClose=!1;closePredicate;width="";height="";minWidth;minHeight;maxWidth;maxHeight;position;data=null;direction;ariaDescribedBy=null;ariaLabelledBy=null;ariaLabel=null;ariaModal=!1;autoFocus="first-tabbable";restoreFocus=!0;delayFocusTrap=!0;scrollStrategy;closeOnNavigation=!0;enterAnimationDuration;exitAnimationDuration},Ak="mdc-dialog--open",gz="mdc-dialog--opening",lz="mdc-dialog--closing",ndA=150,odA=75,adA=(()=>{class t extends XM{_animationStateChanged=new WA;_animationsEnabled=!qi();_actionSectionCount=0;_hostElement=this._elementRef.nativeElement;_enterAnimationDuration=this._animationsEnabled?Cz(this._config.enterAnimationDuration)??ndA:0;_exitAnimationDuration=this._animationsEnabled?Cz(this._config.exitAnimationDuration)??odA:0;_animationTimer=null;_contentAttached(){super._contentAttached(),this._startOpenAnimation()}_startOpenAnimation(){this._animationStateChanged.emit({state:"opening",totalTime:this._enterAnimationDuration}),this._animationsEnabled?(this._hostElement.style.setProperty(cz,`${this._enterAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(gz,Ak)),this._waitForAnimationToComplete(this._enterAnimationDuration,this._finishDialogOpen)):(this._hostElement.classList.add(Ak),Promise.resolve().then(()=>this._finishDialogOpen()))}_startExitAnimation(){this._animationStateChanged.emit({state:"closing",totalTime:this._exitAnimationDuration}),this._hostElement.classList.remove(Ak),this._animationsEnabled?(this._hostElement.style.setProperty(cz,`${this._exitAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(lz)),this._waitForAnimationToComplete(this._exitAnimationDuration,this._finishDialogClose)):Promise.resolve().then(()=>this._finishDialogClose())}_updateActionSectionCount(A){this._actionSectionCount+=A,this._changeDetectorRef.markForCheck()}_finishDialogOpen=()=>{this._clearAnimationClasses(),this._openAnimationDone(this._enterAnimationDuration)};_finishDialogClose=()=>{this._clearAnimationClasses(),this._animationStateChanged.emit({state:"closed",totalTime:this._exitAnimationDuration})};_clearAnimationClasses(){this._hostElement.classList.remove(gz,lz)}_waitForAnimationToComplete(A,i){this._animationTimer!==null&&clearTimeout(this._animationTimer),this._animationTimer=setTimeout(i,A)}_requestAnimationFrame(A){this._ngZone.runOutsideAngular(()=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(A):A()})}_captureInitialFocus(){this._config.delayFocusTrap||this._trapFocus()}_openAnimationDone(A){this._config.delayFocusTrap&&this._trapFocus(),this._animationStateChanged.next({state:"opened",totalTime:A})}ngOnDestroy(){super.ngOnDestroy(),this._animationTimer!==null&&clearTimeout(this._animationTimer)}attachComponentPortal(A){let i=super.attachComponentPortal(A);return i.location.nativeElement.classList.add("mat-mdc-dialog-component-host"),i}static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-dialog-container"]],hostAttrs:["tabindex","-1",1,"mat-mdc-dialog-container","mdc-dialog"],hostVars:10,hostBindings:function(i,n){i&2&&(vo("id",n._config.id),ie("aria-modal",n._config.ariaModal)("role",n._config.role)("aria-labelledby",n._config.ariaLabel?null:n._ariaLabelledByQueue[0])("aria-label",n._config.ariaLabel)("aria-describedby",n._config.ariaDescribedBy||null),ae("_mat-animation-noopable",!n._animationsEnabled)("mat-mdc-dialog-container-with-actions",n._actionSectionCount>0))},features:[dt],decls:3,vars:0,consts:[[1,"mat-mdc-dialog-inner-container","mdc-dialog__container"],[1,"mat-mdc-dialog-surface","mdc-dialog__surface"],["cdkPortalOutlet",""]],template:function(i,n){i&1&&(m(0,"div",0)(1,"div",1),vt(2,idA,0,0,"ng-template",2),w()())},dependencies:[Jg],styles:[`.mat-mdc-dialog-container{width:100%;height:100%;display:block;box-sizing:border-box;max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;outline:0}.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-max-width, 560px);min-width:var(--mat-dialog-container-min-width, 280px)}@media(max-width: 599px){.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-small-max-width, calc(100vw - 32px))}}.mat-mdc-dialog-inner-container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;opacity:0;transition:opacity linear var(--mat-dialog-transition-duration, 0ms);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mdc-dialog--closing .mat-mdc-dialog-inner-container{transition:opacity 75ms linear;transform:none}.mdc-dialog--open .mat-mdc-dialog-inner-container{opacity:1}._mat-animation-noopable .mat-mdc-dialog-inner-container{transition:none}.mat-mdc-dialog-surface{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;width:100%;height:100%;position:relative;overflow-y:auto;outline:0;transform:scale(0.8);transition:transform var(--mat-dialog-transition-duration, 0ms) cubic-bezier(0, 0, 0.2, 1);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;box-shadow:var(--mat-dialog-container-elevation-shadow, none);border-radius:var(--mat-dialog-container-shape, var(--mat-sys-corner-extra-large, 4px));background-color:var(--mat-dialog-container-color, var(--mat-sys-surface, white))}[dir=rtl] .mat-mdc-dialog-surface{text-align:right}.mdc-dialog--open .mat-mdc-dialog-surface,.mdc-dialog--closing .mat-mdc-dialog-surface{transform:none}._mat-animation-noopable .mat-mdc-dialog-surface{transition:none}.mat-mdc-dialog-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mat-mdc-dialog-title{display:block;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:var(--mat-dialog-headline-padding, 6px 24px 13px)}.mat-mdc-dialog-title::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}[dir=rtl] .mat-mdc-dialog-title{text-align:right}.mat-mdc-dialog-container .mat-mdc-dialog-title{color:var(--mat-dialog-subhead-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-dialog-subhead-font, var(--mat-sys-headline-small-font, inherit));line-height:var(--mat-dialog-subhead-line-height, var(--mat-sys-headline-small-line-height, 1.5rem));font-size:var(--mat-dialog-subhead-size, var(--mat-sys-headline-small-size, 1rem));font-weight:var(--mat-dialog-subhead-weight, var(--mat-sys-headline-small-weight, 400));letter-spacing:var(--mat-dialog-subhead-tracking, var(--mat-sys-headline-small-tracking, 0.03125em))}.mat-mdc-dialog-content{display:block;flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;max-height:65vh}.mat-mdc-dialog-content>:first-child{margin-top:0}.mat-mdc-dialog-content>:last-child{margin-bottom:0}.mat-mdc-dialog-container .mat-mdc-dialog-content{color:var(--mat-dialog-supporting-text-color, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, 0.6)));font-family:var(--mat-dialog-supporting-text-font, var(--mat-sys-body-medium-font, inherit));line-height:var(--mat-dialog-supporting-text-line-height, var(--mat-sys-body-medium-line-height, 1.5rem));font-size:var(--mat-dialog-supporting-text-size, var(--mat-sys-body-medium-size, 1rem));font-weight:var(--mat-dialog-supporting-text-weight, var(--mat-sys-body-medium-weight, 400));letter-spacing:var(--mat-dialog-supporting-text-tracking, var(--mat-sys-body-medium-tracking, 0.03125em))}.mat-mdc-dialog-container .mat-mdc-dialog-content{padding:var(--mat-dialog-content-padding, 20px 24px)}.mat-mdc-dialog-container-with-actions .mat-mdc-dialog-content{padding:var(--mat-dialog-with-actions-content-padding, 20px 24px 0)}.mat-mdc-dialog-container .mat-mdc-dialog-title+.mat-mdc-dialog-content{padding-top:0}.mat-mdc-dialog-actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;box-sizing:border-box;min-height:52px;margin:0;border-top:1px solid rgba(0,0,0,0);padding:var(--mat-dialog-actions-padding, 16px 24px);justify-content:var(--mat-dialog-actions-alignment, flex-end)}@media(forced-colors: active){.mat-mdc-dialog-actions{border-top-color:CanvasText}}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-start,.mat-mdc-dialog-actions[align=start]{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}.mat-mdc-dialog-component-host{display:contents} +`],encapsulation:2})}return t})(),cz="--mat-dialog-transition-duration";function Cz(t){return t==null?null:typeof t=="number"?t:t.endsWith("ms")?tg(t.substring(0,t.length-2)):t.endsWith("s")?tg(t.substring(0,t.length-1))*1e3:t==="0"?0:null}var n8=(function(t){return t[t.OPEN=0]="OPEN",t[t.CLOSING=1]="CLOSING",t[t.CLOSED=2]="CLOSED",t})(n8||{}),Po=class{_ref;_config;_containerInstance;componentInstance;componentRef=null;disableClose;id;_afterOpened=new Pl(1);_beforeClosed=new Pl(1);_result;_closeFallbackTimeout;_state=n8.OPEN;_closeInteractionType;constructor(e,A,i){this._ref=e,this._config=A,this._containerInstance=i,this.disableClose=A.disableClose,this.id=e.id,e.addPanelClass("mat-mdc-dialog-panel"),i._animationStateChanged.pipe(Ze(n=>n.state==="opened"),oo(1)).subscribe(()=>{this._afterOpened.next(),this._afterOpened.complete()}),i._animationStateChanged.pipe(Ze(n=>n.state==="closed"),oo(1)).subscribe(()=>{clearTimeout(this._closeFallbackTimeout),this._finishDialogClose()}),e.overlayRef.detachments().subscribe(()=>{this._beforeClosed.next(this._result),this._beforeClosed.complete(),this._finishDialogClose()}),hi(this.backdropClick(),this.keydownEvents().pipe(Ze(n=>n.keyCode===27&&!this.disableClose&&!ma(n)))).subscribe(n=>{this.disableClose||(n.preventDefault(),Iz(this,n.type==="keydown"?"keyboard":"mouse"))})}close(e){let A=this._config.closePredicate;A&&!A(e,this._config,this.componentInstance)||(this._result=e,this._containerInstance._animationStateChanged.pipe(Ze(i=>i.state==="closing"),oo(1)).subscribe(i=>{this._beforeClosed.next(e),this._beforeClosed.complete(),this._ref.overlayRef.detachBackdrop(),this._closeFallbackTimeout=setTimeout(()=>this._finishDialogClose(),i.totalTime+100)}),this._state=n8.CLOSING,this._containerInstance._startExitAnimation())}afterOpened(){return this._afterOpened}afterClosed(){return this._ref.closed}beforeClosed(){return this._beforeClosed}backdropClick(){return this._ref.backdropClick}keydownEvents(){return this._ref.keydownEvents}updatePosition(e){let A=this._ref.config.positionStrategy;return e&&(e.left||e.right)?e.left?A.left(e.left):A.right(e.right):A.centerHorizontally(),e&&(e.top||e.bottom)?e.top?A.top(e.top):A.bottom(e.bottom):A.centerVertically(),this._ref.updatePosition(),this}updateSize(e="",A=""){return this._ref.updateSize(e,A),this}addPanelClass(e){return this._ref.addPanelClass(e),this}removePanelClass(e){return this._ref.removePanelClass(e),this}getState(){return this._state}_finishDialogClose(){this._state=n8.CLOSED,this._ref.close(this._result,{focusOrigin:this._closeInteractionType}),this.componentInstance=null}};function Iz(t,e,A){return t._closeInteractionType=e,t.close(A)}var ka=new yA("MatMdcDialogData"),rdA=new yA("mat-mdc-dialog-default-options"),sdA=new yA("mat-mdc-dialog-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>gE(t)}}),Ks=(()=>{class t{_defaultOptions=h(rdA,{optional:!0});_scrollStrategy=h(sdA);_parentDialog=h(t,{optional:!0,skipSelf:!0});_idGenerator=h(an);_injector=h(ft);_dialog=h($M);_animationsDisabled=qi();_openDialogsAtThisLevel=[];_afterAllClosedAtThisLevel=new $A;_afterOpenedAtThisLevel=new $A;dialogConfigClass=o8;_dialogRefConstructor;_dialogContainerType;_dialogDataToken;get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}_getAfterAllClosed(){let A=this._parentDialog;return A?A._getAfterAllClosed():this._afterAllClosedAtThisLevel}afterAllClosed=t0(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(cn(void 0)));constructor(){this._dialogRefConstructor=Po,this._dialogContainerType=adA,this._dialogDataToken=ka}open(A,i){let n;i=gA(gA({},this._defaultOptions||new o8),i),i.id=i.id||this._idGenerator.getId("mat-mdc-dialog-"),i.scrollStrategy=i.scrollStrategy||this._scrollStrategy();let o=this._dialog.open(A,be(gA({},i),{positionStrategy:L2(this._injector).centerHorizontally().centerVertically(),disableClose:!0,closePredicate:void 0,closeOnDestroy:!1,closeOnOverlayDetachments:!1,disableAnimations:this._animationsDisabled||i.enterAnimationDuration?.toLocaleString()==="0"||i.exitAnimationDuration?.toString()==="0",container:{type:this._dialogContainerType,providers:()=>[{provide:this.dialogConfigClass,useValue:i},{provide:G2,useValue:i}]},templateContext:()=>({dialogRef:n}),providers:(a,r,s)=>(n=new this._dialogRefConstructor(a,i,s),n.updatePosition(i?.position),[{provide:this._dialogContainerType,useValue:s},{provide:this._dialogDataToken,useValue:r.data},{provide:this._dialogRefConstructor,useValue:n}])}));return n.componentRef=o.componentRef,n.componentInstance=o.componentInstance,this.openDialogs.push(n),this.afterOpened.next(n),n.afterClosed().subscribe(()=>{let a=this.openDialogs.indexOf(n);a>-1&&(this.openDialogs.splice(a,1),this.openDialogs.length||this._getAfterAllClosed().next())}),n}closeAll(){this._closeDialogs(this.openDialogs)}getDialogById(A){return this.openDialogs.find(i=>i.id===A)}ngOnDestroy(){this._closeDialogs(this._openDialogsAtThisLevel),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete()}_closeDialogs(A){let i=A.length;for(;i--;)A[i].close()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),K2=(()=>{class t{dialogRef=h(Po,{optional:!0});_elementRef=h(ge);_dialog=h(Ks);ariaLabel;type="button";dialogResult;_matDialogClose;constructor(){}ngOnInit(){this.dialogRef||(this.dialogRef=Bz(this._elementRef,this._dialog.openDialogs))}ngOnChanges(A){let i=A._matDialogClose||A._matDialogCloseResult;i&&(this.dialogResult=i.currentValue)}_onButtonClick(A){Iz(this.dialogRef,A.screenX===0&&A.screenY===0?"keyboard":"mouse",this.dialogResult)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","mat-dialog-close",""],["","matDialogClose",""]],hostVars:2,hostBindings:function(i,n){i&1&&eA("click",function(a){return n._onButtonClick(a)}),i&2&&ie("aria-label",n.ariaLabel||null)("type",n.type)},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],type:"type",dialogResult:[0,"mat-dialog-close","dialogResult"],_matDialogClose:[0,"matDialogClose","_matDialogClose"]},exportAs:["matDialogClose"],features:[ti]})}return t})(),dz=(()=>{class t{_dialogRef=h(Po,{optional:!0});_elementRef=h(ge);_dialog=h(Ks);constructor(){}ngOnInit(){this._dialogRef||(this._dialogRef=Bz(this._elementRef,this._dialog.openDialogs)),this._dialogRef&&Promise.resolve().then(()=>{this._onAdd()})}ngOnDestroy(){this._dialogRef?._containerInstance&&Promise.resolve().then(()=>{this._onRemove()})}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t})}return t})(),Ua=(()=>{class t extends dz{id=h(an).getId("mat-mdc-dialog-title-");_onAdd(){this._dialogRef._containerInstance?._addAriaLabelledBy?.(this.id)}_onRemove(){this._dialogRef?._containerInstance?._removeAriaLabelledBy?.(this.id)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","mat-dialog-title",""],["","matDialogTitle",""]],hostAttrs:[1,"mat-mdc-dialog-title","mdc-dialog__title"],hostVars:1,hostBindings:function(i,n){i&2&&vo("id",n.id)},inputs:{id:"id"},exportAs:["matDialogTitle"],features:[dt]})}return t})(),yr=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","mat-dialog-content",""],["mat-dialog-content"],["","matDialogContent",""]],hostAttrs:[1,"mat-mdc-dialog-content","mdc-dialog__content"],features:[ap([IC])]})}return t})(),or=(()=>{class t extends dz{align;_onAdd(){this._dialogRef._containerInstance?._updateActionSectionCount?.(1)}_onRemove(){this._dialogRef._containerInstance?._updateActionSectionCount?.(-1)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","mat-dialog-actions",""],["mat-dialog-actions"],["","matDialogActions",""]],hostAttrs:[1,"mat-mdc-dialog-actions","mdc-dialog__actions"],hostVars:6,hostBindings:function(i,n){i&2&&ae("mat-mdc-dialog-actions-align-start",n.align==="start")("mat-mdc-dialog-actions-align-center",n.align==="center")("mat-mdc-dialog-actions-align-end",n.align==="end")},inputs:{align:"align"},features:[dt]})}return t})();function Bz(t,e){let A=t.nativeElement.parentElement;for(;A&&!A.classList.contains("mat-mdc-dialog-container");)A=A.parentElement;return A?e.find(i=>i.id===A.id):null}var Ez=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[Ks],imports:[sz,ll,d0,Gi]})}return t})();var a8=(()=>{class t{get vertical(){return this._vertical}set vertical(A){this._vertical=Dr(A)}_vertical=!1;get inset(){return this._inset}set inset(A){this._inset=Dr(A)}_inset=!1;static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-divider"]],hostAttrs:["role","separator",1,"mat-divider"],hostVars:7,hostBindings:function(i,n){i&2&&(ie("aria-orientation",n.vertical?"vertical":"horizontal"),ae("mat-divider-vertical",n.vertical)("mat-divider-horizontal",!n.vertical)("mat-divider-inset",n.inset))},inputs:{vertical:"vertical",inset:"inset"},decls:0,vars:0,template:function(i,n){},styles:[`.mat-divider{display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color, var(--mat-sys-outline-variant));border-top-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color, var(--mat-sys-outline-variant));border-right-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px} +`],encapsulation:2,changeDetection:0})}return t})(),Qz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();function hz(t){return Error(`Unable to find icon with the name "${t}"`)}function ldA(){return Error("Could not find HttpClient for use with Angular Material icons. Please add provideHttpClient() to your providers.")}function uz(t){return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was "${t}".`)}function fz(t){return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by Angular's DomSanitizer. Attempted literal was "${t}".`)}var EC=class{url;svgText;options;svgElement=null;constructor(e,A,i){this.url=e,this.svgText=A,this.options=i}},pz=(()=>{class t{_httpClient;_sanitizer;_errorHandler;_document;_svgIconConfigs=new Map;_iconSetConfigs=new Map;_cachedIconsByUrl=new Map;_inProgressUrlFetches=new Map;_fontCssClassesByAlias=new Map;_resolvers=[];_defaultFontSetClass=["material-icons","mat-ligature-font"];constructor(A,i,n,o){this._httpClient=A,this._sanitizer=i,this._errorHandler=o,this._document=n}addSvgIcon(A,i,n){return this.addSvgIconInNamespace("",A,i,n)}addSvgIconLiteral(A,i,n){return this.addSvgIconLiteralInNamespace("",A,i,n)}addSvgIconInNamespace(A,i,n,o){return this._addSvgIconConfig(A,i,new EC(n,null,o))}addSvgIconResolver(A){return this._resolvers.push(A),this}addSvgIconLiteralInNamespace(A,i,n,o){let a=this._sanitizer.sanitize(ql.HTML,n);if(!a)throw fz(n);let r=k1(a);return this._addSvgIconConfig(A,i,new EC("",r,o))}addSvgIconSet(A,i){return this.addSvgIconSetInNamespace("",A,i)}addSvgIconSetLiteral(A,i){return this.addSvgIconSetLiteralInNamespace("",A,i)}addSvgIconSetInNamespace(A,i,n){return this._addSvgIconSetConfig(A,new EC(i,null,n))}addSvgIconSetLiteralInNamespace(A,i,n){let o=this._sanitizer.sanitize(ql.HTML,i);if(!o)throw fz(i);let a=k1(o);return this._addSvgIconSetConfig(A,new EC("",a,n))}registerFontClassAlias(A,i=A){return this._fontCssClassesByAlias.set(A,i),this}classNameForFontAlias(A){return this._fontCssClassesByAlias.get(A)||A}setDefaultFontSetClass(...A){return this._defaultFontSetClass=A,this}getDefaultFontSetClass(){return this._defaultFontSetClass}getSvgIconFromUrl(A){let i=this._sanitizer.sanitize(ql.RESOURCE_URL,A);if(!i)throw uz(A);let n=this._cachedIconsByUrl.get(i);return n?se(r8(n)):this._loadSvgIconFromConfig(new EC(A,null)).pipe(oi(o=>this._cachedIconsByUrl.set(i,o)),fe(o=>r8(o)))}getNamedSvgIcon(A,i=""){let n=mz(i,A),o=this._svgIconConfigs.get(n);if(o)return this._getSvgFromConfig(o);if(o=this._getIconConfigFromResolvers(i,A),o)return this._svgIconConfigs.set(n,o),this._getSvgFromConfig(o);let a=this._iconSetConfigs.get(i);return a?this._getSvgFromIconSetConfigs(A,a):Vm(hz(n))}ngOnDestroy(){this._resolvers=[],this._svgIconConfigs.clear(),this._iconSetConfigs.clear(),this._cachedIconsByUrl.clear()}_getSvgFromConfig(A){return A.svgText?se(r8(this._svgElementFromConfig(A))):this._loadSvgIconFromConfig(A).pipe(fe(i=>r8(i)))}_getSvgFromIconSetConfigs(A,i){let n=this._extractIconWithNameFromAnySet(A,i);if(n)return se(n);let o=i.filter(a=>!a.svgText).map(a=>this._loadSvgIconSetFromConfig(a).pipe(ea(r=>{let g=`Loading icon set URL: ${this._sanitizer.sanitize(ql.RESOURCE_URL,a.url)} failed: ${r.message}`;return this._errorHandler.handleError(new Error(g)),se(null)})));return Zm(o).pipe(fe(()=>{let a=this._extractIconWithNameFromAnySet(A,i);if(!a)throw hz(A);return a}))}_extractIconWithNameFromAnySet(A,i){for(let n=i.length-1;n>=0;n--){let o=i[n];if(o.svgText&&o.svgText.toString().indexOf(A)>-1){let a=this._svgElementFromConfig(o),r=this._extractSvgIconFromSet(a,A,o.options);if(r)return r}}return null}_loadSvgIconFromConfig(A){return this._fetchIcon(A).pipe(oi(i=>A.svgText=i),fe(()=>this._svgElementFromConfig(A)))}_loadSvgIconSetFromConfig(A){return A.svgText?se(null):this._fetchIcon(A).pipe(oi(i=>A.svgText=i))}_extractSvgIconFromSet(A,i,n){let o=A.querySelector(`[id="${i}"]`);if(!o)return null;let a=o.cloneNode(!0);if(a.removeAttribute("id"),a.nodeName.toLowerCase()==="svg")return this._setSvgAttributes(a,n);if(a.nodeName.toLowerCase()==="symbol")return this._setSvgAttributes(this._toSvgElement(a),n);let r=this._svgElementFromString(k1(""));return r.appendChild(a),this._setSvgAttributes(r,n)}_svgElementFromString(A){let i=this._document.createElement("DIV");i.innerHTML=A;let n=i.querySelector("svg");if(!n)throw Error(" tag not found");return n}_toSvgElement(A){let i=this._svgElementFromString(k1("")),n=A.attributes;for(let o=0;ok1(g)),$m(()=>this._inProgressUrlFetches.delete(a)),Q2());return this._inProgressUrlFetches.set(a,s),s}_addSvgIconConfig(A,i,n){return this._svgIconConfigs.set(mz(A,i),n),this}_addSvgIconSetConfig(A,i){let n=this._iconSetConfigs.get(A);return n?n.push(i):this._iconSetConfigs.set(A,[i]),this}_svgElementFromConfig(A){if(!A.svgElement){let i=this._svgElementFromString(A.svgText);this._setSvgAttributes(i,A.options),A.svgElement=i}return A.svgElement}_getIconConfigFromResolvers(A,i){for(let n=0;n{let t=h(Xt),e=t?t.location:null;return{getPathname:()=>e?e.pathname+e.search:""}}}),wz=["clip-path","color-profile","src","cursor","fill","filter","marker","marker-start","marker-mid","marker-end","mask","stroke"],BdA=wz.map(t=>`[${t}]`).join(", "),EdA=/^url\(['"]?#(.*?)['"]?\)$/,fn=(()=>{class t{_elementRef=h(ge);_iconRegistry=h(pz);_location=h(ddA);_errorHandler=h(Ap);_defaultColor;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;inline=!1;get svgIcon(){return this._svgIcon}set svgIcon(A){A!==this._svgIcon&&(A?this._updateSvgIcon(A):this._svgIcon&&this._clearSvgElement(),this._svgIcon=A)}_svgIcon;get fontSet(){return this._fontSet}set fontSet(A){let i=this._cleanupFontValue(A);i!==this._fontSet&&(this._fontSet=i,this._updateFontIconClasses())}_fontSet;get fontIcon(){return this._fontIcon}set fontIcon(A){let i=this._cleanupFontValue(A);i!==this._fontIcon&&(this._fontIcon=i,this._updateFontIconClasses())}_fontIcon;_previousFontSetClass=[];_previousFontIconClass;_svgName=null;_svgNamespace=null;_previousPath;_elementsWithExternalReferences;_currentIconFetch=Jn.EMPTY;constructor(){let A=h(new Zs("aria-hidden"),{optional:!0}),i=h(IdA,{optional:!0});i&&(i.color&&(this.color=this._defaultColor=i.color),i.fontSet&&(this.fontSet=i.fontSet)),A||this._elementRef.nativeElement.setAttribute("aria-hidden","true")}_splitIconName(A){if(!A)return["",""];let i=A.split(":");switch(i.length){case 1:return["",i[0]];case 2:return i;default:throw Error(`Invalid icon name: "${A}"`)}}ngOnInit(){this._updateFontIconClasses()}ngAfterViewChecked(){let A=this._elementsWithExternalReferences;if(A&&A.size){let i=this._location.getPathname();i!==this._previousPath&&(this._previousPath=i,this._prependPathToReferences(i))}}ngOnDestroy(){this._currentIconFetch.unsubscribe(),this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear()}_usingFontIcon(){return!this.svgIcon}_setSvgElement(A){this._clearSvgElement();let i=this._location.getPathname();this._previousPath=i,this._cacheChildrenWithExternalReferences(A),this._prependPathToReferences(i),this._elementRef.nativeElement.appendChild(A)}_clearSvgElement(){let A=this._elementRef.nativeElement,i=A.childNodes.length;for(this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear();i--;){let n=A.childNodes[i];(n.nodeType!==1||n.nodeName.toLowerCase()==="svg")&&n.remove()}}_updateFontIconClasses(){if(!this._usingFontIcon())return;let A=this._elementRef.nativeElement,i=(this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet).split(/ +/):this._iconRegistry.getDefaultFontSetClass()).filter(n=>n.length>0);this._previousFontSetClass.forEach(n=>A.classList.remove(n)),i.forEach(n=>A.classList.add(n)),this._previousFontSetClass=i,this.fontIcon!==this._previousFontIconClass&&!i.includes("mat-ligature-font")&&(this._previousFontIconClass&&A.classList.remove(this._previousFontIconClass),this.fontIcon&&A.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}_cleanupFontValue(A){return typeof A=="string"?A.trim().split(" ")[0]:A}_prependPathToReferences(A){let i=this._elementsWithExternalReferences;i&&i.forEach((n,o)=>{n.forEach(a=>{o.setAttribute(a.name,`url('${A}#${a.value}')`)})})}_cacheChildrenWithExternalReferences(A){let i=A.querySelectorAll(BdA),n=this._elementsWithExternalReferences=this._elementsWithExternalReferences||new Map;for(let o=0;o{let r=i[o],s=r.getAttribute(a),g=s?s.match(EdA):null;if(g){let l=n.get(r);l||(l=[],n.set(r,l)),l.push({name:a,value:g[1]})}})}_updateSvgIcon(A){if(this._svgNamespace=null,this._svgName=null,this._currentIconFetch.unsubscribe(),A){let[i,n]=this._splitIconName(A);i&&(this._svgNamespace=i),n&&(this._svgName=n),this._currentIconFetch=this._iconRegistry.getNamedSvgIcon(n,i).pipe(oo(1)).subscribe(o=>this._setSvgElement(o),o=>{let a=`Error retrieving icon ${i}:${n}! ${o.message}`;this._errorHandler.handleError(new Error(a))})}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-icon"]],hostAttrs:["role","img",1,"mat-icon","notranslate"],hostVars:10,hostBindings:function(i,n){i&2&&(ie("data-mat-icon-type",n._usingFontIcon()?"font":"svg")("data-mat-icon-name",n._svgName||n.fontIcon)("data-mat-icon-namespace",n._svgNamespace||n.fontSet)("fontIcon",n._usingFontIcon()?n.fontIcon:null),zo(n.color?"mat-"+n.color:""),ae("mat-icon-inline",n.inline)("mat-icon-no-color",n.color!=="primary"&&n.color!=="accent"&&n.color!=="warn"))},inputs:{color:"color",inline:[2,"inline","inline",he],svgIcon:"svgIcon",fontSet:"fontSet",fontIcon:"fontIcon"},exportAs:["matIcon"],ngContentSelectors:CdA,decls:1,vars:0,template:function(i,n){i&1&&(Ht(),He(0))},styles:[`mat-icon,mat-icon.mat-primary,mat-icon.mat-accent,mat-icon.mat-warn{color:var(--mat-icon-color, inherit)}.mat-icon{-webkit-user-select:none;user-select:none;background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px;overflow:hidden}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.mat-icon.mat-ligature-font[fontIcon]::before{content:attr(fontIcon)}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto} +`],encapsulation:2,changeDetection:0})}return t})(),cl=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var Dz=(()=>{class t{_animationsDisabled=qi();state="unchecked";disabled=!1;appearance="full";constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-pseudo-checkbox"]],hostAttrs:[1,"mat-pseudo-checkbox"],hostVars:12,hostBindings:function(i,n){i&2&&ae("mat-pseudo-checkbox-indeterminate",n.state==="indeterminate")("mat-pseudo-checkbox-checked",n.state==="checked")("mat-pseudo-checkbox-disabled",n.disabled)("mat-pseudo-checkbox-minimal",n.appearance==="minimal")("mat-pseudo-checkbox-full",n.appearance==="full")("_mat-animation-noopable",n._animationsDisabled)},inputs:{state:"state",disabled:"disabled",appearance:"appearance"},decls:0,vars:0,template:function(i,n){},styles:[`.mat-pseudo-checkbox{border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1),background-color 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:"";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox._mat-animation-noopable{transition:none !important;animation:none !important}.mat-pseudo-checkbox._mat-animation-noopable::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{left:1px;opacity:1;border-radius:2px}.mat-pseudo-checkbox-checked::after{left:1px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-minimal-selected-checkmark-color, var(--mat-sys-primary))}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full{border-color:var(--mat-pseudo-checkbox-full-unselected-icon-color, var(--mat-sys-on-surface-variant));border-width:2px;border-style:solid}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-disabled{border-color:var(--mat-pseudo-checkbox-full-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate{background-color:var(--mat-pseudo-checkbox-full-selected-icon-color, var(--mat-sys-primary));border-color:rgba(0,0,0,0)}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-full-selected-checkmark-color, var(--mat-sys-on-primary))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background-color:var(--mat-pseudo-checkbox-full-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-full-disabled-selected-checkmark-color, var(--mat-sys-surface))}.mat-pseudo-checkbox{width:18px;height:18px}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after{width:14px;height:6px;transform-origin:center;top:-4.2426406871px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{top:8px;width:16px}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after{width:10px;height:4px;transform-origin:center;top:-2.8284271247px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{top:6px;width:12px} +`],encapsulation:2,changeDetection:0})}return t})();var QdA=["text"],hdA=[[["mat-icon"]],"*"],udA=["mat-icon","*"];function fdA(t,e){if(t&1&&GA(0,"mat-pseudo-checkbox",1),t&2){let A=v();AA("disabled",A.disabled)("state",A.selected?"checked":"unchecked")}}function mdA(t,e){if(t&1&&GA(0,"mat-pseudo-checkbox",3),t&2){let A=v();AA("disabled",A.disabled)}}function pdA(t,e){if(t&1&&(m(0,"span",4),K(1),w()),t&2){let A=v();p(),_e("(",A.group.label,")")}}var l8=new yA("MAT_OPTION_PARENT_COMPONENT"),c8=new yA("MatOptgroup");var g8=class{source;isUserInput;constructor(e,A=!1){this.source=e,this.isUserInput=A}},Hr=(()=>{class t{_element=h(ge);_changeDetectorRef=h(mt);_parent=h(l8,{optional:!0});group=h(c8,{optional:!0});_signalDisableRipple=!1;_selected=!1;_active=!1;_mostRecentViewValue="";get multiple(){return this._parent&&this._parent.multiple}get selected(){return this._selected}value;id=h(an).getId("mat-option-");get disabled(){return this.group&&this.group.disabled||this._disabled()}set disabled(A){this._disabled.set(A)}_disabled=jA(!1);get disableRipple(){return this._signalDisableRipple?this._parent.disableRipple():!!this._parent?.disableRipple}get hideSingleSelectionIndicator(){return!!(this._parent&&this._parent.hideSingleSelectionIndicator)}onSelectionChange=new WA;_text;_stateChanges=new $A;constructor(){let A=h(Xn);A.load(Ir),A.load(b2),this._signalDisableRipple=!!this._parent&&w1(this._parent.disableRipple)}get active(){return this._active}get viewValue(){return(this._text?.nativeElement.textContent||"").trim()}select(A=!0){this._selected||(this._selected=!0,this._changeDetectorRef.markForCheck(),A&&this._emitSelectionChangeEvent())}deselect(A=!0){this._selected&&(this._selected=!1,this._changeDetectorRef.markForCheck(),A&&this._emitSelectionChangeEvent())}focus(A,i){let n=this._getHostElement();typeof n.focus=="function"&&n.focus(i)}setActiveStyles(){this._active||(this._active=!0,this._changeDetectorRef.markForCheck())}setInactiveStyles(){this._active&&(this._active=!1,this._changeDetectorRef.markForCheck())}getLabel(){return this.viewValue}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!ma(A)&&(this._selectViaInteraction(),A.preventDefault())}_selectViaInteraction(){this.disabled||(this._selected=this.multiple?!this._selected:!0,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent(!0))}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._element.nativeElement}ngAfterViewChecked(){if(this._selected){let A=this.viewValue;A!==this._mostRecentViewValue&&(this._mostRecentViewValue&&this._stateChanges.next(),this._mostRecentViewValue=A)}}ngOnDestroy(){this._stateChanges.complete()}_emitSelectionChangeEvent(A=!1){this.onSelectionChange.emit(new g8(this,A))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-option"]],viewQuery:function(i,n){if(i&1&&ai(QdA,7),i&2){let o;ce(o=Ce())&&(n._text=o.first)}},hostAttrs:["role","option",1,"mat-mdc-option","mdc-list-item"],hostVars:11,hostBindings:function(i,n){i&1&&eA("click",function(){return n._selectViaInteraction()})("keydown",function(a){return n._handleKeydown(a)}),i&2&&(vo("id",n.id),ie("aria-selected",n.selected)("aria-disabled",n.disabled.toString()),ae("mdc-list-item--selected",n.selected)("mat-mdc-option-multiple",n.multiple)("mat-mdc-option-active",n.active)("mdc-list-item--disabled",n.disabled))},inputs:{value:"value",id:"id",disabled:[2,"disabled","disabled",he]},outputs:{onSelectionChange:"onSelectionChange"},exportAs:["matOption"],ngContentSelectors:udA,decls:8,vars:5,consts:[["text",""],["aria-hidden","true",1,"mat-mdc-option-pseudo-checkbox",3,"disabled","state"],[1,"mdc-list-item__primary-text"],["state","checked","aria-hidden","true","appearance","minimal",1,"mat-mdc-option-pseudo-checkbox",3,"disabled"],[1,"cdk-visually-hidden"],["aria-hidden","true","mat-ripple","",1,"mat-mdc-option-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled"]],template:function(i,n){i&1&&(Ht(hdA),V(0,fdA,1,2,"mat-pseudo-checkbox",1),He(1),m(2,"span",2,0),He(4,1),w(),V(5,mdA,1,1,"mat-pseudo-checkbox",3),V(6,pdA,2,1,"span",4),GA(7,"div",5)),i&2&&(W(n.multiple?0:-1),p(5),W(!n.multiple&&n.selected&&!n.hideSingleSelectionIndicator?5:-1),p(),W(n.group&&n.group._inert?6:-1),p(),AA("matRippleTrigger",n._getHostElement())("matRippleDisabled",n.disabled||n.disableRipple))},dependencies:[Dz,ig],styles:[`.mat-mdc-option{-webkit-user-select:none;user-select:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;min-height:48px;padding:0 16px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);color:var(--mat-option-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-option-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-option-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-option-label-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-option-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-option-label-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-option:hover:not(.mdc-list-item--disabled){background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:var(--mat-option-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));outline:0}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-active,.mat-mdc-option-multiple,:focus,:hover){background-color:var(--mat-option-selected-state-layer-color, var(--mat-sys-secondary-container))}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-active,.mat-mdc-option-multiple,:focus,:hover) .mdc-list-item__primary-text{color:var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option.mdc-list-item{align-items:center;background:rgba(0,0,0,0)}.mat-mdc-option.mdc-list-item--disabled{cursor:default;pointer-events:none}.mat-mdc-option.mdc-list-item--disabled .mat-mdc-option-pseudo-checkbox,.mat-mdc-option.mdc-list-item--disabled .mdc-list-item__primary-text,.mat-mdc-option.mdc-list-item--disabled>mat-icon{opacity:.38}.mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:32px}[dir=rtl] .mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:16px;padding-right:32px}.mat-mdc-option .mat-icon,.mat-mdc-option .mat-pseudo-checkbox-full{margin-right:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-icon,[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-full{margin-right:0;margin-left:16px}.mat-mdc-option .mat-pseudo-checkbox-minimal{margin-left:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-minimal{margin-right:16px;margin-left:0}.mat-mdc-option .mat-mdc-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-option .mdc-list-item__primary-text{white-space:normal;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;font-family:inherit;text-decoration:inherit;text-transform:inherit;margin-right:auto}[dir=rtl] .mat-mdc-option .mdc-list-item__primary-text{margin-right:0;margin-left:auto}@media(forced-colors: active){.mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{content:"";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}[dir=rtl] .mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{right:auto;left:16px}}.mat-mdc-option-multiple{--mat-list-list-item-selected-container-color: var(--mat-list-list-item-container-color, transparent)}.mat-mdc-option-active .mat-focus-indicator::before{content:""} +`],encapsulation:2,changeDetection:0})}return t})();function ek(t,e,A){if(A.length){let i=e.toArray(),n=A.toArray(),o=0;for(let a=0;aA+i?Math.max(0,t-i+e):A}var p4=(()=>{class t{_listeners=[];notify(A,i){for(let n of this._listeners)n(A,i)}listen(A){return this._listeners.push(A),()=>{this._listeners=this._listeners.filter(i=>A!==i)}}ngOnDestroy(){this._listeners=[]}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var C8=class{applyChanges(e,A,i,n,o){e.forEachOperation((a,r,s)=>{let g,l;if(a.previousIndex==null){let C=i(a,r,s);g=A.createEmbeddedView(C.templateRef,C.context,C.index),l=ac.INSERTED}else s==null?(A.remove(r),l=ac.REMOVED):(g=A.get(r),A.move(g,s),l=ac.MOVED);o&&o({context:g?.context,operation:l,record:a})})}detach(){}};var V1=class{_multiple;_emitChanges;compareWith;_selection=new Set;_deselectedToEmit=[];_selectedToEmit=[];_selected=null;get selected(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected}changed=new $A;constructor(e=!1,A,i=!0,n){this._multiple=e,this._emitChanges=i,this.compareWith=n,A&&A.length&&(e?A.forEach(o=>this._markSelected(o)):this._markSelected(A[0]),this._selectedToEmit.length=0)}select(...e){this._verifyValueAssignment(e),e.forEach(i=>this._markSelected(i));let A=this._hasQueuedChanges();return this._emitChangeEvent(),A}deselect(...e){this._verifyValueAssignment(e),e.forEach(i=>this._unmarkSelected(i));let A=this._hasQueuedChanges();return this._emitChangeEvent(),A}setSelection(...e){this._verifyValueAssignment(e);let A=this.selected,i=new Set(e.map(o=>this._getConcreteValue(o)));e.forEach(o=>this._markSelected(o)),A.filter(o=>!i.has(this._getConcreteValue(o,i))).forEach(o=>this._unmarkSelected(o));let n=this._hasQueuedChanges();return this._emitChangeEvent(),n}toggle(e){return this.isSelected(e)?this.deselect(e):this.select(e)}clear(e=!0){this._unmarkAll();let A=this._hasQueuedChanges();return e&&this._emitChangeEvent(),A}isSelected(e){return this._selection.has(this._getConcreteValue(e))}isEmpty(){return this._selection.size===0}hasValue(){return!this.isEmpty()}sort(e){this._multiple&&this.selected&&this._selected.sort(e)}isMultipleSelection(){return this._multiple}_emitChangeEvent(){this._selected=null,(this._selectedToEmit.length||this._deselectedToEmit.length)&&(this.changed.next({source:this,added:this._selectedToEmit,removed:this._deselectedToEmit}),this._deselectedToEmit=[],this._selectedToEmit=[])}_markSelected(e){e=this._getConcreteValue(e),this.isSelected(e)||(this._multiple||this._unmarkAll(),this.isSelected(e)||this._selection.add(e),this._emitChanges&&this._selectedToEmit.push(e))}_unmarkSelected(e){e=this._getConcreteValue(e),this.isSelected(e)&&(this._selection.delete(e),this._emitChanges&&this._deselectedToEmit.push(e))}_unmarkAll(){this.isEmpty()||this._selection.forEach(e=>this._unmarkSelected(e))}_verifyValueAssignment(e){e.length>1&&this._multiple}_hasQueuedChanges(){return!!(this._deselectedToEmit.length||this._selectedToEmit.length)}_getConcreteValue(e,A){if(this.compareWith){A=A??this._selection;for(let i of A)if(this.compareWith(e,i))return i;return e}else return e}};var yz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var ik=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[S2,yz,Hr,Gi]})}return t})();var wdA=["trigger"],DdA=["panel"],ydA=[[["mat-select-trigger"]],"*"],vdA=["mat-select-trigger","*"];function bdA(t,e){if(t&1&&(m(0,"span",4),K(1),w()),t&2){let A=v();p(),qA(A.placeholder)}}function MdA(t,e){t&1&&He(0)}function kdA(t,e){if(t&1&&(m(0,"span",11),K(1),w()),t&2){let A=v(2);p(),qA(A.triggerValue)}}function SdA(t,e){if(t&1&&(m(0,"span",5),V(1,MdA,1,0)(2,kdA,2,1,"span",11),w()),t&2){let A=v();p(),W(A.customTrigger?1:2)}}function xdA(t,e){if(t&1){let A=JA();m(0,"div",12,1),eA("keydown",function(n){Z(A);let o=v();return X(o._handleKeydown(n))}),He(2,1),w()}if(t&2){let A=v();zo(mU("mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open ",A._getPanelTheme())),ae("mat-select-panel-animations-enabled",!A._animationsDisabled),AA("ngClass",A.panelClass),ie("id",A.id+"-panel")("aria-multiselectable",A.multiple)("aria-label",A.ariaLabel||null)("aria-labelledby",A._getPanelAriaLabelledby())}}var RdA=new yA("mat-select-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>dC(t)}}),NdA=new yA("MAT_SELECT_CONFIG"),FdA=new yA("MatSelectTrigger"),nk=class{source;value;constructor(e,A){this.source=e,this.value=A}},Il=(()=>{class t{_viewportRuler=h(Gs);_changeDetectorRef=h(mt);_elementRef=h(ge);_dir=h(xo,{optional:!0});_idGenerator=h(an);_renderer=h(Fi);_parentFormField=h(Gu,{optional:!0});ngControl=h(eg,{self:!0,optional:!0});_liveAnnouncer=h(vu);_defaultOptions=h(NdA,{optional:!0});_animationsDisabled=qi();_popoverLocation;_initialized=new $A;_cleanupDetach;options;optionGroups;customTrigger;_positions=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom",panelClass:"mat-mdc-select-panel-above"},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom",panelClass:"mat-mdc-select-panel-above"}];_scrollOptionIntoView(A){let i=this.options.toArray()[A];if(i){let n=this.panel.nativeElement,o=ek(A,this.options,this.optionGroups),a=i._getHostElement();A===0&&o===1?n.scrollTop=0:n.scrollTop=tk(a.offsetTop,a.offsetHeight,n.scrollTop,n.offsetHeight)}}_positioningSettled(){this._scrollOptionIntoView(this._keyManager.activeItemIndex||0)}_getChangeEvent(A){return new nk(this,A)}_scrollStrategyFactory=h(RdA);_panelOpen=!1;_compareWith=(A,i)=>A===i;_uid=this._idGenerator.getId("mat-select-");_triggerAriaLabelledBy=null;_previousControl;_destroy=new $A;_errorStateTracker;stateChanges=new $A;disableAutomaticLabeling=!0;userAriaDescribedBy;_selectionModel;_keyManager;_preferredOverlayOrigin;_overlayWidth;_onChange=()=>{};_onTouched=()=>{};_valueId=this._idGenerator.getId("mat-select-value-");_scrollStrategy;_overlayPanelClass=this._defaultOptions?.overlayPanelClass||"";get focused(){return this._focused||this._panelOpen}_focused=!1;controlType="mat-select";trigger;panel;_overlayDir;panelClass;disabled=!1;get disableRipple(){return this._disableRipple()}set disableRipple(A){this._disableRipple.set(A)}_disableRipple=jA(!1);tabIndex=0;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(A){this._hideSingleSelectionIndicator=A,this._syncParentProperties()}_hideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get placeholder(){return this._placeholder}set placeholder(A){this._placeholder=A,this.stateChanges.next()}_placeholder;get required(){return this._required??this.ngControl?.control?.hasValidator(Ag.required)??!1}set required(A){this._required=A,this.stateChanges.next()}_required;get multiple(){return this._multiple}set multiple(A){this._selectionModel,this._multiple=A}_multiple=!1;disableOptionCentering=this._defaultOptions?.disableOptionCentering??!1;get compareWith(){return this._compareWith}set compareWith(A){this._compareWith=A,this._selectionModel&&this._initializeSelection()}get value(){return this._value}set value(A){this._assignValue(A)&&this._onChange(A)}_value;ariaLabel="";ariaLabelledby;get errorStateMatcher(){return this._errorStateTracker.matcher}set errorStateMatcher(A){this._errorStateTracker.matcher=A}typeaheadDebounceInterval;sortComparator;get id(){return this._id}set id(A){this._id=A||this._uid,this.stateChanges.next()}_id;get errorState(){return this._errorStateTracker.errorState}set errorState(A){this._errorStateTracker.errorState=A}panelWidth=this._defaultOptions&&typeof this._defaultOptions.panelWidth<"u"?this._defaultOptions.panelWidth:"auto";canSelectNullableOptions=this._defaultOptions?.canSelectNullableOptions??!1;optionSelectionChanges=t0(()=>{let A=this.options;return A?A.changes.pipe(cn(A),ki(()=>hi(...A.map(i=>i.onSelectionChange)))):this._initialized.pipe(ki(()=>this.optionSelectionChanges))});openedChange=new WA;_openedStream=this.openedChange.pipe(Ze(A=>A),fe(()=>{}));_closedStream=this.openedChange.pipe(Ze(A=>!A),fe(()=>{}));selectionChange=new WA;valueChange=new WA;constructor(){let A=h(UB),i=h(SB,{optional:!0}),n=h(y2,{optional:!0}),o=h(new Zs("tabindex"),{optional:!0}),a=h(u4,{optional:!0});this.ngControl&&(this.ngControl.valueAccessor=this),this._defaultOptions?.typeaheadDebounceInterval!=null&&(this.typeaheadDebounceInterval=this._defaultOptions.typeaheadDebounceInterval),this._errorStateTracker=new JB(A,this.ngControl,n,i,this.stateChanges),this._scrollStrategy=this._scrollStrategyFactory(),this.tabIndex=o==null?0:parseInt(o)||0,this._popoverLocation=a?.usePopover===!1?null:"inline",this.id=this.id}ngOnInit(){this._selectionModel=new V1(this.multiple),this.stateChanges.next(),this._viewportRuler.change().pipe(Bt(this._destroy)).subscribe(()=>{this.panelOpen&&(this._overlayWidth=this._getOverlayWidth(this._preferredOverlayOrigin),this._changeDetectorRef.detectChanges())})}ngAfterContentInit(){this._initialized.next(),this._initialized.complete(),this._initKeyManager(),this._selectionModel.changed.pipe(Bt(this._destroy)).subscribe(A=>{A.added.forEach(i=>i.select()),A.removed.forEach(i=>i.deselect())}),this.options.changes.pipe(cn(null),Bt(this._destroy)).subscribe(()=>{this._resetOptions(),this._initializeSelection()})}ngDoCheck(){let A=this._getTriggerAriaLabelledby(),i=this.ngControl;if(A!==this._triggerAriaLabelledBy){let n=this._elementRef.nativeElement;this._triggerAriaLabelledBy=A,A?n.setAttribute("aria-labelledby",A):n.removeAttribute("aria-labelledby")}i&&(this._previousControl!==i.control&&(this._previousControl!==void 0&&i.disabled!==null&&i.disabled!==this.disabled&&(this.disabled=i.disabled),this._previousControl=i.control),this.updateErrorState())}ngOnChanges(A){(A.disabled||A.userAriaDescribedBy)&&this.stateChanges.next(),A.typeaheadDebounceInterval&&this._keyManager&&this._keyManager.withTypeAhead(this.typeaheadDebounceInterval)}ngOnDestroy(){this._cleanupDetach?.(),this._keyManager?.destroy(),this._destroy.next(),this._destroy.complete(),this.stateChanges.complete(),this._clearFromModal()}toggle(){this.panelOpen?this.close():this.open()}open(){this._canOpen()&&(this._parentFormField&&(this._preferredOverlayOrigin=this._parentFormField.getConnectedOverlayOrigin()),this._cleanupDetach?.(),this._overlayWidth=this._getOverlayWidth(this._preferredOverlayOrigin),this._applyModalPanelOwnership(),this._panelOpen=!0,this._overlayDir.positionChange.pipe(oo(1)).subscribe(()=>{this._changeDetectorRef.detectChanges(),this._positioningSettled()}),this._overlayDir.attachOverlay(),this._keyManager.withHorizontalOrientation(null),this._highlightCorrectOption(),this._changeDetectorRef.markForCheck(),this.stateChanges.next(),Promise.resolve().then(()=>this.openedChange.emit(!0)))}_trackedModal=null;_applyModalPanelOwnership(){let A=this._elementRef.nativeElement.closest('body > .cdk-overlay-container [aria-modal="true"]');if(!A)return;let i=`${this.id}-panel`;this._trackedModal&&_p(this._trackedModal,"aria-owns",i),B9(A,"aria-owns",i),this._trackedModal=A}_clearFromModal(){if(!this._trackedModal)return;let A=`${this.id}-panel`;_p(this._trackedModal,"aria-owns",A),this._trackedModal=null}close(){this._panelOpen&&(this._panelOpen=!1,this._exitAndDetach(),this._keyManager.withHorizontalOrientation(this._isRtl()?"rtl":"ltr"),this._changeDetectorRef.markForCheck(),this._onTouched(),this.stateChanges.next(),Promise.resolve().then(()=>this.openedChange.emit(!1)))}_exitAndDetach(){if(this._animationsDisabled||!this.panel){this._detachOverlay();return}this._cleanupDetach?.(),this._cleanupDetach=()=>{i(),clearTimeout(n),this._cleanupDetach=void 0};let A=this.panel.nativeElement,i=this._renderer.listen(A,"animationend",o=>{o.animationName==="_mat-select-exit"&&(this._cleanupDetach?.(),this._detachOverlay())}),n=setTimeout(()=>{this._cleanupDetach?.(),this._detachOverlay()},200);A.classList.add("mat-select-panel-exit")}_detachOverlay(){this._overlayDir.detachOverlay(),this._changeDetectorRef.markForCheck()}writeValue(A){this._assignValue(A)}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A,this._changeDetectorRef.markForCheck(),this.stateChanges.next()}get panelOpen(){return this._panelOpen}get selected(){return this.multiple?this._selectionModel?.selected||[]:this._selectionModel?.selected[0]}get triggerValue(){if(this.empty)return"";if(this._multiple){let A=this._selectionModel.selected.map(i=>i.viewValue);return this._isRtl()&&A.reverse(),A.join(", ")}return this._selectionModel.selected[0].viewValue}updateErrorState(){this._errorStateTracker.updateErrorState()}_isRtl(){return this._dir?this._dir.value==="rtl":!1}_handleKeydown(A){this.disabled||(this.panelOpen?this._handleOpenKeydown(A):this._handleClosedKeydown(A))}_handleClosedKeydown(A){let i=A.keyCode,n=i===40||i===38||i===37||i===39,o=i===13||i===32,a=this._keyManager;if(!a.isTyping()&&o&&!ma(A)||(this.multiple||A.altKey)&&n)A.preventDefault(),this.open();else if(!this.multiple){let r=this.selected;a.onKeydown(A);let s=this.selected;s&&r!==s&&this._liveAnnouncer.announce(s.viewValue,1e4)}}_handleOpenKeydown(A){let i=this._keyManager,n=A.keyCode,o=n===40||n===38,a=i.isTyping();if(o&&A.altKey)A.preventDefault(),this.close();else if(!a&&(n===13||n===32)&&i.activeItem&&!ma(A))A.preventDefault(),i.activeItem._selectViaInteraction();else if(!a&&this._multiple&&n===65&&A.ctrlKey){A.preventDefault();let r=this.options.some(s=>!s.disabled&&!s.selected);this.options.forEach(s=>{s.disabled||(r?s.select():s.deselect())})}else{let r=i.activeItemIndex;i.onKeydown(A),this._multiple&&o&&A.shiftKey&&i.activeItem&&i.activeItemIndex!==r&&i.activeItem._selectViaInteraction()}}_handleOverlayKeydown(A){A.keyCode===27&&!ma(A)&&(A.preventDefault(),this.close())}_onFocus(){this.disabled||(this._focused=!0,this.stateChanges.next())}_onBlur(){this._focused=!1,this._keyManager?.cancelTypeahead(),!this.disabled&&!this.panelOpen&&(this._onTouched(),this._changeDetectorRef.markForCheck(),this.stateChanges.next())}_getPanelTheme(){return this._parentFormField?`mat-${this._parentFormField.color}`:""}get empty(){return!this._selectionModel||this._selectionModel.isEmpty()}_initializeSelection(){Promise.resolve().then(()=>{this.ngControl&&(this._value=this.ngControl.value),this._setSelectionByValue(this._value),this.stateChanges.next()})}_setSelectionByValue(A){if(this.options.forEach(i=>i.setInactiveStyles()),this._selectionModel.clear(),this.multiple&&A)Array.isArray(A),A.forEach(i=>this._selectOptionByValue(i)),this._sortValues();else{let i=this._selectOptionByValue(A);i?this._keyManager.updateActiveItem(i):this.panelOpen||this._keyManager.updateActiveItem(-1)}this._changeDetectorRef.markForCheck()}_selectOptionByValue(A){let i=this.options.find(n=>{if(this._selectionModel.isSelected(n))return!1;try{return(n.value!=null||this.canSelectNullableOptions)&&this._compareWith(n.value,A)}catch{return!1}});return i&&this._selectionModel.select(i),i}_assignValue(A){return A!==this._value||this._multiple&&Array.isArray(A)?(this.options&&this._setSelectionByValue(A),this._value=A,!0):!1}_skipPredicate=A=>this.panelOpen?!1:A.disabled;_getOverlayWidth(A){return this.panelWidth==="auto"?(A instanceof sE?A.elementRef:A||this._elementRef).nativeElement.getBoundingClientRect().width:this.panelWidth===null?"":this.panelWidth}_syncParentProperties(){if(this.options)for(let A of this.options)A._changeDetectorRef.markForCheck()}_initKeyManager(){this._keyManager=new Ru(this.options).withTypeAhead(this.typeaheadDebounceInterval).withVerticalOrientation().withHorizontalOrientation(this._isRtl()?"rtl":"ltr").withHomeAndEnd().withPageUpDown().withAllowedModifierKeys(["shiftKey"]).skipPredicate(this._skipPredicate),this._keyManager.tabOut.subscribe(()=>{this.panelOpen&&(!this.multiple&&this._keyManager.activeItem&&this._keyManager.activeItem._selectViaInteraction(),this.focus(),this.close())}),this._keyManager.change.subscribe(()=>{this._panelOpen&&this.panel?this._scrollOptionIntoView(this._keyManager.activeItemIndex||0):!this._panelOpen&&!this.multiple&&this._keyManager.activeItem&&this._keyManager.activeItem._selectViaInteraction()})}_resetOptions(){let A=hi(this.options.changes,this._destroy);this.optionSelectionChanges.pipe(Bt(A)).subscribe(i=>{this._onSelect(i.source,i.isUserInput),i.isUserInput&&!this.multiple&&this._panelOpen&&(this.close(),this.focus())}),hi(...this.options.map(i=>i._stateChanges)).pipe(Bt(A)).subscribe(()=>{this._changeDetectorRef.detectChanges(),this.stateChanges.next()})}_onSelect(A,i){let n=this._selectionModel.isSelected(A);!this.canSelectNullableOptions&&A.value==null&&!this._multiple?(A.deselect(),this._selectionModel.clear(),this.value!=null&&this._propagateChanges(A.value)):(n!==A.selected&&(A.selected?this._selectionModel.select(A):this._selectionModel.deselect(A)),i&&this._keyManager.setActiveItem(A),this.multiple&&(this._sortValues(),i&&this.focus())),n!==this._selectionModel.isSelected(A)&&this._propagateChanges(),this.stateChanges.next()}_sortValues(){if(this.multiple){let A=this.options.toArray();this._selectionModel.sort((i,n)=>this.sortComparator?this.sortComparator(i,n,A):A.indexOf(i)-A.indexOf(n)),this.stateChanges.next()}}_propagateChanges(A){let i;this.multiple?i=this.selected.map(n=>n.value):i=this.selected?this.selected.value:A,this._value=i,this.valueChange.emit(i),this._onChange(i),this.selectionChange.emit(this._getChangeEvent(i)),this._changeDetectorRef.markForCheck()}_highlightCorrectOption(){if(this._keyManager)if(this.empty){let A=-1;for(let i=0;i0&&!!this._overlayDir}focus(A){this._elementRef.nativeElement.focus(A)}_getPanelAriaLabelledby(){if(this.ariaLabel)return null;let A=this._parentFormField?.getLabelId()||null,i=A?A+" ":"";return this.ariaLabelledby?i+this.ariaLabelledby:A}_getAriaActiveDescendant(){return this.panelOpen&&this._keyManager&&this._keyManager.activeItem?this._keyManager.activeItem.id:null}_getTriggerAriaLabelledby(){if(this.ariaLabel)return null;let A=this._parentFormField?.getLabelId()||"";return this.ariaLabelledby&&(A+=" "+this.ariaLabelledby),A||(A=this._valueId),A}get describedByIds(){return this._elementRef.nativeElement.getAttribute("aria-describedby")?.split(" ")||[]}setDescribedByIds(A){let i=this._elementRef.nativeElement;A.length?i.setAttribute("aria-describedby",A.join(" ")):i.removeAttribute("aria-describedby")}onContainerClick(A){let i=Jr(A);i&&(i.tagName==="MAT-OPTION"||i.classList.contains("cdk-overlay-backdrop")||i.closest(".mat-mdc-select-panel"))||(this.focus(),this.open())}get shouldLabelFloat(){return this.panelOpen||!this.empty||this.focused&&!!this.placeholder}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-select"]],contentQueries:function(i,n,o){if(i&1&&ua(o,FdA,5)(o,Hr,5)(o,c8,5),i&2){let a;ce(a=Ce())&&(n.customTrigger=a.first),ce(a=Ce())&&(n.options=a),ce(a=Ce())&&(n.optionGroups=a)}},viewQuery:function(i,n){if(i&1&&ai(wdA,5)(DdA,5)(i8,5),i&2){let o;ce(o=Ce())&&(n.trigger=o.first),ce(o=Ce())&&(n.panel=o.first),ce(o=Ce())&&(n._overlayDir=o.first)}},hostAttrs:["role","combobox","aria-haspopup","listbox",1,"mat-mdc-select"],hostVars:21,hostBindings:function(i,n){i&1&&eA("keydown",function(a){return n._handleKeydown(a)})("focus",function(){return n._onFocus()})("blur",function(){return n._onBlur()}),i&2&&(ie("id",n.id)("tabindex",n.disabled?-1:n.tabIndex)("aria-controls",n.panelOpen?n.id+"-panel":null)("aria-expanded",n.panelOpen)("aria-label",n.ariaLabel||null)("aria-required",n.required.toString())("aria-disabled",n.disabled.toString())("aria-invalid",n.errorState)("aria-activedescendant",n._getAriaActiveDescendant()),ae("mat-mdc-select-disabled",n.disabled)("mat-mdc-select-invalid",n.errorState)("mat-mdc-select-required",n.required)("mat-mdc-select-empty",n.empty)("mat-mdc-select-multiple",n.multiple)("mat-select-open",n.panelOpen))},inputs:{userAriaDescribedBy:[0,"aria-describedby","userAriaDescribedBy"],panelClass:"panelClass",disabled:[2,"disabled","disabled",he],disableRipple:[2,"disableRipple","disableRipple",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",he],placeholder:"placeholder",required:[2,"required","required",he],multiple:[2,"multiple","multiple",he],disableOptionCentering:[2,"disableOptionCentering","disableOptionCentering",he],compareWith:"compareWith",value:"value",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],errorStateMatcher:"errorStateMatcher",typeaheadDebounceInterval:[2,"typeaheadDebounceInterval","typeaheadDebounceInterval",en],sortComparator:"sortComparator",id:"id",panelWidth:"panelWidth",canSelectNullableOptions:[2,"canSelectNullableOptions","canSelectNullableOptions",he]},outputs:{openedChange:"openedChange",_openedStream:"opened",_closedStream:"closed",selectionChange:"selectionChange",valueChange:"valueChange"},exportAs:["matSelect"],features:[It([{provide:Lu,useExisting:t},{provide:l8,useExisting:t}]),ti],ngContentSelectors:vdA,decls:11,vars:10,consts:[["fallbackOverlayOrigin","cdkOverlayOrigin","trigger",""],["panel",""],["cdk-overlay-origin","",1,"mat-mdc-select-trigger",3,"click"],[1,"mat-mdc-select-value"],[1,"mat-mdc-select-placeholder","mat-mdc-select-min-line"],[1,"mat-mdc-select-value-text"],[1,"mat-mdc-select-arrow-wrapper"],[1,"mat-mdc-select-arrow"],["viewBox","0 0 24 24","width","24px","height","24px","focusable","false","aria-hidden","true"],["d","M7 10l5 5 5-5z"],["cdk-connected-overlay","","cdkConnectedOverlayLockPosition","","cdkConnectedOverlayHasBackdrop","","cdkConnectedOverlayBackdropClass","cdk-overlay-transparent-backdrop",3,"detach","backdropClick","overlayKeydown","cdkConnectedOverlayDisableClose","cdkConnectedOverlayPanelClass","cdkConnectedOverlayScrollStrategy","cdkConnectedOverlayOrigin","cdkConnectedOverlayPositions","cdkConnectedOverlayWidth","cdkConnectedOverlayFlexibleDimensions","cdkConnectedOverlayUsePopover"],[1,"mat-mdc-select-min-line"],["role","listbox","tabindex","-1",3,"keydown","ngClass"]],template:function(i,n){if(i&1){let o=JA();Ht(ydA),m(0,"div",2,0),eA("click",function(){return Z(o),X(n.open())}),m(3,"div",3),V(4,bdA,2,1,"span",4)(5,SdA,3,1,"span",5),w(),m(6,"div",6)(7,"div",7),Qt(),m(8,"svg",8),GA(9,"path",9),w()()()(),vt(10,xdA,3,10,"ng-template",10),eA("detach",function(){return Z(o),X(n.close())})("backdropClick",function(){return Z(o),X(n.close())})("overlayKeydown",function(r){return Z(o),X(n._handleOverlayKeydown(r))})}if(i&2){let o=An(1);p(3),ie("id",n._valueId),p(),W(n.empty?4:5),p(6),AA("cdkConnectedOverlayDisableClose",!0)("cdkConnectedOverlayPanelClass",n._overlayPanelClass)("cdkConnectedOverlayScrollStrategy",n._scrollStrategy)("cdkConnectedOverlayOrigin",n._preferredOverlayOrigin||o)("cdkConnectedOverlayPositions",n._positions)("cdkConnectedOverlayWidth",n._overlayWidth)("cdkConnectedOverlayFlexibleDimensions",!0)("cdkConnectedOverlayUsePopover",n._popoverLocation)}},dependencies:[sE,i8,gs],styles:[`@keyframes _mat-select-enter{from{opacity:0;transform:scaleY(0.8)}to{opacity:1;transform:none}}@keyframes _mat-select-exit{from{opacity:1}to{opacity:0}}.mat-mdc-select{display:inline-block;width:100%;outline:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-select-enabled-trigger-text-color, var(--mat-sys-on-surface));font-family:var(--mat-select-trigger-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-select-trigger-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-select-trigger-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-select-trigger-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-select-trigger-text-tracking, var(--mat-sys-body-large-tracking))}div.mat-mdc-select-panel{box-shadow:var(--mat-select-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-select-disabled{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-disabled .mat-mdc-select-placeholder{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-invalid .mat-mdc-select-arrow,.mat-form-field-invalid:not(.mat-form-field-disabled) .mat-mdc-form-field-infix::after{color:var(--mat-select-invalid-arrow-color, var(--mat-sys-error))}.mat-mdc-select-arrow{width:10px;height:5px;position:relative;color:var(--mat-select-enabled-arrow-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field.mat-focused .mat-mdc-select-arrow{color:var(--mat-select-focused-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-disabled .mat-mdc-select-arrow{color:var(--mat-select-disabled-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-select-open .mat-mdc-select-arrow{transform:rotate(180deg)}.mat-form-field-animations-enabled .mat-mdc-select-arrow{transition:transform 80ms linear}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}@media(forced-colors: active){.mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .mat-mdc-select-arrow svg{fill:GrayText}}div.mat-mdc-select-panel{width:100%;max-height:275px;outline:0;overflow:auto;padding:8px 0;border-radius:4px;box-sizing:border-box;position:relative;background-color:var(--mat-select-panel-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){div.mat-mdc-select-panel{outline:solid 1px}}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) div.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above div.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-select-panel-animations-enabled{animation:_mat-select-enter 120ms cubic-bezier(0, 0, 0.2, 1)}.mat-select-panel-animations-enabled.mat-select-panel-exit{animation:_mat-select-exit 100ms linear}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);color:var(--mat-select-placeholder-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field:not(.mat-form-field-animations-enabled) .mat-mdc-select-placeholder,._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{cursor:pointer}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:" ";white-space:pre;width:1px;display:inline-block;visibility:hidden}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:var(--mat-select-arrow-transform, translateY(-8px))} +`],encapsulation:2,changeDetection:0})}return t})();var ok=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[ll,ik,Gi,C0,Yr,ik]})}return t})();var LdA=["tooltip"],GdA=20;var KdA=new yA("mat-tooltip-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>dC(t,{scrollThrottle:GdA})}}),UdA=new yA("mat-tooltip-default-options",{providedIn:"root",factory:()=>({showDelay:0,hideDelay:0,touchendHideDelay:1500})});var vz="tooltip-panel",bz=v2({passive:!0}),JdA=8,YdA=8,TdA=24,HdA=200,Sa=(()=>{class t{_elementRef=h(ge);_ngZone=h(Oe);_platform=h(Ii);_ariaDescriber=h(HJ);_focusMonitor=h(nr);_dir=h(xo);_injector=h(ft);_viewContainerRef=h(Ho);_mediaMatcher=h(RB);_animationsDisabled=qi();_defaultOptions=h(UdA,{optional:!0});_overlayRef=null;_tooltipInstance=null;_overlayPanelClass;_portal;_position="below";_positionAtOrigin=!1;_disabled=!1;_tooltipClass;_viewInitialized=!1;_pointerExitEventsInitialized=!1;_tooltipComponent=Mz;_viewportMargin=8;_currentPosition;_cssClassPrefix="mat-mdc";_ariaDescriptionPending=!1;_dirSubscribed=!1;get position(){return this._position}set position(A){A!==this._position&&(this._position=A,this._overlayRef&&(this._updatePosition(this._overlayRef),this._tooltipInstance?.show(0),this._overlayRef.updatePosition()))}get positionAtOrigin(){return this._positionAtOrigin}set positionAtOrigin(A){this._positionAtOrigin=Dr(A),this._detach(),this._overlayRef=null}get disabled(){return this._disabled}set disabled(A){let i=Dr(A);this._disabled!==i&&(this._disabled=i,i?this.hide(0):this._setupPointerEnterEventsIfNeeded(),this._syncAriaDescription(this.message))}get showDelay(){return this._showDelay}set showDelay(A){this._showDelay=tg(A)}_showDelay;get hideDelay(){return this._hideDelay}set hideDelay(A){this._hideDelay=tg(A),this._tooltipInstance&&(this._tooltipInstance._mouseLeaveHideDelay=this._hideDelay)}_hideDelay;touchGestures="auto";get message(){return this._message}set message(A){let i=this._message;this._message=A!=null?String(A).trim():"",!this._message&&this._isTooltipVisible()?this.hide(0):(this._setupPointerEnterEventsIfNeeded(),this._updateTooltipMessage()),this._syncAriaDescription(i)}_message="";get tooltipClass(){return this._tooltipClass}set tooltipClass(A){this._tooltipClass=A,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass)}_passiveListeners=[];_touchstartTimeout=null;_destroyed=new $A;_isDestroyed=!1;constructor(){let A=this._defaultOptions;A&&(this._showDelay=A.showDelay,this._hideDelay=A.hideDelay,A.position&&(this.position=A.position),A.positionAtOrigin&&(this.positionAtOrigin=A.positionAtOrigin),A.touchGestures&&(this.touchGestures=A.touchGestures),A.tooltipClass&&(this.tooltipClass=A.tooltipClass)),this._viewportMargin=JdA}ngAfterViewInit(){this._viewInitialized=!0,this._setupPointerEnterEventsIfNeeded(),this._focusMonitor.monitor(this._elementRef).pipe(Bt(this._destroyed)).subscribe(A=>{A?A==="keyboard"&&this._ngZone.run(()=>this.show()):this._ngZone.run(()=>this.hide(0))})}ngOnDestroy(){let A=this._elementRef.nativeElement;this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),this._passiveListeners.forEach(([i,n])=>{A.removeEventListener(i,n,bz)}),this._passiveListeners.length=0,this._destroyed.next(),this._destroyed.complete(),this._isDestroyed=!0,this._ariaDescriber.removeDescription(A,this.message,"tooltip"),this._focusMonitor.stopMonitoring(A)}show(A=this.showDelay,i){if(this.disabled||!this.message||this._isTooltipVisible()){this._tooltipInstance?._cancelPendingAnimations();return}let n=this._createOverlay(i);this._detach(),this._portal=this._portal||new Ug(this._tooltipComponent,this._viewContainerRef);let o=this._tooltipInstance=n.attach(this._portal).instance;o._triggerElement=this._elementRef.nativeElement,o._mouseLeaveHideDelay=this._hideDelay,o.afterHidden().pipe(Bt(this._destroyed)).subscribe(()=>this._detach()),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),o.show(A)}hide(A=this.hideDelay){let i=this._tooltipInstance;i&&(i.isVisible()?i.hide(A):(i._cancelPendingAnimations(),this._detach()))}toggle(A){this._isTooltipVisible()?this.hide():this.show(void 0,A)}_isTooltipVisible(){return!!this._tooltipInstance&&this._tooltipInstance.isVisible()}_createOverlay(A){if(this._overlayRef){let a=this._overlayRef.getConfig().positionStrategy;if((!this.positionAtOrigin||!A)&&a._origin instanceof ge)return this._overlayRef;this._detach()}let i=this._injector.get(I0).getAncestorScrollContainers(this._elementRef),n=`${this._cssClassPrefix}-${vz}`,o=q1(this._injector,this.positionAtOrigin?A||this._elementRef:this._elementRef).withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`).withFlexibleDimensions(!1).withViewportMargin(this._viewportMargin).withScrollableContainers(i).withPopoverLocation("global");return o.positionChanges.pipe(Bt(this._destroyed)).subscribe(a=>{this._updateCurrentPositionClass(a.connectionPair),this._tooltipInstance&&a.scrollableViewProperties.isOverlayClipped&&this._tooltipInstance.isVisible()&&this._ngZone.run(()=>this.hide(0))}),this._overlayRef=gc(this._injector,{direction:this._dir,positionStrategy:o,panelClass:this._overlayPanelClass?[...this._overlayPanelClass,n]:n,scrollStrategy:this._injector.get(KdA)(),disableAnimations:this._animationsDisabled}),this._updatePosition(this._overlayRef),this._overlayRef.detachments().pipe(Bt(this._destroyed)).subscribe(()=>this._detach()),this._overlayRef.outsidePointerEvents().pipe(Bt(this._destroyed)).subscribe(()=>this._tooltipInstance?._handleBodyInteraction()),this._overlayRef.keydownEvents().pipe(Bt(this._destroyed)).subscribe(a=>{this._isTooltipVisible()&&a.keyCode===27&&!ma(a)&&(a.preventDefault(),a.stopPropagation(),this._ngZone.run(()=>this.hide(0)))}),this._defaultOptions?.disableTooltipInteractivity&&this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`),this._dirSubscribed||(this._dirSubscribed=!0,this._dir.change.pipe(Bt(this._destroyed)).subscribe(()=>{this._overlayRef&&this._updatePosition(this._overlayRef)})),this._overlayRef}_detach(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null}_updatePosition(A){let i=A.getConfig().positionStrategy,n=this._getOrigin(),o=this._getOverlayPosition();i.withPositions([this._addOffset(gA(gA({},n.main),o.main)),this._addOffset(gA(gA({},n.fallback),o.fallback))])}_addOffset(A){let i=YdA,n=!this._dir||this._dir.value=="ltr";return A.originY==="top"?A.offsetY=-i:A.originY==="bottom"?A.offsetY=i:A.originX==="start"?A.offsetX=n?-i:i:A.originX==="end"&&(A.offsetX=n?i:-i),A}_getOrigin(){let A=!this._dir||this._dir.value=="ltr",i=this.position,n;i=="above"||i=="below"?n={originX:"center",originY:i=="above"?"top":"bottom"}:i=="before"||i=="left"&&A||i=="right"&&!A?n={originX:"start",originY:"center"}:(i=="after"||i=="right"&&A||i=="left"&&!A)&&(n={originX:"end",originY:"center"});let{x:o,y:a}=this._invertPosition(n.originX,n.originY);return{main:n,fallback:{originX:o,originY:a}}}_getOverlayPosition(){let A=!this._dir||this._dir.value=="ltr",i=this.position,n;i=="above"?n={overlayX:"center",overlayY:"bottom"}:i=="below"?n={overlayX:"center",overlayY:"top"}:i=="before"||i=="left"&&A||i=="right"&&!A?n={overlayX:"end",overlayY:"center"}:(i=="after"||i=="right"&&A||i=="left"&&!A)&&(n={overlayX:"start",overlayY:"center"});let{x:o,y:a}=this._invertPosition(n.overlayX,n.overlayY);return{main:n,fallback:{overlayX:o,overlayY:a}}}_updateTooltipMessage(){this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),Yn(()=>{this._tooltipInstance&&this._overlayRef.updatePosition()},{injector:this._injector}))}_setTooltipClass(A){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=A,this._tooltipInstance._markForCheck())}_invertPosition(A,i){return this.position==="above"||this.position==="below"?i==="top"?i="bottom":i==="bottom"&&(i="top"):A==="end"?A="start":A==="start"&&(A="end"),{x:A,y:i}}_updateCurrentPositionClass(A){let{overlayY:i,originX:n,originY:o}=A,a;if(i==="center"?this._dir&&this._dir.value==="rtl"?a=n==="end"?"left":"right":a=n==="start"?"left":"right":a=i==="bottom"&&o==="top"?"above":"below",a!==this._currentPosition){let r=this._overlayRef;if(r){let s=`${this._cssClassPrefix}-${vz}-`;r.removePanelClass(s+this._currentPosition),r.addPanelClass(s+a)}this._currentPosition=a}}_setupPointerEnterEventsIfNeeded(){this._disabled||!this.message||!this._viewInitialized||this._passiveListeners.length||(this._isTouchPlatform()?this.touchGestures!=="off"&&(this._disableNativeGesturesIfNecessary(),this._passiveListeners.push(["touchstart",A=>{let i=A.targetTouches?.[0],n=i?{x:i.clientX,y:i.clientY}:void 0;this._setupPointerExitEventsIfNeeded(),this._touchstartTimeout&&clearTimeout(this._touchstartTimeout);let o=500;this._touchstartTimeout=setTimeout(()=>{this._touchstartTimeout=null,this.show(void 0,n)},this._defaultOptions?.touchLongPressShowDelay??o)}])):this._passiveListeners.push(["mouseenter",A=>{this._setupPointerExitEventsIfNeeded();let i;A.x!==void 0&&A.y!==void 0&&(i=A),this.show(void 0,i)}]),this._addListeners(this._passiveListeners))}_setupPointerExitEventsIfNeeded(){if(this._pointerExitEventsInitialized)return;this._pointerExitEventsInitialized=!0;let A=[];if(!this._isTouchPlatform())A.push(["mouseleave",i=>{let n=i.relatedTarget;(!n||!this._overlayRef?.overlayElement.contains(n))&&this.hide()}],["wheel",i=>this._wheelListener(i)]);else if(this.touchGestures!=="off"){this._disableNativeGesturesIfNecessary();let i=()=>{this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this.hide(this._defaultOptions?.touchendHideDelay)};A.push(["touchend",i],["touchcancel",i])}this._addListeners(A),this._passiveListeners.push(...A)}_addListeners(A){A.forEach(([i,n])=>{this._elementRef.nativeElement.addEventListener(i,n,bz)})}_isTouchPlatform(){return this._platform.IOS||this._platform.ANDROID?!0:this._platform.isBrowser?!!this._defaultOptions?.detectHoverCapability&&this._mediaMatcher.matchMedia("(any-hover: none)").matches:!1}_wheelListener(A){if(this._isTooltipVisible()){let i=this._injector.get(Xt).elementFromPoint(A.clientX,A.clientY),n=this._elementRef.nativeElement;i!==n&&!n.contains(i)&&this.hide()}}_disableNativeGesturesIfNecessary(){let A=this.touchGestures;if(A!=="off"){let i=this._elementRef.nativeElement,n=i.style;(A==="on"||i.nodeName!=="INPUT"&&i.nodeName!=="TEXTAREA")&&(n.userSelect=n.msUserSelect=n.webkitUserSelect=n.MozUserSelect="none"),(A==="on"||!i.draggable)&&(n.webkitUserDrag="none"),n.touchAction="none",n.webkitTapHighlightColor="transparent"}}_syncAriaDescription(A){this._ariaDescriptionPending||(this._ariaDescriptionPending=!0,this._ariaDescriber.removeDescription(this._elementRef.nativeElement,A,"tooltip"),this._isDestroyed||Yn({write:()=>{this._ariaDescriptionPending=!1,this.message&&!this.disabled&&this._ariaDescriber.describe(this._elementRef.nativeElement,this.message,"tooltip")}},{injector:this._injector}))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matTooltip",""]],hostAttrs:[1,"mat-mdc-tooltip-trigger"],hostVars:2,hostBindings:function(i,n){i&2&&ae("mat-mdc-tooltip-disabled",n.disabled)},inputs:{position:[0,"matTooltipPosition","position"],positionAtOrigin:[0,"matTooltipPositionAtOrigin","positionAtOrigin"],disabled:[0,"matTooltipDisabled","disabled"],showDelay:[0,"matTooltipShowDelay","showDelay"],hideDelay:[0,"matTooltipHideDelay","hideDelay"],touchGestures:[0,"matTooltipTouchGestures","touchGestures"],message:[0,"matTooltip","message"],tooltipClass:[0,"matTooltipClass","tooltipClass"]},exportAs:["matTooltip"]})}return t})(),Mz=(()=>{class t{_changeDetectorRef=h(mt);_elementRef=h(ge);_isMultiline=!1;message;tooltipClass;_showTimeoutId;_hideTimeoutId;_triggerElement;_mouseLeaveHideDelay;_animationsDisabled=qi();_tooltip;_closeOnInteraction=!1;_isVisible=!1;_onHide=new $A;_showAnimation="mat-mdc-tooltip-show";_hideAnimation="mat-mdc-tooltip-hide";constructor(){}show(A){this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=setTimeout(()=>{this._toggleVisibility(!0),this._showTimeoutId=void 0},A)}hide(A){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(()=>{this._toggleVisibility(!1),this._hideTimeoutId=void 0},A)}afterHidden(){return this._onHide}isVisible(){return this._isVisible}ngOnDestroy(){this._cancelPendingAnimations(),this._onHide.complete(),this._triggerElement=null}_handleBodyInteraction(){this._closeOnInteraction&&this.hide(0)}_markForCheck(){this._changeDetectorRef.markForCheck()}_handleMouseLeave({relatedTarget:A}){(!A||!this._triggerElement.contains(A))&&(this.isVisible()?this.hide(this._mouseLeaveHideDelay):this._finalizeAnimation(!1))}_onShow(){this._isMultiline=this._isTooltipMultiline(),this._markForCheck()}_isTooltipMultiline(){let A=this._elementRef.nativeElement.getBoundingClientRect();return A.height>TdA&&A.width>=HdA}_handleAnimationEnd({animationName:A}){(A===this._showAnimation||A===this._hideAnimation)&&this._finalizeAnimation(A===this._showAnimation)}_cancelPendingAnimations(){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=this._hideTimeoutId=void 0}_finalizeAnimation(A){A?this._closeOnInteraction=!0:this.isVisible()||this._onHide.next()}_toggleVisibility(A){let i=this._tooltip.nativeElement,n=this._showAnimation,o=this._hideAnimation;if(i.classList.remove(A?o:n),i.classList.add(A?n:o),this._isVisible!==A&&(this._isVisible=A,this._changeDetectorRef.markForCheck()),A&&!this._animationsDisabled&&typeof getComputedStyle=="function"){let a=getComputedStyle(i);(a.getPropertyValue("animation-duration")==="0s"||a.getPropertyValue("animation-name")==="none")&&(this._animationsDisabled=!0)}A&&this._onShow(),this._animationsDisabled&&(i.classList.add("_mat-animation-noopable"),this._finalizeAnimation(A))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tooltip-component"]],viewQuery:function(i,n){if(i&1&&ai(LdA,7),i&2){let o;ce(o=Ce())&&(n._tooltip=o.first)}},hostAttrs:["aria-hidden","true"],hostBindings:function(i,n){i&1&&eA("mouseleave",function(a){return n._handleMouseLeave(a)})},decls:4,vars:4,consts:[["tooltip",""],[1,"mdc-tooltip","mat-mdc-tooltip",3,"animationend","ngClass"],[1,"mat-mdc-tooltip-surface","mdc-tooltip__surface"]],template:function(i,n){if(i&1){let o=JA();m(0,"div",1,0),eA("animationend",function(r){return Z(o),X(n._handleAnimationEnd(r))}),m(2,"div",2),K(3),w()()}i&2&&(ae("mdc-tooltip--multiline",n._isMultiline),AA("ngClass",n.tooltipClass),p(3),qA(n.message))},dependencies:[gs],styles:[`.mat-mdc-tooltip{position:relative;transform:scale(0);display:inline-flex}.mat-mdc-tooltip::before{content:"";top:0;right:0;bottom:0;left:0;z-index:-1;position:absolute}.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before{top:-8px}.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before{bottom:-8px}.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before{left:-8px}.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before{right:-8px}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-surface{word-break:normal;overflow-wrap:anywhere;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center;will-change:transform,opacity;background-color:var(--mat-tooltip-container-color, var(--mat-sys-inverse-surface));color:var(--mat-tooltip-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-tooltip-container-shape, var(--mat-sys-corner-extra-small));font-family:var(--mat-tooltip-supporting-text-font, var(--mat-sys-body-small-font));font-size:var(--mat-tooltip-supporting-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-tooltip-supporting-text-weight, var(--mat-sys-body-small-weight));line-height:var(--mat-tooltip-supporting-text-line-height, var(--mat-sys-body-small-line-height));letter-spacing:var(--mat-tooltip-supporting-text-tracking, var(--mat-sys-body-small-tracking))}.mat-mdc-tooltip-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:right}.mat-mdc-tooltip-panel{line-height:normal}.mat-mdc-tooltip-panel.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards} +`],encapsulation:2,changeDetection:0})}return t})();var U2=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[bu,ll,Gi,C0]})}return t})();function zdA(t,e){if(t&1&&(m(0,"mat-option",17),K(1),w()),t&2){let A=e.$implicit;AA("value",A),p(),_e(" ",A," ")}}function OdA(t,e){if(t&1){let A=JA();m(0,"mat-form-field",14)(1,"mat-select",16,0),eA("selectionChange",function(n){Z(A);let o=v(2);return X(o._changePageSize(n.value))}),Ut(3,zdA,2,2,"mat-option",17,_i),w(),m(5,"div",18),eA("click",function(){Z(A);let n=An(2);return X(n.open())}),w()()}if(t&2){let A=v(2);AA("appearance",A._formFieldAppearance)("color",A.color),p(),AA("value",A.pageSize)("disabled",A.disabled),gp("aria-labelledby",A._pageSizeLabelId),AA("panelClass",A.selectConfig.panelClass||"")("disableOptionCentering",A.selectConfig.disableOptionCentering),p(2),Jt(A._displayedPageSizeOptions)}}function PdA(t,e){if(t&1&&(m(0,"div",15),K(1),w()),t&2){let A=v(2);p(),qA(A.pageSize)}}function jdA(t,e){if(t&1&&(m(0,"div",3)(1,"div",13),K(2),w(),V(3,OdA,6,7,"mat-form-field",14),V(4,PdA,2,1,"div",15),w()),t&2){let A=v();p(),ie("id",A._pageSizeLabelId),p(),_e(" ",A._intl.itemsPerPageLabel," "),p(),W(A._displayedPageSizeOptions.length>1?3:-1),p(),W(A._displayedPageSizeOptions.length<=1?4:-1)}}function qdA(t,e){if(t&1){let A=JA();m(0,"button",19),eA("click",function(){Z(A);let n=v();return X(n._buttonClicked(0,n._previousButtonsDisabled()))}),Qt(),m(1,"svg",8),GA(2,"path",20),w()()}if(t&2){let A=v();AA("matTooltip",A._intl.firstPageLabel)("matTooltipDisabled",A._previousButtonsDisabled())("disabled",A._previousButtonsDisabled())("tabindex",A._previousButtonsDisabled()?-1:null),ie("aria-label",A._intl.firstPageLabel)}}function VdA(t,e){if(t&1){let A=JA();m(0,"button",21),eA("click",function(){Z(A);let n=v();return X(n._buttonClicked(n.getNumberOfPages()-1,n._nextButtonsDisabled()))}),Qt(),m(1,"svg",8),GA(2,"path",22),w()()}if(t&2){let A=v();AA("matTooltip",A._intl.lastPageLabel)("matTooltipDisabled",A._nextButtonsDisabled())("disabled",A._nextButtonsDisabled())("tabindex",A._nextButtonsDisabled()?-1:null),ie("aria-label",A._intl.lastPageLabel)}}var d8=(()=>{class t{changes=new $A;itemsPerPageLabel="Items per page:";nextPageLabel="Next page";previousPageLabel="Previous page";firstPageLabel="First page";lastPageLabel="Last page";getRangeLabel=(A,i,n)=>{if(n==0||i==0)return`0 of ${n}`;n=Math.max(n,0);let o=A*i,a=o{class t{_intl=h(d8);_changeDetectorRef=h(mt);_formFieldAppearance;_pageSizeLabelId=h(an).getId("mat-paginator-page-size-label-");_intlChanges;_isInitialized=!1;_initializedStream=new Pl(1);color;get pageIndex(){return this._pageIndex}set pageIndex(A){this._pageIndex=Math.max(A||0,0),this._changeDetectorRef.markForCheck()}_pageIndex=0;get length(){return this._length}set length(A){this._length=A||0,this._changeDetectorRef.markForCheck()}_length=0;get pageSize(){return this._pageSize}set pageSize(A){this._pageSize=Math.max(A||0,0),this._updateDisplayedPageSizeOptions()}_pageSize;get pageSizeOptions(){return this._pageSizeOptions}set pageSizeOptions(A){this._pageSizeOptions=(A||[]).map(i=>en(i,0)),this._updateDisplayedPageSizeOptions()}_pageSizeOptions=[];hidePageSize=!1;showFirstLastButtons=!1;selectConfig={};disabled=!1;page=new WA;_displayedPageSizeOptions;initialized=this._initializedStream;constructor(){let A=this._intl,i=h(ZdA,{optional:!0});if(this._intlChanges=A.changes.subscribe(()=>this._changeDetectorRef.markForCheck()),i){let{pageSize:n,pageSizeOptions:o,hidePageSize:a,showFirstLastButtons:r}=i;n!=null&&(this._pageSize=n),o!=null&&(this._pageSizeOptions=o),a!=null&&(this.hidePageSize=a),r!=null&&(this.showFirstLastButtons=r)}this._formFieldAppearance=i?.formFieldAppearance||"outline"}ngOnInit(){this._isInitialized=!0,this._updateDisplayedPageSizeOptions(),this._initializedStream.next()}ngOnDestroy(){this._initializedStream.complete(),this._intlChanges.unsubscribe()}nextPage(){this.hasNextPage()&&this._navigate(this.pageIndex+1)}previousPage(){this.hasPreviousPage()&&this._navigate(this.pageIndex-1)}firstPage(){this.hasPreviousPage()&&this._navigate(0)}lastPage(){this.hasNextPage()&&this._navigate(this.getNumberOfPages()-1)}hasPreviousPage(){return this.pageIndex>=1&&this.pageSize!=0}hasNextPage(){let A=this.getNumberOfPages()-1;return this.pageIndexA-i),this._changeDetectorRef.markForCheck())}_emitPageEvent(A){this.page.emit({previousPageIndex:A,pageIndex:this.pageIndex,pageSize:this.pageSize,length:this.length})}_navigate(A){let i=this.pageIndex;A!==i&&(this.pageIndex=A,this._emitPageEvent(i))}_buttonClicked(A,i){i||this._navigate(A)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-paginator"]],hostAttrs:["role","group",1,"mat-mdc-paginator"],inputs:{color:"color",pageIndex:[2,"pageIndex","pageIndex",en],length:[2,"length","length",en],pageSize:[2,"pageSize","pageSize",en],pageSizeOptions:"pageSizeOptions",hidePageSize:[2,"hidePageSize","hidePageSize",he],showFirstLastButtons:[2,"showFirstLastButtons","showFirstLastButtons",he],selectConfig:"selectConfig",disabled:[2,"disabled","disabled",he]},outputs:{page:"page"},exportAs:["matPaginator"],decls:14,vars:14,consts:[["selectRef",""],[1,"mat-mdc-paginator-outer-container"],[1,"mat-mdc-paginator-container"],[1,"mat-mdc-paginator-page-size"],[1,"mat-mdc-paginator-range-actions"],["aria-atomic","true","aria-live","polite","role","status",1,"mat-mdc-paginator-range-label"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-previous",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["viewBox","0 0 24 24","focusable","false","aria-hidden","true",1,"mat-mdc-paginator-icon"],["d","M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-next",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],["aria-hidden","true",1,"mat-mdc-paginator-page-size-label"],[1,"mat-mdc-paginator-page-size-select",3,"appearance","color"],[1,"mat-mdc-paginator-page-size-value"],["hideSingleSelectionIndicator","",3,"selectionChange","value","disabled","aria-labelledby","panelClass","disableOptionCentering"],[3,"value"],[1,"mat-mdc-paginator-touch-target",3,"click"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z"]],template:function(i,n){i&1&&(m(0,"div",1)(1,"div",2),V(2,jdA,5,4,"div",3),m(3,"div",4)(4,"div",5),K(5),w(),V(6,qdA,3,5,"button",6),m(7,"button",7),eA("click",function(){return n._buttonClicked(n.pageIndex-1,n._previousButtonsDisabled())}),Qt(),m(8,"svg",8),GA(9,"path",9),w()(),as(),m(10,"button",10),eA("click",function(){return n._buttonClicked(n.pageIndex+1,n._nextButtonsDisabled())}),Qt(),m(11,"svg",8),GA(12,"path",11),w()(),V(13,VdA,3,5,"button",12),w()()()),i&2&&(p(2),W(n.hidePageSize?-1:2),p(3),_e(" ",n._intl.getRangeLabel(n.pageIndex,n.pageSize,n.length)," "),p(),W(n.showFirstLastButtons?6:-1),p(),AA("matTooltip",n._intl.previousPageLabel)("matTooltipDisabled",n._previousButtonsDisabled())("disabled",n._previousButtonsDisabled())("tabindex",n._previousButtonsDisabled()?-1:null),ie("aria-label",n._intl.previousPageLabel),p(3),AA("matTooltip",n._intl.nextPageLabel)("matTooltipDisabled",n._nextButtonsDisabled())("disabled",n._nextButtonsDisabled())("tabindex",n._nextButtonsDisabled()?-1:null),ie("aria-label",n._intl.nextPageLabel),p(3),W(n.showFirstLastButtons?13:-1))},dependencies:[ta,Il,Hr,Ma,Sa],styles:[`.mat-mdc-paginator{display:block;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-paginator-container-text-color, var(--mat-sys-on-surface));background-color:var(--mat-paginator-container-background-color, var(--mat-sys-surface));font-family:var(--mat-paginator-container-text-font, var(--mat-sys-body-small-font));line-height:var(--mat-paginator-container-text-line-height, var(--mat-sys-body-small-line-height));font-size:var(--mat-paginator-container-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-paginator-container-text-weight, var(--mat-sys-body-small-weight));letter-spacing:var(--mat-paginator-container-text-tracking, var(--mat-sys-body-small-tracking));--mat-form-field-container-height: var(--mat-paginator-form-field-container-height, 40px);--mat-form-field-container-vertical-padding: var(--mat-paginator-form-field-container-vertical-padding, 8px)}.mat-mdc-paginator .mat-mdc-select-value{font-size:var(--mat-paginator-select-trigger-text-size, var(--mat-sys-body-small-size))}.mat-mdc-paginator .mat-mdc-form-field-subscript-wrapper{display:none}.mat-mdc-paginator .mat-mdc-select{line-height:1.5}.mat-mdc-paginator-outer-container{display:flex}.mat-mdc-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap;width:100%;min-height:var(--mat-paginator-container-size, 56px)}.mat-mdc-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-mdc-paginator-page-size{margin-right:0;margin-left:8px}.mat-mdc-paginator-page-size-label{margin:0 4px}.mat-mdc-paginator-page-size-select{margin:0 4px;width:var(--mat-paginator-page-size-select-width, 84px)}.mat-mdc-paginator-range-label{margin:0 32px 0 24px}.mat-mdc-paginator-range-actions{display:flex;align-items:center}.mat-mdc-paginator-icon{display:inline-block;width:28px;fill:var(--mat-paginator-enabled-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon{fill:var(--mat-paginator-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}[dir=rtl] .mat-mdc-paginator-icon{transform:rotate(180deg)}@media(forced-colors: active){.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon,.mat-mdc-paginator-icon{fill:currentColor}.mat-mdc-paginator-range-actions .mat-mdc-icon-button{outline:solid 1px}.mat-mdc-paginator-range-actions .mat-mdc-icon-button[aria-disabled]{color:GrayText}}.mat-mdc-paginator-touch-target{display:var(--mat-paginator-touch-target-display, block);position:absolute;top:50%;left:50%;width:var(--mat-paginator-page-size-select-width, 84px);height:var(--mat-paginator-page-size-select-touch-target-height, 48px);background-color:rgba(0,0,0,0);transform:translate(-50%, -50%);cursor:pointer} +`],encapsulation:2,changeDetection:0})}return t})();var Sz=["*"],XdA=["content"],$dA=[[["mat-drawer"]],[["mat-drawer-content"]],"*"],ABA=["mat-drawer","mat-drawer-content","*"];function eBA(t,e){if(t&1){let A=JA();m(0,"div",1),eA("click",function(){Z(A);let n=v();return X(n._onBackdropClicked())}),w()}if(t&2){let A=v();ae("mat-drawer-shown",A._isShowingBackdrop())}}function tBA(t,e){t&1&&(m(0,"mat-drawer-content"),He(1,2),w())}var iBA=new yA("MAT_DRAWER_DEFAULT_AUTOSIZE",{providedIn:"root",factory:()=>!1}),xz=new yA("MAT_DRAWER_CONTAINER"),ak=(()=>{class t extends IC{_platform=h(Ii);_changeDetectorRef=h(mt);_container=h(sk);constructor(){let A=h(ge),i=h(I0),n=h(Oe);super(A,i,n)}ngAfterContentInit(){this._container._contentMarginChanges.subscribe(()=>{this._changeDetectorRef.markForCheck()})}_shouldBeHidden(){if(this._platform.isBrowser)return!1;let{start:A,end:i}=this._container;return A!=null&&A.mode!=="over"&&A.opened||i!=null&&i.mode!=="over"&&i.opened}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-drawer-content"]],hostAttrs:[1,"mat-drawer-content"],hostVars:6,hostBindings:function(i,n){i&2&&(wn("margin-left",n._container._contentMargins.left,"px")("margin-right",n._container._contentMargins.right,"px"),ae("mat-drawer-content-hidden",n._shouldBeHidden()))},features:[It([{provide:IC,useExisting:t}]),dt],ngContentSelectors:Sz,decls:1,vars:0,template:function(i,n){i&1&&(Ht(),He(0))},encapsulation:2,changeDetection:0})}return t})(),rk=(()=>{class t{_elementRef=h(ge);_focusTrapFactory=h(yu);_focusMonitor=h(nr);_platform=h(Ii);_ngZone=h(Oe);_renderer=h(Fi);_interactivityChecker=h(NB);_doc=h(Xt);_container=h(xz,{optional:!0});_focusTrap=null;_elementFocusedBeforeDrawerWasOpened=null;_eventCleanups;_isAttached=!1;_anchor=null;get position(){return this._position}set position(A){A=A==="end"?"end":"start",A!==this._position&&(this._isAttached&&this._updatePositionInParent(A),this._position=A,this.onPositionChanged.emit())}_position="start";get mode(){return this._mode}set mode(A){this._mode=A,this._updateFocusTrapState(),this._modeChanged.next()}_mode="over";get disableClose(){return this._disableClose}set disableClose(A){this._disableClose=Dr(A)}_disableClose=!1;get autoFocus(){let A=this._autoFocus;return A??(this.mode==="side"?"dialog":"first-tabbable")}set autoFocus(A){(A==="true"||A==="false"||A==null)&&(A=Dr(A)),this._autoFocus=A}_autoFocus;get opened(){return this._opened()}set opened(A){this.toggle(Dr(A))}_opened=jA(!1);_openedVia=null;_animationStarted=new $A;_animationEnd=new $A;openedChange=new WA(!0);_openedStream=this.openedChange.pipe(Ze(A=>A),fe(()=>{}));openedStart=this._animationStarted.pipe(Ze(()=>this.opened),cu(void 0));_closedStream=this.openedChange.pipe(Ze(A=>!A),fe(()=>{}));closedStart=this._animationStarted.pipe(Ze(()=>!this.opened),cu(void 0));_destroyed=new $A;onPositionChanged=new WA;_content;_modeChanged=new $A;_injector=h(ft);_changeDetectorRef=h(mt);constructor(){this.openedChange.pipe(Bt(this._destroyed)).subscribe(A=>{A?(this._elementFocusedBeforeDrawerWasOpened=this._doc.activeElement,this._takeFocus()):this._isFocusWithinDrawer()&&this._restoreFocus(this._openedVia||"program")}),this._ngZone.runOutsideAngular(()=>{let A=this._elementRef.nativeElement;il(A,"keydown").pipe(Ze(i=>i.keyCode===27&&!this.disableClose&&!ma(i)),Bt(this._destroyed)).subscribe(i=>this._ngZone.run(()=>{this.close(),i.stopPropagation(),i.preventDefault()})),this._eventCleanups=[this._renderer.listen(A,"transitionrun",this._handleTransitionEvent),this._renderer.listen(A,"transitionend",this._handleTransitionEvent),this._renderer.listen(A,"transitioncancel",this._handleTransitionEvent)]}),this._animationEnd.subscribe(()=>{this.openedChange.emit(this.opened)})}_forceFocus(A,i){this._interactivityChecker.isFocusable(A)||(A.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let n=()=>{o(),a(),A.removeAttribute("tabindex")},o=this._renderer.listen(A,"blur",n),a=this._renderer.listen(A,"mousedown",n)})),A.focus(i)}_focusByCssSelector(A,i){let n=this._elementRef.nativeElement.querySelector(A);n&&this._forceFocus(n,i)}_takeFocus(){if(!this._focusTrap)return;let A=this._elementRef.nativeElement;switch(this.autoFocus){case!1:case"dialog":return;case!0:case"first-tabbable":Yn(()=>{!this._focusTrap.focusInitialElement()&&typeof A.focus=="function"&&A.focus()},{injector:this._injector});break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]');break;default:this._focusByCssSelector(this.autoFocus);break}}_restoreFocus(A){this.autoFocus!=="dialog"&&(this._elementFocusedBeforeDrawerWasOpened?this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened,A):this._elementRef.nativeElement.blur(),this._elementFocusedBeforeDrawerWasOpened=null)}_isFocusWithinDrawer(){let A=this._doc.activeElement;return!!A&&this._elementRef.nativeElement.contains(A)}ngAfterViewInit(){this._isAttached=!0,this._position==="end"&&this._updatePositionInParent("end"),this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._updateFocusTrapState())}ngOnDestroy(){this._eventCleanups.forEach(A=>A()),this._focusTrap?.destroy(),this._anchor?.remove(),this._anchor=null,this._animationStarted.complete(),this._animationEnd.complete(),this._modeChanged.complete(),this._destroyed.next(),this._destroyed.complete()}open(A){return this.toggle(!0,A)}close(){return this.toggle(!1)}_closeViaBackdropClick(){return this._setOpen(!1,!0,"mouse")}toggle(A=!this.opened,i){A&&i&&(this._openedVia=i);let n=this._setOpen(A,!A&&this._isFocusWithinDrawer(),this._openedVia||"program");return A||(this._openedVia=null),n}_setOpen(A,i,n){return A===this.opened?Promise.resolve(A?"open":"close"):(this._opened.set(A),this._container?._transitionsEnabled?this._setIsAnimating(!0):setTimeout(()=>{this._animationStarted.next(),this._animationEnd.next()}),this._elementRef.nativeElement.classList.toggle("mat-drawer-opened",A),!A&&i&&this._restoreFocus(n),this._changeDetectorRef.markForCheck(),this._updateFocusTrapState(),new Promise(o=>{this.openedChange.pipe(oo(1)).subscribe(a=>o(a?"open":"close"))}))}_setIsAnimating(A){this._elementRef.nativeElement.classList.toggle("mat-drawer-animating",A)}_getWidth(){return this._elementRef.nativeElement.offsetWidth||0}_updateFocusTrapState(){this._focusTrap&&(this._focusTrap.enabled=!!this._container?.hasBackdrop&&this.opened)}_updatePositionInParent(A){if(!this._platform.isBrowser)return;let i=this._elementRef.nativeElement,n=i.parentNode;A==="end"?(this._anchor||(this._anchor=this._doc.createComment("mat-drawer-anchor"),n.insertBefore(this._anchor,i)),n.appendChild(i)):this._anchor&&this._anchor.parentNode.insertBefore(i,this._anchor)}_handleTransitionEvent=A=>{let i=this._elementRef.nativeElement;A.target===i&&this._ngZone.run(()=>{A.type==="transitionrun"?this._animationStarted.next(A):(A.type==="transitionend"&&this._setIsAnimating(!1),this._animationEnd.next(A))})};static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-drawer"]],viewQuery:function(i,n){if(i&1&&ai(XdA,5),i&2){let o;ce(o=Ce())&&(n._content=o.first)}},hostAttrs:[1,"mat-drawer"],hostVars:12,hostBindings:function(i,n){i&2&&(ie("align",null)("tabIndex",n.mode!=="side"?"-1":null),wn("visibility",!n._container&&!n.opened?"hidden":null),ae("mat-drawer-end",n.position==="end")("mat-drawer-over",n.mode==="over")("mat-drawer-push",n.mode==="push")("mat-drawer-side",n.mode==="side"))},inputs:{position:"position",mode:"mode",disableClose:"disableClose",autoFocus:"autoFocus",opened:"opened"},outputs:{openedChange:"openedChange",_openedStream:"opened",openedStart:"openedStart",_closedStream:"closed",closedStart:"closedStart",onPositionChanged:"positionChanged"},exportAs:["matDrawer"],ngContentSelectors:Sz,decls:3,vars:0,consts:[["content",""],["cdkScrollable","",1,"mat-drawer-inner-container"]],template:function(i,n){i&1&&(Ht(),m(0,"div",1,0),He(2),w())},dependencies:[IC],encapsulation:2,changeDetection:0})}return t})(),sk=(()=>{class t{_dir=h(xo,{optional:!0});_element=h(ge);_ngZone=h(Oe);_changeDetectorRef=h(mt);_animationDisabled=qi();_transitionsEnabled=!1;_allDrawers;_drawers=new nl;_content;_userContent;get start(){return this._start}get end(){return this._end}get autosize(){return this._autosize}set autosize(A){this._autosize=Dr(A)}_autosize=h(iBA);get hasBackdrop(){return this._drawerHasBackdrop(this._start)||this._drawerHasBackdrop(this._end)}set hasBackdrop(A){this._backdropOverride=A==null?null:Dr(A)}_backdropOverride=null;backdropClick=new WA;_start=null;_end=null;_left=null;_right=null;_destroyed=new $A;_doCheckSubject=new $A;_contentMargins={left:null,right:null};_contentMarginChanges=new $A;get scrollable(){return this._userContent||this._content}_injector=h(ft);constructor(){let A=h(Ii),i=h(Gs);this._dir?.change.pipe(Bt(this._destroyed)).subscribe(()=>{this._validateDrawers(),this.updateContentMargins()}),i.change().pipe(Bt(this._destroyed)).subscribe(()=>this.updateContentMargins()),!this._animationDisabled&&A.isBrowser&&this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{this._element.nativeElement.classList.add("mat-drawer-transition"),this._transitionsEnabled=!0},200)})}ngAfterContentInit(){this._allDrawers.changes.pipe(cn(this._allDrawers),Bt(this._destroyed)).subscribe(A=>{this._drawers.reset(A.filter(i=>!i._container||i._container===this)),this._drawers.notifyOnChanges()}),this._drawers.changes.pipe(cn(null)).subscribe(()=>{this._validateDrawers(),this._drawers.forEach(A=>{this._watchDrawerToggle(A),this._watchDrawerPosition(A),this._watchDrawerMode(A)}),(!this._drawers.length||this._isDrawerOpen(this._start)||this._isDrawerOpen(this._end))&&this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),this._ngZone.runOutsideAngular(()=>{this._doCheckSubject.pipe(Ps(10),Bt(this._destroyed)).subscribe(()=>this.updateContentMargins())})}ngOnDestroy(){this._contentMarginChanges.complete(),this._doCheckSubject.complete(),this._drawers.destroy(),this._destroyed.next(),this._destroyed.complete()}open(){this._drawers.forEach(A=>A.open())}close(){this._drawers.forEach(A=>A.close())}updateContentMargins(){let A=0,i=0;if(this._left&&this._left.opened){if(this._left.mode=="side")A+=this._left._getWidth();else if(this._left.mode=="push"){let n=this._left._getWidth();A+=n,i-=n}}if(this._right&&this._right.opened){if(this._right.mode=="side")i+=this._right._getWidth();else if(this._right.mode=="push"){let n=this._right._getWidth();i+=n,A-=n}}A=A||null,i=i||null,(A!==this._contentMargins.left||i!==this._contentMargins.right)&&(this._contentMargins={left:A,right:i},this._ngZone.run(()=>this._contentMarginChanges.next(this._contentMargins)))}ngDoCheck(){this._autosize&&this._isPushed()&&this._ngZone.runOutsideAngular(()=>this._doCheckSubject.next())}_watchDrawerToggle(A){A._animationStarted.pipe(Bt(this._drawers.changes)).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),A.mode!=="side"&&A.openedChange.pipe(Bt(this._drawers.changes)).subscribe(()=>this._setContainerClass(A.opened))}_watchDrawerPosition(A){A.onPositionChanged.pipe(Bt(this._drawers.changes)).subscribe(()=>{Yn({read:()=>this._validateDrawers()},{injector:this._injector})})}_watchDrawerMode(A){A._modeChanged.pipe(Bt(hi(this._drawers.changes,this._destroyed))).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()})}_setContainerClass(A){let i=this._element.nativeElement.classList,n="mat-drawer-container-has-open";A?i.add(n):i.remove(n)}_validateDrawers(){this._start=this._end=null,this._drawers.forEach(A=>{A.position=="end"?(this._end!=null,this._end=A):(this._start!=null,this._start=A)}),this._right=this._left=null,this._dir&&this._dir.value==="rtl"?(this._left=this._end,this._right=this._start):(this._left=this._start,this._right=this._end)}_isPushed(){return this._isDrawerOpen(this._start)&&this._start.mode!="over"||this._isDrawerOpen(this._end)&&this._end.mode!="over"}_onBackdropClicked(){this.backdropClick.emit(),this._closeModalDrawersViaBackdrop()}_closeModalDrawersViaBackdrop(){[this._start,this._end].filter(A=>A&&!A.disableClose&&this._drawerHasBackdrop(A)).forEach(A=>A._closeViaBackdropClick())}_isShowingBackdrop(){return this._isDrawerOpen(this._start)&&this._drawerHasBackdrop(this._start)||this._isDrawerOpen(this._end)&&this._drawerHasBackdrop(this._end)}_isDrawerOpen(A){return A!=null&&A.opened}_drawerHasBackdrop(A){return this._backdropOverride==null?!!A&&A.mode!=="side":this._backdropOverride}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-drawer-container"]],contentQueries:function(i,n,o){if(i&1&&ua(o,ak,5)(o,rk,5),i&2){let a;ce(a=Ce())&&(n._content=a.first),ce(a=Ce())&&(n._allDrawers=a)}},viewQuery:function(i,n){if(i&1&&ai(ak,5),i&2){let o;ce(o=Ce())&&(n._userContent=o.first)}},hostAttrs:[1,"mat-drawer-container"],hostVars:2,hostBindings:function(i,n){i&2&&ae("mat-drawer-container-explicit-backdrop",n._backdropOverride)},inputs:{autosize:"autosize",hasBackdrop:"hasBackdrop"},outputs:{backdropClick:"backdropClick"},exportAs:["matDrawerContainer"],features:[It([{provide:xz,useExisting:t}])],ngContentSelectors:ABA,decls:4,vars:2,consts:[[1,"mat-drawer-backdrop",3,"mat-drawer-shown"],[1,"mat-drawer-backdrop",3,"click"]],template:function(i,n){i&1&&(Ht($dA),V(0,eBA,1,2,"div",0),He(1),He(2,1),V(3,tBA,2,0,"mat-drawer-content")),i&2&&(W(n.hasBackdrop?0:-1),p(3),W(n._content?-1:3))},dependencies:[ak],styles:[`.mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-sys-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-sys-background));box-sizing:border-box;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color, color-mix(in srgb, var(--mat-sys-neutral-variant20) 40%, transparent))}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}@media(forced-colors: active){.mat-drawer-backdrop{opacity:.5}}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-content.mat-drawer-content-hidden{opacity:0}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-sys-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow, none);background-color:var(--mat-sidenav-container-background-color, var(--mat-sys-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));width:var(--mat-sidenav-container-width, 360px);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}@media(forced-colors: active){.mat-drawer,[dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}}@media(forced-colors: active){[dir=rtl] .mat-drawer,.mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-transition .mat-drawer{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating){visibility:hidden;box-shadow:none}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating) .mat-drawer-inner-container{display:none}.mat-drawer.mat-drawer-opened.mat-drawer-opened{transform:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto}.mat-sidenav-fixed{position:fixed} +`],encapsulation:2,changeDetection:0})}return t})();var nBA=["mat-internal-form-field",""],oBA=["*"],B8=(()=>{class t{labelPosition="after";static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["div","mat-internal-form-field",""]],hostAttrs:[1,"mdc-form-field","mat-internal-form-field"],hostVars:2,hostBindings:function(i,n){i&2&&ae("mdc-form-field--align-end",n.labelPosition==="before")},inputs:{labelPosition:"labelPosition"},attrs:nBA,ngContentSelectors:oBA,decls:1,vars:0,template:function(i,n){i&1&&(Ht(),He(0))},styles:[`.mat-internal-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-flex;align-items:center;vertical-align:middle}.mat-internal-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mat-internal-form-field>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end .mdc-form-field--align-end label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0} +`],encapsulation:2,changeDetection:0})}return t})();var aBA=["switch"],rBA=["*"];function sBA(t,e){t&1&&(m(0,"span",11),Qt(),m(1,"svg",13),GA(2,"path",14),w(),m(3,"svg",15),GA(4,"path",16),w()())}var gBA=new yA("mat-slide-toggle-default-options",{providedIn:"root",factory:()=>({disableToggleValue:!1,hideIcon:!1,disabledInteractive:!1})}),E8=class{source;checked;constructor(e,A){this.source=e,this.checked=A}},Rz=(()=>{class t{_elementRef=h(ge);_focusMonitor=h(nr);_changeDetectorRef=h(mt);defaults=h(gBA);_onChange=A=>{};_onTouched=()=>{};_validatorOnChange=()=>{};_uniqueId;_checked=!1;_createChangeEvent(A){return new E8(this,A)}_labelId;get buttonId(){return`${this.id||this._uniqueId}-button`}_switchElement;focus(){this._switchElement.nativeElement.focus()}_noopAnimations=qi();_focused=!1;name=null;id;labelPosition="after";ariaLabel=null;ariaLabelledby=null;ariaDescribedby;required=!1;color;disabled=!1;disableRipple=!1;tabIndex=0;get checked(){return this._checked}set checked(A){this._checked=A,this._changeDetectorRef.markForCheck()}hideIcon;disabledInteractive;change=new WA;toggleChange=new WA;get inputId(){return`${this.id||this._uniqueId}-input`}constructor(){h(Xn).load(Ir);let A=h(new Zs("tabindex"),{optional:!0}),i=this.defaults;this.tabIndex=A==null?0:parseInt(A)||0,this.color=i.color||"accent",this.id=this._uniqueId=h(an).getId("mat-mdc-slide-toggle-"),this.hideIcon=i.hideIcon??!1,this.disabledInteractive=i.disabledInteractive??!1,this._labelId=this._uniqueId+"-label"}ngAfterContentInit(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(A=>{A==="keyboard"||A==="program"?(this._focused=!0,this._changeDetectorRef.markForCheck()):A||Promise.resolve().then(()=>{this._focused=!1,this._onTouched(),this._changeDetectorRef.markForCheck()})})}ngOnChanges(A){A.required&&this._validatorOnChange()}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef)}writeValue(A){this.checked=!!A}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}validate(A){return this.required&&A.value!==!0?{required:!0}:null}registerOnValidatorChange(A){this._validatorOnChange=A}setDisabledState(A){this.disabled=A,this._changeDetectorRef.markForCheck()}toggle(){this.checked=!this.checked,this._onChange(this.checked)}_emitChangeEvent(){this._onChange(this.checked),this.change.emit(this._createChangeEvent(this.checked))}_handleClick(){this.disabled||(this.toggleChange.emit(),this.defaults.disableToggleValue||(this.checked=!this.checked,this._onChange(this.checked),this.change.emit(new E8(this,this.checked))))}_getAriaLabelledBy(){return this.ariaLabelledby?this.ariaLabelledby:this.ariaLabel?null:this._labelId}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-slide-toggle"]],viewQuery:function(i,n){if(i&1&&ai(aBA,5),i&2){let o;ce(o=Ce())&&(n._switchElement=o.first)}},hostAttrs:[1,"mat-mdc-slide-toggle"],hostVars:13,hostBindings:function(i,n){i&2&&(vo("id",n.id),ie("tabindex",null)("aria-label",null)("name",null)("aria-labelledby",null),zo(n.color?"mat-"+n.color:""),ae("mat-mdc-slide-toggle-focused",n._focused)("mat-mdc-slide-toggle-checked",n.checked)("_mat-animation-noopable",n._noopAnimations))},inputs:{name:"name",id:"id",labelPosition:"labelPosition",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],required:[2,"required","required",he],color:"color",disabled:[2,"disabled","disabled",he],disableRipple:[2,"disableRipple","disableRipple",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)],checked:[2,"checked","checked",he],hideIcon:[2,"hideIcon","hideIcon",he],disabledInteractive:[2,"disabledInteractive","disabledInteractive",he]},outputs:{change:"change",toggleChange:"toggleChange"},exportAs:["matSlideToggle"],features:[It([{provide:Lg,useExisting:pr(()=>t),multi:!0},{provide:a0,useExisting:t,multi:!0}]),ti],ngContentSelectors:rBA,decls:14,vars:27,consts:[["switch",""],["mat-internal-form-field","",3,"labelPosition"],["role","switch","type","button",1,"mdc-switch",3,"click","tabIndex","disabled"],[1,"mat-mdc-slide-toggle-touch-target"],[1,"mdc-switch__track"],[1,"mdc-switch__handle-track"],[1,"mdc-switch__handle"],[1,"mdc-switch__shadow"],[1,"mdc-elevation-overlay"],[1,"mdc-switch__ripple"],["mat-ripple","",1,"mat-mdc-slide-toggle-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-switch__icons"],[1,"mdc-label",3,"click","for"],["viewBox","0 0 24 24","aria-hidden","true",1,"mdc-switch__icon","mdc-switch__icon--on"],["d","M19.69,5.23L8.96,15.96l-4.23-4.23L2.96,13.5l6,6L21.46,7L19.69,5.23z"],["viewBox","0 0 24 24","aria-hidden","true",1,"mdc-switch__icon","mdc-switch__icon--off"],["d","M20 13H4v-2h16v2z"]],template:function(i,n){if(i&1){let o=JA();Ht(),m(0,"div",1)(1,"button",2,0),eA("click",function(){return Z(o),X(n._handleClick())}),GA(3,"div",3)(4,"span",4),m(5,"span",5)(6,"span",6)(7,"span",7),GA(8,"span",8),w(),m(9,"span",9),GA(10,"span",10),w(),V(11,sBA,5,0,"span",11),w()()(),m(12,"label",12),eA("click",function(r){return Z(o),X(r.stopPropagation())}),He(13),w()()}if(i&2){let o=An(2);AA("labelPosition",n.labelPosition),p(),ae("mdc-switch--selected",n.checked)("mdc-switch--unselected",!n.checked)("mdc-switch--checked",n.checked)("mdc-switch--disabled",n.disabled)("mat-mdc-slide-toggle-disabled-interactive",n.disabledInteractive),AA("tabIndex",n.disabled&&!n.disabledInteractive?-1:n.tabIndex)("disabled",n.disabled&&!n.disabledInteractive),ie("id",n.buttonId)("name",n.name)("aria-label",n.ariaLabel)("aria-labelledby",n._getAriaLabelledBy())("aria-describedby",n.ariaDescribedby)("aria-required",n.required||null)("aria-checked",n.checked)("aria-disabled",n.disabled&&n.disabledInteractive?"true":null),p(9),AA("matRippleTrigger",o)("matRippleDisabled",n.disableRipple||n.disabled)("matRippleCentered",!0),p(),W(n.hideIcon?-1:11),p(),AA("for",n.buttonId),ie("id",n._labelId)}},dependencies:[ig,B8],styles:[`.mdc-switch{align-items:center;background:none;border:none;cursor:pointer;display:inline-flex;flex-shrink:0;margin:0;outline:none;overflow:visible;padding:0;position:relative;width:var(--mat-slide-toggle-track-width, 52px)}.mdc-switch.mdc-switch--disabled{cursor:default;pointer-events:none}.mdc-switch.mat-mdc-slide-toggle-disabled-interactive{pointer-events:auto}label:empty{display:none}.mdc-switch__track{overflow:hidden;position:relative;width:100%;height:var(--mat-slide-toggle-track-height, 32px);border-radius:var(--mat-slide-toggle-track-shape, var(--mat-sys-corner-full))}.mdc-switch--disabled.mdc-switch .mdc-switch__track{opacity:var(--mat-slide-toggle-disabled-track-opacity, 0.12)}.mdc-switch__track::before,.mdc-switch__track::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:"";height:100%;left:0;position:absolute;width:100%;border-width:var(--mat-slide-toggle-track-outline-width, 2px);border-color:var(--mat-slide-toggle-track-outline-color, var(--mat-sys-outline))}.mdc-switch--selected .mdc-switch__track::before,.mdc-switch--selected .mdc-switch__track::after{border-width:var(--mat-slide-toggle-selected-track-outline-width, 2px);border-color:var(--mat-slide-toggle-selected-track-outline-color, transparent)}.mdc-switch--disabled .mdc-switch__track::before,.mdc-switch--disabled .mdc-switch__track::after{border-width:var(--mat-slide-toggle-disabled-unselected-track-outline-width, 2px);border-color:var(--mat-slide-toggle-disabled-unselected-track-outline-color, var(--mat-sys-on-surface))}@media(forced-colors: active){.mdc-switch__track{border-color:currentColor}}.mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1);transform:translateX(0);background:var(--mat-slide-toggle-unselected-track-color, var(--mat-sys-surface-variant))}.mdc-switch--selected .mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch--selected .mdc-switch__track::before{transform:translateX(-100%)}.mdc-switch--selected .mdc-switch__track::before{opacity:var(--mat-slide-toggle-hidden-track-opacity, 0);transition:var(--mat-slide-toggle-hidden-track-transition, opacity 75ms)}.mdc-switch--unselected .mdc-switch__track::before{opacity:var(--mat-slide-toggle-visible-track-opacity, 1);transition:var(--mat-slide-toggle-visible-track-transition, opacity 75ms)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-hover-track-color, var(--mat-sys-surface-variant))}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-focus-track-color, var(--mat-sys-surface-variant))}.mdc-switch:enabled:active .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-pressed-track-color, var(--mat-sys-surface-variant))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::before,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::before,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::before,.mdc-switch.mdc-switch--disabled .mdc-switch__track::before{background:var(--mat-slide-toggle-disabled-unselected-track-color, var(--mat-sys-surface-variant))}.mdc-switch__track::after{transform:translateX(-100%);background:var(--mat-slide-toggle-selected-track-color, var(--mat-sys-primary))}[dir=rtl] .mdc-switch__track::after{transform:translateX(100%)}.mdc-switch--selected .mdc-switch__track::after{transform:translateX(0)}.mdc-switch--selected .mdc-switch__track::after{opacity:var(--mat-slide-toggle-visible-track-opacity, 1);transition:var(--mat-slide-toggle-visible-track-transition, opacity 75ms)}.mdc-switch--unselected .mdc-switch__track::after{opacity:var(--mat-slide-toggle-hidden-track-opacity, 0);transition:var(--mat-slide-toggle-hidden-track-transition, opacity 75ms)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-hover-track-color, var(--mat-sys-primary))}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-focus-track-color, var(--mat-sys-primary))}.mdc-switch:enabled:active .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-pressed-track-color, var(--mat-sys-primary))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::after,.mdc-switch.mdc-switch--disabled .mdc-switch__track::after{background:var(--mat-slide-toggle-disabled-selected-track-color, var(--mat-sys-on-surface))}.mdc-switch__handle-track{height:100%;pointer-events:none;position:absolute;top:0;transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);left:0;right:auto;transform:translateX(0);width:calc(100% - var(--mat-slide-toggle-handle-width))}[dir=rtl] .mdc-switch__handle-track{left:auto;right:0}.mdc-switch--selected .mdc-switch__handle-track{transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch__handle-track{transform:translateX(-100%)}.mdc-switch__handle{display:flex;pointer-events:auto;position:absolute;top:50%;transform:translateY(-50%);left:0;right:auto;transition:width 75ms cubic-bezier(0.4, 0, 0.2, 1),height 75ms cubic-bezier(0.4, 0, 0.2, 1),margin 75ms cubic-bezier(0.4, 0, 0.2, 1);width:var(--mat-slide-toggle-handle-width);height:var(--mat-slide-toggle-handle-height);border-radius:var(--mat-slide-toggle-handle-shape, var(--mat-sys-corner-full))}[dir=rtl] .mdc-switch__handle{left:auto;right:0}.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle{width:var(--mat-slide-toggle-unselected-handle-size, 16px);height:var(--mat-slide-toggle-unselected-handle-size, 16px);margin:var(--mat-slide-toggle-unselected-handle-horizontal-margin, 0 8px)}.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle:has(.mdc-switch__icons){margin:var(--mat-slide-toggle-unselected-with-icon-handle-horizontal-margin, 0 4px)}.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle{width:var(--mat-slide-toggle-selected-handle-size, 24px);height:var(--mat-slide-toggle-selected-handle-size, 24px);margin:var(--mat-slide-toggle-selected-handle-horizontal-margin, 0 24px)}.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle:has(.mdc-switch__icons){margin:var(--mat-slide-toggle-selected-with-icon-handle-horizontal-margin, 0 24px)}.mat-mdc-slide-toggle .mdc-switch__handle:has(.mdc-switch__icons){width:var(--mat-slide-toggle-with-icon-handle-size, 24px);height:var(--mat-slide-toggle-with-icon-handle-size, 24px)}.mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) .mdc-switch__handle{width:var(--mat-slide-toggle-pressed-handle-size, 28px);height:var(--mat-slide-toggle-pressed-handle-size, 28px)}.mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) .mdc-switch__handle{margin:var(--mat-slide-toggle-selected-pressed-handle-horizontal-margin, 0 22px)}.mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) .mdc-switch__handle{margin:var(--mat-slide-toggle-unselected-pressed-handle-horizontal-margin, 0 2px)}.mdc-switch--disabled.mdc-switch--selected .mdc-switch__handle::after{opacity:var(--mat-slide-toggle-disabled-selected-handle-opacity, 1)}.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__handle::after{opacity:var(--mat-slide-toggle-disabled-unselected-handle-opacity, 0.38)}.mdc-switch__handle::before,.mdc-switch__handle::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:"";width:100%;height:100%;left:0;position:absolute;top:0;transition:background-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1),border-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);z-index:-1}@media(forced-colors: active){.mdc-switch__handle::before,.mdc-switch__handle::after{border-color:currentColor}}.mdc-switch--selected:enabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-handle-color, var(--mat-sys-on-primary))}.mdc-switch--selected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-hover-handle-color, var(--mat-sys-primary-container))}.mdc-switch--selected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-focus-handle-color, var(--mat-sys-primary-container))}.mdc-switch--selected:enabled:active .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-pressed-handle-color, var(--mat-sys-primary-container))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:hover:not(:focus):not(:active) .mdc-switch__handle::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:focus:not(:active) .mdc-switch__handle::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:active .mdc-switch__handle::after,.mdc-switch--selected.mdc-switch--disabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-disabled-selected-handle-color, var(--mat-sys-surface))}.mdc-switch--unselected:enabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-handle-color, var(--mat-sys-outline))}.mdc-switch--unselected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-hover-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-focus-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected:enabled:active .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-pressed-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-disabled-unselected-handle-color, var(--mat-sys-on-surface))}.mdc-switch__handle::before{background:var(--mat-slide-toggle-handle-surface-color)}.mdc-switch__shadow{border-radius:inherit;bottom:0;left:0;position:absolute;right:0;top:0}.mdc-switch:enabled .mdc-switch__shadow{box-shadow:var(--mat-slide-toggle-handle-elevation-shadow)}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__shadow,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__shadow,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__shadow,.mdc-switch.mdc-switch--disabled .mdc-switch__shadow{box-shadow:var(--mat-slide-toggle-disabled-handle-elevation-shadow)}.mdc-switch__ripple{left:50%;position:absolute;top:50%;transform:translate(-50%, -50%);z-index:-1;width:var(--mat-slide-toggle-state-layer-size, 40px);height:var(--mat-slide-toggle-state-layer-size, 40px)}.mdc-switch__ripple::after{content:"";opacity:0}.mdc-switch--disabled .mdc-switch__ripple::after{display:none}.mat-mdc-slide-toggle-disabled-interactive .mdc-switch__ripple::after{display:block}.mdc-switch:hover .mdc-switch__ripple::after{transition:75ms opacity cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:focus .mdc-switch__ripple::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:active .mdc-switch__ripple::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:hover:not(:focus) .mdc-switch__ripple::after,.mdc-switch--unselected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-switch--unselected:enabled:focus .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-switch--unselected:enabled:active .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-pressed-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));transition:opacity 75ms linear}.mdc-switch--selected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-hover-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-switch--selected:enabled:focus .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-focus-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-switch--selected:enabled:active .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-pressed-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));transition:opacity 75ms linear}.mdc-switch__icons{position:relative;height:100%;width:100%;z-index:1;transform:translateZ(0)}.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__icons{opacity:var(--mat-slide-toggle-disabled-unselected-icon-opacity, 0.38)}.mdc-switch--disabled.mdc-switch--selected .mdc-switch__icons{opacity:var(--mat-slide-toggle-disabled-selected-icon-opacity, 0.38)}.mdc-switch__icon{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;opacity:0;transition:opacity 30ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-switch--unselected .mdc-switch__icon{width:var(--mat-slide-toggle-unselected-icon-size, 16px);height:var(--mat-slide-toggle-unselected-icon-size, 16px);fill:var(--mat-slide-toggle-unselected-icon-color, var(--mat-sys-surface-variant))}.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__icon{fill:var(--mat-slide-toggle-disabled-unselected-icon-color, var(--mat-sys-surface-variant))}.mdc-switch--selected .mdc-switch__icon{width:var(--mat-slide-toggle-selected-icon-size, 16px);height:var(--mat-slide-toggle-selected-icon-size, 16px);fill:var(--mat-slide-toggle-selected-icon-color, var(--mat-sys-on-primary-container))}.mdc-switch--selected.mdc-switch--disabled .mdc-switch__icon{fill:var(--mat-slide-toggle-disabled-selected-icon-color, var(--mat-sys-on-surface))}.mdc-switch--selected .mdc-switch__icon--on,.mdc-switch--unselected .mdc-switch__icon--off{opacity:1;transition:opacity 45ms 30ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle{-webkit-user-select:none;user-select:none;display:inline-block;-webkit-tap-highlight-color:rgba(0,0,0,0);outline:0}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple,.mat-mdc-slide-toggle .mdc-switch__ripple::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple:not(:empty),.mat-mdc-slide-toggle .mdc-switch__ripple::after:not(:empty){transform:translateZ(0)}.mat-mdc-slide-toggle.mat-mdc-slide-toggle-focused .mat-focus-indicator::before{content:""}.mat-mdc-slide-toggle .mat-internal-form-field{color:var(--mat-slide-toggle-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-slide-toggle-label-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-slide-toggle-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-slide-toggle-label-text-size, var(--mat-sys-body-medium-size));letter-spacing:var(--mat-slide-toggle-label-text-tracking, var(--mat-sys-body-medium-tracking));font-weight:var(--mat-slide-toggle-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-slide-toggle .mat-ripple-element{opacity:.12}.mat-mdc-slide-toggle .mat-focus-indicator::before{border-radius:50%}.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle-track,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__icon,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::after,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::after{transition:none}.mat-mdc-slide-toggle .mdc-switch:enabled+.mdc-label{cursor:pointer}.mat-mdc-slide-toggle .mdc-switch--disabled+label{color:var(--mat-slide-toggle-disabled-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-slide-toggle-touch-target{position:absolute;top:50%;left:50%;height:var(--mat-slide-toggle-touch-target-size, 48px);width:100%;transform:translate(-50%, -50%);display:var(--mat-slide-toggle-touch-target-display, block)}[dir=rtl] .mat-mdc-slide-toggle-touch-target{left:auto;right:50%;transform:translate(50%, -50%)} +`],encapsulation:2,changeDetection:0})}return t})();function lBA(t,e){if(t&1){let A=JA();m(0,"div",1)(1,"button",2),eA("click",function(){Z(A);let n=v();return X(n.action())}),K(2),w()()}if(t&2){let A=v();p(2),_e(" ",A.data.action," ")}}var cBA=["label"];function CBA(t,e){}var IBA=Math.pow(2,31)-1,w4=class{_overlayRef;instance;containerInstance;_afterDismissed=new $A;_afterOpened=new $A;_onAction=new $A;_durationTimeoutId;_dismissedByAction=!1;constructor(e,A){this._overlayRef=A,this.containerInstance=e,e._onExit.subscribe(()=>this._finishDismiss())}dismiss(){this._afterDismissed.closed||this.containerInstance.exit(),clearTimeout(this._durationTimeoutId)}dismissWithAction(){this._onAction.closed||(this._dismissedByAction=!0,this._onAction.next(),this._onAction.complete(),this.dismiss()),clearTimeout(this._durationTimeoutId)}closeWithAction(){this.dismissWithAction()}_dismissAfter(e){this._durationTimeoutId=setTimeout(()=>this.dismiss(),Math.min(e,IBA))}_open(){this._afterOpened.closed||(this._afterOpened.next(),this._afterOpened.complete())}_finishDismiss(){this._overlayRef.dispose(),this._onAction.closed||this._onAction.complete(),this._afterDismissed.next({dismissedByAction:this._dismissedByAction}),this._afterDismissed.complete(),this._dismissedByAction=!1}afterDismissed(){return this._afterDismissed}afterOpened(){return this.containerInstance._onEnter}onAction(){return this._onAction}},Nz=new yA("MatSnackBarData"),lE=class{politeness="polite";announcementMessage="";viewContainerRef;duration=0;panelClass;direction;data=null;horizontalPosition="center";verticalPosition="bottom"},dBA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matSnackBarLabel",""]],hostAttrs:[1,"mat-mdc-snack-bar-label","mdc-snackbar__label"]})}return t})(),BBA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matSnackBarActions",""]],hostAttrs:[1,"mat-mdc-snack-bar-actions","mdc-snackbar__actions"]})}return t})(),EBA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matSnackBarAction",""]],hostAttrs:[1,"mat-mdc-snack-bar-action","mdc-snackbar__action"]})}return t})(),QBA=(()=>{class t{snackBarRef=h(w4);data=h(Nz);constructor(){}action(){this.snackBarRef.dismissWithAction()}get hasAction(){return!!this.data.action}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["simple-snack-bar"]],hostAttrs:[1,"mat-mdc-simple-snack-bar"],exportAs:["matSnackBar"],decls:3,vars:2,consts:[["matSnackBarLabel",""],["matSnackBarActions",""],["matButton","","matSnackBarAction","",3,"click"]],template:function(i,n){i&1&&(m(0,"div",0),K(1),w(),V(2,lBA,3,1,"div",1)),i&2&&(p(),_e(" ",n.data.message,` +`),p(),W(n.hasAction?2:-1))},dependencies:[Fn,dBA,BBA,EBA],styles:[`.mat-mdc-simple-snack-bar{display:flex}.mat-mdc-simple-snack-bar .mat-mdc-snack-bar-label{max-height:50vh;overflow:auto} +`],encapsulation:2,changeDetection:0})}return t})(),gk="_mat-snack-bar-enter",lk="_mat-snack-bar-exit",hBA=(()=>{class t extends _2{_ngZone=h(Oe);_elementRef=h(ge);_changeDetectorRef=h(mt);_platform=h(Ii);_animationsDisabled=qi();snackBarConfig=h(lE);_document=h(Xt);_trackedModals=new Set;_enterFallback;_exitFallback;_injector=h(ft);_announceDelay=150;_announceTimeoutId;_destroyed=!1;_portalOutlet;_onAnnounce=new $A;_onExit=new $A;_onEnter=new $A;_animationState="void";_live;_label;_role;_liveElementId=h(an).getId("mat-snack-bar-container-live-");constructor(){super();let A=this.snackBarConfig;A.politeness==="assertive"&&!A.announcementMessage?this._live="assertive":A.politeness==="off"?this._live="off":this._live="polite",this._platform.FIREFOX&&(this._live==="polite"&&(this._role="status"),this._live==="assertive"&&(this._role="alert"))}attachComponentPortal(A){this._assertNotAttached();let i=this._portalOutlet.attachComponentPortal(A);return this._afterPortalAttached(),i}attachTemplatePortal(A){this._assertNotAttached();let i=this._portalOutlet.attachTemplatePortal(A);return this._afterPortalAttached(),i}attachDomPortal=A=>{this._assertNotAttached();let i=this._portalOutlet.attachDomPortal(A);return this._afterPortalAttached(),i};onAnimationEnd(A){A===lk?this._completeExit():A===gk&&(clearTimeout(this._enterFallback),this._ngZone.run(()=>{this._onEnter.next(),this._onEnter.complete()}))}enter(){this._destroyed||(this._animationState="visible",this._changeDetectorRef.markForCheck(),this._changeDetectorRef.detectChanges(),this._screenReaderAnnounce(),this._animationsDisabled?Yn(()=>{this._ngZone.run(()=>queueMicrotask(()=>this.onAnimationEnd(gk)))},{injector:this._injector}):(clearTimeout(this._enterFallback),this._enterFallback=setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-snack-bar-fallback-visible"),this.onAnimationEnd(gk)},200)))}exit(){return this._destroyed?se(void 0):(this._ngZone.run(()=>{this._animationState="hidden",this._changeDetectorRef.markForCheck(),this._elementRef.nativeElement.setAttribute("mat-exit",""),clearTimeout(this._announceTimeoutId),this._animationsDisabled?Yn(()=>{this._ngZone.run(()=>queueMicrotask(()=>this.onAnimationEnd(lk)))},{injector:this._injector}):(clearTimeout(this._exitFallback),this._exitFallback=setTimeout(()=>this.onAnimationEnd(lk),200))}),this._onExit)}ngOnDestroy(){this._destroyed=!0,this._clearFromModals(),this._completeExit()}_completeExit(){clearTimeout(this._exitFallback),queueMicrotask(()=>{this._onExit.next(),this._onExit.complete()})}_afterPortalAttached(){let A=this._elementRef.nativeElement,i=this.snackBarConfig.panelClass;i&&(Array.isArray(i)?i.forEach(a=>A.classList.add(a)):A.classList.add(i)),this._exposeToModals();let n=this._label.nativeElement,o="mdc-snackbar__label";n.classList.toggle(o,!n.querySelector(`.${o}`))}_exposeToModals(){let A=this._liveElementId,i=this._document.querySelectorAll('body > .cdk-overlay-container [aria-modal="true"]');for(let n=0;n{let i=A.getAttribute("aria-owns");if(i){let n=i.replace(this._liveElementId,"").trim();n.length>0?A.setAttribute("aria-owns",n):A.removeAttribute("aria-owns")}}),this._trackedModals.clear()}_assertNotAttached(){this._portalOutlet.hasAttached()}_screenReaderAnnounce(){this._announceTimeoutId||this._ngZone.runOutsideAngular(()=>{this._announceTimeoutId=setTimeout(()=>{if(this._destroyed)return;let A=this._elementRef.nativeElement,i=A.querySelector("[aria-hidden]"),n=A.querySelector("[aria-live]");if(i&&n){let o=null;this._platform.isBrowser&&document.activeElement instanceof HTMLElement&&i.contains(document.activeElement)&&(o=document.activeElement),i.removeAttribute("aria-hidden"),n.appendChild(i),o?.focus(),this._onAnnounce.next(),this._onAnnounce.complete()}},this._announceDelay)})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-snack-bar-container"]],viewQuery:function(i,n){if(i&1&&ai(Jg,7)(cBA,7),i&2){let o;ce(o=Ce())&&(n._portalOutlet=o.first),ce(o=Ce())&&(n._label=o.first)}},hostAttrs:[1,"mdc-snackbar","mat-mdc-snack-bar-container"],hostVars:6,hostBindings:function(i,n){i&1&&eA("animationend",function(a){return n.onAnimationEnd(a.animationName)})("animationcancel",function(a){return n.onAnimationEnd(a.animationName)}),i&2&&ae("mat-snack-bar-container-enter",n._animationState==="visible")("mat-snack-bar-container-exit",n._animationState==="hidden")("mat-snack-bar-container-animations-enabled",!n._animationsDisabled)},features:[dt],decls:6,vars:3,consts:[["label",""],[1,"mdc-snackbar__surface","mat-mdc-snackbar-surface"],[1,"mat-mdc-snack-bar-label"],["aria-hidden","true"],["cdkPortalOutlet",""]],template:function(i,n){i&1&&(m(0,"div",1)(1,"div",2,0)(3,"div",3),vt(4,CBA,0,0,"ng-template",4),w(),GA(5,"div"),w()()),i&2&&(p(5),ie("aria-live",n._live)("role",n._role)("id",n._liveElementId))},dependencies:[Jg],styles:[`@keyframes _mat-snack-bar-enter{from{transform:scale(0.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes _mat-snack-bar-exit{from{opacity:1}to{opacity:0}}.mat-mdc-snack-bar-container{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);margin:8px}.mat-mdc-snack-bar-handset .mat-mdc-snack-bar-container{width:100vw}.mat-snack-bar-container-animations-enabled{opacity:0}.mat-snack-bar-container-animations-enabled.mat-snack-bar-fallback-visible{opacity:1}.mat-snack-bar-container-animations-enabled.mat-snack-bar-container-enter{animation:_mat-snack-bar-enter 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-snack-bar-container-animations-enabled.mat-snack-bar-container-exit{animation:_mat-snack-bar-exit 75ms cubic-bezier(0.4, 0, 1, 1) forwards}.mat-mdc-snackbar-surface{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box;padding-left:0;padding-right:8px}[dir=rtl] .mat-mdc-snackbar-surface{padding-right:0;padding-left:8px}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{min-width:344px;max-width:672px}.mat-mdc-snack-bar-handset .mat-mdc-snackbar-surface{width:100%;min-width:0}@media(forced-colors: active){.mat-mdc-snackbar-surface{outline:solid 1px}}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{color:var(--mat-snack-bar-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-snack-bar-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-snack-bar-container-color, var(--mat-sys-inverse-surface))}.mdc-snackbar__label{width:100%;flex-grow:1;box-sizing:border-box;margin:0;padding:14px 8px 14px 16px}[dir=rtl] .mdc-snackbar__label{padding-left:8px;padding-right:16px}.mat-mdc-snack-bar-container .mdc-snackbar__label{font-family:var(--mat-snack-bar-supporting-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-snack-bar-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-snack-bar-supporting-text-weight, var(--mat-sys-body-medium-weight));line-height:var(--mat-snack-bar-supporting-text-line-height, var(--mat-sys-body-medium-line-height))}.mat-mdc-snack-bar-actions{display:flex;flex-shrink:0;align-items:center;box-sizing:border-box}.mat-mdc-snack-bar-handset,.mat-mdc-snack-bar-container,.mat-mdc-snack-bar-label{flex:1 1 auto}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled){--mat-button-text-state-layer-color: currentColor;--mat-button-text-ripple-color: currentColor}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled).mat-unthemed{color:var(--mat-snack-bar-button-color, var(--mat-sys-inverse-primary))}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled) .mat-ripple-element{opacity:.1} +`],encapsulation:2})}return t})(),uBA=new yA("mat-snack-bar-default-options",{providedIn:"root",factory:()=>new lE}),J2=(()=>{class t{_live=h(vu);_injector=h(ft);_breakpointObserver=h(Du);_parentSnackBar=h(t,{optional:!0,skipSelf:!0});_defaultConfig=h(uBA);_animationsDisabled=qi();_snackBarRefAtThisLevel=null;simpleSnackBarComponent=QBA;snackBarContainerComponent=hBA;handsetCssClass="mat-mdc-snack-bar-handset";get _openedSnackBarRef(){let A=this._parentSnackBar;return A?A._openedSnackBarRef:this._snackBarRefAtThisLevel}set _openedSnackBarRef(A){this._parentSnackBar?this._parentSnackBar._openedSnackBarRef=A:this._snackBarRefAtThisLevel=A}constructor(){}openFromComponent(A,i){return this._attach(A,i)}openFromTemplate(A,i){return this._attach(A,i)}open(A,i="",n){let o=gA(gA({},this._defaultConfig),n);return o.data={message:A,action:i},o.announcementMessage===A&&(o.announcementMessage=void 0),this.openFromComponent(this.simpleSnackBarComponent,o)}dismiss(){this._openedSnackBarRef&&this._openedSnackBarRef.dismiss()}ngOnDestroy(){this._snackBarRefAtThisLevel&&this._snackBarRefAtThisLevel.dismiss()}_attachSnackBarContainer(A,i){let n=i&&i.viewContainerRef&&i.viewContainerRef.injector,o=ft.create({parent:n||this._injector,providers:[{provide:lE,useValue:i}]}),a=new Ug(this.snackBarContainerComponent,i.viewContainerRef,o),r=A.attach(a);return r.instance.snackBarConfig=i,r.instance}_attach(A,i){let n=gA(gA(gA({},new lE),this._defaultConfig),i),o=this._createOverlay(n),a=this._attachSnackBarContainer(o,n),r=new w4(a,o);if(A instanceof Tn){let s=new Is(A,null,{$implicit:n.data,snackBarRef:r});r.instance=a.attachTemplatePortal(s)}else{let s=this._createInjector(n,r),g=new Ug(A,void 0,s),l=a.attachComponentPortal(g);r.instance=l.instance}return this._breakpointObserver.observe(OJ.HandsetPortrait).pipe(Bt(o.detachments())).subscribe(s=>{o.overlayElement.classList.toggle(this.handsetCssClass,s.matches)}),n.announcementMessage&&a._onAnnounce.subscribe(()=>{this._live.announce(n.announcementMessage,n.politeness)}),this._animateSnackBar(r,n),this._openedSnackBarRef=r,this._openedSnackBarRef}_animateSnackBar(A,i){A.afterDismissed().subscribe(()=>{this._openedSnackBarRef==A&&(this._openedSnackBarRef=null),i.announcementMessage&&this._live.clear()}),i.duration&&i.duration>0&&A.afterOpened().subscribe(()=>A._dismissAfter(i.duration)),this._openedSnackBarRef?(this._openedSnackBarRef.afterDismissed().subscribe(()=>{A.containerInstance.enter()}),this._openedSnackBarRef.dismiss()):A.containerInstance.enter()}_createOverlay(A){let i=new rc;i.direction=A.direction;let n=L2(this._injector),o=A.direction==="rtl",a=A.horizontalPosition==="left"||A.horizontalPosition==="start"&&!o||A.horizontalPosition==="end"&&o,r=!a&&A.horizontalPosition!=="center";return a?n.left("0"):r?n.right("0"):n.centerHorizontally(),A.verticalPosition==="top"?n.top("0"):n.bottom("0"),i.positionStrategy=n,i.disableAnimations=this._animationsDisabled,gc(this._injector,i)}_createInjector(A,i){let n=A&&A.viewContainerRef&&A.viewContainerRef.injector;return ft.create({parent:n||this._injector,providers:[{provide:w4,useValue:i},{provide:Nz,useValue:A.data}]})}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var fBA=t=>["segment",t],mBA=(t,e)=>({"segment-main":!0,expandable:t,expanded:e});function pBA(t,e){t&1&&GA(0,"div",9)}function wBA(t,e){if(t&1&&(m(0,"span",10),K(1),w()),t&2){let A=v().$implicit;p(),qA(A.description)}}function DBA(t,e){if(t&1&&(m(0,"section",11),GA(1,"ngx-json-viewer",12),w()),t&2){let A=v().$implicit,i=v();p(),AA("json",A.value)("expanded",i.expanded)("depth",i.depth)("_currentDepth",i._currentDepth+1)}}function yBA(t,e){if(t&1){let A=JA();m(0,"section",2)(1,"section",3),eA("click",function(){let n=Z(A).$implicit,o=v();return X(o.toggle(n))}),vt(2,pBA,1,0,"div",4),m(3,"span",5),K(4),w(),m(5,"span",6),K(6,": "),w(),vt(7,wBA,2,1,"span",7),w(),vt(8,DBA,2,4,"section",8),w()}if(t&2){let A=e.$implicit,i=v();AA("ngClass",ss(6,fBA,"segment-type-"+A.type)),p(),AA("ngClass",Vl(8,mBA,i.isExpandable(A),A.expanded)),p(),AA("ngIf",i.isExpandable(A)),p(2),qA(A.key),p(3),AA("ngIf",!A.expanded||!i.isExpandable(A)),p(),AA("ngIf",A.expanded&&i.isExpandable(A))}}var Y2=(()=>{class t{constructor(){this.expanded=!0,this.depth=-1,this._currentDepth=0,this.segments=[]}ngOnChanges(){this.segments=[],this.json=this.decycle(this.json),typeof this.json=="object"?Object.keys(this.json).forEach(A=>{this.segments.push(this.parseKeyValue(A,this.json[A]))}):this.segments.push(this.parseKeyValue(`(${typeof this.json})`,this.json))}isExpandable(A){return A.type==="object"||A.type==="array"}toggle(A){this.isExpandable(A)&&(A.expanded=!A.expanded)}parseKeyValue(A,i){let n={key:A,value:i,type:void 0,description:""+i,expanded:this.isExpanded()};switch(typeof n.value){case"number":{n.type="number";break}case"boolean":{n.type="boolean";break}case"function":{n.type="function";break}case"string":{n.type="string",n.description='"'+n.value+'"';break}case"undefined":{n.type="undefined",n.description="undefined";break}case"object":{n.value===null?(n.type="null",n.description="null"):Array.isArray(n.value)?(n.type="array",n.description="Array["+n.value.length+"] "+JSON.stringify(n.value)):n.value instanceof Date?n.type="date":(n.type="object",n.description="Object "+JSON.stringify(n.value));break}}return n}isExpanded(){return this.expanded&&!(this.depth>-1&&this._currentDepth>=this.depth)}decycle(A){let i=new WeakMap;return(function n(o,a){let r,s;return typeof o=="object"&&o!==null&&!(o instanceof Boolean)&&!(o instanceof Date)&&!(o instanceof Number)&&!(o instanceof RegExp)&&!(o instanceof String)?(r=i.get(o),r!==void 0?{$ref:r}:(i.set(o,a),Array.isArray(o)?(s=[],o.forEach(function(g,l){s[l]=n(g,a+"["+l+"]")})):(s={},Object.keys(o).forEach(function(g){s[g]=n(o[g],a+"["+JSON.stringify(g)+"]")})),s)):o})(A,"$")}}return t.\u0275fac=function(A){return new(A||t)},t.\u0275cmp=kA({type:t,selectors:[["ngx-json-viewer"]],inputs:{json:"json",expanded:"expanded",depth:"depth",_currentDepth:"_currentDepth"},standalone:!1,features:[ti],decls:2,vars:1,consts:[[1,"ngx-json-viewer"],[3,"ngClass",4,"ngFor","ngForOf"],[3,"ngClass"],[3,"click","ngClass"],["class","toggler",4,"ngIf"],[1,"segment-key"],[1,"segment-separator"],["class","segment-value",4,"ngIf"],["class","children",4,"ngIf"],[1,"toggler"],[1,"segment-value"],[1,"children"],[3,"json","expanded","depth","_currentDepth"]],template:function(A,i){A&1&&(m(0,"section",0),vt(1,yBA,9,11,"section",1),w()),A&2&&(p(),AA("ngForOf",i.segments))},dependencies:[gs,DB,o0,t],styles:['@charset "UTF-8";.ngx-json-viewer[_ngcontent-%COMP%]{font-family:var(--ngx-json-font-family, monospace);font-size:var(--ngx-json-font-size, 1em);width:100%;height:100%;overflow:hidden;position:relative}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%]{padding:2px;margin:1px 1px 1px 12px}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%]{word-wrap:break-word}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .toggler[_ngcontent-%COMP%]{position:absolute;margin-left:-14px;margin-top:3px;font-size:.8em;line-height:1.2em;vertical-align:middle;color:var(--ngx-json-toggler, #787878)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .toggler[_ngcontent-%COMP%]:after{display:inline-block;content:"\\25ba";transition:transform .1s ease-in}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-key[_ngcontent-%COMP%]{color:var(--ngx-json-key, #4E187C)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-separator[_ngcontent-%COMP%]{color:var(--ngx-json-separator, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-value, #000)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .children[_ngcontent-%COMP%]{margin-left:12px}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-string[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-string, #FF6B6B)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-number[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-number, #009688)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-boolean[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-boolean, #B938A4)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-date[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-date, #05668D)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-array[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-array, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-object[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-object, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-function[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-function, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-null[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-null, #fff)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-undefined, #fff)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-null[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{background-color:var(--ngx-json-null-bg, red)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-key[_ngcontent-%COMP%]{color:var(--ngx-json-undefined-key, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{background-color:var(--ngx-json-undefined-key, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-object[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%], .ngx-json-viewer[_ngcontent-%COMP%] .segment-type-array[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%]{white-space:nowrap}.ngx-json-viewer[_ngcontent-%COMP%] .expanded[_ngcontent-%COMP%] > .toggler[_ngcontent-%COMP%]:after{transform:rotate(90deg)}.ngx-json-viewer[_ngcontent-%COMP%] .expandable[_ngcontent-%COMP%], .ngx-json-viewer[_ngcontent-%COMP%] .expandable[_ngcontent-%COMP%] > .toggler[_ngcontent-%COMP%]{cursor:pointer}']}),t})(),B0=(()=>{class t{}return t.\u0275fac=function(A){return new(A||t)},t.\u0275mod=$e({type:t}),t.\u0275inj=Xe({imports:[fa]}),t})();var zr=class t{static getBaseUrlWithoutPath(){let e=window.location.href;return new URL(e).origin+"/dev-ui/"}static getApiServerBaseUrl(){return window.runtimeConfig?.backendUrl||""}static getWSServerUrl(){let e=t.getApiServerBaseUrl();return!e||e==""?window.location.host:e.startsWith("http://")?e.slice(7):e.startsWith("https://")?e.slice(8):e}};var sg=new yA("AgentService");var E0=new yA("AgentBuilderService");var h8=new yA("ArtifactService");var cE=new yA("DownloadService");var Q0=new yA("EvalService");var CE=new yA("EventService");var Fz="import_session",_z="edit_function_args";var Lz="a2a_card",vr=new yA("FeatureFlagService");var IE=new yA("GraphService");var u8=new yA("LocalFileService");var ds=new yA("SafeValuesService"),f8=class{openBase64InNewTab(e,A){try{if(!e)return;let i=e;if(e.startsWith("data:")&&e.includes(";base64,")&&(i=i.substring(i.indexOf(";base64,")+8)),!A||!i)return;let n=atob(i),o=new Array(n.length);for(let g=0;gthis.onResizeHandleMouseDown(e)),document.documentElement.style.setProperty("--bottom-panel-height","310px"),this.renderer.setStyle(this.el.nativeElement,"height","var(--bottom-panel-height)")}onResizeHandleMouseDown(e){this.resizingEvent={isResizing:!0,startingCursorY:e.clientY,startingHeight:this.bottomPanelHeight},e.preventDefault()}onMouseMove(e){if(!this.resizingEvent.isResizing)return;let A=this.resizingEvent.startingCursorY-e.clientY,i=this.resizingEvent.startingHeight+A;this.bottomPanelHeight=i,this.renderer.addClass(document.body,"resizing")}onMouseUp(){this.resizingEvent.isResizing=!1,this.renderer.removeClass(document.body,"resizing")}onResize(){this.bottomMaxHeight=window.innerHeight/2,this.bottomPanelHeight=this.bottomPanelHeight}set bottomPanelHeight(e){let A=Math.min(Math.max(e,this.bottomMinHeight),this.bottomMaxHeight);document.body.style.setProperty("--bottom-panel-height",`${A}px`)}get bottomPanelHeight(){let e=getComputedStyle(document.body).getPropertyValue("--bottom-panel-height"),A=parseInt(e,10);return isNaN(A)?500:A}static \u0275fac=function(A){return new(A||t)(Ct(ge),Ct(Fi))};static \u0275dir=OA({type:t,selectors:[["","appResizableBottomPanel",""]],hostBindings:function(A,i){A&1&&eA("mousemove",function(o){return i.onMouseMove(o)},tC)("mouseup",function(){return i.onMouseUp()},tC)("resize",function(){return i.onResize()},u2)}})};var D8=class t{constructor(e,A){this.el=e;this.renderer=A}sideDrawerMinWidth=310;sideDrawerMaxWidth=window.innerWidth/2;resizeHandle=null;resizingEvent={isResizing:!1,startingCursorX:0,startingWidth:0};ngAfterViewInit(){this.sideDrawerMaxWidth=window.innerWidth/2,this.resizeHandle=document.getElementsByClassName("resize-handler")[0],this.resizeHandle&&this.renderer.listen(this.resizeHandle,"mousedown",e=>this.onResizeHandleMouseDown(e)),document.documentElement.style.setProperty("--side-drawer-width","570px"),this.renderer.setStyle(this.el.nativeElement,"width","var(--side-drawer-width)")}onResizeHandleMouseDown(e){this.resizingEvent={isResizing:!0,startingCursorX:e.clientX,startingWidth:this.sideDrawerWidth},e.preventDefault()}onMouseMove(e){if(!this.resizingEvent.isResizing)return;let A=e.clientX-this.resizingEvent.startingCursorX,i=this.resizingEvent.startingWidth+A;this.sideDrawerWidth=i,this.renderer.addClass(document.body,"resizing")}onMouseUp(){this.resizingEvent.isResizing=!1,this.renderer.removeClass(document.body,"resizing")}onResize(){this.sideDrawerMaxWidth=window.innerWidth/2,this.sideDrawerWidth=this.sideDrawerWidth}set sideDrawerWidth(e){let A=Math.min(Math.max(e,this.sideDrawerMinWidth),this.sideDrawerMaxWidth);document.documentElement.style.setProperty("--side-drawer-width",`${A}px`)}get sideDrawerWidth(){let e=getComputedStyle(document.documentElement).getPropertyValue("--side-drawer-width"),A=parseFloat(e);return isNaN(A)?500:A}static \u0275fac=function(A){return new(A||t)(Ct(ge),Ct(Fi))};static \u0275dir=OA({type:t,selectors:[["","appResizableDrawer",""]],hostBindings:function(A,i){A&1&&eA("mousemove",function(o){return i.onMouseMove(o)},tC)("mouseup",function(){return i.onMouseUp()},tC)("resize",function(){return i.onResize()},u2)}})};var y8=Symbol.for("yaml.alias"),v8=Symbol.for("yaml.document"),lc=Symbol.for("yaml.map"),ck=Symbol.for("yaml.pair"),Yg=Symbol.for("yaml.scalar"),hC=Symbol.for("yaml.seq"),Us=Symbol.for("yaml.node.type"),El=t=>!!t&&typeof t=="object"&&t[Us]===y8,cc=t=>!!t&&typeof t=="object"&&t[Us]===v8,Cc=t=>!!t&&typeof t=="object"&&t[Us]===lc,mn=t=>!!t&&typeof t=="object"&&t[Us]===ck,Yi=t=>!!t&&typeof t=="object"&&t[Us]===Yg,Ic=t=>!!t&&typeof t=="object"&&t[Us]===hC;function so(t){if(t&&typeof t=="object")switch(t[Us]){case lc:case hC:return!0}return!1}function yn(t){if(t&&typeof t=="object")switch(t[Us]){case y8:case lc:case Yg:case hC:return!0}return!1}var b8=t=>(Yi(t)||so(t))&&!!t.anchor;var gg=Symbol("break visit"),Gz=Symbol("skip children"),h0=Symbol("remove node");function u0(t,e){let A=Kz(e);cc(t)?BE(null,t.contents,A,Object.freeze([t]))===h0&&(t.contents=null):BE(null,t,A,Object.freeze([]))}u0.BREAK=gg;u0.SKIP=Gz;u0.REMOVE=h0;function BE(t,e,A,i){let n=Uz(t,e,A,i);if(yn(n)||mn(n))return Jz(t,i,n),BE(t,n,A,i);if(typeof n!="symbol"){if(so(e)){i=Object.freeze(i.concat(e));for(let o=0;ot.replace(/[!,[\]{}]/g,e=>vBA[e]),QE=(()=>{class t{constructor(A,i){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},t.defaultYaml,A),this.tags=Object.assign({},t.defaultTags,i)}clone(){let A=new t(this.yaml,this.tags);return A.docStart=this.docStart,A}atDocument(){let A=new t(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:t.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},t.defaultTags);break}return A}add(A,i){this.atNextDocument&&(this.yaml={explicit:t.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},t.defaultTags),this.atNextDocument=!1);let n=A.trim().split(/[ \t]+/),o=n.shift();switch(o){case"%TAG":{if(n.length!==2&&(i(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;let[a,r]=n;return this.tags[a]=r,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return i(0,"%YAML directive should contain exactly one part"),!1;let[a]=n;if(a==="1.1"||a==="1.2")return this.yaml.version=a,!0;{let r=/^\d+\.\d+$/.test(a);return i(6,`Unsupported YAML version ${a}`,r),!1}}default:return i(0,`Unknown directive ${o}`,!0),!1}}tagName(A,i){if(A==="!")return"!";if(A[0]!=="!")return i(`Not a valid tag: ${A}`),null;if(A[1]==="<"){let r=A.slice(2,-1);return r==="!"||r==="!!"?(i(`Verbatim tags aren't resolved, so ${A} is invalid.`),null):(A[A.length-1]!==">"&&i("Verbatim tags must end with a >"),r)}let[,n,o]=A.match(/^(.*!)([^!]*)$/s);o||i(`The ${A} tag has no suffix`);let a=this.tags[n];if(a)try{return a+decodeURIComponent(o)}catch(r){return i(String(r)),null}return n==="!"?A:(i(`Could not resolve tag: ${A}`),null)}tagString(A){for(let[i,n]of Object.entries(this.tags))if(A.startsWith(n))return i+bBA(A.substring(n.length));return A[0]==="!"?A:`!<${A}>`}toString(A){let i=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags),o;if(A&&n.length>0&&yn(A.contents)){let a={};u0(A.contents,(r,s)=>{yn(s)&&s.tag&&(a[s.tag]=!0)}),o=Object.keys(a)}else o=[];for(let[a,r]of n)a==="!!"&&r==="tag:yaml.org,2002:"||(!A||o.some(s=>s.startsWith(r)))&&i.push(`%TAG ${a} ${r}`);return i.join(` +`)}}return t.defaultYaml={explicit:!1,version:"1.2"},t.defaultTags={"!!":"tag:yaml.org,2002:"},t})();function k8(t){if(/[\x00-\x19\s,[\]{}]/.test(t)){let A=`Anchor must not contain whitespace or control characters: ${JSON.stringify(t)}`;throw new Error(A)}return!0}function Ck(t){let e=new Set;return u0(t,{Value(A,i){i.anchor&&e.add(i.anchor)}}),e}function Ik(t,e){for(let A=1;;++A){let i=`${t}${A}`;if(!e.has(i))return i}}function Yz(t,e){let A=[],i=new Map,n=null;return{onAnchor:o=>{A.push(o),n??(n=Ck(t));let a=Ik(e,n);return n.add(a),a},setAnchors:()=>{for(let o of A){let a=i.get(o);if(typeof a=="object"&&a.anchor&&(Yi(a.node)||so(a.node)))a.node.anchor=a.anchor;else{let r=new Error("Failed to resolve repeated object (this should not happen)");throw r.source=o,r}}},sourceObjects:i}}function H2(t,e,A,i){if(i&&typeof i=="object")if(Array.isArray(i))for(let n=0,o=i.length;nBr(i,String(n),A));if(t&&typeof t.toJSON=="function"){if(!A||!b8(t))return t.toJSON(e,A);let i={aliasCount:0,count:1,res:void 0};A.anchors.set(t,i),A.onCreate=o=>{i.res=o,delete A.onCreate};let n=t.toJSON(e,A);return A.onCreate&&A.onCreate(n),n}return typeof t=="bigint"&&!A?.keep?Number(t):t}var z2=class{constructor(e){Object.defineProperty(this,Us,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:A,maxAliasCount:i,onAnchor:n,reviver:o}={}){if(!cc(e))throw new TypeError("A document argument is required");let a={anchors:new Map,doc:e,keep:!0,mapAsMap:A===!0,mapKeyWarned:!1,maxAliasCount:typeof i=="number"?i:100},r=Br(this,"",a);if(typeof n=="function")for(let{count:s,res:g}of a.anchors.values())n(g,s);return typeof o=="function"?H2(o,{"":r},"",r):r}};var uC=class extends z2{constructor(e){super(y8),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,A){let i;A?.aliasResolveCache?i=A.aliasResolveCache:(i=[],u0(e,{Node:(o,a)=>{(El(a)||b8(a))&&i.push(a)}}),A&&(A.aliasResolveCache=i));let n;for(let o of i){if(o===this)break;o.anchor===this.source&&(n=o)}return n}toJSON(e,A){if(!A)return{source:this.source};let{anchors:i,doc:n,maxAliasCount:o}=A,a=this.resolve(n,A);if(!a){let s=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(s)}let r=i.get(a);if(r||(Br(a,null,A),r=i.get(a)),r?.res===void 0){let s="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(s)}if(o>=0&&(r.count+=1,r.aliasCount===0&&(r.aliasCount=S8(n,a,i)),r.count*r.aliasCount>o)){let s="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(s)}return r.res}toString(e,A,i){let n=`*${this.source}`;if(e){if(k8(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let o=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(o)}if(e.implicitKey)return`${n} `}return n}};function S8(t,e,A){if(El(e)){let i=e.resolve(t),n=A&&i&&A.get(i);return n?n.count*n.aliasCount:0}else if(so(e)){let i=0;for(let n of e.items){let o=S8(t,n,A);o>i&&(i=o)}return i}else if(mn(e)){let i=S8(t,e.key,A),n=S8(t,e.value,A);return Math.max(i,n)}return 1}var x8=t=>!t||typeof t!="function"&&typeof t!="object",zt=(()=>{class t extends z2{constructor(A){super(Yg),this.value=A}toJSON(A,i){return i?.keep?this.value:Br(this.value,A,i)}toString(){return String(this.value)}}return t.BLOCK_FOLDED="BLOCK_FOLDED",t.BLOCK_LITERAL="BLOCK_LITERAL",t.PLAIN="PLAIN",t.QUOTE_DOUBLE="QUOTE_DOUBLE",t.QUOTE_SINGLE="QUOTE_SINGLE",t})();var MBA="tag:yaml.org,2002:";function kBA(t,e,A){if(e){let i=A.filter(o=>o.tag===e),n=i.find(o=>!o.format)??i[0];if(!n)throw new Error(`Tag ${e} not found`);return n}return A.find(i=>i.identify?.(t)&&!i.format)}function fC(t,e,A){if(cc(t)&&(t=t.contents),yn(t))return t;if(mn(t)){let C=A.schema[lc].createNode?.(A.schema,null,A);return C.items.push(t),C}(t instanceof String||t instanceof Number||t instanceof Boolean||typeof BigInt<"u"&&t instanceof BigInt)&&(t=t.valueOf());let{aliasDuplicateObjects:i,onAnchor:n,onTagObj:o,schema:a,sourceObjects:r}=A,s;if(i&&t&&typeof t=="object"){if(s=r.get(t),s)return s.anchor??(s.anchor=n(t)),new uC(s.anchor);s={anchor:null,node:null},r.set(t,s)}e?.startsWith("!!")&&(e=MBA+e.slice(2));let g=kBA(t,e,a.tags);if(!g){if(t&&typeof t.toJSON=="function"&&(t=t.toJSON()),!t||typeof t!="object"){let C=new zt(t);return s&&(s.node=C),C}g=t instanceof Map?a[lc]:Symbol.iterator in Object(t)?a[hC]:a[lc]}o&&(o(g),delete A.onTagObj);let l=g?.createNode?g.createNode(A.schema,t,A):typeof g?.nodeClass?.from=="function"?g.nodeClass.from(A.schema,t,A):new zt(t);return e?l.tag=e:g.default||(l.tag=g.tag),s&&(s.node=l),l}function D4(t,e,A){let i=A;for(let n=e.length-1;n>=0;--n){let o=e[n];if(typeof o=="number"&&Number.isInteger(o)&&o>=0){let a=[];a[o]=i,i=a}else i=new Map([[o,i]])}return fC(i,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:t,sourceObjects:new Map})}var uE=t=>t==null||typeof t=="object"&&!!t[Symbol.iterator]().next().done,hE=class extends z2{constructor(e,A){super(e),Object.defineProperty(this,"schema",{value:A,configurable:!0,enumerable:!1,writable:!0})}clone(e){let A=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(A.schema=e),A.items=A.items.map(i=>yn(i)||mn(i)?i.clone(e):i),this.range&&(A.range=this.range.slice()),A}addIn(e,A){if(uE(e))this.add(A);else{let[i,...n]=e,o=this.get(i,!0);if(so(o))o.addIn(n,A);else if(o===void 0&&this.schema)this.set(i,D4(this.schema,n,A));else throw new Error(`Expected YAML collection at ${i}. Remaining path: ${n}`)}}deleteIn(e){let[A,...i]=e;if(i.length===0)return this.delete(A);let n=this.get(A,!0);if(so(n))return n.deleteIn(i);throw new Error(`Expected YAML collection at ${A}. Remaining path: ${i}`)}getIn(e,A){let[i,...n]=e,o=this.get(i,!0);return n.length===0?!A&&Yi(o)?o.value:o:so(o)?o.getIn(n,A):void 0}hasAllNullValues(e){return this.items.every(A=>{if(!mn(A))return!1;let i=A.value;return i==null||e&&Yi(i)&&i.value==null&&!i.commentBefore&&!i.comment&&!i.tag})}hasIn(e){let[A,...i]=e;if(i.length===0)return this.has(A);let n=this.get(A,!0);return so(n)?n.hasIn(i):!1}setIn(e,A){let[i,...n]=e;if(n.length===0)this.set(i,A);else{let o=this.get(i,!0);if(so(o))o.setIn(n,A);else if(o===void 0&&this.schema)this.set(i,D4(this.schema,n,A));else throw new Error(`Expected YAML collection at ${i}. Remaining path: ${n}`)}}};var Tz=t=>t.replace(/^(?!$)(?: $)?/gm,"#");function Ql(t,e){return/^\n+$/.test(t)?t.substring(1):e?t.replace(/^(?! *$)/gm,e):t}var f0=(t,e,A)=>t.endsWith(` +`)?Ql(A,e):A.includes(` +`)?` +`+Ql(A,e):(t.endsWith(" ")?"":" ")+A;var dk="flow",R8="block",y4="quoted";function v4(t,e,A="flow",{indentAtStart:i,lineWidth:n=80,minContentWidth:o=20,onFold:a,onOverflow:r}={}){if(!n||n<0)return t;nn-Math.max(2,o)?g.push(0):C=n-i);let I,d,B=!1,E=-1,Q=-1,f=-1;A===R8&&(E=Hz(t,E,e.length),E!==-1&&(C=E+s));for(let S;S=t[E+=1];){if(A===y4&&S==="\\"){switch(Q=E,t[E+1]){case"x":E+=3;break;case"u":E+=5;break;case"U":E+=9;break;default:E+=1}f=E}if(S===` +`)A===R8&&(E=Hz(t,E,e.length)),C=E+e.length+s,I=void 0;else{if(S===" "&&d&&d!==" "&&d!==` +`&&d!==" "){let M=t[E+1];M&&M!==" "&&M!==` +`&&M!==" "&&(I=E)}if(E>=C)if(I)g.push(I),C=I+s,I=void 0;else if(A===y4){for(;d===" "||d===" ";)d=S,S=t[E+=1],B=!0;let M=E>f+1?E-2:Q-1;if(l[M])return t;g.push(M),l[M]=!0,C=M+s,I=void 0}else B=!0}d=S}if(B&&r&&r(),g.length===0)return t;a&&a();let b=t.slice(0,g[0]);for(let S=0;S({indentAtStart:e?t.indent.length:t.indentAtStart,lineWidth:t.options.lineWidth,minContentWidth:t.options.minContentWidth}),_8=t=>/^(%|---|\.\.\.)/m.test(t);function SBA(t,e,A){if(!e||e<0)return!1;let i=e-A,n=t.length;if(n<=i)return!1;for(let o=0,a=0;oi)return!0;if(a=o+1,n-a<=i)return!1}return!0}function b4(t,e){let A=JSON.stringify(t);if(e.options.doubleQuotedAsJSON)return A;let{implicitKey:i}=e,n=e.options.doubleQuotedMinMultiLineLength,o=e.indent||(_8(t)?" ":""),a="",r=0;for(let s=0,g=A[s];g;g=A[++s])if(g===" "&&A[s+1]==="\\"&&A[s+2]==="n"&&(a+=A.slice(r,s)+"\\ ",s+=1,r=s,g="\\"),g==="\\")switch(A[s+1]){case"u":{a+=A.slice(r,s);let l=A.substr(s+2,4);switch(l){case"0000":a+="\\0";break;case"0007":a+="\\a";break;case"000b":a+="\\v";break;case"001b":a+="\\e";break;case"0085":a+="\\N";break;case"00a0":a+="\\_";break;case"2028":a+="\\L";break;case"2029":a+="\\P";break;default:l.substr(0,2)==="00"?a+="\\x"+l.substr(2):a+=A.substr(s,6)}s+=5,r=s+1}break;case"n":if(i||A[s+2]==='"'||A.length +`;let C,I;for(I=A.length;I>0;--I){let D=A[I-1];if(D!==` +`&&D!==" "&&D!==" ")break}let d=A.substring(I),B=d.indexOf(` +`);B===-1?C="-":A===d||B!==d.length-1?(C="+",o&&o()):C="",d&&(A=A.slice(0,-d.length),d[d.length-1]===` +`&&(d=d.slice(0,-1)),d=d.replace(Ek,`$&${g}`));let E=!1,Q,f=-1;for(Q=0;Q{F=!0});let U=v4(`${b}${D}${d}`,g,R8,_);if(!F)return`>${M} +${g}${U}`}return A=A.replace(/\n+/g,`$&${g}`),`|${M} +${g}${b}${A}${d}`}function xBA(t,e,A,i){let{type:n,value:o}=t,{actualString:a,implicitKey:r,indent:s,indentStep:g,inFlow:l}=e;if(r&&o.includes(` +`)||l&&/[[\]{},]/.test(o))return fE(o,e);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(o))return r||l||!o.includes(` +`)?fE(o,e):N8(t,e,A,i);if(!r&&!l&&n!==zt.PLAIN&&o.includes(` +`))return N8(t,e,A,i);if(_8(o)){if(s==="")return e.forceBlockIndent=!0,N8(t,e,A,i);if(r&&s===g)return fE(o,e)}let C=o.replace(/\n+/g,`$& +${s}`);if(a){let I=E=>E.default&&E.tag!=="tag:yaml.org,2002:str"&&E.test?.test(C),{compat:d,tags:B}=e.doc.schema;if(B.some(I)||d?.some(I))return fE(o,e)}return r?C:v4(C,s,dk,F8(e,!1))}function W1(t,e,A,i){let{implicitKey:n,inFlow:o}=e,a=typeof t.value=="string"?t:Object.assign({},t,{value:String(t.value)}),{type:r}=t;r!==zt.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(a.value)&&(r=zt.QUOTE_DOUBLE);let s=l=>{switch(l){case zt.BLOCK_FOLDED:case zt.BLOCK_LITERAL:return n||o?fE(a.value,e):N8(a,e,A,i);case zt.QUOTE_DOUBLE:return b4(a.value,e);case zt.QUOTE_SINGLE:return Bk(a.value,e);case zt.PLAIN:return xBA(a,e,A,i);default:return null}},g=s(r);if(g===null){let{defaultKeyType:l,defaultStringType:C}=e.options,I=n&&l||C;if(g=s(I),g===null)throw new Error(`Unsupported default string type ${I}`)}return g}function L8(t,e){let A=Object.assign({blockQuote:!0,commentString:Tz,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trueStr:"true",verifyAliasOrder:!0},t.schema.toStringOptions,e),i;switch(A.collectionStyle){case"block":i=!1;break;case"flow":i=!0;break;default:i=null}return{anchors:new Set,doc:t,flowCollectionPadding:A.flowCollectionPadding?" ":"",indent:"",indentStep:typeof A.indent=="number"?" ".repeat(A.indent):" ",inFlow:i,options:A}}function RBA(t,e){if(e.tag){let n=t.filter(o=>o.tag===e.tag);if(n.length>0)return n.find(o=>o.format===e.format)??n[0]}let A,i;if(Yi(e)){i=e.value;let n=t.filter(o=>o.identify?.(i));if(n.length>1){let o=n.filter(a=>a.test);o.length>0&&(n=o)}A=n.find(o=>o.format===e.format)??n.find(o=>!o.format)}else i=e,A=t.find(n=>n.nodeClass&&i instanceof n.nodeClass);if(!A){let n=i?.constructor?.name??(i===null?"null":typeof i);throw new Error(`Tag not resolved for ${n} value`)}return A}function NBA(t,e,{anchors:A,doc:i}){if(!i.directives)return"";let n=[],o=(Yi(t)||so(t))&&t.anchor;o&&k8(o)&&(A.add(o),n.push(`&${o}`));let a=t.tag??(e.default?null:e.tag);return a&&n.push(i.directives.tagString(a)),n.join(" ")}function mC(t,e,A,i){if(mn(t))return t.toString(e,A,i);if(El(t)){if(e.doc.directives)return t.toString(e);if(e.resolvedAliases?.has(t))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(t):e.resolvedAliases=new Set([t]),t=t.resolve(e.doc)}let n,o=yn(t)?t:e.doc.createNode(t,{onTagObj:s=>n=s});n??(n=RBA(e.doc.schema.tags,o));let a=NBA(o,n,e);a.length>0&&(e.indentAtStart=(e.indentAtStart??0)+a.length+1);let r=typeof n.stringify=="function"?n.stringify(o,e,A,i):Yi(o)?W1(o,e,A,i):o.toString(e,A,i);return a?Yi(o)||r[0]==="{"||r[0]==="["?`${a} ${r}`:`${a} +${e.indent}${r}`:r}function zz({key:t,value:e},A,i,n){let{allNullValues:o,doc:a,indent:r,indentStep:s,options:{commentString:g,indentSeq:l,simpleKeys:C}}=A,I=yn(t)&&t.comment||null;if(C){if(I)throw new Error("With simple keys, key nodes cannot have comments");if(so(t)||!yn(t)&&typeof t=="object"){let _="With simple keys, collection cannot be used as a key value";throw new Error(_)}}let d=!C&&(!t||I&&e==null&&!A.inFlow||so(t)||(Yi(t)?t.type===zt.BLOCK_FOLDED||t.type===zt.BLOCK_LITERAL:typeof t=="object"));A=Object.assign({},A,{allNullValues:!1,implicitKey:!d&&(C||!o),indent:r+s});let B=!1,E=!1,Q=mC(t,A,()=>B=!0,()=>E=!0);if(!d&&!A.inFlow&&Q.length>1024){if(C)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");d=!0}if(A.inFlow){if(o||e==null)return B&&i&&i(),Q===""?"?":d?`? ${Q}`:Q}else if(o&&!C||e==null&&d)return Q=`? ${Q}`,I&&!B?Q+=f0(Q,A.indent,g(I)):E&&n&&n(),Q;B&&(I=null),d?(I&&(Q+=f0(Q,A.indent,g(I))),Q=`? ${Q} +${r}:`):(Q=`${Q}:`,I&&(Q+=f0(Q,A.indent,g(I))));let f,b,S;yn(e)?(f=!!e.spaceBefore,b=e.commentBefore,S=e.comment):(f=!1,b=null,S=null,e&&typeof e=="object"&&(e=a.createNode(e))),A.implicitKey=!1,!d&&!I&&Yi(e)&&(A.indentAtStart=Q.length+1),E=!1,!l&&s.length>=2&&!A.inFlow&&!d&&Ic(e)&&!e.flow&&!e.tag&&!e.anchor&&(A.indent=A.indent.substring(2));let M=!1,D=mC(e,A,()=>M=!0,()=>E=!0),F=" ";if(I||f||b){if(F=f?` +`:"",b){let _=g(b);F+=` +${Ql(_,A.indent)}`}D===""&&!A.inFlow?F===` +`&&S&&(F=` + +`):F+=` +${A.indent}`}else if(!d&&so(e)){let _=D[0],U=D.indexOf(` +`),J=U!==-1,j=A.inFlow??e.flow??e.items.length===0;if(J||!j){let $=!1;if(J&&(_==="&"||_==="!")){let O=D.indexOf(" ");_==="&"&&O!==-1&&Ot===K8||typeof t=="symbol"&&t.description===K8,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new zt(Symbol(K8)),{addToJSMap:hk}),stringify:()=>K8},Oz=(t,e)=>(dc.identify(e)||Yi(e)&&(!e.type||e.type===zt.PLAIN)&&dc.identify(e.value))&&t?.doc.schema.tags.some(A=>A.tag===dc.tag&&A.default);function hk(t,e,A){if(A=t&&El(A)?A.resolve(t.doc):A,Ic(A))for(let i of A.items)Qk(t,e,i);else if(Array.isArray(A))for(let i of A)Qk(t,e,i);else Qk(t,e,A)}function Qk(t,e,A){let i=t&&El(A)?A.resolve(t.doc):A;if(!Cc(i))throw new Error("Merge sources must be maps or map aliases");let n=i.toJSON(null,t,Map);for(let[o,a]of n)e instanceof Map?e.has(o)||e.set(o,a):e instanceof Set?e.add(o):Object.prototype.hasOwnProperty.call(e,o)||Object.defineProperty(e,o,{value:a,writable:!0,enumerable:!0,configurable:!0});return e}function U8(t,e,{key:A,value:i}){if(yn(A)&&A.addToJSMap)A.addToJSMap(t,e,i);else if(Oz(t,A))hk(t,e,i);else{let n=Br(A,"",t);if(e instanceof Map)e.set(n,Br(i,n,t));else if(e instanceof Set)e.add(n);else{let o=FBA(A,n,t),a=Br(i,o,t);o in e?Object.defineProperty(e,o,{value:a,writable:!0,enumerable:!0,configurable:!0}):e[o]=a}}return e}function FBA(t,e,A){if(e===null)return"";if(typeof e!="object")return String(e);if(yn(t)&&A?.doc){let i=L8(A.doc,{});i.anchors=new Set;for(let o of A.anchors.keys())i.anchors.add(o.anchor);i.inFlow=!0,i.inStringifyKey=!0;let n=t.toString(i);if(!A.mapKeyWarned){let o=JSON.stringify(n);o.length>40&&(o=o.substring(0,36)+'..."'),G8(A.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${o}. Set mapAsMap: true to use object keys.`),A.mapKeyWarned=!0}return n}return JSON.stringify(e)}function mE(t,e,A){let i=fC(t,void 0,A),n=fC(e,void 0,A);return new Ja(i,n)}var Ja=class t{constructor(e,A=null){Object.defineProperty(this,Us,{value:ck}),this.key=e,this.value=A}clone(e){let{key:A,value:i}=this;return yn(A)&&(A=A.clone(e)),yn(i)&&(i=i.clone(e)),new t(A,i)}toJSON(e,A){let i=A?.mapAsMap?new Map:{};return U8(A,i,this)}toString(e,A,i){return e?.doc?zz(this,e,A,i):JSON.stringify(this)}};function Y8(t,e,A){return(e.inFlow??t.flow?LBA:_BA)(t,e,A)}function _BA({comment:t,items:e},A,{blockItemPrefix:i,flowChars:n,itemIndent:o,onChompKeep:a,onComment:r}){let{indent:s,options:{commentString:g}}=A,l=Object.assign({},A,{indent:o,type:null}),C=!1,I=[];for(let B=0;BQ=null,()=>C=!0);Q&&(f+=f0(f,o,g(Q))),C&&Q&&(C=!1),I.push(i+f)}let d;if(I.length===0)d=n.start+n.end;else{d=I[0];for(let B=1;BQ=null);Bl||f.includes(` +`))&&(g=!0),C.push(f),l=C.length}let{start:I,end:d}=A;if(C.length===0)return I+d;if(!g){let B=C.reduce((E,Q)=>E+Q.length+2,2);g=e.options.lineWidth>0&&B>e.options.lineWidth}if(g){let B=I;for(let E of C)B+=E?` +${o}${n}${E}`:` +`;return`${B} +${n}${d}`}else return`${I}${a}${C.join(" ")}${a}${d}`}function J8({indent:t,options:{commentString:e}},A,i,n){if(i&&n&&(i=i.replace(/^\n+/,"")),i){let o=Ql(e(i),t);A.push(o.trimStart())}}function O2(t,e){let A=Yi(e)?e.value:e;for(let i of t)if(mn(i)&&(i.key===e||i.key===A||Yi(i.key)&&i.key.value===A))return i}var Va=class extends hE{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(lc,e),this.items=[]}static from(e,A,i){let{keepUndefined:n,replacer:o}=i,a=new this(e),r=(s,g)=>{if(typeof o=="function")g=o.call(A,s,g);else if(Array.isArray(o)&&!o.includes(s))return;(g!==void 0||n)&&a.items.push(mE(s,g,i))};if(A instanceof Map)for(let[s,g]of A)r(s,g);else if(A&&typeof A=="object")for(let s of Object.keys(A))r(s,A[s]);return typeof e.sortMapEntries=="function"&&a.items.sort(e.sortMapEntries),a}add(e,A){let i;mn(e)?i=e:!e||typeof e!="object"||!("key"in e)?i=new Ja(e,e?.value):i=new Ja(e.key,e.value);let n=O2(this.items,i.key),o=this.schema?.sortMapEntries;if(n){if(!A)throw new Error(`Key ${i.key} already set`);Yi(n.value)&&x8(i.value)?n.value.value=i.value:n.value=i.value}else if(o){let a=this.items.findIndex(r=>o(i,r)<0);a===-1?this.items.push(i):this.items.splice(a,0,i)}else this.items.push(i)}delete(e){let A=O2(this.items,e);return A?this.items.splice(this.items.indexOf(A),1).length>0:!1}get(e,A){let n=O2(this.items,e)?.value;return(!A&&Yi(n)?n.value:n)??void 0}has(e){return!!O2(this.items,e)}set(e,A){this.add(new Ja(e,A),!0)}toJSON(e,A,i){let n=i?new i:A?.mapAsMap?new Map:{};A?.onCreate&&A.onCreate(n);for(let o of this.items)U8(A,n,o);return n}toString(e,A,i){if(!e)return JSON.stringify(this);for(let n of this.items)if(!mn(n))throw new Error(`Map items must all be pairs; found ${JSON.stringify(n)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),Y8(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:i,onComment:A})}};var Bc={collection:"map",default:!0,nodeClass:Va,tag:"tag:yaml.org,2002:map",resolve(t,e){return Cc(t)||e("Expected a mapping for this tag"),t},createNode:(t,e,A)=>Va.from(t,e,A)};var Bs=class extends hE{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(hC,e),this.items=[]}add(e){this.items.push(e)}delete(e){let A=T8(e);return typeof A!="number"?!1:this.items.splice(A,1).length>0}get(e,A){let i=T8(e);if(typeof i!="number")return;let n=this.items[i];return!A&&Yi(n)?n.value:n}has(e){let A=T8(e);return typeof A=="number"&&A=0?e:null}var Ec={collection:"seq",default:!0,nodeClass:Bs,tag:"tag:yaml.org,2002:seq",resolve(t,e){return Ic(t)||e("Expected a sequence for this tag"),t},createNode:(t,e,A)=>Bs.from(t,e,A)};var P2={identify:t=>typeof t=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:t=>t,stringify(t,e,A,i){return e=Object.assign({actualString:!0},e),W1(t,e,A,i)}};var Z1={identify:t=>t==null,createNode:()=>new zt(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new zt(null),stringify:({source:t},e)=>typeof t=="string"&&Z1.test.test(t)?t:e.options.nullStr};var M4={identify:t=>typeof t=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:t=>new zt(t[0]==="t"||t[0]==="T"),stringify({source:t,value:e},A){if(t&&M4.test.test(t)){let i=t[0]==="t"||t[0]==="T";if(e===i)return t}return e?A.options.trueStr:A.options.falseStr}};function Es({format:t,minFractionDigits:e,tag:A,value:i}){if(typeof i=="bigint")return String(i);let n=typeof i=="number"?i:Number(i);if(!isFinite(n))return isNaN(n)?".nan":n<0?"-.inf":".inf";let o=Object.is(i,-0)?"-0":JSON.stringify(i);if(!t&&e&&(!A||A==="tag:yaml.org,2002:float")&&/^\d/.test(o)){let a=o.indexOf(".");a<0&&(a=o.length,o+=".");let r=e-(o.length-a-1);for(;r-- >0;)o+="0"}return o}var H8={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:t=>t.slice(-3).toLowerCase()==="nan"?NaN:t[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Es},z8={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:t=>parseFloat(t),stringify(t){let e=Number(t.value);return isFinite(e)?e.toExponential():Es(t)}},O8={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(t){let e=new zt(parseFloat(t)),A=t.indexOf(".");return A!==-1&&t[t.length-1]==="0"&&(e.minFractionDigits=t.length-A-1),e},stringify:Es};var P8=t=>typeof t=="bigint"||Number.isInteger(t),uk=(t,e,A,{intAsBigInt:i})=>i?BigInt(t):parseInt(t.substring(e),A);function Pz(t,e,A){let{value:i}=t;return P8(i)&&i>=0?A+i.toString(e):Es(t)}var j8={identify:t=>P8(t)&&t>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(t,e,A)=>uk(t,2,8,A),stringify:t=>Pz(t,8,"0o")},q8={identify:P8,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(t,e,A)=>uk(t,0,10,A),stringify:Es},V8={identify:t=>P8(t)&&t>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(t,e,A)=>uk(t,2,16,A),stringify:t=>Pz(t,16,"0x")};var jz=[Bc,Ec,P2,Z1,M4,j8,q8,V8,H8,z8,O8];function qz(t){return typeof t=="bigint"||Number.isInteger(t)}var W8=({value:t})=>JSON.stringify(t),GBA=[{identify:t=>typeof t=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:t=>t,stringify:W8},{identify:t=>t==null,createNode:()=>new zt(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:W8},{identify:t=>typeof t=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:t=>t==="true",stringify:W8},{identify:qz,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(t,e,{intAsBigInt:A})=>A?BigInt(t):parseInt(t,10),stringify:({value:t})=>qz(t)?t.toString():JSON.stringify(t)},{identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:t=>parseFloat(t),stringify:W8}],KBA={default:!0,tag:"",test:/^/,resolve(t,e){return e(`Unresolved plain scalar ${JSON.stringify(t)}`),t}},Vz=[Bc,Ec].concat(GBA,KBA);var k4={identify:t=>t instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(t,e){if(typeof atob=="function"){let A=atob(t.replace(/[\n\r]/g,"")),i=new Uint8Array(A.length);for(let n=0;n1&&e("Each pair must have its own sequence indicator");let n=i.items[0]||new Ja(new zt(null));if(i.commentBefore&&(n.key.commentBefore=n.key.commentBefore?`${i.commentBefore} +${n.key.commentBefore}`:i.commentBefore),i.comment){let o=n.value??n.key;o.comment=o.comment?`${i.comment} +${o.comment}`:i.comment}i=n}t.items[A]=mn(i)?i:new Ja(i)}}else e("Expected a sequence for this tag");return t}function mk(t,e,A){let{replacer:i}=A,n=new Bs(t);n.tag="tag:yaml.org,2002:pairs";let o=0;if(e&&Symbol.iterator in Object(e))for(let a of e){typeof i=="function"&&(a=i.call(e,String(o++),a));let r,s;if(Array.isArray(a))if(a.length===2)r=a[0],s=a[1];else throw new TypeError(`Expected [key, value] tuple: ${a}`);else if(a&&a instanceof Object){let g=Object.keys(a);if(g.length===1)r=g[0],s=a[r];else throw new TypeError(`Expected tuple with one key, not ${g.length} keys`)}else r=a;n.items.push(mE(r,s,A))}return n}var S4={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:fk,createNode:mk};var pk=(()=>{class t extends Bs{constructor(){super(),this.add=Va.prototype.add.bind(this),this.delete=Va.prototype.delete.bind(this),this.get=Va.prototype.get.bind(this),this.has=Va.prototype.has.bind(this),this.set=Va.prototype.set.bind(this),this.tag=t.tag}toJSON(A,i){if(!i)return super.toJSON(A);let n=new Map;i?.onCreate&&i.onCreate(n);for(let o of this.items){let a,r;if(mn(o)?(a=Br(o.key,"",i),r=Br(o.value,a,i)):a=Br(o,"",i),n.has(a))throw new Error("Ordered maps must not include duplicate keys");n.set(a,r)}return n}static from(A,i,n){let o=mk(A,i,n),a=new this;return a.items=o.items,a}}return t.tag="tag:yaml.org,2002:omap",t})(),x4={collection:"seq",identify:t=>t instanceof Map,nodeClass:pk,default:!1,tag:"tag:yaml.org,2002:omap",resolve(t,e){let A=fk(t,e),i=[];for(let{key:n}of A.items)Yi(n)&&(i.includes(n.value)?e(`Ordered maps must not include duplicate keys: ${n.value}`):i.push(n.value));return Object.assign(new pk,A)},createNode:(t,e,A)=>pk.from(t,e,A)};function Wz({value:t,source:e},A){return e&&(t?wk:Dk).test.test(e)?e:t?A.options.trueStr:A.options.falseStr}var wk={identify:t=>t===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new zt(!0),stringify:Wz},Dk={identify:t=>t===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new zt(!1),stringify:Wz};var Zz={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:t=>t.slice(-3).toLowerCase()==="nan"?NaN:t[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Es},Xz={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:t=>parseFloat(t.replace(/_/g,"")),stringify(t){let e=Number(t.value);return isFinite(e)?e.toExponential():Es(t)}},$z={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(t){let e=new zt(parseFloat(t.replace(/_/g,""))),A=t.indexOf(".");if(A!==-1){let i=t.substring(A+1).replace(/_/g,"");i[i.length-1]==="0"&&(e.minFractionDigits=i.length)}return e},stringify:Es};var R4=t=>typeof t=="bigint"||Number.isInteger(t);function Z8(t,e,A,{intAsBigInt:i}){let n=t[0];if((n==="-"||n==="+")&&(e+=1),t=t.substring(e).replace(/_/g,""),i){switch(A){case 2:t=`0b${t}`;break;case 8:t=`0o${t}`;break;case 16:t=`0x${t}`;break}let a=BigInt(t);return n==="-"?BigInt(-1)*a:a}let o=parseInt(t,A);return n==="-"?-1*o:o}function yk(t,e,A){let{value:i}=t;if(R4(i)){let n=i.toString(e);return i<0?"-"+A+n.substr(1):A+n}return Es(t)}var AO={identify:R4,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(t,e,A)=>Z8(t,2,2,A),stringify:t=>yk(t,2,"0b")},eO={identify:R4,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(t,e,A)=>Z8(t,1,8,A),stringify:t=>yk(t,8,"0")},tO={identify:R4,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(t,e,A)=>Z8(t,0,10,A),stringify:Es},iO={identify:R4,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(t,e,A)=>Z8(t,2,16,A),stringify:t=>yk(t,16,"0x")};var vk=(()=>{class t extends Va{constructor(A){super(A),this.tag=t.tag}add(A){let i;mn(A)?i=A:A&&typeof A=="object"&&"key"in A&&"value"in A&&A.value===null?i=new Ja(A.key,null):i=new Ja(A,null),O2(this.items,i.key)||this.items.push(i)}get(A,i){let n=O2(this.items,A);return!i&&mn(n)?Yi(n.key)?n.key.value:n.key:n}set(A,i){if(typeof i!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof i}`);let n=O2(this.items,A);n&&!i?this.items.splice(this.items.indexOf(n),1):!n&&i&&this.items.push(new Ja(A))}toJSON(A,i){return super.toJSON(A,i,Set)}toString(A,i,n){if(!A)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},A,{allNullValues:!0}),i,n);throw new Error("Set items must all have null values")}static from(A,i,n){let{replacer:o}=n,a=new this(A);if(i&&Symbol.iterator in Object(i))for(let r of i)typeof o=="function"&&(r=o.call(i,r,r)),a.items.push(mE(r,null,n));return a}}return t.tag="tag:yaml.org,2002:set",t})(),N4={collection:"map",identify:t=>t instanceof Set,nodeClass:vk,default:!1,tag:"tag:yaml.org,2002:set",createNode:(t,e,A)=>vk.from(t,e,A),resolve(t,e){if(Cc(t)){if(t.hasAllNullValues(!0))return Object.assign(new vk,t);e("Set items must all have null values")}else e("Expected a mapping for this tag");return t}};function bk(t,e){let A=t[0],i=A==="-"||A==="+"?t.substring(1):t,n=a=>e?BigInt(a):Number(a),o=i.replace(/_/g,"").split(":").reduce((a,r)=>a*n(60)+n(r),n(0));return A==="-"?n(-1)*o:o}function nO(t){let{value:e}=t,A=a=>a;if(typeof e=="bigint")A=a=>BigInt(a);else if(isNaN(e)||!isFinite(e))return Es(t);let i="";e<0&&(i="-",e*=A(-1));let n=A(60),o=[e%n];return e<60?o.unshift(0):(e=(e-o[0])/n,o.unshift(e%n),e>=60&&(e=(e-o[0])/n,o.unshift(e))),i+o.map(a=>String(a).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var X8={identify:t=>typeof t=="bigint"||Number.isInteger(t),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(t,e,{intAsBigInt:A})=>bk(t,A),stringify:nO},$8={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:t=>bk(t,!1),stringify:nO},pE={identify:t=>t instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(t){let e=t.match(pE.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,A,i,n,o,a,r]=e.map(Number),s=e[7]?Number((e[7]+"00").substr(1,3)):0,g=Date.UTC(A,i-1,n,o||0,a||0,r||0,s),l=e[8];if(l&&l!=="Z"){let C=bk(l,!1);Math.abs(C)<30&&(C*=60),g-=6e4*C}return new Date(g)},stringify:({value:t})=>t?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};var Mk=[Bc,Ec,P2,Z1,wk,Dk,AO,eO,tO,iO,Zz,Xz,$z,k4,dc,x4,S4,N4,X8,$8,pE];var oO=new Map([["core",jz],["failsafe",[Bc,Ec,P2]],["json",Vz],["yaml11",Mk],["yaml-1.1",Mk]]),aO={binary:k4,bool:M4,float:O8,floatExp:z8,floatNaN:H8,floatTime:$8,int:q8,intHex:V8,intOct:j8,intTime:X8,map:Bc,merge:dc,null:Z1,omap:x4,pairs:S4,seq:Ec,set:N4,timestamp:pE},rO={"tag:yaml.org,2002:binary":k4,"tag:yaml.org,2002:merge":dc,"tag:yaml.org,2002:omap":x4,"tag:yaml.org,2002:pairs":S4,"tag:yaml.org,2002:set":N4,"tag:yaml.org,2002:timestamp":pE};function Aw(t,e,A){let i=oO.get(e);if(i&&!t)return A&&!i.includes(dc)?i.concat(dc):i.slice();let n=i;if(!n)if(Array.isArray(t))n=[];else{let o=Array.from(oO.keys()).filter(a=>a!=="yaml11").map(a=>JSON.stringify(a)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${o} or define customTags array`)}if(Array.isArray(t))for(let o of t)n=n.concat(o);else typeof t=="function"&&(n=t(n.slice()));return A&&(n=n.concat(dc)),n.reduce((o,a)=>{let r=typeof a=="string"?aO[a]:a;if(!r){let s=JSON.stringify(a),g=Object.keys(aO).map(l=>JSON.stringify(l)).join(", ");throw new Error(`Unknown custom tag ${s}; use one of ${g}`)}return o.includes(r)||o.push(r),o},[])}var UBA=(t,e)=>t.keye.key?1:0,F4=class t{constructor({compat:e,customTags:A,merge:i,resolveKnownTags:n,schema:o,sortMapEntries:a,toStringDefaults:r}){this.compat=Array.isArray(e)?Aw(e,"compat"):e?Aw(null,e):null,this.name=typeof o=="string"&&o||"core",this.knownTags=n?rO:{},this.tags=Aw(A,this.name,i),this.toStringOptions=r??null,Object.defineProperty(this,lc,{value:Bc}),Object.defineProperty(this,Yg,{value:P2}),Object.defineProperty(this,hC,{value:Ec}),this.sortMapEntries=typeof a=="function"?a:a===!0?UBA:null}clone(){let e=Object.create(t.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};function sO(t,e){let A=[],i=e.directives===!0;if(e.directives!==!1&&t.directives){let s=t.directives.toString(t);s?(A.push(s),i=!0):t.directives.docStart&&(i=!0)}i&&A.push("---");let n=L8(t,e),{commentString:o}=n.options;if(t.commentBefore){A.length!==1&&A.unshift("");let s=o(t.commentBefore);A.unshift(Ql(s,""))}let a=!1,r=null;if(t.contents){if(yn(t.contents)){if(t.contents.spaceBefore&&i&&A.push(""),t.contents.commentBefore){let l=o(t.contents.commentBefore);A.push(Ql(l,""))}n.forceBlockIndent=!!t.comment,r=t.contents.comment}let s=r?void 0:()=>a=!0,g=mC(t.contents,n,()=>r=null,s);r&&(g+=f0(g,"",o(r))),(g[0]==="|"||g[0]===">")&&A[A.length-1]==="---"?A[A.length-1]=`--- ${g}`:A.push(g)}else A.push(mC(t.contents,n));if(t.directives?.docEnd)if(t.comment){let s=o(t.comment);s.includes(` +`)?(A.push("..."),A.push(Ql(s,""))):A.push(`... ${s}`)}else A.push("...");else{let s=t.comment;s&&a&&(s=s.replace(/^\n+/,"")),s&&((!a||r)&&A[A.length-1]!==""&&A.push(""),A.push(Ql(o(s),"")))}return A.join(` +`)+` +`}var pC=class t{constructor(e,A,i){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,Us,{value:v8});let n=null;typeof A=="function"||Array.isArray(A)?n=A:i===void 0&&A&&(i=A,A=void 0);let o=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},i);this.options=o;let{version:a}=o;i?._directives?(this.directives=i._directives.atDocument(),this.directives.yaml.explicit&&(a=this.directives.yaml.version)):this.directives=new QE({version:a}),this.setSchema(a,i),this.contents=e===void 0?null:this.createNode(e,n,i)}clone(){let e=Object.create(t.prototype,{[Us]:{value:v8}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=yn(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){wE(this.contents)&&this.contents.add(e)}addIn(e,A){wE(this.contents)&&this.contents.addIn(e,A)}createAlias(e,A){if(!e.anchor){let i=Ck(this);e.anchor=!A||i.has(A)?Ik(A||"a",i):A}return new uC(e.anchor)}createNode(e,A,i){let n;if(typeof A=="function")e=A.call({"":e},"",e),n=A;else if(Array.isArray(A)){let Q=b=>typeof b=="number"||b instanceof String||b instanceof Number,f=A.filter(Q).map(String);f.length>0&&(A=A.concat(f)),n=A}else i===void 0&&A&&(i=A,A=void 0);let{aliasDuplicateObjects:o,anchorPrefix:a,flow:r,keepUndefined:s,onTagObj:g,tag:l}=i??{},{onAnchor:C,setAnchors:I,sourceObjects:d}=Yz(this,a||"a"),B={aliasDuplicateObjects:o??!0,keepUndefined:s??!1,onAnchor:C,onTagObj:g,replacer:n,schema:this.schema,sourceObjects:d},E=fC(e,l,B);return r&&so(E)&&(E.flow=!0),I(),E}createPair(e,A,i={}){let n=this.createNode(e,null,i),o=this.createNode(A,null,i);return new Ja(n,o)}delete(e){return wE(this.contents)?this.contents.delete(e):!1}deleteIn(e){return uE(e)?this.contents==null?!1:(this.contents=null,!0):wE(this.contents)?this.contents.deleteIn(e):!1}get(e,A){return so(this.contents)?this.contents.get(e,A):void 0}getIn(e,A){return uE(e)?!A&&Yi(this.contents)?this.contents.value:this.contents:so(this.contents)?this.contents.getIn(e,A):void 0}has(e){return so(this.contents)?this.contents.has(e):!1}hasIn(e){return uE(e)?this.contents!==void 0:so(this.contents)?this.contents.hasIn(e):!1}set(e,A){this.contents==null?this.contents=D4(this.schema,[e],A):wE(this.contents)&&this.contents.set(e,A)}setIn(e,A){uE(e)?this.contents=A:this.contents==null?this.contents=D4(this.schema,Array.from(e),A):wE(this.contents)&&this.contents.setIn(e,A)}setSchema(e,A={}){typeof e=="number"&&(e=String(e));let i;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new QE({version:"1.1"}),i={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new QE({version:e}),i={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,i=null;break;default:{let n=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${n}`)}}if(A.schema instanceof Object)this.schema=A.schema;else if(i)this.schema=new F4(Object.assign(i,A));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:A,mapAsMap:i,maxAliasCount:n,onAnchor:o,reviver:a}={}){let r={anchors:new Map,doc:this,keep:!e,mapAsMap:i===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},s=Br(this.contents,A??"",r);if(typeof o=="function")for(let{count:g,res:l}of r.anchors.values())o(l,g);return typeof a=="function"?H2(a,{"":s},"",s):s}toJSON(e,A){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:A})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let A=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${A}`)}return sO(this,e)}};function wE(t){if(so(t))return!0;throw new Error("Expected a YAML collection as document contents")}var _4=class extends Error{constructor(e,A,i,n){super(),this.name=e,this.code=i,this.message=n,this.pos=A}},Qc=class extends _4{constructor(e,A,i){super("YAMLParseError",e,A,i)}},L4=class extends _4{constructor(e,A,i){super("YAMLWarning",e,A,i)}},kk=(t,e)=>A=>{if(A.pos[0]===-1)return;A.linePos=A.pos.map(r=>e.linePos(r));let{line:i,col:n}=A.linePos[0];A.message+=` at line ${i}, column ${n}`;let o=n-1,a=t.substring(e.lineStarts[i-1],e.lineStarts[i]).replace(/[\n\r]+$/,"");if(o>=60&&a.length>80){let r=Math.min(o-39,a.length-79);a="\u2026"+a.substring(r),o-=r-1}if(a.length>80&&(a=a.substring(0,79)+"\u2026"),i>1&&/^ *$/.test(a.substring(0,o))){let r=t.substring(e.lineStarts[i-2],e.lineStarts[i-1]);r.length>80&&(r=r.substring(0,79)+`\u2026 +`),a=r+a}if(/[^ ]/.test(a)){let r=1,s=A.linePos[1];s?.line===i&&s.col>n&&(r=Math.max(1,Math.min(s.col-n,80-o)));let g=" ".repeat(o)+"^".repeat(r);A.message+=`: + +${a} +${g} +`}};function m0(t,{flow:e,indicator:A,next:i,offset:n,onError:o,parentIndent:a,startOnNewline:r}){let s=!1,g=r,l=r,C="",I="",d=!1,B=!1,E=null,Q=null,f=null,b=null,S=null,M=null,D=null;for(let U of t)switch(B&&(U.type!=="space"&&U.type!=="newline"&&U.type!=="comma"&&o(U.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),B=!1),E&&(g&&U.type!=="comment"&&U.type!=="newline"&&o(E,"TAB_AS_INDENT","Tabs are not allowed as indentation"),E=null),U.type){case"space":!e&&(A!=="doc-start"||i?.type!=="flow-collection")&&U.source.includes(" ")&&(E=U),l=!0;break;case"comment":{l||o(U,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let J=U.source.substring(1)||" ";C?C+=I+J:C=J,I="",g=!1;break}case"newline":g?C?C+=U.source:(!M||A!=="seq-item-ind")&&(s=!0):I+=U.source,g=!0,d=!0,(Q||f)&&(b=U),l=!0;break;case"anchor":Q&&o(U,"MULTIPLE_ANCHORS","A node can have at most one anchor"),U.source.endsWith(":")&&o(U.offset+U.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),Q=U,D??(D=U.offset),g=!1,l=!1,B=!0;break;case"tag":{f&&o(U,"MULTIPLE_TAGS","A node can have at most one tag"),f=U,D??(D=U.offset),g=!1,l=!1,B=!0;break}case A:(Q||f)&&o(U,"BAD_PROP_ORDER",`Anchors and tags must be after the ${U.source} indicator`),M&&o(U,"UNEXPECTED_TOKEN",`Unexpected ${U.source} in ${e??"collection"}`),M=U,g=A==="seq-item-ind"||A==="explicit-key-ind",l=!1;break;case"comma":if(e){S&&o(U,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),S=U,g=!1,l=!1;break}default:o(U,"UNEXPECTED_TOKEN",`Unexpected ${U.type} token`),g=!1,l=!1}let F=t[t.length-1],_=F?F.offset+F.source.length:n;return B&&i&&i.type!=="space"&&i.type!=="newline"&&i.type!=="comma"&&(i.type!=="scalar"||i.source!=="")&&o(i.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),E&&(g&&E.indent<=a||i?.type==="block-map"||i?.type==="block-seq")&&o(E,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:S,found:M,spaceBefore:s,comment:C,hasNewline:d,anchor:Q,tag:f,newlineAfterProp:b,end:_,start:D??_}}function j2(t){if(!t)return null;switch(t.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(t.source.includes(` +`))return!0;if(t.end){for(let e of t.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of t.items){for(let A of e.start)if(A.type==="newline")return!0;if(e.sep){for(let A of e.sep)if(A.type==="newline")return!0}if(j2(e.key)||j2(e.value))return!0}return!1;default:return!0}}function G4(t,e,A){if(e?.type==="flow-collection"){let i=e.end[0];i.indent===t&&(i.source==="]"||i.source==="}")&&j2(e)&&A(i,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}function ew(t,e,A){let{uniqueKeys:i}=t.options;if(i===!1)return!1;let n=typeof i=="function"?i:(o,a)=>o===a||Yi(o)&&Yi(a)&&o.value===a.value;return e.some(o=>n(o.key,A))}var gO="All mapping items must start at the same column";function lO({composeNode:t,composeEmptyNode:e},A,i,n,o){let a=o?.nodeClass??Va,r=new a(A.schema);A.atRoot&&(A.atRoot=!1);let s=i.offset,g=null;for(let l of i.items){let{start:C,key:I,sep:d,value:B}=l,E=m0(C,{indicator:"explicit-key-ind",next:I??d?.[0],offset:s,onError:n,parentIndent:i.indent,startOnNewline:!0}),Q=!E.found;if(Q){if(I&&(I.type==="block-seq"?n(s,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in I&&I.indent!==i.indent&&n(s,"BAD_INDENT",gO)),!E.anchor&&!E.tag&&!d){g=E.end,E.comment&&(r.comment?r.comment+=` +`+E.comment:r.comment=E.comment);continue}(E.newlineAfterProp||j2(I))&&n(I??C[C.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else E.found?.indent!==i.indent&&n(s,"BAD_INDENT",gO);A.atKey=!0;let f=E.end,b=I?t(A,I,E,n):e(A,f,C,null,E,n);A.schema.compat&&G4(i.indent,I,n),A.atKey=!1,ew(A,r.items,b)&&n(f,"DUPLICATE_KEY","Map keys must be unique");let S=m0(d??[],{indicator:"map-value-ind",next:B,offset:b.range[2],onError:n,parentIndent:i.indent,startOnNewline:!I||I.type==="block-scalar"});if(s=S.end,S.found){Q&&(B?.type==="block-map"&&!S.hasNewline&&n(s,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),A.options.strict&&E.startt&&(t.type==="block-map"||t.type==="block-seq");function CO({composeNode:t,composeEmptyNode:e},A,i,n,o){let a=i.start.source==="{",r=a?"flow map":"flow sequence",s=o?.nodeClass??(a?Va:Bs),g=new s(A.schema);g.flow=!0;let l=A.atRoot;l&&(A.atRoot=!1),A.atKey&&(A.atKey=!1);let C=i.offset+i.start.source.length;for(let Q=0;Q0){let Q=p0(B,E,A.options.strict,n);Q.comment&&(g.comment?g.comment+=` +`+Q.comment:g.comment=Q.comment),g.range=[i.offset,E,Q.offset]}else g.range=[i.offset,E,E];return g}function Rk(t,e,A,i,n,o){let a=A.type==="block-map"?lO(t,e,A,i,o):A.type==="block-seq"?cO(t,e,A,i,o):CO(t,e,A,i,o),r=a.constructor;return n==="!"||n===r.tagName?(a.tag=r.tagName,a):(n&&(a.tag=n),a)}function IO(t,e,A,i,n){let o=i.tag,a=o?e.directives.tagName(o.source,I=>n(o,"TAG_RESOLVE_FAILED",I)):null;if(A.type==="block-seq"){let{anchor:I,newlineAfterProp:d}=i,B=I&&o?I.offset>o.offset?I:o:I??o;B&&(!d||d.offsetI.tag===a&&I.collection===r);if(!s){let I=e.schema.knownTags[a];if(I?.collection===r)e.schema.tags.push(Object.assign({},I,{default:!1})),s=I;else return I?n(o,"BAD_COLLECTION_TYPE",`${I.tag} used for ${r} collection, but expects ${I.collection??"scalar"}`,!0):n(o,"TAG_RESOLVE_FAILED",`Unresolved tag: ${a}`,!0),Rk(t,e,A,n,a)}let g=Rk(t,e,A,n,a,s),l=s.resolve?.(g,I=>n(o,"TAG_RESOLVE_FAILED",I),e.options)??g,C=yn(l)?l:new zt(l);return C.range=g.range,C.tag=a,s?.format&&(C.format=s.format),C}function Nk(t,e,A){let i=e.offset,n=JBA(e,t.options.strict,A);if(!n)return{value:"",type:null,comment:"",range:[i,i,i]};let o=n.mode===">"?zt.BLOCK_FOLDED:zt.BLOCK_LITERAL,a=e.source?YBA(e.source):[],r=a.length;for(let E=a.length-1;E>=0;--E){let Q=a[E][1];if(Q===""||Q==="\r")r=E;else break}if(r===0){let E=n.chomp==="+"&&a.length>0?` +`.repeat(Math.max(1,a.length-1)):"",Q=i+n.length;return e.source&&(Q+=e.source.length),{value:E,type:o,comment:n.comment,range:[i,Q,Q]}}let s=e.indent+n.indent,g=e.offset+n.length,l=0;for(let E=0;Es&&(s=Q.length);else{Q.length=r;--E)a[E][0].length>s&&(r=E+1);let C="",I="",d=!1;for(let E=0;Es||f[0]===" "?(I===" "?I=` +`:!d&&I===` +`&&(I=` + +`),C+=I+Q.slice(s)+f,I=` +`,d=!0):f===""?I===` +`?C+=` +`:I=` +`:(C+=I+f,I=" ",d=!1)}switch(n.chomp){case"-":break;case"+":for(let E=r;EA(i+I,d,B);switch(n){case"scalar":r=zt.PLAIN,s=TBA(o,g);break;case"single-quoted-scalar":r=zt.QUOTE_SINGLE,s=HBA(o,g);break;case"double-quoted-scalar":r=zt.QUOTE_DOUBLE,s=zBA(o,g);break;default:return A(t,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${n}`),{value:"",type:null,comment:"",range:[i,i+o.length,i+o.length]}}let l=i+o.length,C=p0(a,l,e,A);return{value:s,type:r,comment:C.comment,range:[i,l,C.offset]}}function TBA(t,e){let A="";switch(t[0]){case" ":A="a tab character";break;case",":A="flow indicator character ,";break;case"%":A="directive indicator character %";break;case"|":case">":{A=`block scalar indicator ${t[0]}`;break}case"@":case"`":{A=`reserved character ${t[0]}`;break}}return A&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${A}`),dO(t)}function HBA(t,e){return(t[t.length-1]!=="'"||t.length===1)&&e(t.length,"MISSING_CHAR","Missing closing 'quote"),dO(t.slice(1,-1)).replace(/''/g,"'")}function dO(t){let e,A;try{e=new RegExp(`(.*?)(?o?t.slice(o,i+1):n)}else A+=n}return(t[t.length-1]!=='"'||t.length===1)&&e(t.length,"MISSING_CHAR",'Missing closing "quote'),A}function OBA(t,e){let A="",i=t[e+1];for(;(i===" "||i===" "||i===` +`||i==="\r")&&!(i==="\r"&&t[e+2]!==` +`);)i===` +`&&(A+=` +`),e+=1,i=t[e+1];return A||(A=" "),{fold:A,offset:e}}var PBA={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:` +`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function jBA(t,e,A,i){let n=t.substr(e,A),a=n.length===A&&/^[0-9a-fA-F]+$/.test(n)?parseInt(n,16):NaN;if(isNaN(a)){let r=t.substr(e-2,A+2);return i(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${r}`),r}return String.fromCodePoint(a)}function _k(t,e,A,i){let{value:n,type:o,comment:a,range:r}=e.type==="block-scalar"?Nk(t,e,i):Fk(e,t.options.strict,i),s=A?t.directives.tagName(A.source,C=>i(A,"TAG_RESOLVE_FAILED",C)):null,g;t.options.stringKeys&&t.atKey?g=t.schema[Yg]:s?g=qBA(t.schema,n,s,A,i):e.type==="scalar"?g=VBA(t,n,e,i):g=t.schema[Yg];let l;try{let C=g.resolve(n,I=>i(A??e,"TAG_RESOLVE_FAILED",I),t.options);l=Yi(C)?C:new zt(C)}catch(C){let I=C instanceof Error?C.message:String(C);i(A??e,"TAG_RESOLVE_FAILED",I),l=new zt(n)}return l.range=r,l.source=n,o&&(l.type=o),s&&(l.tag=s),g.format&&(l.format=g.format),a&&(l.comment=a),l}function qBA(t,e,A,i,n){if(A==="!")return t[Yg];let o=[];for(let r of t.tags)if(!r.collection&&r.tag===A)if(r.default&&r.test)o.push(r);else return r;for(let r of o)if(r.test?.test(e))return r;let a=t.knownTags[A];return a&&!a.collection?(t.tags.push(Object.assign({},a,{default:!1,test:void 0})),a):(n(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${A}`,A!=="tag:yaml.org,2002:str"),t[Yg])}function VBA({atKey:t,directives:e,schema:A},i,n,o){let a=A.tags.find(r=>(r.default===!0||t&&r.default==="key")&&r.test?.test(i))||A[Yg];if(A.compat){let r=A.compat.find(s=>s.default&&s.test?.test(i))??A[Yg];if(a.tag!==r.tag){let s=e.tagString(a.tag),g=e.tagString(r.tag),l=`Value may be parsed as either ${s} or ${g}`;o(n,"TAG_RESOLVE_FAILED",l,!0)}}return a}function BO(t,e,A){if(e){A??(A=e.length);for(let i=A-1;i>=0;--i){let n=e[i];switch(n.type){case"space":case"comment":case"newline":t-=n.source.length;continue}for(n=e[++i];n?.type==="space";)t+=n.source.length,n=e[++i];break}}return t}var WBA={composeNode:Lk,composeEmptyNode:tw};function Lk(t,e,A,i){let n=t.atKey,{spaceBefore:o,comment:a,anchor:r,tag:s}=A,g,l=!0;switch(e.type){case"alias":g=ZBA(t,e,i),(r||s)&&i(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":g=_k(t,e,s,i),r&&(g.anchor=r.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":g=IO(WBA,t,e,A,i),r&&(g.anchor=r.source.substring(1));break;default:{let C=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;i(e,"UNEXPECTED_TOKEN",C),g=tw(t,e.offset,void 0,null,A,i),l=!1}}return r&&g.anchor===""&&i(r,"BAD_ALIAS","Anchor cannot be an empty string"),n&&t.options.stringKeys&&(!Yi(g)||typeof g.value!="string"||g.tag&&g.tag!=="tag:yaml.org,2002:str")&&i(s??e,"NON_STRING_KEY","With stringKeys, all keys must be strings"),o&&(g.spaceBefore=!0),a&&(e.type==="scalar"&&e.source===""?g.comment=a:g.commentBefore=a),t.options.keepSourceTokens&&l&&(g.srcToken=e),g}function tw(t,e,A,i,{spaceBefore:n,comment:o,anchor:a,tag:r,end:s},g){let l={type:"scalar",offset:BO(e,A,i),indent:-1,source:""},C=_k(t,l,r,g);return a&&(C.anchor=a.source.substring(1),C.anchor===""&&g(a,"BAD_ALIAS","Anchor cannot be an empty string")),n&&(C.spaceBefore=!0),o&&(C.comment=o,C.range[2]=s),C}function ZBA({options:t},{offset:e,source:A,end:i},n){let o=new uC(A.substring(1));o.source===""&&n(e,"BAD_ALIAS","Alias cannot be an empty string"),o.source.endsWith(":")&&n(e+A.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let a=e+A.length,r=p0(i,a,t.strict,n);return o.range=[e,a,r.offset],r.comment&&(o.comment=r.comment),o}function EO(t,e,{offset:A,start:i,value:n,end:o},a){let r=Object.assign({_directives:e},t),s=new pC(void 0,r),g={atKey:!1,atRoot:!0,directives:s.directives,options:s.options,schema:s.schema},l=m0(i,{indicator:"doc-start",next:n??o?.[0],offset:A,onError:a,parentIndent:0,startOnNewline:!0});l.found&&(s.directives.docStart=!0,n&&(n.type==="block-map"||n.type==="block-seq")&&!l.hasNewline&&a(l.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),s.contents=n?Lk(g,n,l,a):tw(g,l.end,i,null,l,a);let C=s.contents.range[2],I=p0(o,C,!1,a);return I.comment&&(s.comment=I.comment),s.range=[A,C,I.offset],s}function K4(t){if(typeof t=="number")return[t,t+1];if(Array.isArray(t))return t.length===2?t:[t[0],t[1]];let{offset:e,source:A}=t;return[e,e+(typeof A=="string"?A.length:1)]}function QO(t){let e="",A=!1,i=!1;for(let n=0;n{let a=K4(A);o?this.warnings.push(new L4(a,i,n)):this.errors.push(new Qc(a,i,n))},this.directives=new QE({version:e.version||"1.2"}),this.options=e}decorate(e,A){let{comment:i,afterEmptyLine:n}=QO(this.prelude);if(i){let o=e.contents;if(A)e.comment=e.comment?`${e.comment} +${i}`:i;else if(n||e.directives.docStart||!o)e.commentBefore=i;else if(so(o)&&!o.flow&&o.items.length>0){let a=o.items[0];mn(a)&&(a=a.key);let r=a.commentBefore;a.commentBefore=r?`${i} +${r}`:i}else{let a=o.commentBefore;o.commentBefore=a?`${i} +${a}`:i}}A?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:QO(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,A=!1,i=-1){for(let n of e)yield*le(this.next(n));yield*le(this.end(A,i))}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(A,i,n)=>{let o=K4(e);o[0]+=A,this.onError(o,"BAD_DIRECTIVE",i,n)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let A=EO(this.options,this.directives,e,this.onError);this.atDirectives&&!A.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(A,!1),this.doc&&(yield this.doc),this.doc=A,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let A=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,i=new Qc(K4(e),"UNEXPECTED_TOKEN",A);this.atDirectives||!this.doc?this.errors.push(i):this.doc.errors.push(i);break}case"doc-end":{if(!this.doc){let i="Unexpected doc-end without preceding document";this.errors.push(new Qc(K4(e),"UNEXPECTED_TOKEN",i));break}this.doc.directives.docEnd=!0;let A=p0(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),A.comment){let i=this.doc.comment;this.doc.comment=i?`${i} +${A.comment}`:A.comment}this.doc.range[2]=A.offset;break}default:this.errors.push(new Qc(K4(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,A=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let i=Object.assign({_directives:this.directives},this.options),n=new pC(void 0,i);this.atDirectives&&this.onError(A,"MISSING_CHAR","Missing directives-end indicator line"),n.range=[0,A,A],this.decorate(n,!1),yield n}}};var Gk=Symbol("break visit"),XBA=Symbol("skip children"),hO=Symbol("remove item");function X1(t,e){"type"in t&&t.type==="document"&&(t={start:t.start,value:t.value}),uO(Object.freeze([]),t,e)}X1.BREAK=Gk;X1.SKIP=XBA;X1.REMOVE=hO;X1.itemAtPath=(t,e)=>{let A=t;for(let[i,n]of e){let o=A?.[i];if(o&&"items"in o)A=o.items[n];else return}return A};X1.parentCollection=(t,e)=>{let A=X1.itemAtPath(t,e.slice(0,-1)),i=e[e.length-1][0],n=A?.[i];if(n&&"items"in n)return n;throw new Error("Parent collection not found")};function uO(t,e,A){let i=A(e,t);if(typeof i=="symbol")return i;for(let n of["key","value"]){let o=e[n];if(o&&"items"in o){for(let a=0;a":return"block-scalar-header"}return null}function hc(t){switch(t){case void 0:case" ":case` +`:case"\r":case" ":return!0;default:return!1}}var mO=new Set("0123456789ABCDEFabcdef"),AEA=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),nw=new Set(",[]{}"),eEA=new Set(` ,[]{} +\r `),Yk=t=>!t||eEA.has(t),J4=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,A=!1){if(e){if(typeof e!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!A;let i=this.next??"stream";for(;i&&(A||this.hasChars(1));)i=yield*le(this.parseNext(i))}atLineEnd(){let e=this.pos,A=this.buffer[e];for(;A===" "||A===" ";)A=this.buffer[++e];return!A||A==="#"||A===` +`?!0:A==="\r"?this.buffer[e+1]===` +`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let A=this.buffer[e];if(this.indentNext>0){let i=0;for(;A===" ";)A=this.buffer[++i+e];if(A==="\r"){let n=this.buffer[i+e+1];if(n===` +`||!n&&!this.atEnd)return e+i+1}return A===` +`||i>=this.indentNext||!A&&!this.atEnd?e+i:-1}if(A==="-"||A==="."){let i=this.buffer.substr(e,3);if((i==="---"||i==="...")&&hc(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return(typeof e!="number"||e!==-1&&ethis.indentValue&&!hc(this.charAt(1))&&(this.indentNext=this.indentValue),yield*le(this.parseBlockStart())}*parseBlockStart(){let[e,A]=this.peek(2);if(!A&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&hc(A)){let i=(yield*le(this.pushCount(1)))+(yield*le(this.pushSpaces(!0)));return this.indentNext=this.indentValue+1,this.indentValue+=i,yield*le(this.parseBlockStart())}return"doc"}*parseDocument(){yield*le(this.pushSpaces(!0));let e=this.getLine();if(e===null)return this.setNext("doc");let A=yield*le(this.pushIndicators());switch(e[A]){case"#":yield*le(this.pushCount(e.length-A));case void 0:return yield*le(this.pushNewline()),yield*le(this.parseLineStart());case"{":case"[":return yield*le(this.pushCount(1)),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*le(this.pushCount(1)),"doc";case"*":return yield*le(this.pushUntil(Yk)),"doc";case'"':case"'":return yield*le(this.parseQuotedScalar());case"|":case">":return A+=yield*le(this.parseBlockScalarHeader()),A+=yield*le(this.pushSpaces(!0)),yield*le(this.pushCount(e.length-A)),yield*le(this.pushNewline()),yield*le(this.parseBlockScalar());default:return yield*le(this.parsePlainScalar())}}*parseFlowCollection(){let e,A,i=-1;do e=yield*le(this.pushNewline()),e>0?(A=yield*le(this.pushSpaces(!1)),this.indentValue=i=A):A=0,A+=yield*le(this.pushSpaces(!0));while(e+A>0);let n=this.getLine();if(n===null)return this.setNext("flow");if((i!==-1&&i"0"&&A<="9")this.blockScalarIndent=Number(A)-1;else if(A!=="-")break}return yield*le(this.pushUntil(A=>hc(A)||A==="#"))}*parseBlockScalar(){let e=this.pos-1,A=0,i;A:for(let o=this.pos;i=this.buffer[o];++o)switch(i){case" ":A+=1;break;case` +`:e=o,A=0;break;case"\r":{let a=this.buffer[o+1];if(!a&&!this.atEnd)return this.setNext("block-scalar");if(a===` +`)break}default:break A}if(!i&&!this.atEnd)return this.setNext("block-scalar");if(A>=this.indentNext){this.blockScalarIndent===-1?this.indentNext=A:this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let o=this.continueScalar(e+1);if(o===-1)break;e=this.buffer.indexOf(` +`,o)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let n=e+1;for(i=this.buffer[n];i===" ";)i=this.buffer[++n];if(i===" "){for(;i===" "||i===" "||i==="\r"||i===` +`;)i=this.buffer[++n];e=n-1}else if(!this.blockScalarKeep)do{let o=e-1,a=this.buffer[o];a==="\r"&&(a=this.buffer[--o]);let r=o;for(;a===" ";)a=this.buffer[--o];if(a===` +`&&o>=this.pos&&o+1+A>r)e=o;else break}while(!0);return yield iw,yield*le(this.pushToIndex(e+1,!0)),yield*le(this.parseLineStart())}*parsePlainScalar(){let e=this.flowLevel>0,A=this.pos-1,i=this.pos-1,n;for(;n=this.buffer[++i];)if(n===":"){let o=this.buffer[i+1];if(hc(o)||e&&nw.has(o))break;A=i}else if(hc(n)){let o=this.buffer[i+1];if(n==="\r"&&(o===` +`?(i+=1,n=` +`,o=this.buffer[i+1]):A=i),o==="#"||e&&nw.has(o))break;if(n===` +`){let a=this.continueScalar(i+1);if(a===-1)break;i=Math.max(i,a-2)}}else{if(e&&nw.has(n))break;A=i}return!n&&!this.atEnd?this.setNext("plain-scalar"):(yield iw,yield*le(this.pushToIndex(A+1,!0)),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,A){let i=this.buffer.slice(this.pos,e);return i?(yield i,this.pos+=i.length,i.length):(A&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*le(this.pushTag()))+(yield*le(this.pushSpaces(!0)))+(yield*le(this.pushIndicators()));case"&":return(yield*le(this.pushUntil(Yk)))+(yield*le(this.pushSpaces(!0)))+(yield*le(this.pushIndicators()));case"-":case"?":case":":{let e=this.flowLevel>0,A=this.charAt(1);if(hc(A)||e&&nw.has(A))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*le(this.pushCount(1)))+(yield*le(this.pushSpaces(!0)))+(yield*le(this.pushIndicators()))}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,A=this.buffer[e];for(;!hc(A)&&A!==">";)A=this.buffer[++e];return yield*le(this.pushToIndex(A===">"?e+1:e,!1))}else{let e=this.pos+1,A=this.buffer[e];for(;A;)if(AEA.has(A))A=this.buffer[++e];else if(A==="%"&&mO.has(this.buffer[e+1])&&mO.has(this.buffer[e+2]))A=this.buffer[e+=3];else break;return yield*le(this.pushToIndex(e,!1))}}*pushNewline(){let e=this.buffer[this.pos];return e===` +`?yield*le(this.pushCount(1)):e==="\r"&&this.charAt(1)===` +`?yield*le(this.pushCount(2)):0}*pushSpaces(e){let A=this.pos-1,i;do i=this.buffer[++A];while(i===" "||e&&i===" ");let n=A-this.pos;return n>0&&(yield this.buffer.substr(this.pos,n),this.pos=A),n}*pushUntil(e){let A=this.pos,i=this.buffer[A];for(;!e(i);)i=this.buffer[++A];return yield*le(this.pushToIndex(A,!1))}};var Y4=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let A=0,i=this.lineStarts.length;for(;A>1;this.lineStarts[o]=0;)switch(t[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break A}for(;t[++e]?.type==="space";);return t.splice(e,t.length)}function wO(t){if(t.start.type==="flow-seq-start")for(let e of t.items)e.sep&&!e.value&&!q2(e.start,"explicit-key-ind")&&!q2(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,DO(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}var T4=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new J4,this.onNewLine=e}*parse(e,A=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let i of this.lexer.lex(e,A))yield*le(this.next(i));A||(yield*le(this.end()))}*next(e){if(this.source=e,this.atScalar){this.atScalar=!1,yield*le(this.step()),this.offset+=e.length;return}let A=fO(e);if(A)if(A==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=A,yield*le(this.step()),A){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let i=`Not a YAML token: ${e}`;yield*le(this.pop({type:"error",offset:this.offset,message:i,source:e})),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*le(this.pop())}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&e?.type!=="doc-end"){for(;this.stack.length>0;)yield*le(this.pop());this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*le(this.stream());switch(e.type){case"document":return yield*le(this.document(e));case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*le(this.scalar(e));case"block-scalar":return yield*le(this.blockScalar(e));case"block-map":return yield*le(this.blockMap(e));case"block-seq":return yield*le(this.blockSequence(e));case"flow-collection":return yield*le(this.flowCollection(e));case"doc-end":return yield*le(this.documentEnd(e))}yield*le(this.pop())}peek(e){return this.stack[this.stack.length-e]}*pop(e){let A=e??this.stack.pop();if(!A)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield A;else{let i=this.peek(1);switch(A.type==="block-scalar"?A.indent="indent"in i?i.indent:0:A.type==="flow-collection"&&i.type==="document"&&(A.indent=0),A.type==="flow-collection"&&wO(A),i.type){case"document":i.value=A;break;case"block-scalar":i.props.push(A);break;case"block-map":{let n=i.items[i.items.length-1];if(n.value){i.items.push({start:[],key:A,sep:[]}),this.onKeyLine=!0;return}else if(n.sep)n.value=A;else{Object.assign(n,{key:A,sep:[]}),this.onKeyLine=!n.explicitKey;return}break}case"block-seq":{let n=i.items[i.items.length-1];n.value?i.items.push({start:[],value:A}):n.value=A;break}case"flow-collection":{let n=i.items[i.items.length-1];!n||n.value?i.items.push({start:[],key:A,sep:[]}):n.sep?n.value=A:Object.assign(n,{key:A,sep:[]});return}default:yield*le(this.pop()),yield*le(this.pop(A))}if((i.type==="document"||i.type==="block-map"||i.type==="block-seq")&&(A.type==="block-map"||A.type==="block-seq")){let n=A.items[A.items.length-1];n&&!n.sep&&!n.value&&n.start.length>0&&pO(n.start)===-1&&(A.indent===0||n.start.every(o=>o.type!=="comment"||o.indent=e.indent){let i=!this.onKeyLine&&this.indent===e.indent,n=i&&(A.sep||A.explicitKey)&&this.type!=="seq-item-ind",o=[];if(n&&A.sep&&!A.value){let a=[];for(let r=0;re.indent&&(a.length=0);break;default:a.length=0}}a.length>=2&&(o=A.sep.splice(a[1]))}switch(this.type){case"anchor":case"tag":n||A.value?(o.push(this.sourceToken),e.items.push({start:o}),this.onKeyLine=!0):A.sep?A.sep.push(this.sourceToken):A.start.push(this.sourceToken);return;case"explicit-key-ind":!A.sep&&!A.explicitKey?(A.start.push(this.sourceToken),A.explicitKey=!0):n||A.value?(o.push(this.sourceToken),e.items.push({start:o,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(A.explicitKey)if(A.sep)if(A.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(q2(A.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]});else if(DO(A.key)&&!q2(A.sep,"newline")){let a=DE(A.start),r=A.key,s=A.sep;s.push(this.sourceToken),delete A.key,delete A.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:r,sep:s}]})}else o.length>0?A.sep=A.sep.concat(o,this.sourceToken):A.sep.push(this.sourceToken);else if(q2(A.start,"newline"))Object.assign(A,{key:null,sep:[this.sourceToken]});else{let a=DE(A.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:null,sep:[this.sourceToken]}]})}else A.sep?A.value||n?e.items.push({start:o,key:null,sep:[this.sourceToken]}):q2(A.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):A.sep.push(this.sourceToken):Object.assign(A,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);n||A.value?(e.items.push({start:o,key:a,sep:[]}),this.onKeyLine=!0):A.sep?this.stack.push(a):(Object.assign(A,{key:a,sep:[]}),this.onKeyLine=!0);return}default:{let a=this.startBlockValue(e);if(a){if(a.type==="block-seq"){if(!A.explicitKey&&A.sep&&!q2(A.sep,"newline")){yield*le(this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source}));return}}else i&&e.items.push({start:o});this.stack.push(a);return}}}}yield*le(this.pop()),yield*le(this.step())}*blockSequence(e){let A=e.items[e.items.length-1];switch(this.type){case"newline":if(A.value){let i="end"in A.value?A.value.end:void 0;(Array.isArray(i)?i[i.length-1]:void 0)?.type==="comment"?i?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else A.start.push(this.sourceToken);return;case"space":case"comment":if(A.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(A.start,e.indent)){let n=e.items[e.items.length-2]?.value?.end;if(Array.isArray(n)){Array.prototype.push.apply(n,A.start),n.push(this.sourceToken),e.items.pop();return}}A.start.push(this.sourceToken)}return;case"anchor":case"tag":if(A.value||this.indent<=e.indent)break;A.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;A.value||q2(A.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):A.start.push(this.sourceToken);return}if(this.indent>e.indent){let i=this.startBlockValue(e);if(i){this.stack.push(i);return}}yield*le(this.pop()),yield*le(this.step())}*flowCollection(e){let A=e.items[e.items.length-1];if(this.type==="flow-error-end"){let i;do yield*le(this.pop()),i=this.peek(1);while(i?.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!A||A.sep?e.items.push({start:[this.sourceToken]}):A.start.push(this.sourceToken);return;case"map-value-ind":!A||A.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):A.sep?A.sep.push(this.sourceToken):Object.assign(A,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!A||A.value?e.items.push({start:[this.sourceToken]}):A.sep?A.sep.push(this.sourceToken):A.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let n=this.flowScalar(this.type);!A||A.value?e.items.push({start:[],key:n,sep:[]}):A.sep?this.stack.push(n):Object.assign(A,{key:n,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let i=this.startBlockValue(e);i?this.stack.push(i):(yield*le(this.pop()),yield*le(this.step()))}else{let i=this.peek(2);if(i.type==="block-map"&&(this.type==="map-value-ind"&&i.indent===e.indent||this.type==="newline"&&!i.items[i.items.length-1].sep))yield*le(this.pop()),yield*le(this.step());else if(this.type==="map-value-ind"&&i.type!=="flow-collection"){let n=ow(i),o=DE(n);wO(e);let a=e.end.splice(1,e.end.length);a.push(this.sourceToken);let r={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:o,key:e,sep:a}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=r}else yield*le(this.lineEnd(e))}}flowScalar(e){if(this.onNewLine){let A=this.source.indexOf(` +`)+1;for(;A!==0;)this.onNewLine(this.offset+A),A=this.source.indexOf(` +`,A)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let A=ow(e),i=DE(A);return i.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let A=ow(e),i=DE(A);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,A){return this.type!=="comment"||this.indent<=A?!1:e.every(i=>i.type==="newline"||i.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*le(this.pop())))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*le(this.pop()),yield*le(this.step());break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*le(this.pop()))}}};function tEA(t){let e=t.prettyErrors!==!1;return{lineCounter:t.lineCounter||e&&new Y4||null,prettyErrors:e}}function yO(t,e={}){let{lineCounter:A,prettyErrors:i}=tEA(e),n=new T4(A?.addNewLine),o=new U4(e),a=null;for(let r of o.compose(n.parse(t),!0,t.length))if(!a)a=r;else if(a.options.logLevel!=="silent"){a.errors.push(new Qc(r.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return i&&A&&(a.errors.forEach(kk(t,A)),a.warnings.forEach(kk(t,A))),a}function yE(t,e,A){let i;typeof e=="function"?i=e:A===void 0&&e&&typeof e=="object"&&(A=e);let n=yO(t,A);if(!n)return null;if(n.warnings.forEach(o=>G8(n.options.logLevel,o)),n.errors.length>0){if(n.options.logLevel!=="silent")throw n.errors[0];n.errors=[]}return n.toJS(Object.assign({reviver:i},A))}function Tk(t,e,A){let i=null;if(typeof e=="function"||Array.isArray(e)?i=e:A===void 0&&e&&(A=e),typeof A=="string"&&(A=A.length),typeof A=="number"){let n=Math.round(A);A=n<1?void 0:n>8?{indent:8}:{indent:n}}if(t===void 0){let{keepUndefined:n}=A??e??{};if(!n)return}return cc(t)&&!i?t.toString(A):new pC(t,i,A).toString(A)}var w0=class t{static generateYamlFile(e,A,i,n,o=new Set){if(o.has(e.name))return;o.add(e.name);let a=e.isRoot?"root_agent.yaml":`${e.name}.yaml`,r=`${i}/${a}`,s=e.sub_agents?e.sub_agents.map(B=>({config_path:`./${B.name}.yaml`})):[],g={name:e.name,model:e.model,agent_class:e.agent_class,description:e.description||"",instruction:e.instruction,sub_agents:s,tools:t.buildToolsConfig(e.tools,n)};(!e.description||e.description.trim()==="")&&delete g.description,e.agent_class!="LlmAgent"&&(delete g.model,delete g.instruction,delete g.tools),e.agent_class==="LoopAgent"&&e.max_iterations&&(g.max_iterations=e.max_iterations);let l=t.buildCallbacksConfig(e.callbacks);Object.keys(l).length>0&&Object.assign(g,l);let C=Tk(g),I=new Blob([C],{type:"application/x-yaml"}),d=new File([I],r,{type:"application/x-yaml"});A.append("files",d);for(let B of e.sub_agents??[])t.generateYamlFile(B,A,i,n,o);if(e.tools){for(let B of e.tools)if(B.toolType==="Agent Tool"){let E=B.toolAgentName||B.name;if(!E||E==="undefined"||E.trim()==="")continue;let Q=n.get(E);Q&&t.generateYamlFile(Q,A,i,n,o)}}}static buildToolsConfig(e,A){return!e||e.length===0?[]:e.map(i=>{let n={name:i.name};if(i.toolType==="Agent Tool"){n.name="AgentTool";let o=i.toolAgentName||i.name;if(!o||o==="undefined"||o.trim()==="")return null;let a=A.get(o);return n.args={agent:{config_path:`./${o}.yaml`},skip_summarization:a?.skip_summarization||!1},n}return i.args&&Object.keys(i.args).some(a=>{let r=i.args[a];return r!=null&&r!==""})&&(n.args=i.args),n}).filter(i=>i!==null)}static buildCallbacksConfig(e){if(!e||e.length===0)return{};let A={};return e.forEach(i=>{let n=`${i.type}_callbacks`;A[n]||(A[n]=[]),A[n].push({name:i.name})}),A}};function nEA(t,e){t&1&&(m(0,"mat-hint",3),K(1," Start with a letter or underscore, and contain only letters, digits, and underscores. "),w())}var aw=class t{constructor(e,A){this.data=e;this.dialogRef=A}newAppName="";agentService=h(sg);_snackBar=h(J2);router=h(Cs);isNameValid(){let e=this.newAppName.trim();return!(!e||!/^[a-zA-Z_]/.test(e)||!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}createNewApp(){let e=this.newAppName.trim();if(!this.isNameValid()){this._snackBar.open("App name must start with a letter or underscore and can only contain letters, digits, and underscores.","OK");return}if(this.data.existingAppNames.includes(e)){this._snackBar.open("App name already exists. Please choose a different name.","OK");return}let A={agent_class:"LlmAgent",instruction:"You are the root agent that coordinates other agents.",isRoot:!0,model:"gemini-2.5-flash",name:e,sub_agents:[],tools:[]},i=new FormData,n=new Map;w0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{o?(this.router.navigate(["/"],{queryParams:{app:e,mode:"builder"}}).then(()=>{window.location.reload()}),this.dialogRef.close(!0)):this._snackBar.open("Something went wrong, please try again","OK")})}static \u0275fac=function(A){return new(A||t)(Ct(ka),Ct(Po))};static \u0275cmp=kA({type:t,selectors:[["app-add-item-dialog"]],decls:10,vars:3,consts:[["mat-dialog-title","",1,"new-app-title"],[2,"padding-left","20px","padding-right","24px"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"],[1,"validation-hint"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click","disabled"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1,"Create a new app"),w(),m(2,"mat-form-field",1)(3,"input",2),ho("ngModelChange",function(o){return ao(i.newAppName,o)||(i.newAppName=o),o}),eA("keydown.enter",function(){return i.createNewApp()}),w(),V(4,nEA,2,0,"mat-hint",3),w(),m(5,"mat-dialog-actions",4)(6,"button",5),K(7,"Cancel"),w(),m(8,"button",6),eA("click",function(){return i.createNewApp()}),K(9," Create "),w()()),A&2&&(p(3),Qo("ngModel",i.newAppName),p(),W(i.isNameValid()?-1:4),p(4),AA("disabled",!i.isNameValid()))},dependencies:[Ua,ta,Ka,Nn,uo,fo,ba,or,Fn,K2,R1],styles:[".new-app-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-subhead-color)!important;font-family:Google Sans;font-size:24px}.validation-hint[_ngcontent-%COMP%]{font-size:12px;color:var(--mdc-dialog-supporting-text-color)}"]})};var oEA=["audioPlayer"],vE=class t{base64data=at("");audioPlayerRef=ca("audioPlayer");audioSrc="";constructor(){}ngOnChanges(e){e.base64data&&this.base64data()&&this.setAudioSource(this.base64data())}setAudioSource(e){e.startsWith("data:")?this.audioSrc=e:this.audioSrc=`data:audio/mpeg;base64,${e}`,this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.load()}play(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.play()}pause(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.pause()}stop(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&(this.audioPlayerRef().nativeElement.pause(),this.audioPlayerRef().nativeElement.currentTime=0)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-audio-player"]],viewQuery:function(A,i){A&1&&rs(i.audioPlayerRef,oEA,5),A&2&&wr()},inputs:{base64data:[1,"base64data"]},features:[ti],decls:3,vars:1,consts:[["audioPlayer",""],["controls","",3,"src"]],template:function(A,i){A&1&&(ci(0,"div"),Li(1,"audio",1,0),fi()),A&2&&(p(),vo("src",i.audioSrc))},styles:[".audio-player-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;padding:15px;background-color:var(--audio-player-container-background-color);border-radius:8px;box-shadow:0 2px 5px var(--audio-player-container-box-shadow-color);margin:20px auto;max-width:350px}audio[_ngcontent-%COMP%]{outline:none;border-radius:5px;width:350px}.custom-controls[_ngcontent-%COMP%]{margin-top:10px;display:flex;gap:10px}.custom-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:8px 15px;border:none;border-radius:5px;background-color:var(--audio-player-custom-controls-button-background-color);color:var(--audio-player-custom-controls-button-color);cursor:pointer;font-size:14px;transition:background-color .2s ease}.custom-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background-color:var(--audio-player-custom-controls-button-hover-background-color)}"]})};function aEA(t,e){if(t&1&&Li(0,"img",5),t&2){let A=v(2);vo("src",A.displayContent,Ga)}}function rEA(t,e){t&1&&(ci(0,"div",6),K(1," No image data provided. "),fi())}function sEA(t,e){if(t&1&&(ci(0,"div",3),V(1,aEA,1,1,"img",5),V(2,rEA,2,0,"div",6),fi()),t&2){let A=v();p(),W(A.displayContent?1:-1),p(),W(A.displayContent?-1:2)}}function gEA(t,e){if(t&1&&Li(0,"div",4),t&2){let A=v();vo("innerHTML",A.displayContent,ol)}}var V2=class t{displayContent=null;isSvgContent=!1;dialogRef=h(Po);data=h(ka);safeValuesService=h(ds);ngOnInit(){this.processImageData()}processImageData(){let e=this.data.imageData;if(!e){this.displayContent=null,this.isSvgContent=!1;return}if(e.trim().includes("0?1:-1),p(3),_e(" ",o.getArtifactName(i)," "),p(5),Qo("ngModel",o.selectedArtifacts[n]),p(),Jt(o.getSortedArtifactsFromId(i)),p(7),W((A=o.selectedArtifacts[n].mediaType)===o.MediaType.IMAGE?17:A===o.MediaType.AUDIO?18:-1)}}var BEA="default_artifact_name",$1=(n=>(n.IMAGE="image",n.AUDIO="audio",n.TEXT="text",n.UNSPECIFIED="unspecified",n))($1||{});function H4(t){let e=t.toLowerCase();for(let A of Object.values($1))if(A!=="unspecified"&&e.startsWith(A+"/"))return A;return"unspecified"}function EEA(t){return t?t.startsWith("image/"):!1}function QEA(t){return t?t.startsWith("audio/"):!1}var rw=class t{artifacts=at([]);selectedArtifacts=[];isArtifactAudio=QEA;isArtifactImage=EEA;MediaType=$1;downloadService=h(cE);dialog=h(Ks);safeValuesService=h(ds);ngOnChanges(e){if(e.artifacts){this.selectedArtifacts=[];for(let A of this.getDistinctArtifactIds())this.selectedArtifacts.push(this.getSortedArtifactsFromId(A)[0])}}downloadArtifact(e){this.downloadService.downloadBase64Data(e.data,e.mimeType,e.id)}getArtifactName(e){return e??BEA}getDistinctArtifactIds(){return[...new Set(this.artifacts().map(e=>e.id))]}getSortedArtifactsFromId(e){return this.artifacts().filter(A=>A.id===e).sort((A,i)=>i.versionId-A.versionId)}onArtifactVersionChange(e,A){this.selectedArtifacts[A]=e.value}openViewImageDialog(e){if(!e||!e.startsWith("data:")||e.indexOf(";base64,")===-1)return;let A=this.dialog.open(V2,{maxWidth:"90vw",maxHeight:"90vh",data:{imageData:e}})}openArtifact(e,A){if(this.isArtifactImage(A)){this.openViewImageDialog(e);return}this.openBase64InNewTab(e,A)}openBase64InNewTab(e,A){}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-artifact-tab"]],inputs:{artifacts:[1,"artifacts"]},features:[ti],decls:3,vars:0,consts:[[1,"artifact-container"],[1,"artifact-box"],[1,"white-separator"],[1,"artifact-metadata"],[1,"link-style-button",3,"click"],[1,"version-select-container"],[3,"ngModelChange","selectionChange","ngModel"],[3,"value"],["mat-flat-button","",1,"download-button",3,"click"],["alt","artifact.id",1,"generated-image",3,"click","src"],[3,"base64data"]],template:function(A,i){A&1&&(m(0,"div",0),Ut(1,dEA,19,4,"div",1,_i),w()),A&2&&(p(),Jt(i.getDistinctArtifactIds()))},dependencies:[Il,Nn,fo,ba,Hr,Fn,fn,vE],styles:[".artifact-container[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap}.artifact-box[_ngcontent-%COMP%]{padding:10px;max-width:100%;margin-left:26px;display:flex;flex-direction:column}.artifact-metadata[_ngcontent-%COMP%]{display:flex;align-items:center;margin-bottom:15px;flex-wrap:wrap;gap:5px}.download-button[_ngcontent-%COMP%]{background-color:var(--artifact-tab-download-button-background-color)!important;margin-left:35px;width:130px;height:28px;font-size:14px}.generated-image[_ngcontent-%COMP%]{max-width:60%;border-radius:8px;cursor:pointer}hr.white-separator[_ngcontent-%COMP%]{border:none;border-top:1px solid var(--artifact-tab-white-separator-border-top-color);margin-bottom:1.2em;margin-right:15px}.version-select-container[_ngcontent-%COMP%]{background-color:var(--artifact-tab-version-select-container-background-color);width:80px;margin-left:15px}.link-style-button[_ngcontent-%COMP%]{background:none;border:none;padding:0;font:inherit;color:var(--artifact-tab-link-style-button-color)!important;text-decoration:underline;cursor:pointer;outline:none}.link-style-button[_ngcontent-%COMP%]:hover{color:var(--artifact-tab-link-style-button-hover-color);text-decoration:underline}.link-style-button[_ngcontent-%COMP%]:focus{outline:1px dotted var(--artifact-tab-link-style-button-focus-outline-color)}.link-style-button[_ngcontent-%COMP%]:active{color:var(--artifact-tab-link-style-button-active-color)}.link-style-button[_ngcontent-%COMP%]:disabled{color:var(--artifact-tab-link-style-button-disabled-color);text-decoration:none;cursor:not-allowed}"]})};var hEA=["input"],uEA=["label"],fEA=["*"],Hk={color:"accent",clickAction:"check-indeterminate",disabledInteractive:!1},mEA=new yA("mat-checkbox-default-options",{providedIn:"root",factory:()=>Hk}),Qs=(function(t){return t[t.Init=0]="Init",t[t.Checked=1]="Checked",t[t.Unchecked=2]="Unchecked",t[t.Indeterminate=3]="Indeterminate",t})(Qs||{}),zk=class{source;checked},bE=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(mt);_ngZone=h(Oe);_animationsDisabled=qi();_options=h(mEA,{optional:!0});focus(){this._inputElement.nativeElement.focus()}_createChangeEvent(A){let i=new zk;return i.source=this,i.checked=A,i}_getAnimationTargetElement(){return this._inputElement?.nativeElement}_animationClasses={uncheckedToChecked:"mdc-checkbox--anim-unchecked-checked",uncheckedToIndeterminate:"mdc-checkbox--anim-unchecked-indeterminate",checkedToUnchecked:"mdc-checkbox--anim-checked-unchecked",checkedToIndeterminate:"mdc-checkbox--anim-checked-indeterminate",indeterminateToChecked:"mdc-checkbox--anim-indeterminate-checked",indeterminateToUnchecked:"mdc-checkbox--anim-indeterminate-unchecked"};ariaLabel="";ariaLabelledby=null;ariaDescribedby;ariaExpanded;ariaControls;ariaOwns;_uniqueId;id;get inputId(){return`${this.id||this._uniqueId}-input`}required=!1;labelPosition="after";name=null;change=new WA;indeterminateChange=new WA;value;disableRipple=!1;_inputElement;_labelElement;tabIndex;color;disabledInteractive;_onTouched=()=>{};_currentAnimationClass="";_currentCheckState=Qs.Init;_controlValueAccessorChangeFn=()=>{};_validatorChangeFn=()=>{};constructor(){h(Xn).load(Ir);let A=h(new Zs("tabindex"),{optional:!0});this._options=this._options||Hk,this.color=this._options.color||Hk.color,this.tabIndex=A==null?0:parseInt(A)||0,this.id=this._uniqueId=h(an).getId("mat-mdc-checkbox-"),this.disabledInteractive=this._options?.disabledInteractive??!1}ngOnChanges(A){A.required&&this._validatorChangeFn()}ngAfterViewInit(){this._syncIndeterminate(this.indeterminate)}get checked(){return this._checked}set checked(A){A!=this.checked&&(this._checked=A,this._changeDetectorRef.markForCheck())}_checked=!1;get disabled(){return this._disabled}set disabled(A){A!==this.disabled&&(this._disabled=A,this._changeDetectorRef.markForCheck())}_disabled=!1;get indeterminate(){return this._indeterminate()}set indeterminate(A){let i=A!=this._indeterminate();this._indeterminate.set(A),i&&(A?this._transitionCheckState(Qs.Indeterminate):this._transitionCheckState(this.checked?Qs.Checked:Qs.Unchecked),this.indeterminateChange.emit(A)),this._syncIndeterminate(A)}_indeterminate=jA(!1);_isRippleDisabled(){return this.disableRipple||this.disabled}_onLabelTextChange(){this._changeDetectorRef.detectChanges()}writeValue(A){this.checked=!!A}registerOnChange(A){this._controlValueAccessorChangeFn=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A}validate(A){return this.required&&A.value!==!0?{required:!0}:null}registerOnValidatorChange(A){this._validatorChangeFn=A}_transitionCheckState(A){let i=this._currentCheckState,n=this._getAnimationTargetElement();if(!(i===A||!n)&&(this._currentAnimationClass&&n.classList.remove(this._currentAnimationClass),this._currentAnimationClass=this._getAnimationClassForCheckStateTransition(i,A),this._currentCheckState=A,this._currentAnimationClass.length>0)){n.classList.add(this._currentAnimationClass);let o=this._currentAnimationClass;this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{n.classList.remove(o)},1e3)})}}_emitChangeEvent(){this._controlValueAccessorChangeFn(this.checked),this.change.emit(this._createChangeEvent(this.checked)),this._inputElement&&(this._inputElement.nativeElement.checked=this.checked)}toggle(){this.checked=!this.checked,this._controlValueAccessorChangeFn(this.checked)}_handleInputClick(){let A=this._options?.clickAction;!this.disabled&&A!=="noop"?(this.indeterminate&&A!=="check"&&Promise.resolve().then(()=>{this._indeterminate.set(!1),this.indeterminateChange.emit(!1)}),this._checked=!this._checked,this._transitionCheckState(this._checked?Qs.Checked:Qs.Unchecked),this._emitChangeEvent()):(this.disabled&&this.disabledInteractive||!this.disabled&&A==="noop")&&(this._inputElement.nativeElement.checked=this.checked,this._inputElement.nativeElement.indeterminate=this.indeterminate)}_onInteractionEvent(A){A.stopPropagation()}_onBlur(){Promise.resolve().then(()=>{this._onTouched(),this._changeDetectorRef.markForCheck()})}_getAnimationClassForCheckStateTransition(A,i){if(this._animationsDisabled)return"";switch(A){case Qs.Init:if(i===Qs.Checked)return this._animationClasses.uncheckedToChecked;if(i==Qs.Indeterminate)return this._checked?this._animationClasses.checkedToIndeterminate:this._animationClasses.uncheckedToIndeterminate;break;case Qs.Unchecked:return i===Qs.Checked?this._animationClasses.uncheckedToChecked:this._animationClasses.uncheckedToIndeterminate;case Qs.Checked:return i===Qs.Unchecked?this._animationClasses.checkedToUnchecked:this._animationClasses.checkedToIndeterminate;case Qs.Indeterminate:return i===Qs.Checked?this._animationClasses.indeterminateToChecked:this._animationClasses.indeterminateToUnchecked}return""}_syncIndeterminate(A){let i=this._inputElement;i&&(i.nativeElement.indeterminate=A)}_onInputClick(){this._handleInputClick()}_onTouchTargetClick(){this._handleInputClick(),this.disabled||this._inputElement.nativeElement.focus()}_preventBubblingFromLabel(A){A.target&&this._labelElement.nativeElement.contains(A.target)&&A.stopPropagation()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-checkbox"]],viewQuery:function(i,n){if(i&1&&ai(hEA,5)(uEA,5),i&2){let o;ce(o=Ce())&&(n._inputElement=o.first),ce(o=Ce())&&(n._labelElement=o.first)}},hostAttrs:[1,"mat-mdc-checkbox"],hostVars:16,hostBindings:function(i,n){i&2&&(vo("id",n.id),ie("tabindex",null)("aria-label",null)("aria-labelledby",null),zo(n.color?"mat-"+n.color:"mat-accent"),ae("_mat-animation-noopable",n._animationsDisabled)("mdc-checkbox--disabled",n.disabled)("mat-mdc-checkbox-disabled",n.disabled)("mat-mdc-checkbox-checked",n.checked)("mat-mdc-checkbox-disabled-interactive",n.disabledInteractive))},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],ariaExpanded:[2,"aria-expanded","ariaExpanded",he],ariaControls:[0,"aria-controls","ariaControls"],ariaOwns:[0,"aria-owns","ariaOwns"],id:"id",required:[2,"required","required",he],labelPosition:"labelPosition",name:"name",value:"value",disableRipple:[2,"disableRipple","disableRipple",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?void 0:en(A)],color:"color",disabledInteractive:[2,"disabledInteractive","disabledInteractive",he],checked:[2,"checked","checked",he],disabled:[2,"disabled","disabled",he],indeterminate:[2,"indeterminate","indeterminate",he]},outputs:{change:"change",indeterminateChange:"indeterminateChange"},exportAs:["matCheckbox"],features:[It([{provide:Lg,useExisting:pr(()=>t),multi:!0},{provide:a0,useExisting:t,multi:!0}]),ti],ngContentSelectors:fEA,decls:15,vars:23,consts:[["checkbox",""],["input",""],["label",""],["mat-internal-form-field","",3,"click","labelPosition"],[1,"mdc-checkbox"],[1,"mat-mdc-checkbox-touch-target",3,"click"],["type","checkbox",1,"mdc-checkbox__native-control",3,"blur","click","change","checked","indeterminate","disabled","id","required","tabIndex"],[1,"mdc-checkbox__ripple"],[1,"mdc-checkbox__background"],["focusable","false","viewBox","0 0 24 24","aria-hidden","true",1,"mdc-checkbox__checkmark"],["fill","none","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-checkbox__checkmark-path"],[1,"mdc-checkbox__mixedmark"],["mat-ripple","",1,"mat-mdc-checkbox-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-label",3,"for"]],template:function(i,n){if(i&1){let o=JA();Ht(),m(0,"div",3),eA("click",function(r){return Z(o),X(n._preventBubblingFromLabel(r))}),m(1,"div",4,0)(3,"div",5),eA("click",function(){return Z(o),X(n._onTouchTargetClick())}),w(),m(4,"input",6,1),eA("blur",function(){return Z(o),X(n._onBlur())})("click",function(){return Z(o),X(n._onInputClick())})("change",function(r){return Z(o),X(n._onInteractionEvent(r))}),w(),GA(6,"div",7),m(7,"div",8),Qt(),m(8,"svg",9),GA(9,"path",10),w(),as(),GA(10,"div",11),w(),GA(11,"div",12),w(),m(12,"label",13,2),He(14),w()()}if(i&2){let o=An(2);AA("labelPosition",n.labelPosition),p(4),ae("mdc-checkbox--selected",n.checked),AA("checked",n.checked)("indeterminate",n.indeterminate)("disabled",n.disabled&&!n.disabledInteractive)("id",n.inputId)("required",n.required)("tabIndex",n.disabled&&!n.disabledInteractive?-1:n.tabIndex),ie("aria-label",n.ariaLabel||null)("aria-labelledby",n.ariaLabelledby)("aria-describedby",n.ariaDescribedby)("aria-checked",n.indeterminate?"mixed":null)("aria-controls",n.ariaControls)("aria-disabled",n.disabled&&n.disabledInteractive?!0:null)("aria-expanded",n.ariaExpanded)("aria-owns",n.ariaOwns)("name",n.name)("value",n.value),p(7),AA("matRippleTrigger",o)("matRippleDisabled",n.disableRipple||n.disabled)("matRippleCentered",!0),p(),AA("for",n.inputId)}},dependencies:[ig,B8],styles:[`.mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);margin:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox:hover>.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:hover>.mat-mdc-checkbox-ripple>.mat-ripple-element{background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control:focus+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));background-color:var(--mat-checkbox-unselected-focus-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control:focus~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-unselected-focus-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:active>.mdc-checkbox__native-control+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));background-color:var(--mat-checkbox-unselected-pressed-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:active>.mdc-checkbox__native-control~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-unselected-pressed-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));background-color:var(--mat-checkbox-selected-hover-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-hover-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox .mdc-checkbox__native-control:focus:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));background-color:var(--mat-checkbox-selected-focus-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox .mdc-checkbox__native-control:focus:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-focus-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:active>.mdc-checkbox__native-control:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));background-color:var(--mat-checkbox-selected-pressed-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:active>.mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-pressed-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control~.mat-mdc-checkbox-ripple .mat-ripple-element,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control+.mdc-checkbox__ripple{background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1;width:var(--mat-checkbox-state-layer-size, 40px);height:var(--mat-checkbox-state-layer-size, 40px);top:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);right:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox--disabled{cursor:default;pointer-events:none}.mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:rgba(0,0,0,0);pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1);-webkit-print-color-adjust:exact;color-adjust:exact;border-color:var(--mat-checkbox-unselected-icon-color, var(--mat-sys-on-surface-variant));top:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2)}.mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary))}.mdc-checkbox--disabled .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}@media(forced-colors: active){.mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox:hover>.mdc-checkbox__native-control:not(:checked)~.mdc-checkbox__background,.mdc-checkbox:hover>.mdc-checkbox__native-control:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-hover-icon-color, var(--mat-sys-on-surface));background-color:rgba(0,0,0,0)}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox:hover>.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary))}.mdc-checkbox__native-control:focus:focus:not(:checked)~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-focus-icon-color, var(--mat-sys-on-surface))}.mdc-checkbox__native-control:focus:focus:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary))}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.6, 1);color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mdc-checkbox__checkmark{color:CanvasText}}.mdc-checkbox--disabled .mdc-checkbox__checkmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__checkmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:GrayText}}.mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);border-color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mdc-checkbox__mixedmark{margin:0 1px}}.mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:GrayText}}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear;transition:none}.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear;transition:none}.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark{transition:opacity 180ms cubic-bezier(0, 0, 0.2, 1),transform 180ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mat-mdc-checkbox{display:inline-block;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark{transition:none !important;animation:none !important}.mat-mdc-checkbox label{cursor:pointer}.mat-mdc-checkbox .mat-internal-form-field{color:var(--mat-checkbox-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-checkbox-label-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-checkbox-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-checkbox-label-text-size, var(--mat-sys-body-medium-size));letter-spacing:var(--mat-checkbox-label-text-tracking, var(--mat-sys-body-medium-tracking));font-weight:var(--mat-checkbox-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-checkbox.mat-mdc-checkbox-disabled.mat-mdc-checkbox-disabled-interactive{pointer-events:auto}.mat-mdc-checkbox.mat-mdc-checkbox-disabled.mat-mdc-checkbox-disabled-interactive input{cursor:default}.mat-mdc-checkbox.mat-mdc-checkbox-disabled label{cursor:default;color:var(--mat-checkbox-disabled-label-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-mdc-checkbox.mat-mdc-checkbox-disabled label{color:GrayText}}.mat-mdc-checkbox label:empty{display:none}.mat-mdc-checkbox .mdc-checkbox__ripple{opacity:0}.mat-mdc-checkbox .mat-mdc-checkbox-ripple,.mdc-checkbox__ripple{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-checkbox .mat-mdc-checkbox-ripple:not(:empty),.mdc-checkbox__ripple:not(:empty){transform:translateZ(0)}.mat-mdc-checkbox-ripple .mat-ripple-element{opacity:.1}.mat-mdc-checkbox-touch-target{position:absolute;top:50%;left:50%;height:var(--mat-checkbox-touch-target-size, 48px);width:var(--mat-checkbox-touch-target-size, 48px);transform:translate(-50%, -50%);display:var(--mat-checkbox-touch-target-display, block)}.mat-mdc-checkbox .mat-mdc-checkbox-ripple::before{border-radius:50%}.mdc-checkbox__native-control:focus-visible~.mat-focus-indicator::before{content:""} +`],encapsulation:2,changeDetection:0})}return t})();var bO=new yA("CdkAccordion");var MO=(()=>{class t{accordion=h(bO,{optional:!0,skipSelf:!0});_changeDetectorRef=h(mt);_expansionDispatcher=h(p4);_openCloseAllSubscription=Jn.EMPTY;closed=new WA;opened=new WA;destroyed=new WA;expandedChange=new WA;id=h(an).getId("cdk-accordion-child-");get expanded(){return this._expanded}set expanded(A){if(this._expanded!==A){if(this._expanded=A,this.expandedChange.emit(A),A){this.opened.emit();let i=this.accordion?this.accordion.id:this.id;this._expansionDispatcher.notify(this.id,i)}else this.closed.emit();this._changeDetectorRef.markForCheck()}}_expanded=!1;get disabled(){return this._disabled()}set disabled(A){this._disabled.set(A)}_disabled=jA(!1);_removeUniqueSelectionListener=()=>{};constructor(){}ngOnInit(){this._removeUniqueSelectionListener=this._expansionDispatcher.listen((A,i)=>{this.accordion&&!this.accordion.multi&&this.accordion.id===i&&this.id!==A&&(this.expanded=!1)}),this.accordion&&(this._openCloseAllSubscription=this._subscribeToOpenCloseAllActions())}ngOnDestroy(){this.opened.complete(),this.closed.complete(),this.destroyed.emit(),this.destroyed.complete(),this._removeUniqueSelectionListener(),this._openCloseAllSubscription.unsubscribe()}toggle(){this.disabled||(this.expanded=!this.expanded)}close(){this.disabled||(this.expanded=!1)}open(){this.disabled||(this.expanded=!0)}_subscribeToOpenCloseAllActions(){return this.accordion._openCloseAllActions.subscribe(A=>{this.disabled||(this.expanded=A)})}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["cdk-accordion-item"],["","cdkAccordionItem",""]],inputs:{expanded:[2,"expanded","expanded",he],disabled:[2,"disabled","disabled",he]},outputs:{closed:"closed",opened:"opened",destroyed:"destroyed",expandedChange:"expandedChange"},exportAs:["cdkAccordionItem"],features:[It([{provide:bO,useValue:void 0}])]})}return t})(),kO=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();var pEA=["body"],wEA=["bodyWrapper"],DEA=[[["mat-expansion-panel-header"]],"*",[["mat-action-row"]]],yEA=["mat-expansion-panel-header","*","mat-action-row"];function vEA(t,e){}var bEA=[[["mat-panel-title"]],[["mat-panel-description"]],"*"],MEA=["mat-panel-title","mat-panel-description","*"];function kEA(t,e){t&1&&(ci(0,"span",1),Qt(),ci(1,"svg",2),Li(2,"path",3),fi()())}var SO=new yA("MAT_ACCORDION"),xO=new yA("MAT_EXPANSION_PANEL"),SEA=(()=>{class t{_template=h(Tn);_expansionPanel=h(xO,{optional:!0});constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["ng-template","matExpansionPanelContent",""]]})}return t})(),RO=new yA("MAT_EXPANSION_PANEL_DEFAULT_OPTIONS"),Ok=(()=>{class t extends MO{_viewContainerRef=h(Ho);_animationsDisabled=qi();_document=h(Xt);_ngZone=h(Oe);_elementRef=h(ge);_renderer=h(Fi);_cleanupTransitionEnd;get hideToggle(){return this._hideToggle||this.accordion&&this.accordion.hideToggle}set hideToggle(A){this._hideToggle=A}_hideToggle=!1;get togglePosition(){return this._togglePosition||this.accordion&&this.accordion.togglePosition}set togglePosition(A){this._togglePosition=A}_togglePosition;afterExpand=new WA;afterCollapse=new WA;_inputChanges=new $A;accordion=h(SO,{optional:!0,skipSelf:!0});_lazyContent;_body;_bodyWrapper;_portal;_headerId=h(an).getId("mat-expansion-panel-header-");constructor(){super();let A=h(RO,{optional:!0});this._expansionDispatcher=h(p4),A&&(this.hideToggle=A.hideToggle)}_hasSpacing(){return this.accordion?this.expanded&&this.accordion.displayMode==="default":!1}_getExpandedState(){return this.expanded?"expanded":"collapsed"}toggle(){this.expanded=!this.expanded}close(){this.expanded=!1}open(){this.expanded=!0}ngAfterContentInit(){this._lazyContent&&this._lazyContent._expansionPanel===this&&this.opened.pipe(cn(null),Ze(()=>this.expanded&&!this._portal),oo(1)).subscribe(()=>{this._portal=new Is(this._lazyContent._template,this._viewContainerRef)}),this._setupAnimationEvents()}ngOnChanges(A){this._inputChanges.next(A)}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTransitionEnd?.(),this._inputChanges.complete()}_containsFocus(){if(this._body){let A=this._document.activeElement,i=this._body.nativeElement;return A===i||i.contains(A)}return!1}_transitionEndListener=({target:A,propertyName:i})=>{A===this._bodyWrapper?.nativeElement&&i==="grid-template-rows"&&this._ngZone.run(()=>{this.expanded?this.afterExpand.emit():this.afterCollapse.emit()})};_setupAnimationEvents(){this._ngZone.runOutsideAngular(()=>{this._animationsDisabled?(this.opened.subscribe(()=>this._ngZone.run(()=>this.afterExpand.emit())),this.closed.subscribe(()=>this._ngZone.run(()=>this.afterCollapse.emit()))):setTimeout(()=>{let A=this._elementRef.nativeElement;this._cleanupTransitionEnd=this._renderer.listen(A,"transitionend",this._transitionEndListener),A.classList.add("mat-expansion-panel-animations-enabled")},200)})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-expansion-panel"]],contentQueries:function(i,n,o){if(i&1&&ua(o,SEA,5),i&2){let a;ce(a=Ce())&&(n._lazyContent=a.first)}},viewQuery:function(i,n){if(i&1&&ai(pEA,5)(wEA,5),i&2){let o;ce(o=Ce())&&(n._body=o.first),ce(o=Ce())&&(n._bodyWrapper=o.first)}},hostAttrs:[1,"mat-expansion-panel"],hostVars:4,hostBindings:function(i,n){i&2&&ae("mat-expanded",n.expanded)("mat-expansion-panel-spacing",n._hasSpacing())},inputs:{hideToggle:[2,"hideToggle","hideToggle",he],togglePosition:"togglePosition"},outputs:{afterExpand:"afterExpand",afterCollapse:"afterCollapse"},exportAs:["matExpansionPanel"],features:[It([{provide:SO,useValue:void 0},{provide:xO,useExisting:t}]),dt,ti],ngContentSelectors:yEA,decls:9,vars:4,consts:[["bodyWrapper",""],["body",""],[1,"mat-expansion-panel-content-wrapper"],["role","region",1,"mat-expansion-panel-content",3,"id"],[1,"mat-expansion-panel-body"],[3,"cdkPortalOutlet"]],template:function(i,n){i&1&&(Ht(DEA),He(0),m(1,"div",2,0)(3,"div",3,1)(5,"div",4),He(6,1),vt(7,vEA,0,0,"ng-template",5),w(),He(8,2),w()()),i&2&&(p(),ie("inert",n.expanded?null:""),p(2),AA("id",n.id),ie("aria-labelledby",n._headerId),p(4),AA("cdkPortalOutlet",n._portal))},dependencies:[Jg],styles:[`.mat-expansion-panel{box-sizing:content-box;display:block;margin:0;overflow:hidden;position:relative;background:var(--mat-expansion-container-background-color, var(--mat-sys-surface));color:var(--mat-expansion-container-text-color, var(--mat-sys-on-surface));border-radius:var(--mat-expansion-container-shape, 12px)}.mat-expansion-panel.mat-expansion-panel-animations-enabled{transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:var(--mat-expansion-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:var(--mat-expansion-container-shape, 12px);border-top-left-radius:var(--mat-expansion-container-shape, 12px)}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:var(--mat-expansion-container-shape, 12px);border-bottom-left-radius:var(--mat-expansion-container-shape, 12px)}@media(forced-colors: active){.mat-expansion-panel{outline:solid 1px}}.mat-expansion-panel-content-wrapper{display:grid;grid-template-rows:0fr;grid-template-columns:100%}.mat-expansion-panel-animations-enabled .mat-expansion-panel-content-wrapper{transition:grid-template-rows 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper{grid-template-rows:1fr}@supports not (grid-template-rows: 0fr){.mat-expansion-panel-content-wrapper{height:0}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper{height:auto}}@media print{.mat-expansion-panel-content-wrapper{height:0}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper{height:auto}}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible;min-height:0;visibility:hidden;font-family:var(--mat-expansion-container-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-expansion-container-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-expansion-container-text-weight, var(--mat-sys-body-large-weight));line-height:var(--mat-expansion-container-text-line-height, var(--mat-sys-body-large-line-height));letter-spacing:var(--mat-expansion-container-text-tracking, var(--mat-sys-body-large-tracking))}.mat-expansion-panel-animations-enabled .mat-expansion-panel-content{transition:visibility 190ms linear}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper>.mat-expansion-panel-content{visibility:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px;border-top-color:var(--mat-expansion-actions-divider-color, var(--mat-sys-outline))}.mat-action-row .mat-button-base,.mat-action-row .mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row .mat-button-base,[dir=rtl] .mat-action-row .mat-mdc-button-base{margin-left:0;margin-right:8px} +`],encapsulation:2,changeDetection:0})}return t})();var NO=(()=>{class t{panel=h(Ok,{host:!0});_element=h(ge);_focusMonitor=h(nr);_changeDetectorRef=h(mt);_parentChangeSubscription=Jn.EMPTY;constructor(){h(Xn).load(Ir);let A=this.panel,i=h(RO,{optional:!0}),n=h(new Zs("tabindex"),{optional:!0}),o=A.accordion?A.accordion._stateChanges.pipe(Ze(a=>!!(a.hideToggle||a.togglePosition))):ja;this.tabIndex=parseInt(n||"")||0,this._parentChangeSubscription=hi(A.opened,A.closed,o,A._inputChanges.pipe(Ze(a=>!!(a.hideToggle||a.disabled||a.togglePosition)))).subscribe(()=>this._changeDetectorRef.markForCheck()),A.closed.pipe(Ze(()=>A._containsFocus())).subscribe(()=>this._focusMonitor.focusVia(this._element,"program")),i&&(this.expandedHeight=i.expandedHeight,this.collapsedHeight=i.collapsedHeight)}expandedHeight;collapsedHeight;tabIndex=0;get disabled(){return this.panel.disabled}_toggle(){this.disabled||this.panel.toggle()}_isExpanded(){return this.panel.expanded}_getExpandedState(){return this.panel._getExpandedState()}_getPanelId(){return this.panel.id}_getTogglePosition(){return this.panel.togglePosition}_showToggle(){return!this.panel.hideToggle&&!this.panel.disabled}_getHeaderHeight(){let A=this._isExpanded();return A&&this.expandedHeight?this.expandedHeight:!A&&this.collapsedHeight?this.collapsedHeight:null}_keydown(A){switch(A.keyCode){case 32:case 13:ma(A)||(A.preventDefault(),this._toggle());break;default:this.panel.accordion&&this.panel.accordion._handleHeaderKeydown(A);return}}focus(A,i){A?this._focusMonitor.focusVia(this._element,A,i):this._element.nativeElement.focus(i)}ngAfterViewInit(){this._focusMonitor.monitor(this._element).subscribe(A=>{A&&this.panel.accordion&&this.panel.accordion._handleHeaderFocus(this)})}ngOnDestroy(){this._parentChangeSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._element)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-expansion-panel-header"]],hostAttrs:["role","button",1,"mat-expansion-panel-header","mat-focus-indicator"],hostVars:13,hostBindings:function(i,n){i&1&&eA("click",function(){return n._toggle()})("keydown",function(a){return n._keydown(a)}),i&2&&(ie("id",n.panel._headerId)("tabindex",n.disabled?-1:n.tabIndex)("aria-controls",n._getPanelId())("aria-expanded",n._isExpanded())("aria-disabled",n.panel.disabled),wn("height",n._getHeaderHeight()),ae("mat-expanded",n._isExpanded())("mat-expansion-toggle-indicator-after",n._getTogglePosition()==="after")("mat-expansion-toggle-indicator-before",n._getTogglePosition()==="before"))},inputs:{expandedHeight:"expandedHeight",collapsedHeight:"collapsedHeight",tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)]},ngContentSelectors:MEA,decls:5,vars:3,consts:[[1,"mat-content"],[1,"mat-expansion-indicator"],["xmlns","http://www.w3.org/2000/svg","viewBox","0 -960 960 960","aria-hidden","true","focusable","false"],["d","M480-345 240-585l56-56 184 184 184-184 56 56-240 240Z"]],template:function(i,n){i&1&&(Ht(bEA),ci(0,"span",0),He(1),He(2,1),He(3,2),fi(),V(4,kEA,3,0,"span",1)),i&2&&(ae("mat-content-hide-toggle",!n._showToggle()),p(4),W(n._showToggle()?4:-1))},styles:[`.mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;height:var(--mat-expansion-header-collapsed-state-height, 48px);font-family:var(--mat-expansion-header-text-font, var(--mat-sys-title-medium-font));font-size:var(--mat-expansion-header-text-size, var(--mat-sys-title-medium-size));font-weight:var(--mat-expansion-header-text-weight, var(--mat-sys-title-medium-weight));line-height:var(--mat-expansion-header-text-line-height, var(--mat-sys-title-medium-line-height));letter-spacing:var(--mat-expansion-header-text-tracking, var(--mat-sys-title-medium-tracking))}.mat-expansion-panel-animations-enabled .mat-expansion-panel-header{transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header::before{border-radius:inherit}.mat-expansion-panel-header.mat-expanded{height:var(--mat-expansion-header-expanded-state-height, 64px)}.mat-expansion-panel-header[aria-disabled=true]{color:var(--mat-expansion-header-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-header-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}@media(hover: none){.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-container-background-color, var(--mat-sys-surface))}}.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused{background:var(--mat-expansion-header-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-content.mat-content-hide-toggle{margin-right:8px}[dir=rtl] .mat-content.mat-content-hide-toggle{margin-right:0;margin-left:8px}.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-left:24px;margin-right:0}[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-right:24px;margin-left:0}.mat-expansion-panel-header-title{color:var(--mat-expansion-header-text-color, var(--mat-sys-on-surface))}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;flex-basis:0;margin-right:16px;align-items:center}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit}.mat-expansion-panel-header-description{flex-grow:2;color:var(--mat-expansion-header-description-color, var(--mat-sys-on-surface-variant))}.mat-expansion-panel-animations-enabled .mat-expansion-indicator{transition:transform 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header.mat-expanded .mat-expansion-indicator{transform:rotate(180deg)}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:"";padding:3px;transform:rotate(45deg);vertical-align:middle;color:var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));display:var(--mat-expansion-legacy-header-indicator-display, none)}.mat-expansion-indicator svg{width:24px;height:24px;margin:0 -8px;vertical-align:middle;fill:var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));display:var(--mat-expansion-header-indicator-display, inline-block)}@media(forced-colors: active){.mat-expansion-panel-content{border-top:1px solid;border-top-left-radius:0;border-top-right-radius:0}} +`],encapsulation:2,changeDetection:0})}return t})();var FO=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-panel-title"]],hostAttrs:[1,"mat-expansion-panel-header-title"]})}return t})();var _O=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[kO,d0,Gi]})}return t})();var xEA={google_search:"search",EnterpriseWebSearchTool:"web",VertexAiSearchTool:"search",FilesRetrieval:"find_in_page",load_memory:"memory",preload_memory:"memory",url_context:"link",VertexAiRagRetrieval:"find_in_page",exit_loop:"sync",get_user_choice:"how_to_reg",load_artifacts:"image",LongRunningFunctionTool:"data_object"};function ME(t,e){return e==="Agent Tool"?"smart_toy":e==="Built-in tool"?xEA[t]||"build":e==="Function tool"?"data_object":"build"}var uc=class t{static toolMenuTooltips=new Map([["Function tool","Build custom tools for your specific ADK agent needs."],["Built-in tool","Ready-to-use functionality such as Google Search or code executors that provide agents with common capabilities. "],["Agent tool","A sub-agent that can be invoked as a tool by another agent."]]);static toolDetailedInfo=new Map([["Function tool",{shortDescription:"Build custom tools for your specific ADK agent needs.",detailedDescription:"The ADK framework automatically inspects your Python function's signature\u2014including its name, docstring, parameters, type hints, and default values\u2014to generate a schema. This schema is what the LLM uses to understand the tool's purpose, when to use it, and what arguments it requires.",docLink:"https://google.github.io/adk-docs/tools/function-tools/"}],["Agent tool",{shortDescription:"Wraps a sub-agent as a callable tool, enabling modular and hierarchical agent architectures.",detailedDescription:"Agent tools allow you to use one agent as a tool within another agent, creating powerful multi-agent workflows.",docLink:"https://google.github.io/adk-docs/agents/multi-agents/#c-explicit-invocation-agenttool"}]]);static callbackMenuTooltips=new Map([["before_agent","Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed."],["after_agent","Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes."],["before_model","Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow."],["after_model","Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent."],["before_tool","Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it."],["after_tool","Called just after the tool's run_async method completes successfully."]]);static callbackDialogTooltips=new Map([["before_agent","Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed."],["after_agent","Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes."],["before_model","Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow."],["after_model","Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent."],["before_tool","Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it."],["after_tool","Called just after the tool's run_async method completes successfully."]]);static callbackDetailedInfo=new Map([["before_agent",{shortDescription:"Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed. It runs after the agent's InvocationContext is created but before its core logic begins.",detailedDescription:" Ideal for setting up resources or state needed only for this specific agent's run, performing validation checks on the session state (callback_context.state) before execution starts, logging the entry point of the agent's activity, or potentially modifying the invocation context before the core logic uses it.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-agent-callback"}],["after_agent",{shortDescription:"Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes.",detailedDescription:"Useful for cleanup tasks, post-execution validation, logging the completion of an agent's activity, modifying final state, or augmenting/replacing the agent's final output.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-agent-callback"}],["before_model",{shortDescription:"Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow.",detailedDescription:"Allows inspection and modification of the request going to the LLM. Use cases include adding dynamic instructions, injecting few-shot examples based on state, modifying model config, implementing guardrails (like profanity filters), or implementing request-level caching.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-model-callback"}],["after_model",{shortDescription:"Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent.",detailedDescription:"Allows inspection or modification of the raw LLM response.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-model-callback"}],["before_tool",{shortDescription:"Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it.",detailedDescription:"Allows inspection and modification of tool arguments, performing authorization checks before execution, logging tool usage attempts, or implementing tool-level caching.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-tool-callback"}],["after_tool",{shortDescription:"Called just after the tool's run_async method completes successfully.",detailedDescription:"Allows inspection and modification of the tool's result before it's sent back to the LLM (potentially after summarization). Useful for logging tool results, post-processing or formatting results, or saving specific parts of the result to the session state.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-tool-callback"}]]);static getToolMenuTooltips(e){return t.toolMenuTooltips.get(e)}static getToolDetailedInfo(e){return t.toolDetailedInfo.get(e)}static getCallbackMenuTooltips(e){return t.callbackMenuTooltips.get(e)}static getCallbackDialogTooltips(e){return t.callbackDialogTooltips.get(e)}static getCallbackDetailedInfo(e){return t.callbackDetailedInfo.get(e)}};var REA=["callbackNameInput"];function NEA(t,e){if(t&1){let A=JA();qs(0),m(1,"div",8)(2,"div",9),eA("click",function(){Z(A);let n=v();return X(n.toggleCallbackInfo())}),m(3,"mat-icon",10),K(4,"info"),w(),m(5,"div",11)(6,"span"),K(7,"Callback Information"),w()(),m(8,"button",12)(9,"mat-icon"),K(10),w()()(),m(11,"div",13)(12,"div",14)(13,"div",15),K(14),w(),m(15,"div",16),K(16),w()(),m(17,"div",17)(18,"a",18)(19,"mat-icon"),K(20,"open_in_new"),w(),m(21,"span"),K(22,"View Official Documentation"),w()()()()(),Vs()}if(t&2){let A,i,n,o=v();p(10),qA(o.isCallbackInfoExpanded?"expand_less":"expand_more"),p(),ae("expanded",o.isCallbackInfoExpanded),p(3),qA((A=o.getCallbackInfo())==null?null:A.shortDescription),p(2),qA((i=o.getCallbackInfo())==null?null:i.detailedDescription),p(2),AA("href",(n=o.getCallbackInfo())==null?null:n.docLink,Ga)}}function FEA(t,e){if(t&1&&(m(0,"mat-option",21),K(1),w()),t&2){let A=e.$implicit;AA("value",A),p(),qA(A)}}function _EA(t,e){if(t&1){let A=JA();qs(0),m(1,"mat-form-field",3)(2,"mat-label"),K(3,"Callback Type"),w(),m(4,"mat-select",19),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.callbackType,n)||(o.callbackType=n),X(n)}),vt(5,FEA,2,2,"mat-option",20),w()(),Vs()}if(t&2){let A=v();p(4),Qo("ngModel",A.callbackType),p(),AA("ngForOf",A.availableCallbackTypes)}}function LEA(t,e){t&1&&(m(0,"mat-error"),K(1,"Same callback name has been used"),w())}function GEA(t,e){t&1&&(m(0,"mat-error"),K(1,"Cannot have callback consist of two words"),w())}function KEA(t,e){t&1&&(m(0,"mat-error"),K(1,"Callback function names cannot have spaces"),w())}var Pk=class{isErrorState(e){return!!(e&&e.invalid)}},z4=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.callbackType=A?.callbackType??"",this.existingCallbackNames=A?.existingCallbackNames??[],this.isEditMode=!!A?.isEditMode,this.availableCallbackTypes=A?.availableCallbackTypes??[],this.isEditMode&&A?.callback&&(this.callbackName=A.callback.name,this.callbackType=A.callback.type,this.originalCallbackName=A.callback.name,this.existingCallbackNames=this.existingCallbackNames.filter(i=>i!==this.originalCallbackName))}callbackNameInput;callbackName="";callbackType="";existingCallbackNames=[];matcher=new Pk;isEditMode=!1;availableCallbackTypes=[];originalCallbackName="";isCallbackInfoExpanded=!1;addCallback(){if(!this.callbackName.trim()||this.hasSpaces()||this.isDuplicateName())return;let e={name:this.callbackName.trim(),type:this.callbackType,isEditMode:this.isEditMode,originalName:this.originalCallbackName||this.callbackName.trim()};this.dialogRef.close(e)}cancel(){this.dialogRef.close()}isDuplicateName(){if(!Array.isArray(this.existingCallbackNames))return!1;let e=(this.callbackName||"").trim();return this.existingCallbackNames.includes(e)}hasSpaces(){return/\s/.test(this.callbackName||"")}createDisabled(){return!this.callbackName.trim()||this.isDuplicateName()||this.hasSpaces()}validate(){this.hasSpaces()?this.callbackNameInput.control.setErrors({hasSpaces:!0}):this.isDuplicateName()?this.callbackNameInput.control.setErrors({duplicateName:!0}):this.callbackNameInput.control.setErrors(null)}getCallbackInfo(){return uc.getCallbackDetailedInfo(this.callbackType)}toggleCallbackInfo(){this.isCallbackInfoExpanded=!this.isCallbackInfoExpanded}static \u0275fac=function(A){return new(A||t)(Ct(Po),Ct(ka))};static \u0275cmp=kA({type:t,selectors:[["app-add-callback-dialog"]],viewQuery:function(A,i){if(A&1&&ai(REA,5),A&2){let n;ce(n=Ce())&&(i.callbackNameInput=n.first)}},decls:18,vars:10,consts:[["callbackNameInput","ngModel"],["mat-dialog-title",""],[4,"ngIf"],[2,"width","100%"],["matInput","",3,"ngModelChange","keydown.enter","ngModel","errorStateMatcher"],["align","end"],["mat-button","",3,"click"],["mat-raised-button","","color","secondary",3,"click","disabled"],[1,"callback-info-container"],[1,"callback-info-header",3,"click"],[1,"callback-info-icon"],[1,"callback-info-title"],["mat-icon-button","","type","button","aria-label","Toggle callback information",1,"callback-info-toggle"],[1,"callback-info-body"],[1,"callback-info-content"],[1,"callback-info-short"],[1,"callback-info-detailed"],[1,"callback-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"callback-info-link",3,"href"],[3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]],template:function(A,i){if(A&1){let n=JA();m(0,"h2",1),K(1),w(),m(2,"mat-dialog-content"),vt(3,NEA,23,6,"ng-container",2)(4,_EA,6,2,"ng-container",2),m(5,"mat-form-field",3)(6,"mat-label"),K(7,"Callback Name"),w(),m(8,"input",4,0),ho("ngModelChange",function(a){return Z(n),ao(i.callbackName,a)||(i.callbackName=a),X(a)}),eA("ngModelChange",function(){return Z(n),X(i.validate())})("keydown.enter",function(){return Z(n),X(i.addCallback())}),w(),vt(10,LEA,2,0,"mat-error",2)(11,GEA,2,0,"mat-error",2)(12,KEA,2,0,"mat-error",2),w()(),m(13,"mat-dialog-actions",5)(14,"button",6),eA("click",function(){return Z(n),X(i.cancel())}),K(15,"Cancel"),w(),m(16,"button",7),eA("click",function(){return Z(n),X(i.addCallback())}),K(17),w()()}if(A&2){let n=An(9);p(),qA(i.isEditMode?"Edit Callback":"Add "+i.callbackType+" Callback"),p(2),AA("ngIf",i.getCallbackInfo()),p(),AA("ngIf",i.isEditMode),p(4),Qo("ngModel",i.callbackName),AA("errorStateMatcher",i.matcher),p(2),AA("ngIf",n.hasError("duplicateName")),p(),AA("ngIf",n.hasError("hasSpaces")),p(),AA("ngIf",n.hasError("hasSpaces")),p(4),AA("disabled",i.createDisabled()),p(),_e(" ",i.isEditMode?"Save":"Add"," ")}},dependencies:[fa,DB,o0,Nn,uo,fo,ba,Ez,Ua,or,yr,Fs,Fn,Ma,Yr,ta,Zl,D9,rl,Ka,ok,Il,Hr,cl,fn],styles:[".callback-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;min-width:400px;max-width:600px}.full-width[_ngcontent-%COMP%]{width:100%}mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px}mat-dialog-actions[_ngcontent-%COMP%]{padding:16px 24px;margin:0}mat-form-field[_ngcontent-%COMP%]{margin-top:8px!important}.mat-mdc-raised-button.mat-secondary[_ngcontent-%COMP%]:not([disabled]){background-color:#8ab4f8}.callback-info-container[_ngcontent-%COMP%]{background-color:#8ab4f814;border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.callback-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.callback-info-header[_ngcontent-%COMP%]:hover .callback-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.callback-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.callback-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.callback-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.callback-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.callback-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.callback-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.callback-info-content[_ngcontent-%COMP%]{flex:1}.callback-info-short[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-dialog-content-text-color);margin-bottom:8px;line-height:1.4}.callback-info-detailed[_ngcontent-%COMP%]{color:var(--mat-dialog-content-text-color);font-size:14px;line-height:1.5;opacity:.8}.callback-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.callback-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.callback-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.callback-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};function UEA(t,e){if(t&1){let A=JA();qs(0),m(1,"div",6)(2,"div",7),eA("click",function(){Z(A);let n=v();return X(n.toggleToolInfo())}),m(3,"mat-icon",8),K(4,"info"),w(),m(5,"div",9)(6,"span"),K(7,"Tool Information"),w()(),m(8,"button",10)(9,"mat-icon"),K(10),w()()(),m(11,"div",11)(12,"div",12)(13,"div",13),K(14),w(),m(15,"div",14),K(16),w()(),m(17,"div",15)(18,"a",16)(19,"mat-icon"),K(20,"open_in_new"),w(),m(21,"span"),K(22,"View Official Documentation"),w()()()()(),Vs()}if(t&2){let A,i,n,o=v();p(10),qA(o.isToolInfoExpanded?"expand_less":"expand_more"),p(),ae("expanded",o.isToolInfoExpanded),p(3),qA((A=o.getToolInfo())==null?null:A.shortDescription),p(2),qA((i=o.getToolInfo())==null?null:i.detailedDescription),p(2),AA("href",(n=o.getToolInfo())==null?null:n.docLink,Ga)}}function JEA(t,e){if(t&1){let A=JA();m(0,"mat-form-field",2)(1,"input",17),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.toolName,n)||(o.toolName=n),X(n)}),eA("keydown.enter",function(){Z(A);let n=v();return X(n.addTool())}),w()()}if(t&2){let A=v();p(),Qo("ngModel",A.toolName)}}function YEA(t,e){if(t&1&&(m(0,"mat-option",20),K(1),w()),t&2){let A=e.$implicit;AA("value",A),p(),_e(" ",A," ")}}function TEA(t,e){if(t&1){let A=JA();m(0,"mat-form-field",2)(1,"mat-select",18),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.selectedBuiltInTool,n)||(o.selectedBuiltInTool=n),X(n)}),vt(2,YEA,2,2,"mat-option",19),w()()}if(t&2){let A=v();p(),Qo("ngModel",A.selectedBuiltInTool),p(),AA("ngForOf",A.builtInTools)}}var W2=class t{constructor(e,A){this.data=e;this.dialogRef=A}toolName="";toolType="Function tool";selectedBuiltInTool="google_search";builtInTools=["EnterpriseWebSearchTool","exit_loop","FilesRetrieval","get_user_choice","google_search","load_artifacts","load_memory","LongRunningFunctionTool","preload_memory","url_context","VertexAiRagRetrieval","VertexAiSearchTool"];isEditMode=!1;isToolInfoExpanded=!1;ngOnInit(){this.toolType=this.data.toolType,this.isEditMode=this.data.isEditMode||!1,this.isEditMode&&this.data.toolName&&(this.toolType==="Function tool"?this.toolName=this.data.toolName:this.toolType==="Built-in tool"&&(this.selectedBuiltInTool=this.data.toolName))}addTool(){if(this.toolType==="Function tool"&&!this.toolName.trim())return;let e={toolType:this.toolType,isEditMode:this.isEditMode};this.toolType==="Function tool"?e.name=this.toolName.trim():this.toolType==="Built-in tool"&&(e.name=this.selectedBuiltInTool),this.dialogRef.close(e)}cancel(){this.dialogRef.close()}createDisabled(){return this.toolType==="Function tool"&&!this.toolName.trim()}getToolInfo(){return uc.getToolDetailedInfo(this.toolType)}toggleToolInfo(){this.isToolInfoExpanded=!this.isToolInfoExpanded}static \u0275fac=function(A){return new(A||t)(Ct(ka),Ct(Po))};static \u0275cmp=kA({type:t,selectors:[["app-add-tool-dialog"]],decls:11,vars:6,consts:[["mat-dialog-title","",1,"dialog-title"],[4,"ngIf"],[2,"width","100%"],["align","end"],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click","disabled"],[1,"tool-info-container"],[1,"tool-info-header",3,"click"],[1,"tool-info-icon"],[1,"tool-info-title"],["mat-icon-button","","type","button","aria-label","Toggle tool information",1,"tool-info-toggle"],[1,"tool-info-body"],[1,"tool-info-content"],[1,"tool-info-short"],[1,"tool-info-detailed"],[1,"tool-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"tool-info-link",3,"href"],["matInput","","placeholder","Enter full function name",3,"ngModelChange","keydown.enter","ngModel"],["placeholder","Select built-in tool",3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1),w(),m(2,"mat-dialog-content"),vt(3,UEA,23,6,"ng-container",1),V(4,JEA,2,1,"mat-form-field",2),V(5,TEA,3,2,"mat-form-field",2),w(),m(6,"mat-dialog-actions",3)(7,"button",4),eA("click",function(){return i.cancel()}),K(8,"Cancel"),w(),m(9,"button",5),eA("click",function(){return i.addTool()}),K(10),w()()),A&2&&(p(),qA(i.isEditMode?"Editing Tool":"Add New Tool"),p(2),AA("ngIf",i.getToolInfo()),p(),W(i.toolType==="Function tool"?4:-1),p(),W(i.toolType==="Built-in tool"?5:-1),p(4),AA("disabled",i.createDisabled()),p(),_e(" ",i.isEditMode?"Save":"Create"," "))},dependencies:[fa,DB,o0,Nn,uo,fo,ba,Ua,yr,ta,Ka,Il,Hr,or,Fn,Ma,fn],styles:[".dialog-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;font-family:Google Sans;font-size:24px}mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px}.tool-info-container[_ngcontent-%COMP%]{background-color:#8ab4f814;border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.tool-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.tool-info-header[_ngcontent-%COMP%]:hover .tool-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.tool-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.tool-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.tool-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.tool-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.tool-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.tool-info-content[_ngcontent-%COMP%]{flex:1}.tool-info-short[_ngcontent-%COMP%]{font-weight:500;color:#e3e3e3;margin-bottom:8px;line-height:1.4}.tool-info-detailed[_ngcontent-%COMP%]{color:#c4c7ca;font-size:14px;line-height:1.5}.tool-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.tool-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.tool-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.tool-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};function jo(t){return Array.isArray(t)}function ia(t){return t!==null&&typeof t=="object"&&(t.constructor===void 0||t.constructor.name==="Object")}function jk(t){return t&&typeof t=="object"?t.op==="add":!1}function qk(t){return t&&typeof t=="object"?t.op==="remove":!1}function sw(t){return t&&typeof t=="object"?t.op==="replace":!1}function gw(t){return t&&typeof t=="object"?t.op==="copy":!1}function Z2(t){return t&&typeof t=="object"?t.op==="move":!1}function LO(t,e){return JSON.stringify(t)===JSON.stringify(e)}function HEA(t,e){return t===e}function Vk(t){return t.slice(0,t.length-1)}function GO(t){return t[t.length-1]}function KO(t,e){let A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:HEA;if(t.length{e[A]=t[A]}),e}if(ia(t)){let e=gA({},t);return Object.getOwnPropertySymbols(t).forEach(A=>{e[A]=t[A]}),e}return t}function Xk(t,e,A){if(t[e]===A)return t;let i=Zk(t);return i[e]=A,i}function je(t,e){let A=t,i=0;for(;i3&&arguments[3]!==void 0?arguments[3]:!1;if(e.length===0)return A;let n=e[0],o=Or(t?t[n]:void 0,e.slice(1),A,i);if(ia(t)||jo(t))return Xk(t,n,o);if(i){let a=zEA.test(n)?[]:{};return a[n]=o,a}throw new Error("Path does not exist")}var zEA=/^\d+$/;function O4(t,e,A){if(e.length===0)return A(t);if(!Wk(t))throw new Error("Path doesn't exist");let i=e[0],n=O4(t[i],e.slice(1),A);return Xk(t,i,n)}function Ad(t,e){if(e.length===0)return t;if(!Wk(t))throw new Error("Path does not exist");if(e.length===1){let n=e[0];if(!(n in t))return t;let o=Zk(t);return jo(o)&&o.splice(Number.parseInt(n),1),ia(o)&&delete o[n],o}let A=e[0],i=Ad(t[A],e.slice(1));return Xk(t,A,i)}function P4(t,e,A){let i=e.slice(0,e.length-1),n=e[e.length-1];return O4(t,i,o=>{if(!Array.isArray(o))throw new TypeError(`Array expected at path ${JSON.stringify(i)}`);let a=Zk(o);return a.splice(Number.parseInt(n),0,A),a})}function br(t,e){return t===void 0?!1:e.length===0?!0:t===null?!1:br(t[e[0]],e.slice(1))}function hs(t){let e=t.split("/");return e.shift(),e.map(A=>A.replace(/~1/g,"/").replace(/~0/g,"~"))}function wt(t){return t.map(UO).join("")}function UO(t){return`/${String(t).replace(/~/g,"~0").replace(/\//g,"~1")}`}function j4(t,e){return t+UO(e)}function lg(t,e,A){let i=t;for(let n=0;n{let r,s=cg(o,a.path);if(a.op==="add")r=TO(o,s);else if(a.op==="remove")r=YO(o,s);else if(a.op==="replace")r=JO(o,s);else if(a.op==="copy")r=$EA(o,s);else if(a.op==="move")r=AQA(o,s,q4(a.from));else if(a.op==="test")r=[];else throw new Error(`Unknown JSONPatch operation ${JSON.stringify(a)}`);let g;if(A?.before){let l=A.before(o,a,r);if(l?.revertOperations&&(r=l.revertOperations),l?.document&&(g=l.document),l?.json)throw new Error('Deprecation warning: returned object property ".json" has been renamed to ".document"')}if(i=r.concat(i),g!==void 0)return{document:g}}}),i}function JO(t,e){return br(t,e)?[{op:"replace",path:wt(e),value:je(t,e)}]:[]}function YO(t,e){return[{op:"add",path:wt(e),value:je(t,e)}]}function TO(t,e){return kE(t,e)||!br(t,e)?[{op:"remove",path:wt(e)}]:JO(t,e)}function $EA(t,e){return TO(t,e)}function AQA(t,e,A){if(e.length="0"&&t<="9"}function PO(t){return t>=" "}function V4(t){return`,:[]/{}() ++`.includes(t)}function eS(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"||t==="_"||t==="$"}function tS(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"||t==="_"||t==="$"||t>="0"&&t<="9"}var iS=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,nS=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;function oS(t){return`,[]/{} ++`.includes(t)}function aS(t){return W4(t)||cQA.test(t)}var cQA=/^[[{\w-]$/;function jO(t){return t===` +`||t==="\r"||t===" "||t==="\b"||t==="\f"}function X2(t,e){let A=t.charCodeAt(e);return A===32||A===10||A===9||A===13}function qO(t,e){let A=t.charCodeAt(e);return A===32||A===9||A===13}function VO(t,e){let A=t.charCodeAt(e);return A===160||A>=8192&&A<=8202||A===8239||A===8287||A===12288}function W4(t){return rS(t)||Iw(t)}function rS(t){return t==='"'||t==="\u201C"||t==="\u201D"}function sS(t){return t==='"'}function Iw(t){return t==="'"||t==="\u2018"||t==="\u2019"||t==="`"||t==="\xB4"}function gS(t){return t==="'"}function SE(t,e){let A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=t.lastIndexOf(e);return i!==-1?t.substring(0,i)+(A?"":t.substring(i+1)):t}function hl(t,e){let A=t.length;if(!X2(t,A-1))return t+e;for(;X2(t,A-1);)A--;return t.substring(0,A)+e+t.substring(A)}function WO(t,e,A){return t.substring(0,e)+t.substring(e+A)}function ZO(t){return/[,\n][ \t\r]*$/.test(t)}var CQA={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},IQA={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:` +`,r:"\r",t:" "};function ul(t){let e=0,A="";g(["```","[```","{```"]),o()||P(),g(["```","```]","```}"]);let n=C(",");for(n&&a(),aS(t[e])&&ZO(A)?(n||(A=hl(A,",")),f()):n&&(A=SE(A,","));t[e]==="}"||t[e]==="]";)e++,a();if(e>=t.length)return A;DA();function o(){a();let oA=E()||Q()||b()||M()||D()||_(!1)||U();return a(),oA}function a(){let oA=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,sA=e,hA=r(oA);do hA=s(),hA&&(hA=r(oA));while(hA);return e>sA}function r(oA){let sA=oA?X2:qO,hA="";for(;;)if(sA(t,e))hA+=t[e],e++;else if(VO(t,e))hA+=" ",e++;else break;return hA.length>0?(A+=hA,!0):!1}function s(){if(t[e]==="/"&&t[e+1]==="*"){for(;e=t.length;YA||(aS(t[e])||ee?A=hl(A,":"):iA()),o()||(YA||ee?A+="null":iA())}return t[e]==="}"?(A+="}",e++):A=hl(A,"}"),!0}return!1}function Q(){if(t[e]==="["){A+="[",e++,a(),I(",")&&a();let oA=!0;for(;e0&&arguments[0]!==void 0?arguments[0]:!1,sA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,hA=t[e]==="\\";if(hA&&(e++,hA=!0),W4(t[e])){let YA=sS(t[e])?sS:gS(t[e])?gS:Iw(t[e])?Iw:rS,ee=e,UA=A.length,mA='"';for(e++;;){if(e>=t.length){let KA=J(e-1);return!oA&&V4(t.charAt(KA))?(e=ee,A=A.substring(0,UA),b(!0)):(mA=hl(mA,'"'),A+=mA,!0)}if(e===sA)return mA=hl(mA,'"'),A+=mA,!0;if(YA(t[e])){let KA=e,Pe=mA.length;if(mA+='"',e++,A+=mA,a(!1),oA||e>=t.length||V4(t[e])||W4(t[e])||$2(t[e]))return S(),!0;let Ue=J(KA-1),HA=t.charAt(Ue);if(HA===",")return e=ee,A=A.substring(0,UA),b(!1,Ue);if(V4(HA))return e=ee,A=A.substring(0,UA),b(!0);A=A.substring(0,UA),e=KA+1,mA=`${mA.substring(0,Pe)}\\${mA.substring(Pe)}`}else if(oA&&oS(t[e])){if(t[e-1]===":"&&iS.test(t.substring(ee+1,e+2)))for(;e=t.length?e=t.length:BA()}else mA+=KA,e+=2}else{let KA=t.charAt(e);KA==='"'&&t[e-1]!=="\\"?(mA+=`\\${KA}`,e++):jO(KA)?(mA+=CQA[KA],e++):(PO(KA)||O(KA),mA+=KA,e++)}hA&&d()}}return!1}function S(){let oA=!1;for(a();t[e]==="+";){oA=!0,e++,a(),A=SE(A,'"',!0);let sA=A.length;b()?A=WO(A,sA,1):A=hl(A,'"')}return oA}function M(){let oA=e;if(t[e]==="-"){if(e++,j())return $(oA),!0;if(!$2(t[e]))return e=oA,!1}for(;$2(t[e]);)e++;if(t[e]==="."){if(e++,j())return $(oA),!0;if(!$2(t[e]))return e=oA,!1;for(;$2(t[e]);)e++}if(t[e]==="e"||t[e]==="E"){if(e++,(t[e]==="-"||t[e]==="+")&&e++,j())return $(oA),!0;if(!$2(t[e]))return e=oA,!1;for(;$2(t[e]);)e++}if(!j())return e=oA,!1;if(e>oA){let sA=t.slice(oA,e),hA=/^0\d/.test(sA);return A+=hA?`"${sA}"`:sA,!0}return!1}function D(){return F("true","true")||F("false","false")||F("null","null")||F("True","true")||F("False","false")||F("None","null")}function F(oA,sA){return t.slice(e,e+oA.length)===oA?(A+=sA,e+=oA.length,!0):!1}function _(oA){let sA=e;if(eS(t[e])){for(;esA){for(;X2(t,e-1)&&e>0;)e--;let hA=t.slice(sA,e);return A+=hA==="undefined"?"null":JSON.stringify(hA),t[e]==='"'&&e++,!0}}function U(){if(t[e]==="/"){let oA=e;for(e++;e0&&X2(t,sA);)sA--;return sA}function j(){return e>=t.length||V4(t[e])||X2(t,e)}function $(oA){A+=`${t.slice(oA,e)}0`}function O(oA){throw new wC(`Invalid character ${JSON.stringify(oA)}`,e)}function DA(){throw new wC(`Unexpected character ${JSON.stringify(t[e])}`,e)}function P(){throw new wC("Unexpected end of json string",t.length)}function aA(){throw new wC("Object key expected",e)}function iA(){throw new wC("Colon expected",e)}function BA(){let oA=t.slice(e,e+6);throw new wC(`Invalid unicode character "${oA}"`,e)}}function dQA(t,e){return t[e]==="*"&&t[e+1]==="/"}var BQA=typeof global=="object"&&global&&global.Object===Object&&global,dw=BQA;var EQA=typeof self=="object"&&self&&self.Object===Object&&self,QQA=dw||EQA||Function("return this")(),Ya=QQA;var hQA=Ya.Symbol,Mr=hQA;var XO=Object.prototype,uQA=XO.hasOwnProperty,fQA=XO.toString,Z4=Mr?Mr.toStringTag:void 0;function mQA(t){var e=uQA.call(t,Z4),A=t[Z4];try{t[Z4]=void 0;var i=!0}catch{}var n=fQA.call(t);return i&&(e?t[Z4]=A:delete t[Z4]),n}var $O=mQA;var pQA=Object.prototype,wQA=pQA.toString;function DQA(t){return wQA.call(t)}var AP=DQA;var yQA="[object Null]",vQA="[object Undefined]",eP=Mr?Mr.toStringTag:void 0;function bQA(t){return t==null?t===void 0?vQA:yQA:eP&&eP in Object(t)?$O(t):AP(t)}var fc=bQA;function MQA(t){return t!=null&&typeof t=="object"}var Js=MQA;var kQA="[object Symbol]";function SQA(t){return typeof t=="symbol"||Js(t)&&fc(t)==kQA}var Tg=SQA;function xQA(t,e){for(var A=-1,i=t==null?0:t.length,n=Array(i);++A0){if(++e>=uhA)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var uP=phA;function whA(t){return function(){return t}}var fP=whA;var DhA=(function(){try{var t=Cg(Object,"defineProperty");return t({},"",{}),t}catch{}})(),RE=DhA;var yhA=RE?function(t,e){return RE(t,"toString",{configurable:!0,enumerable:!1,value:fP(e),writable:!0})}:D0,mP=yhA;var vhA=uP(mP),pP=vhA;function bhA(t,e){for(var A=-1,i=t==null?0:t.length;++A-1&&t%1==0&&t-1&&t%1==0&&t<=UhA}var FE=JhA;function YhA(t){return t!=null&&FE(t.length)&&!Bw(t)}var fl=YhA;function ThA(t,e,A){if(!Er(A))return!1;var i=typeof e;return(i=="number"?fl(A)&&NE(e,A.length):i=="string"&&e in A)?tI(A[e],t):!1}var $4=ThA;var HhA=Object.prototype;function zhA(t){var e=t&&t.constructor,A=typeof e=="function"&&e.prototype||HhA;return t===A}var nI=zhA;function OhA(t,e){for(var A=-1,i=Array(t);++A-1}var PP=c4A;function C4A(t,e){var A=this.__data__,i=rI(A,t);return i<0?(++this.size,A.push([t,e])):A[i][1]=e,this}var jP=C4A;function UE(t){var e=-1,A=t==null?0:t.length;for(this.clear();++e0&&A(r)?e>1?aj(r,e-1,A,i,n):TE(n,r):i||(n[n.length]=r)}return n}var rj=aj;var _4A=mw(Object.getPrototypeOf,Object),yw=_4A;function L4A(t,e,A){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),A=A>n?n:A,A<0&&(A+=n),n=e>A?0:A-e>>>0,e>>>=0;for(var o=Array(n);++ir))return!1;var g=o.get(t),l=o.get(e);if(g&&l)return g==e&&l==t;var C=-1,I=!0,d=A&_fA?new Zj:void 0;for(o.set(t,e),o.set(e,t);++C=e||_<0||C&&U>=o}function f(){var F=zw();if(Q(F))return b(F);r=setTimeout(f,E(F))}function b(F){return r=void 0,I&&i?d(F):(i=n=void 0,a)}function S(){r!==void 0&&clearTimeout(r),g=0,i=s=n=r=void 0}function M(){return r===void 0?a:b(zw())}function D(){var F=zw(),_=Q(F);if(i=arguments,n=this,s=F,_){if(r===void 0)return B(s);if(C)return clearTimeout(r),r=setTimeout(f,e),d(s)}return r===void 0&&(r=setTimeout(f,e)),a}return D.cancel=S,D.flush=M,D}var qE=_mA;function LmA(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var mi=LmA;function GmA(t){return typeof t=="function"?t:D0}var Ow=GmA;function KmA(t,e){for(var A=t==null?0:t.length;A--&&e(t[A],A,t)!==!1;);return t}var wq=KmA;var UmA=Uw(!0),Dq=UmA;function JmA(t,e){return t&&Dq(t,e,ml)}var yq=JmA;var YmA=Yw(yq,!0),vq=YmA;function TmA(t,e){var A=go(t)?wq:vq;return A(t,Ow(e))}var ES=TmA;function HmA(t){return t&&t.length?t[0]:void 0}var pl=HmA;function zmA(t,e){var A=-1,i=fl(t)?Array(t.length):[];return Tw(t,function(n,o,a){i[++A]=e(n,o,a)}),i}var Pw=zmA;function OmA(t,e){var A=go(t)?AI:Pw;return A(t,y0(e,3))}var QS=OmA;var PmA=Object.prototype,jmA=PmA.hasOwnProperty,qmA=Hw(function(t,e,A){jmA.call(t,A)?t[A].push(e):eI(t,A,[e])}),hS=qmA;function VmA(t){var e=t==null?0:t.length;return e?sj(t,0,-1):[]}var Ki=VmA;var WmA="[object Map]",ZmA="[object Set]",XmA=Object.prototype,$mA=XmA.hasOwnProperty;function ApA(t){if(t==null)return!0;if(fl(t)&&(go(t)||typeof t=="string"||typeof t.splice=="function"||yC(t)||_E(t)||oI(t)))return!t.length;var e=mc(t);if(e==WmA||e==ZmA)return!t.size;if(nI(t))return!pw(t).length;for(var A in t)if($mA.call(t,A))return!1;return!0}var Vi=ApA;function epA(t,e){return jE(t,e)}var Bi=epA;function tpA(t,e){return te||o&&a&&s&&!r&&!g||i&&a&&s||!A&&s||!n)return 1;if(!i&&!o&&!g&&t=r)return s;var g=A[i];return s*(g=="desc"?-1:1)}}return t.index-e.index}var xq=spA;function gpA(t,e,A){e.length?e=AI(e,function(o){return go(o)?function(a){return YE(a,o.length===1?o[0]:o)}:o}):e=[D0];var i=-1;e=AI(e,aI(y0));var n=Pw(t,function(o,a,r){var s=AI(e,function(g){return g(o)});return{criteria:s,index:++i,value:o}});return kq(n,function(o,a){return xq(o,a,A)})}var Rq=gpA;var lpA=Hw(function(t,e,A){t[A?0:1].push(e)},function(){return[[],[]]}),fS=lpA;var cpA=Math.ceil,CpA=Math.max;function IpA(t,e,A,i){for(var n=-1,o=CpA(cpA((e-t)/(A||1)),0),a=Array(o);o--;)a[i?o:++n]=t,t+=A;return a}var Nq=IpA;function dpA(t){return function(e,A,i){return i&&typeof i!="number"&&$4(e,A,i)&&(A=i=void 0),e=xE(e),A===void 0?(A=e,e=0):A=xE(A),i=i===void 0?e1&&$4(t,e[0],e[1])?e=[]:A>2&&$4(e[0],e[1],e[2])&&(e=[e[0]]),Rq(t,rj(e,1),[])}),mS=EpA;var QpA=9007199254740991,pS=4294967295,hpA=Math.min;function upA(t,e){if(t=lP(t),t<1||t>QpA)return[];var A=pS,i=hpA(t,pS);e=Ow(e),t-=pS;for(var n=uw(i,e);++AArray.isArray(t),ppA=t=>t!==null&&typeof t=="object"&&!dI(t),wpA=t=>typeof t=="string",id=(t,e)=>t===e?!0:t!==null&&e!==null&&typeof t=="object"&&typeof e=="object"&&Object.keys(t).length===Object.keys(e).length&&Object.entries(t).every(([A,i])=>id(i,e[A])),_q=(t,e)=>{let A=t?.[e];if(A!==void 0){if(!Object.hasOwn(t,e)||Array.isArray(t)&&!/^\d+$/.test(e)||typeof t!="object")throw new TypeError(`Unsupported property "${e}"`);return A}};function Wa(t){return(...e)=>{let A=e.map(o=>Za(o)),i=A[0],n=A[1];return A.length===1?o=>t(i(o)):A.length===2?o=>t(i(o),n(o)):o=>t(...A.map(a=>a(o)))}}var o3={boolean:0,number:1,string:2},Lq=3,Uq=(t,e)=>typeof t==typeof e&&typeof t in o3?t>e:!1,DpA=(t,e)=>id(t,e)||Uq(t,e),Jq=(t,e)=>typeof t==typeof e&&typeof t in o3?tid(t,e)||Jq(t,e),n3={pipe:(...t)=>{let e=t.map(A=>Za(A));return A=>e.reduce((i,n)=>n(i),A)},object:t=>{let e=Object.keys(t).map(A=>[A,Za(t[A])]);return A=>{let i={};for(let[n,o]of e)i[n]=o(A);return i}},array:(...t)=>{let e=t.map(A=>Za(A));return A=>e.map(i=>i(A))},get:(...t)=>{if(t.length===0)return e=>e??null;if(t.length===1){let e=t[0];return A=>_q(A,e)??null}return e=>{let A=e;for(let i of t)A=_q(A,i);return A??null}},map:t=>{let e=Za(t);return A=>A.map(e)},mapObject:t=>{let e=Za(t);return A=>{let i={};for(let n of Object.keys(A)){let o=e({key:n,value:A[n]});i[o.key]=o.value}return i}},mapKeys:t=>{let e=Za(t);return A=>{let i={};for(let n of Object.keys(A)){let o=e(n);i[o]=A[n]}return i}},mapValues:t=>{let e=Za(t);return A=>{let i={};for(let n of Object.keys(A))i[n]=e(A[n]);return i}},filter:t=>{let e=Za(t);return A=>A.filter(i=>Gq(e(i)))},sort:(t=["get"],e)=>{let A=Za(t),i=e==="desc"?-1:1;function n(o,a){let r=A(o),s=A(a);if(typeof r!=typeof s){let g=o3[typeof r]??Lq,l=o3[typeof s]??Lq;return g>l?i:gs?i:ro.slice().sort(n)},reverse:()=>t=>t.toReversed(),pick:(...t)=>{let e=t.map(([i,...n])=>[n[n.length-1],n3.get(...n)]),A=(i,n)=>{let o={};for(let[a,r]of n)o[a]=r(i);return o};return i=>dI(i)?i.map(n=>A(n,e)):A(i,e)},groupBy:t=>{let e=Za(t);return A=>{let i={};for(let n of A){let o=e(n);i[o]?i[o].push(n):i[o]=[n]}return i}},keyBy:t=>{let e=Za(t);return A=>{let i={};for(let n of A){let o=e(n);o in i||(i[o]=n)}return i}},flatten:()=>t=>t.flat(),join:(t="")=>e=>e.join(t),split:Wa((t,e)=>e!==void 0?t.split(e):t.trim().split(/\s+/)),substring:Wa((t,e,A)=>t.slice(Math.max(e,0),A)),uniq:()=>t=>{let e=[];for(let A of t)e.findIndex(i=>id(i,A))===-1&&e.push(A);return e},uniqBy:t=>e=>Object.values(n3.keyBy(t)(e)),limit:t=>e=>e.slice(0,Math.max(t,0)),size:()=>t=>t.length,keys:()=>Object.keys,values:()=>Object.values,prod:()=>t=>i3(t,(e,A)=>e*A),sum:()=>t=>dI(t)?t.reduce((e,A)=>e+A,0):DS(),average:()=>t=>dI(t)?t.length>0?t.reduce((e,A)=>e+A)/t.length:null:DS(),min:()=>t=>i3(t,(e,A)=>Math.min(e,A)),max:()=>t=>i3(t,(e,A)=>Math.max(e,A)),and:Wa((...t)=>i3(t,(e,A)=>!!(e&&A))),or:Wa((...t)=>i3(t,(e,A)=>!!(e||A))),not:Wa(t=>!t),exists:t=>{let e=t.slice(1),A=e.pop(),i=n3.get(...e);return n=>{let o=i(n);return!!o&&Object.hasOwnProperty.call(o,A)}},if:(t,e,A)=>{let i=Za(t),n=Za(e),o=Za(A);return a=>Gq(i(a))?n(a):o(a)},in:(t,e)=>{let A=Za(t),i=Za(e);return n=>{let o=A(n);return i(n).findIndex(a=>id(a,o))!==-1}},"not in":(t,e)=>{let A=n3.in(t,e);return i=>!A(i)},regex:(t,e,A)=>{let i=new RegExp(e,A),n=Za(t);return o=>i.test(n(o))},match:(t,e,A)=>{let i=new RegExp(e,A),n=Za(t);return o=>{let a=n(o).match(i);return a?Kq(a):null}},matchAll:(t,e,A)=>{let i=new RegExp(e,`${A??""}g`),n=Za(t);return o=>Array.from(n(o).matchAll(i)).map(Kq)},eq:Wa(id),gt:Wa(Uq),gte:Wa(DpA),lt:Wa(Jq),lte:Wa(ypA),ne:Wa((t,e)=>!id(t,e)),add:Wa((t,e)=>t+e),subtract:Wa((t,e)=>t-e),multiply:Wa((t,e)=>t*e),divide:Wa((t,e)=>t/e),mod:Wa((t,e)=>t%e),pow:Wa((t,e)=>t**e),abs:Wa(Math.abs),round:Wa((t,e=0)=>+`${Math.round(+`${t}e${e}`)}e${-e}`),number:Wa(t=>{let e=Number(t);return Number.isNaN(Number(t))?null:e}),string:Wa(String)},Gq=t=>t!==null&&t!==0&&t!==!1,i3=(t,e)=>(dI(t)||DS(),t.length===0?null:t.reduce(e)),Kq=t=>{let[e,...A]=t,i=t.groups;return A.length?i?{value:e,groups:A,namedGroups:i}:{value:e,groups:A}:{value:e}},DS=()=>{yS("Array expected")},yS=t=>{throw new TypeError(t)},qw=[];function Za(t,e){qw.unshift(gA(gA(gA({},n3),qw[0]),e?.functions));try{let A=dI(t)?vpA(t,qw[0]):ppA(t)?yS(`Function notation ["object", {...}] expected but got ${JSON.stringify(t)}`):()=>t;return i=>{try{return A(i)}catch(n){throw n.jsonquery=[{data:i,query:t},...n.jsonquery??[]],n}}}finally{qw.shift()}}function vpA(t,e){let[A,...i]=t,n=e[A];return n||yS(`Unknown function '${A}'`),n(...i)}var Yq=[{pow:"^"},{multiply:"*",divide:"/",mod:"%"},{add:"+",subtract:"-"},{gt:">",gte:">=",lt:"<",lte:"<=",in:"in","not in":"not in"},{eq:"==",ne:"!="},{and:"and"},{or:"or"},{pipe:"|"}],bpA=["|","and","or"],Tq=["|","and","or","*","/","%","+","-"];function Hq(t,e){if(!dI(e))throw new Error("Invalid custom operators");return e.reduce(MpA,t)}function MpA(t,{name:e,op:A,at:i,after:n,before:o}){if(i)return t.map(s=>Object.values(s).includes(i)?be(gA({},s),{[e]:A}):s);let a=n??o,r=t.findIndex(s=>Object.values(s).includes(a));if(r!==-1)return t.toSpliced(r+(n?1:0),0,{[e]:A});throw new Error("Invalid custom operator")}var kpA=/^[a-zA-Z_$][a-zA-Z\d_$]*$/,SpA=/^[a-zA-Z_$][a-zA-Z\d_$]*/,xpA=/^"(?:[^"\\]|\\.)*"/,RpA=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/,NpA=/^(0|[1-9][0-9]*)/,FpA=/^(true|false|null)/,_pA=/^[ \n\t\r]+/;function vS(t,e){let A=e?.operators??[],i=Hq(Yq,A),n=Object.assign({},...i),o=bpA.concat(A.filter(j=>j.vararg).map(j=>j.op)),a=Tq.concat(A.filter(j=>j.leftAssociative).map(j=>j.op)),r=(j=i.length-1)=>{let $=i[j];if(!$)return g();let O=t[U]==="(",DA=r(j-1);for(;;){if(D(),t[U]==="."&&"pipe"in $){let sA=l();DA=DA[0]==="pipe"?[...DA,sA]:["pipe",DA,sA];continue}let P=U,aA=s($);if(!aA)break;let iA=r(j-1),BA=DA[0],oA=aA===BA&&!O;if(oA&&!a.includes(n[aA])){U=P;break}DA=oA&&o.includes(n[aA])?[...DA,iA]:[aA,DA,iA]}return DA},s=j=>{let $=Object.keys(j).sort((O,DA)=>DA.length-O.length);for(let O of $){let DA=j[O];if(t.substring(U,U+DA.length)===DA)return U+=DA.length,D(),O}},g=()=>{if(D(),t[U]==="("){U++;let j=r();return F(")"),j}return l()},l=()=>{if(t[U]==="."){let j=[];for(;t[U]===".";)U++,j.push(B()??E()??f()??_("Property expected")),D();return["get",...j]}return C()},C=()=>{let j=U,$=E();if(D(),!$||t[U]!=="(")return U=j,I();U++,D();let O=t[U]!==")"?[r()]:[];for(;U{if(t[U]==="{"){U++,D();let j={},$=!0;for(;U{if(t[U]==="["){U++,D();let j=[],$=!0;for(;UM(xpA,JSON.parse),E=()=>M(SpA,j=>j),Q=()=>M(RpA,JSON.parse),f=()=>M(NpA,JSON.parse),b=()=>{let j=M(FpA,JSON.parse);if(j!==void 0)return j;_("Value expected")},S=()=>{D(),U{let O=t.substring(U).match(j);if(O)return U+=O[0].length,$(O[0])},D=()=>M(_pA,j=>j),F=j=>{t[U]!==j&&_(`Character '${j}' expected`),U++},_=(j,$=U)=>{throw new SyntaxError(`${j} (pos: ${$})`)},U=0,J=r();return S(),J}var LpA=40,GpA=" ",zq=(t,e)=>{let A=e?.indentation??GpA,i=e?.operators??[],n=Hq(Yq,i),o=Object.assign({},...n),a=Tq.concat(i.filter(d=>d.leftAssociative).map(d=>d.op)),r=(d,B,E=!1)=>dI(d)?s(d,B,E):JSON.stringify(d),s=(d,B,E)=>{let[Q,...f]=d;if(Q==="get"&&f.length>0)return l(f);if(Q==="object")return g(f[0],B);if(Q==="array"){let D=f.map(F=>r(F,B));return I(D,["[",", ","]"],[`[ +${B+A}`,`, +${B+A}`,` +${B}]`])}let b=o[Q];if(b){let D=E?"(":"",F=E?")":"",_=f.map((U,J)=>{let j=U?.[0],$=n.findIndex(P=>Q in P),O=n.findIndex(P=>j in P),DA=$0||Q===j&&!a.includes(b);return r(U,B+A,DA)});return I(_,[D,` ${b} `,F],[D,` +${B+A}${b} `,F])}let S=f.length===1?B:B+A,M=f.map(D=>r(D,S));return I(M,[`${Q}(`,", ",")"],f.length===1?[`${Q}(`,`, +${B}`,")"]:[`${Q}( +${S}`,`, +${S}`,` +${B})`])},g=(d,B)=>{let E=B+A,Q=Object.entries(d).map(([f,b])=>`${C(f)}: ${r(b,E)}`);return I(Q,["{ ",", "," }"],[`{ +${E}`,`, +${E}`,` +${B}}`])},l=d=>d.map(B=>`.${C(B)}`).join(""),C=d=>kpA.test(d)?d:JSON.stringify(d),I=(d,[B,E,Q],[f,b,S])=>B.length+d.reduce((M,D)=>M+D.length+E.length,0)-E.length+Q.length<=(e?.maxLineLength??LpA)?B+d.join(E)+Q:f+d.join(b)+S;return r(t,"")};function Oq(t,e,A){return Za(wpA(e)?vS(e,A):e,A)(t)}var Pq={prefix:"far",iconName:"clock",icon:[512,512,[128339,"clock-four"],"f017","M464 256a208 208 0 1 1 -416 0 208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0 256 256 0 1 0 -512 0zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"]};var KpA={prefix:"far",iconName:"square-check",icon:[448,512,[9745,9989,61510,"check-square"],"f14a","M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zm230.7 89.9c7.8-10.7 22.8-13.1 33.5-5.3 10.7 7.8 13.1 22.8 5.3 33.5L211.4 366.1c-4.1 5.7-10.5 9.3-17.5 9.8-7 .5-13.9-2-18.8-6.9l-55.9-55.9c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l36 36 105.6-145.2z"]},bS=KpA;var jq={prefix:"far",iconName:"lightbulb",icon:[384,512,[128161],"f0eb","M296.5 291.1C321 265.2 336 230.4 336 192 336 112.5 271.5 48 192 48S48 112.5 48 192c0 38.4 15 73.2 39.5 99.1 21.3 22.4 44.9 54 53.3 92.9l102.4 0c8.4-39 32-70.5 53.3-92.9zm34.8 33C307.7 349 288 379.4 288 413.7l0 18.3c0 44.2-35.8 80-80 80l-32 0c-44.2 0-80-35.8-80-80l0-18.3C96 379.4 76.3 349 52.7 324.1 20 289.7 0 243.2 0 192 0 86 86 0 192 0S384 86 384 192c0 51.2-20 97.7-52.7 132.1zM144 184c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-48.6 39.4-88 88-88 13.3 0 24 10.7 24 24s-10.7 24-24 24c-22.1 0-40 17.9-40 40z"]};var MS={prefix:"far",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M384 80c8.8 0 16 7.2 16 16l0 320c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l320 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z"]};var qq={prefix:"fas",iconName:"rotate",icon:[512,512,[128260,"sync-alt"],"f2f1","M480.1 192l7.9 0c13.3 0 24-10.7 24-24l0-144c0-9.7-5.8-18.5-14.8-22.2S477.9 .2 471 7L419.3 58.8C375 22.1 318 0 256 0 127 0 20.3 95.4 2.6 219.5 .1 237 12.2 253.2 29.7 255.7s33.7-9.7 36.2-27.1C79.2 135.5 159.3 64 256 64 300.4 64 341.2 79 373.7 104.3L327 151c-6.9 6.9-8.9 17.2-5.2 26.2S334.3 192 344 192l136.1 0zm29.4 100.5c2.5-17.5-9.7-33.7-27.1-36.2s-33.7 9.7-36.2 27.1c-13.3 93-93.4 164.5-190.1 164.5-44.4 0-85.2-15-117.7-40.3L185 361c6.9-6.9 8.9-17.2 5.2-26.2S177.7 320 168 320L24 320c-13.3 0-24 10.7-24 24L0 488c0 9.7 5.8 18.5 14.8 22.2S34.1 511.8 41 505l51.8-51.8C137 489.9 194 512 256 512 385 512 491.7 416.6 509.4 292.5z"]};var kS={prefix:"fas",iconName:"paste",icon:[512,512,["file-clipboard"],"f0ea","M64 0C28.7 0 0 28.7 0 64L0 384c0 35.3 28.7 64 64 64l112 0 0-224c0-61.9 50.1-112 112-112l64 0 0-48c0-35.3-28.7-64-64-64L64 0zM248 112l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24zm40 48c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64l0-165.5c0-17-6.7-33.3-18.7-45.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7L288 160z"]};var UpA={prefix:"fas",iconName:"crop-simple",icon:[512,512,["crop-alt"],"f565","M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32-32 0C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l208 0 0-64-208 0 0-352zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-256c0-35.3-28.7-64-64-64l-208 0 0 64 208 0 0 352z"]},Vq=UpA;var a3={prefix:"fas",iconName:"filter",icon:[512,512,[],"f0b0","M32 64C19.1 64 7.4 71.8 2.4 83.8S.2 109.5 9.4 118.6L192 301.3 192 416c0 8.5 3.4 16.6 9.4 22.6l64 64c9.2 9.2 22.9 11.9 34.9 6.9S320 492.9 320 480l0-178.7 182.6-182.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64z"]};var JpA={prefix:"fas",iconName:"square-caret-down",icon:[448,512,["caret-square-down"],"f150","M384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9S110.5 192 120 192l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z"]},Wq=JpA;var WE={prefix:"fas",iconName:"caret-right",icon:[256,512,[],"f0da","M249.3 235.8c10.2 12.6 9.5 31.1-2.2 42.8l-128 128c-9.2 9.2-22.9 11.9-34.9 6.9S64.5 396.9 64.5 384l0-256c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l128 128 2.2 2.4z"]};var YpA={prefix:"fas",iconName:"magnifying-glass",icon:[512,512,[128269,"search"],"f002","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"]},r3=YpA;var Zq={prefix:"fas",iconName:"eye",icon:[576,512,[128065],"f06e","M288 32c-80.8 0-145.5 36.8-192.6 80.6-46.8 43.5-78.1 95.4-93 131.1-3.3 7.9-3.3 16.7 0 24.6 14.9 35.7 46.2 87.7 93 131.1 47.1 43.7 111.8 80.6 192.6 80.6s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1 3.3-7.9 3.3-16.7 0-24.6-14.9-35.7-46.2-87.7-93-131.1-47.1-43.7-111.8-80.6-192.6-80.6zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64-11.5 0-22.3-3-31.7-8.4-1 10.9-.1 22.1 2.9 33.2 13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-12.2-45.7-55.5-74.8-101.1-70.8 5.3 9.3 8.4 20.1 8.4 31.7z"]},Xq={prefix:"fas",iconName:"caret-left",icon:[256,512,[],"f0d9","M7.7 235.8c-10.3 12.6-9.5 31.1 2.2 42.8l128 128c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-256c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-128 128-2.2 2.4z"]};var $q={prefix:"fas",iconName:"chevron-up",icon:[448,512,[],"f077","M201.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 173.3 54.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"]};var AV={prefix:"fas",iconName:"circle-notch",icon:[512,512,[],"f1ce","M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8-79.3 23.6-137.1 97.1-137.1 184.1 0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256 512 397.4 397.4 512 256 512S0 397.4 0 256c0-116 77.1-213.9 182.9-245.4 16.9-5 34.8 4.6 39.8 21.5z"]};var TpA={prefix:"fas",iconName:"ellipsis-vertical",icon:[128,512,["ellipsis-v"],"f142","M64 144a56 56 0 1 1 0-112 56 56 0 1 1 0 112zm0 224c30.9 0 56 25.1 56 56s-25.1 56-56 56-56-25.1-56-56 25.1-56 56-56zm56-112c0 30.9-25.1 56-56 56s-56-25.1-56-56 25.1-56 56-56 56 25.1 56 56z"]},SS=TpA;var HpA={prefix:"fas",iconName:"pen-to-square",icon:[512,512,["edit"],"f044","M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L368 46.1 465.9 144 490.3 119.6c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L432 177.9 334.1 80 172.4 241.7zM96 64C43 64 0 107 0 160L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 64z"]},eV=HpA;var xS={prefix:"fas",iconName:"clone",icon:[512,512,[],"f24d","M288 448l-224 0 0-224 48 0 0-64-48 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-48-64 0 0 48zm-64-96l224 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L224 0c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64z"]};var zpA={prefix:"fas",iconName:"square-check",icon:[448,512,[9745,9989,61510,"check-square"],"f14a","M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM342 145.7c-10.7-7.8-25.7-5.4-33.5 5.3L189.1 315.2 137 263.1c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c5 5 11.9 7.5 18.8 7s13.4-4.1 17.5-9.8L347.3 179.2c7.8-10.7 5.4-25.7-5.3-33.5z"]},RS=zpA;var OpA={prefix:"fas",iconName:"square-caret-up",icon:[448,512,["caret-square-up"],"f151","M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 160c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9S337.5 320 328 320l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z"]},tV=OpA;var s3={prefix:"fas",iconName:"code",icon:[576,512,[],"f121","M360.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm64.6 136.1c-12.5 12.5-12.5 32.8 0 45.3l73.4 73.4-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0zm-274.7 0c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 150.6 182.6c12.5-12.5 12.5-32.8 0-45.3z"]};var NS={prefix:"fas",iconName:"angle-right",icon:[256,512,[8250],"f105","M247.1 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L179.2 256 41.9 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"]};var PpA={prefix:"fas",iconName:"gear",icon:[512,512,[9881,"cog"],"f013","M195.1 9.5C198.1-5.3 211.2-16 226.4-16l59.8 0c15.2 0 28.3 10.7 31.3 25.5L332 79.5c14.1 6 27.3 13.7 39.3 22.8l67.8-22.5c14.4-4.8 30.2 1.2 37.8 14.4l29.9 51.8c7.6 13.2 4.9 29.8-6.5 39.9L447 233.3c.9 7.4 1.3 15 1.3 22.7s-.5 15.3-1.3 22.7l53.4 47.5c11.4 10.1 14 26.8 6.5 39.9l-29.9 51.8c-7.6 13.1-23.4 19.2-37.8 14.4l-67.8-22.5c-12.1 9.1-25.3 16.7-39.3 22.8l-14.4 69.9c-3.1 14.9-16.2 25.5-31.3 25.5l-59.8 0c-15.2 0-28.3-10.7-31.3-25.5l-14.4-69.9c-14.1-6-27.2-13.7-39.3-22.8L73.5 432.3c-14.4 4.8-30.2-1.2-37.8-14.4L5.8 366.1c-7.6-13.2-4.9-29.8 6.5-39.9l53.4-47.5c-.9-7.4-1.3-15-1.3-22.7s.5-15.3 1.3-22.7L12.3 185.8c-11.4-10.1-14-26.8-6.5-39.9L35.7 94.1c7.6-13.2 23.4-19.2 37.8-14.4l67.8 22.5c12.1-9.1 25.3-16.7 39.3-22.8L195.1 9.5zM256.3 336a80 80 0 1 0 -.6-160 80 80 0 1 0 .6 160z"]},iV=PpA;var nV={prefix:"fas",iconName:"up-right-and-down-left-from-center",icon:[512,512,["expand-alt"],"f424","M344 0L488 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512L24 512c-13.3 0-24-10.7-24-24L0 344c0-9.7 5.8-18.5 14.8-22.2S34.1 320.2 41 327l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S177.7 512 168 512z"]};var MC={prefix:"fas",iconName:"wrench",icon:[576,512,[128295],"f0ad","M509.4 98.6c7.6-7.6 20.3-5.7 24.1 4.3 6.8 17.7 10.5 37 10.5 57.1 0 88.4-71.6 160-160 160-17.5 0-34.4-2.8-50.2-8L146.9 498.9c-28.1 28.1-73.7 28.1-101.8 0s-28.1-73.7 0-101.8L232 210.2c-5.2-15.8-8-32.6-8-50.2 0-88.4 71.6-160 160-160 20.1 0 39.4 3.7 57.1 10.5 10 3.8 11.8 16.5 4.3 24.1l-88.7 88.7c-3 3-4.7 7.1-4.7 11.3l0 41.4c0 8.8 7.2 16 16 16l41.4 0c4.2 0 8.3-1.7 11.3-4.7l88.7-88.7z"]},Vw={prefix:"fas",iconName:"trash-can",icon:[448,512,[61460,"trash-alt"],"f2ed","M136.7 5.9C141.1-7.2 153.3-16 167.1-16l113.9 0c13.8 0 26 8.8 30.4 21.9L320 32 416 32c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 8.7-26.1zM32 144l384 0 0 304c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-304zm88 64c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24z"]};var Ww={prefix:"fas",iconName:"check",icon:[448,512,[10003,10004],"f00c","M434.8 70.1c14.3 10.4 17.5 30.4 7.1 44.7l-256 352c-5.5 7.6-14 12.3-23.4 13.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l101.5 101.5 234-321.7c10.4-14.3 30.4-17.5 44.7-7.1z"]};var oV={prefix:"fas",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"]},aV=oV;var g3=oV;var nd={prefix:"fas",iconName:"pen",icon:[512,512,[128394],"f304","M352.9 21.2L308 66.1 445.9 204 490.8 159.1C504.4 145.6 512 127.2 512 108s-7.6-37.6-21.2-51.1L455.1 21.2C441.6 7.6 423.2 0 404 0s-37.6 7.6-51.1 21.2zM274.1 100L58.9 315.1c-10.7 10.7-18.5 24.1-22.6 38.7L.9 481.6c-2.3 8.3 0 17.3 6.2 23.4s15.1 8.5 23.4 6.2l127.8-35.5c14.6-4.1 27.9-11.8 38.7-22.6L412 237.9 274.1 100z"]};var rV={prefix:"fas",iconName:"chevron-down",icon:[448,512,[],"f078","M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"]};var sV={prefix:"fas",iconName:"angle-down",icon:[384,512,[8964],"f107","M169.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 306.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"]};var jpA={prefix:"fas",iconName:"arrow-down-short-wide",icon:[576,512,["sort-amount-desc","sort-amount-down-alt"],"f884","M246.6 374.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 306.7 41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM320 32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z"]};var l3=jpA;var qpA={prefix:"fas",iconName:"triangle-exclamation",icon:[512,512,[9888,"exclamation-triangle","warning"],"f071","M256 0c14.7 0 28.2 8.1 35.2 21l216 400c6.7 12.4 6.4 27.4-.8 39.5S486.1 480 472 480L40 480c-14.1 0-27.2-7.4-34.4-19.5s-7.5-27.1-.8-39.5l216-400c7-12.9 20.5-21 35.2-21zm0 352a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.5 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z"]},BI=qpA;var VpA={prefix:"fas",iconName:"scissors",icon:[512,512,[9984,9986,9988,"cut"],"f0c4","M192 256l-39.5 39.5c-12.6-4.9-26.2-7.5-40.5-7.5-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112c0-14.3-2.7-27.9-7.5-40.5L499.2 76.8c7.1-7.1 7.1-18.5 0-25.6-28.3-28.3-74.1-28.3-102.4 0L256 192 216.5 152.5c4.9-12.6 7.5-26.2 7.5-40.5 0-61.9-50.1-112-112-112S0 50.1 0 112 50.1 224 112 224c14.3 0 27.9-2.7 40.5-7.5L192 256zm97.9 97.9L396.8 460.8c28.3 28.3 74.1 28.3 102.4 0 7.1-7.1 7.1-18.5 0-25.6l-145.3-145.3-64 64zM64 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm48 240a48 48 0 1 1 0 96 48 48 0 1 1 0-96z"]},od=VpA;var c3={prefix:"fas",iconName:"arrow-right-arrow-left",icon:[512,512,[8644,"exchange"],"f0ec","M502.6 150.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L402.7 160 32 160c-17.7 0-32-14.3-32-32S14.3 96 32 96l370.7 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3zm-397.3 352l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L109.3 352 480 352c17.7 0 32 14.3 32 32s-14.3 32-32 32l-370.7 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0z"]};var FS={prefix:"fas",iconName:"caret-up",icon:[320,512,[],"f0d8","M140.3 135.2c12.6-10.3 31.1-9.5 42.8 2.2l128 128c9.2 9.2 11.9 22.9 6.9 34.9S301.4 320 288.5 320l-256 0c-12.9 0-24.6-7.8-29.6-19.8S.7 274.5 9.9 265.4l128-128 2.4-2.2z"]};var gV={prefix:"fas",iconName:"down-left-and-up-right-to-center",icon:[512,512,["compress-alt"],"f422","M439.5 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S450.2 240 440.5 240l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87zM72.5 272l144 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S62.8 272 72.5 272z"]};var ad={prefix:"fas",iconName:"plus",icon:[448,512,[10133,61543,"add"],"2b","M256 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 160-160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-160z"]};var kC={prefix:"fas",iconName:"copy",icon:[448,512,[],"f0c5","M192 0c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-200.6c0-17.4-7.1-34.1-19.7-46.2L370.6 17.8C358.7 6.4 342.8 0 326.3 0L192 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-16-64 0 0 16-192 0 0-256 16 0 0-64-16 0z"]};var WpA={prefix:"fas",iconName:"arrow-rotate-right",icon:[512,512,[8635,"arrow-right-rotate","arrow-rotate-forward","redo"],"f01e","M436.7 74.7L448 85.4 448 32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l47.9 0-7.6-7.2c-.2-.2-.4-.4-.6-.6-75-75-196.5-75-271.5 0s-75 196.5 0 271.5 196.5 75 271.5 0c8.2-8.2 15.5-16.9 21.9-26.1 10.1-14.5 30.1-18 44.6-7.9s18 30.1 7.9 44.6c-8.5 12.2-18.2 23.8-29.1 34.7-100 100-262.1 100-362 0S-25 175 75 75c99.9-99.9 261.7-100 361.7-.3z"]};var Zw=WpA;var v0={prefix:"fas",iconName:"caret-down",icon:[320,512,[],"f0d7","M140.3 376.8c12.6 10.2 31.1 9.5 42.8-2.2l128-128c9.2-9.2 11.9-22.9 6.9-34.9S301.4 192 288.5 192l-256 0c-12.9 0-24.6 7.8-29.6 19.8S.7 237.5 9.9 246.6l128 128 2.4 2.2z"]};var ZpA={prefix:"fas",iconName:"arrow-rotate-left",icon:[512,512,[8634,"arrow-left-rotate","arrow-rotate-back","arrow-rotate-backward","undo"],"f0e2","M256 64c-56.8 0-107.9 24.7-143.1 64l47.1 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 192c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0S64 14.3 64 32l0 54.7C110.9 33.6 179.5 0 256 0 397.4 0 512 114.6 512 256S397.4 512 256 512c-87 0-163.9-43.4-210.1-109.7-10.1-14.5-6.6-34.4 7.9-44.6s34.4-6.6 44.6 7.9c34.8 49.8 92.4 82.3 157.6 82.3 106 0 192-86 192-192S362 64 256 64z"]};var Xw=ZpA;var _S={prefix:"fas",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32z"]};var LS={prefix:"fas",iconName:"arrow-down",icon:[384,512,[8595],"f063","M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7-105.4-105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"]};var AnA=su(CV(),1);var IV=Number.isNaN||function(e){return typeof e=="number"&&e!==e};function XpA(t,e){return!!(t===e||IV(t)&&IV(e))}function $pA(t,e){if(t.length!==e.length)return!1;for(var A=0;A{if(typeof n!="object"||!n.name||!n.init)throw new Error("Invalid JSEP plugin format");this.registered[n.name]||(n.init(this.jsep),this.registered[n.name]=n)})}},Qg=class t{static get version(){return"1.4.0"}static toString(){return"JavaScript Expression Parser (JSEP) v"+t.version}static addUnaryOp(e){return t.max_unop_len=Math.max(e.length,t.max_unop_len),t.unary_ops[e]=1,t}static addBinaryOp(e,A,i){return t.max_binop_len=Math.max(e.length,t.max_binop_len),t.binary_ops[e]=A,i?t.right_associative.add(e):t.right_associative.delete(e),t}static addIdentifierChar(e){return t.additional_identifier_chars.add(e),t}static addLiteral(e,A){return t.literals[e]=A,t}static removeUnaryOp(e){return delete t.unary_ops[e],e.length===t.max_unop_len&&(t.max_unop_len=t.getMaxKeyLen(t.unary_ops)),t}static removeAllUnaryOps(){return t.unary_ops={},t.max_unop_len=0,t}static removeIdentifierChar(e){return t.additional_identifier_chars.delete(e),t}static removeBinaryOp(e){return delete t.binary_ops[e],e.length===t.max_binop_len&&(t.max_binop_len=t.getMaxKeyLen(t.binary_ops)),t.right_associative.delete(e),t}static removeAllBinaryOps(){return t.binary_ops={},t.max_binop_len=0,t}static removeLiteral(e){return delete t.literals[e],t}static removeAllLiterals(){return t.literals={},t}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(e){this.expr=e,this.index=0}static parse(e){return new t(e).parse()}static getMaxKeyLen(e){return Math.max(0,...Object.keys(e).map(A=>A.length))}static isDecimalDigit(e){return e>=48&&e<=57}static binaryPrecedence(e){return t.binary_ops[e]||0}static isIdentifierStart(e){return e>=65&&e<=90||e>=97&&e<=122||e>=128&&!t.binary_ops[String.fromCharCode(e)]||t.additional_identifier_chars.has(String.fromCharCode(e))}static isIdentifierPart(e){return t.isIdentifierStart(e)||t.isDecimalDigit(e)}throwError(e){let A=new Error(e+" at character "+this.index);throw A.index=this.index,A.description=e,A}runHook(e,A){if(t.hooks[e]){let i={context:this,node:A};return t.hooks.run(e,i),i.node}return A}searchHook(e){if(t.hooks[e]){let A={context:this};return t.hooks[e].find(function(i){return i.call(A.context,A),A.node}),A.node}}gobbleSpaces(){let e=this.code;for(;e===t.SPACE_CODE||e===t.TAB_CODE||e===t.LF_CODE||e===t.CR_CODE;)e=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let e=this.gobbleExpressions(),A=e.length===1?e[0]:{type:t.COMPOUND,body:e};return this.runHook("after-all",A)}gobbleExpressions(e){let A=[],i,n;for(;this.index0;){if(t.binary_ops.hasOwnProperty(e)&&(!t.isIdentifierStart(this.code)||this.index+e.lengtho.right_a&&C.right_a?i>C.prec:i<=C.prec;for(;n.length>2&&l(n[n.length-2]);)r=n.pop(),A=n.pop().value,a=n.pop(),e={type:t.BINARY_EXP,operator:A,left:a,right:r},n.push(e);e=this.gobbleToken(),e||this.throwError("Expected expression after "+g),n.push(o,e)}for(s=n.length-1,e=n[s];s>1;)e={type:t.BINARY_EXP,operator:n[s-1].value,left:n[s-2],right:e},s-=2;return e}gobbleToken(){let e,A,i,n;if(this.gobbleSpaces(),n=this.searchHook("gobble-token"),n)return this.runHook("after-token",n);if(e=this.code,t.isDecimalDigit(e)||e===t.PERIOD_CODE)return this.gobbleNumericLiteral();if(e===t.SQUOTE_CODE||e===t.DQUOTE_CODE)n=this.gobbleStringLiteral();else if(e===t.OBRACK_CODE)n=this.gobbleArray();else{for(A=this.expr.substr(this.index,t.max_unop_len),i=A.length;i>0;){if(t.unary_ops.hasOwnProperty(A)&&(!t.isIdentifierStart(this.code)||this.index+A.length=A.length&&this.throwError("Unexpected token "+String.fromCharCode(e));break}else if(o===t.COMMA_CODE){if(this.index++,n++,n!==A.length){if(e===t.CPAREN_CODE)this.throwError("Unexpected token ,");else if(e===t.CBRACK_CODE)for(let a=A.length;a":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10,"**":11},right_associative:new Set(["**"]),additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"});Qg.max_unop_len=Qg.getMaxKeyLen(Qg.unary_ops);Qg.max_binop_len=Qg.getMaxKeyLen(Qg.binary_ops);var _C=t=>new Qg(t).parse(),vyA=Object.getOwnPropertyNames(class{});Object.getOwnPropertyNames(Qg).filter(t=>!vyA.includes(t)&&_C[t]===void 0).forEach(t=>{_C[t]=Qg[t]});_C.Jsep=Qg;var byA="ConditionalExpression",MyA={name:"ternary",init(t){t.hooks.add("after-expression",function(A){if(A.node&&this.code===t.QUMARK_CODE){this.index++;let i=A.node,n=this.gobbleExpression();if(n||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===t.COLON_CODE){this.index++;let o=this.gobbleExpression();if(o||this.throwError("Expected expression"),A.node={type:byA,test:i,consequent:n,alternate:o},i.operator&&t.binary_ops[i.operator]<=.9){let a=i;for(;a.right.operator&&t.binary_ops[a.right.operator]<=.9;)a=a.right;A.node.test=a.right,a.right=A.node,A.node=i}}else this.throwError("Expected :")}})}};_C.plugins.register(MyA);var PZ=47,kyA=92,SyA={name:"regex",init(t){t.hooks.add("gobble-token",function(A){if(this.code===PZ){let i=++this.index,n=!1;for(;this.index=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57)a+=this.char;else break}let r;try{r=new RegExp(o,a)}catch(s){this.throwError(s.message)}return A.node={type:t.LITERAL,value:r,raw:this.expr.slice(i-1,this.index)},A.node=this.gobbleTokenProperty(A.node),A.node}this.code===t.OBRACK_CODE?n=!0:n&&this.code===t.CBRACK_CODE&&(n=!1),this.index+=this.code===kyA?2:1}this.throwError("Unclosed Regex")}})}},pR=43,xyA=45,cQ={name:"assignment",assignmentOperators:new Set(["=","*=","**=","/=","%=","+=","-=","<<=",">>=",">>>=","&=","^=","|=","||=","&&=","??="]),updateOperators:[pR,xyA],assignmentPrecedence:.9,init(t){let e=[t.IDENTIFIER,t.MEMBER_EXP];cQ.assignmentOperators.forEach(i=>t.addBinaryOp(i,cQ.assignmentPrecedence,!0)),t.hooks.add("gobble-token",function(n){let o=this.code;cQ.updateOperators.some(a=>a===o&&a===this.expr.charCodeAt(this.index+1))&&(this.index+=2,n.node={type:"UpdateExpression",operator:o===pR?"++":"--",argument:this.gobbleTokenProperty(this.gobbleIdentifier()),prefix:!0},(!n.node.argument||!e.includes(n.node.argument.type))&&this.throwError(`Unexpected ${n.node.operator}`))}),t.hooks.add("after-token",function(n){if(n.node){let o=this.code;cQ.updateOperators.some(a=>a===o&&a===this.expr.charCodeAt(this.index+1))&&(e.includes(n.node.type)||this.throwError(`Unexpected ${n.node.operator}`),this.index+=2,n.node={type:"UpdateExpression",operator:o===pR?"++":"--",argument:n.node,prefix:!1})}}),t.hooks.add("after-expression",function(n){n.node&&A(n.node)});function A(i){cQ.assignmentOperators.has(i.operator)?(i.type="AssignmentExpression",A(i.left),A(i.right)):i.operator||Object.values(i).forEach(n=>{n&&typeof n=="object"&&A(n)})}}};_C.plugins.register(SyA,cQ);_C.addUnaryOp("typeof");_C.addLiteral("null",null);_C.addLiteral("undefined",void 0);var RyA=new Set(["constructor","__proto__","__defineGetter__","__defineSetter__"]),No={evalAst(t,e){switch(t.type){case"BinaryExpression":case"LogicalExpression":return No.evalBinaryExpression(t,e);case"Compound":return No.evalCompound(t,e);case"ConditionalExpression":return No.evalConditionalExpression(t,e);case"Identifier":return No.evalIdentifier(t,e);case"Literal":return No.evalLiteral(t,e);case"MemberExpression":return No.evalMemberExpression(t,e);case"UnaryExpression":return No.evalUnaryExpression(t,e);case"ArrayExpression":return No.evalArrayExpression(t,e);case"CallExpression":return No.evalCallExpression(t,e);case"AssignmentExpression":return No.evalAssignmentExpression(t,e);default:throw SyntaxError("Unexpected expression",t)}},evalBinaryExpression(t,e){return{"||":(i,n)=>i||n(),"&&":(i,n)=>i&&n(),"|":(i,n)=>i|n(),"^":(i,n)=>i^n(),"&":(i,n)=>i&n(),"==":(i,n)=>i==n(),"!=":(i,n)=>i!=n(),"===":(i,n)=>i===n(),"!==":(i,n)=>i!==n(),"<":(i,n)=>i":(i,n)=>i>n(),"<=":(i,n)=>i<=n(),">=":(i,n)=>i>=n(),"<<":(i,n)=>i<>":(i,n)=>i>>n(),">>>":(i,n)=>i>>>n(),"+":(i,n)=>i+n(),"-":(i,n)=>i-n(),"*":(i,n)=>i*n(),"/":(i,n)=>i/n(),"%":(i,n)=>i%n()}[t.operator](No.evalAst(t.left,e),()=>No.evalAst(t.right,e))},evalCompound(t,e){let A;for(let i=0;i-No.evalAst(i,e),"!":i=>!No.evalAst(i,e),"~":i=>~No.evalAst(i,e),"+":i=>+No.evalAst(i,e),typeof:i=>typeof No.evalAst(i,e)}[t.operator](t.argument)},evalArrayExpression(t,e){return t.elements.map(A=>No.evalAst(A,e))},evalCallExpression(t,e){let A=t.arguments.map(n=>No.evalAst(n,e));return No.evalAst(t.callee,e)(...A)},evalAssignmentExpression(t,e){if(t.left.type!=="Identifier")throw SyntaxError("Invalid left-hand side in assignment");let A=t.left.name,i=No.evalAst(t.right,e);return e[A]=i,e[A]}},yR=class{constructor(e){this.code=e,this.ast=_C(this.code)}runInNewContext(e){let A=Object.assign(Object.create(null),e);return No.evalAst(this.ast,A)}};function wI(t,e){return t=t.slice(),t.push(e),t}function vR(t,e){return e=e.slice(),e.unshift(t),e}var bR=class extends Error{constructor(e){super('JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)'),this.avoidNew=!0,this.value=e,this.name="NewError"}};function eo(t,e,A,i,n){if(!(this instanceof eo))try{return new eo(t,e,A,i,n)}catch(a){if(!a.avoidNew)throw a;return a.value}typeof t=="string"&&(n=i,i=A,A=e,e=t,t=null);let o=t&&typeof t=="object";if(t=t||{},this.json=t.json||A,this.path=t.path||e,this.resultType=t.resultType||"value",this.flatten=t.flatten||!1,this.wrap=Object.hasOwn(t,"wrap")?t.wrap:!0,this.sandbox=t.sandbox||{},this.eval=t.eval===void 0?"safe":t.eval,this.ignoreEvalErrors=typeof t.ignoreEvalErrors>"u"?!1:t.ignoreEvalErrors,this.parent=t.parent||null,this.parentProperty=t.parentProperty||null,this.callback=t.callback||i||null,this.otherTypeCallback=t.otherTypeCallback||n||function(){throw new TypeError("You must supply an otherTypeCallback callback option with the @other() operator.")},t.autostart!==!1){let a={path:o?t.path:e};o?"json"in t&&(a.json=t.json):a.json=A;let r=this.evaluate(a);if(!r||typeof r!="object")throw new bR(r);return r}}eo.prototype.evaluate=function(t,e,A,i){let n=this.parent,o=this.parentProperty,{flatten:a,wrap:r}=this;if(this.currResultType=this.resultType,this.currEval=this.eval,this.currSandbox=this.sandbox,A=A||this.callback,this.currOtherTypeCallback=i||this.otherTypeCallback,e=e||this.json,t=t||this.path,t&&typeof t=="object"&&!Array.isArray(t)){if(!t.path&&t.path!=="")throw new TypeError('You must supply a "path" property when providing an object argument to JSONPath.evaluate().');if(!Object.hasOwn(t,"json"))throw new TypeError('You must supply a "json" property when providing an object argument to JSONPath.evaluate().');({json:e}=t),a=Object.hasOwn(t,"flatten")?t.flatten:a,this.currResultType=Object.hasOwn(t,"resultType")?t.resultType:this.currResultType,this.currSandbox=Object.hasOwn(t,"sandbox")?t.sandbox:this.currSandbox,r=Object.hasOwn(t,"wrap")?t.wrap:r,this.currEval=Object.hasOwn(t,"eval")?t.eval:this.currEval,A=Object.hasOwn(t,"callback")?t.callback:A,this.currOtherTypeCallback=Object.hasOwn(t,"otherTypeCallback")?t.otherTypeCallback:this.currOtherTypeCallback,n=Object.hasOwn(t,"parent")?t.parent:n,o=Object.hasOwn(t,"parentProperty")?t.parentProperty:o,t=t.path}if(n=n||null,o=o||null,Array.isArray(t)&&(t=eo.toPathString(t)),!t&&t!==""||!e)return;let s=eo.toPathArray(t);s[0]==="$"&&s.length>1&&s.shift(),this._hasParentSelector=null;let g=this._trace(s,e,["$"],n,o,A).filter(function(l){return l&&!l.isParentSelector});return g.length?!r&&g.length===1&&!g[0].hasArrExpr?this._getPreferredOutput(g[0]):g.reduce((l,C)=>{let I=this._getPreferredOutput(C);return a&&Array.isArray(I)?l=l.concat(I):l.push(I),l},[]):r?[]:void 0};eo.prototype._getPreferredOutput=function(t){let e=this.currResultType;switch(e){case"all":{let A=Array.isArray(t.path)?t.path:eo.toPathArray(t.path);return t.pointer=eo.toPointer(A),t.path=typeof t.path=="string"?t.path:eo.toPathString(t.path),t}case"value":case"parent":case"parentProperty":return t[e];case"path":return eo.toPathString(t[e]);case"pointer":return eo.toPointer(t.path);default:throw new TypeError("Unknown result type")}};eo.prototype._handleCallback=function(t,e,A){if(e){let i=this._getPreferredOutput(t);t.path=typeof t.path=="string"?t.path:eo.toPathString(t.path),e(i,A,t)}};eo.prototype._trace=function(t,e,A,i,n,o,a,r){let s;if(!t.length)return s={path:A,value:e,parent:i,parentProperty:n,hasArrExpr:a},this._handleCallback(s,o,"value"),s;let g=t[0],l=t.slice(1),C=[];function I(d){Array.isArray(d)?d.forEach(B=>{C.push(B)}):C.push(d)}if((typeof g!="string"||r)&&e&&Object.hasOwn(e,g))I(this._trace(l,e[g],wI(A,g),e,g,o,a));else if(g==="*")this._walk(e,d=>{I(this._trace(l,e[d],wI(A,d),e,d,o,!0,!0))});else if(g==="..")I(this._trace(l,e,A,i,n,o,a)),this._walk(e,d=>{typeof e[d]=="object"&&I(this._trace(t.slice(),e[d],wI(A,d),e,d,o,!0))});else{if(g==="^")return this._hasParentSelector=!0,{path:A.slice(0,-1),expr:l,isParentSelector:!0};if(g==="~")return s={path:wI(A,g),value:n,parent:i,parentProperty:null},this._handleCallback(s,o,"property"),s;if(g==="$")I(this._trace(l,e,A,null,null,o,a));else if(/^(-?\d*):(-?\d*):?(\d*)$/u.test(g))I(this._slice(g,l,e,A,i,n,o));else if(g.indexOf("?(")===0){if(this.currEval===!1)throw new Error("Eval [?(expr)] prevented in JSONPath expression.");let d=g.replace(/^\?\((.*?)\)$/u,"$1"),B=/@.?([^?]*)[['](\??\(.*?\))(?!.\)\])[\]']/gu.exec(d);B?this._walk(e,E=>{let Q=[B[2]],f=B[1]?e[E][B[1]]:e[E];this._trace(Q,f,A,i,n,o,!0).length>0&&I(this._trace(l,e[E],wI(A,E),e,E,o,!0))}):this._walk(e,E=>{this._eval(d,e[E],E,A,i,n)&&I(this._trace(l,e[E],wI(A,E),e,E,o,!0))})}else if(g[0]==="("){if(this.currEval===!1)throw new Error("Eval [(expr)] prevented in JSONPath expression.");I(this._trace(vR(this._eval(g,e,A.at(-1),A.slice(0,-1),i,n),l),e,A,i,n,o,a))}else if(g[0]==="@"){let d=!1,B=g.slice(1,-2);switch(B){case"scalar":(!e||!["object","function"].includes(typeof e))&&(d=!0);break;case"boolean":case"string":case"undefined":case"function":typeof e===B&&(d=!0);break;case"integer":Number.isFinite(e)&&!(e%1)&&(d=!0);break;case"number":Number.isFinite(e)&&(d=!0);break;case"nonFinite":typeof e=="number"&&!Number.isFinite(e)&&(d=!0);break;case"object":e&&typeof e===B&&(d=!0);break;case"array":Array.isArray(e)&&(d=!0);break;case"other":d=this.currOtherTypeCallback(e,A,i,n);break;case"null":e===null&&(d=!0);break;default:throw new TypeError("Unknown value type "+B)}if(d)return s={path:A,value:e,parent:i,parentProperty:n},this._handleCallback(s,o,"value"),s}else if(g[0]==="`"&&e&&Object.hasOwn(e,g.slice(1))){let d=g.slice(1);I(this._trace(l,e[d],wI(A,d),e,d,o,a,!0))}else if(g.includes(",")){let d=g.split(",");for(let B of d)I(this._trace(vR(B,l),e,A,i,n,o,!0))}else!r&&e&&Object.hasOwn(e,g)&&I(this._trace(l,e[g],wI(A,g),e,g,o,a,!0))}if(this._hasParentSelector)for(let d=0;d{e(A)})};eo.prototype._slice=function(t,e,A,i,n,o,a){if(!Array.isArray(A))return;let r=A.length,s=t.split(":"),g=s[2]&&Number.parseInt(s[2])||1,l=s[0]&&Number.parseInt(s[0])||0,C=s[1]&&Number.parseInt(s[1])||r;l=l<0?Math.max(0,l+r):Math.min(r,l),C=C<0?Math.max(0,C+r):Math.min(r,C);let I=[];for(let d=l;d{I.push(E)});return I};eo.prototype._eval=function(t,e,A,i,n,o){this.currSandbox._$_parentProperty=o,this.currSandbox._$_parent=n,this.currSandbox._$_property=A,this.currSandbox._$_root=this.json,this.currSandbox._$_v=e;let a=t.includes("@path");a&&(this.currSandbox._$_path=eo.toPathString(i.concat([A])));let r=this.currEval+"Script:"+t;if(!eo.cache[r]){let s=t.replaceAll("@parentProperty","_$_parentProperty").replaceAll("@parent","_$_parent").replaceAll("@property","_$_property").replaceAll("@root","_$_root").replaceAll(/@([.\s)[])/gu,"_$_v$1");if(a&&(s=s.replaceAll("@path","_$_path")),this.currEval==="safe"||this.currEval===!0||this.currEval===void 0)eo.cache[r]=new this.safeVm.Script(s);else if(this.currEval==="native")eo.cache[r]=new this.vm.Script(s);else if(typeof this.currEval=="function"&&this.currEval.prototype&&Object.hasOwn(this.currEval.prototype,"runInNewContext")){let g=this.currEval;eo.cache[r]=new g(s)}else if(typeof this.currEval=="function")eo.cache[r]={runInNewContext:g=>this.currEval(s,g)};else throw new TypeError(`Unknown "eval" property "${this.currEval}"`)}try{return eo.cache[r].runInNewContext(this.currSandbox)}catch(s){if(this.ignoreEvalErrors)return!1;throw new Error("jsonPath: "+s.message+": "+t)}};eo.cache={};eo.toPathString=function(t){let e=t,A=e.length,i="$";for(let n=1;ntypeof e[g]=="function");let o=i.map(g=>e[g]);A=n.reduce((g,l)=>{let C=e[l].toString();return/function/u.test(C)||(C="function "+C),"var "+l+"="+C+";"+g},"")+A,!/(['"])use strict\1/u.test(A)&&!i.includes("arguments")&&(A="var arguments = undefined;"+A),A=A.replace(/;\s*$/u,"");let r=A.lastIndexOf(";"),s=r!==-1?A.slice(0,r+1)+" return "+A.slice(r+1):" return "+A;return new Function(...i,s)(...o)}};eo.prototype.vm={Script:MR};var SR=[],WZ=[];(()=>{let t="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,A=0;e>1;if(t=WZ[i])e=i+1;else return!0;if(e==A)return!1}}function jZ(t){return t>=127462&&t<=127487}var qZ=8205;function ZZ(t,e,A=!0,i=!0){return(A?XZ:_yA)(t,e,i)}function XZ(t,e,A){if(e==t.length)return e;e&&$Z(t.charCodeAt(e))&&AX(t.charCodeAt(e-1))&&e--;let i=kR(t,e);for(e+=VZ(i);e=0&&jZ(kR(t,a));)o++,a-=2;if(o%2==0)break;e+=2}else break}return e}function _yA(t,e,A){for(;e>0;){let i=XZ(t,e-2,A);if(i=56320&&t<57344}function AX(t){return t>=55296&&t<56320}function VZ(t){return t<65536?1:2}var bn=class t{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,A,i){[e,A]=EQ(this,e,A);let n=[];return this.decompose(0,e,n,2),i.length&&i.decompose(0,i.length,n,3),this.decompose(A,this.length,n,1),IQ.from(n,this.length-(A-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,A=this.length){[e,A]=EQ(this,e,A);let i=[];return this.decompose(e,A,i,0),IQ.from(i,A-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let A=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),n=new Qd(this),o=new Qd(e);for(let a=A,r=A;;){if(n.next(a),o.next(a),a=0,n.lineBreak!=o.lineBreak||n.done!=o.done||n.value!=o.value)return!1;if(r+=n.value.length,n.done||r>=i)return!0}}iter(e=1){return new Qd(this,e)}iterRange(e,A=this.length){return new Y5(this,e,A)}iterLines(e,A){let i;if(e==null)i=this.iter();else{A==null&&(A=this.lines+1);let n=this.line(e).from;i=this.iterRange(n,Math.max(n,A==this.lines+1?this.length:A<=1?0:this.line(A-1).to))}return new T5(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?t.empty:e.length<=32?new Hg(e):IQ.from(Hg.split(e,[]))}},Hg=class t extends bn{constructor(e,A=LyA(e)){super(),this.text=e,this.length=A}get lines(){return this.text.length}get children(){return null}lineInner(e,A,i,n){for(let o=0;;o++){let a=this.text[o],r=n+a.length;if((A?i:r)>=e)return new NR(n,r,i,a);n=r+1,i++}}decompose(e,A,i,n){let o=e<=0&&A>=this.length?this:new t(eX(this.text,e,A),Math.min(A,this.length)-Math.max(0,e));if(n&1){let a=i.pop(),r=J5(o.text,a.text.slice(),0,o.length);if(r.length<=32)i.push(new t(r,a.length+o.length));else{let s=r.length>>1;i.push(new t(r.slice(0,s)),new t(r.slice(s)))}}else i.push(o)}replace(e,A,i){if(!(i instanceof t))return super.replace(e,A,i);[e,A]=EQ(this,e,A);let n=J5(this.text,J5(i.text,eX(this.text,0,e)),A),o=this.length+i.length-(A-e);return n.length<=32?new t(n,o):IQ.from(t.split(n,[]),o)}sliceString(e,A=this.length,i=` +`){[e,A]=EQ(this,e,A);let n="";for(let o=0,a=0;o<=A&&ae&&a&&(n+=i),eo&&(n+=r.slice(Math.max(0,e-o),A-o)),o=s+1}return n}flatten(e){for(let A of this.text)e.push(A)}scanIdentical(){return 0}static split(e,A){let i=[],n=-1;for(let o of e)i.push(o),n+=o.length+1,i.length==32&&(A.push(new t(i,n)),i=[],n=-1);return n>-1&&A.push(new t(i,n)),A}},IQ=class t extends bn{constructor(e,A){super(),this.children=e,this.length=A,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,A,i,n){for(let o=0;;o++){let a=this.children[o],r=n+a.length,s=i+a.lines-1;if((A?s:r)>=e)return a.lineInner(e,A,i,n);n=r+1,i=s+1}}decompose(e,A,i,n){for(let o=0,a=0;a<=A&&o=a){let g=n&((a<=e?1:0)|(s>=A?2:0));a>=e&&s<=A&&!g?i.push(r):r.decompose(e-a,A-a,i,g)}a=s+1}}replace(e,A,i){if([e,A]=EQ(this,e,A),i.lines=o&&A<=r){let s=a.replace(e-o,A-o,i),g=this.lines-a.lines+s.lines;if(s.lines>4&&s.lines>g>>6){let l=this.children.slice();return l[n]=s,new t(l,this.length-(A-e)+i.length)}return super.replace(o,r,s)}o=r+1}return super.replace(e,A,i)}sliceString(e,A=this.length,i=` +`){[e,A]=EQ(this,e,A);let n="";for(let o=0,a=0;oe&&o&&(n+=i),ea&&(n+=r.sliceString(e-a,A-a,i)),a=s+1}return n}flatten(e){for(let A of this.children)A.flatten(e)}scanIdentical(e,A){if(!(e instanceof t))return 0;let i=0,[n,o,a,r]=A>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;n+=A,o+=A){if(n==a||o==r)return i;let s=this.children[n],g=e.children[o];if(s!=g)return i+s.scanIdentical(g,A);i+=s.length+1}}static from(e,A=e.reduce((i,n)=>i+n.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let B of e)B.flatten(d);return new Hg(d,A)}let n=Math.max(32,i>>5),o=n<<1,a=n>>1,r=[],s=0,g=-1,l=[];function C(d){let B;if(d.lines>o&&d instanceof t)for(let E of d.children)C(E);else d.lines>a&&(s>a||!s)?(I(),r.push(d)):d instanceof Hg&&s&&(B=l[l.length-1])instanceof Hg&&d.lines+B.lines<=32?(s+=d.lines,g+=d.length+1,l[l.length-1]=new Hg(B.text.concat(d.text),B.length+1+d.length)):(s+d.lines>n&&I(),s+=d.lines,g+=d.length+1,l.push(d))}function I(){s!=0&&(r.push(l.length==1?l[0]:t.from(l,g)),g=-1,s=l.length=0)}for(let d of e)C(d);return I(),r.length==1?r[0]:new t(r,A)}};bn.empty=new Hg([""],0);function LyA(t){let e=-1;for(let A of t)e+=A.length+1;return e}function J5(t,e,A=0,i=1e9){for(let n=0,o=0,a=!0;o=A&&(s>i&&(r=r.slice(0,i-n)),n0?1:(e instanceof Hg?e.text.length:e.children.length)<<1]}nextInner(e,A){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,n=this.nodes[i],o=this.offsets[i],a=o>>1,r=n instanceof Hg?n.text.length:n.children.length;if(a==(A>0?r:0)){if(i==0)return this.done=!0,this.value="",this;A>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((o&1)==(A>0?0:1)){if(this.offsets[i]+=A,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(n instanceof Hg){let s=n.text[a+(A<0?-1:0)];if(this.offsets[i]+=A,s.length>Math.max(0,e))return this.value=e==0?s:A>0?s.slice(e):s.slice(0,s.length-e),this;e-=s.length}else{let s=n.children[a+(A<0?-1:0)];e>s.length?(e-=s.length,this.offsets[i]+=A):(A<0&&this.offsets[i]--,this.nodes.push(s),this.offsets.push(A>0?1:(s instanceof Hg?s.text.length:s.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},Y5=class{constructor(e,A,i){this.value="",this.done=!1,this.cursor=new Qd(e,A>i?-1:1),this.pos=A>i?e.length:0,this.from=Math.min(A,i),this.to=Math.max(A,i)}nextInner(e,A){if(A<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,A<0?this.pos-this.to:this.from-this.pos);let i=A<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:n}=this.cursor.next(e);return this.pos+=(n.length+e)*A,this.value=n.length<=i?n:A<0?n.slice(n.length-i):n.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},T5=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:A,lineBreak:i,value:n}=this.inner.next(e);return A&&this.afterBreak?(this.value="",this.afterBreak=!1):A?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=n,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(bn.prototype[Symbol.iterator]=function(){return this.iter()},Qd.prototype[Symbol.iterator]=Y5.prototype[Symbol.iterator]=T5.prototype[Symbol.iterator]=function(){return this});var NR=class{constructor(e,A,i,n){this.from=e,this.to=A,this.number=i,this.text=n}get length(){return this.to-this.from}};function EQ(t,e,A){return e=Math.max(0,Math.min(t.length,e)),[e,Math.max(e,Math.min(t.length,A))]}function Ta(t,e,A=!0,i=!0){return ZZ(t,e,A,i)}function GyA(t){return t>=56320&&t<57344}function KyA(t){return t>=55296&&t<56320}function Zr(t,e){let A=t.charCodeAt(e);if(!KyA(A)||e+1==t.length)return A;let i=t.charCodeAt(e+1);return GyA(i)?(A-55296<<10)+(i-56320)+65536:A}function Y3(t){return t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode((t>>10)+55296,(t&1023)+56320))}function zg(t){return t<65536?1:2}var FR=/\r\n?|\n/,qr=(function(t){return t[t.Simple=0]="Simple",t[t.TrackDel=1]="TrackDel",t[t.TrackBefore=2]="TrackBefore",t[t.TrackAfter=3]="TrackAfter",t})(qr||(qr={})),yI=class t{constructor(e){this.sections=e}get length(){let e=0;for(let A=0;Ae)return o+(e-n);o+=r}else{if(i!=qr.Simple&&g>=e&&(i==qr.TrackDel&&ne||i==qr.TrackBefore&&ne))return null;if(g>e||g==e&&A<0&&!r)return e==n||A<0?o:o+s;o+=s}n=g}if(e>n)throw new RangeError(`Position ${e} is out of range for changeset of length ${n}`);return o}touchesRange(e,A=e){for(let i=0,n=0;i=0&&n<=A&&r>=e)return nA?"cover":!0;n=r}return!1}toString(){let e="";for(let A=0;A=0?":"+n:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(A=>typeof A!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new t(e)}static create(e){return new t(e)}},Vr=class t extends yI{constructor(e,A){super(e),this.inserted=A}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return _R(this,(A,i,n,o,a)=>e=e.replace(n,n+(i-A),a),!1),e}mapDesc(e,A=!1){return LR(this,e,A,!0)}invert(e){let A=this.sections.slice(),i=[];for(let n=0,o=0;n=0){A[n]=r,A[n+1]=a;let s=n>>1;for(;i.length0&&DI(i,A,o.text),o.forward(l),r+=l}let g=e[a++];for(;r>1].toJSON()))}return e}static of(e,A,i){let n=[],o=[],a=0,r=null;function s(l=!1){if(!l&&!n.length)return;aI||C<0||I>A)throw new RangeError(`Invalid change range ${C} to ${I} (in doc of length ${A})`);let B=d?typeof d=="string"?bn.of(d.split(i||FR)):d:bn.empty,E=B.length;if(C==I&&E==0)return;Ca&&ps(n,C-a,-1),ps(n,I-C,E),DI(o,n,B),a=I}}return g(e),s(!r),r}static empty(e){return new t(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let A=[],i=[];for(let n=0;nr&&typeof a!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(o.length==1)A.push(o[0],0);else{for(;i.length=0&&A<=0&&A==t[n+1]?t[n]+=e:n>=0&&e==0&&t[n]==0?t[n+1]+=A:i?(t[n]+=e,t[n+1]+=A):t.push(e,A)}function DI(t,e,A){if(A.length==0)return;let i=e.length-2>>1;if(i>1])),!(A||a==t.sections.length||t.sections[a+1]<0);)r=t.sections[a++],s=t.sections[a++];e(n,g,o,l,C),n=g,o=l}}}function LR(t,e,A,i=!1){let n=[],o=i?[]:null,a=new hd(t),r=new hd(e);for(let s=-1;;){if(a.done&&r.len||r.done&&a.len)throw new Error("Mismatched change set lengths");if(a.ins==-1&&r.ins==-1){let g=Math.min(a.len,r.len);ps(n,g,-1),a.forward(g),r.forward(g)}else if(r.ins>=0&&(a.ins<0||s==a.i||a.off==0&&(r.len=0&&s=0){let g=0,l=a.len;for(;l;)if(r.ins==-1){let C=Math.min(l,r.len);g+=C,l-=C,r.forward(C)}else if(r.ins==0&&r.lens||a.ins>=0&&a.len>s)&&(r||i.length>g),o.forward2(s),a.forward(s)}}}}var hd=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return A>=e.length?bn.empty:e[A]}textBit(e){let{inserted:A}=this.set,i=this.i-2>>1;return i>=A.length&&!e?bn.empty:A[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},CQ=class t{constructor(e,A,i){this.from=e,this.to=A,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,A=-1){let i,n;return this.empty?i=n=e.mapPos(this.from,A):(i=e.mapPos(this.from,1),n=e.mapPos(this.to,-1)),i==this.from&&n==this.to?this:new t(i,n,this.flags)}extend(e,A=e){if(e<=this.anchor&&A>=this.anchor)return de.range(e,A);let i=Math.abs(e-this.anchor)>Math.abs(A-this.anchor)?e:A;return de.range(this.anchor,i)}eq(e,A=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!A||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return de.range(e.anchor,e.head)}static create(e,A,i){return new t(e,A,i)}},de=class t{constructor(e,A){this.ranges=e,this.mainIndex=A}map(e,A=-1){return e.empty?this:t.create(this.ranges.map(i=>i.map(e,A)),this.mainIndex)}eq(e,A=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new t(e.ranges.map(A=>CQ.fromJSON(A)),e.main)}static single(e,A=e){return new t([t.range(e,A)],0)}static create(e,A=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,n=0;ne?8:0)|o)}static normalized(e,A=0){let i=e[A];e.sort((n,o)=>n.from-o.from),A=e.indexOf(i);for(let n=1;no.head?t.range(s,r):t.range(r,s))}}return new t(e,A)}};function gX(t,e){for(let A of t.ranges)if(A.to>e)throw new RangeError("Selection points outside of document")}var OR=0,We=class t{constructor(e,A,i,n,o){this.combine=e,this.compareInput=A,this.compare=i,this.isStatic=n,this.id=OR++,this.default=e([]),this.extensions=typeof o=="function"?o(this):o}get reader(){return this}static define(e={}){return new t(e.combine||(A=>A),e.compareInput||((A,i)=>A===i),e.compare||(e.combine?(A,i)=>A===i:PR),!!e.static,e.enables)}of(e){return new dQ([],this,0,e)}compute(e,A){if(this.isStatic)throw new Error("Can't compute a static facet");return new dQ(e,this,1,A)}computeN(e,A){if(this.isStatic)throw new Error("Can't compute a static facet");return new dQ(e,this,2,A)}from(e,A){return A||(A=i=>i),this.compute([e],i=>A(i.field(e)))}};function PR(t,e){return t==e||t.length==e.length&&t.every((A,i)=>A===e[i])}var dQ=class{constructor(e,A,i,n){this.dependencies=e,this.facet=A,this.type=i,this.value=n,this.id=OR++}dynamicSlot(e){var A;let i=this.value,n=this.facet.compareInput,o=this.id,a=e[o]>>1,r=this.type==2,s=!1,g=!1,l=[];for(let C of this.dependencies)C=="doc"?s=!0:C=="selection"?g=!0:(((A=e[C.id])!==null&&A!==void 0?A:1)&1)==0&&l.push(e[C.id]);return{create(C){return C.values[a]=i(C),1},update(C,I){if(s&&I.docChanged||g&&(I.docChanged||I.selection)||GR(C,l)){let d=i(C);if(r?!tX(d,C.values[a],n):!n(d,C.values[a]))return C.values[a]=d,1}return 0},reconfigure:(C,I)=>{let d,B=I.config.address[o];if(B!=null){let E=O5(I,B);if(this.dependencies.every(Q=>Q instanceof We?I.facet(Q)===C.facet(Q):Q instanceof wa?I.field(Q,!1)==C.field(Q,!1):!0)||(r?tX(d=i(C),E,n):n(d=i(C),E)))return C.values[a]=E,0}else d=i(C);return C.values[a]=d,1}}}};function tX(t,e,A){if(t.length!=e.length)return!1;for(let i=0;it[s.id]),n=A.map(s=>s.type),o=i.filter(s=>!(s&1)),a=t[e.id]>>1;function r(s){let g=[];for(let l=0;li===n),e);return e.provide&&(A.provides=e.provide(A)),A}create(e){let A=e.facet(G5).find(i=>i.field==this);return(A?.create||this.createF)(e)}slot(e){let A=e[this.id]>>1;return{create:i=>(i.values[A]=this.create(i),1),update:(i,n)=>{let o=i.values[A],a=this.updateF(o,n);return this.compareF(o,a)?0:(i.values[A]=a,1)},reconfigure:(i,n)=>{let o=i.facet(G5),a=n.facet(G5),r;return(r=o.find(s=>s.field==this))&&r!=a.find(s=>s.field==this)?(i.values[A]=r.create(i),1):n.config.address[this.id]!=null?(i.values[A]=n.field(this),0):(i.values[A]=this.create(i),1)}}}init(e){return[this,G5.of({field:this,create:e})]}get extension(){return this}},Bd={lowest:4,low:3,default:2,high:1,highest:0};function L3(t){return e=>new H5(e,t)}var vc={highest:L3(Bd.highest),high:L3(Bd.high),default:L3(Bd.default),low:L3(Bd.low),lowest:L3(Bd.lowest)},H5=class{constructor(e,A){this.inner=e,this.prec=A}},R0=class t{of(e){return new K3(this,e)}reconfigure(e){return t.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},K3=class{constructor(e,A){this.compartment=e,this.inner=A}},z5=class t{constructor(e,A,i,n,o,a){for(this.base=e,this.compartments=A,this.dynamicSlots=i,this.address=n,this.staticValues=o,this.facets=a,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,A,i){let n=[],o=Object.create(null),a=new Map;for(let I of JyA(e,A,a))I instanceof wa?n.push(I):(o[I.facet.id]||(o[I.facet.id]=[])).push(I);let r=Object.create(null),s=[],g=[];for(let I of n)r[I.id]=g.length<<1,g.push(d=>I.slot(d));let l=i?.config.facets;for(let I in o){let d=o[I],B=d[0].facet,E=l&&l[I]||[];if(d.every(Q=>Q.type==0))if(r[B.id]=s.length<<1|1,PR(E,d))s.push(i.facet(B));else{let Q=B.combine(d.map(f=>f.value));s.push(i&&B.compare(Q,i.facet(B))?i.facet(B):Q)}else{for(let Q of d)Q.type==0?(r[Q.id]=s.length<<1|1,s.push(Q.value)):(r[Q.id]=g.length<<1,g.push(f=>Q.dynamicSlot(f)));r[B.id]=g.length<<1,g.push(Q=>UyA(Q,B,d))}}let C=g.map(I=>I(r));return new t(e,a,C,r,s,o)}};function JyA(t,e,A){let i=[[],[],[],[],[]],n=new Map;function o(a,r){let s=n.get(a);if(s!=null){if(s<=r)return;let g=i[s].indexOf(a);g>-1&&i[s].splice(g,1),a instanceof K3&&A.delete(a.compartment)}if(n.set(a,r),Array.isArray(a))for(let g of a)o(g,r);else if(a instanceof K3){if(A.has(a.compartment))throw new RangeError("Duplicate use of compartment in extensions");let g=e.get(a.compartment)||a.inner;A.set(a.compartment,g),o(g,r)}else if(a instanceof H5)o(a.inner,a.prec);else if(a instanceof wa)i[r].push(a),a.provides&&o(a.provides,r);else if(a instanceof dQ)i[r].push(a),a.facet.extensions&&o(a.facet.extensions,Bd.default);else{let g=a.extension;if(!g)throw new Error(`Unrecognized extension value in extension set (${a}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);o(g,r)}}return o(t,Bd.default),i.reduce((a,r)=>a.concat(r))}function G3(t,e){if(e&1)return 2;let A=e>>1,i=t.status[A];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;t.status[A]=4;let n=t.computeSlot(t,t.config.dynamicSlots[A]);return t.status[A]=2|n}function O5(t,e){return e&1?t.config.staticValues[e>>1]:t.values[e>>1]}var iX=We.define(),xR=We.define({combine:t=>t.some(e=>e),static:!0}),lX=We.define({combine:t=>t.length?t[0]:void 0,static:!0}),cX=We.define(),CX=We.define(),IX=We.define(),nX=We.define({combine:t=>t.length?t[0]:!1}),hg=class{constructor(e,A){this.type=e,this.value=A}static define(){return new KR}},KR=class{of(e){return new hg(this,e)}},UR=class{constructor(e){this.map=e}of(e){return new Hi(this,e)}},Hi=(()=>{class t{constructor(A,i){this.type=A,this.value=i}map(A){let i=this.type.map(this.value,A);return i===void 0?void 0:i==this.value?this:new t(this.type,i)}is(A){return this.type==A}static define(A={}){return new UR(A.map||(i=>i))}static mapEffects(A,i){if(!A.length)return A;let n=[];for(let o of A){let a=o.map(i);a&&n.push(a)}return n}}return t.reconfigure=t.define(),t.appendConfig=t.define(),t})(),x0=(()=>{class t{constructor(A,i,n,o,a,r){this.startState=A,this.changes=i,this.selection=n,this.effects=o,this.annotations=a,this.scrollIntoView=r,this._doc=null,this._state=null,n&&gX(n,i.newLength),a.some(s=>s.type==t.time)||(this.annotations=a.concat(t.time.of(Date.now())))}static create(A,i,n,o,a,r){return new t(A,i,n,o,a,r)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(A){for(let i of this.annotations)if(i.type==A)return i.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(A){let i=this.annotation(t.userEvent);return!!(i&&(i==A||i.length>A.length&&i.slice(0,A.length)==A&&i[A.length]=="."))}}return t.time=hg.define(),t.userEvent=hg.define(),t.addToHistory=hg.define(),t.remote=hg.define(),t})();function YyA(t,e){let A=[];for(let i=0,n=0;;){let o,a;if(i=t[i]))o=t[i++],a=t[i++];else if(n=0;n--){let o=i[n](t);o instanceof x0?t=o:Array.isArray(o)&&o.length==1&&o[0]instanceof x0?t=o[0]:t=BX(e,BQ(o),!1)}return t}function HyA(t){let e=t.startState,A=e.facet(IX),i=t;for(let n=A.length-1;n>=0;n--){let o=A[n](t);o&&Object.keys(o).length&&(i=dX(i,JR(e,o,t.changes.newLength),!0))}return i==t?t:x0.create(e,t.changes,t.selection,i.effects,i.annotations,i.scrollIntoView)}var zyA=[];function BQ(t){return t==null?zyA:Array.isArray(t)?t:[t]}var Fo=(function(t){return t[t.Word=0]="Word",t[t.Space=1]="Space",t[t.Other=2]="Other",t})(Fo||(Fo={})),OyA=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,YR;try{YR=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function PyA(t){if(YR)return YR.test(t);for(let e=0;e"\x80"&&(A.toUpperCase()!=A.toLowerCase()||OyA.test(A)))return!0}return!1}function jyA(t){return e=>{if(!/\S/.test(e))return Fo.Space;if(PyA(e))return Fo.Word;for(let A=0;A-1)return Fo.Word;return Fo.Other}}var $a=(()=>{class t{constructor(A,i,n,o,a,r){this.config=A,this.doc=i,this.selection=n,this.values=o,this.status=A.statusTemplate.slice(),this.computeSlot=a,r&&(r._state=this);for(let s=0;so.set(l,g)),i=null),o.set(s.value.compartment,s.value.extension)):s.is(Hi.reconfigure)?(i=null,n=s.value):s.is(Hi.appendConfig)&&(i=null,n=BQ(n).concat(s.value));let a;i?a=A.startState.values.slice():(i=z5.resolve(n,o,this),a=new t(i,this.doc,this.selection,i.dynamicSlots.map(()=>null),(g,l)=>l.reconfigure(g,this),null).values);let r=A.startState.facet(xR)?A.newSelection:A.newSelection.asSingle();new t(i,A.newDoc,r,a,(s,g)=>g.update(s,A),A)}replaceSelection(A){return typeof A=="string"&&(A=this.toText(A)),this.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:A},range:de.cursor(i.from+A.length)}))}changeByRange(A){let i=this.selection,n=A(i.ranges[0]),o=this.changes(n.changes),a=[n.range],r=BQ(n.effects);for(let s=1;sr.spec.fromJSON(s,g)))}}return t.create({doc:A.doc,selection:de.fromJSON(A.selection),extensions:i.extensions?o.concat([i.extensions]):o})}static create(A={}){let i=z5.resolve(A.extensions||[],new Map),n=A.doc instanceof bn?A.doc:bn.of((A.doc||"").split(i.staticFacet(t.lineSeparator)||FR)),o=A.selection?A.selection instanceof de?A.selection:de.single(A.selection.anchor,A.selection.head):de.single(0);return gX(o,n.length),i.staticFacet(xR)||(o=o.asSingle()),new t(i,n,o,i.dynamicSlots.map(()=>null),(a,r)=>r.create(a),null)}get tabSize(){return this.facet(t.tabSize)}get lineBreak(){return this.facet(t.lineSeparator)||` +`}get readOnly(){return this.facet(nX)}phrase(A,...i){for(let n of this.facet(t.phrases))if(Object.prototype.hasOwnProperty.call(n,A)){A=n[A];break}return i.length&&(A=A.replace(/\$(\$|\d*)/g,(n,o)=>{if(o=="$")return"$";let a=+(o||1);return!a||a>i.length?n:i[a-1]})),A}languageDataAt(A,i,n=-1){let o=[];for(let a of this.facet(iX))for(let r of a(this,i,n))Object.prototype.hasOwnProperty.call(r,A)&&o.push(r[A]);return o}charCategorizer(A){let i=this.languageDataAt("wordChars",A);return jyA(i.length?i[0]:"")}wordAt(A){let{text:i,from:n,length:o}=this.doc.lineAt(A),a=this.charCategorizer(A),r=A-n,s=A-n;for(;r>0;){let g=Ta(i,r,!1);if(a(i.slice(g,r))!=Fo.Word)break;r=g}for(;se.length?e[0]:4}),t.lineSeparator=lX,t.readOnly=nX,t.phrases=We.define({compare(e,A){let i=Object.keys(e),n=Object.keys(A);return i.length==n.length&&i.every(o=>e[o]==A[o])}}),t.languageData=iX,t.changeFilter=cX,t.transactionFilter=CX,t.transactionExtender=IX,t})();R0.reconfigure=Hi.define();function kr(t,e,A={}){let i={};for(let n of t)for(let o of Object.keys(n)){let a=n[o],r=i[o];if(r===void 0)i[o]=a;else if(!(r===a||a===void 0))if(Object.hasOwnProperty.call(A,o))i[o]=A[o](r,a);else throw new Error("Config merge conflict for field "+o)}for(let n in e)i[n]===void 0&&(i[n]=e[n]);return i}var bl=class{eq(e){return this==e}range(e,A=e){return U3.create(e,A,this)}};bl.prototype.startSide=bl.prototype.endSide=0;bl.prototype.point=!1;bl.prototype.mapMode=qr.TrackDel;function jR(t,e){return t==e||t.constructor==e.constructor&&t.eq(e)}var U3=class t{constructor(e,A,i){this.from=e,this.to=A,this.value=i}static create(e,A,i){return new t(e,A,i)}};function TR(t,e){return t.from-e.from||t.value.startSide-e.value.startSide}var HR=class t{constructor(e,A,i,n){this.from=e,this.to=A,this.value=i,this.maxPoint=n}get length(){return this.to[this.to.length-1]}findIndex(e,A,i,n=0){let o=i?this.to:this.from;for(let a=n,r=o.length;;){if(a==r)return a;let s=a+r>>1,g=o[s]-e||(i?this.value[s].endSide:this.value[s].startSide)-A;if(s==a)return g>=0?a:r;g>=0?r=s:a=s+1}}between(e,A,i,n){for(let o=this.findIndex(A,-1e9,!0),a=this.findIndex(i,1e9,!1,o);od||I==d&&g.startSide>0&&g.endSide<=0)continue;(d-I||g.endSide-g.startSide)<0||(a<0&&(a=I),g.point&&(r=Math.max(r,d-I)),i.push(g),n.push(I-a),o.push(d-a))}return{mapped:i.length?new t(n,o,i,r):null,pos:a}}},to=(()=>{class t{constructor(A,i,n,o){this.chunkPos=A,this.chunk=i,this.nextLayer=n,this.maxPoint=o}static create(A,i,n,o){return new t(A,i,n,o)}get length(){let A=this.chunk.length-1;return A<0?0:Math.max(this.chunkEnd(A),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let A=this.nextLayer.size;for(let i of this.chunk)A+=i.value.length;return A}chunkEnd(A){return this.chunkPos[A]+this.chunk[A].length}update(A){let{add:i=[],sort:n=!1,filterFrom:o=0,filterTo:a=this.length}=A,r=A.filter;if(i.length==0&&!r)return this;if(n&&(i=i.slice().sort(TR)),this.isEmpty)return i.length?t.of(i):this;let s=new P5(this,null,-1).goto(0),g=0,l=[],C=new Wr;for(;s.value||g=0){let I=i[g++];C.addInner(I.from,I.to,I.value)||l.push(I)}else s.rangeIndex==1&&s.chunkIndexthis.chunkEnd(s.chunkIndex)||as.to||a=a&&A<=a+r.length&&r.between(a,A-a,i-a,n)===!1)return}this.nextLayer.between(A,i,n)}}iter(A=0){return J3.from([this]).goto(A)}get isEmpty(){return this.nextLayer==this}static iter(A,i=0){return J3.from(A).goto(i)}static compare(A,i,n,o,a=-1){let r=A.filter(I=>I.maxPoint>0||!I.isEmpty&&I.maxPoint>=a),s=i.filter(I=>I.maxPoint>0||!I.isEmpty&&I.maxPoint>=a),g=oX(r,s,n),l=new Ed(r,g,a),C=new Ed(s,g,a);n.iterGaps((I,d,B)=>aX(l,I,C,d,B,o)),n.empty&&n.length==0&&aX(l,0,C,0,0,o)}static eq(A,i,n=0,o){o==null&&(o=999999999);let a=A.filter(C=>!C.isEmpty&&i.indexOf(C)<0),r=i.filter(C=>!C.isEmpty&&A.indexOf(C)<0);if(a.length!=r.length)return!1;if(!a.length)return!0;let s=oX(a,r),g=new Ed(a,s,0).goto(n),l=new Ed(r,s,0).goto(n);for(;;){if(g.to!=l.to||!zR(g.active,l.active)||g.point&&(!l.point||!jR(g.point,l.point)))return!1;if(g.to>o)return!0;g.next(),l.next()}}static spans(A,i,n,o,a=-1){let r=new Ed(A,null,a).goto(i),s=i,g=r.openStart;for(;;){let l=Math.min(r.to,n);if(r.point){let C=r.activeForPoint(r.to),I=r.pointFroms&&(o.span(s,l,r.active,g),g=r.openEnd(l));if(r.to>n)return g+(r.point&&r.to>n?1:0);s=r.to,r.next()}}static of(A,i=!1){let n=new Wr;for(let o of A instanceof U3?[A]:i?qyA(A):A)n.add(o.from,o.to,o.value);return n.finish()}static join(A){if(!A.length)return t.empty;let i=A[A.length-1];for(let n=A.length-2;n>=0;n--)for(let o=A[n];o!=t.empty;o=o.nextLayer)i=new t(o.chunkPos,o.chunk,i,Math.max(o.maxPoint,i.maxPoint));return i}}return t.empty=new t([],[],null,-1),t})();function qyA(t){if(t.length>1)for(let e=t[0],A=1;A0)return t.slice().sort(TR);e=i}return t}to.empty.nextLayer=to.empty;var Wr=class t{finishChunk(e){this.chunks.push(new HR(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,A,i){this.addInner(e,A,i)||(this.nextLayer||(this.nextLayer=new t)).add(e,A,i)}addInner(e,A,i){let n=e-this.lastTo||i.startSide-this.last.endSide;if(n<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return n<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(A-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=A,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,A-e)),!0)}addChunk(e,A){if((e-this.lastTo||A.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,A.maxPoint),this.chunks.push(A),this.chunkPos.push(e);let i=A.value.length-1;return this.last=A.value[i],this.lastFrom=A.from[i]+e,this.lastTo=A.to[i]+e,!0}finish(){return this.finishInner(to.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let A=to.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,A}};function oX(t,e,A){let i=new Map;for(let o of t)for(let a=0;a=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&n.push(new P5(a,A,i,o));return n.length==1?n[0]:new t(n)}get startSide(){return this.value?this.value.startSide:0}goto(e,A=-1e9){for(let i of this.heap)i.goto(e,A);for(let i=this.heap.length>>1;i>=0;i--)RR(this.heap,i);return this.next(),this}forward(e,A){for(let i of this.heap)i.forward(e,A);for(let i=this.heap.length>>1;i>=0;i--)RR(this.heap,i);(this.to-e||this.value.endSide-A)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),RR(this.heap,0)}}};function RR(t,e){for(let A=t[e];;){let i=(e<<1)+1;if(i>=t.length)break;let n=t[i];if(i+1=0&&(n=t[i+1],i++),A.compare(n)<0)break;t[i]=A,t[e]=n,e=i}}var Ed=class{constructor(e,A,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=J3.from(e,A,i)}goto(e,A=-1e9){return this.cursor.goto(e,A),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=A,this.openStart=-1,this.next(),this}forward(e,A){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-A)<0;)this.removeActive(this.minActive);this.cursor.forward(e,A)}removeActive(e){K5(this.active,e),K5(this.activeTo,e),K5(this.activeRank,e),this.minActive=rX(this.active,this.activeTo)}addActive(e){let A=0,{value:i,to:n,rank:o}=this.cursor;for(;A0;)A++;U5(this.active,A,i),U5(this.activeTo,A,n),U5(this.activeRank,A,o),e&&U5(e,A,this.cursor.from),this.minActive=rX(this.active,this.activeTo)}next(){let e=this.to,A=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let n=this.minActive;if(n>-1&&(this.activeTo[n]-this.cursor.from||this.active[n].endSide-this.cursor.startSide)<0){if(this.activeTo[n]>e){this.to=this.activeTo[n],this.endSide=this.active[n].endSide;break}this.removeActive(n),i&&K5(i,n)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let o=this.cursor.value;if(!o.point)this.addActive(i),this.cursor.next();else if(A&&this.cursor.to==this.to&&this.cursor.from=0&&i[n]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&A.push(this.active[i]);return A.reverse()}openEnd(e){let A=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)A++;return A}};function aX(t,e,A,i,n,o){t.goto(e),A.goto(i);let a=i+n,r=i,s=i-e,g=!!o.boundChange;for(let l=!1;;){let C=t.to+s-A.to,I=C||t.endSide-A.endSide,d=I<0?t.to+s:A.to,B=Math.min(d,a);if(t.point||A.point?(t.point&&A.point&&jR(t.point,A.point)&&zR(t.activeForPoint(t.to),A.activeForPoint(A.to))||o.comparePoint(r,B,t.point,A.point),l=!1):(l&&o.boundChange(r),B>r&&!zR(t.active,A.active)&&o.compareRange(r,B,t.active,A.active),g&&Ba)break;r=d,I<=0&&t.next(),I>=0&&A.next()}}function zR(t,e){if(t.length!=e.length)return!1;for(let A=0;A=e;i--)t[i+1]=t[i];t[e]=A}function rX(t,e){let A=-1,i=1e9;for(let n=0;n=e)return n;if(n==t.length)break;o+=t.charCodeAt(n)==9?A-o%A:1,n=Ta(t,n)}return i===!0?-1:t.length}var EX=typeof Symbol>"u"?"__\u037C":Symbol.for("\u037C"),qR=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),QX=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},Ml=class{constructor(e,A){this.rules=[];let{finish:i}=A||{};function n(a){return/^@/.test(a)?[a]:a.split(/,\s*/)}function o(a,r,s,g){let l=[],C=/^@(\w+)\b/.exec(a[0]),I=C&&C[1]=="keyframes";if(C&&r==null)return s.push(a[0]+";");for(let d in r){let B=r[d];if(/&/.test(d))o(d.split(/,\s*/).map(E=>a.map(Q=>E.replace(/&/,Q))).reduce((E,Q)=>E.concat(Q)),B,s);else if(B&&typeof B=="object"){if(!C)throw new RangeError("The value of a property ("+d+") should be a primitive value.");o(n(d),B,l,I)}else B!=null&&l.push(d.replace(/_.*/,"").replace(/[A-Z]/g,E=>"-"+E.toLowerCase())+": "+B+";")}(l.length||I)&&s.push((i&&!C&&!g?a.map(i):a).join(", ")+" {"+l.join(" ")+"}")}for(let a in e)o(n(a),e[a],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=QX[EX]||1;return QX[EX]=e+1,"\u037C"+e.toString(36)}static mount(e,A,i){let n=e[qR],o=i&&i.nonce;n?o&&n.setNonce(o):n=new VR(e,o),n.mount(Array.isArray(A)?A:[A],e)}},hX=new Map,VR=class{constructor(e,A){let i=e.ownerDocument||e,n=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&n.CSSStyleSheet){let o=hX.get(i);if(o)return e[qR]=o;this.sheet=new n.CSSStyleSheet,hX.set(i,this)}else this.styleTag=i.createElement("style"),A&&this.styleTag.setAttribute("nonce",A);this.modules=[],e[qR]=this}mount(e,A){let i=this.sheet,n=0,o=0;for(let a=0;a-1&&(this.modules.splice(s,1),o--,s=-1),s==-1){if(this.modules.splice(o++,0,r),i)for(let g=0;g",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},VyA=typeof navigator<"u"&&/Mac/.test(navigator.platform),WyA=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(ar=0;ar<10;ar++)GC[48+ar]=GC[96+ar]=String(ar);var ar;for(ar=1;ar<=24;ar++)GC[ar+111]="F"+ar;var ar;for(ar=65;ar<=90;ar++)GC[ar]=String.fromCharCode(ar+32),QQ[ar]=String.fromCharCode(ar);var ar;for(q5 in GC)QQ.hasOwnProperty(q5)||(QQ[q5]=GC[q5]);var q5;function uX(t){var e=VyA&&t.metaKey&&t.shiftKey&&!t.ctrlKey&&!t.altKey||WyA&&t.shiftKey&&t.key&&t.key.length==1||t.key=="Unidentified",A=!e&&t.key||(t.shiftKey?QQ:GC)[t.keyCode]||t.key||"Unidentified";return A=="Esc"&&(A="Escape"),A=="Del"&&(A="Delete"),A=="Left"&&(A="ArrowLeft"),A=="Up"&&(A="ArrowUp"),A=="Right"&&(A="ArrowRight"),A=="Down"&&(A="ArrowDown"),A}function io(){var t=arguments[0];typeof t=="string"&&(t=document.createElement(t));var e=1,A=arguments[1];if(A&&typeof A=="object"&&A.nodeType==null&&!Array.isArray(A)){for(var i in A)if(Object.prototype.hasOwnProperty.call(A,i)){var n=A[i];typeof n=="string"?t.setAttribute(i,n):n!=null&&(t[i]=n)}e++}for(;e2),gt={mac:wX||/Mac/.test(Hs.platform),windows:/Win/.test(Hs.platform),linux:/Linux|X11/.test(Hs.platform),ie:bD,ie_version:g$?rN.documentMode||6:gN?+gN[1]:sN?+sN[1]:0,gecko:mX,gecko_version:mX?+(/Firefox\/(\d+)/.exec(Hs.userAgent)||[0,0])[1]:0,chrome:!!WR,chrome_version:WR?+WR[1]:0,ios:wX,android:/Android\b/.test(Hs.userAgent),webkit:pX,webkit_version:pX?+(/\bAppleWebKit\/(\d+)/.exec(Hs.userAgent)||[0,0])[1]:0,safari:lN,safari_version:lN?+(/\bVersion\/(\d+(\.\d+)?)/.exec(Hs.userAgent)||[0,0])[1]:0,tabSize:rN.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function AF(t,e){for(let A in t)A=="class"&&e.class?e.class+=" "+t.class:A=="style"&&e.style?e.style+=";"+t.style:e[A]=t[A];return e}var gD=Object.create(null);function eF(t,e,A){if(t==e)return!0;t||(t=gD),e||(e=gD);let i=Object.keys(t),n=Object.keys(e);if(i.length-(A&&i.indexOf(A)>-1?1:0)!=n.length-(A&&n.indexOf(A)>-1?1:0))return!1;for(let o of i)if(o!=A&&(n.indexOf(o)==-1||t[o]!==e[o]))return!1;return!0}function ZyA(t,e){for(let A=t.attributes.length-1;A>=0;A--){let i=t.attributes[A].name;e[i]==null&&t.removeAttribute(i)}for(let A in e){let i=e[A];A=="style"?t.style.cssText=i:t.getAttribute(A)!=i&&t.setAttribute(A,i)}}function DX(t,e,A){let i=!1;if(e)for(let n in e)A&&n in A||(i=!0,n=="style"?t.style.cssText="":t.removeAttribute(n));if(A)for(let n in A)e&&e[n]==A[n]||(i=!0,n=="style"?t.style.cssText=A[n]:t.setAttribute(n,A[n]));return i}function XyA(t){let e=Object.create(null);for(let A=0;A0?3e8:-4e8:A>0?1e8:-1e8,new md(e,A,A,i,e.widget||null,!1)}static replace(e){let A=!!e.block,i,n;if(e.isBlockGap)i=-5e8,n=4e8;else{let{start:o,end:a}=l$(e,A);i=(o?A?-3e8:-1:5e8)-1,n=(a?A?2e8:1:-6e8)+1}return new md(e,i,n,A,e.widget||null,!0)}static line(e){return new tf(e)}static set(e,A=!1){return to.of(e,A)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};Dt.none=to.empty;var ef=class t extends Dt{constructor(e){let{start:A,end:i}=l$(e);super(A?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?AF(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||gD}eq(e){return this==e||e instanceof t&&this.tagName==e.tagName&&eF(this.attrs,e.attrs)}range(e,A=e){if(e>=A)throw new RangeError("Mark decorations may not be empty");return super.range(e,A)}};ef.prototype.point=!1;var tf=class t extends Dt{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof t&&this.spec.class==e.spec.class&&eF(this.spec.attributes,e.spec.attributes)}range(e,A=e){if(A!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,A)}};tf.prototype.mapMode=qr.TrackBefore;tf.prototype.point=!0;var md=class t extends Dt{constructor(e,A,i,n,o,a){super(A,i,o,e),this.block=n,this.isReplace=a,this.mapMode=n?A<=0?qr.TrackBefore:qr.TrackAfter:qr.TrackDel}get type(){return this.startSide!=this.endSide?Xr.WidgetRange:this.startSide<=0?Xr.WidgetBefore:Xr.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof t&&$yA(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,A=e){if(this.isReplace&&(e>A||e==A&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&A!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,A)}};md.prototype.point=!0;function l$(t,e=!1){let{inclusiveStart:A,inclusiveEnd:i}=t;return A==null&&(A=t.inclusive),i==null&&(i=t.inclusive),{start:A??e,end:i??e}}function $yA(t,e){return t==e||!!(t&&e&&t.compare(e))}function pQ(t,e,A,i=0){let n=A.length-1;n>=0&&A[n]+i>=t?A[n]=Math.max(A[n],e):A.push(t,e)}var lD=class t extends bl{constructor(e,A){super(),this.tagName=e,this.attributes=A}eq(e){return e==this||e instanceof t&&this.tagName==e.tagName&&eF(this.attributes,e.attributes)}static create(e){return new t(e.tagName,e.attributes||gD)}static set(e,A=!1){return to.of(e,A)}};lD.prototype.startSide=lD.prototype.endSide=-1;function DQ(t){let e;return t.nodeType==11?e=t.getSelection?t:t.ownerDocument:e=t,e.getSelection()}function cN(t,e){return e?t==e||t.contains(e.nodeType!=1?e.parentNode:e):!1}function P3(t,e){if(!e.anchorNode)return!1;try{return cN(t,e.anchorNode)}catch{return!1}}function nD(t){return t.nodeType==3?nf(t,0,t.nodeValue.length).getClientRects():t.nodeType==1?t.getClientRects():[]}function j3(t,e,A,i){return A?yX(t,e,A,i,-1)||yX(t,e,A,i,1):!1}function kI(t){for(var e=0;;e++)if(t=t.previousSibling,!t)return e}function cD(t){return t.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(t.nodeName)}function yX(t,e,A,i,n){for(;;){if(t==A&&e==i)return!0;if(e==(n<0?0:UC(t))){if(t.nodeName=="DIV")return!1;let o=t.parentNode;if(!o||o.nodeType!=1)return!1;e=kI(t)+(n<0?0:1),t=o}else if(t.nodeType==1){if(t=t.childNodes[e+(n<0?-1:0)],t.nodeType==1&&t.contentEditable=="false")return!1;e=n<0?UC(t):0}else return!1}}function UC(t){return t.nodeType==3?t.nodeValue.length:t.childNodes.length}function CD(t,e){let A=e?t.left:t.right;return{left:A,right:A,top:t.top,bottom:t.bottom}}function AvA(t){let e=t.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:t.innerWidth,top:0,bottom:t.innerHeight}}function c$(t,e){let A=e.width/t.offsetWidth,i=e.height/t.offsetHeight;return(A>.995&&A<1.005||!isFinite(A)||Math.abs(e.width-t.offsetWidth)<1)&&(A=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-t.offsetHeight)<1)&&(i=1),{scaleX:A,scaleY:i}}function evA(t,e,A,i,n,o,a,r){let s=t.ownerDocument,g=s.defaultView||window;for(let l=t,C=!1;l&&!C;)if(l.nodeType==1){let I,d=l==s.body,B=1,E=1;if(d)I=AvA(g);else{if(/^(fixed|sticky)$/.test(getComputedStyle(l).position)&&(C=!0),l.scrollHeight<=l.clientHeight&&l.scrollWidth<=l.clientWidth){l=l.assignedSlot||l.parentNode;continue}let b=l.getBoundingClientRect();({scaleX:B,scaleY:E}=c$(l,b)),I={left:b.left,right:b.left+l.clientWidth*B,top:b.top,bottom:b.top+l.clientHeight*E}}let Q=0,f=0;if(n=="nearest")e.top0&&e.bottom>I.bottom+f&&(f=e.bottom-I.bottom+a)):e.bottom>I.bottom&&(f=e.bottom-I.bottom+a,A<0&&e.top-f0&&e.right>I.right+Q&&(Q=e.right-I.right+o)):e.right>I.right&&(Q=e.right-I.right+o,A<0&&e.leftI.bottom||e.leftI.right)&&(e={left:Math.max(e.left,I.left),right:Math.min(e.right,I.right),top:Math.max(e.top,I.top),bottom:Math.min(e.bottom,I.bottom)}),l=l.assignedSlot||l.parentNode}else if(l.nodeType==11)l=l.host;else break}function tvA(t){let e=t.ownerDocument,A,i;for(let n=t.parentNode;n&&!(n==e.body||A&&i);)if(n.nodeType==1)!i&&n.scrollHeight>n.clientHeight&&(i=n),!A&&n.scrollWidth>n.clientWidth&&(A=n),n=n.assignedSlot||n.parentNode;else if(n.nodeType==11)n=n.host;else break;return{x:A,y:i}}var CN=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:A,focusNode:i}=e;this.set(A,Math.min(e.anchorOffset,A?UC(A):0),i,Math.min(e.focusOffset,i?UC(i):0))}set(e,A,i,n){this.anchorNode=e,this.anchorOffset=A,this.focusNode=i,this.focusOffset=n}},ud=null;gt.safari&>.safari_version>=26&&(ud=!1);function C$(t){if(t.setActive)return t.setActive();if(ud)return t.focus(ud);let e=[];for(let A=t;A&&(e.push(A,A.scrollTop,A.scrollLeft),A!=A.ownerDocument);A=A.parentNode);if(t.focus(ud==null?{get preventScroll(){return ud={preventScroll:!0},!0}}:void 0),!ud){ud=!1;for(let A=0;AMath.max(1,t.scrollHeight-t.clientHeight-4)}function d$(t,e){for(let A=t,i=e;;){if(A.nodeType==3&&i>0)return{node:A,offset:i};if(A.nodeType==1&&i>0){if(A.contentEditable=="false")return null;A=A.childNodes[i-1],i=UC(A)}else if(A.parentNode&&!cD(A))i=kI(A),A=A.parentNode;else return null}}function B$(t,e){for(let A=t,i=e;;){if(A.nodeType==3&&i=A){if(r.level==i)return a;(o<0||(n!=0?n<0?r.fromA:e[o].level>r.level))&&(o=a)}}if(o<0)throw new RangeError("Index out of range");return o}};function h$(t,e){if(t.length!=e.length)return!1;for(let A=0;A=0;E-=3)if(N0[E+1]==-d){let Q=N0[E+2],f=Q&2?n:Q&4?Q&1?o:n:0;f&&(Vo[C]=Vo[N0[E]]=f),r=E;break}}else{if(N0.length==189)break;N0[r++]=C,N0[r++]=I,N0[r++]=s}else if((B=Vo[C])==2||B==1){let E=B==n;s=E?0:1;for(let Q=r-3;Q>=0;Q-=3){let f=N0[Q+2];if(f&2)break;if(E)N0[Q+2]|=2;else{if(f&4)break;N0[Q+2]|=4}}}}}function lvA(t,e,A,i){for(let n=0,o=i;n<=A.length;n++){let a=n?A[n-1].to:t,r=ns;)B==Q&&(B=A[--E].from,Q=E?A[E-1].to:t),Vo[--B]=d;s=l}else o=g,s++}}}function dN(t,e,A,i,n,o,a){let r=i%2?2:1;if(i%2==n%2)for(let s=e,g=0;ss&&a.push(new Mc(s,E.from,d));let Q=E.direction==pd!=!(d%2);BN(t,Q?i+1:i,n,E.inner,E.from,E.to,a),s=E.to}B=E.to}else{if(B==A||(l?Vo[B]!=r:Vo[B]==r))break;B++}I?dN(t,s,B,i+1,n,I,a):se;){let l=!0,C=!1;if(!g||s>o[g-1].to){let E=Vo[s-1];E!=r&&(l=!1,C=E==16)}let I=!l&&r==1?[]:null,d=l?i:i+1,B=s;A:for(;;)if(g&&B==o[g-1].to){if(C)break A;let E=o[--g];if(!l)for(let Q=E.from,f=g;;){if(Q==e)break A;if(f&&o[f-1].to==Q)Q=o[--f].from;else{if(Vo[Q-1]==r)break A;break}}if(I)I.push(E);else{E.toVo.length;)Vo[Vo.length]=256;let i=[],n=e==pd?0:1;return BN(t,n,n,A,0,t.length,i),i}function u$(t){return[new Mc(0,t,0)]}var f$="";function CvA(t,e,A,i,n){var o;let a=i.head-t.from,r=Mc.find(e,a,(o=i.bidiLevel)!==null&&o!==void 0?o:-1,i.assoc),s=e[r],g=s.side(n,A);if(a==g){let I=r+=n?1:-1;if(I<0||I>=e.length)return null;s=e[r=I],a=s.side(!n,A),g=s.side(n,A)}let l=Ta(t.text,a,s.forward(n,A));(ls.to)&&(l=g),f$=t.text.slice(Math.min(a,l),Math.max(a,l));let C=r==(n?e.length-1:0)?null:e[r+(n?1:-1)];return C&&l==g&&C.level+(n?0:1)t.some(e=>e)}),b$=We.define({combine:t=>t.some(e=>e)}),M$=We.define(),q3=class t{constructor(e,A="nearest",i="nearest",n=5,o=5,a=!1){this.range=e,this.y=A,this.x=i,this.yMargin=n,this.xMargin=o,this.isSnapshot=a}map(e){return e.empty?this:new t(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new t(de.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},V5=Hi.define({map:(t,e)=>t.map(e)}),k$=Hi.define();function Sr(t,e,A){let i=t.facet(D$);i.length?i[0](e):window.onerror&&window.onerror(String(e),A,void 0,void 0,e)||(A?console.error(A+":",e):console.error(e))}var KC=We.define({combine:t=>t.length?t[0]:!0}),dvA=0,hQ=We.define({combine(t){return t.filter((e,A)=>{for(let i=0;i{let s=[];return a&&s.push(MD.of(g=>{let l=g.plugin(r);return l?a(l):Dt.none})),o&&s.push(o(r)),s})}static fromClass(e,A){return t.define((i,n)=>new e(i,n),A)}},V3=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let A=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(A)}catch(i){if(Sr(A.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(A){Sr(e.state,A,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var A;if(!((A=this.value)===null||A===void 0)&&A.destroy)try{this.value.destroy()}catch(i){Sr(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},MX=We.define(),EN=We.define(),MD=We.define(),S$=We.define(),oF=We.define(),rf=We.define(),x$=We.define();function kX(t,e){let A=t.state.facet(x$);if(!A.length)return A;let i=A.map(o=>o instanceof Function?o(t):o),n=[];return to.spans(i,e.from,e.to,{point(){},span(o,a,r,s){let g=o-e.from,l=a-e.from,C=n;for(let I=r.length-1;I>=0;I--,s--){let d=r[I].spec.bidiIsolate,B;if(d==null&&(d=IvA(e.text,g,l)),s>0&&C.length&&(B=C[C.length-1]).to==g&&B.direction==d)B.to=l,C=B.inner;else{let E={from:g,to:l,direction:d,inner:[]};C.push(E),C=E.inner}}}}),n}var R$=We.define();function aF(t){let e=0,A=0,i=0,n=0;for(let o of t.state.facet(R$)){let a=o(t);a&&(a.left!=null&&(e=Math.max(e,a.left)),a.right!=null&&(A=Math.max(A,a.right)),a.top!=null&&(i=Math.max(i,a.top)),a.bottom!=null&&(n=Math.max(n,a.bottom)))}return{left:e,right:A,top:i,bottom:n}}var T3=We.define(),kc=class t{constructor(e,A,i,n){this.fromA=e,this.toA=A,this.fromB=i,this.toB=n}join(e){return new t(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let A=e.length,i=this;for(;A>0;A--){let n=e[A-1];if(!(n.fromA>i.toA)){if(n.toAn.push(new kc(o,a,r,s))),this.changedRanges=n}static create(e,A,i){return new t(e,A,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},BvA=[],Ha=class{constructor(e,A,i=0){this.dom=e,this.length=A,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return BvA}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let A=this.domAttrs;A&&ZyA(this.dom,A)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,A=this.posAtStart){let i=A;for(let n of this.children){if(n==e)return i;i+=n.length+n.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,A){return null}domPosFor(e,A){let i=kI(this.dom),n=this.length?e>0:A>0;return new F0(this.parent.dom,i+(n?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof vQ)return e;return null}static get(e){return e.cmTile}},yQ=class extends Ha{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let A=this.dom,i=null,n,o=e?.node==A?e:null,a=0;for(let r of this.children){if(r.sync(e),a+=r.length+r.breakAfter,n=i?i.nextSibling:A.firstChild,o&&n!=r.dom&&(o.written=!0),r.dom.parentNode==A)for(;n&&n!=r.dom;)n=SX(n);else A.insertBefore(r.dom,n);i=r.dom}for(n=i?i.nextSibling:A.firstChild,o&&n&&(o.written=!0);n;)n=SX(n);this.length=a}};function SX(t){let e=t.nextSibling;return t.parentNode.removeChild(t),e}var vQ=class extends yQ{constructor(e,A){super(A),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let A=Ha.get(e);if(A&&this.owns(A))return A;e=e.parentNode}}blockTiles(e){for(let A=[],i=this,n=0,o=0;;)if(n==i.children.length){if(!A.length)return;i=i.parent,i.breakAfter&&o++,n=A.pop()}else{let a=i.children[n++];if(a instanceof bI)A.push(n),i=a,n=0;else{let r=o+a.length,s=e(a,o);if(s!==void 0)return s;o=r+a.breakAfter}}}resolveBlock(e,A){let i,n=-1,o,a=-1;if(this.blockTiles((r,s)=>{let g=s+r.length;if(e>=s&&e<=g){if(r.isWidget()&&A>=-1&&A<=1){if(r.flags&32)return!0;r.flags&16&&(i=void 0)}(se||e==s&&(A>1?r.length:r.covers(-1)))&&(!o||!r.isWidget()&&o.isWidget())&&(o=r,a=e-s)}}),!i&&!o)throw new Error("No tile at position "+e);return i&&A<0||!o?{tile:i,offset:n}:{tile:o,offset:a}}},bI=class t extends yQ{constructor(e,A){super(e),this.wrapper=A}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,A){let i=new t(A||document.createElement(e.tagName),e);return A||(i.flags|=4),i}},bQ=class t extends yQ{constructor(e,A){super(e),this.attrs=A}isLine(){return!0}static start(e,A,i){let n=new t(A||document.createElement("div"),e);return(!A||!i)&&(n.flags|=4),n}get domAttrs(){return this.attrs}resolveInline(e,A,i){let n=null,o=-1,a=null,r=-1;function s(l,C){for(let I=0,d=0;I=C&&(B.isComposite()?s(B,C-d):(!a||a.isHidden&&(A>0||i&&QvA(a,B)))&&(E>C||B.flags&32)?(a=B,r=C-d):(di&&(e=i);let n=e,o=e,a=0;e==0&&A<0||e==i&&A>=0?gt.chrome||gt.gecko||(e?(n--,a=1):o=0)?0:r.length-1];return gt.safari&&!a&&s.width==0&&(s=Array.prototype.find.call(r,g=>g.width)||s),a?CD(s,a<0):s||null}static of(e,A){let i=new t(A||document.createTextNode(e),e);return A||(i.flags|=2),i}},wd=class t extends Ha{constructor(e,A,i,n){super(e,A,n),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,A){return this.coordsInWidget(e,A,!1)}coordsInWidget(e,A,i){let n=this.widget.coordsAt(this.dom,e,A);if(n)return n;if(i)return CD(this.dom.getBoundingClientRect(),this.length?e==0:A<=0);{let o=this.dom.getClientRects(),a=null;if(!o.length)return null;let r=this.flags&16?!0:this.flags&32?!1:e>0;for(let s=r?o.length-1:0;a=o[s],!(e>0?s==0:s==o.length-1||a.top0;)if(n.isComposite())if(a){if(!e)break;i&&i.break(),e--,a=!1}else if(o==n.children.length){if(!e&&!r.length)break;i&&i.leave(n),a=!!n.breakAfter,{tile:n,index:o}=r.pop(),o++}else{let s=n.children[o],g=s.breakAfter;(A>0?s.length<=e:s.length=0;r--){let s=A.marks[r],g=n.lastChild;if(g instanceof ug&&g.mark.eq(s.mark))g.dom!=s.dom&&g.setDOM(XR(s.dom)),n=g;else{if(this.cache.reused.get(s)){let C=Ha.get(s.dom);C&&C.setDOM(XR(s.dom))}let l=ug.of(s.mark,s.dom);n.append(l),n=l}this.cache.reused.set(s,2)}let o=Ha.get(e.text);o&&this.cache.reused.set(o,2);let a=new fd(e.text,e.text.nodeValue);a.flags|=8,n.append(a)}addInlineWidget(e,A,i){let n=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);n||this.flushBuffer();let o=this.ensureMarks(A,i);!n&&!(e.flags&16)&&o.append(this.getBuffer(1)),o.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,A,i){this.flushBuffer(),this.ensureMarks(A,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let A=this.afterWidget||this.lastBlock;A.length+=e,this.pos+=e}addLineStart(e,A){var i;e||(e=N$);let n=bQ.start(e,A||((i=this.cache.find(bQ))===null||i===void 0?void 0:i.dom),!!A);this.getBlockPos().append(this.lastBlock=this.curLine=n)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,A){var i;let n=this.curLine;for(let o=e.length-1;o>=0;o--){let a=e[o],r;if(A>0&&(r=n.lastChild)&&r instanceof ug&&r.mark.eq(a))n=r,A--;else{let s=ug.of(a,(i=this.cache.find(ug,g=>g.mark.eq(a)))===null||i===void 0?void 0:i.dom);n.append(s),n=s,A=0}}return n}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!xX(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(gt.ios&&xX(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget($R,0,32)||new wd($R.toDOM(),0,$R,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let A=new hN(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-A.rank||this.wrappers[i-1].to-A.to)<0;)i--;this.wrappers.splice(i,0,A)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let A=this.root;for(let i of this.wrappers){let n=A.lastChild;if(i.froma.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);A.append(o),A=o}}return A}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let A=2|(e<0?16:32),i=this.cache.find(MQ,void 0,1);return i&&(i.flags=A),i||new MQ(A)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},fN=class{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:n,lineBreak:o,done:a}=this.cursor.next(this.skipCount);if(this.skipCount=0,a)throw new Error("Ran out of text content when drawing inline views");this.text=n;let r=this.textOff=Math.min(e,n.length);return o?null:n.slice(0,r)}let A=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,A);return this.textOff=A,i}},dD=[wd,bQ,fd,ug,MQ,bI,vQ];for(let t=0;t[]),this.index=dD.map(()=>0),this.reused=new Map}add(e){let A=e.constructor.bucket,i=this.buckets[A];i.length<6?i.push(e):i[this.index[A]=(this.index[A]+1)%6]=e}find(e,A,i=2){let n=e.bucket,o=this.buckets[n],a=this.index[n];for(let r=o.length-1;r>=0;r--){let s=(r+a)%o.length,g=o[s];if((!A||A(g))&&!this.reused.has(g))return o.splice(s,1),s{if(this.cache.add(a),a.isComposite())return!1},enter:a=>this.cache.add(a),leave:()=>{},break:()=>{}}}run(e,A){let i=A&&this.getCompositionContext(A.text);for(let n=0,o=0,a=0;;){let r=an){let g=s-n;this.preserve(g,!a,!r),n=s,o+=g}if(!r)break;A&&r.fromA<=A.range.fromA&&r.toA>=A.range.toA?(this.forward(r.fromA,A.range.fromA,A.range.fromA{if(a.isWidget())if(this.openWidget)this.builder.continueWidget(s-r);else{let g=s>0||r{a.isLine()?this.builder.addLineStart(a.attrs,this.cache.maybeReuse(a)):(this.cache.add(a),a instanceof ug&&n.unshift(a.mark)),this.openWidget=!1},leave:a=>{a.isLine()?n.length&&(n.length=o=0):a instanceof ug&&(n.shift(),o=Math.min(o,n.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,A){let i=null,n=this.builder,o=0,a=to.spans(this.decorations,e,A,{point:(r,s,g,l,C,I)=>{if(g instanceof md){if(this.disallowBlockEffectsFor[I]){if(g.block)throw new RangeError("Block decorations may not be specified via plugins");if(s>this.view.state.doc.lineAt(r).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(o=l.length,C>l.length)n.continueWidget(s-r);else{let d=g.widget||(g.block?RX.block:RX.inline),B=hvA(g),E=this.cache.findWidget(d,s-r,B)||wd.of(d,this.view,s-r,B);g.block?(g.startSide>0&&n.addLineStartIfNotCovered(i),n.addBlockWidget(E)):(n.ensureLine(i),n.addInlineWidget(E,l,C))}i=null}else i=uvA(i,g);s>r&&this.text.skip(s-r)},span:(r,s,g,l)=>{for(let C=r;Co,this.openMarks=a}forward(e,A,i=1){A-e<=10?this.old.advance(A-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(A-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let A=[],i=null;for(let n=e.parentNode;;n=n.parentNode){let o=Ha.get(n);if(n==this.view.contentDOM)break;o instanceof ug?A.push(o):o?.isLine()?i=o:n.nodeName=="DIV"&&!i&&n!=this.view.contentDOM?i=new bQ(n,N$):A.push(ug.of(new ef({tagName:n.nodeName.toLowerCase(),attributes:XyA(n)}),n))}return{line:i,marks:A}}};function xX(t,e){let A=i=>{for(let n of i.children)if((e?n.isText():n.length)||A(n))return!0;return!1};return A(t)}function hvA(t){let e=t.isReplace?(t.startSide<0?64:0)|(t.endSide>0?128:0):t.startSide>0?32:16;return t.block&&(e|=256),e}var N$={class:"cm-line"};function uvA(t,e){let A=e.spec.attributes,i=e.spec.class;return!A&&!i||(t||(t={class:"cm-line"}),A&&AF(A,t),i&&(t.class+=" "+i)),t}function fvA(t){let e=[];for(let A=t.parents.length;A>1;A--){let i=A==t.parents.length?t.tile:t.parents[A].tile;i instanceof ug&&e.push(i.mark)}return e}function XR(t){let e=Ha.get(t);return e&&e.setDOM(t.cloneNode()),t}var RX=(()=>{class t extends fg{constructor(A){super(),this.tag=A}eq(A){return A.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(A){return A.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}return t.inline=new t("span"),t.block=new t("div"),t})(),$R=new class extends fg{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}},BD=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=Dt.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new vQ(e,e.contentDOM),this.updateInner([new kc(0,0,0,e.state.doc.length)],null)}update(e){var A;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:l,toA:C})=>Cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let n=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((A=this.domChanged)===null||A===void 0)&&A.newSel?n=this.domChanged.newSel.head:!MvA(e.changes,this.hasComposition)&&!e.selectionSet&&(n=e.state.selection.main.head));let o=n>-1?pvA(this.view,e.changes,n):null;if(this.domChanged=null,this.hasComposition){let{from:l,to:C}=this.hasComposition;i=new kc(l,C,e.changes.mapPos(l,-1),e.changes.mapPos(C,1)).addToSet(i.slice())}this.hasComposition=o?{from:o.range.fromB,to:o.range.toB}:null,(gt.ie||gt.chrome)&&!o&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let a=this.decorations,r=this.blockWrappers;this.updateDeco();let s=yvA(a,this.decorations,e.changes);s.length&&(i=kc.extendWithRanges(i,s));let g=vvA(r,this.blockWrappers,e.changes);return g.length&&(i=kc.extendWithRanges(i,g)),o&&!i.some(l=>l.fromA<=o.range.fromA&&l.toA>=o.range.toA)&&(i=o.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,o),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,A){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(A||e.length){let a=this.tile,r=new pN(this.view,a,this.blockWrappers,this.decorations,this.dynamicDecorationMap);this.tile=r.run(e,A),wN(a,r.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let o=gt.chrome||gt.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(o),o&&(o.written||i.selectionRange.focusNode!=o.node||!this.tile.dom.contains(o.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let n=[];if(this.view.viewport.from||this.view.viewport.to-1)&&P3(i,this.view.observer.selectionRange)&&!(n&&i.contains(n));if(!(o||A||a))return;let r=this.forceSelection;this.forceSelection=!1;let s=this.view.state.selection.main,g,l;if(s.empty?l=g=this.inlineDOMNearPos(s.anchor,s.assoc||1):(l=this.inlineDOMNearPos(s.head,s.head==s.from?1:-1),g=this.inlineDOMNearPos(s.anchor,s.anchor==s.from?1:-1)),gt.gecko&&s.empty&&!this.hasComposition&&mvA(g)){let I=document.createTextNode("");this.view.observer.ignore(()=>g.node.insertBefore(I,g.node.childNodes[g.offset]||null)),g=l=new F0(I,0),r=!0}let C=this.view.observer.selectionRange;(r||!C.focusNode||(!j3(g.node,g.offset,C.anchorNode,C.anchorOffset)||!j3(l.node,l.offset,C.focusNode,C.focusOffset))&&!this.suppressWidgetCursorChange(C,s))&&(this.view.observer.ignore(()=>{gt.android&>.chrome&&i.contains(C.focusNode)&&bvA(C.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let I=DQ(this.view.root);if(I)if(s.empty){if(gt.gecko){let d=wvA(g.node,g.offset);if(d&&d!=3){let B=(d==1?d$:B$)(g.node,g.offset);B&&(g=new F0(B.node,B.offset))}}I.collapse(g.node,g.offset),s.bidiLevel!=null&&I.caretBidiLevel!==void 0&&(I.caretBidiLevel=s.bidiLevel)}else if(I.extend){I.collapse(g.node,g.offset);try{I.extend(l.node,l.offset)}catch{}}else{let d=document.createRange();s.anchor>s.head&&([g,l]=[l,g]),d.setEnd(l.node,l.offset),d.setStart(g.node,g.offset),I.removeAllRanges(),I.addRange(d)}a&&this.view.root.activeElement==i&&(i.blur(),n&&n.focus())}),this.view.observer.setSelectionRange(g,l)),this.impreciseAnchor=g.precise?null:new F0(C.anchorNode,C.anchorOffset),this.impreciseHead=l.precise?null:new F0(C.focusNode,C.focusOffset)}suppressWidgetCursorChange(e,A){return this.hasComposition&&A.empty&&j3(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==A.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,A=e.state.selection.main,i=DQ(e.root),{anchorNode:n,anchorOffset:o}=e.observer.selectionRange;if(!i||!A.empty||!A.assoc||!i.modify)return;let a=this.lineAt(A.head,A.assoc);if(!a)return;let r=a.posAtStart;if(A.head==r||A.head==r+a.length)return;let s=this.coordsAt(A.head,-1),g=this.coordsAt(A.head,1);if(!s||!g||s.bottom>g.top)return;let l=this.domAtPos(A.head+A.assoc,A.assoc);i.collapse(l.node,l.offset),i.modify("move",A.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let C=e.observer.selectionRange;e.docView.posFromDOM(C.anchorNode,C.anchorOffset)!=A.from&&i.collapse(n,o)}posFromDOM(e,A){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let n=i.posAtStart;if(i.isComposite()){let o;if(e==i.dom)o=i.dom.childNodes[A];else{let a=UC(e)==0?0:A==0?-1:1;for(;;){let r=e.parentNode;if(r==i.dom)break;a==0&&r.firstChild!=r.lastChild&&(e==r.firstChild?a=-1:a=1),e=r}a<0?o=e:o=e.nextSibling}if(o==i.dom.firstChild)return n;for(;o&&!Ha.get(o);)o=o.nextSibling;if(!o)return n+i.length;for(let a=0,r=n;;a++){let s=i.children[a];if(s.dom==o)return r;r+=s.length+s.breakAfter}}else return i.isText()?e==i.dom?n+A:n+(A?i.length:0):n}domAtPos(e,A){let{tile:i,offset:n}=this.tile.resolveBlock(e,A);return i.isWidget()?i.domPosFor(e,A):i.domIn(n,A)}inlineDOMNearPos(e,A){let i,n=-1,o=!1,a,r=-1,s=!1;return this.tile.blockTiles((g,l)=>{if(g.isWidget()){if(g.flags&32&&l>=e)return!0;g.flags&16&&(o=!0)}else{let C=l+g.length;if(l<=e&&(i=g,n=e-l,o=C=e&&!a&&(a=g,r=e-l,s=l>e),l>e&&a)return!0}}),!i&&!a?this.domAtPos(e,A):(o&&a?i=null:s&&i&&(a=null),i&&A<0||!a?i.domIn(n,A):a.domIn(r,A))}coordsAt(e,A){let{tile:i,offset:n}=this.tile.resolveBlock(e,A);return i.isWidget()?i.widget instanceof W3?null:i.coordsInWidget(n,A,!0):i.coordsIn(n,A)}lineAt(e,A){let{tile:i}=this.tile.resolveBlock(e,A);return i.isLine()?i:null}coordsForChar(e){let{tile:A,offset:i}=this.tile.resolveBlock(e,1);if(!A.isLine())return null;function n(o,a){if(o.isComposite())for(let r of o.children){if(r.length>=a){let s=n(r,a);if(s)return s}if(a-=r.length,a<0)break}else if(o.isText()&&aMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,r=-1,s=this.view.textDirection==mo.LTR,g=0,l=(C,I,d)=>{for(let B=0;Bn);B++){let E=C.children[B],Q=I+E.length,f=E.dom.getBoundingClientRect(),{height:b}=f;if(d&&!B&&(g+=f.top-d.top),E instanceof bI)Q>i&&l(E,I,f);else if(I>=i&&(g>0&&A.push(-g),A.push(b+g),g=0,a)){let S=E.dom.lastChild,M=S?nD(S):[];if(M.length){let D=M[M.length-1],F=s?D.right-f.left:f.right-D.left;F>r&&(r=F,this.minWidth=o,this.minWidthFrom=I,this.minWidthTo=Q)}}d&&B==C.children.length-1&&(g+=d.bottom-f.bottom),I=Q+E.breakAfter}};return l(this.tile,0,null),A}textDirectionAt(e){let{tile:A}=this.tile.resolveBlock(e,1);return getComputedStyle(A.dom).direction=="rtl"?mo.RTL:mo.LTR}measureTextSize(){let e=this.tile.blockTiles(a=>{if(a.isLine()&&a.children.length&&a.length<=20){let r=0,s;for(let g of a.children){if(!g.isText()||/[^ -~]/.test(g.text))return;let l=nD(g.dom);if(l.length!=1)return;r+=l[0].width,s=l[0].height}if(r)return{lineHeight:a.dom.getBoundingClientRect().height,charWidth:r/a.length,textHeight:s}}});if(e)return e;let A=document.createElement("div"),i,n,o;return A.className="cm-line",A.style.width="99999px",A.style.position="absolute",A.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(A);let a=nD(A.firstChild)[0];i=A.getBoundingClientRect().height,n=a&&a.width?a.width/27:7,o=a&&a.height?a.height:i,A.remove()}),{lineHeight:i,charWidth:n,textHeight:o}}computeBlockGapDeco(){let e=[],A=this.view.viewState;for(let i=0,n=0;;n++){let o=n==A.viewports.length?null:A.viewports[n],a=o?o.from-1:this.view.state.doc.length;if(a>i){let r=(A.lineBlockAt(a).bottom-A.lineBlockAt(i).top)/this.view.scaleY;e.push(Dt.replace({widget:new W3(r),block:!0,inclusive:!0,isBlockGap:!0}).range(i,a))}if(!o)break;i=o.to+1}return Dt.set(e)}updateDeco(){let e=1,A=this.view.state.facet(MD).map(o=>(this.dynamicDecorationMap[e++]=typeof o=="function")?o(this.view):o),i=!1,n=this.view.state.facet(oF).map((o,a)=>{let r=typeof o=="function";return r&&(i=!0),r?o(this.view):o});for(n.length&&(this.dynamicDecorationMap[e++]=i,A.push(to.join(n))),this.decorations=[this.editContextFormatting,...A,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof o=="function"?o(this.view):o)}scrollIntoView(e){if(e.isSnapshot){let g=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=g.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let g of this.view.state.facet(M$))try{if(g(this.view,e.range,e))return!0}catch(l){Sr(this.view.state,l,"scroll handler")}let{range:A}=e,i=this.coordsAt(A.head,A.empty?A.assoc:A.head>A.anchor?-1:1),n;if(!i)return;!A.empty&&(n=this.coordsAt(A.anchor,A.anchor>A.head?-1:1))&&(i={left:Math.min(i.left,n.left),top:Math.min(i.top,n.top),right:Math.max(i.right,n.right),bottom:Math.max(i.bottom,n.bottom)});let o=aF(this.view),a={left:i.left-o.left,top:i.top-o.top,right:i.right+o.right,bottom:i.bottom+o.bottom},{offsetWidth:r,offsetHeight:s}=this.view.scrollDOM;evA(this.view.scrollDOM,a,A.headi.isWidget()||i.children.some(A);return A(this.tile.resolveBlock(e,1).tile)}destroy(){wN(this.tile)}};function wN(t,e){let A=e?.get(t);if(A!=1){A==null&&t.destroy();for(let i of t.children)wN(i,e)}}function mvA(t){return t.node.nodeType==1&&t.node.firstChild&&(t.offset==0||t.node.childNodes[t.offset-1].contentEditable=="false")&&(t.offset==t.node.childNodes.length||t.node.childNodes[t.offset].contentEditable=="false")}function F$(t,e){let A=t.observer.selectionRange;if(!A.focusNode)return null;let i=d$(A.focusNode,A.focusOffset),n=B$(A.focusNode,A.focusOffset),o=i||n;if(n&&i&&n.node!=i.node){let r=Ha.get(n.node);if(!r||r.isText()&&r.text!=n.node.nodeValue)o=n;else if(t.docView.lastCompositionAfterCursor){let s=Ha.get(i.node);!s||s.isText()&&s.text!=i.node.nodeValue||(o=n)}}if(t.docView.lastCompositionAfterCursor=o!=i,!o)return null;let a=e-o.offset;return{from:a,to:a+o.node.nodeValue.length,node:o.node}}function pvA(t,e,A){let i=F$(t,A);if(!i)return null;let{node:n,from:o,to:a}=i,r=n.nodeValue;if(/[\n\r]/.test(r)||t.state.doc.sliceString(i.from,i.to)!=r)return null;let s=e.invertedDesc;return{range:new kc(s.mapPos(o),s.mapPos(a),o,a),text:n}}function wvA(t,e){return t.nodeType!=1?0:(e&&t.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(A=!0)}),A}var W3=class extends fg{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function kvA(t,e,A=1){let i=t.charCategorizer(e),n=t.doc.lineAt(e),o=e-n.from;if(n.length==0)return de.cursor(e);o==0?A=1:o==n.length&&(A=-1);let a=o,r=o;A<0?a=Ta(n.text,o,!1):r=Ta(n.text,o);let s=i(n.text.slice(a,r));for(;a>0;){let g=Ta(n.text,a,!1);if(i(n.text.slice(g,a))!=s)break;a=g}for(;rt.defaultLineHeight*1.5){let r=t.viewState.heightOracle.textHeight,s=Math.floor((n-A.top-(t.defaultLineHeight-r)*.5)/r);o+=s*t.viewState.heightOracle.lineLength}let a=t.state.sliceDoc(A.from,A.to);return A.from+j5(a,o,t.state.tabSize)}function yN(t,e,A){let i=t.lineBlockAt(e);if(Array.isArray(i.type)){let n;for(let o of i.type){if(o.from>e)break;if(!(o.toe)return o;(!n||o.type==Xr.Text&&(n.type!=o.type||(A<0?o.frome)))&&(n=o)}}return n||i}return i}function xvA(t,e,A,i){let n=yN(t,e.head,e.assoc||-1),o=!i||n.type!=Xr.Text||!(t.lineWrapping||n.widgetLineBreaks)?null:t.coordsAtPos(e.assoc<0&&e.head>n.from?e.head-1:e.head);if(o){let a=t.dom.getBoundingClientRect(),r=t.textDirectionAt(n.from),s=t.posAtCoords({x:A==(r==mo.LTR)?a.right-1:a.left+1,y:(o.top+o.bottom)/2});if(s!=null)return de.cursor(s,A?-1:1)}return de.cursor(A?n.to:n.from,A?-1:1)}function NX(t,e,A,i){let n=t.state.doc.lineAt(e.head),o=t.bidiSpans(n),a=t.textDirectionAt(n.from);for(let r=e,s=null;;){let g=CvA(n,o,a,r,A),l=f$;if(!g){if(n.number==(A?t.state.doc.lines:1))return r;l=` +`,n=t.state.doc.line(n.number+(A?1:-1)),o=t.bidiSpans(n),g=t.visualLineSide(n,!A)}if(s){if(!s(l))return r}else{if(!i)return g;s=i(l)}r=g}}function RvA(t,e,A){let i=t.state.charCategorizer(e),n=i(A);return o=>{let a=i(o);return n==Fo.Space&&(n=a),n==a}}function NvA(t,e,A,i){let n=e.head,o=A?1:-1;if(n==(A?t.state.doc.length:0))return de.cursor(n,e.assoc);let a=e.goalColumn,r,s=t.contentDOM.getBoundingClientRect(),g=t.coordsAtPos(n,e.assoc||-1),l=t.documentTop;if(g)a==null&&(a=g.left-s.left),r=o<0?g.top:g.bottom;else{let B=t.viewState.lineBlockAt(n);a==null&&(a=Math.min(s.right-s.left,t.defaultCharacterWidth*(n-B.from))),r=(o<0?B.top:B.bottom)+l}let C=s.left+a,I=i??t.viewState.heightOracle.textHeight>>1,d=vN(t,{x:C,y:r+I*o},!1,o);return de.cursor(d.pos,d.assoc,void 0,a)}function Z3(t,e,A){for(;;){let i=0;for(let n of t)n.between(e-1,e+1,(o,a,r)=>{if(e>o&&en(t)),A.from,e.head>A.from?-1:1);return i==A.from?A:de.cursor(i,it.viewState.docHeight)return new Sl(t.state.doc.length,-1);if(g=t.elementAtHeight(s),i==null)break;if(g.type==Xr.Text){let I=t.docView.coordsAt(i<0?g.from:g.to,i);if(I&&(i<0?I.top<=s+o:I.bottom>=s+o))break}let C=t.viewState.heightOracle.textHeight/2;s=i>0?g.bottom+C:g.top-C}if(t.viewport.from>=g.to||t.viewport.to<=g.from){if(A)return null;if(g.type==Xr.Text){let C=SvA(t,n,g,a,r);return new Sl(C,C==g.from?1:-1)}}if(g.type!=Xr.Text)return s<(g.top+g.bottom)/2?new Sl(g.from,1):new Sl(g.to,-1);let l=t.docView.lineAt(g.from,2);return(!l||l.length!=g.length)&&(l=t.docView.lineAt(g.from,-2)),L$(t,l,g.from,a,r)}function L$(t,e,A,i,n){let o=-1,a=null,r=1e9,s=1e9,g=n,l=n,C=(I,d)=>{for(let B=0;Bi?E.left-i:E.rightn?E.top-n:E.bottom=g&&(g=Math.min(E.top,g),l=Math.max(E.bottom,l),f=0),(o<0||(f-s||Q-r)<0)&&(o>=0&&s&&r=g+2?s=0:(o=d,r=Q,s=f,a=E))}};if(e.isText()){for(let d=0;d(a.left+a.right)/2==(FX(t,o+A)==mo.LTR)?new Sl(A+Ta(e.text,o),-1):new Sl(A+o,1)}else{if(!e.length)return new Sl(A,1);for(let E=0;E(a.left+a.right)/2==(FX(t,o+A)==mo.LTR)?new Sl(d+I.length,-1):new Sl(d,1)}}function FX(t,e){let A=t.state.doc.lineAt(e);return t.bidiSpans(A)[Mc.find(t.bidiSpans(A),e-A.from,-1,1)].dir}var H3="\uFFFF",bN=class{constructor(e,A){this.points=e,this.view=A,this.text="",this.lineSeparator=A.state.facet($a.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=H3}readRange(e,A){if(!e)return this;let i=e.parentNode;for(let n=e;;){this.findPointBefore(i,n);let o=this.text.length;this.readNode(n);let a=Ha.get(n),r=n.nextSibling;if(r==A){a?.breakAfter&&!r&&i!=this.view.contentDOM&&this.lineBreak();break}let s=Ha.get(r);(a&&s?a.breakAfter:(a?a.breakAfter:cD(n))||cD(r)&&(n.nodeName!="BR"||a?.isWidget())&&this.text.length>o)&&!_vA(r,A)&&this.lineBreak(),n=r}return this.findPointBefore(i,A),this}readTextNode(e){let A=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,A.length));for(let i=0,n=this.lineSeparator?null:/\r\n?|\n/g;;){let o=-1,a=1,r;if(this.lineSeparator?(o=A.indexOf(this.lineSeparator,i),a=this.lineSeparator.length):(r=n.exec(A))&&(o=r.index,a=r[0].length),this.append(A.slice(i,o<0?A.length:o)),o<0)break;if(this.lineBreak(),a>1)for(let s of this.points)s.node==e&&s.pos>this.text.length&&(s.pos-=a-1);i=o+a}}readNode(e){let A=Ha.get(e),i=A&&A.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let n=i.iter();!n.next().done;)n.lineBreak?this.lineBreak():this.append(n.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,A){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==A&&(i.pos=this.text.length)}findPointInside(e,A){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(FvA(e,i.node,i.offset)?A:0))}};function FvA(t,e,A){for(;;){if(!e||A-1;let{impreciseHead:o,impreciseAnchor:a}=e.docView;if(e.state.readOnly&&A>-1)this.newSel=null;else if(A>-1&&(this.bounds=G$(e.docView.tile,A,i,0))){let r=o||a?[]:GvA(e),s=new bN(r,e);s.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=s.text,this.newSel=KvA(r,this.bounds.from)}else{let r=e.observer.selectionRange,s=o&&o.node==r.focusNode&&o.offset==r.focusOffset||!cN(e.contentDOM,r.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(r.focusNode,r.focusOffset),g=a&&a.node==r.anchorNode&&a.offset==r.anchorOffset||!cN(e.contentDOM,r.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(r.anchorNode,r.anchorOffset),l=e.viewport;if((gt.ios||gt.chrome)&&e.state.selection.main.empty&&s!=g&&(l.from>0||l.to-1&&e.state.selection.ranges.length>1?this.newSel=e.state.selection.replaceRange(de.range(g,s)):this.newSel=de.single(g,s)}}};function G$(t,e,A,i){if(t.isComposite()){let n=-1,o=-1,a=-1,r=-1;for(let s=0,g=i,l=i;sA)return G$(C,e,A,g);if(I>=e&&n==-1&&(n=s,o=g),g>A&&C.dom.parentNode==t.dom){a=s,r=l;break}l=I,g=I+C.breakAfter}return{from:o,to:r<0?i+t.length:r,startDOM:(n?t.children[n-1].dom.nextSibling:null)||t.dom.firstChild,endDOM:a=0?t.children[a].dom:null}}else return t.isText()?{from:i,to:i+t.length,startDOM:t.dom,endDOM:t.dom.nextSibling}:null}function K$(t,e){let A,{newSel:i}=e,n=t.state.selection.main,o=t.inputState.lastKeyTime>Date.now()-100?t.inputState.lastKeyCode:-1;if(e.bounds){let{from:a,to:r}=e.bounds,s=n.from,g=null;(o===8||gt.android&&e.text.length=n.from&&A.to<=n.to&&(A.from!=n.from||A.to!=n.to)&&n.to-n.from-(A.to-A.from)<=4?A={from:n.from,to:n.to,insert:t.state.doc.slice(n.from,A.from).append(A.insert).append(t.state.doc.slice(A.to,n.to))}:t.state.doc.lineAt(n.from).toDate.now()-50?A={from:n.from,to:n.to,insert:t.state.toText(t.inputState.insertingText)}:gt.chrome&&A&&A.from==A.to&&A.from==n.head&&A.insert.toString()==` + `&&t.lineWrapping&&(i&&(i=de.single(i.main.anchor-1,i.main.head-1)),A={from:n.from,to:n.to,insert:bn.of([" "])}),A)return rF(t,A,i,o);if(i&&!QD(i,n)){let a=!1,r="select";return t.inputState.lastSelectionTime>Date.now()-50&&(t.inputState.lastSelectionOrigin=="select"&&(a=!0),r=t.inputState.lastSelectionOrigin,r=="select.pointer"&&(i=_$(t.state.facet(rf).map(s=>s(t)),i))),t.dispatch({selection:i,scrollIntoView:a,userEvent:r}),!0}else return!1}function rF(t,e,A,i=-1){if(gt.ios&&t.inputState.flushIOSKey(e))return!0;let n=t.state.selection.main;if(gt.android&&(e.to==n.to&&(e.from==n.from||e.from==n.from-1&&t.state.sliceDoc(e.from,n.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&wQ(t.contentDOM,"Enter",13)||(e.from==n.from-1&&e.to==n.to&&e.insert.length==0||i==8&&e.insert.lengthn.head)&&wQ(t.contentDOM,"Backspace",8)||e.from==n.from&&e.to==n.to+1&&e.insert.length==0&&wQ(t.contentDOM,"Delete",46)))return!0;let o=e.insert.toString();t.inputState.composing>=0&&t.inputState.composing++;let a,r=()=>a||(a=LvA(t,e,A));return t.state.facet(y$).some(s=>s(t,e.from,e.to,o,r))||t.dispatch(r()),!0}function LvA(t,e,A){let i,n=t.state,o=n.selection.main,a=-1;if(e.from==e.to&&e.fromo.to){let s=e.fromC(t)),g,s);e.from==l&&(a=l)}if(a>-1)i={changes:e,selection:de.cursor(e.from+e.insert.length,-1)};else if(e.from>=o.from&&e.to<=o.to&&e.to-e.from>=(o.to-o.from)/3&&(!A||A.main.empty&&A.main.from==e.from+e.insert.length)&&t.inputState.composing<0){let s=o.frome.to?n.sliceDoc(e.to,o.to):"";i=n.replaceSelection(t.state.toText(s+e.insert.sliceString(0,void 0,t.state.lineBreak)+g))}else{let s=n.changes(e),g=A&&A.main.to<=s.newLength?A.main:void 0;if(n.selection.ranges.length>1&&(t.inputState.composing>=0||t.inputState.compositionPendingChange)&&e.to<=o.to+10&&e.to>=o.to-10){let l=t.state.sliceDoc(e.from,e.to),C,I=A&&F$(t,A.main.head);if(I){let B=e.insert.length-(e.to-e.from);C={from:I.from,to:I.to-B}}else C=t.state.doc.lineAt(o.head);let d=o.to-e.to;i=n.changeByRange(B=>{if(B.from==o.from&&B.to==o.to)return{changes:s,range:g||B.map(s)};let E=B.to-d,Q=E-l.length;if(t.state.sliceDoc(Q,E)!=l||E>=C.from&&Q<=C.to)return{range:B};let f=n.changes({from:Q,to:E,insert:e.insert}),b=B.to-o.to;return{changes:f,range:g?de.range(Math.max(0,g.anchor+b),Math.max(0,g.head+b)):B.map(f)}})}else i={changes:s,selection:g&&n.selection.replaceRange(g)}}let r="input.type";return(t.composing||t.inputState.compositionPendingChange&&t.inputState.compositionEndedAt>Date.now()-50)&&(t.inputState.compositionPendingChange=!1,r+=".compose",t.inputState.compositionFirstChange&&(r+=".start",t.inputState.compositionFirstChange=!1)),n.update(i,{userEvent:r,scrollIntoView:!0})}function U$(t,e,A,i){let n=Math.min(t.length,e.length),o=0;for(;o0&&r>0&&t.charCodeAt(a-1)==e.charCodeAt(r-1);)a--,r--;if(i=="end"){let s=Math.max(0,o-Math.min(a,r));A-=a+s-o}if(a=a?o-A:0;o-=s,r=o+(r-a),a=o}else if(r=r?o-A:0;o-=s,a=o+(a-r),r=o}return{from:o,toA:a,toB:r}}function GvA(t){let e=[];if(t.root.activeElement!=t.contentDOM)return e;let{anchorNode:A,anchorOffset:i,focusNode:n,focusOffset:o}=t.observer.selectionRange;return A&&(e.push(new ED(A,i)),(n!=A||o!=i)&&e.push(new ED(n,o))),e}function KvA(t,e){if(t.length==0)return null;let A=t[0].pos,i=t.length==2?t[1].pos:A;return A>-1&&i>-1?de.single(A+e,i+e):null}function QD(t,e){return e.head==t.main.head&&e.anchor==t.main.anchor}var kN=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,gt.safari&&e.contentDOM.addEventListener("input",()=>null),gt.gecko&&XvA(e.contentDOM.ownerDocument)}handleEvent(e){!OvA(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,A){let i=this.handlers[e];if(i){for(let n of i.observers)n(this.view,A);for(let n of i.handlers){if(A.defaultPrevented)break;if(n(this.view,A)){A.preventDefault();break}}}}ensureHandlers(e){let A=UvA(e),i=this.handlers,n=this.view.contentDOM;for(let o in A)if(o!="scroll"){let a=!A[o].handlers.length,r=i[o];r&&a!=!r.handlers.length&&(n.removeEventListener(o,this.handleEvent),r=null),r||n.addEventListener(o,this.handleEvent,{passive:a})}for(let o in i)o!="scroll"&&!A[o]&&n.removeEventListener(o,this.handleEvent);this.handlers=A}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Y$.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),gt.android&>.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let A;return gt.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&((A=J$.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||JvA.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(this.pendingIOSKey=A||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let A=this.pendingIOSKey;return!A||A.key=="Enter"&&e&&e.from0?!0:gt.safari&&!gt.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function _X(t,e){return(A,i)=>{try{return e.call(t,i,A)}catch(n){Sr(A.state,n)}}}function UvA(t){let e=Object.create(null);function A(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of t){let n=i.spec,o=n&&n.plugin.domEventHandlers,a=n&&n.plugin.domEventObservers;if(o)for(let r in o){let s=o[r];s&&A(r).handlers.push(_X(i.value,s))}if(a)for(let r in a){let s=a[r];s&&A(r).observers.push(_X(i.value,s))}}for(let i in Sc)A(i).handlers.push(Sc[i]);for(let i in xl)A(i).observers.push(xl[i]);return e}var J$=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],JvA="dthko",Y$=[16,17,18,20,91,92,224,225],W5=6;function Z5(t){return Math.max(0,t)*.7+8}function YvA(t,e){return Math.max(Math.abs(t.clientX-e.clientX),Math.abs(t.clientY-e.clientY))}var SN=class{constructor(e,A,i,n){this.view=e,this.startEvent=A,this.style=i,this.mustSelect=n,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=A,this.scrollParents=tvA(e.contentDOM),this.atoms=e.state.facet(rf).map(a=>a(e));let o=e.contentDOM.ownerDocument;o.addEventListener("mousemove",this.move=this.move.bind(this)),o.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=A.shiftKey,this.multiple=e.state.facet($a.allowMultipleSelections)&&TvA(e,A),this.dragging=zvA(e,A)&&z$(A)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&YvA(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let A=0,i=0,n=0,o=0,a=this.view.win.innerWidth,r=this.view.win.innerHeight;this.scrollParents.x&&({left:n,right:a}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:o,bottom:r}=this.scrollParents.y.getBoundingClientRect());let s=aF(this.view);e.clientX-s.left<=n+W5?A=-Z5(n-e.clientX):e.clientX+s.right>=a-W5&&(A=Z5(e.clientX-a)),e.clientY-s.top<=o+W5?i=-Z5(o-e.clientY):e.clientY+s.bottom>=r-W5&&(i=Z5(e.clientY-r)),this.setScrollSpeed(A,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,A){this.scrollSpeed={x:e,y:A},e||A?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:A}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),A&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=A,A=0),(e||A)&&this.view.win.scrollBy(e,A),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:A}=this,i=_$(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(A.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(A=>A.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function TvA(t,e){let A=t.state.facet(m$);return A.length?A[0](e):gt.mac?e.metaKey:e.ctrlKey}function HvA(t,e){let A=t.state.facet(p$);return A.length?A[0](e):gt.mac?!e.altKey:!e.ctrlKey}function zvA(t,e){let{main:A}=t.state.selection;if(A.empty)return!1;let i=DQ(t.root);if(!i||i.rangeCount==0)return!0;let n=i.getRangeAt(0).getClientRects();for(let o=0;o=e.clientX&&a.top<=e.clientY&&a.bottom>=e.clientY)return!0}return!1}function OvA(t,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let A=e.target,i;A!=t.contentDOM;A=A.parentNode)if(!A||A.nodeType==11||(i=Ha.get(A))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}var Sc=Object.create(null),xl=Object.create(null),T$=gt.ie&>.ie_version<15||gt.ios&>.webkit_version<604;function PvA(t){let e=t.dom.parentNode;if(!e)return;let A=e.appendChild(document.createElement("textarea"));A.style.cssText="position: fixed; left: -10000px; top: 10px",A.focus(),setTimeout(()=>{t.focus(),A.remove(),H$(t,A.value)},50)}function kD(t,e,A){for(let i of t.facet(e))A=i(A,t);return A}function H$(t,e){e=kD(t.state,iF,e);let{state:A}=t,i,n=1,o=A.toText(e),a=o.lines==A.selection.ranges.length;if(xN!=null&&A.selection.ranges.every(s=>s.empty)&&xN==o.toString()){let s=-1;i=A.changeByRange(g=>{let l=A.doc.lineAt(g.from);if(l.from==s)return{range:g};s=l.from;let C=A.toText((a?o.line(n++).text:e)+A.lineBreak);return{changes:{from:l.from,insert:C},range:de.cursor(g.from+C.length)}})}else a?i=A.changeByRange(s=>{let g=o.line(n++);return{changes:{from:s.from,to:s.to,insert:g.text},range:de.cursor(s.from+g.length)}}):i=A.replaceSelection(o);t.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}xl.scroll=t=>{t.inputState.lastScrollTop=t.scrollDOM.scrollTop,t.inputState.lastScrollLeft=t.scrollDOM.scrollLeft};Sc.keydown=(t,e)=>(t.inputState.setSelectionOrigin("select"),e.keyCode==27&&t.inputState.tabFocusMode!=0&&(t.inputState.tabFocusMode=Date.now()+2e3),!1);xl.touchstart=(t,e)=>{t.inputState.lastTouchTime=Date.now(),t.inputState.setSelectionOrigin("select.pointer")};xl.touchmove=t=>{t.inputState.setSelectionOrigin("select.pointer")};Sc.mousedown=(t,e)=>{if(t.observer.flush(),t.inputState.lastTouchTime>Date.now()-2e3)return!1;let A=null;for(let i of t.state.facet(w$))if(A=i(t,e),A)break;if(!A&&e.button==0&&(A=qvA(t,e)),A){let i=!t.hasFocus;t.inputState.startMouseSelection(new SN(t,e,A,i)),i&&t.observer.ignore(()=>{C$(t.contentDOM);let o=t.root.activeElement;o&&!o.contains(t.contentDOM)&&o.blur()});let n=t.inputState.mouseSelection;if(n)return n.start(e),n.dragging===!1}else t.inputState.setSelectionOrigin("select.pointer");return!1};function LX(t,e,A,i){if(i==1)return de.cursor(e,A);if(i==2)return kvA(t.state,e,A);{let n=t.docView.lineAt(e,A),o=t.state.doc.lineAt(n?n.posAtEnd:e),a=n?n.posAtStart:o.from,r=n?n.posAtEnd:o.to;return rDate.now()-400&&Math.abs(e.clientX-t.clientX)<2&&Math.abs(e.clientY-t.clientY)<2?(KX+1)%3:1}function qvA(t,e){let A=t.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=z$(e),n=t.state.selection;return{update(o){o.docChanged&&(A.pos=o.changes.mapPos(A.pos),n=n.map(o.changes))},get(o,a,r){let s=t.posAndSideAtCoords({x:o.clientX,y:o.clientY},!1),g,l=LX(t,s.pos,s.assoc,i);if(A.pos!=s.pos&&!a){let C=LX(t,A.pos,A.assoc,i),I=Math.min(C.from,l.from),d=Math.max(C.to,l.to);l=I1&&(g=VvA(n,s.pos))?g:r?n.addRange(l):de.create([l])}}}function VvA(t,e){for(let A=0;A=e)return de.create(t.ranges.slice(0,A).concat(t.ranges.slice(A+1)),t.mainIndex==A?0:t.mainIndex-(t.mainIndex>A?1:0))}return null}Sc.dragstart=(t,e)=>{let{selection:{main:A}}=t.state;if(e.target.draggable){let n=t.docView.tile.nearest(e.target);if(n&&n.isWidget()){let o=n.posAtStart,a=o+n.length;(o>=A.to||a<=A.from)&&(A=de.range(o,a))}}let{inputState:i}=t;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=A,e.dataTransfer&&(e.dataTransfer.setData("Text",kD(t.state,nF,t.state.sliceDoc(A.from,A.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Sc.dragend=t=>(t.inputState.draggedContent=null,!1);function JX(t,e,A,i){if(A=kD(t.state,iF,A),!A)return;let n=t.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:o}=t.inputState,a=i&&o&&HvA(t,e)?{from:o.from,to:o.to}:null,r={from:n,insert:A},s=t.state.changes(a?[a,r]:r);t.focus(),t.dispatch({changes:s,selection:{anchor:s.mapPos(n,-1),head:s.mapPos(n,1)},userEvent:a?"move.drop":"input.drop"}),t.inputState.draggedContent=null}Sc.drop=(t,e)=>{if(!e.dataTransfer)return!1;if(t.state.readOnly)return!0;let A=e.dataTransfer.files;if(A&&A.length){let i=Array(A.length),n=0,o=()=>{++n==A.length&&JX(t,e,i.filter(a=>a!=null).join(t.state.lineBreak),!1)};for(let a=0;a{/[\x00-\x08\x0e-\x1f]{2}/.test(r.result)||(i[a]=r.result),o()},r.readAsText(A[a])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return JX(t,e,i,!0),!0}return!1};Sc.paste=(t,e)=>{if(t.state.readOnly)return!0;t.observer.flush();let A=T$?null:e.clipboardData;return A?(H$(t,A.getData("text/plain")||A.getData("text/uri-list")),!0):(PvA(t),!1)};function WvA(t,e){let A=t.dom.parentNode;if(!A)return;let i=A.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),t.focus()},50)}function ZvA(t){let e=[],A=[],i=!1;for(let n of t.selection.ranges)n.empty||(e.push(t.sliceDoc(n.from,n.to)),A.push(n));if(!e.length){let n=-1;for(let{from:o}of t.selection.ranges){let a=t.doc.lineAt(o);a.number>n&&(e.push(a.text),A.push({from:a.from,to:Math.min(t.doc.length,a.to+1)})),n=a.number}i=!0}return{text:kD(t,nF,e.join(t.lineBreak)),ranges:A,linewise:i}}var xN=null;Sc.copy=Sc.cut=(t,e)=>{let A=DQ(t.root);if(A&&!P3(t.contentDOM,A))return!1;let{text:i,ranges:n,linewise:o}=ZvA(t.state);if(!i&&!o)return!1;xN=o?i:null,e.type=="cut"&&!t.state.readOnly&&t.dispatch({changes:n,scrollIntoView:!0,userEvent:"delete.cut"});let a=T$?null:e.clipboardData;return a?(a.clearData(),a.setData("text/plain",i),!0):(WvA(t,i),!1)};var O$=hg.define();function P$(t,e){let A=[];for(let i of t.facet(v$)){let n=i(t,e);n&&A.push(n)}return A.length?t.update({effects:A,annotations:O$.of(!0)}):null}function j$(t){setTimeout(()=>{let e=t.hasFocus;if(e!=t.inputState.notifiedFocused){let A=P$(t.state,e);A?t.dispatch(A):t.update([])}},10)}xl.focus=t=>{t.inputState.lastFocusTime=Date.now(),!t.scrollDOM.scrollTop&&(t.inputState.lastScrollTop||t.inputState.lastScrollLeft)&&(t.scrollDOM.scrollTop=t.inputState.lastScrollTop,t.scrollDOM.scrollLeft=t.inputState.lastScrollLeft),j$(t)};xl.blur=t=>{t.observer.clearSelectionRange(),j$(t)};xl.compositionstart=xl.compositionupdate=t=>{t.observer.editContext||(t.inputState.compositionFirstChange==null&&(t.inputState.compositionFirstChange=!0),t.inputState.composing<0&&(t.inputState.composing=0))};xl.compositionend=t=>{t.observer.editContext||(t.inputState.composing=-1,t.inputState.compositionEndedAt=Date.now(),t.inputState.compositionPendingKey=!0,t.inputState.compositionPendingChange=t.observer.pendingRecords().length>0,t.inputState.compositionFirstChange=null,gt.chrome&>.android?t.observer.flushSoon():t.inputState.compositionPendingChange?Promise.resolve().then(()=>t.observer.flush()):setTimeout(()=>{t.inputState.composing<0&&t.docView.hasComposition&&t.update([])},50))};xl.contextmenu=t=>{t.inputState.lastContextMenu=Date.now()};Sc.beforeinput=(t,e)=>{var A,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(t.inputState.insertingText=e.data,t.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&t.observer.editContext){let o=(A=e.dataTransfer)===null||A===void 0?void 0:A.getData("text/plain"),a=e.getTargetRanges();if(o&&a.length){let r=a[0],s=t.posAtDOM(r.startContainer,r.startOffset),g=t.posAtDOM(r.endContainer,r.endOffset);return rF(t,{from:s,to:g,insert:t.state.toText(o)},null),!0}}let n;if(gt.chrome&>.android&&(n=J$.find(o=>o.inputType==e.inputType))&&(t.observer.delayAndroidKey(n.key,n.keyCode),n.key=="Backspace"||n.key=="Delete")){let o=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var a;(((a=window.visualViewport)===null||a===void 0?void 0:a.height)||0)>o+10&&t.hasFocus&&(t.contentDOM.blur(),t.focus())},100)}return gt.ios&&e.inputType=="deleteContentForward"&&t.observer.flushSoon(),gt.safari&&e.inputType=="insertText"&&t.inputState.composing>=0&&setTimeout(()=>xl.compositionend(t,e),20),!1};var YX=new Set;function XvA(t){YX.has(t)||(YX.add(t),t.addEventListener("copy",()=>{}),t.addEventListener("cut",()=>{}))}var TX=["pre-wrap","normal","pre-line","break-spaces"],kQ=!1;function HX(){kQ=!1}var RN=class{constructor(e){this.lineWrapping=e,this.doc=bn.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,A){let i=this.doc.lineAt(A).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((A-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return TX.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let A=!1;for(let i=0;i-1,s=Math.abs(A-this.lineHeight)>.3||this.lineWrapping!=r||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=r,this.lineHeight=A,this.charWidth=i,this.textHeight=n,this.lineLength=o,s){this.heightSamples={};for(let g=0;g0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>oD&&(kQ=!0),this.height=e)}replace(e,A,i){return t.of(i)}decomposeLeft(e,A){A.push(this)}decomposeRight(e,A){A.push(this)}applyChanges(e,A,i,n){let o=this,a=i.doc;for(let r=n.length-1;r>=0;r--){let{fromA:s,toA:g,fromB:l,toB:C}=n[r],I=o.lineAt(s,oa.ByPosNoHeight,i.setDoc(A),0,0),d=I.to>=g?I:o.lineAt(g,oa.ByPosNoHeight,i,0,0);for(C+=d.to-g,g=d.to;r>0&&I.from<=n[r-1].toA;)s=n[r-1].fromA,l=n[r-1].fromB,r--,so*2){let r=e[A-1];r.break?e.splice(--A,1,r.left,null,r.right):e.splice(--A,1,r.left,r.right),i+=1+r.break,n-=r.size}else if(o>n*2){let r=e[i];r.break?e.splice(i,1,r.left,null,r.right):e.splice(i,1,r.left,r.right),i+=2+r.break,o-=r.size}else break;else if(n=o&&a(this.lineAt(0,oa.ByPos,i,n,o))}setMeasuredHeight(e){let A=e.heights[e.index++];A<0?(this.spaceAbove=-A,A=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(A)}updateHeight(e,A=0,i=!1,n){return n&&n.from<=A&&n.more&&this.setMeasuredHeight(n),this.outdated=!1,this}toString(){return`block(${this.length})`}},kl=class t extends uD{constructor(e,A,i){super(e,A,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,A){return new bc(A,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,A,i){let n=i[0];return i.length==1&&(n instanceof t||n instanceof MI&&n.flags&4)&&Math.abs(this.length-n.length)<10?(n instanceof MI?n=new t(n.length,this.height,this.spaceAbove):n.height=this.height,this.outdated||(n.outdated=!1),n):Og.of(i)}updateHeight(e,A=0,i=!1,n){return n&&n.from<=A&&n.more?this.setMeasuredHeight(n):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},MI=class t extends Og{constructor(e){super(e,0)}heightMetrics(e,A){let i=e.doc.lineAt(A).number,n=e.doc.lineAt(A+this.length).number,o=n-i+1,a,r=0;if(e.lineWrapping){let s=Math.min(this.height,e.lineHeight*o);a=s/o,this.length>o+1&&(r=(this.height-s)/(this.length-o-1))}else a=this.height/o;return{firstLine:i,lastLine:n,perLine:a,perChar:r}}blockAt(e,A,i,n){let{firstLine:o,lastLine:a,perLine:r,perChar:s}=this.heightMetrics(A,n);if(A.lineWrapping){let g=n+(e0){let o=i[i.length-1];o instanceof t?i[i.length-1]=new t(o.length+n):i.push(null,new t(n-1))}if(e>0){let o=i[0];o instanceof t?i[0]=new t(e+o.length):i.unshift(new t(e-1),null)}return Og.of(i)}decomposeLeft(e,A){A.push(new t(e-1),null)}decomposeRight(e,A){A.push(null,new t(this.length-e-1))}updateHeight(e,A=0,i=!1,n){let o=A+this.length;if(n&&n.from<=A+this.length&&n.more){let a=[],r=Math.max(A,n.from),s=-1;for(n.from>A&&a.push(new t(n.from-A-1).updateHeight(e,A));r<=o&&n.more;){let l=e.doc.lineAt(r).length;a.length&&a.push(null);let C=n.heights[n.index++],I=0;C<0&&(I=-C,C=n.heights[n.index++]),s==-1?s=C:Math.abs(C-s)>=oD&&(s=-2);let d=new kl(l,C,I);d.outdated=!1,a.push(d),r+=l+1}r<=o&&a.push(null,new t(o-r).updateHeight(e,r));let g=Og.of(a);return(s<0||Math.abs(g.height-this.height)>=oD||Math.abs(s-this.heightMetrics(e,A).perLine)>=oD)&&(kQ=!0),hD(this,g)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(A,A+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},FN=class extends Og{constructor(e,A,i){super(e.length+A+i.length,e.height+i.height,A|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,A,i,n){let o=i+this.left.height;return er))return g;let l=A==oa.ByPosNoHeight?oa.ByPosNoHeight:oa.ByPos;return s?g.join(this.right.lineAt(r,l,i,a,r)):this.left.lineAt(r,l,i,n,o).join(g)}forEachLine(e,A,i,n,o,a){let r=n+this.left.height,s=o+this.left.length+this.break;if(this.break)e=s&&this.right.forEachLine(e,A,i,r,s,a);else{let g=this.lineAt(s,oa.ByPos,i,n,o);e=e&&g.from<=A&&a(g),A>g.to&&this.right.forEachLine(g.to+1,A,i,r,s,a)}}replace(e,A,i){let n=this.left.length+this.break;if(Athis.left.length)return this.balanced(this.left,this.right.replace(e-n,A-n,i));let o=[];e>0&&this.decomposeLeft(e,o);let a=o.length;for(let r of i)o.push(r);if(e>0&&zX(o,a-1),A=i&&A.push(null)),e>i&&this.right.decomposeLeft(e-i,A)}decomposeRight(e,A){let i=this.left.length,n=i+this.break;if(e>=n)return this.right.decomposeRight(e-n,A);e2*A.size||A.size>2*e.size?Og.of(this.break?[e,null,A]:[e,A]):(this.left=hD(this.left,e),this.right=hD(this.right,A),this.setHeight(e.height+A.height),this.outdated=e.outdated||A.outdated,this.size=e.size+A.size,this.length=e.length+this.break+A.length,this)}updateHeight(e,A=0,i=!1,n){let{left:o,right:a}=this,r=A+o.length+this.break,s=null;return n&&n.from<=A+o.length&&n.more?s=o=o.updateHeight(e,A,i,n):o.updateHeight(e,A,i),n&&n.from<=r+a.length&&n.more?s=a=a.updateHeight(e,r,i,n):a.updateHeight(e,r,i),s?this.balanced(o,a):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function zX(t,e){let A,i;t[e]==null&&(A=t[e-1])instanceof MI&&(i=t[e+1])instanceof MI&&t.splice(e-1,3,new MI(A.length+1+i.length))}var A7A=5,_N=class t{constructor(e,A){this.pos=e,this.oracle=A,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,A){if(this.lineStart>-1){let i=Math.min(A,this.lineEnd),n=this.nodes[this.nodes.length-1];n instanceof kl?n.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new kl(i-this.pos,-1,0)),this.writtenTo=i,A>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=A}point(e,A,i){if(e=A7A)&&this.addLineDeco(n,o,a)}else A>e&&this.span(e,A);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:A}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=A,this.writtenToe&&this.nodes.push(new kl(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,A){let i=new MI(A-e);return this.oracle.doc.lineAt(e).to==A&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof kl)return e;let A=new kl(0,-1,0);return this.nodes.push(A),A}addBlock(e){this.enterLine();let A=e.deco;A&&A.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,A&&A.endSide>0&&(this.covering=e)}addLineDeco(e,A,i){let n=this.ensureLine();n.length+=i,n.collapsed+=i,n.widgetHeight=Math.max(n.widgetHeight,e),n.breaks+=A,this.writtenTo=this.pos=this.pos+i}finish(e){let A=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(A instanceof kl)&&!this.isCovered?this.nodes.push(new kl(0,-1,0)):(this.writtenTol.clientHeight||l.scrollWidth>l.clientWidth)&&C.overflow!="visible"){let I=l.getBoundingClientRect();o=Math.max(o,I.left),a=Math.min(a,I.right),r=Math.max(r,I.top),s=Math.min(g==t.parentNode?n.innerHeight:s,I.bottom)}g=C.position=="absolute"||C.position=="fixed"?l.offsetParent:l.parentNode}else if(g.nodeType==11)g=g.host;else break;return{left:o-A.left,right:Math.max(o,a)-A.left,top:r-(A.top+e),bottom:Math.max(r,s)-(A.top+e)}}function i7A(t){let e=t.getBoundingClientRect(),A=t.ownerDocument.defaultView||window;return e.left0&&e.top0}function n7A(t,e){let A=t.getBoundingClientRect();return{left:0,right:A.right-A.left,top:e,bottom:A.bottom-(A.top+e)}}var X3=class{constructor(e,A,i,n){this.from=e,this.to=A,this.size=i,this.displaySize=n}static same(e,A){if(e.length!=A.length)return!1;for(let i=0;itypeof i!="function"&&i.class=="cm-lineWrapping");this.heightOracle=new RN(A),this.stateDeco=PX(e),this.heightMap=Og.empty().applyChanges(this.stateDeco,bn.empty,this.heightOracle.setDoc(e.doc),[new kc(0,0,0,e.doc.length)]);for(let i=0;i<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());i++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=Dt.set(this.lineGaps.map(i=>i.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:A}=this.state.selection;for(let i=0;i<=1;i++){let n=i?A.head:A.anchor;if(!e.some(({from:o,to:a})=>n>=o&&n<=a)){let{from:o,to:a}=this.lineBlockAt(n);e.push(new uQ(o,a))}}return this.viewports=e.sort((i,n)=>i.from-n.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?OX:new KN(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(z3(e,this.scaler))})}update(e,A=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=PX(this.state);let n=e.changedRanges,o=kc.extendWithRanges(n,e7A(i,this.stateDeco,e?e.changes:Vr.empty(this.state.doc.length))),a=this.heightMap.height,r=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);HX(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),o),(this.heightMap.height!=a||kQ)&&(e.flags|=2),r?(this.scrollAnchorPos=e.changes.mapPos(r.from,-1),this.scrollAnchorHeight=r.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=a);let s=o.length?this.mapViewport(this.viewport,e.changes):this.viewport;(A&&(A.range.heads.to)||!this.viewportIsAppropriate(s))&&(s=this.getViewport(0,A));let g=s.from!=this.viewport.from||s.to!=this.viewport.to;this.viewport=s,e.flags|=this.updateForViewport(),(g||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),A&&(this.scrollTarget=A),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(b$)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let A=e.contentDOM,i=window.getComputedStyle(A),n=this.heightOracle,o=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?mo.RTL:mo.LTR;let a=this.heightOracle.mustRefreshForWrapping(o)||this.mustMeasureContent,r=A.getBoundingClientRect(),s=a||this.mustMeasureContent||this.contentDOMHeight!=r.height;this.contentDOMHeight=r.height,this.mustMeasureContent=!1;let g=0,l=0;if(r.width&&r.height){let{scaleX:M,scaleY:D}=c$(A,r);(M>.005&&Math.abs(this.scaleX-M)>.005||D>.005&&Math.abs(this.scaleY-D)>.005)&&(this.scaleX=M,this.scaleY=D,g|=16,a=s=!0)}let C=(parseInt(i.paddingTop)||0)*this.scaleY,I=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=C||this.paddingBottom!=I)&&(this.paddingTop=C,this.paddingBottom=I,g|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(n.lineWrapping&&(s=!0),this.editorWidth=e.scrollDOM.clientWidth,g|=16);let d=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=d&&(this.scrollAnchorHeight=-1,this.scrollTop=d),this.scrolledToBottom=I$(e.scrollDOM);let B=(this.printing?n7A:t7A)(A,this.paddingTop),E=B.top-this.pixelViewport.top,Q=B.bottom-this.pixelViewport.bottom;this.pixelViewport=B;let f=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(f!=this.inView&&(this.inView=f,f&&(s=!0)),!this.inView&&!this.scrollTarget&&!i7A(e.dom))return 0;let b=r.width;if((this.contentDOMWidth!=b||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=r.width,this.editorHeight=e.scrollDOM.clientHeight,g|=16),s){let M=e.docView.measureVisibleLineHeights(this.viewport);if(n.mustRefreshForHeights(M)&&(a=!0),a||n.lineWrapping&&Math.abs(b-this.contentDOMWidth)>n.charWidth){let{lineHeight:D,charWidth:F,textHeight:_}=e.docView.measureTextSize();a=D>0&&n.refresh(o,D,F,_,Math.max(5,b/F),M),a&&(e.docView.minWidth=0,g|=16)}E>0&&Q>0?l=Math.max(E,Q):E<0&&Q<0&&(l=Math.min(E,Q)),HX();for(let D of this.viewports){let F=D.from==this.viewport.from?M:e.docView.measureVisibleLineHeights(D);this.heightMap=(a?Og.empty().applyChanges(this.stateDeco,bn.empty,this.heightOracle,[new kc(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(n,0,a,new NN(D.from,F))}kQ&&(g|=2)}let S=!this.viewportIsAppropriate(this.viewport,l)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return S&&(g&2&&(g|=this.updateScaler()),this.viewport=this.getViewport(l,this.scrollTarget),g|=this.updateForViewport()),(g&2||S)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(a?[]:this.lineGaps,e)),g|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),g}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,A){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),n=this.heightMap,o=this.heightOracle,{visibleTop:a,visibleBottom:r}=this,s=new uQ(n.lineAt(a-i*1e3,oa.ByHeight,o,0,0).from,n.lineAt(r+(1-i)*1e3,oa.ByHeight,o,0,0).to);if(A){let{head:g}=A.range;if(gs.to){let l=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),C=n.lineAt(g,oa.ByPos,o,0,0),I;A.y=="center"?I=(C.top+C.bottom)/2-l/2:A.y=="start"||A.y=="nearest"&&g=r+Math.max(10,Math.min(i,250)))&&n>a-2*1e3&&o>1,a=n<<1;if(this.defaultTextDirection!=mo.LTR&&!i)return[];let r=[],s=(l,C,I,d)=>{if(C-ll&&ff.from>=I.from&&f.to<=I.to&&Math.abs(f.from-l)f.fromb));if(!Q){if(CS.from<=C&&S.to>=C)){let S=A.moveToLineBoundary(de.cursor(C),!1,!0).head;S>l&&(C=S)}let f=this.gapSize(I,l,C,d),b=i||f<2e6?f:2e6;Q=new X3(l,C,f,b)}r.push(Q)},g=l=>{if(l.length2e6)for(let F of e)F.from>=l.from&&F.froml.from&&s(l.from,d,l,C),BA.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let A=this.stateDeco;this.lineGaps.length&&(A=A.concat(this.lineGapDeco));let i=[];to.spans(A,this.viewport.from,this.viewport.to,{span(o,a){i.push({from:o,to:a})},point(){}},20);let n=0;if(i.length!=this.visibleRanges.length)n=12;else for(let o=0;o=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(A=>A.from<=e&&A.to>=e)||z3(this.heightMap.lineAt(e,oa.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(A=>A.top<=e&&A.bottom>=e)||z3(this.heightMap.lineAt(this.scaler.fromDOM(e),oa.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let A=this.lineBlockAtHeight(e+8);return A.from>=this.viewport.from||this.viewportLines[0].top-e>200?A:this.viewportLines[0]}elementAtHeight(e){return z3(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},uQ=class{constructor(e,A){this.from=e,this.to=A}};function o7A(t,e,A){let i=[],n=t,o=0;return to.spans(A,t,e,{span(){},point(a,r){a>n&&(i.push({from:n,to:a}),o+=a-n),n=r}},20),n=1)return e[e.length-1].to;let i=Math.floor(t*A);for(let n=0;;n++){let{from:o,to:a}=e[n],r=a-o;if(i<=r)return o+i;i-=r}}function $5(t,e){let A=0;for(let{from:i,to:n}of t.ranges){if(e<=n){A+=e-i;break}A+=n-i}return A/t.total}function a7A(t,e){for(let A of t)if(e(A))return A}var OX={toDOM(t){return t},fromDOM(t){return t},scale:1,eq(t){return t==this}};function PX(t){let e=t.facet(MD).filter(i=>typeof i!="function"),A=t.facet(oF).filter(i=>typeof i!="function");return A.length&&e.push(to.join(A)),e}var KN=class t{constructor(e,A,i){let n=0,o=0,a=0;this.viewports=i.map(({from:r,to:s})=>{let g=A.lineAt(r,oa.ByPos,e,0,0).top,l=A.lineAt(s,oa.ByPos,e,0,0).bottom;return n+=l-g,{from:r,to:s,top:g,bottom:l,domTop:0,domBottom:0}}),this.scale=(7e6-n)/(A.height-n);for(let r of this.viewports)r.domTop=a+(r.top-o)*this.scale,a=r.domBottom=r.domTop+(r.bottom-r.top),o=r.bottom}toDOM(e){for(let A=0,i=0,n=0;;A++){let o=AA.from==e.viewports[i].from&&A.to==e.viewports[i].to):!1}};function z3(t,e){if(e.scale==1)return t;let A=e.toDOM(t.top),i=e.toDOM(t.bottom);return new bc(t.from,t.length,A,i-A,Array.isArray(t._content)?t._content.map(n=>z3(n,e)):t._content)}var AD=We.define({combine:t=>t.join(" ")}),eN=We.define({combine:t=>t.indexOf(!0)>-1}),UN=Ml.newName(),q$=Ml.newName(),V$=Ml.newName(),W$={"&light":"."+q$,"&dark":"."+V$};function JN(t,e,A){return new Ml(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,n=>{if(n=="&")return t;if(!A||!A[n])throw new RangeError(`Unsupported selector: ${n}`);return A[n]}):t+" "+i}})}var r7A=JN("."+UN,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},W$),s7A={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},tN=gt.ie&>.ie_version<=11,YN=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new CN,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(A=>{for(let i of A)this.queue.push(i);(gt.ie&>.ie_version<=11||gt.ios&&e.composing)&&A.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&>.android&&e.constructor.EDIT_CONTEXT!==!1&&!(gt.chrome&>.chrome_version<126)&&(this.editContext=new TN(e),e.state.facet(KC)&&(e.contentDOM.editContext=this.editContext.editContext)),tN&&(this.onCharData=A=>{this.queue.push({target:A.target,type:"characterData",oldValue:A.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var A;((A=this.view.docView)===null||A===void 0?void 0:A.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),A.length>0&&A[A.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(A=>{A.length>0&&A[A.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((A,i)=>A!=e[i]))){this.gapIntersection.disconnect();for(let A of e)this.gapIntersection.observe(A);this.gaps=e}}onSelectionChange(e){let A=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,n=this.selectionRange;if(i.state.facet(KC)?i.root.activeElement!=this.dom:!P3(this.dom,n))return;let o=n.anchorNode&&i.docView.tile.nearest(n.anchorNode);if(o&&o.isWidget()&&o.widget.ignoreEvent(e)){A||(this.selectionChanged=!1);return}(gt.ie&>.ie_version<=11||gt.android&>.chrome)&&!i.state.selection.main.empty&&n.focusNode&&j3(n.focusNode,n.focusOffset,n.anchorNode,n.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,A=DQ(e.root);if(!A)return!1;let i=gt.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&g7A(this.view,A)||A;if(!i||this.selectionRange.eq(i))return!1;let n=P3(this.dom,i);return n&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let o=this.delayedAndroidKey;o&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=o.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&o.force&&wQ(this.dom,o.key,o.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(n)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:A,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let A=-1,i=-1,n=!1;for(let o of e){let a=this.readMutation(o);a&&(a.typeOver&&(n=!0),A==-1?{from:A,to:i}=a:(A=Math.min(a.from,A),i=Math.max(a.to,i)))}return{from:A,to:i,typeOver:n}}readChange(){let{from:e,to:A,typeOver:i}=this.processRecords(),n=this.selectionChanged&&P3(this.dom,this.selectionRange);if(e<0&&!n)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let o=new MN(this.view,e,A,i);return this.view.docView.domChanged={newSel:o.newSel?o.newSel.main:null},o}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let A=this.readChange();if(!A)return this.view.requestMeasure(),!1;let i=this.view.state,n=K$(this.view,A);return this.view.state==i&&(A.domChanged||A.newSel&&!QD(this.view.state.selection,A.newSel.main))&&this.view.update([]),n}readMutation(e){let A=this.view.docView.tile.nearest(e.target);if(!A||A.isWidget())return null;if(A.markDirty(e.type=="attributes"),e.type=="childList"){let i=jX(A,e.previousSibling||e.target.previousSibling,-1),n=jX(A,e.nextSibling||e.target.nextSibling,1);return{from:i?A.posAfter(i):A.posAtStart,to:n?A.posBefore(n):A.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:A.posAtStart,to:A.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(KC)!=e.state.facet(KC)&&(e.view.contentDOM.editContext=e.state.facet(KC)?this.editContext.editContext:null))}destroy(){var e,A,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(A=this.gapIntersection)===null||A===void 0||A.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let n of this.scrollTargets)n.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function jX(t,e,A){for(;e;){let i=Ha.get(e);if(i&&i.parent==t)return i;let n=e.parentNode;e=n!=t.dom?n:A>0?e.nextSibling:e.previousSibling}return null}function qX(t,e){let A=e.startContainer,i=e.startOffset,n=e.endContainer,o=e.endOffset,a=t.docView.domAtPos(t.state.selection.main.anchor,1);return j3(a.node,a.offset,n,o)&&([A,i,n,o]=[n,o,A,i]),{anchorNode:A,anchorOffset:i,focusNode:n,focusOffset:o}}function g7A(t,e){if(e.getComposedRanges){let n=e.getComposedRanges(t.root)[0];if(n)return qX(t,n)}let A=null;function i(n){n.preventDefault(),n.stopImmediatePropagation(),A=n.getTargetRanges()[0]}return t.contentDOM.addEventListener("beforeinput",i,!0),t.dom.ownerDocument.execCommand("indent"),t.contentDOM.removeEventListener("beforeinput",i,!0),A?qX(t,A):null}var TN=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let A=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let n=e.state.selection.main,{anchor:o,head:a}=n,r=this.toEditorPos(i.updateRangeStart),s=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:r,drifted:!1});let g=s-r>i.text.length;r==this.from&&othis.to&&(s=o);let l=U$(e.state.sliceDoc(r,s),i.text,(g?n.from:n.to)-r,g?"end":null);if(!l){let I=de.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));QD(I,n)||e.dispatch({selection:I,userEvent:"select"});return}let C={from:l.from+r,to:l.toA+r,insert:bn.of(i.text.slice(l.from,l.toB).split(` +`))};if((gt.mac||gt.android)&&C.from==a-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(C={from:r,to:s,insert:bn.of([i.text.replace("."," ")])}),this.pendingContextChange=C,!e.state.readOnly){let I=this.to-this.from+(C.to-C.from+C.insert.length);rF(e,C,de.single(this.toEditorPos(i.selectionStart,I),this.toEditorPos(i.selectionEnd,I)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),C.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(A.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(A.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let n=[],o=null;for(let a=this.toEditorPos(i.rangeStart),r=this.toEditorPos(i.rangeEnd);a{let n=[];for(let o of i.getTextFormats()){let a=o.underlineStyle,r=o.underlineThickness;if(!/none/i.test(a)&&!/none/i.test(r)){let s=this.toEditorPos(o.rangeStart),g=this.toEditorPos(o.rangeEnd);if(s{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)A.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let n=DQ(i.root);n&&n.rangeCount&&this.editContext.updateSelectionBounds(n.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let A=0,i=!1,n=this.pendingContextChange;return e.changes.iterChanges((o,a,r,s,g)=>{if(i)return;let l=g.length-(a-o);if(n&&a>=n.to)if(n.from==o&&n.to==a&&n.insert.eq(g)){n=this.pendingContextChange=null,A+=l,this.to+=l;return}else n=null,this.revertPending(e.state);if(o+=A,a+=A,a<=this.from)this.from+=l,this.to+=l;else if(othis.to||this.to-this.from+g.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(o),this.toContextPos(a),g.toString()),this.to+=l}A+=l}),n&&!i&&this.revertPending(e.state),!i}update(e){let A=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(n=>!n.isUserEvent("input.type")&&n.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||A)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:A}=e.selection.main;this.from=Math.max(0,A-1e4),this.to=Math.min(e.doc.length,A+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let A=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(A.from),this.toContextPos(A.from+A.insert.length),e.doc.sliceString(A.from,A.to))}setSelection(e){let{main:A}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,A.anchor))),n=this.toContextPos(A.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=n)&&this.editContext.updateSelection(i,n)}rangeIsValid(e){let{head:A}=e.selection.main;return!(this.from>0&&A-this.from<500||this.to1e4*3)}toEditorPos(e,A=this.to-this.from){e=Math.min(e,A);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let A=this.composing;return A&&A.drifted?A.contextBase+(e-A.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},ii=(()=>{class t{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(A={}){var i;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),A.parent&&A.parent.appendChild(this.dom);let{dispatch:n}=A;this.dispatchTransactions=A.dispatchTransactions||n&&(o=>o.forEach(a=>n(a,this)))||(o=>this.update(o)),this.dispatch=this.dispatch.bind(this),this._root=A.root||ivA(A.parent)||document,this.viewState=new fD(A.state||$a.create(A)),A.scrollTo&&A.scrollTo.is(V5)&&(this.viewState.scrollTarget=A.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(hQ).map(o=>new V3(o));for(let o of this.plugins)o.update(this);this.observer=new YN(this),this.inputState=new kN(this),this.inputState.ensureHandlers(this.plugins),this.docView=new BD(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((i=document.fonts)===null||i===void 0)&&i.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent=!0,this.requestMeasure()})}dispatch(...A){let i=A.length==1&&A[0]instanceof x0?A:A.length==1&&Array.isArray(A[0])?A[0]:[this.state.update(...A)];this.dispatchTransactions(i,this)}update(A){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let i=!1,n=!1,o,a=this.state;for(let d of A){if(d.startState!=a)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");a=d.state}if(this.destroyed){this.viewState.state=a;return}let r=this.hasFocus,s=0,g=null;A.some(d=>d.annotation(O$))?(this.inputState.notifiedFocused=r,s=1):r!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=r,g=P$(a,r),g||(s=1));let l=this.observer.delayedAndroidKey,C=null;if(l?(this.observer.clearDelayedAndroidKey(),C=this.observer.readChange(),(C&&!this.state.doc.eq(a.doc)||!this.state.selection.eq(a.selection))&&(C=null)):this.observer.clear(),a.facet($a.phrases)!=this.state.facet($a.phrases))return this.setState(a);o=ID.create(this,a,A),o.flags|=s;let I=this.viewState.scrollTarget;try{this.updateState=2;for(let d of A){if(I&&(I=I.map(d.changes)),d.scrollIntoView){let{main:B}=d.state.selection;I=new q3(B.empty?B:de.cursor(B.head,B.head>B.anchor?-1:1))}for(let B of d.effects)B.is(V5)&&(I=B.value.clip(this.state))}this.viewState.update(o,I),this.bidiCache=mD.update(this.bidiCache,o.changes),o.empty||(this.updatePlugins(o),this.inputState.update(o)),i=this.docView.update(o),this.state.facet(T3)!=this.styleModules&&this.mountStyles(),n=this.updateAttrs(),this.showAnnouncements(A),this.docView.updateSelection(i,A.some(d=>d.isUserEvent("select.pointer")))}finally{this.updateState=0}if(o.startState.facet(AD)!=o.state.facet(AD)&&(this.viewState.mustMeasureContent=!0),(i||n||I||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),i&&this.docViewUpdate(),!o.empty)for(let d of this.state.facet(ZR))try{d(o)}catch(B){Sr(this.state,B,"update listener")}(g||C)&&Promise.resolve().then(()=>{g&&this.state==g.startState&&this.dispatch(g),C&&!K$(this,C)&&l.force&&wQ(this.contentDOM,l.key,l.keyCode)})}setState(A){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=A;return}this.updateState=2;let i=this.hasFocus;try{for(let n of this.plugins)n.destroy(this);this.viewState=new fD(A),this.plugins=A.facet(hQ).map(n=>new V3(n)),this.pluginMap.clear();for(let n of this.plugins)n.update(this);this.docView.destroy(),this.docView=new BD(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}i&&this.focus(),this.requestMeasure()}updatePlugins(A){let i=A.startState.facet(hQ),n=A.state.facet(hQ);if(i!=n){let o=[];for(let a of n){let r=i.indexOf(a);if(r<0)o.push(new V3(a));else{let s=this.plugins[r];s.mustUpdate=A,o.push(s)}}for(let a of this.plugins)a.mustUpdate!=A&&a.destroy(this);this.plugins=o,this.pluginMap.clear()}else for(let o of this.plugins)o.mustUpdate=A;for(let o=0;o-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,A&&this.observer.forceFlush();let i=null,n=this.scrollDOM,o=n.scrollTop*this.scaleY,{scrollAnchorPos:a,scrollAnchorHeight:r}=this.viewState;Math.abs(o-this.viewState.scrollTop)>1&&(r=-1),this.viewState.scrollAnchorHeight=-1;try{for(let s=0;;s++){if(r<0)if(I$(n))a=-1,r=this.viewState.heightMap.height;else{let B=this.viewState.scrollAnchorAt(o);a=B.from,r=B.top}this.updateState=1;let g=this.viewState.measure(this);if(!g&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(s>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let l=[];g&4||([this.measureRequests,l]=[l,this.measureRequests]);let C=l.map(B=>{try{return B.read(this)}catch(E){return Sr(this.state,E),VX}}),I=ID.create(this,this.state,[]),d=!1;I.flags|=g,i?i.flags|=g:i=I,this.updateState=2,I.empty||(this.updatePlugins(I),this.inputState.update(I),this.updateAttrs(),d=this.docView.update(I),d&&this.docViewUpdate());for(let B=0;B1||E<-1){o=o+E,n.scrollTop=o/this.scaleY,r=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(i&&!i.empty)for(let s of this.state.facet(ZR))s(i)}get themeClasses(){return UN+" "+(this.state.facet(eN)?V$:q$)+" "+this.state.facet(AD)}updateAttrs(){let A=WX(this,MX,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),i={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(KC)?"true":"false",class:"cm-content",style:`${gt.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(i["aria-readonly"]="true"),WX(this,EN,i);let n=this.observer.ignore(()=>{let o=DX(this.contentDOM,this.contentAttrs,i),a=DX(this.dom,this.editorAttrs,A);return o||a});return this.editorAttrs=A,this.contentAttrs=i,n}showAnnouncements(A){let i=!0;for(let n of A)for(let o of n.effects)if(o.is(t.announce)){i&&(this.announceDOM.textContent=""),i=!1;let a=this.announceDOM.appendChild(document.createElement("div"));a.textContent=o.value}}mountStyles(){this.styleModules=this.state.facet(T3);let A=this.state.facet(t.cspNonce);Ml.mount(this.root,this.styleModules.concat(r7A).reverse(),A?{nonce:A}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(A){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),A){if(this.measureRequests.indexOf(A)>-1)return;if(A.key!=null){for(let i=0;in.plugin==A)||null),i&&i.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(A){return this.readMeasured(),this.viewState.elementAtHeight(A)}lineBlockAtHeight(A){return this.readMeasured(),this.viewState.lineBlockAtHeight(A)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(A){return this.viewState.lineBlockAt(A)}get contentHeight(){return this.viewState.contentHeight}moveByChar(A,i,n){return AN(this,A,NX(this,A,i,n))}moveByGroup(A,i){return AN(this,A,NX(this,A,i,n=>RvA(this,A.head,n)))}visualLineSide(A,i){let n=this.bidiSpans(A),o=this.textDirectionAt(A.from),a=n[i?n.length-1:0];return de.cursor(a.side(i,o)+A.from,a.forward(!i,o)?1:-1)}moveToLineBoundary(A,i,n=!0){return xvA(this,A,i,n)}moveVertically(A,i,n){return AN(this,A,NvA(this,A,i,n))}domAtPos(A,i=1){return this.docView.domAtPos(A,i)}posAtDOM(A,i=0){return this.docView.posFromDOM(A,i)}posAtCoords(A,i=!0){this.readMeasured();let n=vN(this,A,i);return n&&n.pos}posAndSideAtCoords(A,i=!0){return this.readMeasured(),vN(this,A,i)}coordsAtPos(A,i=1){this.readMeasured();let n=this.docView.coordsAt(A,i);if(!n||n.left==n.right)return n;let o=this.state.doc.lineAt(A),a=this.bidiSpans(o),r=a[Mc.find(a,A-o.from,-1,i)];return CD(n,r.dir==mo.LTR==i>0)}coordsForChar(A){return this.readMeasured(),this.docView.coordsForChar(A)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(A){return!this.state.facet(bX)||Athis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(A))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(A){if(A.length>l7A)return u$(A.length);let i=this.textDirectionAt(A.from),n;for(let a of this.bidiCache)if(a.from==A.from&&a.dir==i&&(a.fresh||h$(a.isolates,n=kX(this,A))))return a.order;n||(n=kX(this,A));let o=cvA(A.text,i,n);return this.bidiCache.push(new mD(A.from,A.to,i,n,!0,o)),o}get hasFocus(){var A;return(this.dom.ownerDocument.hasFocus()||gt.safari&&((A=this.inputState)===null||A===void 0?void 0:A.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{C$(this.contentDOM),this.docView.updateSelection()})}setRoot(A){this._root!=A&&(this._root=A,this.observer.setWindow((A.nodeType==9?A:A.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let A of this.plugins)A.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(A,i={}){return V5.of(new q3(typeof A=="number"?de.cursor(A):A,i.y,i.x,i.yMargin,i.xMargin))}scrollSnapshot(){let{scrollTop:A,scrollLeft:i}=this.scrollDOM,n=this.viewState.scrollAnchorAt(A);return V5.of(new q3(de.cursor(n.from),"start","start",n.top-A,i,!0))}setTabFocusMode(A){A==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof A=="boolean"?this.inputState.tabFocusMode=A?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+A)}static domEventHandlers(A){return _o.define(()=>({}),{eventHandlers:A})}static domEventObservers(A){return _o.define(()=>({}),{eventObservers:A})}static theme(A,i){let n=Ml.newName(),o=[AD.of(n),T3.of(JN(`.${n}`,A))];return i&&i.dark&&o.push(eN.of(!0)),o}static baseTheme(A){return vc.lowest(T3.of(JN("."+UN,A,W$)))}static findFromDOM(A){var i;let n=A.querySelector(".cm-content"),o=n&&Ha.get(n)||Ha.get(A);return((i=o?.root)===null||i===void 0?void 0:i.view)||null}}return t.styleModule=T3,t.inputHandler=y$,t.clipboardInputFilter=iF,t.clipboardOutputFilter=nF,t.scrollHandler=M$,t.focusChangeEffect=v$,t.perLineTextDirection=bX,t.exceptionSink=D$,t.updateListener=ZR,t.editable=KC,t.mouseSelectionStyle=w$,t.dragMovesSelection=p$,t.clickAddsSelectionRange=m$,t.decorations=MD,t.blockWrappers=S$,t.outerDecorations=oF,t.atomicRanges=rf,t.bidiIsolatedRanges=x$,t.scrollMargins=R$,t.darkTheme=eN,t.cspNonce=We.define({combine:e=>e.length?e[0]:""}),t.contentAttributes=EN,t.editorAttributes=MX,t.lineWrapping=t.contentAttributes.of({class:"cm-lineWrapping"}),t.announce=Hi.define(),t})(),l7A=4096,VX={},mD=class t{constructor(e,A,i,n,o,a){this.from=e,this.to=A,this.dir=i,this.isolates=n,this.fresh=o,this.order=a}static update(e,A){if(A.empty&&!e.some(o=>o.fresh))return e;let i=[],n=e.length?e[e.length-1].dir:mo.LTR;for(let o=Math.max(0,e.length-10);o=0;n--){let o=i[n],a=typeof o=="function"?o(t):o;a&&AF(a,A)}return A}var c7A=gt.mac?"mac":gt.windows?"win":gt.linux?"linux":"key";function C7A(t,e){let A=t.split(/-(?!$)/),i=A[A.length-1];i=="Space"&&(i=" ");let n,o,a,r;for(let s=0;si.concat(n),[]))),A}function X$(t,e,A){return $$(Z$(t.state),e,t,A)}var vI=null,d7A=4e3;function B7A(t,e=c7A){let A=Object.create(null),i=Object.create(null),n=(a,r)=>{let s=i[a];if(s==null)i[a]=r;else if(s!=r)throw new Error("Key binding "+a+" is used both as a regular binding and as a multi-stroke prefix")},o=(a,r,s,g,l)=>{var C,I;let d=A[a]||(A[a]=Object.create(null)),B=r.split(/ (?!$)/).map(f=>C7A(f,e));for(let f=1;f{let M=vI={view:S,prefix:b,scope:a};return setTimeout(()=>{vI==M&&(vI=null)},d7A),!0}]})}let E=B.join(" ");n(E,!1);let Q=d[E]||(d[E]={preventDefault:!1,stopPropagation:!1,run:((I=(C=d._any)===null||C===void 0?void 0:C.run)===null||I===void 0?void 0:I.slice())||[]});s&&Q.run.push(s),g&&(Q.preventDefault=!0),l&&(Q.stopPropagation=!0)};for(let a of t){let r=a.scope?a.scope.split(" "):["editor"];if(a.any)for(let g of r){let l=A[g]||(A[g]=Object.create(null));l._any||(l._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:C}=a;for(let I in l)l[I].run.push(d=>C(d,HN))}let s=a[e]||a.key;if(s)for(let g of r)o(g,s,a.run,a.preventDefault,a.stopPropagation),a.shift&&o(g,"Shift-"+s,a.shift,a.preventDefault,a.stopPropagation)}return A}var HN=null;function $$(t,e,A,i){HN=e;let n=uX(e),o=Zr(n,0),a=zg(o)==n.length&&n!=" ",r="",s=!1,g=!1,l=!1;vI&&vI.view==A&&vI.scope==i&&(r=vI.prefix+" ",Y$.indexOf(e.keyCode)<0&&(g=!0,vI=null));let C=new Set,I=Q=>{if(Q){for(let f of Q.run)if(!C.has(f)&&(C.add(f),f(A)))return Q.stopPropagation&&(l=!0),!0;Q.preventDefault&&(Q.stopPropagation&&(l=!0),g=!0)}return!1},d=t[i],B,E;return d&&(I(d[r+eD(n,e,!a)])?s=!0:a&&(e.altKey||e.metaKey||e.ctrlKey)&&!(gt.windows&&e.ctrlKey&&e.altKey)&&!(gt.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(B=GC[e.keyCode])&&B!=n?(I(d[r+eD(B,e,!0)])||e.shiftKey&&(E=QQ[e.keyCode])!=n&&E!=B&&I(d[r+eD(E,e,!1)]))&&(s=!0):a&&e.shiftKey&&I(d[r+eD(n,e,!0)])&&(s=!0),!s&&I(d._any)&&(s=!0)),g&&(s=!0),s&&l&&e.stopPropagation(),HN=null,s}var of=class t{constructor(e,A,i,n,o){this.className=e,this.left=A,this.top=i,this.width=n,this.height=o}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,A){return A.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,A,i){if(i.empty){let n=e.coordsAtPos(i.head,i.assoc||1);if(!n)return[];let o=AAA(e);return[new t(A,n.left-o.left,n.top-o.top,null,n.bottom-n.top)]}else return E7A(e,A,i)}};function AAA(t){let e=t.scrollDOM.getBoundingClientRect();return{left:(t.textDirection==mo.LTR?e.left:e.right-t.scrollDOM.clientWidth*t.scaleX)-t.scrollDOM.scrollLeft*t.scaleX,top:e.top-t.scrollDOM.scrollTop*t.scaleY}}function XX(t,e,A,i){let n=t.coordsAtPos(e,A*2);if(!n)return i;let o=t.dom.getBoundingClientRect(),a=(n.top+n.bottom)/2,r=t.posAtCoords({x:o.left+1,y:a}),s=t.posAtCoords({x:o.right-1,y:a});return r==null||s==null?i:{from:Math.max(i.from,Math.min(r,s)),to:Math.min(i.to,Math.max(r,s))}}function E7A(t,e,A){if(A.to<=t.viewport.from||A.from>=t.viewport.to)return[];let i=Math.max(A.from,t.viewport.from),n=Math.min(A.to,t.viewport.to),o=t.textDirection==mo.LTR,a=t.contentDOM,r=a.getBoundingClientRect(),s=AAA(t),g=a.querySelector(".cm-line"),l=g&&window.getComputedStyle(g),C=r.left+(l?parseInt(l.paddingLeft)+Math.min(0,parseInt(l.textIndent)):0),I=r.right-(l?parseInt(l.paddingRight):0),d=yN(t,i,1),B=yN(t,n,-1),E=d.type==Xr.Text?d:null,Q=B.type==Xr.Text?B:null;if(E&&(t.lineWrapping||d.widgetLineBreaks)&&(E=XX(t,i,1,E)),Q&&(t.lineWrapping||B.widgetLineBreaks)&&(Q=XX(t,n,-1,Q)),E&&Q&&E.from==Q.from&&E.to==Q.to)return b(S(A.from,A.to,E));{let D=E?S(A.from,null,E):M(d,!1),F=Q?S(null,A.to,Q):M(B,!0),_=[];return(E||d).to<(Q||B).from-(E&&Q?1:0)||d.widgetLineBreaks>1&&D.bottom+t.defaultLineHeight/2O&&P.from=iA)break;hA>aA&&$(Math.max(sA,aA),D==null&&sA<=O,Math.min(hA,iA),F==null&&hA>=DA,oA.dir)}if(aA=BA.to+1,aA>=iA)break}return j.length==0&&$(O,D==null,DA,F==null,t.textDirection),{top:U,bottom:J,horizontal:j}}function M(D,F){let _=r.top+(F?D.top:D.bottom);return{top:_,bottom:_,horizontal:[]}}}function Q7A(t,e){return t.constructor==e.constructor&&t.eq(e)}var zN=class{constructor(e,A){this.view=e,this.layer=A,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),A.above&&this.dom.classList.add("cm-layer-above"),A.class&&this.dom.classList.add(A.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),A.mount&&A.mount(this.dom,e)}update(e){e.startState.facet(aD)!=e.state.facet(aD)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let A=0,i=e.facet(aD);for(;A!Q7A(A,this.drawn[i]))){let A=this.dom.firstChild,i=0;for(let n of e)n.update&&A&&n.constructor&&this.drawn[i].constructor&&n.update(A,this.drawn[i])?(A=A.nextSibling,i++):this.dom.insertBefore(n.draw(),A);for(;A;){let n=A.nextSibling;A.remove(),A=n}this.drawn=e,gt.safari&>.safari_version>=26&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},aD=We.define();function eAA(t){return[_o.define(e=>new zN(e,t)),aD.of(t)]}var af=We.define({combine(t){return kr(t,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,A)=>Math.min(e,A),drawRangeCursor:(e,A)=>e||A})}});function tAA(t={}){return[af.of(t),h7A,u7A,f7A,b$.of(!0)]}function iAA(t){return t.startState.facet(af)!=t.state.facet(af)}var h7A=eAA({above:!0,markers(t){let{state:e}=t,A=e.facet(af),i=[];for(let n of e.selection.ranges){let o=n==e.selection.main;if(n.empty||A.drawRangeCursor){let a=o?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",r=n.empty?n:de.cursor(n.head,n.head>n.anchor?-1:1);for(let s of of.forRange(t,a,r))i.push(s)}}return i},update(t,e){t.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let A=iAA(t);return A&&$X(t.state,e),t.docChanged||t.selectionSet||A},mount(t,e){$X(e.state,t)},class:"cm-cursorLayer"});function $X(t,e){e.style.animationDuration=t.facet(af).cursorBlinkRate+"ms"}var u7A=eAA({above:!1,markers(t){return t.state.selection.ranges.map(e=>e.empty?[]:of.forRange(t,"cm-selectionBackground",e)).reduce((e,A)=>e.concat(A))},update(t,e){return t.docChanged||t.selectionSet||t.viewportChanged||iAA(t)},class:"cm-selectionLayer"}),f7A=vc.highest(ii.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),nAA=Hi.define({map(t,e){return t==null?null:e.mapPos(t)}}),O3=wa.define({create(){return null},update(t,e){return t!=null&&(t=e.changes.mapPos(t)),e.effects.reduce((A,i)=>i.is(nAA)?i.value:A,t)}}),m7A=_o.fromClass(class{constructor(t){this.view=t,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(t){var e;let A=t.state.field(O3);A==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(t.startState.field(O3)!=A||t.docChanged||t.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:t}=this,e=t.state.field(O3),A=e!=null&&t.coordsAtPos(e);if(!A)return null;let i=t.scrollDOM.getBoundingClientRect();return{left:A.left-i.left+t.scrollDOM.scrollLeft*t.scaleX,top:A.top-i.top+t.scrollDOM.scrollTop*t.scaleY,height:A.bottom-A.top}}drawCursor(t){if(this.cursor){let{scaleX:e,scaleY:A}=this.view;t?(this.cursor.style.left=t.left/e+"px",this.cursor.style.top=t.top/A+"px",this.cursor.style.height=t.height/A+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(t){this.view.state.field(O3)!=t&&this.view.dispatch({effects:nAA.of(t)})}},{eventObservers:{dragover(t){this.setDropPos(this.view.posAtCoords({x:t.clientX,y:t.clientY}))},dragleave(t){(t.target==this.view.contentDOM||!this.view.contentDOM.contains(t.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function oAA(){return[O3,m7A]}function A$(t,e,A,i,n){e.lastIndex=0;for(let o=t.iterRange(A,i),a=A,r;!o.next().done;a+=o.value.length)if(!o.lineBreak)for(;r=e.exec(o.value);)n(a+r.index,r)}function p7A(t,e){let A=t.visibleRanges;if(A.length==1&&A[0].from==t.viewport.from&&A[0].to==t.viewport.to)return A;let i=[];for(let{from:n,to:o}of A)n=Math.max(t.state.doc.lineAt(n).from,n-e),o=Math.min(t.state.doc.lineAt(o).to,o+e),i.length&&i[i.length-1].to>=n?i[i.length-1].to=o:i.push({from:n,to:o});return i}var ON=class{constructor(e){let{regexp:A,decoration:i,decorate:n,boundary:o,maxLength:a=1e3}=e;if(!A.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=A,n)this.addMatch=(r,s,g,l)=>n(l,g,g+r[0].length,r,s);else if(typeof i=="function")this.addMatch=(r,s,g,l)=>{let C=i(r,s,g);C&&l(g,g+r[0].length,C)};else if(i)this.addMatch=(r,s,g,l)=>l(g,g+r[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=o,this.maxLength=a}createDeco(e){let A=new Wr,i=A.add.bind(A);for(let{from:n,to:o}of p7A(e,this.maxLength))A$(e.state.doc,this.regexp,n,o,(a,r)=>this.addMatch(r,e,a,i));return A.finish()}updateDeco(e,A){let i=1e9,n=-1;return e.docChanged&&e.changes.iterChanges((o,a,r,s)=>{s>=e.view.viewport.from&&r<=e.view.viewport.to&&(i=Math.min(r,i),n=Math.max(s,n))}),e.viewportMoved||n-i>1e3?this.createDeco(e.view):n>-1?this.updateRange(e.view,A.map(e.changes),i,n):A}updateRange(e,A,i,n){for(let o of e.visibleRanges){let a=Math.max(o.from,i),r=Math.min(o.to,n);if(r>=a){let s=e.state.doc.lineAt(a),g=s.tos.from;a--)if(this.boundary.test(s.text[a-1-s.from])){l=a;break}for(;rI.push(f.range(E,Q));if(s==g)for(this.regexp.lastIndex=l-s.from;(d=this.regexp.exec(s.text))&&d.indexthis.addMatch(Q,e,E,B));A=A.update({filterFrom:l,filterTo:C,filter:(E,Q)=>EC,add:I})}}return A}},PN=/x/.unicode!=null?"gu":"g",w7A=new RegExp(`[\0-\b +-\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\u2066\u2067\u2069\uFEFF\uFFF9-\uFFFC]`,PN),D7A={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"},iN=null;function y7A(){var t;if(iN==null&&typeof document<"u"&&document.body){let e=document.body.style;iN=((t=e.tabSize)!==null&&t!==void 0?t:e.MozTabSize)!=null}return iN||!1}var rD=We.define({combine(t){let e=kr(t,{render:null,specialChars:w7A,addSpecialChars:null});return(e.replaceTabs=!y7A())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,PN)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,PN)),e}});function aAA(t={}){return[rD.of(t),v7A()]}var e$=null;function v7A(){return e$||(e$=_o.fromClass(class{constructor(t){this.view=t,this.decorations=Dt.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(t.state.facet(rD)),this.decorations=this.decorator.createDeco(t)}makeDecorator(t){return new ON({regexp:t.specialChars,decoration:(e,A,i)=>{let{doc:n}=A.state,o=Zr(e[0],0);if(o==9){let a=n.lineAt(i),r=A.state.tabSize,s=LC(a.text,r,i-a.from);return Dt.replace({widget:new qN((r-s%r)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[o]||(this.decorationCache[o]=Dt.replace({widget:new jN(t,o)}))},boundary:t.replaceTabs?void 0:/[^]/})}update(t){let e=t.state.facet(rD);t.startState.facet(rD)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(t.view)):this.decorations=this.decorator.updateDeco(t,this.decorations)}},{decorations:t=>t.decorations}))}var b7A="\u2022";function M7A(t){return t>=32?b7A:t==10?"\u2424":String.fromCharCode(9216+t)}var jN=class extends fg{constructor(e,A){super(),this.options=e,this.code=A}eq(e){return e.code==this.code}toDOM(e){let A=M7A(this.code),i=e.state.phrase("Control character")+" "+(D7A[this.code]||"0x"+this.code.toString(16)),n=this.options.render&&this.options.render(this.code,i,A);if(n)return n;let o=document.createElement("span");return o.textContent=A,o.title=i,o.setAttribute("aria-label",i),o.className="cm-specialChar",o}ignoreEvent(){return!1}},qN=class extends fg{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}};function rAA(){return S7A}var k7A=Dt.line({class:"cm-activeLine"}),S7A=_o.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.docChanged||t.selectionSet)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=-1,A=[];for(let i of t.state.selection.ranges){let n=t.lineBlockAt(i.head);n.from>e&&(A.push(k7A.range(n.from)),e=n.from)}return Dt.set(A)}},{decorations:t=>t.decorations});var VN=2e3;function x7A(t,e,A){let i=Math.min(e.line,A.line),n=Math.max(e.line,A.line),o=[];if(e.off>VN||A.off>VN||e.col<0||A.col<0){let a=Math.min(e.off,A.off),r=Math.max(e.off,A.off);for(let s=i;s<=n;s++){let g=t.doc.line(s);g.length<=r&&o.push(de.range(g.from+a,g.to+r))}}else{let a=Math.min(e.col,A.col),r=Math.max(e.col,A.col);for(let s=i;s<=n;s++){let g=t.doc.line(s),l=j5(g.text,a,t.tabSize,!0);if(l<0)o.push(de.cursor(g.to));else{let C=j5(g.text,r,t.tabSize);o.push(de.range(g.from+l,g.from+C))}}}return o}function R7A(t,e){let A=t.coordsAtPos(t.viewport.from);return A?Math.round(Math.abs((A.left-e)/t.defaultCharacterWidth)):-1}function t$(t,e){let A=t.posAtCoords({x:e.clientX,y:e.clientY},!1),i=t.state.doc.lineAt(A),n=A-i.from,o=n>VN?-1:n==i.length?R7A(t,e.clientX):LC(i.text,t.state.tabSize,A-i.from);return{line:i.number,col:o,off:n}}function N7A(t,e){let A=t$(t,e),i=t.state.selection;return A?{update(n){if(n.docChanged){let o=n.changes.mapPos(n.startState.doc.line(A.line).from),a=n.state.doc.lineAt(o);A={line:a.number,col:A.col,off:Math.min(A.off,a.length)},i=i.map(n.changes)}},get(n,o,a){let r=t$(t,n);if(!r)return i;let s=x7A(t.state,A,r);return s.length?a?de.create(s.concat(i.ranges)):de.create(s):i}}:null}function sAA(t){let e=t?.eventFilter||(A=>A.altKey&&A.button==0);return ii.mouseSelectionStyle.of((A,i)=>e(i)?N7A(A,i):null)}var F7A={Alt:[18,t=>!!t.altKey],Control:[17,t=>!!t.ctrlKey],Shift:[16,t=>!!t.shiftKey],Meta:[91,t=>!!t.metaKey]},_7A={style:"cursor: crosshair"};function gAA(t={}){let[e,A]=F7A[t.key||"Alt"],i=_o.fromClass(class{constructor(n){this.view=n,this.isDown=!1}set(n){this.isDown!=n&&(this.isDown=n,this.view.update([]))}},{eventObservers:{keydown(n){this.set(n.keyCode==e||A(n))},keyup(n){(n.keyCode==e||!A(n))&&this.set(!1)},mousemove(n){this.set(A(n))}}});return[i,ii.contentAttributes.of(n=>{var o;return!((o=n.plugin(i))===null||o===void 0)&&o.isDown?_7A:null})]}var tD="-10000px",pD=class{constructor(e,A,i,n){this.facet=A,this.createTooltipView=i,this.removeTooltipView=n,this.input=e.state.facet(A),this.tooltips=this.input.filter(a=>a);let o=null;this.tooltipViews=this.tooltips.map(a=>o=i(a,o))}update(e,A){var i;let n=e.state.facet(this.facet),o=n.filter(s=>s);if(n===this.input){for(let s of this.tooltipViews)s.update&&s.update(e);return!1}let a=[],r=A?[]:null;for(let s=0;sA[g]=s),A.length=r.length),this.input=n,this.tooltips=o,this.tooltipViews=a,!0}};function L7A(t){let e=t.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}var nN=We.define({combine:t=>{var e,A,i;return{position:gt.ios?"absolute":((e=t.find(n=>n.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((A=t.find(n=>n.parent))===null||A===void 0?void 0:A.parent)||null,tooltipSpace:((i=t.find(n=>n.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||L7A}}}),i$=new WeakMap,sF=_o.fromClass(class{constructor(t){this.view=t,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=t.state.facet(nN);this.position=e.position,this.parent=e.parent,this.classes=t.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new pD(t,xQ,(A,i)=>this.createTooltip(A,i),A=>{this.resizeObserver&&this.resizeObserver.unobserve(A.dom),A.dom.remove()}),this.above=this.manager.tooltips.map(A=>!!A.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(A=>{Date.now()>this.lastTransaction-50&&A.length>0&&A[A.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),t.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let t of this.manager.tooltipViews)this.intersectionObserver.observe(t.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(t){t.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(t,this.above);e&&this.observeIntersection();let A=e||t.geometryChanged,i=t.state.facet(nN);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let n of this.manager.tooltipViews)n.dom.style.position=this.position;A=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let n of this.manager.tooltipViews)this.container.appendChild(n.dom);A=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);A&&this.maybeMeasure()}createTooltip(t,e){let A=t.create(this.view),i=e?e.dom:null;if(A.dom.classList.add("cm-tooltip"),t.arrow&&!A.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let n=document.createElement("div");n.className="cm-tooltip-arrow",A.dom.appendChild(n)}return A.dom.style.position=this.position,A.dom.style.top=tD,A.dom.style.left="0px",this.container.insertBefore(A.dom,i),A.mount&&A.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(A.dom),A}destroy(){var t,e,A;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(t=i.destroy)===null||t===void 0||t.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(A=this.intersectionObserver)===null||A===void 0||A.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let t=1,e=1,A=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:o}=this.manager.tooltipViews[0];if(gt.safari){let a=o.getBoundingClientRect();A=Math.abs(a.top+1e4)>1||Math.abs(a.left)>1}else A=!!o.offsetParent&&o.offsetParent!=this.container.ownerDocument.body}if(A||this.position=="absolute")if(this.parent){let o=this.parent.getBoundingClientRect();o.width&&o.height&&(t=o.width/this.parent.offsetWidth,e=o.height/this.parent.offsetHeight)}else({scaleX:t,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),n=aF(this.view);return{visible:{left:i.left+n.left,top:i.top+n.top,right:i.right-n.right,bottom:i.bottom-n.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((o,a)=>{let r=this.manager.tooltipViews[a];return r.getCoords?r.getCoords(o.pos):this.view.coordsAtPos(o.pos)}),size:this.manager.tooltipViews.map(({dom:o})=>o.getBoundingClientRect()),space:this.view.state.facet(nN).tooltipSpace(this.view),scaleX:t,scaleY:e,makeAbsolute:A}}writeMeasure(t){var e;if(t.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let r of this.manager.tooltipViews)r.dom.style.position="absolute"}let{visible:A,space:i,scaleX:n,scaleY:o}=t,a=[];for(let r=0;r=Math.min(A.bottom,i.bottom)||C.rightMath.min(A.right,i.right)+.1)){l.style.top=tD;continue}let d=s.arrow?g.dom.querySelector(".cm-tooltip-arrow"):null,B=d?7:0,E=I.right-I.left,Q=(e=i$.get(g))!==null&&e!==void 0?e:I.bottom-I.top,f=g.offset||K7A,b=this.view.textDirection==mo.LTR,S=I.width>i.right-i.left?b?i.left:i.right-I.width:b?Math.max(i.left,Math.min(C.left-(d?14:0)+f.x,i.right-E)):Math.min(Math.max(i.left,C.left-E+(d?14:0)-f.x),i.right-E),M=this.above[r];!s.strictSide&&(M?C.top-Q-B-f.yi.bottom)&&M==i.bottom-C.bottom>C.top-i.top&&(M=this.above[r]=!M);let D=(M?C.top-i.top:i.bottom-C.bottom)-B;if(DS&&U.topF&&(F=M?U.top-Q-2-B:U.bottom+B+2);if(this.position=="absolute"?(l.style.top=(F-t.parent.top)/o+"px",n$(l,(S-t.parent.left)/n)):(l.style.top=F/o+"px",n$(l,S/n)),d){let U=C.left+(b?f.x:-f.x)-(S+14-7);d.style.left=U/n+"px"}g.overlap!==!0&&a.push({left:S,top:F,right:_,bottom:F+Q}),l.classList.toggle("cm-tooltip-above",M),l.classList.toggle("cm-tooltip-below",!M),g.positioned&&g.positioned(t.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let t of this.manager.tooltipViews)t.dom.style.top=tD}},{eventObservers:{scroll(){this.maybeMeasure()}}});function n$(t,e){let A=parseInt(t.style.left,10);(isNaN(A)||Math.abs(e-A)>1)&&(t.style.left=e+"px")}var G7A=ii.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),K7A={x:0,y:0},xQ=We.define({enables:[sF,G7A]}),wD=We.define({combine:t=>t.reduce((e,A)=>e.concat(A),[])}),DD=class t{static create(e){return new t(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new pD(e,wD,(A,i)=>this.createHostedView(A,i),A=>A.dom.remove())}createHostedView(e,A){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,A?A.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let A of this.manager.tooltipViews)A.mount&&A.mount(e);this.mounted=!0}positioned(e){for(let A of this.manager.tooltipViews)A.positioned&&A.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let A of this.manager.tooltipViews)(e=A.destroy)===null||e===void 0||e.call(A)}passProp(e){let A;for(let i of this.manager.tooltipViews){let n=i[e];if(n!==void 0){if(A===void 0)A=n;else if(A!==n)return}}return A}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}},U7A=xQ.compute([wD],t=>{let e=t.facet(wD);return e.length===0?null:{pos:Math.min(...e.map(A=>A.pos)),end:Math.max(...e.map(A=>{var i;return(i=A.end)!==null&&i!==void 0?i:A.pos})),create:DD.create,above:e[0].above,arrow:e.some(A=>A.arrow)}}),WN=class{constructor(e,A,i,n,o){this.view=e,this.source=A,this.field=i,this.setHover=n,this.hoverTime=o,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;er.bottom||A.xr.right+e.defaultCharacterWidth)return;let s=e.bidiSpans(e.state.doc.lineAt(n)).find(l=>l.from<=n&&l.to>=n),g=s&&s.dir==mo.RTL?-1:1;o=A.x{this.pending==r&&(this.pending=null,s&&!(Array.isArray(s)&&!s.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(s)?s:[s])}))},s=>Sr(e.state,s,"hover tooltip"))}else a&&!(Array.isArray(a)&&!a.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(a)?a:[a])})}get tooltip(){let e=this.view.plugin(sF),A=e?e.manager.tooltips.findIndex(i=>i.create==DD.create):-1;return A>-1?e.manager.tooltipViews[A]:null}mousemove(e){var A,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:n,tooltip:o}=this;if(n.length&&o&&!J7A(o.dom,e)||this.pending){let{pos:a}=n[0]||this.pending,r=(i=(A=n[0])===null||A===void 0?void 0:A.end)!==null&&i!==void 0?i:a;(a==r?this.view.posAtCoords(this.lastMove)!=a:!Y7A(this.view,a,r,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:A}=this;if(A.length){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let A=i=>{e.removeEventListener("mouseleave",A),this.active.length&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",A)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}},iD=4;function J7A(t,e){let{left:A,right:i,top:n,bottom:o}=t.getBoundingClientRect(),a;if(a=t.querySelector(".cm-tooltip-arrow")){let r=a.getBoundingClientRect();n=Math.min(r.top,n),o=Math.max(r.bottom,o)}return e.clientX>=A-iD&&e.clientX<=i+iD&&e.clientY>=n-iD&&e.clientY<=o+iD}function Y7A(t,e,A,i,n,o){let a=t.scrollDOM.getBoundingClientRect(),r=t.documentTop+t.documentPadding.top+t.contentHeight;if(a.left>i||a.rightn||Math.min(a.bottom,r)=e&&s<=A}function lAA(t,e={}){let A=Hi.define(),i=wa.define({create(){return[]},update(n,o){if(n.length&&(e.hideOnChange&&(o.docChanged||o.selection)?n=[]:e.hideOn&&(n=n.filter(a=>!e.hideOn(o,a))),o.docChanged)){let a=[];for(let r of n){let s=o.changes.mapPos(r.pos,-1,qr.TrackDel);if(s!=null){let g=Object.assign(Object.create(null),r);g.pos=s,g.end!=null&&(g.end=o.changes.mapPos(g.end)),a.push(g)}}n=a}for(let a of o.effects)a.is(A)&&(n=a.value),a.is(T7A)&&(n=[]);return n},provide:n=>wD.from(n)});return{active:i,extension:[i,_o.define(n=>new WN(n,t,i,A,e.hoverTime||300)),U7A]}}function gF(t,e){let A=t.plugin(sF);if(!A)return null;let i=A.manager.tooltips.indexOf(e);return i<0?null:A.manager.tooltipViews[i]}var T7A=Hi.define();var o$=We.define({combine(t){let e,A;for(let i of t)e=e||i.topContainer,A=A||i.bottomContainer;return{topContainer:e,bottomContainer:A}}});function sf(t,e){let A=t.plugin(cAA),i=A?A.specs.indexOf(e):-1;return i>-1?A.panels[i]:null}var cAA=_o.fromClass(class{constructor(t){this.input=t.state.facet(Dd),this.specs=this.input.filter(A=>A),this.panels=this.specs.map(A=>A(t));let e=t.state.facet(o$);this.top=new fQ(t,!0,e.topContainer),this.bottom=new fQ(t,!1,e.bottomContainer),this.top.sync(this.panels.filter(A=>A.top)),this.bottom.sync(this.panels.filter(A=>!A.top));for(let A of this.panels)A.dom.classList.add("cm-panel"),A.mount&&A.mount()}update(t){let e=t.state.facet(o$);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new fQ(t.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new fQ(t.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let A=t.state.facet(Dd);if(A!=this.input){let i=A.filter(s=>s),n=[],o=[],a=[],r=[];for(let s of i){let g=this.specs.indexOf(s),l;g<0?(l=s(t.view),r.push(l)):(l=this.panels[g],l.update&&l.update(t)),n.push(l),(l.top?o:a).push(l)}this.specs=i,this.panels=n,this.top.sync(o),this.bottom.sync(a);for(let s of r)s.dom.classList.add("cm-panel"),s.mount&&s.mount()}else for(let i of this.panels)i.update&&i.update(t)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:t=>ii.scrollMargins.of(e=>{let A=e.plugin(t);return A&&{top:A.top.scrollMargin(),bottom:A.bottom.scrollMargin()}})}),fQ=class{constructor(e,A,i){this.view=e,this.top=A,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let A of this.panels)A.destroy&&e.indexOf(A)<0&&A.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let A=this.container||this.view.dom;A.insertBefore(this.dom,this.top?A.firstChild:null)}let e=this.dom.firstChild;for(let A of this.panels)if(A.dom.parentNode==this.dom){for(;e!=A.dom;)e=a$(e);e=e.nextSibling}else this.dom.insertBefore(A.dom,e);for(;e;)e=a$(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}};function a$(t){let e=t.nextSibling;return t.remove(),e}var Dd=We.define({enables:cAA});function CAA(t,e){let A,i=new Promise(a=>A=a),n=a=>H7A(a,e,A);t.state.field(oN,!1)?t.dispatch({effects:IAA.of(n)}):t.dispatch({effects:Hi.appendConfig.of(oN.init(()=>[n]))});let o=dAA.of(n);return{close:o,result:i.then(a=>((t.win.queueMicrotask||(s=>t.win.setTimeout(s,10)))(()=>{t.state.field(oN).indexOf(n)>-1&&t.dispatch({effects:o})}),a))}}var oN=wa.define({create(){return[]},update(t,e){for(let A of e.effects)A.is(IAA)?t=[A.value].concat(t):A.is(dAA)&&(t=t.filter(i=>i!=A.value));return t},provide:t=>Dd.computeN([t],e=>e.field(t))}),IAA=Hi.define(),dAA=Hi.define();function H7A(t,e,A){let i=e.content?e.content(t,()=>a(null)):null;if(!i){if(i=io("form"),e.input){let r=io("input",e.input);/^(text|password|number|email|tel|url)$/.test(r.type)&&r.classList.add("cm-textfield"),r.name||(r.name="input"),i.appendChild(io("label",(e.label||"")+": ",r))}else i.appendChild(document.createTextNode(e.label||""));i.appendChild(document.createTextNode(" ")),i.appendChild(io("button",{class:"cm-button",type:"submit"},e.submitLabel||"OK"))}let n=i.nodeName=="FORM"?[i]:i.querySelectorAll("form");for(let r=0;r{g.keyCode==27?(g.preventDefault(),a(null)):g.keyCode==13&&(g.preventDefault(),a(s))}),s.addEventListener("submit",g=>{g.preventDefault(),a(s)})}let o=io("div",i,io("button",{onclick:()=>a(null),"aria-label":t.state.phrase("close"),class:"cm-dialog-close",type:"button"},["\xD7"]));e.class&&(o.className=e.class),o.classList.add("cm-dialog");function a(r){o.contains(o.ownerDocument.activeElement)&&t.focus(),A(r)}return{dom:o,top:e.top,mount:()=>{if(e.focus){let r;typeof e.focus=="string"?r=i.querySelector(e.focus):r=i.querySelector("input")||i.querySelector("button"),r&&"select"in r?r.select():r&&"focus"in r&&r.focus()}}}}var mg=class extends bl{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};mg.prototype.elementClass="";mg.prototype.toDOM=void 0;mg.prototype.mapMode=qr.TrackBefore;mg.prototype.startSide=mg.prototype.endSide=-1;mg.prototype.point=!0;var sD=We.define(),z7A=We.define(),O7A={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>to.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},$3=We.define();function SD(t){return[BAA(),$3.of(gA(gA({},O7A),t))]}var ZN=We.define({combine:t=>t.some(e=>e)});function BAA(t){let e=[P7A];return t&&t.fixed===!1&&e.push(ZN.of(!0)),e}var P7A=_o.fromClass(class{constructor(t){this.view=t,this.domAfter=null,this.prevViewport=t.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=t.state.facet($3).map(e=>new yD(t,e)),this.fixed=!t.state.facet(ZN);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),t.scrollDOM.insertBefore(this.dom,t.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(t){if(this.updateGutters(t)){let e=this.prevViewport,A=t.view.viewport,i=Math.min(e.to,A.to)-Math.max(e.from,A.from);this.syncGutters(i<(A.to-A.from)*.8)}if(t.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(ZN)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=t.view.viewport}syncGutters(t){let e=this.dom.nextSibling;t&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let A=to.iter(this.view.state.facet(sD),this.view.viewport.from),i=[],n=this.gutters.map(o=>new $N(o,this.view.viewport,-this.view.documentPadding.top));for(let o of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(o.type)){let a=!0;for(let r of o.type)if(r.type==Xr.Text&&a){XN(A,i,r.from);for(let s of n)s.line(this.view,r,i);a=!1}else if(r.widget)for(let s of n)s.widget(this.view,r)}else if(o.type==Xr.Text){XN(A,i,o.from);for(let a of n)a.line(this.view,o,i)}else if(o.widget)for(let a of n)a.widget(this.view,o);for(let o of n)o.finish();t&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(t){let e=t.startState.facet($3),A=t.state.facet($3),i=t.docChanged||t.heightChanged||t.viewportChanged||!to.eq(t.startState.facet(sD),t.state.facet(sD),t.view.viewport.from,t.view.viewport.to);if(e==A)for(let n of this.gutters)n.update(t)&&(i=!0);else{i=!0;let n=[];for(let o of A){let a=e.indexOf(o);a<0?n.push(new yD(this.view,o)):(this.gutters[a].update(t),n.push(this.gutters[a]))}for(let o of this.gutters)o.dom.remove(),n.indexOf(o)<0&&o.destroy();for(let o of n)o.config.side=="after"?this.getDOMAfter().appendChild(o.dom):this.dom.appendChild(o.dom);this.gutters=n}return i}destroy(){for(let t of this.gutters)t.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:t=>ii.scrollMargins.of(e=>{let A=e.plugin(t);if(!A||A.gutters.length==0||!A.fixed)return null;let i=A.dom.offsetWidth*e.scaleX,n=A.domAfter?A.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==mo.LTR?{left:i,right:n}:{right:i,left:n}})});function r$(t){return Array.isArray(t)?t:[t]}function XN(t,e,A){for(;t.value&&t.from<=A;)t.from==A&&e.push(t.value),t.next()}var $N=class{constructor(e,A,i){this.gutter=e,this.height=i,this.i=0,this.cursor=to.iter(e.markers,A.from)}addElement(e,A,i){let{gutter:n}=this,o=(A.top-this.height)/e.scaleY,a=A.height/e.scaleY;if(this.i==n.elements.length){let r=new vD(e,a,o,i);n.elements.push(r),n.dom.appendChild(r.dom)}else n.elements[this.i].update(e,a,o,i);this.height=A.bottom,this.i++}line(e,A,i){let n=[];XN(this.cursor,n,A.from),i.length&&(n=n.concat(i));let o=this.gutter.config.lineMarker(e,A,n);o&&n.unshift(o);let a=this.gutter;n.length==0&&!a.config.renderEmptyElements||this.addElement(e,A,n)}widget(e,A){let i=this.gutter.config.widgetMarker(e,A.widget,A),n=i?[i]:null;for(let o of e.state.facet(z7A)){let a=o(e,A.widget,A);a&&(n||(n=[])).push(a)}n&&this.addElement(e,A,n)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let A=e.elements.pop();e.dom.removeChild(A.dom),A.destroy()}}},yD=class{constructor(e,A){this.view=e,this.config=A,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in A.domEventHandlers)this.dom.addEventListener(i,n=>{let o=n.target,a;if(o!=this.dom&&this.dom.contains(o)){for(;o.parentNode!=this.dom;)o=o.parentNode;let s=o.getBoundingClientRect();a=(s.top+s.bottom)/2}else a=n.clientY;let r=e.lineBlockAtHeight(a-e.documentTop);A.domEventHandlers[i](e,r,n)&&n.preventDefault()});this.markers=r$(A.markers(e)),A.initialSpacer&&(this.spacer=new vD(e,0,0,[A.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let A=this.markers;if(this.markers=r$(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let n=this.config.updateSpacer(this.spacer.markers[0],e);n!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[n])}let i=e.view.viewport;return!to.eq(this.markers,A,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},vD=class{constructor(e,A,i,n){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,A,i,n)}update(e,A,i,n){this.height!=A&&(this.height=A,this.dom.style.height=A+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),j7A(this.markers,n)||this.setMarkers(e,n)}setMarkers(e,A){let i="cm-gutterElement",n=this.dom.firstChild;for(let o=0,a=0;;){let r=a,s=oo(r,s,g)||a(r,s,g):a}return i}})}}),Af=class extends mg{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function aN(t,e){return t.state.facet(mQ).formatNumber(e,t.state)}var W7A=$3.compute([mQ],t=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(q7A)},lineMarker(e,A,i){return i.some(n=>n.toDOM)?null:new Af(aN(e,e.state.doc.lineAt(A.from).number))},widgetMarker:(e,A,i)=>{for(let n of e.state.facet(V7A)){let o=n(e,A,i);if(o)return o}return null},lineMarkerChange:e=>e.startState.facet(mQ)!=e.state.facet(mQ),initialSpacer(e){return new Af(aN(e,s$(e.state.doc.lines)))},updateSpacer(e,A){let i=aN(A.view,s$(A.view.state.doc.lines));return i==e.number?e:new Af(i)},domEventHandlers:t.facet(mQ).domEventHandlers,side:"before"}));function EAA(t={}){return[mQ.of(t),BAA(),W7A]}function s$(t){let e=9;for(;e{let e=[],A=-1;for(let i of t.selection.ranges){let n=t.doc.lineAt(i.head).from;n>A&&(A=n,e.push(Z7A.range(n)))}return to.of(e)});function QAA(){return X7A}var $7A=0,gf=class{constructor(e,A){this.from=e,this.to=A}},yi=class{constructor(e={}){this.id=$7A++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=ws.match(e)),A=>{let i=e(A);return i===void 0?null:[this,i]}}};yi.closedBy=new yi({deserialize:t=>t.split(" ")});yi.openedBy=new yi({deserialize:t=>t.split(" ")});yi.group=new yi({deserialize:t=>t.split(" ")});yi.isolate=new yi({deserialize:t=>{if(t&&t!="rtl"&&t!="ltr"&&t!="auto")throw new RangeError("Invalid value for isolate: "+t);return t||"auto"}});yi.contextHash=new yi({perNode:!0});yi.lookAhead=new yi({perNode:!0});yi.mounted=new yi({perNode:!0});var yd=class{constructor(e,A,i,n=!1){this.tree=e,this.overlay=A,this.parser=i,this.bracketed=n}static get(e){return e&&e.props&&e.props[yi.mounted.id]}},AbA=Object.create(null),ws=class t{constructor(e,A,i,n=0){this.name=e,this.props=A,this.id=i,this.flags=n}static define(e){let A=e.props&&e.props.length?Object.create(null):AbA,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),n=new t(e.name||"",A,e.id,i);if(e.props){for(let o of e.props)if(Array.isArray(o)||(o=o(n)),o){if(o[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");A[o[0].id]=o[1]}}return n}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let A=this.prop(yi.group);return A?A.indexOf(e)>-1:!1}return this.id==e}static match(e){let A=Object.create(null);for(let i in e)for(let n of i.split(" "))A[n]=e[i];return i=>{for(let n=i.prop(yi.group),o=-1;o<(n?n.length:0);o++){let a=A[o<0?i.name:n[o]];if(a)return a}}}};ws.none=new ws("",Object.create(null),0,8);var lf=class t{constructor(e){this.types=e;for(let A=0;A0;for(let s=this.cursor(a|xa.IncludeAnonymous);;){let g=!1;if(s.from<=o&&s.to>=n&&(!r&&s.type.isAnonymous||A(s)!==!1)){if(s.firstChild())continue;g=!0}for(;g&&i&&(r||!s.type.isAnonymous)&&i(s),!s.nextSibling();){if(!s.parent())return;g=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let A in this.props)e.push([+A,this.props[A]]);return e}balance(e={}){return this.children.length<=8?this:EF(ws.none,this.children,this.positions,0,this.children.length,0,this.length,(A,i,n)=>new t(this.type,A,i,n,this.propValues),e.makeTree||((A,i,n)=>new t(ws.none,A,i,n)))}static build(e){return tbA(e)}};za.empty=new za(ws.none,[],[],0);var lF=class t{constructor(e,A){this.buffer=e,this.index=A}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new t(this.buffer,this.index)}},SI=class t{constructor(e,A,i){this.buffer=e,this.length=A,this.set=i}get type(){return ws.none}toString(){let e=[];for(let A=0;A0));s=a[s+3]);return r}slice(e,A,i){let n=this.buffer,o=new Uint16Array(A-e),a=0;for(let r=e,s=0;r=e&&Ae;case 1:return A<=e&&i>e;case 2:return i>e;case 4:return!0}}function cf(t,e,A,i){for(var n;t.from==t.to||(A<1?t.from>=e:t.from>e)||(A>-1?t.to<=e:t.to0?s.length:-1;e!=l;e+=A){let C=s[e],I=g[e]+r.from;if(!(!(o&xa.EnterBracketed&&C instanceof za&&((a=yd.get(C))===null||a===void 0?void 0:a.overlay)===null&&(I>=i||I+C.length<=i))&&!mAA(n,i,I,I+C.length))){if(C instanceof SI){if(o&xa.ExcludeBuffers)continue;let d=C.findChild(0,C.buffer.length,A,i-I,n);if(d>-1)return new Cf(new CF(r,C,e,I),null,d)}else if(o&xa.IncludeAnonymous||!C.type.isAnonymous||BF(C)){let d;if(!(o&xa.IgnoreMounts)&&(d=yd.get(C))&&!d.overlay)return new t(d.tree,I,e,r);let B=new t(C,I,e,r);return o&xa.IncludeAnonymous||!B.type.isAnonymous?B:B.nextChild(A<0?C.children.length-1:0,A,i,n,o)}}}if(o&xa.IncludeAnonymous||!r.type.isAnonymous||(r.index>=0?e=r.index+A:e=A<0?-1:r._parent._tree.children.length,r=r._parent,!r))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,A,i=0){let n;if(!(i&xa.IgnoreOverlays)&&(n=yd.get(this._tree))&&n.overlay){let o=e-this.from,a=i&xa.EnterBracketed&&n.bracketed;for(let{from:r,to:s}of n.overlay)if((A>0||a?r<=o:r=o:s>o))return new t(n.tree,n.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,A,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function uAA(t,e,A,i){let n=t.cursor(),o=[];if(!n.firstChild())return o;if(A!=null){for(let a=!1;!a;)if(a=n.type.is(A),!n.nextSibling())return o}for(;;){if(i!=null&&n.type.is(i))return o;if(n.type.is(e)&&o.push(n.node),!n.nextSibling())return i==null?o:[]}}function cF(t,e,A=e.length-1){for(let i=t;A>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[A]&&e[A]!=i.name)return!1;A--}}return!0}var CF=class{constructor(e,A,i,n){this.parent=e,this.buffer=A,this.index=i,this.start=n}},Cf=class t extends ND{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,A,i){super(),this.context=e,this._parent=A,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,A,i){let{buffer:n}=this.context,o=n.findChild(this.index+4,n.buffer[this.index+3],e,A-this.context.start,i);return o<0?null:new t(this.context,this,o)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,A,i=0){if(i&xa.ExcludeBuffers)return null;let{buffer:n}=this.context,o=n.findChild(this.index+4,n.buffer[this.index+3],A>0?1:-1,e-this.context.start,A);return o<0?null:new t(this.context,this,o)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,A=e.buffer[this.index+3];return A<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new t(this.context,this._parent,A):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,A=this._parent?this._parent.index+4:0;return this.index==A?this.externalSibling(-1):new t(this.context,this._parent,e.findChild(A,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],A=[],{buffer:i}=this.context,n=this.index+4,o=i.buffer[this.index+3];if(o>n){let a=i.buffer[this.index+1];e.push(i.slice(n,o,a)),A.push(0)}return new za(this.type,e,A,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function pAA(t){if(!t.length)return null;let e=0,A=t[0];for(let o=1;oA.from||a.to=e){let r=new _0(a.tree,a.overlay[0].from+o.from,-1,o);(n||(n=[i])).push(cf(r,e,A,!1))}}return n?pAA(n):i}var If=class{get name(){return this.type.name}constructor(e,A=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=A&~xa.EnterBracketed,e instanceof _0)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,A){this.index=e;let{start:i,buffer:n}=this.buffer;return this.type=A||n.set.types[n.buffer[e]],this.from=i+n.buffer[e+1],this.to=i+n.buffer[e+2],!0}yield(e){return e?e instanceof _0?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,A,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,A,i,this.mode));let{buffer:n}=this.buffer,o=n.findChild(this.index+4,n.buffer[this.index+3],e,A-this.buffer.start,i);return o<0?!1:(this.stack.push(this.index),this.yieldBuf(o))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,A,i=this.mode){return this.buffer?i&xa.ExcludeBuffers?!1:this.enterChild(1,e,A):this.yield(this._tree.enter(e,A,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&xa.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&xa.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:A}=this.buffer,i=this.stack.length-1;if(e<0){let n=i<0?0:this.stack[i]+4;if(this.index!=n)return this.yieldBuf(A.findChild(n,this.index,-1,0,4))}else{let n=A.buffer[this.index+3];if(n<(i<0?A.buffer.length:A.buffer[this.stack[i]+3]))return this.yieldBuf(n)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let A,i,{buffer:n}=this;if(n){if(e>0){if(this.index-1)for(let o=A+e,a=e<0?-1:i._tree.children.length;o!=a;o+=e){let r=i._tree.children[o];if(this.mode&xa.IncludeAnonymous||r instanceof SI||!r.type.isAnonymous||BF(r))return!1}return!0}move(e,A){if(A&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,A=0){for(;(this.from==this.to||(A<1?this.from>=e:this.from>e)||(A>-1?this.to<=e:this.to=0;){for(let a=e;a;a=a._parent)if(a.index==n){if(n==this.index)return a;A=a,i=o+1;break A}n=this.stack[--o]}for(let n=i;n=0;o--){if(o<0)return cF(this._tree,e,n);let a=i[A.buffer[this.stack[o]]];if(!a.isAnonymous){if(e[n]&&e[n]!=a.name)return!1;n--}}return!0}};function BF(t){return t.children.some(e=>e instanceof SI||!e.type.isAnonymous||BF(e))}function tbA(t){var e;let{buffer:A,nodeSet:i,maxBufferLength:n=1024,reused:o=[],minRepeatType:a=i.types.length}=t,r=Array.isArray(A)?new lF(A,A.length):A,s=i.types,g=0,l=0;function C(D,F,_,U,J,j){let{id:$,start:O,end:DA,size:P}=r,aA=l,iA=g;if(P<0)if(r.next(),P==-1){let YA=o[$];_.push(YA),U.push(O-D);return}else if(P==-3){g=$;return}else if(P==-4){l=$;return}else throw new RangeError(`Unrecognized record size: ${P}`);let BA=s[$],oA,sA,hA=O-D;if(DA-O<=n&&(sA=Q(r.pos-F,J))){let YA=new Uint16Array(sA.size-sA.skip),ee=r.pos-sA.size,UA=YA.length;for(;r.pos>ee;)UA=f(sA.start,YA,UA);oA=new SI(YA,DA-sA.start,i),hA=sA.start-D}else{let YA=r.pos-P;r.next();let ee=[],UA=[],mA=$>=a?$:-1,KA=0,Pe=DA;for(;r.pos>YA;)mA>=0&&r.id==mA&&r.size>=0?(r.end<=Pe-n&&(B(ee,UA,O,KA,r.end,Pe,mA,aA,iA),KA=ee.length,Pe=r.end),r.next()):j>2500?I(O,YA,ee,UA):C(O,YA,ee,UA,mA,j+1);if(mA>=0&&KA>0&&KA-1&&KA>0){let Ue=d(BA,iA);oA=EF(BA,ee,UA,0,ee.length,0,DA-O,Ue,Ue)}else oA=E(BA,ee,UA,DA-O,aA-DA,iA)}_.push(oA),U.push(hA)}function I(D,F,_,U){let J=[],j=0,$=-1;for(;r.pos>F;){let{id:O,start:DA,end:P,size:aA}=r;if(aA>4)r.next();else{if($>-1&&DA<$)break;$<0&&($=P-n),J.push(O,DA,P),j++,r.next()}}if(j){let O=new Uint16Array(j*4),DA=J[J.length-2];for(let P=J.length-3,aA=0;P>=0;P-=3)O[aA++]=J[P],O[aA++]=J[P+1]-DA,O[aA++]=J[P+2]-DA,O[aA++]=aA;_.push(new SI(O,J[2]-DA,i)),U.push(DA-D)}}function d(D,F){return(_,U,J)=>{let j=0,$=_.length-1,O,DA;if($>=0&&(O=_[$])instanceof za){if(!$&&O.type==D&&O.length==J)return O;(DA=O.prop(yi.lookAhead))&&(j=U[$]+O.length+DA)}return E(D,_,U,J,j,F)}}function B(D,F,_,U,J,j,$,O,DA){let P=[],aA=[];for(;D.length>U;)P.push(D.pop()),aA.push(F.pop()+_-J);D.push(E(i.types[$],P,aA,j-J,O-j,DA)),F.push(J-_)}function E(D,F,_,U,J,j,$){if(j){let O=[yi.contextHash,j];$=$?[O].concat($):[O]}if(J>25){let O=[yi.lookAhead,J];$=$?[O].concat($):[O]}return new za(D,F,_,U,$)}function Q(D,F){let _=r.fork(),U=0,J=0,j=0,$=_.end-n,O={size:0,start:0,skip:0};A:for(let DA=_.pos-D;_.pos>DA;){let P=_.size;if(_.id==F&&P>=0){O.size=U,O.start=J,O.skip=j,j+=4,U+=4,_.next();continue}let aA=_.pos-P;if(P<0||aA=a?4:0,BA=_.start;for(_.next();_.pos>aA;){if(_.size<0)if(_.size==-3||_.size==-4)iA+=4;else break A;else _.id>=a&&(iA+=4);_.next()}J=BA,U+=P,j+=iA}return(F<0||U==D)&&(O.size=U,O.start=J,O.skip=j),O.size>4?O:void 0}function f(D,F,_){let{id:U,start:J,end:j,size:$}=r;if(r.next(),$>=0&&U4){let DA=r.pos-($-4);for(;r.pos>DA;)_=f(D,F,_)}F[--_]=O,F[--_]=j-D,F[--_]=J-D,F[--_]=U}else $==-3?g=U:$==-4&&(l=U);return _}let b=[],S=[];for(;r.pos>0;)C(t.start||0,t.bufferStart||0,b,S,-1,0);let M=(e=t.length)!==null&&e!==void 0?e:b.length?S[0]+b[0].length:0;return new za(s[t.topID],b.reverse(),S.reverse(),M)}var fAA=new WeakMap;function RD(t,e){if(!t.isAnonymous||e instanceof SI||e.type!=t)return 1;let A=fAA.get(e);if(A==null){A=1;for(let i of e.children){if(i.type!=t||!(i instanceof za)){A=1;break}A+=RD(t,i)}fAA.set(e,A)}return A}function EF(t,e,A,i,n,o,a,r,s){let g=0;for(let B=i;B=l)break;F+=_}if(S==M+1){if(F>l){let _=B[M];d(_.children,_.positions,0,_.children.length,E[M]+b);continue}C.push(B[M])}else{let _=E[S-1]+B[S-1].length-D;C.push(EF(t,B,E,M,S,D,_,null,s))}I.push(D+b-o)}}return d(e,A,i,n,0),(r||s)(C,I,a)}var vd=class t{constructor(e,A,i,n,o=!1,a=!1){this.from=e,this.to=A,this.tree=i,this.offset=n,this.open=(o?1:0)|(a?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,A=[],i=!1){let n=[new t(0,e.length,e,0,!1,i)];for(let o of A)o.to>e.length&&n.push(o);return n}static applyChanges(e,A,i=128){if(!A.length)return e;let n=[],o=1,a=e.length?e[0]:null;for(let r=0,s=0,g=0;;r++){let l=r=i)for(;a&&a.from=I.from||C<=I.to||g){let d=Math.max(I.from,s)-g,B=Math.min(I.to,C)-g;I=d>=B?null:new t(d,B,I.tree,I.offset+g,r>0,!!l)}if(I&&n.push(I),a.to>C)break;a=onew gf(n.from,n.to)):[new gf(0,0)]:[new gf(0,e.length)],this.createParse(e,A||[],i)}parse(e,A,i){let n=this.startParse(e,A,i);for(;;){let o=n.advance();if(o)return o}}},dF=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,A){return this.string.slice(e,A)}};var twe=new yi({perNode:!0});var ibA=0,xc=class t{constructor(e,A,i,n){this.name=e,this.set=A,this.base=i,this.modified=n,this.id=ibA++}toString(){let{name:e}=this;for(let A of this.modified)A.name&&(e=`${A.name}(${e})`);return e}static define(e,A){let i=typeof e=="string"?e:"?";if(e instanceof t&&(A=e),A?.base)throw new Error("Can not derive from a modified tag");let n=new t(i,[],null,[]);if(n.set.push(n),A)for(let o of A.set)n.set.push(o);return n}static defineModifier(e){let A=new GD(e);return i=>i.modified.indexOf(A)>-1?i:GD.get(i.base||i,i.modified.concat(A).sort((n,o)=>n.id-o.id))}},nbA=0,GD=class t{constructor(e){this.name=e,this.instances=[],this.id=nbA++}static get(e,A){if(!A.length)return e;let i=A[0].instances.find(r=>r.base==e&&obA(A,r.modified));if(i)return i;let n=[],o=new xc(e.name,n,e,A);for(let r of A)r.instances.push(o);let a=abA(A);for(let r of e.set)if(!r.modified.length)for(let s of a)n.push(t.get(r,s));return o}};function obA(t,e){return t.length==e.length&&t.every((A,i)=>A==e[i])}function abA(t){let e=[[]];for(let A=0;Ai.length-A.length)}function KD(t){let e=Object.create(null);for(let A in t){let i=t[A];Array.isArray(i)||(i=[i]);for(let n of A.split(" "))if(n){let o=[],a=2,r=n;for(let C=0;;){if(r=="..."&&C>0&&C+3==n.length){a=1;break}let I=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(r);if(!I)throw new RangeError("Invalid path: "+n);if(o.push(I[0]=="*"?"":I[0][0]=='"'?JSON.parse(I[0]):I[0]),C+=I[0].length,C==n.length)break;let d=n[C++];if(C==n.length&&d=="!"){a=0;break}if(d!="/")throw new RangeError("Invalid path: "+n);r=n.slice(C)}let s=o.length-1,g=o[s];if(!g)throw new RangeError("Invalid path: "+n);let l=new Md(i,a,s>0?o.slice(0,s):null);e[g]=l.sort(e[g])}}return yAA.add(e)}var yAA=new yi({combine(t,e){let A,i,n;for(;t||e;){if(!t||e&&t.depth>=e.depth?(n=e,e=e.next):(n=t,t=t.next),A&&A.mode==n.mode&&!n.context&&!A.context)continue;let o=new Md(n.tags,n.mode,n.context);A?A.next=o:i=o,A=o}return i}}),Md=class{constructor(e,A,i,n){this.tags=e,this.mode=A,this.context=i,this.next=n}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let a=n;for(let r of o)for(let s of r.set){let g=A[s.id];if(g){a=a?a+" "+g:g;break}}return a},scope:i}}function rbA(t,e){let A=null;for(let i of t){let n=i.style(e);n&&(A=A?A+" "+n:n)}return A}function vAA(t,e,A,i=0,n=t.length){let o=new hF(i,Array.isArray(e)?e:[e],A);o.highlightRange(t.cursor(),i,n,"",o.highlighters),o.flush(n)}var hF=class{constructor(e,A,i){this.at=e,this.highlighters=A,this.span=i,this.class=""}startSpan(e,A){A!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=A)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,A,i,n,o){let{type:a,from:r,to:s}=e;if(r>=i||s<=A)return;a.isTop&&(o=this.highlighters.filter(d=>!d.scope||d.scope(a)));let g=n,l=sbA(e)||Md.empty,C=rbA(o,l.tags);if(C&&(g&&(g+=" "),g+=C,l.mode==1&&(n+=(n?" ":"")+C)),this.startSpan(Math.max(A,r),g),l.opaque)return;let I=e.tree&&e.tree.prop(yi.mounted);if(I&&I.overlay){let d=e.node.enter(I.overlay[0].from+r,1),B=this.highlighters.filter(Q=>!Q.scope||Q.scope(I.tree.type)),E=e.firstChild();for(let Q=0,f=r;;Q++){let b=Q=S||!e.nextSibling())););if(!b||S>i)break;f=b.to+r,f>A&&(this.highlightRange(d.cursor(),Math.max(A,b.from+r),Math.min(i,f),"",B),this.startSpan(Math.min(i,f),g))}E&&e.parent()}else if(e.firstChild()){I&&(n="");do if(!(e.to<=A)){if(e.from>=i)break;this.highlightRange(e,A,i,n,o),this.startSpan(Math.min(i,e.to),g)}while(e.nextSibling());e.parent()}}};function sbA(t){let e=t.type.prop(yAA);for(;e&&e.context&&!t.matchContext(e.context);)e=e.next;return e||null}var Ve=xc.define,FD=Ve(),xI=Ve(),wAA=Ve(xI),DAA=Ve(xI),RI=Ve(),_D=Ve(RI),QF=Ve(RI),K0=Ve(),bd=Ve(K0),L0=Ve(),G0=Ve(),uF=Ve(),df=Ve(uF),LD=Ve(),Re={comment:FD,lineComment:Ve(FD),blockComment:Ve(FD),docComment:Ve(FD),name:xI,variableName:Ve(xI),typeName:wAA,tagName:Ve(wAA),propertyName:DAA,attributeName:Ve(DAA),className:Ve(xI),labelName:Ve(xI),namespace:Ve(xI),macroName:Ve(xI),literal:RI,string:_D,docString:Ve(_D),character:Ve(_D),attributeValue:Ve(_D),number:QF,integer:Ve(QF),float:Ve(QF),bool:Ve(RI),regexp:Ve(RI),escape:Ve(RI),color:Ve(RI),url:Ve(RI),keyword:L0,self:Ve(L0),null:Ve(L0),atom:Ve(L0),unit:Ve(L0),modifier:Ve(L0),operatorKeyword:Ve(L0),controlKeyword:Ve(L0),definitionKeyword:Ve(L0),moduleKeyword:Ve(L0),operator:G0,derefOperator:Ve(G0),arithmeticOperator:Ve(G0),logicOperator:Ve(G0),bitwiseOperator:Ve(G0),compareOperator:Ve(G0),updateOperator:Ve(G0),definitionOperator:Ve(G0),typeOperator:Ve(G0),controlOperator:Ve(G0),punctuation:uF,separator:Ve(uF),bracket:df,angleBracket:Ve(df),squareBracket:Ve(df),paren:Ve(df),brace:Ve(df),content:K0,heading:bd,heading1:Ve(bd),heading2:Ve(bd),heading3:Ve(bd),heading4:Ve(bd),heading5:Ve(bd),heading6:Ve(bd),contentSeparator:Ve(K0),list:Ve(K0),quote:Ve(K0),emphasis:Ve(K0),strong:Ve(K0),link:Ve(K0),monospace:Ve(K0),strikethrough:Ve(K0),inserted:Ve(),deleted:Ve(),changed:Ve(),invalid:Ve(),meta:LD,documentMeta:Ve(LD),annotation:Ve(LD),processingInstruction:Ve(LD),definition:xc.defineModifier("definition"),constant:xc.defineModifier("constant"),function:xc.defineModifier("function"),standard:xc.defineModifier("standard"),local:xc.defineModifier("local"),special:xc.defineModifier("special")};for(let t in Re){let e=Re[t];e instanceof xc&&(e.name=t)}var owe=fF([{tag:Re.link,class:"tok-link"},{tag:Re.heading,class:"tok-heading"},{tag:Re.emphasis,class:"tok-emphasis"},{tag:Re.strong,class:"tok-strong"},{tag:Re.keyword,class:"tok-keyword"},{tag:Re.atom,class:"tok-atom"},{tag:Re.bool,class:"tok-bool"},{tag:Re.url,class:"tok-url"},{tag:Re.labelName,class:"tok-labelName"},{tag:Re.inserted,class:"tok-inserted"},{tag:Re.deleted,class:"tok-deleted"},{tag:Re.literal,class:"tok-literal"},{tag:Re.string,class:"tok-string"},{tag:Re.number,class:"tok-number"},{tag:[Re.regexp,Re.escape,Re.special(Re.string)],class:"tok-string2"},{tag:Re.variableName,class:"tok-variableName"},{tag:Re.local(Re.variableName),class:"tok-variableName tok-local"},{tag:Re.definition(Re.variableName),class:"tok-variableName tok-definition"},{tag:Re.special(Re.variableName),class:"tok-variableName2"},{tag:Re.definition(Re.propertyName),class:"tok-propertyName tok-definition"},{tag:Re.typeName,class:"tok-typeName"},{tag:Re.namespace,class:"tok-namespace"},{tag:Re.className,class:"tok-className"},{tag:Re.macroName,class:"tok-macroName"},{tag:Re.propertyName,class:"tok-propertyName"},{tag:Re.operator,class:"tok-operator"},{tag:Re.comment,class:"tok-comment"},{tag:Re.meta,class:"tok-meta"},{tag:Re.invalid,class:"tok-invalid"},{tag:Re.punctuation,class:"tok-punctuation"}]);var mF,NQ=new yi;function gbA(t){return We.define({combine:t?e=>e.concat(t):void 0})}var lbA=new yi,Rc=(()=>{class t{constructor(A,i,n=[],o=""){this.data=A,this.name=o,$a.prototype.hasOwnProperty("tree")||Object.defineProperty($a.prototype,"tree",{get(){return xr(this)}}),this.parser=i,this.extension=[NI.of(this),$a.languageData.of((a,r,s)=>{let g=bAA(a,r,s),l=g.type.prop(NQ);if(!l)return[];let C=a.facet(l),I=g.type.prop(lbA);if(I){let d=g.resolve(r-g.from,s);for(let B of I)if(B.test(d,a)){let E=a.facet(B.facet);return B.type=="replace"?E:E.concat(C)}}return C})].concat(n)}isActiveAt(A,i,n=-1){return bAA(A,i,n).type.prop(NQ)==this.data}findRegions(A){let i=A.facet(NI);if(i?.data==this.data)return[{from:0,to:A.doc.length}];if(!i||!i.allowsNesting)return[];let n=[],o=(a,r)=>{if(a.prop(NQ)==this.data){n.push({from:r,to:r+a.length});return}let s=a.prop(yi.mounted);if(s){if(s.tree.prop(NQ)==this.data){if(s.overlay)for(let g of s.overlay)n.push({from:g.from+r,to:g.to+r});else n.push({from:r,to:r+a.length});return}else if(s.overlay){let g=n.length;if(o(s.tree,s.overlay[0].from+r),n.length>g)return}}for(let g=0;gi.isTop?A:void 0)]}),e.name)}configure(e,A){return new t(this.data,this.parser.configure(e),A||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function xr(t){let e=t.field(Rc.state,!1);return e?e.tree:za.empty}function NF(t,e,A=50){var i;let n=(i=t.field(Rc.state,!1))===null||i===void 0?void 0:i.context;if(!n)return null;let o=n.viewport;n.updateViewport({from:0,to:e});let a=n.isDone(e)||n.work(A,e)?n.tree:null;return n.updateViewport(o),a}var yF=class{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,A){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,A):this.string.slice(e-i,A-i)}},Bf=null,vF=class t{constructor(e,A,i=[],n,o,a,r,s){this.parser=e,this.state=A,this.fragments=i,this.tree=n,this.treeLen=o,this.viewport=a,this.skipped=r,this.scheduleOn=s,this.parse=null,this.tempSkipped=[]}static create(e,A,i){return new t(e,A,[],za.empty,0,i,[],null)}startParse(){return this.parser.startParse(new yF(this.state.doc),this.fragments)}work(e,A){return A!=null&&A>=this.state.doc.length&&(A=void 0),this.tree!=za.empty&&this.isDone(A??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let n=Date.now()+e;e=()=>Date.now()>n}for(this.parse||(this.parse=this.startParse()),A!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>A)&&A=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(A=this.parse.advance()););}),this.treeLen=e,this.tree=A,this.fragments=this.withoutTempSkipped(vd.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let A=Bf;Bf=this;try{return e()}finally{Bf=A}}withoutTempSkipped(e){for(let A;A=this.tempSkipped.pop();)e=MAA(e,A.from,A.to);return e}changes(e,A){let{fragments:i,tree:n,treeLen:o,viewport:a,skipped:r}=this;if(this.takeTree(),!e.empty){let s=[];if(e.iterChangedRanges((g,l,C,I)=>s.push({fromA:g,toA:l,fromB:C,toB:I})),i=vd.applyChanges(i,s),n=za.empty,o=0,a={from:e.mapPos(a.from,-1),to:e.mapPos(a.to,1)},this.skipped.length){r=[];for(let g of this.skipped){let l=e.mapPos(g.from,1),C=e.mapPos(g.to,-1);le.from&&(this.fragments=MAA(this.fragments,n,o),this.skipped.splice(i--,1))}return this.skipped.length>=A?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,A){this.skipped.push({from:e,to:A})}static getSkippingParser(e){return new class extends RQ{createParse(A,i,n){let o=n[0].from,a=n[n.length-1].to;return{parsedPos:o,advance(){let s=Bf;if(s){for(let g of n)s.tempSkipped.push(g);e&&(s.scheduleOn=s.scheduleOn?Promise.all([s.scheduleOn,e]):e)}return this.parsedPos=a,new za(ws.none,[],[],a-o)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let A=this.fragments;return this.treeLen>=e&&A.length&&A[0].from==0&&A[0].to>=e}static get(){return Bf}};function MAA(t,e,A){return vd.applyChanges(t,[{fromA:e,toA:A,fromB:e,toB:A}])}var Qf=class t{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let A=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),A.viewport.to);return A.work(20,i)||A.takeTree(),new t(A)}static init(e){let A=Math.min(3e3,e.doc.length),i=vF.create(e.facet(NI).parser,e,{from:0,to:A});return i.work(20,A)||i.takeTree(),new t(i)}};Rc.state=wa.define({create:Qf.init,update(t,e){for(let A of e.effects)if(A.is(Rc.setState))return A.value;return e.startState.facet(NI)!=e.state.facet(NI)?Qf.init(e.state):t.apply(e)}});var FAA=t=>{let e=setTimeout(()=>t(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(FAA=t=>{let e=-1,A=setTimeout(()=>{e=requestIdleCallback(t,{timeout:400})},100);return()=>e<0?clearTimeout(A):cancelIdleCallback(e)});var pF=typeof navigator<"u"&&(!((mF=navigator.scheduling)===null||mF===void 0)&&mF.isInputPending)?()=>navigator.scheduling.isInputPending():null,cbA=_o.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let A=this.view.state.field(Rc.state).context;(A.updateViewport(e.view.viewport)||this.view.viewport.to>A.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(A)}scheduleWork(){if(this.working)return;let{state:e}=this.view,A=e.field(Rc.state);(A.tree!=A.context.tree||!A.context.isDone(e.doc.length))&&(this.working=FAA(this.work))}work(e){this.working=null;let A=Date.now();if(this.chunkEndn+1e3,s=o.context.work(()=>pF&&pF()||Date.now()>a,n+(r?0:1e5));this.chunkBudget-=Date.now()-A,(s||this.chunkBudget<=0)&&(o.context.takeTree(),this.view.dispatch({effects:Rc.setState.of(new Qf(o.context))})),this.chunkBudget>0&&!(s&&!r)&&this.scheduleWork(),this.checkAsyncSchedule(o.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(A=>Sr(this.view.state,A)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),NI=We.define({combine(t){return t.length?t[0]:null},enables:t=>[Rc.state,cbA,ii.contentAttributes.compute([t],e=>{let A=e.facet(t);return A&&A.name?{"data-language":A.name}:{}})]}),JD=class{constructor(e,A=[]){this.language=e,this.support=A,this.extension=[e,A]}};var CbA=We.define(),xd=We.define({combine:t=>{if(!t.length)return" ";let e=t[0];if(!e||/\S/.test(e)||Array.from(e).some(A=>A!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(t[0]));return e}});function Fc(t){let e=t.facet(xd);return e.charCodeAt(0)==9?t.tabSize*e.length:e.length}function LQ(t,e){let A="",i=t.tabSize,n=t.facet(xd)[0];if(n==" "){for(;e>=i;)A+=" ",e-=i;n=" "}for(let o=0;o=e?IbA(t,A,e):null}var kd=class{constructor(e,A={}){this.state=e,this.options=A,this.unit=Fc(e)}lineAt(e,A=1){let i=this.state.doc.lineAt(e),{simulateBreak:n,simulateDoubleBreak:o}=this.options;return n!=null&&n>=i.from&&n<=i.to?o&&n==e?{text:"",from:e}:(A<0?n-1&&(o+=a-this.countColumn(i,i.search(/\S|$/))),o}countColumn(e,A=e.length){return LC(e,this.state.tabSize,A)}lineIndent(e,A=1){let{text:i,from:n}=this.lineAt(e,A),o=this.options.overrideIndentation;if(o){let a=o(n);if(a>-1)return a}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},FF=new yi;function IbA(t,e,A){let i=e.resolveStack(A),n=e.resolveInner(A,-1).resolve(A,0).enterUnfinishedNodesBefore(A);if(n!=i.node){let o=[];for(let a=n;a&&!(a.fromi.node.to||a.from==i.node.from&&a.type==i.node.type);a=a.parent)o.push(a);for(let a=o.length-1;a>=0;a--)i={node:o[a],next:i}}return _AA(i,t,A)}function _AA(t,e,A){for(let i=t;i;i=i.next){let n=BbA(i.node);if(n)return n(bF.create(e,A,i))}return 0}function dbA(t){return t.pos==t.options.simulateBreak&&t.options.simulateDoubleBreak}function BbA(t){let e=t.type.prop(FF);if(e)return e;let A=t.firstChild,i;if(A&&(i=A.type.prop(yi.closedBy))){let n=t.lastChild,o=n&&i.indexOf(n.name)>-1;return a=>ubA(a,!0,1,void 0,o&&!dbA(a)?n.from:void 0)}return t.parent==null?EbA:null}function EbA(){return 0}var bF=class t extends kd{constructor(e,A,i){super(e.state,e.options),this.base=e,this.pos=A,this.context=i}get node(){return this.context.node}static create(e,A,i){return new t(e,A,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let A=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(A.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(QbA(i,e))break;A=this.state.doc.lineAt(i.from)}return this.lineIndent(A.from)}continue(){return _AA(this.context.next,this.base,this.pos)}};function QbA(t,e){for(let A=e;A;A=A.parent)if(t==A)return!0;return!1}function hbA(t){let e=t.node,A=e.childAfter(e.from),i=e.lastChild;if(!A)return null;let n=t.options.simulateBreak,o=t.state.doc.lineAt(A.from),a=n==null||n<=o.from?o.to:Math.min(o.to,n);for(let r=A.to;;){let s=e.childAfter(r);if(!s||s==i)return null;if(!s.type.isSkipped){if(s.from>=a)return null;let g=/^ */.exec(o.text.slice(A.to-o.from))[0].length;return{from:A.from,to:A.to+g}}r=s.to}}function ubA(t,e,A,i,n){let o=t.textAfter,a=o.match(/^\s*/)[0].length,r=i&&o.slice(a,a+i.length)==i||n==t.pos+a,s=e?hbA(t):null;return s?r?t.column(s.from):t.column(s.to):t.baseIndent+(r?0:t.unit*A)}function _F({except:t,units:e=1}={}){return A=>{let i=t&&t.test(A.textAfter);return A.baseIndent+(i?0:e*A.unit)}}var fbA=200;function LAA(){return $a.transactionFilter.of(t=>{if(!t.docChanged||!t.isUserEvent("input.type")&&!t.isUserEvent("input.complete"))return t;let e=t.startState.languageDataAt("indentOnInput",t.startState.selection.main.head);if(!e.length)return t;let A=t.newDoc,{head:i}=t.newSelection.main,n=A.lineAt(i);if(i>n.from+fbA)return t;let o=A.sliceString(n.from,i);if(!e.some(g=>g.test(o)))return t;let{state:a}=t,r=-1,s=[];for(let{head:g}of a.selection.ranges){let l=a.doc.lineAt(g);if(l.from==r)continue;r=l.from;let C=TD(a,l.from);if(C==null)continue;let I=/^\s*/.exec(l.text)[0],d=LQ(a,C);I!=d&&s.push({from:l.from,to:l.from+I.length,insert:d})}return s.length?[t,{changes:s,sequential:!0}]:t})}var LF=We.define(),hf=new yi;function GAA(t){let e=t.firstChild,A=t.lastChild;return e&&e.toA)continue;if(o&&r.from=e&&g.to>A&&(o=g)}}return o}function pbA(t){let e=t.lastChild;return e&&e.to==t.to&&e.type.isError}function FQ(t,e,A){for(let i of t.facet(LF)){let n=i(t,e,A);if(n)return n}return mbA(t,e,A)}function KAA(t,e){let A=e.mapPos(t.from,1),i=e.mapPos(t.to,-1);return A>=i?void 0:{from:A,to:i}}var GQ=Hi.define({map:KAA}),uf=Hi.define({map:KAA});function UAA(t){let e=[];for(let{head:A}of t.state.selection.ranges)e.some(i=>i.from<=A&&i.to>=A)||e.push(t.lineBlockAt(A));return e}var Sd=wa.define({create(){return Dt.none},update(t,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((A,i)=>t=kAA(t,A,i)),t=t.map(e.changes);for(let A of e.effects)if(A.is(GQ)&&!wbA(t,A.value.from,A.value.to)){let{preparePlaceholder:i}=e.state.facet(UF),n=i?Dt.replace({widget:new MF(i(e.state,A.value))}):SAA;t=t.update({add:[n.range(A.value.from,A.value.to)]})}else A.is(uf)&&(t=t.update({filter:(i,n)=>A.value.from!=i||A.value.to!=n,filterFrom:A.value.from,filterTo:A.value.to}));return e.selection&&(t=kAA(t,e.selection.main.head)),t},provide:t=>ii.decorations.from(t),toJSON(t,e){let A=[];return t.between(0,e.doc.length,(i,n)=>{A.push(i,n)}),A},fromJSON(t){if(!Array.isArray(t)||t.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let A=0;A{ne&&(i=!0)}),i?t.update({filterFrom:e,filterTo:A,filter:(n,o)=>n>=A||o<=e}):t}function YD(t,e,A){var i;let n=null;return(i=t.field(Sd,!1))===null||i===void 0||i.between(e,A,(o,a)=>{(!n||n.from>o)&&(n={from:o,to:a})}),n}function wbA(t,e,A){let i=!1;return t.between(e,e,(n,o)=>{n==e&&o==A&&(i=!0)}),i}function JAA(t,e){return t.field(Sd,!1)?e:e.concat(Hi.appendConfig.of(HAA()))}var DbA=t=>{for(let e of UAA(t)){let A=FQ(t.state,e.from,e.to);if(A)return t.dispatch({effects:JAA(t.state,[GQ.of(A),YAA(t,A)])}),!0}return!1},GF=t=>{if(!t.state.field(Sd,!1))return!1;let e=[];for(let A of UAA(t)){let i=YD(t.state,A.from,A.to);i&&e.push(uf.of(i),YAA(t,i,!1))}return e.length&&t.dispatch({effects:e}),e.length>0};function YAA(t,e,A=!0){let i=t.state.doc.lineAt(e.from).number,n=t.state.doc.lineAt(e.to).number;return ii.announce.of(`${t.state.phrase(A?"Folded lines":"Unfolded lines")} ${i} ${t.state.phrase("to")} ${n}.`)}var ybA=t=>{let{state:e}=t,A=[];for(let i=0;i{let e=t.state.field(Sd,!1);if(!e||!e.size)return!1;let A=[];return e.between(0,t.state.doc.length,(i,n)=>{A.push(uf.of({from:i,to:n}))}),t.dispatch({effects:A}),!0};var TAA=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:DbA},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:GF},{key:"Ctrl-Alt-[",run:ybA},{key:"Ctrl-Alt-]",run:KF}],vbA={placeholderDOM:null,preparePlaceholder:null,placeholderText:"\u2026"},UF=We.define({combine(t){return kr(t,vbA)}});function HAA(t){let e=[Sd,MbA];return t&&e.push(UF.of(t)),e}function zAA(t,e){let{state:A}=t,i=A.facet(UF),n=a=>{let r=t.lineBlockAt(t.posAtDOM(a.target)),s=YD(t.state,r.from,r.to);s&&t.dispatch({effects:uf.of(s)}),a.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(t,n,e);let o=document.createElement("span");return o.textContent=i.placeholderText,o.setAttribute("aria-label",A.phrase("folded code")),o.title=A.phrase("unfold"),o.className="cm-foldPlaceholder",o.onclick=n,o}var SAA=Dt.replace({widget:new class extends fg{toDOM(t){return zAA(t,null)}}}),MF=class extends fg{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return zAA(e,this.value)}},bbA={openText:"\u2304",closedText:"\u203A",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1},Ef=class extends mg{constructor(e,A){super(),this.config=e,this.open=A}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let A=document.createElement("span");return A.textContent=this.open?this.config.openText:this.config.closedText,A.title=e.state.phrase(this.open?"Fold line":"Unfold line"),A}};function OAA(t={}){let e=gA(gA({},bbA),t),A=new Ef(e,!0),i=new Ef(e,!1),n=_o.fromClass(class{constructor(a){this.from=a.viewport.from,this.markers=this.buildMarkers(a)}update(a){(a.docChanged||a.viewportChanged||a.startState.facet(NI)!=a.state.facet(NI)||a.startState.field(Sd,!1)!=a.state.field(Sd,!1)||xr(a.startState)!=xr(a.state)||e.foldingChanged(a))&&(this.markers=this.buildMarkers(a.view))}buildMarkers(a){let r=new Wr;for(let s of a.viewportLineBlocks){let g=YD(a.state,s.from,s.to)?i:FQ(a.state,s.from,s.to)?A:null;g&&r.add(s.from,s.from,g)}return r.finish()}}),{domEventHandlers:o}=e;return[n,SD({class:"cm-foldGutter",markers(a){var r;return((r=a.plugin(n))===null||r===void 0?void 0:r.markers)||to.empty},initialSpacer(){return new Ef(e,!1)},domEventHandlers:be(gA({},o),{click:(a,r,s)=>{if(o.click&&o.click(a,r,s))return!0;let g=YD(a.state,r.from,r.to);if(g)return a.dispatch({effects:uf.of(g)}),!0;let l=FQ(a.state,r.from,r.to);return l?(a.dispatch({effects:GQ.of(l)}),!0):!1}})}),HAA()]}var MbA=ii.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}}),_Q=class t{constructor(e,A){this.specs=e;let i;function n(r){let s=Ml.newName();return(i||(i=Object.create(null)))["."+s]=r,s}let o=typeof A.all=="string"?A.all:A.all?n(A.all):void 0,a=A.scope;this.scope=a instanceof Rc?r=>r.prop(NQ)==a.data:a?r=>r==a:void 0,this.style=fF(e.map(r=>({tag:r.tag,class:r.class||n(Object.assign({},r,{tag:null}))})),{all:o}).style,this.module=i?new Ml(i):null,this.themeType=A.themeType}static define(e,A){return new t(e,A||{})}},kF=We.define(),PAA=We.define({combine(t){return t.length?[t[0]]:null}});function wF(t){let e=t.facet(kF);return e.length?e:t.facet(PAA)}function JF(t,e){let A=[kbA],i;return t instanceof _Q&&(t.module&&A.push(ii.styleModule.of(t.module)),i=t.themeType),e?.fallback?A.push(PAA.of(t)):i?A.push(kF.computeN([ii.darkTheme],n=>n.facet(ii.darkTheme)==(i=="dark")?[t]:[])):A.push(kF.of(t)),A}var SF=class{constructor(e){this.markCache=Object.create(null),this.tree=xr(e.state),this.decorations=this.buildDeco(e,wF(e.state)),this.decoratedTo=e.viewport.to}update(e){let A=xr(e.state),i=wF(e.state),n=i!=wF(e.startState),{viewport:o}=e.view,a=e.changes.mapPos(this.decoratedTo,1);A.length=o.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=a):(A!=this.tree||e.viewportChanged||n)&&(this.tree=A,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=o.to)}buildDeco(e,A){if(!A||!this.tree.length)return Dt.none;let i=new Wr;for(let{from:n,to:o}of e.visibleRanges)vAA(this.tree,A,(a,r,s)=>{i.add(a,r,this.markCache[s]||(this.markCache[s]=Dt.mark({class:s})))},n,o);return i.finish()}},kbA=vc.high(_o.fromClass(SF,{decorations:t=>t.decorations})),jAA=_Q.define([{tag:Re.meta,color:"#404740"},{tag:Re.link,textDecoration:"underline"},{tag:Re.heading,textDecoration:"underline",fontWeight:"bold"},{tag:Re.emphasis,fontStyle:"italic"},{tag:Re.strong,fontWeight:"bold"},{tag:Re.strikethrough,textDecoration:"line-through"},{tag:Re.keyword,color:"#708"},{tag:[Re.atom,Re.bool,Re.url,Re.contentSeparator,Re.labelName],color:"#219"},{tag:[Re.literal,Re.inserted],color:"#164"},{tag:[Re.string,Re.deleted],color:"#a11"},{tag:[Re.regexp,Re.escape,Re.special(Re.string)],color:"#e40"},{tag:Re.definition(Re.variableName),color:"#00f"},{tag:Re.local(Re.variableName),color:"#30a"},{tag:[Re.typeName,Re.namespace],color:"#085"},{tag:Re.className,color:"#167"},{tag:[Re.special(Re.variableName),Re.macroName],color:"#256"},{tag:Re.definition(Re.propertyName),color:"#00c"},{tag:Re.comment,color:"#940"},{tag:Re.invalid,color:"#f00"}]),SbA=ii.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),qAA=1e4,VAA="()[]{}",WAA=We.define({combine(t){return kr(t,{afterCursor:!0,brackets:VAA,maxScanDistance:qAA,renderMatch:NbA})}}),xbA=Dt.mark({class:"cm-matchingBracket"}),RbA=Dt.mark({class:"cm-nonmatchingBracket"});function NbA(t){let e=[],A=t.matched?xbA:RbA;return e.push(A.range(t.start.from,t.start.to)),t.end&&e.push(A.range(t.end.from,t.end.to)),e}var FbA=wa.define({create(){return Dt.none},update(t,e){if(!e.docChanged&&!e.selection)return t;let A=[],i=e.state.facet(WAA);for(let n of e.state.selection.ranges){if(!n.empty)continue;let o=Nc(e.state,n.head,-1,i)||n.head>0&&Nc(e.state,n.head-1,1,i)||i.afterCursor&&(Nc(e.state,n.head,1,i)||n.headii.decorations.from(t)}),_bA=[FbA,SbA];function ZAA(t={}){return[WAA.of(t),_bA]}var LbA=new yi;function xF(t,e,A){let i=t.prop(e<0?yi.openedBy:yi.closedBy);if(i)return i;if(t.name.length==1){let n=A.indexOf(t.name);if(n>-1&&n%2==(e<0?1:0))return[A[n+e]]}return null}function RF(t){let e=t.type.prop(LbA);return e?e(t.node):t}function Nc(t,e,A,i={}){let n=i.maxScanDistance||qAA,o=i.brackets||VAA,a=xr(t),r=a.resolveInner(e,A);for(let s=r;s;s=s.parent){let g=xF(s.type,A,o);if(g&&s.from0?e>=l.from&&el.from&&e<=l.to))return GbA(t,e,A,s,l,g,o)}}return KbA(t,e,A,a,r.type,n,o)}function GbA(t,e,A,i,n,o,a){let r=i.parent,s={from:n.from,to:n.to},g=0,l=r?.cursor();if(l&&(A<0?l.childBefore(i.from):l.childAfter(i.to)))do if(A<0?l.to<=i.from:l.from>=i.to){if(g==0&&o.indexOf(l.type.name)>-1&&l.from0)return null;let g={from:A<0?e-1:e,to:A>0?e+1:e},l=t.doc.iterRange(e,A>0?t.doc.length:0),C=0;for(let I=0;!l.next().done&&I<=o;){let d=l.value;A<0&&(I+=d.length);let B=e+I*A;for(let E=A>0?0:d.length-1,Q=A>0?d.length:-1;E!=Q;E+=A){let f=a.indexOf(d[E]);if(!(f<0||i.resolveInner(B+E,1).type!=n))if(f%2==0==A>0)C++;else{if(C==1)return{start:g,end:{from:B+E,to:B+E+1},matched:f>>1==s>>1};C--}}A>0&&(I+=d.length)}return l.done?{start:g,matched:!1}:null}var UbA=Object.create(null),xAA=[ws.none];var RAA=[],NAA=Object.create(null),JbA=Object.create(null);for(let[t,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])JbA[t]=YbA(UbA,e);function DF(t,e){RAA.indexOf(t)>-1||(RAA.push(t),console.warn(e))}function YbA(t,e){let A=[];for(let r of e.split(" ")){let s=[];for(let g of r.split(".")){let l=t[g]||Re[g];l?typeof l=="function"?s.length?s=s.map(l):DF(g,`Modifier ${g} used at start of tag`):s.length?DF(g,`Tag ${g} used as modifier`):s=Array.isArray(l)?l:[l]:DF(g,`Unknown highlighting tag ${g}`)}for(let g of s)A.push(g)}if(!A.length)return 0;let i=e.replace(/ /g,"_"),n=i+" "+A.map(r=>r.id),o=NAA[n];if(o)return o.id;let a=NAA[n]=ws.define({id:xAA.length,name:i,props:[KD({[i]:A})]});return xAA.push(a),a.id}var Iwe={rtl:Dt.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:mo.RTL}),ltr:Dt.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:mo.LTR}),auto:Dt.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var TbA=t=>{let{state:e}=t,A=e.doc.lineAt(e.selection.main.from),i=zF(t.state,A.from);return i.line?HbA(t):i.block?ObA(t):!1};function HF(t,e){return({state:A,dispatch:i})=>{if(A.readOnly)return!1;let n=t(e,A);return n?(i(A.update(n)),!0):!1}}var HbA=HF(qbA,0);var zbA=HF(aeA,0);var ObA=HF((t,e)=>aeA(t,e,jbA(e)),0);function zF(t,e){let A=t.languageDataAt("commentTokens",e,1);return A.length?A[0]:{}}var ff=50;function PbA(t,{open:e,close:A},i,n){let o=t.sliceDoc(i-ff,i),a=t.sliceDoc(n,n+ff),r=/\s*$/.exec(o)[0].length,s=/^\s*/.exec(a)[0].length,g=o.length-r;if(o.slice(g-e.length,g)==e&&a.slice(s,s+A.length)==A)return{open:{pos:i-r,margin:r&&1},close:{pos:n+s,margin:s&&1}};let l,C;n-i<=2*ff?l=C=t.sliceDoc(i,n):(l=t.sliceDoc(i,i+ff),C=t.sliceDoc(n-ff,n));let I=/^\s*/.exec(l)[0].length,d=/\s*$/.exec(C)[0].length,B=C.length-d-A.length;return l.slice(I,I+e.length)==e&&C.slice(B,B+A.length)==A?{open:{pos:i+I+e.length,margin:/\s/.test(l.charAt(I+e.length))?1:0},close:{pos:n-d-A.length,margin:/\s/.test(C.charAt(B-1))?1:0}}:null}function jbA(t){let e=[];for(let A of t.selection.ranges){let i=t.doc.lineAt(A.from),n=A.to<=i.to?i:t.doc.lineAt(A.to);n.from>i.from&&n.from==A.to&&(n=A.to==i.to+1?i:t.doc.lineAt(A.to-1));let o=e.length-1;o>=0&&e[o].to>i.from?e[o].to=n.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:n.to})}return e}function aeA(t,e,A=e.selection.ranges){let i=A.map(o=>zF(e,o.from).block);if(!i.every(o=>o))return null;let n=A.map((o,a)=>PbA(e,i[a],o.from,o.to));if(t!=2&&!n.every(o=>o))return{changes:e.changes(A.map((o,a)=>n[a]?[]:[{from:o.from,insert:i[a].open+" "},{from:o.to,insert:" "+i[a].close}]))};if(t!=1&&n.some(o=>o)){let o=[];for(let a=0,r;an&&(o==a||a>C.from)){n=C.from;let I=/^\s*/.exec(C.text)[0].length,d=I==C.length,B=C.text.slice(I,I+g.length)==g?I:-1;Io.comment<0&&(!o.empty||o.single))){let o=[];for(let{line:r,token:s,indent:g,empty:l,single:C}of i)(C||!l)&&o.push({from:r.from+g,insert:s+" "});let a=e.changes(o);return{changes:a,selection:e.selection.map(a,1)}}else if(t!=1&&i.some(o=>o.comment>=0)){let o=[];for(let{line:a,comment:r,token:s}of i)if(r>=0){let g=a.from+r,l=g+s.length;a.text[l-a.from]==" "&&l++,o.push({from:g,to:l})}return{changes:o}}return null}function KQ(t,e){return de.create(t.ranges.map(e),t.mainIndex)}function _c(t,e){return t.update({selection:e,scrollIntoView:!0,userEvent:"select"})}function Lc({state:t,dispatch:e},A){let i=KQ(t.selection,A);return i.eq(t.selection,!0)?!1:(e(_c(t,i)),!0)}function zD(t,e){return de.cursor(e?t.to:t.from)}function reA(t,e){return Lc(t,A=>A.empty?t.moveByChar(A,e):zD(A,e))}function Ds(t){return t.textDirectionAt(t.state.selection.main.head)==mo.LTR}var seA=t=>reA(t,!Ds(t)),geA=t=>reA(t,Ds(t));function leA(t,e){return Lc(t,A=>A.empty?t.moveByGroup(A,e):zD(A,e))}var VbA=t=>leA(t,!Ds(t)),WbA=t=>leA(t,Ds(t));var wwe=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function ZbA(t,e,A){if(e.type.prop(A))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(t.sliceDoc(e.from,e.to)))||e.firstChild}function OD(t,e,A){let i=xr(t).resolveInner(e.head),n=A?yi.closedBy:yi.openedBy;for(let s=e.head;;){let g=A?i.childAfter(s):i.childBefore(s);if(!g)break;ZbA(t,g,n)?i=g:s=A?g.to:g.from}let o=i.type.prop(n),a,r;return o&&(a=A?Nc(t,i.from,1):Nc(t,i.to,-1))&&a.matched?r=A?a.end.to:a.end.from:r=A?i.to:i.from,de.cursor(r,A?-1:1)}var XbA=t=>Lc(t,e=>OD(t.state,e,!Ds(t))),$bA=t=>Lc(t,e=>OD(t.state,e,Ds(t)));function ceA(t,e){return Lc(t,A=>{if(!A.empty)return zD(A,e);let i=t.moveVertically(A,e);return i.head!=A.head?i:t.moveToLineBoundary(A,e)})}var CeA=t=>ceA(t,!1),IeA=t=>ceA(t,!0);function deA(t){let e=t.scrollDOM.clientHeighta.empty?t.moveVertically(a,e,A.height):zD(a,e));if(n.eq(i.selection))return!1;let o;if(A.selfScroll){let a=t.coordsAtPos(i.selection.main.head),r=t.scrollDOM.getBoundingClientRect(),s=r.top+A.marginTop,g=r.bottom-A.marginBottom;a&&a.top>s&&a.bottomBeA(t,!1),YF=t=>BeA(t,!0);function FI(t,e,A){let i=t.lineBlockAt(e.head),n=t.moveToLineBoundary(e,A);if(n.head==e.head&&n.head!=(A?i.to:i.from)&&(n=t.moveToLineBoundary(e,A,!1)),!A&&n.head==i.from&&i.length){let o=/^\s*/.exec(t.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;o&&e.head!=i.from+o&&(n=de.cursor(i.from+o))}return n}var A9A=t=>Lc(t,e=>FI(t,e,!0)),e9A=t=>Lc(t,e=>FI(t,e,!1)),t9A=t=>Lc(t,e=>FI(t,e,!Ds(t))),i9A=t=>Lc(t,e=>FI(t,e,Ds(t))),n9A=t=>Lc(t,e=>de.cursor(t.lineBlockAt(e.head).from,1)),o9A=t=>Lc(t,e=>de.cursor(t.lineBlockAt(e.head).to,-1));function a9A(t,e,A){let i=!1,n=KQ(t.selection,o=>{let a=Nc(t,o.head,-1)||Nc(t,o.head,1)||o.head>0&&Nc(t,o.head-1,1)||o.heada9A(t,e,!1);function Rl(t,e){let A=KQ(t.state.selection,i=>{let n=e(i);return de.range(i.anchor,n.head,n.goalColumn,n.bidiLevel||void 0)});return A.eq(t.state.selection)?!1:(t.dispatch(_c(t.state,A)),!0)}function EeA(t,e){return Rl(t,A=>t.moveByChar(A,e))}var QeA=t=>EeA(t,!Ds(t)),heA=t=>EeA(t,Ds(t));function ueA(t,e){return Rl(t,A=>t.moveByGroup(A,e))}var s9A=t=>ueA(t,!Ds(t)),g9A=t=>ueA(t,Ds(t));var l9A=t=>Rl(t,e=>OD(t.state,e,!Ds(t))),c9A=t=>Rl(t,e=>OD(t.state,e,Ds(t)));function feA(t,e){return Rl(t,A=>t.moveVertically(A,e))}var meA=t=>feA(t,!1),peA=t=>feA(t,!0);function weA(t,e){return Rl(t,A=>t.moveVertically(A,e,deA(t).height))}var $AA=t=>weA(t,!1),AeA=t=>weA(t,!0),C9A=t=>Rl(t,e=>FI(t,e,!0)),I9A=t=>Rl(t,e=>FI(t,e,!1)),d9A=t=>Rl(t,e=>FI(t,e,!Ds(t))),B9A=t=>Rl(t,e=>FI(t,e,Ds(t))),E9A=t=>Rl(t,e=>de.cursor(t.lineBlockAt(e.head).from)),Q9A=t=>Rl(t,e=>de.cursor(t.lineBlockAt(e.head).to)),eeA=({state:t,dispatch:e})=>(e(_c(t,{anchor:0})),!0),teA=({state:t,dispatch:e})=>(e(_c(t,{anchor:t.doc.length})),!0),ieA=({state:t,dispatch:e})=>(e(_c(t,{anchor:t.selection.main.anchor,head:0})),!0),neA=({state:t,dispatch:e})=>(e(_c(t,{anchor:t.selection.main.anchor,head:t.doc.length})),!0),h9A=({state:t,dispatch:e})=>(e(t.update({selection:{anchor:0,head:t.doc.length},userEvent:"select"})),!0),u9A=({state:t,dispatch:e})=>{let A=PD(t).map(({from:i,to:n})=>de.range(i,Math.min(n+1,t.doc.length)));return e(t.update({selection:de.create(A),userEvent:"select"})),!0},f9A=({state:t,dispatch:e})=>{let A=KQ(t.selection,i=>{let n=xr(t),o=n.resolveStack(i.from,1);if(i.empty){let a=n.resolveStack(i.from,-1);a.node.from>=o.node.from&&a.node.to<=o.node.to&&(o=a)}for(let a=o;a;a=a.next){let{node:r}=a;if((r.from=i.to||r.to>i.to&&r.from<=i.from)&&a.next)return de.range(r.to,r.from)}return i});return A.eq(t.selection)?!1:(e(_c(t,A)),!0)};function DeA(t,e){let{state:A}=t,i=A.selection,n=A.selection.ranges.slice();for(let o of A.selection.ranges){let a=A.doc.lineAt(o.head);if(e?a.to0)for(let r=o;;){let s=t.moveVertically(r,e);if(s.heada.to){n.some(g=>g.head==s.head)||n.push(s);break}else{if(s.head==r.head)break;r=s}}}return n.length==i.ranges.length?!1:(t.dispatch(_c(A,de.create(n,n.length-1))),!0)}var m9A=t=>DeA(t,!1),p9A=t=>DeA(t,!0),w9A=({state:t,dispatch:e})=>{let A=t.selection,i=null;return A.ranges.length>1?i=de.create([A.main]):A.main.empty||(i=de.create([de.cursor(A.main.head)])),i?(e(_c(t,i)),!0):!1};function mf(t,e){if(t.state.readOnly)return!1;let A="delete.selection",{state:i}=t,n=i.changeByRange(o=>{let{from:a,to:r}=o;if(a==r){let s=e(o);sa&&(A="delete.forward",s=HD(t,s,!0)),a=Math.min(a,s),r=Math.max(r,s)}else a=HD(t,a,!1),r=HD(t,r,!0);return a==r?{range:o}:{changes:{from:a,to:r},range:de.cursor(a,an(t)))i.between(e,e,(n,o)=>{ne&&(e=A?o:n)});return e}var yeA=(t,e,A)=>mf(t,i=>{let n=i.from,{state:o}=t,a=o.doc.lineAt(n),r,s;if(A&&!e&&n>a.from&&nyeA(t,!1,!0);var veA=t=>yeA(t,!0,!1),beA=(t,e)=>mf(t,A=>{let i=A.head,{state:n}=t,o=n.doc.lineAt(i),a=n.charCategorizer(i);for(let r=null;;){if(i==(e?o.to:o.from)){i==A.head&&o.number!=(e?n.doc.lines:1)&&(i+=e?1:-1);break}let s=Ta(o.text,i-o.from,e)+o.from,g=o.text.slice(Math.min(i,s)-o.from,Math.max(i,s)-o.from),l=a(g);if(r!=null&&l!=r)break;(g!=" "||i!=A.head)&&(r=l),i=s}return i}),MeA=t=>beA(t,!1),D9A=t=>beA(t,!0);var y9A=t=>mf(t,e=>{let A=t.lineBlockAt(e.head).to;return e.headmf(t,e=>{let A=t.moveToLineBoundary(e,!1).head;return e.head>A?A:Math.max(0,e.head-1)}),b9A=t=>mf(t,e=>{let A=t.moveToLineBoundary(e,!0).head;return e.head{if(t.readOnly)return!1;let A=t.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:bn.of(["",""])},range:de.cursor(i.from)}));return e(t.update(A,{scrollIntoView:!0,userEvent:"input"})),!0},k9A=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let A=t.changeByRange(i=>{if(!i.empty||i.from==0||i.from==t.doc.length)return{range:i};let n=i.from,o=t.doc.lineAt(n),a=n==o.from?n-1:Ta(o.text,n-o.from,!1)+o.from,r=n==o.to?n+1:Ta(o.text,n-o.from,!0)+o.from;return{changes:{from:a,to:r,insert:t.doc.slice(n,r).append(t.doc.slice(a,n))},range:de.cursor(r)}});return A.changes.empty?!1:(e(t.update(A,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function PD(t){let e=[],A=-1;for(let i of t.selection.ranges){let n=t.doc.lineAt(i.from),o=t.doc.lineAt(i.to);if(!i.empty&&i.to==o.from&&(o=t.doc.lineAt(i.to-1)),A>=n.number){let a=e[e.length-1];a.to=o.to,a.ranges.push(i)}else e.push({from:n.from,to:o.to,ranges:[i]});A=o.number+1}return e}function keA(t,e,A){if(t.readOnly)return!1;let i=[],n=[];for(let o of PD(t)){if(A?o.to==t.doc.length:o.from==0)continue;let a=t.doc.lineAt(A?o.to+1:o.from-1),r=a.length+1;if(A){i.push({from:o.to,to:a.to},{from:o.from,insert:a.text+t.lineBreak});for(let s of o.ranges)n.push(de.range(Math.min(t.doc.length,s.anchor+r),Math.min(t.doc.length,s.head+r)))}else{i.push({from:a.from,to:o.from},{from:o.to,insert:t.lineBreak+a.text});for(let s of o.ranges)n.push(de.range(s.anchor-r,s.head-r))}}return i.length?(e(t.update({changes:i,scrollIntoView:!0,selection:de.create(n,t.selection.mainIndex),userEvent:"move.line"})),!0):!1}var S9A=({state:t,dispatch:e})=>keA(t,e,!1),x9A=({state:t,dispatch:e})=>keA(t,e,!0);function SeA(t,e,A){if(t.readOnly)return!1;let i=[];for(let o of PD(t))A?i.push({from:o.from,insert:t.doc.slice(o.from,o.to)+t.lineBreak}):i.push({from:o.to,insert:t.lineBreak+t.doc.slice(o.from,o.to)});let n=t.changes(i);return e(t.update({changes:n,selection:t.selection.map(n,A?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var R9A=({state:t,dispatch:e})=>SeA(t,e,!1),N9A=({state:t,dispatch:e})=>SeA(t,e,!0),F9A=t=>{if(t.state.readOnly)return!1;let{state:e}=t,A=e.changes(PD(e).map(({from:n,to:o})=>(n>0?n--:o{let o;if(t.lineWrapping){let a=t.lineBlockAt(n.head),r=t.coordsAtPos(n.head,n.assoc||1);r&&(o=a.bottom+t.documentTop-r.bottom+t.defaultLineHeight/2)}return t.moveVertically(n,!0,o)}).map(A);return t.dispatch({changes:A,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function _9A(t,e){if(/\(\)|\[\]|\{\}/.test(t.sliceDoc(e-1,e+1)))return{from:e,to:e};let A=xr(t).resolveInner(e),i=A.childBefore(e),n=A.childAfter(e),o;return i&&n&&i.to<=e&&n.from>=e&&(o=i.type.prop(yi.closedBy))&&o.indexOf(n.name)>-1&&t.doc.lineAt(i.to).from==t.doc.lineAt(n.from).from&&!/\S/.test(t.sliceDoc(i.to,n.from))?{from:i.to,to:n.from}:null}var oeA=xeA(!1),L9A=xeA(!0);function xeA(t){return({state:e,dispatch:A})=>{if(e.readOnly)return!1;let i=e.changeByRange(n=>{let{from:o,to:a}=n,r=e.doc.lineAt(o),s=!t&&o==a&&_9A(e,o);t&&(o=a=(a<=r.to?r:e.doc.lineAt(a)).to);let g=new kd(e,{simulateBreak:o,simulateDoubleBreak:!!s}),l=TD(g,o);for(l==null&&(l=LC(/^\s*/.exec(e.doc.lineAt(o).text)[0],e.tabSize));ar.from&&o{let n=[];for(let a=i.from;a<=i.to;){let r=t.doc.lineAt(a);r.number>A&&(i.empty||i.to>r.from)&&(e(r,n,i),A=r.number),a=r.to+1}let o=t.changes(n);return{changes:n,range:de.range(o.mapPos(i.anchor,1),o.mapPos(i.head,1))}})}var G9A=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let A=Object.create(null),i=new kd(t,{overrideIndentation:o=>{let a=A[o];return a??-1}}),n=OF(t,(o,a,r)=>{let s=TD(i,o.from);if(s==null)return;/\S/.test(o.text)||(s=0);let g=/^\s*/.exec(o.text)[0],l=LQ(t,s);(g!=l||r.fromt.readOnly?!1:(e(t.update(OF(t,(A,i)=>{i.push({from:A.from,insert:t.facet(xd)})}),{userEvent:"input.indent"})),!0),NeA=({state:t,dispatch:e})=>t.readOnly?!1:(e(t.update(OF(t,(A,i)=>{let n=/^\s*/.exec(A.text)[0];if(!n)return;let o=LC(n,t.tabSize),a=0,r=LQ(t,Math.max(0,o-Fc(t)));for(;a(t.setTabFocusMode(),!0);var U9A=[{key:"Ctrl-b",run:seA,shift:QeA,preventDefault:!0},{key:"Ctrl-f",run:geA,shift:heA},{key:"Ctrl-p",run:CeA,shift:meA},{key:"Ctrl-n",run:IeA,shift:peA},{key:"Ctrl-a",run:n9A,shift:E9A},{key:"Ctrl-e",run:o9A,shift:Q9A},{key:"Ctrl-d",run:veA},{key:"Ctrl-h",run:TF},{key:"Ctrl-k",run:y9A},{key:"Ctrl-Alt-h",run:MeA},{key:"Ctrl-o",run:M9A},{key:"Ctrl-t",run:k9A},{key:"Ctrl-v",run:YF}],J9A=[{key:"ArrowLeft",run:seA,shift:QeA,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:VbA,shift:s9A,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:t9A,shift:d9A,preventDefault:!0},{key:"ArrowRight",run:geA,shift:heA,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:WbA,shift:g9A,preventDefault:!0},{mac:"Cmd-ArrowRight",run:i9A,shift:B9A,preventDefault:!0},{key:"ArrowUp",run:CeA,shift:meA,preventDefault:!0},{mac:"Cmd-ArrowUp",run:eeA,shift:ieA},{mac:"Ctrl-ArrowUp",run:XAA,shift:$AA},{key:"ArrowDown",run:IeA,shift:peA,preventDefault:!0},{mac:"Cmd-ArrowDown",run:teA,shift:neA},{mac:"Ctrl-ArrowDown",run:YF,shift:AeA},{key:"PageUp",run:XAA,shift:$AA},{key:"PageDown",run:YF,shift:AeA},{key:"Home",run:e9A,shift:I9A,preventDefault:!0},{key:"Mod-Home",run:eeA,shift:ieA},{key:"End",run:A9A,shift:C9A,preventDefault:!0},{key:"Mod-End",run:teA,shift:neA},{key:"Enter",run:oeA,shift:oeA},{key:"Mod-a",run:h9A},{key:"Backspace",run:TF,shift:TF,preventDefault:!0},{key:"Delete",run:veA,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:MeA,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:D9A,preventDefault:!0},{mac:"Mod-Backspace",run:v9A,preventDefault:!0},{mac:"Mod-Delete",run:b9A,preventDefault:!0}].concat(U9A.map(t=>({mac:t.key,run:t.run,shift:t.shift}))),FeA=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:XbA,shift:l9A},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:$bA,shift:c9A},{key:"Alt-ArrowUp",run:S9A},{key:"Shift-Alt-ArrowUp",run:R9A},{key:"Alt-ArrowDown",run:x9A},{key:"Shift-Alt-ArrowDown",run:N9A},{key:"Mod-Alt-ArrowUp",run:m9A},{key:"Mod-Alt-ArrowDown",run:p9A},{key:"Escape",run:w9A},{key:"Mod-Enter",run:L9A},{key:"Alt-l",mac:"Ctrl-l",run:u9A},{key:"Mod-i",run:f9A,preventDefault:!0},{key:"Mod-[",run:NeA},{key:"Mod-]",run:ReA},{key:"Mod-Alt-\\",run:G9A},{key:"Shift-Mod-k",run:F9A},{key:"Shift-Mod-\\",run:r9A},{key:"Mod-/",run:TbA},{key:"Alt-A",run:zbA},{key:"Ctrl-m",mac:"Shift-Alt-m",run:K9A}].concat(J9A),_eA={key:"Tab",run:ReA,shift:NeA};var VD=class{constructor(e,A,i){this.from=e,this.to=A,this.diagnostic=i}},Rd=class t{constructor(e,A,i){this.diagnostics=e,this.panel=A,this.selected=i}static init(e,A,i){let n=i.facet(U0).markerFilter;n&&(e=n(e,i));let o=e.slice().sort((d,B)=>d.from-B.from||d.to-B.to),a=new Wr,r=[],s=0,g=i.doc.iter(),l=0,C=i.doc.length;for(let d=0;;){let B=d==o.length?null:o[d];if(!B&&!r.length)break;let E,Q;if(r.length)E=s,Q=r.reduce((S,M)=>Math.min(S,M.to),B&&B.from>E?B.from:1e8);else{if(E=B.from,E>C)break;Q=B.to,r.push(B),d++}for(;dS.from||S.to==E))r.push(S),d++,Q=Math.min(S.to,Q);else{Q=Math.min(S.from,Q);break}}Q=Math.min(Q,C);let f=!1;if(r.some(S=>S.from==E&&(S.to==Q||Q==C))&&(f=E==Q,!f&&Q-E<10)){let S=E-(l+g.value.length);S>0&&(g.next(S),l=E);for(let M=E;;){if(M>=Q){f=!0;break}if(!g.lineBreak&&l+g.value.length>M)break;M=l+g.value.length,l+=g.value.length,g.next()}}let b=PeA(r);if(f)a.add(E,E,Dt.widget({widget:new PF(b),diagnostics:r.slice()}));else{let S=r.reduce((M,D)=>D.markClass?M+" "+D.markClass:M,"");a.add(E,Q,Dt.mark({class:"cm-lintRange cm-lintRange-"+b+S,diagnostics:r.slice(),inclusiveEnd:r.some(M=>M.to>Q)}))}if(s=Q,s==C)break;for(let S=0;S{if(!(e&&a.diagnostics.indexOf(e)<0))if(!i)i=new VD(n,o,e||a.diagnostics[0]);else{if(a.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new VD(i.from,o,i.diagnostic)}}),i}function KeA(t,e){let A=e.pos,i=e.end||A,n=t.state.facet(U0).hideOn(t,A,i);if(n!=null)return n;let o=t.startState.doc.lineAt(e.pos);return!!(t.effects.some(a=>a.is(XD))||t.changes.touchesRange(o.from,Math.max(o.to,i)))}function UeA(t,e){return t.field(Pg,!1)?e:e.concat(Hi.appendConfig.of(qeA))}function Y9A(t,e){return{effects:UeA(t,[XD.of(e)])}}var XD=Hi.define(),qF=Hi.define(),JeA=Hi.define(),Pg=wa.define({create(){return new Rd(Dt.none,null,null)},update(t,e){if(e.docChanged&&t.diagnostics.size){let A=t.diagnostics.map(e.changes),i=null,n=t.panel;if(t.selected){let o=e.changes.mapPos(t.selected.from,1);i=UQ(A,t.selected.diagnostic,o)||UQ(A,null,o)}!A.size&&n&&e.state.facet(U0).autoPanel&&(n=null),t=new Rd(A,n,i)}for(let A of e.effects)if(A.is(XD)){let i=e.state.facet(U0).autoPanel?A.value.length?pf.open:null:t.panel;t=Rd.init(A.value,i,e.state)}else A.is(qF)?t=new Rd(t.diagnostics,A.value?pf.open:null,t.selected):A.is(JeA)&&(t=new Rd(t.diagnostics,t.panel,A.value));return t},provide:t=>[Dd.from(t,e=>e.panel),ii.decorations.from(t,e=>e.diagnostics)]});var T9A=Dt.mark({class:"cm-lintRange cm-lintRange-active"});function H9A(t,e,A){let{diagnostics:i}=t.state.field(Pg),n,o=-1,a=-1;i.between(e-(A<0?1:0),e+(A>0?1:0),(s,g,{spec:l})=>{if(e>=s&&e<=g&&(s==g||(e>s||A>0)&&(eOeA(t,A,!1)))}var z9A=t=>{let e=t.state.field(Pg,!1);(!e||!e.panel)&&t.dispatch({effects:UeA(t.state,[qF.of(!0)])});let A=sf(t,pf.open);return A&&A.dom.querySelector(".cm-panel-lint ul").focus(),!0},LeA=t=>{let e=t.state.field(Pg,!1);return!e||!e.panel?!1:(t.dispatch({effects:qF.of(!1)}),!0)},O9A=t=>{let e=t.state.field(Pg,!1);if(!e)return!1;let A=t.state.selection.main,i=e.diagnostics.iter(A.to+1);return!i.value&&(i=e.diagnostics.iter(0),!i.value||i.from==A.from&&i.to==A.to)?!1:(t.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0}),!0)};var TeA=[{key:"Mod-Shift-m",run:z9A,preventDefault:!0},{key:"F8",run:O9A}],P9A=_o.fromClass(class{constructor(t){this.view=t,this.timeout=-1,this.set=!0;let{delay:e}=t.state.facet(U0);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let t=Date.now();if(tPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(Y9A(this.view.state,i.reduce((n,o)=>n.concat(o))))},i=>{Sr(this.view.state,i)})}}update(t){let e=t.state.facet(U0);(t.docChanged||e!=t.startState.facet(U0)||e.needsRefresh&&e.needsRefresh(t))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function j9A(t,e,A){let i=[],n=-1;for(let o of t)o.then(a=>{i.push(a),clearTimeout(n),i.length==t.length?e(i):n=setTimeout(()=>e(i),200)},A)}var U0=We.define({combine(t){return gA({sources:t.map(e=>e.source).filter(e=>e!=null)},kr(t.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:GeA,tooltipFilter:GeA,needsRefresh:(e,A)=>e?A?i=>e(i)||A(i):e:A,hideOn:(e,A)=>e?A?(i,n,o)=>e(i,n,o)||A(i,n,o):e:A,autoPanel:(e,A)=>e||A}))}});function GeA(t,e){return t?e?(A,i)=>e(t(A,i),i):t:e}function HeA(t,e={}){return[U0.of({source:t,config:e}),P9A,qeA]}function zeA(t){let e=[];if(t)A:for(let{name:A}of t){for(let i=0;io.toLowerCase()==n.toLowerCase())){e.push(n);continue A}}e.push("")}return e}function OeA(t,e,A){var i;let n=A?zeA(e.actions):[];return io("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},io("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(t):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((o,a)=>{let r=!1,s=d=>{if(d.preventDefault(),r)return;r=!0;let B=UQ(t.state.field(Pg).diagnostics,e);B&&o.apply(t,B.from,B.to)},{name:g}=o,l=n[a]?g.indexOf(n[a]):-1,C=l<0?g:[g.slice(0,l),io("u",g.slice(l,l+1)),g.slice(l+1)],I=o.markClass?" "+o.markClass:"";return io("button",{type:"button",class:"cm-diagnosticAction"+I,onclick:s,onmousedown:s,"aria-label":` Action: ${g}${l<0?"":` (access key "${n[a]})"`}.`},C)}),e.source&&io("div",{class:"cm-diagnosticSource"},e.source))}var PF=class extends fg{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return io("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}},WD=class{constructor(e,A){this.diagnostic=A,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=OeA(e,A,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}},pf=class t{constructor(e){this.view=e,this.items=[];let A=n=>{if(n.keyCode==27)LeA(this.view),this.view.focus();else if(n.keyCode==38||n.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(n.keyCode==40||n.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(n.keyCode==36)this.moveSelection(0);else if(n.keyCode==35)this.moveSelection(this.items.length-1);else if(n.keyCode==13)this.view.focus();else if(n.keyCode>=65&&n.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:o}=this.items[this.selectedIndex],a=zeA(o.actions);for(let r=0;r{for(let o=0;oLeA(this.view)},"\xD7")),this.update()}get selectedIndex(){let e=this.view.state.field(Pg).selected;if(!e)return-1;for(let A=0;A{for(let l of g.diagnostics){if(a.has(l))continue;a.add(l);let C=-1,I;for(let d=i;di&&(this.items.splice(i,C-i),n=!0)),A&&I.diagnostic==A.diagnostic?I.dom.hasAttribute("aria-selected")||(I.dom.setAttribute("aria-selected","true"),o=I):I.dom.hasAttribute("aria-selected")&&I.dom.removeAttribute("aria-selected"),i++}});i({sel:o.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:r,panel:s})=>{let g=s.height/this.list.offsetHeight;r.tops.bottom&&(this.list.scrollTop+=(r.bottom-s.bottom)/g)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),n&&this.sync()}sync(){let e=this.list.firstChild;function A(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)A();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)A()}moveSelection(e){if(this.selectedIndex<0)return;let A=this.view.state.field(Pg),i=UQ(A.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:JeA.of(i)})}static open(e){return new t(e)}};function qD(t,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(t)}')`}function jD(t){return qD(``,'width="6" height="3"')}var q9A=ii.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:jD("#d11")},".cm-lintRange-warning":{backgroundImage:jD("orange")},".cm-lintRange-info":{backgroundImage:jD("#999")},".cm-lintRange-hint":{backgroundImage:jD("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}}});function V9A(t){return t=="error"?4:t=="warning"?3:t=="info"?2:1}function PeA(t){let e="hint",A=1;for(let i of t){let n=V9A(i.severity);n>A&&(A=n,e=i.severity)}return e}var ZD=class extends mg{constructor(e){super(),this.diagnostics=e,this.severity=PeA(e)}toDOM(e){let A=document.createElement("div");A.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,n=e.state.facet($D).tooltipFilter;return n&&(i=n(i,e.state)),i.length&&(A.onmouseover=()=>Z9A(e,A,i)),A}};function W9A(t,e){let A=i=>{let n=e.getBoundingClientRect();if(!(i.clientX>n.left-10&&i.clientXn.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,W9A(t,e)}let{hoverTime:n}=t.state.facet($D),o=setTimeout(i,n);e.onmouseout=()=>{clearTimeout(o),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(o),o=setTimeout(i,n)}}function X9A(t,e){let A=Object.create(null);for(let n of e){let o=t.lineAt(n.from);(A[o.from]||(A[o.from]=[])).push(n)}let i=[];for(let n in A)i.push(new ZD(A[n]).range(+n));return to.of(i,!0)}var $9A=SD({class:"cm-gutter-lint",markers:t=>t.state.field(jF),widgetMarker:(t,e,A)=>{let i=[];return t.state.field(jF).between(A.from,A.to,(n,o,a)=>{n>A.from&&ni.is(VF)?i.value:A,t)},provide:t=>xQ.from(t)}),AMA=ii.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:qD('')},".cm-lint-marker-warning":{content:qD('')},".cm-lint-marker-error":{content:qD('')}}),qeA=[Pg,ii.decorations.compute([Pg],t=>{let{selected:e,panel:A}=t.field(Pg);return!e||!A||e.from==e.to?Dt.none:Dt.set([T9A.range(e.from,e.to)])}),lAA(H9A,{hideOn:KeA}),q9A],$D=We.define({combine(t){return kr(t,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function VeA(t={}){return[$D.of(t),jF,$9A,AMA,jeA]}var ZF=class t{constructor(e,A,i,n,o,a,r,s,g,l=0,C){this.p=e,this.stack=A,this.state=i,this.reducePos=n,this.pos=o,this.score=a,this.buffer=r,this.bufferBase=s,this.curContext=g,this.lookAhead=l,this.parent=C}toString(){return`[${this.stack.filter((e,A)=>A%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,A,i=0){let n=e.parser.context;return new t(e,[],A,i,i,0,[],0,n?new Ay(n,n.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,A){this.stack.push(this.state,A,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var A;let i=e>>19,n=e&65535,{parser:o}=this.p,a=this.reducePos=2e3&&!(!((A=this.p.parser.nodeSet.types[n])===null||A===void 0)&&A.isAnonymous)&&(g==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=l):this.p.lastBigReductionSizes;)this.stack.pop();this.reduceContext(n,g)}storeNode(e,A,i,n=4,o=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&a.buffer[r-4]==0&&a.buffer[r-1]>-1){if(A==i)return;if(a.buffer[r-2]>=A){a.buffer[r-2]=i;return}}}if(!o||this.pos==i)this.buffer.push(e,A,i,n);else{let a=this.buffer.length;if(a>0&&(this.buffer[a-4]!=0||this.buffer[a-1]<0)){let r=!1;for(let s=a;s>0&&this.buffer[s-2]>i;s-=4)if(this.buffer[s-1]>=0){r=!0;break}if(r)for(;a>0&&this.buffer[a-2]>i;)this.buffer[a]=this.buffer[a-4],this.buffer[a+1]=this.buffer[a-3],this.buffer[a+2]=this.buffer[a-2],this.buffer[a+3]=this.buffer[a-1],a-=4,n>4&&(n-=4)}this.buffer[a]=e,this.buffer[a+1]=A,this.buffer[a+2]=i,this.buffer[a+3]=n}}shift(e,A,i,n){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let o=e,{parser:a}=this.p;this.pos=n,!a.stateFlag(o,1)&&(n>i||A<=a.maxNode)&&(this.reducePos=n),this.pushState(o,Math.min(i,this.reducePos)),this.shiftContext(A,i),A<=a.maxNode&&this.buffer.push(A,i,n,4)}else this.pos=n,this.shiftContext(A,i),A<=this.p.parser.maxNode&&this.buffer.push(A,i,n,4)}apply(e,A,i,n){e&65536?this.reduce(e):this.shift(e,A,i,n)}useNode(e,A){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let n=this.pos;this.reducePos=this.pos=n+e.length,this.pushState(A,n),this.buffer.push(i,n,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,A=e.buffer.length;for(;A>0&&e.buffer[A-2]>e.reducePos;)A-=4;let i=e.buffer.slice(A),n=e.bufferBase+A;for(;e&&n==e.bufferBase;)e=e.parent;return new t(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,n,this.curContext,this.lookAhead,e)}recoverByDelete(e,A){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,A,4),this.storeNode(0,this.pos,A,i?8:4),this.pos=this.reducePos=A,this.score-=190}canShift(e){for(let A=new XF(this);;){let i=this.p.parser.stateSlot(A.state,4)||this.p.parser.hasAction(A.state,e);if(i==0)return!1;if((i&65536)==0)return!0;A.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let A=this.p.parser.nextStates(this.state);if(A.length>8||this.stack.length>=120){let n=[];for(let o=0,a;os&1&&r==a)||n.push(A[o],a)}A=n}let i=[];for(let n=0;n>19,n=A&65535,o=this.stack.length-i*3;if(o<0||e.getGoto(this.stack[o],n,!1)<0){let a=this.findForcedReduction();if(a==null)return!1;A=a}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(A),!0}findForcedReduction(){let{parser:e}=this.p,A=[],i=(n,o)=>{if(!A.includes(n))return A.push(n),e.allActions(n,a=>{if(!(a&393216))if(a&65536){let r=(a>>19)-o;if(r>1){let s=a&65535,g=this.stack.length-r*3;if(g>=0&&e.getGoto(this.stack[g],s,!1)>=0)return r<<19|65536|s}}else{let r=i(a,o+1);if(r!=null)return r}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let A=0;A0&&this.emitLookAhead()}},Ay=class{constructor(e,A){this.tracker=e,this.context=A,this.hash=e.strict?e.hash(A):0}},XF=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let A=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let n=this.start.p.parser.getGoto(this.stack[this.base-3],A,!0);this.state=n}},$F=class t{constructor(e,A,i){this.stack=e,this.pos=A,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,A=e.bufferBase+e.buffer.length){return new t(e,A,A-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new t(this.stack,this.pos,this.index)}};function wf(t,e=Uint16Array){if(typeof t!="string")return t;let A=null;for(let i=0,n=0;i=92&&a--,a>=34&&a--;let s=a-32;if(s>=46&&(s-=46,r=!0),o+=s,r)break;o*=46}A?A[n++]=o:A=new e(o)}return A}var JQ=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},WeA=new JQ,A_=class{constructor(e,A){this.input=e,this.ranges=A,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=WeA,this.rangeIndex=0,this.pos=this.chunkPos=A[0].from,this.range=A[0],this.end=A[A.length-1].to,this.readNext()}resolveOffset(e,A){let i=this.range,n=this.rangeIndex,o=this.pos+e;for(;oi.to:o>=i.to;){if(n==this.ranges.length-1)return null;let a=this.ranges[++n];o+=a.from-i.to,i=a}return o}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,A.from);return this.end}peek(e){let A=this.chunkOff+e,i,n;if(A>=0&&A=this.chunk2Pos&&ir.to&&(this.chunk2=this.chunk2.slice(0,r.to-i)),n=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),n}acceptToken(e,A=0){let i=A?this.resolveOffset(A,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,A){if(A?(this.token=A,A.start=e,A.lookAhead=e+1,A.value=A.extended=-1):this.token=WeA,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&A<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,A-this.chunkPos);if(e>=this.chunk2Pos&&A<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,A-this.chunk2Pos);if(e>=this.range.from&&A<=this.range.to)return this.input.read(e,A);let i="";for(let n of this.ranges){if(n.from>=A)break;n.to>e&&(i+=this.input.read(Math.max(n.from,e),Math.min(n.to,A)))}return i}},_I=class{constructor(e,A){this.data=e,this.id=A}token(e,A){let{parser:i}=A.p;etA(this.data,e,A,this.id,i.data,i.tokenPrecTable)}};_I.prototype.contextual=_I.prototype.fallback=_I.prototype.extend=!1;var e_=class{constructor(e,A,i){this.precTable=A,this.elseToken=i,this.data=typeof e=="string"?wf(e):e}token(e,A){let i=e.pos,n=0;for(;;){let o=e.next<0,a=e.resolveOffset(1,1);if(etA(this.data,e,A,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(o||n++,a==null)break;e.reset(a,e.token)}n&&(e.reset(i,e.token),e.acceptToken(this.elseToken,n))}};e_.prototype.contextual=_I.prototype.fallback=_I.prototype.extend=!1;function etA(t,e,A,i,n,o){let a=0,r=1<0){let B=t[d];if(s.allows(B)&&(e.token.value==-1||e.token.value==B||tMA(B,e.token.value,n,o))){e.acceptToken(B);break}}let l=e.next,C=0,I=t[a+2];if(e.next<0&&I>C&&t[g+I*3-3]==65535){a=t[g+I*3-1];continue A}for(;C>1,B=g+d+(d<<1),E=t[B],Q=t[B+1]||65536;if(l=Q)C=d+1;else{a=t[B+2],e.advance();continue A}}break}}function ZeA(t,e,A){for(let i=e,n;(n=t[i])!=65535;i++)if(n==A)return i-e;return-1}function tMA(t,e,A,i){let n=ZeA(A,i,e);return n<0||ZeA(A,i,t)e)&&!i.type.isError)return A<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(t.length,Math.max(i.from+1,e+25));if(A<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return A<0?0:t.length}}var t_=class{constructor(e,A){this.fragments=e,this.nodeSet=A,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?XeA(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?XeA(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=a,null;if(o instanceof za){if(a==e){if(a=Math.max(this.safeFrom,e)&&(this.trees.push(o),this.start.push(a),this.index.push(0))}else this.index[A]++,this.nextStart=a+o.length}}},i_=class{constructor(e,A){this.stream=A,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new JQ)}getActions(e){let A=0,i=null,{parser:n}=e.p,{tokenizers:o}=n,a=n.stateSlot(e.state,3),r=e.curContext?e.curContext.hash:0,s=0;for(let g=0;gC.end+25&&(s=Math.max(C.lookAhead,s)),C.value!=0)){let I=A;if(C.extended>-1&&(A=this.addActions(e,C.extended,C.end,A)),A=this.addActions(e,C.value,C.end,A),!l.extend&&(i=C,A>I))break}}for(;this.actions.length>A;)this.actions.pop();return s&&e.setLookAhead(s),!i&&e.pos==this.stream.end&&(i=new JQ,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,A=this.addActions(e,i.value,i.end,A)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let A=new JQ,{pos:i,p:n}=e;return A.start=i,A.end=Math.min(i+1,n.stream.end),A.value=i==n.stream.end?n.parser.eofTerm:0,A}updateCachedToken(e,A,i){let n=this.stream.clipPos(i.pos);if(A.token(this.stream.reset(n,e),i),e.value>-1){let{parser:o}=i.p;for(let a=0;a=0&&i.p.parser.dialect.allows(r>>1)){(r&1)==0?e.value=r>>1:e.extended=r>>1;break}}}else e.value=0,e.end=this.stream.clipPos(n+1)}putAction(e,A,i,n){for(let o=0;oe.bufferLength*4?new t_(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,A=this.minStackPos,i=this.stacks=[],n,o;if(this.bigReductionCount>300&&e.length==1){let[a]=e;for(;a.forceReduce()&&a.stack.length&&a.stack[a.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let a=0;aA)i.push(r);else{if(this.advanceStack(r,i,e))continue;{n||(n=[],o=[]),n.push(r);let s=this.tokens.getMainToken(r);o.push(s.value,s.end)}}break}}if(!i.length){let a=n&&iMA(n);if(a)return jg&&console.log("Finish with "+this.stackID(a)),this.stackToTree(a);if(this.parser.strict)throw jg&&n&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+A);this.recovering||(this.recovering=5)}if(this.recovering&&n){let a=this.stoppedAt!=null&&n[0].pos>this.stoppedAt?n[0]:this.runRecovery(n,o,i);if(a)return jg&&console.log("Force-finish "+this.stackID(a)),this.stackToTree(a.forceAll())}if(this.recovering){let a=this.recovering==1?1:this.recovering*3;if(i.length>a)for(i.sort((r,s)=>s.score-r.score);i.length>a;)i.pop();i.some(r=>r.reducePos>A)&&this.recovering--}else if(i.length>1){A:for(let a=0;a500&&g.buffer.length>500)if((r.score-g.score||r.buffer.length-g.buffer.length)>0)i.splice(s--,1);else{i.splice(a--,1);continue A}}}i.length>12&&(i.sort((a,r)=>r.score-a.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let a=1;a ":"";if(this.stoppedAt!=null&&n>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let g=e.curContext&&e.curContext.tracker.strict,l=g?e.curContext.hash:0;for(let C=this.fragments.nodeAt(n);C;){let I=this.parser.nodeSet.types[C.type.id]==C.type?o.getGoto(e.state,C.type.id):-1;if(I>-1&&C.length&&(!g||(C.prop(yi.contextHash)||0)==l))return e.useNode(C,I),jg&&console.log(a+this.stackID(e)+` (via reuse of ${o.getName(C.type.id)})`),!0;if(!(C instanceof za)||C.children.length==0||C.positions[0]>0)break;let d=C.children[0];if(d instanceof za&&C.positions[0]==0)C=d;else break}}let r=o.stateSlot(e.state,4);if(r>0)return e.reduce(r),jg&&console.log(a+this.stackID(e)+` (via always-reduce ${o.getName(r&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let s=this.tokens.getActions(e);for(let g=0;gn?A.push(B):i.push(B)}return!1}advanceFully(e,A){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return $eA(e,A),!0}}runRecovery(e,A,i){let n=null,o=!1;for(let a=0;a ":"";if(r.deadEnd&&(o||(o=!0,r.restart(),jg&&console.log(l+this.stackID(r)+" (restarted)"),this.advanceFully(r,i))))continue;let C=r.split(),I=l;for(let d=0;d<10&&C.forceReduce()&&(jg&&console.log(I+this.stackID(C)+" (via force-reduce)"),!this.advanceFully(C,i));d++)jg&&(I=this.stackID(C)+" -> ");for(let d of r.recoverByInsert(s))jg&&console.log(l+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>r.pos?(g==r.pos&&(g++,s=0),r.recoverByDelete(s,g),jg&&console.log(l+this.stackID(r)+` (via recover-delete ${this.parser.getName(s)})`),$eA(r,i)):(!n||n.scoree.topRules[r][1]),n=[];for(let r=0;r=0)o(l,s,r[g++]);else{let C=r[g+-l];for(let I=-l;I>0;I--)o(r[g++],s,C);g++}}}this.nodeSet=new lf(A.map((r,s)=>ws.define({name:s>=this.minRepeatTerm?void 0:r,id:s,props:n[s],top:i.indexOf(s)>-1,error:s==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(s)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let a=wf(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let r=0;rtypeof r=="number"?new _I(a,r):r),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,A,i){let n=new n_(this,e,A,i);for(let o of this.wrappers)n=o(n,e,A,i);return n}getGoto(e,A,i=!1){let n=this.goto;if(A>=n[0])return-1;for(let o=n[A+1];;){let a=n[o++],r=a&1,s=n[o++];if(r&&i)return s;for(let g=o+(a>>1);o0}validAction(e,A){return!!this.allActions(e,i=>i==A?!0:null)}allActions(e,A){let i=this.stateSlot(e,4),n=i?A(i):void 0;for(let o=this.stateSlot(e,1);n==null;o+=3){if(this.data[o]==65535)if(this.data[o+1]==1)o=JC(this.data,o+2);else break;n=A(JC(this.data,o+1))}return n}nextStates(e){let A=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=JC(this.data,i+2);else break;if((this.data[i+2]&1)==0){let n=this.data[i+1];A.some((o,a)=>a&1&&o==n)||A.push(this.data[i],n)}}return A}configure(e){let A=Object.assign(Object.create(t.prototype),this);if(e.props&&(A.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);A.top=i}return e.tokenizers&&(A.tokenizers=this.tokenizers.map(i=>{let n=e.tokenizers.find(o=>o.from==i);return n?n.to:i})),e.specializers&&(A.specializers=this.specializers.slice(),A.specializerSpecs=this.specializerSpecs.map((i,n)=>{let o=e.specializers.find(r=>r.from==i.external);if(!o)return i;let a=Object.assign(Object.assign({},i),{external:o.to});return A.specializers[n]=AtA(a),a})),e.contextTracker&&(A.context=e.contextTracker),e.dialect&&(A.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(A.strict=e.strict),e.wrap&&(A.wrappers=A.wrappers.concat(e.wrap)),e.bufferLength!=null&&(A.bufferLength=e.bufferLength),A}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let A=this.dynamicPrecedences;return A==null?0:A[e]||0}parseDialect(e){let A=Object.keys(this.dialects),i=A.map(()=>!1);if(e)for(let o of e.split(" ")){let a=A.indexOf(o);a>=0&&(i[a]=!0)}let n=null;for(let o=0;oi)&&A.p.parser.stateFlag(A.state,2)&&(!e||e.scoret.external(A,i)<<1|e}return t.get}var nMA=KD({String:Re.string,Number:Re.number,"True False":Re.bool,PropertyName:Re.propertyName,Null:Re.null,", :":Re.separator,"[ ]":Re.squareBracket,"{ }":Re.brace}),ttA=ey.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O",goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"\u26A0 JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array",maxTerm:25,nodeProps:[["isolate",-2,6,11,""],["openedBy",7,"{",14,"["],["closedBy",8,"}",15,"]"]],propSources:[nMA],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0});var oMA=UD.define({name:"json",parser:ttA.configure({props:[FF.add({Object:_F({except:/^\s*\}/}),Array:_F({except:/^\s*\]/})}),hf.add({"Object Array":GAA})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function itA(){return new JD(oMA)}var ntA=typeof String.prototype.normalize=="function"?t=>t.normalize("NFKD"):t=>t,GI=class{constructor(e,A,i=0,n=e.length,o,a){this.test=a,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,n),this.bufferStart=i,this.normalize=o?r=>o(ntA(r)):ntA,this.query=this.normalize(A)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Zr(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let A=Y3(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=zg(e);let n=this.normalize(A);if(n.length)for(let o=0,a=i;;o++){let r=n.charCodeAt(o),s=this.match(r,a,this.bufferPos+this.bufferStart);if(o==n.length-1){if(s)return this.value=s,this;break}a==i&&othis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let A=this.matchPos<=this.to&&this.re.exec(this.curLine);if(A){let i=this.curLineStart+A.index,n=i+A[0].length;if(this.matchPos=ry(this.text,n+(i==n?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,n,A)))return this.value={from:i,to:n,match:A},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||n.to<=A){let r=new t(A,e.sliceString(A,i));return a_.set(e,r),r}if(n.from==A&&n.to==i)return n;let{text:o,from:a}=n;return a>A&&(o=e.sliceString(A,a)+o,a=A),n.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,A=this.re.exec(this.flat.text);if(A&&!A[0]&&A.index==e&&(this.re.lastIndex=e+1,A=this.re.exec(this.flat.text)),A){let i=this.flat.from+A.index,n=i+A[0].length;if((this.flat.to>=this.to||A.index+A[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,n,A)))return this.value={from:i,to:n,match:A},this.matchPos=ry(this.text,n+(i==n?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=oy.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}};typeof Symbol<"u"&&(ny.prototype[Symbol.iterator]=ay.prototype[Symbol.iterator]=function(){return this});function aMA(t){try{return new RegExp(t,C_),!0}catch{return!1}}function ry(t,e){if(e>=t.length)return e;let A=t.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}var rMA=t=>{let{state:e}=t,A=String(e.doc.lineAt(t.state.selection.main.head).number),{close:i,result:n}=CAA(t,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:A},focus:!0,submitLabel:e.phrase("go")});return n.then(o=>{let a=o&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(o.elements.line.value);if(!a){t.dispatch({effects:i});return}let r=e.doc.lineAt(e.selection.main.head),[,s,g,l,C]=a,I=l?+l.slice(1):0,d=g?+g:r.number;if(g&&C){let Q=d/100;s&&(Q=Q*(s=="-"?-1:1)+r.number/e.doc.lines),d=Math.round(e.doc.lines*Q)}else g&&s&&(d=d*(s=="-"?-1:1)+r.number);let B=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),E=de.cursor(B.from+Math.max(0,Math.min(I,B.length)));t.dispatch({effects:[i,ii.scrollIntoView(E.from,{y:"center"})],selection:E})}),!0},sMA={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},stA=We.define({combine(t){return kr(t,sMA,{highlightWordAroundCursor:(e,A)=>e||A,minSelectionLength:Math.min,maxMatches:Math.min})}});function gtA(t){let e=[IMA,CMA];return t&&e.push(stA.of(t)),e}var gMA=Dt.mark({class:"cm-selectionMatch"}),lMA=Dt.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function otA(t,e,A,i){return(A==0||t(e.sliceDoc(A-1,A))!=Fo.Word)&&(i==e.doc.length||t(e.sliceDoc(i,i+1))!=Fo.Word)}function cMA(t,e,A,i){return t(e.sliceDoc(A,A+1))==Fo.Word&&t(e.sliceDoc(i-1,i))==Fo.Word}var CMA=_o.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.selectionSet||t.docChanged||t.viewportChanged)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=t.state.facet(stA),{state:A}=t,i=A.selection;if(i.ranges.length>1)return Dt.none;let n=i.main,o,a=null;if(n.empty){if(!e.highlightWordAroundCursor)return Dt.none;let s=A.wordAt(n.head);if(!s)return Dt.none;a=A.charCategorizer(n.head),o=A.sliceDoc(s.from,s.to)}else{let s=n.to-n.from;if(s200)return Dt.none;if(e.wholeWords){if(o=A.sliceDoc(n.from,n.to),a=A.charCategorizer(n.head),!(otA(a,A,n.from,n.to)&&cMA(a,A,n.from,n.to)))return Dt.none}else if(o=A.sliceDoc(n.from,n.to),!o)return Dt.none}let r=[];for(let s of t.visibleRanges){let g=new GI(A.doc,o,s.from,s.to);for(;!g.next().done;){let{from:l,to:C}=g.value;if((!a||otA(a,A,l,C))&&(n.empty&&l<=n.from&&C>=n.to?r.push(lMA.range(l,C)):(l>=n.to||C<=n.from)&&r.push(gMA.range(l,C)),r.length>e.maxMatches))return Dt.none}}return Dt.set(r)}},{decorations:t=>t.decorations}),IMA=ii.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),dMA=({state:t,dispatch:e})=>{let{selection:A}=t,i=de.create(A.ranges.map(n=>t.wordAt(n.head)||de.cursor(n.head)),A.mainIndex);return i.eq(A)?!1:(e(t.update({selection:i})),!0)};function BMA(t,e){let{main:A,ranges:i}=t.selection,n=t.wordAt(A.head),o=n&&n.from==A.from&&n.to==A.to;for(let a=!1,r=new GI(t.doc,e,i[i.length-1].to);;)if(r.next(),r.done){if(a)return null;r=new GI(t.doc,e,0,Math.max(0,i[i.length-1].from-1)),a=!0}else{if(a&&i.some(s=>s.from==r.value.from))continue;if(o){let s=t.wordAt(r.value.from);if(!s||s.from!=r.value.from||s.to!=r.value.to)continue}return r.value}}var EMA=({state:t,dispatch:e})=>{let{ranges:A}=t.selection;if(A.some(o=>o.from===o.to))return dMA({state:t,dispatch:e});let i=t.sliceDoc(A[0].from,A[0].to);if(t.selection.ranges.some(o=>t.sliceDoc(o.from,o.to)!=i))return!1;let n=BMA(t,i);return n?(e(t.update({selection:t.selection.addRange(de.range(n.from,n.to),!1),effects:ii.scrollIntoView(n.to)})),!0):!1},Nd=We.define({combine(t){return kr(t,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new l_(e),scrollToMatch:e=>ii.scrollIntoView(e)})}});function ltA(t){return t?[Nd.of(t),c_]:c_}var sy=class{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||aMA(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(A,i)=>i=="n"?` +`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new s_(this):new r_(this)}getCursor(e,A=0,i){let n=e.doc?e:$a.create({doc:e});return i==null&&(i=n.doc.length),this.regexp?TQ(this,n,A,i):YQ(this,n,A,i)}},gy=class{constructor(e){this.spec=e}};function QMA(t,e,A){return(i,n,o,a)=>{if(A&&!A(i,n,o,a))return!1;let r=i>=a&&n<=a+o.length?o.slice(i-a,n-a):e.doc.sliceString(i,n);return t(r,e,i,n)}}function YQ(t,e,A,i){let n;return t.wholeWord&&(n=hMA(e.doc,e.charCategorizer(e.selection.main.head))),t.test&&(n=QMA(t.test,e,n)),new GI(e.doc,t.unquoted,A,i,t.caseSensitive?void 0:o=>o.toLowerCase(),n)}function hMA(t,e){return(A,i,n,o)=>((o>A||o+n.length=A)return null;n.push(i.value)}return n}highlight(e,A,i,n){let o=YQ(this.spec,e,Math.max(0,A-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!o.next().done;)n(o.value.from,o.value.to)}};function uMA(t,e,A){return(i,n,o)=>(!A||A(i,n,o))&&t(o[0],e,i,n)}function TQ(t,e,A,i){let n;return t.wholeWord&&(n=fMA(e.charCategorizer(e.selection.main.head))),t.test&&(n=uMA(t.test,e,n)),new ny(e.doc,t.search,{ignoreCase:!t.caseSensitive,test:n},A,i)}function ly(t,e){return t.slice(Ta(t,e,!1),e)}function cy(t,e){return t.slice(e,Ta(t,e))}function fMA(t){return(e,A,i)=>!i[0].length||(t(ly(i.input,i.index))!=Fo.Word||t(cy(i.input,i.index))!=Fo.Word)&&(t(cy(i.input,i.index+i[0].length))!=Fo.Word||t(ly(i.input,i.index+i[0].length))!=Fo.Word)}var s_=class extends gy{nextMatch(e,A,i){let n=TQ(this.spec,e,i,e.doc.length).next();return n.done&&(n=TQ(this.spec,e,0,A).next()),n.done?null:n.value}prevMatchInRange(e,A,i){for(let n=1;;n++){let o=Math.max(A,i-n*1e4),a=TQ(this.spec,e,o,i),r=null;for(;!a.next().done;)r=a.value;if(r&&(o==A||r.from>o+10))return r;if(o==A)return null}}prevMatch(e,A,i){return this.prevMatchInRange(e,0,A)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(A,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let n=i.length;n>0;n--){let o=+i.slice(0,n);if(o>0&&o=A)return null;n.push(i.value)}return n}highlight(e,A,i,n){let o=TQ(this.spec,e,Math.max(0,A-250),Math.min(i+250,e.doc.length));for(;!o.next().done;)n(o.value.from,o.value.to)}},yf=Hi.define(),I_=Hi.define(),LI=wa.define({create(t){return new Df(g_(t).create(),null)},update(t,e){for(let A of e.effects)A.is(yf)?t=new Df(A.value.create(),t.panel):A.is(I_)&&(t=new Df(t.query,A.value?d_:null));return t},provide:t=>Dd.from(t,e=>e.panel)});var Df=class{constructor(e,A){this.query=e,this.panel=A}},mMA=Dt.mark({class:"cm-searchMatch"}),pMA=Dt.mark({class:"cm-searchMatch cm-searchMatch-selected"}),wMA=_o.fromClass(class{constructor(t){this.view=t,this.decorations=this.highlight(t.state.field(LI))}update(t){let e=t.state.field(LI);(e!=t.startState.field(LI)||t.docChanged||t.selectionSet||t.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:t,panel:e}){if(!e||!t.spec.valid)return Dt.none;let{view:A}=this,i=new Wr;for(let n=0,o=A.visibleRanges,a=o.length;no[n+1].from-500;)s=o[++n].to;t.highlight(A.state,r,s,(g,l)=>{let C=A.state.selection.ranges.some(I=>I.from==g&&I.to==l);i.add(g,l,C?pMA:mMA)})}return i.finish()}},{decorations:t=>t.decorations});function vf(t){return e=>{let A=e.state.field(LI,!1);return A&&A.query.spec.valid?t(e,A):dy(e)}}var Cy=vf((t,{query:e})=>{let{to:A}=t.state.selection.main,i=e.nextMatch(t.state,A,A);if(!i)return!1;let n=de.single(i.from,i.to),o=t.state.facet(Nd);return t.dispatch({selection:n,effects:[B_(t,i),o.scrollToMatch(n.main,t)],userEvent:"select.search"}),CtA(t),!0}),Iy=vf((t,{query:e})=>{let{state:A}=t,{from:i}=A.selection.main,n=e.prevMatch(A,i,i);if(!n)return!1;let o=de.single(n.from,n.to),a=t.state.facet(Nd);return t.dispatch({selection:o,effects:[B_(t,n),a.scrollToMatch(o.main,t)],userEvent:"select.search"}),CtA(t),!0}),DMA=vf((t,{query:e})=>{let A=e.matchAll(t.state,1e3);return!A||!A.length?!1:(t.dispatch({selection:de.create(A.map(i=>de.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),yMA=({state:t,dispatch:e})=>{let A=t.selection;if(A.ranges.length>1||A.main.empty)return!1;let{from:i,to:n}=A.main,o=[],a=0;for(let r=new GI(t.doc,t.sliceDoc(i,n));!r.next().done;){if(o.length>1e3)return!1;r.value.from==i&&(a=o.length),o.push(de.range(r.value.from,r.value.to))}return e(t.update({selection:de.create(o,a),userEvent:"select.search.matches"})),!0},atA=vf((t,{query:e})=>{let{state:A}=t,{from:i,to:n}=A.selection.main;if(A.readOnly)return!1;let o=e.nextMatch(A,i,i);if(!o)return!1;let a=o,r=[],s,g,l=[];a.from==i&&a.to==n&&(g=A.toText(e.getReplacement(a)),r.push({from:a.from,to:a.to,insert:g}),a=e.nextMatch(A,a.from,a.to),l.push(ii.announce.of(A.phrase("replaced match on line $",A.doc.lineAt(i).number)+".")));let C=t.state.changes(r);return a&&(s=de.single(a.from,a.to).map(C),l.push(B_(t,a)),l.push(A.facet(Nd).scrollToMatch(s.main,t))),t.dispatch({changes:C,selection:s,effects:l,userEvent:"input.replace"}),!0}),vMA=vf((t,{query:e})=>{if(t.state.readOnly)return!1;let A=e.matchAll(t.state,1e9).map(n=>{let{from:o,to:a}=n;return{from:o,to:a,insert:e.getReplacement(n)}});if(!A.length)return!1;let i=t.state.phrase("replaced $ matches",A.length)+".";return t.dispatch({changes:A,effects:ii.announce.of(i),userEvent:"input.replace.all"}),!0});function d_(t){return t.state.facet(Nd).createPanel(t)}function g_(t,e){var A,i,n,o,a;let r=t.selection.main,s=r.empty||r.to>r.from+100?"":t.sliceDoc(r.from,r.to);if(e&&!s)return e;let g=t.facet(Nd);return new sy({search:((A=e?.literal)!==null&&A!==void 0?A:g.literal)?s:s.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:g.caseSensitive,literal:(n=e?.literal)!==null&&n!==void 0?n:g.literal,regexp:(o=e?.regexp)!==null&&o!==void 0?o:g.regexp,wholeWord:(a=e?.wholeWord)!==null&&a!==void 0?a:g.wholeWord})}function ctA(t){let e=sf(t,d_);return e&&e.dom.querySelector("[main-field]")}function CtA(t){let e=ctA(t);e&&e==t.root.activeElement&&e.select()}var dy=t=>{let e=t.state.field(LI,!1);if(e&&e.panel){let A=ctA(t);if(A&&A!=t.root.activeElement){let i=g_(t.state,e.query.spec);i.valid&&t.dispatch({effects:yf.of(i)}),A.focus(),A.select()}}else t.dispatch({effects:[I_.of(!0),e?yf.of(g_(t.state,e.query.spec)):Hi.appendConfig.of(c_)]});return!0},By=t=>{let e=t.state.field(LI,!1);if(!e||!e.panel)return!1;let A=sf(t,d_);return A&&A.dom.contains(t.root.activeElement)&&t.focus(),t.dispatch({effects:I_.of(!1)}),!0},ItA=[{key:"Mod-f",run:dy,scope:"editor search-panel"},{key:"F3",run:Cy,shift:Iy,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:Cy,shift:Iy,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:By,scope:"editor search-panel"},{key:"Mod-Shift-l",run:yMA},{key:"Mod-Alt-g",run:rMA},{key:"Mod-d",run:EMA,preventDefault:!0}],l_=class{constructor(e){this.view=e;let A=this.query=e.state.field(LI).query.spec;this.commit=this.commit.bind(this),this.searchField=io("input",{value:A.search,placeholder:qg(e,"Find"),"aria-label":qg(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=io("input",{value:A.replace,placeholder:qg(e,"Replace"),"aria-label":qg(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=io("input",{type:"checkbox",name:"case",form:"",checked:A.caseSensitive,onchange:this.commit}),this.reField=io("input",{type:"checkbox",name:"re",form:"",checked:A.regexp,onchange:this.commit}),this.wordField=io("input",{type:"checkbox",name:"word",form:"",checked:A.wholeWord,onchange:this.commit});function i(n,o,a){return io("button",{class:"cm-button",name:n,onclick:o,type:"button"},a)}this.dom=io("div",{onkeydown:n=>this.keydown(n),class:"cm-search"},[this.searchField,i("next",()=>Cy(e),[qg(e,"next")]),i("prev",()=>Iy(e),[qg(e,"previous")]),i("select",()=>DMA(e),[qg(e,"all")]),io("label",null,[this.caseField,qg(e,"match case")]),io("label",null,[this.reField,qg(e,"regexp")]),io("label",null,[this.wordField,qg(e,"by word")]),...e.state.readOnly?[]:[io("br"),this.replaceField,i("replace",()=>atA(e),[qg(e,"replace")]),i("replaceAll",()=>vMA(e),[qg(e,"replace all")])],io("button",{name:"close",onclick:()=>By(e),"aria-label":qg(e,"close"),type:"button"},["\xD7"])])}commit(){let e=new sy({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:yf.of(e)}))}keydown(e){X$(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?Iy:Cy)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),atA(this.view))}update(e){for(let A of e.transactions)for(let i of A.effects)i.is(yf)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(Nd).top}};function qg(t,e){return t.state.phrase(e)}var ty=30,iy=/[\s\.,:;?!]/;function B_(t,{from:e,to:A}){let i=t.state.doc.lineAt(e),n=t.state.doc.lineAt(A).to,o=Math.max(i.from,e-ty),a=Math.min(n,A+ty),r=t.state.sliceDoc(o,a);if(o!=i.from){for(let s=0;sr.length-ty;s--)if(!iy.test(r[s-1])&&iy.test(r[s])){r=r.slice(0,s);break}}return ii.announce.of(`${t.state.phrase("current match")}. ${r} ${t.state.phrase("on line")} ${i.number}.`)}var bMA=ii.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),c_=[LI,vc.low(wMA),bMA];var Qy=class{constructor(e,A,i,n){this.state=e,this.pos=A,this.explicit=i,this.view=n,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let A=xr(this.state).resolveInner(this.pos,-1);for(;A&&e.indexOf(A.name)<0;)A=A.parent;return A?{from:A.from,to:this.pos,text:this.state.sliceDoc(A.from,this.pos),type:A.type}:null}matchBefore(e){let A=this.state.doc.lineAt(this.pos),i=Math.max(A.from,this.pos-250),n=A.text.slice(i-A.from,this.pos-A.from),o=n.search(mtA(e,!1));return o<0?null:{from:i+o,to:this.pos,text:n.slice(o)}}get aborted(){return this.abortListeners==null}addEventListener(e,A,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(A),i&&i.onDocChange&&(this.abortOnDocChange=!0))}};function dtA(t){let e=Object.keys(t).join(""),A=/\w/.test(e);return A&&(e=e.replace(/\w/g,"")),`[${A?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function MMA(t){let e=Object.create(null),A=Object.create(null);for(let{label:n}of t){e[n[0]]=!0;for(let o=1;otypeof n=="string"?{label:n}:n),[A,i]=e.every(n=>/^\w+$/.test(n.label))?[/\w*$/,/\w+$/]:MMA(e);return n=>{let o=n.matchBefore(i);return o||n.explicit?{from:o?o.from:n.pos,options:e,validFor:A}:null}}var hy=class{constructor(e,A,i,n){this.completion=e,this.source=A,this.match=i,this.score=n}};function _d(t){return t.selection.main.from}function mtA(t,e){var A;let{source:i}=t,n=e&&i[0]!="^",o=i[i.length-1]!="$";return!n&&!o?t:new RegExp(`${n?"^":""}(?:${i})${o?"$":""}`,(A=t.flags)!==null&&A!==void 0?A:t.ignoreCase?"i":"")}var ptA=hg.define();function SMA(t,e,A,i){let{main:n}=t.selection,o=A-n.from,a=i-n.from;return be(gA({},t.changeByRange(r=>{if(r!=n&&A!=i&&t.sliceDoc(r.from+o,r.from+a)!=t.sliceDoc(A,i))return{range:r};let s=t.toText(e);return{changes:{from:r.from+o,to:i==n.from?r.to:r.from+a,insert:s},range:de.cursor(r.from+o+s.length)}})),{scrollIntoView:!0,userEvent:"input.complete"})}var BtA=new WeakMap;function xMA(t){if(!Array.isArray(t))return t;let e=BtA.get(t);return e||BtA.set(t,e=kMA(t)),e}var uy=Hi.define(),bf=Hi.define(),u_=class{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let A=0;A=48&&D<=57||D>=97&&D<=122?2:D>=65&&D<=90?1:0:(F=Y3(D))!=F.toLowerCase()?1:F!=F.toUpperCase()?2:0;(!b||_==1&&Q||M==0&&_!=0)&&(A[C]==D||i[C]==D&&(I=!0)?a[C++]=b:a.length&&(f=!1)),M=_,b+=zg(D)}return C==s&&a[0]==0&&f?this.result(-100+(I?-200:0),a,e):d==s&&B==0?this.ret(-200-e.length+(E==e.length?0:-100),[0,E]):r>-1?this.ret(-700-e.length,[r,r+this.pattern.length]):d==s?this.ret(-900-e.length,[B,E]):C==s?this.result(-100+(I?-200:0)+-700+(f?0:-1100),a,e):A.length==2?null:this.result((n[0]?-700:0)+-200+-1100,n,e)}result(e,A,i){let n=[],o=0;for(let a of A){let r=a+(this.astral?zg(Zr(i,a)):1);o&&n[o-1]==a?n[o-1]=r:(n[o++]=a,n[o++]=r)}return this.ret(e-i.length,n)}},f_=class{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:RMA,filterStrict:!1,compareCompletions:(e,A)=>(e.sortText||e.label).localeCompare(A.sortText||A.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,A)=>e&&A,closeOnBlur:(e,A)=>e&&A,icons:(e,A)=>e&&A,tooltipClass:(e,A)=>i=>EtA(e(i),A(i)),optionClass:(e,A)=>i=>EtA(e(i),A(i)),addToOptions:(e,A)=>e.concat(A),filterStrict:(e,A)=>e||A})}});function EtA(t,e){return t?e?t+" "+e:t:e}function RMA(t,e,A,i,n,o){let a=t.textDirection==mo.RTL,r=a,s=!1,g="top",l,C,I=e.left-n.left,d=n.right-e.right,B=i.right-i.left,E=i.bottom-i.top;if(r&&I=E||b>e.top?l=A.bottom-e.top:(g="bottom",l=e.bottom-A.top)}let Q=(e.bottom-e.top)/o.offsetHeight,f=(e.right-e.left)/o.offsetWidth;return{style:`${g}: ${l/Q}px; max-width: ${C/f}px`,class:"cm-completionInfo-"+(s?a?"left-narrow":"right-narrow":r?"left":"right")}}function NMA(t){let e=t.addToOptions.slice();return t.icons&&e.push({render(A){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),A.type&&i.classList.add(...A.type.split(/\s+/g).map(n=>"cm-completionIcon-"+n)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(A,i,n,o){let a=document.createElement("span");a.className="cm-completionLabel";let r=A.displayLabel||A.label,s=0;for(let g=0;gs&&a.appendChild(document.createTextNode(r.slice(s,l)));let I=a.appendChild(document.createElement("span"));I.appendChild(document.createTextNode(r.slice(l,C))),I.className="cm-completionMatchedText",s=C}return sA.position-i.position).map(A=>A.render)}function E_(t,e,A){if(t<=A)return{from:0,to:t};if(e<0&&(e=0),e<=t>>1){let n=Math.floor(e/A);return{from:n*A,to:(n+1)*A}}let i=Math.floor((t-e)/A);return{from:t-(i+1)*A,to:t-i*A}}var m_=class{constructor(e,A,i){this.view=e,this.stateField=A,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:s=>this.placeInfo(s),key:this},this.space=null,this.currentClass="";let n=e.state.field(A),{options:o,selected:a}=n.open,r=e.state.facet(Rr);this.optionContent=NMA(r),this.optionClass=r.optionClass,this.tooltipClass=r.tooltipClass,this.range=E_(o.length,a,r.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",s=>{let{options:g}=e.state.field(A).open;for(let l=s.target,C;l&&l!=this.dom;l=l.parentNode)if(l.nodeName=="LI"&&(C=/-(\d+)$/.exec(l.id))&&+C[1]{let g=e.state.field(this.stateField,!1);g&&g.tooltip&&e.state.facet(Rr).closeOnBlur&&s.relatedTarget!=e.contentDOM&&e.dispatch({effects:bf.of(null)})}),this.showOptions(o,n.id)}mount(){this.updateSel()}showOptions(e,A){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,A,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var A;let i=e.state.field(this.stateField),n=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=n){let{options:o,selected:a,disabled:r}=i.open;(!n.open||n.open.options!=o)&&(this.range=E_(o.length,a,e.state.facet(Rr).maxRenderedOptions),this.showOptions(o,i.id)),this.updateSel(),r!=((A=n.open)===null||A===void 0?void 0:A.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!r)}}updateTooltipClass(e){let A=this.tooltipClass(e);if(A!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of A.split(" "))i&&this.dom.classList.add(i);this.currentClass=A}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),A=e.open;(A.selected>-1&&A.selected=this.range.to)&&(this.range=E_(A.options.length,A.selected,this.view.state.facet(Rr).maxRenderedOptions),this.showOptions(A.options,e.id));let i=this.updateSelectedOption(A.selected);if(i){this.destroyInfo();let{completion:n}=A.options[A.selected],{info:o}=n;if(!o)return;let a=typeof o=="string"?document.createTextNode(o):o(n);if(!a)return;"then"in a?a.then(r=>{r&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(r,n)}).catch(r=>Sr(this.view.state,r,"completion info")):(this.addInfoPane(a,n),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,A){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:n,destroy:o}=e;i.appendChild(n),this.infoDestroy=o||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let A=null;for(let i=this.list.firstChild,n=this.range.from;i;i=i.nextSibling,n++)i.nodeName!="LI"||!i.id?n--:n==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),A=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return A&&_MA(this.list,A),A}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let A=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),n=e.getBoundingClientRect(),o=this.space;if(!o){let a=this.dom.ownerDocument.documentElement;o={left:0,top:0,right:a.clientWidth,bottom:a.clientHeight}}return n.top>Math.min(o.bottom,A.bottom)-10||n.bottom{a.target==n&&a.preventDefault()});let o=null;for(let a=i.from;ai.from||i.from==0))if(o=I,typeof g!="string"&&g.header)n.appendChild(g.header(g));else{let d=n.appendChild(document.createElement("completion-section"));d.textContent=I}}let l=n.appendChild(document.createElement("li"));l.id=A+"-"+a,l.setAttribute("role","option");let C=this.optionClass(r);C&&(l.className=C);for(let I of this.optionContent){let d=I(r,this.view.state,this.view,s);d&&l.appendChild(d)}}return i.from&&n.classList.add("cm-completionListIncompleteTop"),i.tonew m_(A,t,e)}function _MA(t,e){let A=t.getBoundingClientRect(),i=e.getBoundingClientRect(),n=A.height/t.offsetHeight;i.topA.bottom&&(t.scrollTop+=(i.bottom-A.bottom)/n)}function QtA(t){return(t.boost||0)*100+(t.apply?10:0)+(t.info?5:0)+(t.type?1:0)}function LMA(t,e){let A=[],i=null,n=null,o=l=>{A.push(l);let{section:C}=l.completion;if(C){i||(i=[]);let I=typeof C=="string"?C:C.name;i.some(d=>d.name==I)||i.push(typeof C=="string"?{name:I}:C)}},a=e.facet(Rr);for(let l of t)if(l.hasResult()){let C=l.result.getMatch;if(l.result.filter===!1)for(let I of l.result.options)o(new hy(I,l.source,C?C(I):[],1e9-A.length));else{let I=e.sliceDoc(l.from,l.to),d,B=a.filterStrict?new f_(I):new u_(I);for(let E of l.result.options)if(d=B.match(E.label)){let Q=E.displayLabel?C?C(E,d.matched):[]:d.matched,f=d.score+(E.boost||0);if(o(new hy(E,l.source,Q,f)),typeof E.section=="object"&&E.section.rank==="dynamic"){let{name:b}=E.section;n||(n=Object.create(null)),n[b]=Math.max(f,n[b]||-1e9)}}}}if(i){let l=Object.create(null),C=0,I=(d,B)=>(d.rank==="dynamic"&&B.rank==="dynamic"?n[B.name]-n[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof B.rank=="number"?B.rank:1e9)||(d.nameI.score-C.score||g(C.completion,I.completion))){let C=l.completion;!s||s.label!=C.label||s.detail!=C.detail||s.type!=null&&C.type!=null&&s.type!=C.type||s.apply!=C.apply||s.boost!=C.boost?r.push(l):QtA(l.completion)>QtA(s)&&(r[r.length-1]=l),s=l.completion}return r}var p_=class t{constructor(e,A,i,n,o,a){this.options=e,this.attrs=A,this.tooltip=i,this.timestamp=n,this.selected=o,this.disabled=a}setSelected(e,A){return e==this.selected||e>=this.options.length?this:new t(this.options,htA(A,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,A,i,n,o,a){if(n&&!a&&e.some(g=>g.isPending))return n.setDisabled();let r=LMA(e,A);if(!r.length)return n&&e.some(g=>g.isPending)?n.setDisabled():null;let s=A.facet(Rr).selectOnOpen?0:-1;if(n&&n.selected!=s&&n.selected!=-1){let g=n.options[n.selected].completion;for(let l=0;ll.hasResult()?Math.min(g,l.from):g,1e8),create:TMA,above:o.aboveCursor},n?n.timestamp:Date.now(),s,!1)}map(e){return new t(this.options,this.attrs,be(gA({},this.tooltip),{pos:e.mapPos(this.tooltip.pos)}),this.timestamp,this.selected,this.disabled)}setDisabled(){return new t(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}},w_=class t{constructor(e,A,i){this.active=e,this.id=A,this.open=i}static start(){return new t(JMA,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:A}=e,i=A.facet(Rr),o=(i.override||A.languageDataAt("autocomplete",_d(A)).map(xMA)).map(s=>(this.active.find(l=>l.source==s)||new YC(s,this.active.some(l=>l.state!=0)?1:0)).update(e,i));o.length==this.active.length&&o.every((s,g)=>s==this.active[g])&&(o=this.active);let a=this.open,r=e.effects.some(s=>s.is(y_));a&&e.docChanged&&(a=a.map(e.changes)),e.selection||o.some(s=>s.hasResult()&&e.changes.touchesRange(s.from,s.to))||!GMA(o,this.active)||r?a=p_.build(o,A,this.id,a,i,r):a&&a.disabled&&!o.some(s=>s.isPending)&&(a=null),!a&&o.every(s=>!s.isPending)&&o.some(s=>s.hasResult())&&(o=o.map(s=>s.hasResult()?new YC(s.source,0):s));for(let s of e.effects)s.is(DtA)&&(a=a&&a.setSelected(s.value,this.id));return o==this.active&&a==this.open?this:new t(o,this.id,a)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?KMA:UMA}};function GMA(t,e){if(t==e)return!0;for(let A=0,i=0;;){for(;A-1&&(A["aria-activedescendant"]=t+"-"+e),A}var JMA=[];function wtA(t,e){if(t.isUserEvent("input.complete")){let i=t.annotation(ptA);if(i&&e.activateOnCompletion(i))return 12}let A=t.isUserEvent("input.type");return A&&e.activateOnTyping?5:A?1:t.isUserEvent("delete.backward")?2:t.selection?8:t.docChanged?16:0}var YC=class t{constructor(e,A,i=!1){this.source=e,this.state=A,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,A){let i=wtA(e,A),n=this;(i&8||i&16&&this.touches(e))&&(n=new t(n.source,0)),i&4&&n.state==0&&(n=new t(this.source,1)),n=n.updateFor(e,i);for(let o of e.effects)if(o.is(uy))n=new t(n.source,1,o.value);else if(o.is(bf))n=new t(n.source,0);else if(o.is(y_))for(let a of o.value)a.source==n.source&&(n=a);return n}updateFor(e,A){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(_d(e.state))}},fy=class t extends YC{constructor(e,A,i,n,o,a){super(e,3,A),this.limit=i,this.result=n,this.from=o,this.to=a}hasResult(){return!0}updateFor(e,A){var i;if(!(A&3))return this.map(e.changes);let n=this.result;n.map&&!e.changes.empty&&(n=n.map(n,e.changes));let o=e.changes.mapPos(this.from),a=e.changes.mapPos(this.to,1),r=_d(e.state);if(r>a||!n||A&2&&(_d(e.startState)==this.from||rA.map(e))}}),DtA=Hi.define(),pg=wa.define({create(){return w_.start()},update(t,e){return t.update(e)},provide:t=>[xQ.from(t,e=>e.tooltip),ii.contentAttributes.from(t,e=>e.attrs)]});function v_(t,e){let A=e.completion.apply||e.completion.label,i=t.state.field(pg).active.find(n=>n.source==e.source);return i instanceof fy?(typeof A=="string"?t.dispatch(be(gA({},SMA(t.state,A,i.from,i.to)),{annotations:ptA.of(e.completion)})):A(t,e.completion,i.from,i.to),!0):!1}var TMA=FMA(pg,v_);function Ey(t,e="option"){return A=>{let i=A.state.field(pg,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+n*(t?1:-1):t?0:a-1;return r<0?r=e=="page"?0:a-1:r>=a&&(r=e=="page"?a-1:0),A.dispatch({effects:DtA.of(r)}),!0}}var HMA=t=>{let e=t.state.field(pg,!1);return t.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampt.state.field(pg,!1)?(t.dispatch({effects:uy.of(!0)}),!0):!1,zMA=t=>{let e=t.state.field(pg,!1);return!e||!e.active.some(A=>A.state!=0)?!1:(t.dispatch({effects:bf.of(null)}),!0)},D_=class{constructor(e,A){this.active=e,this.context=A,this.time=Date.now(),this.updates=[],this.done=void 0}},OMA=50,PMA=1e3,jMA=_o.fromClass(class{constructor(t){this.view=t,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of t.state.field(pg).active)e.isPending&&this.startQuery(e)}update(t){let e=t.state.field(pg),A=t.state.facet(Rr);if(!t.selectionSet&&!t.docChanged&&t.startState.field(pg)==e)return;let i=t.transactions.some(o=>{let a=wtA(o,A);return a&8||(o.selection||o.docChanged)&&!(a&3)});for(let o=0;oOMA&&Date.now()-a.time>PMA){for(let r of a.context.abortListeners)try{r()}catch(s){Sr(this.view.state,s)}a.context.abortListeners=null,this.running.splice(o--,1)}else a.updates.push(...t.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),t.transactions.some(o=>o.effects.some(a=>a.is(uy)))&&(this.pendingStart=!0);let n=this.pendingStart?50:A.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(o=>o.isPending&&!this.running.some(a=>a.active.source==o.source))?setTimeout(()=>this.startUpdate(),n):-1,this.composing!=0)for(let o of t.transactions)o.isUserEvent("input.type")?this.composing=2:this.composing==2&&o.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:t}=this.view,e=t.field(pg);for(let A of e.active)A.isPending&&!this.running.some(i=>i.active.source==A.source)&&this.startQuery(A);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Rr).updateSyncTime))}startQuery(t){let{state:e}=this.view,A=_d(e),i=new Qy(e,A,t.explicit,this.view),n=new D_(t,i);this.running.push(n),Promise.resolve(t.source(i)).then(o=>{n.context.aborted||(n.done=o||null,this.scheduleAccept())},o=>{this.view.dispatch({effects:bf.of(null)}),Sr(this.view.state,o)})}scheduleAccept(){this.running.every(t=>t.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Rr).updateSyncTime))}accept(){var t;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],A=this.view.state.facet(Rr),i=this.view.state.field(pg);for(let n=0;nr.source==o.active.source);if(a&&a.isPending)if(o.done==null){let r=new YC(o.active.source,0);for(let s of o.updates)r=r.update(s,A);r.isPending||e.push(r)}else this.startQuery(a)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:y_.of(e)})}},{eventHandlers:{blur(t){let e=this.view.state.field(pg,!1);if(e&&e.tooltip&&this.view.state.facet(Rr).closeOnBlur){let A=e.open&&gF(this.view,e.open.tooltip);(!A||!A.dom.contains(t.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:bf.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:uy.of(!1)}),20),this.composing=0}}}),qMA=typeof navigator=="object"&&/Win/.test(navigator.platform),VMA=vc.highest(ii.domEventHandlers({keydown(t,e){let A=e.state.field(pg,!1);if(!A||!A.open||A.open.disabled||A.open.selected<0||t.key.length>1||t.ctrlKey&&!(qMA&&t.altKey)||t.metaKey)return!1;let i=A.open.options[A.open.selected],n=A.active.find(a=>a.source==i.source),o=i.completion.commitCharacters||n.result.commitCharacters;return o&&o.indexOf(t.key)>-1&&v_(e,i),!1}})),WMA=ii.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"\xB7\xB7\xB7"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'\u0192'"}},".cm-completionIcon-class":{"&:after":{content:"'\u25CB'"}},".cm-completionIcon-interface":{"&:after":{content:"'\u25CC'"}},".cm-completionIcon-variable":{"&:after":{content:"'\u{1D465}'"}},".cm-completionIcon-constant":{"&:after":{content:"'\u{1D436}'"}},".cm-completionIcon-type":{"&:after":{content:"'\u{1D461}'"}},".cm-completionIcon-enum":{"&:after":{content:"'\u222A'"}},".cm-completionIcon-property":{"&:after":{content:"'\u25A1'"}},".cm-completionIcon-keyword":{"&:after":{content:"'\u{1F511}\uFE0E'"}},".cm-completionIcon-namespace":{"&:after":{content:"'\u25A2'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});var Mf={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Fd=Hi.define({map(t,e){let A=e.mapPos(t,-1,qr.TrackAfter);return A??void 0}}),b_=new class extends bl{};b_.startSide=1;b_.endSide=-1;var ytA=wa.define({create(){return to.empty},update(t,e){if(t=t.map(e.changes),e.selection){let A=e.state.doc.lineAt(e.selection.main.head);t=t.update({filter:i=>i>=A.from&&i<=A.to})}for(let A of e.effects)A.is(Fd)&&(t=t.update({add:[b_.range(A.value,A.value+1)]}));return t}});function vtA(){return[XMA,ytA]}var h_="()[]{}<>\xAB\xBB\xBB\xAB\uFF3B\uFF3D\uFF5B\uFF5D";function btA(t){for(let e=0;e{if((ZMA?t.composing:t.compositionStarted)||t.state.readOnly)return!1;let n=t.state.selection.main;if(i.length>2||i.length==2&&zg(Zr(i,0))==1||e!=n.from||A!=n.to)return!1;let o=AkA(t.state,i);return o?(t.dispatch(o),!0):!1}),$MA=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=MtA(t,t.selection.main.head).brackets||Mf.brackets,n=null,o=t.changeByRange(a=>{if(a.empty){let r=ekA(t.doc,a.head);for(let s of i)if(s==r&&my(t.doc,a.head)==btA(Zr(s,0)))return{changes:{from:a.head-s.length,to:a.head+s.length},range:de.cursor(a.head-s.length)}}return{range:n=a}});return n||e(t.update(o,{scrollIntoView:!0,userEvent:"delete.backward"})),!n},ktA=[{key:"Backspace",run:$MA}];function AkA(t,e){let A=MtA(t,t.selection.main.head),i=A.brackets||Mf.brackets;for(let n of i){let o=btA(Zr(n,0));if(e==n)return o==n?nkA(t,n,i.indexOf(n+n+n)>-1,A):tkA(t,n,o,A.before||Mf.before);if(e==o&&StA(t,t.selection.main.from))return ikA(t,n,o)}return null}function StA(t,e){let A=!1;return t.field(ytA).between(0,t.doc.length,i=>{i==e&&(A=!0)}),A}function my(t,e){let A=t.sliceString(e,e+2);return A.slice(0,zg(Zr(A,0)))}function ekA(t,e){let A=t.sliceString(e-2,e);return zg(Zr(A,0))==A.length?A:A.slice(1)}function tkA(t,e,A,i){let n=null,o=t.changeByRange(a=>{if(!a.empty)return{changes:[{insert:e,from:a.from},{insert:A,from:a.to}],effects:Fd.of(a.to+e.length),range:de.range(a.anchor+e.length,a.head+e.length)};let r=my(t.doc,a.head);return!r||/\s/.test(r)||i.indexOf(r)>-1?{changes:{insert:e+A,from:a.head},effects:Fd.of(a.head+e.length),range:de.cursor(a.head+e.length)}:{range:n=a}});return n?null:t.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function ikA(t,e,A){let i=null,n=t.changeByRange(o=>o.empty&&my(t.doc,o.head)==A?{changes:{from:o.head,to:o.head+A.length,insert:A},range:de.cursor(o.head+A.length)}:i={range:o});return i?null:t.update(n,{scrollIntoView:!0,userEvent:"input.type"})}function nkA(t,e,A,i){let n=i.stringPrefixes||Mf.stringPrefixes,o=null,a=t.changeByRange(r=>{if(!r.empty)return{changes:[{insert:e,from:r.from},{insert:e,from:r.to}],effects:Fd.of(r.to+e.length),range:de.range(r.anchor+e.length,r.head+e.length)};let s=r.head,g=my(t.doc,s),l;if(g==e){if(utA(t,s))return{changes:{insert:e+e,from:s},effects:Fd.of(s+e.length),range:de.cursor(s+e.length)};if(StA(t,s)){let I=A&&t.sliceDoc(s,s+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:s,to:s+I.length,insert:I},range:de.cursor(s+I.length)}}}else{if(A&&t.sliceDoc(s-2*e.length,s)==e+e&&(l=ftA(t,s-2*e.length,n))>-1&&utA(t,l))return{changes:{insert:e+e+e+e,from:s},effects:Fd.of(s+e.length),range:de.cursor(s+e.length)};if(t.charCategorizer(s)(g)!=Fo.Word&&ftA(t,s,n)>-1&&!okA(t,s,e,n))return{changes:{insert:e+e,from:s},effects:Fd.of(s+e.length),range:de.cursor(s+e.length)}}return{range:o=r}});return o?null:t.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function utA(t,e){let A=xr(t).resolveInner(e+1);return A.parent&&A.from==e}function okA(t,e,A,i){let n=xr(t).resolveInner(e,-1),o=i.reduce((a,r)=>Math.max(a,r.length),0);for(let a=0;a<5;a++){let r=t.sliceDoc(n.from,Math.min(n.to,n.from+A.length+o)),s=r.indexOf(A);if(!s||s>-1&&i.indexOf(r.slice(0,s))>-1){let l=n.firstChild;for(;l&&l.from==n.from&&l.to-l.from>A.length+s;){if(t.sliceDoc(l.to-A.length,l.to)==A)return!1;l=l.firstChild}return!0}let g=n.to==e&&n.parent;if(!g)break;n=g}return!1}function ftA(t,e,A){let i=t.charCategorizer(e);if(i(t.sliceDoc(e-1,e))!=Fo.Word)return e;for(let n of A){let o=e-n.length;if(t.sliceDoc(o,e)==n&&i(t.sliceDoc(o-1,o))!=Fo.Word)return o}return-1}function xtA(t={}){return[VMA,pg,Rr.of(t),jMA,akA,WMA]}var M_=[{key:"Ctrl-Space",run:Q_},{mac:"Alt-`",run:Q_},{mac:"Alt-i",run:Q_},{key:"Escape",run:zMA},{key:"ArrowDown",run:Ey(!0)},{key:"ArrowUp",run:Ey(!1)},{key:"PageDown",run:Ey(!0,"page")},{key:"PageUp",run:Ey(!1,"page")},{key:"Enter",run:HMA}],akA=vc.highest(SQ.computeN([Rr],t=>t.facet(Rr).defaultKeymap?[M_]:[]));function rkA(t,e=t.state){let A=new Set;for(let{from:i,to:n}of t.visibleRanges){let o=i;for(;o<=n;){let a=e.doc.lineAt(o);A.has(a)||A.add(a),o=a.to+1}}return A}function k_(t){let e=t.selection.main.head;return t.doc.lineAt(e)}function RtA(t,e){let A=0;A:for(let i=0;i=o.level&&this.markerType!=="codeOnly"?this.set(e,0,n.level):n.empty&&n.level===0&&o.level!==0?this.set(e,0,0):o.level>n.level?this.set(e,0,n.level+1):this.set(e,0,o.level)}let A=RtA(e.text,this.state.tabSize),i=Math.floor(A/this.unitWidth);return this.set(e,A,i)}closestNonEmpty(e,A){let i=e.number+A;for(;A===-1?i>=1:i<=this.state.doc.lines;){if(this.has(i)){let a=this.get(i);if(!a.empty)return a}let o=this.state.doc.line(i);if(o.text.trim().length){let a=RtA(o.text,this.state.tabSize),r=Math.floor(a/this.unitWidth);return this.set(o,a,r)}i+=A}let n=this.state.doc.line(A===-1?1:this.state.doc.lines);return this.set(n,0,0)}findAndSetActiveLines(){let e=k_(this.state);if(!this.has(e))return;let A=this.get(e);if(this.has(A.line.number+1)){let o=this.get(A.line.number+1);o.level>A.level&&(A=o)}if(this.has(A.line.number-1)){let o=this.get(A.line.number-1);o.level>A.level&&(A=o)}if(A.level===0)return;A.active=A.level;let i,n;for(i=A.line.number;i>1;i--){if(!this.has(i-1))continue;let o=this.get(i-1);if(o.level0&&s.push(py("--indent-marker-bg-color",i,e,r,g)),s.push(py("--indent-marker-active-bg-color",n,e,a-1,1)),a!==o&&s.push(py("--indent-marker-bg-color",i,e,a,o-a))}else s.push(py("--indent-marker-bg-color",i,e,r,o-r));return s.join(",")}var x_=class{constructor(e){this.view=e,this.unitWidth=Fc(e.state),this.currentLineNumber=k_(e.state).number,this.generate(e.state)}update(e){let A=Fc(e.state),i=A!==this.unitWidth;i&&(this.unitWidth=A);let n=k_(e.state).number,o=n!==this.currentLineNumber;this.currentLineNumber=n;let a=e.state.facet(wy).highlightActiveBlock&&o;(e.docChanged||e.viewportChanged||i||a)&&this.generate(e.state)}generate(e){let A=new Wr,i=rkA(this.view,e),{hideFirstIndent:n,markerType:o,thickness:a,activeThickness:r}=e.facet(wy),s=new S_(i,e,this.unitWidth,o);for(let g of i){let l=s.get(g.number);if(!l?.level)continue;let C=gkA(l,this.unitWidth,n,a,r);A.add(g.from,g.from,Dt.line({class:"cm-indent-markers",attributes:{style:`--indent-markers: ${C}`}}))}this.decorations=A.finish()}};function NtA(t={}){return[wy.of(t),skA(t.colors),_o.fromClass(x_,{decorations:e=>e.decorations})]}var lkA=["mainAxis","crossAxis","fallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment"],ckA=["mainAxis","crossAxis","limiter"];function ZiA(t,e){if(t==null)return{};var A,i,n=(function(a,r){if(a==null)return{};var s={};for(var g in a)if({}.hasOwnProperty.call(a,g)){if(r.indexOf(g)!==-1)continue;s[g]=a[g]}return s})(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i{};function fkA(t){return t()}function aL(t){for(var e=0;e{t=A,e=i}),resolve:t,reject:e}}var mkA=1<<24,vh=16,hv=32,inA=64,YL=128,Hc=512,As=1024,zc=2048,o2=4096,O0=8192,bh=16384,TL=32768,Vd=65536,pkA=1<<17,nnA=1<<18,onA=1<<19,zC=1<<25,Zy=32768,rL=1<<21,XI=1<<23,P0=Symbol("$state"),anA=Symbol("legacy props"),wkA=Symbol(""),Ah=new class extends Error{constructor(){super(...arguments),Y0(this,"name","StaleReactionError"),Y0(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};function im(t){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function rnA(t){return t===this.v}function snA(t,e){return t!=t?e==e:t!==e||t!==null&&typeof t=="object"||typeof t=="function"}function gnA(t){return!snA(t,this.v)}var co=null;function Ih(t){co=t}function r1(t){return lnA().get(t)}function St(t){co={p:co,i:!1,c:null,e:null,s:t,x:null,l:yh&&!(arguments.length>1&&arguments[1]!==void 0&&arguments[1])?{s:null,u:null,$:[]}:null}}function xt(t){var e=co,A=e.e;if(A!==null)for(var i of(e.e=null,A))bnA(i);return t!==void 0&&(e.x=t),e.i=!0,co=e.p,t??{}}function Mh(){return!yh||co!==null&&co.l===null}function lnA(t){var e,A;return co===null&&im(),(A=(e=co).c)!==null&&A!==void 0?A:e.c=new Map((function(i){for(var n=i.p;n!==null;){var o=n.c;if(o!==null)return o;n=n.p}return null})(co)||void 0)}var Hd=[];function cnA(){var t=Hd;Hd=[],aL(t)}function Wd(t){if(Hd.length===0&&!Jf){var e=Hd;queueMicrotask(()=>{e===Hd&&cnA()})}Hd.push(t)}function DkA(){for(;Hd.length>0;)cnA()}function CnA(t){var e=jn;if(e===null)return Pn.f|=XI,t;if((e.f&TL)===0){if((e.f&YL)===0)throw t;e.b.error(t)}else dh(t,e)}function dh(t,e){for(;e!==null;){if((e.f&YL)!==0)try{return void e.b.error(t)}catch(A){t=A}e=e.parent}throw t}var Hy=new Set,Go=null,Uf=null,Kl=null,Gl=[],uv=null,sL=!1,Jf=!1,Xy=new WeakMap,Dy=new WeakMap,Ud=new WeakMap,Jd=new WeakMap,yy=new WeakMap,zy=new WeakMap,Oy=new WeakMap,Wg=new WeakSet,Zd=class t{constructor(){XiA(this,Wg),Y0(this,"committed",!1),Y0(this,"current",new Map),Y0(this,"previous",new Map),po(this,Xy,new Set),po(this,Dy,new Set),po(this,Ud,0),po(this,Jd,0),po(this,yy,null),po(this,zy,[]),po(this,Oy,[]),Y0(this,"skipped_effects",new Set),Y0(this,"is_fork",!1)}is_deferred(){return this.is_fork||we(Jd,this)>0}process(e){Gl=[],Uf=null,this.apply();var A,i={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(var n of e)er(Wg,this,InA).call(this,n,i);this.is_fork||er(Wg,this,ykA).call(this),this.is_deferred()?(er(Wg,this,ah).call(this,i.effects),er(Wg,this,ah).call(this,i.render_effects),er(Wg,this,ah).call(this,i.block_effects)):(Uf=this,Go=null,UtA(i.render_effects),UtA(i.effects),Uf=null,(A=we(yy,this))===null||A===void 0||A.resolve()),Kl=null}capture(e,A){var i;this.previous.has(e)||this.previous.set(e,A),(e.f&XI)===0&&(this.current.set(e,e.v),(i=Kl)===null||i===void 0||i.set(e,e.v))}activate(){Go=this,this.apply()}deactivate(){Go===this&&(Go=null,Kl=null)}flush(){if(this.activate(),Gl.length>0){if(BnA(),Go!==null&&Go!==this)return}else we(Ud,this)===0&&this.process([]);this.deactivate()}discard(){for(var e of we(Dy,this))e(this);we(Dy,this).clear()}increment(e){Cn(Ud,this,we(Ud,this)+1),e&&Cn(Jd,this,we(Jd,this)+1)}decrement(e){Cn(Ud,this,we(Ud,this)-1),e&&Cn(Jd,this,we(Jd,this)-1),this.revive()}revive(){for(var e of we(zy,this))ts(e,zc),Xd(e);for(var A of we(Oy,this))ts(A,o2),Xd(A);Cn(zy,this,[]),Cn(Oy,this,[]),this.flush()}oncommit(e){we(Xy,this).add(e)}ondiscard(e){we(Dy,this).add(e)}settled(){var e;return((e=we(yy,this))!==null&&e!==void 0?e:Cn(yy,this,tnA())).promise}static ensure(){if(Go===null){var e=Go=new t;Hy.add(Go),Jf||t.enqueue(()=>{Go===e&&e.flush()})}return Go}static enqueue(e){Wd(e)}apply(){}};function InA(t,e){t.f^=As;for(var A=t.first;A!==null;){var i,n=A.f,o=!!(96&n),a=o&&(n&As)!==0||(n&O0)!==0||this.skipped_effects.has(A);if((A.f&YL)!==0&&(i=A.b)!==null&&i!==void 0&&i.is_pending()&&(e={parent:e,effect:A,effects:[],render_effects:[],block_effects:[]}),!a&&A.fn!==null){o?A.f^=As:4&n?e.effects.push(A):xh(A)&&((A.f&vh)!==0&&e.block_effects.push(A),Qh(A));var r=A.first;if(r!==null){A=r;continue}}var s=A.parent;for(A=A.next;A===null&&s!==null;)s===e.effect&&(er(Wg,this,ah).call(this,e.effects),er(Wg,this,ah).call(this,e.render_effects),er(Wg,this,ah).call(this,e.block_effects),e=e.parent),A=s.next,s=s.parent}}function ah(t){for(var e of t)((e.f&zc)!==0?we(zy,this):we(Oy,this)).push(e),er(Wg,this,dnA).call(this,e.deps),ts(e,As)}function dnA(t){if(t!==null)for(var e of t)2&e.f&&(e.f&Zy)!==0&&(e.f^=Zy,er(Wg,this,dnA).call(this,e.deps))}function ykA(){if(we(Jd,this)===0){for(var t of we(Xy,this))t();we(Xy,this).clear()}we(Ud,this)===0&&er(Wg,this,vkA).call(this)}function vkA(){if(Hy.size>1){this.previous.clear();var t=Kl,e=!0,A={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(var i of Hy)if(i!==this){var n=[];for(var[o,a]of this.current){if(i.current.has(o)){if(!e||a===i.current.get(o))continue;i.current.set(o,a)}n.push(o)}if(n.length!==0){var r=[...i.current.keys()].filter(d=>!this.current.has(d));if(r.length>0){var s=Gl;Gl=[];var g=new Set,l=new Map;for(var C of n)EnA(C,r,g,l);if(Gl.length>0){for(var I of(Go=i,i.apply(),Gl))er(Wg,i,InA).call(i,I,A);i.deactivate()}Gl=s}}}else e=!1;Go=null,Kl=t}this.committed=!0,Hy.delete(this)}function bo(t){var e=Jf;Jf=!0;try{for(;;){var A;if(DkA(),Gl.length===0&&((A=Go)===null||A===void 0||A.flush(),Gl.length===0))return void(uv=null);BnA()}}finally{Jf=e}}function BnA(){var t=Od;sL=!0;try{var e=0;for($y(!0);Gl.length>0;){var A=Zd.ensure();e++>1e3&&bkA(),A.process(Gl),$I.clear()}}finally{sL=!1,$y(t),uv=null}}function bkA(){try{(function(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")})()}catch(t){dh(t,uv)}}var PC=null;function UtA(t){var e=t.length;if(e!==0){for(var A=0;A0)){for(var o of($I.clear(),PC))if(!(24576&o.f)){for(var a=[o],r=o.parent;r!==null;)PC.has(r)&&(PC.delete(r),a.push(r)),r=r.parent;for(var s=a.length-1;s>=0;s--){var g=a[s];24576&g.f||Qh(g)}}PC.clear()}}PC=null}}function EnA(t,e,A,i){if(!A.has(t)&&(A.add(t),t.reactions!==null))for(var n of t.reactions){var o=n.f;2&o?EnA(n,e,A,i):4194320&o&&(o&zc)===0&&QnA(n,e,i)&&(ts(n,zc),Xd(n))}}function QnA(t,e,A){var i=A.get(t);if(i!==void 0)return i;if(t.deps!==null)for(var n of t.deps){if(e.includes(n))return!0;if(2&n.f&&QnA(n,e,A))return A.set(n,!0),!0}return A.set(t,!1),!1}function Xd(t){for(var e=uv=t;e.parent!==null;){var A=(e=e.parent).f;if(sL&&e===jn&&(A&vh)!==0&&(A&nnA)===0)return;if(96&A){if((A&As)===0)return;e.f^=As}}Gl.push(e)}var HI=new WeakMap,qI=new WeakMap,MkA=new WeakMap,Yd=new WeakMap,F_=new WeakMap,jI=new WeakMap,zI=new WeakMap,VC=new WeakMap,KI=new WeakMap,zd=new WeakMap,rh=new WeakMap,HQ=new WeakMap,sh=new WeakMap,Sf=new WeakMap,zQ=new WeakMap,JtA=new WeakMap,JI=new WeakSet,gL=class{constructor(e,A,i){var n,o,a,r;XiA(this,JI),Y0(this,"parent",void 0),po(this,HI,!1),po(this,qI,void 0),po(this,MkA,null),po(this,Yd,void 0),po(this,F_,void 0),po(this,jI,void 0),po(this,zI,null),po(this,VC,null),po(this,KI,null),po(this,zd,null),po(this,rh,null),po(this,HQ,0),po(this,sh,0),po(this,Sf,!1),po(this,zQ,null),po(this,JtA,(n=()=>(Cn(zQ,this,a2(we(HQ,this))),()=>{Cn(zQ,this,null)}),a=0,r=a2(0),()=>{Tf()&&(c(r),kh(()=>(a===0&&(o=EA(()=>n(()=>Yf(r)))),a+=1,()=>{Wd(()=>{var s;(a-=1)==0&&((s=o)===null||s===void 0||s(),o=void 0,Yf(r))})})))})),Cn(qI,this,e),Cn(Yd,this,A),Cn(F_,this,i),this.parent=jn.b,Cn(HI,this,!!we(Yd,this).pending),Cn(jI,this,Sh(()=>{jn.b=this;var s=er(JI,this,kkA).call(this);try{Cn(zI,this,j0(()=>i(s)))}catch(g){this.error(g)}return we(sh,this)>0?er(JI,this,TtA).call(this):Cn(HI,this,!1),()=>{var g;(g=we(rh,this))===null||g===void 0||g.remove()}},589952))}is_pending(){return we(HI,this)||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!we(Yd,this).pending}update_pending_count(e){er(JI,this,hnA).call(this,e),Cn(HQ,this,we(HQ,this)+e),we(zQ,this)&&Bh(we(zQ,this),we(HQ,this))}get_effect_pending(){return we(JtA,this).call(this),c(we(zQ,this))}error(e){var A=we(Yd,this).onerror,i=we(Yd,this).failed;if(we(Sf,this)||!A&&!i)throw e;we(zI,this)&&(es(we(zI,this)),Cn(zI,this,null)),we(VC,this)&&(es(we(VC,this)),Cn(VC,this,null)),we(KI,this)&&(es(we(KI,this)),Cn(KI,this,null));var n=!1,o=!1,a=()=>{n?console.warn("https://svelte.dev/e/svelte_boundary_reset_noop"):(n=!0,o&&(function(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")})(),Zd.ensure(),Cn(HQ,this,0),we(KI,this)!==null&&Eh(we(KI,this),()=>{Cn(KI,this,null)}),Cn(HI,this,this.has_pending_snippet()),Cn(zI,this,er(JI,this,YtA).call(this,()=>(Cn(Sf,this,!1),j0(()=>we(F_,this).call(this,we(qI,this)))))),we(sh,this)>0?er(JI,this,TtA).call(this):Cn(HI,this,!1))},r=Pn;try{bg(null),o=!0,A?.(e,a),o=!1}catch(s){dh(s,we(jI,this)&&we(jI,this).parent)}finally{bg(r)}i&&Wd(()=>{Cn(KI,this,er(JI,this,YtA).call(this,()=>{Zd.ensure(),Cn(Sf,this,!0);try{return j0(()=>{i(we(qI,this),()=>e,()=>a)})}catch(s){return dh(s,we(jI,this).parent),null}finally{Cn(Sf,this,!1)}}))})}};function kkA(){var t=we(qI,this);return we(HI,this)&&(Cn(rh,this,A1()),we(qI,this).before(we(rh,this)),t=we(rh,this)),t}function YtA(t){var e=jn,A=Pn,i=co;Jl(we(jI,this)),bg(we(jI,this)),Ih(we(jI,this).ctx);try{return t()}catch(n){return CnA(n),null}finally{Jl(e),bg(A),Ih(i)}}function TtA(){var t=we(Yd,this).pending;we(zI,this)!==null&&(Cn(zd,this,document.createDocumentFragment()),we(zd,this).append(we(rh,this)),_nA(we(zI,this),we(zd,this))),we(VC,this)===null&&Cn(VC,this,j0(()=>t(we(qI,this))))}function hnA(t){var e;this.has_pending_snippet()?(Cn(sh,this,we(sh,this)+t),we(sh,this)===0&&(Cn(HI,this,!1),we(VC,this)&&Eh(we(VC,this),()=>{Cn(VC,this,null)}),we(zd,this)&&(we(qI,this).before(we(zd,this)),Cn(zd,this,null)))):this.parent&&er(JI,e=this.parent,hnA).call(e,t)}function unA(t,e,A,i){var n=Mh()?nm:tt;if(A.length!==0||t.length!==0){var o=Go,a=jn,r=(function(){var g=jn,l=Pn,C=co,I=Go;return function(){var d=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];Jl(g),bg(l),Ih(C),d&&I?.activate()}})();t.length>0?Promise.all(t).then(()=>{r();try{return s()}finally{o?.deactivate(),vy()}}):s()}else i(e.map(n));function s(){Promise.all(A.map(g=>(function(l){var C=jn;C===null&&(function(){throw new Error("https://svelte.dev/e/async_derived_orphan")})();var I=C.b,d=void 0,B=a2($r),E=!Pn,Q=new Map;return(function(f){Pc(4718592,f,!0)})(()=>{var f=tnA();d=f.promise;try{Promise.resolve(l()).then(f.resolve,f.reject).then(()=>{b===Go&&b.committed&&b.deactivate(),vy()})}catch(F){f.reject(F),vy()}var b=Go;if(E){var S,M=!I.is_pending();I.update_pending_count(1),b.increment(M),(S=Q.get(b))===null||S===void 0||S.reject(Ah),Q.delete(b),Q.set(b,f)}var D=function(F){var _=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(b.activate(),_)_!==Ah&&(B.f|=XI,Bh(B,_));else for(var[U,J]of((B.f&XI)!==0&&(B.f^=XI),Bh(B,F),Q)){if(Q.delete(U),U===b)break;J.reject(Ah)}E&&(I.update_pending_count(-1),b.decrement(M))};f.promise.then(D,F=>D(null,F||"unknown"))}),mv(()=>{for(var f of Q.values())f.reject(Ah)}),new Promise(f=>{function b(S){function M(){S===d?f(B):b(d)}S.then(M,M)}b(d)})})(g))).then(g=>{r();try{i([...e.map(n),...g])}catch(l){(a.f&bh)===0&&dh(l,a)}o?.deactivate(),vy()}).catch(g=>{dh(g,a)})}}function vy(){Jl(null),bg(null),Ih(null)}function nm(t){var e=Pn!==null&&2&Pn.f?Pn:null;return jn!==null&&(jn.f|=onA),{ctx:co,deps:null,effects:null,equals:rnA,f:2050,fn:t,reactions:null,rv:0,v:$r,wv:0,parent:e??jn,ac:null}}function Dg(t){var e=nm(t);return LnA(e),e}function tt(t){var e=nm(t);return e.equals=gnA,e}function fnA(t){var e=t.effects;if(e!==null){t.effects=null;for(var A=0;A1&&arguments[1]!==void 0&&arguments[1],n=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],o=a2(t);return i||(o.equals=gnA),yh&&n&&co!==null&&co.l!==null&&((A=(e=co.l).s)!==null&&A!==void 0?A:e.s=[]).push(o),o}function Xg(t,e){return R(t,EA(()=>c(t))),e}function R(t,e){var A,i=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return Pn===null||H0&&(Pn.f&pkA)===0||!Mh()||!(4325394&Pn.f)||(A=t2)!==null&&A!==void 0&&A.includes(t)||(function(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")})(),Bh(t,i?eh(e):e)}function Bh(t,e){if(!t.equals(e)){var A=t.v;oB?$I.set(t,e):$I.set(t,A),t.v=e;var i=Zd.ensure();i.capture(t,A),2&t.f&&((t.f&zc)!==0&&HL(t),ts(t,(t.f&Hc)!==0?As:o2)),t.wv=KnA(),ynA(t,zc),!Mh()||jn===null||(jn.f&As)===0||96&jn.f||(Nl===null?(function(n){Nl=n})([t]):Nl.push(t)),!i.is_fork&&__.size>0&&!HtA&&(function(){HtA=!1;var n=Od;$y(!0);var o=Array.from(__);try{for(var a of o)(a.f&As)!==0&&ts(a,o2),xh(a)&&Qh(a)}finally{$y(n)}__.clear()})()}return e}function ztA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,A=c(t),i=e===1?A++:A--;return R(t,A),i}function Yf(t){R(t,t.v+1)}function ynA(t,e){var A=t.reactions;if(A!==null)for(var i=Mh(),n=A.length,o=0;o{if(Pd===o)return r();var s=Pn,g=Pd;bg(null),qtA(o);var l=r();return bg(s),qtA(g),l};return i&&A.set("length",OC(t.length)),new Proxy(t,{defineProperty(r,s,g){"value"in g&&g.configurable!==!1&&g.enumerable!==!1&&g.writable!==!1||(function(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")})();var l=A.get(s);return l===void 0?l=a(()=>{var C=OC(g.value);return A.set(s,C),C}):R(l,g.value,!0),!0},deleteProperty(r,s){var g=A.get(s);if(g===void 0){if(s in r){var l=a(()=>OC($r));A.set(s,l),Yf(n)}}else R(g,$r),Yf(n);return!0},get(r,s,g){var l;if(s===P0)return t;var C=A.get(s),I=s in r;if(C===void 0&&(!I||(l=A2(r,s))!==null&&l!==void 0&&l.writable)&&(C=a(()=>OC(eh(I?r[s]:$r))),A.set(s,C)),C!==void 0){var d=c(C);return d===$r?void 0:d}return Reflect.get(r,s,g)},getOwnPropertyDescriptor(r,s){var g=Reflect.getOwnPropertyDescriptor(r,s);if(g&&"value"in g){var l=A.get(s);l&&(g.value=c(l))}else if(g===void 0){var C=A.get(s),I=C?.v;if(C!==void 0&&I!==$r)return{enumerable:!0,configurable:!0,value:I,writable:!0}}return g},has(r,s){var g;if(s===P0)return!0;var l=A.get(s),C=l!==void 0&&l.v!==$r||Reflect.has(r,s);return(l!==void 0||jn!==null&&(!C||(g=A2(r,s))!==null&&g!==void 0&&g.writable))&&(l===void 0&&(l=a(()=>OC(C?eh(r[s]):$r)),A.set(s,l)),c(l)===$r)?!1:C},set(r,s,g,l){var C,I=A.get(s),d=s in r;if(i&&s==="length")for(var B=g;BOC($r)),A.set(B+"",E))}I===void 0?(!d||(C=A2(r,s))!==null&&C!==void 0&&C.writable)&&(R(I=a(()=>OC(void 0)),eh(g)),A.set(s,I)):(d=I.v!==$r,R(I,a(()=>eh(g))));var Q=Reflect.getOwnPropertyDescriptor(r,s);if(Q!=null&&Q.set&&Q.set.call(l,g),!d){if(i&&typeof s=="string"){var f=A.get("length"),b=Number(s);Number.isInteger(b)&&b>=f.v&&R(f,b+1)}Yf(n)}return!0},ownKeys(r){c(n);var s=Reflect.ownKeys(r).filter(C=>{var I=A.get(C);return I===void 0||I.v!==$r});for(var[g,l]of A)l.v===$r||g in r||s.push(g);return s},setPrototypeOf(){(function(){throw new Error("https://svelte.dev/e/state_prototype_fixed")})()}})}function OtA(t){try{if(t!==null&&typeof t=="object"&&P0 in t)return t[P0]}catch{}return t}function SkA(t,e){return Object.is(OtA(t),OtA(e))}function A1(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return document.createTextNode(t)}function $g(t){return wnA.call(t)}function om(t){return DnA.call(t)}function CA(t,e){return $g(t)}function At(t){var e=$g(t);return e instanceof Comment&&e.data===""?om(e):e}function bA(t){for(var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,A=t;e--;)A=om(A);return A}var PtA=!1;function fv(t){var e=Pn,A=jn;bg(null),Jl(null);try{return t()}finally{bg(e),Jl(A)}}function xkA(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:A;t.addEventListener(e,()=>fv(A));var n=t.__on_r;t.__on_r=n?()=>{n(),i(!0)}:()=>i(!0),PtA||(PtA=!0,document.addEventListener("reset",o=>{Promise.resolve().then(()=>{if(!o.defaultPrevented)for(var a of o.target.elements){var r;(r=a.__on_r)===null||r===void 0||r.call(a)}})},{capture:!0}))}function vnA(t){jn===null&&(Pn===null&&(function(){throw new Error("https://svelte.dev/e/effect_orphan")})(),(function(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")})()),oB&&(function(){throw new Error("https://svelte.dev/e/effect_in_teardown")})()}function Pc(t,e,A){var i=jn;i!==null&&(i.f&O0)!==0&&(t|=O0);var n={ctx:co,deps:null,nodes:null,f:t|zc|Hc,first:null,fn:e,last:null,next:null,parent:i,b:i&&i.b,prev:null,teardown:null,wv:0,ac:null};if(A)try{Qh(n),n.f|=TL}catch(s){throw es(n),s}else e!==null&&Xd(n);var o=n;if(A&&o.deps===null&&o.teardown===null&&o.nodes===null&&o.first===o.last&&(o.f&onA)===0&&(o=o.first,(t&vh)!==0&&(t&Vd)!==0&&o!==null&&(o.f|=Vd)),o!==null&&(o.parent=i,i!==null&&(function(s,g){var l=g.last;l===null?g.last=g.first=s:(l.next=s,s.prev=l,g.last=s)})(o,i),Pn!==null&&2&Pn.f&&(t&inA)===0)){var a,r=Pn;((a=r.effects)!==null&&a!==void 0?a:r.effects=[]).push(o)}return n}function Tf(){return Pn!==null&&!H0}function mv(t){var e=Pc(8,null,!1);return ts(e,As),e.teardown=t,e}function lL(t){vnA();var e=jn.f;if(!(!Pn&&(e&hv)!==0&&(e&TL)===0))return bnA(t);var A,i=co;((A=i.e)!==null&&A!==void 0?A:i.e=[]).push(t)}function bnA(t){return Pc(1048580,t,!1)}function Nr(t){return Pc(4,t,!1)}function RA(t,e){var A={effect:null,ran:!1,deps:t};co.l.$.push(A),A.effect=kh(()=>{t(),A.ran||(A.ran=!0,EA(e))})}function kn(){var t=co;kh(()=>{for(var e of t.l.$){e.deps();var A=e.effect;(A.f&As)!==0&&ts(A,o2),xh(A)&&Qh(A),e.ran=!1}})}function kh(t){return Pc(8|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function ve(t){unA(arguments.length>3&&arguments[3]!==void 0?arguments[3]:[],arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],e=>{Pc(8,()=>t(...e.map(c)),!0)})}function Sh(t){return Pc(vh|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function MnA(t){return Pc(mkA|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function j0(t){return Pc(524320,t,!0)}function knA(t){var e=t.teardown;if(e!==null){var A=oB,i=Pn;jtA(!0),bg(null);try{e.call(null)}finally{jtA(A),bg(i)}}}function SnA(t){var e=arguments.length>1&&arguments[1]!==void 0&&arguments[1],A=t.first;t.first=t.last=null;for(var i,n=function(){var o=A.ac;o!==null&&fv(()=>{o.abort(Ah)}),i=A.next,(A.f&inA)!==0?A.parent=null:es(A,e),A=i};A!==null;)n()}function es(t){var e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],A=!1;!e&&(t.f&nnA)===0||t.nodes===null||t.nodes.end===null||(xnA(t.nodes.start,t.nodes.end),A=!0),SnA(t,e&&!A),Av(t,0),ts(t,bh);var i=t.nodes&&t.nodes.t;if(i!==null)for(var n of i)n.stop();knA(t);var o=t.parent;o!==null&&o.first!==null&&RnA(t),t.next=t.prev=t.teardown=t.ctx=t.deps=t.fn=t.nodes=t.ac=null}function xnA(t,e){for(;t!==null;){var A=t===e?null:om(t);t.remove(),t=A}}function RnA(t){var e=t.parent,A=t.prev,i=t.next;A!==null&&(A.next=i),i!==null&&(i.prev=A),e!==null&&(e.first===t&&(e.first=i),e.last===t&&(e.last=A))}function Eh(t,e){var A=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],i=[];NnA(t,i,!0);var n=()=>{A&&es(t),e&&e()},o=i.length;if(o>0){var a=()=>--o||n();for(var r of i)r.out(a)}else n()}function NnA(t,e,A){if((t.f&O0)===0){t.f^=O0;var i=t.nodes&&t.nodes.t;if(i!==null)for(var n of i)(n.is_global||A)&&e.push(n);for(var o=t.first;o!==null;){var a=o.next;NnA(o,e,((o.f&Vd)!==0||(o.f&hv)!==0&&(t.f&vh)!==0)&&A),o=a}}}function cL(t){FnA(t,!0)}function FnA(t,e){if((t.f&O0)!==0){t.f^=O0,(t.f&As)===0&&(ts(t,zc),Xd(t));for(var A=t.first;A!==null;){var i=A.next;FnA(A,((A.f&Vd)!==0||(A.f&hv)!==0)&&e),A=i}var n=t.nodes&&t.nodes.t;if(n!==null)for(var o of n)(o.is_global||e)&&o.in()}}function _nA(t,e){if(t.nodes)for(var A=t.nodes.start,i=t.nodes.end;A!==null;){var n=A===i?null:om(A);e.append(A),A=n}}var RkA=null;var Od=!1;function $y(t){Od=t}var oB=!1;function jtA(t){oB=t}var Pn=null,H0=!1;function bg(t){Pn=t}var jn=null;function Jl(t){jn=t}var t2=null;function LnA(t){Pn!==null&&(t2===null?t2=[t]:t2.push(t))}var zs=null,Vg=0,Nl=null,GnA=1,Hf=0,Pd=Hf;function qtA(t){Pd=t}function KnA(){return++GnA}function xh(t){var e=t.f;if((e&zc)!==0)return!0;if(2&e&&(t.f&=-32769),(e&o2)!==0){var A=t.deps;if(A!==null)for(var i=A.length,n=0;nt.wv)return!0}(e&Hc)!==0&&Kl===null&&ts(t,As)}return!1}function UnA(t,e){var A,i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],n=t.reactions;if(n!==null&&((A=t2)===null||A===void 0||!A.includes(t)))for(var o=0;o{t.ac.abort(Ah)}),t.ac=null);try{t.f|=rL;var l=(0,t.fn)(),C=t.deps;if(zs!==null){var I;if(Av(t,Vg),C!==null&&Vg>0)for(C.length=Vg+zs.length,I=0;I1&&arguments[1]!==void 0?arguments[1]:new Set;if(!(typeof t!="object"||t===null||t instanceof EventTarget||e.has(t))){for(var A in e.add(t),t instanceof Date&&t.getTime(),t)try{CL(t[A],e)}catch{}var i=JL(t);if(i!==Object.prototype&&i!==Array.prototype&&i!==Map.prototype&&i!==Set.prototype&&i!==Date.prototype){var n=enA(i);for(var o in n){var a=n[o].get;if(a)try{a.call(t)}catch{}}}}}var OnA=new Set,IL=new Set;function PnA(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};function n(o){if(i.capture||_f.call(e,o),!o.cancelBubble)return fv(()=>A?.call(this,o))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?Wd(()=>{e.addEventListener(t,n,i)}):e.addEventListener(t,n,i),n}function ue(t,e,A,i,n){var o={capture:i,passive:n},a=PnA(t,e,A,o);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&mv(()=>{e.removeEventListener(t,a,o)})}function am(t){for(var e=0;ea||i});var C=Pn,I=jn;bg(null),Jl(null);try{for(var d,B=[];a!==null;){var E=a.assignedSlot||a.parentNode||a.host||null;try{var Q=a["__"+n];Q==null||a.disabled&&t.target!==a||Q.call(a,t)}catch(S){d?B.push(S):d=S}if(t.cancelBubble||E===A||E===null)break;a=E}if(d){var f=function(S){queueMicrotask(()=>{throw S})};for(var b of B)f(b);throw d}}finally{t.__root=A,delete t.currentTarget,bg(C),Jl(I)}}}function zL(t){var e=document.createElement("template");return e.innerHTML=t.replaceAll("",""),e.content}function $d(t,e){var A=jn;A.nodes===null&&(A.nodes={start:t,end:e,a:null,t:null})}function FA(t,e){var A,i=!!(1&e),n=!!(2&e),o=!t.startsWith("");return()=>{A===void 0&&(A=zL(o?t:""+t),i||(A=$g(A)));var a=n||pnA?document.importNode(A,!0):A.cloneNode(!0);return i?$d($g(a),a.lastChild):$d(a,a),a}}function s1(t,e){return(function(A,i){var n,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"svg",a=!A.startsWith(""),r=!!(1&i),s="<".concat(o,">").concat(a?A:""+A,"");return()=>{if(!n){var g=$g(zL(s));if(r)for(n=document.createDocumentFragment();$g(g);)n.appendChild($g(g));else n=$g(g)}var l=n.cloneNode(!0);return r?$d($g(l),l.lastChild):$d(l,l),l}})(t,e,"svg")}function hr(){var t=A1((arguments.length>0&&arguments[0]!==void 0?arguments[0]:"")+"");return $d(t,t),t}function vi(){var t=document.createDocumentFragment(),e=document.createComment(""),A=A1();return t.append(e,A),$d(e,A),t}function cA(t,e){t!==null&&t.before(e)}var _kA=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"],LkA={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"},GkA=["touchstart","touchmove"];function KkA(t){return GkA.includes(t)}function Rt(t,e){var A,i=e==null?"":typeof e=="object"?e+"":e;i!==((A=t.__t)!==null&&A!==void 0?A:t.__t=t.nodeValue)&&(t.__t=i,t.nodeValue=i+"")}function UkA(t,e){return(function(A,i){var{target:n,anchor:o,props:a={},events:r,context:s,intro:g=!0}=i;(function(){if(e2===void 0){e2=window,pnA=/Firefox/.test(navigator.userAgent);var B=Element.prototype,E=Node.prototype,Q=Text.prototype;wnA=A2(E,"firstChild").get,DnA=A2(E,"nextSibling").get,KtA(B)&&(B.__click=void 0,B.__className=void 0,B.__attributes=null,B.__style=void 0,B.__e=void 0),KtA(Q)&&(Q.__t=void 0)}})();var l=new Set,C=B=>{for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};return new Promise(f=>{Q.outro?Eh(E,()=>{es(E),f(void 0)}):(es(E),f(void 0))})}})(()=>{var B=o??n.appendChild(A1());return(function(E,Q,f){new gL(E,Q,f)})(B,{pending:()=>{}},E=>{s&&(St({}),co.c=s),r&&(a.$$events=r),I=A(E,a)||{},s&&xt()}),()=>{for(var E of l){n.removeEventListener(E,_f);var Q=OQ.get(E);--Q===0?(document.removeEventListener(E,_f),OQ.delete(E)):OQ.set(E,Q)}var f;IL.delete(C),B!==o&&((f=B.parentNode)===null||f===void 0||f.removeChild(B))}});return dL.set(I,d),I})(t,e)}var OQ=new Map,dL=new WeakMap,PQ,TC=new WeakMap,Ld=new WeakMap,HC=new WeakMap,xf=new WeakMap,L_=new WeakMap,VtA=new WeakMap,JkA=new WeakMap,hh=class{constructor(e){var A=this,i=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];Y0(this,"anchor",void 0),po(this,TC,new Map),po(this,Ld,new Map),po(this,HC,new Map),po(this,xf,new Set),po(this,L_,!0),po(this,VtA,()=>{var n=Go;if(we(TC,this).has(n)){var o=we(TC,this).get(n),a=we(Ld,this).get(o);if(a)cL(a),we(xf,this).delete(o);else{var r=we(HC,this).get(o);r&&(we(Ld,this).set(o,r.effect),we(HC,this).delete(o),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),a=r.effect)}for(var[s,g]of we(TC,this)){if(we(TC,this).delete(s),s===n)break;var l=we(HC,this).get(g);l&&(es(l.effect),we(HC,this).delete(g))}var C=function(B,E){if(B===o||we(xf,A).has(B))return 1;var Q=()=>{if(Array.from(we(TC,A).values()).includes(B)){var f=document.createDocumentFragment();_nA(E,f),f.append(A1()),we(HC,A).set(B,{effect:E,fragment:f})}else es(E);we(xf,A).delete(B),we(Ld,A).delete(B)};we(L_,A)||!a?(we(xf,A).add(B),Eh(E,Q,!1)):Q()};for(var[I,d]of we(Ld,this))C(I,d)}}),po(this,JkA,n=>{we(TC,this).delete(n);var o=Array.from(we(TC,this).values());for(var[a,r]of we(HC,this))o.includes(a)||(es(r.effect),we(HC,this).delete(a))}),this.anchor=e,Cn(L_,this,i)}ensure(e,A){var i=Go;!A||we(Ld,this).has(e)||we(HC,this).has(e)||we(Ld,this).set(e,j0(()=>A(this.anchor))),we(TC,this).set(i,e),we(VtA,this).call(this)}};function is(t){co===null&&im(),yh&&co.l!==null?jnA(co).m.push(t):lL(()=>{var e=EA(t);if(typeof e=="function")return e})}function Yl(t){co===null&&im(),is(()=>()=>EA(t))}function YkA(){var t=co;return t===null&&im(),(e,A,i)=>{var n,o=(n=t.s.$$events)===null||n===void 0?void 0:n[e];if(o){var a=tm(o)?o.slice():[o],r=(function(g,l){var{bubbles:C=!1,cancelable:I=!1}=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return new CustomEvent(g,{detail:l,bubbles:C,cancelable:I})})(e,A,i);for(var s of a)s.call(t.x,r);return!r.defaultPrevented}return!0}}function TkA(t){co===null&&im(),co.l===null&&(function(){throw new Error("https://svelte.dev/e/lifecycle_legacy_only")})(),jnA(co).b.push(t)}function jnA(t){var e,A=t.l;return(e=A.u)!==null&&e!==void 0?e:A.u={a:[],b:[],m:[]}}function TA(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=new hh(t);function n(o,a){i.ensure(o,a)}Sh(()=>{var o=!1;e(function(a){o=!0,n(!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],a)}),o||n(!1,null)},A?Vd:0)}function qnA(t,e,A){var i=new hh(t),n=!Mh();Sh(()=>{var o=e();n&&o!==null&&typeof o=="object"&&(o={}),i.ensure(o,A)})}function Ra(t,e){return e}function G_(t){for(var e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],A=0;A5&&arguments[5]!==void 0?arguments[5]:null,a=t,r=new Map;!(4&e)||(a=t.appendChild(A1()));var s,g=null,l=tt(()=>{var E=A();return tm(E)?E:E==null?[]:Ty(E)}),C=!0;function I(){B.fallback=g,(function(E,Q,f,b,S){var M,D,F,_,U,J=!!(8&b),j=Q.length,$=E.items,O=E.effect.first,DA=null,P=[],aA=[];if(J)for(U=0;U0){var HA=4&b&&j===0?f:null;if(J){for(U=0;U{if(Me){if(Me.pending.delete(ut),Me.done.add(ut),Me.pending.size===0){var ke=QA.outrogroups;G_(Ty(Me.done)),ke.delete(Me),ke.size===0&&(QA.outrogroups=null)}}else pA-=1},!1)},ht=0;ht{if(D!==void 0)for(_ of D){var QA;(QA=_.nodes)===null||QA===void 0||(QA=QA.a)===null||QA===void 0||QA.apply()}})})(B,s,a,e,i),g!==null&&(s.length===0?(g.f&zC)===0?cL(g):(g.f^=zC,Rf(g,null,a)):Eh(g,()=>{g=null}))}var d=Sh(()=>{for(var E=(s=c(l)).length,Q=new Set,f=0;fo(a)):(g=j0(()=>o(PQ??(PQ=A1())))).f|=zC),C||I(),c(l)}),B={effect:d,items:r,outrogroups:null,fallback:g};C=!1}function HkA(t,e,A,i,n,o,a,r){var s=1&a?16&a?a2(A):IA(A,!1,!1):null,g=2&a?a2(n):null;return{v:s,i:g,e:j0(()=>(o(e,s??A,g??n,r),()=>{t.delete(i)}))}}function Rf(t,e,A){if(t.nodes)for(var i=t.nodes.start,n=t.nodes.end,o=e&&(e.f&zC)===0?e.nodes.start:A;i!==null;){var a=om(i);if(o.before(i),i===n)return;i=a}}function UI(t,e,A){e===null?t.effect.first=A:e.next=A,A===null?t.effect.last=e:A.prev=e}function VnA(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=arguments.length>3&&arguments[3]!==void 0&&arguments[3],n=t,o="";ve(()=>{var a,r=jn;if(o!==(o=(a=e())!==null&&a!==void 0?a:"")&&(r.nodes!==null&&(xnA(r.nodes.start,r.nodes.end),r.nodes=null),o!=="")){var s=o+"";A?s="".concat(s,""):i&&(s="".concat(s,""));var g=zL(s);if((A||i)&&(g=$g(g)),$d($g(g),g.lastChild),A||i)for(;$g(g);)n.before($g(g));else n.before(g)}})}function Ba(t,e,A,i,n){var o,a=(o=e.$$slots)===null||o===void 0?void 0:o[A],r=!1;a===!0&&(a=e[A==="default"?"children":A],r=!0),a===void 0?n!==null&&n(t):a(t,r?()=>i:i)}function WnA(t,e,A){var i=new hh(t);Sh(()=>{var n,o=(n=e())!==null&&n!==void 0?n:null;i.ensure(o,o&&(a=>A(a,o)))},Vd)}function bs(t,e,A){Nr(()=>{var i=EA(()=>e(t,A?.())||{});if(A&&i!=null&&i.update){var n=!1,o={};kh(()=>{var a=A();G(a),n&&snA(o,a)&&(o=a,i.update(a))}),n=!0}if(i!=null&&i.destroy)return()=>i.destroy()})}function zkA(t,e){var A,i=void 0;MnA(()=>{i!==(i=e())&&(A&&(es(A),A=null),i&&(A=j0(()=>{Nr(()=>i(t))})))})}function ZnA(t){var e,A,i="";if(typeof t=="string"||typeof t=="number")i+=t;else if(typeof t=="object")if(Array.isArray(t)){var n=t.length;for(e=0;e1&&arguments[1]!==void 0&&arguments[1]?" !important;":";",A="";for(var i in t){var n=t[i];n!=null&&n!==""&&(A+=" "+i+": "+n+e)}return A}function K_(t){return t[0]!=="-"||t[1]!=="-"?t.toLowerCase():t}function $t(t,e,A,i,n,o){var a=t.__className;if(a!==A||a===void 0){var r=(function(l,C,I){var d=l==null?"":""+l;if(C&&(d=d?d+" "+C:C),I){for(var B in I)if(I[B])d=d?d+" "+B:B;else if(d.length)for(var E=B.length,Q=0;(Q=d.indexOf(B,Q))>=0;){var f=Q+E;Q!==0&&!WtA.includes(d[Q-1])||f!==d.length&&!WtA.includes(d[f])?Q=f:d=(Q===0?"":d.substring(0,Q))+d.substring(f+1)}}return d===""?null:d})(A,i,o);r==null?t.removeAttribute("class"):e?t.className=r:t.setAttribute("class",r),t.__className=A}else if(o&&n!==o)for(var s in o){var g=!!o[s];n!=null&&g===!!n[s]||t.classList.toggle(s,g)}return o}function U_(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},A=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;for(var n in A){var o=A[n];e[n]!==o&&(A[n]==null?t.style.removeProperty(n):t.style.setProperty(n,o,i))}}function Ul(t,e,A,i){if(t.__style!==e){var n=(function(o,a){if(a){var r,s,g="";if(Array.isArray(a)?(r=a[0],s=a[1]):r=a,o){o=String(o).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var l=!1,C=0,I=!1,d=[];r&&d.push(...Object.keys(r).map(K_)),s&&d.push(...Object.keys(s).map(K_));for(var B=0,E=-1,Q=o.length,f=0;f2&&arguments[2]!==void 0&&arguments[2];if(t.multiple){if(e==null)return;if(!tm(e))return void console.warn("https://svelte.dev/e/select_multiple_invalid_value");for(var i of t.options)i.selected=e.includes(XtA(i))}else{for(i of t.options)if(SkA(XtA(i),e))return void(i.selected=!0);A&&e===void 0||(t.selectedIndex=-1)}}function OkA(t){var e=new MutationObserver(()=>{BL(t,t.__value)});e.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),mv(()=>{e.disconnect()})}function XtA(t){return"__value"in t?t.__value:t.value}var XQ=Symbol("class"),Nf=Symbol("style"),XnA=Symbol("is custom element"),$nA=Symbol("is html");function AB(t,e){var A=OL(t);A.value!==(A.value=e??void 0)&&(t.value!==e||e===0&&t.nodeName==="PROGRESS")&&(t.value=e??"")}function Mn(t,e,A,i){var n=OL(t);n[e]!==(n[e]=A)&&(e==="loading"&&(t[wkA]=A),A==null?t.removeAttribute(e):typeof A!="string"&&AoA(t).includes(e)?t[e]=A:t.setAttribute(e,A))}function PkA(t,e,A,i){var n,o=OL(t),a=o[XnA],r=!o[$nA],s=e||{},g=t.tagName==="OPTION";for(var l in e)l in A||(A[l]=null);A.class?A.class=n1(A.class):(i||A[XQ])&&(A.class=null),A[Nf]&&((n=A.style)!==null&&n!==void 0||(A.style=null));var C,I,d,B,E,Q,f=AoA(t),b=function(M){var D=A[M];if(g&&M==="value"&&D==null)return t.value=t.__value="",s[M]=D,0;if(M==="class")return C=t.namespaceURI==="http://www.w3.org/1999/xhtml",$t(t,C,D,i,e?.[XQ],A[XQ]),s[M]=D,s[XQ]=A[XQ],0;if(M==="style")return Ul(t,D,e?.[Nf],A[Nf]),s[M]=D,s[Nf]=A[Nf],0;if(D===(I=s[M])&&(D!==void 0||!t.hasAttribute(M))||(s[M]=D,(d=M[0]+M[1])==="$$"))return 0;if(d==="on"){var F={},_="$$"+M,U=M.slice(2);if(B=(function(P){return _kA.includes(P)})(U),(function(P){return P.endsWith("capture")&&P!=="gotpointercapture"&&P!=="lostpointercapture"})(U)&&(U=U.slice(0,-7),F.capture=!0),!B&&I){if(D!=null)return 0;t.removeEventListener(U,s[_],F),s[_]=null}if(D!=null)if(B)t["__".concat(U)]=D,am([U]);else{let P=function(aA){s[M].call(this,aA)};var DA=P;s[_]=PnA(U,t,P,F)}else B&&(t["__".concat(U)]=void 0)}else if(M==="style")Mn(t,M,D);else if(M==="autofocus")(function(P,aA){if(aA){var iA=document.body;P.autofocus=!0,Wd(()=>{document.activeElement===iA&&P.focus()})}})(t,!!D);else if(a||M!=="__value"&&(M!=="value"||D==null))if(M==="selected"&&g)(function(P,aA){aA?P.hasAttribute("selected")||P.setAttribute("selected",""):P.removeAttribute("selected")})(t,D);else if(E=M,r||(E=(function(P){var aA;return P=P.toLowerCase(),(aA=LkA[P])!==null&&aA!==void 0?aA:P})(E)),Q=E==="defaultValue"||E==="defaultChecked",D!=null||a||Q)Q||f.includes(E)&&(a||typeof D!="string")?(t[E]=D,E in o&&(o[E]=$r)):typeof D!="function"&&Mn(t,E,D);else if(o[M]=null,E==="value"||E==="checked"){var J=t,j=e===void 0;if(E==="value"){var $=J.defaultValue;J.removeAttribute(E),J.defaultValue=$,J.value=J.__value=j?$:null}else{var O=J.defaultChecked;J.removeAttribute(E),J.defaultChecked=O,J.checked=!!j&&O}}else t.removeAttribute(M);else t.value=t.__value=D};for(var S in A)b(S);return s}function Py(t,e){var A=arguments.length>5?arguments[5]:void 0,i=arguments.length>6&&arguments[6]!==void 0&&arguments[6],n=arguments.length>7&&arguments[7]!==void 0&&arguments[7];unA(arguments.length>4&&arguments[4]!==void 0?arguments[4]:[],arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],arguments.length>3&&arguments[3]!==void 0?arguments[3]:[],o=>{var a=void 0,r={},s=t.nodeName==="SELECT",g=!1;if(MnA(()=>{var C=e(...o.map(c)),I=PkA(t,a,C,A,i,n);for(var d of(g&&s&&"value"in C&&BL(t,C.value),Object.getOwnPropertySymbols(r)))C[d]||es(r[d]);for(var B of Object.getOwnPropertySymbols(C)){var E=C[B];B.description!=="@attach"||a&&E===a[B]||(r[B]&&es(r[B]),r[B]=j0(()=>zkA(t,()=>E))),I[B]=E}a=I}),s){var l=t;Nr(()=>{BL(l,a.value,!0),OkA(l)})}g=!0})}function OL(t){var e;return(e=t.__attributes)!==null&&e!==void 0?e:t.__attributes={[XnA]:t.nodeName.includes("-"),[$nA]:t.namespaceURI==="http://www.w3.org/1999/xhtml"}}var $tA=new Map;function AoA(t){var e,A=t.getAttribute("is")||t.nodeName,i=$tA.get(A);if(i)return i;$tA.set(A,i=[]);for(var n=t,o=Element.prototype;o!==n;){for(var a in e=enA(n))e[a].set&&i.push(a);n=JL(n)}return i}function ev(t,e){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e,i=new WeakSet;xkA(t,"input",(function(){var n=Yt(function*(o){var a=o?t.defaultValue:t.value;if(a=J_(t)?Y_(a):a,A(a),Go!==null&&i.add(Go),yield YnA(),a!==(a=e())){var r=t.selectionStart,s=t.selectionEnd,g=t.value.length;if(t.value=a??"",s!==null){var l=t.value.length;r===s&&s===g&&l>g?(t.selectionStart=l,t.selectionEnd=l):(t.selectionStart=r,t.selectionEnd=Math.min(s,l))}}});return function(o){return n.apply(this,arguments)}})()),EA(e)==null&&t.value&&(A(J_(t)?Y_(t.value):t.value),Go!==null&&i.add(Go)),kh(()=>{var n=e();if(t===document.activeElement){var o=Uf??Go;if(i.has(o))return}J_(t)&&n===Y_(t.value)||(t.type!=="date"||n||t.value)&&n!==t.value&&(t.value=n??"")})}function J_(t){var e=t.type;return e==="number"||e==="range"}function Y_(t){return t===""?null:+t}function Ot(t,e,A){var i=A2(t,e);i&&i.set&&(t[e]=A,mv(()=>{t[e]=null}))}function AiA(t,e){return t===e||t?.[P0]===e}function Ko(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,A=arguments.length>2?arguments[2]:void 0;return Nr(()=>{var i,n;return kh(()=>{i=n,n=[],EA(()=>{t!==A(...n)&&(e(t,...n),i&&AiA(A(...i),t)&&e(null,...i))})}),()=>{Wd(()=>{n&&AiA(A(...n),t)&&e(null,...n)})}}),t}function jC(t){return function(){for(var e=arguments.length,A=new Array(e),i=0;i0&&arguments[0]!==void 0&&arguments[0],e=co,A=e.l.u;if(A){var i,n=()=>G(e.s);if(t){var o=0,a={},r=nm(()=>{var s=!1,g=e.s;for(var l in g)g[l]!==a[l]&&(a[l]=g[l],s=!0);return s&&o++,o});n=()=>c(r)}A.b.length&&(i=()=>{eiA(e,n),aL(A.b)},vnA(),Pc(1048584,i,!0)),lL(()=>{var s=EA(()=>A.m.map(fkA));return()=>{for(var g of s)typeof g=="function"&&g()}}),A.a.length&&lL(()=>{eiA(e,n),aL(A.a)})}}function eiA(t,e){if(t.l.s)for(var A of t.l.s)c(A);e()}function pv(t){var e=a2(0);return function(){return arguments.length===1?(R(e,c(e)+1),arguments[0]):(c(e),t())}}function Lf(t,e){var A,i=(A=t.$$events)===null||A===void 0?void 0:A[e.type],n=tm(i)?i.slice():i==null?[]:[i];for(var o of n)o.call(this,e)}var by=!1,jkA={get(t,e){if(!t.exclude.includes(e))return c(t.version),e in t.special?t.special[e]():t.props[e]},set(t,e,A){if(!(e in t.special)){var i=jn;try{Jl(t.parent_effect),t.special[e]=N({get[e](){return t.props[e]}},e,4)}finally{Jl(i)}}return t.special[e](A),ztA(t.version),!0},getOwnPropertyDescriptor(t,e){if(!t.exclude.includes(e))return e in t.props?{enumerable:!0,configurable:!0,value:t.props[e]}:void 0},deleteProperty:(t,e)=>(t.exclude.includes(e)||(t.exclude.push(e),ztA(t.version)),!0),has:(t,e)=>!t.exclude.includes(e)&&e in t.props,ownKeys:t=>Reflect.ownKeys(t.props).filter(e=>!t.exclude.includes(e))};function My(t,e){return new Proxy({props:t,exclude:e,special:{},version:a2(0),parent_effect:jn},jkA)}var qkA={get(t,e){for(var A=t.props.length;A--;){var i=t.props[A];if(kf(i)&&(i=i()),typeof i=="object"&&i!==null&&e in i)return i[e]}},set(t,e,A){for(var i=t.props.length;i--;){var n=t.props[i];kf(n)&&(n=n());var o=A2(n,e);if(o&&o.set)return o.set(A),!0}return!1},getOwnPropertyDescriptor(t,e){for(var A=t.props.length;A--;){var i=t.props[A];if(kf(i)&&(i=i()),typeof i=="object"&&i!==null&&e in i){var n=A2(i,e);return n&&!n.configurable&&(n.configurable=!0),n}}},has(t,e){if(e===P0||e===anA)return!1;for(var A of t.props)if(kf(A)&&(A=A()),A!=null&&e in A)return!0;return!1},ownKeys(t){var e=[];for(var A of t.props)if(kf(A)&&(A=A()),A){for(var i in A)e.includes(i)||e.push(i);for(var n of Object.getOwnPropertySymbols(A))e.includes(n)||e.push(n)}return e}};function e1(){for(var t=arguments.length,e=new Array(t),A=0;A(l&&(l=!1,g=s?EA(i):i),g);if(r){var I,d,B=P0 in t||anA in t;n=(I=(d=A2(t,e))===null||d===void 0?void 0:d.set)!==null&&I!==void 0?I:B&&e in t?D=>t[e]=D:void 0}var E,Q=!1;if(r?[o,Q]=(function(D){var F=by;try{return by=!1,[D(),by]}finally{by=F}})(()=>t[e]):o=t[e],o===void 0&&i!==void 0&&(o=C(),n&&(a&&(function(){throw new Error("https://svelte.dev/e/props_invalid_value")})(),n(o))),E=a?()=>{var D=t[e];return D===void 0?C():(l=!0,D)}:()=>{var D=t[e];return D!==void 0&&(g=void 0),D===void 0?g:D},a&&!(4&A))return E;if(n){var f=t.$$legacy;return function(D,F){return arguments.length>0?(a&&F&&!f&&!Q||n(F?E():D),D):E()}}var b=!1,S=(1&A?nm:tt)(()=>(b=!1,E()));r&&c(S);var M=jn;return function(D,F){if(arguments.length>0){var _=F?c(S):a&&r?eh(D):D;return R(S,_),b=!0,g!==void 0&&(g=_),D}return oB&&b||(M.f&bh)!==0?S.v:c(S)}}function lr(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:(function(i){var n=(function(o){try{if(typeof window<"u"&&window.localStorage!==void 0)return window.localStorage[o]}catch{}})("debug");return n!=null&&n.endsWith("*")?i.startsWith(n.slice(0,-1)):i===n})(t);if(!e)return VkA;var A=(function(i){for(var n=0,o=0;o9466848e5&&isFinite(t)&&Math.floor(t)===t&&!isNaN(new Date(t).valueOf());if(typeof t=="bigint")return EL(Number(t));try{var e=t&&t.valueOf();if(e!==t)return EL(e)}catch{return!1}return!1}function eoA(t){(ky=ky||window.document.createElement("div")).style.color="",ky.style.color=t;var e=ky.style.color;return e!==""?e.replace(/\s+/g,"").toLowerCase():void 0}var ky=void 0;function $kA(t){return typeof t=="string"&&t.length<99&&!!eoA(t)}function jL(t,e){if(typeof t=="number"||typeof t=="string"||typeof t=="boolean"||t===void 0)return typeof t;if(typeof t=="bigint")return"number";if(t===null)return"null";if(Array.isArray(t))return"array";if(pn(t))return"object";var A=e.stringify(t);return A&&PL(A)?"number":A==="true"||A==="false"?"boolean":A==="null"?"null":"unknown"}var ASA=/^https?:\/\/\S+$/;function wv(t){return typeof t=="string"&&ASA.test(t)}function Rh(t,e){if(t==="")return"";var A=t.trim();return A==="null"?null:A==="true"||A!=="false"&&(PL(A)?e.parse(A):t)}var eSA=[];function iiA(t,e){if(t.length!==e.length)return!1;for(var A=0;A1&&arguments[1]!==void 0&&arguments[1],A={};if(!Array.isArray(t))throw new TypeError("Array expected");function i(a,r){(!Array.isArray(a)&&!pn(a)||e&&r.length>0)&&(A[wt(r)]=!0),pn(a)&&Object.keys(a).forEach(s=>{i(a[s],r.concat(s))})}for(var n=Math.min(t.length,1e4),o=0;oe?t.slice(0,e):t}function niA(t){return ye({},t)}function oiA(t){return Object.values(t)}function aiA(t,e,A,i){var n=t.slice(0),o=n.splice(e,A);return n.splice.apply(n,[e+i,0,...o]),n}function tSA(t,e,A){return t.slice(0,e).concat(A).concat(t.slice(e))}function rm(t,e){try{return e.parse(t)}catch{return e.parse(ul(t))}}function ioA(t,e){try{return rm(t,e)}catch{return}}function sm(t,e){t=t.replace(ooA,"");try{return e(t)}catch{}try{return e("{"+t+"}")}catch{}try{return e("["+t+"]")}catch{}throw new Error("Failed to parse partial JSON")}function noA(t){t=t.replace(ooA,"");try{return ul(t)}catch{}try{var e=ul("["+t+"]");return e.substring(1,e.length-1)}catch{}try{var A=ul("{"+t+"}");return A.substring(1,A.length-1)}catch{}throw new Error("Failed to repair partial JSON")}var ooA=/,\s*$/;function uh(t,e){var A=siA.exec(e);if(A){var i=Fr(A[2]),n=(function(d,B){for(var E=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:d.length,f=0,b=E;b"line ".concat(n+1," column ").concat(o+1))}}var a=aSA.exec(e),r=a?Fr(a[1]):void 0,s=r!==void 0?r-1:void 0,g=rSA.exec(e),l=g?Fr(g[1]):void 0,C=l!==void 0?l-1:void 0,I=s!==void 0&&C!==void 0?(function(d,B,E){for(var Q=d.indexOf(` +`),f=1;f1&&arguments[1]!==void 0?arguments[1]:void 0,A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:JSON;return zf(t)?t:{text:A.stringify(t.json,null,e)}}function riA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:JSON;return Of(t)?t:{json:e.parse(t.text)}}function hL(t,e,A){return iSA(t,e,A).text}function nSA(t,e){return oSA(t,e)>e}function oSA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1/0;if(zf(t))return t.text.length;var A=t.json,i=0;return(function n(o){if(Array.isArray(o)){if((i+=o.length-1+2)>e)return;for(var a=0;ae)return}else if(pn(o)){var r=Object.keys(o);i+=2+r.length+(r.length-1);for(var s=0;sroA(loA(String(t))),unescapeValue:t=>coA(soA(t))},lSA={escapeValue:t=>loA(String(t)),unescapeValue:t=>coA(t)},cSA={escapeValue:t=>roA(String(t)),unescapeValue:t=>soA(t)},CSA={escapeValue:t=>String(t),unescapeValue:t=>t};function roA(t){return t.replace(/[^\x20-\x7F]/g,e=>{var A;return e==="\b"||e==="\f"||e===` +`||e==="\r"||e===" "?e:"\\u"+("000"+((A=e.codePointAt(0))===null||A===void 0?void 0:A.toString(16))).slice(-4)})}function soA(t){return t.replace(/\\u[a-fA-F0-9]{4}/g,e=>{try{var A=JSON.parse('"'+e+'"');return goA[A]||A}catch{return e}})}var goA={'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},ISA={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":` +`,"\\r":"\r","\\t":" "};function loA(t){return t.replace(/["\b\f\n\r\t\\]/g,e=>goA[e]||e)}function coA(t){return t.replace(/\\["bfnrt\\]/g,e=>ISA[e]||e)}function fh(t){return typeof t!="string"?String(t):t.endsWith(` +`)?t+` +`:t}function CoA(t,e){return Nh(t,A=>A.nodeName.toUpperCase()===e.toUpperCase())}function VI(t,e,A){return Nh(t,i=>(function(n,o,a){return typeof n.getAttribute=="function"&&n.getAttribute(o)===a})(i,e,A))}function Nh(t,e){return!!VL(t,e)}function VL(t,e){for(var A=t;A&&!e(A);)A=A.parentNode;return A}function gm(t){var e,A;return(e=t==null||(A=t.ownerDocument)===null||A===void 0?void 0:A.defaultView)!==null&&e!==void 0?e:void 0}function WL(t){var e=gm(t),A=e?.document.activeElement;return!!A&&Nh(A,i=>i===t)}function IoA(t,e){return VL(t,A=>A.nodeName===e)}function z_(t){return VI(t,"data-type","selectable-key")?no.key:VI(t,"data-type","selectable-value")?no.value:VI(t,"data-type","insert-selection-area-inside")?no.inside:VI(t,"data-type","insert-selection-area-after")?no.after:no.multi}function jy(t){return encodeURIComponent(wt(t))}function doA(t){var e,A=VL(t,n=>!(n==null||!n.hasAttribute)&&n.hasAttribute("data-path")),i=(e=A?.getAttribute("data-path"))!==null&&e!==void 0?e:void 0;return i?hs(decodeURIComponent(i)):void 0}function dSA(t){var{allElements:e,currentElement:A,direction:i,hasPrio:n=()=>!0,margin:o=10}=t,a=QS(e.filter(function(f){var b=f.getBoundingClientRect();return b.width>0&&b.height>0}),s),r=s(A);function s(f){var b=f.getBoundingClientRect();return{x:b.left+b.width/2,y:b.top+b.height/2,rect:b,element:f}}function g(f,b){var S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,M=f.x-b.x,D=(f.y-b.y)*S;return Math.sqrt(M*M+D*D)}var l=f=>g(f,r);if(i==="Left"||i==="Right"){var C=i==="Left"?a.filter(f=>{return b=r,f.rect.left+o{return b=r,f.rect.right>b.rect.right+o;var b}),I=C.filter(f=>{return b=f,S=r,Math.abs(b.y-S.y)g(f,r,10));return d?.element}if(i==="Up"||i==="Down"){var B=i==="Up"?a.filter(f=>{return b=r,f.y+o{return b=r,f.y>b.y+o;var b}),E=B.filter(f=>n(f.element)),Q=VE(E,l)||VE(B,l);return Q?.element}}function ZL(){var t,e,A,i;return typeof navigator<"u"&&(t=(e=(A=navigator)===null||A===void 0||(A=A.platform)===null||A===void 0?void 0:A.toUpperCase().includes("MAC"))!==null&&e!==void 0?e:(i=navigator)===null||i===void 0||(i=i.userAgentData)===null||i===void 0||(i=i.platform)===null||i===void 0?void 0:i.toUpperCase().includes("MAC"))!==null&&t!==void 0&&t}function r2(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"+",A=[];XL(t,arguments.length>2&&arguments[2]!==void 0?arguments[2]:ZL)&&A.push("Ctrl"),t.altKey&&A.push("Alt"),t.shiftKey&&A.push("Shift");var i=t.key.length===1?t.key.toUpperCase():t.key;return i in BSA||A.push(i),A.join(e)}function XL(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:ZL;return t.ctrlKey||t.metaKey&&e()}var BSA={Ctrl:!0,Command:!0,Control:!0,Alt:!0,Option:!0,Shift:!0};function qt(t,e){e===void 0&&(e={});var A=e.insertAt;if(t&&typeof document<"u"){var i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",A==="top"&&i.firstChild?i.insertBefore(n,i.firstChild):i.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.appendChild(document.createTextNode(t))}}qt(`.jse-absolute-popup.svelte-enkkpn { + position: relative; + left: 0; + top: 0; + width: 0; + height: 0; + z-index: 1001; +} +.jse-absolute-popup.svelte-enkkpn .jse-hidden-input:where(.svelte-enkkpn) { + position: fixed; + left: 0; + top: 0; + width: 0; + height: 0; + padding: 0; + margin: 0; + border: none; + outline: none; + overflow: hidden; +} +.jse-absolute-popup.svelte-enkkpn .jse-absolute-popup-content:where(.svelte-enkkpn) { + position: absolute; +}`);var ESA=FA('
    '),QSA=FA('
    ');function hSA(t,e){St(e,!1);var A=N(e,"popup",8),i=N(e,"closeAbsolutePopup",8),n=IA(),o=IA();function a(C){A().options&&A().options.closeOnOuterClick&&!Nh(C.target,I=>I===c(n))&&i()(A().id)}function r(C){r2(C)==="Escape"&&(C.preventDefault(),C.stopPropagation(),i()(A().id))}is(function(){c(o)&&c(o).focus()}),Ai();var s=QSA();ue("mousedown",e2,function(C){a(C)},!0),ue("keydown",e2,r,!0),ue("wheel",e2,function(C){a(C)},!0);var g=CA(s),l=C=>{var I=ESA(),d=CA(I);Ko(d,B=>R(o,B),()=>c(o)),WnA(bA(d,2),()=>A().component,(B,E)=>{E(B,e1(()=>A().props))}),ve(B=>Ul(I,B),[()=>(c(n),G(A()),EA(()=>(function(B,E){var Q=B.getBoundingClientRect(),{left:f,top:b,positionAbove:S,positionLeft:M}=(function(){if(E.anchor){var{anchor:D,width:F=0,height:_=0,offsetTop:U=0,offsetLeft:J=0,position:j}=E,{left:$,top:O,bottom:DA,right:P}=D.getBoundingClientRect(),aA=j==="top"||O+_>window.innerHeight&&O>_,iA=j==="left"||$+F>window.innerWidth&&$>F;return{left:iA?P-J:$+J,top:aA?O-U:DA+U,positionAbove:aA,positionLeft:iA}}if(typeof E.left=="number"&&typeof E.top=="number"){var{left:BA,top:oA,width:sA=0,height:hA=0}=E;return{left:BA,top:oA,positionAbove:oA+hA>window.innerHeight&&oA>hA,positionLeft:BA+sA>window.innerWidth&&BA>sA}}throw new Error('Invalid config: pass either "left" and "top", or pass "anchor"')})();return(S?"bottom: ".concat(Q.top-b,"px;"):"top: ".concat(b-Q.top,"px;"))+(M?"right: ".concat(Q.left-f,"px;"):"left: ".concat(f-Q.left,"px;"))})(c(n),A().options)))]),cA(C,I)};TA(g,C=>{c(n)&&C(l)}),Ko(s,C=>R(n,C),()=>c(n)),ue("mousedown",s,function(C){C.stopPropagation()}),ue("keydown",s,r),cA(t,s),xt()}var uSA=FA(" ",1);function uL(t,e){St(e,!1);var A=lr("jsoneditor:AbsolutePopup"),i=IA([],!0);function n(r){var s=c(i).findIndex(l=>l.id===r);if(s!==-1){var g=c(i)[s];g.options.onClose&&g.options.onClose(),R(i,c(i).filter(l=>l.id!==r))}}(function(r,s){lnA().set(r,s)})("absolute-popup",{openAbsolutePopup:function(r,s,g){A("open...",s,g);var l={id:th(),component:r,props:s||{},options:g||{}};return R(i,[...c(i),l]),l.id},closeAbsolutePopup:n}),RA(()=>c(i),()=>{A("popups",c(i))}),kn(),Ai(!0);var o=uSA(),a=At(o);Ea(a,1,()=>c(i),Ra,(r,s)=>{hSA(r,{get popup(){return c(s)},closeAbsolutePopup:n})}),Ba(bA(a,2),e,"default",{},null),cA(t,o),xt()}function lm(t,e){for(var A=new Set(e),i=t.replace(/ \(copy( \d+)?\)$/,""),n=t,o=1;A.has(n);){var a="copy"+(o>1?" "+o:"");n="".concat(i," (").concat(a,")"),o++}return n}function WC(t,e){var A=e-3;return t.length>e?t.substring(0,A)+"...":t}function fSA(t){if(t==="")return"";var e=t.toLowerCase();if(e==="null")return null;if(e==="true")return!0;if(e==="false")return!1;if(e!=="undefined"){var A=Number(t),i=parseFloat(t);return isNaN(A)||isNaN(i)?t:A}}var mSA={id:"jsonquery",name:"JSONQuery",description:` +

    + Enter a JSON Query function to filter, sort, or transform the data. + You can use functions like get, filter, + sort, pick, groupBy, uniq, etcetera. + Example query: filter(.age >= 18) +

    +`,createQuery:function(t,e){var{filter:A,sort:i,projection:n}=e,o=[];A&&A.path&&A.relation&&A.value&&o.push(["filter",[(a=A.relation,vS("1 ".concat(a," 1"))[0]),Sy(A.path),fSA(A.value)]]);var a;return i&&i.path&&i.direction&&o.push(["sort",Sy(i.path),i.direction==="desc"?"desc":"asc"]),n&&n.paths&&(n.paths.length>1?o.push(["pick",...n.paths.map(Sy)]):o.push(["map",Sy(n.paths[0])])),zq(["pipe",...o])},executeQuery:function(t,e,A){var i=aoA(A,JSON)?t:(function(n){var o=A.stringify(n);return o!==void 0?JSON.parse(o):void 0})(t);return e.trim()!==""?Oq(i,e):i}};function Sy(t){return["get",...t]}var pSA=s1("");function wSA(t,e){St(e,!1);var A=870711,i=IA(""),n=N(e,"data",8);function o(r){if(!r||!r.raw)return"";var s=r.raw,g={};return s=s.replace(/\s(?:xml:)?id=["']?([^"')\s]+)/g,(l,C)=>{var I="fa-".concat((A+=1).toString(16));return g[C]=I,' id="'.concat(I,'"')}),s=s.replace(/#(?:([^'")\s]+)|xpointer\(id\((['"]?)([^')]+)\2\)\))/g,(l,C,I,d)=>{var B=C||d;return B&&g[B]?"#".concat(g[B]):l}),s}RA(()=>G(n()),()=>{R(i,o(n()))}),kn();var a=pSA();VnA(CA(a),()=>c(i),!0),cA(t,a),xt()}qt(` + .fa-icon.svelte-v67cny { + display: inline-block; + fill: currentColor; + } + .fa-flip-horizontal.svelte-v67cny { + transform: scale(-1, 1); + } + .fa-flip-vertical.svelte-v67cny { + transform: scale(1, -1); + } + .fa-spin.svelte-v67cny { + animation: svelte-v67cny-fa-spin 1s 0s infinite linear; + } + .fa-inverse.svelte-v67cny { + color: #fff; + } + .fa-pulse.svelte-v67cny { + animation: svelte-v67cny-fa-spin 1s infinite steps(8); + } + @keyframes svelte-v67cny-fa-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } + } +`);var DSA=s1(""),ySA=s1(""),vSA=s1(""),bSA=s1("",1);function Wi(t,e){var A=My(e,["children","$$slots","$$events","$$legacy"]),i=My(A,["class","data","scale","spin","inverse","pulse","flip","label","style"]);St(e,!1);var n=N(e,"class",8,""),o=N(e,"data",8),a=IA(),r=N(e,"scale",8,1),s=N(e,"spin",8,!1),g=N(e,"inverse",8,!1),l=N(e,"pulse",8,!1),C=N(e,"flip",8,void 0),I=N(e,"label",8,""),d=N(e,"style",8,""),B=IA(10),E=IA(10),Q=IA(),f=IA();function b(){var M=1;return r()!==void 0&&(M=Number(r())),isNaN(M)||M<=0?(console.warn('Invalid prop: prop "scale" should be a number over 0.'),1):1*M}function S(){return c(a)?Math.max(c(a).width,c(a).height)/16:1}RA(()=>(G(o()),G(d()),G(r())),()=>{R(a,(function(M){var D;if(M){if(!("definition"in M)){if("iconName"in M&&"icon"in M){M.iconName;var[F,_,,,U]=M.icon;D={width:F,height:_,paths:(Array.isArray(U)?U:[U]).map(J=>({d:J}))}}else D=M[Object.keys(M)[0]];return D}console.error("`import faIconName from '@fortawesome/package-name/faIconName` not supported - Please use `import { faIconName } from '@fortawesome/package-name/faIconName'` instead")}})(o())),d(),r(),R(B,c(a)?c(a).width/S()*b():0),R(E,c(a)?c(a).height/S()*b():0),R(Q,(function(){var M="";d()!==null&&(M+=d());var D=b();return D===1?M.length===0?"":M:(M===""||M.endsWith(";")||(M+="; "),"".concat(M,"font-size: ").concat(D,"em"))})()),R(f,c(a)?"0 0 ".concat(c(a).width," ").concat(c(a).height):"0 0 ".concat(c(B)," ").concat(c(E)))}),kn(),Ai(),(function(M,D){var F=My(D,["children","$$slots","$$events","$$legacy"]),_=My(F,["class","width","height","box","spin","inverse","pulse","flip","style","label"]),U=N(D,"class",8,""),J=N(D,"width",8),j=N(D,"height",8),$=N(D,"box",8,"0 0 0 0"),O=N(D,"spin",8,!1),DA=N(D,"inverse",8,!1),P=N(D,"pulse",8,!1),aA=N(D,"flip",8,"none"),iA=N(D,"style",8,""),BA=N(D,"label",8,""),oA=DSA();Py(oA,()=>{var sA;return ye(ye({version:"1.1",class:"fa-icon ".concat((sA=U())!==null&&sA!==void 0?sA:""),width:J(),height:j(),"aria-label":BA(),role:BA()?"img":"presentation",viewBox:$(),style:iA()},_),{},{[XQ]:{"fa-spin":O(),"fa-pulse":P(),"fa-inverse":DA(),"fa-flip-horizontal":aA()==="horizontal","fa-flip-vertical":aA()==="vertical"}})},void 0,void 0,void 0,"svelte-v67cny"),Ba(CA(oA),D,"default",{},null),cA(M,oA)})(t,e1({get label(){return I()},get width(){return c(B)},get height(){return c(E)},get box(){return c(f)},get style(){return c(Q)},get spin(){return s()},get flip(){return C()},get inverse(){return g()},get pulse(){return l()},get class(){return n()}},()=>i,{children:(M,D)=>{var F=vi();Ba(At(F),e,"default",{},_=>{var U=bSA(),J=At(U);Ea(J,1,()=>(c(a),EA(()=>{var DA;return((DA=c(a))===null||DA===void 0?void 0:DA.paths)||[]})),Ra,(DA,P)=>{var aA=ySA();Py(aA,()=>ye({},c(P))),cA(DA,aA)});var j=bA(J);Ea(j,1,()=>(c(a),EA(()=>{var DA;return((DA=c(a))===null||DA===void 0?void 0:DA.polygons)||[]})),Ra,(DA,P)=>{var aA=vSA();Py(aA,()=>ye({},c(P))),cA(DA,aA)});var $=bA(j),O=DA=>{wSA(DA,{get data(){return c(a)},set data(P){R(a,P)},$$legacy:!0})};TA($,DA=>{c(a),EA(()=>{var P;return(P=c(a))===null||P===void 0?void 0:P.raw})&&DA(O)}),cA(_,U)}),cA(M,F)},$$slots:{default:!0}})),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-boolean-toggle.svelte-eli4ob { + padding: 0; + margin: 1px 0 0; + vertical-align: top; + display: inline-flex; + color: var(--jse-value-color-boolean, #ff8c00); +} + +.jse-boolean-toggle.svelte-eli4ob:not(.jse-readonly) { + cursor: pointer; +}`);var MSA=FA('
    ');function kSA(t,e){St(e,!1);var A=N(e,"path",9),i=N(e,"value",9),n=N(e,"readOnly",9),o=N(e,"onPatch",9),a=N(e,"focus",9);Ai(!0);var r,s=MSA(),g=CA(s),l=tt(()=>i()===!0?bS:MS);Wi(g,{get data(){return c(l)}}),ve(()=>{Mn(s,"aria-checked",i()===!0),r=$t(s,1,"jse-boolean-toggle svelte-eli4ob",null,r,{"jse-readonly":n()}),Mn(s,"title",n()?"Boolean value ".concat(i()):"Click to toggle this boolean value")}),ue("mousedown",s,function(C){C.stopPropagation(),n()||(o()([{op:"replace",path:wt(A()),value:!i()}]),a()())}),cA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup, +.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup .picker_arrow::before, +.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup .picker_arrow::after { + background: var(--jse-color-picker-background, var(--jse-panel-background, #ebebeb)); + line-height: normal; +} +.jse-color-picker-popup.svelte-v77py2 .picker_slider, +.jse-color-picker-popup.svelte-v77py2 .picker_sl, +.jse-color-picker-popup.svelte-v77py2 .picker_editor input, +.jse-color-picker-popup.svelte-v77py2 .picker_sample, +.jse-color-picker-popup.svelte-v77py2 .picker_done button { + box-shadow: var(--jse-color-picker-border-box-shadow, #cbcbcb 0 0 0 1px); +} +.jse-color-picker-popup.svelte-v77py2 .picker_editor input { + background: var(--jse-background-color, #fff); + color: var(--jse-text-color, #4d4d4d); +} +.jse-color-picker-popup.svelte-v77py2 .picker_done button { + background: var(--jse-button-background, #e0e0e0); + color: var(--jse-button-color, var(--jse-text-color, #4d4d4d)); +} +.jse-color-picker-popup.svelte-v77py2 .picker_done button:hover { + background: var(--jse-button-background-highlight, #e7e7e7); +}`);var SSA=FA('
    ');function xSA(t,e){St(e,!1);var A=N(e,"color",8),i=N(e,"onChange",8),n=N(e,"showOnTop",8),o=IA(),a=()=>{};is(Yt(function*(){var s,g=new((s=yield import("./chunk-GLGRLUIJ.js"))===null||s===void 0?void 0:s.default)({parent:c(o),color:A(),popup:n()?"top":"bottom",onDone(l){var C=l.rgba[3]===1?l.hex.substring(0,7):l.hex;i()(C)}});g.show(),a=()=>{g.destroy()}})),Yl(()=>{a()}),Ai();var r=SSA();Ko(r,s=>R(o,s),()=>c(o)),cA(t,r),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-color-picker-button.svelte-13mgyo6 { + font-size: var(--jse-font-size-mono, 14px); + width: var(--jse-color-picker-button-size, 1em); + height: var(--jse-color-picker-button-size, 1em); + box-sizing: border-box; + padding: 0; + margin: 2px 0 0 calc(0.5 * var(--jse-padding, 10px)); + display: inline-flex; + vertical-align: top; + border: 1px solid var(--jse-text-color, #4d4d4d); + border-radius: 2px; + background: inherit; + outline: none; +} + +.jse-color-picker-button.svelte-13mgyo6:not(.jse-readonly) { + cursor: pointer; +}`);var RSA=FA('');function NSA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),{openAbsolutePopup:n}=r1("absolute-popup"),o=N(e,"path",9),a=N(e,"value",9),r=N(e,"readOnly",9),s=N(e,"onPatch",9),g=N(e,"focus",9);function l(B){s()([{op:"replace",path:wt(o()),value:B}]),C()}function C(){g()()}RA(()=>G(a()),()=>{R(A,eoA(a()))}),RA(()=>(G(r()),G(a())),()=>{R(i,r()?"Color ".concat(a()):"Click to open a color picker")}),kn(),Ai(!0);var I,d=RSA();ve(()=>{var B;I=$t(d,1,"jse-color-picker-button svelte-13mgyo6",null,I,{"jse-readonly":r()}),Ul(d,"background: ".concat((B=c(A))!==null&&B!==void 0?B:"")),Mn(d,"title",c(i)),Mn(d,"aria-label",c(i))}),ue("click",d,function(B){var E,Q;if(!r()){var f=B.target,b=f.getBoundingClientRect().top,S=((E=(Q=gm(f))===null||Q===void 0?void 0:Q.innerHeight)!==null&&E!==void 0?E:0)-b<300&&b>300,M={color:a(),onChange:l,showOnTop:S};n(xSA,M,{anchor:f,closeOnOuterClick:!0,onClose:C,offsetTop:18,offsetLeft:-8,height:300})}}),cA(t,d),xt()}var O_=1e3,Pf=100,xy=100,iv=2e4,gh=[{start:0,end:Pf}],FSA=1048576,_SA=1048576,P_=10485760,j_="Insert or paste contents, enter [ insert a new array, enter { to insert a new object, or start typing to insert a new value",$L="Open context menu (Click here, right click on the selection, or use the context menu button or Ctrl+Q)",Gd="hover-insert-inside",Ry="hover-insert-after",liA="hover-collection",q_="valid",ciA="repairable",ZC=336,XC=260,Gf=100,CiA={[Ll.asc]:"ascending",[Ll.desc]:"descending"};function BoA(t){for(var e=mS(t,r=>r.start),A=[e[0]],i=0;i0&&arguments[0]!==void 0?arguments[0]:{expanded:!1};return{type:"array",expanded:t,visibleSections:gh,items:[]}}function tG(){var{expanded:t}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{expanded:!1};return{type:"object",expanded:t,properties:{}}}var iG={createObjectDocumentState:tG,createArrayDocumentState:eG,createValueDocumentState:function(){return{type:"value"}}};function QoA(t,e,A,i){var{createObjectDocumentState:n,createArrayDocumentState:o,createValueDocumentState:a}=i;return(function r(s,g,l){if(Array.isArray(s)){var C=sr(g)?g:o();if(l.length===0)return C;var I=Fr(l[0]),d=r(s[I],C.items[I],l.slice(1));return Or(C,["items",l[0]],d)}if(pn(s)){var B=wg(g)?g:n();if(l.length===0)return B;var E=l[0],Q=r(s[E],B.properties[E],l.slice(1));return Or(B,["properties",E],Q)}return AG(g)?g:a()})(t,e,A)}function Zg(t,e){return jf(t,e,arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],(A,i)=>{if(A!==void 0&&i!==void 0)return Array.isArray(A)?sr(i)?i:eG({expanded:!!eB(i)&&i.expanded}):pn(A)?wg(i)?i:tG({expanded:!!eB(i)&&i.expanded}):AG(i)?i:void 0},()=>!0)}function jf(t,e,A,i,n){var o=i(t,e,A);if(Array.isArray(t)&&sr(o)&&n(o)){var a=[];return nG(t,o.visibleSections,s=>{var g=A.concat(String(s)),l=jf(t[s],o.items[s],g,i,n);l!==void 0&&(a[s]=l)}),iiA(a,o.items)?o:ye(ye({},o),{},{items:a})}if(pn(t)&&wg(o)&&n(o)){var r={};return Object.keys(t).forEach(s=>{var g=A.concat(s),l=jf(t[s],o.properties[s],g,i,n);l!==void 0&&(r[s]=l)}),iiA(Object.values(r),Object.values(o.properties))?o:ye(ye({},o),{},{properties:r})}return o}function nG(t,e,A){e.forEach(i=>{var{start:n,end:o}=i;toA(n,Math.min(t.length,o),A)})}function qf(t,e){for(var A=t,i=[],n=0;n{var C=eB(l)&&!l.expanded?ye(ye({},l),{},{expanded:!0}):l;return sr(C)?(function(I,d){if((function(Q,f){return Q.some(b=>f>=b.start&&f(function(g,l,C,I){return jf(g,l,C,(d,B,E)=>Array.isArray(d)&&I(E)?sr(B)?B.expanded?B:ye(ye({},B),{},{expanded:!0}):eG({expanded:!0}):pn(d)&&I(E)?wg(B)?B.expanded?B:ye(ye({},B),{},{expanded:!0}):tG({expanded:!0}):B,d=>eB(d)&&d.expanded)})(r,s,[],i))}function uiA(t,e,A,i){return mh(t,e,A,(n,o)=>i?(function(a,r,s){return jf(a,r,s,(g,l)=>fiA(l),()=>!0)})(n,o,A):fiA(o))}function fiA(t){return sr(t)&&t.expanded?ye(ye({},t),{},{expanded:!1,visibleSections:gh}):wg(t)&&t.expanded?ye(ye({},t),{},{expanded:!1}):t}function hoA(t,e,A){var i={json:t,documentState:e},n=A.reduce((o,a)=>({json:lg(o.json,[a]),documentState:JSA(o.json,o.documentState,a)}),i);return{json:n.json,documentState:Zg(n.json,n.documentState)}}function JSA(t,e,A){if(jk(A))return miA(t,e,A,void 0);if(qk(A))return piA(t,e,A);if(sw(A)){var i=cg(t,A.path),n=z0(t,e,i);return n?Dv(t,e,i,{type:"value",enforceString:n}):e}return gw(A)||Z2(A)?(function(o,a,r){if(Z2(r)&&r.from===r.path)return a;var s=a,g=cg(o,r.from),l=J0(o,s,g);return Z2(r)&&(s=piA(o,s,{path:r.from})),s=miA(o,s,{path:r.path},l),s})(t,e,A):e}function J0(t,e,A){try{return je(e,qf(t,A))}catch{return}}function oG(t,e,A,i,n){var o=QoA(t,e,A,n);return O4(o,qf(t,A),a=>{var r=je(t,A);return i(r,a)})}function Dv(t,e,A,i){return(function(n,o,a,r,s){var g=QoA(n,o,a,s);return Or(g,qf(n,a),r)})(t,e,A,i,iG)}function mh(t,e,A,i){return oG(t,e,A,i,iG)}function miA(t,e,A,i){var n=cg(t,A.path),o=e;return o=mh(t,o,Ki(n),(a,r)=>{if(!sr(r))return r;var s=Fr(mi(n)),{items:g,visibleSections:l}=r;return ye(ye({},r),{},{items:s{if(!sr(r))return r;var s=Fr(mi(i)),{items:g,visibleSections:l}=r;return ye(ye({},r),{},{items:g.slice(0,s).concat(g.slice(s+1)),visibleSections:uoA(l,s,-1)})}):(function(a,r,s){var g=qf(a,s);return br(r,g)?Ad(r,qf(a,s)):r})(t,e,i)}function uoA(t,e,A){return(function(i){for(var n=i.slice(0),o=1;o({start:i.start>e?i.start+A:i.start,end:i.end>e?i.end+A:i.end})))}function z0(t,e,A){var i,n=je(t,A),o=J0(t,e,A),a=AG(o)?o.enforceString:void 0;return typeof a=="boolean"?a:typeof(i=n)=="string"&&typeof Rh(i,JSON)!="string"}function cm(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=t.indexOf(e);return i!==-1?A?t.slice(i):t.slice(i+1):[]}function aG(t,e){var A=[];return(function i(n,o,a){A.push(a),jo(n)&&sr(o)&&o.expanded&&nG(n,o.visibleSections,r=>{i(n[r],o.items[r],a.concat(String(r)))}),ia(n)&&wg(o)&&o.expanded&&Object.keys(n).forEach(r=>{i(n[r],o.properties[r],a.concat(r))})})(t,e,[]),A}function foA(t,e){var A=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],i=[];return(function n(o,a){i.push({path:a,type:Kc.value});var r=J0(t,e,a);if(o&&eB(r)&&r.expanded){if(A&&i.push({path:a,type:Kc.inside}),jo(o)){var s=sr(r)?r.visibleSections:gh;nG(o,s,g=>{var l=a.concat(String(g));n(o[g],l),A&&i.push({path:l,type:Kc.after})})}ia(o)&&Object.keys(o).forEach(g=>{var l=a.concat(g);i.push({path:l,type:Kc.key}),n(o[g],l),A&&i.push({path:l,type:Kc.after})})}})(t,[]),i}function V_(t,e,A){var i=aG(t,e),n=i.map(wt).indexOf(wt(A));if(n!==-1&&n3&&arguments[3]!==void 0?arguments[3]:10240;return Gc(t,e,A,nSA({json:je(t,A)},i)?Kf:rG)}function W_(t,e,A){var i=J0(t,e,A);return eB(i)&&i.expanded?e:tB(t,e,A)}function Kf(t){return t.length===0||t.length===1&&t[0]==="0"}function wL(t){return t.length===0}function rG(){return!0}function qy(){return!1}function yg(t){return t&&t.type===no.after||!1}function Ar(t){return t&&t.type===no.inside||!1}function gr(t){return t&&t.type===no.key||!1}function In(t){return t&&t.type===no.value||!1}function lo(t){return t&&t.type===no.multi||!1}function yv(t){return lo(t)&&Bi(t.focusPath,t.anchorPath)}function Vf(t){return lo(t)||yg(t)||Ar(t)||gr(t)||In(t)}function Z_(t){return t&&t.type===no.text||!1}function o1(t,e){var A=[];return(function(i,n,o){if(n){var a=jd(n),r=lt(n);if(Bi(a,r))return o(a);if(i!==void 0){var s=poA(a,r);if(a.length===s.length||r.length===s.length)return o(s);var g=ys(a,r),l=$C(i,g),C=i1(i,g),I=n2(i,g,l),d=n2(i,g,C);if(!(I===-1||d===-1)){var B=je(i,s);if(ia(B)){for(var E=Object.keys(B),Q=I;Q<=d;Q++){var f=o(s.concat(E[Q]));if(f!==void 0)return f}return}if(jo(B)){for(var b=I;b<=d;b++){var S=o(s.concat(String(b)));if(S!==void 0)return S}return}throw new Error("Failed to create selection")}}}})(t,e,i=>{A.push(i)}),A}function moA(t){return Ar(t)?t.path:Ki(lt(t))}function $C(t,e){if(!lo(e))return e.path;var A=n2(t,e,e.anchorPath);return n2(t,e,e.focusPath)A?e.focusPath:e.anchorPath}function wiA(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(A){var n=i?lt(A):$C(t,A),o=(function(s,g,l){var C=aG(s,g),I=C.map(wt),d=wt(l),B=I.indexOf(d);if(B!==-1&&B>0)return C[B-1]})(t,e,n);if(i)return Ar(A)||yg(A)?o!==void 0?ys(n,n):void 0:o!==void 0?ys(jd(A),o):void 0;if(yg(A)||Ar(A))return Ui(n);if(gr(A)){if(o===void 0||o.length===0)return;var a=Ki(o),r=je(t,a);return Array.isArray(r)||Vi(o)?Ui(o):s2(o)}return In(A),o!==void 0?Ui(o):void 0}}function DiA(t,e,A,i){if(!A)return{caret:void 0,previous:void 0,next:void 0};var n=foA(t,e,i),o=n.findIndex(a=>Bi(a.path,lt(A))&&String(a.type)===String(A.type));return{caret:o!==-1?n[o]:void 0,previous:o!==-1&&o>0?n[o-1]:void 0,next:o!==-1&&oA[i].length;)i++;var n=A[i];return n===void 0||n.length===0||Array.isArray(je(t,Ki(n)))?Ui(n):s2(n)}function ph(t,e){if(e.length===1){var A=pl(e);if(A.op==="replace")return Ui(cg(t,A.path))}if(!Vi(e)&&e.every(a=>a.op==="move")){var i=pl(e),n=e.slice(1);if((gw(i)||Z2(i))&&i.from!==i.path&&n.every(a=>(gw(a)||Z2(a))&&a.from===a.path))return s2(cg(t,i.path))}var o=e.filter(a=>a.op!=="test"&&a.op!=="remove"&&(a.op!=="move"||a.from!==a.path)&&typeof a.path=="string").map(a=>cg(t,a.path));if(!Vi(o))return{type:no.multi,anchorPath:pl(o),focusPath:mi(o)}}function poA(t,e){for(var A=0;AA.length&&e.length>A.length;return{type:no.multi,anchorPath:i?A.concat(t[A.length]):A,focusPath:i?A.concat(e[A.length]):A}}function woA(t,e,A,i){if(gr(e))return String(mi(e.path));if(In(e)){var n=je(t,e.path);return typeof n=="string"?n:i.stringify(n,null,A)}if(lo(e)){if(Vi(e.focusPath))return i.stringify(t,null,A);var o=moA(e),a=je(t,o);if(Array.isArray(a)){if(yv(e)){var r=je(t,e.focusPath);return i.stringify(r,null,A)}return o1(t,e).map(s=>{var g=je(t,s);return"".concat(i.stringify(g,null,A),",")}).join(` +`)}return o1(t,e).map(s=>{var g=mi(s),l=je(t,s);return"".concat(i.stringify(g),": ").concat(i.stringify(l,null,A),",")}).join(` +`)}}function rr(t){return(gr(t)||In(t))&&t.edit===!0}function ih(t){return gr(t)||In(t)||lo(t)}function Ny(t){return gr(t)||In(t)||yv(t)}function DL(t){switch(t.type){case Kc.key:return s2(t.path);case Kc.value:return Ui(t.path);case Kc.after:return i2(t.path);case Kc.inside:return g2(t.path)}}function viA(t,e){switch(t){case no.key:return s2(e);case no.value:return Ui(e);case no.after:return i2(e);case no.inside:return g2(e);case no.multi:case no.text:return ys(e,e)}}function Fy(t,e,A){if(e)return Wf(t,e,A)||q0(lo(e)?Ki(e.focusPath):e.path,A)?e:void 0}function Wf(t,e,A){if(t===void 0||!e)return!1;if(gr(e)||Ar(e)||yg(e))return Bi(e.path,A);if(In(e))return q0(A,e.path);if(lo(e)){var i=$C(t,e),n=i1(t,e),o=Ki(e.focusPath);if(!q0(A,o)||A.length<=o.length)return!1;var a=n2(t,e,i),r=n2(t,e,n),s=n2(t,e,A);return s!==-1&&s>=a&&s<=r}return!1}function n2(t,e,A){var i=Ki(e.focusPath);if(!q0(A,i)||A.length<=i.length)return-1;var n=A[i.length],o=je(t,i);if(ia(o))return Object.keys(o).indexOf(n);if(jo(o)){var a=Fr(n);if(a');function yoA(t,e){St(e,!1);var A=lr("jsoneditor:EditableDiv"),i=N(e,"value",9),n=N(e,"initialValue",9),o=N(e,"shortText",9,!1),a=N(e,"label",9),r=N(e,"onChange",9),s=N(e,"onCancel",9),g=N(e,"onFind",9),l=N(e,"onPaste",9,pa),C=N(e,"onValueClass",9,()=>""),I=IA(void 0,!0),d=IA(void 0,!0),B=!1;function E(){return c(I)?(function(b){return b.replace(/\n$/,"")})(c(I).innerText):""}function Q(b){c(I)&&Xg(I,c(I).innerText=fh(b))}is(()=>{A("onMount",{value:i(),initialValue:n()}),Q(n()!==void 0?n():i()),c(I)&&(function(b){if(b.firstChild!=null){var S=document.createRange(),M=window.getSelection();S.setStart(b,1),S.collapse(!0),M?.removeAllRanges(),M?.addRange(S)}else b.focus()})(c(I))}),Yl(()=>{var b=E();A("onDestroy",{closed:B,value:i(),newValue:b}),B||b===i()||r()(b,t1.no)}),RA(()=>(G(C()),G(i())),()=>{R(d,C()(i()))}),kn(),Ai(!0);var f=YSA();Ko(f,b=>R(I,b),()=>c(I)),ve(b=>{Mn(f,"aria-label",a()),$t(f,1,b,"svelte-1r0oryi")},[()=>n1((G(Oc),c(d),G(o()),EA(()=>Oc("jse-editable-div",c(d),{"jse-short-text":o()}))))]),ue("input",f,function(){var b=E();b===""&&Q(""),R(d,C()(b))}),ue("keydown",f,function(b){b.stopPropagation();var S=r2(b);if(S==="Escape"&&(b.preventDefault(),B=!0,s()()),S==="Enter"||S==="Tab"){b.preventDefault(),B=!0;var M=E();r()(M,t1.nextInside)}S==="Ctrl+F"&&(b.preventDefault(),g()(!1)),S==="Ctrl+H"&&(b.preventDefault(),g()(!0))}),ue("paste",f,function(b){if(b.stopPropagation(),l()&&b.clipboardData){var S=b.clipboardData.getData("text/plain");l()(S)}}),ue("blur",f,function(){var b=document.hasFocus(),S=E();A("handleBlur",{hasFocus:b,closed:B,value:i(),newValue:S}),document.hasFocus()&&!B&&(B=!0,S!==i()&&r()(S,t1.self))}),cA(t,f),xt()}function TSA(t,e){St(e,!1);var A=N(e,"path",9),i=N(e,"value",9),n=N(e,"selection",9),o=N(e,"mode",9),a=N(e,"parser",9),r=N(e,"normalization",9),s=N(e,"enforceString",9),g=N(e,"onPatch",9),l=N(e,"onPasteJson",9),C=N(e,"onSelect",9),I=N(e,"onFind",9),d=N(e,"focus",9),B=N(e,"findNextInside",9);function E(S){return s()?S:Rh(S,a())}function Q(){C()(Ui(A())),d()()}Ai(!0);var f=tt(()=>(G(r()),G(i()),EA(()=>r().escapeValue(i())))),b=tt(()=>(G(rr),G(n()),EA(()=>rr(n())?n().initialValue:void 0)));yoA(t,{get value(){return c(f)},get initialValue(){return c(b)},label:"Edit value",onChange:function(S,M){g()([{op:"replace",path:wt(A()),value:E(r().unescapeValue(S))}],(D,F,_)=>{if(!_||Bi(A(),lt(_)))return{state:F,selection:M===t1.nextInside?B()(A()):Ui(A())}}),d()()},onCancel:Q,onPaste:function(S){try{var M=a().parse(S);aa(M)&&l()({path:A(),contents:M,onPasteAsJson:()=>{Q();var D=[{op:"replace",path:wt(A()),value:M}];g()(D,(F,_)=>({state:tB(F,_,A())}))}})}catch{}},get onFind(){return I()},onValueClass:function(S){return DoA(E(r().unescapeValue(S)),o(),a())}}),xt()}function nh(t,e,A){var i=Ki(e),n=je(t,i);if(jo(n)){var o=Fr(mi(e));return A.map((g,l)=>({op:"add",path:wt(i.concat(String(o+l))),value:g.value}))}if(ia(n)){var a=mi(e),r=Object.keys(n),s=a!==void 0?cm(r,a,!0):[];return[...A.map(g=>{var l=lm(g.key,r);return{op:"add",path:wt(i.concat(l)),value:g.value}}),...s.map(g=>a1(i,g))]}throw new Error("Cannot create insert operations: parent must be an Object or Array")}function yL(t,e,A){var i=je(t,e);if(Array.isArray(i)){var n=i.length;return A.map((o,a)=>({op:"add",path:wt(e.concat(String(n+a))),value:o.value}))}return A.map(o=>{var a=lm(o.key,Object.keys(i));return{op:"add",path:wt(e.concat(a)),value:o.value}})}function Cm(t,e,A,i){var n=e.filter(r=>r!==A),o=lm(i,n),a=cm(e,A,!1);return[{op:"move",from:wt(t.concat(A)),path:wt(t.concat(o))},...a.map(r=>a1(t,r))]}function voA(t,e){var A=mi(e);if(Vi(A))throw new Error("Cannot duplicate root object");var i=Ki(A),n=mi(A),o=je(t,i);if(jo(o)){var a=mi(e),r=a?Fr(mi(a))+1:0;return[...e.map((l,C)=>({op:"copy",from:wt(l),path:wt(i.concat(String(C+r)))}))]}if(ia(o)){var s=Object.keys(o),g=n!==void 0?cm(s,n,!1):[];return[...e.map(l=>{var C=lm(mi(l),s);return{op:"copy",from:wt(l),path:wt(i.concat(C))}}),...g.map(l=>a1(i,l))]}throw new Error("Cannot create duplicate operations: parent must be an Object or Array")}function boA(t,e){if(In(e))return[{op:"move",from:wt(e.path),path:""}];if(!lo(e))throw new Error("Cannot create extract operations: parent must be an Object or Array");var A=Ki(e.focusPath),i=je(t,A);if(jo(i)){var n=o1(t,e).map(a=>{var r=Fr(mi(a));return i[r]});return[{op:"replace",path:"",value:n}]}if(ia(i)){var o={};return o1(t,e).forEach(a=>{var r=String(mi(a));o[r]=i[r]}),[{op:"replace",path:"",value:o}]}throw new Error("Cannot extract: unsupported type of selection "+JSON.stringify(e))}function MoA(t,e,A,i){if(gr(e)){var n=ioA(A,i),o=Ki(e.path),a=je(t,o);return Cm(o,Object.keys(a),mi(e.path),typeof n=="string"?n:A)}if(In(e)||lo(e)&&Vi(e.focusPath))try{return[{op:"replace",path:wt(lt(e)),value:sm(A,F=>rm(F,i))}]}catch{return[{op:"replace",path:wt(lt(e)),value:A}]}if(lo(e)){var r=X_(A,i);return(function(F,_,U){var J=pl(_),j=Ki(J),$=je(F,j);if(jo($)){var O=pl(_),DA=O?Fr(mi(O)):0;return[...sv(_),...U.map((YA,ee)=>({op:"add",path:wt(j.concat(String(ee+DA))),value:YA.value}))]}if(ia($)){var P=mi(_),aA=Ki(P),iA=mi(P),BA=Object.keys($),oA=iA!==void 0?cm(BA,iA,!1):[],sA=new Set(_.map(YA=>mi(YA))),hA=BA.filter(YA=>!sA.has(YA));return[...sv(_),...U.map(YA=>{var ee=lm(YA.key,hA);return{op:"add",path:wt(aA.concat(ee)),value:YA.value}}),...oA.map(YA=>a1(aA,YA))]}throw new Error("Cannot create replace operations: parent must be an Object or Array")})(t,o1(t,e),r)}if(yg(e)){var s=X_(A,i),g=e.path,l=Ki(g),C=je(t,l);if(jo(C)){var I=Fr(mi(g));return nh(t,l.concat(String(I+1)),s)}if(ia(C)){var d=String(mi(g)),B=Object.keys(C);if(Vi(B)||mi(B)===d)return yL(t,l,s);var E=B.indexOf(d),Q=B[E+1];return nh(t,l.concat(Q),s)}throw new Error("Cannot create insert operations: parent must be an Object or Array")}if(Ar(e)){var f=X_(A,i),b=e.path,S=je(t,b);if(jo(S))return nh(t,b.concat("0"),f);if(ia(S)){var M=Object.keys(S);if(Vi(M))return yL(t,b,f);var D=pl(M);return nh(t,b.concat(D),f)}throw new Error("Cannot create insert operations: parent must be an Object or Array")}throw new Error("Cannot insert: unsupported type of selection "+JSON.stringify(e))}function sv(t){return t.map(e=>({op:"remove",path:wt(e)})).reverse()}function a1(t,e){return{op:"move",from:wt(t.concat(e)),path:wt(t.concat(e))}}function X_(t,e){var A=/^\s*{/.test(t),i=/^\s*\[/.test(t),n=ioA(t,e),o=n!==void 0?n:sm(t,a=>rm(a,e));return A&&pn(o)||i&&Array.isArray(o)?[{key:"New item",value:o}]:Array.isArray(o)?o.map((a,r)=>({key:"New item "+r,value:a})):pn(o)?Object.keys(o).map(a=>({key:a,value:o[a]})):[{key:"New item",value:o}]}function koA(t,e){if(gr(e)){var A=Ki(e.path),i=je(t,A),n=Cm(A,Object.keys(i),mi(e.path),"");return{operations:n,newSelection:ph(t,n)}}if(In(e))return{operations:[{op:"replace",path:wt(e.path),value:""}],newSelection:e};if(lo(e)){var o=o1(t,e),a=sv(o),r=mi(o);if(Vi(r))return{operations:[{op:"replace",path:"",value:""}],newSelection:Ui([])};var s=Ki(r),g=je(t,s);if(jo(g)){var l=pl(o),C=Fr(mi(l));return{operations:a,newSelection:C===0?g2(s):i2(s.concat(String(C-1)))}}if(ia(g)){var I=Object.keys(g),d=pl(o),B=mi(d),E=I.indexOf(B),Q=I[E-1];return{operations:a,newSelection:E===0?g2(s):i2(s.concat(Q))}}throw new Error("Cannot create remove operations: parent must be an Object or Array")}throw new Error("Cannot remove: unsupported type of selection "+JSON.stringify(e))}function SoA(t,e){var A=(function(i,n){if(Vi(n)||!n.every(Z2))return n;var o=[];for(var a of n){var r=biA(hs(a.from)),s=biA(hs(a.path));if(!r||!s)return n;o.push({from:r,path:s,operation:a})}var g=o[0].path.parent,l=je(i,g);if(!ia(l)||!o.every(B=>(function(E,Q){return Bi(E.from.parent,Q)&&Bi(E.path.parent,Q)})(B,g)))return n;var C=(function(B,E){var Q=Object.keys(E),f=Q.slice();for(var b of B){var S=f.indexOf(b.from.key);S!==-1&&(f.splice(S,1),f.push(b.path.key))}for(var M=0;MB.operation,d=o.filter(B=>B.operation.from!==B.operation.path);return d.some(B=>B.path.key===C)?d.map(I):[a1(g,C),...d.map(I)]})(t,e);return lw(t,A,{before:(i,n,o)=>{if(qk(n)){var a=hs(n.path);return{revertOperations:[...o,...$_(i,a)]}}if(Z2(n)){var r=hs(n.from);return{revertOperations:n.from===n.path?[n,...$_(i,r)]:[...o,...$_(i,r)]}}return{document:i}}})}function biA(t){return t.length>0?{parent:Ki(t),key:mi(t)}:void 0}function $_(t,e){var A=Ki(e),i=mi(e),n=je(t,A);return ia(n)?cm(Object.keys(n),i,!1).map(o=>a1(A,o)):[]}function MiA(t){var e=t.activeIndex0?0:-1,A=t.items[e],i=t.items.map((n,o)=>ye(ye({},n),{},{active:o===e}));return ye(ye({},t),{},{items:i,activeItem:A,activeIndex:e})}function kiA(t,e){var A,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=t.toLowerCase(),o=(A=i?.maxResults)!==null&&A!==void 0?A:1/0,a=i?.columns,r=[],s=[];function g(Q){r.length>=o||r.push(Q)}function l(Q,f){if(jo(f)){var b=s.length;s.push("0");for(var S=0;S=o)return;s.pop()}else if(ia(f)){var M=Object.keys(f),D=s.length;for(var F of(s.push(""),M))if(s[D]=F,SiA(F,Q,s,Jc.key,g),l(Q,f[F]),r.length>=o)return;s.pop()}else SiA(String(f),Q,s,Jc.value,g)}if(t==="")return[];if(a){if(!Array.isArray(e))throw new Error("json must be an Array when option columns is defined");for(var C=0;CB.length+1;)s.pop();l(n,je(I,B))}if(r.length>=o)break}return r}return l(n,e),r}function SiA(t,e,A,i,n){var o=t.toLowerCase(),a=0,r=-1,s=-1;do(s=o.indexOf(e,r))!==-1&&(r=s+e.length,n({path:A.slice(0),field:i,fieldIndex:a,start:s,end:r}),a++);while(s!==-1)}function vL(t,e,A,i){return t.substring(0,A)+e+t.substring(i)}function xiA(t,e,A){var i=t;return ES(A,n=>{i=vL(i,e,n.start,n.end)}),i}function HSA(t,e,A,i,n){var{field:o,path:a,start:r,end:s}=i;if(o===Jc.key){var g=Ki(a),l=je(t,g),C=mi(a),I=Cm(g,Object.keys(l),C,vL(C,A,r,s));return{newSelection:ph(t,I),operations:I}}if(o===Jc.value){var d=je(t,a);if(d===void 0)throw new Error("Cannot replace: path not found ".concat(wt(a)));var B=typeof d=="string"?d:String(d),E=z0(t,e,a),Q=vL(B,A,r,s),f=[{op:"replace",path:wt(a),value:E?Q:Rh(Q,n)}];return{newSelection:ph(t,f),operations:f}}throw new Error("Cannot replace: unknown type of search result field ".concat(o))}function RiA(t){return t.path.concat(t.field,String(t.fieldIndex))}function NiA(t){var e=EoA(t)?t.searchResults.filter(A=>A.field===Jc.key):void 0;return e&&e.length>0?e:void 0}function FiA(t){var e=EoA(t)?t.searchResults.filter(A=>A.field===Jc.value):void 0;return e&&e.length>0?e:void 0}var zSA={createObjectDocumentState:()=>({type:"object",properties:{}}),createArrayDocumentState:()=>({type:"array",items:[]}),createValueDocumentState:()=>({type:"value"})};function xoA(t,e){return e.reduce((A,i)=>(function(n,o,a,r){return oG(n,o,a,r,zSA)})(t,A,i.path,(n,o)=>ye(ye({},o),{},{searchResults:o.searchResults?o.searchResults.concat(i):[i]})),void 0)}function gv(t){var e,A=(e=t?.searchResults)!==null&&e!==void 0?e:[],i=wg(t)?Object.values(t.properties).flatMap(gv):sr(t)?t.items.flatMap(gv):[];return A.concat(i)}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-highlight.svelte-19qyvy6 { + background-color: var(--jse-search-match-color, #ffe665); + outline: var(--jse-search-match-outline, none); +} +.jse-highlight.jse-active.svelte-19qyvy6 { + background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); + outline: var(--jse-search-match-outline, 2px solid #e0be00); +}`);var OSA=FA(" ");function RoA(t,e){St(e,!1);var A=IA(),i=N(e,"text",8),n=N(e,"searchResultItems",8);RA(()=>(G(i()),G(n())),()=>{R(A,(function(a,r){var s=[],g=0;for(var l of r){var C=a.slice(g,l.start);C!==""&&s.push({resultIndex:void 0,type:"normal",text:C,active:!1});var I=a.slice(l.start,l.end);s.push({resultIndex:l.resultIndex,type:"highlight",text:I,active:l.active}),g=l.end}var d=mi(r);return d&&d.endc(A),Ra,(a,r)=>{var s=vi(),g=At(s),l=I=>{var d=hr();ve(()=>Rt(d,(c(r),EA(()=>c(r).text)))),cA(I,d)},C=I=>{var d,B=OSA(),E=CA(B);ve((Q,f)=>{d=$t(B,1,"jse-highlight svelte-19qyvy6",null,d,{"jse-active":c(r).active}),Mn(B,"data-search-result-index",Q),Rt(E,f)},[()=>(c(r),EA(()=>String(c(r).resultIndex))),()=>(G(fh),c(r),EA(()=>fh(c(r).text)))]),cA(I,B)};TA(g,I=>{c(r),EA(()=>c(r).type==="normal")?I(l):I(C,!1)}),cA(a,s)}),cA(t,o),xt()}function Vy(t){var e=1e3;if(t<900)return t.toFixed()+" B";var A=t/e;if(A<900)return A.toFixed(1)+" KB";var i=A/e;if(i<900)return i.toFixed(1)+" MB";var n=i/e;return n<900?n.toFixed(1)+" GB":(n/e).toFixed(1)+" TB"}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-tag.svelte-ubve9r { + border: none; + font-size: 80%; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + color: var(--jse-tag-color, var(--jse-text-color-inverse, #fff)); + background: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + border-radius: 2px; + cursor: pointer; + display: inline-block; + padding: 0 4px; + line-height: normal; + margin: 1px 0; +} +.jse-tag.svelte-ubve9r:hover { + opacity: 0.8; +} +.jse-tag.disabled.svelte-ubve9r { + opacity: 0.7; + cursor: inherit; +}`);var PSA=FA('');function Wy(t,e){St(e,!0);var A,i=Dg(()=>e.onclick?o=>{o.preventDefault(),o.stopPropagation(),e.onclick()}:void 0),n=PSA();n.__click=function(){for(var o,a=arguments.length,r=new Array(a),s=0;s2?r-2:0),g=2;g{var C,I=(C=a())!==null&&C!==void 0?C:null;l.ensure(I,I&&(d=>I(d,...s)))},Vd)})(CA(n),()=>{var o;return(o=e.children)!==null&&o!==void 0?o:ukA}),ve(()=>A=$t(n,1,"jse-tag svelte-ubve9r",null,A,{disabled:!e.onclick})),cA(t,n),xt()}am(["click"]);qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-value.jse-string.svelte-1saqp8c { + color: var(--jse-value-color-string, #008000); +} +.jse-value.jse-object.svelte-1saqp8c, .jse-value.jse-array.svelte-1saqp8c { + min-width: 16px; + color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); +} +.jse-value.jse-number.svelte-1saqp8c { + color: var(--jse-value-color-number, #ee422e); +} +.jse-value.jse-boolean.svelte-1saqp8c { + color: var(--jse-value-color-boolean, #ff8c00); +} +.jse-value.jse-null.svelte-1saqp8c { + color: var(--jse-value-color-null, #004ed0); +} +.jse-value.jse-invalid.svelte-1saqp8c { + color: var(--jse-text-color, #4d4d4d); +} +.jse-value.jse-url.svelte-1saqp8c { + color: var(--jse-value-color-url, #008000); + text-decoration: underline; +} + +.jse-value.svelte-1saqp8c { + display: inline-block; + min-width: 2em; + padding: 0 5px; + box-sizing: border-box; + outline: none; + border-radius: 1px; + vertical-align: top; + word-break: normal; + overflow-wrap: anywhere; + white-space: pre-wrap; +} +.jse-value.jse-table-cell.svelte-1saqp8c { + overflow-wrap: normal; + white-space: nowrap; +} +.jse-value.jse-empty.svelte-1saqp8c { + min-width: 4em; + outline: 1px dotted var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + -moz-outline-radius: 2px; +} +.jse-value.jse-empty.svelte-1saqp8c::after { + pointer-events: none; + color: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + content: "value"; +}`);var jSA=FA('
    ');function qSA(t,e){St(e,!0);var A=OC(!0),i=Dg(()=>c(A)&&typeof e.value=="string"&&e.value.length>e.truncateTextSize&&(!e.searchResultItems||!e.searchResultItems.some(d=>d.active&&d.end>e.truncateTextSize))),n=Dg(()=>c(i)&&typeof e.value=="string"?e.value.substring(0,e.truncateTextSize).trim():e.value),o=Dg(()=>wv(e.value));function a(){R(A,!1)}var r=jSA();r.__click=function(d){typeof e.value=="string"&&c(o)&&XL(d)&&(d.preventDefault(),d.stopPropagation(),window.open(e.value,"_blank"))},r.__dblclick=function(d){e.readOnly||(d.preventDefault(),e.onSelect(rv(e.path)))};var s=CA(r),g=d=>{var B=Dg(()=>e.normalization.escapeValue(c(n)));RoA(d,{get text(){return c(B)},get searchResultItems(){return e.searchResultItems}})},l=d=>{var B=hr();ve(E=>Rt(B,E),[()=>fh(e.normalization.escapeValue(c(n)))]),cA(d,B)};TA(s,d=>{e.searchResultItems?d(g):d(l,!1)});var C=bA(s,2),I=d=>{Wy(d,{onclick:a,children:(B,E)=>{var Q=hr();ve(f=>Rt(Q,"Show more (".concat(f??"",")")),[()=>Vy(e.value.length)]),cA(B,Q)},$$slots:{default:!0}})};TA(C,d=>{c(i)&&typeof e.value=="string"&&d(I)}),ve(d=>{$t(r,1,d,"svelte-1saqp8c"),Mn(r,"title",c(o)?"Ctrl+Click or Ctrl+Enter to open url in new window":void 0)},[()=>n1(DoA(e.value,e.mode,e.parser))]),cA(t,r),xt()}am(["click","dblclick"]);qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-tooltip.svelte-brt1mq { + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + line-height: normal; + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); + border-radius: 3px; + background: var(--jse-context-menu-background, #656565); + color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); + white-space: nowrap; + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); +}`);var VSA=FA('
    ');function WSA(t,e){var A=N(e,"text",8),i=VSA(),n=CA(i);ve(()=>Rt(n,A())),cA(t,i)}function wh(t,e){var A,{text:i,openAbsolutePopup:n,closeAbsolutePopup:o}=e;function a(){A=n(WSA,{text:i},{position:"top",width:10*i.length,offsetTop:3,anchor:t,closeOnOuterClick:!0})}function r(){o(A)}return t.addEventListener("mouseenter",a),t.addEventListener("mouseleave",r),{destroy(){t.removeEventListener("mouseenter",a),t.removeEventListener("mouseleave",r)}}}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-timestamp.svelte-1jcpman { + padding: 0; + margin: 0; + vertical-align: middle; + display: inline-flex; + color: var(--jse-value-color-number, #ee422e); +}`);var ZSA=FA('
    ');function XSA(t,e){St(e,!1);var A=IA(void 0,!0),i=r1("absolute-popup"),n=N(e,"value",9);RA(()=>G(n()),()=>{R(A,"Time: ".concat(new Date(n()).toString()))}),kn(),Ai(!0);var o=ZSA();Wi(CA(o),{get data(){return Pq}}),bs(o,(a,r)=>wh?.(a,r),()=>ye({text:c(A)},i)),cA(t,o),xt()}function $SA(t){var e=[];return!t.isEditing&&XkA(t.value)&&e.push({component:kSA,props:t}),!t.isEditing&&$kA(t.value)&&e.push({component:NSA,props:t}),t.isEditing&&e.push({component:TSA,props:t}),t.isEditing||e.push({component:qSA,props:t}),!t.isEditing&&EL(t.value)&&e.push({component:XSA,props:t}),e}function vg(t){return t.map((e,A)=>exA.test(e)?"["+e+"]":/[.[\]]/.test(e)||e===""?'["'+(function(i){return i.replace(/"/g,'\\"')})(e)+'"]':(A>0?".":"")+e).join("")}function AxA(t){for(var e=[],A=0;Ao==='"',!0)),n('"')):e.push(i(o=>o==="]")),n("]")):e.push(i(o=>o==="."||o==="["));function i(o){for(var a=arguments.length>1&&arguments[1]!==void 0&&arguments[1],r="";A({x:t,y:t}),nxA={left:"right",right:"left",bottom:"top",top:"bottom"},oxA={start:"end",end:"start"};function _iA(t,e,A){return qd(t,lv(e,A))}function vv(t,e){return typeof t=="function"?t(e):t}function iB(t){return t.split("-")[0]}function bv(t){return t.split("-")[1]}function NoA(t){return t==="x"?"y":"x"}function FoA(t){return t==="y"?"height":"width"}var axA=new Set(["top","bottom"]);function WI(t){return axA.has(iB(t))?"y":"x"}function _oA(t){return NoA(WI(t))}function bL(t){return t.replace(/start|end/g,e=>oxA[e])}var LiA=["left","right"],GiA=["right","left"],rxA=["top","bottom"],sxA=["bottom","top"];function gxA(t,e,A,i){var n=bv(t),o=(function(a,r,s){switch(a){case"top":case"bottom":return s?r?GiA:LiA:r?LiA:GiA;case"left":case"right":return r?rxA:sxA;default:return[]}})(iB(t),A==="start",i);return n&&(o=o.map(a=>a+"-"+n),e&&(o=o.concat(o.map(bL)))),o}function Ly(t){return t.replace(/left|right|bottom|top/g,e=>nxA[e])}function lxA(t){return typeof t!="number"?(function(e){return ye({top:0,right:0,bottom:0,left:0},e)})(t):{top:t,right:t,bottom:t,left:t}}function Cv(t){var{x:e,y:A,width:i,height:n}=t;return{width:i,height:n,top:A,left:e,right:e+i,bottom:A+n,x:e,y:A}}function KiA(t,e,A){var i,{reference:n,floating:o}=t,a=WI(e),r=_oA(e),s=FoA(r),g=iB(e),l=a==="y",C=n.x+n.width/2-o.width/2,I=n.y+n.height/2-o.height/2,d=n[s]/2-o[s]/2;switch(g){case"top":i={x:C,y:n.y-o.height};break;case"bottom":i={x:C,y:n.y+n.height};break;case"right":i={x:n.x+n.width,y:I};break;case"left":i={x:n.x-o.width,y:I};break;default:i={x:n.x,y:n.y}}switch(bv(e)){case"start":i[r]-=d*(A&&l?-1:1);break;case"end":i[r]+=d*(A&&l?-1:1)}return i}var cxA=(function(){var t=Yt(function*(e,A,i){for(var{placement:n="bottom",strategy:o="absolute",middleware:a=[],platform:r}=i,s=a.filter(Boolean),g=yield r.isRTL==null?void 0:r.isRTL(A),l=yield r.getElementRects({reference:e,floating:A,strategy:o}),{x:C,y:I}=KiA(l,n,g),d=n,B={},E=0,Q=0;Q"u")&&(t instanceof ShadowRoot||t instanceof Al(t).ShadowRoot)}var IxA=new Set(["inline","contents"]);function Zf(t){var{overflow:e,overflowX:A,overflowY:i,display:n}=Tc(t);return/auto|scroll|overlay|hidden|clip/.test(e+i+A)&&!IxA.has(n)}var dxA=new Set(["table","td","th"]);function BxA(t){return dxA.has(Dh(t))}var ExA=[":popover-open",":modal"];function Iv(t){return ExA.some(e=>{try{return t.matches(e)}catch{return!1}})}var QxA=["transform","translate","scale","rotate","perspective"],hxA=["transform","translate","scale","rotate","perspective","filter"],uxA=["paint","layout","strict","content"];function SL(t){var e=gG(),A=Yc(t)?Tc(t):t;return QxA.some(i=>!!A[i]&&A[i]!=="none")||!!A.containerType&&A.containerType!=="normal"||!e&&!!A.backdropFilter&&A.backdropFilter!=="none"||!e&&!!A.filter&&A.filter!=="none"||hxA.some(i=>(A.willChange||"").includes(i))||uxA.some(i=>(A.contain||"").includes(i))}function gG(){return!(typeof CSS>"u"||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}var fxA=new Set(["html","body","#document"]);function lh(t){return fxA.has(Dh(t))}function Tc(t){return Al(t).getComputedStyle(t)}function kv(t){return Yc(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function ZI(t){if(Dh(t)==="html")return t;var e=t.assignedSlot||t.parentNode||UiA(t)&&t.host||W0(t);return UiA(e)?e.host:e}function KoA(t){var e=ZI(t);return lh(e)?t.ownerDocument?t.ownerDocument.body:t.body:Z0(e)&&Zf(e)?e:KoA(e)}function Xf(t,e,A){var i;e===void 0&&(e=[]),A===void 0&&(A=!0);var n=KoA(t),o=n===((i=t.ownerDocument)==null?void 0:i.body),a=Al(n);if(o){var r=xL(a);return e.concat(a,a.visualViewport||[],Zf(n)?n:[],r&&A?Xf(r):[])}return e.concat(n,Xf(n,[],A))}function xL(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function UoA(t){var e=Tc(t),A=parseFloat(e.width)||0,i=parseFloat(e.height)||0,n=Z0(t),o=n?t.offsetWidth:A,a=n?t.offsetHeight:i,r=cv(A)!==o||cv(i)!==a;return r&&(A=o,i=a),{width:A,height:i,$:r}}function lG(t){return Yc(t)?t:t.contextElement}function ch(t){var e=lG(t);if(!Z0(e))return V0(1);var A=e.getBoundingClientRect(),{width:i,height:n,$:o}=UoA(e),a=(o?cv(A.width):A.width)/i,r=(o?cv(A.height):A.height)/n;return a&&Number.isFinite(a)||(a=1),r&&Number.isFinite(r)||(r=1),{x:a,y:r}}var mxA=V0(0);function JoA(t){var e=Al(t);return gG()&&e.visualViewport?{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}:mxA}function nB(t,e,A,i){e===void 0&&(e=!1),A===void 0&&(A=!1);var n=t.getBoundingClientRect(),o=lG(t),a=V0(1);e&&(i?Yc(i)&&(a=ch(i)):a=ch(t));var r=(function(D,F,_){return F===void 0&&(F=!1),!(!_||F&&_!==Al(D))&&F})(o,A,i)?JoA(o):V0(0),s=(n.left+r.x)/a.x,g=(n.top+r.y)/a.y,l=n.width/a.x,C=n.height/a.y;if(o)for(var I=Al(o),d=i&&Yc(i)?Al(i):i,B=I,E=xL(B);E&&i&&d!==B;){var Q=ch(E),f=E.getBoundingClientRect(),b=Tc(E),S=f.left+(E.clientLeft+parseFloat(b.paddingLeft))*Q.x,M=f.top+(E.clientTop+parseFloat(b.paddingTop))*Q.y;s*=Q.x,g*=Q.y,l*=Q.x,C*=Q.y,s+=S,g+=M,E=xL(B=Al(E))}return Cv({width:l,height:C,x:s,y:g})}function dv(t,e){var A=kv(t).scrollLeft;return e?e.left+A:nB(W0(t)).left+A}function YoA(t,e){var A=t.getBoundingClientRect();return{x:A.left+e.scrollLeft-dv(t,A),y:A.top+e.scrollTop}}var pxA=new Set(["absolute","fixed"]);function JiA(t,e,A){var i;if(e==="viewport")i=(function(o,a){var r=Al(o),s=W0(o),g=r.visualViewport,l=s.clientWidth,C=s.clientHeight,I=0,d=0;if(g){l=g.width,C=g.height;var B=gG();(!B||B&&a==="fixed")&&(I=g.offsetLeft,d=g.offsetTop)}var E=dv(s);if(E<=0){var Q=s.ownerDocument,f=Q.body,b=getComputedStyle(f),S=Q.compatMode==="CSS1Compat"&&parseFloat(b.marginLeft)+parseFloat(b.marginRight)||0,M=Math.abs(s.clientWidth-f.clientWidth-S);M<=25&&(l-=M)}else E<=25&&(l+=E);return{width:l,height:C,x:I,y:d}})(t,A);else if(e==="document")i=(function(o){var a=W0(o),r=kv(o),s=o.ownerDocument.body,g=qd(a.scrollWidth,a.clientWidth,s.scrollWidth,s.clientWidth),l=qd(a.scrollHeight,a.clientHeight,s.scrollHeight,s.clientHeight),C=-r.scrollLeft+dv(o),I=-r.scrollTop;return Tc(s).direction==="rtl"&&(C+=qd(a.clientWidth,s.clientWidth)-g),{width:g,height:l,x:C,y:I}})(W0(t));else if(Yc(e))i=(function(o,a){var r=nB(o,!0,a==="fixed"),s=r.top+o.clientTop,g=r.left+o.clientLeft,l=Z0(o)?ch(o):V0(1);return{width:o.clientWidth*l.x,height:o.clientHeight*l.y,x:g*l.x,y:s*l.y}})(e,A);else{var n=JoA(t);i={x:e.x-n.x,y:e.y-n.y,width:e.width,height:e.height}}return Cv(i)}function ToA(t,e){var A=ZI(t);return!(A===e||!Yc(A)||lh(A))&&(Tc(A).position==="fixed"||ToA(A,e))}function wxA(t,e,A){var i=Z0(e),n=W0(e),o=A==="fixed",a=nB(t,!0,o,e),r={scrollLeft:0,scrollTop:0},s=V0(0);function g(){s.x=dv(n)}if(i||!i&&!o)if((Dh(e)!=="body"||Zf(n))&&(r=kv(e)),i){var l=nB(e,!0,o,e);s.x=l.x+e.clientLeft,s.y=l.y+e.clientTop}else n&&g();o&&!i&&n&&g();var C=!n||i||o?V0(0):YoA(n,r);return{x:a.left+r.scrollLeft-s.x-C.x,y:a.top+r.scrollTop-s.y-C.y,width:a.width,height:a.height}}function AL(t){return Tc(t).position==="static"}function YiA(t,e){if(!Z0(t)||Tc(t).position==="fixed")return null;if(e)return e(t);var A=t.offsetParent;return W0(t)===A&&(A=A.ownerDocument.body),A}function TiA(t,e){var A=Al(t);if(Iv(t))return A;if(!Z0(t)){for(var i=ZI(t);i&&!lh(i);){if(Yc(i)&&!AL(i))return i;i=ZI(i)}return A}for(var n=YiA(t,e);n&&BxA(n)&&AL(n);)n=YiA(n,e);return n&&lh(n)&&AL(n)&&!SL(n)?A:n||(function(o){for(var a=ZI(o);Z0(a)&&!lh(a);){if(SL(a))return a;if(Iv(a))return null;a=ZI(a)}return null})(t)||A}var DxA={convertOffsetParentRelativeRectToViewportRelativeRect:function(t){var{elements:e,rect:A,offsetParent:i,strategy:n}=t,o=n==="fixed",a=W0(i),r=!!e&&Iv(e.floating);if(i===a||r&&o)return A;var s={scrollLeft:0,scrollTop:0},g=V0(1),l=V0(0),C=Z0(i);if((C||!C&&!o)&&((Dh(i)!=="body"||Zf(a))&&(s=kv(i)),Z0(i))){var I=nB(i);g=ch(i),l.x=I.x+i.clientLeft,l.y=I.y+i.clientTop}var d=!a||C||o?V0(0):YoA(a,s);return{width:A.width*g.x,height:A.height*g.y,x:A.x*g.x-s.scrollLeft*g.x+l.x+d.x,y:A.y*g.y-s.scrollTop*g.y+l.y+d.y}},getDocumentElement:W0,getClippingRect:function(t){var{element:e,boundary:A,rootBoundary:i,strategy:n}=t,o=A==="clippingAncestors"?Iv(e)?[]:(function(g,l){var C=l.get(g);if(C)return C;for(var I=Xf(g,[],!1).filter(b=>Yc(b)&&Dh(b)!=="body"),d=null,B=Tc(g).position==="fixed",E=B?ZI(g):g;Yc(E)&&!lh(E);){var Q=Tc(E),f=SL(E);f||Q.position!=="fixed"||(d=null),(B?!f&&!d:!f&&Q.position==="static"&&d&&pxA.has(d.position)||Zf(E)&&!f&&ToA(g,E))?I=I.filter(b=>b!==E):d=Q,E=ZI(E)}return l.set(g,I),I})(e,this._c):[].concat(A),a=[...o,i],r=a[0],s=a.reduce((g,l)=>{var C=JiA(e,l,n);return g.top=qd(C.top,g.top),g.right=lv(C.right,g.right),g.bottom=lv(C.bottom,g.bottom),g.left=qd(C.left,g.left),g},JiA(e,r,n));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:TiA,getElementRects:(function(){var t=Yt(function*(e){var A=this.getOffsetParent||TiA,i=this.getDimensions,n=yield i(e.floating);return{reference:wxA(e.reference,yield A(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}});return function(e){return t.apply(this,arguments)}})(),getClientRects:function(t){return Array.from(t.getClientRects())},getDimensions:function(t){var{width:e,height:A}=UoA(t);return{width:e,height:A}},getScale:ch,isElement:Yc,isRTL:function(t){return Tc(t).direction==="rtl"}};function HiA(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function yxA(t,e,A,i){i===void 0&&(i={});var{ancestorScroll:n=!0,ancestorResize:o=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:r=typeof IntersectionObserver=="function",animationFrame:s=!1}=i,g=lG(t),l=n||o?[...g?Xf(g):[],...Xf(e)]:[];l.forEach(Q=>{n&&Q.addEventListener("scroll",A,{passive:!0}),o&&Q.addEventListener("resize",A)});var C,I=g&&r?(function(Q,f){var b,S=null,M=W0(Q);function D(){var F;clearTimeout(b),(F=S)==null||F.disconnect(),S=null}return(function F(_,U){_===void 0&&(_=!1),U===void 0&&(U=1),D();var J=Q.getBoundingClientRect(),{left:j,top:$,width:O,height:DA}=J;if(_||f(),O&&DA){var P={rootMargin:-_y($)+"px "+-_y(M.clientWidth-(j+O))+"px "+-_y(M.clientHeight-($+DA))+"px "+-_y(j)+"px",threshold:qd(0,lv(1,U))||1},aA=!0;try{S=new IntersectionObserver(iA,ye(ye({},P),{},{root:M.ownerDocument}))}catch{S=new IntersectionObserver(iA,P)}S.observe(Q)}function iA(BA){var oA=BA[0].intersectionRatio;if(oA!==U){if(!aA)return F();oA?F(!1,oA):b=setTimeout(()=>{F(!1,1e-7)},1e3)}oA!==1||HiA(J,Q.getBoundingClientRect())||F(),aA=!1}})(!0),D})(g,A):null,d=-1,B=null;a&&(B=new ResizeObserver(Q=>{var[f]=Q;f&&f.target===g&&B&&(B.unobserve(e),cancelAnimationFrame(d),d=requestAnimationFrame(()=>{var b;(b=B)==null||b.observe(e)})),A()}),g&&!s&&B.observe(g),B.observe(e));var E=s?nB(t):null;return s&&(function Q(){var f=nB(t);E&&!HiA(E,f)&&A(),E=f,C=requestAnimationFrame(Q)})(),A(),()=>{var Q;l.forEach(f=>{n&&f.removeEventListener("scroll",A),o&&f.removeEventListener("resize",A)}),I?.(),(Q=B)==null||Q.disconnect(),B=null,s&&cancelAnimationFrame(C)}}var vxA=function(t){return t===void 0&&(t=0),{name:"offset",options:t,fn:e=>Yt(function*(){var A,i,{x:n,y:o,placement:a,middlewareData:r}=e,s=yield(function(g,l){return kL.apply(this,arguments)})(e,t);return a===((A=r.offset)==null?void 0:A.placement)&&(i=r.arrow)!=null&&i.alignmentOffset?{}:{x:n+s.x,y:o+s.y,data:ye(ye({},s),{},{placement:a})}})()}},bxA=function(t){return t===void 0&&(t={}),{name:"shift",options:t,fn:e=>Yt(function*(){var{x:A,y:i,placement:n}=e,o=vv(t,e),{mainAxis:a=!0,crossAxis:r=!1,limiter:s={fn:S=>{var{x:M,y:D}=S;return{x:M,y:D}}}}=o,g=ZiA(o,ckA),l={x:A,y:i},C=yield LoA(e,g),I=WI(iB(n)),d=NoA(I),B=l[d],E=l[I];if(a){var Q=d==="y"?"bottom":"right";B=_iA(B+C[d==="y"?"top":"left"],B,B-C[Q])}if(r){var f=I==="y"?"bottom":"right";E=_iA(E+C[I==="y"?"top":"left"],E,E-C[f])}var b=s.fn(ye(ye({},e),{},{[d]:B,[I]:E}));return ye(ye({},b),{},{data:{x:b.x-A,y:b.y-i,enabled:{[d]:a,[I]:r}}})})()}},MxA=function(t){return t===void 0&&(t={}),{name:"flip",options:t,fn:e=>Yt(function*(){var A,i,{placement:n,middlewareData:o,rects:a,initialPlacement:r,platform:s,elements:g}=e,l=vv(t,e),{mainAxis:C=!0,crossAxis:I=!0,fallbackPlacements:d,fallbackStrategy:B="bestFit",fallbackAxisSideDirection:E="none",flipAlignment:Q=!0}=l,f=ZiA(l,lkA);if((A=o.arrow)!=null&&A.alignmentOffset)return{};var b=iB(n),S=WI(r),M=iB(r)===r,D=yield s.isRTL==null?void 0:s.isRTL(g.floating),F=d||(M||!Q?[Ly(r)]:(function(hA){var YA=Ly(hA);return[bL(hA),YA,bL(YA)]})(r)),_=E!=="none";!d&&_&&F.push(...gxA(r,Q,E,D));var U=[r,...F],J=yield LoA(e,f),j=[],$=((i=o.flip)==null?void 0:i.overflows)||[];if(C&&j.push(J[b]),I){var O=(function(hA,YA,ee){ee===void 0&&(ee=!1);var UA=bv(hA),mA=_oA(hA),KA=FoA(mA),Pe=mA==="x"?UA===(ee?"end":"start")?"right":"left":UA==="start"?"bottom":"top";return YA.reference[KA]>YA.floating[KA]&&(Pe=Ly(Pe)),[Pe,Ly(Pe)]})(n,a,D);j.push(J[O[0]],J[O[1]])}if($=[...$,{placement:n,overflows:j}],!j.every(hA=>hA<=0)){var DA,P,aA=(((DA=o.flip)==null?void 0:DA.index)||0)+1,iA=U[aA];if(iA&&(!(I==="alignment"&&S!==WI(iA))||$.every(hA=>WI(hA.placement)!==S||hA.overflows[0]>0)))return{data:{index:aA,overflows:$},reset:{placement:iA}};var BA=(P=$.filter(hA=>hA.overflows[0]<=0).sort((hA,YA)=>hA.overflows[1]-YA.overflows[1])[0])==null?void 0:P.placement;if(!BA)switch(B){case"bestFit":var oA,sA=(oA=$.filter(hA=>{if(_){var YA=WI(hA.placement);return YA===S||YA==="y"}return!0}).map(hA=>[hA.placement,hA.overflows.filter(YA=>YA>0).reduce((YA,ee)=>YA+ee,0)]).sort((hA,YA)=>hA[1]-YA[1])[0])==null?void 0:oA[0];sA&&(BA=sA);break;case"initialPlacement":BA=r}if(n!==BA)return{reset:{placement:BA}}}return{}})()}};function kxA(t){var e,A,i={autoUpdate:!0},n=t,o=s=>ye(ye(ye({},i),t||{}),s||{}),a=s=>{e&&A&&(n=o(s),((g,l,C)=>{var I=new Map,d=ye({platform:DxA},C),B=ye(ye({},d.platform),{},{_c:I});return cxA(g,l,ye(ye({},d),{},{platform:B}))})(e,A,n).then(g=>{var l;Object.assign(A.style,{position:g.strategy,left:"".concat(g.x,"px"),top:"".concat(g.y,"px")}),!((l=n)===null||l===void 0)&&l.onComputed&&n.onComputed(g)}))},r=s=>{Yl(s.subscribe(g=>{e===void 0?(e=g,a()):(Object.assign(e,g),a())}))};return[s=>{if("subscribe"in s)return r(s),{};e=s,a()},(s,g)=>{var l;A=s,n=o(g),setTimeout(()=>a(g),0),a(g);var C=()=>{l&&(l(),l=void 0)},I=function(){var{autoUpdate:d}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:n||{};C(),d!==!1&&YnA().then(()=>yxA(e,A,()=>a(n),d===!0?{}:d))};return l=I(),{update(d){a(d),l=I(d)},destroy(){C()}}},a]}function SxA(t){var{loadOptions:e,filterText:A,items:i,multiple:n,value:o,itemId:a,groupBy:r,filterSelectedItems:s,itemFilter:g,convertStringItemsToObjects:l,filterGroupedItems:C,label:I}=t;if(i&&e)return i;if(!i)return[];i&&i.length>0&&typeof i[0]!="object"&&(i=l(i));var d=i.filter(B=>{var E=g(B[I],A,B);return E&&n&&o!=null&&o.length&&(E=!o.some(Q=>!!s&&Q[a]===B[a])),E});return r&&(d=C(d)),d}function xxA(t){return HoA.apply(this,arguments)}function HoA(){return(HoA=Yt(function*(t){var{dispatch:e,loadOptions:A,convertStringItemsToObjects:i,filterText:n}=t,o=yield A(n).catch(a=>{console.warn("svelte-select loadOptions error :>> ",a),e("error",{type:"loadOptions",details:a})});if(o&&!o.cancelled)return o?(o&&o.length>0&&typeof o[0]!="object"&&(o=i(o)),e("loaded",{items:o})):o=[],{filteredItems:o,loading:!1,focused:!0,listOpen:!0}})).apply(this,arguments)}qt(` + svg.svelte-1kxu7be { + width: var(--chevron-icon-width, 20px); + height: var(--chevron-icon-width, 20px); + color: var(--chevron-icon-colour, currentColor); + } +`);var RxA=s1(``);qt(` + svg.svelte-1hraxrc { + width: var(--clear-icon-width, 20px); + height: var(--clear-icon-width, 20px); + color: var(--clear-icon-color, currentColor); + } +`);var NxA=s1(``);function eL(t){cA(t,NxA())}qt(` + .loading.svelte-y9fi5p { + width: var(--spinner-width, 20px); + height: var(--spinner-height, 20px); + color: var(--spinner-color, var(--icons-color)); + animation: svelte-y9fi5p-rotate 0.75s linear infinite; + transform-origin: center center; + transform: none; + } + + .circle_path.svelte-y9fi5p { + stroke-dasharray: 90; + stroke-linecap: round; + } + + @keyframes svelte-y9fi5p-rotate { + 100% { + transform: rotate(360deg); + } + } +`);var FxA=s1('');qt(` + .svelte-select.svelte-1ul7oo4 { + /* deprecating camelCase custom props in favour of kebab-case for v5 */ + --borderRadius: var(--border-radius); + --clearSelectColor: var(--clear-select-color); + --clearSelectWidth: var(--clear-select-width); + --disabledBackground: var(--disabled-background); + --disabledBorderColor: var(--disabled-border-color); + --disabledColor: var(--disabled-color); + --disabledPlaceholderColor: var(--disabled-placeholder-color); + --disabledPlaceholderOpacity: var(--disabled-placeholder-opacity); + --errorBackground: var(--error-background); + --errorBorder: var(--error-border); + --groupItemPaddingLeft: var(--group-item-padding-left); + --groupTitleColor: var(--group-title-color); + --groupTitleFontSize: var(--group-title-font-size); + --groupTitleFontWeight: var(--group-title-font-weight); + --groupTitlePadding: var(--group-title-padding); + --groupTitleTextTransform: var(--group-title-text-transform); + --groupTitleBorderColor: var(--group-title-border-color); + --groupTitleBorderWidth: var(--group-title-border-width); + --groupTitleBorderStyle: var(--group-title-border-style); + --indicatorColor: var(--chevron-color); + --indicatorHeight: var(--chevron-height); + --indicatorWidth: var(--chevron-width); + --inputColor: var(--input-color); + --inputLeft: var(--input-left); + --inputLetterSpacing: var(--input-letter-spacing); + --inputMargin: var(--input-margin); + --inputPadding: var(--input-padding); + --itemActiveBackground: var(--item-active-background); + --itemColor: var(--item-color); + --itemFirstBorderRadius: var(--item-first-border-radius); + --itemHoverBG: var(--item-hover-bg); + --itemHoverColor: var(--item-hover-color); + --itemIsActiveBG: var(--item-is-active-bg); + --itemIsActiveColor: var(--item-is-active-color); + --itemIsNotSelectableColor: var(--item-is-not-selectable-color); + --itemPadding: var(--item-padding); + --listBackground: var(--list-background); + --listBorder: var(--list-border); + --listBorderRadius: var(--list-border-radius); + --listEmptyColor: var(--list-empty-color); + --listEmptyPadding: var(--list-empty-padding); + --listEmptyTextAlign: var(--list-empty-text-align); + --listMaxHeight: var(--list-max-height); + --listPosition: var(--list-position); + --listShadow: var(--list-shadow); + --listZIndex: var(--list-z-index); + --multiItemBG: var(--multi-item-bg); + --multiItemBorderRadius: var(--multi-item-border-radius); + --multiItemDisabledHoverBg: var(--multi-item-disabled-hover-bg); + --multiItemDisabledHoverColor: var(--multi-item-disabled-hover-color); + --multiItemHeight: var(--multi-item-height); + --multiItemMargin: var(--multi-item-margin); + --multiItemPadding: var(--multi-item-padding); + --multiSelectInputMargin: var(--multi-select-input-margin); + --multiSelectInputPadding: var(--multi-select-input-padding); + --multiSelectPadding: var(--multi-select-padding); + --placeholderColor: var(--placeholder-color); + --placeholderOpacity: var(--placeholder-opacity); + --selectedItemPadding: var(--selected-item-padding); + --spinnerColor: var(--spinner-color); + --spinnerHeight: var(--spinner-height); + --spinnerWidth: var(--spinner-width); + + --internal-padding: 0 0 0 16px; + + border: var(--border, 1px solid #d8dbdf); + border-radius: var(--border-radius, 6px); + min-height: var(--height, 42px); + position: relative; + display: flex; + align-items: stretch; + padding: var(--padding, var(--internal-padding)); + background: var(--background, #fff); + margin: var(--margin, 0); + width: var(--width, 100%); + font-size: var(--font-size, 16px); + max-height: var(--max-height); + } + + .svelte-1ul7oo4 { + box-sizing: var(--box-sizing, border-box); + } + + .svelte-select.svelte-1ul7oo4:hover { + border: var(--border-hover, 1px solid #b2b8bf); + } + + .value-container.svelte-1ul7oo4 { + display: flex; + flex: 1 1 0%; + flex-wrap: wrap; + align-items: center; + gap: 5px 10px; + padding: var(--value-container-padding, 5px 0); + position: relative; + overflow: var(--value-container-overflow, hidden); + align-self: stretch; + } + + .prepend.svelte-1ul7oo4, + .indicators.svelte-1ul7oo4 { + display: flex; + flex-shrink: 0; + align-items: center; + } + + .indicators.svelte-1ul7oo4 { + position: var(--indicators-position); + top: var(--indicators-top); + right: var(--indicators-right); + bottom: var(--indicators-bottom); + } + + input.svelte-1ul7oo4 { + position: absolute; + cursor: default; + border: none; + color: var(--input-color, var(--item-color)); + padding: var(--input-padding, 0); + letter-spacing: var(--input-letter-spacing, inherit); + margin: var(--input-margin, 0); + min-width: 10px; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: transparent; + font-size: var(--font-size, 16px); + } + + .svelte-1ul7oo4:not(.multi) > .value-container:where(.svelte-1ul7oo4) > input:where(.svelte-1ul7oo4) { + width: 100%; + height: 100%; + } + + input.svelte-1ul7oo4::placeholder { + color: var(--placeholder-color, #78848f); + opacity: var(--placeholder-opacity, 1); + } + + input.svelte-1ul7oo4:focus { + outline: none; + } + + .svelte-select.focused.svelte-1ul7oo4 { + border: var(--border-focused, 1px solid #006fe8); + border-radius: var(--border-radius-focused, var(--border-radius, 6px)); + } + + .disabled.svelte-1ul7oo4 { + background: var(--disabled-background, #ebedef); + border-color: var(--disabled-border-color, #ebedef); + color: var(--disabled-color, #c1c6cc); + } + + .disabled.svelte-1ul7oo4 input:where(.svelte-1ul7oo4)::placeholder { + color: var(--disabled-placeholder-color, #c1c6cc); + opacity: var(--disabled-placeholder-opacity, 1); + } + + .selected-item.svelte-1ul7oo4 { + position: relative; + overflow: var(--selected-item-overflow, hidden); + padding: var(--selected-item-padding, 0 20px 0 0); + text-overflow: ellipsis; + white-space: nowrap; + color: var(--selected-item-color, inherit); + font-size: var(--font-size, 16px); + } + + .multi.svelte-1ul7oo4 .selected-item:where(.svelte-1ul7oo4) { + position: absolute; + line-height: var(--height, 42px); + height: var(--height, 42px); + } + + .selected-item.svelte-1ul7oo4:focus { + outline: none; + } + + .hide-selected-item.svelte-1ul7oo4 { + opacity: 0; + } + + .icon.svelte-1ul7oo4 { + display: flex; + align-items: center; + justify-content: center; + } + + .clear-select.svelte-1ul7oo4 { + all: unset; + display: flex; + align-items: center; + justify-content: center; + width: var(--clear-select-width, 40px); + height: var(--clear-select-height, 100%); + color: var(--clear-select-color, var(--icons-color)); + margin: var(--clear-select-margin, 0); + pointer-events: all; + flex-shrink: 0; + } + + .clear-select.svelte-1ul7oo4:focus { + outline: var(--clear-select-focus-outline, 1px solid #006fe8); + } + + .loading.svelte-1ul7oo4 { + width: var(--loading-width, 40px); + height: var(--loading-height); + color: var(--loading-color, var(--icons-color)); + margin: var(--loading--margin, 0); + flex-shrink: 0; + } + + .chevron.svelte-1ul7oo4 { + width: var(--chevron-width, 40px); + height: var(--chevron-height, 40px); + background: var(--chevron-background, transparent); + pointer-events: var(--chevron-pointer-events, none); + color: var(--chevron-color, var(--icons-color)); + border: var(--chevron-border, 0 0 0 1px solid #d8dbdf); + flex-shrink: 0; + } + + .multi.svelte-1ul7oo4 { + padding: var(--multi-select-padding, var(--internal-padding)); + } + + .multi.svelte-1ul7oo4 input:where(.svelte-1ul7oo4) { + padding: var(--multi-select-input-padding, 0); + position: relative; + margin: var(--multi-select-input-margin, 5px 0); + flex: 1 1 40px; + } + + .svelte-select.error.svelte-1ul7oo4 { + border: var(--error-border, 1px solid #ff2d55); + background: var(--error-background, #fff); + } + + .a11y-text.svelte-1ul7oo4 { + z-index: 9999; + border: 0px; + clip: rect(1px, 1px, 1px, 1px); + height: 1px; + width: 1px; + position: absolute; + overflow: hidden; + padding: 0px; + white-space: nowrap; + } + + .multi-item.svelte-1ul7oo4 { + background: var(--multi-item-bg, #ebedef); + margin: var(--multi-item-margin, 0); + outline: var(--multi-item-outline, 1px solid #ddd); + border-radius: var(--multi-item-border-radius, 4px); + height: var(--multi-item-height, 25px); + line-height: var(--multi-item-height, 25px); + display: flex; + cursor: default; + padding: var(--multi-item-padding, 0 5px); + overflow: hidden; + gap: var(--multi-item-gap, 4px); + outline-offset: -1px; + max-width: var(--multi-max-width, none); + color: var(--multi-item-color, var(--item-color)); + } + + .multi-item.disabled.svelte-1ul7oo4:hover { + background: var(--multi-item-disabled-hover-bg, #ebedef); + color: var(--multi-item-disabled-hover-color, #c1c6cc); + } + + .multi-item-text.svelte-1ul7oo4 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .multi-item-clear.svelte-1ul7oo4 { + display: flex; + align-items: center; + justify-content: center; + --clear-icon-color: var(--multi-item-clear-icon-color, #000); + } + + .multi-item.active.svelte-1ul7oo4 { + outline: var(--multi-item-active-outline, 1px solid #006fe8); + } + + .svelte-select-list.svelte-1ul7oo4 { + box-shadow: var(--list-shadow, 0 2px 3px 0 rgba(44, 62, 80, 0.24)); + border-radius: var(--list-border-radius, 4px); + max-height: var(--list-max-height, 252px); + overflow-y: auto; + background: var(--list-background, #fff); + position: var(--list-position, absolute); + z-index: var(--list-z-index, 2); + border: var(--list-border); + } + + .prefloat.svelte-1ul7oo4 { + opacity: 0; + pointer-events: none; + } + + .list-group-title.svelte-1ul7oo4 { + color: var(--group-title-color, #8f8f8f); + cursor: default; + font-size: var(--group-title-font-size, 16px); + font-weight: var(--group-title-font-weight, 600); + height: var(--height, 42px); + line-height: var(--height, 42px); + padding: var(--group-title-padding, 0 20px); + text-overflow: ellipsis; + overflow-x: hidden; + white-space: nowrap; + text-transform: var(--group-title-text-transform, uppercase); + border-width: var(--group-title-border-width, medium); + border-style: var(--group-title-border-style, none); + border-color: var(--group-title-border-color, color); + } + + .empty.svelte-1ul7oo4 { + text-align: var(--list-empty-text-align, center); + padding: var(--list-empty-padding, 20px 0); + color: var(--list-empty-color, #78848f); + } + + .item.svelte-1ul7oo4 { + cursor: default; + height: var(--item-height, var(--height, 42px)); + line-height: var(--item-line-height, var(--height, 42px)); + padding: var(--item-padding, 0 20px); + color: var(--item-color, inherit); + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + transition: var(--item-transition, all 0.2s); + align-items: center; + width: 100%; + } + + .item.group-item.svelte-1ul7oo4 { + padding-left: var(--group-item-padding-left, 40px); + } + + .item.svelte-1ul7oo4:active { + background: var(--item-active-background, #b9daff); + } + + .item.active.svelte-1ul7oo4 { + background: var(--item-is-active-bg, #007aff); + color: var(--item-is-active-color, #fff); + } + + .item.first.svelte-1ul7oo4 { + border-radius: var(--item-first-border-radius, 4px 4px 0 0); + } + + .item.hover.svelte-1ul7oo4:not(.active) { + background: var(--item-hover-bg, #e7f2ff); + color: var(--item-hover-color, inherit); + } + + .item.not-selectable.svelte-1ul7oo4, + .item.hover.item.not-selectable.svelte-1ul7oo4, + .item.active.item.not-selectable.svelte-1ul7oo4, + .item.not-selectable.svelte-1ul7oo4:active { + color: var(--item-is-not-selectable-color, #999); + background: transparent; + } + + .required.svelte-1ul7oo4 { + opacity: 0; + z-index: -1; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + } +`);var _xA=FA('
    '),LxA=FA('
    No options
    '),GxA=FA('
    '),KxA=FA(' ',1),UxA=FA('
    '),JxA=FA('
    '),YxA=FA("
    "),TxA=FA(''),HxA=FA(''),zxA=FA(''),OxA=FA(''),PxA=FA(''),jxA=FA('
    ');function Td(t,e){var A=(function(dA){var SA={};for(var oe in dA.children&&(SA.default=!0),dA.$$slots)SA[oe]=!0;return SA})(e);St(e,!1);var i,n=IA(),o=IA(),a=IA(),r=IA(),s=IA(),g=IA(),l=IA(),C=IA(),I=IA(),d=YkA(),B=N(e,"justValue",12,null),E=N(e,"filter",8,SxA),Q=N(e,"getItems",8,xxA),f=N(e,"id",8,null),b=N(e,"name",8,null),S=N(e,"container",12,void 0),M=N(e,"input",12,void 0),D=N(e,"multiple",8,!1),F=N(e,"multiFullItemClearable",8,!1),_=N(e,"disabled",8,!1),U=N(e,"focused",12,!1),J=N(e,"value",12,null),j=N(e,"filterText",12,""),$=N(e,"placeholder",8,"Please select"),O=N(e,"placeholderAlwaysShow",8,!1),DA=N(e,"items",12,null),P=N(e,"label",8,"label"),aA=N(e,"itemFilter",8,(dA,SA,oe)=>"".concat(dA).toLowerCase().includes(SA.toLowerCase())),iA=N(e,"groupBy",8,void 0),BA=N(e,"groupFilter",8,dA=>dA),oA=N(e,"groupHeaderSelectable",8,!1),sA=N(e,"itemId",8,"value"),hA=N(e,"loadOptions",8,void 0),YA=N(e,"containerStyles",8,""),ee=N(e,"hasError",8,!1),UA=N(e,"filterSelectedItems",8,!0),mA=N(e,"required",8,!1),KA=N(e,"closeListOnChange",8,!0),Pe=N(e,"clearFilterTextOnBlur",8,!0),Ue=N(e,"createGroupHeaderItem",8,(dA,SA)=>({value:dA,[P()]:dA})),HA=()=>c(l),uA=N(e,"searchable",8,!0),XA=N(e,"inputStyles",8,""),QA=N(e,"clearable",8,!0),ZA=N(e,"loading",12,!1),MA=N(e,"listOpen",12,!1),Me=N(e,"debounce",8,function(dA){var SA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;clearTimeout(i),i=setTimeout(dA,SA)}),LA=N(e,"debounceWait",8,300),pA=N(e,"hideEmptyState",8,!1),Ft=N(e,"inputAttributes",24,()=>({})),ht=N(e,"listAutoWidth",8,!0),Ee=N(e,"showChevron",8,!1),Kt=N(e,"listOffset",8,5),Je=N(e,"hoverItemIndex",12,0),ze=N(e,"floatingConfig",24,()=>({})),ut=N(e,"class",8,""),ke=IA(),ei=IA(),Y=IA(),z=IA(),nA=IA();function rA(dA){return dA.map((SA,oe)=>({index:oe,value:SA,label:"".concat(SA)}))}function NA(dA){var SA=[],oe={};dA.forEach(it=>{var rt=iA()(it);SA.includes(rt)||(SA.push(rt),oe[rt]=[],rt&&oe[rt].push(Object.assign(Ue()(rt,it),{id:rt,groupHeader:!0,selectable:oA()}))),oe[rt].push(Object.assign({groupItem:!!rt},it))});var xe=[];return BA()(SA).forEach(it=>{oe[it]&&xe.push(...oe[it])}),xe}function Ie(){var dA=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,SA=arguments.length>1?arguments[1]:void 0;Je(dA<0?0:dA),!SA&&iA()&&c(l)[Je()]&&!c(l)[Je()].selectable&&li(1)}function Qe(){var dA=!0;if(J()){var SA=[],oe=[];J().forEach(xe=>{SA.includes(xe[sA()])?dA=!1:(SA.push(xe[sA()]),oe.push(xe))}),dA||J(oe)}return dA}function xA(dA){var SA=dA?dA[sA()]:J()[sA()];return DA().find(oe=>oe[sA()]===SA)}function _A(dA){return Et.apply(this,arguments)}function Et(){return(Et=Yt(function*(dA){var SA=J()[dA];J().length===1?J(void 0):J(J().filter(oe=>oe!==SA)),d("clear",SA)})).apply(this,arguments)}function et(dA){if(U())switch(dA.stopPropagation(),dA.key){case"Escape":dA.preventDefault(),Le();break;case"Enter":if(dA.preventDefault(),MA()){if(c(l).length===0)break;var SA=c(l)[Je()];if(J()&&!D()&&J()[sA()]===SA[sA()]){Le();break}L(c(l)[Je()])}break;case"ArrowDown":dA.preventDefault(),MA()?li(1):(MA(!0),R(ke,void 0));break;case"ArrowUp":dA.preventDefault(),MA()?li(-1):(MA(!0),R(ke,void 0));break;case"Tab":if(MA()&&U()){if(c(l).length===0||J()&&J()[sA()]===c(l)[Je()][sA()])return Le();dA.preventDefault(),L(c(l)[Je()]),Le()}break;case"Backspace":if(!D()||j().length>0)return;if(D()&&J()&&J().length>0){if(_A(c(ke)!==void 0?c(ke):J().length-1),c(ke)===0||c(ke)===void 0)break;R(ke,J().length>c(ke)?c(ke)-1:void 0)}break;case"ArrowLeft":if(!J()||!D()||j().length>0)return;c(ke)===void 0?R(ke,J().length-1):J().length>c(ke)&&c(ke)!==0&&R(ke,c(ke)-1);break;case"ArrowRight":if(!J()||!D()||j().length>0||c(ke)===void 0)return;c(ke)===J().length-1?R(ke,void 0):c(ke)0?MA(!0):void MA(!MA())}function dn(){d("clear",J()),J(void 0),Le(),Ye()}function Le(){Pe()&&j(""),MA(!1)}TkA(Yt(function*(){R(ei,J()),R(Y,j()),R(z,D())})),is(()=>{MA()&&U(!0),U()&&M()&&M().focus()});var Zi=N(e,"ariaValues",8,dA=>"Option ".concat(dA,", selected.")),Qi=N(e,"ariaListOpen",8,(dA,SA)=>"You are currently focused on option ".concat(dA,". There are ").concat(SA," results available.")),bi=N(e,"ariaFocused",8,()=>"Select is focused, type to refine list, press down to open the menu."),zi,yt=IA(null);function Xi(){clearTimeout(zi),zi=setTimeout(()=>{_t=!1},100)}Yl(()=>{var dA;(dA=c(yt))===null||dA===void 0||dA.remove()});var _t=!1;function L(dA){dA&&dA.selectable!==!1&&(function(SA){if(SA){j("");var oe=Object.assign({},SA);if(oe.groupHeader&&!oe.selectable)return;J(D()?J()?J().concat([oe]):[oe]:J(oe)),setTimeout(()=>{KA()&&Le(),R(ke,void 0),d("change",J()),d("select",SA)})}})(dA)}function ct(dA){_t||Je(dA)}function li(dA){if(c(l).filter(oe=>!Object.hasOwn(oe,"selectable")||oe.selectable===!0).length===0)return Je(0);dA>0&&Je()===c(l).length-1?Je(0):dA<0&&Je()===0?Je(c(l).length-1):Je(Je()+dA);var SA=c(l)[Je()];SA&&SA.selectable===!1&&(dA!==1&&dA!==-1||li(dA))}function Bn(dA,SA,oe){if(!D())return SA&&SA[oe]===dA[oe]}var En=Uo,qn=Uo;function Uo(dA){return{update(SA){SA.scroll&&(Xi(),dA.scrollIntoView({behavior:"auto",block:"nearest"}))}}}var Co=IA({strategy:"absolute",placement:"bottom-start",middleware:[vxA(Kt()),MxA(),bxA()],autoUpdate:!1}),[Mo,Wo,wo]=kxA(c(Co)),Qa=IA(!0);RA(()=>(G(DA()),G(J())),()=>{DA(),J()&&(function(){if(typeof J()=="string"){var dA=(DA()||[]).find(SA=>SA[sA()]===J());J(dA||{[sA()]:J(),label:J()})}else D()&&Array.isArray(J())&&J().length>0&&J(J().map(SA=>typeof SA=="string"?{value:SA,label:SA}:SA))})()}),RA(()=>(G(Ft()),G(uA())),()=>{!Ft()&&uA()||(R(nA,Object.assign({autocapitalize:"none",autocomplete:"off",autocorrect:"off",spellcheck:!1,tabindex:0,type:"text","aria-autocomplete":"list"},Ft())),f()&&Xg(nA,c(nA).id=f()),uA()||Xg(nA,c(nA).readonly=!0))}),RA(()=>G(D()),()=>{D()&&J()&&(Array.isArray(J())?J([...J()]):J([J()]))}),RA(()=>(c(z),G(D())),()=>{c(z)&&!D()&&J()&&J(null)}),RA(()=>(G(D()),G(J())),()=>{D()&&J()&&J().length>1&&Qe()}),RA(()=>G(J()),()=>{J()&&(D()?JSON.stringify(J())!==JSON.stringify(c(ei))&&Qe()&&d("input",J()):c(ei)&&JSON.stringify(J()[sA()])===JSON.stringify(c(ei)[sA()])||d("input",J()))}),RA(()=>(G(J()),G(D()),c(ei)),()=>{!J()&&D()&&c(ei)&&d("input",J())}),RA(()=>(G(U()),G(M())),()=>{!U()&&M()&&Le()}),RA(()=>(G(j()),c(Y)),()=>{j()!==c(Y)&&(hA()||j().length!==0)&&(hA()?Me()(Yt(function*(){ZA(!0);var dA=yield Q()({dispatch:d,loadOptions:hA(),convertStringItemsToObjects:rA,filterText:j()});dA?(ZA(dA.loading),MA(MA()?dA.listOpen:j().length>0),U(MA()&&dA.focused),DA(iA()?NA(dA.filteredItems):dA.filteredItems)):(ZA(!1),U(!0),MA(!0))}),LA()):(MA(!0),D()&&R(ke,void 0)))}),RA(()=>(G(E()),G(hA()),G(j()),G(DA()),G(D()),G(J()),G(sA()),G(iA()),G(P()),G(UA()),G(aA())),()=>{R(l,E()({loadOptions:hA(),filterText:j(),items:DA(),multiple:D(),value:J(),itemId:sA(),groupBy:iA(),label:P(),filterSelectedItems:UA(),itemFilter:aA(),convertStringItemsToObjects:rA,filterGroupedItems:NA}))}),RA(()=>(G(D()),G(MA()),G(J()),c(l)),()=>{!D()&&MA()&&J()&&c(l)&&Ie(c(l).findIndex(dA=>dA[sA()]===J()[sA()]),!0)}),RA(()=>(G(MA()),G(D())),()=>{MA()&&D()&&Je(0)}),RA(()=>G(j()),()=>{j()&&Je(0)}),RA(()=>G(Je()),()=>{var dA;dA=Je(),d("hoverItem",dA)}),RA(()=>(G(D()),G(J())),()=>{R(n,D()?J()&&J().length>0:J())}),RA(()=>(c(n),G(j())),()=>{R(o,c(n)&&j().length>0)}),RA(()=>(c(n),G(QA()),G(_()),G(ZA())),()=>{R(a,c(n)&&QA()&&!_()&&!ZA())}),RA(()=>(G(O()),G(D()),G($()),G(J())),()=>{var dA;R(r,O()&&D()||D()&&((dA=J())===null||dA===void 0?void 0:dA.length)===0?$():J()?"":$())}),RA(()=>(G(J()),G(D())),()=>{var dA,SA;R(s,J()?(dA=D(),SA=void 0,SA=dA&&J().length>0?J().map(oe=>oe[P()]).join(", "):J()[P()],Zi()(SA)):"")}),RA(()=>(c(l),G(Je()),G(U()),G(MA())),()=>{R(g,(function(){if(!c(l)||c(l).length===0)return"";var dA=c(l)[Je()];if(MA()&&dA){var SA=c(l)?c(l).length:0;return Qi()(dA[P()],SA)}return bi()()})((c(l),Je(),U(),MA())))}),RA(()=>G(DA()),()=>{(function(dA){dA&&dA.length!==0&&!dA.some(SA=>typeof SA!="object")&&J()&&(D()?!J().some(SA=>!SA||!SA[sA()]):J()[sA()])&&(Array.isArray(J())?J(J().map(SA=>xA(SA)||SA)):J(xA()||J()))})(DA())}),RA(()=>(G(D()),G(J()),G(sA())),()=>{B((D(),J(),sA(),D()?J()?J().map(dA=>dA[sA()]):null:J()?J()[sA()]:J()))}),RA(()=>(G(D()),c(ei),G(J())),()=>{D()||!c(ei)||J()||d("input",J())}),RA(()=>(G(MA()),c(l),G(D()),G(J())),()=>{MA()&&c(l)&&!D()&&!J()&&Ie()}),RA(()=>c(l),()=>{(function(dA){MA()&&d("filter",dA)})(c(l))}),RA(()=>(G(S()),G(ze()),c(Co)),()=>{S()&&ze()&&wo(Object.assign(c(Co),ze()))}),RA(()=>c(yt),()=>{R(C,!!c(yt))}),RA(()=>(c(yt),G(MA())),()=>{(function(dA,SA){if(!dA||!SA)return R(Qa,!0);setTimeout(()=>{R(Qa,!1)},0)})(c(yt),MA())}),RA(()=>(G(MA()),G(S()),c(yt)),()=>{MA()&&S()&&c(yt)&&(function(){var{width:dA}=S().getBoundingClientRect();Xg(yt,c(yt).style.width=ht()?dA+"px":"auto")})()}),RA(()=>G(Je()),()=>{R(I,Je())}),RA(()=>(G(M()),G(MA()),G(U())),()=>{M()&&MA()&&!U()&&Ye()}),RA(()=>(G(S()),G(ze())),()=>{var dA;S()&&((dA=ze())===null||dA===void 0?void 0:dA.autoUpdate)===void 0&&Xg(Co,c(Co).autoUpdate=!0)}),kn();var Zo={getFilteredItems:HA,handleClear:dn};Ai();var ra,Do=jxA();ue("click",e2,function(dA){var SA;MA()||U()||!S()||S().contains(dA.target)||(SA=c(yt))!==null&&SA!==void 0&&SA.contains(dA.target)||Ge()}),ue("keydown",e2,et);var re=CA(Do),di=dA=>{var SA,oe=GxA(),xe=CA(oe),it=Vt=>{var Ri=vi();Ba(At(Ri),e,"list-prepend",{},null),cA(Vt,Ri)};TA(xe,Vt=>{EA(()=>A["list-prepend"])&&Vt(it)});var rt=bA(xe,2),bt=Vt=>{var Ri=vi();Ba(At(Ri),e,"list",{get filteredItems(){return c(l)}},null),cA(Vt,Ri)},Kn=Vt=>{var Ri=vi(),va=At(Ri),Lt=Ni=>{var Oi=vi();Ea(At(Oi),1,()=>c(l),Ra,(Vn,hn,Mt)=>{var sa,Yo=_xA(),u=CA(Yo);Ba(CA(u),e,"item",{get item(){return c(hn)},index:Mt},y=>{var x=hr();ve(()=>Rt(x,(c(hn),G(P()),EA(()=>{var H;return(H=c(hn))===null||H===void 0?void 0:H[P()]})))),cA(y,x)}),bs(u,(y,x)=>En?.(y),()=>({scroll:Bn(c(hn),J(),sA()),listDom:c(C)})),bs(u,(y,x)=>qn?.(y),()=>({scroll:c(I)===Mt,listDom:c(C)})),ve(y=>sa=$t(u,1,"item svelte-1ul7oo4",null,sa,y),[()=>{var y,x;return{"list-group-title":c(hn).groupHeader,active:Bn(c(hn),J(),sA()),first:(x=Mt,x===0),hover:Je()===Mt,"group-item":c(hn).groupItem,"not-selectable":((y=c(hn))===null||y===void 0?void 0:y.selectable)===!1}}]),ue("mouseover",Yo,()=>ct(Mt)),ue("focus",Yo,()=>ct(Mt)),ue("click",Yo,jC(()=>(function(y){var{item:x,i:H}=y;if(x?.selectable!==!1)return J()&&!D()&&J()[sA()]===x[sA()]?Le():void((function(k){return k.groupHeader&&k.selectable||k.selectable||!k.hasOwnProperty("selectable")})(x)&&(Je(H),L(x)))})({item:c(hn),i:Mt}))),ue("keydown",Yo,YI(jC(function(y){Lf.call(this,e,y)}))),cA(Vn,Yo)}),cA(Ni,Oi)},st=Ni=>{var Oi=vi(),Vn=At(Oi),hn=Mt=>{var sa=vi();Ba(At(sa),e,"empty",{},Yo=>{cA(Yo,LxA())}),cA(Mt,sa)};TA(Vn,Mt=>{pA()||Mt(hn)},!0),cA(Ni,Oi)};TA(va,Ni=>{c(l),EA(()=>c(l).length>0)?Ni(Lt):Ni(st,!1)},!0),cA(Vt,Ri)};TA(rt,Vt=>{EA(()=>A.list)?Vt(bt):Vt(Kn,!1)});var xi=bA(rt,2),Ji=Vt=>{var Ri=vi();Ba(At(Ri),e,"list-append",{},null),cA(Vt,Ri)};TA(xi,Vt=>{EA(()=>A["list-append"])&&Vt(Ji)}),bs(oe,Vt=>Wo?.(Vt)),Ko(oe,Vt=>R(yt,Vt),()=>c(yt)),Nr(()=>ue("scroll",oe,Xi)),Nr(()=>ue("pointerup",oe,YI(jC(function(Vt){Lf.call(this,e,Vt)})))),Nr(()=>ue("mousedown",oe,YI(jC(function(Vt){Lf.call(this,e,Vt)})))),ve(()=>SA=$t(oe,1,"svelte-select-list svelte-1ul7oo4",null,SA,{prefloat:c(Qa)})),cA(dA,oe)};TA(re,dA=>{MA()&&dA(di)});var ln=bA(re,2),Qn=CA(ln),Jo=dA=>{var SA=KxA(),oe=At(SA),xe=CA(oe),it=CA(bA(oe,2));ve(()=>{Rt(xe,c(s)),Rt(it,c(g))}),cA(dA,SA)};TA(Qn,dA=>{U()&&dA(Jo)});var ya=bA(ln,2);Ba(CA(ya),e,"prepend",{},null);var wi=bA(ya,2),Io=CA(wi),tr=dA=>{var SA=vi(),oe=At(SA),xe=rt=>{var bt=vi();Ea(At(bt),1,J,Ra,(Kn,xi,Ji)=>{var Vt,Ri=JxA(),va=CA(Ri);Ba(CA(va),e,"selection",{get selection(){return c(xi)},index:Ji},Ni=>{var Oi=hr();ve(()=>Rt(Oi,(c(xi),G(P()),EA(()=>c(xi)[P()])))),cA(Ni,Oi)});var Lt=bA(va,2),st=Ni=>{var Oi=UxA();Ba(CA(Oi),e,"multi-clear-icon",{},Vn=>{eL(Vn)}),ue("pointerup",Oi,YI(jC(()=>_A(Ji)))),cA(Ni,Oi)};TA(Lt,Ni=>{_()||F()||!eL||Ni(st)}),ve(()=>Vt=$t(Ri,1,"multi-item svelte-1ul7oo4",null,Vt,{active:c(ke)===Ji,disabled:_()})),ue("click",Ri,YI(()=>F()?_A(Ji):{})),ue("keydown",Ri,YI(jC(function(Ni){Lf.call(this,e,Ni)}))),cA(Kn,Ri)}),cA(rt,bt)},it=rt=>{var bt,Kn=YxA();Ba(CA(Kn),e,"selection",{get selection(){return J()}},xi=>{var Ji=hr();ve(()=>Rt(Ji,(G(J()),G(P()),EA(()=>J()[P()])))),cA(xi,Ji)}),ve(()=>bt=$t(Kn,1,"selected-item svelte-1ul7oo4",null,bt,{"hide-selected-item":c(o)})),cA(rt,Kn)};TA(oe,rt=>{D()?rt(xe):rt(it,!1)}),cA(dA,SA)};TA(Io,dA=>{c(n)&&dA(tr)});var yo=bA(Io,2);Py(yo,()=>ye(ye({readOnly:!uA()},c(nA)),{},{placeholder:c(r),style:XA(),disabled:_()}),void 0,void 0,void 0,"svelte-1ul7oo4",!0),Ko(yo,dA=>M(dA),()=>M());var Pa=bA(wi,2),Gn=CA(Pa),Si=dA=>{var SA=TxA();Ba(CA(SA),e,"loading-icon",{},oe=>{(function(xe){cA(xe,FxA())})(oe)}),cA(dA,SA)};TA(Gn,dA=>{ZA()&&dA(Si)});var Pt=bA(Gn,2),Sn=dA=>{var SA=HxA();Ba(CA(SA),e,"clear-icon",{},oe=>{eL(oe)}),ue("click",SA,dn),cA(dA,SA)};TA(Pt,dA=>{c(a)&&dA(Sn)});var Bo=bA(Pt,2),ko=dA=>{var SA=zxA();Ba(CA(SA),e,"chevron-icon",{get listOpen(){return MA()}},oe=>{(function(xe){cA(xe,RxA())})(oe)}),cA(dA,SA)};TA(Bo,dA=>{Ee()&&dA(ko)});var vA=bA(Pa,2);Ba(vA,e,"input-hidden",{get value(){return J()}},dA=>{var SA=OxA();ve(oe=>{Mn(SA,"name",b()),AB(SA,oe)},[()=>(G(J()),EA(()=>J()?JSON.stringify(J()):null))]),cA(dA,SA)});var VA=bA(vA,2),me=dA=>{var SA=vi();Ba(At(SA),e,"required",{get value(){return J()}},oe=>{cA(oe,PxA())}),cA(dA,SA)};return TA(VA,dA=>{G(mA()),G(J()),EA(()=>mA()&&(!J()||J().length===0))&&dA(me)}),Nr(()=>ue("pointerup",Do,YI(gn))),Ko(Do,dA=>S(dA),()=>S()),bs(Do,dA=>Mo?.(dA)),ve(()=>{var dA;ra=$t(Do,1,"svelte-select ".concat((dA=ut())!==null&&dA!==void 0?dA:""),"svelte-1ul7oo4",ra,{multi:D(),disabled:_(),focused:U(),"list-open":MA(),"show-chevron":Ee(),error:ee()}),Ul(Do,YA())}),ue("keydown",yo,et),ue("blur",yo,Ge),ue("focus",yo,Ye),ev(yo,j),cA(t,Do),Ot(e,"getFilteredItems",HA),Ot(e,"handleClear",dn),xt(Zo)}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +table.jse-transform-wizard.svelte-9wqi8y { + border-collapse: collapse; + border-spacing: 0; + width: 100%; +} +table.jse-transform-wizard.svelte-9wqi8y input:where(.svelte-9wqi8y) { + font-family: inherit; + font-size: inherit; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) th:where(.svelte-9wqi8y) { + font-weight: normal; + text-align: left; + width: 60px; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) { + width: 100%; + display: flex; + flex-direction: row; + margin-bottom: calc(0.5 * var(--jse-padding, 10px)); +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select .multi-item { + align-items: center; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select .value-container { + gap: 0 !important; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-filter-path { + flex: 4; + margin-right: calc(0.5 * var(--jse-padding, 10px)); +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-filter-relation { + flex: 1.5; + margin-right: calc(0.5 * var(--jse-padding, 10px)); +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-sort-path { + flex: 3; + margin-right: calc(0.5 * var(--jse-padding, 10px)); +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-sort-direction { + flex: 1; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-projection-paths { + flex: 1; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select input { + box-sizing: border-box; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .jse-filter-value:where(.svelte-9wqi8y) { + flex: 4; + padding: 4px 8px; + border: var(--jse-input-border, 1px solid #d8dbdf); + border-radius: var(--jse-input-radius, 3px); + outline: none; + background: var(--jse-input-background, var(--jse-background-color, #fff)); + color: inherit; +} +table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .jse-filter-value:where(.svelte-9wqi8y):focus { + border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); +}`);var qxA=FA('
    Filter
    Sort
    Pick
    ');function VxA(t,e){var A,i,n,o,a;St(e,!1);var r=IA(void 0,!0),s=IA(void 0,!0),g=IA(void 0,!0),l=IA(void 0,!0),C=IA(void 0,!0),I=IA(void 0,!0),d=lr("jsoneditor:TransformWizard"),B=N(e,"json",9),E=N(e,"queryOptions",29,()=>({})),Q=N(e,"onChange",9),f=["==","!=","<","<=",">",">="].map(UA=>({value:UA,label:UA})),b=[{value:"asc",label:"ascending"},{value:"desc",label:"descending"}],S=IA((A=E())!==null&&A!==void 0&&(A=A.filter)!==null&&A!==void 0&&A.path?PI(E().filter.path):void 0,!0),M=IA((i=f.find(UA=>{var mA;return UA.value===((mA=E().filter)===null||mA===void 0?void 0:mA.relation)}))!==null&&i!==void 0?i:f[0],!0),D=IA(((n=E())===null||n===void 0||(n=n.filter)===null||n===void 0?void 0:n.value)||"",!0),F=IA((o=E())!==null&&o!==void 0&&(o=o.sort)!==null&&o!==void 0&&o.path?PI(E().sort.path):void 0,!0),_=IA((a=b.find(UA=>{var mA;return UA.value===((mA=E().sort)===null||mA===void 0?void 0:mA.direction)}))!==null&&a!==void 0?a:b[0],!0);RA(()=>G(B()),()=>{R(r,Array.isArray(B()))}),RA(()=>(c(r),G(B())),()=>{R(s,c(r)?QL(B()):[])}),RA(()=>(c(r),G(B())),()=>{R(g,c(r)?QL(B(),!0):[])}),RA(()=>(c(s),PI),()=>{R(l,c(s).map(PI))}),RA(()=>(c(g),PI),()=>{R(C,c(g)?c(g).map(PI):[])}),RA(()=>(G(E()),c(C),Bi),()=>{var UA;R(I,(UA=E())!==null&&UA!==void 0&&(UA=UA.projection)!==null&&UA!==void 0&&UA.paths&&c(C)?E().projection.paths.map(mA=>c(C).find(KA=>Bi(KA.value,mA))).filter(mA=>!!mA):void 0)}),RA(()=>c(S),()=>{var UA,mA,KA;mA=(UA=c(S))===null||UA===void 0?void 0:UA.value,Bi((KA=E())===null||KA===void 0||(KA=KA.filter)===null||KA===void 0?void 0:KA.path,mA)||(d("changeFilterPath",mA),E(Or(E(),["filter","path"],mA,!0)),Q()(E()))}),RA(()=>c(M),()=>{var UA,mA,KA;mA=(UA=c(M))===null||UA===void 0?void 0:UA.value,Bi((KA=E())===null||KA===void 0||(KA=KA.filter)===null||KA===void 0?void 0:KA.relation,mA)||(d("changeFilterRelation",mA),E(Or(E(),["filter","relation"],mA,!0)),Q()(E()))}),RA(()=>c(D),()=>{var UA,mA;UA=c(D),Bi((mA=E())===null||mA===void 0||(mA=mA.filter)===null||mA===void 0?void 0:mA.value,UA)||(d("changeFilterValue",UA),E(Or(E(),["filter","value"],UA,!0)),Q()(E()))}),RA(()=>c(F),()=>{var UA,mA,KA;mA=(UA=c(F))===null||UA===void 0?void 0:UA.value,Bi((KA=E())===null||KA===void 0||(KA=KA.sort)===null||KA===void 0?void 0:KA.path,mA)||(d("changeSortPath",mA),E(Or(E(),["sort","path"],mA,!0)),Q()(E()))}),RA(()=>c(_),()=>{var UA,mA,KA;mA=(UA=c(_))===null||UA===void 0?void 0:UA.value,Bi((KA=E())===null||KA===void 0||(KA=KA.sort)===null||KA===void 0?void 0:KA.direction,mA)||(d("changeSortDirection",mA),E(Or(E(),["sort","direction"],mA,!0)),Q()(E()))}),RA(()=>c(I),()=>{(function(UA){var mA;Bi((mA=E())===null||mA===void 0||(mA=mA.projection)===null||mA===void 0?void 0:mA.paths,UA)||(d("changeProjectionPaths",UA),E(Or(E(),["projection","paths"],UA,!0)),Q()(E()))})(c(I)?c(I).map(UA=>UA.value):void 0)}),kn(),Ai(!0);var U=qxA(),J=CA(U),j=CA(J),$=bA(CA(j)),O=CA($),DA=CA(O);Td(DA,{class:"jse-filter-path",showChevron:!0,get items(){return c(l)},get value(){return c(S)},set value(UA){R(S,UA)},$$legacy:!0});var P=bA(DA,2);Td(P,{class:"jse-filter-relation",showChevron:!0,clearable:!1,get items(){return f},get value(){return c(M)},set value(UA){R(M,UA)},$$legacy:!0});var aA=bA(P,2),iA=bA(j),BA=bA(CA(iA)),oA=CA(BA),sA=CA(oA);Td(sA,{class:"jse-sort-path",showChevron:!0,get items(){return c(l)},get value(){return c(F)},set value(UA){R(F,UA)},$$legacy:!0}),Td(bA(sA,2),{class:"jse-sort-direction",showChevron:!0,clearable:!1,get items(){return b},get value(){return c(_)},set value(UA){R(_,UA)},$$legacy:!0});var hA=bA(iA),YA=bA(CA(hA)),ee=CA(YA);Td(CA(ee),{class:"jse-projection-paths",multiple:!0,showChevron:!0,get items(){return c(C)},get value(){return c(I)},set value(UA){R(I,UA)},$$legacy:!0}),ev(aA,()=>c(D),UA=>R(D,UA)),cA(t,U),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-select-query-language.svelte-jrd4q2 { + position: relative; + width: 32px; +} +.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) { + position: absolute; + top: 0; + right: 0; + display: flex; + flex-direction: column; + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); +} +.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) .jse-query-language:where(.svelte-jrd4q2) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + text-align: left; + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + white-space: nowrap; + color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); + background: var(--jse-context-menu-background, #656565); +} +.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) .jse-query-language:where(.svelte-jrd4q2):hover { + background: var(--jse-context-menu-background-highlight, #7a7a7a); +}`);var WxA=FA(''),ZxA=FA('
    ');function XxA(t,e){St(e,!1);var A=N(e,"queryLanguages",8),i=N(e,"queryLanguageId",12),n=N(e,"onChangeQueryLanguage",8);Ai();var o=ZxA();Ea(CA(o),5,A,Ra,(a,r)=>{var s,g=WxA(),l=CA(g),C=B=>{Wi(B,{get data(){return bS}})},I=B=>{Wi(B,{get data(){return MS}})};TA(l,B=>{c(r),G(i()),EA(()=>c(r).id===i())?B(C):B(I,!1)});var d=bA(l);ve(()=>{var B;s=$t(g,1,"jse-query-language svelte-jrd4q2",null,s,{selected:c(r).id===i()}),Mn(g,"title",(c(r),EA(()=>"Select ".concat(c(r).name," as query language")))),Rt(d," ".concat((c(r),(B=EA(()=>c(r).name))!==null&&B!==void 0?B:"")))}),ue("click",g,()=>{return B=c(r).id,i(B),void n()(B);var B}),cA(a,g)}),cA(t,o),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-header.svelte-1k211ye { + display: flex; + background: var(--jse-theme-color, #3883fa); + color: var(--jse-menu-color, var(--jse-text-color-inverse, #fff)); +} +.jse-header.svelte-1k211ye .jse-title:where(.svelte-1k211ye) { + flex: 1; + padding: 5px; + vertical-align: middle; +} +.jse-header.svelte-1k211ye button:where(.svelte-1k211ye) { + border: none; + background: transparent; + min-width: 32px; + color: inherit; + cursor: pointer; +} +.jse-header.svelte-1k211ye button:where(.svelte-1k211ye):hover { + background: rgba(255, 255, 255, 0.1); +}`);var $xA=FA(''),ARA=FA('
    ');function Bv(t,e){St(e,!1);var A=N(e,"title",9,"Modal"),i=N(e,"fullScreenButton",9,!1),n=N(e,"fullscreen",13,!1),o=N(e,"onClose",9,void 0);Ai(!0);var a=ARA(),r=CA(a),s=CA(r),g=bA(r,2);Ba(g,e,"actions",{},null);var l=bA(g,2),C=d=>{var B=$xA(),E=CA(B),Q=tt(()=>n()?gV:nV);Wi(E,{get data(){return c(Q)}}),ue("click",B,()=>n(!n())),cA(d,B)};TA(l,d=>{i()&&d(C)});var I=bA(l,2);Wi(CA(I),{get data(){return g3}}),ve(()=>Rt(s,A())),ue("click",I,()=>{var d;return(d=o())===null||d===void 0?void 0:d()}),cA(t,a),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-config.svelte-5gkegr { + border: none; + background: transparent; + min-width: 32px; + color: inherit; + cursor: pointer; +} +.jse-config.svelte-5gkegr:hover { + background: rgba(255, 255, 255, 0.1); +} +.jse-config.hide.svelte-5gkegr { + display: none; +}`);var eRA=FA(''),tL=lr("jsoneditor:AutoScrollHandler");function ziA(t){var e,A;function i(r){return r<20?200:r<50?400:1200}function n(){if(t){var r=.05*(e||0);t.scrollTop+=r}}function o(r){A&&r===e||(a(),tL("startAutoScroll",r),e=r,A=setInterval(n,50))}function a(){A&&(tL("stopAutoScroll"),clearInterval(A),A=void 0,e=void 0)}return tL("createAutoScrollHandler",t),{onDrag:function(r){if(t){var s=r.clientY,{top:g,bottom:l}=t.getBoundingClientRect();sl?o(i(s-l)):a()}},onDragEnd:function(){a()}}}var tRA=(t,e,A,i)=>(t/=i/2)<1?A/2*t*t+e:-A/2*(--t*(t-2)-1)+e,zoA=()=>{var t,e,A,i,n,o,a,r,s,g,l,C,I;function d(Q){return Q.getBoundingClientRect().top-(t.getBoundingClientRect?t.getBoundingClientRect().top:0)+A}function B(Q){t.scrollTo?t.scrollTo(t.scrollLeft,Q):t.scrollTop=Q}function E(Q){g||(g=Q),B(o(l=Q-g,A,r,s)),I=!0,l1&&arguments[1]!==void 0?arguments[1]:{};switch(s=1e3,n=f.offset||0,C=f.callback,o=f.easing||tRA,a=f.a11y||!1,typeof f.container){case"object":t=f.container;break;case"string":t=document.querySelector(f.container);break;default:t=window.document.documentElement}switch(A=t.scrollTop,typeof Q){case"number":e=void 0,a=!1,i=A+Q;break;case"object":i=d(e=Q);break;case"string":e=document.querySelector(Q),i=d(e)}switch(r=i-A+n,typeof f.duration){case"number":s=f.duration;break;case"function":s=f.duration(r)}I?g=0:requestAnimationFrame(E)}};function oh(t,e){var A=Date.now(),i=t();return e(Date.now()-A),i}var $Q=lr("validation"),iRA={createObjectDocumentState:()=>({type:"object",properties:{}}),createArrayDocumentState:()=>({type:"array",items:[]}),createValueDocumentState:()=>({type:"value"})};function OiA(t,e,A,i){return oG(t,e,A,i,iRA)}function OoA(t,e,A,i){if($Q("validateJSON"),!e)return[];if(A!==i){var n=A.stringify(t);return e(n!==void 0?i.parse(n):void 0)}return e(t)}function nRA(t,e,A,i){if($Q("validateText"),t.length>104857600)return{validationErrors:[{path:[],message:"Validation turned off: the document is too large",severity:Uc.info}]};if(t.length!==0)try{var n=oh(()=>A.parse(t),s=>$Q("validate: parsed json in ".concat(s," ms")));if(!e)return;var o=A===i?n:oh(()=>i.parse(t),s=>$Q("validate: parsed json with the validationParser in ".concat(s," ms"))),a=oh(()=>e(o),s=>$Q("validate: validated json in ".concat(s," ms")));return Vi(a)?void 0:{validationErrors:a}}catch(s){var r=oh(()=>(function(g,l){if(g.length>FSA)return!1;try{return l.parse(ul(g)),!0}catch{return!1}})(t,A),g=>$Q("validate: checked whether repairable in ".concat(g," ms")));return{parseError:uh(t,s.message||s.toString()),isRepairable:r}}}var Gy=lr("jsoneditor:FocusTracker");function cG(t){var e,{onMount:A,onDestroy:i,getWindow:n,hasFocus:o,onFocus:a,onBlur:r}=t,s=!1;function g(){var C=o();C&&(clearTimeout(e),s||(Gy("focus"),a(),s=C))}function l(){s&&(clearTimeout(e),e=setTimeout(()=>{o()||(Gy("blur"),s=!1,r())}))}A(()=>{Gy("mount FocusTracker");var C=n();C&&(C.addEventListener("focusin",g,!0),C.addEventListener("focusout",l,!0))}),i(()=>{Gy("destroy FocusTracker");var C=n();C&&(C.removeEventListener("focusin",g,!0),C.removeEventListener("focusout",l,!0))})}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-message.svelte-cbvd26 { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + padding: var(--jse-padding, 10px); + display: flex; + gap: var(--jse-padding, 10px); + flex-wrap: wrap; + align-items: stretch; +} +.jse-message.jse-success.svelte-cbvd26 { + background: var(--message-success-background, #9ac45d); + color: var(--jse-message-success-color, #fff); +} +.jse-message.svelte-cbvd26 .jse-text:where(.svelte-cbvd26) { + display: flex; + flex: 1; + min-width: 60%; + align-items: center; +} +.jse-message.svelte-cbvd26 .jse-text.jse-clickable:where(.svelte-cbvd26) { + cursor: pointer; +} +.jse-message.svelte-cbvd26 .jse-text.jse-clickable:where(.svelte-cbvd26):hover { + background-color: rgba(255, 255, 255, 0.1); +} +.jse-message.jse-error.svelte-cbvd26 { + background: var(--jse-message-error-background, var(--jse-error-color, #ee5341)); + color: var(--jse-message-error-color, #fff); +} +.jse-message.jse-warning.svelte-cbvd26 { + background: var(--jse-message-warning-background, #ffde5c); + color: var(--jse-message-warning-color, #4d4d4d); +} +.jse-message.jse-info.svelte-cbvd26 { + background: var(--jse-message-info-background, #4f91ff); + color: var(--jse-message-info-color, #fff); +} +.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) { + display: flex; + gap: var(--jse-padding, 10px); +} +.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) button.jse-action:where(.svelte-cbvd26) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-message-action-background, rgba(255, 255, 255, 0.2)); + color: inherit; + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); +} +.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) button.jse-action:where(.svelte-cbvd26):hover { + background: var(--jse-message-action-background-highlight, rgba(255, 255, 255, 0.3)); +}`);var oRA=FA(''),aRA=FA('
    ');function el(t,e){St(e,!1);var A=N(e,"type",9,"success"),i=N(e,"icon",9,void 0),n=N(e,"message",9,void 0),o=N(e,"actions",25,()=>[]),a=N(e,"onClick",9,void 0),r=N(e,"onClose",9,void 0);r()&&Yl(r()),Ai(!0);var s,g=aRA(),l=CA(g),C=CA(l),I=CA(C),d=E=>{Wi(E,{get data(){return i()}})};TA(I,E=>{i()&&E(d)});var B=bA(I);Ea(bA(l,2),5,o,Ra,(E,Q)=>{var f=oRA(),b=CA(f),S=D=>{Wi(D,{get data(){return c(Q),EA(()=>c(Q).icon)}})};TA(b,D=>{c(Q),EA(()=>c(Q).icon)&&D(S)});var M=bA(b);ve(()=>{var D;Mn(f,"title",(c(Q),EA(()=>c(Q).title))),f.disabled=(c(Q),EA(()=>c(Q).disabled)),Rt(M," ".concat((c(Q),(D=EA(()=>c(Q).text))!==null&&D!==void 0?D:"")))}),ue("click",f,()=>{c(Q).onClick&&c(Q).onClick()}),ue("mousedown",f,()=>{c(Q).onMouseDown&&c(Q).onMouseDown()}),cA(E,f)}),ve(()=>{var E,Q;$t(g,1,"jse-message jse-".concat((E=A())!==null&&E!==void 0?E:""),"svelte-cbvd26"),s=$t(l,1,"jse-text svelte-cbvd26",null,s,{"jse-clickable":!!a()}),Rt(B," ".concat((Q=n())!==null&&Q!==void 0?Q:""))}),ue("click",l,function(){a()&&a()()}),cA(t,g),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-validation-errors-overview.svelte-1342rh4 { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + overflow: auto; + max-height: 25%; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) { + border-collapse: collapse; + width: 100%; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) { + cursor: pointer; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-error:where(.svelte-1342rh4) { + background: var(--jse-message-error-background, var(--jse-error-color, #ee5341)); + color: var(--jse-message-error-color, #fff); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-warning:where(.svelte-1342rh4) { + background: var(--jse-message-warning-background, #ffde5c); + color: var(--jse-message-warning-color, #4d4d4d); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-warning:where(.svelte-1342rh4):hover { + filter: brightness(105%); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-info:where(.svelte-1342rh4) { + background: var(--jse-message-info-background, #4f91ff); + color: var(--jse-message-info-color, #fff); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4):hover { + filter: brightness(110%); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td:where(.svelte-1342rh4) { + padding: 4px var(--jse-padding, 10px); + vertical-align: middle; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-icon:where(.svelte-1342rh4) { + width: 36px; + box-sizing: border-box; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) { + width: 36px; + box-sizing: border-box; + padding: 0; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) button.jse-validation-errors-collapse:where(.svelte-1342rh4) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + width: 36px; + height: 26px; + cursor: pointer; +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) button.jse-validation-errors-collapse:where(.svelte-1342rh4):hover { + background-color: rgba(255, 255, 255, 0.2); +} +.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td:where(.svelte-1342rh4) div.jse-validation-errors-expand:where(.svelte-1342rh4) { + display: inline-block; + position: relative; + top: 3px; +}`);var rRA=FA(''),sRA=FA(' '),gRA=FA(' '),lRA=FA('
    '),cRA=FA('
    '),CRA=FA('
    ');function CG(t,e){St(e,!1);var A=IA(void 0,!0),i=N(e,"validationErrors",9),n=N(e,"selectError",9),o=IA(!0,!0);function a(){R(o,!1)}function r(){R(o,!0)}RA(()=>G(i()),()=>{R(A,i().length)}),kn(),Ai(!0);var s=vi(),g=At(s),l=C=>{var I=CRA(),d=CA(I),B=Q=>{var f=lRA(),b=CA(f),S=CA(b);Ea(S,1,()=>(G(tv),G(i()),G(xy),EA(()=>tv(i(),xy))),Ra,(F,_,U)=>{var J=sRA(),j=CA(J);Wi(CA(j),{get data(){return BI}});var $=bA(j),O=CA($),DA=bA($),P=CA(DA),aA=CA(bA(DA)),iA=BA=>{var oA=rRA();Wi(CA(oA),{get data(){return sV}}),ue("click",oA,jC(a)),cA(BA,oA)};TA(aA,BA=>{G(i()),EA(()=>U===0&&i().length>1)&&BA(iA)}),ve(BA=>{var oA;$t(J,1,"jse-validation-".concat((c(_),(oA=EA(()=>c(_).severity))!==null&&oA!==void 0?oA:"")),"svelte-1342rh4"),Rt(O,BA),Rt(P,(c(_),EA(()=>c(_).message)))},[()=>(G(vg),c(_),EA(()=>vg(c(_).path)))]),ue("click",J,()=>{setTimeout(()=>n()(c(_)))}),cA(F,J)});var M=bA(S),D=F=>{var _=gRA(),U=bA(CA(_),2),J=CA(U);ve(()=>Rt(J,"(and ".concat(c(A)-xy," more errors)"))),cA(F,_)};TA(M,F=>{c(A)>xy&&F(D)}),cA(Q,f)},E=Q=>{var f=cRA(),b=CA(f),S=CA(b),M=CA(S);Wi(CA(M),{get data(){return BI}});var D=CA(bA(M));Wi(CA(bA(D)),{get data(){return NS}}),ve(F=>{var _;$t(S,1,"jse-validation-".concat(F??""),"svelte-1342rh4"),Rt(D,"".concat((_=c(A))!==null&&_!==void 0?_:""," validation errors "))},[()=>(G(i()),EA(()=>{return F=i(),[Uc.error,Uc.warning,Uc.info].find(_=>F.some(U=>U.severity===_));var F}))]),ue("click",S,r),cA(Q,f)};TA(d,Q=>{c(o)||c(A)===1?Q(B):Q(E,!1)}),cA(C,I)};TA(g,C=>{G(Vi),G(i()),EA(()=>!Vi(i()))&&C(l)}),cA(t,s),xt()}function Ev(t,e){if(t)return t.addEventListener("keydown",A),{destroy(){t.removeEventListener("keydown",A)}};function A(i){i.key==="Escape"&&(i.preventDefault(),i.stopPropagation(),e())}}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +dialog.jse-modal.svelte-2aoco4 { + border-radius: 3px; + font-size: var(--jse-padding, 10px); + border: none; + padding: 0; + display: flex; + min-width: 0; + margin: auto; + overflow: visible; + transition: width 0.1s ease-in-out, height 0.1s ease-in-out; +} +dialog.jse-modal.jse-sort-modal.svelte-2aoco4 { + width: 400px; +} +dialog.jse-modal.jse-repair-modal.svelte-2aoco4 { + width: 600px; + height: 500px; +} +dialog.jse-modal.jse-jsoneditor-modal.svelte-2aoco4 { + width: 800px; + height: 600px; +} +dialog.jse-modal.jse-transform-modal.svelte-2aoco4 { + width: 1200px; + height: 800px; +} +dialog.jse-modal.jse-fullscreen.svelte-2aoco4 { + width: 100%; + height: 100%; +} +dialog.jse-modal.svelte-2aoco4::backdrop { + background: var(--jse-overlay-background, rgba(0, 0, 0, 0.3)); +} +dialog.jse-modal[open].svelte-2aoco4 { + animation: svelte-2aoco4-zoom 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); +} +dialog.jse-modal[open].svelte-2aoco4::backdrop { + animation: svelte-2aoco4-fade 0.2s ease-out; +} +dialog.jse-modal.svelte-2aoco4 .jse-modal-inner:where(.svelte-2aoco4) { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; + min-height: 0; + padding: 0; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + line-height: normal; + background: var(--jse-modal-background, #f5f5f5); + color: var(--jse-text-color, #4d4d4d); +} +@keyframes svelte-2aoco4-zoom { + from { + transform: scale(0.95); + } + to { + transform: scale(1); + } +} +@keyframes svelte-2aoco4-fade { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +dialog.jse-modal.svelte-2aoco4 .svelte-select { + --border: var(--jse-svelte-select-border, 1px solid #d8dbdf); + --item-is-active-bg: var(--jse-item-is-active-bg, #3883fa); + --border-radius: var(--jse-svelte-select-border-radius, 3px); + --background: var(--jse-svelte-select-background, #fff); + --padding: var(--jse-svelte-select-padding, 0 10px); + --multi-select-padding: var(--jse-svelte-select-multi-select-padding, 0 10px); + --font-size: var(--jse-svelte-select-font-size, var(--jse-font-size, 16px)); + --height: 36px; + --multi-item-height: 28px; + --multi-item-margin: 2px; + --multi-item-padding: 2px 8px; + --multi-item-border-radius: 6px; + --indicator-top: 8px; +}`);var IRA=FA('
    ');function $f(t,e){St(e,!1);var A=N(e,"className",8,void 0),i=N(e,"fullscreen",8,!1),n=N(e,"onClose",8),o=IA();function a(){n()()}is(()=>c(o).showModal()),Yl(()=>c(o).close()),Ai();var r,s=IRA(),g=CA(s);Ba(CA(g),e,"default",{},null),Ko(s,l=>R(o,l),()=>c(o)),Nr(()=>ue("close",s,a)),Nr(()=>{return ue("pointerdown",s,(l=a,function(){for(var C=arguments.length,I=new Array(C),d=0;due("cancel",s,YI(function(l){Lf.call(this,e,l)}))),bs(s,(l,C)=>Ev?.(l,C),()=>a),ve(l=>r=$t(s,1,l,"svelte-2aoco4",r,{"jse-fullscreen":i()}),[()=>n1((G(Oc),G(A()),EA(()=>Oc("jse-modal",A()))))]),cA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-modal-contents.svelte-10a6ob6 { + flex: 1; + display: flex; + flex-direction: column; + padding: 20px; + overflow: auto; + min-width: 0; + min-height: 0; +} +.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) { + display: flex; + flex-direction: row; + justify-content: flex-end; + padding-top: var(--jse-padding, 10px); +} +.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +} + +.jse-shortcuts.svelte-10a6ob6 { + display: flex; + flex-wrap: wrap; + justify-content: space-around; + margin: calc(2 * var(--jse-padding, 10px)) 0; +} +.jse-shortcuts.svelte-10a6ob6 .jse-shortcut:where(.svelte-10a6ob6) .jse-key:where(.svelte-10a6ob6) { + font-size: 200%; + color: var(--jse-theme-color, #3883fa); +}`);var dRA=FA('
    Clipboard permission is disabled by your browser. You can use:
    for copy
    for cut
    for paste
    ',1);function PoA(t,e){St(e,!1);var A=N(e,"onClose",9),i=ZL()?"\u2318":"Ctrl";Ai(!0),$f(t,{get onClose(){return A()},className:"jse-copy-paste",children:(n,o)=>{var a=dRA(),r=At(a);Bv(r,{title:"Copying and pasting",get onClose(){return A()}});var s=bA(r,2),g=bA(CA(s),2),l=CA(g),C=CA(l),I=CA(C),d=bA(l,2),B=CA(d),E=CA(B),Q=CA(bA(d,2)),f=CA(Q),b=CA(bA(g,2));ve(()=>{Rt(I,"".concat(i,"+C")),Rt(E,"".concat(i,"+X")),Rt(f,"".concat(i,"+V"))}),ue("click",b,function(){for(var S,M=arguments.length,D=new Array(M),F=0;F'),ERA=FA('
    '),QRA=FA(''),hRA=FA('
    ');function Sv(t,e){St(e,!1);var A=N(e,"items",25,()=>[]);Ai(!0);var i=hRA(),n=CA(i);Ba(n,e,"left",{},null);var o=bA(n,2);Ea(o,1,A,Ra,(a,r)=>{var s=vi(),g=At(s),l=I=>{cA(I,BRA())},C=I=>{var d=vi(),B=At(d),E=f=>{cA(f,ERA())},Q=f=>{var b=vi(),S=At(b),M=F=>{var _=QRA(),U=CA(_),J=O=>{Wi(O,{get data(){return c(r),EA(()=>c(r).icon)}})};TA(U,O=>{c(r),EA(()=>c(r).icon)&&O(J)});var j=bA(U,2),$=O=>{var DA=hr();ve(()=>Rt(DA,(c(r),EA(()=>c(r).text)))),cA(O,DA)};TA(j,O=>{c(r),EA(()=>c(r).text)&&O($)}),ve(()=>{var O;$t(_,1,"jse-button ".concat((c(r),(O=EA(()=>c(r).className))!==null&&O!==void 0?O:"")),"svelte-3erbu0"),Mn(_,"title",(c(r),EA(()=>c(r).title))),_.disabled=(c(r),EA(()=>c(r).disabled||!1))}),ue("click",_,function(){for(var O,DA=arguments.length,P=new Array(DA),aA=0;aA{var _=hr();ve(U=>Rt(_,U),[()=>(c(r),EA(()=>(function(U){return console.error("Unknown type of menu item",U),"???"})(c(r))))]),cA(F,_)};TA(S,F=>{G(qC),c(r),EA(()=>qC(c(r)))?F(M):F(D,!1)},!0),cA(f,b)};TA(B,f=>{G(mL),c(r),EA(()=>mL(c(r)))?f(E):f(Q,!1)},!0),cA(I,d)};TA(g,I=>{G(OI),c(r),EA(()=>OI(c(r)))?I(l):I(C,!1)}),cA(a,s)}),Ba(bA(o,2),e,"right",{},null),cA(t,i),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-json-repair-component.svelte-16jv58j { + flex: 1; + display: flex; + flex-direction: column; + background: var(--jse-background-color, #fff); + color: var(--jse-text-color, #4d4d4d); +} +.jse-json-repair-component.svelte-16jv58j .jse-info:where(.svelte-16jv58j) { + padding: calc(0.5 * var(--jse-padding, 10px)); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + vertical-align: center; +} +.jse-json-repair-component.svelte-16jv58j .jse-json-text:where(.svelte-16jv58j) { + flex: 1; + border: none; + padding: 2px; + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + background: var(--jse-input-background, var(--jse-background-color, #fff)); + color: var(--jse-text-color, #4d4d4d); + resize: none; + outline: none; +}`);var uRA=FA('
    Repair invalid JSON, then click apply
    '),fRA=FA('
    ');function mRA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=IA(void 0,!0),a=IA(void 0,!0),r=IA(void 0,!0),s=N(e,"text",13,""),g=N(e,"readOnly",9,!1),l=N(e,"onParse",9),C=N(e,"onRepair",9),I=N(e,"onChange",9,void 0),d=N(e,"onApply",9),B=N(e,"onCancel",9),E=lr("jsoneditor:JSONRepair"),Q=IA(void 0,!0);function f(){if(c(Q)&&c(A)){var $=c(A).position!==void 0?c(A).position:0;c(Q).setSelectionRange($,$),c(Q).focus()}}function b(){d()(s())}function S(){try{s(C()(s())),I()&&I()(s())}catch{}}var M=IA(void 0,!0);RA(()=>G(s()),()=>{R(A,(function($){try{return void l()($)}catch(O){return uh($,O.message)}})(s()))}),RA(()=>G(s()),()=>{R(i,(function($){try{return C()($),!0}catch{return!1}})(s()))}),RA(()=>c(A),()=>{E("error",c(A))}),RA(()=>G(B()),()=>{R(M,[{type:"space"},{type:"button",icon:g3,title:"Cancel repair",className:"jse-cancel",onClick:B()}])}),RA(()=>LS,()=>{R(n,{icon:LS,text:"Show me",title:"Scroll to the error location",onClick:f})}),RA(()=>MC,()=>{R(o,{icon:MC,text:"Auto repair",title:"Automatically repair JSON",onClick:S})}),RA(()=>(c(i),c(n),c(o)),()=>{R(a,c(i)?[c(n),c(o)]:[c(n)])}),RA(()=>G(g()),()=>{R(r,[{icon:Ww,text:"Apply",title:"Apply fixed JSON",disabled:g(),onClick:b}])}),kn(),Ai(!0);var D=fRA(),F=CA(D);Sv(F,{get items(){return c(M)},$$slots:{left:($,O)=>{cA($,uRA())}}});var _=bA(F,2),U=$=>{var O=tt(()=>(c(A),EA(()=>"Cannot parse JSON: ".concat(c(A).message))));el($,{type:"error",get icon(){return BI},get message(){return c(O)},get actions(){return c(a)}})},J=$=>{el($,{type:"success",message:"JSON is valid now and can be parsed.",get actions(){return c(r)}})};TA(_,$=>{c(A)?$(U):$(J,!1)});var j=bA(_,2);Ko(j,$=>R(Q,$),()=>c(Q)),ve(()=>{j.readOnly=g(),AB(j,s())}),ue("input",j,function($){E("handleChange");var O=$.target.value;s()!==O&&(s(O),I()&&I()(s()))}),cA(t,D),xt()}function joA(t,e){St(e,!1);var A=N(e,"text",13),i=N(e,"onParse",9),n=N(e,"onRepair",9),o=N(e,"onApply",9),a=N(e,"onClose",9);function r(g){o()(g),a()()}function s(){a()()}Ai(!0),$f(t,{get onClose(){return a()},className:"jse-repair-modal",children:(g,l)=>{mRA(g,{get onParse(){return i()},get onRepair(){return n()},onApply:r,onCancel:s,get text(){return A()},set text(C){A(C)},$$legacy:!0})},$$slots:{default:!0}}),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +div.jse-collapsed-items.svelte-1v6dhm4 { + margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + color: var(--jse-collapsed-items-link-color, rgba(0, 0, 0, 0.38)); + padding: calc(0.5 * var(--jse-padding, 10px)); + border: 8px solid transparent; + border-width: 8px 0; + background-color: var(--jse-contents-background-color, transparent); + background-image: linear-gradient(var(--jse-collapsed-items-background-color, #f5f5f5), var(--jse-collapsed-items-background-color, #f5f5f5)), linear-gradient(to bottom right, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to bottom left, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to top right, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to top left, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%); + background-repeat: repeat, repeat-x, repeat-x, repeat-x, repeat-x; + background-position: 0 0, 8px 0, 8px 0, 8px 100%, 8px 100%; + background-size: auto auto, 16px 16px, 16px 16px, 16px 16px, 16px 16px; + background-clip: padding-box, border-box, border-box, border-box, border-box; + background-origin: padding-box, border-box, border-box, border-box, border-box; + display: flex; +} +div.jse-collapsed-items.jse-selected.svelte-1v6dhm4 { + background-color: var(--jse-selection-background-color, #d3d3d3); + --jse-collapsed-items-background-color: var(--jse-collapsed-items-selected-background-color, #c2c2c2); +} +div.jse-collapsed-items.svelte-1v6dhm4 div.jse-text:where(.svelte-1v6dhm4), +div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4) { + margin: 0 calc(0.5 * var(--jse-padding, 10px)); +} +div.jse-collapsed-items.svelte-1v6dhm4 div.jse-text:where(.svelte-1v6dhm4) { + display: inline; +} +div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4) { + font-family: inherit; + font-size: inherit; + color: var(--jse-collapsed-items-link-color, rgba(0, 0, 0, 0.38)); + background: none; + border: none; + padding: 0; + text-decoration: underline; + cursor: pointer; +} +div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4):hover, div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4):focus { + color: var(--jse-collapsed-items-link-color-highlight, #ee5341); +}`);var pRA=FA(''),wRA=FA('
    ');function DRA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=IA(void 0,!0),a=IA(void 0,!0),r=N(e,"visibleSections",9),s=N(e,"sectionIndex",9),g=N(e,"total",9),l=N(e,"path",9),C=N(e,"selection",9),I=N(e,"onExpandSection",9),d=N(e,"context",9);RA(()=>(G(r()),G(s())),()=>{R(A,r()[s()])}),RA(()=>c(A),()=>{R(i,c(A).end)}),RA(()=>(G(r()),G(s()),G(g())),()=>{R(n,r()[s()+1]?r()[s()+1].start:g())}),RA(()=>(G(d()),G(C()),G(l()),c(i)),()=>{R(o,Wf(d().getJson(),C(),l().concat(String(c(i)))))}),RA(()=>(c(i),c(n)),()=>{R(a,(function(M,D){var F={start:M,end:Math.min(fL(M),D)},_=Math.max(nv((M+D)/2),M),U={start:_,end:Math.min(fL(_),D)},J=nv(D),j=J===D?J-Pf:J,$={start:Math.max(j,M),end:D},O=[F],DA=U.start>=F.end&&U.end<=$.start;return DA&&O.push(U),$.start>=(DA?U.end:F.end)&&O.push($),O})(c(i),c(n)))}),kn(),Ai(!0);var B,E,Q=wRA(),f=CA(Q),b=CA(f),S=CA(b);Ea(bA(b,2),1,()=>c(a),Ra,(M,D)=>{var F=pRA(),_=CA(F);ve(()=>{var U,J;return Rt(_,"show ".concat((c(D),(U=EA(()=>c(D).start))!==null&&U!==void 0?U:""),"-").concat((c(D),(J=EA(()=>c(D).end))!==null&&J!==void 0?J:"")))}),ue("click",F,()=>I()(l(),c(D))),cA(M,F)}),ve(()=>{var M,D;B=$t(Q,1,"jse-collapsed-items svelte-1v6dhm4",null,B,{"jse-selected":c(o)}),E=Ul(Q,"",E,{"--level":(G(l()),EA(()=>l().length+2))}),Rt(S,"Items ".concat((M=c(i))!==null&&M!==void 0?M:"","-").concat((D=c(n))!==null&&D!==void 0?D:""))}),ue("mousemove",Q,function(M){M.stopPropagation()}),cA(t,Q),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-context-menu-pointer.svelte-10ijtzr { + position: absolute; + top: calc(-0.5 * var(--jse-context-menu-pointer-size, calc(1em + 4px))); + right: calc(-0.5 * var(--jse-context-menu-pointer-size, calc(1em + 4px))); + width: var(--jse-context-menu-pointer-size, calc(1em + 4px)); + height: var(--jse-context-menu-pointer-size, calc(1em + 4px)); + padding: 0; + margin: 0; + cursor: pointer; + background: transparent; + border-radius: 2px; + background: var(--jse-context-menu-pointer-hover-background, #b2b2b2); + color: var(--jse-context-menu-pointer-color, var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff))); + border: none; + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); +} +.jse-context-menu-pointer.jse-root.svelte-10ijtzr { + top: 0; + right: calc(-2px - var(--jse-context-menu-pointer-size, calc(1em + 4px))); +} +.jse-context-menu-pointer.jse-insert.svelte-10ijtzr { + right: -1px; +} +.jse-context-menu-pointer.svelte-10ijtzr:hover { + background: var(--jse-context-menu-pointer-background-highlight, var(--jse-context-menu-background-highlight, #7a7a7a)); +} +.jse-context-menu-pointer.jse-selected.svelte-10ijtzr { + background: var(--jse-context-menu-pointer-background, var(--jse-context-menu-background, #656565)); +} +.jse-context-menu-pointer.jse-selected.svelte-10ijtzr:hover { + background: var(--jse-context-menu-pointer-background-highlight, var(--jse-context-menu-background-highlight, #7a7a7a)); +}`);var yRA=FA('');function TI(t,e){St(e,!1);var A=N(e,"root",9,!1),i=N(e,"insert",9,!1),n=N(e,"selected",9),o=N(e,"onContextMenu",9);Ai(!0);var a,r=yRA();Wi(CA(r),{get data(){return v0}}),ve(()=>{a=$t(r,1,"jse-context-menu-pointer svelte-10ijtzr",null,a,{"jse-root":A(),"jse-insert":i(),"jse-selected":n()}),Mn(r,"title",$L)}),ue("click",r,function(s){for(var g=s.target;g&&g.nodeName!=="BUTTON";)g=g.parentNode;g&&o()({anchor:g,left:0,top:0,width:XC,height:ZC,offsetTop:2,offsetLeft:0,showTip:!0})}),cA(t,r),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-key.svelte-1n4cez4 { + display: inline-block; + min-width: 2em; + padding: 0 5px; + box-sizing: border-box; + outline: none; + border-radius: 1px; + vertical-align: top; + color: var(--jse-key-color, #1a1a1a); + word-break: normal; + overflow-wrap: normal; + white-space: pre-wrap; +} +.jse-key.jse-empty.svelte-1n4cez4 { + min-width: 3em; + outline: 1px dotted var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + -moz-outline-radius: 2px; +} +.jse-key.jse-empty.svelte-1n4cez4::after { + pointer-events: none; + color: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + content: "key"; +}`);var vRA=FA('
    '),bRA=FA(" ",1),MRA=FA('
    ');function qoA(t,e){St(e,!0);var A=Dg(()=>In(e.selection)&&rr(e.selection)),i=Dg(()=>e.context.onRenderValue({path:e.path,value:e.value,mode:e.context.mode,truncateTextSize:e.context.truncateTextSize,readOnly:e.context.readOnly,enforceString:e.enforceString,isEditing:c(A),parser:e.context.parser,normalization:e.context.normalization,selection:e.selection,searchResultItems:e.searchResultItems,onPatch:e.context.onPatch,onPasteJson:e.context.onPasteJson,onSelect:e.context.onSelect,onFind:e.context.onFind,findNextInside:e.context.findNextInside,focus:e.context.focus})),n=vi();Ea(At(n),17,()=>c(i),Ra,(o,a)=>{var r=vi(),s=At(r),g=C=>{var I=Dg(()=>c(a).action),d=MRA();bs(d,(B,E)=>{var Q;return(Q=c(I))===null||Q===void 0?void 0:Q(B,E)},()=>c(a).props),cA(C,d)},l=C=>{var I=Dg(()=>c(a).component),d=vi();WnA(At(d),()=>c(I),(B,E)=>{E(B,e1(()=>c(a).props))}),cA(C,d)};TA(s,C=>{USA(c(a))?C(g):C(l,!1)}),cA(o,r)}),cA(t,n),xt()}var kRA={selecting:!1,selectionAnchor:void 0,selectionAnchorType:void 0,selectionFocus:void 0,dragging:!1};function iL(t){var{json:e,selection:A,deltaY:i,items:n}=t;if(!A)return{operations:void 0,updatedSelection:void 0,offset:0};var o=i<0?(function(l){for(var{json:C,items:I,selection:d,deltaY:B}=l,E=$C(C,d),Q=I.findIndex(F=>Bi(F.path,E)),f=()=>{var F;return(F=I[b-1])===null||F===void 0?void 0:F.height},b=Q,S=0;f()!==void 0&&Math.abs(B)>S+f()/2;)S+=f(),b-=1;var M=I[b].path,D=b-Q;return b!==Q&&I[b]!==void 0?{beforePath:M,offset:D}:void 0})({json:e,selection:A,deltaY:i,items:n}):(function(l){for(var C,{json:I,items:d,selection:B,deltaY:E}=l,Q=i1(I,B),f=d.findIndex(j=>Bi(j.path,Q)),b=0,S=f,M=()=>{var j;return(j=d[S+1])===null||j===void 0?void 0:j.height};M()!==void 0&&Math.abs(E)>b+M()/2;)b+=M(),S+=1;var D=Ki(Q),F=je(I,D),_=Array.isArray(F)?S:S+1,U=(C=d[_])===null||C===void 0?void 0:C.path,J=S-f;return U?{beforePath:U,offset:J}:{append:!0,offset:J}})({json:e,selection:A,deltaY:i,items:n});if(!o||o.offset===0)return{operations:void 0,updatedSelection:void 0,offset:0};var a=(function(l,C,I){if(!C)return[];var d="beforePath"in I?I.beforePath:void 0,B="append"in I?I.append:void 0,E=Ki(lt(C)),Q=je(l,E);if(!(B||d&&q0(d,E)&&d.length>E.length))return[];var f=$C(l,C),b=i1(l,C),S=mi(f),M=mi(b),D=d?d[E.length]:void 0;if(!ia(Q)){if(jo(Q)){var F=Fr(S),_=Fr(M),U=D!==void 0?Fr(D):Q.length;return wS(_-F+1,U({op:"move",from:wt(E.concat(String(F+DA))),path:wt(E.concat(String(U+DA)))}):()=>({op:"move",from:wt(E.concat(String(F))),path:wt(E.concat(String(U)))}))}throw new Error("Cannot create move operations: parent must be an Object or Array")}var J=Object.keys(Q),j=J.indexOf(S),$=J.indexOf(M),O=B?J.length:D!==void 0?J.indexOf(D):-1;return j!==-1&&$!==-1&&O!==-1?O>j?[...J.slice(j,$+1),...J.slice(O,J.length)].map(DA=>a1(E,DA)):[...J.slice(O,j),...J.slice($+1,J.length)].map(DA=>a1(E,DA)):[]})(e,A,o),r=Ki($C(e,A)),s=je(e,r);if(Array.isArray(s)){var g=(function(l){var C,I,{items:d,json:B,selection:E,offset:Q}=l,f=$C(B,E),b=i1(B,E),S=d.findIndex(_=>Bi(_.path,f)),M=d.findIndex(_=>Bi(_.path,b)),D=(C=d[S+Q])===null||C===void 0?void 0:C.path,F=(I=d[M+Q])===null||I===void 0?void 0:I.path;return ys(D,F)})({items:n,json:e,selection:A,offset:o.offset});return{operations:a,updatedSelection:g,offset:o.offset}}return{operations:a,updatedSelection:void 0,offset:o.offset}}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +button.jse-validation-error.svelte-q6a061 { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + padding: 0; + margin: 0; + vertical-align: top; + display: inline-flex; + color: var(--jse-error-color, #ee5341); +} + +button.jse-validation-info.svelte-q6a061 { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + padding: 0; + margin: 0; + vertical-align: top; + display: inline-flex; + color: var(--jse-info-color, #4f91ff); +} + +button.jse-validation-warning.svelte-q6a061 { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + padding: 0; + margin: 0; + vertical-align: top; + display: inline-flex; + color: var(--jse-warning-color, #fdc539); +}`);var SRA=FA('');function Ch(t,e){St(e,!1);var A=IA(),i=r1("absolute-popup"),n=N(e,"validationError",8),o=N(e,"onExpand",8);RA(()=>G(n()),()=>{R(A,KSA(n())&&n().isChildError?"Contains invalid data":n().message)}),kn(),Ai();var a=SRA();Wi(CA(a),{get data(){return BI}}),Nr(()=>ue("click",a,function(){for(var r,s=arguments.length,g=new Array(s),l=0;lwh?.(r,s),()=>ye({text:c(A)},i)),ve(()=>{var r;return $t(a,1,"jse-validation-".concat((G(n()),(r=EA(()=>n().severity))!==null&&r!==void 0?r:"")),"svelte-q6a061")}),cA(t,a),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-expand.svelte-1qi6rc1 { + width: var(--jse-indent-size, calc(1em + 4px)); + padding: 0; + margin: 0; + border: none; + cursor: pointer; + background: transparent; + color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); + font-size: var(--jse-font-size-mono, 14px); + height: var(--jse-line-height, calc(1em + 4px)); +} +.jse-expand.svelte-1qi6rc1:hover { + opacity: 0.8; +} + +.jse-meta.svelte-1qi6rc1, +.jse-separator.svelte-1qi6rc1, +.jse-index.svelte-1qi6rc1, +.jse-bracket.svelte-1qi6rc1 { + vertical-align: top; + color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); +} + +.jse-index.svelte-1qi6rc1 { + padding: 0 calc(0.5 * var(--jse-padding, 10px)); +} + +.jse-bracket.svelte-1qi6rc1 { + padding: 0 2px; +} +.jse-bracket.jse-expanded.svelte-1qi6rc1 { + padding-right: var(--jse-padding, 10px); +} + +.jse-identifier.svelte-1qi6rc1 { + vertical-align: top; + position: relative; +} + +.jse-json-node.svelte-1qi6rc1 { + position: relative; + color: var(--jse-text-color, #4d4d4d); +} +.jse-json-node.jse-root.svelte-1qi6rc1 { + min-height: 100%; + padding-bottom: 2px; + box-sizing: border-box; +} +.jse-json-node.jse-root.svelte-1qi6rc1 > .jse-contents-outer:where(.svelte-1qi6rc1) > .jse-contents:where(.svelte-1qi6rc1) { + padding-left: 0; +} +.jse-json-node.svelte-1qi6rc1 .jse-props:where(.svelte-1qi6rc1), +.jse-json-node.svelte-1qi6rc1 .jse-items:where(.svelte-1qi6rc1) { + position: relative; +} +.jse-json-node.svelte-1qi6rc1 .jse-header-outer:where(.svelte-1qi6rc1), +.jse-json-node.svelte-1qi6rc1 .jse-footer-outer:where(.svelte-1qi6rc1) { + display: flex; + margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); +} +.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1) { + position: relative; +} +.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1) .jse-meta:where(.svelte-1qi6rc1) > .jse-meta-inner:where(.svelte-1qi6rc1) { + display: flex; + justify-content: center; +} +.jse-json-node.svelte-1qi6rc1 .jse-contents-outer:where(.svelte-1qi6rc1) { + display: flex; + margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); +} +.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), +.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) { + display: flex; + flex-direction: row; + align-items: flex-start; +} +.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) { + padding-left: var(--jse-indent-size, calc(1em + 4px)); + cursor: var(--jse-contents-cursor, pointer); +} +.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) .jse-value-outer:where(.svelte-1qi6rc1) { + display: inline-flex; +} +.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { + display: inline-flex; + padding-left: calc(var(--jse-indent-size, calc(1em + 4px)) + 5px); +} +.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), +.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1), +.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { + background: var(--jse-contents-background-color, transparent); +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area:where(.svelte-1qi6rc1) { + padding: 0 calc(0.5 * var(--jse-padding, 10px)); + flex: 1; +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area.jse-inside:where(.svelte-1qi6rc1) { + display: inline-flex; + align-items: center; +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area.jse-after:where(.svelte-1qi6rc1) { + display: flex; + align-items: flex-end; +} +.jse-json-node.svelte-1qi6rc1 .jse-context-menu-pointer-anchor:where(.svelte-1qi6rc1) { + position: relative; +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-area:where(.svelte-1qi6rc1) { + display: flex; + position: relative; + z-index: 1; + margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); + max-width: 250px; + min-width: 100px; + height: 0; + margin-right: calc(0.5 * var(--jse-padding, 10px)); + outline: 1px solid; +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-area.jse-hovered:where(.svelte-1qi6rc1) { + outline-color: var(--jse-context-menu-pointer-hover-background, #b2b2b2); +} +.jse-json-node.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1) { + position: relative; +} +.jse-json-node.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1):hover, +.jse-json-node.svelte-1qi6rc1 .jse-value-outer:where(.svelte-1qi6rc1):hover, +.jse-json-node.svelte-1qi6rc1 .jse-meta:where(.svelte-1qi6rc1):hover, +.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1):hover { + background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); + cursor: var(--jse-contents-cursor, pointer); +} +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer { + background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); + cursor: var(--jse-contents-cursor, pointer); +} +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents .jse-meta, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer .jse-value-outer, +.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer .jse-meta { + background: none; +} +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1), +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { + background: var(--jse-selection-background-color, #d3d3d3); + cursor: var(--jse-contents-selected-cursor, grab); +} +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1):hover, +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-value-outer:where(.svelte-1qi6rc1):hover, +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-meta:where(.svelte-1qi6rc1):hover, +.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1):hover { + background: inherit; + cursor: inherit; +} +.jse-json-node.svelte-1qi6rc1 .jse-key-outer.jse-selected-key:where(.svelte-1qi6rc1) { + background: var(--jse-selection-background-color, #d3d3d3); + cursor: var(--jse-contents-selected-cursor, grab); +} +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-value-outer, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-meta, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-header, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-contents, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-header, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-contents, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-footer { + background: var(--jse-selection-background-color, #d3d3d3); + cursor: var(--jse-contents-selected-cursor, grab); +} +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-value-outer .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-meta .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-header .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-contents .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-header .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-contents .jse-key-outer:hover, +.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-footer .jse-key-outer:hover { + background: inherit; + cursor: inherit; +} +.jse-json-node.jse-readonly.svelte-1qi6rc1 { + --jse-contents-selected-cursor: pointer; +} +.jse-json-node.svelte-1qi6rc1 .jse-insert-area.jse-selected:where(.svelte-1qi6rc1) { + outline-color: var(--jse-context-menu-pointer-background, var(--jse-context-menu-background, #656565)); +}`);var Lo=pv(()=>kRA),xRA=FA('
    :
    '),RRA=FA('
    [
     ',1),NRA=FA('
    [
    ]
    ',1),FRA=FA('
    '),_RA=FA('
    '),LRA=FA('
    '),GRA=FA('
    '),KRA=FA('
    '),URA=FA(" ",1),JRA=FA('
    '),YRA=FA('
    ',1),TRA=FA('
    ',1),HRA=FA('
    :
    '),zRA=FA('
    {
    '),ORA=FA('
    {
    }
    ',1),PRA=FA('
    '),jRA=FA('
    '),qRA=FA('
    '),VRA=FA('
    '),WRA=FA('
    '),ZRA=FA('
    '),XRA=FA('
    ',1),$RA=FA('
    ',1),ANA=FA('
    :
    '),eNA=FA('
    '),tNA=FA('
    '),iNA=FA('
    '),nNA=FA('
    '),oNA=FA('
    ');function RL(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=N(e,"pointer",9),o=N(e,"value",9),a=N(e,"state",9),r=N(e,"validationErrors",9),s=N(e,"searchResults",9),g=N(e,"selection",9),l=N(e,"context",9),C=N(e,"onDragSelectionStart",9),I=lr("jsoneditor:JSONNode"),d=IA(void 0,!0),B=void 0,E=IA(void 0,!0),Q=IA(void 0,!0),f=IA(void 0,!0),b=IA(void 0,!0),S=IA(void 0,!0),M=IA(void 0,!0),D=IA(void 0,!0);function F(HA){HA.stopPropagation();var uA=XL(HA);l().onExpand(c(Q),!c(f),uA)}function _(){l().onExpand(c(Q),!0)}function U(HA,uA){var XA=Cm(c(Q),Object.keys(o()),HA,uA);return l().onPatch(XA),mi(hs(XA[0].path))}function J(HA){l().onDrag(HA)}function j(HA){Lo().selecting&&(Lo(Lo().selecting=!1),HA.stopPropagation()),l().onDragEnd(),document.removeEventListener("mousemove",J,!0),document.removeEventListener("mouseup",j)}function $(){var HA;return((HA=l().findElement([]))===null||HA===void 0||(HA=HA.getBoundingClientRect())===null||HA===void 0?void 0:HA.top)||0}function O(HA,uA){var XA=$()-HA.initialContentTop;return uA.clientY-HA.initialClientY-XA}function DA(HA){if(!l().readOnly&&g()){var uA=Ki(lt(g()));if(Bi(c(Q),uA)){var XA=(function(LA,pA){var Ft=[];function ht(z){var nA=c(Q).concat(z),rA=l().findElement(nA);rA!==void 0&&Ft.push({path:nA,height:rA.clientHeight})}if(Array.isArray(o())){var Ee=l().getJson();if(Ee===void 0)return;var Kt=$C(Ee,LA),Je=i1(Ee,LA),ze=parseInt(mi(Kt),10),ut=parseInt(mi(Je),10),ke=pA.find(z=>ze>=z.start&&ut<=z.end);if(!ke)return;var{start:ei,end:Y}=ke;toA(ei,Math.min(o().length,Y),z=>ht(String(z)))}else Object.keys(o()).forEach(ht);return Ft})(g(),c(S)||gh);if(I("dragSelectionStart",{selection:g(),items:XA}),XA){var QA=l().getJson();if(QA!==void 0){var ZA=$C(QA,g()),MA=XA.findIndex(LA=>Bi(LA.path,ZA)),{offset:Me}=iL({json:QA,selection:l().getSelection(),deltaY:0,items:XA});R(E,{initialTarget:HA.target,initialClientY:HA.clientY,initialContentTop:$(),selectionStartIndex:MA,selectionItemsCount:o1(QA,g()).length,items:XA,offset:Me,didMoveItems:!1}),Lo(Lo().dragging=!0),document.addEventListener("mousemove",P,!0),document.addEventListener("mouseup",aA)}}else I("Cannot drag the current selection (probably spread over multiple sections)")}else C()(HA)}}function P(HA){if(c(E)){var uA=l().getJson();if(uA===void 0)return;var XA=O(c(E),HA),{offset:QA}=iL({json:uA,selection:l().getSelection(),deltaY:XA,items:c(E).items});QA!==c(E).offset&&(I("drag selection",QA,XA),R(E,ye(ye({},c(E)),{},{offset:QA,didMoveItems:!0})))}}function aA(HA){if(c(E)){var uA=l().getJson();if(uA===void 0)return;var XA=O(c(E),HA),{operations:QA,updatedSelection:ZA}=iL({json:uA,selection:l().getSelection(),deltaY:XA,items:c(E).items});if(QA)l().onPatch(QA,(LA,pA)=>({state:pA,selection:ZA??g()}));else if(HA.target===c(E).initialTarget&&!c(E).didMoveItems){var MA=z_(HA.target),Me=doA(HA.target);Me&&l().onSelect(viA(MA,Me))}R(E,void 0),Lo(Lo().dragging=!1),document.removeEventListener("mousemove",P,!0),document.removeEventListener("mouseup",aA)}}function iA(HA){HA.shiftKey||(HA.stopPropagation(),HA.preventDefault(),l().onSelect(g2(c(Q))))}function BA(HA){HA.shiftKey||(HA.stopPropagation(),HA.preventDefault(),l().onSelect(i2(c(Q))))}function oA(HA){l().onSelect(g2(c(Q))),bo(),l().onContextMenu(HA)}function sA(HA){l().onSelect(i2(c(Q))),bo(),l().onContextMenu(HA)}RA(()=>G(n()),()=>{R(Q,hs(n()))}),RA(()=>G(n()),()=>{R(A,encodeURIComponent(n()))}),RA(()=>G(a()),()=>{R(f,!!eB(a())&&a().expanded)}),RA(()=>(G(o()),G(a())),()=>{R(b,z0(o(),a(),[]))}),RA(()=>G(a()),()=>{R(S,sr(a())?a().visibleSections:void 0)}),RA(()=>G(r()),()=>{var HA;R(M,(HA=r())===null||HA===void 0?void 0:HA.validationError)}),RA(()=>(G(l()),G(g()),c(Q)),()=>{R(D,Wf(l().getJson(),g(),c(Q)))}),RA(()=>c(Q),()=>{R(i,c(Q).length===0)}),kn(),Ai(!0);var hA,YA,ee=oNA(),UA=CA(ee),mA=HA=>{var uA=TRA(),XA=At(uA),QA=CA(XA),ZA=CA(QA),MA=CA(ZA),Me=xA=>{Wi(xA,{get data(){return v0}})},LA=xA=>{Wi(xA,{get data(){return WE}})};TA(MA,xA=>{c(f)?xA(Me):xA(LA,!1)});var pA=bA(ZA,2);Ba(pA,e,"identifier",{},null);var Ft=bA(pA,2),ht=xA=>{cA(xA,xRA())};TA(Ft,xA=>{c(i)||xA(ht)});var Ee=bA(Ft,2),Kt=CA(Ee),Je=CA(Kt),ze=xA=>{var _A=RRA();Wy(bA(At(_A),2),{children:(Et,et)=>{var Ye=hr();ve(()=>{var Ge,si;return Rt(Ye,"".concat((G(o()),(Ge=EA(()=>o().length))!==null&&Ge!==void 0?Ge:""),` + `).concat((G(o()),(si=EA(()=>o().length===1?"item":"items"))!==null&&si!==void 0?si:"")))}),cA(Et,Ye)},$$slots:{default:!0}}),cA(xA,_A)},ut=xA=>{var _A=NRA();Wy(bA(At(_A),2),{onclick:_,children:(Et,et)=>{var Ye=hr();ve(()=>{var Ge,si;return Rt(Ye,"".concat((G(o()),(Ge=EA(()=>o().length))!==null&&Ge!==void 0?Ge:""),` + `).concat((G(o()),(si=EA(()=>o().length===1?"item":"items"))!==null&&si!==void 0?si:"")))}),cA(Et,Ye)},$$slots:{default:!0}}),cA(xA,_A)};TA(Je,xA=>{c(f)?xA(ze):xA(ut,!1)});var ke=bA(Ee,2),ei=xA=>{var _A=FRA();TI(CA(_A),{get root(){return c(i)},selected:!0,get onContextMenu(){return G(l()),EA(()=>l().onContextMenu)}}),cA(xA,_A)};TA(ke,xA=>{G(l()),c(D),G(g()),G(In),G(lo),G(rr),G(Bi),G(lt),c(Q),EA(()=>!l().readOnly&&c(D)&&g()&&(In(g())||lo(g()))&&!rr(g())&&Bi(lt(g()),c(Q)))&&xA(ei)});var Y=bA(QA,2),z=xA=>{Ch(xA,{get validationError(){return c(M)},onExpand:_})};TA(Y,xA=>{c(M),c(f),EA(()=>c(M)&&(!c(f)||!c(M).isChildError))&&xA(z)});var nA=bA(Y,2),rA=xA=>{var _A=_RA();ue("click",_A,iA),cA(xA,_A)},NA=xA=>{var _A=LRA();ue("click",_A,BA),cA(xA,_A)};TA(nA,xA=>{c(f)?xA(rA):xA(NA,!1)});var Ie=bA(XA,2),Qe=xA=>{var _A=YRA(),Et=At(_A),et=CA(Et),Ye=dn=>{var Le,Zi,Qi=GRA(),bi=CA(Qi),zi=tt(()=>(c(D),G(Ar),G(g()),EA(()=>c(D)&&Ar(g()))));TI(bi,{insert:!0,get selected(){return c(zi)},onContextMenu:oA}),ve(yt=>{Le=$t(Qi,1,"jse-insert-area jse-inside svelte-1qi6rc1",null,Le,yt),Mn(Qi,"title",j_),Zi=Ul(Qi,"",Zi,{"--level":(c(Q),EA(()=>c(Q).length+1))})},[()=>({"jse-hovered":c(d)===Gd,"jse-selected":c(D)&&Ar(g())})]),cA(dn,Qi)};TA(et,dn=>{G(l()),c(d),G(Gd),c(D),G(Ar),G(g()),EA(()=>!l().readOnly&&(c(d)===Gd||c(D)&&Ar(g())))&&dn(Ye)}),Ea(bA(et,2),1,()=>c(S)||gh,Ra,(dn,Le,Zi)=>{var Qi=URA(),bi=At(Qi);Ea(bi,1,()=>(G(o()),c(Le),c(E),EA(()=>(function(Xi,_t,L){var ct=_t.start,li=Math.min(_t.end,Xi.length),Bn=jw(ct,li);return L&&L.offset!==0?aiA(Bn,L.selectionStartIndex,L.selectionItemsCount,L.offset).map((En,qn)=>({index:En,gutterIndex:qn})):Bn.map(En=>({index:En,gutterIndex:En}))})(o(),c(Le),c(E)))),Xi=>Xi.index,(Xi,_t)=>{var L=tt(()=>(G(sr),G(r()),c(_t),EA(()=>sr(r())?r().items[c(_t).index]:void 0))),ct=tt(()=>(G(Fy),G(l()),G(g()),c(Q),c(_t),EA(()=>Fy(l().getJson(),g(),c(Q).concat(String(c(_t).index)))))),li=vi(),Bn=At(li),En=tt(()=>(G(j4),G(n()),c(_t),EA(()=>j4(n(),c(_t).index)))),qn=tt(()=>(G(sr),G(a()),c(_t),EA(()=>sr(a())?a().items[c(_t).index]:void 0))),Uo=tt(()=>(G(sr),G(s()),c(_t),EA(()=>sr(s())?s().items[c(_t).index]:void 0)));RL(Bn,{get value(){return G(o()),c(_t),EA(()=>o()[c(_t).index])},get pointer(){return c(En)},get state(){return c(qn)},get validationErrors(){return c(L)},get searchResults(){return c(Uo)},get selection(){return c(ct)},get context(){return l()},onDragSelectionStart:DA,$$slots:{identifier:(Co,Mo)=>{var Wo=KRA(),wo=CA(Wo),Qa=CA(wo);ve(()=>Rt(Qa,(c(_t),EA(()=>c(_t).gutterIndex)))),cA(Co,Wo)}}}),cA(Xi,li)});var zi=bA(bi,2),yt=Xi=>{var _t=tt(()=>c(S)||gh);DRA(Xi,{get visibleSections(){return c(_t)},sectionIndex:Zi,get total(){return G(o()),EA(()=>o().length)},get path(){return c(Q)},get onExpandSection(){return G(l()),EA(()=>l().onExpandSection)},get selection(){return g()},get context(){return l()}})};TA(zi,Xi=>{c(Le),G(o()),EA(()=>c(Le).end{var Le=JRA();ue("click",Le,BA),cA(dn,Le)};TA(si,dn=>{c(i)||dn(gn)}),cA(xA,_A)};TA(Ie,xA=>{c(f)&&xA(Qe)}),ue("click",ZA,F),cA(HA,uA)},KA=HA=>{var uA=vi(),XA=At(uA),QA=MA=>{var Me=$RA(),LA=At(Me),pA=CA(LA),Ft=CA(pA),ht=CA(Ft),Ee=Ge=>{Wi(Ge,{get data(){return v0}})},Kt=Ge=>{Wi(Ge,{get data(){return WE}})};TA(ht,Ge=>{c(f)?Ge(Ee):Ge(Kt,!1)});var Je=bA(Ft,2);Ba(Je,e,"identifier",{},null);var ze=bA(Je,2),ut=Ge=>{cA(Ge,HRA())};TA(ze,Ge=>{c(i)||Ge(ut)});var ke=bA(ze,2),ei=CA(ke),Y=CA(ei),z=Ge=>{cA(Ge,zRA())},nA=Ge=>{var si=ORA();Wy(bA(At(si),2),{onclick:_,children:(gn,dn)=>{var Le=hr();ve((Zi,Qi)=>Rt(Le,"".concat(Zi??"",` + `).concat(Qi??"")),[()=>(G(o()),EA(()=>Object.keys(o()).length)),()=>(G(o()),EA(()=>Object.keys(o()).length===1?"prop":"props"))]),cA(gn,Le)},$$slots:{default:!0}}),cA(Ge,si)};TA(Y,Ge=>{c(f)?Ge(z):Ge(nA,!1)});var rA=bA(ke,2),NA=Ge=>{var si=PRA();TI(CA(si),{get root(){return c(i)},selected:!0,get onContextMenu(){return G(l()),EA(()=>l().onContextMenu)}}),cA(Ge,si)};TA(rA,Ge=>{G(l()),c(D),G(g()),G(In),G(lo),G(rr),G(Bi),G(lt),c(Q),EA(()=>!l().readOnly&&c(D)&&g()&&(In(g())||lo(g()))&&!rr(g())&&Bi(lt(g()),c(Q)))&&Ge(NA)});var Ie=bA(pA,2),Qe=Ge=>{Ch(Ge,{get validationError(){return c(M)},onExpand:_})};TA(Ie,Ge=>{c(M),c(f),EA(()=>c(M)&&(!c(f)||!c(M).isChildError))&&Ge(Qe)});var xA=bA(Ie,2),_A=Ge=>{var si=jRA();ue("click",si,iA),cA(Ge,si)},Et=Ge=>{var si=vi(),gn=At(si),dn=Le=>{var Zi=qRA();ue("click",Zi,BA),cA(Le,Zi)};TA(gn,Le=>{c(i)||Le(dn)},!0),cA(Ge,si)};TA(xA,Ge=>{c(f)?Ge(_A):Ge(Et,!1)});var et=bA(LA,2),Ye=Ge=>{var si=XRA(),gn=At(si),dn=CA(gn),Le=zi=>{var yt,Xi,_t=VRA(),L=CA(_t),ct=tt(()=>(c(D),G(Ar),G(g()),EA(()=>c(D)&&Ar(g()))));TI(L,{insert:!0,get selected(){return c(ct)},onContextMenu:oA}),ve(li=>{yt=$t(_t,1,"jse-insert-area jse-inside svelte-1qi6rc1",null,yt,li),Mn(_t,"title",j_),Xi=Ul(_t,"",Xi,{"--level":(c(Q),EA(()=>c(Q).length+1))})},[()=>({"jse-hovered":c(d)===Gd,"jse-selected":c(D)&&Ar(g())})]),cA(zi,_t)};TA(dn,zi=>{G(l()),c(d),G(Gd),c(D),G(Ar),G(g()),EA(()=>!l().readOnly&&(c(d)===Gd||c(D)&&Ar(g())))&&zi(Le)}),Ea(bA(dn,2),1,()=>(G(o()),c(E),EA(()=>(function(zi,yt){var Xi=Object.keys(zi);return yt&&yt.offset!==0?aiA(Xi,yt.selectionStartIndex,yt.selectionItemsCount,yt.offset):Xi})(o(),c(E)))),Ra,(zi,yt)=>{var Xi=tt(()=>(G(j4),G(n()),c(yt),EA(()=>j4(n(),c(yt))))),_t=tt(()=>(G(wg),G(s()),c(yt),EA(()=>wg(s())?s().properties[c(yt)]:void 0))),L=tt(()=>(G(wg),G(r()),c(yt),EA(()=>wg(r())?r().properties[c(yt)]:void 0))),ct=tt(()=>(c(Q),c(yt),EA(()=>c(Q).concat(c(yt))))),li=tt(()=>(G(Fy),G(l()),G(g()),G(c(ct)),EA(()=>Fy(l().getJson(),g(),c(ct))))),Bn=vi(),En=At(Bn),qn=tt(()=>(G(wg),G(a()),c(yt),EA(()=>wg(a())?a().properties[c(yt)]:void 0)));RL(En,{get value(){return G(o()),c(yt),EA(()=>o()[c(yt)])},get pointer(){return c(Xi)},get state(){return c(qn)},get validationErrors(){return c(L)},get searchResults(){return c(_t)},get selection(){return c(li)},get context(){return l()},onDragSelectionStart:DA,$$slots:{identifier:(Uo,Co)=>{var Mo,Wo=WRA(),wo=CA(Wo),Qa=tt(()=>(G(NiA),G(c(_t)),EA(()=>NiA(c(_t)))));(function(Zo,ra){St(ra,!1);var Do=IA(void 0,!0),re=IA(void 0,!0),di=N(ra,"pointer",9),ln=N(ra,"key",9),Qn=N(ra,"selection",9),Jo=N(ra,"searchResultItems",9),ya=N(ra,"onUpdateKey",9),wi=N(ra,"context",9),Io=IA(void 0,!0);function tr(vA){c(re)||wi().readOnly||(vA.preventDefault(),wi().onSelect(sG(c(Io))))}function yo(vA,VA){var me=ya()(ln(),wi().normalization.unescapeValue(vA)),dA=Ki(c(Io)).concat(me);wi().onSelect(VA===t1.nextInside?Ui(dA):s2(dA)),VA!==t1.self&&wi().focus()}function Pa(){wi().onSelect(s2(c(Io))),wi().focus()}RA(()=>G(di()),()=>{R(Io,hs(di()))}),RA(()=>(G(Qn()),c(Io)),()=>{R(Do,gr(Qn())&&Bi(Qn().path,c(Io)))}),RA(()=>(c(Do),G(Qn())),()=>{R(re,c(Do)&&rr(Qn()))}),kn(),Ai(!0);var Gn=bRA(),Si=At(Gn),Pt=vA=>{var VA=tt(()=>(G(wi()),G(ln()),EA(()=>wi().normalization.escapeValue(ln())))),me=tt(()=>(G(rr),G(Qn()),EA(()=>rr(Qn())?Qn().initialValue:void 0)));yoA(vA,{get value(){return c(VA)},get initialValue(){return c(me)},label:"Edit key",shortText:!0,onChange:yo,onCancel:Pa,get onFind(){return G(wi()),EA(()=>wi().onFind)}})},Sn=vA=>{var VA,me=vRA(),dA=CA(me),SA=xe=>{var it=tt(()=>(G(wi()),G(ln()),EA(()=>wi().normalization.escapeValue(ln()))));RoA(xe,{get text(){return c(it)},get searchResultItems(){return Jo()}})},oe=xe=>{var it=hr();ve(rt=>Rt(it,rt),[()=>(G(fh),G(wi()),G(ln()),EA(()=>fh(wi().normalization.escapeValue(ln()))))]),cA(xe,it)};TA(dA,xe=>{Jo()?xe(SA):xe(oe,!1)}),ve(()=>VA=$t(me,1,"jse-key svelte-1n4cez4",null,VA,{"jse-empty":ln()===""})),ue("dblclick",me,tr),cA(vA,me)};TA(Si,vA=>{G(wi()),c(re),EA(()=>!wi().readOnly&&c(re))?vA(Pt):vA(Sn,!1)});var Bo=bA(Si,2),ko=vA=>{TI(vA,{selected:!0,get onContextMenu(){return G(wi()),EA(()=>wi().onContextMenu)}})};TA(Bo,vA=>{G(wi()),c(Do),c(re),EA(()=>!wi().readOnly&&c(Do)&&!c(re))&&vA(ko)}),cA(Zo,Gn),xt()})(wo,{get pointer(){return c(Xi)},get key(){return c(yt)},get selection(){return c(li)},get searchResultItems(){return c(Qa)},get context(){return l()},onUpdateKey:U}),ve(Zo=>Mo=$t(Wo,1,"jse-key-outer svelte-1qi6rc1",null,Mo,Zo),[()=>({"jse-selected-key":gr(c(li))&&Bi(c(li).path,c(ct))})]),cA(Uo,Wo)}}}),cA(zi,Bn)});var Zi=bA(gn,2),Qi=bA(CA(Zi),2),bi=zi=>{var yt=ZRA();ue("click",yt,BA),cA(zi,yt)};TA(Qi,zi=>{c(i)||zi(bi)}),cA(Ge,si)};TA(et,Ge=>{c(f)&&Ge(Ye)}),ue("click",Ft,F),cA(MA,Me)},ZA=MA=>{var Me=iNA(),LA=CA(Me),pA=CA(LA);Ba(pA,e,"identifier",{},null);var Ft=bA(pA,2),ht=rA=>{cA(rA,ANA())};TA(Ft,rA=>{c(i)||rA(ht)});var Ee=bA(Ft,2),Kt=CA(Ee),Je=tt(()=>c(D)?g():void 0),ze=tt(()=>(G(FiA),G(s()),EA(()=>FiA(s()))));qoA(Kt,{get path(){return c(Q)},get value(){return o()},get enforceString(){return c(b)},get selection(){return c(Je)},get searchResultItems(){return c(ze)},get context(){return l()}});var ut=bA(Ee,2),ke=rA=>{var NA=eNA();TI(CA(NA),{get root(){return c(i)},selected:!0,get onContextMenu(){return G(l()),EA(()=>l().onContextMenu)}}),cA(rA,NA)};TA(ut,rA=>{G(l()),c(D),G(g()),G(In),G(lo),G(rr),G(Bi),G(lt),c(Q),EA(()=>!l().readOnly&&c(D)&&g()&&(In(g())||lo(g()))&&!rr(g())&&Bi(lt(g()),c(Q)))&&rA(ke)});var ei=bA(LA,2),Y=rA=>{Ch(rA,{get validationError(){return c(M)},onExpand:_})};TA(ei,rA=>{c(M)&&rA(Y)});var z=bA(ei,2),nA=rA=>{var NA=tNA();ue("click",NA,BA),cA(rA,NA)};TA(z,rA=>{c(i)||rA(nA)}),cA(MA,Me)};TA(XA,MA=>{G(pn),G(o()),EA(()=>pn(o()))?MA(QA):MA(ZA,!1)},!0),cA(HA,uA)};TA(UA,HA=>{G(o()),EA(()=>Array.isArray(o()))?HA(mA):HA(KA,!1)});var Pe=bA(UA,2),Ue=HA=>{var uA,XA=nNA(),QA=CA(XA),ZA=tt(()=>(c(D),G(yg),G(g()),EA(()=>c(D)&&yg(g()))));TI(QA,{insert:!0,get selected(){return c(ZA)},onContextMenu:sA}),ve(MA=>{uA=$t(XA,1,"jse-insert-area jse-after svelte-1qi6rc1",null,uA,MA),Mn(XA,"title",j_)},[()=>({"jse-hovered":c(d)===Ry,"jse-selected":c(D)&&yg(g())})]),cA(HA,XA)};TA(Pe,HA=>{G(l()),c(d),G(Ry),c(D),G(yg),G(g()),EA(()=>!l().readOnly&&(c(d)===Ry||c(D)&&yg(g())))&&HA(Ue)}),ve((HA,uA)=>{hA=$t(ee,1,HA,"svelte-1qi6rc1",hA,uA),Mn(ee,"data-path",c(A)),Mn(ee,"aria-selected",c(D)),YA=Ul(ee,"",YA,{"--level":(c(Q),EA(()=>c(Q).length))})},[()=>n1((G(Oc),c(f),G(l()),c(Q),G(o()),EA(()=>Oc("jse-json-node",{"jse-expanded":c(f)},l().onClassName(c(Q),o()))))),()=>({"jse-root":c(i),"jse-selected":c(D)&&lo(g()),"jse-selected-value":c(D)&&In(g()),"jse-readonly":l().readOnly,"jse-hovered":c(d)===liA})]),ue("mousedown",ee,function(HA){if((HA.buttons===1||HA.buttons===2)&&!((uA=HA.target).nodeName==="DIV"&&uA.contentEditable==="true"||HA.buttons===1&&CoA(HA.target,"BUTTON"))){var uA;HA.stopPropagation(),HA.preventDefault(),l().focus(),document.addEventListener("mousemove",J,!0),document.addEventListener("mouseup",j);var XA=z_(HA.target),QA=l().getJson(),ZA=l().getDocumentState();if(!g()||XA===no.after||XA===no.inside||g().type!==XA&&g().type!==no.multi||!Wf(QA,g(),c(Q)))if(Lo(Lo().selecting=!0),Lo(Lo().selectionAnchor=c(Q)),Lo(Lo().selectionAnchorType=XA),Lo(Lo().selectionFocus=c(Q)),HA.shiftKey){var MA=l().getSelection();MA&&l().onSelect(ys(jd(MA),c(Q)))}else if(XA===no.multi)if(c(i)&&HA.target.hasAttribute("data-path")){var Me=mi(foA(o(),ZA));l().onSelect(DL(Me))}else l().onSelect(ys(c(Q),c(Q)));else QA!==void 0&&l().onSelect(viA(XA,c(Q)));else HA.button===0&&C()(HA)}}),ue("mousemove",ee,function(HA){if(Lo().selecting){HA.preventDefault(),HA.stopPropagation(),Lo().selectionFocus===void 0&&window.getSelection&&window.getSelection().empty();var uA=z_(HA.target);Bi(c(Q),Lo().selectionFocus)&&uA===Lo().selectionAnchorType||(Lo(Lo().selectionFocus=c(Q)),Lo(Lo().selectionAnchorType=uA),l().onSelect(ys(Lo().selectionAnchor||Lo().selectionFocus,Lo().selectionFocus)))}}),ue("mouseover",ee,function(HA){Lo().selecting||Lo().dragging||(HA.stopPropagation(),VI(HA.target,"data-type","selectable-value")?R(d,liA):VI(HA.target,"data-type","selectable-key")?R(d,void 0):VI(HA.target,"data-type","insert-selection-area-inside")?R(d,Gd):VI(HA.target,"data-type","insert-selection-area-after")&&R(d,Ry),clearTimeout(B))}),ue("mouseout",ee,function(HA){HA.stopPropagation(),B=window.setTimeout(()=>R(d,void 0))}),cA(t,ee),xt()}var VoA={prefix:"fas",iconName:"jsoneditor-expand",icon:[512,512,[],"","M 0,448 V 512 h 512 v -64 z M 0,0 V 64 H 512 V 0 Z M 256,96 128,224 h 256 z M 256,416 384,288 H 128 Z"]},WoA={prefix:"fas",iconName:"jsoneditor-collapse",icon:[512,512,[],"","m 0,224 v 64 h 512 v -64 z M 256,192 384,64 H 128 Z M 256,320 128,448 h 256 z"]},PiA={prefix:"fas",iconName:"jsoneditor-format",icon:[512,512,[],"","M 0,32 v 64 h 416 v -64 z M 160,160 v 64 h 352 v -64 z M 160,288 v 64 h 288 v -64 z M 0,416 v 64 h 320 v -64 z"]},aNA={prefix:"fas",iconName:"jsoneditor-compact",icon:[512,512,[],"","M 0,32 v 64 h 512 v -64 z M 0,160 v 64 h 512 v -64 z M 0,288 v 64 h 352 v -64 z"]};qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-welcome.svelte-1lhnan { + flex: 1; + overflow: auto; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + display: flex; + flex-direction: column; + align-items: center; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-welcome.svelte-1lhnan:last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-welcome.svelte-1lhnan .jse-space.jse-before:where(.svelte-1lhnan) { + flex: 1; +} +.jse-welcome.svelte-1lhnan .jse-space.jse-after:where(.svelte-1lhnan) { + flex: 2; +} +.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) { + display: flex; + flex-direction: column; + max-width: 300px; + margin: 2em var(--jse-padding, 10px); + gap: var(--jse-padding, 10px); +} +.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) .jse-welcome-info:where(.svelte-1lhnan) { + color: var(--jse-panel-color-readonly, #b2b2b2); +} +.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +}`);var rNA=FA('
    You can paste clipboard data using Ctrl+V, or use the following options:
    ',1),sNA=FA('
    Empty document
    ');function NL(t,e){var A=typeof t=="string"?t.toLowerCase():t,i=typeof e=="string"?e.toLowerCase():e;return(0,AnA.default)(A,i)}function ZoA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1,n=je(t,e);if(jo(n)){if(A===void 0)throw new Error("Cannot sort: no property selected by which to sort the array");return(function(o){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1,g=(function(C,I){var d={boolean:0,number:1,string:2,undefined:4},B=3;return function(E,Q){var f=je(E,C),b=je(Q,C);if(typeof f!=typeof b){var S,M,D=(S=d[typeof f])!==null&&S!==void 0?S:B,F=(M=d[typeof b])!==null&&M!==void 0?M:B;return D>F?I:Db?I:f1&&arguments[1]!==void 0?arguments[1]:[],r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,s=je(o,a),g=Object.keys(s).slice();g.sort((C,I)=>r*NL(C,I));var l={};return g.forEach(C=>l[C]=s[C]),[{op:"replace",path:wt(a),value:l}]})(t,e,i);throw new Error("Cannot sort: no array or object")}am(["click"]);qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-navigation-bar-dropdown.svelte-1k47orx { + position: absolute; + top: 100%; + left: 0; + z-index: 3; + background: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); + color: var(--jse-navigation-bar-dropdown-color, #656565); + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); + display: flex; + flex-direction: column; + max-height: 300px; + overflow: auto; + min-width: 80px; +} +.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx) { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + border: none; + background: transparent; + color: inherit; + cursor: pointer; + outline: none; + text-align: left; + white-space: nowrap; + box-sizing: border-box; + padding: calc(0.5 * var(--jse-padding, 10px)) 36px; +} +.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx):focus, .jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx):hover { + background: var(--jse-navigation-bar-background-highlight, #e5e5e5); +} +.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item.jse-selected:where(.svelte-1k47orx) { + background: var(--jse-navigation-bar-dropdown-color, #656565); + color: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); +}`);var gNA=FA(''),lNA=FA(''),cNA=FA('
    ');function CNA(t,e){St(e,!1);var A=N(e,"items",9),i=N(e,"selectedItem",9),n=N(e,"onSelect",9);Ai(!0);var o=cNA(),a=CA(o);Ea(a,1,()=>(G(tv),G(A()),EA(()=>tv(A(),100))),g=>g,(g,l)=>{var C,I=gNA(),d=CA(I);ve((B,E)=>{C=$t(I,1,"jse-navigation-bar-dropdown-item svelte-1k47orx",null,C,{"jse-selected":c(l)===i()}),Mn(I,"title",B),Rt(d,E)},[()=>(c(l),EA(()=>c(l).toString())),()=>(G(WC),c(l),EA(()=>WC(c(l).toString(),30)))]),ue("click",I,jC(()=>n()(c(l)))),cA(g,I)});var r=bA(a,2),s=g=>{var l=lNA();Mn(l,"title","Limited to 100 items"),cA(g,l)};TA(r,g=>{G(A()),EA(()=>A().length>100)&&g(s)}),cA(t,o),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-navigation-bar-item.svelte-13sijxb { + position: relative; + display: flex; +} +.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb) { + font-family: inherit; + font-size: inherit; + padding: calc(0.5 * var(--jse-padding, 10px)) 2px; + border: none; + background: transparent; + color: inherit; + cursor: pointer; + outline: none; + min-width: 2em; + white-space: nowrap; +} +.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb):focus, .jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb):hover { + background: var(--jse-panel-button-background-highlight, #e0e0e0); + color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); +} +.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button.jse-navigation-bar-arrow:where(.svelte-13sijxb) { + padding: 2px var(--jse-padding, 10px) 0; +} +.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button.jse-navigation-bar-arrow.jse-open:where(.svelte-13sijxb) { + background: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); + color: var(--jse-navigation-bar-dropdown-color, #656565); +} +.jse-navigation-bar-item.svelte-13sijxb:last-child { + padding-right: var(--jse-padding, 10px); +}`);var INA=FA(''),dNA=FA('
    ');function jiA(t,e){St(e,!1);var A,i=IA(void 0,!0),n=IA(void 0,!0),{openAbsolutePopup:o,closeAbsolutePopup:a}=r1("absolute-popup"),r=N(e,"path",9),s=N(e,"index",9),g=N(e,"onSelect",9),l=N(e,"getItems",9),C=IA(void 0,!0),I=IA(!1,!0);function d(S){a(A),g()(c(i).concat(S))}RA(()=>(G(r()),G(s())),()=>{R(i,r().slice(0,s()))}),RA(()=>(G(r()),G(s())),()=>{R(n,r()[s()])}),kn(),Ai(!0);var B,E=dNA(),Q=CA(E);Wi(CA(Q),{get data(){return NS}});var f=bA(Q,2),b=S=>{var M=INA(),D=CA(M);ve(()=>Rt(D,c(n))),ue("click",M,()=>d(c(n))),cA(S,M)};TA(f,S=>{c(n)!==void 0&&S(b)}),Ko(E,S=>R(C,S),()=>c(C)),ve(()=>B=$t(Q,1,"jse-navigation-bar-button jse-navigation-bar-arrow svelte-13sijxb",null,B,{"jse-open":c(I)})),ue("click",Q,function(){if(c(C)){R(I,!0);var S={items:l()(c(i)),selectedItem:c(n),onSelect:d};A=o(CNA,S,{anchor:c(C),closeOnOuterClick:!0,onClose:()=>{R(I,!1)}})}}),cA(t,E),xt()}function IG(t){var e,A;if(navigator.clipboard)return navigator.clipboard.writeText(t);if((e=(A=document).queryCommandSupported)!==null&&e!==void 0&&e.call(A,"copy")){var i=document.createElement("textarea");i.value=t,i.style.position="fixed",i.style.opacity="0",document.body.appendChild(i),i.select();try{document.execCommand("copy")}catch(n){console.error(n)}finally{document.body.removeChild(i)}return Promise.resolve()}return console.error("Copy failed."),Promise.resolve()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-navigation-bar-path-editor.svelte-uyexy4 { + flex: 1; + display: flex; + border: var(--jse-edit-outline, 2px solid #656565); + background: var(--jse-background-color, #fff); +} +.jse-navigation-bar-path-editor.svelte-uyexy4 input.jse-navigation-bar-text:where(.svelte-uyexy4) { + flex: 1; + font-family: inherit; + font-size: inherit; + padding: 0 5px 1px; + background: var(--jse-background-color, #fff); + color: var(--jse-text-color, #4d4d4d); + border: none; + outline: none; +} +.jse-navigation-bar-path-editor.svelte-uyexy4 button:where(.svelte-uyexy4) { + border: none; + background: var(--jse-background-color, #fff); + cursor: pointer; + font-family: inherit; + font-size: 80%; + color: inherit; +} +.jse-navigation-bar-path-editor.svelte-uyexy4 button.jse-navigation-bar-copy.copied:where(.svelte-uyexy4) { + color: var(--message-success-background, #9ac45d); +} +.jse-navigation-bar-path-editor.svelte-uyexy4 button.jse-navigation-bar-validation-error:where(.svelte-uyexy4) { + color: var(--jse-error-color, #ee5341); +} +.jse-navigation-bar-path-editor.error.svelte-uyexy4 { + border-color: var(--jse-error-color, #ee5341); +} +.jse-navigation-bar-path-editor.error.svelte-uyexy4 input.jse-navigation-bar-text:where(.svelte-uyexy4) { + color: var(--jse-error-color, #ee5341); +} +.jse-navigation-bar-path-editor.svelte-uyexy4 .jse-copied-text:where(.svelte-uyexy4) { + background: var(--message-success-background, #9ac45d); + color: var(--jse-message-success-color, #fff); + position: relative; + margin: 2px; + padding: 0 5px; + border-radius: 3px; +}`);var BNA=FA(''),ENA=FA('
    Copied!
    '),QNA=FA('
    ');function hNA(t,e){St(e,!1);var A=IA(),i=r1("absolute-popup"),n=N(e,"path",8),o=N(e,"pathParser",8),a=N(e,"onChange",8),r=N(e,"onClose",8),s=N(e,"onError",8),g=N(e,"pathExists",8),l=IA(),C=IA(),I=IA(!1),d=void 0,B=IA(!1);function E(){c(l).focus()}function Q(j){try{var $=o().parse(j);return(function(O){if(!g()(O))throw new Error("Path does not exist in current document")})($),{path:$,error:void 0}}catch(O){return{path:void 0,error:O}}}is(()=>{E()}),Yl(()=>{clearTimeout(d)}),RA(()=>(G(o()),G(n())),()=>{R(C,o().stringify(n()))}),RA(()=>(c(I),c(C)),()=>{R(A,c(I)?Q(c(C)).error:void 0)}),kn(),Ai();var f,b=QNA(),S=CA(b);Ko(S,j=>R(l,j),()=>c(l));var M=bA(S,2),D=j=>{var $=BNA();Wi(CA($),{get data(){return BI}}),bs($,(O,DA)=>wh?.(O,DA),()=>ye({text:String(c(A)||"")},i)),cA(j,$)};TA(M,j=>{c(A)&&j(D)});var F=bA(M,2),_=j=>{cA(j,ENA())};TA(F,j=>{c(B)&&j(_)});var U,J=bA(F,2);Wi(CA(J),{get data(){return kC}}),ve(()=>{f=$t(b,1,"jse-navigation-bar-path-editor svelte-uyexy4",null,f,{error:c(A)}),AB(S,c(C)),U=$t(J,1,"jse-navigation-bar-copy svelte-uyexy4",null,U,{copied:c(B)})}),ue("keydown",S,jC(function(j){var $=r2(j);if($==="Escape"&&(j.preventDefault(),r()()),$==="Enter"){j.preventDefault(),R(I,!0);var O=Q(c(C));O.path!==void 0?a()(O.path):s()(O.error)}})),ue("input",S,function(j){R(C,j.currentTarget.value)}),ue("click",J,function(){IG(c(C)),R(B,!0),d=window.setTimeout(()=>R(B,!1),1e3),E()}),cA(t,b),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-navigation-bar.svelte-hjhal6 { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + background: var(--jse-panel-background, #ebebeb); + color: var(--jse-panel-button-color, inherit); + padding: 0; + margin: 0; + display: flex; + overflow: auto; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6) { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); + color: var(--jse-panel-color-readonly, #b2b2b2); + background: transparent; + border: none; + display: flex; + cursor: pointer; + outline: none; + align-items: center; +} +.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit.flex:where(.svelte-hjhal6) { + flex: 1; +} +.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6):focus, .jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6):hover, .jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit.editing:where(.svelte-hjhal6) { + background: var(--jse-panel-button-background-highlight, #e0e0e0); + color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); + transition: color 0.2s ease-in, background 0.2s ease-in; +} +.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6) .jse-navigation-bar-space:where(.svelte-hjhal6) { + flex: 1; + text-align: left; +}`);var uNA=FA(" ",1),fNA=FA('
    ');function mNA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=lr("jsoneditor:NavigationBar"),o=N(e,"json",9),a=N(e,"selection",9),r=N(e,"onSelect",9),s=N(e,"onError",9),g=N(e,"pathParser",9),l=IA(void 0,!0),C=IA(!1,!0);function I($){n("get items for path",$);var O=je(o(),$);if(Array.isArray(O))return jw(0,O.length).map(String);if(pn(O)){var DA=Object.keys(O).slice(0);return DA.sort(NL),DA}return[]}function d($){return br(o(),$)}function B($){n("select path",JSON.stringify($)),r()(ys($,$))}function E(){R(C,!1)}function Q($){E(),B($)}RA(()=>(G(a()),lt),()=>{R(A,a()?lt(a()):[])}),RA(()=>(G(o()),c(A)),()=>{R(i,aa(je(o(),c(A))))}),RA(()=>c(A),()=>{c(A),setTimeout(()=>{if(c(l)&&c(l).scrollTo){var $=c(l).scrollWidth-c(l).clientWidth;$>0&&(n("scrollTo ",$),c(l).scrollTo({left:$,behavior:"smooth"}))}})}),kn(),Ai(!0);var f=fNA(),b=CA(f),S=$=>{var O=uNA(),DA=At(O);Ea(DA,1,()=>c(A),Ra,(iA,BA,oA)=>{jiA(iA,{getItems:I,get path(){return c(A)},index:oA,onSelect:B})});var P=bA(DA,2),aA=iA=>{jiA(iA,{getItems:I,get path(){return c(A)},get index(){return c(A),EA(()=>c(A).length)},onSelect:B})};TA(P,iA=>{c(i)&&iA(aA)}),cA($,O)},M=$=>{hNA($,{get path(){return c(A)},onClose:E,onChange:Q,get onError(){return s()},pathExists:d,get pathParser(){return g()}})};TA(b,$=>{c(C)?$(M,!1):$(S)});var D,F=bA(b,2),_=CA(F),U=CA(_),J=bA(_,2),j=tt(()=>c(C)?aV:eV);Wi(J,{get data(){return c(j)}}),Ko(f,$=>R(l,$),()=>c(l)),ve($=>{D=$t(F,1,"jse-navigation-bar-edit svelte-hjhal6",null,D,{flex:!c(C),editing:c(C)}),Mn(F,"title",c(C)?"Cancel editing the selected path":"Edit the selected path"),Rt(U,$)},[()=>(G(aa),G(o()),c(C),EA(()=>aa(o())||c(C)?"\xA0":"Navigation bar"))]),ue("click",F,function(){R(C,!c(C))}),cA(t,f),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-search-box.svelte-1x1x8q0 { + border: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); + border-radius: 3px; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + background: var(--jse-panel-background, #ebebeb); + color: var(--jse-panel-color-readonly, #b2b2b2); + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); + display: inline-block; + width: 400px; + max-width: 100%; + overflow: auto; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) { + display: flex; + align-items: stretch; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0), +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) input:where(.svelte-1x1x8q0) { + font-family: inherit; + font-size: inherit; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0) { + display: block; + text-align: center; + border: none; + padding: 0 5px; + margin: 0; + cursor: pointer; + color: var(--jse-panel-button-color, inherit); + background: var(--jse-panel-button-background, transparent); +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0):hover { + color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); + background: var(--jse-panel-button-background-highlight, #e0e0e0); +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) input:where(.svelte-1x1x8q0) { + color: var(--jse-panel-color, var(--jse-text-color, #4d4d4d)); + border: var(--jse-input-border, 1px solid #d8dbdf); + border-radius: 3px; + background: var(--jse-input-background, var(--jse-background-color, #fff)); + height: 28px; + padding: 0 5px; + margin: 0; + flex: 1; + width: 0; + min-width: 50px; + outline: none; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-replace-toggle:where(.svelte-1x1x8q0) { + padding: var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)); + min-width: 20px; + background: var(--jse-panel-button-background-highlight, #e0e0e0); +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) { + flex: 1; + display: flex; + flex-direction: column; + padding: calc(0.5 * var(--jse-padding, 10px)); + gap: calc(0.5 * var(--jse-padding, 10px)); +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) { + flex: 1; + display: flex; + align-items: center; + position: relative; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-icon:where(.svelte-1x1x8q0) { + color: inherit; + cursor: inherit; + background: inherit; + width: 32px; + text-align: center; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) label.jse-search-input-label:where(.svelte-1x1x8q0) { + flex: 1; + display: flex; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-count:where(.svelte-1x1x8q0) { + color: inherit; + font-size: 80%; + visibility: hidden; + padding: 0 5px; + min-width: 36px; + text-align: center; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-count.jse-visible:where(.svelte-1x1x8q0) { + visibility: visible; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-replace-section:where(.svelte-1x1x8q0) { + flex: 1; + display: flex; + padding-left: 32px; +} +.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-replace-section:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0) { + width: auto; +}`);var pNA=FA(''),wNA=FA('
    '),DNA=FA('');function XoA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=lr("jsoneditor:SearchBox"),a=N(e,"json",9),r=N(e,"documentState",9),s=N(e,"parser",9),g=N(e,"showSearch",9),l=N(e,"showReplace",13),C=N(e,"readOnly",9),I=N(e,"columns",9),d=N(e,"onSearch",9),B=N(e,"onFocus",9),E=N(e,"onPatch",9),Q=N(e,"onClose",9),f=IA("",!0),b="",S=IA("",!0),M=IA(!1,!0),D=IA(void 0,!0),F=qE(function(MA){return KA.apply(this,arguments)},300),_=qE(function(MA){return Pe.apply(this,arguments)},300);function U(){l(!l()&&!C())}function J(MA){MA.stopPropagation();var Me=r2(MA);Me==="Enter"&&(MA.preventDefault(),c(f)!==b?F.flush():oA()),Me==="Shift+Enter"&&(MA.preventDefault(),hA()),Me==="Ctrl+Enter"&&(MA.preventDefault(),l()?DA():oA()),Me==="Ctrl+H"&&(MA.preventDefault(),U()),Me==="Escape"&&(MA.preventDefault(),uA())}function j(MA){r2(MA)==="Enter"&&(MA.preventDefault(),MA.stopPropagation(),DA())}function $(){return O.apply(this,arguments)}function O(){return(O=Yt(function*(){bo(),yield F.flush()})).apply(this,arguments)}function DA(){return P.apply(this,arguments)}function P(){return(P=Yt(function*(){var MA;if(!C()){var Me=(MA=c(D))===null||MA===void 0?void 0:MA.activeItem;if(o("handleReplace",{replaceText:c(S),activeItem:Me}),c(D)&&Me&&a()!==void 0){R(D,ye(ye({},MiA(c(D))),{},{activeIndex:c(i)}));var{operations:LA,newSelection:pA}=HSA(a(),r(),c(S),Me,s());E()(LA,(Ft,ht)=>({state:ht,selection:pA})),bo(),yield _.flush(),yield ee()}}})).apply(this,arguments)}function aA(){return iA.apply(this,arguments)}function iA(){return(iA=Yt(function*(){if(!C()){o("handleReplaceAll",{text:c(f),replaceText:c(S)});var{operations:MA,newSelection:Me}=(function(LA,pA,Ft,ht,Ee){for(var Kt=kiA(Ft,LA,{maxResults:1/0}),Je=[],ze=0;zez.field!==nA.field?z.field===Jc.key?1:-1:nA.path.length-z.path.length);var ei,Y=[];return Je.forEach(z=>{var{field:nA,path:rA,items:NA}=z;if(nA===Jc.key){var Ie=Ki(rA),Qe=je(LA,Ie),xA=mi(rA),_A=Cm(Ie,Object.keys(Qe),xA,xiA(xA,ht,NA));Y=Y.concat(_A),ei=ph(LA,_A)}else{if(nA!==Jc.value)throw new Error("Cannot replace: unknown type of search result field ".concat(nA));var Et=je(LA,rA);if(Et===void 0)throw new Error("Cannot replace: path not found ".concat(wt(rA)));var et=typeof Et=="string"?Et:String(Et),Ye=z0(LA,pA,rA),Ge=xiA(et,ht,NA),si=[{op:"replace",path:wt(rA),value:Ye?Ge:Rh(Ge,Ee)}];Y=Y.concat(si),ei=ph(LA,si)}}),{operations:Y,newSelection:ei}})(a(),r(),c(f),c(S),s());E()(MA,(LA,pA)=>({state:pA,selection:Me})),yield ee()}})).apply(this,arguments)}function BA(MA){MA.select()}function oA(){return sA.apply(this,arguments)}function sA(){return(sA=Yt(function*(){R(D,c(D)?MiA(c(D)):void 0),yield ee()})).apply(this,arguments)}function hA(){return YA.apply(this,arguments)}function YA(){return YA=Yt(function*(){R(D,c(D)?(function(MA){var Me=MA.activeIndex>0?MA.activeIndex-1:MA.items.length-1,LA=MA.items[Me],pA=MA.items.map((Ft,ht)=>ye(ye({},Ft),{},{active:ht===Me}));return ye(ye({},MA),{},{items:pA,activeItem:LA,activeIndex:Me})})(c(D)):void 0),yield ee()}),YA.apply(this,arguments)}function ee(){return UA.apply(this,arguments)}function UA(){return(UA=Yt(function*(){var MA;o("handleFocus",c(D));var Me=(MA=c(D))===null||MA===void 0?void 0:MA.activeItem;Me&&a()!==void 0&&(yield B()(Me.path,Me.resultIndex))})).apply(this,arguments)}function mA(){return mA=Yt(function*(MA){yield Ue(MA,c(f),a())}),mA.apply(this,arguments)}function KA(){return KA=Yt(function*(MA){yield Ue(g(),MA,a()),yield ee()}),KA.apply(this,arguments)}function Pe(){return Pe=Yt(function*(MA){yield Ue(g(),c(f),MA)}),Pe.apply(this,arguments)}function Ue(MA,Me,LA){return HA.apply(this,arguments)}function HA(){return HA=Yt(function*(MA,Me,LA){return MA?(o("applySearch",{showSearch:MA,text:Me}),Me===""?(o("clearing search result"),c(D)!==void 0&&R(D,void 0),Promise.resolve()):(b=Me,R(M,!0),new Promise(pA=>{setTimeout(()=>{var Ft=kiA(Me,LA,{maxResults:O_,columns:I()});R(D,(function(ht,Ee){var Kt=Ee!=null&&Ee.activeItem?RiA(Ee.activeItem):void 0,Je=ht.findIndex(ke=>Bi(Kt,RiA(ke))),ze=Je!==-1?Je:Ee?.activeIndex!==void 0&&Ee?.activeIndex0?0:-1,ut=ht.map((ke,ei)=>ye(ye({resultIndex:ei},ke),{},{active:ei===ze}));return{items:ut,activeItem:ut[ze],activeIndex:ze}})(Ft,c(D))),R(M,!1),pA()})}))):(c(D)&&R(D,void 0),Promise.resolve())}),HA.apply(this,arguments)}function uA(){o("handleClose"),F.cancel(),_.cancel(),Ue(!1,c(f),a()),Q()()}RA(()=>c(D),()=>{var MA;R(A,((MA=c(D))===null||MA===void 0||(MA=MA.items)===null||MA===void 0?void 0:MA.length)||0)}),RA(()=>c(D),()=>{var MA;R(i,((MA=c(D))===null||MA===void 0?void 0:MA.activeIndex)||0)}),RA(()=>(c(A),O_),()=>{R(n,c(A)>=O_?"".concat(999,"+"):String(c(A)))}),RA(()=>(G(d()),c(D)),()=>{d()(c(D))}),RA(()=>G(g()),()=>{(function(MA){mA.apply(this,arguments)})(g())}),RA(()=>c(f),()=>{F(c(f))}),RA(()=>G(a()),()=>{_(a())}),kn(),Ai(!0);var XA=vi(),QA=At(XA),ZA=MA=>{var Me=DNA(),LA=CA(Me),pA=CA(LA),Ft=xA=>{var _A=pNA(),Et=CA(_A),et=tt(()=>l()?v0:WE);Wi(Et,{get data(){return c(et)}}),ue("click",_A,U),cA(xA,_A)};TA(pA,xA=>{C()||xA(Ft)});var ht=CA(bA(pA,2)),Ee=CA(ht),Kt=CA(Ee),Je=xA=>{Wi(xA,{get data(){return AV},spin:!0})},ze=xA=>{Wi(xA,{get data(){return r3}})};TA(Kt,xA=>{c(M)?xA(Je):xA(ze,!1)});var ut=bA(Ee,2),ke=CA(ut);Nr(()=>ev(ke,()=>c(f),xA=>R(f,xA))),bs(ke,xA=>BA?.(xA)),Nr(()=>ue("paste",ke,$));var ei,Y=bA(ut,2),z=CA(Y),nA=bA(Y,2);Wi(CA(nA),{get data(){return rV}});var rA=bA(nA,2);Wi(CA(rA),{get data(){return $q}});var NA=bA(rA,2);Wi(CA(NA),{get data(){return g3}});var Ie=bA(ht,2),Qe=xA=>{var _A=wNA(),Et=CA(_A),et=bA(Et,2),Ye=bA(et,2);ev(Et,()=>c(S),Ge=>R(S,Ge)),ue("keydown",Et,j),ue("click",et,DA),ue("click",Ye,aA),cA(xA,_A)};TA(Ie,xA=>{l()&&!C()&&xA(Qe)}),ve(()=>{var xA;ei=$t(Y,1,"jse-search-count svelte-1x1x8q0",null,ei,{"jse-visible":c(f)!==""}),Rt(z,"".concat(c(i)!==-1&&c(i){g()&&MA(ZA)}),cA(t,XA),xt()}var Am=Symbol("path");function yNA(t,e){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1/0,i={};Array.isArray(t)&&(function(o,a,r){if(o.length1?(o.length-1)/(a-1):o.length,g=0;g{pn(o)?$oA(o,i,e):i[Am]=!0});var n=[];return Am in i&&n.push([]),AaA(i,[],n,e),n}function $oA(t,e,A){for(var i in t){var n=t[i],o=e[i]||(e[i]={});pn(n)&&A?$oA(n,o,A):o[Am]===void 0&&(o[Am]=!0)}}function AaA(t,e,A,i){for(var n in t){var o=e.concat(n),a=t[n];a&&a[Am]===!0&&A.push(o),ia(a)&&i&&AaA(a,o,A,i)}}function vNA(t,e,A,i,n,o){for(var a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:80,r=jo(A)?A.length:0,s=(function(b,S){var M=Object.values(b);if(Vi(M))return S;var D=(F,_)=>F+_;return M.reduce(D)/M.length})(i,n),g=t-a,l=e+2*a,C=b=>i[b]||n,I=0,d=o;d0&&(d-=C(--I));for(var B=I,E=0;Eq0(i,o))}}function Kd(t,e){var{rowIndex:A,columnIndex:i}=t;return[String(A),...e[i]]}function bNA(t,e){var[A,i]=fS(t,a=>PL(a.path[0])),n=hS(A,MNA),o=uS(n,a=>{var r={row:[],columns:{}};return a.forEach(s=>{var g=(function(l,C){var I=Fl(l.path,C);return I.columnIndex!==-1?I.columnIndex:-1})(s,e);g!==-1?(r.columns[g]===void 0&&(r.columns[g]=[]),r.columns[g].push(s)):r.row.push(s)}),r});return{root:i,rows:o}}function VQ(t,e){if(e&&e.length!==0)return e.length===1?e[0]:{path:t,message:"Multiple validation issues: "+e.map(A=>vg(A.path)+" "+A.message).join(", "),severity:Uc.warning}}function MNA(t){return parseInt(t.path[0],10)}function kNA(t,e,A){var i=e.some(n=>(function(o,a,r){if(!o)return!1;if(a.op==="replace"){var s=hs(a.path),{rowIndex:g,columnIndex:l}=Fl(s,r),C=r.findIndex(I=>Bi(I,o.path));if(g!==-1&&l!==-1&&l!==C)return!1}return!0})(t,n,A));return i?void 0:t}var vs=lr("jsoneditor:actions");function eaA(t){return FL.apply(this,arguments)}function FL(){return FL=Yt(function*(t){var{json:e,selection:A,indentation:i,readOnly:n,parser:o,onPatch:a}=t;if(!n&&e!==void 0&&A&&ih(A)){var r=woA(e,A,i,o);if(r!==void 0){vs("cut",{selection:A,clipboard:r,indentation:i}),yield IG(r);var{operations:s,newSelection:g}=koA(e,A);a(s,(l,C)=>({state:C,selection:g}))}}}),FL.apply(this,arguments)}function taA(t){return _L.apply(this,arguments)}function _L(){return _L=Yt(function*(t){var{json:e,selection:A,indentation:i,parser:n}=t,o=woA(e,A,i,n);o!==void 0&&(vs("copy",{clipboard:o,indentation:i}),yield IG(o))}),_L.apply(this,arguments)}function iaA(t){var{clipboardText:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onChangeText:r,onPasteMultilineText:s,openRepairModal:g}=t;if(!n)try{l(e)}catch{g(e,I=>{vs("repaired pasted text: ",I),l(I)})}function l(C){if(A!==void 0){var I=i||Ui([]),d=MoA(A,I,C,o),B=(function(E,Q,f){var b=arguments.length>3&&arguments[3]!==void 0?arguments[3]:_SA;if(E.length>b)return!1;var S=/\n/.test(E);if(!S)return!1;var M=Q.some(F=>F.op==="replace"&&Array.isArray(F.value)),D=Q.filter(F=>F.op==="add").length>1;if(!M&&!D)return!1;try{return sm(E,f.parse),!1}catch{return!0}})(e,d,o);vs("paste",{pastedText:C,operations:d,ensureSelection:I,pasteMultilineText:B}),a(d,(E,Q)=>{var f=Q;return d.filter(b=>(jk(b)||sw(b))&&aa(b.value)).forEach(b=>{var S=cg(A,b.path);f=tB(E,f,S)}),{state:f}}),B&&s(C)}else vs("paste text",{pastedText:C}),r(e,(E,Q)=>{if(E)return{state:tB(E,Q,[])}})}}function naA(t){var{json:e,text:A,selection:i,keepSelection:n,readOnly:o,onChange:a,onPatch:r}=t;if(!o&&i){var s=e!==void 0&&(gr(i)||In(i))?ys(i.path,i.path):i;if(Vi(lt(i)))vs("remove root",{selection:i}),a&&a({text:"",json:void 0},e!==void 0?{text:void 0,json:e}:{text:A||"",json:e},{contentErrors:void 0,patchResult:void 0});else if(e!==void 0){var{operations:g,newSelection:l}=koA(e,s);vs("remove",{operations:g,selection:i,newSelection:l}),r(g,(C,I)=>({state:I,selection:n?i:l}))}}}function Qv(t){var{insertType:e,selectInside:A,initialValue:i,json:n,selection:o,readOnly:a,parser:r,onPatch:s,onReplaceJson:g}=t;if(!a){var l=(function(E,Q,f){if(f==="object")return{};if(f==="array")return[];if(f==="structure"&&E!==void 0){var b=Q?moA(Q):[],S=je(E,b);if(Array.isArray(S)&&!Vi(S)){var M=pl(S);return aa(M)?dS(M,D=>Array.isArray(D)?[]:pn(D)?void 0:""):""}}return""})(n,o,e);if(n!==void 0){var C=r.stringify(l),I=MoA(n,o,C,r);vs("onInsert",{insertType:e,operations:I,newValue:l,data:C});var d=mi(I.filter(E=>E.op==="add"||E.op==="replace"));s(I,(E,Q,f)=>{if(d){var b=cg(E,d.path);if(aa(l))return{state:Gc(E,Q,b,rG),selection:A?g2(b):f};if(l===""){var S=Vi(b)?void 0:je(E,Ki(b));return{state:Gc(E,Q,b,qy),selection:pn(S)?sG(b,i):rv(b,i)}}}}),vs("after patch")}else{vs("onInsert",{insertType:e,newValue:l});var B=[];g(l,(E,Q)=>({state:tB(E,Q,B),selection:aa(l)?g2(B):rv(B)}))}}}function oaA(t){return LL.apply(this,arguments)}function LL(){return LL=Yt(function*(t){var{char:e,selectInside:A,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s,onSelect:g}=t;o||(gr(n)?g(ye(ye({},n),{},{edit:!0,initialValue:e})):e==="{"?Qv({insertType:"object",selectInside:A,initialValue:void 0,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s}):e==="["?Qv({insertType:"array",selectInside:A,initialValue:void 0,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s}):In(n)&&i!==void 0?aa(je(i,n.path))||g(ye(ye({},n),{},{edit:!0,initialValue:e})):(vs("onInsertValueWithCharacter",{char:e}),yield(function(l){return GL.apply(this,arguments)})({char:e,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s})))}),LL.apply(this,arguments)}function GL(){return GL=Yt(function*(t){var{char:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onReplaceJson:r}=t;n||Qv({insertType:"value",selectInside:!1,initialValue:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onReplaceJson:r})}),GL.apply(this,arguments)}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-json-preview.svelte-25xmyd { + flex: 1; + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: var(--jse-panel-color-readonly, #b2b2b2); + overflow: auto; + white-space: pre-wrap; + padding: 2px; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +}`);var SNA=FA('
    ');function aaA(t,e){St(e,!1);var A=IA(),i=IA(),n=N(e,"text",8),o=N(e,"json",8),a=N(e,"indentation",8),r=N(e,"parser",8);RA(()=>(G(o()),G(n())),()=>{R(A,o()!==void 0?{json:o()}:{text:n()||""})}),RA(()=>(c(A),G(a()),G(r()),iv),()=>{R(i,WC(hL(c(A),a(),r()),iv))}),kn(),Ai();var s=SNA(),g=CA(s);ve(()=>Rt(g,c(i))),cA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +button.jse-context-menu-button.svelte-16jz6ui { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + flex: 1; + white-space: nowrap; + padding: var(--jse-padding, 10px); + color: inherit; +} +button.jse-context-menu-button.svelte-16jz6ui:hover { + background: var(--jse-context-menu-background-highlight, #7a7a7a); +} +button.jse-context-menu-button.svelte-16jz6ui:focus { + background: var(--jse-context-menu-background-highlight, #7a7a7a); + z-index: 1; +} +button.jse-context-menu-button.svelte-16jz6ui:disabled { + color: var(--jse-context-menu-color-disabled, #9d9d9d); + background: unset; +} +button.jse-context-menu-button.left.svelte-16jz6ui { + text-align: left; +} +button.jse-context-menu-button.svelte-16jz6ui svg { + width: 16px; +}`);var xNA=FA('');function nL(t,e){St(e,!1);var A=N(e,"item",8),i=N(e,"className",8,void 0),n=N(e,"onRequestClose",8);Ai();var o=xNA(),a=CA(o),r=l=>{Wi(l,{get data(){return G(A()),EA(()=>A().icon)}})};TA(a,l=>{G(A()),EA(()=>A().icon)&&l(r)});var s=bA(a,2),g=l=>{var C=hr();ve(()=>Rt(C,(G(A()),EA(()=>A().text)))),cA(l,C)};TA(s,l=>{G(A()),EA(()=>A().text)&&l(g)}),ve(l=>{$t(o,1,l,"svelte-16jz6ui"),Mn(o,"title",(G(A()),EA(()=>A().title))),o.disabled=(G(A()),EA(()=>A().disabled||!1))},[()=>n1((G(Oc),G(i()),G(A()),EA(()=>Oc("jse-context-menu-button",i(),A().className))))]),ue("click",o,l=>{n()(),A().onClick(l)}),cA(t,o),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-dropdown-button.svelte-bov1j6 { + flex: 1; + line-height: normal; + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + position: relative; + padding: 0; + display: flex; +} +.jse-dropdown-button.svelte-bov1j6 ul:where(.svelte-bov1j6) { + margin: 0; + padding: 0; +} +.jse-dropdown-button.svelte-bov1j6 ul:where(.svelte-bov1j6) li:where(.svelte-bov1j6) { + margin: 0; + padding: 0; + list-style-type: none; +} +.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + width: 2em; + background: var(--jse-context-menu-background, #656565); + color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); + border-radius: 0; +} +.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown.jse-visible:where(.svelte-bov1j6) { + background: var(--jse-context-menu-background, #656565); +} +.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):hover { + background: var(--jse-context-menu-background-highlight, #7a7a7a); +} +.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):focus { + z-index: 1; +} +.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):disabled { + color: var(--jse-context-menu-color-disabled, #9d9d9d); + background: unset; +} +.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) { + display: none; + position: absolute; + top: 100%; + left: 0; + z-index: 1; + background: var(--jse-context-menu-background, #656565); + color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); +} +.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items.jse-visible:where(.svelte-bov1j6) { + display: block; +} +.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + width: 100%; + text-align: left; + padding: var(--jse-padding, 10px); + margin: 0; +} +.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6):hover { + background: var(--jse-context-menu-background-highlight, #7a7a7a); +} +.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6):disabled { + color: var(--jse-context-menu-color-disabled, #9d9d9d); + background: unset; +}`);var RNA=FA('
  • '),NNA=FA('
      ');qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +button.jse-context-menu-button.svelte-1y5l9l1 { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + flex: 1; + white-space: nowrap; + padding: var(--jse-padding, 10px); + color: inherit; +} +button.jse-context-menu-button.svelte-1y5l9l1:hover { + background: var(--jse-context-menu-background-highlight, #7a7a7a); +} +button.jse-context-menu-button.svelte-1y5l9l1:focus { + background: var(--jse-context-menu-background-highlight, #7a7a7a); + z-index: 1; +} +button.jse-context-menu-button.svelte-1y5l9l1:disabled { + color: var(--jse-context-menu-color-disabled, #9d9d9d); + background: unset; +} +button.jse-context-menu-button.left.svelte-1y5l9l1 { + text-align: left; +} +button.jse-context-menu-button.svelte-1y5l9l1 svg { + width: 16px; +}`);var FNA=FA('');function oL(t,e){St(e,!1);var A=IA(),i=N(e,"item",8),n=N(e,"className",8,void 0),o=N(e,"onRequestClose",8);RA(()=>(G(i()),G(o())),()=>{R(A,i().items.map(a=>ye(ye({},a),{},{onClick:r=>{o()(),a.onClick(r)}})))}),kn(),Ai(),(function(a,r){St(r,!1);var s=IA(void 0,!0),g=N(r,"items",25,()=>[]),l=N(r,"title",9,void 0),C=N(r,"width",9,"120px"),I=IA(!1,!0);function d(){R(I,!1)}function B(D){r2(D)==="Escape"&&(D.preventDefault(),R(I,!1))}is(()=>{document.addEventListener("click",d),document.addEventListener("keydown",B)}),Yl(()=>{document.removeEventListener("click",d),document.removeEventListener("keydown",B)}),RA(()=>G(g()),()=>{R(s,g().every(D=>D.disabled===!0))}),kn(),Ai(!0);var E=NNA(),Q=CA(E);Ba(Q,r,"defaultItem",{},null);var f,b=bA(Q,2);Wi(CA(b),{get data(){return v0}});var S,M=bA(b,2);Ea(CA(M),5,g,Ra,(D,F)=>{var _=RNA(),U=CA(_),J=CA(U),j=O=>{Wi(O,{get data(){return c(F),EA(()=>c(F).icon)}})};TA(J,O=>{c(F),EA(()=>c(F).icon)&&O(j)});var $=bA(J);ve(()=>{var O;Mn(U,"title",(c(F),EA(()=>c(F).title))),U.disabled=(c(F),EA(()=>c(F).disabled)),$t(U,1,n1((c(F),EA(()=>c(F).className))),"svelte-bov1j6"),Rt($," ".concat((c(F),(O=EA(()=>c(F).text))!==null&&O!==void 0?O:"")))}),ue("click",U,O=>c(F).onClick(O)),cA(D,_)}),ve(()=>{var D;Mn(E,"title",l()),f=$t(b,1,"jse-open-dropdown svelte-bov1j6",null,f,{"jse-visible":c(I)}),b.disabled=c(s),S=$t(M,1,"jse-dropdown-items svelte-bov1j6",null,S,{"jse-visible":c(I)}),Ul(M,"width: ".concat((D=C())!==null&&D!==void 0?D:"",";"))}),ue("click",b,function(){var D=c(I);setTimeout(()=>R(I,!D))}),ue("click",E,d),cA(a,E),xt()})(t,{get width(){return G(i()),EA(()=>i().width)},get items(){return c(A)},$$slots:{defaultItem:(a,r)=>{var s=FNA(),g=CA(s),l=I=>{Wi(I,{get data(){return G(i()),EA(()=>i().main.icon)}})};TA(g,I=>{G(i()),EA(()=>i().main.icon)&&I(l)});var C=bA(g);ve(I=>{var d;$t(s,1,I,"svelte-1y5l9l1"),Mn(s,"title",(G(i()),EA(()=>i().main.title))),s.disabled=(G(i()),EA(()=>i().main.disabled||!1)),Rt(C," ".concat((G(i()),(d=EA(()=>i().main.text))!==null&&d!==void 0?d:"")))},[()=>n1((G(Oc),G(n()),G(i()),EA(()=>Oc("jse-context-menu-button",n(),i().main.className))))]),ue("click",s,I=>{o()(),i().main.onClick(I)}),cA(a,s)}}}),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-contextmenu.svelte-1shjn02 { + box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + background: var(--jse-context-menu-background, #656565); + color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); +} +.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) { + display: flex; + flex-direction: row; + align-items: flex-start; + justify-content: stretch; +} +.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-label:where(.svelte-1shjn02) { + flex: 1; + white-space: nowrap; + padding: var(--jse-padding, 10px); + color: var(--jse-context-menu-color-disabled, #9d9d9d); + line-height: normal; +} +.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-tip:where(.svelte-1shjn02) { + flex: 1; + background: var(--jse-context-menu-tip-background, rgba(255, 255, 255, 0.2)); + color: var(--context-menu-tip-color, inherit); + margin: calc(0.5 * var(--jse-padding, 10px)); + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); + font-size: 80%; + line-height: 1.3em; + display: flex; + flex-direction: row; + align-items: flex-start; + gap: var(--jse-padding, 10px); + border-radius: 3px; +} +.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-tip:where(.svelte-1shjn02) div.jse-tip-icon:where(.svelte-1shjn02) { + padding-top: calc(0.5 * var(--jse-padding, 10px)); +} +.jse-contextmenu.svelte-1shjn02 .jse-column:where(.svelte-1shjn02) { + flex: 1; + display: flex; + flex-direction: column; + align-items: stretch; +} +.jse-contextmenu.svelte-1shjn02 .jse-column:where(.svelte-1shjn02):not(:last-child) { + border-right: 1px solid var(--jse-context-menu-separator-color, #7a7a7a); +} +.jse-contextmenu.svelte-1shjn02 .jse-separator:where(.svelte-1shjn02) { + width: 100%; + height: 1px; + background: var(--jse-context-menu-separator-color, #7a7a7a); +}`);var _NA=FA('
      '),LNA=FA('
      '),GNA=FA('
      '),KNA=FA('
      '),UNA=FA('
      '),JNA=FA('
      '),YNA=FA('
      '),TNA=FA('');function raA(t,e){St(e,!1);var A=N(e,"items",9),i=N(e,"onRequestClose",9),n=N(e,"tip",9),o=IA(void 0,!0);is(()=>{var I=Array.from(c(o).querySelectorAll("button")).find(d=>!d.disabled);I&&I.focus()});var a={ArrowUp:"Up",ArrowDown:"Down",ArrowLeft:"Left",ArrowRight:"Right"};function r(I){return console.error("Unknown type of context menu item",I),"???"}Ai(!0);var s=TNA(),g=CA(s);Ea(g,1,A,Ra,(I,d)=>{var B=vi(),E=At(B),Q=b=>{nL(b,{get item(){return c(d)},get onRequestClose(){return i()}})},f=b=>{var S=vi(),M=At(S),D=_=>{oL(_,{get item(){return c(d)},get onRequestClose(){return i()}})},F=_=>{var U=vi(),J=At(U),j=O=>{var DA=UNA();Ea(DA,5,()=>(c(d),EA(()=>c(d).items)),Ra,(P,aA)=>{var iA=vi(),BA=At(iA),oA=hA=>{nL(hA,{get item(){return c(aA)},get onRequestClose(){return i()}})},sA=hA=>{var YA=vi(),ee=At(YA),UA=KA=>{oL(KA,{get item(){return c(aA)},get onRequestClose(){return i()}})},mA=KA=>{var Pe=vi(),Ue=At(Pe),HA=XA=>{var QA=GNA();Ea(QA,5,()=>(c(aA),EA(()=>c(aA).items)),Ra,(ZA,MA)=>{var Me=vi(),LA=At(Me),pA=ht=>{nL(ht,{className:"left",get item(){return c(MA)},get onRequestClose(){return i()}})},Ft=ht=>{var Ee=vi(),Kt=At(Ee),Je=ut=>{oL(ut,{className:"left",get item(){return c(MA)},get onRequestClose(){return i()}})},ze=ut=>{var ke=vi(),ei=At(ke),Y=nA=>{cA(nA,_NA())},z=nA=>{var rA=vi(),NA=At(rA),Ie=xA=>{var _A=LNA(),Et=CA(_A);ve(()=>Rt(Et,(c(MA),EA(()=>c(MA).text)))),cA(xA,_A)},Qe=xA=>{var _A=hr();ve(Et=>Rt(_A,Et),[()=>(c(MA),EA(()=>r(c(MA))))]),cA(xA,_A)};TA(NA,xA=>{G(IiA),c(MA),EA(()=>IiA(c(MA)))?xA(Ie):xA(Qe,!1)},!0),cA(nA,rA)};TA(ei,nA=>{G(OI),c(MA),EA(()=>OI(c(MA)))?nA(Y):nA(z,!1)},!0),cA(ut,ke)};TA(Kt,ut=>{G(jQ),c(MA),EA(()=>jQ(c(MA)))?ut(Je):ut(ze,!1)},!0),cA(ht,Ee)};TA(LA,ht=>{G(qC),c(MA),EA(()=>qC(c(MA)))?ht(pA):ht(Ft,!1)}),cA(ZA,Me)}),cA(XA,QA)},uA=XA=>{var QA=vi(),ZA=At(QA),MA=LA=>{cA(LA,KNA())},Me=LA=>{var pA=hr();ve(Ft=>Rt(pA,Ft),[()=>(c(aA),EA(()=>r(c(aA))))]),cA(LA,pA)};TA(ZA,LA=>{G(OI),c(aA),EA(()=>OI(c(aA)))?LA(MA):LA(Me,!1)},!0),cA(XA,QA)};TA(Ue,XA=>{G(BiA),c(aA),EA(()=>BiA(c(aA)))?XA(HA):XA(uA,!1)},!0),cA(KA,Pe)};TA(ee,KA=>{G(jQ),c(aA),EA(()=>jQ(c(aA)))?KA(UA):KA(mA,!1)},!0),cA(hA,YA)};TA(BA,hA=>{G(qC),c(aA),EA(()=>qC(c(aA)))?hA(oA):hA(sA,!1)}),cA(P,iA)}),cA(O,DA)},$=O=>{var DA=vi(),P=At(DA),aA=BA=>{cA(BA,JNA())},iA=BA=>{var oA=hr();ve(sA=>Rt(oA,sA),[()=>(c(d),EA(()=>r(c(d))))]),cA(BA,oA)};TA(P,BA=>{G(OI),c(d),EA(()=>OI(c(d)))?BA(aA):BA(iA,!1)},!0),cA(O,DA)};TA(J,O=>{G(diA),c(d),EA(()=>diA(c(d)))?O(j):O($,!1)},!0),cA(_,U)};TA(M,_=>{G(jQ),c(d),EA(()=>jQ(c(d)))?_(D):_(F,!1)},!0),cA(b,S)};TA(E,b=>{G(qC),c(d),EA(()=>qC(c(d)))?b(Q):b(f,!1)}),cA(I,B)});var l=bA(g,2),C=I=>{var d=YNA(),B=CA(d),E=CA(B);Wi(CA(E),{get data(){return jq}});var Q=CA(bA(E,2));ve(()=>Rt(Q,n())),cA(I,d)};TA(l,I=>{n()&&I(C)}),Ko(s,I=>R(o,I),()=>c(o)),ue("keydown",s,function(I){var d=r2(I),B=a[d];if(B&&I.target){I.preventDefault();var E=dSA({allElements:Array.from(c(o).querySelectorAll("button:not([disabled])")),currentElement:I.target,direction:B,hasPrio:Q=>Q.getAttribute("data-type")!=="jse-open-dropdown"});E&&E.focus()}}),cA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-value.jse-string.svelte-1htmvf1 { + color: var(--jse-value-color-string, #008000); +} +.jse-value.jse-object.svelte-1htmvf1, .jse-value.jse-array.svelte-1htmvf1 { + min-width: 16px; + color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); +} +.jse-value.jse-number.svelte-1htmvf1 { + color: var(--jse-value-color-number, #ee422e); +} +.jse-value.jse-boolean.svelte-1htmvf1 { + color: var(--jse-value-color-boolean, #ff8c00); +} +.jse-value.jse-null.svelte-1htmvf1 { + color: var(--jse-value-color-null, #004ed0); +} +.jse-value.jse-invalid.svelte-1htmvf1 { + color: var(--jse-text-color, #4d4d4d); +} +.jse-value.jse-url.svelte-1htmvf1 { + color: var(--jse-value-color-url, #008000); + text-decoration: underline; +} + +.jse-enum-value.svelte-1htmvf1 { + background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); + border: none; + padding: 0; + font-family: inherit; + font-size: inherit; + cursor: pointer; + outline: none; +} +.jse-enum-value.jse-selected.svelte-1htmvf1 { + background: var(--jse-selection-background-color, #d3d3d3); + color: inherit; +} +.jse-enum-value.jse-value.svelte-1htmvf1:focus { + color: var(--jse-text-color, #4d4d4d); +}`);var f5e=FA(""),m5e=FA("");var Ky,Uy;function Jy(t,e){return Ky||(Uy=new WeakMap,Ky=new ResizeObserver(A=>{for(var i of A){var n=Uy.get(i.target);n&&n(i.target)}})),Uy.set(t,e),Ky.observe(t),{destroy:()=>{Uy.delete(t),Ky.unobserve(t)}}}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-tree-mode.svelte-10mlrw4 { + flex: 1; + display: flex; + flex-direction: column; + position: relative; + background: var(--jse-background-color, #fff); + min-width: 0; + min-height: 0; + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: var(--jse-text-color, #4d4d4d); + line-height: var(--jse-line-height, calc(1em + 4px)); +} +.jse-tree-mode.svelte-10mlrw4 .jse-hidden-input-label:where(.svelte-10mlrw4) .jse-hidden-input:where(.svelte-10mlrw4) { + position: fixed; + top: -10px; + left: -10px; + width: 1px; + height: 1px; + padding: 0; + border: 0; + outline: none; +} +.jse-tree-mode.no-main-menu.svelte-10mlrw4 { + border-top: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-tree-mode.svelte-10mlrw4 .jse-search-box-container:where(.svelte-10mlrw4) { + position: relative; + height: 0; + top: var(--jse-padding, 10px); + margin-right: calc(var(--jse-padding, 10px) + 20px); + margin-left: var(--jse-padding, 10px); + text-align: right; + z-index: 3; +} +.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) { + flex: 1; + overflow: auto; + position: relative; + padding: 2px; + display: flex; + flex-direction: column; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4):last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-loading-space:where(.svelte-10mlrw4) { + flex: 1; +} +.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-loading:where(.svelte-10mlrw4) { + flex: 2; + text-align: center; + color: var(--jse-panel-color-readonly, #b2b2b2); + box-sizing: border-box; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); +} +.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-search-box-background:where(.svelte-10mlrw4) { + border: 50px solid var(--jse-modal-background, #f5f5f5); + margin: -2px; + margin-bottom: 2px; + display: inline-block; +}`);var HNA=FA(" ",1),zNA=FA('
      '),ONA=FA('
      ',1),PNA=FA(' ',1),jNA=FA('
      loading...
      '),qNA=FA('
      ',1);function KL(t,e){St(e,!1);var A=IA(void 0,!0),i=lr("jsoneditor:TreeMode"),n=typeof window>"u";i("isSSR:",n);var o=II(),a=II(),{openAbsolutePopup:r,closeAbsolutePopup:s}=r1("absolute-popup"),g=IA(void 0,!0),l=IA(void 0,!0),C=IA(void 0,!0),I=!1,d=zoA(),B=N(e,"readOnly",9),E=N(e,"externalContent",9),Q=N(e,"externalSelection",9),f=N(e,"history",9),b=N(e,"truncateTextSize",9),S=N(e,"mainMenuBar",9),M=N(e,"navigationBar",9),D=N(e,"escapeControlCharacters",9),F=N(e,"escapeUnicodeCharacters",9),_=N(e,"parser",9),U=N(e,"parseMemoizeOne",9),J=N(e,"validator",9),j=N(e,"validationParser",9),$=N(e,"pathParser",9),O=N(e,"indentation",9),DA=N(e,"onError",9),P=N(e,"onChange",9),aA=N(e,"onChangeMode",9),iA=N(e,"onSelect",9),BA=N(e,"onUndo",9),oA=N(e,"onRedo",9),sA=N(e,"onRenderValue",9),hA=N(e,"onRenderMenu",9),YA=N(e,"onRenderContextMenu",9),ee=N(e,"onClassName",9),UA=N(e,"onFocus",9),mA=N(e,"onBlur",9),KA=N(e,"onSortModal",9),Pe=N(e,"onTransformModal",9),Ue=N(e,"onJSONEditorModal",9),HA=!1,uA=IA(!1,!0),XA=IA(void 0,!0);cG({onMount:is,onDestroy:Yl,getWindow:()=>gm(c(C)),hasFocus:()=>HA&&document.hasFocus()||WL(c(C)),onFocus:()=>{I=!0,UA()&&UA()()},onBlur:()=>{I=!1,mA()&&mA()()}});var QA=IA(void 0,!0),ZA=IA(void 0,!0),MA=void 0,Me=!1,LA=IA(pL({json:c(QA)}),!0),pA=IA(Vf(Q())?Q():void 0,!0);function Ft(q){R(pA,q)}is(()=>{if(c(pA)){var q=lt(c(pA));R(LA,Gc(c(QA),c(LA),q,qy)),setTimeout(()=>ko(q))}});var ht,Ee=IA(void 0,!0),Kt=IA(void 0,!0),Je=IA(void 0,!0),ze=IA(void 0,!0),ut=IA(!1,!0),ke=IA(!1,!0);function ei(q){R(ze,(ht=q)?xoA(c(QA),ht.items):void 0)}function Y(q,fA){return z.apply(this,arguments)}function z(){return(z=Yt(function*(q,fA){R(LA,Gc(c(QA),c(LA),q,qy));var PA=Bo(fA);yield Si(q,{element:PA})})).apply(this,arguments)}function nA(){R(ut,!1),R(ke,!1),Mt()}function rA(q){i("select validation error",q),R(pA,Ui(q.path)),Si(q.path)}function NA(q){var fA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:wL;i("expand"),R(LA,Gc(c(QA),c(LA),q,fA))}function Ie(q,fA){R(LA,uiA(c(QA),c(LA),q,fA)),c(pA)&&(function(PA,Fe){return q0(lt(PA),Fe)&&(lt(PA).length>Fe.length||Ar(PA))})(c(pA),q)&&R(pA,void 0)}var Qe=IA(!1,!0),xA=IA([],!0),_A=IA(void 0,!0),Et=ZE(OoA);function et(q,fA,PA,Fe){oh(()=>{var pe;try{pe=Et(q,fA,PA,Fe)}catch(De){pe=[{path:[],message:"Failed to validate: "+De.message,severity:Uc.warning}]}Bi(pe,c(xA))||(i("validationErrors changed:",pe),R(xA,pe),R(_A,(function(De,ot){var jt;return ot.forEach(Mi=>{jt=OiA(De,jt,Mi.path,(xn,Pi)=>ye(ye({},Pi),{},{validationError:Mi}))}),ot.forEach(Mi=>{for(var xn=Mi.path;xn.length>0;)xn=Ki(xn),jt=OiA(De,jt,xn,(Pi,Eo)=>Eo.validationError?Eo:ye(ye({},Eo),{},{validationError:{isChildError:!0,path:xn,message:"Contains invalid data",severity:Uc.warning}}))}),jt})(q,c(xA))))},pe=>i("validationErrors updated in ".concat(pe," ms")))}function Ye(){return i("validate"),MA?{parseError:MA,isRepairable:!1}:(et(c(QA),J(),_(),j()),Vi(c(xA))?void 0:{validationErrors:c(xA)})}function Ge(){return c(QA)}function si(){return c(LA)}function gn(){return c(pA)}function dn(q){i("applyExternalContent",{updatedContent:q}),Of(q)?(function(fA){if(fA!==void 0){var PA=!Bi(c(QA),fA);if(i("update external json",{isChanged:PA,currentlyText:c(QA)===void 0}),!!PA){var Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(ZA),textIsRepaired:c(Qe)};R(QA,fA),R(LA,Zg(fA,c(LA))),Le(c(QA)),R(ZA,void 0),R(Qe,!1),MA=void 0,Zi(c(QA)),Qi(Fe)}}})(q.json):zf(q)&&(function(fA){if(!(fA===void 0||Of(E()))){var PA=fA!==c(ZA);if(i("update external text",{isChanged:PA}),!!PA){var Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(ZA),textIsRepaired:c(Qe)};try{R(QA,U()(fA)),R(LA,Zg(c(QA),c(LA))),Le(c(QA)),R(ZA,fA),R(Qe,!1),MA=void 0}catch(pe){try{R(QA,U()(ul(fA))),R(LA,Zg(c(QA),c(LA))),Le(c(QA)),R(ZA,fA),R(Qe,!0),MA=void 0,Zi(c(QA))}catch{R(QA,void 0),R(LA,void 0),R(ZA,E().text),R(Qe,!1),MA=c(ZA)!==void 0&&c(ZA)!==""?uh(c(ZA),pe.message||String(pe)):void 0}}Zi(c(QA)),Qi(Fe)}}})(q.text)}function Le(q){Me||(Me=!0,R(LA,tB(q,c(LA),[])))}function Zi(q){c(pA)&&(br(q,jd(c(pA)))&&br(q,lt(c(pA)))||(i("clearing selection: path does not exist anymore",c(pA)),R(pA,qQ(q,c(LA)))))}function Qi(q){if(q.json!==void 0||q.text!==void 0){var fA=c(QA)!==void 0&&q.json!==void 0;f().add({type:"tree",undo:{patch:fA?[{op:"replace",path:"",value:q.json}]:void 0,json:q.json,text:q.text,documentState:q.documentState,textIsRepaired:q.textIsRepaired,selection:T0(q.selection),sortedColumn:void 0},redo:{patch:fA?[{op:"replace",path:"",value:c(QA)}]:void 0,json:c(QA),text:c(ZA),documentState:c(LA),textIsRepaired:c(Qe),selection:T0(c(pA)),sortedColumn:void 0}})}}function bi(q,fA){var PA;if(i("patch",q,fA),c(QA)===void 0)throw new Error("Cannot apply patch: no JSON");var Fe=c(QA),pe={json:void 0,text:c(ZA),documentState:c(LA),selection:T0(c(pA)),textIsRepaired:c(Qe),sortedColumn:void 0},De=SoA(c(QA),q),ot=hoA(c(QA),c(LA),q),jt=(PA=ph(c(QA),q))!==null&&PA!==void 0?PA:c(pA),Mi=typeof fA=="function"?fA(ot.json,ot.documentState,jt):void 0;return R(QA,Mi?.json!==void 0?Mi.json:ot.json),R(LA,Mi?.state!==void 0?Mi.state:ot.documentState),R(pA,Mi?.selection!==void 0?Mi.selection:jt),R(ZA,void 0),R(Qe,!1),R(Kt,void 0),R(Je,void 0),MA=void 0,Zi(c(QA)),f().add({type:"tree",undo:ye({patch:De},pe),redo:{patch:q,json:void 0,text:c(ZA),documentState:c(LA),selection:T0(c(pA)),sortedColumn:void 0,textIsRepaired:c(Qe)}}),{json:c(QA),previousJson:Fe,undo:De,redo:q}}function zi(){!B()&&c(pA)&&R(pA,sG(lt(c(pA))))}function yt(){if(!B()&&c(pA)){var q=lt(c(pA)),fA=je(c(QA),q);aa(fA)?(function(PA,Fe){i("openJSONEditorModal",{path:PA,value:Fe}),HA=!0,Ue()({content:{json:Fe},path:PA,onPatch:c(y).onPatch,onClose:()=>{HA=!1,setTimeout(Mt)}})})(q,fA):R(pA,rv(q))}}function Xi(){if(!B()&&In(c(pA))){var q=lt(c(pA)),fA=wt(q),PA=je(c(QA),q),Fe=!z0(c(QA),c(LA),q),pe=Fe?String(PA):Rh(String(PA),_());i("handleToggleEnforceString",{enforceString:Fe,value:PA,updatedValue:pe}),VA([{op:"replace",path:fA,value:pe}],(De,ot)=>({state:Dv(c(QA),ot,q,{type:"value",enforceString:Fe})}))}}function _t(){return c(Qe)&&c(QA)!==void 0&&me(c(QA)),c(QA)!==void 0?{json:c(QA)}:{text:c(ZA)||""}}function L(){return ct.apply(this,arguments)}function ct(){return ct=Yt(function*(){var q=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];yield eaA({json:c(QA),selection:c(pA),indentation:q?O():void 0,readOnly:B(),parser:_(),onPatch:VA})}),ct.apply(this,arguments)}function li(){return Bn.apply(this,arguments)}function Bn(){return Bn=Yt(function*(){var q=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];c(QA)!==void 0&&(yield taA({json:c(QA),selection:c(pA),indentation:q?O():void 0,parser:_()}))}),Bn.apply(this,arguments)}function En(q){var fA;q.preventDefault(),Co((fA=q.clipboardData)===null||fA===void 0?void 0:fA.getData("text/plain"))}function qn(){return Uo.apply(this,arguments)}function Uo(){return(Uo=Yt(function*(){try{Co(yield navigator.clipboard.readText())}catch(q){console.error(q),R(uA,!0)}})).apply(this,arguments)}function Co(q){q!==void 0&&iaA({clipboardText:q,json:c(QA),selection:c(pA),readOnly:B(),parser:_(),onPatch:VA,onChangeText:dA,onPasteMultilineText:Kn,openRepairModal:Mo})}function Mo(q,fA){R(XA,{text:q,onParse:PA=>sm(PA,Fe=>rm(Fe,_())),onRepair:noA,onApply:fA,onClose:Mt})}function Wo(){naA({json:c(QA),text:c(ZA),selection:c(pA),keepSelection:!1,readOnly:B(),onChange:P(),onPatch:VA})}function wo(){!B()&&c(QA)!==void 0&&c(pA)&&ih&&!Vi(lt(c(pA)))&&(i("duplicate",{selection:c(pA)}),VA(voA(c(QA),o1(c(QA),c(pA)))))}function Qa(){B()||!c(pA)||!lo(c(pA))&&!In(c(pA))||Vi(lt(c(pA)))||(i("extract",{selection:c(pA)}),VA(boA(c(QA),c(pA)),(q,fA)=>{if(aa(q))return{state:W_(q,fA,[])}}))}function Zo(q){Qv({insertType:q,selectInside:!0,initialValue:void 0,json:c(QA),selection:c(pA),readOnly:B(),parser:_(),onPatch:VA,onReplaceJson:me})}function ra(q){gr(c(pA))&&R(pA,Ui(c(pA).path)),c(pA)||R(pA,qQ(c(QA),c(LA))),Zo(q)}function Do(q){if(!B()&&c(pA))if(Ny(c(pA)))try{var fA=jd(c(pA)),PA=je(c(QA),fA),Fe=(function(De,ot,jt){if(ot==="array"){if(Array.isArray(De))return De;if(pn(De))return oiA(De);if(typeof De=="string")try{var Mi=jt.parse(De);if(Array.isArray(Mi))return Mi;if(pn(Mi))return oiA(Mi)}catch{return[De]}return[De]}if(ot==="object"){if(Array.isArray(De))return niA(De);if(pn(De))return De;if(typeof De=="string")try{var xn=jt.parse(De);if(pn(xn))return xn;if(Array.isArray(xn))return niA(xn)}catch{return{value:De}}return{value:De}}if(ot==="value")return aa(De)?jt.stringify(De):De;throw new Error("Cannot convert ".concat(jL(De,jt)," to ").concat(ot))})(PA,q,_());if(Fe===PA)return;var pe=[{op:"replace",path:wt(fA),value:Fe}];i("handleConvert",{selection:c(pA),path:fA,type:q,operations:pe}),VA(pe,(De,ot)=>({state:c(pA)?tB(De,ot,lt(c(pA))):c(LA)}))}catch(De){DA()(De)}else DA()(new Error("Cannot convert current selection to ".concat(q)))}function re(){if(c(pA)){var q=wiA(c(QA),c(LA),c(pA),!1),fA=Ki(lt(c(pA)));q&&!Vi(lt(q))&&Bi(fA,Ki(lt(q)))?R(pA,i2(lt(q))):R(pA,g2(fA)),i("insert before",{selection:c(pA),selectionBefore:q,parentPath:fA}),bo(),Ji()}}function di(){if(c(pA)){var q=i1(c(QA),c(pA));i("insert after",q),R(pA,i2(q)),bo(),Ji()}}function ln(q){return Qn.apply(this,arguments)}function Qn(){return(Qn=Yt(function*(q){yield oaA({char:q,selectInside:!0,json:c(QA),selection:c(pA),readOnly:B(),parser:_(),onPatch:VA,onReplaceJson:me,onSelect:Ft})})).apply(this,arguments)}function Jo(){if(!B()&&f().canUndo){var q=f().undo();if(ov(q)){var fA={json:c(QA),text:c(ZA)};R(QA,q.undo.patch?lg(c(QA),q.undo.patch):q.undo.json),R(LA,q.undo.documentState),R(pA,q.undo.selection),R(ZA,q.undo.text),R(Qe,q.undo.textIsRepaired),MA=void 0,i("undo",{item:q,json:c(QA),documentState:c(LA),selection:c(pA)}),vA(fA,q.undo.patch&&q.redo.patch?{json:c(QA),previousJson:fA.json,redo:q.undo.patch,undo:q.redo.patch}:void 0),Mt(),c(pA)&&Si(lt(c(pA)),{scrollToWhenVisible:!1})}else BA()(q)}}function ya(){if(!B()&&f().canRedo){var q=f().redo();if(ov(q)){var fA={json:c(QA),text:c(ZA)};R(QA,q.redo.patch?lg(c(QA),q.redo.patch):q.redo.json),R(LA,q.redo.documentState),R(pA,q.redo.selection),R(ZA,q.redo.text),R(Qe,q.redo.textIsRepaired),MA=void 0,i("redo",{item:q,json:c(QA),documentState:c(LA),selection:c(pA)}),vA(fA,q.undo.patch&&q.redo.patch?{json:c(QA),previousJson:fA.json,redo:q.redo.patch,undo:q.undo.patch}:void 0),Mt(),c(pA)&&Si(lt(c(pA)),{scrollToWhenVisible:!1})}else oA()(q)}}function wi(q){var fA;B()||c(QA)===void 0||(HA=!0,KA()({id:o,json:c(QA),rootPath:q,onSort:(fA=Yt(function*(PA){var{operations:Fe}=PA;i("onSort",q,Fe),VA(Fe,(pe,De)=>({state:W_(pe,De,q),selection:Ui(q)}))}),function(PA){return fA.apply(this,arguments)}),onClose:()=>{HA=!1,setTimeout(Mt)}}))}function Io(){c(pA)&&wi(yiA(c(QA),c(pA)))}function tr(){wi([])}function yo(q){if(c(QA)!==void 0){var{id:fA,onTransform:PA,onClose:Fe}=q,pe=q.rootPath||[];HA=!0,Pe()({id:fA||a,json:c(QA),rootPath:pe,onTransform:De=>{PA?PA({operations:De,json:c(QA),transformedJson:lg(c(QA),De)}):(i("onTransform",pe,De),VA(De,(ot,jt)=>({state:W_(ot,jt,pe),selection:Ui(pe)})))},onClose:()=>{HA=!1,setTimeout(Mt),Fe&&Fe()}})}}function Pa(){c(pA)&&yo({rootPath:yiA(c(QA),c(pA))})}function Gn(){yo({rootPath:[]})}function Si(q){return Pt.apply(this,arguments)}function Pt(){return Pt=Yt(function*(q){var{scrollToWhenVisible:fA=!0,element:PA}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};R(LA,Gc(c(QA),c(LA),q,qy));var Fe=PA??Sn(q);if(i("scrollTo",{path:q,elem:Fe,refContents:c(g)}),!Fe||!c(g))return Promise.resolve();var pe=c(g).getBoundingClientRect(),De=Fe.getBoundingClientRect();if(!fA&&De.bottom>pe.top&&De.top{d(Fe,{container:c(g),offset:ot,duration:300,callback:()=>jt()})})}),Pt.apply(this,arguments)}function Sn(q){var fA,PA;return bo(),(fA=(PA=c(g))===null||PA===void 0?void 0:PA.querySelector('div[data-path="'.concat(jy(q),'"]')))!==null&&fA!==void 0?fA:void 0}function Bo(q){var fA,PA;return bo(),(fA=(PA=c(g))===null||PA===void 0?void 0:PA.querySelector('span[data-search-result-index="'.concat(q,'"]')))!==null&&fA!==void 0?fA:void 0}function ko(q){var fA=Sn(q);if(fA&&c(g)){var PA=c(g).getBoundingClientRect(),Fe=fA.getBoundingClientRect(),pe=aa(je(c(QA),q))?20:Fe.height;Fe.topPA.bottom-20&&d(fA,{container:c(g),offset:-(PA.height-pe-20),duration:0})}}function vA(q,fA){if(q.json!==void 0||q?.text!==void 0){if(c(ZA)!==void 0){var PA,Fe={text:c(ZA),json:void 0};(PA=P())===null||PA===void 0||PA(Fe,q,{contentErrors:Ye(),patchResult:fA})}else if(c(QA)!==void 0){var pe,De={text:void 0,json:c(QA)};(pe=P())===null||pe===void 0||pe(De,q,{contentErrors:Ye(),patchResult:fA})}}}function VA(q,fA){i("handlePatch",q,fA);var PA={json:c(QA),text:c(ZA)},Fe=bi(q,fA);return vA(PA,Fe),Fe}function me(q,fA){var PA={json:c(QA),text:c(ZA)},Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(ZA),textIsRepaired:c(Qe)},pe=Gc(c(QA),Zg(q,c(LA)),[],Kf),De=typeof fA=="function"?fA(q,pe,c(pA)):void 0;R(QA,De?.json!==void 0?De.json:q),R(LA,De?.state!==void 0?De.state:pe),R(pA,De?.selection!==void 0?De.selection:c(pA)),R(ZA,void 0),R(Qe,!1),MA=void 0,Zi(c(QA)),Qi(Fe),vA(PA,void 0)}function dA(q,fA){i("handleChangeText");var PA={json:c(QA),text:c(ZA)},Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(ZA),textIsRepaired:c(Qe)};try{R(QA,U()(q)),R(LA,Gc(c(QA),Zg(c(QA),c(LA)),[],Kf)),R(ZA,void 0),R(Qe,!1),MA=void 0}catch(De){try{R(QA,U()(ul(q))),R(LA,Gc(c(QA),Zg(c(QA),c(LA)),[],Kf)),R(ZA,q),R(Qe,!0),MA=void 0}catch{R(QA,void 0),R(LA,pL({json:c(QA),expand:Kf})),R(ZA,q),R(Qe,!1),MA=c(ZA)!==""?uh(c(ZA),De.message||String(De)):void 0}}if(typeof fA=="function"){var pe=fA(c(QA),c(LA),c(pA));R(QA,pe?.json!==void 0?pe.json:c(QA)),R(LA,pe?.state!==void 0?pe.state:c(LA)),R(pA,pe?.selection!==void 0?pe.selection:c(pA))}Zi(c(QA)),Qi(Fe),vA(PA,void 0)}function SA(q,fA){var PA=arguments.length>2&&arguments[2]!==void 0&&arguments[2];i("handleExpand",{path:q,expanded:fA,recursive:PA}),fA?NA(q,PA?rG:wL):Ie(q,PA),Mt()}function oe(){SA([],!0,!0)}function xe(){SA([],!1,!0)}function it(q){i("openFind",{findAndReplace:q}),R(ut,!1),R(ke,!1),bo(),R(ut,!0),R(ke,q)}function rt(q,fA){i("handleExpandSection",q,fA),R(LA,(function(PA,Fe,pe,De){return mh(PA,Fe,pe,(ot,jt)=>{if(!sr(jt))return jt;var Mi=BoA(jt.visibleSections.concat(De));return ye(ye({},jt),{},{visibleSections:Mi})})})(c(QA),c(LA),q,fA))}function bt(q){i("pasted json as text",q),R(Kt,q)}function Kn(q){i("pasted multiline text",{pastedText:q}),R(Je,q)}function xi(q){var fA,{anchor:PA,left:Fe,top:pe,width:De,height:ot,offsetTop:jt,offsetLeft:Mi,showTip:xn}=q,Pi=(function(Wn){var{json:$o,documentState:un,selection:Gt,readOnly:$i,onEditKey:Zt,onEditValue:pt,onToggleEnforceString:gi,onCut:ga,onCopy:Zn,onPaste:Aa,onRemove:ha,onDuplicate:fr,onExtract:AC,onInsertBefore:xg,onInsert:zl,onConvert:$c,onInsertAfter:Ol,onSort:os,onTransform:mr}=Wn,Rg=$o!==void 0,eC=!!Gt,Ng=!!Gt&&Vi(lt(Gt)),Rn=Gt?je($o,lt(Gt)):void 0,Na=Array.isArray(Rn)?"Edit array":pn(Rn)?"Edit object":"Edit value",Fa=Rg&&(lo(Gt)||gr(Gt)||In(Gt)),Q1=Gt&&!Ng?je($o,Ki(lt(Gt))):void 0,QB=!$i&&Rg&&av(Gt)&&!Ng&&!Array.isArray(Q1),h1=!$i&&Rg&&Gt!==void 0&&av(Gt),tu=h1&&!aa(Rn),hB=!$i&&Fa,iu=Fa,Rb=!$i&&eC,Nb=!$i&&Rg&&Fa&&!Ng,Fb=!$i&&Rg&&Gt!==void 0&&(lo(Gt)||In(Gt))&&!Ng,A0=Fa,u1=A0?"Convert to:":"Insert:",_a=!$i&&(Ar(Gt)&&Array.isArray(Rn)||yg(Gt)&&Array.isArray(Q1)),tl=!$i&&(A0?Ny(Gt)&&!pn(Rn):eC),nu=!$i&&(A0?Ny(Gt)&&!Array.isArray(Rn):eC),ou=!$i&&(A0?Ny(Gt)&&aa(Rn):eC),f1=Gt!==void 0&&z0($o,un,lt(Gt));function Lr(au){Fa?au!=="structure"&&$c(au):zl(au)}return[{type:"row",items:[{type:"button",onClick:()=>Zt(),icon:nd,text:"Edit key",title:"Edit the key (Double-click on the key)",disabled:!QB},{type:"dropdown-button",main:{type:"button",onClick:()=>pt(),icon:nd,text:Na,title:"Edit the value (Double-click on the value)",disabled:!h1},width:"11em",items:[{type:"button",icon:nd,text:Na,title:"Edit the value (Double-click on the value)",onClick:()=>pt(),disabled:!h1},{type:"button",icon:f1?RS:_S,text:"Enforce string",title:"Enforce keeping the value as string when it contains a numeric value",onClick:()=>gi(),disabled:!tu}]}]},{type:"separator"},{type:"row",items:[{type:"dropdown-button",main:{type:"button",onClick:()=>ga(!0),icon:od,text:"Cut",title:"Cut selected contents, formatted with indentation (Ctrl+X)",disabled:!hB},width:"10em",items:[{type:"button",icon:od,text:"Cut formatted",title:"Cut selected contents, formatted with indentation (Ctrl+X)",onClick:()=>ga(!0),disabled:!hB},{type:"button",icon:od,text:"Cut compacted",title:"Cut selected contents, without indentation (Ctrl+Shift+X)",onClick:()=>ga(!1),disabled:!hB}]},{type:"dropdown-button",main:{type:"button",onClick:()=>Zn(!0),icon:kC,text:"Copy",title:"Copy selected contents, formatted with indentation (Ctrl+C)",disabled:!iu},width:"12em",items:[{type:"button",icon:kC,text:"Copy formatted",title:"Copy selected contents, formatted with indentation (Ctrl+C)",onClick:()=>Zn(!0),disabled:!iu},{type:"button",icon:kC,text:"Copy compacted",title:"Copy selected contents, without indentation (Ctrl+Shift+C)",onClick:()=>Zn(!1),disabled:!iu}]},{type:"button",onClick:()=>Aa(),icon:kS,text:"Paste",title:"Paste clipboard contents (Ctrl+V)",disabled:!Rb}]},{type:"separator"},{type:"row",items:[{type:"column",items:[{type:"button",onClick:()=>fr(),icon:xS,text:"Duplicate",title:"Duplicate selected contents (Ctrl+D)",disabled:!Nb},{type:"button",onClick:()=>AC(),icon:Vq,text:"Extract",title:"Extract selected contents",disabled:!Fb},{type:"button",onClick:()=>os(),icon:l3,text:"Sort",title:"Sort array or object contents",disabled:$i||!Fa},{type:"button",onClick:()=>mr(),icon:a3,text:"Transform",title:"Transform array or object contents (filter, sort, project)",disabled:$i||!Fa},{type:"button",onClick:()=>ha(),icon:Vw,text:"Remove",title:"Remove selected contents (Delete)",disabled:$i||!Fa}]},{type:"column",items:[{type:"label",text:u1},{type:"button",onClick:()=>Lr("structure"),icon:A0?c3:ad,text:"Structure",title:u1+" structure like the first item in the array",disabled:!_a},{type:"button",onClick:()=>Lr("object"),icon:A0?c3:ad,text:"Object",title:u1+" object",disabled:!tl},{type:"button",onClick:()=>Lr("array"),icon:A0?c3:ad,text:"Array",title:u1+" array",disabled:!nu},{type:"button",onClick:()=>Lr("value"),icon:A0?c3:ad,text:"Value",title:u1+" value",disabled:!ou}]}]},{type:"separator"},{type:"row",items:[{type:"button",onClick:()=>xg(),icon:tV,text:"Insert before",title:"Select area before current entry to insert or paste contents",disabled:$i||!Fa||Ng},{type:"button",onClick:()=>Ol(),icon:Wq,text:"Insert after",title:"Select area after current entry to insert or paste contents",disabled:$i||!Fa||Ng}]}]})({json:c(QA),documentState:c(LA),selection:c(pA),readOnly:B(),onEditKey:zi,onEditValue:yt,onToggleEnforceString:Xi,onCut:L,onCopy:li,onPaste:qn,onRemove:Wo,onDuplicate:wo,onExtract:Qa,onInsertBefore:re,onInsert:ra,onInsertAfter:di,onConvert:Do,onSort:Io,onTransform:Pa}),Eo=(fA=YA()(Pi))!==null&&fA!==void 0?fA:Pi;if(Eo!==!1){var Wt={left:Fe,top:pe,offsetTop:jt,offsetLeft:Mi,width:De,height:ot,anchor:PA,closeOnOuterClick:!0,onClose:()=>{HA=!1,Mt()}};HA=!0;var Xo=r(raA,{tip:xn?"Tip: you can open this context menu via right-click or with Ctrl+Q":void 0,items:Eo,onRequestClose:()=>s(Xo)},Wt)}}function Ji(q){if(!rr(c(pA)))if(q&&(q.stopPropagation(),q.preventDefault()),q&&q.type==="contextmenu"&&q.target!==c(l))xi({left:q.clientX,top:q.clientY,width:XC,height:ZC,showTip:!1});else{var fA,PA=(fA=c(g))===null||fA===void 0?void 0:fA.querySelector(".jse-context-menu-pointer.jse-selected");if(PA)xi({anchor:PA,offsetTop:2,width:XC,height:ZC,showTip:!1});else{var Fe,pe=(Fe=c(g))===null||Fe===void 0?void 0:Fe.getBoundingClientRect();pe&&xi({top:pe.top+2,left:pe.left+2,width:XC,height:ZC,showTip:!1})}}}function Vt(q){xi({anchor:IoA(q.target,"BUTTON"),offsetTop:0,width:XC,height:ZC,showTip:!0})}function Ri(){return va.apply(this,arguments)}function va(){return(va=Yt(function*(){if(i("apply pasted json",c(Kt)),c(Kt)){var{onPasteAsJson:q}=c(Kt);R(Kt,void 0),q(),setTimeout(Mt)}})).apply(this,arguments)}function Lt(){return st.apply(this,arguments)}function st(){return(st=Yt(function*(){i("apply pasted multiline text",c(Je)),c(Je)&&(Co(JSON.stringify(c(Je))),setTimeout(Mt))})).apply(this,arguments)}function Ni(){i("clear pasted json"),R(Kt,void 0),Mt()}function Oi(){i("clear pasted multiline text"),R(Je,void 0),Mt()}function Vn(){aA()(Da.text)}function hn(q){R(pA,q),Mt(),Si(lt(q))}function Mt(){i("focus"),c(l)&&(c(l).focus(),c(l).select())}function sa(q){return(function(fA,PA,Fe){var pe=Ki(Fe),De=[mi(Fe)],ot=je(fA,pe),jt=ot?V_(ot,PA,De):void 0;return jt?Ui(pe.concat(jt)):i2(Fe)})(c(QA),c(LA),q)}function Yo(q){c(A)&&c(A).onDrag(q)}function u(){c(A)&&c(A).onDragEnd()}var y=IA(void 0,!0);RA(()=>c(pA),()=>{var q;q=c(pA),Bi(q,Q())||(i("onSelect",q),iA()(q))}),RA(()=>(G(D()),G(F())),()=>{R(Ee,qL({escapeControlCharacters:D(),escapeUnicodeCharacters:F()}))}),RA(()=>c(ut),()=>{(function(q){c(g)&&q&&c(g).scrollTop===0&&(Xg(g,c(g).style.overflowAnchor="none"),Xg(g,c(g).scrollTop+=Gf),setTimeout(()=>{c(g)&&Xg(g,c(g).style.overflowAnchor="")}))})(c(ut))}),RA(()=>G(E()),()=>{dn(E())}),RA(()=>G(Q()),()=>{(function(q){Bi(c(pA),q)||(i("applyExternalSelection",{selection:c(pA),externalSelection:q}),Vf(q)&&R(pA,q))})(Q())}),RA(()=>(c(QA),G(J()),G(_()),G(j())),()=>{et(c(QA),J(),_(),j())}),RA(()=>(c(g),ziA),()=>{R(A,c(g)?ziA(c(g)):void 0)}),RA(()=>(G(B()),G(b()),G(_()),c(Ee),G(sA()),G(ee())),()=>{R(y,{mode:Da.tree,readOnly:B(),truncateTextSize:b(),parser:_(),normalization:c(Ee),getJson:Ge,getDocumentState:si,getSelection:gn,findElement:Sn,findNextInside:sa,focus:Mt,onPatch:VA,onInsert:Zo,onExpand:SA,onSelect:Ft,onFind:it,onExpandSection:rt,onPasteJson:bt,onRenderValue:sA(),onContextMenu:xi,onClassName:ee()||(()=>{}),onDrag:Yo,onDragEnd:u})}),RA(()=>c(y),()=>{i("context changed",c(y))}),kn();var x={expand:NA,collapse:Ie,validate:Ye,getJson:Ge,patch:bi,acceptAutoRepair:_t,openTransformModal:yo,scrollTo:Si,findElement:Sn,findSearchResult:Bo,focus:Mt};Ai(!0);var H=qNA();ue("mousedown",e2,function(q){!Nh(q.target,fA=>fA===c(C))&&rr(c(pA))&&(i("click outside the editor, exit edit mode"),R(pA,T0(c(pA))),I&&c(l)&&(c(l).focus(),c(l).blur()),i("blur (outside editor)"),c(l)&&c(l).blur())});var k,T=At(H),tA=CA(T),lA=q=>{(function(fA,PA){St(PA,!1);var Fe=IA(void 0,!0),pe=IA(void 0,!0),De=IA(void 0,!0),ot=N(PA,"json",9),jt=N(PA,"selection",9),Mi=N(PA,"readOnly",9),xn=N(PA,"showSearch",13,!1),Pi=N(PA,"history",9),Eo=N(PA,"onExpandAll",9),Wt=N(PA,"onCollapseAll",9),Xo=N(PA,"onUndo",9),Wn=N(PA,"onRedo",9),$o=N(PA,"onSort",9),un=N(PA,"onTransform",9),Gt=N(PA,"onContextMenu",9),$i=N(PA,"onCopy",9),Zt=N(PA,"onRenderMenu",9);function pt(){xn(!xn())}var gi=IA(void 0,!0),ga=IA(void 0,!0),Zn=IA(void 0,!0),Aa=IA(void 0,!0);RA(()=>G(ot()),()=>{R(Fe,ot()!==void 0)}),RA(()=>(c(Fe),G(jt()),In),()=>{R(pe,c(Fe)&&(lo(jt())||gr(jt())||In(jt())))}),RA(()=>(G(Eo()),G(ot())),()=>{R(gi,{type:"button",icon:VoA,title:"Expand all",className:"jse-expand-all",onClick:Eo(),disabled:!aa(ot())})}),RA(()=>(G(Wt()),G(ot())),()=>{R(ga,{type:"button",icon:WoA,title:"Collapse all",className:"jse-collapse-all",onClick:Wt(),disabled:!aa(ot())})}),RA(()=>G(ot()),()=>{R(Zn,{type:"button",icon:r3,title:"Search (Ctrl+F)",className:"jse-search",onClick:pt,disabled:ot()===void 0})}),RA(()=>(G(Mi()),c(gi),c(ga),G($o()),G(ot()),G(un()),c(Zn),G(Gt()),G(Xo()),G(Pi()),G(Wn()),G($i()),c(pe)),()=>{R(Aa,Mi()?[c(gi),c(ga),{type:"separator"},{type:"button",icon:kC,title:"Copy (Ctrl+C)",className:"jse-copy",onClick:$i(),disabled:!c(pe)},{type:"separator"},c(Zn),{type:"space"}]:[c(gi),c(ga),{type:"separator"},{type:"button",icon:l3,title:"Sort",className:"jse-sort",onClick:$o(),disabled:Mi()||ot()===void 0},{type:"button",icon:a3,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:un(),disabled:Mi()||ot()===void 0},c(Zn),{type:"button",icon:SS,title:$L,className:"jse-contextmenu",onClick:Gt()},{type:"separator"},{type:"button",icon:Xw,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:Xo(),disabled:!Pi().canUndo},{type:"button",icon:Zw,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:Wn(),disabled:!Pi().canRedo},{type:"space"}])}),RA(()=>(G(Zt()),c(Aa)),()=>{R(De,Zt()(c(Aa))||c(Aa))}),kn(),Ai(!0),Sv(fA,{get items(){return c(De)}}),xt()})(q,{get json(){return c(QA)},get selection(){return c(pA)},get readOnly(){return B()},get history(){return f()},onExpandAll:oe,onCollapseAll:xe,onUndo:Jo,onRedo:ya,onSort:tr,onTransform:Gn,onContextMenu:Vt,onCopy:li,get onRenderMenu(){return hA()},get showSearch(){return c(ut)},set showSearch(fA){R(ut,fA)},$$legacy:!0})};TA(tA,q=>{S()&&q(lA)});var wA=bA(tA,2),Ae=q=>{mNA(q,{get json(){return c(QA)},get selection(){return c(pA)},onSelect:hn,get onError(){return DA()},get pathParser(){return $()}})};TA(wA,q=>{M()&&q(Ae)});var ne=bA(wA,2),Be=q=>{var fA=PNA(),PA=At(fA),Fe=CA(PA);Fe.readOnly=!0,Ko(Fe,jt=>R(l,jt),()=>c(l));var pe=bA(PA,2),De=jt=>{var Mi=vi(),xn=At(Mi),Pi=Wt=>{(function(Xo,Wn){function $o(gi){gi.stopPropagation(),Wn.onCreateObject()}function un(gi){gi.stopPropagation(),Wn.onCreateArray()}St(Wn,!0);var Gt=sNA();Gt.__click=()=>Wn.onClick();var $i=bA(CA(Gt),2),Zt=bA(CA($i),2),pt=gi=>{var ga=rNA(),Zn=bA(At(ga),2);Mn(Zn,"title","Create an empty JSON object (press '{')"),Zn.__click=$o;var Aa=bA(Zn,2);Mn(Aa,"title","Create an empty JSON array (press '[')"),Aa.__click=un,cA(gi,ga)};TA(Zt,gi=>{Wn.readOnly||gi(pt)}),cA(Xo,Gt),xt()})(Wt,{get readOnly(){return B()},onCreateObject:()=>{Mt(),ln("{")},onCreateArray:()=>{Mt(),ln("[")},onClick:()=>{Mt()}})},Eo=Wt=>{var Xo=HNA(),Wn=At(Xo),$o=tt(()=>B()?[]:[{icon:s3,text:"Repair manually",title:'Open the document in "code" mode and repair it manually',onClick:Vn}]);el(Wn,{type:"error",message:"The loaded JSON document is invalid and could not be repaired automatically.",get actions(){return c($o)}}),aaA(bA(Wn,2),{get text(){return c(ZA)},get json(){return c(QA)},get indentation(){return O()},get parser(){return _()}}),cA(Wt,Xo)};TA(xn,Wt=>{c(ZA)===""||c(ZA)===void 0?Wt(Pi):Wt(Eo,!1)}),cA(jt,Mi)},ot=jt=>{var Mi=ONA(),xn=At(Mi);XoA(CA(xn),{get json(){return c(QA)},get documentState(){return c(LA)},get parser(){return _()},get showSearch(){return c(ut)},get showReplace(){return c(ke)},get readOnly(){return B()},columns:void 0,onSearch:ei,onFocus:Y,onPatch:VA,onClose:nA});var Pi=bA(xn,2);Mn(Pi,"data-jsoneditor-scrollable-contents",!0);var Eo=CA(Pi),Wt=Zt=>{cA(Zt,zNA())};TA(Eo,Zt=>{c(ut)&&Zt(Wt)}),RL(bA(Eo,2),{get value(){return c(QA)},pointer:"",get state(){return c(LA)},get validationErrors(){return c(_A)},get searchResults(){return c(ze)},get selection(){return c(pA)},get context(){return c(y)},get onDragSelectionStart(){return pa}}),Ko(Pi,Zt=>R(g,Zt),()=>c(g));var Xo=bA(Pi,2),Wn=Zt=>{var pt=tt(()=>(c(Kt),EA(()=>"You pasted a JSON ".concat(Array.isArray(c(Kt).contents)?"array":"object"," as text")))),gi=tt(()=>[{icon:MC,text:"Paste as JSON instead",title:"Replace the value with the pasted JSON",onMouseDown:Ri},{text:"Leave as is",title:"Keep the JSON embedded in the value",onClick:Ni}]);el(Zt,{type:"info",get message(){return c(pt)},get actions(){return c(gi)}})};TA(Xo,Zt=>{c(Kt)&&Zt(Wn)});var $o=bA(Xo,2),un=Zt=>{var pt=tt(()=>[{icon:MC,text:"Paste as string instead",title:"Paste the clipboard data as a single string value instead of an array",onClick:Lt},{text:"Leave as is",title:"Keep the pasted array",onClick:Oi}]);el(Zt,{type:"info",message:"Multiline text was pasted as array",get actions(){return c(pt)}})};TA($o,Zt=>{c(Je)&&Zt(un)});var Gt=bA($o,2),$i=Zt=>{var pt=tt(()=>B()?[]:[{icon:Ww,text:"Ok",title:"Accept the repaired document",onClick:_t},{icon:s3,text:"Repair manually instead",title:"Leave the document unchanged and repair it manually instead",onClick:Vn}]);el(Zt,{type:"success",message:"The loaded JSON document was invalid but is successfully repaired.",get actions(){return c(pt)},onClose:Mt})};TA(Gt,Zt=>{c(Qe)&&Zt($i)}),CG(bA(Gt,2),{get validationErrors(){return c(xA)},selectError:rA}),cA(jt,Mi)};TA(pe,jt=>{c(QA)===void 0?jt(De):jt(ot,!1)}),ue("paste",Fe,En),cA(q,fA)},Te=q=>{cA(q,jNA())};TA(ne,q=>{n?q(Te,!1):q(Be)}),Ko(T,q=>R(C,q),()=>c(C));var Se=bA(T,2),Ne=q=>{PoA(q,{onClose:()=>R(uA,!1)})};TA(Se,q=>{c(uA)&&q(Ne)});var ni=bA(Se,2),Un=q=>{joA(q,e1(()=>c(XA),{onClose:()=>{var fA;(fA=c(XA))===null||fA===void 0||fA.onClose(),R(XA,void 0)}}))};return TA(ni,q=>{c(XA)&&q(Un)}),ve(()=>k=$t(T,1,"jse-tree-mode svelte-10mlrw4",null,k,{"no-main-menu":!S()})),ue("keydown",T,function(q){var fA=r2(q),PA=q.shiftKey;if(i("keydown",{combo:fA,key:q.key}),fA==="Ctrl+X"&&(q.preventDefault(),L(!0)),fA==="Ctrl+Shift+X"&&(q.preventDefault(),L(!1)),fA==="Ctrl+C"&&(q.preventDefault(),li(!0)),fA==="Ctrl+Shift+C"&&(q.preventDefault(),li(!1)),fA==="Ctrl+D"&&(q.preventDefault(),wo()),fA!=="Delete"&&fA!=="Backspace"||(q.preventDefault(),Wo()),fA==="Insert"&&(q.preventDefault(),Zo("structure")),fA==="Ctrl+A"&&(q.preventDefault(),R(pA,Ui([]))),fA==="Ctrl+Q"&&Ji(q),fA==="ArrowUp"||fA==="Shift+ArrowUp"){q.preventDefault();var Fe=c(pA)?wiA(c(QA),c(LA),c(pA),PA)||c(pA):qQ(c(QA),c(LA));R(pA,Fe),ko(lt(Fe))}if(fA==="ArrowDown"||fA==="Shift+ArrowDown"){q.preventDefault();var pe=c(pA)?(function(Pi,Eo,Wt){var Xo=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(Wt){var Wn=Xo?lt(Wt):i1(Pi,Wt),$o=aa(je(Pi,Wn))?uiA(Pi,Eo,Wn,!0):Eo,un=V_(Pi,Eo,Wn),Gt=V_(Pi,$o,Wn);if(Xo)return Ar(Wt)?un!==void 0?ys(un,un):void 0:yg(Wt)?Gt!==void 0?ys(Gt,Gt):void 0:Gt!==void 0?ys(jd(Wt),Gt):void 0;if(yg(Wt))return Gt!==void 0?Ui(Gt):void 0;if(Ar(Wt)||In(Wt))return un!==void 0?Ui(un):void 0;if(gr(Wt)){if(un===void 0||un.length===0)return;var $i=Ki(un),Zt=je(Pi,$i);return Array.isArray(Zt)?Ui(un):s2(un)}return lo(Wt)?Gt!==void 0?Ui(Gt):un!==void 0?Ui(un):void 0:void 0}})(c(QA),c(LA),c(pA),PA)||c(pA):qQ(c(QA),c(LA));R(pA,pe),ko(lt(pe))}if(fA==="ArrowLeft"||fA==="Shift+ArrowLeft"){q.preventDefault();var De=c(pA)?(function(Pi,Eo,Wt){var Xo=arguments.length>3&&arguments[3]!==void 0&&arguments[3],Wn=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4];if(Wt){var{caret:$o,previous:un}=DiA(Pi,Eo,Wt,Wn);if(Xo)return lo(Wt)?void 0:ys(Wt.path,Wt.path);if($o&&un)return DL(un);var Gt=Ki(lt(Wt)),$i=je(Pi,Gt);return In(Wt)&&Array.isArray($i)?ys(Wt.path,Wt.path):lo(Wt)&&!Array.isArray($i)?s2(Wt.focusPath):void 0}})(c(QA),c(LA),c(pA),PA,!B())||c(pA):qQ(c(QA),c(LA));R(pA,De),ko(lt(De))}if(fA==="ArrowRight"||fA==="Shift+ArrowRight"){q.preventDefault();var ot=c(pA)&&c(QA)!==void 0?(function(Pi,Eo,Wt){var Xo=arguments.length>3&&arguments[3]!==void 0&&arguments[3],Wn=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4];if(Wt){var{caret:$o,next:un}=DiA(Pi,Eo,Wt,Wn);return Xo?lo(Wt)?void 0:ys(Wt.path,Wt.path):$o&&un?DL(un):lo(Wt)?Ui(Wt.focusPath):void 0}})(c(QA),c(LA),c(pA),PA,!B())||c(pA):qQ(c(QA),c(LA));R(pA,ot),ko(lt(ot))}if(fA==="Enter"&&c(pA)){if(yv(c(pA))){var jt=c(pA).focusPath,Mi=je(c(QA),Ki(jt));Array.isArray(Mi)&&(q.preventDefault(),R(pA,Ui(jt)))}gr(c(pA))&&(q.preventDefault(),R(pA,ye(ye({},c(pA)),{},{edit:!0}))),In(c(pA))&&(q.preventDefault(),aa(je(c(QA),c(pA).path))?SA(c(pA).path,!0):R(pA,ye(ye({},c(pA)),{},{edit:!0})))}if(fA.replace(/^Shift\+/,"").length===1&&c(pA))return q.preventDefault(),void ln(q.key);if(fA==="Enter"&&(yg(c(pA))||Ar(c(pA))))return q.preventDefault(),void ln("");if(fA==="Ctrl+Enter"&&In(c(pA))){var xn=je(c(QA),c(pA).path);wv(xn)&&window.open(String(xn),"_blank")}fA==="Escape"&&c(pA)&&(q.preventDefault(),R(pA,void 0)),fA==="Ctrl+F"&&(q.preventDefault(),it(!1)),fA==="Ctrl+H"&&(q.preventDefault(),it(!0)),fA==="Ctrl+Z"&&(q.preventDefault(),Jo()),fA==="Ctrl+Shift+Z"&&(q.preventDefault(),ya())}),ue("mousedown",T,function(q){i("handleMouseDown",q);var fA=q.target;CoA(fA,"BUTTON")||fA.isContentEditable||(Mt(),c(pA)||c(QA)!==void 0||c(ZA)!==""&&c(ZA)!==void 0||(i("createDefaultSelection"),R(pA,Ui([]))))}),ue("contextmenu",T,Ji),cA(t,H),Ot(e,"expand",NA),Ot(e,"collapse",Ie),Ot(e,"validate",Ye),Ot(e,"getJson",Ge),Ot(e,"patch",bi),Ot(e,"acceptAutoRepair",_t),Ot(e,"openTransformModal",yo),Ot(e,"scrollTo",Si),Ot(e,"findElement",Sn),Ot(e,"findSearchResult",Bo),Ot(e,"focus",Mt),xt(x)}function saA(t){return typeof(e=t)!="object"||e===null?t:new Proxy(t,{get:(A,i,n)=>saA(Reflect.get(A,i,n)),set:()=>!1,deleteProperty:()=>!1});var e}var Yy=lr("jsoneditor:History");function gaA(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=t.maxItems||1e3,A=[],i=0;function n(){return i0}function a(){return{canUndo:n(),canRedo:o(),items:()=>A.slice().reverse(),add:s,undo:l,redo:C,clear:g}}function r(){t.onChange&&t.onChange(a())}function s(I){Yy("add",I),A=[I].concat(A.slice(i)).slice(0,e),i=0,r()}function g(){Yy("clear"),A=[],i=0,r()}function l(){if(n()){var I=A[i];return i+=1,Yy("undo",I),r(),I}}function C(){if(o())return Yy("redo",A[i-=1]),r(),A[i]}return{get:a}}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-transform-modal-inner.svelte-lta8xm { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; + min-height: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) { + color: inherit; + flex: 1; + display: flex; + flex-direction: column; + padding: 0; + overflow: auto; + min-width: 0; + min-height: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) { + display: flex; + flex-direction: row; + justify-content: flex-end; + padding-top: var(--jse-padding, 10px); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) { + flex: 1; + display: flex; + gap: calc(2 * var(--jse-padding, 10px)); + min-height: 0; + box-sizing: border-box; + padding: 0 calc(2 * var(--jse-padding, 10px)) var(--jse-padding, 10px); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) { + flex: 1; + display: flex; + flex-direction: column; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p { + margin: var(--jse-padding, 10px) 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p:first-child { + margin-top: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p:last-child { + margin-bottom: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) code { + background: var(--jse-modal-code-background, rgba(0, 0, 0, 0.05)); + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .query-error:where(.svelte-lta8xm) { + color: var(--jse-error-color, #ee5341); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) textarea.jse-query:where(.svelte-lta8xm) { + flex: 1; + outline: none; + resize: vertical; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) { + flex: 1; + display: flex; + flex-direction: column; + gap: calc(2 * var(--jse-padding, 10px)); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data:where(.svelte-lta8xm) { + flex: 1; + display: flex; + flex-direction: column; + min-height: 0; + box-sizing: border-box; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data.jse-hide:where(.svelte-lta8xm) { + flex: none; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-preview-data:where(.svelte-lta8xm) { + flex: 1; + display: flex; + flex-direction: column; + min-height: 0; + box-sizing: border-box; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents.jse-hide-original-data:where(.svelte-lta8xm) { + flex-direction: column; + gap: 0; + margin-bottom: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) { + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)) calc(2 * var(--jse-padding, 10px)); +} +@media screen and (max-width: 1200px) { + .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) { + flex-direction: column; + overflow: auto; + } + .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) textarea.jse-query:where(.svelte-lta8xm) { + min-height: 150px; + flex: none; + } + .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-tree-mode { + height: 300px; + flex: none; + } + .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data:where(.svelte-lta8xm), + .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-preview-data:where(.svelte-lta8xm) { + flex: unset; + } +} +.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) { + font-weight: bold; + display: block; + box-sizing: border-box; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) .jse-label-inner:where(.svelte-lta8xm) { + margin-top: calc(2 * var(--jse-padding, 10px)); + margin-bottom: calc(0.5 * var(--jse-padding, 10px)); + box-sizing: border-box; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) .jse-label-inner:where(.svelte-lta8xm) button:where(.svelte-lta8xm) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + font-weight: bold; + padding: 0; +} +.jse-transform-modal-inner.svelte-lta8xm .jse-tree-mode { + flex: 1; + background: var(--jse-input-background-readonly, transparent); + box-shadow: none; + box-sizing: border-box; + --jse-main-border: var(--jse-input-border, 1px solid #d8dbdf); +} +.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm), +.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm) { + border: var(--jse-input-border, 1px solid #d8dbdf); + outline: none; + box-sizing: border-box; + padding: calc(0.5 * var(--jse-padding, 10px)); + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: inherit; + background: var(--jse-input-background, var(--jse-background-color, #fff)); +} +.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm):focus, +.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm):focus { + border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); +} +.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm):read-only, +.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm):read-only { + background: var(--jse-input-background-readonly, transparent); +} +.jse-transform-modal-inner.svelte-lta8xm .jse-preview.jse-error:where(.svelte-lta8xm) { + flex: 1; + background: var(--jse-input-background-readonly, transparent); + border: var(--jse-input-border, 1px solid #d8dbdf); + color: var(--jse-error-color, #ee5341); + padding: calc(0.5 * var(--jse-padding, 10px)); +} +.jse-transform-modal-inner.svelte-lta8xm a { + color: var(--jse-a-color, #156fc5); +} +.jse-transform-modal-inner.svelte-lta8xm a:hover { + color: var(--jse-a-color-highlight, #0f508d); +}`);var Ff=pv(()=>txA),WQ=pv(()=>ixA),VNA=FA('
      '),WNA=FA(" ",1),ZNA=FA('
      '),XNA=FA('
      Language
      Path
      Query
      Preview
      ',1),$NA=FA('
      ');function AFA(t,e){var A,i,n;St(e,!1);var o=lr("jsoneditor:TransformModal"),a=N(e,"id",25,()=>"transform-modal-"+th()),r=N(e,"json",9),s=N(e,"rootPath",25,()=>[]),g=N(e,"indentation",9),l=N(e,"truncateTextSize",9),C=N(e,"escapeControlCharacters",9),I=N(e,"escapeUnicodeCharacters",9),d=N(e,"parser",9),B=N(e,"parseMemoizeOne",9),E=N(e,"validationParser",9),Q=N(e,"pathParser",9),f=N(e,"queryLanguages",9),b=N(e,"queryLanguageId",13),S=N(e,"onChangeQueryLanguage",9),M=N(e,"onRenderValue",9),D=N(e,"onRenderMenu",9),F=N(e,"onRenderContextMenu",9),_=N(e,"onClassName",9),U=N(e,"onTransform",9),J=N(e,"onClose",9),j=IA(void 0,!0),$=IA(gaA({onChange:LA=>R($,LA)}).get(),!0),O=IA(void 0,!0),DA=IA(void 0,!0),P=IA(!1,!0),aA="".concat(a(),":").concat(wt(s())),iA=(A=Ff()[aA])!==null&&A!==void 0?A:{},BA=IA(WQ().showWizard!==!1,!0),oA=IA(WQ().showOriginal!==!1,!0),sA=IA((i=iA.queryOptions)!==null&&i!==void 0?i:{},!0),hA=IA(b()===iA.queryLanguageId&&iA.query?iA.query:"",!0),YA=IA((n=iA.isManual)!==null&&n!==void 0&&n,!0),ee=IA(void 0,!0),UA=IA(void 0,!0),mA=IA({text:""},!0);function KA(LA){var pA;return(pA=f().find(Ft=>Ft.id===LA))!==null&&pA!==void 0?pA:f()[0]}function Pe(LA){try{R(sA,LA),R(hA,KA(b()).createQuery(c(O),LA)),R(ee,void 0),R(YA,!1),o("updateQueryByWizard",{queryOptions:c(sA),query:c(hA),isManual:c(YA)})}catch(pA){R(ee,String(pA))}}function Ue(LA){R(hA,LA.target.value),R(YA,!0),o("handleChangeQuery",{query:c(hA),isManual:c(YA)})}c(YA)||Pe(c(sA)),is(()=>{var LA;(LA=c(j))===null||LA===void 0||LA.focus()});var HA=qE(function(LA,pA){if(LA===void 0)return R(mA,{text:""}),void R(UA,"Error: No JSON");if(pA.trim()!=="")try{o("previewTransform",{query:pA});var Ft=KA(b()).executeQuery(LA,pA,d());R(mA,{json:Ft}),R(UA,void 0)}catch(ht){R(mA,{text:""}),R(UA,String(ht))}else R(mA,{json:LA})},300);function uA(){if(c(O)===void 0)return R(mA,{text:""}),void R(UA,"Error: No JSON");try{o("handleTransform",{query:c(hA)});var LA=KA(b()).executeQuery(c(O),c(hA),d());U()([{op:"replace",path:wt(s()),value:LA}]),J()()}catch(pA){console.error(pA),R(mA,{text:""}),R(UA,String(pA))}}function XA(){R(BA,!c(BA)),WQ(WQ().showWizard=c(BA))}function QA(){R(oA,!c(oA)),WQ(WQ().showOriginal=c(oA))}function ZA(LA){LA.focus()}function MA(LA){o("handleChangeQueryLanguage",LA),b(LA),S()(LA),Pe(c(sA))}function Me(){c(P)?R(P,!c(P)):J()()}RA(()=>(G(r()),G(s())),()=>{R(O,saA(je(r(),s())))}),RA(()=>c(O),()=>{R(DA,c(O)?{json:c(O)}:{text:""})}),RA(()=>(c(O),c(hA)),()=>{HA(c(O),c(hA))}),RA(()=>(Ff(),c(sA),c(hA),G(b()),c(YA)),()=>{Ff(Ff()[aA]={queryOptions:c(sA),query:c(hA),queryLanguageId:b(),isManual:c(YA)}),o("store state in memory",aA,Ff()[aA])}),kn(),Ai(!0),$f(t,{get onClose(){return J()},className:"jse-transform-modal",get fullscreen(){return c(P)},children:(LA,pA)=>{var Ft=$NA();uL(CA(Ft),{children:(ht,Ee)=>{var Kt=XNA(),Je=At(Kt);(function(L,ct){St(ct,!1);var li,Bn=N(ct,"queryLanguages",9),En=N(ct,"queryLanguageId",9),qn=N(ct,"fullscreen",13),Uo=N(ct,"onChangeQueryLanguage",9),Co=N(ct,"onClose",9),Mo=IA(void 0,!0),{openAbsolutePopup:Wo,closeAbsolutePopup:wo}=r1("absolute-popup");function Qa(){var Zo={queryLanguages:Bn(),queryLanguageId:En(),onChangeQueryLanguage:ra=>{wo(li),Uo()(ra)}};li=Wo(XxA,Zo,{offsetTop:-2,offsetLeft:0,anchor:c(Mo),closeOnOuterClick:!0})}Ai(!0),Bv(L,{title:"Transform",fullScreenButton:!0,get onClose(){return Co()},get fullscreen(){return qn()},set fullscreen(Zo){qn(Zo)},$$slots:{actions:(Zo,ra)=>{var Do,re=eRA();Wi(CA(re),{get data(){return iV}}),Ko(re,di=>R(Mo,di),()=>c(Mo)),ve(()=>Do=$t(re,1,"jse-config svelte-5gkegr",null,Do,{hide:Bn().length<=1})),ue("click",re,Qa),cA(Zo,re)}},$$legacy:!0}),xt()})(Je,{get queryLanguages(){return f()},get queryLanguageId(){return b()},onChangeQueryLanguage:MA,get onClose(){return J()},get fullscreen(){return c(P)},set fullscreen(L){R(P,L)},$$legacy:!0});var ze=CA(bA(Je,2)),ut=CA(ze),ke=bA(CA(ut),2);VnA(CA(ke),()=>(G(b()),EA(()=>KA(b()).description)));var ei=bA(ke,4),Y=bA(ei,2),z=CA(Y),nA=CA(z),rA=CA(nA),NA=tt(()=>c(BA)?v0:WE);Wi(rA,{get data(){return c(NA)}});var Ie=bA(Y,2),Qe=L=>{var ct=vi(),li=At(ct),Bn=qn=>{var Uo=WNA(),Co=At(Uo);VxA(Co,{get queryOptions(){return c(sA)},get json(){return c(O)},onChange:Pe});var Mo=bA(Co,2),Wo=wo=>{var Qa=VNA(),Zo=CA(Qa);ve(()=>Rt(Zo,c(ee))),cA(wo,Qa)};TA(Mo,wo=>{c(ee)&&wo(Wo)}),cA(qn,Uo)},En=qn=>{cA(qn,hr("(Only available for arrays, not for objects)"))};TA(li,qn=>{c(O),EA(()=>Array.isArray(c(O)))?qn(Bn):qn(En,!1)}),cA(L,ct)};TA(Ie,L=>{c(BA)&&L(Qe)});var xA=bA(Ie,4);Ko(xA,L=>R(j,L),()=>c(j));var _A,Et,et=bA(ut,2),Ye=CA(et),Ge=CA(Ye),si=CA(Ge),gn=CA(si),dn=CA(gn),Le=tt(()=>c(oA)?v0:WE);Wi(dn,{get data(){return c(Le)}});var Zi=bA(Ge,2),Qi=L=>{KL(L,{get externalContent(){return c(DA)},externalSelection:void 0,get history(){return c($)},readOnly:!0,get truncateTextSize(){return l()},mainMenuBar:!1,navigationBar:!1,get indentation(){return g()},get escapeControlCharacters(){return C()},get escapeUnicodeCharacters(){return I()},get parser(){return d()},get parseMemoizeOne(){return B()},get onRenderValue(){return M()},get onRenderMenu(){return D()},get onRenderContextMenu(){return F()},onError:EA(()=>console.error),get onChange(){return pa},get onChangeMode(){return pa},get onSelect(){return pa},get onUndo(){return pa},get onRedo(){return pa},get onFocus(){return pa},get onBlur(){return pa},get onSortModal(){return pa},get onTransformModal(){return pa},get onJSONEditorModal(){return pa},get onClassName(){return _()},validator:void 0,get validationParser(){return E()},get pathParser(){return Q()}})};TA(Zi,L=>{c(oA)&&L(Qi)});var bi=bA(Ye,2),zi=bA(CA(bi),2),yt=L=>{KL(L,{get externalContent(){return c(mA)},externalSelection:void 0,get history(){return c($)},readOnly:!0,get truncateTextSize(){return l()},mainMenuBar:!1,navigationBar:!1,get indentation(){return g()},get escapeControlCharacters(){return C()},get escapeUnicodeCharacters(){return I()},get parser(){return d()},get parseMemoizeOne(){return B()},get onRenderValue(){return M()},get onRenderMenu(){return D()},get onRenderContextMenu(){return F()},onError:EA(()=>console.error),get onChange(){return pa},get onChangeMode(){return pa},get onSelect(){return pa},get onUndo(){return pa},get onRedo(){return pa},get onFocus(){return pa},get onBlur(){return pa},get onSortModal(){return pa},get onTransformModal(){return pa},get onJSONEditorModal(){return pa},get onClassName(){return _()},validator:void 0,get validationParser(){return E()},get pathParser(){return Q()}})},Xi=L=>{var ct=ZNA(),li=CA(ct);ve(()=>Rt(li,c(UA))),cA(L,ct)};TA(zi,L=>{c(UA)?L(Xi,!1):L(yt)});var _t=CA(bA(ze,2));Nr(()=>ue("click",_t,uA)),bs(_t,L=>ZA?.(L)),ve(L=>{AB(ei,L),AB(xA,c(hA)),_A=$t(et,1,"jse-data-contents svelte-lta8xm",null,_A,{"jse-hide-original-data":!c(oA)}),Et=$t(Ye,1,"jse-original-data svelte-lta8xm",null,Et,{"jse-hide":!c(oA)}),_t.disabled=!!c(UA)},[()=>(G(Vi),G(s()),G(vg),EA(()=>Vi(s())?"(document root)":vg(s())))]),ue("click",nA,XA),ue("input",xA,Ue),ue("click",gn,QA),cA(ht,Kt)},$$slots:{default:!0}}),bs(Ft,(ht,Ee)=>Ev?.(ht,Ee),()=>Me),cA(LA,Ft)},$$slots:{default:!0}}),xt()}function _l(){}var eFA=0,Qr=class{constructor(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.id=eFA++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=em.match(e)),A=>{var i=e(A);return i===void 0?null:[this,i]}}};Qr.closedBy=new Qr({deserialize:t=>t.split(" ")}),Qr.openedBy=new Qr({deserialize:t=>t.split(" ")}),Qr.group=new Qr({deserialize:t=>t.split(" ")}),Qr.isolate=new Qr({deserialize:t=>{if(t&&t!="rtl"&&t!="ltr"&&t!="auto")throw new RangeError("Invalid value for isolate: "+t);return t||"auto"}}),Qr.contextHash=new Qr({perNode:!0}),Qr.lookAhead=new Qr({perNode:!0}),Qr.mounted=new Qr({perNode:!0});var ViA,tFA=Object.create(null),em=class t{constructor(e,A,i){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;this.name=e,this.props=A,this.id=i,this.flags=n}static define(e){var A=e.props&&e.props.length?Object.create(null):tFA,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),n=new t(e.name||"",A,e.id,i);if(e.props){for(var o of e.props)if(Array.isArray(o)||(o=o(n)),o){if(o[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");A[o[0].id]=o[1]}}return n}prop(e){return this.props[e.id]}get isTop(){return(1&this.flags)>0}get isSkipped(){return(2&this.flags)>0}get isError(){return(4&this.flags)>0}get isAnonymous(){return(8&this.flags)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;var A=this.prop(Qr.group);return!!A&&A.indexOf(e)>-1}return this.id==e}static match(e){var A=Object.create(null);for(var i in e)for(var n of i.split(" "))A[n]=e[i];return o=>{for(var a=o.prop(Qr.group),r=-1;r<(a?a.length:0);r++){var s=A[r<0?o.name:a[r]];if(s)return s}}}};em.none=new em("",Object.create(null),0,8),(function(t){t[t.ExcludeBuffers=1]="ExcludeBuffers",t[t.IncludeAnonymous=2]="IncludeAnonymous",t[t.IgnoreMounts=4]="IgnoreMounts",t[t.IgnoreOverlays=8]="IgnoreOverlays"})(ViA||(ViA={})),new Qr({perNode:!0});qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-status-bar.svelte-1pmgv9j { + background: var(--jse-panel-background, #ebebeb); + color: var(--jse-panel-color-readonly, #b2b2b2); + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + margin: 0; + border-top: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); + display: flex; + gap: var(--jse-padding, 10px); +} +.jse-status-bar.svelte-1pmgv9j:last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-status-bar.svelte-1pmgv9j .jse-status-bar-info:where(.svelte-1pmgv9j) { + padding: 2px; +}`);var iFA=FA('
      '),nFA=FA('
      '),oFA=FA('
      '),aFA=FA('
      '),dG=_Q.define([{tag:Re.propertyName,color:"var(--internal-key-color)"},{tag:Re.number,color:"var(--internal-value-color-number)"},{tag:Re.bool,color:"var(--internal-value-color-boolean)"},{tag:Re.string,color:"var(--internal-value-color-string)"},{tag:Re.keyword,color:"var(--internal-value-color-null)"}]),rFA=JF(dG),sFA=dG.style;dG.style=t=>sFA(t||[]);var gFA=[_o.fromClass(class{constructor(t){this.view=t,this.indentUnit=Fc(t.state),this.initialPaddingLeft=null,this.isChrome=window?.navigator.userAgent.includes("Chrome"),this.generate(t.state)}update(t){var e=Fc(t.state);(e!==this.indentUnit||t.docChanged||t.viewportChanged)&&(this.indentUnit=e,this.generate(t.state))}generate(t){var e=new Wr;this.initialPaddingLeft?this.addStyleToBuilder(e,t,this.initialPaddingLeft):this.view.requestMeasure({read:A=>{var i=A.contentDOM.querySelector(".cm-line");i&&(this.initialPaddingLeft=window.getComputedStyle(i).getPropertyValue("padding-left"),this.addStyleToBuilder(e,A.state,this.initialPaddingLeft)),this.decorations=e.finish()}}),this.decorations=e.finish()}addStyleToBuilder(t,e,A){var i=this.getVisibleLines(e);for(var n of i){var{numColumns:o,containsTab:a}=this.numColumns(n.text,e.tabSize),r="calc(".concat(o+this.indentUnit,"ch + ").concat(A,")"),s=this.isChrome?"calc(-".concat(o+this.indentUnit,"ch - ").concat(a?1:0,"px)"):"-".concat(o+this.indentUnit,"ch");t.add(n.from,n.from,Dt.line({attributes:{style:"padding-left: ".concat(r,"; text-indent: ").concat(s,";")}}))}}getVisibleLines(t){var e=new Set,A=null;for(var{from:i,to:n}of this.view.visibleRanges)for(var o=i;o<=n;){var a=t.doc.lineAt(o);A!==a&&(e.add(a),A=a),o=a.to+1}return e}numColumns(t,e){var A=0,i=!1;A:for(var n=0;nt.decorations})];qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-text-mode.svelte-k2b9e6 { + --internal-key-color: var(--jse-key-color, #1a1a1a); + --internal-value-color-number: var(--jse-value-color-number, #ee422e); + --internal-value-color-boolean: var(--jse-value-color-boolean, #ff8c00); + --internal-value-color-string: var(--jse-value-color-string, #008000); + --internal-value-color-null: var(--jse-value-color-null, #004ed0); + flex: 1; + box-sizing: border-box; + display: flex; + flex-direction: column; + background: var(--jse-background-color, #fff); +} +.jse-text-mode.no-main-menu.svelte-k2b9e6 { + border-top: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) { + flex: 1; + display: flex; + position: relative; + flex-direction: column; + overflow: hidden; + min-width: 0; + min-height: 0; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6):last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents.jse-hidden:where(.svelte-k2b9e6) { + visibility: hidden; + position: absolute; + top: 0; + left: 0; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor { + flex: 1; + overflow: hidden; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-scroller { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + line-height: var(--jse-line-height, calc(1em + 4px)); + color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-gutters { + background: var(--jse-panel-background, #ebebeb); + color: var(--jse-panel-color-readonly, #b2b2b2); + border-right: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-activeLine, +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-activeLineGutter { + background: var(--jse-active-line-background-color, rgba(0, 0, 0, 0.06)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-selectionBackground { + background: var(--jse-selection-background-color, #d3d3d3); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-searchMatch { + background-color: var(--jse-search-match-color, #ffe665); + outline: var(--jse-search-match-outline, none); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-searchMatch.cm-searchMatch-selected { + background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); + outline: var(--jse-search-match-outline, 2px solid #e0be00); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-selectionMatch { + background-color: var(--jse-search-match-background-color, rgba(153, 255, 119, 0.5019607843)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-foldPlaceholder { + background: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); + color: var(--jse-tag-color, var(--jse-text-color-inverse, #fff)); + border: none; + padding: 0 var(--jse-padding, 10px); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-tooltip { + font-size: var(--jse-font-size, 16px); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + color: var(--jse-tooltip-color, var(--jse-text-color, #4d4d4d)); + background: var(--jse-tooltip-background, var(--jse-modal-background, #f5f5f5)); + border: var(--jse-tooltip-border, var(--jse-main-border, 1px solid #d7d7d7)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-diagnosticAction { + background: var(--jse-tooltip-action-button-color, var(--jse-text-color-inverse, #fff)); + background: var(--jse-tooltip-action-button-background, #4d4d4d); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-panels { + border-bottom: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search { + background: var(--jse-panel-background, #ebebeb); + color: var(--jse-panel-color, var(--jse-text-color, #4d4d4d)); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search input { + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size-text-mode-search, 80%); + color: var(--jse-input-color, var(--jse-text-color, #4d4d4d)); + border: var(--jse-input-border, 1px solid #d8dbdf); + background: var(--jse-input-background, var(--jse-background-color, #fff)); + margin-right: 2px; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button { + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size-text-mode-search, 80%); + color: var(--jse-panel-button-color, inherit); + background: var(--jse-panel-button-background, transparent); + border: none; + cursor: pointer; + text-transform: capitalize; + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); + margin: 0; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button:hover { + color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); + background: var(--jse-panel-button-background-highlight, #e0e0e0); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search label { + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size-text-mode-search, 80%); + padding-left: var(--jse-padding, 10px); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search label input { + margin-right: 2px; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button[name='close'] { + width: 32px; + height: 32px; + font-size: 24px; + line-height: 24px; + padding: 0; + right: 0; + top: -4px; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-cursor-primary { + border-color: var(--jse-text-color, #4d4d4d); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .jse-loading-space:where(.svelte-k2b9e6) { + flex: 1; +} +.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .jse-loading:where(.svelte-k2b9e6) { + flex: 2; + text-align: center; + color: var(--jse-panel-color-readonly, #b2b2b2); + box-sizing: border-box; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); +} +.jse-text-mode.svelte-k2b9e6 .jse-contents.jse-preview:where(.svelte-k2b9e6) { + flex: 1; + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: var(--jse-panel-color-readonly, #b2b2b2); + overflow: auto; + white-space: pre-wrap; + word-break: break-word; + padding: 2px; +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + background: var(--jse-background-color, #fff); + border-top: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); + border-bottom: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-tip:where(.svelte-k2b9e6) { + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size-mono, 14px); + color: var(--jse-panel-color-readonly, #b2b2b2); +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-progress-track:where(.svelte-k2b9e6) { + flex: 1; + height: 6px; + background: var(--jse-panel-background, #ebebeb); + border-radius: 3px; + overflow: hidden; + border: 1px solid var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-progress-fill:where(.svelte-k2b9e6) { + height: 100%; + background: linear-gradient(90deg, var(--jse-theme-color, #3883fa), var(--jse-theme-color-highlight, #5f9dff)); + border-radius: 2px; + transition: width 0.1s ease; + min-width: 2px; +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-cancel-button:where(.svelte-k2b9e6) { + padding: 4px 12px; + font-size: 12px; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + background: var(--jse-theme-color, #3883fa); + color: #fff; + border-radius: 3px; + cursor: pointer; + transition: background-color 0.2s ease; + flex-shrink: 0; + border: 1px solid var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-cancel-button:where(.svelte-k2b9e6):hover { + background: var(--jse-theme-color-highlight, #5f9dff); + color: #fff; +}`);var lFA=FA('
      Collapsing
      '),cFA=FA('
      ',1),CFA=FA(" ",1),IFA=FA("
      ",1),dFA=FA('
      loading...
      '),BFA=FA("
      ");function EFA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=N(e,"readOnly",9),o=N(e,"mainMenuBar",9),a=N(e,"statusBar",9),r=N(e,"askToFormat",9),s=N(e,"externalContent",9),g=N(e,"externalSelection",9),l=N(e,"history",9),C=N(e,"indentation",9),I=N(e,"tabSize",9),d=N(e,"escapeUnicodeCharacters",9),B=N(e,"parser",9),E=N(e,"validator",9),Q=N(e,"validationParser",9),f=N(e,"onChange",9),b=N(e,"onChangeMode",9),S=N(e,"onSelect",9),M=N(e,"onUndo",9),D=N(e,"onRedo",9),F=N(e,"onError",9),_=N(e,"onFocus",9),U=N(e,"onBlur",9),J=N(e,"onRenderMenu",9),j=N(e,"onSortModal",9),$=N(e,"onTransformModal",9),O=lr("jsoneditor:TextMode"),DA={key:"Mod-i",run:Qe,shift:xA,preventDefault:!0},P=typeof window>"u";O("isSSR:",P);var aA,iA=IA(void 0,!0),BA=IA(void 0,!0),oA=IA(void 0,!0),sA=IA(!1,!0),hA=IA(r(),!0),YA=IA([],!0),ee=IA(!1,!0),UA=IA(0,!0),mA=IA(0,!0),KA=null,Pe=new R0,Ue=new R0,HA=new R0,uA=new R0,XA=new R0,QA=s(),ZA=IA(hL(QA,C(),B()),!0),MA=hg.define(),Me=null;function LA(){if(!Me||Me.length===0)return!1;var vA=Me[0].startState,VA=Me[Me.length-1].state,me=Me.map(SA=>SA.changes).reduce((SA,oe)=>SA.compose(oe)),dA={type:"text",undo:{changes:me.invert(vA.doc).toJSON(),selection:ra(vA.selection)},redo:{changes:me.toJSON(),selection:ra(VA.selection)}};return O("add history item",dA),l().add(dA),Me=null,!0}var pA=IA(d(),!0);is(Yt(function*(){if(!P)try{aA=(function(vA){var{target:VA,initialText:me,readOnly:dA,indentation:SA}=vA;O("Create CodeMirror editor",{readOnly:dA,indentation:SA});var oe=(function(it,rt){return Z_(it)?it.ranges.every(bt=>bt.anchor{R(oA,it.state),it.docChanged&&(it.transactions.some(rt=>!!rt.annotation(MA))||(Me=[...Me??[],it]),Wo()),it.selectionSet&&Zo()}),itA(),ltA({top:!0}),ii.lineWrapping,Ue.of($a.readOnly.of(dA)),uA.of($a.tabSize.of(I())),HA.of(Mo(SA)),XA.of(ii.theme({},{dark:Xi()}))]});return aA=new ii({state:xe,parent:VA}),oe&&aA.dispatch(aA.state.update({selection:oe.main,scrollIntoView:!0})),aA})({target:c(iA),initialText:Do(c(ZA),c(sA))?"":c(A).escapeValue(c(ZA)),readOnly:n(),indentation:C()})}catch(vA){console.error(vA)}})),Yl(()=>{wo(),aA&&(O("Destroy CodeMirror editor"),aA.destroy()),ei()});var Ft=II(),ht=II();function Ee(){aA&&(O("focus"),aA.focus())}function Kt(vA,VA){if(aA)try{(function(){var me=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],dA=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],SA=aA.state,oe=SA.doc.length,xe=NF(SA,oe,1/0);if(xe){var it=[];if(me.length===0)it=ut(xe,SA,void 0,dA);else{var{from:rt}=T_(c(A).escapeValue(c(ZA)),me);rt!==void 0&&rt!==0&&(it=ut(xe,SA,rt,dA))}it.length>0&&(function(bt){ke.apply(this,arguments)})(it)}})(vA,VA)}catch(me){F()(me)}}function Je(){return LF.of((vA,VA,me)=>{var dA=NF(vA,vA.doc.length,1/0);if(!dA||dA.lengthme)){if(SA&&xe.from=VA&&rt.to>me&&(SA=rt)}}}return SA})}function ze(vA){var VA=vA.lastChild;return VA&&VA.to==vA.to&&VA.type.isError}function ut(vA,VA,me){var dA=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],SA=[],oe=new Set;return vA.iterate({enter(xe){if(me===void 0||xe.from>=me){var it=FQ(VA,xe.from,xe.to);if(it){var rt="".concat(it.from,"-").concat(it.to);if(!oe.has(rt))if(dA)SA.push({from:it.from,to:it.to}),oe.add(rt);else{var bt=SA.some(Kn=>Kn.from<=it.from&&Kn.to>=it.to);bt||(SA.push({from:it.from,to:it.to}),oe.add(rt))}}}}}),SA}function ke(){return ke=Yt(function*(vA){if(vA.length!==0){var VA=vA.length>5e3;VA&&(R(ee,!0),R(UA,0),R(mA,vA.length),KA=new AbortController);var me=dA=>new Promise(SA=>{var oe;VA&&(oe=KA)!==null&&oe!==void 0&&oe.signal.aborted?SA():requestAnimationFrame(()=>{var xe=Math.min(dA+100,vA.length),it=vA.slice(dA,xe);aA.dispatch({effects:it.map(rt=>GQ.of({from:rt.from,to:rt.to}))}),VA&&R(UA,xe),xe1&&arguments[1]!==void 0?arguments[1]:wL;if(aA)try{if(vA&&vA.length>0){var{from:me}=T_(c(A).escapeValue(c(ZA)),vA);me!==void 0&&(aA.dispatch({selection:{anchor:me,head:me}}),GF(aA))}else KF(aA);VA?.(vA)}catch(dA){F()(dA)}}function z(){Y([],()=>!0)}function nA(){Kt([],!0)}var rA=!1;function NA(vA){return Ie(vA,!1)}function Ie(vA,VA){O("handlePatch",vA,VA);var me=B().parse(c(ZA)),dA=lg(me,vA),SA=lw(me,vA);return li({text:B().stringify(dA,null,C())},VA,!1),{json:dA,previousJson:me,undo:SA,redo:vA}}function Qe(){if(O("format"),n())return!1;try{var vA=B().parse(c(ZA));return li({text:B().stringify(vA,null,C())},!0,!1),R(hA,r()),!0}catch(VA){F()(VA)}return!1}function xA(){if(O("compact"),n())return!1;try{var vA=B().parse(c(ZA));return li({text:B().stringify(vA)},!0,!1),R(hA,!1),!0}catch(VA){F()(VA)}return!1}function _A(){if(O("repair"),!n())try{li({text:ul(c(ZA))},!0,!1),R(re,q_),R(di,void 0)}catch(vA){F()(vA)}}function Et(){var vA;if(!n())try{var VA=B().parse(c(ZA));rA=!0,j()({id:Ft,json:VA,rootPath:[],onSort:(vA=Yt(function*(me){var{operations:dA}=me;O("onSort",dA),Ie(dA,!0)}),function(me){return vA.apply(this,arguments)}),onClose:()=>{rA=!1,Ee()}})}catch(me){F()(me)}}function et(vA){var{id:VA,rootPath:me,onTransform:dA,onClose:SA}=vA;try{var oe=B().parse(c(ZA));rA=!0,$()({id:VA||ht,json:oe,rootPath:me||[],onTransform:xe=>{dA?dA({operations:xe,json:oe,transformedJson:lg(oe,xe)}):(O("onTransform",xe),Ie(xe,!0))},onClose:()=>{rA=!1,Ee(),SA&&SA()}})}catch(xe){F()(xe)}}function Ye(){n()||et({rootPath:[]})}function Ge(){aA&&(c(iA)&&c(iA).querySelector(".cm-search")?By(aA):dy(aA))}function si(){if(n())return!1;wo();var vA=l().undo();return O("undo",vA),QiA(vA)?(aA.dispatch({annotations:MA.of("undo"),changes:Vr.fromJSON(vA.undo.changes),selection:de.fromJSON(vA.undo.selection),scrollIntoView:!0}),!0):(M()(vA),!1)}function gn(){if(n())return!1;wo();var vA=l().redo();return O("redo",vA),QiA(vA)?(aA.dispatch({annotations:MA.of("redo"),changes:Vr.fromJSON(vA.redo.changes),selection:de.fromJSON(vA.redo.selection),scrollIntoView:!0}),!0):(D()(vA),!1)}function dn(){R(sA,!0),li(s(),!0,!0)}function Le(){b()(Da.tree)}function Zi(){Uo()}function Qi(vA){O("select validation error",vA);var{from:VA,to:me}=_t(vA);VA!==void 0&&me!==void 0&&(bi(VA,me),Ee())}function bi(vA,VA){O("setSelection",{anchor:vA,head:VA}),aA&&aA.dispatch(aA.state.update({selection:{anchor:vA,head:VA},scrollIntoView:!0}))}function zi(vA,VA){if(VA.state.selection.ranges.length===1){var me=VA.state.selection.ranges[0],dA=c(ZA).slice(me.from,me.to);if(dA==="{"||dA==="["){var SA=UL.default.parse(c(ZA)),oe=Object.keys(SA.pointers).find(it=>{var rt;return((rt=SA.pointers[it].value)===null||rt===void 0?void 0:rt.pos)===me.from}),xe=SA.pointers[oe];oe&&xe&&xe.value&&xe.valueEnd&&(O("pointer found, selecting inner contents of path:",oe,xe),bi(xe.value.pos+1,xe.valueEnd.pos-1))}}}function yt(){return HeA(ln,{delay:300})}function Xi(){return!!c(iA)&&getComputedStyle(c(iA)).getPropertyValue("--jse-theme").includes("dark")}function _t(vA){var{path:VA,message:me,severity:dA}=vA,{line:SA,column:oe,from:xe,to:it}=T_(c(A).escapeValue(c(ZA)),VA);return{path:VA,line:SA,column:oe,from:xe,to:it,message:me,severity:dA,actions:[]}}function L(vA,VA){var{line:me,column:dA,position:SA,message:oe}=vA;return{path:[],line:me,column:dA,from:SA,to:SA,severity:Uc.error,message:oe,actions:VA&&!n()?[{name:"Auto repair",apply:()=>_A()}]:void 0}}function ct(vA){return{from:vA.from||0,to:vA.to||0,message:vA.message||"",actions:vA.actions,severity:vA.severity}}function li(vA,VA,me){var dA=hL(vA,C(),B()),SA=!Bi(vA,QA),oe=QA;O("setCodeMirrorContent",{isChanged:SA,emitChange:VA,forceUpdate:me}),aA&&(SA||me)&&(QA=vA,R(ZA,dA),Do(c(ZA),c(sA))||aA.dispatch({changes:{from:0,to:aA.state.doc.length,insert:c(A).escapeValue(c(ZA))}}),LA(),SA&&VA&&Qa(QA,oe))}function Bn(vA){return Z_(vA)?de.fromJSON(vA):void 0}function En(){return qn.apply(this,arguments)}function qn(){return qn=Yt(function*(){O("refresh"),yield(function(){return Co.apply(this,arguments)})()}),qn.apply(this,arguments)}function Uo(){if(aA){var vA=aA?c(A).unescapeValue(aA.state.doc.toString()):"",VA=vA!==c(ZA);if(O("onChangeCodeMirrorValue",{isChanged:VA}),VA){var me=QA;R(ZA,vA),QA={text:c(ZA)},LA(),Qa(QA,me),bo(),Zo()}}}function Co(){return(Co=Yt(function*(){if(bo(),aA){var vA=Xi();return O("updateTheme",{dark:vA}),aA.dispatch({effects:[XA.reconfigure(ii.theme({},{dark:vA}))]}),new Promise(VA=>setTimeout(VA))}return Promise.resolve()})).apply(this,arguments)}function Mo(vA){var VA=xd.of(typeof vA=="number"?" ".repeat(vA):vA);return vA===" "?[VA]:[VA,gFA]}cG({onMount:is,onDestroy:Yl,getWindow:()=>gm(c(BA)),hasFocus:()=>rA&&document.hasFocus()||WL(c(BA)),onFocus:_(),onBlur:()=>{wo(),U()()}});var Wo=qE(Uo,300);function wo(){Wo.flush()}function Qa(vA,VA){f()&&f()(vA,VA,{contentErrors:Qn(),patchResult:void 0})}function Zo(){S()(ra(c(oA).selection))}function ra(vA){return ye({type:no.text},vA.toJSON())}function Do(vA,VA){return!!vA&&vA.length>P_&&!VA}var re=IA(q_,!0),di=IA(void 0,!0);function ln(){if(Do(c(ZA),c(sA)))return[];var vA=Qn();if(EiA(vA)){var{parseError:VA,isRepairable:me}=vA;return[ct(L(VA,me))]}return LSA(vA)?vA.validationErrors.map(_t).map(ct):[]}function Qn(){O("validate:start"),wo();var vA=Jo(c(A).escapeValue(c(ZA)),E(),B(),Q());return EiA(vA)?(R(re,vA.isRepairable?ciA:"invalid"),R(di,vA.parseError),R(YA,[])):(R(re,q_),R(di,void 0),R(YA,vA?.validationErrors||[])),O("validate:end"),vA}var Jo=ZE(nRA);function ya(){c(di)&&(function(vA){O("select parse error",vA);var VA=L(vA,!1);bi(VA.from!=null?VA.from:0,VA.to!=null?VA.to:0),Ee()})(c(di))}var wi={icon:Zq,text:"Show me",title:"Move to the parse error location",onClick:ya};RA(()=>G(d()),()=>{R(A,qL({escapeControlCharacters:!1,escapeUnicodeCharacters:d()}))}),RA(()=>G(s()),()=>{li(s(),!1,!1)}),RA(()=>G(g()),()=>{(function(vA){if(Z_(vA)){var VA=Bn(vA);!aA||!VA||c(oA)&&c(oA).selection.eq(VA)||(O("applyExternalSelection",VA),aA.dispatch({selection:VA}))}})(g())}),RA(()=>G(E()),()=>{(function(vA){O("updateLinter",vA),aA&&aA.dispatch({effects:Pe.reconfigure(yt())})})(E())}),RA(()=>G(C()),()=>{(function(vA){aA&&(O("updateIndentation",vA),aA.dispatch({effects:HA.reconfigure(Mo(vA))}))})(C())}),RA(()=>G(I()),()=>{(function(vA){aA&&(O("updateTabSize",vA),aA.dispatch({effects:uA.reconfigure($a.tabSize.of(vA))}))})(I())}),RA(()=>G(n()),()=>{(function(vA){aA&&(O("updateReadOnly",vA),aA.dispatch({effects:[Ue.reconfigure($a.readOnly.of(vA))]}))})(n())}),RA(()=>(c(pA),G(d())),()=>{c(pA)!==d()&&(R(pA,d()),O("forceUpdateText",{escapeUnicodeCharacters:d()}),aA&&aA.dispatch({changes:{from:0,to:aA.state.doc.length,insert:c(A).escapeValue(c(ZA))}}))}),RA(()=>(c(re),G(n()),MC),()=>{R(i,c(re)!==ciA||n()?[wi]:[{icon:MC,text:"Auto repair",title:"Automatically repair JSON",onClick:_A},wi])}),kn();var Io={focus:Ee,collapse:Kt,expand:Y,patch:NA,handlePatch:Ie,openTransformModal:et,refresh:En,flush:wo,validate:Qn};Ai(!0);var tr,yo=BFA(),Pa=CA(yo),Gn=vA=>{var VA=tt(()=>(c(ZA),EA(()=>c(ZA).length===0))),me=tt(()=>!c(VA)),dA=tt(()=>!c(VA)),SA=tt(()=>!c(VA)),oe=tt(()=>!c(VA)),xe=tt(()=>!c(VA)),it=tt(()=>!c(VA));(function(rt,bt){St(bt,!1);var Kn=IA(void 0,!0),xi=N(bt,"readOnly",9,!1),Ji=N(bt,"onExpandAll",9),Vt=N(bt,"onCollapseAll",9),Ri=N(bt,"onFormat",9),va=N(bt,"onCompact",9),Lt=N(bt,"onSort",9),st=N(bt,"onTransform",9),Ni=N(bt,"onToggleSearch",9),Oi=N(bt,"onUndo",9),Vn=N(bt,"onRedo",9),hn=N(bt,"canExpandAll",9),Mt=N(bt,"canCollapseAll",9),sa=N(bt,"canUndo",9),Yo=N(bt,"canRedo",9),u=N(bt,"canFormat",9),y=N(bt,"canCompact",9),x=N(bt,"canSort",9),H=N(bt,"canTransform",9),k=N(bt,"onRenderMenu",9),T=IA(void 0,!0),tA=IA(void 0,!0),lA={type:"button",icon:r3,title:"Search (Ctrl+F)",className:"jse-search",onClick:Ni()},wA=IA(void 0,!0);RA(()=>(G(Ji()),G(hn())),()=>{R(T,{type:"button",icon:VoA,title:"Expand all",className:"jse-expand-all",onClick:Ji(),disabled:!hn()})}),RA(()=>(G(Vt()),G(Mt())),()=>{R(tA,{type:"button",icon:WoA,title:"Collapse all",className:"jse-collapse-all",onClick:Vt(),disabled:!Mt()})}),RA(()=>(G(xi()),c(T),c(tA),G(Ri()),G(u()),G(va()),G(y()),G(Lt()),G(x()),G(st()),G(H()),G(Oi()),G(sa()),G(Vn()),G(Yo())),()=>{R(wA,xi()?[c(T),c(tA),{type:"separator"},lA,{type:"space"}]:[c(T),c(tA),{type:"separator"},{type:"button",icon:PiA,title:"Format JSON: add proper indentation and new lines (Ctrl+I)",className:"jse-format",onClick:Ri(),disabled:xi()||!u()},{type:"button",icon:aNA,title:"Compact JSON: remove all white spacing and new lines (Ctrl+Shift+I)",className:"jse-compact",onClick:va(),disabled:xi()||!y()},{type:"separator"},{type:"button",icon:l3,title:"Sort",className:"jse-sort",onClick:Lt(),disabled:xi()||!x()},{type:"button",icon:a3,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:st(),disabled:xi()||!H()},lA,{type:"separator"},{type:"button",icon:Xw,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:Oi(),disabled:!sa()},{type:"button",icon:Zw,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:Vn(),disabled:!Yo()},{type:"space"}])}),RA(()=>(G(k()),c(wA)),()=>{R(Kn,k()(c(wA))||c(wA))}),kn(),Ai(!0),Sv(rt,{get items(){return c(Kn)}}),xt()})(vA,{get readOnly(){return n()},onExpandAll:z,onCollapseAll:nA,onFormat:Qe,onCompact:xA,onSort:Et,onTransform:Ye,onToggleSearch:Ge,onUndo:si,onRedo:gn,get canExpandAll(){return c(me)},get canCollapseAll(){return c(dA)},get canFormat(){return c(SA)},get canCompact(){return c(oe)},get canSort(){return c(xe)},get canTransform(){return c(it)},get canUndo(){return G(l()),EA(()=>l().canUndo)},get canRedo(){return G(l()),EA(()=>l().canRedo)},get onRenderMenu(){return J()}})};TA(Pa,vA=>{o()&&vA(Gn)});var Si=bA(Pa,2),Pt=vA=>{var VA=lFA(),me=bA(CA(VA),2),dA=CA(me),SA=bA(me,2);ve(()=>Ul(dA,"width: ".concat(c(mA)>0?c(UA)/c(mA)*100:0,"%"))),ue("click",SA,ei),cA(vA,VA)};TA(Si,vA=>{c(ee)&&vA(Pt)});var Sn=bA(Si,2),Bo=vA=>{var VA,me=tt(()=>(c(ZA),c(sA),EA(()=>Do(c(ZA),c(sA))))),dA=IFA(),SA=At(dA);Ko(SA,bt=>R(iA,bt),()=>c(iA));var oe=bA(SA,2),xe=bt=>{var Kn=cFA(),xi=At(Kn),Ji=tt(()=>(G(Vy),G(P_),c(ZA),EA(()=>"The JSON document is larger than ".concat(Vy(P_),", ")+"and may crash your browser when loading it in text mode. Actual size: ".concat(Vy(c(ZA).length),"."))));el(xi,{get icon(){return BI},type:"error",get message(){return c(Ji)},actions:[{text:"Open anyway",title:"Open the document in text mode. This may freeze or crash your browser.",onClick:dn},{text:"Open in tree mode",title:"Open the document in tree mode. Tree mode can handle large documents.",onClick:Le},{text:"Cancel",title:"Cancel opening this large document.",onClick:Zi}],onClose:Ee});var Vt=CA(bA(xi,2));ve(Ri=>Rt(Vt,Ri),[()=>(G(WC),c(ZA),G(iv),EA(()=>WC(c(ZA)||"",iv)))]),cA(bt,Kn)};TA(oe,bt=>{c(me)&&bt(xe)});var it=bA(oe,2),rt=bt=>{var Kn=CFA(),xi=At(Kn),Ji=st=>{(function(Ni,Oi){St(Oi,!1);var Vn=N(Oi,"editorState",8),hn=IA(),Mt=IA(),sa=IA(),Yo=IA(),u=IA();RA(()=>G(Vn()),()=>{var wA;R(hn,(wA=Vn())===null||wA===void 0||(wA=wA.selection)===null||wA===void 0||(wA=wA.main)===null||wA===void 0?void 0:wA.head)}),RA(()=>(c(hn),G(Vn())),()=>{var wA;R(Mt,c(hn)!==void 0?(wA=Vn())===null||wA===void 0||(wA=wA.doc)===null||wA===void 0?void 0:wA.lineAt(c(hn)):void 0)}),RA(()=>c(Mt),()=>{R(sa,c(Mt)!==void 0?c(Mt).number:void 0)}),RA(()=>(c(Mt),c(hn)),()=>{R(Yo,c(Mt)!==void 0&&c(hn)!==void 0?c(hn)-c(Mt).from+1:void 0)}),RA(()=>G(Vn()),()=>{var wA;R(u,(wA=Vn())===null||wA===void 0||(wA=wA.selection)===null||wA===void 0||(wA=wA.ranges)===null||wA===void 0?void 0:wA.reduce((Ae,ne)=>Ae+ne.to-ne.from,0))}),kn(),Ai();var y=aFA(),x=CA(y),H=wA=>{var Ae=iFA(),ne=CA(Ae);ve(()=>{var Be;return Rt(ne,"Line: ".concat((Be=c(sa))!==null&&Be!==void 0?Be:""))}),cA(wA,Ae)};TA(x,wA=>{c(sa)!==void 0&&wA(H)});var k=bA(x,2),T=wA=>{var Ae=nFA(),ne=CA(Ae);ve(()=>{var Be;return Rt(ne,"Column: ".concat((Be=c(Yo))!==null&&Be!==void 0?Be:""))}),cA(wA,Ae)};TA(k,wA=>{c(Yo)!==void 0&&wA(T)});var tA=bA(k,2),lA=wA=>{var Ae=oFA(),ne=CA(Ae);ve(()=>{var Be;return Rt(ne,"Selection: ".concat((Be=c(u))!==null&&Be!==void 0?Be:""," characters"))}),cA(wA,Ae)};TA(tA,wA=>{c(u)!==void 0&&c(u)>0&&wA(lA)}),cA(Ni,y),xt()})(st,{get editorState(){return c(oA)}})};TA(xi,st=>{a()&&st(Ji)});var Vt=bA(xi,2),Ri=st=>{el(st,{type:"error",get icon(){return BI},get message(){return c(di),EA(()=>c(di).message)},get actions(){return c(i)},onClick:ya,onClose:Ee})};TA(Vt,st=>{c(di)&&st(Ri)});var va=bA(Vt,2),Lt=st=>{var Ni=tt(()=>[{icon:PiA,text:"Format",title:"Format JSON: add proper indentation and new lines (Ctrl+I)",onClick:Qe},{icon:g3,text:"No thanks",title:"Close this message",onClick:()=>R(hA,!1)}]);el(st,{type:"success",message:"Do you want to format the JSON?",get actions(){return c(Ni)},onClose:Ee})};TA(va,st=>{c(di),c(hA),G(giA),c(ZA),EA(()=>!c(di)&&c(hA)&&giA(c(ZA)))&&st(Lt)}),CG(bA(va,2),{get validationErrors(){return c(YA)},selectError:Qi}),cA(bt,Kn)};TA(it,bt=>{c(me)||bt(rt)}),ve(()=>VA=$t(SA,1,"jse-contents svelte-k2b9e6",null,VA,{"jse-hidden":c(me)})),cA(vA,dA)},ko=vA=>{cA(vA,dFA())};return TA(Sn,vA=>{P?vA(ko,!1):vA(Bo)}),Ko(yo,vA=>R(BA,vA),()=>c(BA)),ve(()=>tr=$t(yo,1,"jse-text-mode svelte-k2b9e6",null,tr,{"no-main-menu":!o()})),cA(t,yo),Ot(e,"focus",Ee),Ot(e,"collapse",Kt),Ot(e,"expand",Y),Ot(e,"patch",NA),Ot(e,"handlePatch",Ie),Ot(e,"openTransformModal",et),Ot(e,"refresh",En),Ot(e,"flush",wo),Ot(e,"validate",Qn),xt(Io)}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-inline-value.svelte-1jv89ui { + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + line-height: var(--jse-line-height, calc(1em + 4px)); + border: none; + padding: 0 calc(0.5 * var(--jse-padding, 10px)); + background: transparent; + color: inherit; + cursor: inherit; +} +.jse-inline-value.jse-highlight.svelte-1jv89ui { + background-color: var(--jse-search-match-color, #ffe665); + outline: var(--jse-search-match-outline, none); +} +.jse-inline-value.jse-highlight.jse-active.svelte-1jv89ui { + background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); + outline: var(--jse-search-match-outline, 2px solid #e0be00); +}`);var QFA=FA('');qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-column-header.svelte-5pxwfq { + background: none; + border: none; + font-family: inherit; + font-size: inherit; + color: inherit; + display: flex; + gap: var(--jse-padding, 10px); + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); + width: 100%; +} +.jse-column-header.svelte-5pxwfq:hover { + background: var(--jse-table-header-background-highlight, #e8e8e8); +} +.jse-column-header.svelte-5pxwfq:not(.jse-column-header.jse-readonly) { + cursor: pointer; +} +.jse-column-header.svelte-5pxwfq span.jse-column-sort-icon:where(.svelte-5pxwfq) { + height: 1em; +}`);var hFA=FA(''),uFA=FA('');qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-table-mode-welcome.svelte-1b9gnk8 { + flex: 1; + display: flex; + flex-direction: column; + overflow: auto; + align-items: center; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-table-mode-welcome.svelte-1b9gnk8:last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-space.jse-before:where(.svelte-1b9gnk8) { + flex: 1; +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) { + display: flex; + flex-direction: column; + gap: var(--jse-padding, 10px); + max-width: 400px; + margin: 2em var(--jse-padding, 10px); + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-arrays-info:where(.svelte-1b9gnk8) { + color: var(--jse-panel-color-readonly, #b2b2b2); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) { + display: flex; + align-items: center; + gap: var(--jse-padding, 10px); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) .jse-nested-property-path:where(.svelte-1b9gnk8) { + flex: 1; +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) .jse-nested-property-path:where(.svelte-1b9gnk8) .jse-nested-property-count:where(.svelte-1b9gnk8) { + opacity: 0.5; + white-space: nowrap; +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8) { + text-align: left; + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +} +.jse-table-mode-welcome.svelte-1b9gnk8 .jse-space.jse-after:where(.svelte-1b9gnk8) { + flex: 2; +}`);var fFA=FA(`An empty document cannot be opened in table mode. You can go to tree mode instead, or paste + a JSON Array using Ctrl+V.`,1),mFA=FA(''),pFA=FA('
      '),wFA=FA('
      ');function DFA(t,e){St(e,!0);var A=Dg(()=>e.json?(function(E){var Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2,f=[];return(function b(S,M){ia(S)&&M.length{b(S[D],M.concat(D))}),jo(S)&&f.push(M)})(E,[]),f})(e.json).slice(0,99).filter(E=>E.length>0):[]),i=Dg(()=>!Vi(c(A))),n=Dg(()=>e.json===void 0&&(e.text===""||e.text===void 0)),o=Dg(()=>c(i)?"Object with nested arrays":c(n)?"An empty document":ia(e.json)?"An object":jo(e.json)?"An empty array":"A ".concat(jL(e.json,e.parser))),a=wFA();a.__click=()=>e.onClick();var r=bA(CA(a),2),s=CA(r),g=CA(s),l=bA(s,2),C=CA(l),I=E=>{cA(E,hr(`An object cannot be opened in table mode. You can open a nested array instead, or open the + document in tree mode.`))},d=E=>{var Q=vi(),f=At(Q),b=M=>{cA(M,fFA())},S=M=>{var D=hr();ve(()=>{var F;return Rt(D,"".concat((F=c(o))!==null&&F!==void 0?F:""," cannot be opened in table mode. You can open the document in tree mode instead."))}),cA(M,D)};TA(f,M=>{c(n)&&!e.readOnly?M(b):M(S,!1)},!0),cA(E,Q)};TA(C,E=>{c(i)?E(I):E(d,!1)});var B=bA(l,2);Ea(B,17,()=>c(A),Ra,(E,Q)=>{var f=Dg(()=>(function(j){return je(e.json,j).length})(c(Q))),b=pFA(),S=CA(b),M=CA(S),D=CA(bA(M)),F=bA(S,2);F.__click=()=>e.openJSONEditorModal(c(Q));var _=CA(F),U=bA(F,2),J=j=>{var $=mFA();$.__click=()=>e.extractPath(c(Q)),cA(j,$)};TA(U,j=>{e.readOnly||j(J)}),ve(j=>{var $;Rt(M,'"'.concat(j??"",'" ')),Rt(D,"(".concat(($=c(f))!==null&&$!==void 0?$:""," ").concat(c(f)!==1?"items":"item",")")),Rt(_,e.readOnly?"View":"Edit")},[()=>vg(c(Q))]),cA(E,b)}),bA(B,2).__click=()=>e.onChangeMode(Da.tree),ve(()=>Rt(g,c(o))),cA(t,a),xt()}am(["click"]);qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-column-header.svelte-1wgrwv3 { + background: none; + border: none; + font-family: inherit; + font-size: inherit; + color: inherit; + display: flex; + gap: var(--jse-padding, 10px); + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); + width: 100%; +} +.jse-column-header.svelte-1wgrwv3:hover { + background: var(--jse-table-header-background-highlight, #e8e8e8); +} +.jse-column-header.svelte-1wgrwv3:not(.jse-column-header.jse-readonly) { + cursor: pointer; +}`);var yFA=FA('');qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-table-mode.svelte-1p86y3c { + flex: 1; + display: flex; + flex-direction: column; + position: relative; + background: var(--jse-background-color, #fff); + min-width: 0; + min-height: 0; + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: var(--jse-text-color, #4d4d4d); + line-height: var(--jse-line-height, calc(1em + 4px)); +} +.jse-table-mode.no-main-menu.svelte-1p86y3c { + border-top: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-table-mode.svelte-1p86y3c .jse-search-box-container:where(.svelte-1p86y3c) { + position: relative; + height: 0; + top: calc(var(--jse-line-height, calc(1em + 4px)) + 2 * var(--jse-padding, 10px)); + margin-right: calc(var(--jse-padding, 10px) + 20px); + margin-left: var(--jse-padding, 10px); + text-align: right; + z-index: 3; +} +.jse-table-mode.svelte-1p86y3c .jse-hidden-input-label:where(.svelte-1p86y3c) { + position: fixed; + right: 0; + top: 0; + width: 0; + height: 0; +} +.jse-table-mode.svelte-1p86y3c .jse-hidden-input-label:where(.svelte-1p86y3c) .jse-hidden-input:where(.svelte-1p86y3c) { + width: 0; + height: 0; + padding: 0; + border: 0; + outline: none; +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) { + flex: 1; + align-items: flex-start; + flex-direction: column; + display: flex; + overflow: auto; + overflow-anchor: none; + scrollbar-gutter: stable; + border-left: var(--jse-main-border, 1px solid #d7d7d7); + border-right: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c):last-child { + border-bottom: var(--jse-main-border, 1px solid #d7d7d7); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) { + border-collapse: collapse; + border-spacing: 0; +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-start-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c), +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-end-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c) { + margin: 0; + padding: 0; +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-search-box-background:where(.svelte-1p86y3c) { + background: var(--jse-table-header-background, #f5f5f5); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-end-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c) { + padding-bottom: var(--jse-padding, 10px); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c):hover { + background-color: var(--jse-table-row-odd-background, rgba(0, 0, 0, 0.05)); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) { + padding: 0 var(--jse-padding, 10px) 0 0; + vertical-align: top; + white-space: nowrap; + height: var(--jse-line-height, calc(1em + 4px)); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c), .jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-gutter:where(.svelte-1p86y3c) { + font-weight: normal; + text-align: left; + color: var(--jse-text-readonly, #8d8d8d); + background: var(--jse-table-header-background, #f5f5f5); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c) { + padding: 0; + position: sticky; + top: 0; +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c) .jse-table-root-error:where(.svelte-1p86y3c) { + padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-gutter:where(.svelte-1p86y3c) { + padding: 0 var(--jse-padding, 10px) 0 calc(0.5 * var(--jse-padding, 10px)); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer:where(.svelte-1p86y3c) { + display: inline-block; + cursor: var(--jse-contents-cursor, pointer); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer:where(.svelte-1p86y3c):hover { + background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer.jse-selected-value:where(.svelte-1p86y3c) { + background: var(--jse-selection-background-color, #d3d3d3); +} +.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-context-menu-anchor:where(.svelte-1p86y3c) { + display: inline-flex; + position: relative; + vertical-align: top; +} +.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) { + align-items: unset; +} +.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) .jse-loading-space:where(.svelte-1p86y3c) { + flex: 1; +} +.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) .jse-loading:where(.svelte-1p86y3c) { + flex: 2; + text-align: center; + color: var(--jse-panel-color-readonly, #b2b2b2); + box-sizing: border-box; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); +}`);var vFA=FA('
      '),bFA=FA(''),MFA=FA(''),kFA=FA(' '),SFA=FA('
      '),xFA=FA('
      '),RFA=FA(''),NFA=FA(''),FFA=FA('
      ',1),_FA=FA(" ",1),LFA=FA(' ',1),GFA=FA('
      loading...
      '),KFA=FA('
      ',1);function UFA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=lr("jsoneditor:TableMode"),{openAbsolutePopup:a,closeAbsolutePopup:r}=r1("absolute-popup"),s=zoA(),g=II(),l=II(),C=typeof window>"u";o("isSSR:",C);var I=N(e,"readOnly",9),d=N(e,"externalContent",9),B=N(e,"externalSelection",9),E=N(e,"history",9),Q=N(e,"truncateTextSize",9),f=N(e,"mainMenuBar",9),b=N(e,"escapeControlCharacters",9),S=N(e,"escapeUnicodeCharacters",9),M=N(e,"flattenColumns",9),D=N(e,"parser",9),F=N(e,"parseMemoizeOne",9),_=N(e,"validator",9),U=N(e,"validationParser",9),J=N(e,"indentation",9),j=N(e,"onChange",9),$=N(e,"onChangeMode",9),O=N(e,"onSelect",9),DA=N(e,"onUndo",9),P=N(e,"onRedo",9),aA=N(e,"onRenderValue",9),iA=N(e,"onRenderMenu",9),BA=N(e,"onRenderContextMenu",9),oA=N(e,"onFocus",9),sA=N(e,"onBlur",9),hA=N(e,"onSortModal",9),YA=N(e,"onTransformModal",9),ee=N(e,"onJSONEditorModal",9),UA=IA(void 0,!0),mA=IA(void 0,!0),KA=IA(void 0,!0),Pe=IA(void 0,!0),Ue=IA(void 0,!0);cG({onMount:is,onDestroy:Yl,getWindow:()=>gm(c(mA)),hasFocus:()=>ke&&document.hasFocus()||WL(c(mA)),onFocus:()=>{ei=!0,oA()&&oA()()},onBlur:()=>{ei=!1,sA()&&sA()()}});var HA,uA=IA(void 0,!0),XA=IA(void 0,!0),QA=IA(void 0,!0),ZA=IA(void 0,!0),MA=IA(void 0,!0),Me=IA(void 0,!0),LA=IA(!1,!0),pA=IA(!1,!0);function Ft(k){R(Me,(HA=k)?xoA(c(uA),HA.items):void 0)}function ht(k){return Ee.apply(this,arguments)}function Ee(){return(Ee=Yt(function*(k){R(_A,void 0),yield En(k)})).apply(this,arguments)}function Kt(){R(LA,!1),R(pA,!1),L()}var Je=IA(1e4,!0),ze=IA([],!0),ut=IA(void 0,!0),ke=!1,ei=!1,Y=IA(!1,!0),z=IA({},!0),nA=IA(600,!0),rA=IA(0,!0),NA=18;function Ie(k){R(_A,k)}function Qe(k){c(_A)&&k!==void 0&&(br(k,jd(c(_A)))&&br(k,lt(c(_A)))||(o("clearing selection: path does not exist anymore",c(_A)),R(_A,void 0)))}var xA=IA(c(uA)!==void 0?pL({json:c(uA)}):void 0,!0),_A=IA(Vf(B())?B():void 0,!0),Et=IA(void 0,!0),et=IA(!1,!0);function Ye(k){if(!I()){o("onSortByHeader",k);var T=k.sortDirection===Ll.desc?-1:1;bi(ZoA(c(uA),[],k.path,T),(tA,lA)=>({state:lA,sortedColumn:k}))}}is(()=>{c(_A)&&Uo(lt(c(_A)))});var Ge=IA(void 0,!0);function si(k){if(k.json!==void 0||k.text!==void 0){var T=c(uA)!==void 0&&k.json!==void 0;E().add({type:"tree",undo:{patch:T?[{op:"replace",path:"",value:k.json}]:void 0,json:k.json,text:k.text,documentState:k.documentState,textIsRepaired:k.textIsRepaired,selection:T0(k.selection),sortedColumn:k.sortedColumn},redo:{patch:T?[{op:"replace",path:"",value:c(uA)}]:void 0,json:c(uA),text:c(XA),documentState:c(xA),textIsRepaired:c(et),selection:T0(c(_A)),sortedColumn:c(Et)}})}}var gn=IA([],!0),dn=ZE(OoA);function Le(k,T,tA,lA){oh(()=>{var wA;try{wA=dn(k,T,tA,lA)}catch(Ae){wA=[{path:[],message:"Failed to validate: "+Ae.message,severity:Uc.warning}]}Bi(wA,c(gn))||(o("validationErrors changed:",wA),R(gn,wA))},wA=>o("validationErrors updated in ".concat(wA," ms")))}function Zi(){return o("validate"),c(QA)?{parseError:c(QA),isRepairable:!1}:(Le(c(uA),_(),D(),U()),Vi(c(gn))?void 0:{validationErrors:c(gn)})}function Qi(k,T){if(o("patch",k,T),c(uA)===void 0)throw new Error("Cannot apply patch: no JSON");var tA=c(uA),lA={json:void 0,text:c(XA),documentState:c(xA),selection:T0(c(_A)),sortedColumn:c(Et),textIsRepaired:c(et)},wA=SoA(c(uA),k),Ae=hoA(c(uA),c(xA),k),ne=kNA(c(Et),k,c(ze)),Be=typeof T=="function"?T(Ae.json,Ae.documentState,c(_A)):void 0;return R(uA,Be?.json!==void 0?Be.json:Ae.json),R(xA,Be?.state!==void 0?Be.state:Ae.documentState),R(_A,Be?.selection!==void 0?Be.selection:c(_A)),R(Et,Be?.sortedColumn!==void 0?Be.sortedColumn:ne),R(XA,void 0),R(et,!1),R(ZA,void 0),R(MA,void 0),R(QA,void 0),E().add({type:"tree",undo:ye({patch:wA},lA),redo:{patch:k,json:void 0,text:void 0,documentState:c(xA),selection:T0(c(_A)),sortedColumn:c(Et),textIsRepaired:c(et)}}),{json:c(uA),previousJson:tA,undo:wA,redo:k}}function bi(k,T){o("handlePatch",k,T);var tA={json:c(uA),text:c(XA)},lA=Qi(k,T);return zi(tA,lA),lA}function zi(k,T){if((k.json!==void 0||k?.text!==void 0)&&j()){if(c(XA)!==void 0){var tA={text:c(XA),json:void 0};j()(tA,k,{contentErrors:Zi(),patchResult:T})}else if(c(uA)!==void 0){var lA={text:void 0,json:c(uA)};j()(lA,k,{contentErrors:Zi(),patchResult:T})}}}function yt(k){o("pasted json as text",k),R(ZA,k)}function Xi(k){o("pasted multiline text",{pastedText:k}),R(MA,k)}function _t(k){var T=parseInt(k[0],10),tA=[String(T+1),...k.slice(1)];return br(c(uA),tA)?Ui(tA):Ui(k)}function L(){o("focus"),c(Pe)&&(c(Pe).focus(),c(Pe).select())}function ct(k){R(rA,k.target.scrollTop)}function li(){c(_A)||R(_A,(function(){if(jo(c(uA))&&!Vi(c(uA))&&!Vi(c(ze)))return Ui(["0",...c(ze)[0]])})())}function Bn(){if(c(et)&&c(uA)!==void 0){var k={json:c(uA),text:c(XA)},T={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(XA),textIsRepaired:c(et)};R(XA,void 0),R(et,!1),Qe(c(uA)),si(T),zi(k,void 0)}return{json:c(uA),text:c(XA)}}function En(k){var{scrollToWhenVisible:T=!0}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},tA=c(LA)?Gf:0,lA=qiA(k,c(ze),z,NA),wA=lA-c(rA)+tA+NA,Ae=Co(k);if(o("scrollTo",{path:k,top:lA,scrollTop:c(rA),elem:Ae}),!c(KA))return Promise.resolve();var ne=c(KA).getBoundingClientRect();if(Ae&&!T){var Be=Ae.getBoundingClientRect();if(Be.bottom>ne.top&&Be.top{s(Ae,{container:c(KA),offset:Te,duration:300,callback:()=>{qn(k),Se()}})}:Se=>{s(wA,{container:c(KA),offset:Te,duration:300,callback:()=>{bo(),qn(k),Se()}})})}function qn(k){var T=Co(k);if(T&&c(KA)){var tA=c(KA).getBoundingClientRect(),lA=T.getBoundingClientRect();if(lA.right>tA.right){var wA=lA.right-tA.right;Xg(KA,c(KA).scrollLeft+=wA)}if(lA.leftTe){var Se=wA-Te;Xg(KA,c(KA).scrollTop+=Se)}if(lAq0(k.slice(1),Ae)),wA=lA?k.slice(0,1).concat(lA):k;return(T=(tA=c(KA))===null||tA===void 0?void 0:tA.querySelector('td[data-path="'.concat(jy(wA),'"]')))!==null&&T!==void 0?T:void 0}function Mo(k){var T,{anchor:tA,left:lA,top:wA,width:Ae,height:ne,offsetTop:Be,offsetLeft:Te,showTip:Se}=k,Ne=(function(fA){var{json:PA,documentState:Fe,selection:pe,readOnly:De,onEditValue:ot,onEditRow:jt,onToggleEnforceString:Mi,onCut:xn,onCopy:Pi,onPaste:Eo,onRemove:Wt,onDuplicateRow:Xo,onInsertBeforeRow:Wn,onInsertAfterRow:$o,onRemoveRow:un}=fA,Gt=PA!==void 0,$i=!!pe,Zt=PA!==void 0&&pe?je(PA,lt(pe)):void 0,pt=Gt&&(lo(pe)||gr(pe)||In(pe)),gi=!De&&Gt&&pe!==void 0&&av(pe),ga=gi&&!aa(Zt),Zn=!De&&pt,Aa=pe!==void 0&&z0(PA,Fe,lt(pe));return[{type:"separator"},{type:"row",items:[{type:"column",items:[{type:"label",text:"Table cell:"},{type:"dropdown-button",main:{type:"button",onClick:()=>ot(),icon:nd,text:"Edit",title:"Edit the value (Double-click on the value)",disabled:!gi},width:"11em",items:[{type:"button",icon:nd,text:"Edit",title:"Edit the value (Double-click on the value)",onClick:()=>ot(),disabled:!gi},{type:"button",icon:Aa?RS:_S,text:"Enforce string",title:"Enforce keeping the value as string when it contains a numeric value",onClick:()=>Mi(),disabled:!ga}]},{type:"dropdown-button",main:{type:"button",onClick:()=>xn(!0),icon:od,text:"Cut",title:"Cut selected contents, formatted with indentation (Ctrl+X)",disabled:!Zn},width:"10em",items:[{type:"button",icon:od,text:"Cut formatted",title:"Cut selected contents, formatted with indentation (Ctrl+X)",onClick:()=>xn(!0),disabled:De||!pt},{type:"button",icon:od,text:"Cut compacted",title:"Cut selected contents, without indentation (Ctrl+Shift+X)",onClick:()=>xn(!1),disabled:De||!pt}]},{type:"dropdown-button",main:{type:"button",onClick:()=>Pi(!0),icon:kC,text:"Copy",title:"Copy selected contents, formatted with indentation (Ctrl+C)",disabled:!pt},width:"12em",items:[{type:"button",icon:kC,text:"Copy formatted",title:"Copy selected contents, formatted with indentation (Ctrl+C)",onClick:()=>Pi(!1),disabled:!pt},{type:"button",icon:kC,text:"Copy compacted",title:"Copy selected contents, without indentation (Ctrl+Shift+C)",onClick:()=>Pi(!1),disabled:!pt}]},{type:"button",onClick:()=>Eo(),icon:kS,text:"Paste",title:"Paste clipboard contents (Ctrl+V)",disabled:De||!$i},{type:"button",onClick:()=>Wt(),icon:Vw,text:"Remove",title:"Remove selected contents (Delete)",disabled:De||!pt}]},{type:"column",items:[{type:"label",text:"Table row:"},{type:"button",onClick:()=>jt(),icon:nd,text:"Edit row",title:"Edit the current row",disabled:De||!$i||!Gt},{type:"button",onClick:()=>Xo(),icon:xS,text:"Duplicate row",title:"Duplicate the current row (Ctrl+D)",disabled:De||!$i||!Gt},{type:"button",onClick:()=>Wn(),icon:ad,text:"Insert before",title:"Insert a row before the current row",disabled:De||!$i||!Gt},{type:"button",onClick:()=>$o(),icon:ad,text:"Insert after",title:"Insert a row after the current row",disabled:De||!$i||!Gt},{type:"button",onClick:()=>un(),icon:Vw,text:"Remove row",title:"Remove current row",disabled:De||!$i||!Gt}]}]}]})({json:c(uA),documentState:c(xA),selection:c(_A),readOnly:I(),onEditValue:Qa,onEditRow:Zo,onToggleEnforceString:ra,onCut:tr,onCopy:Pa,onPaste:di,onRemove:Si,onDuplicateRow:Sn,onInsertBeforeRow:Bo,onInsertAfterRow:ko,onRemoveRow:vA}),ni=(T=BA()(Ne))!==null&&T!==void 0?T:Ne;if(ni!==!1){var Un={left:lA,top:wA,offsetTop:Be,offsetLeft:Te,width:Ae,height:ne,anchor:tA,closeOnOuterClick:!0,onClose:()=>{ke=!1,L()}};ke=!0;var q=a(raA,{tip:Se?"Tip: you can open this context menu via right-click or with Ctrl+Q":void 0,items:ni,onRequestClose(){r(q),L()}},Un)}}function Wo(k){if(!rr(c(_A)))if(k&&(k.stopPropagation(),k.preventDefault()),k&&k.type==="contextmenu"&&k.target!==c(Pe))Mo({left:k.clientX,top:k.clientY,width:XC,height:ZC,showTip:!1});else{var T,tA=(T=c(KA))===null||T===void 0?void 0:T.querySelector(".jse-table-cell.jse-selected-value");if(tA)Mo({anchor:tA,offsetTop:2,width:XC,height:ZC,showTip:!1});else{var lA,wA=(lA=c(KA))===null||lA===void 0?void 0:lA.getBoundingClientRect();wA&&Mo({top:wA.top+2,left:wA.left+2,width:XC,height:ZC,showTip:!1})}}}function wo(k){Mo({anchor:IoA(k.target,"BUTTON"),offsetTop:0,width:XC,height:ZC,showTip:!0})}function Qa(){if(!I()&&c(_A)){var k=lt(c(_A));aa(je(c(uA),k))?rt(k):R(_A,Ui(k))}}function Zo(){!I()&&c(_A)&&rt(lt(c(_A)).slice(0,1))}function ra(){if(!I()&&In(c(_A))){var k=c(_A).path,T=wt(k),tA=je(c(uA),k),lA=!z0(c(uA),c(xA),k),wA=lA?String(tA):Rh(String(tA),D());o("handleToggleEnforceString",{enforceString:lA,value:tA,updatedValue:wA}),bi([{op:"replace",path:T,value:wA}],(Ae,ne)=>({state:Dv(c(uA),ne,k,{type:"value",enforceString:lA})}))}}function Do(){return re.apply(this,arguments)}function re(){return(re=Yt(function*(){if(o("apply pasted json",c(ZA)),c(ZA)){var{onPasteAsJson:k}=c(ZA);k(),setTimeout(L)}})).apply(this,arguments)}function di(){return ln.apply(this,arguments)}function ln(){return(ln=Yt(function*(){try{dA(yield navigator.clipboard.readText())}catch(k){console.error(k),R(Y,!0)}})).apply(this,arguments)}function Qn(){return Jo.apply(this,arguments)}function Jo(){return(Jo=Yt(function*(){o("apply pasted multiline text",c(MA)),c(MA)&&(dA(JSON.stringify(c(MA))),setTimeout(L))})).apply(this,arguments)}function ya(){o("clear pasted json"),R(ZA,void 0),L()}function wi(){o("clear pasted multiline text"),R(MA,void 0),L()}function Io(){$()(Da.text)}function tr(k){return yo.apply(this,arguments)}function yo(){return(yo=Yt(function*(k){yield eaA({json:c(uA),selection:c(_A),indentation:k?J():void 0,readOnly:I(),parser:D(),onPatch:bi})})).apply(this,arguments)}function Pa(){return Gn.apply(this,arguments)}function Gn(){return Gn=Yt(function*(){var k=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];c(uA)!==void 0&&(yield taA({json:c(uA),selection:c(_A),indentation:k?J():void 0,parser:D()}))}),Gn.apply(this,arguments)}function Si(){naA({json:c(uA),text:c(XA),selection:c(_A),keepSelection:!0,readOnly:I(),onChange:j(),onPatch:bi})}function Pt(k){I()||(o("extract",{path:k}),bi(boA(c(uA),Ui(k))))}function Sn(){(function(k){var{json:T,selection:tA,columns:lA,readOnly:wA,onPatch:Ae}=k;if(!wA&&T!==void 0&&tA&&ih(tA)){var{rowIndex:ne,columnIndex:Be}=Fl(lt(tA),lA);vs("duplicate row",{rowIndex:ne});var Te=[String(ne)];Ae(voA(T,[Te]),(Se,Ne)=>({state:Ne,selection:Ui(Kd({rowIndex:ne({state:Un,selection:Ui(Kd({rowIndex:Te,columnIndex:Be},lA))}))}})({json:c(uA),selection:c(_A),columns:c(ze),readOnly:I(),onPatch:bi})}function vA(){(function(k){var{json:T,selection:tA,columns:lA,readOnly:wA,onPatch:Ae}=k;if(!wA&&T!==void 0&&tA&&ih(tA)){var{rowIndex:ne,columnIndex:Be}=Fl(lt(tA),lA);vs("remove row",{rowIndex:ne}),Ae(sv([[String(ne)]]),(Te,Se)=>{var Ne=ne0?ne-1:void 0,ni=Ne!==void 0?Ui(Kd({rowIndex:Ne,columnIndex:Be},lA)):void 0;return vs("remove row new selection",{rowIndex:ne,newRowIndex:Ne,newSelection:ni}),{state:Se,selection:ni}})}})({json:c(uA),selection:c(_A),columns:c(ze),readOnly:I(),onPatch:bi})}function VA(){return(VA=Yt(function*(k){yield oaA({char:k,selectInside:!1,json:c(uA),selection:c(_A),readOnly:I(),parser:D(),onPatch:bi,onReplaceJson:SA,onSelect:Ie})})).apply(this,arguments)}function me(k){var T;k.preventDefault(),dA((T=k.clipboardData)===null||T===void 0?void 0:T.getData("text/plain"))}function dA(k){k!==void 0&&iaA({clipboardText:k,json:c(uA),selection:c(_A),readOnly:I(),parser:D(),onPatch:bi,onChangeText:oe,onPasteMultilineText:Xi,openRepairModal:bt})}function SA(k,T){var tA={json:c(uA),text:c(XA)},lA={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(XA),textIsRepaired:c(et)},wA=Zg(k,c(xA)),Ae=typeof T=="function"?T(k,wA,c(_A)):void 0;R(uA,Ae?.json!==void 0?Ae.json:k),R(xA,Ae?.state!==void 0?Ae.state:wA),R(_A,Ae?.selection!==void 0?Ae.selection:c(_A)),R(Et,void 0),R(XA,void 0),R(et,!1),R(QA,void 0),Qe(c(uA)),si(lA),zi(tA,void 0)}function oe(k,T){o("handleChangeText");var tA={json:c(uA),text:c(XA)},lA={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(XA),textIsRepaired:c(et)};try{R(uA,F()(k)),R(xA,Zg(c(uA),c(xA))),R(XA,void 0),R(et,!1),R(QA,void 0)}catch(Ae){try{R(uA,F()(ul(k))),R(xA,Zg(c(uA),c(xA))),R(XA,k),R(et,!0),R(QA,void 0)}catch{R(uA,void 0),R(xA,void 0),R(XA,k),R(et,!1),R(QA,c(XA)!==""?uh(c(XA),Ae.message||String(Ae)):void 0)}}if(typeof T=="function"){var wA=T(c(uA),c(xA),c(_A));R(uA,wA?.json!==void 0?wA.json:c(uA)),R(xA,wA?.state!==void 0?wA.state:c(xA)),R(_A,wA?.selection!==void 0?wA.selection:c(_A))}Qe(c(uA)),si(lA),zi(tA,void 0)}function xe(k){o("select validation error",k),R(_A,Ui(k.path)),En(k.path)}function it(k){if(c(uA)!==void 0){var{id:T,onTransform:tA,onClose:lA}=k,wA=k.rootPath||[];ke=!0,YA()({id:T||l,json:c(uA),rootPath:wA||[],onTransform:Ae=>{tA?tA({operations:Ae,json:c(uA),transformedJson:lg(c(uA),Ae)}):(o("onTransform",wA,Ae),bi(Ae))},onClose:()=>{ke=!1,setTimeout(L),lA&&lA()}})}}function rt(k){o("openJSONEditorModal",{path:k}),ke=!0,ee()({content:{json:je(c(uA),k)},path:k,onPatch:bi,onClose:()=>{ke=!1,setTimeout(L)}})}function bt(k,T){R(Ue,{text:k,onParse:tA=>sm(tA,lA=>rm(lA,D())),onRepair:noA,onApply:T,onClose:L})}function Kn(){(function(k){I()||c(uA)===void 0||(ke=!0,hA()({id:g,json:c(uA),rootPath:k,onSort:T=>{var{operations:tA,itemPath:lA,direction:wA}=T;o("onSort",tA,k,lA,wA),bi(tA,(Ae,ne)=>({state:ne,sortedColumn:{path:lA,sortDirection:wA===-1?Ll.desc:Ll.asc}}))},onClose:()=>{ke=!1,setTimeout(L)}}))})([])}function xi(){it({rootPath:[]})}function Ji(k){o("openFind",{findAndReplace:k}),R(LA,!1),R(pA,!1),bo(),R(LA,!0),R(pA,k)}function Vt(){if(!I()&&E().canUndo){var k=E().undo();if(ov(k)){var T={json:c(uA),text:c(XA)};R(uA,k.undo.patch?lg(c(uA),k.undo.patch):k.undo.json),R(xA,k.undo.documentState),R(_A,k.undo.selection),R(Et,k.undo.sortedColumn),R(XA,k.undo.text),R(et,k.undo.textIsRepaired),R(QA,void 0),o("undo",{item:k,json:c(uA)}),zi(T,k.undo.patch&&k.redo.patch?{json:c(uA),previousJson:T.json,redo:k.undo.patch,undo:k.redo.patch}:void 0),L(),c(_A)&&En(lt(c(_A)),{scrollToWhenVisible:!1})}else DA()(k)}}function Ri(){if(!I()&&E().canRedo){var k=E().redo();if(ov(k)){var T={json:c(uA),text:c(XA)};R(uA,k.redo.patch?lg(c(uA),k.redo.patch):k.redo.json),R(xA,k.redo.documentState),R(_A,k.redo.selection),R(Et,k.redo.sortedColumn),R(XA,k.redo.text),R(et,k.redo.textIsRepaired),R(QA,void 0),o("redo",{item:k,json:c(uA)}),zi(T,k.undo.patch&&k.redo.patch?{json:c(uA),previousJson:T.json,redo:k.redo.patch,undo:k.undo.patch}:void 0),L(),c(_A)&&En(lt(c(_A)),{scrollToWhenVisible:!1})}else P()(k)}}function va(k){R(nA,k.getBoundingClientRect().height)}RA(()=>(G(b()),G(S())),()=>{R(UA,qL({escapeControlCharacters:b(),escapeUnicodeCharacters:S()}))}),RA(()=>c(LA),()=>{(function(k){if(c(KA)){var T=k?Gf:-100;c(KA).scrollTo({top:Xg(KA,c(KA).scrollTop+=T),left:c(KA).scrollLeft})}})(c(LA))}),RA(()=>G(d()),()=>{(function(k){var T={json:c(uA)},tA=zf(k)?k.text!==c(XA):!Bi(T.json,k.json);if(o("update external content",{isChanged:tA}),tA){var lA={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(XA),textIsRepaired:c(et)};if(zf(k))try{R(uA,F()(k.text)),R(xA,Zg(c(uA),c(xA))),R(XA,k.text),R(et,!1),R(QA,void 0)}catch(wA){try{R(uA,F()(ul(k.text))),R(xA,Zg(c(uA),c(xA))),R(XA,k.text),R(et,!0),R(QA,void 0)}catch{R(uA,void 0),R(xA,void 0),R(XA,k.text),R(et,!1),R(QA,c(XA)!==""?uh(c(XA),wA.message||String(wA)):void 0)}}else R(uA,k.json),R(xA,Zg(c(uA),c(xA))),R(XA,void 0),R(et,!1),R(QA,void 0);Qe(c(uA)),R(Et,void 0),si(lA)}})(d())}),RA(()=>G(B()),()=>{(function(k){Bi(c(_A),k)||(o("applyExternalSelection",{selection:c(_A),externalSelection:k}),Vf(k)&&R(_A,k))})(B())}),RA(()=>(c(ze),c(uA),G(M()),c(Je)),()=>{R(ze,jo(c(uA))?(function(k,T){var tA=new Set(T.map(wt)),lA=new Set(k.map(wt));for(var wA of tA)lA.has(wA)||tA.delete(wA);for(var Ae of lA)tA.has(Ae)||tA.add(Ae);return[...tA].map(hs)})(yNA(c(uA),M(),c(Je)),c(ze)):[])}),RA(()=>(c(uA),c(ze)),()=>{R(ut,!(!c(uA)||Vi(c(ze))))}),RA(()=>(c(uA),c(Je)),()=>{R(A,Array.isArray(c(uA))&&c(uA).length>c(Je))}),RA(()=>(c(rA),c(nA),c(uA),c(LA),Gf),()=>{R(i,vNA(c(rA),c(nA),c(uA),z,NA,c(LA)?Gf:0))}),RA(()=>c(uA),()=>{c(uA),c(KA)&&c(KA).scrollTo({top:c(KA).scrollTop,left:c(KA).scrollLeft})}),RA(()=>c(_A),()=>{var k;k=c(_A),Bi(k,B())||(o("onSelect",k),O()(k))}),RA(()=>(G(I()),G(Q()),G(D()),c(UA),c(uA),c(xA),G(aA())),()=>{R(Ge,{mode:Da.table,readOnly:I(),truncateTextSize:Q(),parser:D(),normalization:c(UA),getJson:()=>c(uA),getDocumentState:()=>c(xA),findElement:Co,findNextInside:_t,focus:L,onPatch:(k,T)=>bi((function(tA,lA){return tA.flatMap(wA=>{if(sw(wA)){var Ae=hs(wA.path);if(Ae.length>0){for(var ne=[wA],Be=Ki(Ae);Be.length>0&&!br(lA,Be);)ne.unshift({op:"add",path:wt(Be),value:{}}),Be=Ki(Be);return ne}}return wA})})(k,c(uA)),T),onSelect:Ie,onFind:Ji,onPasteJson:yt,onRenderValue:aA()})}),RA(()=>(c(uA),G(_()),G(D()),G(U())),()=>{Le(c(uA),_(),D(),U())}),RA(()=>(c(gn),c(ze)),()=>{R(n,bNA(c(gn),c(ze)))}),kn();var Lt={validate:Zi,patch:Qi,focus:L,acceptAutoRepair:Bn,scrollTo:En,findElement:Co,openTransformModal:it};Ai(!0);var st=KFA();ue("mousedown",e2,function(k){!Nh(k.target,T=>T===c(mA))&&rr(c(_A))&&(o("click outside the editor, exit edit mode"),R(_A,T0(c(_A))),ei&&c(Pe)&&(c(Pe).focus(),c(Pe).blur()),o("blur (outside editor)"),c(Pe)&&c(Pe).blur())});var Ni,Oi=At(st),Vn=CA(Oi),hn=k=>{(function(T,tA){St(tA,!1);var lA=N(tA,"containsValidArray",9),wA=N(tA,"readOnly",9),Ae=N(tA,"showSearch",13,!1),ne=N(tA,"history",9),Be=N(tA,"onSort",9),Te=N(tA,"onTransform",9),Se=N(tA,"onContextMenu",9),Ne=N(tA,"onUndo",9),ni=N(tA,"onRedo",9),Un=N(tA,"onRenderMenu",9);function q(){Ae(!Ae())}var fA=IA(void 0,!0),PA=IA(void 0,!0);RA(()=>(G(wA()),G(Be()),G(lA()),G(Te()),G(Se()),G(Ne()),G(ne()),G(ni())),()=>{R(fA,wA()?[{type:"space"}]:[{type:"button",icon:l3,title:"Sort",className:"jse-sort",onClick:Be(),disabled:wA()||!lA()},{type:"button",icon:a3,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:Te(),disabled:wA()||!lA()},{type:"button",icon:r3,title:"Search (Ctrl+F)",className:"jse-search",onClick:q,disabled:!lA()},{type:"button",icon:SS,title:$L,className:"jse-contextmenu",onClick:Se()},{type:"separator"},{type:"button",icon:Xw,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:Ne(),disabled:!ne().canUndo},{type:"button",icon:Zw,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:ni(),disabled:!ne().canRedo},{type:"space"}])}),RA(()=>(G(Un()),c(fA)),()=>{R(PA,Un()(c(fA))||c(fA))}),kn(),Ai(!0),Sv(T,{get items(){return c(PA)}}),xt()})(k,{get containsValidArray(){return c(ut)},get readOnly(){return I()},get history(){return E()},onSort:Kn,onTransform:xi,onUndo:Vt,onRedo:Ri,onContextMenu:wo,get onRenderMenu(){return iA()},get showSearch(){return c(LA)},set showSearch(T){R(LA,T)},$$legacy:!0})};TA(Vn,k=>{f()&&k(hn)});var Mt=bA(Vn,2),sa=k=>{var T=LFA(),tA=At(T),lA=CA(tA);lA.readOnly=!0,Ko(lA,Be=>R(Pe,Be),()=>c(Pe));var wA=bA(tA,2),Ae=Be=>{var Te=FFA(),Se=At(Te);XoA(CA(Se),{get json(){return c(uA)},get documentState(){return c(xA)},get parser(){return D()},get showSearch(){return c(LA)},get showReplace(){return c(pA)},get readOnly(){return I()},get columns(){return c(ze)},onSearch:Ft,onFocus:ht,onPatch:bi,onClose:Kt});var Ne=bA(Se,2),ni=CA(Ne),Un=CA(ni),q=CA(Un),fA=CA(q),PA=CA(fA),Fe=pt=>{var gi=tt(()=>(G(VQ),c(n),EA(()=>{var ha;return VQ([],(ha=c(n))===null||ha===void 0?void 0:ha.root)}))),ga=vi(),Zn=At(ga),Aa=ha=>{var fr=vFA();Ch(CA(fr),{get validationError(){return c(gi)},get onExpand(){return _l}}),cA(ha,fr)};TA(Zn,ha=>{c(gi)&&ha(Aa)}),cA(pt,ga)};TA(PA,pt=>{G(Vi),c(n),EA(()=>{var gi;return!Vi((gi=c(n))===null||gi===void 0?void 0:gi.root)})&&pt(Fe)});var pe=bA(fA);Ea(pe,1,()=>c(ze),Ra,(pt,gi)=>{var ga=bFA();(function(Zn,Aa){St(Aa,!1);var ha=IA(void 0,!0),fr=IA(void 0,!0),AC=IA(void 0,!0),xg=N(Aa,"path",9),zl=N(Aa,"sortedColumn",9),$c=N(Aa,"readOnly",9),Ol=N(Aa,"onSort",9);RA(()=>(G(xg()),vg),()=>{R(ha,Vi(xg())?"values":vg(xg()))}),RA(()=>(G(zl()),G(xg())),()=>{var Na;R(fr,zl()&&Bi(xg(),(Na=zl())===null||Na===void 0?void 0:Na.path)?zl().sortDirection:void 0)}),RA(()=>(c(fr),CiA),()=>{R(AC,c(fr)?CiA[c(fr)]:void 0)}),kn(),Ai(!0);var os,mr=uFA(),Rg=CA(mr),eC=CA(Rg),Ng=bA(Rg,2),Rn=Na=>{var Fa=hFA(),Q1=CA(Fa),QB=tt(()=>(c(fr),G(Ll),G(v0),G(FS),EA(()=>c(fr)===Ll.asc?v0:FS)));Wi(Q1,{get data(){return c(QB)}}),ve(()=>Mn(Fa,"title","Currently sorted in ".concat(c(AC)," order"))),cA(Na,Fa)};TA(Ng,Na=>{c(fr)!==void 0&&Na(Rn)}),ve(Na=>{os=$t(mr,1,"jse-column-header svelte-5pxwfq",null,os,{"jse-readonly":$c()}),Mn(mr,"title",$c()?c(ha):c(ha)+" (Click to sort the data by this column)"),Rt(eC,Na)},[()=>(G(WC),c(ha),G(50),EA(()=>WC(c(ha),50)))]),ue("click",mr,function(){$c()||Ol()({path:xg(),sortDirection:c(fr)===Ll.asc?Ll.desc:Ll.asc})}),cA(Zn,mr),xt()})(CA(ga),{get path(){return c(gi)},get sortedColumn(){return c(Et)},get readOnly(){return I()},onSort:Ye}),cA(pt,ga)});var De=bA(pe),ot=pt=>{var gi=MFA(),ga=CA(gi),Zn=tt(()=>(c(uA),EA(()=>Array.isArray(c(uA))?c(uA).length:0)));(function(Aa,ha){St(ha,!1);var fr=N(ha,"count",9),AC=N(ha,"maxSampleCount",9),xg=N(ha,"readOnly",9),zl=N(ha,"onRefresh",9);Ai(!0);var $c,Ol=yFA();Wi(CA(Ol),{get data(){return qq}}),ve(()=>{$c=$t(Ol,1,"jse-column-header svelte-1wgrwv3",null,$c,{"jse-readonly":xg()}),Mn(Ol,"title","The Columns are created by sampling ".concat(AC()," items out of ").concat(fr(),". ")+"If you're missing a column, click here to sample all of the items instead of a subset. This is slower.")}),ue("click",Ol,()=>zl()()),cA(Aa,Ol),xt()})(ga,{get count(){return c(Zn)},get maxSampleCount(){return c(Je)},get readOnly(){return I()},onRefresh:()=>R(Je,1/0)}),cA(pt,gi)};TA(De,pt=>{c(A)&&pt(ot)});var jt,Mi,xn=bA(q),Pi=CA(xn),Eo=bA(xn);Ea(Eo,1,()=>(c(i),EA(()=>c(i).visibleItems)),Ra,(pt,gi,ga)=>{var Zn=tt(()=>(c(i),EA(()=>c(i).startIndex+ga))),Aa=tt(()=>(c(n),G(c(Zn)),EA(()=>c(n).rows[c(Zn)]))),ha=tt(()=>(G(VQ),G(c(Zn)),G(c(Aa)),EA(()=>{var os;return VQ([String(c(Zn))],(os=c(Aa))===null||os===void 0?void 0:os.row)}))),fr=tt(()=>(G(J0),c(uA),c(Me),G(c(Zn)),EA(()=>J0(c(uA),c(Me),[String(c(Zn))])))),AC=NFA(),xg=CA(AC);qnA(xg,()=>c(Zn),os=>{var mr=kFA(),Rg=CA(mr),eC=bA(Rg),Ng=Rn=>{Ch(Rn,{get validationError(){return c(ha)},get onExpand(){return _l}})};TA(eC,Rn=>{c(ha)&&Rn(Ng)}),bs(mr,(Rn,Na)=>Jy?.(Rn,Na),()=>Rn=>(function(Na,Fa){z[Fa]=Na.getBoundingClientRect().height})(Rn,c(Zn))),ve(()=>{var Rn;return Rt(Rg,"".concat((Rn=c(Zn))!==null&&Rn!==void 0?Rn:""," "))}),cA(os,mr)});var zl=bA(xg);Ea(zl,1,()=>c(ze),Ra,(os,mr,Rg,eC)=>{var Ng,Rn=tt(()=>(G(c(Zn)),c(mr),EA(()=>[String(c(Zn))].concat(c(mr))))),Na=tt(()=>(G(je),c(gi),c(mr),EA(()=>je(c(gi),c(mr))))),Fa=tt(()=>(G(In),c(_A),G(q0),G(c(Rn)),EA(()=>In(c(_A))&&q0(c(_A).path,c(Rn))))),Q1=tt(()=>(G(c(Aa)),EA(()=>{var _a;return(_a=c(Aa))===null||_a===void 0?void 0:_a.columns[Rg]}))),QB=tt(()=>(G(VQ),G(c(Rn)),G(c(Q1)),EA(()=>VQ(c(Rn),c(Q1))))),h1=xFA(),tu=CA(h1),hB=CA(tu),iu=_a=>{var tl=tt(()=>(G(gv),G(J0),c(gi),G(c(fr)),c(mr),EA(()=>gv(J0(c(gi),c(fr),c(mr)))))),nu=tt(()=>(G(c(tl)),EA(()=>!!c(tl)&&c(tl).some(f1=>f1.active)))),ou=tt(()=>(G(Vi),G(c(tl)),EA(()=>!Vi(c(tl)))));(function(f1,Lr){St(Lr,!1);var au=N(Lr,"path",9),WK=N(Lr,"value",9),ZK=N(Lr,"parser",9),lcA=N(Lr,"isSelected",9),ccA=N(Lr,"containsSearchResult",9),CcA=N(Lr,"containsActiveSearchResult",9),IcA=N(Lr,"onEdit",9);Ai(!0);var XK,jm=QFA(),dcA=CA(jm);ve(ru=>{XK=$t(jm,1,"jse-inline-value svelte-1jv89ui",null,XK,{"jse-selected":lcA(),"jse-highlight":ccA(),"jse-active":CcA()}),Rt(dcA,ru)},[()=>(G(WC),G(ZK()),G(WK()),G(50),EA(()=>{var ru;return WC((ru=ZK().stringify(WK()))!==null&&ru!==void 0?ru:"",50)}))]),ue("dblclick",jm,()=>IcA()(au())),cA(f1,jm),xt()})(_a,{get path(){return c(Rn)},get value(){return c(Na)},get parser(){return D()},get isSelected(){return c(Fa)},get containsSearchResult(){return c(ou)},get containsActiveSearchResult(){return c(nu)},onEdit:rt})},Rb=_a=>{var tl=tt(()=>(G(J0),c(uA),c(Me),G(c(Rn)),EA(()=>{var Lr;return(Lr=J0(c(uA),c(Me),c(Rn)))===null||Lr===void 0?void 0:Lr.searchResults}))),nu=tt(()=>c(Na)!==void 0?c(Na):""),ou=tt(()=>(G(z0),c(uA),c(xA),G(c(Rn)),EA(()=>z0(c(uA),c(xA),c(Rn))))),f1=tt(()=>c(Fa)?c(_A):void 0);qoA(_a,{get path(){return c(Rn)},get value(){return c(nu)},get enforceString(){return c(ou)},get selection(){return c(f1)},get searchResultItems(){return c(tl)},get context(){return c(Ge)}})};TA(hB,_a=>{G(aa),G(c(Na)),EA(()=>aa(c(Na)))?_a(iu):_a(Rb,!1)});var Nb=bA(hB),Fb=_a=>{var tl=SFA();TI(CA(tl),{selected:!0,onContextMenu:Mo}),cA(_a,tl)};TA(Nb,_a=>{G(I()),G(c(Fa)),G(rr),c(_A),EA(()=>!I()&&c(Fa)&&!rr(c(_A)))&&_a(Fb)});var A0=bA(tu,2),u1=_a=>{Ch(_a,{get validationError(){return c(QB)},get onExpand(){return _l}})};TA(A0,_a=>{c(QB)&&_a(u1)}),ve(_a=>{Mn(h1,"data-path",_a),Ng=$t(tu,1,"jse-value-outer svelte-1p86y3c",null,Ng,{"jse-selected-value":c(Fa)})},[()=>(G(jy),G(c(Rn)),EA(()=>jy(c(Rn))))]),cA(os,h1)});var $c=bA(zl),Ol=os=>{cA(os,RFA())};TA($c,os=>{c(A)&&os(Ol)}),cA(pt,AC)});var Wt,Xo=CA(bA(Eo));Ko(Ne,pt=>R(KA,pt),()=>c(KA)),bs(Ne,(pt,gi)=>Jy?.(pt,gi),()=>va),Nr(()=>ue("scroll",Ne,ct));var Wn=bA(Ne,2),$o=pt=>{var gi=tt(()=>(c(ZA),EA(()=>"You pasted a JSON ".concat(Array.isArray(c(ZA).contents)?"array":"object"," as text")))),ga=tt(()=>[{icon:MC,text:"Paste as JSON instead",title:"Paste the text as JSON instead of a single value",onMouseDown:Do},{text:"Leave as is",title:"Keep the pasted content as a single value",onClick:ya}]);el(pt,{type:"info",get message(){return c(gi)},get actions(){return c(ga)}})};TA(Wn,pt=>{c(ZA)&&pt($o)});var un=bA(Wn,2),Gt=pt=>{var gi=tt(()=>[{icon:MC,text:"Paste as string instead",title:"Paste the clipboard data as a single string value instead of an array",onClick:Qn},{text:"Leave as is",title:"Keep the pasted array",onClick:wi}]);el(pt,{type:"info",message:"Multiline text was pasted as array",get actions(){return c(gi)}})};TA(un,pt=>{c(MA)&&pt(Gt)});var $i=bA(un,2),Zt=pt=>{var gi=tt(()=>I()?[]:[{icon:Ww,text:"Ok",title:"Accept the repaired document",onClick:Bn},{icon:s3,text:"Repair manually instead",title:"Leave the document unchanged and repair it manually instead",onClick:Io}]);el(pt,{type:"success",message:"The loaded JSON document was invalid but is successfully repaired.",get actions(){return c(gi)},onClose:L})};TA($i,pt=>{c(et)&&pt(Zt)}),CG(bA($i,2),{get validationErrors(){return c(gn)},selectError:xe}),ve(()=>{jt=$t(xn,1,"jse-table-invisible-start-section svelte-1p86y3c",null,jt,{"jse-search-box-background":c(LA)}),Mn(Pi,"colspan",(c(ze),EA(()=>c(ze).length))),Mi=Ul(Pi,"",Mi,{height:(c(i),EA(()=>c(i).startHeight+"px"))}),Mn(Xo,"colspan",(c(ze),EA(()=>c(ze).length))),Wt=Ul(Xo,"",Wt,{height:(c(i),EA(()=>c(i).endHeight+"px"))})}),cA(Be,Te)},ne=Be=>{var Te=vi(),Se=At(Te),Ne=Un=>{var q=_FA(),fA=At(q),PA=tt(()=>I()?[]:[{icon:s3,text:"Repair manually",title:'Open the document in "code" mode and repair it manually',onClick:Io}]);el(fA,{type:"error",message:"The loaded JSON document is invalid and could not be repaired automatically.",get actions(){return c(PA)}}),aaA(bA(fA,2),{get text(){return c(XA)},get json(){return c(uA)},get indentation(){return J()},get parser(){return D()}}),cA(Un,q)},ni=Un=>{DFA(Un,{get text(){return c(XA)},get json(){return c(uA)},get readOnly(){return I()},get parser(){return D()},openJSONEditorModal:rt,extractPath:Pt,get onChangeMode(){return $()},onClick:()=>{L()}})};TA(Se,Un=>{c(QA)&&c(XA)!==void 0&&c(XA)!==""?Un(Ne):Un(ni,!1)},!0),cA(Be,Te)};TA(wA,Be=>{c(ut)?Be(Ae):Be(ne,!1)}),ue("paste",lA,me),cA(k,T)},Yo=k=>{cA(k,GFA())};TA(Mt,k=>{C?k(Yo,!1):k(sa)}),Ko(Oi,k=>R(mA,k),()=>c(mA));var u=bA(Oi,2),y=k=>{PoA(k,{onClose:()=>R(Y,!1)})};TA(u,k=>{c(Y)&&k(y)});var x=bA(u,2),H=k=>{joA(k,e1(()=>c(Ue),{onClose:()=>{var T;(T=c(Ue))===null||T===void 0||T.onClose(),R(Ue,void 0)}}))};return TA(x,k=>{c(Ue)&&k(H)}),ve(()=>Ni=$t(Oi,1,"jse-table-mode svelte-1p86y3c",null,Ni,{"no-main-menu":!f()})),ue("mousedown",Oi,function(k){if(k.buttons===1||k.buttons===2){var T=k.target;T.isContentEditable||L();var tA=doA(T);if(tA){if(rr(c(_A))&&Wf(c(uA),c(_A),tA))return;R(_A,Ui(tA)),k.preventDefault()}}}),ue("keydown",Oi,function(k){var T=r2(k);if(o("keydown",{combo:T,key:k.key}),T==="Ctrl+X"&&(k.preventDefault(),tr(!0)),T==="Ctrl+Shift+X"&&(k.preventDefault(),tr(!1)),T==="Ctrl+C"&&(k.preventDefault(),Pa(!0)),T==="Ctrl+Shift+C"&&(k.preventDefault(),Pa(!1)),T==="Ctrl+D"&&(k.preventDefault(),Sn()),T!=="Delete"&&T!=="Backspace"||(k.preventDefault(),Si()),T==="Insert"&&k.preventDefault(),T==="Ctrl+A"&&k.preventDefault(),T==="Ctrl+Q"&&Wo(k),T==="ArrowLeft"&&(k.preventDefault(),li(),c(_A))){var tA=(function(Te,Se){var{rowIndex:Ne,columnIndex:ni}=Fl(lt(Se),Te);return ni>0?Ui(Kd({rowIndex:Ne,columnIndex:ni-1},Te)):Se})(c(ze),c(_A));R(_A,tA),Uo(lt(tA))}if(T==="ArrowRight"&&(k.preventDefault(),li(),c(_A))){var lA=(function(Te,Se){var{rowIndex:Ne,columnIndex:ni}=Fl(lt(Se),Te);return ni0?Ui(Kd({rowIndex:Ne-1,columnIndex:ni},Te)):Se})(c(ze),c(_A));R(_A,wA),Uo(lt(wA))}if(T==="ArrowDown"&&(k.preventDefault(),li(),c(_A))){var Ae=(function(Te,Se,Ne){var{rowIndex:ni,columnIndex:Un}=Fl(lt(Ne),Se);return niR(UA,z)}).get()),mA=IA(s());function KA(z){if(hiA(z)){R(mA,z.undo.mode);var nA=c(UA).items(),rA=nA.findIndex(Ie=>Ie===z),NA=rA!==-1?nA[rA-1]:void 0;ee("handleUndo",{index:rA,item:z,items:nA,prevItem:NA}),NA&&i(NA.redo.selection),_()(c(mA))}}function Pe(z){if(hiA(z)){R(mA,z.redo.mode);var nA=c(UA).items(),rA=nA.findIndex(Ie=>Ie===z),NA=rA!==-1?nA[rA+1]:void 0;ee("handleRedo",{index:rA,item:z,items:nA,nextItem:NA}),NA&&i(NA.undo.selection),_()(c(mA))}}var Ue=IA(),HA={type:"separator"},uA=IA(),XA=IA();function QA(z){if(c(sA))return c(sA).patch(z);if(c(hA))return c(hA).patch(z);if(c(YA))return c(YA).patch(z);throw new Error('Method patch is not available in mode "'.concat(c(mA),'"'))}function ZA(z,nA){if(c(sA))return c(sA).expand(z,nA);if(c(YA))return c(YA).expand(z,nA);throw new Error('Method expand is not available in mode "'.concat(c(mA),'"'))}function MA(z,nA){if(c(sA))return c(sA).collapse(z,nA);if(c(YA))return c(YA).collapse(z,nA);throw new Error('Method collapse is not available in mode "'.concat(c(mA),'"'))}function Me(z){if(c(YA))c(YA).openTransformModal(z);else if(c(sA))c(sA).openTransformModal(z);else{if(!c(hA))throw new Error('Method transform is not available in mode "'.concat(c(mA),'"'));c(hA).openTransformModal(z)}}function LA(){if(c(YA))return c(YA).validate();if(c(sA))return c(sA).validate();if(c(hA))return c(hA).validate();throw new Error('Method validate is not available in mode "'.concat(c(mA),'"'))}function pA(){return c(sA)?c(sA).acceptAutoRepair():A()}function Ft(z){if(c(sA))return c(sA).scrollTo(z);if(c(hA))return c(hA).scrollTo(z);throw new Error('Method scrollTo is not available in mode "'.concat(c(mA),'"'))}function ht(z){if(c(sA))return c(sA).findElement(z);if(c(hA))return c(hA).findElement(z);throw new Error('Method findElement is not available in mode "'.concat(c(mA),'"'))}function Ee(){c(YA)?c(YA).focus():c(sA)?c(sA).focus():c(hA)&&c(hA).focus()}function Kt(){return Je.apply(this,arguments)}function Je(){return(Je=Yt(function*(){c(YA)&&(yield c(YA).refresh())})).apply(this,arguments)}RA(()=>G(s()),()=>{(function(z){if(z!==c(mA)){var nA={type:"mode",undo:{mode:c(mA),selection:void 0},redo:{mode:z,selection:void 0}};c(mA)==="text"&&c(YA)&&c(YA).flush(),ee("add history item",nA),c(UA).add(nA),R(mA,z)}})(s())}),RA(()=>(c(mA),G(_())),()=>{R(Ue,[{type:"button",text:"text",title:"Switch to text mode (current mode: ".concat(c(mA),")"),className:"jse-group-button jse-first"+(c(mA)===Da.text?" jse-selected":""),onClick:()=>_()(Da.text)},{type:"button",text:"tree",title:"Switch to tree mode (current mode: ".concat(c(mA),")"),className:"jse-group-button "+(c(mA)===Da.tree?" jse-selected":""),onClick:()=>_()(Da.tree)},{type:"button",text:"table",title:"Switch to table mode (current mode: ".concat(c(mA),")"),className:"jse-group-button jse-last"+(c(mA)===Da.table?" jse-selected":""),onClick:()=>_()(Da.table)}])}),RA(()=>(c(Ue),G($()),c(mA),G(D()),G(n())),()=>{R(uA,z=>{var nA=mL(z[0])?c(Ue).concat(z):c(Ue).concat(HA,z),rA=t3(nA);return $()(nA,{mode:c(mA),modal:D(),readOnly:n()})||rA})}),RA(()=>(G(O()),c(mA),G(D()),G(n()),G(i())),()=>{R(XA,z=>{var nA,rA=t3(z);return(nA=O()(z,{mode:c(mA),modal:D(),readOnly:n(),selection:i()}))!==null&&nA!==void 0?nA:!n()&&rA})}),kn();var ze={patch:QA,expand:ZA,collapse:MA,transform:Me,validate:LA,acceptAutoRepair:pA,scrollTo:Ft,findElement:ht,focus:Ee,refresh:Kt};Ai();var ut=vi(),ke=At(ut),ei=z=>{Ko(EFA(z,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(UA)},get readOnly(){return n()},get indentation(){return o()},get tabSize(){return a()},get mainMenuBar(){return g()},get statusBar(){return C()},get askToFormat(){return I()},get escapeUnicodeCharacters(){return B()},get parser(){return Q()},get validator(){return b()},get validationParser(){return S()},get onChange(){return F()},get onChangeMode(){return _()},get onSelect(){return U()},onUndo:KA,onRedo:Pe,get onError(){return DA()},get onFocus(){return P()},get onBlur(){return aA()},get onRenderMenu(){return c(uA)},get onSortModal(){return iA()},get onTransformModal(){return BA()},$$legacy:!0}),nA=>R(YA,nA),()=>c(YA))},Y=z=>{var nA=vi(),rA=At(nA),NA=Qe=>{Ko(UFA(Qe,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(UA)},get readOnly(){return n()},get truncateTextSize(){return r()},get mainMenuBar(){return g()},get escapeControlCharacters(){return d()},get escapeUnicodeCharacters(){return B()},get flattenColumns(){return E()},get parser(){return Q()},get parseMemoizeOne(){return f()},get validator(){return b()},get validationParser(){return S()},get indentation(){return o()},get onChange(){return F()},get onChangeMode(){return _()},get onSelect(){return U()},onUndo:KA,onRedo:Pe,get onRenderValue(){return J()},get onFocus(){return P()},get onBlur(){return aA()},get onRenderMenu(){return c(uA)},get onRenderContextMenu(){return c(XA)},get onSortModal(){return iA()},get onTransformModal(){return BA()},get onJSONEditorModal(){return oA()},$$legacy:!0}),xA=>R(hA,xA),()=>c(hA))},Ie=Qe=>{Ko(KL(Qe,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(UA)},get readOnly(){return n()},get indentation(){return o()},get truncateTextSize(){return r()},get mainMenuBar(){return g()},get navigationBar(){return l()},get escapeControlCharacters(){return d()},get escapeUnicodeCharacters(){return B()},get parser(){return Q()},get parseMemoizeOne(){return f()},get validator(){return b()},get validationParser(){return S()},get pathParser(){return M()},get onError(){return DA()},get onChange(){return F()},get onChangeMode(){return _()},get onSelect(){return U()},onUndo:KA,onRedo:Pe,get onRenderValue(){return J()},get onClassName(){return j()},get onFocus(){return P()},get onBlur(){return aA()},get onRenderMenu(){return c(uA)},get onRenderContextMenu(){return c(XA)},get onSortModal(){return iA()},get onTransformModal(){return BA()},get onJSONEditorModal(){return oA()},$$legacy:!0}),xA=>R(sA,xA),()=>c(sA))};TA(rA,Qe=>{c(mA),G(Da),EA(()=>c(mA)===Da.table)?Qe(NA):Qe(Ie,!1)},!0),cA(z,nA)};return TA(ke,z=>{c(mA),G(Da),EA(()=>c(mA)===Da.text||String(c(mA))==="code")?z(ei):z(Y,!1)}),cA(t,ut),Ot(e,"patch",QA),Ot(e,"expand",ZA),Ot(e,"collapse",MA),Ot(e,"transform",Me),Ot(e,"validate",LA),Ot(e,"acceptAutoRepair",pA),Ot(e,"scrollTo",Ft),Ot(e,"findElement",ht),Ot(e,"focus",Ee),Ot(e,"refresh",Kt),xt(ze)}qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-modal-wrapper.svelte-t4zsk3 { + flex: 1; + display: flex; + min-width: 0; + min-height: 0; + flex-direction: column; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) { + flex: 1; + display: flex; + flex-direction: column; + padding: 20px; + overflow: auto; + min-width: 0; + min-height: 0; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) { + display: flex; + flex-direction: row; + justify-content: flex-end; + padding-top: var(--jse-padding, 10px); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-label:where(.svelte-t4zsk3) { + font-weight: bold; + display: block; + box-sizing: border-box; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-label:where(.svelte-t4zsk3) .jse-label-inner:where(.svelte-t4zsk3) { + margin-top: calc(2 * var(--jse-padding, 10px)); + margin-bottom: calc(0.5 * var(--jse-padding, 10px)); + box-sizing: border-box; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-modal-inline-editor:where(.svelte-t4zsk3) { + flex: 1; + min-height: 150px; + min-width: 0; + max-width: 100%; + display: flex; + --jse-theme-color: var(--jse-modal-editor-theme-color, #707070); + --jse-theme-color-highlight: var(--jse-modal-editor-theme-color-highlight, #646464); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) { + gap: var(--jse-padding, 10px); + align-items: center; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) .jse-error:where(.svelte-t4zsk3) { + flex: 1; + color: var(--jse-error-color, #ee5341); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-secondary-background, #d3d3d3); + color: var(--jse-button-secondary-color, var(--jse-text-color, #4d4d4d)); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3):hover { + background: var(--jse-button-secondary-background-highlight, #e1e1e1); +} +.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3):disabled { + background: var(--jse-button-secondary-background-disabled, #9d9d9d); +} +.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3) { + border: var(--jse-input-border, 1px solid #d8dbdf); + outline: none; + box-sizing: border-box; + padding: calc(0.5 * var(--jse-padding, 10px)); + font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); + font-size: var(--jse-font-size-mono, 14px); + color: inherit; + background: var(--jse-input-background, var(--jse-background-color, #fff)); +} +.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3):focus { + border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); +} +.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3):read-only { + background: var(--jse-input-background-readonly, transparent); +}`);var JFA=FA('
      '),YFA=FA(''),TFA=FA(''),HFA=FA(''),zFA=FA('
      Path
      Contents
      ',1),OFA=FA('
      '),PFA={};qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-modal-contents.svelte-lwzlls { + flex: 1; + display: flex; + flex-direction: column; + padding: 20px; + overflow: auto; + min-width: 0; + min-height: 0; +} +.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) { + display: flex; + flex-direction: row; + justify-content: flex-end; + padding-top: var(--jse-padding, 10px); +} +.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls) { + border: none; + background: transparent; + color: inherit; + cursor: pointer; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + padding: 5px; + margin: 0; + background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); + color: var(--jse-button-primary-color, #fff); + padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); + border-radius: 3px; +} +.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls):hover { + background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); +} +.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls):disabled { + background: var(--jse-button-primary-background-disabled, #9d9d9d); +} +.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} +.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) th:where(.svelte-lwzlls), +.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) td:where(.svelte-lwzlls) { + text-align: left; + vertical-align: middle; + font-weight: normal; + padding-bottom: var(--jse-padding, 10px); +} +.jse-modal-contents.svelte-lwzlls input.jse-path:where(.svelte-lwzlls) { + width: 100%; + box-sizing: border-box; + padding: 5px 10px; + border: var(--jse-input-border, 1px solid #d8dbdf); + border-radius: var(--jse-input-radius, 3px); + font-family: inherit; + font-size: inherit; + background: inherit; + background: var(--jse-input-background-readonly, transparent); + color: inherit; + outline: none; +} +.jse-modal-contents.svelte-lwzlls .svelte-select input { + box-sizing: border-box; +} +.jse-modal-contents.svelte-lwzlls .jse-space:where(.svelte-lwzlls) { + height: 200px; +} +.jse-modal-contents.svelte-lwzlls .jse-space:where(.svelte-lwzlls) .jse-error:where(.svelte-lwzlls) { + color: var(--jse-error-color, #ee5341); +}`);var ZQ=pv(()=>PFA),jFA=FA('Property'),qFA=FA('
      '),VFA=FA('
      Path
      Direction
      ',1);qt(`/* over all fonts, sizes, and colors */ +/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ +/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ +/* main, menu, modal */ +/* jsoneditor modal */ +/* tooltip in text mode */ +/* panels: navigation bar, gutter, search box */ +/* navigation-bar */ +/* context menu */ +/* contents: json key and values */ +/* contents: selected or hovered */ +/* contents: section of collapsed items in an array */ +/* contents: highlighting of search matches */ +/* contents: inline tags inside the JSON document */ +/* contents: table */ +/* controls in modals: inputs, buttons, and \`a\` */ +/* messages */ +/* svelte-select */ +/* color picker */ +.jse-main.svelte-1l55585 { + width: 100%; + height: 100%; + min-width: 0; + min-height: 150px; + font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--jse-font-size, 16px); + line-height: normal; + position: relative; + display: flex; + flex-direction: row; +} +.jse-main.svelte-1l55585:not(.jse-focus) { + --jse-selection-background-color: var(--jse-selection-background-inactive-color, #e8e8e8); + --jse-context-menu-pointer-background: var(--jse-context-menu-pointer-hover-background, #b2b2b2); +}`);var WFA=FA('
      ',1);function ZFA(t,e){St(e,!1);var A=IA(void 0,!0),i=lr("jsoneditor:JSONEditor"),n={text:""},o=void 0,a=!1,r=Da.tree,s=!0,g=!0,l=!0,C=!0,I=!1,d=!1,B=!0,E=JSON,Q=void 0,f=JSON,b={parse:AxA,stringify:vg},S=[mSA],M=S[0].id,D=_l,F=void 0,_=void 0,U=$SA,J=_l,j=_l,$=_l,O=_l,DA=re=>{console.error(re),alert(re.toString())},P=_l,aA=_l,iA=N(e,"content",13,n),BA=N(e,"selection",13,o),oA=N(e,"readOnly",13,a),sA=N(e,"indentation",13,2),hA=N(e,"tabSize",13,4),YA=N(e,"truncateTextSize",13,1e3),ee=N(e,"mode",13,r),UA=N(e,"mainMenuBar",13,s),mA=N(e,"navigationBar",13,g),KA=N(e,"statusBar",13,l),Pe=N(e,"askToFormat",13,C),Ue=N(e,"escapeControlCharacters",13,I),HA=N(e,"escapeUnicodeCharacters",13,d),uA=N(e,"flattenColumns",13,B),XA=N(e,"parser",13,E),QA=N(e,"validator",13,Q),ZA=N(e,"validationParser",13,f),MA=N(e,"pathParser",13,b),Me=N(e,"queryLanguages",13,S),LA=N(e,"queryLanguageId",13,M),pA=N(e,"onChangeQueryLanguage",13,D),Ft=N(e,"onChange",13,F),ht=N(e,"onSelect",13,_),Ee=N(e,"onRenderValue",13,U),Kt=N(e,"onClassName",13,J),Je=N(e,"onRenderMenu",13,j),ze=N(e,"onRenderContextMenu",13,$),ut=N(e,"onChangeMode",13,O),ke=N(e,"onError",13,DA),ei=N(e,"onFocus",13,P),Y=N(e,"onBlur",13,aA),z=IA(th(),!0),nA=IA(!1,!0),rA=IA(void 0,!0),NA=IA(void 0,!0),Ie=IA(void 0,!0),Qe=IA(void 0,!0),xA=IA(XA(),!0);function _A(){return iA()}function Et(re){i("set");var di=H_(re);if(di)throw new Error(di);R(z,th()),iA(re),bo()}function et(re){i("update");var di=H_(re);if(di)throw new Error(di);iA(re),bo()}function Ye(re){var di=c(rA).patch(re);return bo(),di}function Ge(re){BA(re),bo()}function si(re,di){c(rA).expand(re,di),bo()}function gn(re){var di=arguments.length>1&&arguments[1]!==void 0&&arguments[1];c(rA).collapse(re,di),bo()}function dn(){var re=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};c(rA).transform(re),bo()}function Le(){return c(rA).validate()}function Zi(){var re=c(rA).acceptAutoRepair();return bo(),re}function Qi(re){return bi.apply(this,arguments)}function bi(){return(bi=Yt(function*(re){yield c(rA).scrollTo(re)})).apply(this,arguments)}function zi(re){return c(rA).findElement(re)}function yt(){c(rA).focus(),bo()}function Xi(){return _t.apply(this,arguments)}function _t(){return(_t=Yt(function*(){yield c(rA).refresh()})).apply(this,arguments)}function L(re){var di,ln,Qn,Jo,ya,wi,Io,tr,yo,Pa,Gn,Si,Pt,Sn,Bo,ko,vA,VA,me,dA,SA,oe,xe,it,rt,bt,Kn,xi,Ji,Vt,Ri,va=Object.keys(re);for(var Lt of va)switch(Lt){case"content":iA((di=re[Lt])!==null&&di!==void 0?di:n);break;case"selection":BA((ln=re[Lt])!==null&&ln!==void 0?ln:o);break;case"readOnly":oA((Qn=re[Lt])!==null&&Qn!==void 0?Qn:a);break;case"indentation":sA((Jo=re[Lt])!==null&&Jo!==void 0?Jo:2);break;case"tabSize":hA((ya=re[Lt])!==null&&ya!==void 0?ya:4);break;case"truncateTextSize":YA((wi=re[Lt])!==null&&wi!==void 0?wi:1e3);break;case"mode":ee((Io=re[Lt])!==null&&Io!==void 0?Io:r);break;case"mainMenuBar":UA((tr=re[Lt])!==null&&tr!==void 0?tr:s);break;case"navigationBar":mA((yo=re[Lt])!==null&&yo!==void 0?yo:g);break;case"statusBar":KA((Pa=re[Lt])!==null&&Pa!==void 0?Pa:l);break;case"askToFormat":Pe((Gn=re[Lt])!==null&&Gn!==void 0?Gn:C);break;case"escapeControlCharacters":Ue((Si=re[Lt])!==null&&Si!==void 0?Si:I);break;case"escapeUnicodeCharacters":HA((Pt=re[Lt])!==null&&Pt!==void 0?Pt:d);break;case"flattenColumns":uA((Sn=re[Lt])!==null&&Sn!==void 0?Sn:B);break;case"parser":XA((Bo=re[Lt])!==null&&Bo!==void 0?Bo:E);break;case"validator":QA((ko=re[Lt])!==null&&ko!==void 0?ko:Q);break;case"validationParser":ZA((vA=re[Lt])!==null&&vA!==void 0?vA:f);break;case"pathParser":MA((VA=re[Lt])!==null&&VA!==void 0?VA:b);break;case"queryLanguages":Me((me=re[Lt])!==null&&me!==void 0?me:S);break;case"queryLanguageId":LA((dA=re[Lt])!==null&&dA!==void 0?dA:M);break;case"onChangeQueryLanguage":pA((SA=re[Lt])!==null&&SA!==void 0?SA:D);break;case"onChange":Ft((oe=re[Lt])!==null&&oe!==void 0?oe:F);break;case"onRenderValue":Ee((xe=re[Lt])!==null&&xe!==void 0?xe:U);break;case"onClassName":Kt((it=re[Lt])!==null&&it!==void 0?it:J);break;case"onRenderMenu":Je((rt=re[Lt])!==null&&rt!==void 0?rt:j);break;case"onRenderContextMenu":ze((bt=re[Lt])!==null&&bt!==void 0?bt:$);break;case"onChangeMode":ut((Kn=re[Lt])!==null&&Kn!==void 0?Kn:O);break;case"onSelect":ht((xi=re[Lt])!==null&&xi!==void 0?xi:_);break;case"onError":ke((Ji=re[Lt])!==null&&Ji!==void 0?Ji:DA);break;case"onFocus":ei((Vt=re[Lt])!==null&&Vt!==void 0?Vt:P);break;case"onBlur":Y((Ri=re[Lt])!==null&&Ri!==void 0?Ri:aA);break;default:st(Lt)}function st(Ni){i('Unknown property "'.concat(Ni,'"'))}Me().some(Ni=>Ni.id===LA())||LA(Me()[0].id),bo()}function ct(){return li.apply(this,arguments)}function li(){return(li=Yt(function*(){throw new Error("class method destroy() is deprecated. It is replaced with a method destroy() in the vanilla library.")})).apply(this,arguments)}function Bn(re,di,ln){iA(re),Ft()&&Ft()(re,di,ln)}function En(re){BA(re),ht()&&ht()(t3(re))}function qn(){R(nA,!0),ei()&&ei()()}function Uo(){R(nA,!1),Y()&&Y()()}function Co(re){return Mo.apply(this,arguments)}function Mo(){return(Mo=Yt(function*(re){ee()!==re&&(ee(re),bo(),yt(),ut()(re))})).apply(this,arguments)}function Wo(re){i("handleChangeQueryLanguage",re),LA(re),pA()(re)}function wo(re){var{id:di,json:ln,rootPath:Qn,onTransform:Jo,onClose:ya}=re;oA()||R(Qe,{id:di,json:ln,rootPath:Qn,indentation:sA(),truncateTextSize:YA(),escapeControlCharacters:Ue(),escapeUnicodeCharacters:HA(),parser:XA(),parseMemoizeOne:c(A),validationParser:ZA(),pathParser:MA(),queryLanguages:Me(),queryLanguageId:LA(),onChangeQueryLanguage:Wo,onRenderValue:Ee(),onRenderMenu:wi=>Je()(wi,{mode:ee(),modal:!0,readOnly:oA()}),onRenderContextMenu:wi=>ze()(wi,{mode:ee(),modal:!0,readOnly:oA(),selection:BA()}),onClassName:Kt(),onTransform:Jo,onClose:ya})}function Qa(re){oA()||R(Ie,re)}function Zo(re){var{content:di,path:ln,onPatch:Qn,onClose:Jo}=re;i("onJSONEditorModal",{content:di,path:ln}),R(NA,{content:di,path:ln,onPatch:Qn,readOnly:oA(),indentation:sA(),tabSize:hA(),truncateTextSize:YA(),mainMenuBar:UA(),navigationBar:mA(),statusBar:KA(),askToFormat:Pe(),escapeControlCharacters:Ue(),escapeUnicodeCharacters:HA(),flattenColumns:uA(),parser:XA(),validator:void 0,validationParser:ZA(),pathParser:MA(),onRenderValue:Ee(),onClassName:Kt(),onRenderMenu:Je(),onRenderContextMenu:ze(),onSortModal:Qa,onTransformModal:wo,onClose:Jo})}function ra(re){re.stopPropagation()}RA(()=>(G(XA()),c(xA),G(iA()),th),()=>{if(!aoA(XA(),c(xA))){if(i("parser changed, recreate editor"),Of(iA())){var re=c(xA).stringify(iA().json);iA({json:re!==void 0?XA().parse(re):void 0})}R(xA,XA()),R(z,th())}}),RA(()=>G(iA()),()=>{var re=H_(iA());re&&console.error("Error: "+re)}),RA(()=>G(BA()),()=>{BA()===null&&console.warn("selection is invalid: it is null but should be undefined")}),RA(()=>G(XA()),()=>{R(A,ZE(XA().parse))}),RA(()=>G(ee()),()=>{i("mode changed to",ee())}),kn();var Do={get:_A,set:Et,update:et,patch:Ye,select:Ge,expand:si,collapse:gn,transform:dn,validate:Le,acceptAutoRepair:Zi,scrollTo:Qi,findElement:zi,focus:yt,refresh:Xi,updateProps:L,destroy:ct};return Ai(!0),uL(t,{children:(re,di)=>{var ln,Qn=WFA(),Jo=At(Qn);qnA(CA(Jo),()=>c(z),Gn=>{Ko(WiA(Gn,{get externalMode(){return ee()},get content(){return iA()},get selection(){return BA()},get readOnly(){return oA()},get indentation(){return sA()},get tabSize(){return hA()},get truncateTextSize(){return YA()},get statusBar(){return KA()},get askToFormat(){return Pe()},get mainMenuBar(){return UA()},get navigationBar(){return mA()},get escapeControlCharacters(){return Ue()},get escapeUnicodeCharacters(){return HA()},get flattenColumns(){return uA()},get parser(){return XA()},get parseMemoizeOne(){return c(A)},get validator(){return QA()},get validationParser(){return ZA()},get pathParser(){return MA()},insideModal:!1,get onError(){return ke()},onChange:Bn,onChangeMode:Co,onSelect:En,get onRenderValue(){return Ee()},get onClassName(){return Kt()},onFocus:qn,onBlur:Uo,get onRenderMenu(){return Je()},get onRenderContextMenu(){return ze()},onSortModal:Qa,onTransformModal:wo,onJSONEditorModal:Zo,$$legacy:!0}),Si=>R(rA,Si),()=>c(rA))});var ya=bA(Jo,2),wi=Gn=>{(function(Si,Pt){var Sn,Bo;St(Pt,!1);var ko=IA(void 0,!0),vA=IA(void 0,!0),VA=IA(void 0,!0),me=IA(void 0,!0),dA=lr("jsoneditor:SortModal"),SA=N(Pt,"id",9),oe=N(Pt,"json",9),xe=N(Pt,"rootPath",9),it=N(Pt,"onSort",9),rt=N(Pt,"onClose",9),bt={value:1,label:"ascending"},Kn=[bt,{value:-1,label:"descending"}],xi="".concat(SA(),":").concat(wt(xe())),Ji=IA((Sn=ZQ()[xi])===null||Sn===void 0?void 0:Sn.selectedProperty,!0),Vt=IA(((Bo=ZQ()[xi])===null||Bo===void 0?void 0:Bo.selectedDirection)||bt,!0),Ri=IA(void 0,!0);function va(){try{var st,Ni,Oi;R(Ri,void 0);var Vn=((st=c(Ji))===null||st===void 0?void 0:st.value)||((Ni=c(me))===null||Ni===void 0||(Ni=Ni[0])===null||Ni===void 0?void 0:Ni.value)||[],hn=(Oi=c(Vt))===null||Oi===void 0?void 0:Oi.value,Mt=ZoA(oe(),xe(),Vn,hn);it()!==void 0&&xe()!==void 0&&it()({operations:Mt,rootPath:xe(),itemPath:Vn,direction:hn}),rt()()}catch(sa){R(Ri,String(sa))}}function Lt(st){st.focus()}RA(()=>(G(oe()),G(xe())),()=>{R(ko,je(oe(),xe()))}),RA(()=>c(ko),()=>{R(vA,Array.isArray(c(ko)))}),RA(()=>(c(vA),c(ko)),()=>{R(VA,c(vA)?QL(c(ko)):void 0)}),RA(()=>(c(VA),PI),()=>{R(me,c(VA)?c(VA).map(PI):void 0)}),RA(()=>(ZQ(),c(Ji),c(Vt)),()=>{ZQ(ZQ()[xi]={selectedProperty:c(Ji),selectedDirection:c(Vt)}),dA("store state in memory",xi,ZQ()[xi])}),kn(),Ai(!0),$f(Si,{get onClose(){return rt()},className:"jse-sort-modal",children:(st,Ni)=>{var Oi=VFA(),Vn=At(Oi),hn=tt(()=>c(vA)?"Sort array items":"Sort object keys");Bv(Vn,{get title(){return c(hn)},get onClose(){return rt()}});var Mt=CA(bA(Vn,2)),sa=bA(CA(Mt)),Yo=CA(sa),u=bA(CA(Yo)),y=CA(u),x=bA(Yo),H=ne=>{var Be=jFA(),Te=bA(CA(Be));Td(CA(Te),{showChevron:!0,get items(){return c(me)},get value(){return c(Ji)},set value(Se){R(Ji,Se)},$$legacy:!0}),cA(ne,Be)};TA(x,ne=>{c(vA),c(me),EA(()=>{var Be;return c(vA)&&c(me)&&((Be=c(me))===null||Be===void 0?void 0:Be.length)>1})&&ne(H)});var k=bA(x),T=bA(CA(k));Td(CA(T),{showChevron:!0,clearable:!1,get items(){return Kn},get value(){return c(Vt)},set value(ne){R(Vt,ne)},$$legacy:!0});var tA=bA(Mt,2),lA=CA(tA),wA=ne=>{var Be=qFA(),Te=CA(Be);ve(()=>Rt(Te,c(Ri))),cA(ne,Be)};TA(lA,ne=>{c(Ri)&&ne(wA)});var Ae=CA(bA(tA,2));Nr(()=>ue("click",Ae,va)),bs(Ae,ne=>Lt?.(ne)),ve(ne=>{AB(y,ne),Ae.disabled=(c(vA),c(me),c(Ji),EA(()=>{var Be;return!!(c(vA)&&c(me)&&((Be=c(me))===null||Be===void 0?void 0:Be.length)>1)&&!c(Ji)}))},[()=>(G(xe()),G(Vi),G(vg),EA(()=>xe()&&!Vi(xe())?vg(xe()):"(document root)"))]),cA(st,Oi)},$$slots:{default:!0}}),xt()})(Gn,e1(()=>c(Ie),{onClose:()=>{var Si;(Si=c(Ie))===null||Si===void 0||Si.onClose(),R(Ie,void 0)}}))};TA(ya,Gn=>{c(Ie)&&Gn(wi)});var Io=bA(ya,2),tr=Gn=>{AFA(Gn,e1(()=>c(Qe),{onClose:()=>{var Si;(Si=c(Qe))===null||Si===void 0||Si.onClose(),R(Qe,void 0)}}))};TA(Io,Gn=>{c(Qe)&&Gn(tr)});var yo=bA(Io,2),Pa=Gn=>{(function(Si,Pt){St(Pt,!1);var Sn=IA(void 0,!0),Bo=IA(void 0,!0),ko=IA(void 0,!0),vA=IA(void 0,!0),VA=lr("jsoneditor:JSONEditorModal"),me=N(Pt,"content",9),dA=N(Pt,"path",9),SA=N(Pt,"onPatch",9),oe=N(Pt,"readOnly",9),xe=N(Pt,"indentation",9),it=N(Pt,"tabSize",9),rt=N(Pt,"truncateTextSize",9),bt=N(Pt,"mainMenuBar",9),Kn=N(Pt,"navigationBar",9),xi=N(Pt,"statusBar",9),Ji=N(Pt,"askToFormat",9),Vt=N(Pt,"escapeControlCharacters",9),Ri=N(Pt,"escapeUnicodeCharacters",9),va=N(Pt,"flattenColumns",9),Lt=N(Pt,"parser",9),st=N(Pt,"validator",9),Ni=N(Pt,"validationParser",9),Oi=N(Pt,"pathParser",9),Vn=N(Pt,"onRenderValue",9),hn=N(Pt,"onClassName",9),Mt=N(Pt,"onRenderMenu",9),sa=N(Pt,"onRenderContextMenu",9),Yo=N(Pt,"onSortModal",9),u=N(Pt,"onTransformModal",9),y=N(Pt,"onClose",9),x=IA(void 0,!0),H=IA(void 0,!0),k={mode:lA(me()),content:me(),selection:void 0,relativePath:dA()},T=IA([k],!0),tA=IA(void 0,!0);function lA(fA){return Of(fA)&&jo(fA.json)?Da.table:Da.tree}function wA(){var fA,PA=(fA=mi(c(T)))===null||fA===void 0?void 0:fA.selection;Vf(PA)&&c(x).scrollTo(lt(PA))}function Ae(){if(VA("handleApply"),!oe())try{R(tA,void 0);var fA=c(Sn).relativePath,PA=c(Sn).content,Fe=[{op:"replace",path:wt(fA),value:riA(PA,Lt()).json}];if(c(T).length>1){var pe=riA(c(T)[c(T).length-2].content,Lt()).json,De={json:lg(pe,Fe)},ot=ye(ye({},c(T)[c(T).length-2]||k),{},{content:De});R(T,[...c(T).slice(0,c(T).length-2),ot]),bo(),wA()}else SA()(Fe),y()()}catch(jt){R(tA,String(jt))}}function ne(){if(VA("handleClose"),c(H))R(H,!1);else if(c(T).length>1){var fA;R(T,Ki(c(T))),bo(),(fA=c(x))===null||fA===void 0||fA.focus(),wA(),R(tA,void 0)}else y()()}function Be(fA){VA("handleChange",fA),Ne(PA=>ye(ye({},PA),{},{content:fA}))}function Te(fA){VA("handleChangeSelection",fA),Ne(PA=>ye(ye({},PA),{},{selection:fA}))}function Se(fA){VA("handleChangeMode",fA),Ne(PA=>ye(ye({},PA),{},{mode:fA}))}function Ne(fA){var PA=fA(mi(c(T)));R(T,[...Ki(c(T)),PA])}function ni(fA){R(tA,fA.toString()),console.error(fA)}function Un(fA){var PA,{content:Fe,path:pe}=fA;VA("handleJSONEditorModal",{content:Fe,path:pe});var De={mode:lA(Fe),content:Fe,selection:void 0,relativePath:pe};R(T,[...c(T),De]),bo(),(PA=c(x))===null||PA===void 0||PA.focus()}function q(fA){fA.focus()}is(()=>{var fA;(fA=c(x))===null||fA===void 0||fA.focus()}),RA(()=>c(T),()=>{R(Sn,mi(c(T))||k)}),RA(()=>c(T),()=>{R(Bo,c(T).flatMap(fA=>fA.relativePath))}),RA(()=>(c(Bo),vg),()=>{R(ko,Vi(c(Bo))?"(document root)":vg(c(Bo)))}),RA(()=>G(Lt()),()=>{R(vA,ZE(Lt().parse))}),kn(),Ai(!0),$f(Si,{onClose:ne,className:"jse-jsoneditor-modal",get fullscreen(){return c(H)},children:(fA,PA)=>{var Fe=OFA();uL(CA(Fe),{children:(pe,De)=>{var ot=zFA(),jt=At(ot),Mi=tt(()=>(c(T),EA(()=>c(T).length>1?" (".concat(c(T).length,")"):"")));Bv(jt,{get title(){var Zt;return"Edit nested content ".concat((Zt=c(Mi))!==null&&Zt!==void 0?Zt:"")},fullScreenButton:!0,onClose:ne,get fullscreen(){return c(H)},set fullscreen(Zt){R(H,Zt)},$$legacy:!0});var xn=bA(jt,2),Pi=bA(CA(xn),2),Eo=bA(Pi,4);Ko(WiA(CA(Eo),{get externalMode(){return c(Sn),EA(()=>c(Sn).mode)},get content(){return c(Sn),EA(()=>c(Sn).content)},get selection(){return c(Sn),EA(()=>c(Sn).selection)},get readOnly(){return oe()},get indentation(){return xe()},get tabSize(){return it()},get truncateTextSize(){return rt()},get statusBar(){return xi()},get askToFormat(){return Ji()},get mainMenuBar(){return bt()},get navigationBar(){return Kn()},get escapeControlCharacters(){return Vt()},get escapeUnicodeCharacters(){return Ri()},get flattenColumns(){return va()},get parser(){return Lt()},get parseMemoizeOne(){return c(vA)},get validator(){return st()},get validationParser(){return Ni()},get pathParser(){return Oi()},insideModal:!0,onError:ni,onChange:Be,onChangeMode:Se,onSelect:Te,get onRenderValue(){return Vn()},get onClassName(){return hn()},get onFocus(){return _l},get onBlur(){return _l},get onRenderMenu(){return Mt()},get onRenderContextMenu(){return sa()},get onSortModal(){return Yo()},get onTransformModal(){return u()},onJSONEditorModal:Un,$$legacy:!0}),Zt=>R(x,Zt),()=>c(x));var Wt=CA(bA(Eo,2)),Xo=Zt=>{var pt=JFA(),gi=CA(pt);ve(()=>Rt(gi,c(tA))),cA(Zt,pt)};TA(Wt,Zt=>{c(tA)&&Zt(Xo)});var Wn=bA(Wt,2),$o=Zt=>{var pt=YFA();Wi(CA(pt),{get data(){return Xq}}),ue("click",pt,ne),cA(Zt,pt)};TA(Wn,Zt=>{c(T),EA(()=>c(T).length>1)&&Zt($o)});var un=bA(Wn,2),Gt=Zt=>{var pt=TFA();Nr(()=>ue("click",pt,Ae)),bs(pt,gi=>q?.(gi)),cA(Zt,pt)},$i=Zt=>{var pt=HFA();ue("click",pt,ne),cA(Zt,pt)};TA(un,Zt=>{oe()?Zt($i,!1):Zt(Gt)}),ve(()=>AB(Pi,c(ko))),cA(pe,ot)},$$slots:{default:!0}}),cA(fA,Fe)},$$slots:{default:!0}}),xt()})(Gn,e1(()=>c(NA),{onClose:()=>{var Si;(Si=c(NA))===null||Si===void 0||Si.onClose(),R(NA,void 0)}}))};TA(yo,Gn=>{c(NA)&&Gn(Pa)}),ve(()=>ln=$t(Jo,1,"jse-main svelte-1l55585",null,ln,{"jse-focus":c(nA)})),ue("keydown",Jo,ra),cA(re,Qn)},$$slots:{default:!0}}),Ot(e,"get",_A),Ot(e,"set",Et),Ot(e,"update",et),Ot(e,"patch",Ye),Ot(e,"select",Ge),Ot(e,"expand",si),Ot(e,"collapse",gn),Ot(e,"transform",dn),Ot(e,"validate",Le),Ot(e,"acceptAutoRepair",Zi),Ot(e,"scrollTo",Qi),Ot(e,"findElement",zi),Ot(e,"focus",yt),Ot(e,"refresh",Xi),Ot(e,"updateProps",L),Ot(e,"destroy",ct),xt(Do)}function laA(t){var{target:e,props:A}=t,i=UkA(ZFA,{target:e,props:A});return i.destroy=Yt(function*(){return(function(n,o){var a=dL.get(n);return a?(dL.delete(n),a(o)):Promise.resolve()})(i)}),bo(),i}var jc=class t{constructor(e){this.el=e}jsonString;editor=null;ngAfterViewInit(){let e={text:this.jsonString};setTimeout(()=>{this.editor=laA({target:document.getElementById("json-editor"),props:{content:e,mode:Da.text,mainMenuBar:!1,statusBar:!1}})})}getJsonString(){return this.editor?.get().text}static \u0275fac=function(A){return new(A||t)(Ct(ge))};static \u0275cmp=kA({type:t,selectors:[["app-json-editor"]],inputs:{jsonString:"jsonString"},decls:1,vars:0,consts:[["id","json-editor",1,"json-editor-container","jse-theme-dark"]],template:function(A,i){A&1&&Li(0,"div",0)},styles:[".jse-theme-dark[_ngcontent-%COMP%]{--jse-theme: dark;--jse-theme-color: #2f6dd0;--jse-theme-color-highlight: #467cd2;--jse-background-color: #1e1e1e;--jse-text-color: #d4d4d4;--jse-text-color-inverse: #4d4d4d;--jse-main-border: 1px solid #4f4f4f;--jse-menu-color: #fff;--jse-modal-background: #2f2f2f;--jse-modal-overlay-background: rgba(0, 0, 0, .5);--jse-modal-code-background: #2f2f2f;--jse-tooltip-color: var(--jse-text-color);--jse-tooltip-background: #4b4b4b;--jse-tooltip-border: 1px solid #737373;--jse-tooltip-action-button-color: inherit;--jse-tooltip-action-button-background: #737373;--jse-panel-background: #333333;--jse-panel-background-border: 1px solid #464646;--jse-panel-color: var(--jse-text-color);--jse-panel-color-readonly: #737373;--jse-panel-border: 1px solid #3c3c3c;--jse-panel-button-color-highlight: #e5e5e5;--jse-panel-button-background-highlight: #464646;--jse-navigation-bar-background: #656565;--jse-navigation-bar-background-highlight: #7e7e7e;--jse-navigation-bar-dropdown-color: var(--jse-text-color);--jse-context-menu-background: #4b4b4b;--jse-context-menu-background-highlight: #595959;--jse-context-menu-separator-color: #595959;--jse-context-menu-color: var(--jse-text-color);--jse-context-menu-pointer-background: #737373;--jse-context-menu-pointer-background-highlight: #818181;--jse-context-menu-pointer-color: var(--jse-context-menu-color);--jse-key-color: #9cdcfe;--jse-value-color: var(--jse-text-color);--jse-value-color-number: #b5cea8;--jse-value-color-boolean: #569cd6;--jse-value-color-null: #569cd6;--jse-value-color-string: #ce9178;--jse-value-color-url: #ce9178;--jse-delimiter-color: #949494;--jse-edit-outline: 2px solid var(--jse-text-color);--jse-selection-background-color: #464646;--jse-selection-background-inactive-color: #333333;--jse-hover-background-color: #343434;--jse-active-line-background-color: rgba(255, 255, 255, .06);--jse-search-match-background-color: #343434;--jse-collapsed-items-background-color: #333333;--jse-collapsed-items-selected-background-color: #565656;--jse-collapsed-items-link-color: #b2b2b2;--jse-collapsed-items-link-color-highlight: #ec8477;--jse-search-match-color: #724c27;--jse-search-match-outline: 1px solid #966535;--jse-search-match-active-color: #9f6c39;--jse-search-match-active-outline: 1px solid #bb7f43;--jse-tag-background: #444444;--jse-tag-color: #bdbdbd;--jse-table-header-background: #333333;--jse-table-header-background-highlight: #424242;--jse-table-row-odd-background: rgba(255, 255, 255, .1);--jse-input-background: #3d3d3d;--jse-input-border: var(--jse-main-border);--jse-button-background: #808080;--jse-button-background-highlight: #7a7a7a;--jse-button-color: #e0e0e0;--jse-button-secondary-background: #494949;--jse-button-secondary-background-highlight: #5d5d5d;--jse-button-secondary-background-disabled: #9d9d9d;--jse-button-secondary-color: var(--jse-text-color);--jse-a-color: #55abff;--jse-a-color-highlight: #4387c9;--jse-svelte-select-background: #3d3d3d;--jse-svelte-select-border: 1px solid #4f4f4f;--list-background: #3d3d3d;--item-hover-bg: #505050;--multi-item-bg: #5b5b5b;--input-color: #d4d4d4;--multi-clear-bg: #8a8a8a;--multi-item-clear-icon-color: #d4d4d4;--multi-item-outline: 1px solid #696969;--list-shadow: 0 2px 8px 0 rgba(0, 0, 0, .4);--jse-color-picker-background: #656565;--jse-color-picker-border-box-shadow: #8c8c8c 0 0 0 1px}.json-editor-container[_ngcontent-%COMP%]{height:100%} .jse-message.jse-error{display:none} .cm-gutters.cm-gutters-before{display:none} .jse-text-mode{border-radius:10px} .jse-contents{border-radius:10px;border-bottom:1px solid #4f4f4f}"]})};var XFA=(t,e)=>e.name;function $FA(t,e){if(t&1&&K(0),t&2){let A=v();_e(" Configure ",A.selectedBuiltInTool," ")}}function A_A(t,e){if(t&1&&K(0),t&2){let A=v();_e(" ",A.isEditMode?"Edit Built-in Tool":"Add Built-in Tool"," ")}}function e_A(t,e){if(t&1){let A=JA();m(0,"div",8),eA("click",function(){let n=Z(A).$implicit,o=v(3);return X(o.onToolSelected(n))}),m(1,"mat-icon",9),K(2),w(),m(3,"span",10),K(4),w()()}if(t&2){let A=e.$implicit,i=v(3);ae("selected",i.selectedBuiltInTool===A),p(2),qA(i.getToolIcon(A)),p(2),qA(A)}}function t_A(t,e){if(t&1&&(m(0,"div",4)(1,"h3",5),K(2),w(),m(3,"div",6),Ut(4,e_A,5,4,"div",7,_i),w()()),t&2){let A=e.$implicit;p(2),qA(A.name),p(2),Jt(A.tools)}}function i_A(t,e){if(t&1&&(m(0,"div",1),Ut(1,t_A,6,1,"div",4,XFA),w()),t&2){let A=v();p(),Jt(A.toolCategories)}}function n_A(t,e){if(t&1&&(m(0,"div",2)(1,"h3",11),K(2,"Configure Tool Arguments"),w(),GA(3,"app-json-editor",12),w()),t&2){let A=v();p(3),AA("jsonString",A.toolArgsString)}}function o_A(t,e){if(t&1){let A=JA();m(0,"button",14),eA("click",function(){Z(A);let n=v(2);return X(n.backToToolSelection())}),K(1,"Back"),w()}}function a_A(t,e){if(t&1){let A=JA();V(0,o_A,2,0,"button",13),m(1,"button",14),eA("click",function(){Z(A);let n=v();return X(n.saveArgs())}),K(2),w()}if(t&2){let A=v();W(A.isEditMode?-1:0),p(2),qA(A.isEditMode?"Save":"Create")}}function r_A(t,e){if(t&1){let A=JA();m(0,"button",14),eA("click",function(){Z(A);let n=v();return X(n.cancel())}),K(1,"Cancel"),w(),m(2,"button",15),eA("click",function(){Z(A);let n=v();return X(n.addTool())}),K(3),w()}if(t&2){let A=v();p(3),_e(" ",A.isEditMode?"Save":"Create"," ")}}var aB=class t{constructor(e,A){this.data=e;this.dialogRef=A}jsonEditorComponent;selectedBuiltInTool="google_search";toolCategories=[{name:"Search Tools",tools:["google_search","EnterpriseWebSearchTool","VertexAiSearchTool"]},{name:"Context Tools",tools:["FilesRetrieval","load_memory","preload_memory","url_context","VertexAiRagRetrieval"]},{name:"Agent Function Tools",tools:["exit_loop","get_user_choice","load_artifacts","LongRunningFunctionTool"]}];builtInToolArgs=new Map([["EnterpriseWebSearchTool",[]],["exit_loop",[]],["FilesRetrieval",["name","description","input_dir"]],["get_user_choice",[]],["google_search",[]],["load_artifacts",[]],["load_memory",[]],["LongRunningFunctionTool",["func"]],["preload_memory",[]],["url_context",[]],["VertexAiRagRetrieval",["name","description","rag_corpora","rag_resources","similarity_top_k","vector_distance_threshold"]],["VertexAiSearchTool",["data_store_id","data_store_specs","search_engine_id","filter","max_results"]]]);isEditMode=!1;showArgsEditor=!1;toolArgs={};toolArgsString="";ngOnInit(){if(this.isEditMode=this.data.isEditMode||!1,this.isEditMode&&this.data.toolName){this.selectedBuiltInTool=this.data.toolName;let e=this.builtInToolArgs.get(this.data.toolName);if(e&&e.length>0){if(this.data.toolArgs)this.toolArgs=gA({},this.data.toolArgs),delete this.toolArgs.skip_summarization;else{this.toolArgs={};for(let A of e)this.toolArgs[A]=""}this.toolArgsString=JSON.stringify(this.toolArgs,null,2),this.showArgsEditor=!0}}}onToolSelected(e){this.selectedBuiltInTool=e;let A=this.builtInToolArgs.get(e);A&&A.length>0&&(this.initializeToolArgs(e,A),this.showArgsEditor=!0)}initializeToolArgs(e,A){this.toolArgs={};for(let i of A)this.toolArgs[i]="";this.toolArgsString=JSON.stringify(this.toolArgs,null,2)}backToToolSelection(){this.showArgsEditor=!1,this.toolArgs={},this.toolArgsString=""}saveArgs(){if(this.jsonEditorComponent)try{this.toolArgsString=this.jsonEditorComponent.getJsonString(),this.toolArgs=JSON.parse(this.toolArgsString)}catch(e){alert("Invalid JSON: "+e);return}this.addTool()}addTool(){let e={toolType:"Built-in tool",name:this.selectedBuiltInTool,isEditMode:this.isEditMode};Object.keys(this.toolArgs).length>0&&(e.args=this.toolArgs),this.dialogRef.close(e)}cancel(){this.dialogRef.close()}getToolIcon(e){return ME(e,"Built-in tool")}static \u0275fac=function(A){return new(A||t)(Ct(ka),Ct(Po))};static \u0275cmp=kA({type:t,selectors:[["app-built-in-tool-dialog"]],viewQuery:function(A,i){if(A&1&&ai(jc,5),A&2){let n;ce(n=Ce())&&(i.jsonEditorComponent=n.first)}},decls:9,vars:3,consts:[["mat-dialog-title","",1,"dialog-title"],[1,"tool-categories-container"],[1,"args-editor-container"],["align","end"],[1,"tool-category"],[1,"category-title"],[1,"tool-list"],[1,"tool-item",3,"selected"],[1,"tool-item",3,"click"],[1,"tool-icon"],[1,"tool-name"],[1,"args-editor-title"],[3,"jsonString"],["mat-button",""],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"h2",0),V(1,$FA,1,1)(2,A_A,1,1),w(),m(3,"mat-dialog-content"),V(4,i_A,3,0,"div",1)(5,n_A,4,1,"div",2),w(),m(6,"mat-dialog-actions",3),V(7,a_A,3,2)(8,r_A,4,1),w()),A&2&&(p(),W(i.showArgsEditor?1:2),p(3),W(i.showArgsEditor?5:4),p(3),W(i.showArgsEditor?7:8))},dependencies:[fa,Nn,Ua,yr,fn,or,Fn,jc],styles:[".dialog-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-subhead-color)!important;font-family:Google Sans;font-size:24px}.tool-categories-container[_ngcontent-%COMP%]{padding:16px 0}.tool-category[_ngcontent-%COMP%]{margin-bottom:24px}.tool-category[_ngcontent-%COMP%]:last-child{margin-bottom:0}.category-title[_ngcontent-%COMP%]{font-family:Google Sans;font-size:16px;font-weight:500;color:var(--mdc-dialog-supporting-text-color);margin:0 0 12px;padding-left:8px}.tool-list[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.tool-item[_ngcontent-%COMP%]{display:flex;align-items:center;padding:12px 16px;border-radius:8px;cursor:pointer;transition:all .2s ease;background-color:var(--builder-tool-item-background-color);border:1px solid var(--builder-tool-item-border-color);min-width:0}.tool-item[_ngcontent-%COMP%]:hover{background-color:var(--builder-tool-item-hover-background-color)}.tool-item.selected[_ngcontent-%COMP%]{background-color:#8ab4f833;border:1px solid #8ab4f8}.tool-item[_ngcontent-%COMP%] .tool-icon[_ngcontent-%COMP%]{color:#8ab4f8;margin-right:12px;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-item[_ngcontent-%COMP%] .tool-name[_ngcontent-%COMP%]{font-family:Google Sans;font-size:14px;color:var(--mdc-dialog-supporting-text-color)!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.args-editor-container[_ngcontent-%COMP%]{padding:16px 0}.args-editor-title[_ngcontent-%COMP%]{font-family:Google Sans;font-size:16px;font-weight:500;color:var(--mdc-dialog-supporting-text-color);margin:0 0 16px}"]})};function s_A(t,e){if(t&1){let A=JA();qs(0),m(1,"div",6)(2,"div",7),eA("click",function(){Z(A);let n=v();return X(n.toggleToolInfo())}),m(3,"mat-icon",8),K(4,"info"),w(),m(5,"div",9)(6,"span"),K(7,"Tool Information"),w()(),m(8,"button",10)(9,"mat-icon"),K(10),w()()(),m(11,"div",11)(12,"div",12)(13,"div",13),K(14),w(),m(15,"div",14),K(16),w()(),m(17,"div",15)(18,"a",16)(19,"mat-icon"),K(20,"open_in_new"),w(),m(21,"span"),K(22,"View Official Documentation"),w()()()()(),Vs()}if(t&2){let A,i,n,o=v();p(10),qA(o.isToolInfoExpanded?"expand_less":"expand_more"),p(),ae("expanded",o.isToolInfoExpanded),p(3),qA((A=o.getToolInfo())==null?null:A.shortDescription),p(2),qA((i=o.getToolInfo())==null?null:i.detailedDescription),p(2),AA("href",(n=o.getToolInfo())==null?null:n.docLink,Ga)}}function g_A(t,e){t&1&&(m(0,"mat-hint",19),K(1," Start with a letter or underscore, and contain only letters, digits, and underscores. "),w())}function l_A(t,e){if(t&1){let A=JA();m(0,"mat-form-field",2)(1,"mat-label"),K(2),w(),m(3,"input",17),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.inputValue,n)||(o.inputValue=n),X(n)}),eA("keydown",function(n){Z(A);let o=v();return X(o.onKeyDown(n))}),w(),vt(4,g_A,2,0,"mat-hint",18),w()}if(t&2){let A=v();p(2),qA(A.data.inputLabel||"Input"),p(),Qo("ngModel",A.inputValue),AA("placeholder",A.data.inputPlaceholder||"Enter value"),p(),AA("ngIf",!A.isInputValid())}}var qc=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.inputValue=A.inputValue||""}inputValue="";isToolInfoExpanded=!1;isInputValid(){let e=this.inputValue.trim();return!(!e||!/^[a-zA-Z_]/.test(e)||!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}onCancel(){this.dialogRef.close()}onConfirm(){if(this.data.showInput){let e=this.inputValue.trim();if(!this.isInputValid())return;this.dialogRef.close(e)}else this.dialogRef.close("confirm")}onKeyDown(e){e.key==="Enter"&&this.data.showInput&&this.onConfirm()}getToolInfo(){if(this.data.toolType)return uc.getToolDetailedInfo(this.data.toolType)}toggleToolInfo(){this.isToolInfoExpanded=!this.isToolInfoExpanded}static \u0275fac=function(A){return new(A||t)(Ct(Po),Ct(ka))};static \u0275cmp=kA({type:t,selectors:[["app-confirmation-dialog"]],decls:12,vars:6,consts:[["mat-dialog-title",""],[4,"ngIf"],[2,"width","100%","margin-top","16px"],["align","end"],["mat-button","",3,"click"],["mat-button","","color","primary","cdkFocusInitial","",3,"click","disabled"],[1,"tool-info-container"],[1,"tool-info-header",3,"click"],[1,"tool-info-icon"],[1,"tool-info-title"],["mat-icon-button","","type","button","aria-label","Toggle tool information",1,"tool-info-toggle"],[1,"tool-info-body"],[1,"tool-info-content"],[1,"tool-info-short"],[1,"tool-info-detailed"],[1,"tool-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"tool-info-link",3,"href"],["matInput","","cdkFocusInitial","",3,"ngModelChange","keydown","ngModel","placeholder"],["style","font-size: 11px; color: #666;",4,"ngIf"],[2,"font-size","11px","color","#666"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1),w(),m(2,"mat-dialog-content"),vt(3,s_A,23,6,"ng-container",1),m(4,"p"),K(5),w(),V(6,l_A,5,4,"mat-form-field",2),w(),m(7,"mat-dialog-actions",3)(8,"button",4),eA("click",function(){return i.onCancel()}),K(9,"Cancel"),w(),m(10,"button",5),eA("click",function(){return i.onConfirm()}),K(11),w()()),A&2&&(p(),qA(i.data.title),p(2),AA("ngIf",i.data.showToolInfo&&i.getToolInfo()),p(2),qA(i.data.message),p(),W(i.data.showInput?6:-1),p(4),AA("disabled",i.data.showInput&&!i.isInputValid()),p(),_e(" ",i.data.confirmButtonText||"Confirm"," "))},dependencies:[fa,o0,Fs,Fn,Ma,fn,Ua,yr,or,Yr,ta,Zl,R1,rl,Ka,Nn,uo,fo,ba],styles:["mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px;color:var(--mdc-dialog-supporting-text-color)}mat-dialog-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)}[_nghost-%COMP%] .mat-mdc-form-field{--mat-form-field-filled-container-color: var(--builder-form-field-background-color);--mat-form-field-filled-label-text-color: var(--mdc-dialog-supporting-text-color);--mat-form-field-filled-focus-label-text-color: var(--builder-text-link-color);--mat-form-field-filled-hover-label-text-color: var(--mdc-dialog-supporting-text-color)}[_nghost-%COMP%] .mat-mdc-input-element{color:var(--mdc-dialog-supporting-text-color)!important;caret-color:var(--mdc-dialog-supporting-text-color)!important}[_nghost-%COMP%] .mat-mdc-input-element::placeholder{color:var(--builder-text-muted-color)!important;opacity:0!important}[_nghost-%COMP%] .mat-mdc-input-element:focus::placeholder{opacity:.6!important}[_nghost-%COMP%] .mat-mdc-form-field-hint{color:var(--builder-text-muted-color)!important}.tool-info-container[_ngcontent-%COMP%]{background-color:#8ab4f814;border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.tool-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.tool-info-header[_ngcontent-%COMP%]:hover .tool-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.tool-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.tool-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.tool-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.tool-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.tool-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.tool-info-content[_ngcontent-%COMP%]{flex:1}.tool-info-short[_ngcontent-%COMP%]{font-weight:500;color:var(--mdc-dialog-supporting-text-color)!important;margin-bottom:8px;line-height:1.4}.tool-info-detailed[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;font-size:14px;line-height:1.5}.tool-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.tool-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.tool-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.tool-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};var c_A=["mat-menu-item",""],C_A=[[["mat-icon"],["","matMenuItemIcon",""]],"*"],I_A=["mat-icon, [matMenuItemIcon]","*"];function d_A(t,e){t&1&&(Qt(),m(0,"svg",2),GA(1,"polygon",3),w())}var B_A=["*"];function E_A(t,e){if(t&1){let A=JA();ci(0,"div",0),f2("click",function(){Z(A);let n=v();return X(n.closed.emit("click"))})("animationstart",function(n){Z(A);let o=v();return X(o._onAnimationStart(n.animationName))})("animationend",function(n){Z(A);let o=v();return X(o._onAnimationDone(n.animationName))})("animationcancel",function(n){Z(A);let o=v();return X(o._onAnimationDone(n.animationName))}),ci(1,"div",1),He(2),fi()()}if(t&2){let A=v();zo(A._classList),ae("mat-menu-panel-animations-disabled",A._animationsDisabled)("mat-menu-panel-exit-animation",A._panelAnimationState==="void")("mat-menu-panel-animating",A._isAnimating()),vo("id",A.panelId),ie("aria-label",A.ariaLabel||null)("aria-labelledby",A.ariaLabelledby||null)("aria-describedby",A.ariaDescribedby||null)}}var EG=new yA("MAT_MENU_PANEL"),l2=(()=>{class t{_elementRef=h(ge);_document=h(Xt);_focusMonitor=h(nr);_parentMenu=h(EG,{optional:!0});_changeDetectorRef=h(mt);role="menuitem";disabled=!1;disableRipple=!1;_hovered=new $A;_focused=new $A;_highlighted=!1;_triggersSubmenu=!1;constructor(){h(Xn).load(Ir),this._parentMenu?.addItem?.(this)}focus(A,i){this._focusMonitor&&A?this._focusMonitor.focusVia(this._getHostElement(),A,i):this._getHostElement().focus(i),this._focused.next(this)}ngAfterViewInit(){this._focusMonitor&&this._focusMonitor.monitor(this._elementRef,!1)}ngOnDestroy(){this._focusMonitor&&this._focusMonitor.stopMonitoring(this._elementRef),this._parentMenu&&this._parentMenu.removeItem&&this._parentMenu.removeItem(this),this._hovered.complete(),this._focused.complete()}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._elementRef.nativeElement}_checkDisabled(A){this.disabled&&(A.preventDefault(),A.stopPropagation())}_handleMouseEnter(){this._hovered.next(this)}getLabel(){let A=this._elementRef.nativeElement.cloneNode(!0),i=A.querySelectorAll("mat-icon, .material-icons");for(let n=0;n({overlapTrigger:!1,xPosition:"after",yPosition:"below",backdropClass:"cdk-overlay-transparent-backdrop"})}),BG="_mat-menu-enter",xv="_mat-menu-exit",X0=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(mt);_injector=h(ft);_keyManager;_xPosition;_yPosition;_firstItemFocusRef;_exitFallbackTimeout;_animationsDisabled=qi();_allItems;_directDescendantItems=new nl;_classList={};_panelAnimationState="void";_animationDone=new $A;_isAnimating=jA(!1);parentMenu;direction;overlayPanelClass;backdropClass;ariaLabel;ariaLabelledby;ariaDescribedby;get xPosition(){return this._xPosition}set xPosition(A){this._xPosition=A,this.setPositionClasses()}get yPosition(){return this._yPosition}set yPosition(A){this._yPosition=A,this.setPositionClasses()}templateRef;items;lazyContent;overlapTrigger=!1;hasBackdrop;set panelClass(A){let i=this._previousPanelClass,n=gA({},this._classList);i&&i.length&&i.split(" ").forEach(o=>{n[o]=!1}),this._previousPanelClass=A,A&&A.length&&(A.split(" ").forEach(o=>{n[o]=!0}),this._elementRef.nativeElement.className=""),this._classList=n}_previousPanelClass;get classList(){return this.panelClass}set classList(A){this.panelClass=A}closed=new WA;close=this.closed;panelId=h(an).getId("mat-menu-panel-");constructor(){let A=h(h_A);this.overlayPanelClass=A.overlayPanelClass||"",this._xPosition=A.xPosition,this._yPosition=A.yPosition,this.backdropClass=A.backdropClass,this.overlapTrigger=A.overlapTrigger,this.hasBackdrop=A.hasBackdrop}ngOnInit(){this.setPositionClasses()}ngAfterContentInit(){this._updateDirectDescendants(),this._keyManager=new s0(this._directDescendantItems).withWrap().withTypeAhead().withHomeAndEnd(),this._keyManager.tabOut.subscribe(()=>this.closed.emit("tab")),this._directDescendantItems.changes.pipe(cn(this._directDescendantItems),ki(A=>hi(...A.map(i=>i._focused)))).subscribe(A=>this._keyManager.updateActiveItem(A)),this._directDescendantItems.changes.subscribe(A=>{let i=this._keyManager;if(this._panelAnimationState==="enter"&&i.activeItem?._hasFocus()){let n=A.toArray(),o=Math.max(0,Math.min(n.length-1,i.activeItemIndex||0));n[o]&&!n[o].disabled?i.setActiveItem(o):i.setNextItemActive()}})}ngOnDestroy(){this._keyManager?.destroy(),this._directDescendantItems.destroy(),this.closed.complete(),this._firstItemFocusRef?.destroy(),clearTimeout(this._exitFallbackTimeout)}_hovered(){return this._directDescendantItems.changes.pipe(cn(this._directDescendantItems),ki(i=>hi(...i.map(n=>n._hovered))))}addItem(A){}removeItem(A){}_handleKeydown(A){let i=A.keyCode,n=this._keyManager;switch(i){case 27:ma(A)||(A.preventDefault(),this.closed.emit("keydown"));break;case 37:this.parentMenu&&this.direction==="ltr"&&this.closed.emit("keydown");break;case 39:this.parentMenu&&this.direction==="rtl"&&this.closed.emit("keydown");break;default:(i===38||i===40)&&n.setFocusOrigin("keyboard"),n.onKeydown(A);return}}focusFirstItem(A="program"){this._firstItemFocusRef?.destroy(),this._firstItemFocusRef=Yn(()=>{let i=this._resolvePanel();if(!i||!i.contains(document.activeElement)){let n=this._keyManager;n.setFocusOrigin(A).setFirstItemActive(),!n.activeItem&&i&&i.focus()}},{injector:this._injector})}resetActiveItem(){this._keyManager.setActiveItem(-1)}setElevation(A){}setPositionClasses(A=this.xPosition,i=this.yPosition){this._classList=be(gA({},this._classList),{"mat-menu-before":A==="before","mat-menu-after":A==="after","mat-menu-above":i==="above","mat-menu-below":i==="below"}),this._changeDetectorRef.markForCheck()}_onAnimationDone(A){let i=A===xv;(i||A===BG)&&(i&&(clearTimeout(this._exitFallbackTimeout),this._exitFallbackTimeout=void 0),this._animationDone.next(i?"void":"enter"),this._isAnimating.set(!1))}_onAnimationStart(A){(A===BG||A===xv)&&this._isAnimating.set(!0)}_setIsOpen(A){if(this._panelAnimationState=A?"enter":"void",A){if(this._keyManager.activeItemIndex===0){let i=this._resolvePanel();i&&(i.scrollTop=0)}}else this._animationsDisabled||(this._exitFallbackTimeout=setTimeout(()=>this._onAnimationDone(xv),200));this._animationsDisabled&&setTimeout(()=>{this._onAnimationDone(A?BG:xv)}),this._changeDetectorRef.markForCheck()}_updateDirectDescendants(){this._allItems.changes.pipe(cn(this._allItems)).subscribe(A=>{this._directDescendantItems.reset(A.filter(i=>i._parentMenu===this)),this._directDescendantItems.notifyOnChanges()})}_resolvePanel(){let A=null;return this._directDescendantItems.length&&(A=this._directDescendantItems.first._getHostElement().closest('[role="menu"]')),A}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-menu"]],contentQueries:function(i,n,o){if(i&1&&ua(o,Q_A,5)(o,l2,5)(o,l2,4),i&2){let a;ce(a=Ce())&&(n.lazyContent=a.first),ce(a=Ce())&&(n._allItems=a),ce(a=Ce())&&(n.items=a)}},viewQuery:function(i,n){if(i&1&&ai(Tn,5),i&2){let o;ce(o=Ce())&&(n.templateRef=o.first)}},hostVars:3,hostBindings:function(i,n){i&2&&ie("aria-label",null)("aria-labelledby",null)("aria-describedby",null)},inputs:{backdropClass:"backdropClass",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],xPosition:"xPosition",yPosition:"yPosition",overlapTrigger:[2,"overlapTrigger","overlapTrigger",he],hasBackdrop:[2,"hasBackdrop","hasBackdrop",A=>A==null?null:he(A)],panelClass:[0,"class","panelClass"],classList:"classList"},outputs:{closed:"closed",close:"close"},exportAs:["matMenu"],features:[It([{provide:EG,useExisting:t}])],ngContentSelectors:B_A,decls:1,vars:0,consts:[["tabindex","-1","role","menu",1,"mat-mdc-menu-panel",3,"click","animationstart","animationend","animationcancel","id"],[1,"mat-mdc-menu-content"]],template:function(i,n){i&1&&(Ht(),rp(0,E_A,3,12,"ng-template"))},styles:[`mat-menu{display:none}.mat-mdc-menu-content{margin:0;padding:8px 0;outline:0}.mat-mdc-menu-content,.mat-mdc-menu-content .mat-mdc-menu-item .mat-mdc-menu-item-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;flex:1;white-space:normal;font-family:var(--mat-menu-item-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-menu-item-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-menu-item-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-menu-item-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-menu-item-label-text-weight, var(--mat-sys-label-large-weight))}@keyframes _mat-menu-enter{from{opacity:0;transform:scale(0.8)}to{opacity:1;transform:none}}@keyframes _mat-menu-exit{from{opacity:1}to{opacity:0}}.mat-mdc-menu-panel{min-width:112px;max-width:280px;overflow:auto;box-sizing:border-box;outline:0;animation:_mat-menu-enter 120ms cubic-bezier(0, 0, 0.2, 1);border-radius:var(--mat-menu-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-menu-container-color, var(--mat-sys-surface-container));box-shadow:var(--mat-menu-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));will-change:transform,opacity}.mat-mdc-menu-panel.mat-menu-panel-exit-animation{animation:_mat-menu-exit 100ms 25ms linear forwards}.mat-mdc-menu-panel.mat-menu-panel-animations-disabled{animation:none}.mat-mdc-menu-panel.mat-menu-panel-animating{pointer-events:none}.mat-mdc-menu-panel.mat-menu-panel-animating:has(.mat-mdc-menu-content:empty){display:none}@media(forced-colors: active){.mat-mdc-menu-panel{outline:solid 1px}}.mat-mdc-menu-panel .mat-divider{border-top-color:var(--mat-menu-divider-color, var(--mat-sys-surface-variant));margin-bottom:var(--mat-menu-divider-bottom-spacing, 8px);margin-top:var(--mat-menu-divider-top-spacing, 8px)}.mat-mdc-menu-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;cursor:pointer;width:100%;text-align:left;box-sizing:border-box;color:inherit;font-size:inherit;background:none;text-decoration:none;margin:0;min-height:48px;padding-left:var(--mat-menu-item-leading-spacing, 12px);padding-right:var(--mat-menu-item-trailing-spacing, 12px);-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-menu-item::-moz-focus-inner{border:0}[dir=rtl] .mat-mdc-menu-item{padding-left:var(--mat-menu-item-trailing-spacing, 12px);padding-right:var(--mat-menu-item-leading-spacing, 12px)}.mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-leading-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-trailing-spacing, 12px)}[dir=rtl] .mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-trailing-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-leading-spacing, 12px)}.mat-mdc-menu-item,.mat-mdc-menu-item:visited,.mat-mdc-menu-item:link{color:var(--mat-menu-item-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-menu-item .mat-icon-no-color,.mat-mdc-menu-item .mat-mdc-menu-submenu-icon{color:var(--mat-menu-item-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-menu-item[disabled]{cursor:default;opacity:.38}.mat-mdc-menu-item[disabled]::after{display:block;position:absolute;content:"";top:0;left:0;bottom:0;right:0}.mat-mdc-menu-item:focus{outline:0}.mat-mdc-menu-item .mat-icon{flex-shrink:0;margin-right:var(--mat-menu-item-spacing, 12px);height:var(--mat-menu-item-icon-size, 24px);width:var(--mat-menu-item-icon-size, 24px)}[dir=rtl] .mat-mdc-menu-item{text-align:right}[dir=rtl] .mat-mdc-menu-item .mat-icon{margin-right:0;margin-left:var(--mat-menu-item-spacing, 12px)}.mat-mdc-menu-item:not([disabled]):hover{background-color:var(--mat-menu-item-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-menu-item:not([disabled]).cdk-program-focused,.mat-mdc-menu-item:not([disabled]).cdk-keyboard-focused,.mat-mdc-menu-item:not([disabled]).mat-mdc-menu-item-highlighted{background-color:var(--mat-menu-item-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}@media(forced-colors: active){.mat-mdc-menu-item{margin-top:1px}}.mat-mdc-menu-submenu-icon{width:var(--mat-menu-item-icon-size, 24px);height:10px;fill:currentColor;padding-left:var(--mat-menu-item-spacing, 12px)}[dir=rtl] .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing, 12px);padding-left:0}[dir=rtl] .mat-mdc-menu-submenu-icon polygon{transform:scaleX(-1);transform-origin:center}@media(forced-colors: active){.mat-mdc-menu-submenu-icon{fill:CanvasText}}.mat-mdc-menu-item .mat-mdc-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none} +`],encapsulation:2,changeDetection:0})}return t})(),u_A=new yA("mat-menu-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>dC(t)}});var Fh=new WeakMap,f_A=(()=>{class t{_canHaveBackdrop;_element=h(ge);_viewContainerRef=h(Ho);_menuItemInstance=h(l2,{optional:!0,self:!0});_dir=h(xo,{optional:!0});_focusMonitor=h(nr);_ngZone=h(Oe);_injector=h(ft);_scrollStrategy=h(u_A);_changeDetectorRef=h(mt);_animationsDisabled=qi();_portal;_overlayRef=null;_menuOpen=!1;_closingActionsSubscription=Jn.EMPTY;_menuCloseSubscription=Jn.EMPTY;_pendingRemoval;_parentMaterialMenu;_parentInnerPadding;_openedBy=void 0;get _menu(){return this._menuInternal}set _menu(A){A!==this._menuInternal&&(this._menuInternal=A,this._menuCloseSubscription.unsubscribe(),A&&(this._parentMaterialMenu,this._menuCloseSubscription=A.close.subscribe(i=>{this._destroyMenu(i),(i==="click"||i==="tab")&&this._parentMaterialMenu&&this._parentMaterialMenu.closed.emit(i)})),this._menuItemInstance?._setTriggersSubmenu(this._triggersSubmenu()))}_menuInternal=null;constructor(A){this._canHaveBackdrop=A;let i=h(EG,{optional:!0});this._parentMaterialMenu=i instanceof X0?i:void 0}ngOnDestroy(){this._menu&&this._ownsMenu(this._menu)&&Fh.delete(this._menu),this._pendingRemoval?.unsubscribe(),this._menuCloseSubscription.unsubscribe(),this._closingActionsSubscription.unsubscribe(),this._overlayRef&&(this._overlayRef.dispose(),this._overlayRef=null)}get menuOpen(){return this._menuOpen}get dir(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_triggersSubmenu(){return!!(this._menuItemInstance&&this._parentMaterialMenu&&this._menu)}_closeMenu(){this._menu?.close.emit()}_openMenu(A){if(this._triggerIsAriaDisabled())return;let i=this._menu;if(this._menuOpen||!i)return;this._pendingRemoval?.unsubscribe();let n=Fh.get(i);Fh.set(i,this),n&&n!==this&&n._closeMenu();let o=this._createOverlay(i),a=o.getConfig(),r=a.positionStrategy;this._setPosition(i,r),this._canHaveBackdrop?a.hasBackdrop=i.hasBackdrop==null?!this._triggersSubmenu():i.hasBackdrop:a.hasBackdrop=!1,o.hasAttached()||(o.attach(this._getPortal(i)),i.lazyContent?.attach(this.menuData)),this._closingActionsSubscription=this._menuClosingActions().subscribe(()=>this._closeMenu()),i.parentMenu=this._triggersSubmenu()?this._parentMaterialMenu:void 0,i.direction=this.dir,A&&i.focusFirstItem(this._openedBy||"program"),this._setIsMenuOpen(!0),i instanceof X0&&(i._setIsOpen(!0),i._directDescendantItems.changes.pipe(Bt(i.close)).subscribe(()=>{r.withLockedPosition(!1).reapplyLastPosition(),r.withLockedPosition(!0)}))}focus(A,i){this._focusMonitor&&A?this._focusMonitor.focusVia(this._element,A,i):this._element.nativeElement.focus(i)}_destroyMenu(A){let i=this._overlayRef,n=this._menu;!i||!this.menuOpen||(this._closingActionsSubscription.unsubscribe(),this._pendingRemoval?.unsubscribe(),n instanceof X0&&this._ownsMenu(n)?(this._pendingRemoval=n._animationDone.pipe(oo(1)).subscribe(()=>{i.detach(),Fh.has(n)||n.lazyContent?.detach()}),n._setIsOpen(!1)):(i.detach(),n?.lazyContent?.detach()),n&&this._ownsMenu(n)&&Fh.delete(n),this.restoreFocus&&(A==="keydown"||!this._openedBy||!this._triggersSubmenu())&&this.focus(this._openedBy),this._openedBy=void 0,this._setIsMenuOpen(!1))}_setIsMenuOpen(A){A!==this._menuOpen&&(this._menuOpen=A,this._menuOpen?this.menuOpened.emit():this.menuClosed.emit(),this._triggersSubmenu()&&this._menuItemInstance._setHighlighted(A),this._changeDetectorRef.markForCheck())}_createOverlay(A){if(!this._overlayRef){let i=this._getOverlayConfig(A);this._subscribeToPositions(A,i.positionStrategy),this._overlayRef=gc(this._injector,i),this._overlayRef.keydownEvents().subscribe(n=>{this._menu instanceof X0&&this._menu._handleKeydown(n)})}return this._overlayRef}_getOverlayConfig(A){return new rc({positionStrategy:q1(this._injector,this._getOverlayOrigin()).withLockedPosition().withGrowAfterOpen().withTransformOriginOn(".mat-menu-panel, .mat-mdc-menu-panel"),backdropClass:A.backdropClass||"cdk-overlay-transparent-backdrop",panelClass:A.overlayPanelClass,scrollStrategy:this._scrollStrategy(),direction:this._dir||"ltr",disableAnimations:this._animationsDisabled})}_subscribeToPositions(A,i){A.setPositionClasses&&i.positionChanges.subscribe(n=>{this._ngZone.run(()=>{let o=n.connectionPair.overlayX==="start"?"after":"before",a=n.connectionPair.overlayY==="top"?"below":"above";A.setPositionClasses(o,a)})})}_setPosition(A,i){let[n,o]=A.xPosition==="before"?["end","start"]:["start","end"],[a,r]=A.yPosition==="above"?["bottom","top"]:["top","bottom"],[s,g]=[a,r],[l,C]=[n,o],I=0;if(this._triggersSubmenu()){if(C=n=A.xPosition==="before"?"start":"end",o=l=n==="end"?"start":"end",this._parentMaterialMenu){if(this._parentInnerPadding==null){let d=this._parentMaterialMenu.items.first;this._parentInnerPadding=d?d._getHostElement().offsetTop:0}I=a==="bottom"?this._parentInnerPadding:-this._parentInnerPadding}}else A.overlapTrigger||(s=a==="top"?"bottom":"top",g=r==="top"?"bottom":"top");i.withPositions([{originX:n,originY:s,overlayX:l,overlayY:a,offsetY:I},{originX:o,originY:s,overlayX:C,overlayY:a,offsetY:I},{originX:n,originY:g,overlayX:l,overlayY:r,offsetY:-I},{originX:o,originY:g,overlayX:C,overlayY:r,offsetY:-I}])}_menuClosingActions(){let A=this._getOutsideClickStream(this._overlayRef),i=this._overlayRef.detachments(),n=this._parentMaterialMenu?this._parentMaterialMenu.closed:se(),o=this._parentMaterialMenu?this._parentMaterialMenu._hovered().pipe(Ze(a=>this._menuOpen&&a!==this._menuItemInstance)):se();return hi(A,n,o,i)}_getPortal(A){return(!this._portal||this._portal.templateRef!==A.templateRef)&&(this._portal=new Is(A.templateRef,this._viewContainerRef)),this._portal}_ownsMenu(A){return Fh.get(A)===this}_triggerIsAriaDisabled(){return he(this._element.nativeElement.getAttribute("aria-disabled"))}static \u0275fac=function(i){np()};static \u0275dir=OA({type:t})}return t})(),_h=(()=>{class t extends f_A{_cleanupTouchstart;_hoverSubscription=Jn.EMPTY;get _deprecatedMatMenuTriggerFor(){return this.menu}set _deprecatedMatMenuTriggerFor(A){this.menu=A}get menu(){return this._menu}set menu(A){this._menu=A}menuData;restoreFocus=!0;menuOpened=new WA;onMenuOpen=this.menuOpened;menuClosed=new WA;onMenuClose=this.menuClosed;constructor(){super(!0);let A=h(Fi);this._cleanupTouchstart=A.listen(this._element.nativeElement,"touchstart",i=>{M1(i)||(this._openedBy="touch")},{passive:!0})}triggersSubmenu(){return super._triggersSubmenu()}toggleMenu(){return this.menuOpen?this.closeMenu():this.openMenu()}openMenu(){this._openMenu(!0)}closeMenu(){this._closeMenu()}updatePosition(){this._overlayRef?.updatePosition()}ngAfterContentInit(){this._handleHover()}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTouchstart(),this._hoverSubscription.unsubscribe()}_getOverlayOrigin(){return this._element}_getOutsideClickStream(A){return A.backdropClick()}_handleMousedown(A){b1(A)||(this._openedBy=A.button===0?"mouse":void 0,this.triggersSubmenu()&&A.preventDefault())}_handleKeydown(A){let i=A.keyCode;(i===13||i===32)&&(this._openedBy="keyboard"),this.triggersSubmenu()&&(i===39&&this.dir==="ltr"||i===37&&this.dir==="rtl")&&(this._openedBy="keyboard",this.openMenu())}_handleClick(A){this.triggersSubmenu()?(A.stopPropagation(),this.openMenu()):this.toggleMenu()}_handleHover(){this.triggersSubmenu()&&this._parentMaterialMenu&&(this._hoverSubscription=this._parentMaterialMenu._hovered().subscribe(A=>{A===this._menuItemInstance&&!A.disabled&&this._parentMaterialMenu?._panelAnimationState!=="void"&&(this._openedBy="mouse",this._openMenu(!1))}))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","mat-menu-trigger-for",""],["","matMenuTriggerFor",""]],hostAttrs:[1,"mat-mdc-menu-trigger"],hostVars:3,hostBindings:function(i,n){i&1&&eA("click",function(a){return n._handleClick(a)})("mousedown",function(a){return n._handleMousedown(a)})("keydown",function(a){return n._handleKeydown(a)}),i&2&&ie("aria-haspopup",n.menu?"menu":null)("aria-expanded",n.menuOpen)("aria-controls",n.menuOpen?n.menu==null?null:n.menu.panelId:null)},inputs:{_deprecatedMatMenuTriggerFor:[0,"mat-menu-trigger-for","_deprecatedMatMenuTriggerFor"],menu:[0,"matMenuTriggerFor","menu"],menuData:[0,"matMenuTriggerData","menuData"],restoreFocus:[0,"matMenuTriggerRestoreFocus","restoreFocus"]},outputs:{menuOpened:"menuOpened",onMenuOpen:"onMenuOpen",menuClosed:"menuClosed",onMenuClose:"onMenuClose"},exportAs:["matMenuTrigger"],features:[dt]})}return t})();var caA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[S2,ll,Gi,C0]})}return t})();var daA=["*",[["mat-chip-avatar"],["","matChipAvatar",""]],[["mat-chip-trailing-icon"],["","matChipRemove",""],["","matChipTrailingIcon",""]]],BaA=["*","mat-chip-avatar, [matChipAvatar]","mat-chip-trailing-icon,[matChipRemove],[matChipTrailingIcon]"];function p_A(t,e){t&1&&(m(0,"span",3),He(1,1),w())}function w_A(t,e){t&1&&(m(0,"span",6),He(1,2),w())}function D_A(t,e){t&1&&(m(0,"span",3),He(1,1),m(2,"span",7),Qt(),m(3,"svg",8),GA(4,"path",9),w()()())}function y_A(t,e){t&1&&(m(0,"span",6),He(1,2),w())}var v_A=`.mdc-evolution-chip,.mdc-evolution-chip__cell,.mdc-evolution-chip__action{display:inline-flex;align-items:center}.mdc-evolution-chip{position:relative;max-width:100%}.mdc-evolution-chip__cell,.mdc-evolution-chip__action{height:100%}.mdc-evolution-chip__cell--primary{flex-basis:100%;overflow-x:hidden}.mdc-evolution-chip__cell--trailing{flex:1 0 auto}.mdc-evolution-chip__action{align-items:center;background:none;border:none;box-sizing:content-box;cursor:pointer;display:inline-flex;justify-content:center;outline:none;padding:0;text-decoration:none;color:inherit}.mdc-evolution-chip__action--presentational{cursor:auto}.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{pointer-events:none}@media(forced-colors: active){.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{forced-color-adjust:none}}.mdc-evolution-chip__action--primary{font:inherit;letter-spacing:inherit;white-space:inherit;overflow-x:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-outline-width, 1px);border-radius:var(--mat-chip-container-shape-radius, 8px);box-sizing:border-box;content:"";height:100%;left:0;position:absolute;pointer-events:none;top:0;width:100%;z-index:1;border-style:solid}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-outline-color, var(--mat-sys-outline))}.mdc-evolution-chip__action--primary:not(.mdc-evolution-chip__action--presentational):not(.mdc-ripple-upgraded):focus::before{border-color:var(--mat-chip-focus-outline-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-basic-chip .mdc-evolution-chip__action--primary{font:inherit}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip__action--secondary{position:relative;overflow:visible}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip__text-label{-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__text-label{font-family:var(--mat-chip-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-chip-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-chip-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-chip-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-chip-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-label-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label,.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:var(--mat-chip-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-evolution-chip__graphic{align-items:center;display:inline-flex;justify-content:center;overflow:hidden;pointer-events:none;position:relative;flex:1 0 auto}.mat-mdc-standard-chip .mdc-evolution-chip__graphic{width:var(--mat-chip-with-avatar-avatar-size, 24px);height:var(--mat-chip-with-avatar-avatar-size, 24px);font-size:var(--mat-chip-with-avatar-avatar-size, 24px)}.mdc-evolution-chip--selecting .mdc-evolution-chip__graphic{transition:width 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--selected):not(.mdc-evolution-chip--with-primary-icon) .mdc-evolution-chip__graphic{width:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__graphic{padding-left:0}.mdc-evolution-chip__checkmark{position:absolute;opacity:0;top:50%;left:50%;height:20px;width:20px}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark{transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transform:translate(-75%, -50%)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{transform:translate(-50%, -50%);opacity:1}.mdc-evolution-chip__checkmark-svg{display:block}.mdc-evolution-chip__checkmark-path{stroke-width:2px;stroke-dasharray:29.7833385;stroke-dashoffset:29.7833385;stroke:currentColor}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark-path{transition:stroke-dashoffset 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark-path{stroke-dashoffset:0}@media(forced-colors: active){.mdc-evolution-chip__checkmark-path{stroke:CanvasText !important}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--trailing{height:18px;width:18px;font-size:18px}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove{opacity:calc(var(--mat-chip-trailing-action-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove:focus{opacity:calc(var(--mat-chip-trailing-action-focus-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mat-mdc-standard-chip{border-radius:var(--mat-chip-container-shape-radius, 8px);height:var(--mat-chip-container-height, 32px)}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-container-color, transparent)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{background-color:var(--mat-chip-elevated-disabled-container-color)}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled{background-color:var(--mat-chip-flat-disabled-selected-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}@media(forced-colors: active){.mat-mdc-standard-chip{outline:solid 1px}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--primary{border-radius:var(--mat-chip-with-avatar-avatar-shape-radius, 24px);width:var(--mat-chip-with-icon-icon-size, 18px);height:var(--mat-chip-with-icon-icon-size, 18px);font-size:var(--mat-chip-with-icon-icon-size, 18px)}.mdc-evolution-chip--selected .mdc-evolution-chip__icon--primary{opacity:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-highlighted{--mat-chip-with-icon-icon-color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));--mat-chip-elevated-container-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));--mat-chip-label-text-color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));--mat-chip-outline-width: var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-selected .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-hover-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip-focus-overlay .mat-mdc-chip-selected:hover,.mat-mdc-chip-highlighted:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-hover-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-chip-selected.cdk-focused .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-evolution-chip--disabled:not(.mdc-evolution-chip--selected) .mat-mdc-chip-avatar{opacity:var(--mat-chip-with-avatar-disabled-avatar-opacity, 0.38)}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{opacity:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38)}.mdc-evolution-chip--disabled.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{opacity:var(--mat-chip-with-icon-disabled-icon-opacity, 0.38)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{opacity:var(--mat-chip-disabled-container-opacity, 1)}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-trailing-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-edit,.mat-mdc-chip-remove{opacity:var(--mat-chip-trailing-action-opacity, 1)}.mat-mdc-chip-edit:focus,.mat-mdc-chip-remove:focus{opacity:var(--mat-chip-trailing-action-focus-opacity, 1)}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{background-color:var(--mat-chip-trailing-action-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-edit:hover::after,.mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-chip-edit:focus::after,.mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip-selected .mat-mdc-chip-remove::after,.mat-mdc-chip-highlighted .mat-mdc-chip-remove::after{background-color:var(--mat-chip-selected-trailing-action-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:focus::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:hover::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-standard-chip{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-standard-chip .mat-mdc-chip-graphic,.mat-mdc-standard-chip .mat-mdc-chip-trailing-icon{box-sizing:content-box}.mat-mdc-standard-chip._mat-animation-noopable,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__graphic,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark-path{transition-duration:1ms;animation-duration:1ms}.mat-mdc-chip-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;opacity:0;border-radius:inherit;transition:opacity 150ms linear}._mat-animation-noopable .mat-mdc-chip-focus-overlay{transition:none}.mat-mdc-basic-chip .mat-mdc-chip-focus-overlay{display:none}.mat-mdc-chip .mat-ripple.mat-mdc-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-chip-avatar{text-align:center;line-height:1;color:var(--mat-chip-with-icon-icon-color, currentColor)}.mat-mdc-chip{position:relative;z-index:0}.mat-mdc-chip-action-label{text-align:left;z-index:1}[dir=rtl] .mat-mdc-chip-action-label{text-align:right}.mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{position:relative}.mat-mdc-chip-action-label .mat-mdc-chip-primary-focus-indicator{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.mat-mdc-chip-action-label .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-chip-edit::before,.mat-mdc-chip-remove::before{margin:calc(var(--mat-focus-indicator-border-width, 3px)*-1);left:8px;right:8px}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{content:"";display:block;opacity:0;position:absolute;top:-3px;bottom:-3px;left:5px;right:5px;border-radius:50%;box-sizing:border-box;padding:12px;margin:-12px;background-clip:content-box}.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{width:18px;height:18px;font-size:18px;box-sizing:content-box}.mat-chip-edit-input{cursor:text;display:inline-block;color:inherit;outline:0}@media(forced-colors: active){.mat-mdc-chip-selected:not(.mat-mdc-chip-multiple){outline-width:3px}}.mat-mdc-chip-action:focus-visible .mat-focus-indicator::before{content:""}.mdc-evolution-chip__icon,.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{min-height:fit-content}img.mdc-evolution-chip__icon{min-height:0} +`;var EaA=["*"],b_A=`.mat-mdc-chip-set{display:flex}.mat-mdc-chip-set:focus{outline:none}.mat-mdc-chip-set .mdc-evolution-chip-set__chips{min-width:100%;margin-left:-8px;margin-right:0}.mat-mdc-chip-set .mdc-evolution-chip{margin:4px 0 4px 8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0;margin-right:-8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip{margin-left:0;margin-right:8px}.mdc-evolution-chip-set__chips{display:flex;flex-flow:wrap;min-width:0}.mat-mdc-chip-set-stacked{flex-direction:column;align-items:flex-start}.mat-mdc-chip-set-stacked .mat-mdc-chip{width:100%}.mat-mdc-chip-set-stacked .mdc-evolution-chip__graphic{flex-grow:0}.mat-mdc-chip-set-stacked .mdc-evolution-chip__action--primary{flex-basis:100%;justify-content:start}input.mat-mdc-chip-input{flex:1 0 150px;margin-left:8px}[dir=rtl] input.mat-mdc-chip-input{margin-left:0;margin-right:8px}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-moz-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-webkit-input-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input:-ms-input-placeholder{opacity:1}.mat-mdc-chip-set+input.mat-mdc-chip-input{margin-left:0;margin-right:0} +`,fG=new yA("mat-chips-default-options",{providedIn:"root",factory:()=>({separatorKeyCodes:[13]})}),QG=new yA("MatChipAvatar"),CaA=new yA("MatChipTrailingIcon"),IaA=new yA("MatChipEdit"),hG=new yA("MatChipRemove"),mG=new yA("MatChip"),QaA=(()=>{class t{_elementRef=h(ge);_parentChip=h(mG);_isPrimary=!0;_isLeading=!1;get disabled(){return this._disabled||this._parentChip?.disabled||!1}set disabled(A){this._disabled=A}_disabled=!1;tabIndex=-1;_allowFocusWhenDisabled=!1;_getDisabledAttribute(){return this.disabled&&!this._allowFocusWhenDisabled?"":null}constructor(){h(Xn).load(Ir),this._elementRef.nativeElement.nodeName==="BUTTON"&&this._elementRef.nativeElement.setAttribute("type","button")}focus(){this._elementRef.nativeElement.focus()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matChipContent",""]],hostAttrs:[1,"mat-mdc-chip-action","mdc-evolution-chip__action","mdc-evolution-chip__action--presentational"],hostVars:8,hostBindings:function(i,n){i&2&&(ie("disabled",n._getDisabledAttribute())("aria-disabled",n.disabled),ae("mdc-evolution-chip__action--primary",n._isPrimary)("mdc-evolution-chip__action--secondary",!n._isPrimary)("mdc-evolution-chip__action--trailing",!n._isPrimary&&!n._isLeading))},inputs:{disabled:[2,"disabled","disabled",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?-1:en(A)],_allowFocusWhenDisabled:"_allowFocusWhenDisabled"}})}return t})(),pG=(()=>{class t extends QaA{_getTabindex(){return this.disabled&&!this._allowFocusWhenDisabled?null:this.tabIndex.toString()}_handleClick(A){!this.disabled&&this._isPrimary&&(A.preventDefault(),this._parentChip._handlePrimaryActionInteraction())}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!this.disabled&&this._isPrimary&&!this._parentChip._isEditing&&(A.preventDefault(),this._parentChip._handlePrimaryActionInteraction())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matChipAction",""]],hostVars:3,hostBindings:function(i,n){i&1&&eA("click",function(a){return n._handleClick(a)})("keydown",function(a){return n._handleKeydown(a)}),i&2&&(ie("tabindex",n._getTabindex()),ae("mdc-evolution-chip__action--presentational",!1))},features:[dt]})}return t})(),haA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-chip-avatar"],["","matChipAvatar",""]],hostAttrs:["role","img",1,"mat-mdc-chip-avatar","mdc-evolution-chip__icon","mdc-evolution-chip__icon--primary"],features:[It([{provide:QG,useExisting:t}])]})}return t})();var uaA=(()=>{class t extends pG{_isPrimary=!1;_handleClick(A){this.disabled||(A.stopPropagation(),A.preventDefault(),this._parentChip.remove())}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!this.disabled&&(A.stopPropagation(),A.preventDefault(),this._parentChip.remove())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matChipRemove",""]],hostAttrs:["role","button",1,"mat-mdc-chip-remove","mat-mdc-chip-trailing-icon","mat-focus-indicator","mdc-evolution-chip__icon","mdc-evolution-chip__icon--trailing"],hostVars:1,hostBindings:function(i,n){i&2&&ie("aria-hidden",null)},features:[It([{provide:hG,useExisting:t}]),dt]})}return t})(),Im=(()=>{class t{_changeDetectorRef=h(mt);_elementRef=h(ge);_tagName=h(bU);_ngZone=h(Oe);_focusMonitor=h(nr);_globalRippleOptions=h(k2,{optional:!0});_document=h(Xt);_onFocus=new $A;_onBlur=new $A;_isBasicChip=!1;role=null;_hasFocusInternal=!1;_pendingFocus=!1;_actionChanges;_animationsDisabled=qi();_allLeadingIcons;_allTrailingIcons;_allEditIcons;_allRemoveIcons;_hasFocus(){return this._hasFocusInternal}id=h(an).getId("mat-mdc-chip-");ariaLabel=null;ariaDescription=null;_chipListDisabled=!1;_hadFocusOnRemove=!1;_textElement;get value(){return this._value!==void 0?this._value:this._textElement.textContent.trim()}set value(A){this._value=A}_value;color;removable=!0;highlighted=!1;disableRipple=!1;get disabled(){return this._disabled||this._chipListDisabled}set disabled(A){this._disabled=A}_disabled=!1;removed=new WA;destroyed=new WA;basicChipAttrName="mat-basic-chip";leadingIcon;editIcon;trailingIcon;removeIcon;primaryAction;_rippleLoader=h(Up);_injector=h(ft);constructor(){let A=h(Xn);A.load(Ir),A.load(b2),this._monitorFocus(),this._rippleLoader?.configureRipple(this._elementRef.nativeElement,{className:"mat-mdc-chip-ripple",disabled:this._isRippleDisabled()})}ngOnInit(){this._isBasicChip=this._elementRef.nativeElement.hasAttribute(this.basicChipAttrName)||this._tagName.toLowerCase()===this.basicChipAttrName}ngAfterViewInit(){this._textElement=this._elementRef.nativeElement.querySelector(".mat-mdc-chip-action-label"),this._pendingFocus&&(this._pendingFocus=!1,this.focus())}ngAfterContentInit(){this._actionChanges=hi(this._allLeadingIcons.changes,this._allTrailingIcons.changes,this._allEditIcons.changes,this._allRemoveIcons.changes).subscribe(()=>this._changeDetectorRef.markForCheck())}ngDoCheck(){this._rippleLoader.setDisabled(this._elementRef.nativeElement,this._isRippleDisabled())}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._rippleLoader?.destroyRipple(this._elementRef.nativeElement),this._actionChanges?.unsubscribe(),this.destroyed.emit({chip:this}),this.destroyed.complete()}remove(){this.removable&&(this._hadFocusOnRemove=this._hasFocus(),this.removed.emit({chip:this}))}_isRippleDisabled(){return this.disabled||this.disableRipple||this._animationsDisabled||this._isBasicChip||!this._hasInteractiveActions()||!!this._globalRippleOptions?.disabled}_hasTrailingIcon(){return!!(this.trailingIcon||this.removeIcon)}_handleKeydown(A){(A.keyCode===8&&!A.repeat||A.keyCode===46)&&(A.preventDefault(),this.remove())}focus(){this.disabled||(this.primaryAction?this.primaryAction.focus():this._pendingFocus=!0)}_getSourceAction(A){return this._getActions().find(i=>{let n=i._elementRef.nativeElement;return n===A||n.contains(A)})}_getActions(){let A=[];return this.editIcon&&A.push(this.editIcon),this.primaryAction&&A.push(this.primaryAction),this.removeIcon&&A.push(this.removeIcon),A}_handlePrimaryActionInteraction(){}_hasInteractiveActions(){return this._getActions().length>0}_edit(A){}_monitorFocus(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(A=>{let i=A!==null;i!==this._hasFocusInternal&&(this._hasFocusInternal=i,i?this._onFocus.next({chip:this}):(this._changeDetectorRef.markForCheck(),setTimeout(()=>this._ngZone.run(()=>this._onBlur.next({chip:this})))))})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-basic-chip"],["","mat-basic-chip",""],["mat-chip"],["","mat-chip",""]],contentQueries:function(i,n,o){if(i&1&&ua(o,QG,5)(o,IaA,5)(o,CaA,5)(o,hG,5)(o,QG,5)(o,CaA,5)(o,IaA,5)(o,hG,5),i&2){let a;ce(a=Ce())&&(n.leadingIcon=a.first),ce(a=Ce())&&(n.editIcon=a.first),ce(a=Ce())&&(n.trailingIcon=a.first),ce(a=Ce())&&(n.removeIcon=a.first),ce(a=Ce())&&(n._allLeadingIcons=a),ce(a=Ce())&&(n._allTrailingIcons=a),ce(a=Ce())&&(n._allEditIcons=a),ce(a=Ce())&&(n._allRemoveIcons=a)}},viewQuery:function(i,n){if(i&1&&ai(pG,5),i&2){let o;ce(o=Ce())&&(n.primaryAction=o.first)}},hostAttrs:[1,"mat-mdc-chip"],hostVars:31,hostBindings:function(i,n){i&1&&eA("keydown",function(a){return n._handleKeydown(a)}),i&2&&(vo("id",n.id),ie("role",n.role)("aria-label",n.ariaLabel),zo("mat-"+(n.color||"primary")),ae("mdc-evolution-chip",!n._isBasicChip)("mdc-evolution-chip--disabled",n.disabled)("mdc-evolution-chip--with-trailing-action",n._hasTrailingIcon())("mdc-evolution-chip--with-primary-graphic",n.leadingIcon)("mdc-evolution-chip--with-primary-icon",n.leadingIcon)("mdc-evolution-chip--with-avatar",n.leadingIcon)("mat-mdc-chip-with-avatar",n.leadingIcon)("mat-mdc-chip-highlighted",n.highlighted)("mat-mdc-chip-disabled",n.disabled)("mat-mdc-basic-chip",n._isBasicChip)("mat-mdc-standard-chip",!n._isBasicChip)("mat-mdc-chip-with-trailing-icon",n._hasTrailingIcon())("_mat-animation-noopable",n._animationsDisabled))},inputs:{role:"role",id:"id",ariaLabel:[0,"aria-label","ariaLabel"],ariaDescription:[0,"aria-description","ariaDescription"],value:"value",color:"color",removable:[2,"removable","removable",he],highlighted:[2,"highlighted","highlighted",he],disableRipple:[2,"disableRipple","disableRipple",he],disabled:[2,"disabled","disabled",he]},outputs:{removed:"removed",destroyed:"destroyed"},exportAs:["matChip"],features:[It([{provide:mG,useExisting:t}])],ngContentSelectors:BaA,decls:8,vars:2,consts:[[1,"mat-mdc-chip-focus-overlay"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--primary"],["matChipContent",""],[1,"mdc-evolution-chip__graphic","mat-mdc-chip-graphic"],[1,"mdc-evolution-chip__text-label","mat-mdc-chip-action-label"],[1,"mat-mdc-chip-primary-focus-indicator","mat-focus-indicator"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--trailing"]],template:function(i,n){i&1&&(Ht(daA),GA(0,"span",0),m(1,"span",1)(2,"span",2),V(3,p_A,2,0,"span",3),m(4,"span",4),He(5),GA(6,"span",5),w()()(),V(7,w_A,2,0,"span",6)),i&2&&(p(3),W(n.leadingIcon?3:-1),p(4),W(n._hasTrailingIcon()?7:-1))},dependencies:[QaA],styles:[`.mdc-evolution-chip,.mdc-evolution-chip__cell,.mdc-evolution-chip__action{display:inline-flex;align-items:center}.mdc-evolution-chip{position:relative;max-width:100%}.mdc-evolution-chip__cell,.mdc-evolution-chip__action{height:100%}.mdc-evolution-chip__cell--primary{flex-basis:100%;overflow-x:hidden}.mdc-evolution-chip__cell--trailing{flex:1 0 auto}.mdc-evolution-chip__action{align-items:center;background:none;border:none;box-sizing:content-box;cursor:pointer;display:inline-flex;justify-content:center;outline:none;padding:0;text-decoration:none;color:inherit}.mdc-evolution-chip__action--presentational{cursor:auto}.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{pointer-events:none}@media(forced-colors: active){.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{forced-color-adjust:none}}.mdc-evolution-chip__action--primary{font:inherit;letter-spacing:inherit;white-space:inherit;overflow-x:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-outline-width, 1px);border-radius:var(--mat-chip-container-shape-radius, 8px);box-sizing:border-box;content:"";height:100%;left:0;position:absolute;pointer-events:none;top:0;width:100%;z-index:1;border-style:solid}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-outline-color, var(--mat-sys-outline))}.mdc-evolution-chip__action--primary:not(.mdc-evolution-chip__action--presentational):not(.mdc-ripple-upgraded):focus::before{border-color:var(--mat-chip-focus-outline-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-basic-chip .mdc-evolution-chip__action--primary{font:inherit}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip__action--secondary{position:relative;overflow:visible}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip__text-label{-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__text-label{font-family:var(--mat-chip-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-chip-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-chip-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-chip-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-chip-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-label-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label,.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:var(--mat-chip-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-evolution-chip__graphic{align-items:center;display:inline-flex;justify-content:center;overflow:hidden;pointer-events:none;position:relative;flex:1 0 auto}.mat-mdc-standard-chip .mdc-evolution-chip__graphic{width:var(--mat-chip-with-avatar-avatar-size, 24px);height:var(--mat-chip-with-avatar-avatar-size, 24px);font-size:var(--mat-chip-with-avatar-avatar-size, 24px)}.mdc-evolution-chip--selecting .mdc-evolution-chip__graphic{transition:width 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--selected):not(.mdc-evolution-chip--with-primary-icon) .mdc-evolution-chip__graphic{width:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__graphic{padding-left:0}.mdc-evolution-chip__checkmark{position:absolute;opacity:0;top:50%;left:50%;height:20px;width:20px}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark{transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transform:translate(-75%, -50%)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{transform:translate(-50%, -50%);opacity:1}.mdc-evolution-chip__checkmark-svg{display:block}.mdc-evolution-chip__checkmark-path{stroke-width:2px;stroke-dasharray:29.7833385;stroke-dashoffset:29.7833385;stroke:currentColor}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark-path{transition:stroke-dashoffset 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark-path{stroke-dashoffset:0}@media(forced-colors: active){.mdc-evolution-chip__checkmark-path{stroke:CanvasText !important}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--trailing{height:18px;width:18px;font-size:18px}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove{opacity:calc(var(--mat-chip-trailing-action-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove:focus{opacity:calc(var(--mat-chip-trailing-action-focus-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mat-mdc-standard-chip{border-radius:var(--mat-chip-container-shape-radius, 8px);height:var(--mat-chip-container-height, 32px)}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-container-color, transparent)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{background-color:var(--mat-chip-elevated-disabled-container-color)}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled{background-color:var(--mat-chip-flat-disabled-selected-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}@media(forced-colors: active){.mat-mdc-standard-chip{outline:solid 1px}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--primary{border-radius:var(--mat-chip-with-avatar-avatar-shape-radius, 24px);width:var(--mat-chip-with-icon-icon-size, 18px);height:var(--mat-chip-with-icon-icon-size, 18px);font-size:var(--mat-chip-with-icon-icon-size, 18px)}.mdc-evolution-chip--selected .mdc-evolution-chip__icon--primary{opacity:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-highlighted{--mat-chip-with-icon-icon-color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));--mat-chip-elevated-container-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));--mat-chip-label-text-color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));--mat-chip-outline-width: var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-selected .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-hover-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip-focus-overlay .mat-mdc-chip-selected:hover,.mat-mdc-chip-highlighted:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-hover-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-chip-selected.cdk-focused .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-evolution-chip--disabled:not(.mdc-evolution-chip--selected) .mat-mdc-chip-avatar{opacity:var(--mat-chip-with-avatar-disabled-avatar-opacity, 0.38)}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{opacity:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38)}.mdc-evolution-chip--disabled.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{opacity:var(--mat-chip-with-icon-disabled-icon-opacity, 0.38)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{opacity:var(--mat-chip-disabled-container-opacity, 1)}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-trailing-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-edit,.mat-mdc-chip-remove{opacity:var(--mat-chip-trailing-action-opacity, 1)}.mat-mdc-chip-edit:focus,.mat-mdc-chip-remove:focus{opacity:var(--mat-chip-trailing-action-focus-opacity, 1)}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{background-color:var(--mat-chip-trailing-action-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-edit:hover::after,.mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-chip-edit:focus::after,.mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip-selected .mat-mdc-chip-remove::after,.mat-mdc-chip-highlighted .mat-mdc-chip-remove::after{background-color:var(--mat-chip-selected-trailing-action-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:focus::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:hover::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-standard-chip{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-standard-chip .mat-mdc-chip-graphic,.mat-mdc-standard-chip .mat-mdc-chip-trailing-icon{box-sizing:content-box}.mat-mdc-standard-chip._mat-animation-noopable,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__graphic,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark-path{transition-duration:1ms;animation-duration:1ms}.mat-mdc-chip-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;opacity:0;border-radius:inherit;transition:opacity 150ms linear}._mat-animation-noopable .mat-mdc-chip-focus-overlay{transition:none}.mat-mdc-basic-chip .mat-mdc-chip-focus-overlay{display:none}.mat-mdc-chip .mat-ripple.mat-mdc-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-chip-avatar{text-align:center;line-height:1;color:var(--mat-chip-with-icon-icon-color, currentColor)}.mat-mdc-chip{position:relative;z-index:0}.mat-mdc-chip-action-label{text-align:left;z-index:1}[dir=rtl] .mat-mdc-chip-action-label{text-align:right}.mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{position:relative}.mat-mdc-chip-action-label .mat-mdc-chip-primary-focus-indicator{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.mat-mdc-chip-action-label .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-chip-edit::before,.mat-mdc-chip-remove::before{margin:calc(var(--mat-focus-indicator-border-width, 3px)*-1);left:8px;right:8px}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{content:"";display:block;opacity:0;position:absolute;top:-3px;bottom:-3px;left:5px;right:5px;border-radius:50%;box-sizing:border-box;padding:12px;margin:-12px;background-clip:content-box}.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{width:18px;height:18px;font-size:18px;box-sizing:content-box}.mat-chip-edit-input{cursor:text;display:inline-block;color:inherit;outline:0}@media(forced-colors: active){.mat-mdc-chip-selected:not(.mat-mdc-chip-multiple){outline-width:3px}}.mat-mdc-chip-action:focus-visible .mat-focus-indicator::before{content:""}.mdc-evolution-chip__icon,.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{min-height:fit-content}img.mdc-evolution-chip__icon{min-height:0} +`],encapsulation:2,changeDetection:0})}return t})();var wG=(()=>{class t extends Im{_defaultOptions=h(fG,{optional:!0});chipListSelectable=!0;_chipListMultiple=!1;_chipListHideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get selectable(){return this._selectable&&this.chipListSelectable}set selectable(A){this._selectable=A,this._changeDetectorRef.markForCheck()}_selectable=!0;get selected(){return this._selected}set selected(A){this._setSelectedState(A,!1,!0)}_selected=!1;get ariaSelected(){return this.selectable?this.selected.toString():null}basicChipAttrName="mat-basic-chip-option";selectionChange=new WA;ngOnInit(){super.ngOnInit(),this.role="presentation"}select(){this._setSelectedState(!0,!1,!0)}deselect(){this._setSelectedState(!1,!1,!0)}selectViaInteraction(){this._setSelectedState(!0,!0,!0)}toggleSelected(A=!1){return this._setSelectedState(!this.selected,A,!0),this.selected}_handlePrimaryActionInteraction(){this.disabled||(this.focus(),this.selectable&&this.toggleSelected(!0))}_hasLeadingGraphic(){return this.leadingIcon?!0:!this._chipListHideSingleSelectionIndicator||this._chipListMultiple}_setSelectedState(A,i,n){A!==this.selected&&(this._selected=A,n&&this.selectionChange.emit({source:this,isUserInput:i,selected:this.selected}),this._changeDetectorRef.markForCheck())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-basic-chip-option"],["","mat-basic-chip-option",""],["mat-chip-option"],["","mat-chip-option",""]],hostAttrs:[1,"mat-mdc-chip","mat-mdc-chip-option"],hostVars:37,hostBindings:function(i,n){i&2&&(vo("id",n.id),ie("tabindex",null)("aria-label",null)("aria-description",null)("role",n.role),ae("mdc-evolution-chip",!n._isBasicChip)("mdc-evolution-chip--filter",!n._isBasicChip)("mdc-evolution-chip--selectable",!n._isBasicChip)("mat-mdc-chip-selected",n.selected)("mat-mdc-chip-multiple",n._chipListMultiple)("mat-mdc-chip-disabled",n.disabled)("mat-mdc-chip-with-avatar",n.leadingIcon)("mdc-evolution-chip--disabled",n.disabled)("mdc-evolution-chip--selected",n.selected)("mdc-evolution-chip--selecting",!n._animationsDisabled)("mdc-evolution-chip--with-trailing-action",n._hasTrailingIcon())("mdc-evolution-chip--with-primary-icon",n.leadingIcon)("mdc-evolution-chip--with-primary-graphic",n._hasLeadingGraphic())("mdc-evolution-chip--with-avatar",n.leadingIcon)("mat-mdc-chip-highlighted",n.highlighted)("mat-mdc-chip-with-trailing-icon",n._hasTrailingIcon()))},inputs:{selectable:[2,"selectable","selectable",he],selected:[2,"selected","selected",he]},outputs:{selectionChange:"selectionChange"},features:[It([{provide:Im,useExisting:t},{provide:mG,useExisting:t}]),dt],ngContentSelectors:BaA,decls:8,vars:6,consts:[[1,"mat-mdc-chip-focus-overlay"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--primary"],["matChipAction","","role","option",3,"_allowFocusWhenDisabled"],[1,"mdc-evolution-chip__graphic","mat-mdc-chip-graphic"],[1,"mdc-evolution-chip__text-label","mat-mdc-chip-action-label"],[1,"mat-mdc-chip-primary-focus-indicator","mat-focus-indicator"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--trailing"],[1,"mdc-evolution-chip__checkmark"],["viewBox","-2 -3 30 30","focusable","false","aria-hidden","true",1,"mdc-evolution-chip__checkmark-svg"],["fill","none","stroke","currentColor","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-evolution-chip__checkmark-path"]],template:function(i,n){i&1&&(Ht(daA),GA(0,"span",0),m(1,"span",1)(2,"button",2),V(3,D_A,5,0,"span",3),m(4,"span",4),He(5),GA(6,"span",5),w()()(),V(7,y_A,2,0,"span",6)),i&2&&(p(2),AA("_allowFocusWhenDisabled",!0),ie("aria-description",n.ariaDescription)("aria-label",n.ariaLabel)("aria-selected",n.ariaSelected),p(),W(n._hasLeadingGraphic()?3:-1),p(4),W(n._hasTrailingIcon()?7:-1))},dependencies:[pG],styles:[v_A],encapsulation:2,changeDetection:0})}return t})();var DG=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(mt);_dir=h(xo,{optional:!0});_lastDestroyedFocusedChipIndex=null;_keyManager;_destroyed=new $A;_defaultRole="presentation";get chipFocusChanges(){return this._getChipStream(A=>A._onFocus)}get chipDestroyedChanges(){return this._getChipStream(A=>A.destroyed)}get chipRemovedChanges(){return this._getChipStream(A=>A.removed)}get disabled(){return this._disabled}set disabled(A){this._disabled=A,this._syncChipsState()}_disabled=!1;get empty(){return!this._chips||this._chips.length===0}get role(){return this._explicitRole?this._explicitRole:this.empty?null:this._defaultRole}tabIndex=0;set role(A){this._explicitRole=A}_explicitRole=null;get focused(){return this._hasFocusedChip()}_chips;_chipActions=new nl;constructor(){}ngAfterViewInit(){this._setUpFocusManagement(),this._trackChipSetChanges(),this._trackDestroyedFocusedChip()}ngOnDestroy(){this._keyManager?.destroy(),this._chipActions.destroy(),this._destroyed.next(),this._destroyed.complete()}_hasFocusedChip(){return this._chips&&this._chips.some(A=>A._hasFocus())}_syncChipsState(){this._chips?.forEach(A=>{A._chipListDisabled=this._disabled,A._changeDetectorRef.markForCheck()})}focus(){}_handleKeydown(A){this._originatesFromChip(A)&&this._keyManager.onKeydown(A)}_isValidIndex(A){return A>=0&&Athis._elementRef.nativeElement.tabIndex=A))}_getChipStream(A){return this._chips.changes.pipe(cn(null),ki(()=>hi(...this._chips.map(A))))}_originatesFromChip(A){let i=A.target;for(;i&&i!==this._elementRef.nativeElement;){if(i.classList.contains("mat-mdc-chip"))return!0;i=i.parentElement}return!1}_setUpFocusManagement(){this._chips.changes.pipe(cn(this._chips)).subscribe(A=>{let i=[];A.forEach(n=>n._getActions().forEach(o=>i.push(o))),this._chipActions.reset(i),this._chipActions.notifyOnChanges()}),this._keyManager=new s0(this._chipActions).withVerticalOrientation().withHorizontalOrientation(this._dir?this._dir.value:"ltr").withHomeAndEnd().skipPredicate(A=>this._skipPredicate(A)),this.chipFocusChanges.pipe(Bt(this._destroyed)).subscribe(({chip:A})=>{let i=A._getSourceAction(document.activeElement);i&&this._keyManager.updateActiveItem(i)}),this._dir?.change.pipe(Bt(this._destroyed)).subscribe(A=>this._keyManager.withHorizontalOrientation(A))}_skipPredicate(A){return A.disabled}_trackChipSetChanges(){this._chips.changes.pipe(cn(null),Bt(this._destroyed)).subscribe(()=>{this.disabled&&Promise.resolve().then(()=>this._syncChipsState()),this._redirectDestroyedChipFocus()})}_trackDestroyedFocusedChip(){this.chipDestroyedChanges.pipe(Bt(this._destroyed)).subscribe(A=>{let n=this._chips.toArray().indexOf(A.chip),o=A.chip._hasFocus(),a=A.chip._hadFocusOnRemove&&this._keyManager.activeItem&&A.chip._getActions().includes(this._keyManager.activeItem),r=o||a;this._isValidIndex(n)&&r&&(this._lastDestroyedFocusedChipIndex=n)})}_redirectDestroyedChipFocus(){if(this._lastDestroyedFocusedChipIndex!=null){if(this._chips.length){let A=Math.min(this._lastDestroyedFocusedChipIndex,this._chips.length-1),i=this._chips.toArray()[A];i.disabled?this._chips.length===1?this.focus():this._keyManager.setPreviousItemActive():i.focus()}else this.focus();this._lastDestroyedFocusedChipIndex=null}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-chip-set"]],contentQueries:function(i,n,o){if(i&1&&ua(o,Im,5),i&2){let a;ce(a=Ce())&&(n._chips=a)}},hostAttrs:[1,"mat-mdc-chip-set","mdc-evolution-chip-set"],hostVars:1,hostBindings:function(i,n){i&1&&eA("keydown",function(a){return n._handleKeydown(a)}),i&2&&ie("role",n.role)},inputs:{disabled:[2,"disabled","disabled",he],role:"role",tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)]},ngContentSelectors:EaA,decls:2,vars:0,consts:[["role","presentation",1,"mdc-evolution-chip-set__chips"]],template:function(i,n){i&1&&(Ht(),ci(0,"div",0),He(1),fi())},styles:[`.mat-mdc-chip-set{display:flex}.mat-mdc-chip-set:focus{outline:none}.mat-mdc-chip-set .mdc-evolution-chip-set__chips{min-width:100%;margin-left:-8px;margin-right:0}.mat-mdc-chip-set .mdc-evolution-chip{margin:4px 0 4px 8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0;margin-right:-8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip{margin-left:0;margin-right:8px}.mdc-evolution-chip-set__chips{display:flex;flex-flow:wrap;min-width:0}.mat-mdc-chip-set-stacked{flex-direction:column;align-items:flex-start}.mat-mdc-chip-set-stacked .mat-mdc-chip{width:100%}.mat-mdc-chip-set-stacked .mdc-evolution-chip__graphic{flex-grow:0}.mat-mdc-chip-set-stacked .mdc-evolution-chip__action--primary{flex-basis:100%;justify-content:start}input.mat-mdc-chip-input{flex:1 0 150px;margin-left:8px}[dir=rtl] input.mat-mdc-chip-input{margin-left:0;margin-right:8px}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-moz-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-webkit-input-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input:-ms-input-placeholder{opacity:1}.mat-mdc-chip-set+input.mat-mdc-chip-input{margin-left:0;margin-right:0} +`],encapsulation:2,changeDetection:0})}return t})(),uG=class{source;value;constructor(e,A){this.source=e,this.value=A}},M_A={provide:Lg,useExisting:pr(()=>yG),multi:!0},yG=(()=>{class t extends DG{_onTouched=()=>{};_onChange=()=>{};_defaultRole="listbox";_defaultOptions=h(fG,{optional:!0});get multiple(){return this._multiple}set multiple(A){this._multiple=A,this._syncListboxProperties()}_multiple=!1;get selected(){let A=this._chips.toArray().filter(i=>i.selected);return this.multiple?A:A[0]}ariaOrientation="horizontal";get selectable(){return this._selectable}set selectable(A){this._selectable=A,this._syncListboxProperties()}_selectable=!0;compareWith=(A,i)=>A===i;required=!1;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(A){this._hideSingleSelectionIndicator=A,this._syncListboxProperties()}_hideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get chipSelectionChanges(){return this._getChipStream(A=>A.selectionChange)}get chipBlurChanges(){return this._getChipStream(A=>A._onBlur)}get value(){return this._value}set value(A){this._chips&&this._chips.length&&this._setSelectionByValue(A,!1),this._value=A}_value;change=new WA;_chips=void 0;ngAfterContentInit(){this._chips.changes.pipe(cn(null),Bt(this._destroyed)).subscribe(()=>{this.value!==void 0&&Promise.resolve().then(()=>{this._setSelectionByValue(this.value,!1)}),this._syncListboxProperties()}),this.chipBlurChanges.pipe(Bt(this._destroyed)).subscribe(()=>this._blur()),this.chipSelectionChanges.pipe(Bt(this._destroyed)).subscribe(A=>{this.multiple||this._chips.forEach(i=>{i!==A.source&&i._setSelectedState(!1,!1,!1)}),A.isUserInput&&this._propagateChanges()})}focus(){if(this.disabled)return;let A=this._getFirstSelectedChip();A&&!A.disabled?A.focus():this._chips.length>0?this._keyManager.setFirstItemActive():this._elementRef.nativeElement.focus()}writeValue(A){A!=null?this.value=A:this.value=void 0}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A}_setSelectionByValue(A,i=!0){this._clearSelection(),Array.isArray(A)?A.forEach(n=>this._selectValue(n,i)):this._selectValue(A,i)}_blur(){this.disabled||setTimeout(()=>{this.focused||this._markAsTouched()})}_keydown(A){A.keyCode===9&&super._allowFocusEscape()}_markAsTouched(){this._onTouched(),this._changeDetectorRef.markForCheck()}_propagateChanges(){let A=null;Array.isArray(this.selected)?A=this.selected.map(i=>i.value):A=this.selected?this.selected.value:void 0,this._value=A,this.change.emit(new uG(this,A)),this._onChange(A),this._changeDetectorRef.markForCheck()}_clearSelection(A){this._chips.forEach(i=>{i!==A&&i.deselect()})}_selectValue(A,i){let n=this._chips.find(o=>o.value!=null&&this.compareWith(o.value,A));return n&&(i?n.selectViaInteraction():n.select()),n}_syncListboxProperties(){this._chips&&Promise.resolve().then(()=>{this._chips.forEach(A=>{A._chipListMultiple=this.multiple,A.chipListSelectable=this._selectable,A._chipListHideSingleSelectionIndicator=this.hideSingleSelectionIndicator,A._changeDetectorRef.markForCheck()})})}_getFirstSelectedChip(){return Array.isArray(this.selected)?this.selected.length?this.selected[0]:void 0:this.selected}_skipPredicate(A){return!1}static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-chip-listbox"]],contentQueries:function(i,n,o){if(i&1&&ua(o,wG,5),i&2){let a;ce(a=Ce())&&(n._chips=a)}},hostAttrs:[1,"mdc-evolution-chip-set","mat-mdc-chip-listbox"],hostVars:10,hostBindings:function(i,n){i&1&&eA("focus",function(){return n.focus()})("blur",function(){return n._blur()})("keydown",function(a){return n._keydown(a)}),i&2&&(vo("tabIndex",n.disabled||n.empty?-1:n.tabIndex),ie("role",n.role)("aria-required",n.role?n.required:null)("aria-disabled",n.disabled.toString())("aria-multiselectable",n.multiple)("aria-orientation",n.ariaOrientation),ae("mat-mdc-chip-list-disabled",n.disabled)("mat-mdc-chip-list-required",n.required))},inputs:{multiple:[2,"multiple","multiple",he],ariaOrientation:[0,"aria-orientation","ariaOrientation"],selectable:[2,"selectable","selectable",he],compareWith:"compareWith",required:[2,"required","required",he],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",he],value:"value"},outputs:{change:"change"},features:[It([M_A]),dt],ngContentSelectors:EaA,decls:2,vars:0,consts:[["role","presentation",1,"mdc-evolution-chip-set__chips"]],template:function(i,n){i&1&&(Ht(),ci(0,"div",0),He(1),fi())},styles:[b_A],encapsulation:2,changeDetection:0})}return t})();var Rv=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[UB,{provide:fG,useValue:{separatorKeyCodes:[13]}}],imports:[S2,Gi]})}return t})();var Nv=new yA("ThemeService");var Lh=class t{themeService=h(Nv);get currentTheme(){return this.themeService.currentTheme()}get themeIcon(){return this.currentTheme==="light"?"dark_mode":"light_mode"}get themeTooltip(){return this.currentTheme==="light"?"Switch to dark mode":"Switch to light mode"}toggleTheme(){this.themeService.toggleTheme()}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-theme-toggle"]],decls:3,vars:2,consts:[["mat-icon-button","","aria-label","Toggle theme",1,"theme-toggle-button",3,"click","matTooltip"]],template:function(A,i){A&1&&(m(0,"button",0),eA("click",function(){return i.toggleTheme()}),m(1,"mat-icon"),K(2),w()()),A&2&&(AA("matTooltip",i.themeTooltip),p(2),qA(i.themeIcon))},dependencies:[cl,fn,Fs,Ma,U2,Sa],styles:[".theme-toggle-button[_ngcontent-%COMP%]{color:var(--side-panel-mat-icon-color)}.theme-toggle-button[_ngcontent-%COMP%]:hover{opacity:.8}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%]{background-color:var(--builder-secondary-background-color);color:var(--builder-text-tertiary-color);border-radius:50%;transition:all .2s ease;margin-right:0!important}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-hover-background-color);color:var(--builder-text-primary-color);opacity:1}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px}"]})};var maA=(t,e)=>e.name;function k_A(t,e){if(t&1&&K(0),t&2){let A=v().$implicit;_e(" AgentTool: ",A.name," ")}}function S_A(t,e){if(t&1&&K(0),t&2){let A=v().$implicit;_e(" ",A.name," ")}}function x_A(t,e){t&1&&(m(0,"mat-icon",28),K(1,"chevron_right"),w())}function R_A(t,e){if(t&1){let A=JA();m(0,"div",27),eA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.selectAgentFromBreadcrumb(n))}),V(1,k_A,1,1)(2,S_A,1,1),w(),V(3,x_A,2,0,"mat-icon",28)}if(t&2){let A=e.$implicit,i=e.$index,n=v(2);ae("current-agent",(n.currentSelectedAgent==null?null:n.currentSelectedAgent.name)===A.name),p(),W(i===0&&n.isInAgentToolContext()?1:2),p(2),W(i0?0:-1)}}function z_A(t,e){if(t&1){let A=JA();m(0,"div",15)(1,"div",16)(2,"div"),K(3," Tools "),w(),m(4,"div")(5,"button",40,2)(7,"mat-icon"),K(8,"add"),w()(),m(9,"mat-menu",null,3)(11,"button",23),eA("click",function(){Z(A);let n=v();return X(n.addTool("Function tool"))}),m(12,"span"),K(13,"Function tool"),w()(),m(14,"button",23),eA("click",function(){Z(A);let n=v();return X(n.addTool("Built-in tool"))}),m(15,"span"),K(16,"Built-in tool"),w()(),m(17,"button",23),eA("click",function(){Z(A);let n=v();return X(n.createAgentTool())}),m(18,"span"),K(19,"Agent tool"),w()()()()(),V(20,H_A,1,1),ri(21,"async"),w()}if(t&2){let A,i=An(10),n=v();p(5),AA("matMenuTriggerFor",i),p(6),AA("matTooltip",n.toolMenuTooltips("Function tool")),p(3),AA("matTooltip",n.toolMenuTooltips("Built-in tool")),p(3),AA("matTooltip",n.toolMenuTooltips("Agent tool")),p(3),W((A=Ci(21,5,n.toolsMap$))?20:-1,A)}}function O_A(t,e){if(t&1){let A=JA();m(0,"mat-chip",43),eA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.selectAgent(n))}),m(1,"mat-icon",44),K(2),w(),m(3,"span",45),K(4),w(),m(5,"button",48),eA("click",function(n){let o=Z(A).$implicit;return v(2).deleteSubAgent(o.name),X(n.stopPropagation())}),m(6,"mat-icon"),K(7,"cancel"),w()()()}if(t&2){let A=e.$implicit,i=v(2);p(2),qA(i.getAgentIcon(A.agent_class)),p(2),qA(A.name)}}function P_A(t,e){if(t&1&&(m(0,"div",20)(1,"mat-chip-set",47),Ut(2,O_A,8,2,"mat-chip",42,maA),w()()),t&2){let A=v();p(2),Jt(A.agentConfig.sub_agents)}}function j_A(t,e){if(t&1){let A=JA();GA(0,"mat-divider"),m(1,"div",22),K(2,"Model (LLM) Interaction"),w(),m(3,"button",23),eA("click",function(){Z(A);let n=v();return X(n.addCallback("before_model"))}),m(4,"span"),K(5,"Before Model"),w()(),m(6,"button",23),eA("click",function(){Z(A);let n=v();return X(n.addCallback("after_model"))}),m(7,"span"),K(8,"After Model"),w()(),GA(9,"mat-divider"),m(10,"div",22),K(11,"Tool Execution"),w(),m(12,"button",23),eA("click",function(){Z(A);let n=v();return X(n.addCallback("before_tool"))}),m(13,"span"),K(14,"Before Tool"),w()(),m(15,"button",23),eA("click",function(){Z(A);let n=v();return X(n.addCallback("after_tool"))}),m(16,"span"),K(17,"After Tool"),w()()}if(t&2){let A=v();p(3),AA("matTooltip",A.callbackMenuTooltips("before_model")),p(3),AA("matTooltip",A.callbackMenuTooltips("after_model")),p(6),AA("matTooltip",A.callbackMenuTooltips("before_tool")),p(3),AA("matTooltip",A.callbackMenuTooltips("after_tool"))}}function q_A(t,e){if(t&1){let A=JA();m(0,"div",52),eA("click",function(){let n=Z(A).$implicit,o=v(3);return X(o.editCallback(n))}),m(1,"mat-chip",53)(2,"span",54)(3,"span",55),K(4),w(),m(5,"span",56),K(6),w()()(),m(7,"button",57),eA("click",function(n){let o=Z(A).$implicit,a=v(3);return a.deleteCallback(a.agentConfig.name,o),X(n.stopPropagation())}),m(8,"mat-icon"),K(9,"remove"),w()()()}if(t&2){let A=e.$implicit;p(4),qA(A.type),p(2),qA(A.name)}}function V_A(t,e){if(t&1&&(m(0,"div",49)(1,"mat-chip-set",50),Ut(2,q_A,10,2,"div",51,_i),w()()),t&2){let A=v(),i=v();p(2),Jt(A.get(i.agentConfig.name))}}function W_A(t,e){if(t&1&&V(0,V_A,4,0,"div",49),t&2){let A=e,i=v();W(i.agentConfig&&A.get(i.agentConfig.name)&&A.get(i.agentConfig.name).length>0?0:-1)}}var Fv=class t{CALLBACKS_TAB_INDEX=3;jsonEditorComponent;appNameInput="";exitBuilderMode=new WA;closePanel=new WA;featureFlagService=h(vr);isAlwaysOnSidePanelEnabledObs=this.featureFlagService.isAlwaysOnSidePanelEnabled();toolArgsString=jA("");editingToolArgs=jA(!1);editingTool=null;selectedTabIndex=0;agentConfig={isRoot:!1,name:"",agent_class:"",model:"",instruction:"",sub_agents:[],tools:[],callbacks:[]};hierarchyPath=[];currentSelectedAgent=void 0;isRootAgentEditable=!0;models=["gemini-2.5-flash","gemini-2.5-pro"];agentTypes=["LlmAgent","LoopAgent","ParallelAgent","SequentialAgent"];agentBuilderService=h(E0);dialog=h(Ks);agentService=h(sg);snackBar=h(J2);router=h(Cs);cdr=h(mt);selectedTool=void 0;toolAgentName="";toolTypes=["Custom tool","Function tool","Built-in tool","Agent Tool"];editingCallback=null;selectedCallback=void 0;callbackTypes=["before_agent","before_model","before_tool","after_tool","after_model","after_agent"];builtInTools=["EnterpriseWebSearchTool","exit_loop","FilesRetrieval","get_user_choice","google_search","load_artifacts","load_memory","LongRunningFunctionTool","preload_memory","url_context","VertexAiRagRetrieval","VertexAiSearchTool"];builtInToolArgs=new Map([["EnterpriseWebSearchTool",[]],["exit_loop",[]],["FilesRetrieval",["name","description","input_dir"]],["get_user_choice",[]],["google_search",[]],["load_artifacts",[]],["load_memory",[]],["LongRunningFunctionTool",["func"]],["preload_memory",[]],["url_context",[]],["VertexAiRagRetrieval",["name","description","rag_corpora","rag_resources","similarity_top_k","vector_distance_threshold"]],["VertexAiSearchTool",["data_store_id","data_store_specs","search_engine_id","filter","max_results"]]]);header="Select an agent or tool to edit";toolsMap$;callbacksMap$;getJsonStringForEditor(e){if(!e)return"{}";let A=gA({},e);return delete A.skip_summarization,JSON.stringify(A,null,2)}constructor(){this.toolsMap$=this.agentBuilderService.getAgentToolsMap(),this.callbacksMap$=this.agentBuilderService.getAgentCallbacksMap(),this.agentBuilderService.getSelectedNode().subscribe(e=>{this.agentConfig=e,this.currentSelectedAgent=e,e&&(this.editingTool=null,this.editingCallback=null,this.header="Agent configuration",this.updateBreadcrumb(e)),this.cdr.markForCheck()}),this.agentBuilderService.getSelectedTool().subscribe(e=>{this.selectedTool=e,!(e&&e.toolType==="Agent Tool")&&(e?(this.editingTool=e,this.editingToolArgs.set(!1),setTimeout(()=>{let A=e.toolType=="Function tool"?"Function tool":e.name;if(e.toolType=="Function tool"&&!e.name&&(e.name="Function tool"),e.toolType==="Custom tool")e.args||(e.args={}),this.toolArgsString.set(this.getJsonStringForEditor(e.args)),this.editingToolArgs.set(!0);else{let i=this.builtInToolArgs.get(A);if(i){e.args||(e.args={});for(let n of i)e.args&&(e.args[n]="")}this.toolArgsString.set(this.getJsonStringForEditor(e.args)),e.args&&this.getObjectKeys(e.args).length>0&&this.editingToolArgs.set(!0)}this.cdr.markForCheck()}),this.selectedTabIndex=2):this.editingTool=null,this.cdr.markForCheck())}),this.agentBuilderService.getSelectedCallback().subscribe(e=>{this.selectedCallback=e,e?(this.selectCallback(e),this.selectedTabIndex=this.CALLBACKS_TAB_INDEX):this.editingCallback=null,this.cdr.markForCheck()}),this.agentBuilderService.getAgentCallbacks().subscribe(e=>{this.agentConfig&&e&&this.agentConfig.name===e.agentName&&(this.agentConfig=be(gA({},this.agentConfig),{callbacks:e.callbacks}),this.cdr.markForCheck())}),this.agentBuilderService.getSideTabChangeRequest().subscribe(e=>{e==="tools"?this.selectedTabIndex=2:e==="config"&&(this.selectedTabIndex=0)})}getObjectKeys(e){return e?Object.keys(e).filter(A=>A!=="skip_summarization"):[]}getCallbacksByType(){let e=new Map;return this.callbackTypes.forEach(A=>{e.set(A,[])}),this.agentConfig?.callbacks&&this.agentConfig.callbacks.forEach(A=>{let i=e.get(A.type);i&&i.push(A)}),e}updateBreadcrumb(e){this.hierarchyPath=this.buildHierarchyPath(e)}buildHierarchyPath(e){let A=[],i=this.findContextualRoot(e);return i?e.name===i.name?[i]:this.findPathToAgent(i,e,[i])||[e]:[e]}isInAgentToolContext(){return!this.hierarchyPath||this.hierarchyPath.length===0?!1:this.hierarchyPath[0]?.isAgentTool===!0}findContextualRoot(e){if(e.isAgentTool)return e;let A=this.agentBuilderService.getNodes();for(let n of A)if(n.isAgentTool&&this.findPathToAgent(n,e,[n]))return n;let i=this.agentBuilderService.getRootNode();if(i&&this.findPathToAgent(i,e,[i]))return i;if(e.isRoot)return e;for(let n of A)if(n.isRoot&&this.findPathToAgent(n,e,[n]))return n;return i}findPathToAgent(e,A,i){if(e.name===A.name)return i;for(let n of e.sub_agents){let o=[...i,n],a=this.findPathToAgent(n,A,o);if(a)return a}return null}selectAgentFromBreadcrumb(e){this.agentBuilderService.setSelectedNode(e),this.selectedTabIndex=0}selectAgent(e){this.agentBuilderService.setSelectedNode(e),this.selectedTabIndex=0}selectTool(e){if(e.toolType==="Agent Tool"){let A=e.name;this.agentBuilderService.requestNewTab(A);return}if(e.toolType==="Function tool"||e.toolType==="Built-in tool"){this.editTool(e);return}this.agentBuilderService.setSelectedTool(e)}editTool(e){if(!this.agentConfig)return;let A;e.toolType==="Built-in tool"?A=this.dialog.open(aB,{width:"700px",maxWidth:"90vw",data:{toolName:e.name,isEditMode:!0,toolArgs:e.args}}):A=this.dialog.open(W2,{width:"500px",data:{toolType:e.toolType,toolName:e.name,isEditMode:!0}}),A.afterClosed().subscribe(i=>{if(i&&i.isEditMode){let n=this.agentConfig.tools?.findIndex(o=>o.name===e.name);n!==void 0&&n!==-1&&this.agentConfig.tools&&(this.agentConfig.tools[n].name=i.name,i.args&&(this.agentConfig.tools[n].args=i.args),this.agentBuilderService.setAgentTools(this.agentConfig.name,this.agentConfig.tools))}})}addTool(e){if(this.agentConfig){let A;e==="Built-in tool"?A=this.dialog.open(aB,{width:"700px",maxWidth:"90vw",data:{}}):A=this.dialog.open(W2,{width:"500px",data:{toolType:e}}),A.afterClosed().subscribe(i=>{if(i){let n={toolType:i.toolType,name:i.name};this.agentBuilderService.addTool(this.agentConfig.name,n),this.agentBuilderService.setSelectedTool(n)}})}}addCallback(e){if(this.agentConfig){let A=this.agentConfig?.callbacks?.map(n=>n.name)??[];this.dialog.open(z4,{width:"500px",data:{callbackType:e,existingCallbackNames:A}}).afterClosed().subscribe(n=>{if(n){let o={name:n.name,type:n.type};this.agentBuilderService.addCallback(this.agentConfig.name,o)}})}}editCallback(e){if(!this.agentConfig)return;let A=this.agentConfig.callbacks?.map(n=>n.name)??[];this.dialog.open(z4,{width:"500px",data:{callbackType:e.type,existingCallbackNames:A,isEditMode:!0,callback:e,availableCallbackTypes:this.callbackTypes}}).afterClosed().subscribe(n=>{if(n&&n.isEditMode){let o=this.agentBuilderService.updateCallback(this.agentConfig.name,e.name,be(gA({},e),{name:n.name,type:n.type}));o.success?this.cdr.markForCheck():console.error("Failed to update callback:",o.error)}})}deleteCallback(e,A){this.dialog.open(qc,{data:{title:"Delete Callback",message:`Are you sure you want to delete ${A.name}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(n=>{if(n==="confirm"){let o=this.agentBuilderService.deleteCallback(e,A);o.success?this.cdr.markForCheck():console.error("Failed to delete callback:",o.error)}})}addSubAgent(e){e&&this.agentBuilderService.setAddSubAgentSubject(e)}deleteSubAgent(e){this.agentBuilderService.setDeleteSubAgentSubject(e)}deleteTool(e,A){let i=A.toolType==="Agent Tool",n=i&&A.toolAgentName||A.name;this.dialog.open(qc,{data:{title:i?"Delete Agent Tool":"Delete Tool",message:i?`Are you sure you want to delete the agent tool "${n}"? This will also delete the corresponding board.`:`Are you sure you want to delete ${n}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(a=>{if(a==="confirm")if(A.toolType==="Agent Tool"){let r=A.toolAgentName||A.name;this.deleteAgentToolAndBoard(e,A,r)}else this.agentBuilderService.deleteTool(e,A)})}deleteAgentToolAndBoard(e,A,i){this.agentBuilderService.deleteTool(e,A),this.agentBuilderService.requestTabDeletion(i)}backToToolList(){this.editingTool=null,this.agentBuilderService.setSelectedTool(void 0)}editToolArgs(){this.editingToolArgs.set(!0)}cancelEditToolArgs(e){this.editingToolArgs.set(!1),this.toolArgsString.set(this.getJsonStringForEditor(e?.args))}saveToolArgs(e){if(this.jsonEditorComponent&&e)try{let A=JSON.parse(this.jsonEditorComponent.getJsonString()),i=e.args?e.args.skip_summarization:!1;e.args=A,e.args.skip_summarization=i,this.toolArgsString.set(JSON.stringify(e.args,null,2)),this.editingToolArgs.set(!1)}catch(A){console.error("Error parsing tool arguments JSON",A)}}onToolTypeSelectionChange(e){e?.toolType==="Built-in tool"?(e.name="google_search",this.onBuiltInToolSelectionChange(e)):e?.toolType==="Custom tool"?(e.args={},this.toolArgsString.set(this.getJsonStringForEditor(e.args)),this.editingToolArgs.set(!0)):e&&(e.name="",e.args={skip_summarization:!1},this.toolArgsString.set("{}"),this.editingToolArgs.set(!1))}onBuiltInToolSelectionChange(e){e&&(this.editingToolArgs.set(!1),setTimeout(()=>{e.args={skip_summarization:!1};let A=this.builtInToolArgs.get(e.name);if(A)for(let i of A)e.args&&(e.args[i]="");this.toolArgsString.set(this.getJsonStringForEditor(e.args)),e.args&&this.getObjectKeys(e.args).length>0&&this.editingToolArgs.set(!0),this.cdr.markForCheck()}))}selectCallback(e){this.editingCallback=e}backToCallbackList(){this.editingCallback=null}onCallbackTypeChange(e){}createAgentTool(){this.dialog.open(qc,{width:"750px",height:"450px",data:{title:"Create Agent Tool",message:"Please enter a name for the agent tool:",confirmButtonText:"Create",showInput:!0,inputLabel:"Agent Tool Name",inputPlaceholder:"Enter agent tool name",showToolInfo:!0,toolType:"Agent tool"}}).afterClosed().subscribe(A=>{if(A&&typeof A=="string"){let i=this.agentConfig?.name||"root_agent";this.agentBuilderService.requestNewTab(A,i)}})}saveChanges(){if(!this.agentBuilderService.getRootNode()){this.snackBar.open("Please create an agent first.","OK");return}this.appNameInput?this.saveAgent(this.appNameInput):this.agentService.getApp().subscribe(A=>{A?this.saveAgent(A):this.snackBar.open("No agent selected. Please select an agent first.","OK")})}cancelChanges(){this.agentService.agentChangeCancel(this.appNameInput).subscribe(e=>{}),this.exitBuilderMode.emit()}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A){this.snackBar.open("Please create an agent first.","OK");return}let i=new FormData,n=this.agentBuilderService.getCurrentAgentToolBoards();w0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{o&&this.agentService.agentBuild(i).subscribe(a=>{a?this.router.navigate(["/"],{queryParams:{app:e}}).then(()=>{window.location.reload()}):this.snackBar.open("Something went wrong, please try again","OK")})})}getToolIcon(e){return ME(e.name,e.toolType)}getAgentIcon(e){switch(e){case"SequentialAgent":return"more_horiz";case"LoopAgent":return"sync";case"ParallelAgent":return"density_medium";default:return"psychology"}}addSubAgentWithType(e){if(!this.agentConfig?.name)return;let A=this.agentConfig.agent_class!=="LlmAgent";this.agentBuilderService.setAddSubAgentSubject(this.agentConfig.name,e,A)}callbackMenuTooltips(e){return uc.getCallbackMenuTooltips(e)}toolMenuTooltips(e){return uc.getToolMenuTooltips(e)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-builder-tabs"]],viewQuery:function(A,i){if(A&1&&ai(jc,5),A&2){let n;ce(n=Ce())&&(i.jsonEditorComponent=n.first)}},inputs:{appNameInput:"appNameInput"},outputs:{exitBuilderMode:"exitBuilderMode",closePanel:"closePanel"},decls:77,vars:12,consts:[["subAgentMenu","matMenu"],["callbacksMenu","matMenu"],["agentMenuTrigger","matMenuTrigger"],["toolsMenu","matMenu"],[2,"margin-top","20px","margin-left","20px","display","flex"],[2,"width","100%"],[1,"drawer-header"],[1,"drawer-logo"],["src","assets/ADK-512-color.svg","width","32px","height","32px"],[2,"display","flex","align-items","center","gap","8px","margin-right","15px"],["matTooltip","Collapse panel",1,"material-symbols-outlined",2,"color","#c4c7c5","cursor","pointer",3,"click"],[1,"builder-tabs-container"],[1,"builder-tab-content"],[1,"agent-breadcrumb-container"],[1,"content-wrapper"],[1,"builder-panel-wrapper"],[1,"panel-title"],[1,"config-form"],["mat-icon-button","","type","button","aria-label","Add sub agent",1,"panel-action-button",3,"matMenuTriggerFor"],["mat-menu-item","",3,"click"],[1,"tools-chips-container"],["mat-icon-button","","type","button","aria-label","Add callback",1,"panel-action-button",3,"matMenuTriggerFor"],[1,"menu-header"],["mat-menu-item","","matTooltipPosition","right",3,"click","matTooltip"],[1,"action-buttons"],["mat-raised-button","","color","secondary",1,"save-button",3,"click"],["mat-button","",1,"cancel-button",3,"click"],[1,"breadcrumb-chip",3,"click"],[1,"breadcrumb-arrow"],[1,"form-row"],[1,"agent-name-field"],["matInput","",3,"ngModelChange","ngModel","disabled"],[1,"agent-type-field"],["disabled","",3,"ngModelChange","ngModel"],[3,"value"],[3,"ngModel"],[3,"ngModelChange","ngModel"],["matInput","","rows","5",3,"ngModelChange","ngModel"],["matInput","","rows","3",3,"ngModelChange","ngModel"],["matInput","","type","number","min","1",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","aria-label","Add tool",1,"panel-action-button",3,"matMenuTriggerFor"],["aria-label","Tools"],[1,"tool-chip"],[1,"tool-chip",3,"click"],["matChipAvatar","",1,"tool-icon"],[1,"tool-chip-name"],["matChipRemove","","aria-label","Remove tool",3,"click"],["aria-label","Sub Agents"],["matChipRemove","","aria-label","Remove sub agent",3,"click"],[1,"tools-chips-container","callbacks-list"],["aria-label","Callbacks"],[1,"callback-row"],[1,"callback-row",3,"click"],[1,"callback-chip"],[1,"chip-content"],[1,"chip-type"],[1,"chip-name"],["mat-icon-button","","aria-label","Remove callback",1,"callback-remove",3,"click"]],template:function(A,i){if(A&1){let n=JA();m(0,"div",4)(1,"div",5)(2,"div",6)(3,"div",7),GA(4,"img",8),K(5," Agent Development Kit "),w(),m(6,"div",9),GA(7,"app-theme-toggle"),m(8,"span",10),eA("click",function(){return Z(n),X(i.closePanel.emit())}),K(9,"left_panel_close"),w()()()()(),m(10,"div",11)(11,"div",12),V(12,N_A,3,0,"div",13),m(13,"div",14)(14,"div",15)(15,"div",16),K(16," Configuration "),w(),m(17,"div"),V(18,J_A,16,7,"div",17),w()(),V(19,z_A,22,7,"div",15),m(20,"div",15)(21,"div",16)(22,"div"),K(23," Sub Agents "),w(),m(24,"div")(25,"button",18)(26,"mat-icon"),K(27,"add"),w()(),m(28,"mat-menu",null,0)(30,"button",19),eA("click",function(){return Z(n),X(i.addSubAgentWithType("LlmAgent"))}),m(31,"mat-icon"),K(32,"psychology"),w(),m(33,"span"),K(34,"LLM Agent"),w()(),m(35,"button",19),eA("click",function(){return Z(n),X(i.addSubAgentWithType("SequentialAgent"))}),m(36,"mat-icon"),K(37,"more_horiz"),w(),m(38,"span"),K(39,"Sequential Agent"),w()(),m(40,"button",19),eA("click",function(){return Z(n),X(i.addSubAgentWithType("LoopAgent"))}),m(41,"mat-icon"),K(42,"sync"),w(),m(43,"span"),K(44,"Loop Agent"),w()(),m(45,"button",19),eA("click",function(){return Z(n),X(i.addSubAgentWithType("ParallelAgent"))}),m(46,"mat-icon"),K(47,"density_medium"),w(),m(48,"span"),K(49,"Parallel Agent"),w()()()()(),V(50,P_A,4,0,"div",20),w(),m(51,"div",15)(52,"div",16)(53,"div"),K(54," Callbacks "),w(),m(55,"div")(56,"button",21)(57,"mat-icon"),K(58,"add"),w()(),m(59,"mat-menu",null,1)(61,"div",22),K(62,"Agent Lifecycle"),w(),m(63,"button",23),eA("click",function(){return Z(n),X(i.addCallback("before_agent"))}),m(64,"span"),K(65,"Before Agent"),w()(),m(66,"button",23),eA("click",function(){return Z(n),X(i.addCallback("after_agent"))}),m(67,"span"),K(68,"After Agent"),w()(),V(69,j_A,18,4),w()()(),V(70,W_A,1,1),ri(71,"async"),w()(),m(72,"div",24)(73,"button",25),eA("click",function(){return Z(n),X(i.saveChanges())}),K(74," Save "),w(),m(75,"button",26),eA("click",function(){return Z(n),X(i.cancelChanges())}),K(76," Cancel "),w()()()()}if(A&2){let n,o=An(29),a=An(60);p(12),W(i.hierarchyPath.length>0?12:-1),p(6),W(i.agentConfig?18:-1),p(),W((i.agentConfig==null?null:i.agentConfig.agent_class)==="LlmAgent"?19:-1),p(6),AA("matMenuTriggerFor",o),p(25),W(i.agentConfig&&i.agentConfig.sub_agents&&i.agentConfig.sub_agents.length>0?50:-1),p(6),AA("matMenuTriggerFor",a),p(7),AA("matTooltip",i.callbackMenuTooltips("before_agent")),p(3),AA("matTooltip",i.callbackMenuTooltips("after_agent")),p(3),W((i.agentConfig==null?null:i.agentConfig.agent_class)==="LlmAgent"?69:-1),p(),W((n=Ci(71,10,i.callbacksMap$))?70:-1,n)}},dependencies:[fa,Nn,uo,t9,fo,o9,ba,Fn,bE,_O,ta,fn,Ka,Ma,Zl,Hr,Il,Sa,X0,_h,l2,Rv,Im,haA,uaA,DG,Qz,a8,Lh,ls],styles:[".builder-tabs-container[_ngcontent-%COMP%]{width:100%;margin-top:40px;height:calc(95vh - 20px);display:flex;flex-direction:column}.agent-breadcrumb-container[_ngcontent-%COMP%]{padding:2px 20px 8px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;border-bottom:1px solid var(--builder-border-color)}.breadcrumb-chip[_ngcontent-%COMP%]{background-color:transparent;color:var(--builder-text-muted-color);font-family:Google Sans;font-size:16px;font-weight:500;border:none;cursor:pointer;transition:all .2s ease;padding:4px 8px;border-radius:4px;display:inline-block;-webkit-user-select:none;user-select:none}.breadcrumb-chip[_ngcontent-%COMP%]:hover{color:var(--builder-text-link-color)}.breadcrumb-chip.current-agent[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-weight:500}.breadcrumb-arrow[_ngcontent-%COMP%]{color:var(--builder-breadcrumb-separator-color);font-size:16px;width:16px;height:16px}.builder-tab-content[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);display:flex;flex-direction:column;flex:1;overflow:hidden}.builder-tab-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:8px 0;font-size:14px;line-height:1.5}.builder-tab-content[_ngcontent-%COMP%]{--mat-form-field-filled-container-color: var(--builder-form-field-background-color);--mat-form-field-filled-focus-active-indicator-color: var(--builder-form-field-background-color);--mat-form-field-filled-active-indicator-color: var(--builder-form-field-background-color);--mat-form-field-filled-hover-active-indicator-color: var(--builder-form-field-background-color);--mat-form-field-filled-label-text-color: var(--builder-text-secondary-color);--mat-form-field-filled-focus-label-text-color: var(--builder-text-link-color);--mat-form-field-filled-hover-label-text-color: var(--builder-text-secondary-color)}[_nghost-%COMP%] .mat-mdc-text-field-wrapper{border:none!important}.components-section[_ngcontent-%COMP%]{margin-bottom:32px}.components-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:14px;font-weight:500;margin:0 0 16px;text-transform:uppercase;letter-spacing:.5px}.config-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;margin-top:20px}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%]{display:flex;gap:16px;align-items:flex-start}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%] .agent-name-field[_ngcontent-%COMP%]{flex:1}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%] .agent-type-field[_ngcontent-%COMP%]{width:32%}.config-form[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.config-form[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{margin-bottom:8px}.config-form[_ngcontent-%COMP%] .tool-code-section[_ngcontent-%COMP%]{margin-top:16px}.config-form[_ngcontent-%COMP%] .tool-code-section[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 8px;color:var(--builder-text-secondary-color);font-size:14px;font-weight:500}.config-form[_ngcontent-%COMP%] .tool-args-header[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:14px;font-weight:500;letter-spacing:.5px;text-transform:uppercase}.json-editor-wrapper[_ngcontent-%COMP%]{height:300px;max-height:300px}.tab-content-container[_ngcontent-%COMP%]{margin-top:20px;overflow-y:auto}.agent-list-row[_ngcontent-%COMP%]{display:flex;margin-top:10px}.sub-agent-list-row[_ngcontent-%COMP%]{display:flex;margin-top:10px;margin-left:16px}.tree-view[_ngcontent-%COMP%] mat-tree[_ngcontent-%COMP%]{background-color:inherit!important}.tree-view[_ngcontent-%COMP%] expand-button[_ngcontent-%COMP%]{background-color:transparent;border:0}.node-item[_ngcontent-%COMP%]{display:flex;align-items:center}.node-icon[_ngcontent-%COMP%]{margin-right:14px}.node-name[_ngcontent-%COMP%]{margin-top:2px;display:flex;align-items:center}.no-tools-message[_ngcontent-%COMP%]{display:block;color:var(--builder-text-secondary-color);font-size:16px;margin-top:16px;margin-bottom:16px;text-align:center}.tools-list[_ngcontent-%COMP%]{list-style:none;padding:0}.tool-name[_ngcontent-%COMP%]{cursor:pointer;padding:11px;border-radius:8px;display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;background-color:var(--builder-card-background-color);color:var(--builder-text-primary-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.tool-name[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{visibility:hidden}.tool-name[_ngcontent-%COMP%]:hover{background-color:var(--builder-hover-background-color)}.tool-name[_ngcontent-%COMP%]:hover button[_ngcontent-%COMP%]{visibility:visible}.tool-list-item-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;padding-right:8px} .tools-chips-container .mat-mdc-chip-set{width:100%} .tools-chips-container.callbacks-list .mat-mdc-chip-set{display:flex;flex-direction:column;gap:8px;width:100%} .tools-chips-container .mat-mdc-chip.tool-chip{background-color:var(--builder-tool-chip-background-color);color:var(--builder-text-primary-color);font-family:Google Sans,sans-serif;font-size:14px;font-weight:500;cursor:pointer;margin:4px} .tools-chips-container .mat-mdc-chip.tool-chip:hover{background-color:var(--builder-tool-chip-hover-color)} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-action-label{display:flex;align-items:center;gap:6px} .tools-chips-container .mat-mdc-chip.tool-chip .tool-chip-name{display:inline-flex;align-items:center} .tools-chips-container .mat-mdc-chip.tool-chip .tool-icon{font-size:18px;width:18px;height:18px} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-remove{opacity:1;color:var(--builder-text-secondary-color)} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-remove mat-icon{font-size:18px;width:18px;height:18px} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-remove:hover{color:var(--builder-text-primary-color)} .tools-chips-container .mat-mdc-chip.callback-chip{background:var(--builder-callback-chip-background-color);background-color:var(--builder-callback-chip-background-color);color:var(--builder-callback-chip-text-color);font-family:Google Sans,sans-serif;font-size:14px;display:flex;flex-direction:row;align-items:center;gap:12px;width:auto;height:40px;border-radius:8px;border:none;box-shadow:none;outline:none;--mdc-chip-outline-width: 0;--mdc-chip-outline-color: transparent;--mdc-chip-elevated-container-color: var(--builder-callback-chip-background-color);--mdc-chip-flat-container-color: var(--builder-callback-chip-background-color);flex:1 1 auto;min-width:0} .tools-chips-container .mat-mdc-chip.callback-chip:before, .tools-chips-container .mat-mdc-chip.callback-chip:after, .tools-chips-container .mat-mdc-chip.callback-chip .mat-mdc-chip-focus-overlay{border:none;box-shadow:none} .tools-chips-container .mat-mdc-chip.callback-chip .mat-mdc-chip-action-label{display:flex;flex:1;align-items:center;width:100%;gap:12px} .tools-chips-container .mat-mdc-chip.callback-chip .chip-content{display:flex;flex-direction:row;align-items:center;gap:12px;flex:1;min-width:0} .tools-chips-container .mat-mdc-chip.callback-chip .chip-type{color:var(--builder-callback-chip-type-color);font-size:13px;font-weight:500;white-space:nowrap} .tools-chips-container .mat-mdc-chip.callback-chip .chip-name{color:var(--builder-callback-chip-name-color);font-size:15px;font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.tools-chips-container[_ngcontent-%COMP%]{margin-top:12px;padding:0 4px}.tools-chips-container.callbacks-list[_ngcontent-%COMP%]{padding-right:0;padding-left:0}.callback-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;width:100%;cursor:pointer}.callback-remove[_ngcontent-%COMP%]{color:var(--builder-icon-color);cursor:pointer;width:32px;height:32px;min-width:32px;min-height:32px;display:inline-flex;align-items:center;justify-content:center;padding:0}.callback-remove[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:1;display:flex;align-items:center;justify-content:center;transform:translateY(.5px)}.back-button[_ngcontent-%COMP%]{margin-bottom:16px}.add-tool-button[_ngcontent-%COMP%]{width:100%;background:linear-gradient(0deg,var(--builder-add-button-background-color) 0%,var(--builder-add-button-background-color) 100%),var(--builder-panel-background-color);border:none;border-radius:4px;margin-top:12px;cursor:pointer}.add-tool-button-detail[_ngcontent-%COMP%]{display:flex;padding:8px 16px 8px 12px;justify-content:center}.add-tool-button-text[_ngcontent-%COMP%]{padding-top:2px;color:var(--builder-add-button-text-color);font-family:Google Sans;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.agent-tool-section[_ngcontent-%COMP%]{margin-top:16px;padding:16px;border:1px solid var(--builder-border-color);border-radius:8px;background-color:var(--builder-secondary-background-color)}.agent-tool-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:16px;font-weight:500;margin:0 0 8px}.agent-tool-section[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;margin:0 0 16px;line-height:1.5}.agent-tool-section[_ngcontent-%COMP%] .create-agent-tool-btn[_ngcontent-%COMP%]{background-color:var(--builder-button-primary-background-color);color:var(--builder-button-primary-text-color);font-weight:500}.agent-tool-section[_ngcontent-%COMP%] .create-agent-tool-btn[_ngcontent-%COMP%]:hover{background-color:var(--builder-button-primary-hover-color)}.no-callbacks-message[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:16px;margin-top:16px;text-align:center}.callback-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;padding-right:8px}.callback-section[_ngcontent-%COMP%]{margin-top:16px}.callback-section[_ngcontent-%COMP%] .callback-section-label[_ngcontent-%COMP%]{margin:0 0 8px;color:var(--builder-text-secondary-color);font-size:14px;font-weight:500;text-transform:none}.callback-groups-wrapper[_ngcontent-%COMP%]{margin-top:16px}.callback-group[_ngcontent-%COMP%]{margin-top:5px;--mat-expansion-container-background-color: var(--builder-expansion-background-color);--mat-expansion-header-focus-state-layer-color: red;--mat-expansion-header-description-color: var(--builder-expansion-header-description-color);--mat-expansion-header-text-size: 15}.callback-list[_ngcontent-%COMP%]{padding:8px 0}.no-callbacks-in-type[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;font-style:italic;padding:12px;text-align:center}.callback-item[_ngcontent-%COMP%]{cursor:pointer;padding:8px 12px;border-radius:4px;display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;background-color:var(--builder-card-background-color);color:var(--builder-text-primary-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.callback-item[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{visibility:hidden}.callback-item[_ngcontent-%COMP%]:hover{background-color:var(--builder-expansion-hover-color)}.callback-item[_ngcontent-%COMP%]:hover button[_ngcontent-%COMP%]{visibility:visible}.add-callback-icon[_ngcontent-%COMP%]{color:var(--builder-button-primary-background-color)}.add-callback-icon[_ngcontent-%COMP%]:hover{background-color:var(--builder-add-button-background-color)} .callback-group .mat-expansion-panel-header.mat-expanded:focus{background-color:var(--builder-expansion-hover-color)!important} .callback-group .mat-expansion-panel-header.mat-expanded{background-color:var(--builder-expansion-hover-color)!important} .callback-group .mat-expansion-panel-header.mat-expanded:hover{background-color:var(--builder-expansion-hover-color)!important} .callback-group .mat-expansion-panel-header-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}mat-tab-group[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;padding:16px 20px 0;min-height:0} .mat-mdc-tab-body-wrapper{flex:1;overflow:hidden;min-height:0} .mat-mdc-tab-body-content{flex:1;overflow:hidden;display:flex;flex-direction:column;min-height:0}mat-tab-group[_ngcontent-%COMP%]{flex:1;padding-bottom:0;display:flex;flex-direction:column;overflow:hidden} .mat-mdc-tab-body-wrapper{flex:1;overflow:hidden} .mat-mdc-tab-body-content{height:100%;overflow:hidden} .mat-drawer-inner-container{overflow:hidden}.action-buttons[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;padding:16px 20px;border-top:1px solid var(--builder-border-color);flex-shrink:0;margin-top:auto;background-color:var(--builder-panel-background-color)}.action-buttons[_ngcontent-%COMP%] .save-button[_ngcontent-%COMP%]{background-color:var(--builder-button-primary-background-color);color:var(--builder-button-primary-text-color);font-weight:500}.action-buttons[_ngcontent-%COMP%] .save-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-button-primary-hover-color)}.action-buttons[_ngcontent-%COMP%] .cancel-button[_ngcontent-%COMP%]{color:var(--builder-button-secondary-text-color);border:1px solid var(--builder-button-secondary-border-color)}.action-buttons[_ngcontent-%COMP%] .cancel-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-button-secondary-hover-background-color);color:var(--builder-button-secondary-hover-text-color)}.builder-panel-wrapper[_ngcontent-%COMP%]{border-bottom:1px solid var(--builder-border-color);padding:12px 24px}.panel-title[_ngcontent-%COMP%]{color:var(--builder-text-tertiary-color);font-family:Google Sans;font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;justify-content:space-between}.panel-title[_ngcontent-%COMP%] .panel-action-button[_ngcontent-%COMP%]{color:var(--builder-icon-color);width:32px;height:32px;min-width:32px;min-height:32px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;padding:0}.panel-title[_ngcontent-%COMP%] .panel-action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:1;display:flex;align-items:center;justify-content:center}.content-wrapper[_ngcontent-%COMP%]{flex:1;overflow-y:auto}.drawer-logo[_ngcontent-%COMP%]{margin-left:9px;display:flex;align-items:center}.drawer-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:9px}.drawer-logo[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:.1px}.drawer-header[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between;align-items:center;--mat-button-filled-container-color: var(--side-panel-button-filled-container-color);--mat-button-filled-label-text-color: var(--side-panel-button-filled-label-text-color)}.drawer-header[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{width:36px;height:36px;color:var(--side-panel-mat-icon-color);cursor:pointer;display:flex;align-items:center;justify-content:center} .mat-mdc-menu-panel{background-color:var(--builder-menu-background-color)!important} .mat-mdc-menu-panel .menu-header{color:var(--builder-text-secondary-color);font-size:12px;padding:8px 16px;font-weight:500;text-transform:uppercase;pointer-events:none} .mat-mdc-menu-panel .mat-mdc-menu-item{color:var(--builder-text-primary-color)} .mat-mdc-menu-panel .mat-mdc-menu-item:hover{background-color:var(--builder-menu-item-hover-color)} .mat-mdc-menu-panel mat-divider{border-top-color:var(--builder-menu-divider-color);margin:4px 0}"],changeDetection:0})};var Gh=new yA("MARKDOWN_COMPONENT");var Z_A=["chatMessages"],X_A=(t,e)=>({"user-message":t,"bot-message":e}),$_A=t=>({text:t,thought:!1});function ALA(t,e){t&1&&(m(0,"div",7)(1,"mat-icon",12),K(2,"smart_toy"),w(),m(3,"h3"),K(4,"Assistant Ready"),w(),m(5,"p"),K(6,"Your builder assistant is ready to help you build agents."),w()())}function eLA(t,e){t&1&&(m(0,"div",15)(1,"span",16),K(2,"\u30FB\u30FB\u30FB"),w()())}function tLA(t,e){if(t&1&&(m(0,"div",18),K(1,"Assistant"),w(),on(2,19)),t&2){let A=v(2).$implicit,i=v(2);p(2),AA("ngComponentOutlet",i.markdownComponent)("ngComponentOutletInputs",ss(2,$_A,A.text))}}function iLA(t,e){if(t&1&&(m(0,"div",17),K(1),w()),t&2){let A=v(2).$implicit;p(),qA(A.text)}}function nLA(t,e){if(t&1&&V(0,tLA,3,4)(1,iLA,2,1,"div",17),t&2){let A=v().$implicit;W(A.role==="bot"?0:1)}}function oLA(t,e){if(t&1&&(m(0,"div",13)(1,"mat-card",14),V(2,eLA,3,0,"div",15)(3,nLA,2,1),w()()),t&2){let A=e.$implicit;AA("ngClass",Vl(2,X_A,A.role==="user",A.role==="bot")),p(2),W(A.isLoading?2:3)}}function aLA(t,e){if(t&1&&Ut(0,oLA,4,5,"div",13,_i),t&2){let A=v();Jt(A.messages)}}var _v=class t{isVisible=!0;appName="";closePanel=new WA;reloadCanvas=new WA;assistantAppName="__adk_agent_builder_assistant";userId="user";currentSession="";userMessage="";messages=[];shouldAutoScroll=!1;isGenerating=!1;chatMessages;markdownComponent=h(Gh);agentService=h(sg);sessionService=h(dl);agentBuilderService=h(E0);constructor(){}ngOnInit(){this.sessionService.createSession(this.userId,this.assistantAppName).subscribe(e=>{this.currentSession=e.id;let A={appName:this.assistantAppName,userId:this.userId,sessionId:e.id,newMessage:{role:"user",parts:[{text:"hello"}]},streaming:!1,stateDelta:{root_directory:`${this.appName}/tmp/${this.appName}`}};this.messages.push({role:"bot",text:"",isLoading:!0}),this.shouldAutoScroll=!0,this.isGenerating=!0,this.agentService.runSse(A).subscribe({next:i=>nt(this,null,function*(){if(i.content){let n="";for(let o of i.content.parts)o.text&&(n+=o.text);if(n){let o=this.messages[this.messages.length-1];o.role==="bot"&&o.isLoading&&(o.text=n,o.isLoading=!1,this.shouldAutoScroll=!0)}}}),error:i=>{console.error("SSE error:",i);let n=this.messages[this.messages.length-1];n.role==="bot"&&n.isLoading&&(n.text="Sorry, I encountered an error. Please try again.",n.isLoading=!1,this.shouldAutoScroll=!0),this.isGenerating=!1},complete:()=>{this.isGenerating=!1}})})}onClosePanel(){this.closePanel.emit()}sendMessage(e){if(e.trim()){this.saveAgent(this.appName),e!="____Something went wrong, please try again"&&this.messages.push({role:"user",text:e});let A=e;this.userMessage="",this.messages.push({role:"bot",text:"",isLoading:!0}),this.shouldAutoScroll=!0,this.isGenerating=!0;let i={appName:this.assistantAppName,userId:this.userId,sessionId:this.currentSession,newMessage:{role:"user",parts:[{text:A}]},streaming:!1};this.agentService.runSse(i).subscribe({next:n=>nt(this,null,function*(){if(n.errorCode&&(n.errorCode=="MALFORMED_FUNCTION_CALL"||n.errorCode=="STOP")){this.sendMessage("____Something went wrong, please try again");return}if(n.content){let o="";for(let a of n.content.parts)a.text&&(o+=a.text);if(o){let a=this.messages[this.messages.length-1];a.role==="bot"&&a.isLoading&&(a.text=o,a.isLoading=!1,this.shouldAutoScroll=!0,this.reloadCanvas.emit())}}}),error:n=>{console.error("SSE error:",n);let o=this.messages[this.messages.length-1];o.role==="bot"&&o.isLoading&&(o.text="Sorry, I encountered an error. Please try again.",o.isLoading=!1,this.shouldAutoScroll=!0),this.isGenerating=!1},complete:()=>{this.isGenerating=!1}})}}ngAfterViewChecked(){this.shouldAutoScroll&&(this.scrollToBottom(),this.shouldAutoScroll=!1)}scrollToBottom(){try{this.chatMessages&&setTimeout(()=>{this.chatMessages.nativeElement.scrollTop=this.chatMessages.nativeElement.scrollHeight},50)}catch(e){console.error("Error scrolling to bottom:",e)}}onKeyDown(e){if(e.key==="Enter"){if(e.shiftKey)return;this.userMessage?.trim()&&this.currentSession&&(e.preventDefault(),this.sendMessage(this.userMessage))}}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A)return;let i=new FormData,n=this.agentBuilderService.getCurrentAgentToolBoards();w0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{console.log(o?"save to tmp":"something went wrong")})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-builder-assistant"]],viewQuery:function(A,i){if(A&1&&ai(Z_A,5),A&2){let n;ce(n=Ce())&&(i.chatMessages=n.first)}},inputs:{isVisible:"isVisible",appName:"appName"},outputs:{closePanel:"closePanel",reloadCanvas:"reloadCanvas"},decls:21,vars:6,consts:[["chatMessages",""],[1,"builder-assistant-panel"],[1,"panel-header"],[1,"panel-title"],["mat-icon-button","","matTooltip","Close assistant panel",1,"close-btn",3,"click"],[1,"panel-content"],[1,"chat-messages"],[1,"assistant-placeholder"],[1,"chat-input-container"],[1,"input-wrapper"],["cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","5","placeholder","Ask Gemini to build your agent",1,"assistant-input-box",3,"ngModelChange","keydown","ngModel","disabled"],["mat-icon-button","","matTooltip","Send message",1,"send-button",3,"click","disabled"],[1,"large-icon"],[3,"ngClass"],[1,"message-card"],[1,"loading-message"],[1,"dots"],[1,"message-text"],[1,"bot-label"],[3,"ngComponentOutlet","ngComponentOutletInputs"]],template:function(A,i){if(A&1){let n=JA();m(0,"div",1)(1,"div",2)(2,"div",3)(3,"mat-icon"),K(4,"auto_awesome"),w(),m(5,"span"),K(6,"Assistant"),w()(),m(7,"button",4),eA("click",function(){return Z(n),X(i.onClosePanel())}),m(8,"mat-icon"),K(9,"close"),w()()(),m(10,"div",5)(11,"div",6,0),V(13,ALA,7,0,"div",7)(14,aLA,2,0),w(),m(15,"div",8)(16,"div",9)(17,"textarea",10),ho("ngModelChange",function(a){return Z(n),ao(i.userMessage,a)||(i.userMessage=a),X(a)}),eA("keydown",function(a){return Z(n),X(i.onKeyDown(a))}),w(),m(18,"button",11),eA("click",function(){return Z(n),X(i.sendMessage(i.userMessage.trim()))}),m(19,"mat-icon"),K(20,"send"),w()()()()()()}A&2&&(ae("hidden",!i.isVisible),p(13),W(i.messages.length===0?13:14),p(4),Qo("ngModel",i.userMessage),AA("disabled",i.isGenerating),p(),AA("disabled",!i.userMessage.trim()||i.isGenerating))},dependencies:[fa,gs,p2,Nn,uo,fo,ba,fn,Ma,Sa,aE,KB,zp],styles:[".builder-assistant-panel[_ngcontent-%COMP%]{position:fixed;right:0;top:72px;width:400px;height:calc(100vh - 72px);background:var(--builder-assistant-panel-background-color);border-left:1px solid var(--builder-assistant-panel-border-color);box-shadow:-2px 0 10px #0006;z-index:999;display:flex;flex-direction:column;transition:transform .3s ease}.builder-assistant-panel.hidden[_ngcontent-%COMP%]{transform:translate(100%)}.panel-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--builder-assistant-panel-border-color);background:var(--builder-assistant-panel-header-background-color)}.panel-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-weight:400;font-size:16px;color:var(--builder-text-primary-color);font-family:Google Sans,Helvetica Neue,sans-serif}.panel-title[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:20px;width:20px;height:20px}.close-btn[_ngcontent-%COMP%]{color:var(--builder-text-tertiary-color)}.close-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-add-button-background-color)}.panel-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;background:var(--builder-assistant-panel-background-color);overflow:hidden}.assistant-placeholder[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;height:300px;color:var(--builder-text-secondary-color)}.assistant-placeholder[_ngcontent-%COMP%] .large-icon[_ngcontent-%COMP%]{font-size:64px;width:64px;height:64px;margin-bottom:16px;color:var(--builder-button-primary-background-color)}.assistant-placeholder[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 8px;font-size:20px;font-weight:500;color:var(--builder-text-primary-color);font-family:Google Sans,Helvetica Neue,sans-serif}.assistant-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;line-height:1.5;color:var(--builder-text-secondary-color)}.chat-messages[_ngcontent-%COMP%]{flex:1;padding:20px;overflow-y:auto;display:flex;flex-direction:column}.chat-input-container[_ngcontent-%COMP%]{padding:16px 20px 20px;border-top:none;background:var(--builder-assistant-panel-background-color)}.input-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;background-color:var(--builder-assistant-input-background-color);border-radius:50px;padding:10px 6px 10px 18px;gap:8px}.assistant-input-box[_ngcontent-%COMP%]{flex:1;color:var(--builder-assistant-input-text-color);border:none;padding:0;background:transparent;resize:none;overflow:hidden;font-family:Google Sans,Helvetica Neue,sans-serif;font-size:14px;line-height:20px;min-height:20px;max-height:120px}.assistant-input-box[_ngcontent-%COMP%]::placeholder{color:var(--builder-assistant-input-placeholder-color);font-size:14px}.assistant-input-box[_ngcontent-%COMP%]:focus{outline:none}.assistant-input-box[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px}.assistant-input-box[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--builder-border-color);border-radius:4px}.send-button[_ngcontent-%COMP%]{background-color:transparent;color:var(--builder-assistant-send-button-color);width:36px;height:36px;min-width:36px;flex-shrink:0;margin:0;padding:0}.send-button[_ngcontent-%COMP%] .mat-mdc-button-touch-target{display:none}.send-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple{display:none}.send-button[_ngcontent-%COMP%]:disabled{background-color:transparent;color:var(--builder-assistant-send-button-disabled-color)}.send-button[_ngcontent-%COMP%]:hover:not(:disabled){background-color:var(--builder-add-button-background-color);color:var(--builder-assistant-send-button-hover-color);border-radius:50%}.send-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.message-card[_ngcontent-%COMP%]{padding:10px 16px;margin:6px 0;font-size:14px;font-weight:400;position:relative;display:block;box-shadow:none;line-height:1.5;width:100%}.user-message[_ngcontent-%COMP%]{display:block;width:100%;margin-bottom:12px}.user-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--builder-assistant-user-message-background-color);border:1px solid var(--builder-assistant-user-message-border-color);border-radius:4px;color:var(--builder-assistant-user-message-text-color);padding:8px 12px}.bot-message[_ngcontent-%COMP%]{display:block;width:100%;margin-bottom:0}.bot-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:transparent;border:none;border-radius:0;color:var(--builder-assistant-bot-message-text-color);padding:0;margin:0}.bot-label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--builder-text-secondary-color);margin-bottom:8px;font-family:Google Sans,Helvetica Neue,sans-serif}.message-text[_ngcontent-%COMP%]{white-space:pre-line;word-break:break-word;overflow-wrap:break-word;font-family:Google Sans,Helvetica Neue,sans-serif}.message-text[_ngcontent-%COMP%] p{margin:0;line-height:1.4}.message-text[_ngcontent-%COMP%] p:first-child{margin-top:0}.message-text[_ngcontent-%COMP%] p:last-child{margin-bottom:0}.message-text[_ngcontent-%COMP%] ul, .message-text[_ngcontent-%COMP%] ol{margin:0;padding-left:1.5em}.message-text[_ngcontent-%COMP%] li{margin:0}.message-text[_ngcontent-%COMP%] code{background-color:#ffffff1a;padding:2px 4px;border-radius:3px;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.9em}.message-text[_ngcontent-%COMP%] pre{background-color:#ffffff0d;padding:8px 12px;border-radius:6px;overflow-x:auto;margin:.5em 0}.message-text[_ngcontent-%COMP%] pre code{background:none;padding:0}.message-text[_ngcontent-%COMP%] blockquote{border-left:3px solid var(--builder-button-primary-background-color);padding-left:12px;margin:.5em 0;font-style:italic;color:var(--builder-text-tertiary-color)}.message-text[_ngcontent-%COMP%] strong{font-weight:600}.message-text[_ngcontent-%COMP%] em{font-style:italic}.loading-message[_ngcontent-%COMP%]{display:flex;align-items:center;color:var(--builder-text-secondary-color);font-family:Google Sans,Helvetica Neue,sans-serif;padding:0;margin:0}.loading-message[_ngcontent-%COMP%] .dots[_ngcontent-%COMP%]{font-size:24px;letter-spacing:-12px;animation:_ngcontent-%COMP%_pulse 1.4s ease-in-out infinite;display:inline-block;line-height:1}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:.3}50%{opacity:1}}"]})};var Kh=class t{constructor(e,A){this.http=e;this.zone=A}apiServerDomain=zr.getApiServerBaseUrl();_currentApp=new Tt("");currentApp=this._currentApp.asObservable();isLoading=new Tt(!1);getApp(){return this.currentApp}setApp(e){this._currentApp.next(e)}getLoadingState(){return this.isLoading}runSse(e){let A=this.apiServerDomain+"/run_sse";return this.isLoading.next(!0),new ji(i=>{let n=this;fetch(A,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify(e)}).then(o=>{let a=o.body?.getReader(),r=new TextDecoder("utf-8"),s="",g=()=>{a?.read().then(({done:l,value:C})=>{if(this.isLoading.next(!0),l)return this.isLoading.next(!1),i.complete();let I=r.decode(C,{stream:!0});s+=I;try{s.split(/\r?\n/).filter(B=>B.startsWith("data:")).forEach(B=>{let E=B.replace(/^data:\s*/,""),Q=JSON.parse(E);n.zone.run(()=>i.next(Q))}),s=""}catch(d){d instanceof SyntaxError&&g()}g()}).catch(l=>{n.zone.run(()=>i.error(l))})};g()}).catch(o=>{n.zone.run(()=>i.error(o))})})}listApps(){if(this.apiServerDomain!=null){let e=this.apiServerDomain+"/list-apps?relative_path=./";return this.http.get(e)}return new ji}agentBuild(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+"/builder/save";return this.http.post(A,e)}return new ji}agentBuildTmp(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+"/builder/save?tmp=true";return this.http.post(A,e)}return new ji}getAgentBuilder(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}`;return this.http.get(A,{responseType:"text"})}return new ji}getAgentBuilderTmp(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}&tmp=true`;return this.http.get(A,{responseType:"text"})}return new ji}getSubAgentBuilder(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}&file_path=${A}&tmp=true`;return this.http.get(i,{responseType:"text"})}return new ji}agentChangeCancel(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}/cancel`;return this.http.post(A,{})}return new ji}getAppInfo(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/dev/build_graph/${e}`;return this.http.get(A)}return new ji}static \u0275fac=function(A){return new(A||t)(So($s),So(Oe))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Lv="http://www.w3.org/1999/xhtml",vG={svg:"http://www.w3.org/2000/svg",xhtml:Lv,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function c2(t){var e=t+="",A=e.indexOf(":");return A>=0&&(e=t.slice(0,A))!=="xmlns"&&(t=t.slice(A+1)),vG.hasOwnProperty(e)?{space:vG[e],local:t}:t}function sLA(t){return function(){var e=this.ownerDocument,A=this.namespaceURI;return A===Lv&&e.documentElement.namespaceURI===Lv?e.createElement(t):e.createElementNS(A,t)}}function gLA(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Gv(t){var e=c2(t);return(e.local?gLA:sLA)(e)}function lLA(){}function rB(t){return t==null?lLA:function(){return this.querySelector(t)}}function paA(t){typeof t!="function"&&(t=rB(t));for(var e=this._groups,A=e.length,i=new Array(A),n=0;n=S&&(S=b+1);!(D=Q[S])&&++S=0;)(a=i[n])&&(o&&a.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(a,o),o=a);return this}function FaA(t){t||(t=wLA);function e(C,I){return C&&I?t(C.__data__,I.__data__):!C-!I}for(var A=this._groups,i=A.length,n=new Array(i),o=0;oe?1:t>=e?0:NaN}function _aA(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function LaA(){return Array.from(this)}function GaA(){for(var t=this._groups,e=0,A=t.length;e1?this.each((e==null?SLA:typeof e=="function"?RLA:xLA)(t,e,A??"")):g1(this.node(),t)}function g1(t,e){return t.style.getPropertyValue(e)||Jv(t).getComputedStyle(t,null).getPropertyValue(e)}function NLA(t){return function(){delete this[t]}}function FLA(t,e){return function(){this[t]=e}}function _LA(t,e){return function(){var A=e.apply(this,arguments);A==null?delete this[t]:this[t]=A}}function HaA(t,e){return arguments.length>1?this.each((e==null?NLA:typeof e=="function"?_LA:FLA)(t,e)):this.node()[t]}function zaA(t){return t.trim().split(/^|\s+/)}function MG(t){return t.classList||new OaA(t)}function OaA(t){this._node=t,this._names=zaA(t.getAttribute("class")||"")}OaA.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function PaA(t,e){for(var A=MG(t),i=-1,n=e.length;++i=0&&(A=e.slice(i+1),e=e.slice(0,i)),{type:e,name:A}})}function $LA(t){return function(){var e=this.__on;if(e){for(var A=0,i=-1,n=e.length,o;A{}};function crA(){for(var t=0,e=arguments.length,A={},i;t=0&&(i=A.slice(n+1),A=A.slice(0,n)),A&&!e.hasOwnProperty(A))throw new Error("unknown type: "+A);return{type:A,name:i}})}Yv.prototype=crA.prototype={constructor:Yv,on:function(t,e){var A=this._,i=oGA(t+"",A),n,o=-1,a=i.length;if(arguments.length<2){for(;++o0)for(var A=new Array(n),i=0,n,o;i()=>t;function fm(t,{sourceEvent:e,subject:A,target:i,identifier:n,active:o,x:a,y:r,dx:s,dy:g,dispatch:l}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},subject:{value:A,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},identifier:{value:n,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:a,enumerable:!0,configurable:!0},y:{value:r,enumerable:!0,configurable:!0},dx:{value:s,enumerable:!0,configurable:!0},dy:{value:g,enumerable:!0,configurable:!0},_:{value:l}})}fm.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};function rGA(t){return!t.ctrlKey&&!t.button}function sGA(){return this.parentNode}function gGA(t,e){return e??{x:t.x,y:t.y}}function lGA(){return navigator.maxTouchPoints||"ontouchstart"in this}function Hv(){var t=rGA,e=sGA,A=gGA,i=lGA,n={},o=sB("start","drag","end"),a=0,r,s,g,l,C=0;function I(M){M.on("mousedown.drag",d).filter(i).on("touchstart.drag",Q).on("touchmove.drag",f,CrA).on("touchend.drag touchcancel.drag",b).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(M,D){if(!(l||!t.call(this,M,D))){var F=S(this,e.call(this,M,D),M,D,"mouse");F&&(_r(M.view).on("mousemove.drag",B,gB).on("mouseup.drag",E,gB),Qm(M.view),Tv(M),g=!1,r=M.clientX,s=M.clientY,F("start",M))}}function B(M){if(l1(M),!g){var D=M.clientX-r,F=M.clientY-s;g=D*D+F*F>C}n.mouse("drag",M)}function E(M){_r(M.view).on("mousemove.drag mouseup.drag",null),hm(M.view,g),l1(M),n.mouse("end",M)}function Q(M,D){if(t.call(this,M,D)){var F=M.changedTouches,_=e.call(this,M,D),U=F.length,J,j;for(J=0;J>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):A===8?Ov(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):A===4?Ov(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=CGA.exec(t))?new Mg(e[1],e[2],e[3],1):(e=IGA.exec(t))?new Mg(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=dGA.exec(t))?Ov(e[1],e[2],e[3],e[4]):(e=BGA.exec(t))?Ov(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=EGA.exec(t))?urA(e[1],e[2]/100,e[3]/100,1):(e=QGA.exec(t))?urA(e[1],e[2]/100,e[3]/100,e[4]):IrA.hasOwnProperty(t)?ErA(IrA[t]):t==="transparent"?new Mg(NaN,NaN,NaN,0):null}function ErA(t){return new Mg(t>>16&255,t>>8&255,t&255,1)}function Ov(t,e,A,i){return i<=0&&(t=e=A=NaN),new Mg(t,e,A,i)}function fGA(t){return t instanceof wm||(t=c1(t)),t?(t=t.rgb(),new Mg(t.r,t.g,t.b,t.opacity)):new Mg}function Jh(t,e,A,i){return arguments.length===1?fGA(t):new Mg(t,e,A,i??1)}function Mg(t,e,A,i){this.r=+t,this.g=+e,this.b=+A,this.opacity=+i}zv(Mg,Jh,SG(wm,{brighter(t){return t=t==null?jv:Math.pow(jv,t),new Mg(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?mm:Math.pow(mm,t),new Mg(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Mg(cB(this.r),cB(this.g),cB(this.b),qv(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:QrA,formatHex:QrA,formatHex8:mGA,formatRgb:hrA,toString:hrA}));function QrA(){return`#${lB(this.r)}${lB(this.g)}${lB(this.b)}`}function mGA(){return`#${lB(this.r)}${lB(this.g)}${lB(this.b)}${lB((isNaN(this.opacity)?1:this.opacity)*255)}`}function hrA(){let t=qv(this.opacity);return`${t===1?"rgb(":"rgba("}${cB(this.r)}, ${cB(this.g)}, ${cB(this.b)}${t===1?")":`, ${t})`}`}function qv(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function cB(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function lB(t){return t=cB(t),(t<16?"0":"")+t.toString(16)}function urA(t,e,A,i){return i<=0?t=e=A=NaN:A<=0||A>=1?t=e=NaN:e<=0&&(t=NaN),new Vc(t,e,A,i)}function mrA(t){if(t instanceof Vc)return new Vc(t.h,t.s,t.l,t.opacity);if(t instanceof wm||(t=c1(t)),!t)return new Vc;if(t instanceof Vc)return t;t=t.rgb();var e=t.r/255,A=t.g/255,i=t.b/255,n=Math.min(e,A,i),o=Math.max(e,A,i),a=NaN,r=o-n,s=(o+n)/2;return r?(e===o?a=(A-i)/r+(A0&&s<1?0:a,new Vc(a,r,s,t.opacity)}function prA(t,e,A,i){return arguments.length===1?mrA(t):new Vc(t,e,A,i??1)}function Vc(t,e,A,i){this.h=+t,this.s=+e,this.l=+A,this.opacity=+i}zv(Vc,prA,SG(wm,{brighter(t){return t=t==null?jv:Math.pow(jv,t),new Vc(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?mm:Math.pow(mm,t),new Vc(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,A=this.l,i=A+(A<.5?A:1-A)*e,n=2*A-i;return new Mg(xG(t>=240?t-240:t+120,n,i),xG(t,n,i),xG(t<120?t+240:t-120,n,i),this.opacity)},clamp(){return new Vc(frA(this.h),Pv(this.s),Pv(this.l),qv(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=qv(this.opacity);return`${t===1?"hsl(":"hsla("}${frA(this.h)}, ${Pv(this.s)*100}%, ${Pv(this.l)*100}%${t===1?")":`, ${t})`}`}}));function frA(t){return t=(t||0)%360,t<0?t+360:t}function Pv(t){return Math.max(0,Math.min(1,t||0))}function xG(t,e,A){return(t<60?e+(A-e)*t/60:t<180?A:t<240?e+(A-e)*(240-t)/60:e)*255}function RG(t,e,A,i,n){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*A+(1+3*t+3*o-3*a)*i+a*n)/6}function wrA(t){var e=t.length-1;return function(A){var i=A<=0?A=0:A>=1?(A=1,e-1):Math.floor(A*e),n=t[i],o=t[i+1],a=i>0?t[i-1]:2*n-o,r=i()=>t;function pGA(t,e){return function(A){return t+A*e}}function wGA(t,e,A){return t=Math.pow(t,A),e=Math.pow(e,A)-t,A=1/A,function(i){return Math.pow(t+i*e,A)}}function yrA(t){return(t=+t)==1?Vv:function(e,A){return A-e?wGA(e,A,t):NG(isNaN(e)?A:e)}}function Vv(t,e){var A=e-t;return A?pGA(t,A):NG(isNaN(t)?e:t)}var Wv=(function t(e){var A=yrA(e);function i(n,o){var a=A((n=Jh(n)).r,(o=Jh(o)).r),r=A(n.g,o.g),s=A(n.b,o.b),g=Vv(n.opacity,o.opacity);return function(l){return n.r=a(l),n.g=r(l),n.b=s(l),n.opacity=g(l),n+""}}return i.gamma=t,i})(1);function vrA(t){return function(e){var A=e.length,i=new Array(A),n=new Array(A),o=new Array(A),a,r;for(a=0;aA&&(o=e.slice(A,o),r[a]?r[a]+=o:r[++a]=o),(i=i[0])===(n=n[0])?r[a]?r[a]+=n:r[++a]=n:(r[++a]=null,s.push({i:a,x:Hl(i,n)})),A=FG.lastIndex;return A180?l+=360:l-g>180&&(g+=360),I.push({i:C.push(n(C)+"rotate(",null,i)-2,x:Hl(g,l)})):l&&C.push(n(C)+"rotate("+l+i)}function r(g,l,C,I){g!==l?I.push({i:C.push(n(C)+"skewX(",null,i)-2,x:Hl(g,l)}):l&&C.push(n(C)+"skewX("+l+i)}function s(g,l,C,I,d,B){if(g!==C||l!==I){var E=d.push(n(d)+"scale(",null,",",null,")");B.push({i:E-4,x:Hl(g,C)},{i:E-2,x:Hl(l,I)})}else(C!==1||I!==1)&&d.push(n(d)+"scale("+C+","+I+")")}return function(g,l){var C=[],I=[];return g=t(g),l=t(l),o(g.translateX,g.translateY,l.translateX,l.translateY,C,I),a(g.rotate,l.rotate,C,I),r(g.skewX,l.skewX,C,I),s(g.scaleX,g.scaleY,l.scaleX,l.scaleY,C,I),g=l=null,function(d){for(var B=-1,E=I.length,Q;++B=0&&t._call.call(void 0,e),t=t._next;--Yh}function RrA(){CB=(A7=bm.now())+e7,Yh=ym=0;try{_rA()}finally{Yh=0,NGA(),CB=0}}function RGA(){var t=bm.now(),e=t-A7;e>NrA&&(e7-=e,A7=t)}function NGA(){for(var t,e=$v,A,i=1/0;e;)e._call?(i>e._time&&(i=e._time),t=e,e=e._next):(A=e._next,e._next=null,e=t?t._next=A:$v=A);vm=t,YG(i)}function YG(t){if(!Yh){ym&&(ym=clearTimeout(ym));var e=t-CB;e>24?(t<1/0&&(ym=setTimeout(RrA,t-bm.now()-e7)),Dm&&(Dm=clearInterval(Dm))):(Dm||(A7=bm.now(),Dm=setInterval(RGA,NrA)),Yh=1,FrA(RrA))}}function i7(t,e,A){var i=new Mm;return e=e==null?0:+e,i.restart(n=>{i.stop(),t(n+e)},e,A),i}var FGA=sB("start","end","cancel","interrupt"),_GA=[],KrA=0,LrA=1,o7=2,n7=3,GrA=4,a7=5,Sm=6;function C1(t,e,A,i,n,o){var a=t.__transition;if(!a)t.__transition={};else if(A in a)return;LGA(t,A,{name:e,index:i,group:n,on:FGA,tween:_GA,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:KrA})}function xm(t,e){var A=ur(t,e);if(A.state>KrA)throw new Error("too late; already scheduled");return A}function ns(t,e){var A=ur(t,e);if(A.state>n7)throw new Error("too late; already running");return A}function ur(t,e){var A=t.__transition;if(!A||!(A=A[e]))throw new Error("transition not found");return A}function LGA(t,e,A){var i=t.__transition,n;i[e]=A,A.timer=t7(o,0,A.time);function o(g){A.state=LrA,A.timer.restart(a,A.delay,A.time),A.delay<=g&&a(g-A.delay)}function a(g){var l,C,I,d;if(A.state!==LrA)return s();for(l in i)if(d=i[l],d.name===A.name){if(d.state===n7)return i7(a);d.state===GrA?(d.state=Sm,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete i[l]):+lo7&&i.state=0&&(e=e.slice(0,A)),!e||e==="start"})}function tKA(t,e,A){var i,n,o=eKA(e)?xm:ns;return function(){var a=o(this,t),r=a.on;r!==i&&(n=(i=r).copy()).on(e,A),a.on=n}}function VrA(t,e){var A=this._id;return arguments.length<2?ur(this.node(),A).on.on(t):this.each(tKA(A,t,e))}function iKA(t){return function(){var e=this.parentNode;for(var A in this.__transition)if(+A!==t)return;e&&e.removeChild(this)}}function WrA(){return this.on("end.remove",iKA(this._id))}function ZrA(t){var e=this._name,A=this._id;typeof t!="function"&&(t=rB(t));for(var i=this._groups,n=i.length,o=new Array(n),a=0;a()=>t;function TG(t,{sourceEvent:e,target:A,transform:i,dispatch:n}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},target:{value:A,enumerable:!0,configurable:!0},transform:{value:i,enumerable:!0,configurable:!0},_:{value:n}})}function Wc(t,e,A){this.k=t,this.x=e,this.y=A}Wc.prototype={constructor:Wc,scale:function(t){return t===1?this:new Wc(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new Wc(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var I1=new Wc(1,0,0);HG.prototype=Wc.prototype;function HG(t){for(;!t.__zoom;)if(!(t=t.parentNode))return I1;return t.__zoom}function l7(t){t.stopImmediatePropagation()}function Hh(t){t.preventDefault(),t.stopImmediatePropagation()}function hKA(t){return(!t.ctrlKey||t.type==="wheel")&&!t.button}function uKA(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t,t.hasAttribute("viewBox")?(t=t.viewBox.baseVal,[[t.x,t.y],[t.x+t.width,t.y+t.height]]):[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]):[[0,0],[t.clientWidth,t.clientHeight]]}function gsA(){return this.__zoom||I1}function fKA(t){return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function mKA(){return navigator.maxTouchPoints||"ontouchstart"in this}function pKA(t,e,A){var i=t.invertX(e[0][0])-A[0][0],n=t.invertX(e[1][0])-A[1][0],o=t.invertY(e[0][1])-A[0][1],a=t.invertY(e[1][1])-A[1][1];return t.translate(n>i?(i+n)/2:Math.min(0,i)||Math.max(0,n),a>o?(o+a)/2:Math.min(0,o)||Math.max(0,a))}function zG(){var t=hKA,e=uKA,A=pKA,i=fKA,n=mKA,o=[0,1/0],a=[[-1/0,-1/0],[1/0,1/0]],r=250,s=JG,g=sB("start","zoom","end"),l,C,I,d=500,B=150,E=0,Q=10;function f(P){P.property("__zoom",gsA).on("wheel.zoom",U,{passive:!1}).on("mousedown.zoom",J).on("dblclick.zoom",j).filter(n).on("touchstart.zoom",$).on("touchmove.zoom",O).on("touchend.zoom touchcancel.zoom",DA).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}f.transform=function(P,aA,iA,BA){var oA=P.selection?P.selection():P;oA.property("__zoom",gsA),P!==oA?D(P,aA,iA,BA):oA.interrupt().each(function(){F(this,arguments).event(BA).start().zoom(null,typeof aA=="function"?aA.apply(this,arguments):aA).end()})},f.scaleBy=function(P,aA,iA,BA){f.scaleTo(P,function(){var oA=this.__zoom.k,sA=typeof aA=="function"?aA.apply(this,arguments):aA;return oA*sA},iA,BA)},f.scaleTo=function(P,aA,iA,BA){f.transform(P,function(){var oA=e.apply(this,arguments),sA=this.__zoom,hA=iA==null?M(oA):typeof iA=="function"?iA.apply(this,arguments):iA,YA=sA.invert(hA),ee=typeof aA=="function"?aA.apply(this,arguments):aA;return A(S(b(sA,ee),hA,YA),oA,a)},iA,BA)},f.translateBy=function(P,aA,iA,BA){f.transform(P,function(){return A(this.__zoom.translate(typeof aA=="function"?aA.apply(this,arguments):aA,typeof iA=="function"?iA.apply(this,arguments):iA),e.apply(this,arguments),a)},null,BA)},f.translateTo=function(P,aA,iA,BA,oA){f.transform(P,function(){var sA=e.apply(this,arguments),hA=this.__zoom,YA=BA==null?M(sA):typeof BA=="function"?BA.apply(this,arguments):BA;return A(I1.translate(YA[0],YA[1]).scale(hA.k).translate(typeof aA=="function"?-aA.apply(this,arguments):-aA,typeof iA=="function"?-iA.apply(this,arguments):-iA),sA,a)},BA,oA)};function b(P,aA){return aA=Math.max(o[0],Math.min(o[1],aA)),aA===P.k?P:new Wc(aA,P.x,P.y)}function S(P,aA,iA){var BA=aA[0]-iA[0]*P.k,oA=aA[1]-iA[1]*P.k;return BA===P.x&&oA===P.y?P:new Wc(P.k,BA,oA)}function M(P){return[(+P[0][0]+ +P[1][0])/2,(+P[0][1]+ +P[1][1])/2]}function D(P,aA,iA,BA){P.on("start.zoom",function(){F(this,arguments).event(BA).start()}).on("interrupt.zoom end.zoom",function(){F(this,arguments).event(BA).end()}).tween("zoom",function(){var oA=this,sA=arguments,hA=F(oA,sA).event(BA),YA=e.apply(oA,sA),ee=iA==null?M(YA):typeof iA=="function"?iA.apply(oA,sA):iA,UA=Math.max(YA[1][0]-YA[0][0],YA[1][1]-YA[0][1]),mA=oA.__zoom,KA=typeof aA=="function"?aA.apply(oA,sA):aA,Pe=s(mA.invert(ee).concat(UA/mA.k),KA.invert(ee).concat(UA/KA.k));return function(Ue){if(Ue===1)Ue=KA;else{var HA=Pe(Ue),uA=UA/HA[2];Ue=new Wc(uA,ee[0]-HA[0]*uA,ee[1]-HA[1]*uA)}hA.zoom(null,Ue)}})}function F(P,aA,iA){return!iA&&P.__zooming||new _(P,aA)}function _(P,aA){this.that=P,this.args=aA,this.active=0,this.sourceEvent=null,this.extent=e.apply(P,aA),this.taps=0}_.prototype={event:function(P){return P&&(this.sourceEvent=P),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(P,aA){return this.mouse&&P!=="mouse"&&(this.mouse[1]=aA.invert(this.mouse[0])),this.touch0&&P!=="touch"&&(this.touch0[1]=aA.invert(this.touch0[0])),this.touch1&&P!=="touch"&&(this.touch1[1]=aA.invert(this.touch1[0])),this.that.__zoom=aA,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(P){var aA=_r(this.that).datum();g.call(P,this.that,new TG(P,{sourceEvent:this.sourceEvent,target:f,type:P,transform:this.that.__zoom,dispatch:g}),aA)}};function U(P,...aA){if(!t.apply(this,arguments))return;var iA=F(this,aA).event(P),BA=this.__zoom,oA=Math.max(o[0],Math.min(o[1],BA.k*Math.pow(2,i.apply(this,arguments)))),sA=Tl(P);if(iA.wheel)(iA.mouse[0][0]!==sA[0]||iA.mouse[0][1]!==sA[1])&&(iA.mouse[1]=BA.invert(iA.mouse[0]=sA)),clearTimeout(iA.wheel);else{if(BA.k===oA)return;iA.mouse=[sA,BA.invert(sA)],IB(this),iA.start()}Hh(P),iA.wheel=setTimeout(hA,B),iA.zoom("mouse",A(S(b(BA,oA),iA.mouse[0],iA.mouse[1]),iA.extent,a));function hA(){iA.wheel=null,iA.end()}}function J(P,...aA){if(I||!t.apply(this,arguments))return;var iA=P.currentTarget,BA=F(this,aA,!0).event(P),oA=_r(P.view).on("mousemove.zoom",ee,!0).on("mouseup.zoom",UA,!0),sA=Tl(P,iA),hA=P.clientX,YA=P.clientY;Qm(P.view),l7(P),BA.mouse=[sA,this.__zoom.invert(sA)],IB(this),BA.start();function ee(mA){if(Hh(mA),!BA.moved){var KA=mA.clientX-hA,Pe=mA.clientY-YA;BA.moved=KA*KA+Pe*Pe>E}BA.event(mA).zoom("mouse",A(S(BA.that.__zoom,BA.mouse[0]=Tl(mA,iA),BA.mouse[1]),BA.extent,a))}function UA(mA){oA.on("mousemove.zoom mouseup.zoom",null),hm(mA.view,BA.moved),Hh(mA),BA.event(mA).end()}}function j(P,...aA){if(t.apply(this,arguments)){var iA=this.__zoom,BA=Tl(P.changedTouches?P.changedTouches[0]:P,this),oA=iA.invert(BA),sA=iA.k*(P.shiftKey?.5:2),hA=A(S(b(iA,sA),BA,oA),e.apply(this,aA),a);Hh(P),r>0?_r(this).transition().duration(r).call(D,hA,BA,P):_r(this).call(f.transform,hA,BA,P)}}function $(P,...aA){if(t.apply(this,arguments)){var iA=P.touches,BA=iA.length,oA=F(this,aA,P.changedTouches.length===BA).event(P),sA,hA,YA,ee;for(l7(P),hA=0;hA{let A=Math.max(0,Math.min(t.x+t.width,e.x+e.width)-Math.max(t.x,e.x)),i=Math.max(0,Math.min(t.y+t.height,e.y+e.height)-Math.max(t.y,e.y));return Math.ceil(A*i)};function vsA(t){if(t.length===0)return{x:0,y:0,width:0,height:0};let e={x:1/0,y:1/0,x2:-1/0,y2:-1/0};return t.forEach(A=>{let i=zUA(A);e=PUA(e,i)}),OUA(e)}function HUA(t,e,A){let i=e.find(o=>o.rawNode.id===t);if(!i)return[];let n=C7(i);return e.filter(o=>{if(o.rawNode.id===t)return!1;let a=TUA(C7(o),n);return A?.partially?a>0:a>=n.width*n.height})}function zUA(t){return{x:t.point().x,y:t.point().y,x2:t.point().x+t.size().width,y2:t.point().y+t.size().height}}function C7(t){return{x:t.globalPoint().x,y:t.globalPoint().y,width:t.width(),height:t.height()}}function OUA({x:t,y:e,x2:A,y2:i}){return{x:t,y:e,width:A-t,height:i-e}}function PUA(t,e){return{x:Math.min(t.x,e.x),y:Math.min(t.y,e.y),x2:Math.max(t.x2,e.x2),y2:Math.max(t.y2,e.y2)}}var I7=class{constructor(e){this.settings=e,this.curve=e.curve??"bezier",this.type=e.type??"default",this.mode=e.mode??"strict";let A=this.getValidators(e);this.validator=i=>A.every(n=>n(i))}getValidators(e){let A=[];return A.push(jUA),this.mode==="loose"&&A.push(qUA),e.validator&&A.push(e.validator),A}},jUA=t=>t.source!==t.target,qUA=t=>t.sourceHandle!==void 0&&t.targetHandle!==void 0;function Oh(t){return t.split("").reduce((e,A)=>(e=(e<<5)-e+A.charCodeAt(0),e&e),0)}var Sg=(()=>{class t{constructor(){this.nodes=jA([],{equal:(A,i)=>!A.length&&!i.length?!0:A===i}),this.rawNodes=Ke(()=>this.nodes().map(A=>A.rawNode)),this.edges=jA([],{equal:(A,i)=>!A.length&&!i.length?!0:A===i}),this.rawEdges=Ke(()=>this.edges().map(A=>A.edge)),this.validEdges=Ke(()=>{let A=this.nodes();return this.edges().filter(i=>A.includes(i.source())&&A.includes(i.target()))}),this.connection=jA(new I7({})),this.markers=Ke(()=>{let A=new Map;this.validEdges().forEach(n=>{if(n.edge.markers?.start){let o=Oh(JSON.stringify(n.edge.markers.start));A.set(o,n.edge.markers.start)}if(n.edge.markers?.end){let o=Oh(JSON.stringify(n.edge.markers.end));A.set(o,n.edge.markers.end)}});let i=this.connection().settings.marker;if(i){let n=Oh(JSON.stringify(i));A.set(n,i)}return A}),this.entities=Ke(()=>[...this.nodes(),...this.edges()]),this.minimap=jA(null)}getNode(A){return this.nodes().find(({rawNode:i})=>i.id===A)}getDetachedEdges(){return this.edges().filter(A=>A.detached())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function VUA(t,e,A,i,n,o){let a=e/(t.width*(1+o)),r=A/(t.height*(1+o)),s=Math.min(a,r),g=WUA(s,i,n),l=t.x+t.width/2,C=t.y+t.height/2,I=e/2-l*g,d=A/2-C*g;return{x:I,y:d,zoom:g}}function WUA(t,e=0,A=1){return Math.min(Math.max(t,e),A)}function ZUA(t,e,A){let i=t.zoom;return{x:-t.x/i,y:-t.y/i,width:e/i,height:A/i}}function XUA(t,e,A,i){let n=ZUA(e,A,i);return!(t.x+t.widthn.x+n.width||t.y+t.heightn.y+n.height)}var $UA={detachedGroupsLayer:!1,virtualization:!1,virtualizationZoomThreshold:.5,lazyLoadTrigger:"immediate"},Ms=(()=>{class t{constructor(){this.entitiesSelectable=jA(!0),this.elevateNodesOnSelect=jA(!0),this.elevateEdgesOnSelect=jA(!0),this.view=jA([400,400]),this.computedFlowWidth=jA(0),this.computedFlowHeight=jA(0),this.minZoom=jA(.5),this.maxZoom=jA(3),this.background=jA({type:"solid",color:"#fff"}),this.snapGrid=jA([1,1]),this.optimization=jA($UA)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),dB=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.flowSettingsService=h(Ms),this.writableViewport=jA({changeType:"initial",state:t.getDefaultViewport(),duration:0}),this.readableViewport=jA(t.getDefaultViewport()),this.viewportChangeEnd$=new $A}static getDefaultViewport(){return{zoom:1,x:0,y:0}}fitView(A={padding:.1,duration:0,nodes:[]}){let i=this.getBoundsNodes(A.nodes??[]),n=VUA(vsA(i),this.flowSettingsService.computedFlowWidth(),this.flowSettingsService.computedFlowHeight(),this.flowSettingsService.minZoom(),this.flowSettingsService.maxZoom(),A.padding??.1),o=A.duration??0;this.writableViewport.set({changeType:"absolute",state:n,duration:o})}triggerViewportChangeEvent(A){A==="end"&&this.viewportChangeEnd$.next()}getBoundsNodes(A){return A?.length?A.map(i=>this.entitiesService.nodes().find(({rawNode:n})=>n.id===i)).filter(i=>!!i):this.entitiesService.nodes()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function d2(t){return t!==void 0}var p7=(()=>{class t{constructor(){this.element=h(ge).nativeElement}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","rootSvgRef",""]]})}}return t})();function lsA(){let t=window.navigator.userAgent.toLowerCase(),e=/(macintosh|macintel|macppc|mac68k|macos)/i,A=/(win32|win64|windows|wince)/i,i=/(iphone|ipad|ipod)/i,n=null;return e.test(t)?n="macos":i.test(t)?n="ios":A.test(t)?n="windows":/android/.test(t)?n="android":!n&&/linux/.test(t)&&(n="linux"),n}var qG=(()=>{class t{constructor(){this.actions=jA({multiSelection:[lsA()==="macos"?"MetaLeft":"ControlLeft",lsA()==="macos"?"MetaRight":"ControlRight"]}),this.actionsActive={multiSelection:!1},$n(this.actions).pipe(ki(()=>hi(il(document,"keydown").pipe(oi(A=>{for(let i in this.actions())(this.actions()[i]??[]).includes(A.code)&&(this.actionsActive[i]=!0)})),il(document,"keyup").pipe(oi(A=>{for(let i in this.actions())(this.actions()[i]??[]).includes(A.code)&&(this.actionsActive[i]=!1)})))),Tr()).subscribe()}setShortcuts(A){this.actions.update(i=>gA(gA({},i),A))}isActiveAction(A){return this.actionsActive[A]}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),Gm=(()=>{class t{constructor(){this.flowEntitiesService=h(Sg),this.keyboardService=h(qG),this.viewport$=new $A,this.resetSelection=this.viewport$.pipe(oi(({start:A,end:i,target:n})=>{if(A&&i&&n){let o=t.delta,a=Math.abs(i.x-A.x),r=Math.abs(i.y-A.y),s=ai.selected.set(!1)),A&&A.selected.set(!0))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),OG=(()=>{class t{constructor(){this.rootSvg=h(p7).element,this.host=h(ge).nativeElement,this.selectionService=h(Gm),this.viewportService=h(dB),this.flowSettingsService=h(Ms),this.zone=h(Oe),this.rootSvgSelection=_r(this.rootSvg),this.transform=jA(""),this.viewportForSelection={},this.manualViewportChangeEffect=La(()=>{let A=this.viewportService.writableViewport(),i=A.state;if(A.changeType!=="initial"){if(d2(i.zoom)&&!d2(i.x)&&!d2(i.y)){this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.scaleTo,i.zoom);return}if(d2(i.x)&&d2(i.y)&&!d2(i.zoom)){let n=la(this.viewportService.readableViewport).zoom;this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.transform,I1.translate(i.x,i.y).scale(n));return}if(d2(i.x)&&d2(i.y)&&d2(i.zoom)){this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.transform,I1.translate(i.x,i.y).scale(i.zoom));return}}},{allowSignalWrites:!0}),this.handleZoom=({transform:A})=>{this.viewportService.readableViewport.set(PG(A)),this.transform.set(A.toString())},this.handleZoomStart=({transform:A})=>{this.viewportForSelection={start:PG(A)}},this.handleZoomEnd=({transform:A,sourceEvent:i})=>{this.zone.run(()=>{this.viewportForSelection=be(gA({},this.viewportForSelection),{end:PG(A),target:AJA(i)}),this.viewportService.triggerViewportChangeEvent("end"),this.selectionService.setViewport(this.viewportForSelection)})},this.filterCondition=A=>A.type==="mousedown"||A.type==="touchstart"?A.target.closest(".vflow-node")===null:!0}ngOnInit(){this.zone.runOutsideAngular(()=>{this.zoomBehavior=zG().scaleExtent([this.flowSettingsService.minZoom(),this.flowSettingsService.maxZoom()]).filter(this.filterCondition).on("start",this.handleZoomStart).on("zoom",this.handleZoom).on("end",this.handleZoomEnd),this.rootSvgSelection.call(this.zoomBehavior).on("dblclick.zoom",null)})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["g","mapContext",""]],hostVars:1,hostBindings:function(i,n){i&2&&ie("transform",n.transform())}})}}return t})(),PG=t=>({zoom:t.k,x:t.x,y:t.y}),AJA=t=>{if(t instanceof Event&&t.target instanceof Element)return t.target},d7=t=>Math.round(t*100)/100;function kg(t,e){return Math.ceil(t/e)*e}var d1=(()=>{class t{constructor(){this.status=jA({state:"idle",payload:null})}setIdleStatus(){this.status.set({state:"idle",payload:null})}setConnectionStartStatus(A,i){this.status.set({state:"connection-start",payload:{source:A,sourceHandle:i}})}setReconnectionStartStatus(A,i,n){this.status.set({state:"reconnection-start",payload:{source:A,sourceHandle:i,oldEdge:n}})}setConnectionValidationStatus(A,i,n,o,a){this.status.set({state:"connection-validation",payload:{source:i,target:n,sourceHandle:o,targetHandle:a,valid:A}})}setReconnectionValidationStatus(A,i,n,o,a,r){this.status.set({state:"reconnection-validation",payload:{source:i,target:n,sourceHandle:o,targetHandle:a,valid:A,oldEdge:r}})}setConnectionEndStatus(A,i,n,o){this.status.set({state:"connection-end",payload:{source:A,target:i,sourceHandle:n,targetHandle:o}})}setReconnectionEndStatus(A,i,n,o,a){this.status.set({state:"reconnection-end",payload:{source:A,target:i,sourceHandle:n,targetHandle:o,oldEdge:a}})}setNodeDragStartStatus(A){this.status.set({state:"node-drag-start",payload:{node:A}})}setNodeDragEndStatus(A){this.status.set({state:"node-drag-end",payload:{node:A}})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function csA(t){return t.state==="node-drag-start"}function eJA(t){return t.state==="node-drag-end"}var bsA=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.settingsService=h(Ms),this.flowStatusService=h(d1)}enable(A,i){_r(A).call(this.getDragBehavior(i))}disable(A){_r(A).call(Hv().on("drag",null))}destroy(A){_r(A).on(".drag",null)}getDragBehavior(A){let i=[],n=[],o=a=>A.dragHandlesCount()?!!a.target.closest(".vflow-drag-handle"):!0;return Hv().filter(o).on("start",a=>{i=this.getDragNodes(A),this.flowStatusService.setNodeDragStartStatus(A),n=i.map(r=>({x:r.point().x-a.x,y:r.point().y-a.y}))}).on("drag",a=>{i.forEach((r,s)=>{let g={x:d7(a.x+n[s].x),y:d7(a.y+n[s].y)};this.moveNode(r,g)})}).on("end",()=>{this.flowStatusService.setNodeDragEndStatus(A)})}getDragNodes(A){return A.selected()?this.entitiesService.nodes().filter(i=>i.selected()&&i.draggable()):[A]}moveNode(A,i){i=this.alignToGrid(i);let n=A.parent();n&&(i.x=Math.min(n.width()-A.width(),i.x),i.x=Math.max(0,i.x),i.y=Math.min(n.height()-A.height(),i.y),i.y=Math.max(0,i.y)),A.setPoint(i)}alignToGrid(A){let[i,n]=this.settingsService.snapGrid();return i>1&&(A.x=kg(A.x,i)),n>1&&(A.y=kg(A.y,n)),A}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),CsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","edge",""]]})}}return t})(),IsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","connection",""]]})}}return t})(),dsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","edgeLabelHtml",""]]})}}return t})(),B7=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","nodeHtml",""]]})}}return t})(),BsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","nodeSvg",""]]})}}return t})(),E7=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","groupNode",""]]})}}return t})();function EsA(t,e){let A=t.reduce((i,n)=>(i[n.rawNode.id]=n,i),{});e.forEach(i=>{i.source.set(A[i.edge.source]),i.target.set(A[i.edge.target])})}function _m(t){try{return new Proxy(t,{apply:()=>{}})(),!0}catch{return!1}}var VG=(()=>{class t{constructor(){this._event$=new $A,this.event$=this._event$.asObservable()}pushEvent(A){this._event$.next(A)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),Ph=(()=>{class t{constructor(){this.model=jA(null)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),MsA=(()=>{class t{constructor(){this.eventBus=h(VG),this.nodeService=h(Ph),this.destroyRef=h(Cr),this.selected=this.nodeService.model().selected,this.data=jA(void 0)}ngOnInit(){this.trackEvents().pipe(Tr(this.destroyRef)).subscribe()}trackEvents(){let A=Object.getOwnPropertyNames(this),i=new Map;for(let n of A){let o=this[n];o instanceof WA&&i.set(o,n),o instanceof DU&&i.set(tJA(o),n)}return hi(...Array.from(i.keys()).map(n=>n.pipe(oi(o=>{this.eventBus.pushEvent({nodeId:this.nodeService.model()?.rawNode.id??"",eventName:i.get(n),eventPayload:o})}))))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,standalone:!1})}}return t})();function tJA(t){return new ji(e=>{let A=t.subscribe(i=>{e.next(i)});return()=>{A.unsubscribe()}})}var iJA=(()=>{class t extends MsA{constructor(){super(...arguments),this.node=at.required()}ngOnInit(){let A=this.node().data;A&&(this.data=A),super.ngOnInit()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})()}static{this.\u0275dir=OA({type:t,inputs:{node:[1,"node"]},standalone:!1,features:[dt]})}}return t})(),nJA=(()=>{class t extends MsA{constructor(){super(...arguments),this.node=at.required()}ngOnInit(){this.node().data&&this.data.set(this.node().data),super.ngOnInit()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})()}static{this.\u0275dir=OA({type:t,inputs:{node:[1,"node"]},standalone:!1,features:[dt]})}}return t})();function ksA(t){return Object.prototype.isPrototypeOf.call(nJA,t)}function SsA(t){return Object.prototype.isPrototypeOf.call(iJA,t)}function oJA(t){return typeof t.point=="function"}function aJA(t){return ksA(t.type)?!0:_m(t.type)&&!_m(t.point)}function rJA(t){return SsA(t.type)?!0:_m(t.type)&&_m(t.point)}var Q7=2;function sJA(t){return oJA(t)?t:be(gA({},gJA(t)),{id:t.id,type:t.type})}function gJA(t){let e={};for(let A in t)Object.prototype.hasOwnProperty.call(t,A)&&(e[A]=jA(t[A]));return e}function lJA(t,e,A){!e&&CU(t);let i=e??h(ft);return A?ir(i,A):i}function Lm(t,e){let A=lJA(Lm,e?.injector),i;return Ke(()=>(i||(i=la(()=>_s(t,be(gA({},e),{injector:A})))),i()))}function cJA(t){return t.rawNode.type==="default-group"||t.rawNode.type==="template-group"}var BB=(()=>{class t{constructor(){this.flowEntitiesService=h(Sg),this.flowSettingsService=h(Ms),this.viewportService=h(dB),this.nodes=Ke(()=>this.flowSettingsService.optimization().virtualization?this.viewportNodesAfterInteraction().sort((A,i)=>A.renderOrder()-i.renderOrder()):[...this.flowEntitiesService.nodes()].sort((A,i)=>A.renderOrder()-i.renderOrder())),this.groups=Ke(()=>this.nodes().filter(A=>!!A.children().length||cJA(A))),this.nonGroups=Ke(()=>this.nodes().filter(A=>!this.groups().includes(A))),this.viewportNodes=Ke(()=>{let A=this.flowEntitiesService.nodes(),i=this.viewportService.readableViewport(),n=this.flowSettingsService.computedFlowWidth(),o=this.flowSettingsService.computedFlowHeight();return A.filter(a=>{let{x:r,y:s}=a.globalPoint(),g=a.width(),l=a.height();return XUA({x:r,y:s,width:g,height:l},i,n,o)})}),this.viewportNodesAfterInteraction=Lm(hi($n(this.flowEntitiesService.nodes).pipe(fB(qm),Ze(A=>!!A.length)),this.viewportService.viewportChangeEnd$.pipe(Ps(300))).pipe(fe(()=>{let A=this.viewportService.readableViewport(),i=this.flowSettingsService.optimization().virtualizationZoomThreshold;return A.zoomMath.max(...this.flowEntitiesService.nodes().map(A=>A.renderOrder())))}pullNode(A){A.renderOrder.set(this.maxOrder()+1),A.children().forEach(i=>this.pullNode(i))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function h7(t,e){e||(e={equal:Object.is});let A;return Ke(()=>A=t(A),e)}var CJA=(()=>{class t{static{this.defaultWidth=100}static{this.defaultHeight=50}static{this.defaultColor="#1b262c"}constructor(A){this.rawNode=A,this.entitiesService=h(Sg),this.settingsService=h(Ms),this.nodeRenderingService=h(BB),this.isVisible=jA(!1),this.point=jA({x:0,y:0}),this.width=jA(t.defaultWidth),this.height=jA(t.defaultHeight),this.size=Ke(()=>({width:this.width(),height:this.height()})),this.styleWidth=Ke(()=>this.controlledByResizer()?`${this.width()}px`:"100%"),this.styleHeight=Ke(()=>this.controlledByResizer()?`${this.height()}px`:"100%"),this.foWidth=Ke(()=>this.width()+Q7),this.foHeight=Ke(()=>this.height()+Q7),this.renderOrder=jA(0),this.selected=jA(!1),this.preview=jA({style:{}}),this.globalPoint=Ke(()=>{let n=this.parent(),o=this.point().x,a=this.point().y;for(;n!==null;)o+=n.point().x,a+=n.point().y,n=n.parent();return{x:o,y:a}}),this.pointTransform=Ke(()=>`translate(${this.globalPoint().x}, ${this.globalPoint().y})`),this.handles=jA([]),this.draggable=jA(!0),this.dragHandlesCount=jA(0),this.magnetRadius=20,this.isComponentType=aJA(this.rawNode)||rJA(this.rawNode),this.shouldLoad=h7(n=>{if(n||this.settingsService.optimization().lazyLoadTrigger==="immediate")return!0;if(this.settingsService.optimization().lazyLoadTrigger==="viewport"){if(ksA(this.rawNode.type)||SsA(this.rawNode.type))return!0;if(_m(this.rawNode.type)||this.rawNode.type==="html-template"||this.rawNode.type==="svg-template"||this.rawNode.type==="template-group")return this.nodeRenderingService.viewportNodes().includes(this)}return!0}),this.componentInstance$=$n(this.shouldLoad).pipe(Ze(Boolean),ki(()=>this.rawNode.type()),ea(()=>se(this.rawNode.type)),js(1)),this.text=jA(""),this.componentTypeInputs={node:this.rawNode},this.parent=Ke(()=>this.entitiesService.nodes().find(n=>n.rawNode.id===this.parentId())??null),this.children=Ke(()=>this.entitiesService.nodes().filter(n=>n.parentId()===this.rawNode.id)),this.color=jA(t.defaultColor),this.controlledByResizer=jA(!1),this.resizable=jA(!1),this.resizing=jA(!1),this.resizerTemplate=jA(null),this.context={$implicit:{}},this.parentId=jA(null);let i=sJA(A);i.point&&(this.point=i.point),i.width&&(this.width=i.width),i.height&&(this.height=i.height),i.draggable&&(this.draggable=i.draggable),i.parentId&&(this.parentId=i.parentId),i.preview&&(this.preview=i.preview),i.type==="default-group"&&i.color&&(this.color=i.color),i.type==="default-group"&&i.resizable&&(this.resizable=i.resizable),i.type==="default"&&i.text&&(this.text=i.text),i.type==="html-template"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),shouldLoad:this.shouldLoad}}),i.type==="svg-template"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),width:this.width.asReadonly(),height:this.height.asReadonly(),shouldLoad:this.shouldLoad}}),i.type==="template-group"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),width:this.width.asReadonly(),height:this.height.asReadonly(),shouldLoad:this.shouldLoad}}),this.point$=$n(this.point),this.width$=$n(this.width),this.height$=$n(this.height),this.size$=$n(this.size),this.selected$=$n(this.selected),this.handles$=$n(this.handles)}setPoint(A){this.point.set(A)}}return t})(),Nm=class{constructor(e){this.edgeLabel=e,this.size=jA({width:0,height:0})}};function B2(t,e,A){return{x:(1-A)*t.x+A*e.x,y:(1-A)*t.y+A*e.y}}function WG({sourcePoint:t,targetPoint:e}){return{path:`M ${t.x},${t.y}L ${e.x},${e.y}`,labelPoints:{start:B2(t,e,.15),center:B2(t,e,.5),end:B2(t,e,.85)}}}function ZG({sourcePoint:t,targetPoint:e,sourcePosition:A,targetPosition:i}){let n={x:t.x-e.x,y:t.y-e.y},o=QsA(t,A,n),a=QsA(e,i,n),r=`M${t.x},${t.y} C${o.x},${o.y} ${a.x},${a.y} ${e.x},${e.y}`;return IJA(r,t,e,o,a)}function QsA(t,e,A){let i={x:0,y:0};switch(e){case"top":i.y=1;break;case"bottom":i.y=-1;break;case"right":i.x=1;break;case"left":i.x=-1;break}let n={x:A.x*Math.abs(i.x),y:A.y*Math.abs(i.y)},a=.25*25*Math.sqrt(Math.abs(n.x+n.y));return{x:t.x+i.x*a,y:t.y-i.y*a}}function IJA(t,e,A,i,n){return{path:t,labelPoints:{start:jG(e,A,i,n,.1),center:jG(e,A,i,n,.5),end:jG(e,A,i,n,.9)}}}function jG(t,e,A,i,n){let o=B2(t,A,n),a=B2(A,i,n),r=B2(i,e,n);return B2(B2(o,a,n),B2(a,r,n),n)}var hsA={left:{x:-1,y:0},right:{x:1,y:0},top:{x:0,y:-1},bottom:{x:0,y:1}};function dJA(t,e){let A=Math.abs(e.x-t.x)/2,i=e.xe==="left"||e==="right"?t.xMath.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2));function EJA({source:t,sourcePosition:e="bottom",target:A,targetPosition:i="top",offset:n}){let o=hsA[e],a=hsA[i],r={x:t.x+o.x*n,y:t.y+o.y*n},s={x:A.x+a.x*n,y:A.y+a.y*n},g=BJA({source:r,sourcePosition:e,target:s}),l=g.x!==0?"x":"y",C=g[l],I=[],d,B,E={x:0,y:0},Q={x:0,y:0},[f,b]=dJA(t,A);if(o[l]*a[l]===-1){d=f,B=b;let M=[{x:d,y:r.y},{x:d,y:s.y}],D=[{x:r.x,y:B},{x:s.x,y:B}];o[l]===C?I=l==="x"?M:D:I=l==="x"?D:M}else{let M=[{x:r.x,y:s.y}],D=[{x:s.x,y:r.y}];if(l==="x"?I=o.x===C?D:M:I=o.y===C?M:D,e===i){let j=Math.abs(t[l]-A[l]);if(j<=n){let $=Math.min(n-1,n-j);o[l]===C?E[l]=(r[l]>t[l]?-1:1)*$:Q[l]=(s[l]>A[l]?-1:1)*$}}if(e!==i){let j=l==="x"?"y":"x",$=o[l]===a[j],O=r[j]>s[j],DA=r[j]=J?(d=(F.x+_.x)/2,B=I[0].y):(d=I[0].x,B=(F.y+_.y)/2)}return[[t,{x:r.x+E.x,y:r.y+E.y},...I,{x:s.x+Q.x,y:s.y+Q.y},A],d,B]}function QJA(t,e,A,i){let n=Math.min(usA(t,e)/2,usA(e,A)/2,i),{x:o,y:a}=e;if(t.x===o&&o===A.x||t.y===a&&a===A.y)return`L${o} ${a}`;if(t.y===a){let g=t.x{let f="";return Q>0&&Q{let E=I*B;if(E<=0)return o[0];if(E>=I)return o[g-1];let Q=0,f=g-1;for(;Q>>1;C[_](this.source()?.shouldLoad()??!1)&&(this.target()?.shouldLoad()??!1)),this.renderOrder=jA(0),this.detached=Ke(()=>{let A=this.source(),i=this.target();if(!A||!i)return!0;let n=!1,o=!1;return this.edge.sourceHandle?n=!!A.handles().find(a=>a.rawHandle.id===this.edge.sourceHandle):n=!!A.handles().find(a=>a.rawHandle.type==="source"),this.edge.targetHandle?o=!!i.handles().find(a=>a.rawHandle.id===this.edge.targetHandle):o=!!i.handles().find(a=>a.rawHandle.type==="target"),!n||!o}),this.detached$=$n(this.detached),this.path=Ke(()=>{let A=this.sourceHandle(),i=this.targetHandle();if(!A||!i)return{path:""};let n=this.getPathFactoryParams(A,i);switch(this.curve){case"straight":return WG(n);case"bezier":return ZG(n);case"smooth-step":return zh(n);case"step":return zh(n,0);default:return this.curve(n)}}),this.sourceHandle=h7(A=>{let i=null;return this.floating?i=this.closestHandles().sourceHandle:this.edge.sourceHandle?i=this.source()?.handles().find(n=>n.rawHandle.id===this.edge.sourceHandle)??null:i=this.source()?.handles().find(n=>n.rawHandle.type==="source")??null,i===null?A:i}),this.targetHandle=h7(A=>{let i=null;return this.floating?i=this.closestHandles().targetHandle:this.edge.targetHandle?i=this.target()?.handles().find(n=>n.rawHandle.id===this.edge.targetHandle)??null:i=this.target()?.handles().find(n=>n.rawHandle.type==="target")??null,i===null?A:i}),this.closestHandles=Ke(()=>{let A=this.source(),i=this.target();if(!A||!i)return{sourceHandle:null,targetHandle:null};let n=this.flowEntitiesService.connection().mode==="strict"?A.handles().filter(g=>g.rawHandle.type==="source"):A.handles(),o=this.flowEntitiesService.connection().mode==="strict"?i.handles().filter(g=>g.rawHandle.type==="target"):i.handles();if(n.length===0||o.length===0)return{sourceHandle:null,targetHandle:null};let a=1/0,r=null,s=null;for(let g of n)for(let l of o){let C=g.pointAbsolute(),I=l.pointAbsolute(),d=Math.sqrt(Math.pow(C.x-I.x,2)+Math.pow(C.y-I.y,2));d{let A=this.edge.markers?.start;return A?`url(#${Oh(JSON.stringify(A))})`:""}),this.markerEndUrl=Ke(()=>{let A=this.edge.markers?.end;return A?`url(#${Oh(JSON.stringify(A))})`:""}),this.context={$implicit:{edge:this.edge,path:Ke(()=>this.path().path),markerStart:this.markerStartUrl,markerEnd:this.markerEndUrl,selected:this.selected.asReadonly(),shouldLoad:this.shouldLoad}},this.edgeLabels={},this.type=e.type??"default",this.curve=e.curve??"bezier",this.reconnectable=e.reconnectable??!1,this.floating=e.floating??!1,e.edgeLabels?.start&&(this.edgeLabels.start=new Nm(e.edgeLabels.start)),e.edgeLabels?.center&&(this.edgeLabels.center=new Nm(e.edgeLabels.center)),e.edgeLabels?.end&&(this.edgeLabels.end=new Nm(e.edgeLabels.end))}getPathFactoryParams(e,A){return{mode:"edge",edge:this.edge,sourcePoint:e.pointAbsolute(),targetPoint:A.pointAbsolute(),sourcePosition:e.rawHandle.position,targetPosition:A.rawHandle.position,allEdges:this.flowEntitiesService.rawEdges(),allNodes:this.flowEntitiesService.rawNodes()}}},u7=class{static nodes(e,A){let i=new Map;return A.forEach(n=>i.set(n.rawNode,n)),e.map(n=>i.get(n)??new CJA(n))}static edges(e,A){let i=new Map;return A.forEach(n=>i.set(n.edge,n)),e.map(n=>i.has(n)?i.get(n):new XG(n))}},hJA=25,$G=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.nodesPositionChange$=$n(this.entitiesService.nodes).pipe(ki(A=>hi(...A.map(i=>i.point$.pipe(Fg(1),fe(()=>i))))),fe(A=>[{type:"position",id:A.rawNode.id,point:A.point()},...this.entitiesService.nodes().filter(i=>i!==A&&i.selected()).map(i=>({type:"position",id:i.rawNode.id,point:i.point()}))])),this.nodeSizeChange$=$n(this.entitiesService.nodes).pipe(ki(A=>hi(...A.map(i=>i.size$.pipe(Fg(1),fe(()=>i))))),fe(A=>[{type:"size",id:A.rawNode.id,size:A.size()}])),this.nodeAddChange$=$n(this.entitiesService.nodes).pipe(E2(),fe(([A,i])=>i.filter(n=>!A.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(i=>({type:"add",id:i.rawNode.id})))),this.nodeRemoveChange$=$n(this.entitiesService.nodes).pipe(E2(),fe(([A,i])=>A.filter(n=>!i.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(i=>({type:"remove",id:i.rawNode.id})))),this.nodeSelectedChange$=$n(this.entitiesService.nodes).pipe(ki(A=>hi(...A.map(i=>i.selected$.pipe(jl(),Fg(1),fe(()=>i))))),fe(A=>[{type:"select",id:A.rawNode.id,selected:A.selected()}])),this.changes$=hi(this.nodesPositionChange$,this.nodeSizeChange$,this.nodeAddChange$,this.nodeRemoveChange$,this.nodeSelectedChange$).pipe(fB(qm,hJA))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),uJA=(t,e)=>t.length===e.length&&[...new Set([...t,...e])].every(A=>t.filter(i=>i===A).length===e.filter(i=>i===A).length),AK=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.edgeDetachedChange$=hi($n(Ke(()=>{let A=this.entitiesService.nodes();return la(this.entitiesService.edges).filter(({source:n,target:o})=>!A.includes(n())||!A.includes(o()))})),$n(this.entitiesService.edges).pipe(ki(A=>rU(...A.map(i=>i.detached$.pipe(fe(()=>i))))),fe(A=>A.filter(i=>i.detached())),Fg(2))).pipe(jl(uJA),Ze(A=>!!A.length),fe(A=>A.map(({edge:i})=>({type:"detached",id:i.id})))),this.edgeAddChange$=$n(this.entitiesService.edges).pipe(E2(),fe(([A,i])=>i.filter(n=>!A.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(({edge:i})=>({type:"add",id:i.id})))),this.edgeRemoveChange$=$n(this.entitiesService.edges).pipe(E2(),fe(([A,i])=>A.filter(n=>!i.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(({edge:i})=>({type:"remove",id:i.id})))),this.edgeSelectChange$=$n(this.entitiesService.edges).pipe(ki(A=>hi(...A.map(i=>i.selected$.pipe(jl(),Fg(1),fe(()=>i))))),fe(A=>[{type:"select",id:A.edge.id,selected:A.selected()}])),this.changes$=hi(this.edgeDetachedChange$,this.edgeAddChange$,this.edgeRemoveChange$,this.edgeSelectChange$).pipe(fB(qm))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),fJA=(()=>{class t{constructor(){this.nodesChangeService=h($G),this.edgesChangeService=h(AK),this.onNodesChange=Dn(this.nodesChangeService.changes$),this.onNodesChangePosition=Dn(this.nodeChangesOfType("position"),{alias:"onNodesChange.position"}),this.onNodesChangePositionSignle=Dn(this.singleChange(this.nodeChangesOfType("position")),{alias:"onNodesChange.position.single"}),this.onNodesChangePositionMany=Dn(this.manyChanges(this.nodeChangesOfType("position")),{alias:"onNodesChange.position.many"}),this.onNodesChangeSize=Dn(this.nodeChangesOfType("size"),{alias:"onNodesChange.size"}),this.onNodesChangeSizeSingle=Dn(this.singleChange(this.nodeChangesOfType("size")),{alias:"onNodesChange.size.single"}),this.onNodesChangeSizeMany=Dn(this.manyChanges(this.nodeChangesOfType("size")),{alias:"onNodesChange.size.many"}),this.onNodesChangeAdd=Dn(this.nodeChangesOfType("add"),{alias:"onNodesChange.add"}),this.onNodesChangeAddSingle=Dn(this.singleChange(this.nodeChangesOfType("add")),{alias:"onNodesChange.add.single"}),this.onNodesChangeAddMany=Dn(this.manyChanges(this.nodeChangesOfType("add")),{alias:"onNodesChange.add.many"}),this.onNodesChangeRemove=Dn(this.nodeChangesOfType("remove"),{alias:"onNodesChange.remove"}),this.onNodesChangeRemoveSingle=Dn(this.singleChange(this.nodeChangesOfType("remove")),{alias:"onNodesChange.remove.single"}),this.onNodesChangeRemoveMany=Dn(this.manyChanges(this.nodeChangesOfType("remove")),{alias:"onNodesChange.remove.many"}),this.onNodesChangeSelect=Dn(this.nodeChangesOfType("select"),{alias:"onNodesChange.select"}),this.onNodesChangeSelectSingle=Dn(this.singleChange(this.nodeChangesOfType("select")),{alias:"onNodesChange.select.single"}),this.onNodesChangeSelectMany=Dn(this.manyChanges(this.nodeChangesOfType("select")),{alias:"onNodesChange.select.many"}),this.onEdgesChange=Dn(this.edgesChangeService.changes$),this.onNodesChangeDetached=Dn(this.edgeChangesOfType("detached"),{alias:"onEdgesChange.detached"}),this.onNodesChangeDetachedSingle=Dn(this.singleChange(this.edgeChangesOfType("detached")),{alias:"onEdgesChange.detached.single"}),this.onNodesChangeDetachedMany=Dn(this.manyChanges(this.edgeChangesOfType("detached")),{alias:"onEdgesChange.detached.many"}),this.onEdgesChangeAdd=Dn(this.edgeChangesOfType("add"),{alias:"onEdgesChange.add"}),this.onEdgeChangeAddSingle=Dn(this.singleChange(this.edgeChangesOfType("add")),{alias:"onEdgesChange.add.single"}),this.onEdgeChangeAddMany=Dn(this.manyChanges(this.edgeChangesOfType("add")),{alias:"onEdgesChange.add.many"}),this.onEdgeChangeRemove=Dn(this.edgeChangesOfType("remove"),{alias:"onEdgesChange.remove"}),this.onEdgeChangeRemoveSingle=Dn(this.singleChange(this.edgeChangesOfType("remove")),{alias:"onEdgesChange.remove.single"}),this.onEdgeChangeRemoveMany=Dn(this.manyChanges(this.edgeChangesOfType("remove")),{alias:"onEdgesChange.remove.many"}),this.onEdgeChangeSelect=Dn(this.edgeChangesOfType("select"),{alias:"onEdgesChange.select"}),this.onEdgeChangeSelectSingle=Dn(this.singleChange(this.edgeChangesOfType("select")),{alias:"onEdgesChange.select.single"}),this.onEdgeChangeSelectMany=Dn(this.manyChanges(this.edgeChangesOfType("select")),{alias:"onEdgesChange.select.many"})}nodeChangesOfType(A){return this.nodesChangeService.changes$.pipe(fe(i=>i.filter(n=>n.type===A)),Ze(i=>!!i.length))}edgeChangesOfType(A){return this.edgesChangeService.changes$.pipe(fe(i=>i.filter(n=>n.type===A)),Ze(i=>!!i.length))}singleChange(A){return A.pipe(Ze(i=>i.length===1),fe(([i])=>i))}manyChanges(A){return A.pipe(Ze(i=>i.length>1))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","changesController",""]],outputs:{onNodesChange:"onNodesChange",onNodesChangePosition:"onNodesChange.position",onNodesChangePositionSignle:"onNodesChange.position.single",onNodesChangePositionMany:"onNodesChange.position.many",onNodesChangeSize:"onNodesChange.size",onNodesChangeSizeSingle:"onNodesChange.size.single",onNodesChangeSizeMany:"onNodesChange.size.many",onNodesChangeAdd:"onNodesChange.add",onNodesChangeAddSingle:"onNodesChange.add.single",onNodesChangeAddMany:"onNodesChange.add.many",onNodesChangeRemove:"onNodesChange.remove",onNodesChangeRemoveSingle:"onNodesChange.remove.single",onNodesChangeRemoveMany:"onNodesChange.remove.many",onNodesChangeSelect:"onNodesChange.select",onNodesChangeSelectSingle:"onNodesChange.select.single",onNodesChangeSelectMany:"onNodesChange.select.many",onEdgesChange:"onEdgesChange",onNodesChangeDetached:"onEdgesChange.detached",onNodesChangeDetachedSingle:"onEdgesChange.detached.single",onNodesChangeDetachedMany:"onEdgesChange.detached.many",onEdgesChangeAdd:"onEdgesChange.add",onEdgeChangeAddSingle:"onEdgesChange.add.single",onEdgeChangeAddMany:"onEdgesChange.add.many",onEdgeChangeRemove:"onEdgesChange.remove",onEdgeChangeRemoveSingle:"onEdgesChange.remove.single",onEdgeChangeRemoveMany:"onEdgesChange.remove.many",onEdgeChangeSelect:"onEdgesChange.select",onEdgeChangeSelectSingle:"onEdgesChange.select.single",onEdgeChangeSelectMany:"onEdgesChange.select.many"}})}}return t})(),w7=(()=>{class t{constructor(){this.host=h(ge).nativeElement,this.initialTouch$=new $A,this.prevTouchEvent=null,this.mouseMovement$=il(this.host,"mousemove").pipe(fe(A=>({x:A.clientX,y:A.clientY,movementX:A.movementX,movementY:A.movementY,target:A.target,originalEvent:A})),fB(uB),Q2()),this.touchMovement$=hi(this.initialTouch$,il(this.host,"touchmove")).pipe(oi(A=>A.preventDefault()),fe(A=>{let i=A.touches[0]?.clientX??0,n=A.touches[0]?.clientY??0,o=this.prevTouchEvent?A.touches[0].pageX-this.prevTouchEvent.touches[0].pageX:0,a=this.prevTouchEvent?A.touches[0].pageY-this.prevTouchEvent.touches[0].pageY:0,r=document.elementFromPoint(i,n);return{x:i,y:n,movementX:o,movementY:a,target:r,originalEvent:A}}),oi(A=>this.prevTouchEvent=A.originalEvent),fB(uB),Q2()),this.pointerMovement$=hi(this.mouseMovement$,this.touchMovement$),this.touchEnd$=il(this.host,"touchend").pipe(fe(A=>{let i=A.changedTouches[0]?.clientX??0,n=A.changedTouches[0]?.clientY??0,o=document.elementFromPoint(i,n);return{x:i,y:n,target:o,originalEvent:A}}),oi(()=>this.prevTouchEvent=null),Q2()),this.mouseUp$=il(this.host,"mouseup").pipe(fe(A=>{let i=A.clientX,n=A.clientY,o=A.target;return{x:i,y:n,target:o,originalEvent:A}}),Q2()),this.documentPointerEnd$=hi(il(document,"mouseup"),il(document,"touchend")).pipe(Q2())}setInitialTouch(A){this.initialTouch$.next(A)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","rootPointer",""]]})}}return t})(),Fm=(()=>{class t{constructor(){this.pointerMovementDirective=h(w7),this.rootSvg=h(p7).element,this.host=h(ge).nativeElement,this.svgCurrentSpacePoint=Ke(()=>{let A=this.pointerMovement();return A?this.documentPointToFlowPoint({x:A.x,y:A.y}):{x:0,y:0}}),this.pointerMovement=_s(this.pointerMovementDirective.pointerMovement$)}documentPointToFlowPoint(A){let i=this.rootSvg.createSVGPoint();return i.x=A.x,i.y=A.y,i.matrixTransform(this.host.getScreenCTM().inverse())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["g","spacePointContext",""]]})}}return t})();function mJA(t){return typeof t=="string"?{type:"solid",color:t}:t}function f7(t,e,A){let i=A.value;return A.value=function(...n){queueMicrotask(()=>{i?.apply(this,n)})},A}var xsA=(()=>{class t{constructor(){this.toolbars=jA([]),this.nodeToolbarsMap=Ke(()=>{let A=new Map;return this.toolbars().forEach(i=>{let n=A.get(i.node)??[];A.set(i.node,[...n,i])}),A})}addToolbar(A){this.toolbars.update(i=>[...i,A])}removeToolbar(A){this.toolbars.update(i=>i.filter(n=>n!==A))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return gu([f7],t.prototype,"addToolbar",null),gu([f7],t.prototype,"removeToolbar",null),t})();function D7(t,e){return new ji(A=>{let i=new ResizeObserver(n=>{e.run(()=>A.next(n))});return t.forEach(n=>i.observe(n)),()=>i.disconnect()})}var pJA=(()=>{class t{constructor(){this.zone=h(Oe),this.destroyRef=h(Cr),this.settingsService=h(Ms),this.model=at.required(),this.edgeModel=at.required(),this.point=at({x:0,y:0}),this.htmlTemplate=at(),this.edgeLabelWrapperRef=ca.required("edgeLabelWrapper"),this.edgeLabelPoint=Ke(()=>{let A=this.point(),{width:i,height:n}=this.model().size();return{x:A.x-i/2,y:A.y-n/2}}),this.edgeLabelStyle=Ke(()=>{let A=this.model().edgeLabel;if(A.type==="default"&&A.style){let i=this.settingsService.background(),n="transparent";return i.type==="dots"&&(n=i.backgroundColor??"#fff"),i.type==="solid"&&(n=i.color),A.style.backgroundColor=A.style.backgroundColor??n,A.style}return null})}ngAfterViewInit(){let A=this.edgeLabelWrapperRef().nativeElement;D7([A],this.zone).pipe(cn(null),oi(()=>{let i=A.clientWidth+Q7,n=A.clientHeight+Q7;this.model().size.set({width:i,height:n})}),Tr(this.destroyRef)).subscribe()}getLabelContext(){return{$implicit:{edge:this.edgeModel().edge,label:this.model().edgeLabel}}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","edgeLabel",""]],viewQuery:function(i,n){i&1&&rs(n.edgeLabelWrapperRef,wKA,5),i&2&&wr()},inputs:{model:[1,"model"],edgeModel:[1,"edgeModel"],point:[1,"point"],htmlTemplate:[1,"htmlTemplate"]},attrs:DKA,decls:1,vars:1,consts:[["edgeLabelWrapper",""],[1,"edge-label-wrapper"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(i,n){if(i&1&&V(0,kKA,2,2),i&2){let o;W((o=n.model())?0:-1,o)}},dependencies:[al],styles:[".edge-label-wrapper[_ngcontent-%COMP%]{width:max-content;margin-top:1px;margin-left:1px}"],changeDetection:0})}}return t})();function RsA(t){let e={};return t.sourceHandle.rawHandle.type==="source"?(e.source=t.source,e.sourceHandle=t.sourceHandle):(e.source=t.target,e.sourceHandle=t.targetHandle),t.targetHandle.rawHandle.type==="target"?(e.target=t.target,e.targetHandle=t.targetHandle):(e.target=t.source,e.targetHandle=t.sourceHandle),e}var NsA=(()=>{class t{constructor(){this.statusService=h(d1),this.flowEntitiesService=h(Sg),this.onConnect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="connection-end"),fe(A=>c7(A,this.isStrictMode())),oi(()=>this.statusService.setIdleStatus()),Ze(A=>this.flowEntitiesService.connection().validator(A)))),this.connect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="connection-end"),fe(A=>c7(A,this.isStrictMode())),oi(()=>this.statusService.setIdleStatus()),Ze(A=>this.flowEntitiesService.connection().validator(A)))),this.onReconnect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="reconnection-end"),fe(A=>{let i=c7(A,this.isStrictMode()),n=A.payload.oldEdge.edge;return{connection:i,oldEdge:n}}),oi(()=>this.statusService.setIdleStatus()),Ze(({connection:A})=>this.flowEntitiesService.connection().validator(A)))),this.reconnect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="reconnection-end"),fe(A=>{let i=c7(A,this.isStrictMode()),n=A.payload.oldEdge.edge;return{connection:i,oldEdge:n}}),oi(()=>this.statusService.setIdleStatus()),Ze(({connection:A})=>this.flowEntitiesService.connection().validator(A)))),this.isStrictMode=Ke(()=>this.flowEntitiesService.connection().mode==="strict")}startConnection(A){this.statusService.setConnectionStartStatus(A.parentNode,A)}startReconnection(A,i){this.statusService.setReconnectionStartStatus(A.parentNode,A,i)}validateConnection(A){let i=this.statusService.status();if(i.state==="connection-start"||i.state==="reconnection-start"){let n=i.state==="reconnection-start",o=i.payload.source,a=A.parentNode,r=i.payload.sourceHandle,s=A;if(this.isStrictMode()){let l=RsA({source:i.payload.source,sourceHandle:i.payload.sourceHandle,target:A.parentNode,targetHandle:A});o=l.source,a=l.target,r=l.sourceHandle,s=l.targetHandle}let g=this.flowEntitiesService.connection().validator({source:o.rawNode.id,target:a.rawNode.id,sourceHandle:r.rawHandle.id,targetHandle:s.rawHandle.id});A.state.set(g?"valid":"invalid"),n?this.statusService.setReconnectionValidationStatus(g,i.payload.source,A.parentNode,i.payload.sourceHandle,A,i.payload.oldEdge):this.statusService.setConnectionValidationStatus(g,i.payload.source,A.parentNode,i.payload.sourceHandle,A)}}resetValidateConnection(A){A.state.set("idle");let i=this.statusService.status();(i.state==="connection-validation"||i.state==="reconnection-validation")&&(i.state==="reconnection-validation"?this.statusService.setReconnectionStartStatus(i.payload.source,i.payload.sourceHandle,i.payload.oldEdge):this.statusService.setConnectionStartStatus(i.payload.source,i.payload.sourceHandle))}endConnection(){let A=this.statusService.status();if(A.state==="connection-validation"||A.state==="reconnection-validation"){let i=A.state==="reconnection-validation",n=A.payload.source,o=A.payload.sourceHandle,a=A.payload.target,r=A.payload.targetHandle;i?this.statusService.setReconnectionEndStatus(n,a,o,r,A.payload.oldEdge):this.statusService.setConnectionEndStatus(n,a,o,r)}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","onConnect",""],["","onReconnect",""],["","connect",""],["","reconnect",""]],outputs:{onConnect:"onConnect",connect:"connect",onReconnect:"onReconnect",reconnect:"reconnect"}})}}return t})();function c7(t,e){let A=t.payload.source,i=t.payload.target,n=t.payload.sourceHandle,o=t.payload.targetHandle;if(e){let l=RsA({source:t.payload.source,sourceHandle:t.payload.sourceHandle,target:t.payload.target,targetHandle:t.payload.targetHandle});A=l.source,i=l.target,n=l.sourceHandle,o=l.targetHandle}let a=A.rawNode.id,r=i.rawNode.id,s=n.rawHandle.id,g=o.rawHandle.id;return{source:a,target:r,sourceHandle:s,targetHandle:g}}var m7=(()=>{class t{constructor(){this.flowEntitiesService=h(Sg),this.flowSettingsService=h(Ms),this.edges=Ke(()=>this.flowSettingsService.optimization().virtualization?this.viewportEdges().sort((A,i)=>A.renderOrder()-i.renderOrder()):[...this.flowEntitiesService.validEdges()].sort((A,i)=>A.renderOrder()-i.renderOrder())),this.viewportEdges=Ke(()=>this.flowEntitiesService.validEdges().filter(A=>{let i=A.sourceHandle(),n=A.targetHandle();return i&&n})),this.maxOrder=Ke(()=>Math.max(...this.flowEntitiesService.validEdges().map(A=>A.renderOrder())))}pull(A){A.renderOrder()!==0&&this.maxOrder()===A.renderOrder()||A.renderOrder.set(this.maxOrder()+1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function wJA(t){return window.TouchEvent&&t instanceof TouchEvent}var nK=(()=>{class t{constructor(){this.hostElement=h(ge).nativeElement,this.pointerMovementDirective=h(w7),this.pointerOver=Oo(),this.pointerOut=Oo(),this.pointerStart=Oo(),this.pointerEnd=Oo(),this.wasPointerOver=!1,this.touchEnd=this.pointerMovementDirective.touchEnd$.pipe(Ze(({target:A})=>A===this.hostElement),oi(({originalEvent:A})=>this.pointerEnd.emit(A)),Tr()).subscribe(),this.touchOverOut=this.pointerMovementDirective.touchMovement$.pipe(oi(({target:A,originalEvent:i})=>{this.handleTouchOverAndOut(A,i)}),Tr()).subscribe()}onPointerStart(A){this.pointerStart.emit(A),wJA(A)&&this.pointerMovementDirective.setInitialTouch(A)}onPointerEnd(A){this.pointerEnd.emit(A)}onMouseOver(A){this.pointerOver.emit(A)}onMouseOut(A){this.pointerOut.emit(A)}handleTouchOverAndOut(A,i){A===this.hostElement?(this.pointerOver.emit(i),this.wasPointerOver=!0):(this.wasPointerOver&&this.pointerOut.emit(i),this.wasPointerOver=!1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","pointerStart",""],["","pointerEnd",""],["","pointerOver",""],["","pointerOut",""]],hostBindings:function(i,n){i&1&&eA("mousedown",function(a){return n.onPointerStart(a)})("touchstart",function(a){return n.onPointerStart(a)})("mouseup",function(a){return n.onPointerEnd(a)})("mouseover",function(a){return n.onMouseOver(a)})("mouseout",function(a){return n.onMouseOut(a)})},outputs:{pointerOver:"pointerOver",pointerOut:"pointerOut",pointerStart:"pointerStart",pointerEnd:"pointerEnd"}})}}return t})(),FsA=(()=>{class t{constructor(){this.injector=h(ft),this.selectionService=h(Gm),this.flowSettingsService=h(Ms),this.flowStatusService=h(d1),this.edgeRenderingService=h(m7),this.connectionController=h(NsA,{optional:!0}),this.model=at.required(),this.edgeTemplate=at(),this.edgeLabelHtmlTemplate=at(),this.isReconnecting=Ke(()=>{let A=this.flowStatusService.status();return(A.state==="reconnection-start"||A.state==="reconnection-validation")&&A.payload.oldEdge===this.model()})}select(){this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(this.model())}pull(){this.flowSettingsService.elevateEdgesOnSelect()&&this.edgeRenderingService.pull(this.model())}startReconnection(A,i){A.stopPropagation(),this.connectionController?.startReconnection(i,this.model())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","edge",""]],hostAttrs:[1,"selectable"],hostVars:2,hostBindings:function(i,n){i&2&&wn("visibility",n.isReconnecting()?"hidden":"visible")},inputs:{model:[1,"model"],edgeTemplate:[1,"edgeTemplate"],edgeLabelHtmlTemplate:[1,"edgeLabelHtmlTemplate"]},attrs:SKA,decls:6,vars:6,consts:[[1,"edge"],[1,"interactive-edge",3,"click"],[3,"ngTemplateOutlet","ngTemplateOutletContext","ngTemplateOutletInjector"],["edgeLabel","",3,"model","point","edgeModel","htmlTemplate"],["r","10",1,"reconnect-handle"],["r","10",1,"reconnect-handle",3,"pointerStart"]],template:function(i,n){if(i&1&&(V(0,xKA,2,6),V(1,NKA,1,1),V(2,_KA,1,1),V(3,GKA,1,1),V(4,UKA,1,1),V(5,TKA,2,2)),i&2){let o,a,r;W(n.model().type==="default"?0:-1),p(),W(n.model().type==="template"&&n.edgeTemplate()?1:-1),p(),W((o=n.model().edgeLabels.start)?2:-1,o),p(),W((a=n.model().edgeLabels.center)?3:-1,a),p(),W((r=n.model().edgeLabels.end)?4:-1,r),p(),W(n.model().sourceHandle()&&n.model().targetHandle()?5:-1)}},dependencies:[al,pJA,nK],styles:[".edge[_ngcontent-%COMP%]{fill:none;stroke-width:2;stroke:#b1b1b7}.edge_selected[_ngcontent-%COMP%]{stroke-width:2.5;stroke:#0f4c75}.interactive-edge[_ngcontent-%COMP%]{fill:none;stroke-width:20;stroke:transparent}.reconnect-handle[_ngcontent-%COMP%]{fill:transparent;cursor:move}"],changeDetection:0})}}return t})(),eK=(()=>{class t{constructor(){this.node=jA(null)}createHandle(A){let i=this.node();i&&i.handles.update(n=>[...n,A])}destroyHandle(A){let i=this.node();i&&i.handles.update(n=>n.filter(o=>o!==A))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return gu([f7],t.prototype,"createHandle",null),t})(),DJA=(()=>{class t{constructor(){this.handleModel=at.required({alias:"handleSizeController"}),this.handleWrapper=h(ge)}ngAfterViewInit(){let A=this.handleWrapper.nativeElement,i=A.getBBox(),n=yJA(A);this.handleModel().size.set({width:i.width+n,height:i.height+n})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","handleSizeController",""]],inputs:{handleModel:[1,"handleSizeController","handleModel"]}})}}return t})();function yJA(t){let e=t.firstElementChild;if(e){let A=getComputedStyle(e).strokeWidth,i=Number(A.replace("px",""));return isNaN(i)?0:i}return 0}var vJA=(()=>{class t{constructor(){this.selected=at(!1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["default-node"]],hostVars:2,hostBindings:function(i,n){i&2&&ae("selected",n.selected())},inputs:{selected:[1,"selected"]},ngContentSelectors:ysA,decls:1,vars:0,template:function(i,n){i&1&&(Ht(),He(0))},styles:["[_nghost-%COMP%]{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}.selected[_nghost-%COMP%]{border-width:2px}"],changeDetection:0})}}return t})(),bJA=(()=>{class t{get model(){return this.nodeAccessor.model()}constructor(){this.nodeAccessor=h(Ph),this.rootPointer=h(w7),this.viewportService=h(dB),this.spacePointContext=h(Fm),this.settingsService=h(Ms),this.hostRef=h(ge),this.resizable=at(),this.resizerColor=at("#2e414c"),this.gap=at(1.5),this.resizer=ca.required("resizer"),this.lineGap=3,this.handleSize=6,this.resizeSide=null,this.zoom=Ke(()=>this.viewportService.readableViewport().zoom??0),this.minWidth=0,this.minHeight=0,this.maxWidth=1/0,this.maxHeight=1/0,this.resizeOnGlobalMouseMove=this.rootPointer.pointerMovement$.pipe(Ze(()=>this.resizeSide!==null),Ze(A=>A.movementX!==0||A.movementY!==0),oi(A=>this.resize(A)),Tr()).subscribe(),this.endResizeOnGlobalMouseUp=this.rootPointer.documentPointerEnd$.pipe(oi(()=>this.endResize()),Tr()).subscribe(),La(()=>{let A=this.resizable();typeof A=="boolean"?this.model.resizable.set(A):this.model.resizable.set(!0)},{allowSignalWrites:!0})}ngOnInit(){this.model.controlledByResizer.set(!0),this.model.resizerTemplate.set(this.resizer())}ngOnDestroy(){this.model.controlledByResizer.set(!1)}ngAfterViewInit(){this.minWidth=+getComputedStyle(this.hostRef.nativeElement).minWidth.replace("px","")||0,this.minHeight=+getComputedStyle(this.hostRef.nativeElement).minHeight.replace("px","")||0,this.maxWidth=+getComputedStyle(this.hostRef.nativeElement).maxWidth.replace("px","")||1/0,this.maxHeight=+getComputedStyle(this.hostRef.nativeElement).maxHeight.replace("px","")||1/0}startResize(A,i){i.stopPropagation(),this.resizeSide=A,this.model.resizing.set(!0)}resize(A){if(!this.resizeSide)return;let i=MJA(A.movementX,A.movementY,this.zoom()),n=this.applyResize(this.resizeSide,this.model,i,this.getDistanceToEdge(A)),{x:o,y:a,width:r,height:s}=kJA(n,this.model,this.resizeSide,this.minWidth,this.minHeight,this.maxWidth,this.maxHeight);this.model.setPoint({x:o,y:a}),this.model.width.set(r),this.model.height.set(s)}endResize(){this.resizeSide=null,this.model.resizing.set(!1)}getDistanceToEdge(A){let i=this.spacePointContext.documentPointToFlowPoint({x:A.x,y:A.y}),{x:n,y:o}=this.model.globalPoint();return{left:i.x-n,right:i.x-(n+this.model.width()),top:i.y-o,bottom:i.y-(o+this.model.height())}}applyResize(A,i,n,o){let{x:a,y:r}=i.point(),s=i.width(),g=i.height(),[l,C]=this.settingsService.snapGrid();switch(A){case"left":{let I=n.x+o.left,d=kg(a+I,l),B=d-a;return{x:d,y:r,width:s-B,height:g}}case"right":{let I=n.x+o.right,d=kg(s+I,l);return{x:a,y:r,width:d,height:g}}case"top":{let I=n.y+o.top,d=kg(r+I,C),B=d-r;return{x:a,y:d,width:s,height:g-B}}case"bottom":{let I=n.y+o.bottom,d=kg(g+I,C);return{x:a,y:r,width:s,height:d}}case"top-left":{let I=n.x+o.left,d=n.y+o.top,B=kg(a+I,l),E=kg(r+d,C),Q=B-a,f=E-r;return{x:B,y:E,width:s-Q,height:g-f}}case"top-right":{let I=n.x+o.right,d=n.y+o.top,B=kg(r+d,C),E=B-r;return{x:a,y:B,width:kg(s+I,l),height:g-E}}case"bottom-left":{let I=n.x+o.left,d=n.y+o.bottom,B=kg(a+I,l),E=B-a;return{x:B,y:r,width:s-E,height:kg(g+d,C)}}case"bottom-right":{let I=n.x+o.right,d=n.y+o.bottom;return{x:a,y:r,width:kg(s+I,l),height:kg(g+d,C)}}}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["","resizable",""]],viewQuery:function(i,n){i&1&&rs(n.resizer,HKA,5),i&2&&wr()},inputs:{resizable:[1,"resizable"],resizerColor:[1,"resizerColor"],gap:[1,"gap"]},attrs:zKA,ngContentSelectors:ysA,decls:3,vars:0,consts:[["resizer",""],["stroke-width","2",1,"top",3,"pointerStart"],["stroke-width","2",1,"left",3,"pointerStart"],["stroke-width","2",1,"bottom",3,"pointerStart"],["stroke-width","2",1,"right",3,"pointerStart"],[1,"top-left",3,"pointerStart"],[1,"top-right",3,"pointerStart"],[1,"bottom-left",3,"pointerStart"],[1,"bottom-right",3,"pointerStart"]],template:function(i,n){i&1&&(Ht(),vt(0,OKA,9,40,"ng-template",null,0,m2),He(2))},dependencies:[nK],styles:[".top[_ngcontent-%COMP%]{cursor:n-resize}.left[_ngcontent-%COMP%]{cursor:w-resize}.right[_ngcontent-%COMP%]{cursor:e-resize}.bottom[_ngcontent-%COMP%]{cursor:s-resize}.top-left[_ngcontent-%COMP%]{cursor:nw-resize}.top-right[_ngcontent-%COMP%]{cursor:ne-resize}.bottom-left[_ngcontent-%COMP%]{cursor:sw-resize}.bottom-right[_ngcontent-%COMP%]{cursor:se-resize}"],changeDetection:0})}}return gu([f7],t.prototype,"ngAfterViewInit",null),t})();function MJA(t,e,A){return{x:d7(t/A),y:d7(e/A)}}function kJA(t,e,A,i,n,o,a){let{x:r,y:s,width:g,height:l}=t;g=Math.max(g,0),l=Math.max(l,0),g=Math.max(i,g),l=Math.max(n,l),g=Math.min(o,g),l=Math.min(a,l),r=Math.min(r,e.point().x+e.width()-i),s=Math.min(s,e.point().y+e.height()-n),r=Math.max(r,e.point().x+e.width()-o),s=Math.max(s,e.point().y+e.height()-a);let C=e.parent();if(C){let d=C.width(),B=C.height(),E=e.point().x,Q=e.point().y;r=Math.max(r,0),s=Math.max(s,0),A.includes("left")&&r===0&&(g=Math.min(g,E+e.width())),A.includes("top")&&s===0&&(l=Math.min(l,Q+e.height())),g=Math.min(g,d-r),l=Math.min(l,B-s)}let I=vsA(e.children());return I&&(A.includes("left")&&(r=Math.min(r,e.point().x+e.width()-(I.x+I.width)),g=Math.max(g,I.x+I.width)),A.includes("right")&&(g=Math.max(g,I.x+I.width)),A.includes("bottom")&&(l=Math.max(l,I.y+I.height)),A.includes("top")&&(s=Math.min(s,e.point().y+e.height()-(I.y+I.height)),l=Math.max(l,I.y+I.height))),{x:r,y:s,width:g,height:l}}var tK=class{constructor(e,A){this.rawHandle=e,this.parentNode=A,this.strokeWidth=2,this.size=jA({width:10+2*this.strokeWidth,height:10+2*this.strokeWidth}),this.pointAbsolute=Ke(()=>({x:this.parentNode.globalPoint().x+this.hostOffset().x+this.sizeOffset().x,y:this.parentNode.globalPoint().y+this.hostOffset().y+this.sizeOffset().y})),this.state=jA("idle"),this.updateHostSizeAndPosition$=new $A,this.hostSize=_s(this.updateHostSizeAndPosition$.pipe(fe(()=>this.getHostSize())),{initialValue:{width:0,height:0}}),this.hostPosition=_s(this.updateHostSizeAndPosition$.pipe(fe(()=>({x:this.hostReference instanceof HTMLElement?this.hostReference.offsetLeft:0,y:this.hostReference instanceof HTMLElement?this.hostReference.offsetTop:0}))),{initialValue:{x:0,y:0}}),this.hostOffset=Ke(()=>{switch(this.rawHandle.position){case"left":return{x:-this.rawHandle.userOffsetX,y:-this.rawHandle.userOffsetY+this.hostPosition().y+this.hostSize().height/2};case"right":return{x:-this.rawHandle.userOffsetX+this.parentNode.size().width,y:-this.rawHandle.userOffsetY+this.hostPosition().y+this.hostSize().height/2};case"top":return{x:-this.rawHandle.userOffsetX+this.hostPosition().x+this.hostSize().width/2,y:-this.rawHandle.userOffsetY};case"bottom":return{x:-this.rawHandle.userOffsetX+this.hostPosition().x+this.hostSize().width/2,y:-this.rawHandle.userOffsetY+this.parentNode.size().height}}}),this.sizeOffset=Ke(()=>{switch(this.rawHandle.position){case"left":return{x:-(this.size().width/2),y:0};case"right":return{x:this.size().width/2,y:0};case"top":return{x:0,y:-(this.size().height/2)};case"bottom":return{x:0,y:this.size().height/2}}}),this.hostReference=this.rawHandle.hostReference,this.template=this.rawHandle.template,this.templateContext={$implicit:{point:this.hostOffset,state:this.state,node:this.parentNode.rawNode}}}updateHost(){this.updateHostSizeAndPosition$.next()}getHostSize(){return this.hostReference instanceof HTMLElement?{width:this.hostReference.offsetWidth,height:this.hostReference.offsetHeight}:this.hostReference instanceof SVGGraphicsElement?this.hostReference.getBBox():{width:0,height:0}}},oK=(()=>{class t{constructor(){this.injector=h(ft),this.handleService=h(eK),this.element=h(ge).nativeElement,this.destroyRef=h(Cr),this.position=at.required(),this.type=at.required(),this.id=at(),this.template=at(),this.offsetX=at(0),this.offsetY=at(0)}ngOnInit(){ir(this.injector,()=>{let A=this.handleService.node();if(A){let i=new tK({position:this.position(),type:this.type(),id:this.id(),hostReference:this.element.parentElement,template:this.template(),userOffsetX:this.offsetX(),userOffsetY:this.offsetY()},A);this.handleService.createHandle(i),requestAnimationFrame(()=>i.updateHost()),this.destroyRef.onDestroy(()=>this.handleService.destroyHandle(i))}})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["handle"]],inputs:{position:[1,"position"],type:[1,"type"],id:[1,"id"],template:[1,"template"],offsetX:[1,"offsetX"],offsetY:[1,"offsetY"]},decls:0,vars:0,template:function(i,n){},encapsulation:2,changeDetection:0})}}return t})(),SJA=(()=>{class t{constructor(){this.nodeAccessor=h(Ph),this.zone=h(Oe),this.destroyRef=h(Cr),this.hostElementRef=h(ge)}ngOnInit(){this.nodeAccessor.model().handles$.pipe(ki(i=>D7([...i.map(n=>n.hostReference),this.hostElementRef.nativeElement],this.zone).pipe(fe(()=>i))),oi(i=>{i.forEach(n=>n.updateHost())}),Tr(this.destroyRef)).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","nodeHandlesController",""]]})}}return t})(),xJA=(()=>{class t{constructor(){this.nodeAccessor=h(Ph),this.zone=h(Oe),this.destroyRef=h(Cr),this.hostElementRef=h(ge)}ngOnInit(){let A=this.nodeAccessor.model(),i=this.hostElementRef.nativeElement;hi(D7([i],this.zone)).pipe(cn(null),Ze(()=>!A.resizing()),oi(()=>{A.width.set(i.clientWidth),A.height.set(i.clientHeight)}),Tr(this.destroyRef)).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","nodeResizeController",""]]})}}return t})(),_sA=(()=>{class t{constructor(){this.injector=h(ft),this.handleService=h(eK),this.draggableService=h(bsA),this.flowStatusService=h(d1),this.nodeRenderingService=h(BB),this.flowSettingsService=h(Ms),this.selectionService=h(Gm),this.hostRef=h(ge),this.nodeAccessor=h(Ph),this.overlaysService=h(xsA),this.connectionController=h(NsA,{optional:!0}),this.model=at.required(),this.nodeTemplate=at(),this.nodeSvgTemplate=at(),this.groupNodeTemplate=at(),this.showMagnet=Ke(()=>this.flowStatusService.status().state==="connection-start"||this.flowStatusService.status().state==="connection-validation"||this.flowStatusService.status().state==="reconnection-start"||this.flowStatusService.status().state==="reconnection-validation"),this.toolbars=Ke(()=>this.overlaysService.nodeToolbarsMap().get(this.model()))}ngOnInit(){this.model().isVisible.set(!0),this.nodeAccessor.model.set(this.model()),this.handleService.node.set(this.model()),La(()=>{this.model().draggable()?this.draggableService.enable(this.hostRef.nativeElement,this.model()):this.draggableService.disable(this.hostRef.nativeElement)},{injector:this.injector})}ngOnDestroy(){this.model().isVisible.set(!1),this.draggableService.destroy(this.hostRef.nativeElement)}startConnection(A,i){A.stopPropagation(),this.connectionController?.startConnection(i)}validateConnection(A){this.connectionController?.validateConnection(A)}resetValidateConnection(A){this.connectionController?.resetValidateConnection(A)}endConnection(){this.connectionController?.endConnection()}pullNode(){this.flowSettingsService.elevateNodesOnSelect()&&this.nodeRenderingService.pullNode(this.model())}selectNode(){this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(this.model())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","node",""]],hostAttrs:[1,"vflow-node"],inputs:{model:[1,"model"],nodeTemplate:[1,"nodeTemplate"],nodeSvgTemplate:[1,"nodeSvgTemplate"],groupNodeTemplate:[1,"groupNodeTemplate"]},features:[It([eK,Ph])],attrs:PKA,decls:11,vars:7,consts:[[1,"selectable"],["nodeHandlesController","",1,"selectable"],["rx","5","ry","5",1,"default-group-node",3,"resizable","gap","resizerColor","default-group-node_selected","stroke","fill"],[1,"selectable",3,"click"],["nodeHandlesController","",3,"selected"],[3,"outerHTML"],["type","source","position","right"],["type","target","position","left"],["nodeHandlesController","","nodeResizeController","",1,"wrapper"],[3,"ngTemplateOutlet","ngTemplateOutletContext","ngTemplateOutletInjector"],["nodeHandlesController","",1,"selectable",3,"click"],[3,"ngComponentOutlet","ngComponentOutletInputs","ngComponentOutletInjector"],["rx","5","ry","5",1,"default-group-node",3,"click","resizable","gap","resizerColor"],[3,"ngTemplateOutlet"],["r","5",1,"default-handle"],[3,"handleSizeController"],[1,"magnet"],["r","5",1,"default-handle",3,"pointerStart","pointerEnd"],[3,"pointerStart","pointerEnd","handleSizeController"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"magnet",3,"pointerEnd","pointerOver","pointerOut"]],template:function(i,n){if(i&1&&(V(0,jKA,5,12,":svg:foreignObject",0),V(1,qKA,3,9,":svg:foreignObject",0),V(2,VKA,2,3,":svg:g",1),V(3,ZKA,2,3),V(4,XKA,1,11,":svg:rect",2),V(5,$KA,2,3,":svg:g",1),V(6,tUA,1,1),Ut(7,sUA,4,4,null,null,_i),Ut(9,gUA,2,4,":svg:foreignObject",null,_i)),i&2){let o;W(n.model().rawNode.type==="default"?0:-1),p(),W(n.model().rawNode.type==="html-template"&&n.nodeTemplate()?1:-1),p(),W(n.model().rawNode.type==="svg-template"&&n.nodeSvgTemplate()?2:-1),p(),W(n.model().isComponentType?3:-1),p(),W(n.model().rawNode.type==="default-group"?4:-1),p(),W(n.model().rawNode.type==="template-group"&&n.groupNodeTemplate()?5:-1),p(),W((o=n.model().resizerTemplate())?6:-1,o),p(),Jt(n.model().handles()),p(2),Jt(n.toolbars())}},dependencies:[nK,vJA,oK,al,p2,bJA,DJA,SJA,xJA,ls],styles:[".magnet[_ngcontent-%COMP%]{opacity:0}.wrapper[_ngcontent-%COMP%]{display:table-cell}.default-group-node[_ngcontent-%COMP%]{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected[_ngcontent-%COMP%]{stroke-width:2px}.default-handle[_ngcontent-%COMP%]{stroke:#fff;fill:#1b262c}"],changeDetection:0})}}return t})(),RJA=(()=>{class t{constructor(){this.flowStatusService=h(d1),this.spacePointContext=h(Fm),this.flowEntitiesService=h(Sg),this.model=at.required(),this.template=at(),this.path=Ke(()=>{let A=this.flowStatusService.status(),i=this.model().curve;if(A.state==="connection-start"||A.state==="reconnection-start"){let n=A.payload.sourceHandle,o=n.pointAbsolute(),a=n.rawHandle.position,r=this.spacePointContext.svgCurrentSpacePoint(),s=fsA(n.rawHandle.position),g=this.getPathFactoryParams(o,r,a,s);switch(i){case"straight":return WG(g).path;case"bezier":return ZG(g).path;case"smooth-step":return zh(g).path;case"step":return zh(g,0).path;default:return i(g).path}}if(A.state==="connection-validation"||A.state==="reconnection-validation"){let n=A.payload.sourceHandle,o=n.pointAbsolute(),a=n.rawHandle.position,r=A.payload.targetHandle,s=A.payload.valid?r.pointAbsolute():this.spacePointContext.svgCurrentSpacePoint(),g=A.payload.valid?r.rawHandle.position:fsA(n.rawHandle.position),l=this.getPathFactoryParams(o,s,a,g);switch(i){case"straight":return WG(l).path;case"bezier":return ZG(l).path;case"smooth-step":return zh(l).path;case"step":return zh(l,0).path;default:return i(l).path}}return null}),this.markerUrl=Ke(()=>{let A=this.model().settings.marker;return A?`url(#${Oh(JSON.stringify(A))})`:""}),this.defaultColor="rgb(177, 177, 183)"}getContext(){return{$implicit:{path:this.path,marker:this.markerUrl}}}getPathFactoryParams(A,i,n,o){return{mode:"connection",sourcePoint:A,targetPoint:i,sourcePosition:n,targetPosition:o,allEdges:this.flowEntitiesService.rawEdges(),allNodes:this.flowEntitiesService.rawNodes()}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","connection",""]],inputs:{model:[1,"model"],template:[1,"template"]},attrs:lUA,decls:2,vars:2,consts:[["fill","none","stroke-width","2"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(i,n){i&1&&(V(0,CUA,1,1),V(1,BUA,1,1)),i&2&&(W(n.model().type==="default"?0:-1),p(),W(n.model().type==="template"?1:-1))},dependencies:[al],encapsulation:2,changeDetection:0})}}return t})();function fsA(t){switch(t){case"top":return"bottom";case"bottom":return"top";case"left":return"right";case"right":return"left"}}function NJA(){return String.fromCharCode(65+Math.floor(Math.random()*26))+Date.now()}var FJA="#fff",_JA=20,LJA=2,msA="rgb(177, 177, 183)",psA=.1,GJA=!0,KJA=(()=>{class t{constructor(){this.viewportService=h(dB),this.rootSvg=h(p7).element,this.settingsService=h(Ms),this.backgroundSignal=this.settingsService.background,this.scaledGap=Ke(()=>{let A=this.backgroundSignal();return A.type==="dots"?this.viewportService.readableViewport().zoom*(A.gap??_JA):0}),this.x=Ke(()=>this.viewportService.readableViewport().x%this.scaledGap()),this.y=Ke(()=>this.viewportService.readableViewport().y%this.scaledGap()),this.patternColor=Ke(()=>{let A=this.backgroundSignal();return A.type==="dots"?A.color??msA:msA}),this.patternSize=Ke(()=>{let A=this.backgroundSignal();return A.type==="dots"?this.viewportService.readableViewport().zoom*(A.size??LJA)/2:0}),this.bgImageSrc=Ke(()=>{let A=this.backgroundSignal();return A.type==="image"?A.src:""}),this.imageSize=Lm($n(this.backgroundSignal).pipe(ki(()=>UJA(this.bgImageSrc())),fe(A=>({width:A.naturalWidth,height:A.naturalHeight}))),{initialValue:{width:0,height:0}}),this.scaledImageWidth=Ke(()=>{let A=this.backgroundSignal();if(A.type==="image"){let i=A.fixed?1:this.viewportService.readableViewport().zoom;return this.imageSize().width*i*(A.scale??psA)}return 0}),this.scaledImageHeight=Ke(()=>{let A=this.backgroundSignal();if(A.type==="image"){let i=A.fixed?1:this.viewportService.readableViewport().zoom;return this.imageSize().height*i*(A.scale??psA)}return 0}),this.imageX=Ke(()=>{let A=this.backgroundSignal();return A.type==="image"?A.repeat?A.fixed?0:this.viewportService.readableViewport().x%this.scaledImageWidth():A.fixed?0:this.viewportService.readableViewport().x:0}),this.imageY=Ke(()=>{let A=this.backgroundSignal();return A.type==="image"?A.repeat?A.fixed?0:this.viewportService.readableViewport().y%this.scaledImageHeight():A.fixed?0:this.viewportService.readableViewport().y:0}),this.repeated=Ke(()=>{let A=this.backgroundSignal();return A.type==="image"&&(A.repeat??GJA)}),this.patternId=NJA(),this.patternUrl=`url(#${this.patternId})`,La(()=>{let A=this.backgroundSignal();A.type==="dots"&&(this.rootSvg.style.backgroundColor=A.backgroundColor??FJA),A.type==="solid"&&(this.rootSvg.style.backgroundColor=A.color)})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","background",""]],attrs:EUA,decls:2,vars:2,consts:[["patternUnits","userSpaceOnUse"],["x","0","y","0","width","100%","height","100%"]],template:function(i,n){i&1&&(V(0,QUA,3,10),V(1,fUA,2,2)),i&2&&(W(n.backgroundSignal().type==="dots"?0:-1),p(),W(n.backgroundSignal().type==="image"?1:-1))},encapsulation:2,changeDetection:0})}}return t})();function UJA(t){let e=new Image;return e.src=t,new Promise(A=>{e.onload=()=>A(e)})}var JJA=(()=>{class t{constructor(){this.markers=at.required(),this.defaultColor="rgb(177, 177, 183)"}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["defs","flowDefs",""]],inputs:{markers:[1,"markers"]},attrs:mUA,decls:3,vars:2,consts:[["viewBox","-10 -10 20 20","refX","0","refY","0"],["points","-5,-4 1,0 -5,4 -5,-4",1,"marker__arrow_closed",3,"stroke","stroke-width","fill"],["points","-5,-4 0,0 -5,4",1,"marker__arrow_default",3,"stroke","stroke-width"],["points","-5,-4 1,0 -5,4 -5,-4",1,"marker__arrow_closed"],["points","-5,-4 0,0 -5,4",1,"marker__arrow_default"]],template:function(i,n){i&1&&(Ut(0,DUA,3,7,":svg:marker",0,_i),ri(2,"keyvalue")),i&2&&Jt(Ci(2,0,n.markers()))},dependencies:[Ip],styles:[".marker__arrow_default[_ngcontent-%COMP%]{stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;fill:none}.marker__arrow_closed[_ngcontent-%COMP%]{stroke-linecap:round;stroke-linejoin:round}"],changeDetection:0})}}return t})(),YJA=(()=>{class t{constructor(){this.host=h(ge),this.flowSettingsService=h(Ms),this.flowWidth=Ke(()=>{let A=this.flowSettingsService.view();return A==="auto"?"100%":A[0]}),this.flowHeight=Ke(()=>{let A=this.flowSettingsService.view();return A==="auto"?"100%":A[1]}),D7([this.host.nativeElement],h(Oe)).pipe(oi(([A])=>{this.flowSettingsService.computedFlowWidth.set(A.contentRect.width),this.flowSettingsService.computedFlowHeight.set(A.contentRect.height)}),Tr()).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","flowSizeController",""]],hostVars:2,hostBindings:function(i,n){i&2&&ie("width",n.flowWidth())("height",n.flowHeight())}})}}return t})(),TJA=(()=>{class t{constructor(){this.flowStatusService=h(d1)}resetConnection(){let A=this.flowStatusService.status();(A.state==="connection-start"||A.state==="reconnection-start")&&this.flowStatusService.setIdleStatus()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","rootSvgContext",""]],hostBindings:function(i,n){i&1&&eA("mouseup",function(){return n.resetConnection()},tC)("touchend",function(){return n.resetConnection()},tC)("contextmenu",function(){return n.resetConnection()})}})}}return t})();function iK(t,e){let A=[];for(let i of e){let{x:n,y:o}=i.globalPoint();t.x>=n&&t.x<=n+i.width()&&t.y>=o&&t.y<=o+i.height()&&A.push({x:t.x-n,y:t.y-o,spaceNodeId:i.rawNode.id})}return A.reverse(),A.push({spaceNodeId:null,x:t.x,y:t.y}),A}var aK=(()=>{class t{static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),HJA=(()=>{class t extends aK{shouldRenderNode(A){return!A.isVisible()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})()}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function zJA(t,e){if(Object.keys(e.preview().style).length){jJA(t,e);return}if(e.rawNode.type==="default"){OJA(t,e);return}if(e.rawNode.type==="default-group"){PJA(t,e);return}qJA(t,e)}function OJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();LsA(t,e,5),t.fillStyle="white",t.fill(),t.strokeStyle="#1b262c",t.lineWidth=1.5,t.stroke(),t.fillStyle="black",t.font="14px Arial",t.textAlign="center",t.textBaseline="middle";let o=A.x+i/2,a=A.y+n/2;t.fillText(e.text(),o,a)}function PJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();t.globalAlpha=.05,t.fillStyle=e.color(),t.fillRect(A.x,A.y,i,n),t.globalAlpha=1,t.strokeStyle=e.color(),t.lineWidth=1.5,t.strokeRect(A.x,A.y,i,n)}function jJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height(),o=e.preview().style;if(o.borderRadius){let a=parseFloat(o.borderRadius);LsA(t,e,a)}else t.beginPath(),t.rect(A.x,A.y,i,n),t.closePath();o.backgroundColor&&(t.fillStyle=o.backgroundColor),o.borderColor&&(t.strokeStyle=o.borderColor),o.borderWidth&&(t.lineWidth=parseFloat(o.borderWidth)),t.fill(),t.stroke()}function qJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();t.fillStyle="rgb(0 0 0 / 10%)",t.fillRect(A.x,A.y,i,n)}function LsA(t,e,A){let i=e.globalPoint(),n=e.width(),o=e.height();t.beginPath(),t.moveTo(i.x+A,i.y),t.lineTo(i.x+n-A,i.y),t.quadraticCurveTo(i.x+n,i.y,i.x+n,i.y+A),t.lineTo(i.x+n,i.y+o-A),t.quadraticCurveTo(i.x+n,i.y+o,i.x+n-A,i.y+o),t.lineTo(i.x+A,i.y+o),t.quadraticCurveTo(i.x,i.y+o,i.x,i.y+o-A),t.lineTo(i.x,i.y+A),t.quadraticCurveTo(i.x,i.y,i.x+A,i.y),t.closePath()}var VJA=(()=>{class t{constructor(){this.viewportService=h(dB),this.renderStrategy=h(aK),this.nodeRenderingService=h(BB),this.renderer2=h(Fi),this.element=h(ge).nativeElement,this.ctx=this.element.getContext("2d"),this.width=at(0),this.height=at(0),this.dpr=window.devicePixelRatio,La(()=>{this.renderer2.setProperty(this.element,"width",this.width()*this.dpr),this.renderer2.setProperty(this.element,"height",this.height()*this.dpr),this.renderer2.setStyle(this.element,"width",`${this.width()}px`),this.renderer2.setStyle(this.element,"height",`${this.height()}px`),this.ctx.scale(this.dpr,this.dpr)}),La(()=>{let A=this.viewportService.readableViewport();this.ctx.clearRect(0,0,this.width(),this.height()),this.ctx.save(),this.ctx.setTransform(A.zoom*this.dpr,0,0,A.zoom*this.dpr,A.x*this.dpr,A.y*this.dpr);for(let i=0;i{class t{constructor(){this.nodeRenderingService=h(BB),this.edgeRenderingService=h(m7),this.flowEntitiesService=h(Sg),this.settingsService=h(Ms),this.flowInitialized=jA(!1),h(Oe).runOutsideAngular(()=>nt(this,null,function*(){yield WJA(2),this.flowInitialized.set(!0)}))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function WJA(t){return new Promise(e=>{let A=0;function i(){A++,A{class t{constructor(){this.nodeRenderingService=h(BB),this.flowStatus=h(d1),this.tolerance=at(10),this.lineColor=at("#1b262c"),this.isNodeDragging=Ke(()=>csA(this.flowStatus.status())),this.intersections=h7(A=>{let i=this.flowStatus.status();if(csA(i)){let n=i.payload.node,o=DsA(C7(n)),a=this.nodeRenderingService.viewportNodes().filter(I=>I!==n).filter(I=>!n.children().includes(I)).map(I=>DsA(C7(I))),r=[],s=o.x,g=o.y,l=1/0,C=1/0;return a.forEach(I=>{let d=o.left+o.width/2,B=I.left+I.width/2;for(let[f,b,S,M]of[[d,B,B-o.width/2,!0],[o.left,I.left,I.left,!1],[o.left,I.right,I.right,!1],[o.right,I.left,I.left-o.width,!1],[o.right,I.right,I.right-o.width,!1]]){let D=Math.abs(f-b);if(D<=this.tolerance()){let F=Math.min(o.top,I.top),_=Math.max(o.bottom,I.bottom);if(r.push({x:b,y:F,x2:b,y2:_,isCenter:M}),DA.payload.node),fe(A=>[A,this.intersections()]),oi(([A,i])=>{if(i){let n={x:i.snappedX,y:i.snappedY},o=A.parent()?[A.parent()]:[];A.setPoint(iK(n,o)[0])}}),Tr()).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","alignmentHelper",""]],inputs:{tolerance:[1,"tolerance"],lineColor:[1,"lineColor"]},attrs:vUA,decls:1,vars:1,template:function(i,n){i&1&&V(0,kUA,1,1),i&2&&W(n.isNodeDragging()?0:-1)},encapsulation:2,changeDetection:0})}}return t})();var GsA=(()=>{class t{constructor(){this.viewportService=h(dB),this.flowEntitiesService=h(Sg),this.nodesChangeService=h($G),this.edgesChangeService=h(AK),this.nodeRenderingService=h(BB),this.edgeRenderingService=h(m7),this.flowSettingsService=h(Ms),this.componentEventBusService=h(VG),this.keyboardService=h(qG),this.injector=h(ft),this.flowRenderingService=h(wsA),this.alignmentHelper=at(!1),this.nodeModels=this.nodeRenderingService.nodes,this.groups=this.nodeRenderingService.groups,this.nonGroups=this.nodeRenderingService.nonGroups,this.edgeModels=this.edgeRenderingService.edges,this.onComponentNodeEvent=Dn(this.componentEventBusService.event$),this.nodeTemplateDirective=oC(B7),this.nodeSvgTemplateDirective=oC(BsA),this.groupNodeTemplateDirective=oC(E7),this.edgeTemplateDirective=oC(CsA),this.edgeLabelHtmlDirective=oC(dsA),this.connectionTemplateDirective=oC(IsA),this.mapContext=ca(OG),this.spacePointContext=ca.required(Fm),this.viewport=this.viewportService.readableViewport.asReadonly(),this.nodesChange=Lm(this.nodesChangeService.changes$,{initialValue:[]}),this.edgesChange=Lm(this.edgesChangeService.changes$,{initialValue:[]}),this.initialized=this.flowRenderingService.flowInitialized.asReadonly(),this.viewportChange$=$n(this.viewportService.readableViewport).pipe(Fg(1)),this.nodesChange$=this.nodesChangeService.changes$,this.edgesChange$=this.edgesChangeService.changes$,this.initialized$=$n(this.flowRenderingService.flowInitialized),this.markers=this.flowEntitiesService.markers,this.minimap=this.flowEntitiesService.minimap,this.flowOptimization=this.flowSettingsService.optimization,this.flowWidth=this.flowSettingsService.computedFlowWidth,this.flowHeight=this.flowSettingsService.computedFlowHeight}set view(A){this.flowSettingsService.view.set(A)}set minZoom(A){this.flowSettingsService.minZoom.set(A)}set maxZoom(A){this.flowSettingsService.maxZoom.set(A)}set background(A){this.flowSettingsService.background.set(mJA(A))}set optimization(A){this.flowSettingsService.optimization.update(i=>gA(gA({},i),A))}set entitiesSelectable(A){this.flowSettingsService.entitiesSelectable.set(A)}set keyboardShortcuts(A){this.keyboardService.setShortcuts(A)}set connection(A){this.flowEntitiesService.connection.set(A)}get connection(){return this.flowEntitiesService.connection()}set snapGrid(A){this.flowSettingsService.snapGrid.set(A)}set elevateNodesOnSelect(A){this.flowSettingsService.elevateNodesOnSelect.set(A)}set elevateEdgesOnSelect(A){this.flowSettingsService.elevateEdgesOnSelect.set(A)}set nodes(A){let i=ir(this.injector,()=>u7.nodes(A,this.flowEntitiesService.nodes()));EsA(i,this.flowEntitiesService.edges()),this.flowEntitiesService.nodes.set(i),i.forEach(n=>this.nodeRenderingService.pullNode(n))}set edges(A){let i=ir(this.injector,()=>u7.edges(A,this.flowEntitiesService.edges()));EsA(this.flowEntitiesService.nodes(),i),this.flowEntitiesService.edges.set(i)}viewportTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:A,duration:0})}zoomTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:{zoom:A},duration:0})}panTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:A,duration:0})}fitView(A){this.viewportService.fitView(A)}getNode(A){return this.flowEntitiesService.getNode(A)?.rawNode}getDetachedEdges(){return this.flowEntitiesService.getDetachedEdges().map(A=>A.edge)}documentPointToFlowPoint(A,i){let n=this.spacePointContext().documentPointToFlowPoint(A);return i?.spaces?iK(n,this.nodeRenderingService.groups()):n}getIntesectingNodes(A,i={partially:!0}){return HUA(A,this.nodeModels(),i).map(n=>n.rawNode)}toNodeSpace(A,i){let n=this.nodeModels().find(a=>a.rawNode.id===A);if(!n)return{x:1/0,y:1/0};if(i===null)return n.globalPoint();let o=this.nodeModels().find(a=>a.rawNode.id===i);return o?iK(n.globalPoint(),[o])[0]:{x:1/0,y:1/0}}trackNodes(A,{rawNode:i}){return i}trackEdges(A,{edge:i}){return i}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["vflow"]],contentQueries:function(i,n,o){i&1&&lp(o,n.nodeTemplateDirective,B7,5)(o,n.nodeSvgTemplateDirective,BsA,5)(o,n.groupNodeTemplateDirective,E7,5)(o,n.edgeTemplateDirective,CsA,5)(o,n.edgeLabelHtmlDirective,dsA,5)(o,n.connectionTemplateDirective,IsA,5),i&2&&wr(6)},viewQuery:function(i,n){i&1&&rs(n.mapContext,OG,5)(n.spacePointContext,Fm,5),i&2&&wr(2)},inputs:{view:"view",minZoom:"minZoom",maxZoom:"maxZoom",background:"background",optimization:"optimization",entitiesSelectable:"entitiesSelectable",keyboardShortcuts:"keyboardShortcuts",connection:[2,"connection","connection",A=>new I7(A)],snapGrid:"snapGrid",elevateNodesOnSelect:"elevateNodesOnSelect",elevateEdgesOnSelect:"elevateEdgesOnSelect",nodes:"nodes",alignmentHelper:[1,"alignmentHelper"],edges:"edges"},outputs:{onComponentNodeEvent:"onComponentNodeEvent"},features:[It([bsA,dB,d1,Sg,$G,AK,BB,m7,Gm,Ms,VG,qG,xsA,{provide:aK,useClass:HJA},wsA]),ap([{directive:fJA,outputs:["onNodesChange","onNodesChange","onNodesChange.position","onNodesChange.position","onNodesChange.position.single","onNodesChange.position.single","onNodesChange.position.many","onNodesChange.position.many","onNodesChange.size","onNodesChange.size","onNodesChange.size.single","onNodesChange.size.single","onNodesChange.size.many","onNodesChange.size.many","onNodesChange.add","onNodesChange.add","onNodesChange.add.single","onNodesChange.add.single","onNodesChange.add.many","onNodesChange.add.many","onNodesChange.remove","onNodesChange.remove","onNodesChange.remove.single","onNodesChange.remove.single","onNodesChange.remove.many","onNodesChange.remove.many","onNodesChange.select","onNodesChange.select","onNodesChange.select.single","onNodesChange.select.single","onNodesChange.select.many","onNodesChange.select.many","onEdgesChange","onEdgesChange","onEdgesChange.detached","onEdgesChange.detached","onEdgesChange.detached.single","onEdgesChange.detached.single","onEdgesChange.detached.many","onEdgesChange.detached.many","onEdgesChange.add","onEdgesChange.add","onEdgesChange.add.single","onEdgesChange.add.single","onEdgesChange.add.many","onEdgesChange.add.many","onEdgesChange.remove","onEdgesChange.remove","onEdgesChange.remove.single","onEdgesChange.remove.single","onEdgesChange.remove.many","onEdgesChange.remove.many","onEdgesChange.select","onEdgesChange.select","onEdgesChange.select.single","onEdgesChange.select.single","onEdgesChange.select.many","onEdgesChange.select.many"]}])],decls:11,vars:8,consts:[["flow",""],["rootSvgRef","","rootSvgContext","","rootPointer","","flowSizeController","",1,"root-svg"],["flowDefs","",3,"markers"],["background",""],["mapContext","","spacePointContext",""],["connection","",3,"model","template"],[3,"ngTemplateOutlet"],["previewFlow","",1,"preview-flow",3,"width","height"],["alignmentHelper",""],["alignmentHelper","",3,"tolerance","lineColor"],["node","",3,"model","groupNodeTemplate"],["edge","",3,"model","edgeTemplate","edgeLabelHtmlTemplate"],["node","",3,"model","nodeTemplate","nodeSvgTemplate"],["node","",3,"model","nodeTemplate","nodeSvgTemplate","groupNodeTemplate"]],template:function(i,n){if(i&1&&(Qt(),m(0,"svg",1,0),GA(2,"defs",2)(3,"g",3),m(4,"g",4),V(5,RUA,2,1),GA(6,"g",5),V(7,LUA,6,0),V(8,UUA,4,0),w(),V(9,JUA,1,1,":svg:ng-container",6),w(),V(10,YUA,1,2,"canvas",7)),i&2){let o,a,r;p(2),AA("markers",n.markers()),p(3),W((o=n.alignmentHelper())?5:-1,o),p(),AA("model",n.connection)("template",(a=n.connectionTemplateDirective())==null?null:a.templateRef),p(),W(n.flowOptimization().detachedGroupsLayer?7:-1),p(),W(n.flowOptimization().detachedGroupsLayer?-1:8),p(),W((r=n.minimap())?9:-1,r),p(),W(n.flowOptimization().virtualization?10:-1)}},dependencies:[p7,TJA,w7,YJA,JJA,KJA,OG,Fm,RJA,_sA,FsA,al,VJA,ZJA],styles:["[_nghost-%COMP%]{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}[_nghost-%COMP%] *{box-sizing:border-box}.root-svg[_ngcontent-%COMP%]{grid-row-start:1;grid-column-start:1}.preview-flow[_ngcontent-%COMP%]{pointer-events:none;grid-row-start:1;grid-column-start:1}"],changeDetection:0})}}return t})();var KsA=(()=>{class t{constructor(){this.flowSettingsService=h(Ms),this.selectionService=h(Gm),this.parentEdge=h(FsA,{optional:!0}),this.parentNode=h(_sA,{optional:!0}),this.host=h(ge),this.selectOnEvent=this.getEvent$().pipe(oi(()=>this.select()),Tr()).subscribe()}select(){let A=this.entity();A&&this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(A)}entity(){return this.parentNode?this.parentNode.model():this.parentEdge?this.parentEdge.model():null}getEvent$(){return il(this.host.nativeElement,"click")}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","selectable",""]]})}}return t})();var $JA=["canvas"],AYA=["svgCanvas"],eYA=()=>({type:"dots",color:"#424242",size:1,gap:12}),tYA=()=>[12,12],iYA=(t,e)=>e.name;function nYA(t,e){if(t&1){let A=JA();m(0,"div",6)(1,"div",11)(2,"button",12),eA("click",function(){Z(A);let n=v();return X(n.backToMainCanvas())}),m(3,"mat-icon"),K(4,"arrow_back"),w()(),m(5,"div",13)(6,"span",14),K(7,"smart_toy"),w(),m(8,"div",15)(9,"h3",16),K(10),w(),m(11,"p",17),K(12,"Agent Tool"),w()()()()()}if(t&2){let A=v();p(2),AA("matTooltip",A.getBackButtonTooltip()),p(8),qA(A.currentAgentTool())}}function oYA(t,e){if(t&1){let A=JA();m(0,"span",18),eA("click",function(){Z(A);let n=v();return X(n.toggleSidePanelRequest.emit())}),K(1,"left_panel_open"),w()}}function aYA(t,e){if(t&1){let A=JA();Qt(),m(0,"foreignObject"),as(),m(1,"div",27),eA("click",function(n){return Z(A),X(n.stopPropagation())}),m(2,"button",28,0),eA("click",function(n){return Z(A),X(n.stopPropagation())}),m(4,"mat-icon"),K(5,"add"),w()(),m(6,"span",29),K(7,"Add sub-agent"),w(),m(8,"mat-menu",null,1)(10,"button",30),eA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LlmAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(11,"mat-icon"),K(12,"psychology"),w(),m(13,"span"),K(14,"LLM Agent"),w()(),m(15,"button",30),eA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("SequentialAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(16,"mat-icon"),K(17,"more_horiz"),w(),m(18,"span"),K(19,"Sequential Agent"),w()(),m(20,"button",30),eA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LoopAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(21,"mat-icon"),K(22,"sync"),w(),m(23,"span"),K(24,"Loop Agent"),w()(),m(25,"button",30),eA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("ParallelAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(26,"mat-icon"),K(27,"density_medium"),w(),m(28,"span"),K(29,"Parallel Agent"),w()()()()()}if(t&2){let A=An(9),i=v().$implicit;ie("width",200)("height",100)("x",i.width()/2-100)("y",i.height()/2-40),p(2),AA("matMenuTriggerFor",A)}}function rYA(t,e){t&1&&(Qt(),GA(0,"handle",26))}function sYA(t,e){if(t&1){let A=JA();Qt(),m(0,"g")(1,"rect",21),eA("click",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onGroupClick(o.node,n))})("pointerdown",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onGroupPointerDown(o.node,n))}),w(),m(2,"foreignObject",22),as(),m(3,"div",23)(4,"mat-icon",24),K(5),w(),m(6,"span",25),K(7),w()()(),V(8,aYA,30,5,":svg:foreignObject"),V(9,rYA,1,0,":svg:handle",26),w()}if(t&2){let A,i,n=e.$implicit,o=v(2);p(),wn("stroke",o.isGroupSelected(n.node)?"rgba(0, 187, 234, 0.8)":"rgba(0, 187, 234, 0.3)")("fill",o.isGroupSelected(n.node)?"rgba(0, 187, 234, 0.1)":"rgba(0, 187, 234, 0.03)")("stroke-width",o.isGroupSelected(n.node)?3:2),ie("width",n.width())("height",n.height()),p(),ie("width",200)("height",32),p(3),qA(o.getAgentIcon(n.node.data==null||(A=n.node.data())==null?null:A.agent_class)),p(2),qA(n.node.data==null||(i=n.node.data())==null?null:i.agent_class),p(),W(o.isGroupEmpty(n.node.id)?8:-1),p(),W(o.shouldShowTopHandle(n.node)?9:-1)}}function gYA(t,e){t&1&&(m(0,"span",35),K(1,"Root"),w())}function lYA(t,e){if(t&1){let A=JA();m(0,"button",43),eA("click",function(n){Z(A),v();let o=Ws(0);return v(2).openDeleteSubAgentDialog(o),X(n.stopPropagation())}),m(1,"mat-icon"),K(2,"delete"),w()()}}function cYA(t,e){if(t&1){let A=JA();m(0,"div",46),eA("click",function(n){let o=Z(A).$implicit,a=v(2).$implicit;return v(2).selectTool(o,a.node),X(n.stopPropagation())}),m(1,"mat-icon",47),K(2),w(),m(3,"span",48),K(4),w()()}if(t&2){let A=e.$implicit,i=v(4);p(2),qA(i.getToolIcon(A)),p(2),qA(A.name)}}function CYA(t,e){if(t&1&&(m(0,"div",38)(1,"div",44),Ut(2,cYA,5,2,"div",45,iYA),w()()),t&2){v();let A=Ws(3);p(2),Jt(A)}}function IYA(t,e){if(t&1){let A=JA();m(0,"div",39)(1,"button",49,2),eA("click",function(n){return Z(A),X(n.stopPropagation())}),m(3,"span",50),K(4,"+"),w()(),m(5,"mat-menu",null,3)(7,"button",30),eA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LlmAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(8,"mat-icon"),K(9,"psychology"),w(),m(10,"span"),K(11,"LLM Agent"),w()(),m(12,"button",30),eA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("SequentialAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(13,"mat-icon"),K(14,"more_horiz"),w(),m(15,"span"),K(16,"Sequential Agent"),w()(),m(17,"button",30),eA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LoopAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(18,"mat-icon"),K(19,"sync"),w(),m(20,"span"),K(21,"Loop Agent"),w()(),m(22,"button",30),eA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("ParallelAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(23,"mat-icon"),K(24,"density_medium"),w(),m(25,"span"),K(26,"Parallel Agent"),w()()()()}if(t&2){let A=An(6);p(),AA("matMenuTriggerFor",A)}}function dYA(t,e){t&1&&GA(0,"handle",40)}function BYA(t,e){t&1&&GA(0,"handle",26)}function EYA(t,e){t&1&&GA(0,"handle",41)}function QYA(t,e){t&1&&GA(0,"handle",42)}function hYA(t,e){if(t&1){let A=JA();Ur(0)(1),ri(2,"async"),Ur(3),m(4,"div",31),eA("click",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onCustomTemplateNodeClick(o.node,n))})("pointerdown",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onNodePointerDown(o.node,n))}),m(5,"div",32)(6,"div",33)(7,"mat-icon",34),K(8),w(),K(9),V(10,gYA,2,0,"span",35),w(),m(11,"div",36),V(12,lYA,3,0,"button",37),w()(),V(13,CYA,4,0,"div",38),V(14,IYA,27,1,"div",39),V(15,dYA,1,0,"handle",40),V(16,BYA,1,0,"handle",26),V(17,EYA,1,0,"handle",41),V(18,QYA,1,0,"handle",42),w()}if(t&2){let A=e.$implicit,i=v(2),n=A.node.data==null?null:A.node.data(),o=_g((n==null?null:n.name)||"root_agent"),a=Ci(2,17,i.toolsMap$);p(3);let s=_g(i.getToolsForNode(o,a)).length>0;p(),ae("custom-node_selected",i.isNodeSelected(A.node))("custom-node_has-tools",s)("in-group",A.node.parentId&&A.node.parentId()),p(4),qA(i.getAgentIcon(n==null?null:n.agent_class)),p(),_e(" ",o," "),p(),W(i.isRootAgent(o)?10:-1),p(2),W(i.isRootAgentForCurrentTab(o)?-1:12),p(),W(s?13:-1),p(),W(i.shouldShowAddButton(A.node)?14:-1),p(),W(i.shouldShowLeftHandle(A.node)?15:-1),p(),W(i.shouldShowTopHandle(A.node)?16:-1),p(),W(i.shouldShowRightHandle(A.node)?17:-1),p(),W(i.shouldShowBottomHandle(A.node)?18:-1)}}function uYA(t,e){if(t&1&&(m(0,"vflow",8),vt(1,sYA,10,14,"ng-template",19)(2,hYA,19,20,"ng-template",20),w()),t&2){let A=v();AA("nodes",A.vflowNodes())("edges",A.edges())("background",Cu(4,eYA))("snapGrid",Cu(5,tYA))}}function fYA(t,e){t&1&&(m(0,"div",9)(1,"div",51)(2,"mat-icon",52),K(3,"touch_app"),w(),m(4,"h4"),K(5,"Start Building Your ADK"),w(),m(6,"p"),K(7,"Drag components from the left panel to create your workflow"),w(),m(8,"div",53)(9,"div",54)(10,"mat-icon"),K(11,"drag_indicator"),w(),m(12,"span"),K(13,"Drag to move nodes"),w()(),m(14,"div",54)(15,"mat-icon"),K(16,"link"),w(),m(17,"span"),K(18,"Shift + Click to connect nodes"),w()()()()())}var jh=class t{constructor(e,A,i){this.dialog=e;this.agentService=A;this.router=i;this.toolsMap$=this.agentBuilderService.getAgentToolsMap(),this.agentBuilderService.getSelectedTool().subscribe(n=>{this.selectedTool=n})}_snackBar=h(J2);canvasRef;svgCanvasRef;agentBuilderService=h(E0);cdr=h(mt);showSidePanel=!0;showBuilderAssistant=!1;appNameInput="";toggleSidePanelRequest=new WA;builderAssistantCloseRequest=new WA;ctx;connections=jA([]);nodeId=1;edgeId=1;callbackId=1;toolId=1;appName="";nodes=jA([]);edges=jA([]);workflowShellWidth=340;workflowGroupWidth=420;workflowGroupHeight=220;workflowGroupYOffset=180;workflowGroupXOffset=-40;workflowInnerNodePoint={x:40,y:80};groupNodes=jA([]);vflowNodes=Ke(()=>[...this.groupNodes(),...this.nodes()]);selectedAgents=[];selectedTool;selectedCallback;currentAgentTool=jA(null);agentToolBoards=jA(new Map);isAgentToolMode=!1;navigationStack=[];existingAgent=void 0;toolsMap$;nodePositions=new Map;ngOnInit(){this.agentService.getApp().subscribe(e=>{e&&(this.appName=e)}),this.appNameInput&&(this.appName=this.appNameInput),this.agentBuilderService.getNewTabRequest().subscribe(e=>{if(e){let{tabName:A,currentAgentName:i}=e;this.switchToAgentToolBoard(A,i)}}),this.agentBuilderService.getTabDeletionRequest().subscribe(e=>{e&&this.deleteAgentToolBoard(e)}),this.agentBuilderService.getSelectedCallback().subscribe(e=>{this.selectedCallback=e}),this.agentBuilderService.getAgentCallbacks().subscribe(e=>{if(e){let A=this.nodes().find(i=>i.data?i.data().name===e.agentName:void 0);if(A&&A.data){let i=A.data();i.callbacks=e.callbacks,A.data.set(i)}}}),this.agentBuilderService.getDeleteSubAgentSubject().subscribe(e=>{e&&this.openDeleteSubAgentDialog(e)}),this.agentBuilderService.getAddSubAgentSubject().subscribe(e=>{e.parentAgentName&&this.addSubAgent(e.parentAgentName,e.agentClass,e.isFromEmptyGroup)}),this.agentBuilderService.getSelectedNode().subscribe(e=>{this.selectedAgents=this.nodes().filter(A=>A.data&&A.data().name===e?.name)}),this.toolsMap$.subscribe(e=>{this.nodes().some(i=>i.parentId&&i.parentId())&&this.groupNodes().length>0&&this.updateGroupDimensions()})}ngOnChanges(e){e.appNameInput&&e.appNameInput.currentValue&&(this.appName=e.appNameInput.currentValue)}ngAfterViewInit(){}onCustomTemplateNodeClick(e,A){this.shouldIgnoreNodeInteraction(A.target)||this.selectAgentNode(e,{openConfig:!0})}onNodePointerDown(e,A){this.shouldIgnoreNodeInteraction(A.target)||this.selectAgentNode(e,{openConfig:!1})}onGroupClick(e,A){if(A.stopPropagation(),!e?.data)return;let i=e.data().name,n=this.nodes().find(o=>o.data&&o.data().name===i);n&&this.selectAgentNode(n,{openConfig:!0})}onGroupPointerDown(e,A){if(A.stopPropagation(),!e?.data)return;let i=e.data().name,n=this.nodes().find(o=>o.data&&o.data().name===i);n&&this.selectAgentNode(n,{openConfig:!1})}onCanvasClick(e){let A=e.target;if(!A)return;let i=[".custom-node",".action-button-bar",".add-subagent-btn",".open-panel-btn",".agent-tool-banner",".mat-mdc-menu-panel"];A.closest(i.join(","))||this.clearCanvasSelection()}shouldIgnoreNodeInteraction(e){return e?!!e.closest("mat-chip, .add-subagent-btn, .mat-mdc-menu-panel"):!1}selectAgentNode(e,A={}){if(!e?.data)return;let i=this.agentBuilderService.getNode(e.data().name);i&&(this.agentBuilderService.setSelectedTool(void 0),this.agentBuilderService.setSelectedNode(i),this.nodePositions.set(i.name,gA({},e.point())),A.openConfig&&this.agentBuilderService.requestSideTabChange("config"))}handleAgentTypeSelection(e,A,i,n,o=!1){n.stopPropagation(),i?.closeMenu(),this.onAgentTypeSelected(e,A,o)}clearCanvasSelection(){!this.selectedAgents.length&&!this.selectedTool&&!this.selectedCallback||(this.selectedAgents=[],this.selectedTool=void 0,this.selectedCallback=void 0,this.agentBuilderService.setSelectedNode(void 0),this.agentBuilderService.setSelectedTool(void 0),this.agentBuilderService.setSelectedCallback(void 0),this.cdr.markForCheck())}onAddResource(e){}onAgentTypeSelected(e,A,i=!1){A&&this.addSubAgent(A,e,i)}generateNodeId(){return this.nodeId+=1,this.nodeId.toString()}generateEdgeId(){return this.edgeId+=1,this.edgeId.toString()}createNode(e,A,i){let n=jA(e),a={id:this.generateNodeId(),point:jA(gA({},A)),type:"html-template",data:n};return i&&(a.parentId=jA(i)),this.nodePositions.set(e.name,gA({},a.point())),a}createWorkflowGroup(e,A,i,n,o,a){let r,s=null;if(n){let d=(o||this.groupNodes()).find(B=>B.id===n);if(d){let B=d.point(),E=d.height?d.height():this.workflowGroupHeight;if(a&&o){let Q=a.filter(f=>f.parentId&&f.parentId()===d.id);if(Q.length>0){let U=0;for(let J of Q){let j=J.data?J.data():void 0,$=120;j&&j.tools&&j.tools.length>0&&($+=20+j.tools.length*36),U=Math.max(U,$)}E=Math.max(220,80+U+40)}}r={x:B.x,y:B.y+E+60},s=null}else r={x:i.x+this.workflowGroupXOffset,y:i.y+this.workflowGroupYOffset}}else r={x:i.x+this.workflowGroupXOffset,y:i.y+this.workflowGroupYOffset};let g=this.generateNodeId(),l={id:g,point:jA(r),type:"template-group",data:jA(e),parentId:jA(s),width:jA(this.workflowGroupWidth),height:jA(this.workflowGroupHeight)},C=e.agent_class==="SequentialAgent"?{id:this.generateEdgeId(),source:A.id,sourceHandle:"source-bottom",target:g,targetHandle:"target-top"}:null;return{groupNode:l,edge:C}}calculateWorkflowChildPosition(e,A){let r=(A-20)/2;return{x:45+e*428,y:r}}createAgentNodeWithGroup(e,A,i,n,o){let a=this.createNode(e,A,i),r=null,s=null;if(this.isWorkflowAgent(e.agent_class)){let g=this.createWorkflowGroup(e,a,A,i,n,o);r=g.groupNode,s=g.edge}return{shellNode:a,groupNode:r,groupEdge:s}}createWorkflowChildEdge(e,A){return this.createWorkflowChildEdgeFromArrays(e,A,this.nodes(),this.groupNodes())}createWorkflowChildEdgeFromArrays(e,A,i,n){if(!A)return null;let o=n.find(r=>r.id===A);if(!o||!o.data)return null;let a=o.data().agent_class;if(a==="LoopAgent"||a==="ParallelAgent"){let r=i.find(s=>s.data&&s.data().name===o.data().name);if(r)return{id:this.generateEdgeId(),source:r.id,sourceHandle:"source-bottom",target:e.id,targetHandle:"target-top"}}if(a==="SequentialAgent"){let r=i.filter(l=>l.parentId&&l.parentId()===A);if(r.length===0)return null;r.sort((l,C)=>l.point().x-C.point().x);let s=r.findIndex(l=>l.id===e.id);if(s<=0)return null;let g=r[s-1];return{id:this.generateEdgeId(),source:g.id,sourceHandle:"source-right",target:e.id,targetHandle:"target-left"}}return null}isWorkflowAgent(e){return e?e==="SequentialAgent"||e==="ParallelAgent"||e==="LoopAgent":!1}addSubAgent(e,A="LlmAgent",i=!1){let n=this.nodes().find(C=>C.data&&C.data().name===e);if(!n||!n.data)return;let a={name:this.agentBuilderService.getNextSubAgentName(),agent_class:A,model:"gemini-2.5-flash",instruction:"You are a sub-agent that performs specialized tasks.",isRoot:!1,sub_agents:[],tools:[]},r=this.isWorkflowAgent(n.data().agent_class),s=n.parentId&&n.parentId()&&this.groupNodes().some(C=>C.id===n.parentId()),g,l=null;if(i&&r){let C=n.data();if(!C)return;let I=this.groupNodes().find(b=>b.data&&b.data()?.name===C.name);if(!I){console.error("Could not find group for workflow node");return}let d=this.agentBuilderService.getNode(n.data().name);if(!d){console.error("Could not find clicked agent data");return}let B=d.sub_agents.length,E=I.height?I.height():this.workflowGroupHeight,Q=this.calculateWorkflowChildPosition(B,E),f=this.createAgentNodeWithGroup(a,Q,I.id);g=f.shellNode,l=f.groupNode,d.sub_agents.push(a),l&&this.groupNodes.set([...this.groupNodes(),l]),f.groupEdge&&this.edges.set([...this.edges(),f.groupEdge])}else if(s){let C=n.parentId()??void 0,I=this.groupNodes().find(S=>S.id===C);if(!I||!I.data){console.error("Could not find parent group node");return}let d=I.data().name,B=this.agentBuilderService.getNode(d);if(!B){console.error("Could not find workflow parent agent");return}let E=B.sub_agents.length,Q=I.height?I.height():this.workflowGroupHeight,f=this.calculateWorkflowChildPosition(E,Q),b=this.createAgentNodeWithGroup(a,f,C);g=b.shellNode,l=b.groupNode,B.sub_agents.push(a),l&&this.groupNodes.set([...this.groupNodes(),l]),b.groupEdge&&this.edges.set([...this.edges(),b.groupEdge])}else{let C=n.data().sub_agents.length,I={x:n.point().x+C*400,y:n.point().y+300},d=this.createAgentNodeWithGroup(a,I);g=d.shellNode,l=d.groupNode;let B=this.agentBuilderService.getNode(n.data().name);B&&B.sub_agents.push(a),l&&this.groupNodes.set([...this.groupNodes(),l]),d.groupEdge&&this.edges.set([...this.edges(),d.groupEdge])}if(this.agentBuilderService.addNode(a),this.nodes.set([...this.nodes(),g]),this.selectedAgents=[g],(s||r)&&this.updateGroupDimensions(),r||s){let C=g.parentId?g.parentId()??void 0:void 0,I=this.createWorkflowChildEdge(g,C);I&&this.edges.set([...this.edges(),I])}else{let C={id:this.generateEdgeId(),source:n.id,sourceHandle:"source-bottom",target:g.id,targetHandle:"target-top"};this.edges.set([...this.edges(),C])}this.agentBuilderService.setSelectedNode(a),this.agentBuilderService.requestSideTabChange("config")}addTool(e){let A=this.nodes().find(o=>o.id===e);if(!A||!A.data)return;let i=A.data();if(!i)return;this.dialog.open(W2,{width:"500px"}).afterClosed().subscribe(o=>{if(o)if(o.toolType==="Agent Tool")this.createAgentTool(i.name);else{let a={toolType:o.toolType,name:o.name};this.agentBuilderService.addTool(i.name,a),this.agentBuilderService.setSelectedTool(a)}})}addCallback(e){let A=this.nodes().find(o=>o.id===e);if(!A||!A.data)return;let i={name:`callback_${this.callbackId}`,type:"before_agent",code:`def callback_function(callback_context): + # Add your callback logic here + return None`,description:"Auto-generated callback"};this.callbackId++;let n=this.agentBuilderService.addCallback(A.data().name,i);n.success||this._snackBar.open(n.error||"Failed to add callback","Close",{duration:3e3,panelClass:["error-snackbar"]})}createAgentTool(e){this.dialog.open(qc,{width:"750px",height:"310px",data:{title:"Create Agent Tool",message:"Please enter a name for the agent tool:",confirmButtonText:"Create",showInput:!0,inputLabel:"Agent Tool Name",inputPlaceholder:"Enter agent tool name"}}).afterClosed().subscribe(i=>{i&&typeof i=="string"&&this.agentBuilderService.requestNewTab(i,e)})}deleteTool(e,A){let i=A.toolType==="Agent Tool",n=i&&A.toolAgentName||A.name;this.dialog.open(qc,{data:{title:i?"Delete Agent Tool":"Delete Tool",message:i?`Are you sure you want to delete the agent tool "${n}"? This will also delete the corresponding board.`:`Are you sure you want to delete ${n}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(a=>{a==="confirm"&&this.deleteToolWithoutDialog(e,A)})}deleteToolWithoutDialog(e,A){if(A.toolType==="Agent Tool"){let i=A.toolAgentName||A.name;this.deleteAgentToolAndBoard(e,A,i)}else this.agentBuilderService.deleteTool(e,A)}deleteAgentToolAndBoard(e,A,i){this.agentBuilderService.deleteTool(e,A),this.agentBuilderService.requestTabDeletion(i)}deleteCallback(e,A){this.dialog.open(qc,{data:{title:"Delete Callback",message:`Are you sure you want to delete ${A.name}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(n=>{if(n==="confirm"){let o=this.agentBuilderService.deleteCallback(e,A);o.success||this._snackBar.open(o.error||"Failed to delete callback","Close",{duration:3e3,panelClass:["error-snackbar"]}),this.cdr.detectChanges()}})}openDeleteSubAgentDialog(e){this.dialog.open(qc,{data:{title:"Delete sub agent",message:`Are you sure you want to delete ${e}? This will also delete all the underlying sub agents and tools.`,confirmButtonText:"Delete"}}).afterClosed().subscribe(i=>{i==="confirm"&&this.deleteSubAgent(e)})}deleteSubAgent(e){let A=this.agentBuilderService.getNode(e);if(!A)return;let i=this.agentBuilderService.getParentNode(this.agentBuilderService.getRootNode(),A,void 0,this.agentToolBoards());i&&(this.deleteSubAgentHelper(A,i),this.agentBuilderService.getSelectedNode().pipe(oo(1),Ze(n=>!!n)).subscribe(n=>{this.agentBuilderService.getNodes().includes(n)||this.agentBuilderService.setSelectedNode(i)}))}isNodeInSequentialWorkflow(e){if(!e.parentId||!e.parentId())return!1;let A=e.parentId(),i=this.groupNodes().find(n=>n.id===A);return!i||!i.data?!1:i.data().agent_class==="SequentialAgent"}getSequentialSiblings(e){if(!e.parentId||!e.parentId())return{previous:void 0,next:void 0};let A=e.parentId(),i=this.nodes().filter(o=>o.parentId&&o.parentId()===A);i.sort((o,a)=>o.point().x-a.point().x);let n=i.findIndex(o=>o.id===e.id);return n===-1?{previous:void 0,next:void 0}:{previous:n>0?i[n-1]:void 0,next:nn.data&&n.data().name===e.name);if(i){let n=this.isNodeInSequentialWorkflow(i),o,a;if(n){let s=this.getSequentialSiblings(i);o=s.previous,a=s.next}this.nodes.set(this.nodes().filter(s=>s.id!==i.id));let r=this.groupNodes().find(s=>s.data&&s.data().name===e.name);if(r){this.groupNodes.set(this.groupNodes().filter(g=>g.id!==r.id));let s=this.edges().filter(g=>g.target!==i.id&&g.source!==i.id&&g.target!==r.id&&g.source!==r.id);this.edges.set(s)}else{let s=this.edges().filter(g=>g.target!==i.id&&g.source!==i.id);this.edges.set(s)}if(n&&o&&a){let s={id:this.generateEdgeId(),source:o.id,sourceHandle:"source-right",target:a.id,targetHandle:"target-left"};this.edges.set([...this.edges(),s])}}this.nodePositions.delete(e.name),A.sub_agents=A.sub_agents.filter(n=>n.name!==e.name),this.agentBuilderService.deleteNode(e),i&&i.parentId&&i.parentId()&&this.updateGroupDimensions()}selectTool(e,A){if(e.toolType==="Agent Tool"){let i=e.name;this.switchToAgentToolBoard(i);return}if(e.toolType==="Function tool"||e.toolType==="Built-in tool"){if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.editTool(e,i)}return}if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.agentBuilderService.setSelectedNode(i)}this.agentBuilderService.setSelectedTool(e)}editTool(e,A){let i;e.toolType==="Built-in tool"?i=this.dialog.open(aB,{width:"700px",maxWidth:"90vw",data:{toolName:e.name,isEditMode:!0,toolArgs:e.args}}):i=this.dialog.open(W2,{width:"500px",data:{toolType:e.toolType,toolName:e.name,isEditMode:!0}}),i.afterClosed().subscribe(n=>{if(n&&n.isEditMode){let o=A.tools?.findIndex(a=>a.name===e.name);o!==void 0&&o!==-1&&A.tools&&(A.tools[o].name=n.name,n.args&&(A.tools[o].args=n.args),this.agentBuilderService.setAgentTools(A.name,A.tools))}})}selectCallback(e,A){if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.agentBuilderService.setSelectedNode(i)}this.agentBuilderService.setSelectedCallback(e)}openToolsTab(e){if(e.data){let A=this.agentBuilderService.getNode(e.data().name);A&&this.agentBuilderService.setSelectedNode(A)}this.agentBuilderService.requestSideTabChange("tools")}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A){this._snackBar.open("Please create an agent first.","OK");return}let i=new FormData,n=this.agentToolBoards();w0.generateYamlFile(A,i,e,n),this.agentService.agentBuild(i).subscribe(o=>{o?this.router.navigate(["/"],{queryParams:{app:e}}).then(()=>{window.location.reload()}):this._snackBar.open("Something went wrong, please try again","OK")})}isRootAgent(e){let A=this.agentBuilderService.getRootNode();return A?A.name===e:!1}isRootAgentForCurrentTab(e){return this.isAgentToolMode&&this.currentAgentTool()?e===this.currentAgentTool():this.isRootAgent(e)}shouldShowHorizontalHandle(e,A){if(!e.parentId||!e.parentId())return!1;let i=e.parentId(),n=this.groupNodes().find(s=>s.id===i);if(!n||!n.data||n.data().agent_class!=="SequentialAgent")return!1;let a=this.nodes().filter(s=>s.parentId&&s.parentId()===i);if(a.length<=1)return!1;a.sort((s,g)=>s.point().x-g.point().x);let r=a.findIndex(s=>s.id===e.id);return A==="left"?r>0:r0):!1}shouldShowTopHandle(e){let A=e.data?e.data():void 0,i=A?.name,n=i?this.isRootAgent(i):!1;if(e.type==="template-group")return A?.agent_class==="SequentialAgent";if(n)return!1;if(e.parentId&&e.parentId()){let a=e.parentId(),r=this.groupNodes().find(s=>s.id===a);if(r&&r.data){let s=r.data().agent_class;if(s==="LoopAgent"||s==="ParallelAgent")return!0}return!1}return!0}getToolsForNode(e,A){return!e||!A?[]:A.get(e)??[]}loadFromYaml(e,A){try{let i=yE(e);this.agentBuilderService.clear(),this.nodePositions.clear(),this.agentToolBoards.set(new Map),this.agentBuilderService.setAgentToolBoards(new Map),this.currentAgentTool.set(null),this.isAgentToolMode=!1,this.navigationStack=[];let n=be(gA({name:i.name||"root_agent",agent_class:i.agent_class||"LlmAgent",model:i.model||"gemini-2.5-flash",instruction:i.instruction||"",description:i.description||""},i.max_iterations&&{max_iterations:i.max_iterations}),{isRoot:!0,sub_agents:i.sub_agents||[],tools:this.parseToolsFromYaml(i.tools||[]),callbacks:this.parseCallbacksFromYaml(i)});this.agentBuilderService.addNode(n),this.agentBuilderService.setSelectedNode(n),this.processAgentToolsFromYaml(n.tools||[],A),this.loadAgentBoard(n)}catch(i){console.error("Error parsing YAML:",i)}}parseToolsFromYaml(e){return e.map(A=>{let i={name:A.name,toolType:this.determineToolType(A),toolAgentName:A.name};if(A.name==="AgentTool"&&A.args&&A.args.agent&&A.args.agent.config_path){i.toolType="Agent Tool";let o=A.args.agent.config_path.replace("./","").replace(".yaml","");i.name=o,i.toolAgentName=o,i.args=A.args}else A.args&&(i.args=A.args);return i})}parseCallbacksFromYaml(e){let A=[];return Object.keys(e).forEach(i=>{if(i.endsWith("_callback")&&Array.isArray(e[i])){let n=i.replace("_callback","");e[i].forEach(o=>{o.name&&A.push({name:o.name,type:n})})}}),A}determineToolType(e){return e.name==="AgentTool"&&e.args&&e.args.agent?"Agent Tool":e.name&&e.name.includes(".")&&e.args?"Custom tool":e.name&&e.name.includes(".")&&!e.args?"Function tool":"Built-in tool"}processAgentToolsFromYaml(e,A){let i=e.filter(n=>n.toolType==="Agent Tool");for(let n of i)this.agentToolBoards().has(n.name)||this.loadAgentToolConfiguration(n,A)}loadAgentToolConfiguration(e,A){let i=e.name;this.agentService.getSubAgentBuilder(A,`${i}.yaml`).subscribe({next:n=>{if(n)try{let o=yE(n),a=be(gA({name:o.name||i,agent_class:o.agent_class||"LlmAgent",model:o.model||"gemini-2.5-flash",instruction:o.instruction||`You are the ${i} agent that can be used as a tool by other agents.`,description:o.description||""},o.max_iterations&&{max_iterations:o.max_iterations}),{isRoot:!1,sub_agents:o.sub_agents||[],tools:this.parseToolsFromYaml(o.tools||[]),callbacks:this.parseCallbacksFromYaml(o),isAgentTool:!0,skip_summarization:!!e.args?.skip_summarization}),r=this.agentToolBoards();if(r.set(i,a),this.agentToolBoards.set(r),this.agentBuilderService.setAgentToolBoards(r),this.agentBuilderService.addNode(a),this.processAgentToolsFromYaml(a.tools||[],A),a.sub_agents&&a.sub_agents.length>0)for(let s of a.sub_agents)s.config_path&&this.agentService.getSubAgentBuilder(A,s.config_path).subscribe(g=>{if(g){let l=yE(g);this.processAgentToolsFromYaml(this.parseToolsFromYaml(l.tools||[]),A)}})}catch(o){console.error(`Error parsing YAML for agent tool ${i}:`,o),this.createDefaultAgentToolConfiguration(e)}else this.createDefaultAgentToolConfiguration(e)},error:n=>{console.error(`Error loading agent tool configuration for ${i}:`,n),this.createDefaultAgentToolConfiguration(e)}})}createDefaultAgentToolConfiguration(e){let A=e.name,i={name:A,agent_class:"LlmAgent",model:"gemini-2.5-flash",instruction:`You are the ${A} agent that can be used as a tool by other agents.`,isRoot:!1,sub_agents:[],tools:[],isAgentTool:!0,skip_summarization:!!e.args?.skip_summarization},n=this.agentToolBoards();n.set(A,i),this.agentToolBoards.set(n),this.agentBuilderService.setAgentToolBoards(n),this.agentBuilderService.addNode(i)}loadAgentTools(e){e.tools?(e.tools=e.tools.filter(A=>A.name&&A.name.trim()!==""),e.tools.forEach(A=>{A.toolType!=="Agent Tool"&&(A.name.includes(".")&&A.args?A.toolType="Custom tool":A.name.includes(".")&&!A.args?A.toolType="Function tool":A.toolType="Built-in tool")})):e.tools=[]}isNodeSelected(e){return this.selectedAgents.includes(e)}isGroupSelected(e){if(!e.data)return!1;let A=e.data().name,i=this.nodes().find(n=>n.data&&n.data().name===A);return i?this.isNodeSelected(i):!1}loadSubAgents(e,A){return nt(this,null,function*(){let i=[{node:A,depth:1,index:1,parentShellId:void 0,parentAgent:void 0,parentGroupId:void 0}],n=[],o=[],a=[];for(;i.length>0;){let{node:r,depth:s,index:g,parentShellId:l,parentAgent:C,parentGroupId:I}=i.shift(),d=r;if(r.config_path)try{let M=yield oU(this.agentService.getSubAgentBuilder(e,r.config_path));d=yE(M),d.tools&&(d.tools=this.parseToolsFromYaml(d.tools||[])),this.processAgentToolsFromYaml(d.tools||[],e)}catch(M){console.error(`Failed to load agent from ${r.config_path}`,M);continue}if(C&&C.sub_agents){let M=C.sub_agents.indexOf(r);M!==-1&&(C.sub_agents[M]=d,this.agentBuilderService.addNode(C))}this.agentBuilderService.addNode(d);let B=this.nodePositions.get(d.name),E=this.isWorkflowAgent(d.agent_class),Q=C?this.isWorkflowAgent(C.agent_class):!1,f,b,S=null;if(Q&&!d.isRoot){let M=C?.sub_agents.indexOf(d)??g,D=o.find(U=>U.id===I),F=D?.height?D.height():this.workflowGroupHeight;f=B??this.calculateWorkflowChildPosition(M,F);let _=this.createAgentNodeWithGroup(d,f,I??void 0,o,n);b=_.shellNode,S=_.groupNode,n.push(b),S&&o.push(S),_.groupEdge&&a.push(_.groupEdge)}else{if(B)f=B;else if(!l)f={x:100,y:150};else{let D=n.find(F=>F.id===l);D?f={x:D.point().x+(g-1)*400,y:D.point().y+300}:f={x:100,y:s*150+50}}let M=this.createAgentNodeWithGroup(d,f,void 0,o,n);b=M.shellNode,S=M.groupNode,n.push(b),E&&!d.isRoot&&(S&&o.push(S),M.groupEdge&&a.push(M.groupEdge))}if(l)if(I){let M=this.createWorkflowChildEdgeFromArrays(b,I,n,o);M&&a.push(M)}else{let M={id:this.generateEdgeId(),source:l,sourceHandle:"source-bottom",target:b.id,targetHandle:"target-top"};a.push(M)}if(d.sub_agents&&d.sub_agents.length>0){let M=1,D=E&&S?S.id:I;for(let F of d.sub_agents)i.push({node:F,parentShellId:b.id,depth:s+1,index:M,parentAgent:d,parentGroupId:D}),M++}}this.nodes.set(n),this.groupNodes.set(o),this.edges.set(a),this.updateGroupDimensions()})}switchToAgentToolBoard(e,A){let i=this.currentAgentTool()||"main";i!==e&&this.navigationStack.push(i);let n=this.agentToolBoards(),o=n.get(e);if(!o){o={isRoot:!1,name:e,agent_class:"LlmAgent",model:"gemini-2.5-flash",instruction:`You are the ${e} agent that can be used as a tool by other agents.`,sub_agents:[],tools:[],isAgentTool:!0,skip_summarization:!1};let a=new Map(n);a.set(e,o),this.agentToolBoards.set(a),this.agentBuilderService.setAgentToolBoards(a),A?this.addAgentToolToAgent(e,A):this.addAgentToolToRoot(e)}this.currentAgentTool.set(e),this.isAgentToolMode=!0,this.loadAgentBoard(o),this.agentBuilderService.setSelectedNode(o),this.agentBuilderService.requestSideTabChange("config")}backToMainCanvas(){if(this.navigationStack.length>0){let e=this.navigationStack.pop();if(e==="main"){this.currentAgentTool.set(null),this.isAgentToolMode=!1;let A=this.agentBuilderService.getRootNode();A&&(this.loadAgentBoard(A),this.agentBuilderService.setSelectedNode(A),this.agentBuilderService.requestSideTabChange("config"))}else{let i=this.agentToolBoards().get(e);i&&(this.currentAgentTool.set(e),this.isAgentToolMode=!0,this.loadAgentBoard(i),this.agentBuilderService.setSelectedNode(i),this.agentBuilderService.requestSideTabChange("config"))}}else{this.currentAgentTool.set(null),this.isAgentToolMode=!1;let e=this.agentBuilderService.getRootNode();e&&(this.loadAgentBoard(e),this.agentBuilderService.setSelectedNode(e),this.agentBuilderService.requestSideTabChange("config"))}}loadAgentBoard(e){return nt(this,null,function*(){if(this.captureCurrentNodePositions(),this.nodes.set([]),this.groupNodes.set([]),this.edges.set([]),this.nodeId=0,this.edgeId=0,this.loadAgentTools(e),this.agentBuilderService.addNode(e),e.tools&&e.tools.length>0?this.agentBuilderService.setAgentTools(e.name,e.tools):this.agentBuilderService.setAgentTools(e.name,[]),e.sub_agents&&e.sub_agents.length>0)yield this.loadSubAgents(this.appName,e);else{let A=this.nodePositions.get(e.name)??{x:100,y:150},i=this.createNode(e,A);if(this.nodes.set([i]),this.isWorkflowAgent(e.agent_class)){let{groupNode:n,edge:o}=this.createWorkflowGroup(e,i,A);this.groupNodes.set([n]),o&&this.edges.set([o])}}this.agentBuilderService.setSelectedNode(e)})}addAgentToolToAgent(e,A){let i=this.agentBuilderService.getNode(A);if(i){if(i.tools&&i.tools.some(o=>o.name===e))return;let n={name:e,toolType:"Agent Tool",toolAgentName:e};i.tools||(i.tools=[]),i.tools.push(n),i.tools=i.tools.filter(o=>o.name&&o.name.trim()!==""),this.agentBuilderService.setAgentTools(A,i.tools)}}addAgentToolToRoot(e){let A=this.agentBuilderService.getRootNode();if(A){if(A.tools&&A.tools.some(n=>n.name===e))return;let i={name:e,toolType:"Agent Tool",toolAgentName:e};A.tools||(A.tools=[]),A.tools.push(i),this.agentBuilderService.setAgentTools("root_agent",A.tools)}}deleteAgentToolBoard(e){let A=this.agentToolBoards(),i=new Map(A);i.delete(e),this.agentToolBoards.set(i),this.agentBuilderService.setAgentToolBoards(i);let n=this.agentBuilderService.getNodes();for(let o of n)o.tools&&(o.tools=o.tools.filter(a=>!(a.toolType==="Agent Tool"&&(a.toolAgentName===e||a.name===e))),this.agentBuilderService.setAgentTools(o.name,o.tools));this.navigationStack=this.navigationStack.filter(o=>o!==e),this.currentAgentTool()===e&&this.backToMainCanvas()}getBackButtonTooltip(){if(this.navigationStack.length>0){let e=this.navigationStack[this.navigationStack.length-1];return e==="main"?"Back to Main Canvas":`Back to ${e}`}return"Back to Main Canvas"}onBuilderAssistantClose(){this.builderAssistantCloseRequest.emit()}reloadCanvasFromYaml(){this.appNameInput&&this.agentService.getAgentBuilderTmp(this.appNameInput).subscribe({next:e=>{e&&this.loadFromYaml(e,this.appNameInput)},error:e=>{console.error("Error reloading canvas:",e)}})}captureCurrentNodePositions(){for(let e of this.nodes()){if(!e?.data)continue;let A=e.data();A&&this.nodePositions.set(A.name,gA({},e.point()))}}updateGroupDimensions(){for(let s of this.groupNodes()){if(!s.data)continue;let g=s.data().name,l=this.nodes().filter(f=>f.parentId&&f.parentId()===s.id);if(l.length===0){s.width&&s.width.set(480),s.height&&s.height.set(220);continue}l.sort((f,b)=>f.point().x-b.point().x),l.forEach((f,b)=>{let _={x:45+b*428,y:80};if(f.point.set(_),f.data){let U=f.data();U&&this.nodePositions.set(U.name,_)}});let C=1/0,I=1/0,d=-1/0,B=-1/0;for(let f of l){let b=f.point(),S=f.data?f.data():void 0,M=120;S&&S.tools&&S.tools.length>0&&(M+=20+S.tools.length*36),C=Math.min(C,b.x),I=Math.min(I,b.y),d=Math.max(d,b.x+340+68),B=Math.max(B,b.y+M)}let E=d-C+80,Q=B-I+80;s.width&&s.width.set(Math.max(480,E)),s.height&&s.height.set(Math.max(220,Q))}}getToolIcon(e){return ME(e.name,e.toolType)}getAgentIcon(e){switch(e){case"SequentialAgent":return"more_horiz";case"LoopAgent":return"sync";case"ParallelAgent":return"density_medium";default:return"psychology"}}isGroupEmpty(e){return!this.nodes().some(i=>i.parentId&&i.parentId()===e)}shouldShowAddButton(e){let A=e.data?e.data():void 0;if(!A)return!1;let i=this.isWorkflowAgent(A.agent_class),n=e.parentId&&e.parentId();if(i&&!n||!this.isNodeSelected(e))return!1;if(n&&e.parentId){let o=e.parentId(),a=this.nodes().filter(s=>s.parentId&&s.parentId()===o);if(a.length===0)return!0;let r=a.reduce((s,g)=>g.point().x>s.point().x?g:s,a[0]);return e.id===r.id}return!0}static \u0275fac=function(A){return new(A||t)(Ct(Ks),Ct(Kh),Ct(Cs))};static \u0275cmp=kA({type:t,selectors:[["app-canvas"]],viewQuery:function(A,i){if(A&1&&ai($JA,5)(AYA,5),A&2){let n;ce(n=Ce())&&(i.canvasRef=n.first),ce(n=Ce())&&(i.svgCanvasRef=n.first)}},inputs:{showSidePanel:"showSidePanel",showBuilderAssistant:"showBuilderAssistant",appNameInput:"appNameInput"},outputs:{toggleSidePanelRequest:"toggleSidePanelRequest",builderAssistantCloseRequest:"builderAssistantCloseRequest"},features:[ti],decls:7,vars:8,consts:[["emptyGroupMenuTrigger","matMenuTrigger"],["emptyGroupMenu","matMenu"],["agentMenuTrigger","matMenuTrigger"],["agentMenu","matMenu"],[1,"canvas-container"],[1,"canvas-workspace",3,"click"],[1,"agent-tool-banner"],["matTooltip","Open panel",1,"material-symbols-outlined","open-panel-btn"],["view","auto",3,"nodes","edges","background","snapGrid"],[1,"canvas-instructions"],[3,"closePanel","reloadCanvas","isVisible","appName"],[1,"banner-content"],["mat-icon-button","",1,"back-to-main-btn",3,"click","matTooltip"],[1,"banner-info"],[1,"material-symbols-outlined","banner-icon"],[1,"banner-text"],[1,"agent-tool-name"],[1,"banner-subtitle"],["matTooltip","Open panel",1,"material-symbols-outlined","open-panel-btn",3,"click"],["groupNode",""],["nodeHtml",""],["selectable","","rx","12","ry","12",3,"click","pointerdown"],["x","12","y","12"],[1,"workflow-group-chip"],[1,"workflow-chip-icon"],[1,"workflow-chip-label"],["type","target","position","top","id","target-top"],[1,"empty-group-placeholder",3,"click"],["mat-icon-button","","matTooltip","Add sub-agent","aria-label","Add sub-agent",3,"click","matMenuTriggerFor"],[1,"empty-group-label"],["mat-menu-item","",3,"click"],["selectable","",1,"custom-node",3,"click","pointerdown"],[1,"node-title-wrapper"],[1,"node-title"],[2,"margin-right","5px"],[1,"node-badge"],[1,"action-button-bar"],["matIconButton","","matTooltip","Delete sub-agent","aria-label","Delete sub-agent",1,"action-btn","delete-subagent-btn"],[1,"tools-container"],[1,"add-subagent-container"],["type","target","position","left","id","target-left"],["type","source","position","right","id","source-right"],["type","source","position","bottom","id","source-bottom"],["matIconButton","","matTooltip","Delete sub-agent","aria-label","Delete sub-agent",1,"action-btn","delete-subagent-btn",3,"click"],[1,"tools-list"],[1,"tool-item"],[1,"tool-item",3,"click"],[1,"tool-item-icon"],[1,"tool-item-name"],["matIconButton","","matTooltip","Add sub-agent","aria-label","Add sub-agent",1,"add-subagent-btn",3,"click","matMenuTriggerFor"],[1,"add-subagent-symbol"],[1,"instruction-content"],[1,"instruction-icon"],[1,"instruction-tips"],[1,"tip"]],template:function(A,i){A&1&&(m(0,"div",4)(1,"div",5),eA("click",function(o){return i.onCanvasClick(o)}),V(2,nYA,13,2,"div",6),V(3,oYA,2,0,"span",7),V(4,uYA,3,6,"vflow",8),V(5,fYA,19,0,"div",9),w(),m(6,"app-builder-assistant",10),eA("closePanel",function(){return i.onBuilderAssistantClose()})("reloadCanvas",function(){return i.reloadCanvasFromYaml()}),w()()),A&2&&(p(),ae("has-banner",i.currentAgentTool()),p(),W(i.currentAgentTool()?2:-1),p(),W(i.showSidePanel?-1:3),p(),W(i.vflowNodes().length>0?4:-1),p(),W(i.vflowNodes().length===0?5:-1),p(),AA("isVisible",i.showBuilderAssistant)("appName",i.appName))},dependencies:[GsA,oK,KsA,B7,E7,fn,Sa,X0,l2,_h,_v,ls],styles:['[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;flex:1;min-height:0}.canvas-container[_ngcontent-%COMP%]{width:100%;height:100%;background:var(--builder-canvas-container-background);display:flex;flex-direction:column;border-radius:8px;overflow:hidden;box-shadow:var(--builder-canvas-shadow);flex:1;min-height:0;position:relative}.canvas-header[_ngcontent-%COMP%]{background:var(--builder-canvas-header-background);padding:16px 24px;border-bottom:2px solid var(--builder-border-color);display:flex;justify-content:space-between;align-items:center}.canvas-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;color:var(--builder-text-primary-color);font-size:18px;font-weight:600;font-family:Google Sans,Helvetica Neue,sans-serif;background:var(--builder-canvas-header-title-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.canvas-controls[_ngcontent-%COMP%]{display:flex;gap:8px}.canvas-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{background:var(--builder-button-background-color);border:1px solid var(--builder-button-border-color);color:var(--builder-button-text-color);transition:all .3s ease}.canvas-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:var(--builder-button-hover-background-color);border-color:var(--builder-button-hover-border-color);transform:translateY(-1px)}.canvas-workspace[_ngcontent-%COMP%]{flex:1;position:relative;overflow:hidden;background-color:var(--builder-canvas-workspace-background);min-height:0;width:100%;height:100%}.agent-tool-banner[_ngcontent-%COMP%]{position:absolute;top:0;left:0;right:0;z-index:1000;background:linear-gradient(135deg,#1e3a8a,#3b82f6);border-bottom:2px solid rgba(59,130,246,.3);box-shadow:0 4px 16px #0000004d}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%]{padding:12px 20px;display:flex;align-items:center;gap:16px}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%]{background:#ffffff1a;color:#fff;border:1px solid rgba(255,255,255,.2);transition:all .2s ease}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%]:hover{background:#fff3;transform:scale(1.05)}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex:1}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-icon[_ngcontent-%COMP%]{font-size:28px;width:28px;height:28px;color:#ffffffe6}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] .agent-tool-name[_ngcontent-%COMP%]{margin:0;color:#fff;font-size:18px;font-weight:600;font-family:Google Sans,Helvetica Neue,sans-serif;line-height:1.2}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] .banner-subtitle[_ngcontent-%COMP%]{margin:0;color:#fffc;font-size:12px;font-weight:400;line-height:1}.canvas-workspace[_ngcontent-%COMP%]:has(.agent-tool-banner) vflow[_ngcontent-%COMP%]{padding-top:68px}.canvas-workspace.has-banner[_ngcontent-%COMP%] vflow{padding-top:68px!important} vflow{width:100%!important;height:100%!important;display:block!important} vflow .root-svg{background-color:var(--builder-canvas-workspace-background)!important;color:var(--builder-text-primary-color)!important;width:100%!important;height:100%!important;min-width:100%!important;min-height:100%!important}.diagram-canvas[_ngcontent-%COMP%]{display:block;width:100%;height:100%;cursor:crosshair;transition:cursor .2s ease;object-fit:contain;image-rendering:pixelated}.diagram-canvas[_ngcontent-%COMP%]:active{cursor:grabbing}.canvas-instructions[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;z-index:1}.instruction-content[_ngcontent-%COMP%]{background:var(--builder-canvas-instruction-background);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:2px solid var(--builder-canvas-instruction-border);border-radius:16px;padding:32px;box-shadow:var(--builder-canvas-shadow)}.instruction-content[_ngcontent-%COMP%] .instruction-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;color:var(--builder-button-text-color);margin-bottom:16px;animation:_ngcontent-%COMP%_pulse 2s infinite}.instruction-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:20px;font-weight:600;margin:0 0 12px;font-family:Google Sans,Helvetica Neue,sans-serif}.instruction-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;margin:0 0 24px;line-height:1.5}.instruction-tips[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.tip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;color:var(--builder-accent-color);font-size:13px}.tip[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.connection-mode-indicator[_ngcontent-%COMP%]{position:absolute;top:20px;left:50%;transform:translate(-50%);z-index:10;animation:_ngcontent-%COMP%_slideDown .3s ease-out}.connection-indicator-content[_ngcontent-%COMP%]{background:linear-gradient(135deg,#1b73e8,#4285f4);color:#fff;padding:12px 20px;border-radius:24px;display:flex;align-items:center;gap:12px;box-shadow:0 4px 16px #1b73e866;border:1px solid rgba(255,255,255,.2)}.connection-indicator-content[_ngcontent-%COMP%] .connection-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;animation:_ngcontent-%COMP%_pulse 1.5s infinite}.connection-indicator-content[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;font-weight:500;white-space:nowrap}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{background:#fff3;color:#fff;border:1px solid rgba(255,255,255,.3);width:32px;height:32px;min-width:32px}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:#ffffff4d;transform:scale(1.1)}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}@keyframes _ngcontent-%COMP%_slideDown{0%{opacity:0;transform:translate(-50%) translateY(-20px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.canvas-footer[_ngcontent-%COMP%]{background:var(--builder-canvas-header-background);padding:12px 24px;border-top:1px solid var(--builder-border-color);display:flex;justify-content:space-between;align-items:center}.node-count[_ngcontent-%COMP%], .connection-count[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;color:var(--builder-text-secondary-color);font-size:13px;font-weight:500}.node-count[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .connection-count[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;color:var(--builder-accent-color)}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.05)}}.canvas-workspace.drag-over[_ngcontent-%COMP%]{background:radial-gradient(circle at 20% 50%,rgba(66,133,244,.1) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(52,168,83,.1) 0%,transparent 50%),radial-gradient(circle at 40% 80%,rgba(251,188,4,.1) 0%,transparent 50%),#131314}.canvas-workspace.drag-over[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;border:2px dashed #00bbea;border-radius:8px;margin:16px;animation:_ngcontent-%COMP%_dashMove 1s linear infinite}@keyframes _ngcontent-%COMP%_dashMove{0%{border-color:#8ab4f84d}50%{border-color:#8ab4f8cc}to{border-color:#8ab4f84d}}@media(max-width:768px){.canvas-header[_ngcontent-%COMP%]{padding:12px 16px}.canvas-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:16px}.instruction-content[_ngcontent-%COMP%]{padding:24px;margin:16px}.instruction-content[_ngcontent-%COMP%] .instruction-icon[_ngcontent-%COMP%]{font-size:36px;width:36px;height:36px}.instruction-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:18px}.canvas-footer[_ngcontent-%COMP%]{padding:8px 16px;flex-direction:column;gap:8px}}.custom-node[_ngcontent-%COMP%]{width:340px;background:var(--builder-canvas-node-background);border:1px solid var(--builder-canvas-node-border);border-radius:8px;align-items:center;position:relative;max-height:none;padding-bottom:0;overflow:visible}.custom-node[_ngcontent-%COMP%]:hover{border-color:var(--builder-canvas-node-hover-border)}.custom-node_selected[_ngcontent-%COMP%]{border:2px solid;border-color:var(--builder-accent-color)}.custom-node_selected[_ngcontent-%COMP%] mat-chip[_ngcontent-%COMP%]{--mdc-chip-outline-color: var(--builder-canvas-node-chip-outline)}.custom-node_selected[_ngcontent-%COMP%]:hover{border-color:var(--builder-accent-color)}[_nghost-%COMP%] .default-group-node{background-color:var(--builder-canvas-group-background)!important;border:2px solid var(--builder-canvas-group-border)!important}.node-title-wrapper[_ngcontent-%COMP%]{padding-top:12px;padding-bottom:12px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center}.node-title[_ngcontent-%COMP%]{padding-left:12px;padding-right:12px;display:flex;align-items:center;color:var(--builder-text-primary-color);font-weight:500}.node-badge[_ngcontent-%COMP%]{margin-left:8px;padding:2px 6px;border-radius:999px;background:var(--builder-canvas-node-badge-background);color:var(--builder-accent-color);font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.tools-container[_ngcontent-%COMP%]{padding:8px 12px;border-top:1px solid var(--builder-border-color)}.tools-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.tool-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:4px;cursor:pointer;transition:background-color .2s ease;color:var(--builder-text-primary-color)}.tool-item[_ngcontent-%COMP%]:hover{background-color:var(--builder-item-hover-color)}.tool-item[_ngcontent-%COMP%] .tool-item-icon[_ngcontent-%COMP%]{font-size:22px;width:22px;height:22px;color:var(--builder-text-primary-color);flex-shrink:0}.tool-item[_ngcontent-%COMP%] .tool-item-name[_ngcontent-%COMP%]{font-family:Google Sans,sans-serif;font-size:15px;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-item.more-tools[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-style:italic}.tool-item.more-tools[_ngcontent-%COMP%] .tool-item-icon[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color)}.custom-node_selected[_ngcontent-%COMP%] .node-title-wrapper[_ngcontent-%COMP%]{border-bottom-color:var(--builder-canvas-node-chip-outline)}.custom-node_selected[_ngcontent-%COMP%] .node-title-wrapper[_ngcontent-%COMP%] .node-title[_ngcontent-%COMP%]{color:var(--builder-accent-color)}.tools-header[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:space-between}.callbacks-container[_ngcontent-%COMP%]{padding:12px 6px 12px 12px}.callbacks-header[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:space-between}.callback-type[_ngcontent-%COMP%]{font-size:11px;background:var(--builder-chip-background-color);color:var(--builder-accent-color);padding:2px 6px;border-radius:4px;margin-left:4px;font-weight:500}.add-callback-btn[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;border-radius:4px;width:28px;height:28px;padding:0}.add-callback-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin:0;font-size:18px;width:18px;height:18px}.add-callback-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-item-hover-color);transform:scale(1.1)}.instruction-title[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px}.instructions[_ngcontent-%COMP%]{font-family:Google Sans;margin-bottom:10px}.agent-resources[_ngcontent-%COMP%]{padding:8px 12px}.empty-resource[_ngcontent-%COMP%]{margin-top:8px;color:var(--builder-text-secondary-color);margin-bottom:8px;display:flex;font-size:13px}.empty-resource[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:none}.action-button-bar[_ngcontent-%COMP%]{display:flex;gap:8px;margin-right:4px}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]{background:none;color:var(--builder-text-secondary-color);border:none;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;pointer-events:auto;border-radius:4px}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-item-hover-color);transform:scale(1.1)}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.action-button-bar[_ngcontent-%COMP%] .delete-subagent-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color)}.add-tool-btn[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;border-radius:4px;width:28px;height:28px;padding:0}.add-tool-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin:0;font-size:18px;width:18px;height:18px}.add-tool-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-item-hover-color);transform:scale(1.1)}.add-subagent-container[_ngcontent-%COMP%]{position:absolute;left:50%;bottom:-68px;transform:translate(-50%);display:flex;justify-content:center;pointer-events:none}.custom-node.in-group[_ngcontent-%COMP%] .add-subagent-container[_ngcontent-%COMP%]{left:auto;right:-68px;bottom:50%;transform:translateY(50%)}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:50%;border:2px solid var(--builder-accent-color);background:var(--builder-canvas-add-btn-background);color:var(--builder-accent-color);display:flex;align-items:center;justify-content:center;padding:0;box-sizing:border-box;transition:transform .2s ease,box-shadow .2s ease,background .2s ease;pointer-events:auto}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%] .add-subagent-symbol[_ngcontent-%COMP%]{font-size:28px;line-height:1;font-weight:400}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]:hover{transform:scale(1.05);box-shadow:var(--builder-canvas-add-btn-shadow);background:var(--builder-canvas-add-btn-hover-background)}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]:focus-visible{outline:none;box-shadow:var(--builder-canvas-add-btn-shadow)}.open-panel-btn[_ngcontent-%COMP%]{position:absolute;width:24px;height:24px;color:var(--builder-text-tertiary-color);cursor:pointer;margin-left:20px;margin-top:20px;z-index:9999}.custom-node[_ngcontent-%COMP%]:hover .action-button-bar[_ngcontent-%COMP%], .custom-node.custom-node_selected[_ngcontent-%COMP%] .action-button-bar[_ngcontent-%COMP%]{opacity:1;pointer-events:auto}[_nghost-%COMP%] div[nodehandlescontroller][noderesizecontroller].wrapper{height:0px!important;overflow:visible!important}[_nghost-%COMP%] foreignObject.selectable, [_nghost-%COMP%] foreignObject.selectable>div{overflow:visible!important}[_nghost-%COMP%] .interactive-edge{stroke:var(--builder-accent-color)!important;stroke-width:2!important}[_nghost-%COMP%] .default-handle{stroke:var(--builder-accent-color)!important;stroke-width:1!important;fill:var(--builder-canvas-handle-fill)!important}[_nghost-%COMP%] .reconnect-handle{stroke:var(--builder-accent-color)!important;stroke-width:2!important;fill:var(--builder-canvas-reconnect-handle-fill)!important}[_nghost-%COMP%] .workflow-group-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;background:var(--builder-canvas-workflow-chip-background);border:1px solid var(--builder-canvas-workflow-chip-border);border-radius:16px;color:var(--builder-accent-color);font-family:Google Sans,sans-serif;font-size:12px;font-weight:500;height:32px;box-sizing:border-box;white-space:nowrap;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}[_nghost-%COMP%] .workflow-group-chip .workflow-chip-icon{font-size:16px;width:16px;height:16px;line-height:16px}[_nghost-%COMP%] .workflow-group-chip .workflow-chip-label{color:var(--builder-text-primary-color);font-weight:500;font-size:12px;line-height:1}[_nghost-%COMP%] .empty-group-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px;border-radius:8px;text-align:center;background:var(--builder-canvas-empty-group-background);border:2px dashed var(--builder-canvas-empty-group-border);transition:all .3s ease}[_nghost-%COMP%] .empty-group-placeholder:hover{background:var(--builder-canvas-empty-group-hover-background);border-color:var(--builder-canvas-empty-group-hover-border)}[_nghost-%COMP%] .empty-group-placeholder button{border:2px solid var(--builder-accent-color);background-color:var(--builder-canvas-empty-group-btn-background);color:var(--builder-accent-color);width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;transition:all .2s ease}[_nghost-%COMP%] .empty-group-placeholder button:hover{background-color:var(--builder-canvas-empty-group-btn-hover-background);transform:scale(1.1);box-shadow:var(--builder-canvas-add-btn-shadow)}[_nghost-%COMP%] .empty-group-placeholder button mat-icon{font-size:24px;width:24px;height:24px}[_nghost-%COMP%] .empty-group-placeholder .empty-group-label{font-size:13px;font-weight:500;color:var(--builder-text-secondary-color);font-family:Google Sans,sans-serif}']})};function mYA(t,e){t&1&&Li(0,"div",2)}var pYA=new yA("MAT_PROGRESS_BAR_DEFAULT_OPTIONS");var y7=(()=>{class t{_elementRef=h(ge);_ngZone=h(Oe);_changeDetectorRef=h(mt);_renderer=h(Fi);_cleanupTransitionEnd;constructor(){let A=Nu(),i=h(pYA,{optional:!0});this._isNoopAnimation=A==="di-disabled",A==="reduced-motion"&&this._elementRef.nativeElement.classList.add("mat-progress-bar-reduced-motion"),i&&(i.color&&(this.color=this._defaultColor=i.color),this.mode=i.mode||this.mode)}_isNoopAnimation;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;_defaultColor="primary";get value(){return this._value}set value(A){this._value=UsA(A||0),this._changeDetectorRef.markForCheck()}_value=0;get bufferValue(){return this._bufferValue||0}set bufferValue(A){this._bufferValue=UsA(A||0),this._changeDetectorRef.markForCheck()}_bufferValue=0;animationEnd=new WA;get mode(){return this._mode}set mode(A){this._mode=A,this._changeDetectorRef.markForCheck()}_mode="determinate";ngAfterViewInit(){this._ngZone.runOutsideAngular(()=>{this._cleanupTransitionEnd=this._renderer.listen(this._elementRef.nativeElement,"transitionend",this._transitionendHandler)})}ngOnDestroy(){this._cleanupTransitionEnd?.()}_getPrimaryBarTransform(){return`scaleX(${this._isIndeterminate()?1:this.value/100})`}_getBufferBarFlexBasis(){return`${this.mode==="buffer"?this.bufferValue:100}%`}_isIndeterminate(){return this.mode==="indeterminate"||this.mode==="query"}_transitionendHandler=A=>{this.animationEnd.observers.length===0||!A.target||!A.target.classList.contains("mdc-linear-progress__primary-bar")||(this.mode==="determinate"||this.mode==="buffer")&&this._ngZone.run(()=>this.animationEnd.next({value:this.value}))};static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-progress-bar"]],hostAttrs:["role","progressbar","aria-valuemin","0","aria-valuemax","100","tabindex","-1",1,"mat-mdc-progress-bar","mdc-linear-progress"],hostVars:10,hostBindings:function(i,n){i&2&&(ie("aria-valuenow",n._isIndeterminate()?null:n.value)("mode",n.mode),zo("mat-"+n.color),ae("_mat-animation-noopable",n._isNoopAnimation)("mdc-linear-progress--animation-ready",!n._isNoopAnimation)("mdc-linear-progress--indeterminate",n._isIndeterminate()))},inputs:{color:"color",value:[2,"value","value",en],bufferValue:[2,"bufferValue","bufferValue",en],mode:"mode"},outputs:{animationEnd:"animationEnd"},exportAs:["matProgressBar"],decls:7,vars:5,consts:[["aria-hidden","true",1,"mdc-linear-progress__buffer"],[1,"mdc-linear-progress__buffer-bar"],[1,"mdc-linear-progress__buffer-dots"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__primary-bar"],[1,"mdc-linear-progress__bar-inner"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__secondary-bar"]],template:function(i,n){i&1&&(ci(0,"div",0),Li(1,"div",1),V(2,mYA,1,0,"div",2),fi(),ci(3,"div",3),Li(4,"span",4),fi(),ci(5,"div",5),Li(6,"span",4),fi()),i&2&&(p(),wn("flex-basis",n._getBufferBarFlexBasis()),p(),W(n.mode==="buffer"?2:-1),p(),wn("transform",n._getPrimaryBarTransform()))},styles:[`.mat-mdc-progress-bar{--mat-progress-bar-animation-multiplier: 1;display:block;text-align:start}.mat-mdc-progress-bar[mode=query]{transform:scaleX(-1)}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-dots,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__secondary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__bar-inner.mdc-linear-progress__bar-inner{animation:none}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-bar{transition:transform 1ms}.mat-progress-bar-reduced-motion{--mat-progress-bar-animation-multiplier: 2}.mdc-linear-progress{position:relative;width:100%;transform:translateZ(0);outline:1px solid rgba(0,0,0,0);overflow-x:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:max(var(--mat-progress-bar-track-height, 4px),var(--mat-progress-bar-active-indicator-height, 4px))}@media(forced-colors: active){.mdc-linear-progress{outline-color:CanvasText}}.mdc-linear-progress__bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:var(--mat-progress-bar-active-indicator-height, 4px)}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}[dir=rtl] .mdc-linear-progress__bar{right:0;transform-origin:center right}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-color:var(--mat-progress-bar-active-indicator-color, var(--mat-sys-primary));border-top-width:var(--mat-progress-bar-active-indicator-height, 4px)}.mdc-linear-progress__buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:var(--mat-progress-bar-track-height, 4px);border-radius:var(--mat-progress-bar-track-shape, var(--mat-sys-corner-none))}.mdc-linear-progress__buffer-dots{background-image:radial-gradient(circle, var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant)) calc(var(--mat-progress-bar-track-height, 4px) / 2), transparent 0);background-repeat:repeat-x;background-size:calc(calc(var(--mat-progress-bar-track-height, 4px) / 2)*5);background-position:left;flex:auto;transform:rotate(180deg);animation:mdc-linear-progress-buffering calc(250ms*var(--mat-progress-bar-animation-multiplier)) infinite linear}@media(forced-colors: active){.mdc-linear-progress__buffer-dots{background-color:ButtonBorder}}[dir=rtl] .mdc-linear-progress__buffer-dots{animation:mdc-linear-progress-buffering-reverse calc(250ms*var(--mat-progress-bar-animation-multiplier)) infinite linear;transform:rotate(0)}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);background-color:var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant))}.mdc-linear-progress__primary-bar{transform:scaleX(0)}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation:mdc-linear-progress-primary-indeterminate-translate calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-primary-indeterminate-scale calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation:mdc-linear-progress-secondary-indeterminate-translate calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-secondary-indeterminate-scale calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}@keyframes mdc-linear-progress-buffering{from{transform:rotate(180deg) translateX(calc(var(--mat-progress-bar-track-height, 4px) * -2.5))}}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(-83.67142%)}100%{transform:translateX(-200.611057%)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(-37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(-84.386165%)}100%{transform:translateX(-160.277782%)}}@keyframes mdc-linear-progress-buffering-reverse{from{transform:translateX(-10px)}} +`],encapsulation:2,changeDetection:0})}return t})();function UsA(t,e=0,A=100){return Math.max(e,Math.min(A,t))}var JsA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var DYA=["determinateSpinner"];function yYA(t,e){if(t&1&&(Qt(),m(0,"svg",11),GA(1,"circle",12),w()),t&2){let A=v();ie("viewBox",A._viewBox()),p(),wn("stroke-dasharray",A._strokeCircumference(),"px")("stroke-dashoffset",A._strokeCircumference()/2,"px")("stroke-width",A._circleStrokeWidth(),"%"),ie("r",A._circleRadius())}}var vYA=new yA("mat-progress-spinner-default-options",{providedIn:"root",factory:()=>({diameter:YsA})}),YsA=100,bYA=10,B1=(()=>{class t{_elementRef=h(ge);_noopAnimations;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;_defaultColor="primary";_determinateCircle;constructor(){let A=h(vYA),i=Nu(),n=this._elementRef.nativeElement;this._noopAnimations=i==="di-disabled"&&!!A&&!A._forceAnimations,this.mode=n.nodeName.toLowerCase()==="mat-spinner"?"indeterminate":"determinate",!this._noopAnimations&&i==="reduced-motion"&&n.classList.add("mat-progress-spinner-reduced-motion"),A&&(A.color&&(this.color=this._defaultColor=A.color),A.diameter&&(this.diameter=A.diameter),A.strokeWidth&&(this.strokeWidth=A.strokeWidth))}mode;get value(){return this.mode==="determinate"?this._value:0}set value(A){this._value=Math.max(0,Math.min(100,A||0))}_value=0;get diameter(){return this._diameter}set diameter(A){this._diameter=A||0}_diameter=YsA;get strokeWidth(){return this._strokeWidth??this.diameter/10}set strokeWidth(A){this._strokeWidth=A||0}_strokeWidth;_circleRadius(){return(this.diameter-bYA)/2}_viewBox(){let A=this._circleRadius()*2+this.strokeWidth;return`0 0 ${A} ${A}`}_strokeCircumference(){return 2*Math.PI*this._circleRadius()}_strokeDashOffset(){return this.mode==="determinate"?this._strokeCircumference()*(100-this._value)/100:null}_circleStrokeWidth(){return this.strokeWidth/this.diameter*100}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-progress-spinner"],["mat-spinner"]],viewQuery:function(i,n){if(i&1&&ai(DYA,5),i&2){let o;ce(o=Ce())&&(n._determinateCircle=o.first)}},hostAttrs:["role","progressbar","tabindex","-1",1,"mat-mdc-progress-spinner","mdc-circular-progress"],hostVars:18,hostBindings:function(i,n){i&2&&(ie("aria-valuemin",0)("aria-valuemax",100)("aria-valuenow",n.mode==="determinate"?n.value:null)("mode",n.mode),zo("mat-"+n.color),wn("width",n.diameter,"px")("height",n.diameter,"px")("--mat-progress-spinner-size",n.diameter+"px")("--mat-progress-spinner-active-indicator-width",n.diameter+"px"),ae("_mat-animation-noopable",n._noopAnimations)("mdc-circular-progress--indeterminate",n.mode==="indeterminate"))},inputs:{color:"color",mode:"mode",value:[2,"value","value",en],diameter:[2,"diameter","diameter",en],strokeWidth:[2,"strokeWidth","strokeWidth",en]},exportAs:["matProgressSpinner"],decls:14,vars:11,consts:[["circle",""],["determinateSpinner",""],["aria-hidden","true",1,"mdc-circular-progress__determinate-container"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__determinate-circle-graphic"],["cx","50%","cy","50%",1,"mdc-circular-progress__determinate-circle"],["aria-hidden","true",1,"mdc-circular-progress__indeterminate-container"],[1,"mdc-circular-progress__spinner-layer"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-left"],[3,"ngTemplateOutlet"],[1,"mdc-circular-progress__gap-patch"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-right"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__indeterminate-circle-graphic"],["cx","50%","cy","50%"]],template:function(i,n){if(i&1&&(vt(0,yYA,2,8,"ng-template",null,0,m2),m(2,"div",2,1),Qt(),m(4,"svg",3),GA(5,"circle",4),w()(),as(),m(6,"div",5)(7,"div",6)(8,"div",7),on(9,8),w(),m(10,"div",9),on(11,8),w(),m(12,"div",10),on(13,8),w()()()),i&2){let o=An(1);p(4),ie("viewBox",n._viewBox()),p(),wn("stroke-dasharray",n._strokeCircumference(),"px")("stroke-dashoffset",n._strokeDashOffset(),"px")("stroke-width",n._circleStrokeWidth(),"%"),ie("r",n._circleRadius()),p(4),AA("ngTemplateOutlet",o),p(2),AA("ngTemplateOutlet",o),p(2),AA("ngTemplateOutlet",o)}},dependencies:[al],styles:[`.mat-mdc-progress-spinner{--mat-progress-spinner-animation-multiplier: 1;display:block;overflow:hidden;line-height:0;position:relative;direction:ltr;transition:opacity 250ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-progress-spinner circle{stroke-width:var(--mat-progress-spinner-active-indicator-width, 4px)}.mat-mdc-progress-spinner._mat-animation-noopable,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__determinate-circle{transition:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__spinner-layer,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container{animation:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container circle{stroke-dasharray:0 !important}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle{stroke:currentColor;stroke:CanvasText}}.mat-progress-spinner-reduced-motion{--mat-progress-spinner-animation-multiplier: 1.25}.mdc-circular-progress__determinate-container,.mdc-circular-progress__indeterminate-circle-graphic,.mdc-circular-progress__indeterminate-container,.mdc-circular-progress__spinner-layer{position:absolute;width:100%;height:100%}.mdc-circular-progress__determinate-container{transform:rotate(-90deg)}.mdc-circular-progress--indeterminate .mdc-circular-progress__determinate-container{opacity:0}.mdc-circular-progress__indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{opacity:1;animation:mdc-circular-progress-container-rotate calc(1568.2352941176ms*var(--mat-progress-spinner-animation-multiplier)) linear infinite}.mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress__indeterminate-circle-graphic{fill:rgba(0,0,0,0)}.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:var(--mat-progress-spinner-active-indicator-color, var(--mat-sys-primary))}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:CanvasText}}.mdc-circular-progress__determinate-circle{transition:stroke-dashoffset 500ms cubic-bezier(0, 0, 0.2, 1)}.mdc-circular-progress__gap-patch{position:absolute;top:0;left:47.5%;box-sizing:border-box;width:5%;height:100%;overflow:hidden}.mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.mdc-circular-progress__circle-clipper .mdc-circular-progress__indeterminate-circle-graphic{width:200%}.mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{left:-100%}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-left-spin calc(1333ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-right-spin calc(1333ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress__circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.mdc-circular-progress--indeterminate .mdc-circular-progress__spinner-layer{animation:mdc-circular-progress-spinner-layer-rotate calc(5332ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}@keyframes mdc-circular-progress-container-rotate{to{transform:rotate(360deg)}}@keyframes mdc-circular-progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}100%{transform:rotate(1080deg)}}@keyframes mdc-circular-progress-left-spin{from{transform:rotate(265deg)}50%{transform:rotate(130deg)}to{transform:rotate(265deg)}}@keyframes mdc-circular-progress-right-spin{from{transform:rotate(-265deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-265deg)}} +`],encapsulation:2,changeDetection:0})}return t})();var TsA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();function v7(t){if(!t)return!1;if(t.name==="computer"){let i=t.args?.action,n=t.args?.coordinate;return["left_click","right_click","middle_click","double_click"].includes(i)&&Array.isArray(n)&&n.length===2}let e=["click_at","hover_at","type_text_at","scroll_at","drag_and_drop","mouse_move","scroll_document"].includes(t.name),A=t.args?.x!=null&&t.args?.y!=null||Array.isArray(t.args?.coordinate)&&t.args?.coordinate.length===2;return e&&A}function qh(t){return t?!!t.response?.image?.data:!1}var b7=class t{set json(e){this.formattedJson=this.syntaxHighlight(e)}formattedJson="";sanitizer=h(ds);syntaxHighlight(e){if(!e)return"";try{let A=JSON.parse(e);e=JSON.stringify(A,null,0)}catch{return this.sanitizer.bypassSecurityTrustHtml(this.escapeHtml(e))}return e=e.replace(/&/g,"&").replace(//g,">"),e=e.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,A=>{let i="json-number";return/^"/.test(A)?/:$/.test(A)?i="json-key":i="json-string":/true|false/.test(A)?i="json-boolean":/null/.test(A)&&(i="json-null"),''+A+""}),this.sanitizer.bypassSecurityTrustHtml(e)}escapeHtml(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-json-tooltip"]],inputs:{json:"json"},decls:1,vars:1,consts:[[3,"innerHTML"]],template:function(A,i){A&1&&Li(0,"div",0),A&2&&vo("innerHTML",i.formattedJson,ol)},styles:["[_nghost-%COMP%]{display:block;font-family:Courier New,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap;max-width:800px}"]})};var M7=class t{json="";overlayRef=null;overlay=h(t8);elementRef=h(ge);show(){if(!this.json)return;let e=this.overlay.position().flexibleConnectedTo(this.elementRef).withPositions([{originX:"center",originY:"top",overlayX:"center",overlayY:"bottom",offsetY:-8}]);this.overlayRef=this.overlay.create({positionStrategy:e,scrollStrategy:this.overlay.scrollStrategies.close(),panelClass:"json-tooltip-panel"});let A=new Ug(b7),i=this.overlayRef.attach(A);i.instance.json=this.json}hide(){this.overlayRef&&(this.overlayRef.dispose(),this.overlayRef=null)}ngOnDestroy(){this.hide()}static \u0275fac=function(A){return new(A||t)};static \u0275dir=OA({type:t,selectors:[["","appJsonTooltip",""]],hostBindings:function(A,i){A&1&&eA("mouseenter",function(){return i.show()})("mouseleave",function(){return i.hide()})},inputs:{json:[0,"appJsonTooltip","json"]}})};function kYA(t,e){if(t&1&&GA(0,"a2ui-surface",0),t&2){let A=v();AA("surfaceId",A.surfaceId())("surface",A.surface())}}var k7=class t{processor=h(JU);beginRendering=null;surfaceUpdate=null;dataModelUpdate=null;surfaceId=jA(null);activeSurface=jA(null);surface=Ke(()=>this.activeSurface());constructor(){}ngOnChanges(e){let A=[],i=null;e.beginRendering&&this.beginRendering&&Object.keys(this.beginRendering).length>0&&(A.push(this.beginRendering),i=this.beginRendering?.beginRendering?.surfaceId??i),e.surfaceUpdate&&this.surfaceUpdate&&Object.keys(this.surfaceUpdate).length>0&&(A.push(this.surfaceUpdate),i=this.surfaceUpdate?.surfaceUpdate?.surfaceId??i),e.dataModelUpdate&&this.dataModelUpdate&&Object.keys(this.dataModelUpdate).length>0&&(A.push(this.dataModelUpdate),i=this.dataModelUpdate?.dataModelUpdate?.surfaceId??i),A.length>0&&this.processor.processMessages(A),i&&this.surfaceId.set(i);let n=this.surfaceId();if(n){let o=this.processor.getSurfaces();o.has(n)&&this.activeSurface.set(o.get(n))}}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-a2ui-canvas"]],inputs:{beginRendering:"beginRendering",surfaceUpdate:"surfaceUpdate",dataModelUpdate:"dataModelUpdate"},features:[ti],decls:1,vars:1,consts:[[3,"surfaceId","surface"]],template:function(A,i){A&1&&V(0,kYA,1,2,"a2ui-surface",0),A&2&&W(i.surface()?0:-1)},dependencies:[fa,HU],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;overflow:auto}[_nghost-%COMP%] *{box-sizing:border-box}.canvas[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;padding:16px;box-sizing:border-box;min-height:100%}"],changeDetection:0})};function SYA(t,e){if(t&1&&K(0),t&2){let A=v(3);_e(" (",A.functionCall.args.action,") ")}}function xYA(t,e){if(t&1&&(m(0,"span",5),K(1),w()),t&2){v();let A=Ws(5);AA("matTooltip",A.isVirtual?"Virtual (1000x1000)":"Hardware Mapping"),p(),fU(" [@ ",A.x,"",A.isVirtual?"v":"px",", ",A.y,"",A.isVirtual?"v":"px","] ")}}function RYA(t,e){if(t&1){let A=JA();m(0,"div",2),eA("click",function(){Z(A);let n=v(2);return X(n.clickEvent.emit(n.index))}),m(1,"div",3)(2,"span",4),K(3),V(4,SYA,1,1),Ur(5),V(6,xYA,2,5,"span",5),w()(),m(7,"div",6)(8,"img",7),eA("load",function(n){Z(A);let o=v(2);return X(o.onImageLoad(n))}),w(),GA(9,"div",8),w()()}if(t&2){v();let A=Ws(0),i=v();p(3),_e(" ",i.functionCall.name," "),p(),W(i.functionCall.args&&i.functionCall.args.action?4:-1),p();let n=_g(i.getActualPixelCoordinates());p(),W(n?6:-1),p(2),AA("src",A,Ga),p(),AA("ngStyle",i.getClickBoxStyle())}}function NYA(t,e){if(t&1&&(Ur(0),V(1,RYA,10,6,"div",1)),t&2){let A=_g(v().getPreviousComputerUseScreenshot());p(),W(A?1:-1)}}function FYA(t,e){if(t&1){let A=JA();m(0,"div",9),eA("click",function(){Z(A);let n=v();return X(n.clickEvent.emit(n.index))}),m(1,"div",3)(2,"span",4),K(3),w()(),GA(4,"img",10),m(5,"div",11)(6,"mat-icon",12),K(7,"computer"),w(),m(8,"span",13),K(9),w()()()}if(t&2){let A=v();p(3),qA(A.functionResponse.name),p(),AA("src",A.getComputerUseScreenshot(),Ga),p(5),qA(A.getComputerUseUrl())}}var S7=class t{functionCall;functionResponse;allMessages=[];index=0;clickEvent=new WA;imageDimensions=new Map;VIRTUAL_WIDTH=1e3;VIRTUAL_HEIGHT=1e3;isComputerUseResponse(){return!!this.functionResponse&&qh(this.functionResponse)}isComputerUseClick(){return!!this.functionCall&&v7(this.functionCall)}getComputerUseScreenshot(){return this.getScreenshotFromPayload(this.functionResponse?.response)}getComputerUseUrl(){return this.isComputerUseResponse()&&(this.functionResponse?.response).url||""}getPreviousComputerUseScreenshot(){for(let e=this.index-1;e>=0;e--){let A=this.allMessages[e];if(this.isMsgComputerUseResponse(A)&&A.functionResponses&&A.functionResponses.length>0)for(let i=A.functionResponses.length-1;i>=0;i--){let n=A.functionResponses[i];if(qh(n)){let o=n.response;return this.getScreenshotFromPayload(o)}}}return""}getClickCoordinates(){if(!this.isComputerUseClick())return null;let e=this.functionCall.args;return e?e.coordinate?{x:Number(e.coordinate[0]),y:Number(e.coordinate[1])}:e.x!=null&&e.y!=null?{x:Number(e.x),y:Number(e.y)}:null:null}getActualPixelCoordinates(){let e=this.getClickCoordinates();if(!e)return null;let A=this.imageDimensions.get(this.index);return A?{x:Math.round(e.x/this.VIRTUAL_WIDTH*A.width),y:Math.round(e.y/this.VIRTUAL_HEIGHT*A.height),isVirtual:!1}:be(gA({},e),{isVirtual:!0})}getClickBoxStyle(){let e=this.getClickCoordinates();if(!e)return{display:"none"};let A=e.x/this.VIRTUAL_WIDTH*100,i=e.y/this.VIRTUAL_HEIGHT*100;return{left:`${A}%`,top:`${i}%`}}onImageLoad(e){let A=e.target;A.naturalWidth&&A.naturalHeight&&this.imageDimensions.set(this.index,{width:A.naturalWidth,height:A.naturalHeight})}isMsgComputerUseResponse(e){return e.functionResponses&&e.functionResponses.length>0?e.functionResponses.some(A=>qh(A)):!1}getScreenshotFromPayload(e){let A=e?.image;if(!A?.data)return"";let i=A.data;return i.startsWith("data:")?i:`data:${A.mimetype||"image/png"};base64,${i}`}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-computer-action"]],inputs:{functionCall:"functionCall",functionResponse:"functionResponse",allMessages:"allMessages",index:"index"},outputs:{clickEvent:"clickEvent"},decls:2,vars:1,consts:[[1,"computer-use-container"],[1,"computer-use-container","click-visualization-container"],[1,"computer-use-container","click-visualization-container",3,"click"],[1,"computer-use-header"],[1,"computer-use-tool-name"],[1,"actual-pixels",3,"matTooltip"],[1,"image-wrapper"],["alt","Computer Use Screenshot",1,"computer-use-screenshot",3,"load","src"],[1,"click-overlay-box",3,"ngStyle"],[1,"computer-use-container",3,"click"],["alt","Computer Use Screenshot",1,"computer-use-screenshot",3,"src"],[1,"computer-use-footprint"],[1,"computer-icon"],[1,"url-text"]],template:function(A,i){A&1&&V(0,NYA,2,2)(1,FYA,10,3,"div",0),A&2&&W(i.isComputerUseClick()?0:i.isComputerUseResponse()?1:-1)},dependencies:[fa,Cp,cl,fn,U2,Sa],styles:['[_nghost-%COMP%]{display:block}.computer-use-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;max-width:600px;border-radius:12px;border:1px solid var(--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color);overflow:hidden;cursor:pointer;margin:5px 5px 10px;background-color:var(--chat-panel-bot-message-message-card-background-color);transition:opacity .2s}.computer-use-container[_ngcontent-%COMP%]:hover{opacity:.9}.computer-use-tool-name[_ngcontent-%COMP%]{font-size:12px;font-family:monospace;font-weight:600;color:var(--chat-panel-input-field-textarea-color);opacity:.9;padding:12px}.computer-use-tool-name[_ngcontent-%COMP%] .actual-pixels[_ngcontent-%COMP%]{opacity:.6;margin-left:8px;font-weight:400}.computer-use-screenshot[_ngcontent-%COMP%]{width:100%;height:auto;display:block;border-bottom:1px solid var(--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color)}.computer-use-footprint[_ngcontent-%COMP%]{display:flex;align-items:center;padding:8px 12px;gap:8px;background-color:var(--chat-panel-thought-chip-background-color)}.computer-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;flex-shrink:0}.url-text[_ngcontent-%COMP%]{font-size:11px;font-family:monospace;white-space:normal;word-break:break-all;color:var(--chat-panel-input-field-textarea-color);opacity:.8;min-width:0}.image-wrapper[_ngcontent-%COMP%]{position:relative;width:100%}.click-overlay-box[_ngcontent-%COMP%]{position:absolute;width:24px;height:24px;border:1px solid rgba(255,255,255,.8);border-radius:50%;transform:translate(-50%,-50%);background-color:#ff00004d;box-shadow:0 0 4px #00000080;pointer-events:none;z-index:10;display:flex;align-items:center;justify-content:center}.click-overlay-box[_ngcontent-%COMP%]:before{content:"";width:2px;height:2px;background-color:red;border-radius:50%;box-shadow:0 0 2px #fff;z-index:11}.click-overlay-box[_ngcontent-%COMP%]:after{content:"";position:absolute;width:100%;height:100%;background:linear-gradient(to right,transparent 48%,rgba(255,255,255,.6) 48%,rgba(255,255,255,.6) 52%,transparent 52%),linear-gradient(to bottom,transparent 48%,rgba(255,255,255,.6) 48%,rgba(255,255,255,.6) 52%,transparent 52%);border-radius:50%}']})};function _YA(t,e){t&1&&(m(0,"div",1)(1,"mat-icon"),K(2,"check_circle"),w(),m(3,"span"),K(4,"Response sent"),w()())}function LYA(t,e){t&1&&(m(0,"div",2)(1,"mat-icon"),K(2,"hourglass_empty"),w(),m(3,"span"),K(4,"Sending..."),w()())}function GYA(t,e){if(t&1){let A=JA();m(0,"div",3)(1,"mat-icon",4),K(2,"rate_review"),w(),m(3,"input",5),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.functionCall.userResponse,n)||(o.functionCall.userResponse=n),X(n)}),eA("keydown.enter",function(){Z(A);let n=v();return X(n.onSend())}),w(),m(4,"button",6),eA("click",function(){Z(A);let n=v();return X(n.onSend())}),m(5,"mat-icon"),K(6,"send"),w()()()}if(t&2){let A=v();p(3),Qo("ngModel",A.functionCall.userResponse),p(),AA("disabled",!A.functionCall.userResponse)}}var x7=class t{functionCall;appName;userId;sessionId;responseComplete=new WA;agentService=h(sg);cdr=h(mt);responseChunks=[];onSend(){if(!this.functionCall.userResponse||!this.functionCall.userResponse.trim())return;this.functionCall.responseStatus="sending",this.cdr.detectChanges();let e={appName:this.appName,userId:this.userId,sessionId:this.sessionId,newMessage:{role:"user",parts:[{functionResponse:{id:this.functionCall.id,name:this.functionCall.name,response:{response:this.functionCall.userResponse}}}]},functionCallEventId:this.functionCall.functionCallEventId};this.responseChunks=[],this.agentService.runSse(e).subscribe({next:A=>nt(this,null,function*(){this.responseChunks.push(A)}),error:A=>{console.error("SSE error:",A),this.functionCall.responseStatus="pending",this.responseChunks=[],this.cdr.detectChanges()},complete:()=>{console.log("Long-running response complete for:",this.functionCall.name),this.functionCall.responseStatus="sent",this.responseComplete.emit(this.responseChunks),this.cdr.detectChanges()}})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-long-running-response"]],inputs:{functionCall:"functionCall",appName:"appName",userId:"userId",sessionId:"sessionId"},outputs:{responseComplete:"responseComplete"},decls:4,vars:1,consts:[[1,"response-chip-container",3,"click"],[1,"status-chip","sent"],[1,"status-chip","sending"],[1,"input-chip"],[1,"input-icon"],["placeholder","Enter response...",1,"response-input",3,"ngModelChange","keydown.enter","ngModel"],["mat-icon-button","",1,"send-icon-btn",3,"click","disabled"]],template:function(A,i){A&1&&(m(0,"div",0),eA("click",function(o){return o.stopPropagation()}),V(1,_YA,5,0,"div",1)(2,LYA,5,0,"div",2)(3,GYA,7,2,"div",3),w()),A&2&&(p(),W(i.functionCall.responseStatus==="sent"?1:i.functionCall.responseStatus==="sending"?2:3))},dependencies:[Nn,uo,fo,ba,Ma,fn],styles:[".response-chip-container[_ngcontent-%COMP%]{display:inline-block;margin:5px}.input-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--mat-standard-button-toggle-divider-color);border-radius:16px;padding:0 4px 0 12px;background-color:var(--chat-panel-function-event-button-background-color);height:30px;box-sizing:border-box;max-width:300px}.input-chip[_ngcontent-%COMP%] .input-icon[_ngcontent-%COMP%]{color:var(--long-running-response-icon-color);font-size:18px;width:18px;height:18px}.input-chip[_ngcontent-%COMP%] .response-input[_ngcontent-%COMP%]{border:none;outline:none;background:transparent;font-size:13px;flex:1;min-width:120px;padding:0;color:var(--long-running-response-input-text-color);caret-color:var(--long-running-response-input-caret-color)}.input-chip[_ngcontent-%COMP%] .response-input[_ngcontent-%COMP%]::placeholder{color:var(--long-running-response-input-placeholder-color)}.input-chip[_ngcontent-%COMP%] .send-icon-btn[_ngcontent-%COMP%]{width:24px;height:24px;padding:0;min-width:unset;color:var(--long-running-response-send-button-color)}.input-chip[_ngcontent-%COMP%] .send-icon-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.status-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;border-radius:16px;padding:0 12px;font-size:13px;font-weight:500;height:32px;box-sizing:border-box;border:1px solid;line-height:32px}.status-chip[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.status-chip.sending[_ngcontent-%COMP%]{background-color:#2196f31a;border-color:#2196f34d;color:#2196f3}.status-chip.sent[_ngcontent-%COMP%]{background-color:#4caf501a;border-color:#4caf504d;color:#4caf50}"]})};var R7=new yA("FeedbackService");var KYA={goodResponseTooltip:"Good response",badResponseTooltip:"Bad response",feedbackAdditionalLabel:"Additional feedback (Optional)",feedbackCommentPlaceholderDown:"Share what could be improved in the response",feedbackCommentPlaceholderUp:"Share what you liked about the response",feedbackCancelButton:"Cancel",feedbackSubmitButton:"Submit",feedbackDialogTitle:"Reasons for feedback (Select all that apply)",feedbackReasonHallucination:"Hallucinated libraries / APIs etc",feedbackReasonIncomplete:"Incomplete answer",feedbackReasonFollowup:"Didn't understand followup",feedbackReasonFactual:"Factual errors",feedbackReasonLinks:"Broken/incorrect links",feedbackReasonIrrelevant:"Irrelevant information",feedbackReasonRepetitive:"Repetitive",feedbackReasonAccurate:"Accurate info",feedbackReasonHelpful:"Helpful",feedbackReasonConcise:"Concise",feedbackReasonUnderstanding:"Good understanding",feedbackReasonClear:"Clear and easy to follow"},HsA=new yA("Message Feedback Messages",{factory:()=>KYA});function UYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_up_filled"),w())}function JYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_up"),w())}function YYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_down_filled"),w())}function TYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_down"),w())}function HYA(t,e){if(t&1&&(m(0,"mat-chip-option",7),K(1),w()),t&2){let A=e.$implicit;AA("value",A),p(),_e(" ",A," ")}}function zYA(t,e){if(t&1){let A=JA();m(0,"div",4)(1,"div",5)(2,"h3"),K(3),w(),m(4,"mat-chip-listbox",6),Ut(5,HYA,2,2,"mat-chip-option",7,_i),w()(),m(7,"div",8)(8,"h3"),K(9),w(),m(10,"mat-form-field",9)(11,"textarea",10),K(12," "),w()()(),m(13,"div",11)(14,"button",12),eA("click",function(){Z(A);let n=v();return X(n.onDetailedFeedbackCancelled())}),K(15),w(),m(16,"button",13),eA("click",function(){Z(A);let n=v();return X(n.onDetailedFeedbackSubmitted())}),K(17),w()()()}if(t&2){let A=v();p(3),qA(A.i18n.feedbackDialogTitle),p(),AA("formControl",A.selectedReasons),p(),Jt(A.reasons()),p(4),qA(A.i18n.feedbackAdditionalLabel),p(2),AA("formControl",A.comment)("placeholder",A.feedbackPlaceholder()),p(4),_e(" ",A.i18n.feedbackCancelButton," "),p(2),_e(" ",A.i18n.feedbackSubmitButton," ")}}var N7=class t{sessionName=at.required();eventId=at.required();i18n=h(HsA);feedbackService=h(R7);existingFeedback=c6({params:()=>({sessionName:this.sessionName(),eventId:this.eventId()}),stream:({params:e})=>this.feedbackService.getFeedback(e.sessionName,e.eventId)});selectedFeedbackDirection=jA(void 0);feedbackDirection=Ke(()=>this.selectedFeedbackDirection()??this.existingFeedback.value()?.direction);isDetailedFeedbackVisible=jA(!1);feedbackPlaceholder=Ke(()=>this.feedbackDirection()==="up"?this.i18n.feedbackCommentPlaceholderUp:this.i18n.feedbackCommentPlaceholderDown);positiveReasonsResource=c6({stream:()=>this.feedbackService.getPositiveFeedbackReasons()});negativeReasonsResource=c6({stream:()=>this.feedbackService.getNegativeFeedbackReasons()});reasons=Ke(()=>this.feedbackDirection()==="up"?this.positiveReasonsResource.value():this.negativeReasonsResource.value());selectedReasons=new Ss([]);comment=new Ss("");isLoading=jA(!1);sendFeedback(e){this.feedbackDirection()===e?(this.isLoading.set(!0),this.feedbackService.deleteFeedback(this.sessionName(),this.eventId()).subscribe(()=>{this.isLoading.set(!1),this.selectedFeedbackDirection.set(void 0),this.resetDetailedFeedback()})):(this.selectedReasons.reset(),this.isLoading.set(!0),this.feedbackService.sendFeedback(this.sessionName(),this.eventId(),{direction:e}).subscribe(()=>{this.isLoading.set(!1),this.isDetailedFeedbackVisible.set(!0),this.selectedFeedbackDirection.set(e)}))}onDetailedFeedbackSubmitted(){let e=this.feedbackDirection();e&&(this.isLoading.set(!0),this.feedbackService.sendFeedback(this.sessionName(),this.eventId(),{direction:e,reasons:this.selectedReasons.value??[],comment:this.comment.value??void 0}).subscribe(()=>{this.isLoading.set(!1),this.resetDetailedFeedback()}))}onDetailedFeedbackCancelled(){this.selectedFeedbackDirection.set(void 0),this.resetDetailedFeedback()}resetDetailedFeedback(){this.isDetailedFeedbackVisible.set(!1),this.comment.reset(),this.selectedReasons.reset([])}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-message-feedback"]],inputs:{sessionName:[1,"sessionName"],eventId:[1,"eventId"]},decls:9,vars:7,consts:[[1,"message-feedback-container"],[1,"feedback-buttons"],["mat-icon-button","",3,"click","matTooltip","disabled"],["class","feedback-details-container",4,"ngIf"],[1,"feedback-details-container"],[1,"reasons-chips"],["multiple","",3,"formControl"],[3,"value"],[1,"additional-feedback"],["appearance","outline"],["matInput","",3,"formControl","placeholder"],[1,"actions"],["mat-stroked-button","",3,"click"],["mat-flat-button","","color","primary",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"div",1)(2,"button",2),eA("click",function(){return i.sendFeedback("up")}),V(3,UYA,2,0,"mat-icon")(4,JYA,2,0,"mat-icon"),w(),m(5,"button",2),eA("click",function(){return i.sendFeedback("down")}),V(6,YYA,2,0,"mat-icon")(7,TYA,2,0,"mat-icon"),w()(),vt(8,zYA,18,7,"div",3),w()),A&2&&(p(2),AA("matTooltip",i.i18n.goodResponseTooltip)("disabled",i.isLoading()),p(),W(i.feedbackDirection()==="up"?3:4),p(2),AA("matTooltip",i.i18n.badResponseTooltip)("disabled",i.isLoading()),p(),W(i.feedbackDirection()==="down"?6:7),p(2),AA("ngIf",i.isDetailedFeedbackVisible()))},dependencies:[fa,o0,r0,uo,fo,v1,Fs,Fn,Ma,Rv,yG,wG,Yr,ta,cl,fn,rl,Ka,U2,Sa],styles:[".message-feedback-container[_ngcontent-%COMP%]{display:block}.feedback-buttons[_ngcontent-%COMP%]{--mat-icon-button-touch-target-size: 32px;--button-size: 32px;--icon-size: 12px;margin-left:96px;display:flex}.feedback-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:var(--button-size);height:var(--button-size);transition:all .2s ease}.feedback-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:var(--icon-size);height:var(--icon-size);width:var(--icon-size);transition:all .2s ease}.feedback-buttons[_ngcontent-%COMP%] button.selected[_ngcontent-%COMP%]{background-color:var(--side-panel-button-filled-container-color, var(--mat-sys-primary));color:var(--side-panel-button-filled-label-text-color, white)}.feedback-buttons[_ngcontent-%COMP%] button.selected[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:inherit}.reasons-chips[_ngcontent-%COMP%]{margin-bottom:20px}.feedback-details-container[_ngcontent-%COMP%]{margin-left:54px;max-width:500px;padding:16px;background-color:var(--builder-card-background-color);border-radius:8px;margin-top:8px;border:1px solid var(--builder-border-color)}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-weight:500;margin-bottom:8px;margin-top:0;color:var(--builder-text-secondary-color)}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{min-height:60px;resize:vertical}.feedback-details-container[_ngcontent-%COMP%] .actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.feedback-details-container[_ngcontent-%COMP%] .actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{border-radius:18px;padding:0 16px;height:32px;line-height:32px;font-weight:500}"]})};var OYA={cancelEditingTooltip:"Cancel editing",saveEvalMessageTooltip:"Save eval case message",thoughtChipLabel:"Thought",outcomeLabel:"Outcome",outputLabel:"Output",actualToolUsesLabel:"Actual tool uses:",expectedToolUsesLabel:"Expected tool uses:",actualResponseLabel:"Actual response:",expectedResponseLabel:"Expected response:",matchScoreLabel:"Match score",thresholdLabel:"Threshold",evalPassLabel:"Pass",evalFailLabel:"Fail",editEvalMessageTooltip:"Edit eval case message",deleteEvalMessageTooltip:"Delete eval case message",editFunctionArgsTooltip:"Edit function arguments",typeMessagePlaceholder:"Type a Message...",uploadFileTooltip:"Upload local file",moreOptionsTooltip:"More options",updateStateMenuLabel:"Update state",updateStateMenuTooltip:"Update the session state",turnOffMicTooltip:"Turn off microphone",useMicTooltip:"Use microphone",turnOffCamTooltip:"Turn off camera",useCamTooltip:"Use camera",updatedSessionStateChipLabel:"Updated session state"},zsA=new yA("Chat Panel Messages",{factory:()=>OYA});var PYA=["videoContainer"],jYA=["autoScroll"],qYA=["messageTextarea"],VYA=t=>({selected:t}),WYA=(t,e)=>({"user-message":t,"bot-message":e}),ZYA=(t,e)=>({"eval-pass":t,"eval-fail":e}),XYA=t=>({hidden:t}),$YA=(t,e)=>({"eval-fail":t,"message-card--highlighted":e}),ATA=(t,e)=>({text:t,thought:e}),F7=t=>({"function-event-button-highlight":t}),rK=t=>({hidden:t});function eTA(t,e){t&1&&(m(0,"div",8),GA(1,"mat-progress-bar",10),w())}function tTA(t,e){if(t&1&&(m(0,"div",22),K(1),w()),t&2){let A=v(2).$index,i=v(2);p(),_e(" #",i.getOverallEventNumber(A)," ")}}function iTA(t,e){t&1&&GA(0,"div",23)}function nTA(t,e){if(t&1&&(m(0,"div",12),V(1,tTA,2,1,"div",22)(2,iTA,1,0,"div",23),w()),t&2){let A=v().$index,i=v(2);p(),W(i.isFirstUserMessageInGroup(A)?1:2)}}function oTA(t,e){if(t&1&&(m(0,"div",22),K(1),w()),t&2){let A=v(2).$index,i=v(2);p(),_e(" #",i.getOverallEventNumber(A)," ")}}function aTA(t,e){t&1&&GA(0,"div",23)}function rTA(t,e){if(t&1&&(m(0,"div",14),V(1,oTA,2,1,"div",22)(2,aTA,1,0,"div",23),w()),t&2){let A=v().$index,i=v(2);p(),W(i.isFirstMessageInEventGroup(A)?1:2)}}function sTA(t,e){if(t&1&&(m(0,"button",24)(1,"mat-icon",25),K(2,"robot_2"),w()()),t&2){let A=v(),i=A.$implicit,n=A.$index,o=v(2);zo(o.customIconColorClass(n)),AA("disabled",!i.eventId)("matTooltip",o.getAgentNameFromEvent(n))("ngClass",ss(5,XYA,!o.getAgentNameFromEvent(n)))}}function gTA(t,e){t&1&&GA(0,"mat-progress-bar",26)}function lTA(t,e){if(t&1&&GA(0,"img",32),t&2){let A=v().$implicit;AA("src",A.url,Ga)}}function cTA(t,e){if(t&1&&(m(0,"a",33),K(1),w()),t&2){let A=v(2).$implicit;AA("href",A.url,Ga),p(),qA(A.file.name)}}function CTA(t,e){if(t&1&&K(0),t&2){let A=v(2).$implicit;_e(" ",A.file.name," ")}}function ITA(t,e){if(t&1&&(m(0,"mat-icon"),K(1,"insert_drive_file"),w(),V(2,cTA,2,2,"a",33)(3,CTA,1,1)),t&2){let A=v().$implicit;p(2),W(A.url?2:3)}}function dTA(t,e){if(t&1&&(m(0,"div",31),V(1,lTA,1,1,"img",32),V(2,ITA,4,1),w()),t&2){let A=e.$implicit;p(),W(A.file.type.startsWith("image/")?1:-1),p(),W(A.file.type.startsWith("image/")?-1:2)}}function BTA(t,e){if(t&1&&(m(0,"div",27),Ut(1,dTA,3,2,"div",31,_i),w()),t&2){let A=v(2).$implicit;p(),Jt(A.attachments)}}function ETA(t,e){if(t&1&&(m(0,"div",28),K(1),w()),t&2){let A=v(4);p(),qA(A.i18n.thoughtChipLabel)}}function QTA(t,e){if(t&1){let A=JA();m(0,"div",34)(1,"textarea",36,2),eA("ngModelChange",function(n){Z(A);let o=v(5);return X(o.userEditEvalCaseMessageChange.emit(n))})("keydown",function(n){Z(A);let o=v(3).$implicit,a=v(2);return X(a.handleKeydown.emit({event:n,message:o}))}),w(),m(3,"div",37)(4,"span",38),eA("click",function(){Z(A);let n=v(3).$implicit,o=v(2);return X(o.cancelEditMessage.emit(n))}),K(5," close "),w(),m(6,"span",39),eA("click",function(){Z(A);let n=v(3).$implicit,o=v(2);return X(o.saveEditMessage.emit(n))}),K(7," check "),w()()()}if(t&2){let A=v(5);p(),AA("ngModel",A.userEditEvalCaseMessage),p(3),AA("matTooltip",A.i18n.cancelEditingTooltip),p(2),AA("matTooltip",A.i18n.saveEvalMessageTooltip)}}function hTA(t,e){if(t&1&&on(0,35),t&2){let A=v(3).$implicit,i=v(2);AA("ngComponentOutlet",i.markdownComponent)("ngComponentOutletInputs",Vl(2,ATA,A.text,A.thought))}}function uTA(t,e){if(t&1&&V(0,QTA,8,3,"div",34)(1,hTA,1,5,"ng-container",35),t&2){let A=v(2).$implicit;W(A.isEditing?0:1)}}function fTA(t,e){if(t&1&&(m(0,"div"),GA(1,"div",40),w()),t&2){let A=v(2).$implicit,i=v(2);p(),AA("innerHTML",i.renderGooglerSearch(A.renderedContent),ol)}}function mTA(t,e){if(t&1&&GA(0,"app-a2ui-canvas",29),t&2){let A=v(2).$implicit;AA("beginRendering",A.a2uiData.beginRendering)("surfaceUpdate",A.a2uiData.surfaceUpdate)("dataModelUpdate",A.a2uiData.dataModelUpdate)}}function pTA(t,e){if(t&1&&(m(0,"code"),K(1),w()),t&2){let A=v(2).$implicit;p(),_e(" ",A.executableCode.code," ")}}function wTA(t,e){if(t&1&&(m(0,"div")(1,"div"),K(2),w(),m(3,"div"),K(4),w()()),t&2){let A=v(2).$implicit,i=v(2);p(2),i0("",i.i18n.outcomeLabel,": ",A.codeExecutionResult.outcome),p(2),i0("",i.i18n.outputLabel,": ",A.codeExecutionResult.output)}}function DTA(t,e){if(t&1){let A=JA();m(0,"div",41)(1,"img",42),eA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openViewImageDialog.emit(n.inlineData.data))}),w()()}if(t&2){let A=v(4).$implicit;p(),AA("src",A.inlineData.data,Ga)}}function yTA(t,e){if(t&1&&(m(0,"div"),GA(1,"app-audio-player",43),w()),t&2){let A=v(4).$implicit;p(),AA("base64data",A.inlineData.data)}}function vTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",44)(2,"mat-icon"),K(3,"description"),w(),m(4,"button",45),eA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openBase64InNewTab.emit({data:n.inlineData.data,mimeType:n.inlineData.mimeType}))}),K(5),w()()()}if(t&2){let A=v(4).$implicit;p(5),_e(" ",A.inlineData.name," ")}}function bTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"button",45),eA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openBase64InNewTab.emit({data:n.inlineData.data,mimeType:n.inlineData.mimeType}))}),K(2),w()()}if(t&2){let A=v(4).$implicit;p(2),_e(" ",A.inlineData.name," ")}}function MTA(t,e){if(t&1&&(m(0,"div")(1,"div"),V(2,DTA,2,1,"div",41)(3,yTA,2,1,"div")(4,vTA,6,1,"div")(5,bTA,3,1,"div"),w()()),t&2){let A,i=v(3).$implicit,n=v(2);p(2),W((A=i.inlineData.mediaType)===n.MediaType.IMAGE?2:A===n.MediaType.AUDIO?3:A===n.MediaType.TEXT?4:5)}}function kTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"img",46),eA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openViewImageDialog.emit(n.inlineData.data))}),w()()}if(t&2){let A=v(4).$implicit;p(),AA("src",A.inlineData.data,Ga)}}function STA(t,e){if(t&1&&(m(0,"div",31)(1,"mat-icon"),K(2,"insert_drive_file"),w(),m(3,"a",33),K(4),w()()),t&2){let A=v(4).$implicit;p(3),AA("href",A.inlineData.data,Ga),p(),qA(A.inlineData.displayName)}}function xTA(t,e){if(t&1&&(m(0,"div"),V(1,kTA,2,1,"div")(2,STA,5,2,"div",31),w()),t&2){let A=v(3).$implicit;p(),W(A.inlineData.mimeType.startsWith("image/")?1:2)}}function RTA(t,e){if(t&1&&V(0,MTA,6,1,"div")(1,xTA,3,1,"div"),t&2){let A=v(2).$implicit;W(A.role==="bot"?0:1)}}function NTA(t,e){if(t&1&&(m(0,"div",49)(1,"div",50),K(2),w(),GA(3,"ngx-json-viewer",51),w(),m(4,"div",52)(5,"div",53),K(6),w(),GA(7,"ngx-json-viewer",51),w()),t&2){let A=v(3).$implicit,i=v(2);p(2),qA(i.i18n.actualToolUsesLabel),p(),AA("json",A.actualInvocationToolUses),p(3),qA(i.i18n.expectedToolUsesLabel),p(),AA("json",A.expectedInvocationToolUses)}}function FTA(t,e){if(t&1&&(m(0,"div",49)(1,"div",50),K(2),w(),m(3,"div"),K(4),w()(),m(5,"div",52)(6,"div",53),K(7),w(),m(8,"div"),K(9),w()()),t&2){let A=v(3).$implicit,i=v(2);p(2),qA(i.i18n.actualResponseLabel),p(2),qA(A.actualFinalResponse),p(3),qA(i.i18n.expectedResponseLabel),p(2),qA(A.expectedFinalResponse)}}function _TA(t,e){if(t&1&&(m(0,"div",48)(1,"span",54),K(2),w(),m(3,"span",55),K(4),w()()),t&2){let A=v(3).$implicit,i=v(2);p(2),i0("",i.i18n.matchScoreLabel,": ",A.evalScore),p(2),i0("",i.i18n.thresholdLabel,": ",A.evalThreshold)}}function LTA(t,e){if(t&1&&(m(0,"div",30)(1,"div",47),V(2,NTA,8,4)(3,FTA,10,4),w(),V(4,_TA,5,4,"div",48),w()),t&2){let A=v(2).$implicit;p(2),W(A.actualInvocationToolUses?2:A.actualFinalResponse?3:-1),p(2),W(A.evalScore!==void 0&&A.evalThreshold!==void 0?4:-1)}}function GTA(t,e){if(t&1&&(m(0,"mat-card",16),V(1,gTA,1,0,"mat-progress-bar",26),V(2,BTA,3,0,"div",27),m(3,"div"),V(4,ETA,2,1,"div",28),m(5,"div"),V(6,uTA,2,1),w(),V(7,fTA,2,1,"div"),V(8,mTA,1,3,"app-a2ui-canvas",29),w(),V(9,pTA,2,1,"code"),V(10,wTA,5,4,"div"),V(11,RTA,2,1),V(12,LTA,5,2,"div",30),w()),t&2){let A=v(),i=A.$implicit,n=A.$index,o=v(2);AA("ngClass",Vl(11,$YA,i.evalStatus===2,o.shouldMessageHighlighted(n))),p(),W(i.isLoading?1:-1),p(),W(i.attachments?2:-1),p(2),W(i.thought?4:-1),p(2),W(i.text?6:-1),p(),W(i.renderedContent?7:-1),p(),W(i.a2uiData?8:-1),p(),W(i.executableCode?9:-1),p(),W(i.codeExecutionResult?10:-1),p(),W(i.inlineData?11:-1),p(),W(i.failedMetric&&i.evalStatus===2?12:-1)}}function KTA(t,e){if(t&1){let A=JA();m(0,"app-computer-action",59),eA("clickEvent",function(n){Z(A);let o=v(5);return X(o.clickEvent.emit(n))}),w()}if(t&2){let A=v().$implicit,i=v(2).$index,n=v(2);AA("functionCall",A)("allMessages",n.messages)("index",i)}}function UTA(t,e){if(t&1&&(m(0,"button",57)(1,"mat-icon"),K(2,"bolt"),w(),K(3),w()),t&2){let A=v().$implicit,i=v(2).$index,n=v(2);AA("ngClass",ss(3,F7,n.shouldMessageHighlighted(i)))("appJsonTooltip",A.args?n.JSON.stringify(A.args):""),p(3),_e(" ",A.name," ")}}function JTA(t,e){if(t&1){let A=JA();m(0,"app-long-running-response",60),eA("responseComplete",function(n){Z(A);let o=v(5);return X(o.longRunningResponseComplete.emit(n))}),w()}if(t&2){let A=v().$implicit,i=v(4);AA("functionCall",A)("appName",i.appName)("userId",i.userId)("sessionId",i.sessionId)}}function YTA(t,e){if(t&1&&(V(0,KTA,1,3,"app-computer-action",56)(1,UTA,4,5,"button",57),V(2,JTA,1,4,"app-long-running-response",58)),t&2){let A=e.$implicit,i=v(4);W(i.isComputerUseClick(A)?0:1),p(2),W(A.needsResponse?2:-1)}}function TTA(t,e){if(t&1&&Ut(0,YTA,3,2,null,null,_i),t&2){let A=v().$implicit;Jt(A.functionCalls)}}function HTA(t,e){if(t&1){let A=JA();m(0,"app-computer-action",62),eA("clickEvent",function(n){Z(A);let o=v(5);return X(o.clickEvent.emit(n))}),w()}if(t&2){let A=v().$implicit,i=v(2).$index,n=v(2);AA("functionResponse",A)("allMessages",n.messages)("index",i)}}function zTA(t,e){if(t&1&&(m(0,"button",57)(1,"mat-icon"),K(2,"check"),w(),K(3),w()),t&2){let A=v().$implicit,i=v(2).$index,n=v(2);AA("ngClass",ss(3,F7,n.shouldMessageHighlighted(i)))("appJsonTooltip",A.response?n.JSON.stringify(A.response):""),p(3),_e(" ",A.name," ")}}function OTA(t,e){if(t&1&&V(0,HTA,1,3,"app-computer-action",61)(1,zTA,4,5,"button",57),t&2){let A=e.$implicit,i=v(4);W(i.isComputerUseResponse(A)?0:1)}}function PTA(t,e){if(t&1&&Ut(0,OTA,2,1,null,null,_i),t&2){let A=v().$implicit;Jt(A.functionResponses)}}function jTA(t,e){if(t&1&&(m(0,"button",17)(1,"mat-icon"),K(2,"data_object"),w(),K(3," State "),w()),t&2){let A=v().$index,i=v(2);AA("ngClass",ss(2,F7,i.shouldMessageHighlighted(A)))("appJsonTooltip",i.getStateDeltaTooltip(A))}}function qTA(t,e){if(t&1&&(m(0,"button",18)(1,"mat-icon"),K(2,"attachment"),w(),K(3," Artifact "),w()),t&2){let A=v().$index,i=v(2);AA("ngClass",ss(2,F7,i.shouldMessageHighlighted(A)))("appJsonTooltip",i.getArtifactDeltaTooltip(A))}}function VTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"span",63),eA("click",function(){Z(A);let n=v(2).$implicit,o=v(2);return X(o.editEvalCaseMessage.emit(n))}),K(2," edit "),w(),m(3,"span",63),eA("click",function(){Z(A);let n=v(2),o=n.$implicit,a=n.$index,r=v(2);return X(r.deleteEvalCaseMessage.emit({message:o,index:a}))}),K(4," delete "),w()()}if(t&2){let A=v(4);p(),AA("ngClass",ss(4,rK,A.isEvalCaseEditing))("matTooltip",A.i18n.editEvalMessageTooltip),p(2),AA("ngClass",ss(6,rK,A.isEvalCaseEditing))("matTooltip",A.i18n.deleteEvalMessageTooltip)}}function WTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"span",63),eA("click",function(){Z(A);let n=v(2).$implicit,o=v(2);return X(o.editFunctionArgs.emit(n))}),K(2," edit "),w()()}if(t&2){let A=v(4);p(),AA("ngClass",ss(2,rK,A.isEvalCaseEditing))("matTooltip",A.i18n.editFunctionArgsTooltip)}}function ZTA(t,e){if(t&1&&V(0,VTA,5,8,"div")(1,WTA,3,4,"div"),t&2){let A=v().$implicit,i=v(2);W(A.text?0:i.isEditFunctionArgsEnabled&&A.functionCalls&&A.functionCalls.length>0?1:-1)}}function XTA(t,e){t&1&&(m(0,"button",20)(1,"mat-icon"),K(2,"person"),w()())}function $TA(t,e){if(t&1&&GA(0,"app-message-feedback",21),t&2){let A=v().$implicit,i=v(2);AA("sessionName",i.sessionName())("eventId",A.eventId)}}function AHA(t,e){if(t&1){let A=JA();m(0,"div",9)(1,"div",11),eA("click",function(n){let o=Z(A),a=o.$implicit,r=o.$index,s=v(2);return X(s.handleRowClick(n,a,r))}),V(2,nTA,3,1,"div",12),m(3,"div",13),V(4,rTA,3,1,"div",14),V(5,sTA,3,7,"button",15),V(6,GTA,13,14,"mat-card",16),V(7,TTA,2,0),V(8,PTA,2,0),V(9,jTA,4,4,"button",17),V(10,qTA,4,4,"button",18),m(11,"div",13)(12,"span",19),K(13),w(),m(14,"span"),K(15),w()(),V(16,ZTA,2,1),V(17,XTA,3,0,"button",20),w()(),V(18,$TA,1,2,"app-message-feedback",21),w()}if(t&2){let A=e.$implicit,i=e.$index,n=v(2);p(),AA("ngClass",ss(16,VYA,n.isMessageEventSelected(i))),p(),W(A.role==="user"?2:-1),p(),AA("ngClass",Vl(18,WYA,A.role==="user",A.role==="bot")),p(),W(A.role==="bot"&&!A.isLoading?4:-1),p(),W(A.role==="bot"?5:-1),p(),W(n.shouldShowMessageCard(A)?6:-1),p(),W(A.functionCalls&&A.functionCalls.length>0?7:-1),p(),W(A.functionResponses&&A.functionResponses.length>0?8:-1),p(),W(A.role==="bot"&&n.hasStateDelta(i)?9:-1),p(),W(A.role==="bot"&&n.hasArtifactDelta(i)?10:-1),p(),AA("ngClass",Vl(21,ZYA,A.evalStatus===1,A.evalStatus===2)),p(2),qA(A.evalStatus===1?"check":A.evalStatus===2?"close":""),p(2),qA(A.evalStatus===1?n.i18n.evalPassLabel:A.evalStatus===2?n.i18n.evalFailLabel:""),p(),W(n.evalCase&&A.role==="bot"&&n.isEvalEditMode?16:-1),p(),W(A.role==="user"?17:-1),p(),W(n.isUserFeedbackEnabled()&&!n.isLoadingAgentResponse()&&A.role==="bot"?18:-1)}}function eHA(t,e){if(t&1){let A=JA();m(0,"div",7,0),eA("scroll",function(n){Z(A);let o=v();return X(o.onScroll.next(n))}),V(2,eTA,2,0,"div",8),ri(3,"async"),ri(4,"async"),GA(5,"div",null,1),Ut(7,AHA,19,24,"div",9,_i),w()}if(t&2){let A=v();p(2),W(Ci(3,1,A.uiStateService.isMessagesLoading())&&Ci(4,3,A.featureFlagService.isInfinityMessageScrollingEnabled())?2:-1),p(5),Jt(A.messages)}}function tHA(t,e){if(t&1){let A=JA();m(0,"div",76),GA(1,"img",77),m(2,"button",78),eA("click",function(){Z(A);let n=v().$index,o=v(4);return X(o.removeFile.emit(n))}),m(3,"mat-icon",79),K(4,"close"),w()()()}if(t&2){let A=v().$implicit;p(),AA("src",A.url,Ga)}}function iHA(t,e){if(t&1){let A=JA();m(0,"div",75)(1,"button",78),eA("click",function(){Z(A);let n=v().$index,o=v(4);return X(o.removeFile.emit(n))}),m(2,"mat-icon",79),K(3,"close"),w()(),m(4,"div",80)(5,"mat-icon"),K(6,"insert_drive_file"),w(),m(7,"span"),K(8),w()()()}if(t&2){let A=v().$implicit;p(8),qA(A.file.name)}}function nHA(t,e){if(t&1&&(m(0,"div"),V(1,tHA,5,1,"div",76)(2,iHA,9,1,"div",75),w()),t&2){let A=e.$implicit;p(),W(A.file.type.startsWith("image/")?1:A.file.type.startsWith("image/")?-1:2)}}function oHA(t,e){if(t&1){let A=JA();m(0,"div",75)(1,"button",78),eA("click",function(){Z(A);let n=v(4);return X(n.removeStateUpdate.emit())}),m(2,"mat-icon",79),K(3,"close"),w()(),m(4,"div",80)(5,"span"),K(6),w()()()}if(t&2){let A=v(4);p(6),qA(A.i18n.updatedSessionStateChipLabel)}}function aHA(t,e){if(t&1&&(m(0,"div",67),Ut(1,nHA,3,1,"div",null,_i),V(3,oHA,7,1,"div",75),w()),t&2){let A=v(3);p(),Jt(A.selectedFiles),p(2),W(A.updatedSessionState?3:-1)}}function rHA(t,e){if(t&1){let A=JA();m(0,"div",64)(1,"input",65,3),eA("change",function(n){Z(A);let o=v(2);return X(o.fileSelect.emit(n))}),w(),m(3,"mat-form-field",66),V(4,aHA,4,1,"div",67),m(5,"textarea",68),eA("ngModelChange",function(n){Z(A);let o=v(2);return X(o.userInputChange.emit(n))})("keydown.enter",function(n){Z(A);let o=v(2);return X(o.sendMessage.emit(n))}),w(),m(6,"div",69)(7,"div")(8,"button",70),ri(9,"async"),eA("click",function(){Z(A);let n=An(2);return X(n.click())}),m(10,"mat-icon"),K(11,"attach_file"),w()(),m(12,"button",71),ri(13,"async"),m(14,"mat-icon"),K(15,"more_vert"),w()(),m(16,"mat-menu",null,4)(18,"span",72),eA("click",function(){Z(A);let n=v(2);return X(n.updateState.emit())}),K(19),w()()(),m(20,"div")(21,"button",73),ri(22,"async"),eA("click",function(){Z(A);let n=v(2);return X(n.toggleAudioRecording.emit())}),m(23,"mat-icon"),K(24,"mic"),w()(),m(25,"button",74),ri(26,"async"),eA("click",function(){Z(A);let n=v(2);return X(n.toggleVideoRecording.emit())}),m(27,"mat-icon"),K(28,"videocam"),w()()()()()()}if(t&2){let A=An(17),i=v(2);p(4),W(i.selectedFiles.length&&i.appName!=""||i.updatedSessionState?4:-1),p(),AA("ngModel",i.userInput)("placeholder",i.i18n.typeMessagePlaceholder),p(3),AA("matTooltip",i.i18n.uploadFileTooltip)("disabled",!Ci(9,18,i.isMessageFileUploadEnabledObs)),p(4),AA("matMenuTriggerFor",A)("matTooltip",i.i18n.moreOptionsTooltip)("disabled",!Ci(13,20,i.isManualStateUpdateEnabledObs)),p(6),AA("matTooltip",i.i18n.updateStateMenuTooltip),p(),_e(" ",i.i18n.updateStateMenuLabel," "),p(2),ae("recording",i.isAudioRecording),AA("matTooltip",i.isAudioRecording?i.i18n.turnOffMicTooltip:i.i18n.useMicTooltip)("disabled",!Ci(22,22,i.isBidiStreamingEnabledObs)),p(4),ae("recording",i.isVideoRecording),AA("matTooltip",i.isVideoRecording?i.i18n.turnOffCamTooltip:i.i18n.useCamTooltip)("disabled",!Ci(26,24,i.isBidiStreamingEnabledObs))}}function sHA(t,e){if(t&1&&V(0,rHA,29,26,"div",64),t&2){let A=v();W(A.canEditSession()?0:-1)}}function gHA(t,e){t&1&&(m(0,"div",6),GA(1,"mat-progress-spinner",81),w())}var OsA="root_agent",Vh=class t{appName="";sessionName=at("");messages=[];isChatMode=!0;evalCase=null;isEvalEditMode=!1;isEvalCaseEditing=!1;isEditFunctionArgsEnabled=!1;userInput="";userEditEvalCaseMessage="";selectedFiles=[];updatedSessionState=null;eventData=new Map;selectedEvent=void 0;isAudioRecording=!1;isVideoRecording=!1;hoveredEventMessageIndices=[];userId="";sessionId="";userInputChange=new WA;userEditEvalCaseMessageChange=new WA;clickEvent=new WA;handleKeydown=new WA;cancelEditMessage=new WA;saveEditMessage=new WA;openViewImageDialog=new WA;openBase64InNewTab=new WA;editEvalCaseMessage=new WA;deleteEvalCaseMessage=new WA;editFunctionArgs=new WA;fileSelect=new WA;removeFile=new WA;removeStateUpdate=new WA;sendMessage=new WA;updateState=new WA;toggleAudioRecording=new WA;toggleVideoRecording=new WA;longRunningResponseComplete=new WA;videoContainer;scrollContainer;textarea;scrollInterrupted=!1;scrollHeight=0;lastMessageRef=null;nextPageToken="";i18n=h(zsA);uiStateService=h(Bl);stringToColorService=h(dE);markdownComponent=h(Gh);featureFlagService=h(vr);agentService=h(sg);sessionService=h(dl);destroyRef=h(Cr);MediaType=$1;JSON=JSON;isMessageFileUploadEnabledObs=this.featureFlagService.isMessageFileUploadEnabled();isManualStateUpdateEnabledObs=this.featureFlagService.isManualStateUpdateEnabled();isBidiStreamingEnabledObs=this.featureFlagService.isBidiStreamingEnabled();canEditSession=jA(!0);isUserFeedbackEnabled=_s(this.featureFlagService.isFeedbackServiceEnabled());isLoadingAgentResponse=_s(this.agentService.getLoadingState());onScroll=new $A;sanitizer=h(ds);constructor(){La(()=>{let e=this.sessionName();e&&(this.nextPageToken="",this.uiStateService.lazyLoadMessages(e,{pageSize:100,pageToken:this.nextPageToken}).pipe(To()).subscribe())})}ngOnInit(){this.featureFlagService.isInfinityMessageScrollingEnabled().pipe(To(),Ze(e=>e),ki(()=>hi(this.uiStateService.onNewMessagesLoaded().pipe(oi(e=>{this.nextPageToken=e.nextPageToken??"",e.isBackground||this.restoreScrollPosition()})),this.onScroll.pipe(ki(e=>{let A=e.target;return A.scrollTop!==0?ja:this.nextPageToken?(this.scrollHeight=A.scrollHeight,this.uiStateService.lazyLoadMessages(this.sessionName(),{pageSize:100,pageToken:this.nextPageToken}).pipe(To(),ea(()=>aU))):ja})))),Tr(this.destroyRef)).subscribe()}ngAfterViewInit(){this.scrollContainer?.nativeElement&&(this.scrollContainer.nativeElement.addEventListener("wheel",()=>{this.scrollInterrupted=!0}),this.scrollContainer.nativeElement.addEventListener("touchmove",()=>{this.scrollInterrupted=!0}))}ngOnChanges(e){if(e.messages){let A=this.messages[this.messages.length-1];A!==this.lastMessageRef&&((A?.role==="user"||A?.isLoading===!0)&&(this.scrollInterrupted=!1),this.scrollToBottom()),this.lastMessageRef=A}}scrollToBottom(){this.scrollInterrupted||setTimeout(()=>{this.scrollContainer?.nativeElement.scrollTo({top:this.scrollContainer.nativeElement.scrollHeight,behavior:"auto"})},50)}getAgentNameFromEvent(e){let A=this.messages[e].eventId;return this.eventData.get(A)?.author??OsA}customIconColorClass(e){let A=this.getAgentNameFromEvent(e);return A!==OsA?`custom-icon-color-${this.stringToColorService.stc(A).replace("#","")}`:""}shouldMessageHighlighted(e){return this.hoveredEventMessageIndices.includes(e)}isMessageEventSelected(e){let A=this.messages[e];return A.eventId&&this.selectedEvent&&A.eventId===this.selectedEvent.id}shouldShowMessageCard(e){return!!(e.text||e.attachments||e.inlineData||e.executableCode||e.codeExecutionResult||e.a2uiData||e.renderedContent||e.isLoading||e.failedMetric&&e.evalStatus===2)}getBotEventNumber(e){let A=this.messages[e];if(A.role!=="bot"||!A.eventId)return-1;let i=[];for(let n=0;n<=e;n++){let o=this.messages[n];o.role==="bot"&&o.eventId&&!i.includes(o.eventId)&&i.push(o.eventId)}return i.indexOf(A.eventId)+1}getOverallEventNumber(e){let A=0,i=null,n=null;for(let o=0;o<=e;o++){let a=this.messages[o];if(a.role==="user"){if(i!=="user"&&(A++,i="user"),o===e)return A}else if(a.role==="bot"&&a.eventId&&(a.eventId!==n&&(A++,n=a.eventId,i="bot"),o===e))return A}return-1}isFirstUserMessageInGroup(e){return this.messages[e].role!=="user"?!1:e===0?!0:this.messages[e-1].role!=="user"}isFirstMessageInEventGroup(e){let A=this.messages[e];return A.role!=="bot"||!A.eventId?!1:e===0?!0:this.messages[e-1].eventId!==A.eventId}hasStateDelta(e){let A=this.messages[e];if(!A.eventId)return!1;let n=this.eventData.get(A.eventId)?.actions?.stateDelta;return n&&Object.keys(n).length>0}hasArtifactDelta(e){let A=this.messages[e];if(!A.eventId)return!1;let n=this.eventData.get(A.eventId)?.actions?.artifactDelta;return n&&Object.keys(n).length>0}renderGooglerSearch(e){return this.sanitizer.bypassSecurityTrustHtml(e)}restoreScrollPosition(){if(!this.scrollHeight){this.scrollInterrupted=!1,this.scrollToBottom();return}let e=this.scrollContainer?.nativeElement;e&&(e.scrollTop=e.scrollHeight-this.scrollHeight,this.scrollHeight=0)}isComputerUseClick(e){return v7(e)}isComputerUseResponse(e){return qh(e)}getFunctionCallArgsTooltip(e){if(!e.functionCall||!e.functionCall.args)return"";try{return JSON.stringify(e.functionCall.args)}catch{return String(e.functionCall.args)}}getFunctionResponseTooltip(e){if(!e.functionResponse||!e.functionResponse.response)return"";try{return JSON.stringify(e.functionResponse.response)}catch{return String(e.functionResponse.response)}}getStateDeltaTooltip(e){let A=this.messages[e];if(!A.eventId)return"";let n=this.eventData.get(A.eventId)?.actions?.stateDelta;if(!n)return"";try{return JSON.stringify(n)}catch{return String(n)}}getArtifactDeltaTooltip(e){let A=this.messages[e];if(!A.eventId)return"";let n=this.eventData.get(A.eventId)?.actions?.artifactDelta;if(!n)return"";try{return JSON.stringify(n)}catch{return String(n)}}handleRowClick(e,A,i){let n=window.getSelection();n&&n.toString().length>0||this.clickEvent.emit(i)}handleKeyboardNavigation(e){if(!this.selectedEvent||e.key!=="ArrowUp"&&e.key!=="ArrowDown")return;e.preventDefault();let A=new Map;for(let a=0;athis.messages[a].eventId===this.selectedEvent.id);if(n===-1)return;let o;e.key==="ArrowDown"?o=n+1>=i.length?0:n+1:o=n-1<0?i.length-1:n-1,this.clickEvent.emit(i[o]),setTimeout(()=>{if(!this.scrollContainer?.nativeElement)return;let a=this.scrollContainer.nativeElement.querySelectorAll(".message-column-container");a&&a[i[o]]&&a[i[o]].scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})},0)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-chat-panel"]],viewQuery:function(A,i){if(A&1&&ai(PYA,5,ge)(jYA,5)(qYA,5),A&2){let n;ce(n=Ce())&&(i.videoContainer=n.first),ce(n=Ce())&&(i.scrollContainer=n.first),ce(n=Ce())&&(i.textarea=n.first)}},hostBindings:function(A,i){A&1&&eA("keydown",function(o){return i.handleKeyboardNavigation(o)},u2)},inputs:{appName:"appName",sessionName:[1,"sessionName"],messages:"messages",isChatMode:"isChatMode",evalCase:"evalCase",isEvalEditMode:"isEvalEditMode",isEvalCaseEditing:"isEvalCaseEditing",isEditFunctionArgsEnabled:"isEditFunctionArgsEnabled",userInput:"userInput",userEditEvalCaseMessage:"userEditEvalCaseMessage",selectedFiles:"selectedFiles",updatedSessionState:"updatedSessionState",eventData:"eventData",selectedEvent:"selectedEvent",isAudioRecording:"isAudioRecording",isVideoRecording:"isVideoRecording",hoveredEventMessageIndices:"hoveredEventMessageIndices",userId:"userId",sessionId:"sessionId"},outputs:{userInputChange:"userInputChange",userEditEvalCaseMessageChange:"userEditEvalCaseMessageChange",clickEvent:"clickEvent",handleKeydown:"handleKeydown",cancelEditMessage:"cancelEditMessage",saveEditMessage:"saveEditMessage",openViewImageDialog:"openViewImageDialog",openBase64InNewTab:"openBase64InNewTab",editEvalCaseMessage:"editEvalCaseMessage",deleteEvalCaseMessage:"deleteEvalCaseMessage",editFunctionArgs:"editFunctionArgs",fileSelect:"fileSelect",removeFile:"removeFile",removeStateUpdate:"removeStateUpdate",sendMessage:"sendMessage",updateState:"updateState",toggleAudioRecording:"toggleAudioRecording",toggleVideoRecording:"toggleVideoRecording",longRunningResponseComplete:"longRunningResponseComplete"},features:[ti],decls:5,vars:5,consts:[["autoScroll",""],["videoContainer",""],["messageTextarea",""],["fileInput",""],["moreMenu","matMenu"],[1,"chat-messages"],[1,"loading-spinner-container"],[1,"chat-messages",3,"scroll"],[1,"messages-loading-container"],[1,"message-row-container"],["mode","indeterminate"],[1,"message-column-container",3,"click","ngClass"],[1,"event-number-container","user-event-number"],[3,"ngClass"],[1,"event-number-container"],["mat-mini-fab","",3,"disabled","matTooltip","class","ngClass"],[1,"message-card",3,"ngClass"],["mat-stroked-button","",1,"function-event-button","state-delta-button",3,"ngClass","appJsonTooltip"],["mat-stroked-button","",1,"function-event-button","artifact-delta-button",3,"ngClass","appJsonTooltip"],[1,"material-symbols-outlined"],["mat-mini-fab",""],[3,"sessionName","eventId"],[1,"event-number-label"],[1,"event-number-placeholder"],["mat-mini-fab","",3,"disabled","matTooltip","ngClass"],["fontSet","material-symbols-outlined"],["mode","buffer",1,"loading-bar"],[1,"attachments"],[1,"thought-chip"],[3,"beginRendering","surfaceUpdate","dataModelUpdate"],[1,"eval-compare-container"],[1,"attachment"],["alt","attachment",1,"image-preview-chat",3,"src"],["download","",3,"href"],[1,"edit-message-container"],[3,"ngComponentOutlet","ngComponentOutletInputs"],["rows","4","cols","80",1,"message-textarea",3,"ngModelChange","keydown","ngModel"],[1,"edit-message-buttons-container"],[1,"material-symbols-outlined","cancel-edit-button",3,"click","matTooltip"],[1,"material-symbols-outlined","save-edit-button",3,"click","matTooltip"],[3,"innerHTML"],[1,"generated-image-container"],["alt","image",1,"generated-image",3,"click","src"],[3,"base64data"],[1,"html-artifact-container"],[1,"link-style-button",3,"click"],["alt","image",1,"image-preview-chat",3,"click","src"],[1,"actual-expected-compare-container"],[1,"score-threshold-container"],[1,"actual-result"],[1,"eval-response-header","header-actual"],[3,"json"],[1,"expected-result"],[1,"eval-response-header","header-expected"],[1,"header-actual"],[1,"header-expected"],[3,"functionCall","allMessages","index"],["mat-stroked-button","",1,"function-event-button",3,"ngClass","appJsonTooltip"],[3,"functionCall","appName","userId","sessionId"],[3,"clickEvent","functionCall","allMessages","index"],[3,"responseComplete","functionCall","appName","userId","sessionId"],[3,"functionResponse","allMessages","index"],[3,"clickEvent","functionResponse","allMessages","index"],[1,"material-symbols-outlined","eval-case-edit-button",3,"click","ngClass","matTooltip"],[1,"chat-input"],["type","file","multiple","","hidden","",3,"change"],["appearance","outline",1,"input-field"],[1,"file-preview"],["matInput","","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","10",1,"chat-input-box",3,"ngModelChange","keydown.enter","ngModel","placeholder"],[1,"chat-input-actions"],["mat-icon-button","",1,"function-event-button",3,"click","matTooltip","disabled"],["mat-icon-button","",1,"function-event-button",3,"matMenuTriggerFor","matTooltip","disabled"],["mat-menu-item","",3,"click","matTooltip"],["mat-icon-button","","matSuffix","",1,"audio-rec-btn",3,"click","matTooltip","disabled"],["mat-icon-button","","matSuffix","",1,"video-rec-btn",3,"click","matTooltip","disabled"],[1,"file-container"],[1,"image-container"],["alt","preview",1,"image-preview",3,"src"],["mat-icon-button","",1,"delete-button",3,"click"],["color","warn"],[1,"file-info"],["mode","indeterminate","diameter","50"]],template:function(A,i){if(A&1&&(Ur(0),ri(1,"async"),V(2,eHA,9,5,"div",5),V(3,sHA,1,1),V(4,gHA,2,0,"div",6)),A&2){let n=Ci(1,3,i.uiStateService.isSessionLoading());p(2),W(i.appName!=""&&!n?2:-1),p(),W(i.appName!=""&&i.isChatMode&&!n?3:-1),p(),W(n?4:-1)}},dependencies:[fa,gs,p2,Nn,uo,fo,ba,cl,fn,zH,aE,JsA,y7,Fs,Fn,Yp,Ma,rl,Ka,ta,v9,zp,KB,Yr,caA,X0,l2,_h,TsA,B1,B0,Y2,k7,vE,N7,U2,Sa,M7,S7,x7,ls],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%}.generated-image-container[_ngcontent-%COMP%]{max-width:400px}.generated-image[_ngcontent-%COMP%]{max-width:100%;min-width:40px;border-radius:8px}.html-artifact-container[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:flex-start;align-items:center}.loading-bar[_ngcontent-%COMP%]{width:100px;margin:15px}.chat-messages[_ngcontent-%COMP%]{flex-grow:1;overflow-y:auto;padding:20px;margin-top:16px}.message-card[_ngcontent-%COMP%]{padding:5px 20px;margin:5px;border-radius:20px;max-width:80%;font-size:14px;font-weight:400;position:relative;display:inline-block}.message-card.message-card--highlighted[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-highlight-background-color)}.function-event-button[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-background-color);margin:5px;font-size:13px!important;padding:6px 12px!important;min-height:32px!important;height:32px!important}.function-event-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px!important;width:18px!important;height:18px!important}.state-delta-button[_ngcontent-%COMP%], .artifact-delta-button[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-background-color)!important}.function-event-button-highlight[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-highlight-background-color);border-color:var(--chat-panel-function-event-button-highlight-border-color)!important;color:var(--chat-panel-function-event-button-highlight-color)!important}.message-column-container[_ngcontent-%COMP%]{display:flex;flex-direction:row;margin-left:-20px;margin-right:-20px;padding:8px 20px;border:2px solid transparent;border-radius:4px;background-color:transparent;transition:background-color .2s ease;cursor:pointer}.message-column-container[_ngcontent-%COMP%]:hover{background-color:#4285f414}.message-column-container.selected[_ngcontent-%COMP%]{background-color:#4285f433!important;border:2px solid rgba(66,133,244,.6);border-radius:4px}.user-message[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;flex-grow:1}.user-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-panel-user-message-message-card-background-color);align-self:flex-end;color:var(--chat-panel-user-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;flex-grow:1}.bot-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-panel-bot-message-message-card-background-color);align-self:flex-start;color:var(--chat-panel-bot-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]:focus-within .message-card[_ngcontent-%COMP%]{background-color:var(--chat-panel-bot-message-focus-within-message-card-background-color);border:1px solid var(--chat-panel-bot-message-focus-within-message-card-border-color)}.message-textarea[_ngcontent-%COMP%]{background-color:var(--chat-panel-message-textarea-background-color);max-width:100%;border:none;font-family:Google Sans,Helvetica Neue,sans-serif}.message-textarea[_ngcontent-%COMP%]:focus{background-color:var(--chat-panel-message-textarea-focus-background-color);outline:none}.edit-message-buttons-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%]{visibility:hidden;position:absolute;left:10px;z-index:10;background-color:var(--chat-panel-eval-compare-container-background-color);overflow:hidden;border-radius:20px;padding:5px 20px;margin-bottom:10px;font-size:16px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .actual-result[_ngcontent-%COMP%]{border-right:2px solid var(--chat-panel-actual-result-border-right-color);padding-right:8px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .expected-result[_ngcontent-%COMP%]{padding-left:12px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%]:hover .eval-compare-container[_ngcontent-%COMP%]{visibility:visible}.actual-expected-compare-container[_ngcontent-%COMP%]{display:flex}.score-threshold-container[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:10px;align-items:center;margin-top:15px;font-size:14px;font-weight:600}.eval-response-header[_ngcontent-%COMP%]{padding-bottom:5px;border-bottom:2px solid var(--chat-panel-eval-response-header-border-bottom-color);font-style:italic;font-weight:700}.header-expected[_ngcontent-%COMP%]{color:var(--chat-panel-header-expected-color)}.header-actual[_ngcontent-%COMP%]{color:var(--chat-panel-header-actual-color)}.eval-case-edit-button[_ngcontent-%COMP%]{cursor:pointer;margin-left:4px;margin-right:4px}.eval-pass[_ngcontent-%COMP%]{display:flex;color:var(--chat-panel-eval-pass-color)}.eval-fail[_ngcontent-%COMP%]{display:flex;color:var(--chat-panel-eval-fail-color)}.hidden[_ngcontent-%COMP%]{visibility:hidden}.chat-input[_ngcontent-%COMP%]{display:flex;padding:10px;width:60%;margin:0 auto;position:relative;z-index:1}.input-field[_ngcontent-%COMP%]{flex-grow:1;position:relative;z-index:1}.input-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{color:var(--chat-panel-input-field-textarea-color);border:none;padding:10px;box-sizing:content-box;caret-color:var(--chat-panel-input-field-textarea-caret-color)}.input-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]::placeholder{color:var(--chat-panel-input-field-textarea-placeholder-color)}.input-field[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{color:var(--chat-panel-input-field-button-color);background-color:var(--chat-panel-input-field-button-background-color)}.chat-input-actions[_ngcontent-%COMP%]{width:106%;margin-top:10px;display:flex;justify-content:space-between;align-items:center;max-width:100%}.chat-input-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin-left:10px;margin-right:10px}.file-preview[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px;margin-bottom:8px}.image-preview-chat[_ngcontent-%COMP%]{max-width:90%;max-height:70vh;width:auto;height:auto;border-radius:8px;cursor:pointer;transition:transform .2s ease-in-out}.attachment[_ngcontent-%COMP%]{display:flex;align-items:center}[_nghost-%COMP%] .mat-mdc-mini-fab{background-color:var(--chat-panel-mat-mdc-mini-fab-background-color, #4285f4)}[_nghost-%COMP%] .mat-mdc-mini-fab mat-icon{color:var(--chat-panel-mat-mdc-mini-fab-mat-icon-color, white)}[_nghost-%COMP%] .mat-mdc-mini-fab.mat-mdc-button-disabled{background-color:#fff3!important}[_nghost-%COMP%] .mat-mdc-mini-fab.mat-mdc-button-disabled mat-icon{color:#fff9!important}[_nghost-%COMP%] .message-text p{white-space:pre-line;word-break:break-word;overflow-wrap:break-word}[_nghost-%COMP%] .input-field .mat-mdc-text-field-wrapper{border:1px solid var(--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color);border-radius:16px}.image-container[_ngcontent-%COMP%]{position:relative;display:inline-block;border-radius:12px;overflow:hidden}.image-preview[_ngcontent-%COMP%]{display:block;width:100%;height:auto;border-radius:12px;width:80px;height:80px}.delete-button[_ngcontent-%COMP%]{position:absolute;top:1px;right:1px;background-color:var(--chat-panel-delete-button-background-color);border:none;border-radius:50%;padding:8px;cursor:pointer;color:var(--chat-panel-delete-button-color);display:flex;align-items:center;justify-content:center;margin-right:0;scale:.7}.delete-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px}.file-container[_ngcontent-%COMP%]{position:relative;display:flex;flex-direction:column;gap:8px;height:80px;background-color:var(--chat-panel-file-container-background-color);border-radius:12px}.file-info[_ngcontent-%COMP%]{margin-right:60px;padding-top:20px;padding-left:16px}.thought-chip[_ngcontent-%COMP%]{border-radius:5px;background-color:var(--chat-panel-thought-chip-background-color);width:80px;text-align:center;margin-top:5px}.event-number-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-self:center;min-width:30px}.bot-message[_ngcontent-%COMP%] .event-number-container[_ngcontent-%COMP%]{margin-right:8px}.user-event-number[_ngcontent-%COMP%]{margin-right:8px;align-self:center}.event-number-label[_ngcontent-%COMP%], .event-number-placeholder[_ngcontent-%COMP%]{font-size:14px;font-weight:600;text-align:center;display:inline-block}.event-number-label[_ngcontent-%COMP%]{color:var(--chat-panel-event-number-label-color, #5f6368)}.event-number-placeholder[_ngcontent-%COMP%]{visibility:hidden}[_nghost-%COMP%] pre{white-space:pre-wrap;word-break:break-word;overflow-x:auto;max-width:100%}.link-style-button[_ngcontent-%COMP%]{background:none;border:none;padding:0;font:inherit;color:var(--chat-panel-link-style-button-color)!important;text-decoration:underline;cursor:pointer;outline:none;font-size:14px}.cancel-edit-button[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--chat-mat-mdc-text-field-wrapper-border-color);cursor:pointer;margin-right:16px}.save-edit-button[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--mat-sys-primary);cursor:pointer;margin-right:16px}.chat-input-box[_ngcontent-%COMP%]{caret-color:#fff}button.audio-rec-btn[_ngcontent-%COMP%], button.video-rec-btn[_ngcontent-%COMP%]{background-color:var(--chat-card-background-color)}button.audio-rec-btn.recording[_ngcontent-%COMP%], button.video-rec-btn.recording[_ngcontent-%COMP%]{background-color:var(--chat-panel-eval-fail-color)}.loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:100%}.messages-loading-container[_ngcontent-%COMP%]{margin-top:1em;margin-bottom:1em}"]})};var lHA={cancelButton:"Cancel",saveButton:"Save",invalidJsonAlert:"Invalid JSON: "},PsA=new yA("Edit Json Dialog Messages",{factory:()=>lHA});var Km=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.jsonString=JSON.stringify(A.jsonContent,null,2),this.functionName=A.functionName||""}jsonEditorComponent=ca(jc);jsonString="";functionName="";i18n=h(PsA);ngOnInit(){}onSave(){try{this.jsonString=this.jsonEditorComponent().getJsonString();let e=JSON.parse(this.jsonString);this.dialogRef.close(e)}catch(e){alert(this.i18n.invalidJsonAlert+e)}}onCancel(){this.dialogRef.close(null)}static \u0275fac=function(A){return new(A||t)(Ct(Po),Ct(ka))};static \u0275cmp=kA({type:t,selectors:[["app-edit-json-dialog"]],viewQuery:function(A,i){A&1&&rs(i.jsonEditorComponent,jc,5),A&2&&wr()},decls:11,vars:5,consts:[[1,"dialog-container"],["mat-dialog-title",""],[1,"editor"],[3,"jsonString"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"h2",1),K(2),w(),m(3,"mat-dialog-content",2),K(4),GA(5,"app-json-editor",3),w(),m(6,"mat-dialog-actions",4)(7,"button",5),K(8),w(),m(9,"button",6),eA("click",function(){return i.onSave()}),K(10),w()()()),A&2&&(p(2),qA(i.data.dialogHeader),p(2),_e(" ",i.functionName," "),p(),AA("jsonString",i.jsonString),p(3),qA(i.i18n.cancelButton),p(2),qA(i.i18n.saveButton))},dependencies:[Ua,yr,jc,or,Fn,K2],styles:[".dialog-container[_ngcontent-%COMP%]{border-radius:12px;padding:18px;width:500px;box-shadow:0 8px 16px var(--edit-json-dialog-container-box-shadow-color)}.editor[_ngcontent-%COMP%]{padding-top:12px;height:300px}"]})};var cHA=[[["caption"]],[["colgroup"],["col"]],"*"],CHA=["caption","colgroup, col","*"];function IHA(t,e){t&1&&He(0,2)}function dHA(t,e){t&1&&(m(0,"thead",0),on(1,1),w(),m(2,"tbody",0),on(3,2)(4,3),w(),m(5,"tfoot",0),on(6,4),w())}function BHA(t,e){t&1&&on(0,1)(1,2)(2,3)(3,4)}var Zc=new yA("CDK_TABLE");var G7=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkCellDef",""]]})}return t})(),K7=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkHeaderCellDef",""]]})}return t})(),VsA=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkFooterCellDef",""]]})}return t})(),Wh=(()=>{class t{_table=h(Zc,{optional:!0});_hasStickyChanged=!1;get name(){return this._name}set name(A){this._setNameInput(A)}_name;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;get stickyEnd(){return this._stickyEnd}set stickyEnd(A){A!==this._stickyEnd&&(this._stickyEnd=A,this._hasStickyChanged=!0)}_stickyEnd=!1;cell;headerCell;footerCell;cssClassFriendlyName;_columnCssClassName;constructor(){}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}_updateColumnCssClassName(){this._columnCssClassName=[`cdk-column-${this.cssClassFriendlyName}`]}_setNameInput(A){A&&(this._name=A,this.cssClassFriendlyName=A.replace(/[^a-z0-9_-]/gi,"-"),this._updateColumnCssClassName())}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkColumnDef",""]],contentQueries:function(i,n,o){if(i&1&&ua(o,G7,5)(o,K7,5)(o,VsA,5),i&2){let a;ce(a=Ce())&&(n.cell=a.first),ce(a=Ce())&&(n.headerCell=a.first),ce(a=Ce())&&(n.footerCell=a.first)}},inputs:{name:[0,"cdkColumnDef","name"],sticky:[2,"sticky","sticky",he],stickyEnd:[2,"stickyEnd","stickyEnd",he]},features:[It([{provide:"MAT_SORT_HEADER_COLUMN_DEF",useExisting:t}])]})}return t})(),L7=class{constructor(e,A){A.nativeElement.classList.add(...e._columnCssClassName)}},WsA=(()=>{class t extends L7{constructor(){super(h(Wh),h(ge))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["cdk-header-cell"],["th","cdk-header-cell",""]],hostAttrs:["role","columnheader",1,"cdk-header-cell"],features:[dt]})}return t})();var ZsA=(()=>{class t extends L7{constructor(){let A=h(Wh),i=h(ge);super(A,i);let n=A._table?._getCellRole();n&&i.nativeElement.setAttribute("role",n)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["cdk-cell"],["td","cdk-cell",""]],hostAttrs:[1,"cdk-cell"],features:[dt]})}return t})();var gK=(()=>{class t{template=h(Tn);_differs=h(y1);columns;_columnsDiffer;constructor(){}ngOnChanges(A){if(!this._columnsDiffer){let i=A.columns&&A.columns.currentValue||[];this._columnsDiffer=this._differs.find(i).create(),this._columnsDiffer.diff(i)}}getColumnsDiff(){return this._columnsDiffer.diff(this.columns)}extractCellTemplate(A){return this instanceof Jm?A.headerCell.template:this instanceof lK?A.footerCell.template:A.cell.template}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,features:[ti]})}return t})(),Jm=(()=>{class t extends gK{_table=h(Zc,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(h(Tn),h(y1))}ngOnChanges(A){super.ngOnChanges(A)}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkHeaderRowDef",""]],inputs:{columns:[0,"cdkHeaderRowDef","columns"],sticky:[2,"cdkHeaderRowDefSticky","sticky",he]},features:[dt,ti]})}return t})(),lK=(()=>{class t extends gK{_table=h(Zc,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(h(Tn),h(y1))}ngOnChanges(A){super.ngOnChanges(A)}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkFooterRowDef",""]],inputs:{columns:[0,"cdkFooterRowDef","columns"],sticky:[2,"cdkFooterRowDefSticky","sticky",he]},features:[dt,ti]})}return t})(),U7=(()=>{class t extends gK{_table=h(Zc,{optional:!0});when;constructor(){super(h(Tn),h(y1))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkRowDef",""]],inputs:{columns:[0,"cdkRowDefColumns","columns"],when:[0,"cdkRowDefWhen","when"]},features:[dt]})}return t})(),EB=(()=>{class t{_viewContainer=h(Ho);cells;context;static mostRecentCellOutlet=null;constructor(){t.mostRecentCellOutlet=this}ngOnDestroy(){t.mostRecentCellOutlet===this&&(t.mostRecentCellOutlet=null)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkCellOutlet",""]]})}return t})(),cK=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-header-row"],["tr","cdk-header-row",""]],hostAttrs:["role","row",1,"cdk-header-row"],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})();var CK=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-row"],["tr","cdk-row",""]],hostAttrs:["role","row",1,"cdk-row"],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})(),XsA=(()=>{class t{templateRef=h(Tn);_contentClassNames=["cdk-no-data-row","cdk-row"];_cellClassNames=["cdk-cell","cdk-no-data-cell"];_cellSelector="td, cdk-cell, [cdk-cell], .cdk-cell";constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["ng-template","cdkNoDataRow",""]]})}return t})(),jsA=["top","bottom","left","right"],sK=class{_isNativeHtmlTable;_stickCellCss;_isBrowser;_needsPositionStickyOnElement;direction;_positionListener;_tableInjector;_elemSizeCache=new WeakMap;_resizeObserver=globalThis?.ResizeObserver?new globalThis.ResizeObserver(e=>this._updateCachedSizes(e)):null;_updatedStickyColumnsParamsToReplay=[];_stickyColumnsReplayTimeout=null;_cachedCellWidths=[];_borderCellCss;_destroyed=!1;constructor(e,A,i=!0,n=!0,o,a,r){this._isNativeHtmlTable=e,this._stickCellCss=A,this._isBrowser=i,this._needsPositionStickyOnElement=n,this.direction=o,this._positionListener=a,this._tableInjector=r,this._borderCellCss={top:`${A}-border-elem-top`,bottom:`${A}-border-elem-bottom`,left:`${A}-border-elem-left`,right:`${A}-border-elem-right`}}clearStickyPositioning(e,A){(A.includes("left")||A.includes("right"))&&this._removeFromStickyColumnReplayQueue(e);let i=[];for(let n of e)n.nodeType===n.ELEMENT_NODE&&i.push(n,...Array.from(n.children));Yn({write:()=>{for(let n of i)this._removeStickyStyle(n,A)}},{injector:this._tableInjector})}updateStickyColumns(e,A,i,n=!0,o=!0){if(!e.length||!this._isBrowser||!(A.some(Q=>Q)||i.some(Q=>Q))){this._positionListener?.stickyColumnsUpdated({sizes:[]}),this._positionListener?.stickyEndColumnsUpdated({sizes:[]});return}let a=e[0],r=a.children.length,s=this.direction==="rtl",g=s?"right":"left",l=s?"left":"right",C=A.lastIndexOf(!0),I=i.indexOf(!0),d,B,E;o&&this._updateStickyColumnReplayQueue({rows:[...e],stickyStartStates:[...A],stickyEndStates:[...i]}),Yn({earlyRead:()=>{d=this._getCellWidths(a,n),B=this._getStickyStartColumnPositions(d,A),E=this._getStickyEndColumnPositions(d,i)},write:()=>{for(let Q of e)for(let f=0;f!!Q)&&(this._positionListener.stickyColumnsUpdated({sizes:C===-1?[]:d.slice(0,C+1).map((Q,f)=>A[f]?Q:null)}),this._positionListener.stickyEndColumnsUpdated({sizes:I===-1?[]:d.slice(I).map((Q,f)=>i[f+I]?Q:null).reverse()}))}},{injector:this._tableInjector})}stickRows(e,A,i){if(!this._isBrowser)return;let n=i==="bottom"?e.slice().reverse():e,o=i==="bottom"?A.slice().reverse():A,a=[],r=[],s=[];Yn({earlyRead:()=>{for(let g=0,l=0;g{let g=o.lastIndexOf(!0);for(let l=0;l{let i=e.querySelector("tfoot");i&&(A.some(n=>!n)?this._removeStickyStyle(i,["bottom"]):this._addStickyStyle(i,"bottom",0,!1))}},{injector:this._tableInjector})}destroy(){this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._resizeObserver?.disconnect(),this._destroyed=!0}_removeStickyStyle(e,A){if(!e.classList.contains(this._stickCellCss))return;for(let n of A)e.style[n]="",e.classList.remove(this._borderCellCss[n]);jsA.some(n=>A.indexOf(n)===-1&&e.style[n])?e.style.zIndex=this._getCalculatedZIndex(e):(e.style.zIndex="",this._needsPositionStickyOnElement&&(e.style.position=""),e.classList.remove(this._stickCellCss))}_addStickyStyle(e,A,i,n){e.classList.add(this._stickCellCss),n&&e.classList.add(this._borderCellCss[A]),e.style[A]=`${i}px`,e.style.zIndex=this._getCalculatedZIndex(e),this._needsPositionStickyOnElement&&(e.style.cssText+="position: -webkit-sticky; position: sticky; ")}_getCalculatedZIndex(e){let A={top:100,bottom:10,left:1,right:1},i=0;for(let n of jsA)e.style[n]&&(i+=A[n]);return i?`${i}`:""}_getCellWidths(e,A=!0){if(!A&&this._cachedCellWidths.length)return this._cachedCellWidths;let i=[],n=e.children;for(let o=0;o0;o--)A[o]&&(i[o]=n,n+=e[o]);return i}_retrieveElementSize(e){let A=this._elemSizeCache.get(e);if(A)return A;let i=e.getBoundingClientRect(),n={width:i.width,height:i.height};return this._resizeObserver&&(this._elemSizeCache.set(e,n),this._resizeObserver.observe(e,{box:"border-box"})),n}_updateStickyColumnReplayQueue(e){this._removeFromStickyColumnReplayQueue(e.rows),this._stickyColumnsReplayTimeout||this._updatedStickyColumnsParamsToReplay.push(e)}_removeFromStickyColumnReplayQueue(e){let A=new Set(e);for(let i of this._updatedStickyColumnsParamsToReplay)i.rows=i.rows.filter(n=>!A.has(n));this._updatedStickyColumnsParamsToReplay=this._updatedStickyColumnsParamsToReplay.filter(i=>!!i.rows.length)}_updateCachedSizes(e){let A=!1;for(let i of e){let n=i.borderBoxSize?.length?{width:i.borderBoxSize[0].inlineSize,height:i.borderBoxSize[0].blockSize}:{width:i.contentRect.width,height:i.contentRect.height};n.width!==this._elemSizeCache.get(i.target)?.width&&EHA(i.target)&&(A=!0),this._elemSizeCache.set(i.target,n)}A&&this._updatedStickyColumnsParamsToReplay.length&&(this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._stickyColumnsReplayTimeout=setTimeout(()=>{if(!this._destroyed){for(let i of this._updatedStickyColumnsParamsToReplay)this.updateStickyColumns(i.rows,i.stickyStartStates,i.stickyEndStates,!0,!1);this._updatedStickyColumnsParamsToReplay=[],this._stickyColumnsReplayTimeout=null}},0))}};function EHA(t){return["cdk-cell","cdk-header-cell","cdk-footer-cell"].some(e=>t.classList.contains(e))}var Um=new yA("STICKY_POSITIONING_LISTENER");var IK=(()=>{class t{viewContainer=h(Ho);elementRef=h(ge);constructor(){let A=h(Zc);A._rowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","rowOutlet",""]]})}return t})(),dK=(()=>{class t{viewContainer=h(Ho);elementRef=h(ge);constructor(){let A=h(Zc);A._headerRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","headerRowOutlet",""]]})}return t})(),BK=(()=>{class t{viewContainer=h(Ho);elementRef=h(ge);constructor(){let A=h(Zc);A._footerRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","footerRowOutlet",""]]})}return t})(),EK=(()=>{class t{viewContainer=h(Ho);elementRef=h(ge);constructor(){let A=h(Zc);A._noDataRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","noDataRowOutlet",""]]})}return t})(),QK=(()=>{class t{_differs=h(y1);_changeDetectorRef=h(mt);_elementRef=h(ge);_dir=h(xo,{optional:!0});_platform=h(Ii);_viewRepeater;_viewportRuler=h(Gs);_injector=h(ft);_virtualScrollViewport=h(OH,{optional:!0,host:!0});_positionListener=h(Um,{optional:!0})||h(Um,{optional:!0,skipSelf:!0});_document=h(Xt);_data;_renderedRange;_onDestroy=new $A;_renderRows;_renderChangeSubscription=null;_columnDefsByName=new Map;_rowDefs;_headerRowDefs;_footerRowDefs;_dataDiffer;_defaultRowDef=null;_customColumnDefs=new Set;_customRowDefs=new Set;_customHeaderRowDefs=new Set;_customFooterRowDefs=new Set;_customNoDataRow=null;_headerRowDefChanged=!0;_footerRowDefChanged=!0;_stickyColumnStylesNeedReset=!0;_forceRecalculateCellWidths=!0;_cachedRenderRowsMap=new Map;_isNativeHtmlTable;_stickyStyler;stickyCssClass="cdk-table-sticky";needsPositionStickyOnElement=!0;_isServer;_isShowingNoDataRow=!1;_hasAllOutlets=!1;_hasInitialized=!1;_headerRowStickyUpdates=new $A;_footerRowStickyUpdates=new $A;_disableVirtualScrolling=!1;_getCellRole(){if(this._cellRoleInternal===void 0){let A=this._elementRef.nativeElement.getAttribute("role");return A==="grid"||A==="treegrid"?"gridcell":"cell"}return this._cellRoleInternal}_cellRoleInternal=void 0;get trackBy(){return this._trackByFn}set trackBy(A){this._trackByFn=A}_trackByFn;get dataSource(){return this._dataSource}set dataSource(A){this._dataSource!==A&&(this._switchDataSource(A),this._changeDetectorRef.markForCheck())}_dataSource;_dataSourceChanges=new $A;_dataStream=new $A;get multiTemplateDataRows(){return this._multiTemplateDataRows}set multiTemplateDataRows(A){this._multiTemplateDataRows=A,this._rowOutlet&&this._rowOutlet.viewContainer.length&&(this._forceRenderDataRows(),this.updateStickyColumnStyles())}_multiTemplateDataRows=!1;get fixedLayout(){return this._virtualScrollEnabled()?!0:this._fixedLayout}set fixedLayout(A){this._fixedLayout=A,this._forceRecalculateCellWidths=!0,this._stickyColumnStylesNeedReset=!0}_fixedLayout=!1;recycleRows=!1;contentChanged=new WA;viewChange=new Tt({start:0,end:Number.MAX_VALUE});_rowOutlet;_headerRowOutlet;_footerRowOutlet;_noDataRowOutlet;_contentColumnDefs;_contentRowDefs;_contentHeaderRowDefs;_contentFooterRowDefs;_noDataRow;constructor(){h(new Zs("role"),{optional:!0})||this._elementRef.nativeElement.setAttribute("role","table"),this._isServer=!this._platform.isBrowser,this._isNativeHtmlTable=this._elementRef.nativeElement.nodeName==="TABLE",this._dataDiffer=this._differs.find([]).create((i,n)=>this.trackBy?this.trackBy(n.dataIndex,n.data):n)}ngOnInit(){this._setupStickyStyler(),this._viewportRuler.change().pipe(Bt(this._onDestroy)).subscribe(()=>{this._forceRecalculateCellWidths=!0})}ngAfterContentInit(){this._viewRepeater=this.recycleRows||this._virtualScrollEnabled()?new j6:new C8,this._virtualScrollEnabled()&&this._setupVirtualScrolling(this._virtualScrollViewport),this._hasInitialized=!0}ngAfterContentChecked(){this._canRender()&&this._render()}ngOnDestroy(){this._stickyStyler?.destroy(),[this._rowOutlet?.viewContainer,this._headerRowOutlet?.viewContainer,this._footerRowOutlet?.viewContainer,this._cachedRenderRowsMap,this._customColumnDefs,this._customRowDefs,this._customHeaderRowDefs,this._customFooterRowDefs,this._columnDefsByName].forEach(A=>{A?.clear()}),this._headerRowDefs=[],this._footerRowDefs=[],this._defaultRowDef=null,this._headerRowStickyUpdates.complete(),this._footerRowStickyUpdates.complete(),this._onDestroy.next(),this._onDestroy.complete(),B4(this.dataSource)&&this.dataSource.disconnect(this)}renderRows(){this._renderRows=this._getAllRenderRows();let A=this._dataDiffer.diff(this._renderRows);if(!A){this._updateNoDataRow(),this.contentChanged.next();return}let i=this._rowOutlet.viewContainer;this._viewRepeater.applyChanges(A,i,(n,o,a)=>this._getEmbeddedViewArgs(n.item,a),n=>n.item.data,n=>{n.operation===ac.INSERTED&&n.context&&this._renderCellTemplateForItem(n.record.item.rowDef,n.context)}),this._updateRowIndexContext(),A.forEachIdentityChange(n=>{let o=i.get(n.currentIndex);o.context.$implicit=n.item.data}),this._updateNoDataRow(),this.contentChanged.next(),this.updateStickyColumnStyles()}addColumnDef(A){this._customColumnDefs.add(A)}removeColumnDef(A){this._customColumnDefs.delete(A)}addRowDef(A){this._customRowDefs.add(A)}removeRowDef(A){this._customRowDefs.delete(A)}addHeaderRowDef(A){this._customHeaderRowDefs.add(A),this._headerRowDefChanged=!0}removeHeaderRowDef(A){this._customHeaderRowDefs.delete(A),this._headerRowDefChanged=!0}addFooterRowDef(A){this._customFooterRowDefs.add(A),this._footerRowDefChanged=!0}removeFooterRowDef(A){this._customFooterRowDefs.delete(A),this._footerRowDefChanged=!0}setNoDataRow(A){this._customNoDataRow=A}updateStickyHeaderRowStyles(){let A=this._getRenderedRows(this._headerRowOutlet);if(this._isNativeHtmlTable){let n=qsA(this._headerRowOutlet,"thead");n&&(n.style.display=A.length?"":"none")}let i=this._headerRowDefs.map(n=>n.sticky);this._stickyStyler.clearStickyPositioning(A,["top"]),this._stickyStyler.stickRows(A,i,"top"),this._headerRowDefs.forEach(n=>n.resetStickyChanged())}updateStickyFooterRowStyles(){let A=this._getRenderedRows(this._footerRowOutlet);if(this._isNativeHtmlTable){let n=qsA(this._footerRowOutlet,"tfoot");n&&(n.style.display=A.length?"":"none")}let i=this._footerRowDefs.map(n=>n.sticky);this._stickyStyler.clearStickyPositioning(A,["bottom"]),this._stickyStyler.stickRows(A,i,"bottom"),this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement,i),this._footerRowDefs.forEach(n=>n.resetStickyChanged())}updateStickyColumnStyles(){let A=this._getRenderedRows(this._headerRowOutlet),i=this._getRenderedRows(this._rowOutlet),n=this._getRenderedRows(this._footerRowOutlet);(this._isNativeHtmlTable&&!this.fixedLayout||this._stickyColumnStylesNeedReset)&&(this._stickyStyler.clearStickyPositioning([...A,...i,...n],["left","right"]),this._stickyColumnStylesNeedReset=!1),A.forEach((o,a)=>{this._addStickyColumnStyles([o],this._headerRowDefs[a])}),this._rowDefs.forEach(o=>{let a=[];for(let r=0;r{this._addStickyColumnStyles([o],this._footerRowDefs[a])}),Array.from(this._columnDefsByName.values()).forEach(o=>o.resetStickyChanged())}stickyColumnsUpdated(A){this._positionListener?.stickyColumnsUpdated(A)}stickyEndColumnsUpdated(A){this._positionListener?.stickyEndColumnsUpdated(A)}stickyHeaderRowsUpdated(A){this._headerRowStickyUpdates.next(A),this._positionListener?.stickyHeaderRowsUpdated(A)}stickyFooterRowsUpdated(A){this._footerRowStickyUpdates.next(A),this._positionListener?.stickyFooterRowsUpdated(A)}_outletAssigned(){!this._hasAllOutlets&&this._rowOutlet&&this._headerRowOutlet&&this._footerRowOutlet&&this._noDataRowOutlet&&(this._hasAllOutlets=!0,this._canRender()&&this._render())}_canRender(){return this._hasAllOutlets&&this._hasInitialized}_render(){this._cacheRowDefs(),this._cacheColumnDefs(),!this._headerRowDefs.length&&!this._footerRowDefs.length&&this._rowDefs.length;let i=this._renderUpdatedColumns()||this._headerRowDefChanged||this._footerRowDefChanged;this._stickyColumnStylesNeedReset=this._stickyColumnStylesNeedReset||i,this._forceRecalculateCellWidths=i,this._headerRowDefChanged&&(this._forceRenderHeaderRows(),this._headerRowDefChanged=!1),this._footerRowDefChanged&&(this._forceRenderFooterRows(),this._footerRowDefChanged=!1),this.dataSource&&this._rowDefs.length>0&&!this._renderChangeSubscription?this._observeRenderChanges():this._stickyColumnStylesNeedReset&&this.updateStickyColumnStyles(),this._checkStickyStates()}_getAllRenderRows(){if(!Array.isArray(this._data)||!this._renderedRange)return[];let A=[],i=Math.min(this._data.length,this._renderedRange.end),n=this._cachedRenderRowsMap;this._cachedRenderRowsMap=new Map;for(let o=this._renderedRange.start;o{let r=n&&n.has(a)?n.get(a):[];if(r.length){let s=r.shift();return s.dataIndex=i,s}else return{data:A,rowDef:a,dataIndex:i}})}_cacheColumnDefs(){this._columnDefsByName.clear(),_7(this._getOwnDefs(this._contentColumnDefs),this._customColumnDefs).forEach(i=>{this._columnDefsByName.has(i.name),this._columnDefsByName.set(i.name,i)})}_cacheRowDefs(){this._headerRowDefs=_7(this._getOwnDefs(this._contentHeaderRowDefs),this._customHeaderRowDefs),this._footerRowDefs=_7(this._getOwnDefs(this._contentFooterRowDefs),this._customFooterRowDefs),this._rowDefs=_7(this._getOwnDefs(this._contentRowDefs),this._customRowDefs);let A=this._rowDefs.filter(i=>!i.when);!this.multiTemplateDataRows&&A.length>1,this._defaultRowDef=A[0]}_renderUpdatedColumns(){let A=(a,r)=>{let s=!!r.getColumnsDiff();return a||s},i=this._rowDefs.reduce(A,!1);i&&this._forceRenderDataRows();let n=this._headerRowDefs.reduce(A,!1);n&&this._forceRenderHeaderRows();let o=this._footerRowDefs.reduce(A,!1);return o&&this._forceRenderFooterRows(),i||n||o}_switchDataSource(A){this._data=[],B4(this.dataSource)&&this.dataSource.disconnect(this),this._renderChangeSubscription&&(this._renderChangeSubscription.unsubscribe(),this._renderChangeSubscription=null),A||(this._dataDiffer&&this._dataDiffer.diff([]),this._rowOutlet&&this._rowOutlet.viewContainer.clear()),this._dataSource=A}_observeRenderChanges(){if(!this.dataSource)return;let A;B4(this.dataSource)?A=this.dataSource.connect(this):mB(this.dataSource)?A=this.dataSource:Array.isArray(this.dataSource)&&(A=se(this.dataSource)),this._renderChangeSubscription=cr([A,this.viewChange]).pipe(Bt(this._onDestroy)).subscribe(([i,n])=>{this._data=i||[],this._renderedRange=n,this._dataStream.next(i),this.renderRows()})}_forceRenderHeaderRows(){this._headerRowOutlet.viewContainer.length>0&&this._headerRowOutlet.viewContainer.clear(),this._headerRowDefs.forEach((A,i)=>this._renderRow(this._headerRowOutlet,A,i)),this.updateStickyHeaderRowStyles()}_forceRenderFooterRows(){this._footerRowOutlet.viewContainer.length>0&&this._footerRowOutlet.viewContainer.clear(),this._footerRowDefs.forEach((A,i)=>this._renderRow(this._footerRowOutlet,A,i)),this.updateStickyFooterRowStyles()}_addStickyColumnStyles(A,i){let n=Array.from(i?.columns||[]).map(r=>{let s=this._columnDefsByName.get(r);return s}),o=n.map(r=>r.sticky),a=n.map(r=>r.stickyEnd);this._stickyStyler.updateStickyColumns(A,o,a,!this.fixedLayout||this._forceRecalculateCellWidths)}_getRenderedRows(A){let i=[];for(let n=0;n!o.when||o.when(i,A));else{let o=this._rowDefs.find(a=>a.when&&a.when(i,A))||this._defaultRowDef;o&&n.push(o)}return n.length,n}_getEmbeddedViewArgs(A,i){let n=A.rowDef,o={$implicit:A.data};return{templateRef:n.template,context:o,index:i}}_renderRow(A,i,n,o={}){let a=A.viewContainer.createEmbeddedView(i.template,o,n);return this._renderCellTemplateForItem(i,o),a}_renderCellTemplateForItem(A,i){for(let n of this._getCellTemplates(A))EB.mostRecentCellOutlet&&EB.mostRecentCellOutlet._viewContainer.createEmbeddedView(n,i);this._changeDetectorRef.markForCheck()}_updateRowIndexContext(){let A=this._rowOutlet.viewContainer;for(let i=0,n=A.length;i{let n=this._columnDefsByName.get(i);return A.extractCellTemplate(n)})}_forceRenderDataRows(){this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear(),this.renderRows()}_checkStickyStates(){let A=(i,n)=>i||n.hasStickyChanged();this._headerRowDefs.reduce(A,!1)&&this.updateStickyHeaderRowStyles(),this._footerRowDefs.reduce(A,!1)&&this.updateStickyFooterRowStyles(),Array.from(this._columnDefsByName.values()).reduce(A,!1)&&(this._stickyColumnStylesNeedReset=!0,this.updateStickyColumnStyles())}_setupStickyStyler(){let A=this._dir?this._dir.value:"ltr",i=this._injector;this._stickyStyler=new sK(this._isNativeHtmlTable,this.stickyCssClass,this._platform.isBrowser,this.needsPositionStickyOnElement,A,this,i),(this._dir?this._dir.change:se()).pipe(Bt(this._onDestroy)).subscribe(n=>{this._stickyStyler.direction=n,this.updateStickyColumnStyles()})}_setupVirtualScrolling(A){let i=typeof requestAnimationFrame<"u"?uB:_b;this.viewChange.next({start:0,end:0}),A.renderedRangeStream.pipe(m1(0,i),Bt(this._onDestroy)).subscribe(this.viewChange),A.attach({dataStream:this._dataStream,measureRangeSize:(n,o)=>this._measureRangeSize(n,o)}),cr([A.renderedContentOffset,this._headerRowStickyUpdates]).pipe(Bt(this._onDestroy)).subscribe(([n,o])=>{if(!(!o.sizes||!o.offsets||!o.elements))for(let a=0;a{if(!(!o.sizes||!o.offsets||!o.elements))for(let a=0;a!i._table||i._table===this)}_updateNoDataRow(){let A=this._customNoDataRow||this._noDataRow;if(!A)return;let i=this._rowOutlet.viewContainer.length===0;if(i===this._isShowingNoDataRow)return;let n=this._noDataRowOutlet.viewContainer;if(i){let o=n.createEmbeddedView(A.templateRef),a=o.rootNodes[0];if(o.rootNodes.length===1&&a?.nodeType===this._document.ELEMENT_NODE){a.setAttribute("role","row"),a.classList.add(...A._contentClassNames);let r=a.querySelectorAll(A._cellSelector);for(let s=0;s=A.end||i!=="vertical")return 0;let n=this.viewChange.value,o=this._rowOutlet.viewContainer;A.startn.end;let a=A.start-n.start,r=A.end-A.start,s,g;for(let I=0;I-1;I--){let d=o.get(I+a);if(d&&d.rootNodes.length){g=d.rootNodes[d.rootNodes.length-1];break}}let l=s?.getBoundingClientRect?.(),C=g?.getBoundingClientRect?.();return l&&C?C.bottom-l.top:0}_virtualScrollEnabled(){return!this._disableVirtualScrolling&&this._virtualScrollViewport!=null}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-table"],["table","cdk-table",""]],contentQueries:function(i,n,o){if(i&1&&ua(o,XsA,5)(o,Wh,5)(o,U7,5)(o,Jm,5)(o,lK,5),i&2){let a;ce(a=Ce())&&(n._noDataRow=a.first),ce(a=Ce())&&(n._contentColumnDefs=a),ce(a=Ce())&&(n._contentRowDefs=a),ce(a=Ce())&&(n._contentHeaderRowDefs=a),ce(a=Ce())&&(n._contentFooterRowDefs=a)}},hostAttrs:[1,"cdk-table"],hostVars:2,hostBindings:function(i,n){i&2&&ae("cdk-table-fixed-layout",n.fixedLayout)},inputs:{trackBy:"trackBy",dataSource:"dataSource",multiTemplateDataRows:[2,"multiTemplateDataRows","multiTemplateDataRows",he],fixedLayout:[2,"fixedLayout","fixedLayout",he],recycleRows:[2,"recycleRows","recycleRows",he]},outputs:{contentChanged:"contentChanged"},exportAs:["cdkTable"],features:[It([{provide:Zc,useExisting:t},{provide:Um,useValue:null}])],ngContentSelectors:CHA,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(i,n){i&1&&(Ht(cHA),He(0),He(1,1),V(2,IHA,1,0),V(3,dHA,7,0)(4,BHA,4,0)),i&2&&(p(2),W(n._isServer?2:-1),p(),W(n._isNativeHtmlTable?3:4))},dependencies:[dK,IK,EK,BK],styles:[`.cdk-table-fixed-layout{table-layout:fixed} +`],encapsulation:2})}return t})();function _7(t,e){return t.concat(Array.from(e))}function qsA(t,e){let A=e.toUpperCase(),i=t.viewContainer.element.nativeElement;for(;i;){let n=i.nodeType===1?i.nodeName:null;if(n===A)return i;if(n==="TABLE")break;i=i.parentNode}return null}var QHA=[[["caption"]],[["colgroup"],["col"]],"*"],hHA=["caption","colgroup, col","*"];function uHA(t,e){t&1&&He(0,2)}function fHA(t,e){t&1&&(m(0,"thead",0),on(1,1),w(),m(2,"tbody",2),on(3,3)(4,4),w(),m(5,"tfoot",0),on(6,5),w())}function mHA(t,e){t&1&&on(0,1)(1,3)(2,4)(3,5)}var $sA=(()=>{class t extends QK{stickyCssClass="mat-mdc-table-sticky";needsPositionStickyOnElement=!1;static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-table"],["table","mat-table",""]],hostAttrs:[1,"mat-mdc-table","mdc-data-table__table"],hostVars:2,hostBindings:function(i,n){i&2&&ae("mat-table-fixed-layout",n.fixedLayout)},exportAs:["matTable"],features:[It([{provide:QK,useExisting:t},{provide:Zc,useExisting:t},{provide:Um,useValue:null}]),dt],ngContentSelectors:hHA,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["role","rowgroup",1,"mdc-data-table__content"],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(i,n){i&1&&(Ht(QHA),He(0),He(1,1),V(2,uHA,1,0),V(3,fHA,7,0)(4,mHA,4,0)),i&2&&(p(2),W(n._isServer?2:-1),p(),W(n._isNativeHtmlTable?3:4))},dependencies:[dK,IK,EK,BK],styles:[`.mat-mdc-table-sticky{position:sticky !important}mat-table{display:block}mat-header-row{min-height:var(--mat-table-header-container-height, 56px)}mat-row{min-height:var(--mat-table-row-item-container-height, 52px)}mat-footer-row{min-height:var(--mat-table-footer-container-height, 52px)}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}.mat-mdc-table{min-width:100%;border:0;border-spacing:0;table-layout:auto;white-space:normal;background-color:var(--mat-table-background-color, var(--mat-sys-surface))}.mat-table-fixed-layout{table-layout:fixed}.mdc-data-table__cell{box-sizing:border-box;overflow:hidden;text-align:start;text-overflow:ellipsis}.mdc-data-table__cell,.mdc-data-table__header-cell{padding:0 16px}.mat-mdc-header-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-header-container-height, 56px);color:var(--mat-table-header-headline-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-header-headline-font, var(--mat-sys-title-small-font, Roboto, sans-serif));line-height:var(--mat-table-header-headline-line-height, var(--mat-sys-title-small-line-height));font-size:var(--mat-table-header-headline-size, var(--mat-sys-title-small-size, 14px));font-weight:var(--mat-table-header-headline-weight, var(--mat-sys-title-small-weight, 500))}.mat-mdc-row{height:var(--mat-table-row-item-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)))}.mat-mdc-row,.mdc-data-table__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-table-row-item-label-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-row-item-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-table-row-item-label-text-size, var(--mat-sys-body-medium-size, 14px));font-weight:var(--mat-table-row-item-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-footer-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-footer-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-footer-supporting-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-footer-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-table-footer-supporting-text-size, var(--mat-sys-body-medium-size, 14px));font-weight:var(--mat-table-footer-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-table-footer-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mat-mdc-header-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-header-headline-tracking, var(--mat-sys-title-small-tracking));font-weight:inherit;line-height:inherit;box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:start}.mdc-data-table__row:last-child>.mat-mdc-header-cell{border-bottom:none}.mat-mdc-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking));line-height:inherit}.mdc-data-table__row:last-child>.mat-mdc-cell{border-bottom:none}.mat-mdc-footer-cell{letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking))}mat-row.mat-mdc-row,mat-header-row.mat-mdc-header-row,mat-footer-row.mat-mdc-footer-row{border-bottom:none}.mat-mdc-table tbody,.mat-mdc-table tfoot,.mat-mdc-table thead,.mat-mdc-cell,.mat-mdc-footer-cell,.mat-mdc-header-row,.mat-mdc-row,.mat-mdc-footer-row,.mat-mdc-table .mat-mdc-header-cell{background:inherit}.mat-mdc-table mat-header-row.mat-mdc-header-row,.mat-mdc-table mat-row.mat-mdc-row,.mat-mdc-table mat-footer-row.mat-mdc-footer-cell{height:unset}mat-header-cell.mat-mdc-header-cell,mat-cell.mat-mdc-cell,mat-footer-cell.mat-mdc-footer-cell{align-self:stretch} +`],encapsulation:2})}return t})(),AgA=(()=>{class t extends G7{static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matCellDef",""]],features:[It([{provide:G7,useExisting:t}]),dt]})}return t})(),egA=(()=>{class t extends K7{static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matHeaderCellDef",""]],features:[It([{provide:K7,useExisting:t}]),dt]})}return t})();var tgA=(()=>{class t extends Wh{get name(){return this._name}set name(A){this._setNameInput(A)}_updateColumnCssClassName(){super._updateColumnCssClassName(),this._columnCssClassName.push(`mat-column-${this.cssClassFriendlyName}`)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matColumnDef",""]],inputs:{name:[0,"matColumnDef","name"]},features:[It([{provide:Wh,useExisting:t},{provide:"MAT_SORT_HEADER_COLUMN_DEF",useExisting:t}]),dt]})}return t})(),igA=(()=>{class t extends WsA{static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["mat-header-cell"],["th","mat-header-cell",""]],hostAttrs:["role","columnheader",1,"mat-mdc-header-cell","mdc-data-table__header-cell"],features:[dt]})}return t})();var ngA=(()=>{class t extends ZsA{static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["mat-cell"],["td","mat-cell",""]],hostAttrs:[1,"mat-mdc-cell","mdc-data-table__cell"],features:[dt]})}return t})();var ogA=(()=>{class t extends Jm{static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matHeaderRowDef",""]],inputs:{columns:[0,"matHeaderRowDef","columns"],sticky:[2,"matHeaderRowDefSticky","sticky",he]},features:[It([{provide:Jm,useExisting:t}]),dt]})}return t})();var agA=(()=>{class t extends U7{static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matRowDef",""]],inputs:{columns:[0,"matRowDefColumns","columns"],when:[0,"matRowDefWhen","when"]},features:[It([{provide:U7,useExisting:t}]),dt]})}return t})(),rgA=(()=>{class t extends cK{static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-header-row"],["tr","mat-header-row",""]],hostAttrs:["role","row",1,"mat-mdc-header-row","mdc-data-table__header-row"],exportAs:["matHeaderRow"],features:[It([{provide:cK,useExisting:t}]),dt],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})();var sgA=(()=>{class t extends CK{static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-row"],["tr","mat-row",""]],hostAttrs:["role","row",1,"mat-mdc-row","mdc-data-table__row"],exportAs:["matRow"],features:[It([{provide:CK,useExisting:t}]),dt],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})();var pHA=9007199254740991,Ym=class extends d4{_data;_renderData=new Tt([]);_filter=new Tt("");_internalPageChanges=new $A;_renderChangesSubscription=null;filteredData;get data(){return this._data.value}set data(e){e=Array.isArray(e)?e:[],this._data.next(e),this._renderChangesSubscription||this._filterData(e)}get filter(){return this._filter.value}set filter(e){this._filter.next(e),this._renderChangesSubscription||this._filterData(this.data)}get sort(){return this._sort}set sort(e){this._sort=e,this._updateChangeSubscription()}_sort;get paginator(){return this._paginator}set paginator(e){this._paginator=e,this._updateChangeSubscription()}_paginator;sortingDataAccessor=(e,A)=>{let i=e[A];if(vp(i)){let n=Number(i);return n{let i=A.active,n=A.direction;return!i||n==""?e:e.sort((o,a)=>{let r=this.sortingDataAccessor(o,i),s=this.sortingDataAccessor(a,i),g=typeof r,l=typeof s;g!==l&&(g==="number"&&(r+=""),l==="number"&&(s+=""));let C=0;return r!=null&&s!=null?r>s?C=1:r{let i=A.trim().toLowerCase();return Object.values(e).some(n=>`${n}`.toLowerCase().includes(i))};constructor(e=[]){super(),this._data=new Tt(e),this._updateChangeSubscription()}_updateChangeSubscription(){let e=this._sort?hi(this._sort.sortChange,this._sort.initialized):se(null),A=this._paginator?hi(this._paginator.page,this._internalPageChanges,this._paginator.initialized):se(null),i=this._data,n=cr([i,this._filter]).pipe(fe(([r])=>this._filterData(r))),o=cr([n,e]).pipe(fe(([r])=>this._orderData(r))),a=cr([o,A]).pipe(fe(([r])=>this._pageData(r)));this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=a.subscribe(r=>this._renderData.next(r))}_filterData(e){return this.filteredData=this.filter==null||this.filter===""?e:e.filter(A=>this.filterPredicate(A,this.filter)),this.paginator&&this._updatePaginator(this.filteredData.length),this.filteredData}_orderData(e){return this.sort?this.sortData(e.slice(),this.sort):e}_pageData(e){if(!this.paginator)return e;let A=this.paginator.pageIndex*this.paginator.pageSize;return e.slice(A,A+this.paginator.pageSize)}_updatePaginator(e){Promise.resolve().then(()=>{let A=this.paginator;if(A&&(A.length=e,A.pageIndex>0)){let i=Math.ceil(A.length/A.pageSize)-1||0,n=Math.min(A.pageIndex,i);n!==A.pageIndex&&(A.pageIndex=n,this._internalPageChanges.next())}})}connect(){return this._renderChangesSubscription||this._updateChangeSubscription(),this._renderData}disconnect(){this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=null}};var ggA=[{metricName:"tool_trajectory_avg_score",threshold:1},{metricName:"response_match_score",threshold:.7}];var J7="0123456789abcdef",Y7=class t{constructor(e){this.bytes=e}static ofInner(e){if(e.length!==16)throw new TypeError("not 128-bit length");return new t(e)}static fromFieldsV7(e,A,i,n){if(!Number.isInteger(e)||!Number.isInteger(A)||!Number.isInteger(i)||!Number.isInteger(n)||e<0||A<0||i<0||n<0||e>0xffffffffffff||A>4095||i>1073741823||n>4294967295)throw new RangeError("invalid field value");let o=new Uint8Array(16);return o[0]=e/2**40,o[1]=e/2**32,o[2]=e/2**24,o[3]=e/2**16,o[4]=e/2**8,o[5]=e,o[6]=112|A>>>8,o[7]=A,o[8]=128|i>>>24,o[9]=i>>>16,o[10]=i>>>8,o[11]=i,o[12]=n>>>24,o[13]=n>>>16,o[14]=n>>>8,o[15]=n,new t(o)}static parse(e){var A,i,n,o;let a;switch(e.length){case 32:a=(A=/^[0-9a-f]{32}$/i.exec(e))===null||A===void 0?void 0:A[0];break;case 36:a=(i=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e))===null||i===void 0?void 0:i.slice(1,6).join("");break;case 38:a=(n=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(e))===null||n===void 0?void 0:n.slice(1,6).join("");break;case 45:a=(o=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e))===null||o===void 0?void 0:o.slice(1,6).join("");break;default:break}if(a){let r=new Uint8Array(16);for(let s=0;s<16;s+=4){let g=parseInt(a.substring(2*s,2*s+8),16);r[s+0]=g>>>24,r[s+1]=g>>>16,r[s+2]=g>>>8,r[s+3]=g}return new t(r)}else throw new SyntaxError("could not parse UUID string")}toString(){let e="";for(let A=0;A>>4),e+=J7.charAt(this.bytes[A]&15),(A===3||A===5||A===7||A===9)&&(e+="-");return e}toHex(){let e="";for(let A=0;A>>4),e+=J7.charAt(this.bytes[A]&15);return e}toJSON(){return this.toString()}getVariant(){let e=this.bytes[8]>>>4;if(e<0)throw new Error("unreachable");if(e<=7)return this.bytes.every(A=>A===0)?"NIL":"VAR_0";if(e<=11)return"VAR_10";if(e<=13)return"VAR_110";if(e<=15)return this.bytes.every(A=>A===255)?"MAX":"VAR_RESERVED";throw new Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new t(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(let A=0;A<16;A++){let i=this.bytes[A]-e.bytes[A];if(i!==0)return Math.sign(i)}return 0}},hK=class{constructor(e){this.timestamp_biased=0,this.counter=0,this.random=e??wHA()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(e,A){let i=this.generateOrAbortCore(e,A);return i===void 0&&(this.timestamp_biased=0,i=this.generateOrAbortCore(e,A)),i}generateOrAbortCore(e,A){if(!Number.isInteger(e)||e<0||e>0xffffffffffff)throw new RangeError("`unixTsMs` must be a 48-bit unsigned integer");if(A<0||A>0xffffffffffff)throw new RangeError("`rollbackAllowance` out of reasonable range");if(e++,e>this.timestamp_biased)this.timestamp_biased=e,this.resetCounter();else if(e+A>=this.timestamp_biased)this.counter++,this.counter>4398046511103&&(this.timestamp_biased++,this.resetCounter());else return;return Y7.fromFieldsV7(this.timestamp_biased-1,Math.trunc(this.counter/2**30),this.counter&2**30-1,this.random.nextUint32())}resetCounter(){this.counter=this.random.nextUint32()*1024+(this.random.nextUint32()&1023)}generateV4(){let e=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return e[6]=64|e[6]>>>4,e[8]=128|e[8]>>>2,Y7.ofInner(e)}},wHA=()=>{if(typeof crypto<"u"&&typeof crypto.getRandomValues<"u")return new uK;if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");return{nextUint32:()=>Math.trunc(Math.random()*65536)*65536+Math.trunc(Math.random()*65536)}},uK=class{constructor(){this.buffer=new Uint32Array(8),this.cursor=65535}nextUint32(){return this.cursor>=this.buffer.length&&(crypto.getRandomValues(this.buffer),this.cursor=0),this.buffer[this.cursor++]}},lgA;var T7=()=>DHA().toString(),DHA=()=>(lgA||(lgA=new hK)).generateV4();var H7=class t{evalService=h(Q0);data=h(ka);dialogRef=h(Po);newCaseId="case"+T7().slice(0,6);constructor(){}createNewEvalCase(){!this.newCaseId||this.newCaseId==""?alert("Cannot create eval set with empty id!"):this.evalService.addCurrentSession(this.data.appName,this.data.evalSetId,this.newCaseId,this.data.sessionId,this.data.userId).subscribe(e=>{this.dialogRef.close(!0)})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-add-eval-session-dialog"]],decls:11,vars:1,consts:[["mat-dialog-title",""],[2,"padding-left","20px","padding-right","24px"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1,"Add Current Session To Eval Set"),w(),m(2,"mat-dialog-content"),K(3,` Please enter the eval case name +`),w(),m(4,"mat-form-field",1)(5,"input",2),ho("ngModelChange",function(o){return ao(i.newCaseId,o)||(i.newCaseId=o),o}),eA("keydown.enter",function(){return i.createNewEvalCase()}),w()(),m(6,"mat-dialog-actions",3)(7,"button",4),K(8,"Cancel"),w(),m(9,"button",5),eA("click",function(){return i.createNewEvalCase()}),K(10,"Create"),w()()),A&2&&(p(5),Qo("ngModel",i.newCaseId))},dependencies:[Ua,yr,ta,Ka,Nn,uo,fo,ba,or,Fn,K2],styles:["h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;caret-color:var(--mdc-dialog-supporting-text-color)!important;background-color:transparent!important}html.darkmode [_nghost-%COMP%] .mat-mdc-text-field-wrapper{background-color:#3f3f42}"]})};var yHA={allEvalSetsHeader:"All eval sets",createNewEvalSetTooltip:"Create new evaluation set",createNewEvalSetTitle:"Create New Evaluation Set",evalSetDescription:"An evaluation set is a curated collection of evaluation cases, where each case includes input-output examples for assessing agent performance.",createEvalSetButton:"Create Evaluation Set",runEvaluationButton:"Run Evaluation",viewEvalRunHistoryTooltip:"View eval run history",caseIdHeader:"Case ID",resultHeader:"Result",viewEvalRunResultTooltip:"View eval run result",passStatus:"Pass",failStatus:"Fail",passStatusCaps:"PASS",failStatusCaps:"FAIL",passedSuffix:"Passed",failedSuffix:"Failed",addSessionToSetButtonPrefix:"Add current session to"},cgA=new yA("Eval Tab Messages",{factory:()=>yHA});var z7=class t{evalService=h(Q0);data=h(ka);dialogRef=h(Po);newSetId="evalset"+T7().slice(0,6);constructor(){}createNewEvalSet(){!this.newSetId||this.newSetId==""?alert("Cannot create eval set with empty id!"):this.evalService.createNewEvalSet(this.data.appName,this.newSetId).subscribe(e=>{this.dialogRef.close(!0)})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-new-eval-set-dialog-component"]],decls:11,vars:1,consts:[["mat-dialog-title",""],[2,"padding-left","20px","padding-right","24px"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1,"Create New Eval Set"),w(),m(2,"mat-dialog-content"),K(3,` Please enter the eval set name +`),w(),m(4,"mat-form-field",1)(5,"input",2),ho("ngModelChange",function(o){return ao(i.newSetId,o)||(i.newSetId=o),o}),eA("keydown.enter",function(){return i.createNewEvalSet()}),w()(),m(6,"mat-dialog-actions",3)(7,"button",4),K(8,"Cancel"),w(),m(9,"button",5),eA("click",function(){return i.createNewEvalSet()}),K(10,"Create"),w()()),A&2&&(p(5),Qo("ngModel",i.newSetId))},dependencies:[Ua,yr,ta,Ka,Nn,uo,fo,ba,or,Fn,K2],styles:["h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;caret-color:var(--mdc-dialog-supporting-text-color)!important;background-color:transparent!important}[_nghost-%COMP%] .mat-mdc-text-field-wrapper{background-color:#3f3f42}"]})};var vHA=["knob"],bHA=["valueIndicatorContainer"];function MHA(t,e){if(t&1&&(m(0,"div",2,1)(2,"div",5)(3,"span",6),K(4),w()()()),t&2){let A=v();p(4),qA(A.valueIndicatorText)}}var kHA=["trackActive"],SHA=["*"];function xHA(t,e){if(t&1&&GA(0,"div"),t&2){let A=e.$implicit,i=e.$index,n=v(3);zo(A===0?"mdc-slider__tick-mark--active":"mdc-slider__tick-mark--inactive"),wn("transform",n._calcTickMarkTransform(i))}}function RHA(t,e){if(t&1&&Ut(0,xHA,1,4,"div",8,wB),t&2){let A=v(2);Jt(A._tickMarks)}}function NHA(t,e){if(t&1&&(m(0,"div",6,1),V(2,RHA,2,0),w()),t&2){let A=v();p(2),W(A._cachedWidth?2:-1)}}function FHA(t,e){if(t&1&&GA(0,"mat-slider-visual-thumb",7),t&2){let A=v();AA("discrete",A.discrete)("thumbPosition",1)("valueIndicatorText",A.startValueIndicatorText)}}var pi=(function(t){return t[t.START=1]="START",t[t.END=2]="END",t})(pi||{}),Zh=(function(t){return t[t.ACTIVE=0]="ACTIVE",t[t.INACTIVE=1]="INACTIVE",t})(Zh||{}),fK=new yA("_MatSlider"),CgA=new yA("_MatSliderThumb"),_HA=new yA("_MatSliderRangeThumb"),IgA=new yA("_MatSliderVisualThumb");var LHA=(()=>{class t{_cdr=h(mt);_ngZone=h(Oe);_slider=h(fK);_renderer=h(Fi);_listenerCleanups;discrete=!1;thumbPosition;valueIndicatorText;_ripple;_knob;_valueIndicatorContainer;_sliderInput;_sliderInputEl;_hoverRippleRef;_focusRippleRef;_activeRippleRef;_isHovered=!1;_isActive=!1;_isValueIndicatorVisible=!1;_hostElement=h(ge).nativeElement;_platform=h(Ii);constructor(){}ngAfterViewInit(){let A=this._slider._getInput(this.thumbPosition);A&&(this._ripple.radius=24,this._sliderInput=A,this._sliderInputEl=this._sliderInput._hostElement,this._ngZone.runOutsideAngular(()=>{let i=this._sliderInputEl,n=this._renderer;this._listenerCleanups=[n.listen(i,"pointermove",this._onPointerMove),n.listen(i,"pointerdown",this._onDragStart),n.listen(i,"pointerup",this._onDragEnd),n.listen(i,"pointerleave",this._onMouseLeave),n.listen(i,"focus",this._onFocus),n.listen(i,"blur",this._onBlur)]}))}ngOnDestroy(){this._listenerCleanups?.forEach(A=>A())}_onPointerMove=A=>{if(this._sliderInput._isFocused)return;let i=this._hostElement.getBoundingClientRect(),n=this._slider._isCursorOnSliderThumb(A,i);this._isHovered=n,n?this._showHoverRipple():this._hideRipple(this._hoverRippleRef)};_onMouseLeave=()=>{this._isHovered=!1,this._hideRipple(this._hoverRippleRef)};_onFocus=()=>{this._hideRipple(this._hoverRippleRef),this._showFocusRipple(),this._hostElement.classList.add("mdc-slider__thumb--focused")};_onBlur=()=>{this._isActive||this._hideRipple(this._focusRippleRef),this._isHovered&&this._showHoverRipple(),this._hostElement.classList.remove("mdc-slider__thumb--focused")};_onDragStart=A=>{A.button===0&&(this._isActive=!0,this._showActiveRipple())};_onDragEnd=()=>{this._isActive=!1,this._hideRipple(this._activeRippleRef),this._sliderInput._isFocused||this._hideRipple(this._focusRippleRef),this._platform.SAFARI&&this._showHoverRipple()};_showHoverRipple(){this._isShowingRipple(this._hoverRippleRef)||(this._hoverRippleRef=this._showRipple({enterDuration:0,exitDuration:0}),this._hoverRippleRef?.element.classList.add("mat-mdc-slider-hover-ripple"))}_showFocusRipple(){this._isShowingRipple(this._focusRippleRef)||(this._focusRippleRef=this._showRipple({enterDuration:0,exitDuration:0},!0),this._focusRippleRef?.element.classList.add("mat-mdc-slider-focus-ripple"))}_showActiveRipple(){this._isShowingRipple(this._activeRippleRef)||(this._activeRippleRef=this._showRipple({enterDuration:225,exitDuration:400}),this._activeRippleRef?.element.classList.add("mat-mdc-slider-active-ripple"))}_isShowingRipple(A){return A?.state===Ns.FADING_IN||A?.state===Ns.VISIBLE}_showRipple(A,i){if(!this._slider.disabled&&(this._showValueIndicator(),this._slider._isRange&&this._slider._getThumb(this.thumbPosition===pi.START?pi.END:pi.START)._showValueIndicator(),!(this._slider._globalRippleOptions?.disabled&&!i)))return this._ripple.launch({animation:this._slider._noopAnimations?{enterDuration:0,exitDuration:0}:A,centered:!0,persistent:!0})}_hideRipple(A){if(A?.fadeOut(),this._isShowingAnyRipple())return;this._slider._isRange||this._hideValueIndicator();let i=this._getSibling();i._isShowingAnyRipple()||(this._hideValueIndicator(),i._hideValueIndicator())}_showValueIndicator(){this._hostElement.classList.add("mdc-slider__thumb--with-indicator")}_hideValueIndicator(){this._hostElement.classList.remove("mdc-slider__thumb--with-indicator")}_getSibling(){return this._slider._getThumb(this.thumbPosition===pi.START?pi.END:pi.START)}_getValueIndicatorContainer(){return this._valueIndicatorContainer?.nativeElement}_getKnob(){return this._knob.nativeElement}_isShowingAnyRipple(){return this._isShowingRipple(this._hoverRippleRef)||this._isShowingRipple(this._focusRippleRef)||this._isShowingRipple(this._activeRippleRef)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-slider-visual-thumb"]],viewQuery:function(i,n){if(i&1&&ai(ig,5)(vHA,5)(bHA,5),i&2){let o;ce(o=Ce())&&(n._ripple=o.first),ce(o=Ce())&&(n._knob=o.first),ce(o=Ce())&&(n._valueIndicatorContainer=o.first)}},hostAttrs:[1,"mdc-slider__thumb","mat-mdc-slider-visual-thumb"],inputs:{discrete:"discrete",thumbPosition:"thumbPosition",valueIndicatorText:"valueIndicatorText"},features:[It([{provide:IgA,useExisting:t}])],decls:4,vars:2,consts:[["knob",""],["valueIndicatorContainer",""],[1,"mdc-slider__value-indicator-container"],[1,"mdc-slider__thumb-knob"],["matRipple","",1,"mat-focus-indicator",3,"matRippleDisabled"],[1,"mdc-slider__value-indicator"],[1,"mdc-slider__value-indicator-text"]],template:function(i,n){i&1&&(V(0,MHA,5,1,"div",2),GA(1,"div",3,0)(3,"div",4)),i&2&&(W(n.discrete?0:-1),p(3),AA("matRippleDisabled",!0))},dependencies:[ig],styles:[`.mat-mdc-slider-visual-thumb .mat-ripple{height:100%;width:100%}.mat-mdc-slider .mdc-slider__tick-marks{justify-content:start}.mat-mdc-slider .mdc-slider__tick-marks .mdc-slider__tick-mark--active,.mat-mdc-slider .mdc-slider__tick-marks .mdc-slider__tick-mark--inactive{position:absolute;left:2px} +`],encapsulation:2,changeDetection:0})}return t})(),dgA=(()=>{class t{_ngZone=h(Oe);_cdr=h(mt);_elementRef=h(ge);_dir=h(xo,{optional:!0});_globalRippleOptions=h(k2,{optional:!0});_trackActive;_thumbs;_input;_inputs;get disabled(){return this._disabled}set disabled(A){this._disabled=A;let i=this._getInput(pi.END),n=this._getInput(pi.START);i&&(i.disabled=this._disabled),n&&(n.disabled=this._disabled)}_disabled=!1;get discrete(){return this._discrete}set discrete(A){this._discrete=A,this._updateValueIndicatorUIs()}_discrete=!1;get showTickMarks(){return this._showTickMarks}set showTickMarks(A){this._showTickMarks=A,this._hasViewInitialized&&(this._updateTickMarkUI(),this._updateTickMarkTrackUI())}_showTickMarks=!1;get min(){return this._min}set min(A){let i=A==null||isNaN(A)?this._min:A;this._min!==i&&this._updateMin(i)}_min=0;color;disableRipple=!1;_updateMin(A){let i=this._min;this._min=A,this._isRange?this._updateMinRange({old:i,new:A}):this._updateMinNonRange(A),this._onMinMaxOrStepChange()}_updateMinRange(A){let i=this._getInput(pi.END),n=this._getInput(pi.START),o=i.value,a=n.value;n.min=A.new,i.min=Math.max(A.new,n.value),n.max=Math.min(i.max,i.value),n._updateWidthInactive(),i._updateWidthInactive(),A.newA.old?this._onTranslateXChangeBySideEffect(n,i):this._onTranslateXChangeBySideEffect(i,n),o!==i.value&&this._onValueChange(i),a!==n.value&&this._onValueChange(n)}_updateMaxNonRange(A){let i=this._getInput(pi.END);if(i){let n=i.value;i.max=A,i._updateThumbUIByValue(),this._updateTrackUI(i),n!==i.value&&this._onValueChange(i)}}get step(){return this._step}set step(A){let i=isNaN(A)?this._step:A;this._step!==i&&this._updateStep(i)}_step=1;_updateStep(A){this._step=A,this._isRange?this._updateStepRange():this._updateStepNonRange(),this._onMinMaxOrStepChange()}_updateStepRange(){let A=this._getInput(pi.END),i=this._getInput(pi.START),n=A.value,o=i.value,a=i.value;A.min=this._min,i.max=this._max,A.step=this._step,i.step=this._step,this._platform.SAFARI&&(A.value=A.value,i.value=i.value),A.min=Math.max(this._min,i.value),i.max=Math.min(this._max,A.value),i._updateWidthInactive(),A._updateWidthInactive(),A.value`${A}`;_tickMarks;_noopAnimations=qi();_dirChangeSubscription;_resizeObserver=null;_cachedWidth;_cachedLeft;_rippleRadius=24;startValueIndicatorText="";endValueIndicatorText="";_endThumbTransform;_startThumbTransform;_isRange=!1;_isRtl=!1;_hasViewInitialized=!1;_tickMarkTrackWidth=0;_hasAnimation=!1;_resizeTimer=null;_platform=h(Ii);constructor(){h(Xn).load(Ir),this._dir&&(this._dirChangeSubscription=this._dir.change.subscribe(()=>this._onDirChange()),this._isRtl=this._dir.value==="rtl")}_knobRadius=8;_inputPadding;ngAfterViewInit(){this._platform.isBrowser&&this._updateDimensions();let A=this._getInput(pi.END),i=this._getInput(pi.START);this._isRange=!!A&&!!i,this._cdr.detectChanges();let n=this._getThumb(pi.END);this._rippleRadius=n._ripple.radius,this._inputPadding=this._rippleRadius-this._knobRadius,this._isRange?this._initUIRange(A,i):this._initUINonRange(A),this._updateTrackUI(A),this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._observeHostResize(),this._cdr.detectChanges()}_initUINonRange(A){A.initProps(),A.initUI(),this._updateValueIndicatorUI(A),this._hasViewInitialized=!0,A._updateThumbUIByValue()}_initUIRange(A,i){A.initProps(),A.initUI(),i.initProps(),i.initUI(),A._updateMinMax(),i._updateMinMax(),A._updateStaticStyles(),i._updateStaticStyles(),this._updateValueIndicatorUIs(),this._hasViewInitialized=!0,A._updateThumbUIByValue(),i._updateThumbUIByValue()}ngOnDestroy(){this._dirChangeSubscription?.unsubscribe(),this._resizeObserver?.disconnect(),this._resizeObserver=null}_onDirChange(){this._isRtl=this._dir?.value==="rtl",this._isRange?this._onDirChangeRange():this._onDirChangeNonRange(),this._updateTickMarkUI()}_onDirChangeRange(){let A=this._getInput(pi.END),i=this._getInput(pi.START);A._setIsLeftThumb(),i._setIsLeftThumb(),A.translateX=A._calcTranslateXByValue(),i.translateX=i._calcTranslateXByValue(),A._updateStaticStyles(),i._updateStaticStyles(),A._updateWidthInactive(),i._updateWidthInactive(),A._updateThumbUIByValue(),i._updateThumbUIByValue()}_onDirChangeNonRange(){this._getInput(pi.END)._updateThumbUIByValue()}_observeHostResize(){typeof ResizeObserver>"u"||!ResizeObserver||this._ngZone.runOutsideAngular(()=>{this._resizeObserver=new ResizeObserver(()=>{this._isActive()||(this._resizeTimer&&clearTimeout(this._resizeTimer),this._onResize())}),this._resizeObserver.observe(this._elementRef.nativeElement)})}_isActive(){return this._getThumb(pi.START)._isActive||this._getThumb(pi.END)._isActive}_getValue(A=pi.END){let i=this._getInput(A);return i?i.value:this.min}_skipUpdate(){return!!(this._getInput(pi.START)?._skipUIUpdate||this._getInput(pi.END)?._skipUIUpdate)}_updateDimensions(){this._cachedWidth=this._elementRef.nativeElement.offsetWidth,this._cachedLeft=this._elementRef.nativeElement.getBoundingClientRect().left}_setTrackActiveStyles(A){let i=this._trackActive.nativeElement.style;i.left=A.left,i.right=A.right,i.transformOrigin=A.transformOrigin,i.transform=A.transform}_calcTickMarkTransform(A){let i=A*(this._tickMarkTrackWidth/(this._tickMarks.length-1));return`translateX(${this._isRtl?this._cachedWidth-6-i:i}px)`}_onTranslateXChange(A){this._hasViewInitialized&&(this._updateThumbUI(A),this._updateTrackUI(A),this._updateOverlappingThumbUI(A))}_onTranslateXChangeBySideEffect(A,i){this._hasViewInitialized&&(A._updateThumbUIByValue(),i._updateThumbUIByValue())}_onValueChange(A){this._hasViewInitialized&&(this._updateValueIndicatorUI(A),this._updateTickMarkUI(),this._cdr.detectChanges())}_onMinMaxOrStepChange(){this._hasViewInitialized&&(this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._cdr.markForCheck())}_onResize(){if(this._hasViewInitialized){if(this._updateDimensions(),this._isRange){let A=this._getInput(pi.END),i=this._getInput(pi.START);A._updateThumbUIByValue(),i._updateThumbUIByValue(),A._updateStaticStyles(),i._updateStaticStyles(),A._updateMinMax(),i._updateMinMax(),A._updateWidthInactive(),i._updateWidthInactive()}else{let A=this._getInput(pi.END);A&&A._updateThumbUIByValue()}this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._cdr.detectChanges()}}_thumbsOverlap=!1;_areThumbsOverlapping(){let A=this._getInput(pi.START),i=this._getInput(pi.END);return!A||!i?!1:i.translateX-A.translateX<20}_updateOverlappingThumbClassNames(A){let i=A.getSibling(),n=this._getThumb(A.thumbPosition);this._getThumb(i.thumbPosition)._hostElement.classList.remove("mdc-slider__thumb--top"),n._hostElement.classList.toggle("mdc-slider__thumb--top",this._thumbsOverlap)}_updateOverlappingThumbUI(A){!this._isRange||this._skipUpdate()||this._thumbsOverlap!==this._areThumbsOverlapping()&&(this._thumbsOverlap=!this._thumbsOverlap,this._updateOverlappingThumbClassNames(A))}_updateThumbUI(A){if(this._skipUpdate())return;let i=this._getThumb(A.thumbPosition===pi.END?pi.END:pi.START);i._hostElement.style.transform=`translateX(${A.translateX}px)`}_updateValueIndicatorUI(A){if(this._skipUpdate())return;let i=this.displayWith(A.value);if(this._hasViewInitialized?A._valuetext.set(i):A._hostElement.setAttribute("aria-valuetext",i),this.discrete){A.thumbPosition===pi.START?this.startValueIndicatorText=i:this.endValueIndicatorText=i;let n=this._getThumb(A.thumbPosition);i.length<3?n._hostElement.classList.add("mdc-slider__thumb--short-value"):n._hostElement.classList.remove("mdc-slider__thumb--short-value")}}_updateValueIndicatorUIs(){let A=this._getInput(pi.END),i=this._getInput(pi.START);A&&this._updateValueIndicatorUI(A),i&&this._updateValueIndicatorUI(i)}_updateTickMarkTrackUI(){if(!this.showTickMarks||this._skipUpdate())return;let A=this._step&&this._step>0?this._step:1,n=(Math.floor(this.max/A)*A-this.min)/(this.max-this.min);this._tickMarkTrackWidth=(this._cachedWidth-6)*n}_updateTrackUI(A){this._skipUpdate()||(this._isRange?this._updateTrackUIRange(A):this._updateTrackUINonRange(A))}_updateTrackUIRange(A){let i=A.getSibling();if(!i||!this._cachedWidth)return;let n=Math.abs(i.translateX-A.translateX)/this._cachedWidth;A._isLeftThumb&&this._cachedWidth?this._setTrackActiveStyles({left:"auto",right:`${this._cachedWidth-i.translateX}px`,transformOrigin:"right",transform:`scaleX(${n})`}):this._setTrackActiveStyles({left:`${i.translateX}px`,right:"auto",transformOrigin:"left",transform:`scaleX(${n})`})}_updateTrackUINonRange(A){this._isRtl?this._setTrackActiveStyles({left:"auto",right:"0px",transformOrigin:"right",transform:`scaleX(${1-A.fillPercentage})`}):this._setTrackActiveStyles({left:"0px",right:"auto",transformOrigin:"left",transform:`scaleX(${A.fillPercentage})`})}_updateTickMarkUI(){if(!this.showTickMarks||this.step===void 0||this.min===void 0||this.max===void 0)return;let A=this.step>0?this.step:1;this._isRange?this._updateTickMarkUIRange(A):this._updateTickMarkUINonRange(A)}_updateTickMarkUINonRange(A){let i=this._getValue(),n=Math.max(Math.round((i-this.min)/A),0)+1,o=Math.max(Math.round((this.max-i)/A),0)-1;this._isRtl?n++:o++,this._tickMarks=Array(n).fill(Zh.ACTIVE).concat(Array(o).fill(Zh.INACTIVE))}_updateTickMarkUIRange(A){let i=this._getValue(),n=this._getValue(pi.START),o=Math.max(Math.round((n-this.min)/A),0),a=Math.max(Math.round((i-n)/A)+1,0),r=Math.max(Math.round((this.max-i)/A),0);this._tickMarks=Array(o).fill(Zh.INACTIVE).concat(Array(a).fill(Zh.ACTIVE),Array(r).fill(Zh.INACTIVE))}_getInput(A){if(A===pi.END&&this._input)return this._input;if(this._inputs?.length)return A===pi.START?this._inputs.first:this._inputs.last}_getThumb(A){return A===pi.END?this._thumbs?.last:this._thumbs?.first}_setTransition(A){this._hasAnimation=!this._platform.IOS&&A&&!this._noopAnimations,this._elementRef.nativeElement.classList.toggle("mat-mdc-slider-with-animation",this._hasAnimation)}_isCursorOnSliderThumb(A,i){let n=i.width/2,o=i.x+n,a=i.y+n,r=A.clientX-o,s=A.clientY-a;return Math.pow(r,2)+Math.pow(s,2)mK),multi:!0};var mK=(()=>{class t{_ngZone=h(Oe);_elementRef=h(ge);_cdr=h(mt);_slider=h(fK);_platform=h(Ii);_listenerCleanups;get value(){return en(this._hostElement.value,0)}set value(A){A===null&&(A=this._getDefaultValue()),A=isNaN(A)?0:A;let i=A+"";if(!this._hasSetInitialValue){this._initialValue=i;return}this._isActive||this._setValue(i)}_setValue(A){this._hostElement.value=A,this._updateThumbUIByValue(),this._slider._onValueChange(this),this._cdr.detectChanges(),this._slider._cdr.markForCheck()}valueChange=new WA;dragStart=new WA;dragEnd=new WA;get translateX(){return this._slider.min>=this._slider.max?(this._translateX=this._tickMarkOffset,this._translateX):(this._translateX===void 0&&(this._translateX=this._calcTranslateXByValue()),this._translateX)}set translateX(A){this._translateX=A}_translateX;thumbPosition=pi.END;get min(){return en(this._hostElement.min,0)}set min(A){this._hostElement.min=A+"",this._cdr.detectChanges()}get max(){return en(this._hostElement.max,0)}set max(A){this._hostElement.max=A+"",this._cdr.detectChanges()}get step(){return en(this._hostElement.step,0)}set step(A){this._hostElement.step=A+"",this._cdr.detectChanges()}get disabled(){return he(this._hostElement.disabled)}set disabled(A){this._hostElement.disabled=A,this._cdr.detectChanges(),this._slider.disabled!==this.disabled&&(this._slider.disabled=this.disabled)}get percentage(){return this._slider.min>=this._slider.max?this._slider._isRtl?1:0:(this.value-this._slider.min)/(this._slider.max-this._slider.min)}get fillPercentage(){return this._slider._cachedWidth?this._translateX===0?0:this.translateX/this._slider._cachedWidth:this._slider._isRtl?1:0}_hostElement=this._elementRef.nativeElement;_valuetext=jA("");_knobRadius=8;_tickMarkOffset=3;_isActive=!1;_isFocused=!1;_setIsFocused(A){this._isFocused=A}_hasSetInitialValue=!1;_initialValue;_formControl;_destroyed=new $A;_skipUIUpdate=!1;_onChangeFn;_onTouchedFn=()=>{};_isControlInitialized=!1;constructor(){let A=h(Fi);this._ngZone.runOutsideAngular(()=>{this._listenerCleanups=[A.listen(this._hostElement,"pointerdown",this._onPointerDown.bind(this)),A.listen(this._hostElement,"pointermove",this._onPointerMove.bind(this)),A.listen(this._hostElement,"pointerup",this._onPointerUp.bind(this))]})}ngOnDestroy(){this._listenerCleanups.forEach(A=>A()),this._destroyed.next(),this._destroyed.complete(),this.dragStart.complete(),this.dragEnd.complete()}initProps(){this._updateWidthInactive(),this.disabled!==this._slider.disabled&&(this._slider.disabled=!0),this.step=this._slider.step,this.min=this._slider.min,this.max=this._slider.max,this._initValue()}initUI(){this._updateThumbUIByValue()}_initValue(){this._hasSetInitialValue=!0,this._initialValue===void 0?this.value=this._getDefaultValue():(this._hostElement.value=this._initialValue,this._updateThumbUIByValue(),this._slider._onValueChange(this),this._cdr.detectChanges())}_getDefaultValue(){return this.min}_onBlur(){this._setIsFocused(!1),this._onTouchedFn()}_onFocus(){this._slider._setTransition(!1),this._slider._updateTrackUI(this),this._setIsFocused(!0)}_onChange(){this.valueChange.emit(this.value),this._isActive&&this._updateThumbUIByValue({withAnimation:!0})}_onInput(){this._onChangeFn?.(this.value),(this._slider.step||!this._isActive)&&this._updateThumbUIByValue({withAnimation:!0}),this._slider._onValueChange(this)}_onNgControlValueChange(){(!this._isActive||!this._isFocused)&&(this._slider._onValueChange(this),this._updateThumbUIByValue()),this._slider.disabled=this._formControl.disabled}_onPointerDown(A){if(!(this.disabled||A.button!==0)){if(this._platform.IOS){let i=this._slider._isCursorOnSliderThumb(A,this._slider._getThumb(this.thumbPosition)._hostElement.getBoundingClientRect());this._isActive=i,this._updateWidthActive(),this._slider._updateDimensions();return}this._isActive=!0,this._setIsFocused(!0),this._updateWidthActive(),this._slider._updateDimensions(),this._slider.step||this._updateThumbUIByPointerEvent(A,{withAnimation:!0}),this.disabled||(this._handleValueCorrection(A),this.dragStart.emit({source:this,parent:this._slider,value:this.value}))}}_handleValueCorrection(A){this._skipUIUpdate=!0,setTimeout(()=>{this._skipUIUpdate=!1,this._fixValue(A)},0)}_fixValue(A){let i=A.clientX-this._slider._cachedLeft,n=this._slider._cachedWidth,o=this._slider.step===0?1:this._slider.step,a=Math.floor((this._slider.max-this._slider.min)/o),r=this._slider._isRtl?1-i/n:i/n,g=Math.round(r*a)/a*(this._slider.max-this._slider.min)+this._slider.min,l=Math.round(g/o)*o,C=this.value;if(l===C){this._slider._onValueChange(this),this._slider.step>0?this._updateThumbUIByValue():this._updateThumbUIByPointerEvent(A,{withAnimation:this._slider._hasAnimation});return}this.value=l,this.valueChange.emit(this.value),this._onChangeFn?.(this.value),this._slider._onValueChange(this),this._slider.step>0?this._updateThumbUIByValue():this._updateThumbUIByPointerEvent(A,{withAnimation:this._slider._hasAnimation})}_onPointerMove(A){!this._slider.step&&this._isActive&&this._updateThumbUIByPointerEvent(A)}_onPointerUp(){this._isActive&&(this._isActive=!1,this._platform.SAFARI&&this._setIsFocused(!1),this.dragEnd.emit({source:this,parent:this._slider,value:this.value}),setTimeout(()=>this._updateWidthInactive(),this._platform.IOS?10:0))}_clamp(A){let i=this._tickMarkOffset,n=this._slider._cachedWidth-this._tickMarkOffset;return Math.max(Math.min(A,n),i)}_calcTranslateXByValue(){return this._slider._isRtl?(1-this.percentage)*(this._slider._cachedWidth-this._tickMarkOffset*2)+this._tickMarkOffset:this.percentage*(this._slider._cachedWidth-this._tickMarkOffset*2)+this._tickMarkOffset}_calcTranslateXByPointerEvent(A){return A.clientX-this._slider._cachedLeft}_updateWidthActive(){}_updateWidthInactive(){this._hostElement.style.padding=`0 ${this._slider._inputPadding}px`,this._hostElement.style.width=`calc(100% + ${this._slider._inputPadding-this._tickMarkOffset*2}px)`,this._hostElement.style.left=`-${this._slider._rippleRadius-this._tickMarkOffset}px`}_updateThumbUIByValue(A){this.translateX=this._clamp(this._calcTranslateXByValue()),this._updateThumbUI(A)}_updateThumbUIByPointerEvent(A,i){this.translateX=this._clamp(this._calcTranslateXByPointerEvent(A)),this._updateThumbUI(i)}_updateThumbUI(A){this._slider._setTransition(!!A?.withAnimation),this._slider._onTranslateXChange(this)}writeValue(A){(this._isControlInitialized||A!==null)&&(this.value=A)}registerOnChange(A){this._onChangeFn=A,this._isControlInitialized=!0}registerOnTouched(A){this._onTouchedFn=A}setDisabledState(A){this.disabled=A}focus(){this._hostElement.focus()}blur(){this._hostElement.blur()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["input","matSliderThumb",""]],hostAttrs:["type","range",1,"mdc-slider__input"],hostVars:1,hostBindings:function(i,n){i&1&&eA("change",function(){return n._onChange()})("input",function(){return n._onInput()})("blur",function(){return n._onBlur()})("focus",function(){return n._onFocus()}),i&2&&ie("aria-valuetext",n._valuetext())},inputs:{value:[2,"value","value",en]},outputs:{valueChange:"valueChange",dragStart:"dragStart",dragEnd:"dragEnd"},exportAs:["matSliderThumb"],features:[It([GHA,{provide:CgA,useExisting:t}])]})}return t})();var O7=class t{constructor(e,A,i){this.dialogRef=e;this.fb=A;this.data=i;this.evalMetrics=this.data.evalMetrics,this.evalForm=this.fb.group({tool_trajectory_avg_score_threshold:[this.getEvalMetricThresholdFromData("tool_trajectory_avg_score"),[Ag.required,Ag.min(0),Ag.max(1)]],response_match_score_threshold:[this.getEvalMetricThresholdFromData("response_match_score"),[Ag.required,Ag.min(0),Ag.max(1)]]})}evalForm;evalMetrics=[];getEvalMetricThresholdFromData(e){return this.evalMetrics.find(A=>A.metricName===e)?.threshold??0}onStart(){if(this.evalForm.valid){let{tool_trajectory_avg_score_threshold:e,response_match_score_threshold:A}=this.evalForm.value;for(let i of this.evalMetrics)i.metricName==="tool_trajectory_avg_score"?i.threshold=e:i.metricName==="response_match_score"&&(i.threshold=A);this.dialogRef.close(this.evalMetrics)}}onCancel(){this.dialogRef.close(null)}static \u0275fac=function(A){return new(A||t)(Ct(Po),Ct(hJ),Ct(ka))};static \u0275cmp=kA({type:t,selectors:[["app-run-eval-config-dialog"]],decls:26,vars:3,consts:[[1,"dialog-container"],["mat-dialog-title","",1,"dialog-title"],[1,"eval-form",3,"formGroup"],[1,"metric-row"],[1,"metric-name"],[1,"flex-1","pl-4"],["min","0","max","1","step","0.1","thumbLabel","",1,"threshold-slider"],["matSliderThumb","","formControlName","tool_trajectory_avg_score_threshold"],[1,"threshold-value"],["matSliderThumb","","formControlName","response_match_score_threshold"],["align","end",1,"dialog-actions"],["mat-button","",1,"cancel-button",3,"click"],["mat-button","",1,"save-button",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"h2",1),K(2,"EVALUATION METRIC"),w(),m(3,"mat-dialog-content")(4,"form",2)(5,"div",3)(6,"div",4),K(7,"Tool trajectory avg score: "),w(),m(8,"div",5)(9,"mat-slider",6),GA(10,"input",7),w(),m(11,"span",8),K(12),w()()(),m(13,"div",3)(14,"div",4),K(15,"Response match score: "),w(),m(16,"div",5)(17,"mat-slider",6),GA(18,"input",9),w(),m(19,"span",8),K(20),w()()()()(),m(21,"mat-dialog-actions",10)(22,"button",11),eA("click",function(){return i.onCancel()}),K(23,"Cancel"),w(),m(24,"button",12),eA("click",function(){return i.onStart()}),K(25,"Start"),w()()()),A&2&&(p(4),AA("formGroup",i.evalForm),p(8),_e(" ",i.evalForm.controls.tool_trajectory_avg_score_threshold.value," "),p(8),_e(" ",i.evalForm.controls.response_match_score_threshold.value," "))},dependencies:[Ua,yr,Nn,EJ,uo,fo,gJ,r0,y2,n9,dgA,mK,or,Fn],styles:["build.dialog-container[_ngcontent-%COMP%]{border-radius:12px;padding:18px;width:500px;box-shadow:0 8px 16px var(--run-eval-config-dialog-container-box-shadow-color)}.threshold-slider[_ngcontent-%COMP%]{--mdc-slider-active-track-color: var(--run-eval-config-dialog-threshold-slider-active-track-color);--mdc-slider-inactive-track-color: var(--run-eval-config-dialog-threshold-slider-inactive-track-color);--mdc-slider-handle-color: var(--run-eval-config-dialog-threshold-slider-handle-color);--mdc-slider-ripple-color: var(--run-eval-config-dialog-threshold-slider-ripple-color);width:100px}.metric-row[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center}.metric-name[_ngcontent-%COMP%]{width:250px}.threshold-value[_ngcontent-%COMP%]{margin-left:20px}.mdc-slider__thumb--with-indicator[_ngcontent-%COMP%]{background-color:var(--mdc-slider-handle-color, var(--run-eval-config-dialog-mdc-slider-thumb-background-color));border:none!important;box-shadow:none!important}h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}"]})};function KHA(t,e){if(t&1){let A=JA();m(0,"div",1)(1,"div"),K(2),w(),m(3,"mat-icon",2),eA("click",function(){Z(A);let n=v();return X(n.openNewEvalSetDialog())}),K(4,"add"),w()()}if(t&2){let A=v();p(2),qA(A.i18n.allEvalSetsHeader),p(),AA("matTooltip",A.i18n.createNewEvalSetTooltip)}}function UHA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",3)(2,"div",4),K(3),w(),m(4,"div",5),K(5),w(),m(6,"div",6),eA("click",function(){Z(A);let n=v();return X(n.openNewEvalSetDialog())}),K(7),w()()()}if(t&2){let A=v();p(3),_e(" ",A.i18n.createNewEvalSetTitle," "),p(2),_e(" ",A.i18n.evalSetDescription," "),p(2),_e(" ",A.i18n.createEvalSetButton," ")}}function JHA(t,e){if(t&1){let A=JA();m(0,"div",8),eA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.selectEvalSet(n))}),m(1,"div",9)(2,"span",10),K(3,"folder"),w(),m(4,"div",11),K(5),w()(),m(6,"div")(7,"mat-icon",12),K(8,"chevron_right"),w()()()}if(t&2){let A=e.$implicit;p(5),qA(A)}}function YHA(t,e){if(t&1&&(m(0,"div"),Ut(1,JHA,9,1,"div",7,_i),w()),t&2){let A=v();p(),Jt(A.evalsets)}}function THA(t,e){if(t&1){let A=JA();m(0,"th",29)(1,"mat-checkbox",30),eA("change",function(n){Z(A);let o=v(4);return X(n?o.toggleAllRows():null)}),w()()}if(t&2){let A=v(4);p(),AA("checked",A.selection.hasValue()&&A.isAllSelected())("indeterminate",A.selection.hasValue()&&!A.isAllSelected())}}function HHA(t,e){if(t&1){let A=JA();m(0,"td",31)(1,"mat-checkbox",32),eA("click",function(n){return Z(A),X(n.stopPropagation())})("change",function(n){let o=Z(A).$implicit,a=v(4);return X(n?a.selection.toggle(o):null)}),w()()}if(t&2){let A=e.$implicit,i=v(4);p(),AA("checked",i.selection.isSelected(A))}}function zHA(t,e){if(t&1&&(m(0,"th",29),K(1),w()),t&2){let A=v(4);p(),_e(" ",A.i18n.caseIdHeader," ")}}function OHA(t,e){if(t&1){let A=JA();m(0,"td",33),eA("click",function(){let n=Z(A).$implicit,o=v(4);return X(o.getEvalCase(n))}),K(1),w()}if(t&2){let A,i=e.$implicit,n=v(4);ae("selected-eval-case",i===((A=n.selectedEvalCase())==null?null:A.evalId)),p(),_e(" ",i," ")}}function PHA(t,e){if(t&1&&(m(0,"th",29),K(1),w()),t&2){let A=v(4);p(),_e(" ",A.i18n.resultHeader," ")}}function jHA(t,e){if(t&1){let A=JA();m(0,"button",35),eA("click",function(){Z(A);let n=v().$implicit,o=v(4);return X(o.getSession(n))}),m(1,"span",36),K(2),w(),m(3,"div",37),K(4),w()()}if(t&2){let A=v().$implicit,i=v(4);AA("ngClass",i.getEvalResultForCase(A)==1?"result-btn pass":"result-btn fail")("matTooltip",i.i18n.viewEvalRunResultTooltip),p(2),_e(" ",i.getEvalResultForCase(A)==1?"check":"close"," "),p(2),_e("",i.getEvalResultForCase(A)==1?i.i18n.passStatus:i.i18n.failStatus," ")}}function qHA(t,e){if(t&1&&(m(0,"td",31),V(1,jHA,5,4,"button",34),w()),t&2){let A=e.$implicit,i=v(4);p(),W(i.getEvalResultForCase(A)?1:-1)}}function VHA(t,e){t&1&&GA(0,"tr",38)}function WHA(t,e){t&1&&GA(0,"tr",39)}function ZHA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",16)(2,"button",17),eA("click",function(){Z(A);let n=v(3);return X(n.openEvalConfigDialog())}),K(3),w(),m(4,"mat-icon",18),eA("click",function(){Z(A);let n=v(3);return X(n.toggleEvalHistoryButton())}),K(5,"history"),w()(),m(6,"div",19)(7,"table",20),qs(8,21),vt(9,THA,2,2,"th",22)(10,HHA,2,1,"td",23),Vs(),qs(11,24),vt(12,zHA,2,1,"th",22)(13,OHA,2,3,"td",25),Vs(),qs(14,26),vt(15,PHA,2,1,"th",22)(16,qHA,2,1,"td",23),Vs(),vt(17,VHA,1,0,"tr",27)(18,WHA,1,0,"tr",28),w()()()}if(t&2){let A=v(3);p(3),qA(A.i18n.runEvaluationButton),p(),AA("matTooltip",A.i18n.viewEvalRunHistoryTooltip),p(3),AA("dataSource",A.dataSource),p(10),AA("matHeaderRowDef",A.displayedColumns),p(),AA("matRowDefColumns",A.displayedColumns)}}function XHA(t,e){if(t&1&&(m(0,"div")(1,"span",50),K(2,"|"),w(),m(3,"span",51),K(4),w()()),t&2){let A=v().$implicit,i=v(4);p(4),i0("",i.getFailCountForCurrentResult(A.evaluationResults.evaluationResults)," ",i.i18n.failedSuffix)}}function $HA(t,e){if(t&1&&(m(0,"span",52),K(1),w()),t&2){let A=e.$implicit;p(),i0(" ",A.metricName,": ",A.threshold," ")}}function AzA(t,e){if(t&1&&(m(0,"div",46),Ut(1,$HA,2,2,"span",52,_i),w()),t&2){let A=v().$implicit,i=v(4);p(),Jt(i.getEvalMetrics(A))}}function ezA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",53)(2,"span"),K(3),w(),m(4,"button",54),eA("click",function(){let n=Z(A).$implicit,o=v(6);return X(o.getHistorySession(n))}),m(5,"span",36),K(6),w(),m(7,"div",37),K(8),w()()()()}if(t&2){let A=e.$implicit,i=v(6);p(3),_e(" ",A.evalId," "),p(),AA("ngClass",A.finalEvalStatus==1?"result-btn pass":"result-btn fail"),p(2),_e(" ",A.finalEvalStatus==1?"check":"close"," "),p(2),_e("",A.finalEvalStatus==1?i.i18n.passStatusCaps:i.i18n.failStatusCaps," ")}}function tzA(t,e){if(t&1&&(m(0,"div",49),Ut(1,ezA,9,4,"div",null,_i),w()),t&2){let A=v().$implicit,i=v(4);p(),Jt(i.generateHistoryEvaluationDatasource(A.timestamp))}}function izA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",40)(2,"div",41)(3,"div",42)(4,"div",43),K(5),w(),m(6,"div",44)(7,"span",45),K(8),w(),V(9,XHA,5,2,"div"),w(),V(10,AzA,3,0,"div",46),w(),m(11,"div",47)(12,"mat-icon",48),eA("click",function(){let n=Z(A).$implicit,o=v(4);return X(o.toggleHistoryStatusCard(n.timestamp))}),K(13),w()()(),V(14,tzA,3,0,"div",49),w()()}if(t&2){let A=e.$implicit,i=v(4);p(5),qA(i.formatTimestamp(A.timestamp)),p(3),i0("",i.getPassCountForCurrentResult(A.evaluationResults.evaluationResults)," ",i.i18n.passedSuffix),p(),W(i.getFailCountForCurrentResult(A.evaluationResults.evaluationResults)>0?9:-1),p(),W(i.getEvalMetrics(A)?10:-1),p(3),qA(i.getEvaluationStatusCardActionButtonIcon(A.timestamp)),p(),W(i.isEvaluationStatusCardToggled(A.timestamp)?14:-1)}}function nzA(t,e){if(t&1&&(m(0,"div"),Ut(1,izA,15,7,"div",null,_i),w()),t&2){let A=v(3);p(),Jt(A.getEvalHistoryOfCurrentSetSorted())}}function ozA(t,e){if(t&1&&(m(0,"div"),V(1,ZHA,19,5,"div"),V(2,nzA,3,0,"div"),w()),t&2){let A=v(2);p(),W(A.showEvalHistory()?-1:1),p(),W(A.showEvalHistory()?2:-1)}}function azA(t,e){if(t&1){let A=JA();m(0,"button",55),eA("click",function(){Z(A);let n=v(2);return X(n.openNewEvalCaseDialog())}),m(1,"div",56)(2,"mat-icon"),K(3,"add"),w(),m(4,"div",57),K(5),w()()()}if(t&2){let A=v(2);p(5),i0(" ",A.i18n.addSessionToSetButtonPrefix," ",A.selectedEvalSet," ")}}function rzA(t,e){t&1&&(m(0,"div"),GA(1,"mat-spinner",58),w()),t&2&&(p(),AA("diameter",28)("strokeWidth",3))}function szA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",9)(2,"mat-icon",13),eA("click",function(){Z(A);let n=v();return X(n.clearSelectedEvalSet())}),K(3,"chevron_left"),w(),m(4,"div",14),eA("click",function(){Z(A);let n=v();return X(n.clearSelectedEvalSet())}),K(5),w()(),V(6,ozA,3,2,"div"),V(7,azA,6,2,"button",15),V(8,rzA,2,2,"div"),w()}if(t&2){let A=v();p(5),_e(" ",A.selectedEvalSet," "),p(),W(A.evalCases.length>0&&!A.evalRunning()?6:-1),p(),W(!A.evalRunning()&&!A.showEvalHistory()?7:-1),p(),W(A.evalRunning()?8:-1)}}var P7=new yA("EVAL_TAB_COMPONENT"),Xc=class t{checkboxes=MU(bE);appName=at("");userId=at("");sessionId=at("");sessionSelected=Oo();shouldShowTab=Oo();evalNotInstalledMsg=Oo();evalCaseSelected=Oo();evalSetIdSelected=Oo();shouldReturnToSession=Oo();evalCasesSubject=new Tt([]);changeDetectorRef=h(mt);flagService=h(vr);i18n=h(cgA);displayedColumns=["select","evalId","finalEvalStatus"];evalsets=[];selectedEvalSet="";evalCases=[];selectedEvalCase=jA(null);deletedEvalCaseIndex=-1;dataSource=new Ym(this.evalCases);selection=new V1(!0,[]);showEvalHistory=jA(!1);evalRunning=jA(!1);evalMetrics=ggA;currentEvalResultBySet=new Map;dialog=h(Ks);appEvaluationResults={};evalService=h(Q0);sessionService=h(dl);constructor(){this.evalCasesSubject.subscribe(e=>{!this.selectedEvalCase()&&this.deletedEvalCaseIndex>=0&&e.length>0?(this.selectNewEvalCase(e),this.deletedEvalCaseIndex=-1):e.length===0&&this.shouldReturnToSession.emit(!0)})}ngOnChanges(e){e.appName&&(this.selectedEvalSet="",this.evalCases=[],this.getEvalSet(),this.getEvaluationResult())}ngOnInit(){}selectNewEvalCase(e){let A=this.deletedEvalCaseIndex;this.deletedEvalCaseIndex===e.length&&(A=0),this.getEvalCase(e[A])}getEvalSet(){this.appName()!==""&&this.evalService.getEvalSets(this.appName()).pipe(ea(e=>e.status===404&&e.statusText==="Not Found"?(this.shouldShowTab.emit(!1),se(null)):se([]))).subscribe(e=>{e!==null&&(this.shouldShowTab.emit(!0),this.evalsets=e,this.changeDetectorRef.detectChanges())})}openNewEvalSetDialog(){this.dialog.open(z7,{width:"600px",data:{appName:this.appName()}}).afterClosed().subscribe(A=>{A&&(this.getEvalSet(),this.changeDetectorRef.detectChanges())})}openNewEvalCaseDialog(){this.dialog.open(H7,{width:"600px",data:{appName:this.appName(),userId:this.userId(),sessionId:this.sessionId(),evalSetId:this.selectedEvalSet}}).afterClosed().subscribe(A=>{A&&(this.listEvalCases(),this.changeDetectorRef.detectChanges())})}listEvalCases(){this.evalCases=[],this.evalService.listEvalCases(this.appName(),this.selectedEvalSet).subscribe(e=>{this.evalCases=e,this.dataSource=new Ym(this.evalCases),this.evalCasesSubject.next(this.evalCases),this.changeDetectorRef.detectChanges()})}runEval(){if(this.evalRunning.set(!0),this.selection.selected.length==0){alert("No case selected!"),this.evalRunning.set(!1);return}this.evalService.runEval(this.appName(),this.selectedEvalSet,this.selection.selected,this.evalMetrics).pipe(ea(e=>(e.error?.detail?.includes("not installed")&&this.evalNotInstalledMsg.emit(e.error.detail),se([])))).subscribe(e=>{this.evalRunning.set(!1),this.currentEvalResultBySet.set(this.selectedEvalSet,e),this.getEvaluationResult(),this.changeDetectorRef.detectChanges()})}selectEvalSet(e){this.selectedEvalSet=e,this.listEvalCases()}clearSelectedEvalSet(){if(this.showEvalHistory()){this.toggleEvalHistoryButton();return}this.selectedEvalSet=""}isAllSelected(){let e=this.selection.selected.length,A=this.dataSource.data.length;return e===A}toggleAllRows(){if(this.isAllSelected()){this.selection.clear();return}this.selection.select(...this.dataSource.data)}getEvalResultForCase(e){let A=this.currentEvalResultBySet.get(this.selectedEvalSet)?.filter(i=>i.evalId==e);if(!(!A||A.length==0))return A[0].finalEvalStatus}formatToolUses(e){let A=[];for(let i of e)A.push({name:i.name,args:i.args});return A}addEvalCaseResultToEvents(e,A){let i=A.evalMetricResultPerInvocation,n=-1;if(i)for(let o=0;on.evalId==e)[0],i=A.sessionId;this.sessionService.getSession(this.userId(),this.appName(),i).subscribe(n=>{this.addEvalCaseResultToEvents(n,A);let o=this.fromApiResultToSession(n);this.sessionSelected.emit(o)})}toggleEvalHistoryButton(){this.showEvalHistory.set(!this.showEvalHistory())}getEvalHistoryOfCurrentSet(){return this.appEvaluationResults[this.appName()][this.selectedEvalSet]}getEvalHistoryOfCurrentSetSorted(){let e=this.getEvalHistoryOfCurrentSet();return Object.keys(e).sort((n,o)=>o.localeCompare(n)).map(n=>({timestamp:n,evaluationResults:e[n]}))}getPassCountForCurrentResult(e){return e.filter(A=>A.finalEvalStatus==1).length}getFailCountForCurrentResult(e){return e.filter(A=>A.finalEvalStatus==2).length}formatTimestamp(e){let A=Number(e);if(isNaN(A))return"Invalid timestamp provided";let i=new Date(A*1e3);if(isNaN(i.getTime()))return"Invalid date created from timestamp";let n={month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0};return new Intl.DateTimeFormat("en-US",n).format(i)}getEvaluationStatusCardActionButtonIcon(e){return this.getEvalHistoryOfCurrentSet()[e].isToggled?"keyboard_arrow_up":"keyboard_arrow_down"}toggleHistoryStatusCard(e){this.getEvalHistoryOfCurrentSet()[e].isToggled=!this.getEvalHistoryOfCurrentSet()[e].isToggled}isEvaluationStatusCardToggled(e){return this.getEvalHistoryOfCurrentSet()[e].isToggled}generateHistoryEvaluationDatasource(e){return this.getEvalHistoryOfCurrentSet()[e].evaluationResults}getHistorySession(e){this.addEvalCaseResultToEvents(e.sessionDetails,e);let A=this.fromApiResultToSession(e.sessionDetails);this.sessionSelected.emit(A)}getEvalCase(e){this.evalService.getEvalCase(this.appName(),this.selectedEvalSet,e).subscribe(A=>{this.selectedEvalCase.set(A),this.evalCaseSelected.emit(A),this.evalSetIdSelected.emit(this.selectedEvalSet)})}resetEvalCase(){this.selectedEvalCase.set(null)}resetEvalResults(){this.currentEvalResultBySet.clear()}deleteEvalCase(e){this.evalService.deleteEvalCase(this.appName(),this.selectedEvalSet,e).subscribe(A=>{this.deletedEvalCaseIndex=this.evalCases.indexOf(e),this.selectedEvalCase.set(null),this.listEvalCases(),this.changeDetectorRef.detectChanges()})}getEvaluationResult(){this.evalService.listEvalResults(this.appName()).pipe(ea(e=>e.status===404&&e.statusText==="Not Found"?(this.shouldShowTab.emit(!1),se(null)):se([]))).subscribe(e=>{for(let A of e)this.evalService.getEvalResult(this.appName(),A).subscribe(i=>{this.appEvaluationResults[this.appName()]||(this.appEvaluationResults[this.appName()]={}),this.appEvaluationResults[this.appName()][i.evalSetId]||(this.appEvaluationResults[this.appName()][i.evalSetId]={});let n=i.creationTimestamp;this.appEvaluationResults[this.appName()][i.evalSetId][n]||(this.appEvaluationResults[this.appName()][i.evalSetId][n]={isToggled:!1,evaluationResults:[]});let o={isToggled:!1,evaluationResults:i.evalCaseResults.map(a=>({setId:a.id,evalId:a.evalId,finalEvalStatus:a.finalEvalStatus,evalMetricResults:a.evalMetricResults,evalMetricResultPerInvocation:a.evalMetricResultPerInvocation,sessionId:a.sessionId,sessionDetails:a.sessionDetails,overallEvalMetricResults:a.overallEvalMetricResults??[]}))};this.appEvaluationResults[this.appName()][i.evalSetId][n]=o,this.changeDetectorRef.detectChanges()})})}openEvalConfigDialog(){if(this.selection.selected.length==0){alert("No case selected!");return}this.dialog.open(O7,{maxWidth:"90vw",maxHeight:"90vh",data:{evalMetrics:this.evalMetrics}}).afterClosed().subscribe(A=>{A&&(this.evalMetrics=A,this.runEval())})}getEvalMetrics(e){if(!e||!e.evaluationResults||!e.evaluationResults.evaluationResults)return this.evalMetrics;let A=e.evaluationResults.evaluationResults;return A.length===0?this.evalMetrics:typeof A[0].overallEvalMetricResults>"u"||!A[0].overallEvalMetricResults||A[0].overallEvalMetricResults.length===0?this.evalMetrics:A[0].overallEvalMetricResults.map(n=>({metricName:n.metricName,threshold:n.threshold}))}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-eval-tab"]],viewQuery:function(A,i){A&1&&rs(i.checkboxes,bE,5),A&2&&wr()},inputs:{appName:[1,"appName"],userId:[1,"userId"],sessionId:[1,"sessionId"]},outputs:{sessionSelected:"sessionSelected",shouldShowTab:"shouldShowTab",evalNotInstalledMsg:"evalNotInstalledMsg",evalCaseSelected:"evalCaseSelected",evalSetIdSelected:"evalSetIdSelected",shouldReturnToSession:"shouldReturnToSession"},features:[ti],decls:5,vars:4,consts:[[1,"eval-container"],[1,"eval-set-actions"],[2,"cursor","pointer",3,"click","matTooltip"],[1,"empty-eval-info"],[1,"info-title"],[1,"info-detail"],[1,"info-create",3,"click"],[1,"eval-set-row"],[1,"eval-set-row",3,"click"],[2,"display","flex"],[1,"material-symbols-outlined",2,"margin-right","10px","padding-top","16px"],[2,"font-family","Roboto","font-size","14px","padding","16px","padding-top","20px"],[2,"padding-top","20px","color","#9AA0A6"],[2,"color","white","cursor","pointer",3,"click"],[2,"color","#9AA0A6","padding-top","2px","cursor","pointer",3,"click"],[1,"save-session-btn"],[1,"evaluation-tab-header"],[1,"run-eval-btn",3,"click"],[1,"evaluation-history-icon",3,"click","matTooltip"],[1,"mat-table-container",2,"margin-top","16px"],["mat-table","",3,"dataSource"],["matColumnDef","select"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","evalId"],["mat-cell","","class","eval-case-id",3,"selected-eval-case","click",4,"matCellDef"],["matColumnDef","finalEvalStatus"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],[3,"change","checked","indeterminate"],["mat-cell",""],[3,"click","change","checked"],["mat-cell","",1,"eval-case-id",3,"click"],[3,"ngClass","matTooltip"],[3,"click","ngClass","matTooltip"],[1,"material-symbols-outlined"],[2,"padding-top","4px"],["mat-header-row",""],["mat-row",""],[1,"status-card"],[1,"status-card__overview"],[1,"status-card__info"],[1,"status-card__timestamp"],[1,"status-card__summary"],[1,"status-card__passed"],[1,"status-card__metrics"],[1,"status-card__action"],[3,"click"],[1,"status-card__history-cases"],[1,"status-card__separator"],[1,"status-card__failed"],[1,"status-card__metric"],[1,"status-card__history-case"],[3,"click","ngClass"],[1,"save-session-btn",3,"click"],[1,"save-session-btn-detail"],[1,"save-session-btn-text"],[1,"eval-spinner",3,"diameter","strokeWidth"]],template:function(A,i){A&1&&(m(0,"div",0),V(1,KHA,5,2,"div",1),V(2,UHA,8,3,"div"),V(3,YHA,3,0,"div"),V(4,szA,9,4,"div"),w()),A&2&&(p(),W(i.selectedEvalSet==""?1:-1),p(),W(i.evalsets.length==0?2:-1),p(),W(i.evalsets.length>0&&i.selectedEvalSet==""?3:-1),p(),W(i.selectedEvalSet!=""?4:-1))},dependencies:[fn,Sa,$sA,tgA,egA,igA,bE,AgA,ngA,gs,ogA,rgA,agA,sgA,B1],styles:[".eval-container[_ngcontent-%COMP%]{margin-top:20px;padding-left:25px;padding-right:25px}.eval-case-id[_ngcontent-%COMP%]{cursor:pointer}.eval-set-actions[_ngcontent-%COMP%]{display:flex;justify-content:space-between;color:var(--eval-tab-eval-set-actions-color);font-style:normal;font-weight:700;font-size:14px}.empty-eval-info[_ngcontent-%COMP%]{margin-top:12px;background-color:var(--eval-tab-empty-eval-info-background-color);border-radius:8px;box-shadow:0 2px 6px 2px var(--eval-tab-empty-eval-info-box-shadow-color1),0 1px 2px 0 var(--eval-tab-empty-eval-info-box-shadow-color2)}.info-title[_ngcontent-%COMP%]{color:var(--eval-tab-info-title-color);font-family:Roboto;font-size:14px;font-weight:500;padding-top:13px;padding-right:16px;padding-left:16px}.info-detail[_ngcontent-%COMP%]{color:var(--eval-tab-info-detail-color);font-family:Roboto;font-size:14px;font-weight:400;padding-top:13px;padding-right:16px;padding-left:16px;letter-spacing:.2px}.info-create[_ngcontent-%COMP%]{color:var(--eval-tab-info-create-color);font-size:14px;font-style:normal;font-weight:500;padding-right:16px;padding-left:16px;margin-top:19px;padding-bottom:16px;cursor:pointer}.eval-set-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;cursor:pointer}.selected-eval-case[_ngcontent-%COMP%]{font-weight:900;color:var(--eval-tab-selected-eval-case-color)}.save-session-btn[_ngcontent-%COMP%]{width:100%;background:linear-gradient(0deg,var(--eval-tab-save-session-btn-background-color1) 0%,var(--eval-tab-save-session-btn-background-color1) 100%),var(--eval-tab-save-session-btn-background-color2);border:none;border-radius:4px;margin-top:12px;cursor:pointer}.save-session-btn-detail[_ngcontent-%COMP%]{display:flex;padding:8px 16px 8px 12px;justify-content:center}.save-session-btn-text[_ngcontent-%COMP%]{padding-top:2px;color:var(--eval-tab-save-session-btn-text-color);font-family:Google Sans;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.run-eval-btn[_ngcontent-%COMP%]{border-radius:4px;border:1px solid var(--eval-tab-run-eval-btn-border-color);background-color:transparent;padding:8px 24px;margin-top:16px;color:var(--eval-tab-run-eval-btn-color);cursor:pointer}.run-eval-btn[_ngcontent-%COMP%]:hover{background-color:var(--eval-tab-run-eval-btn-hover-background-color)}.result-btn[_ngcontent-%COMP%]{display:flex;background-color:transparent;border-radius:4px;border:1px solid var(--eval-tab-result-btn-border-color);margin-top:4px;cursor:pointer}.result-btn[_ngcontent-%COMP%]:hover{background-color:var(--eval-tab-result-btn-hover-background-color)}.result-btn.pass[_ngcontent-%COMP%]{color:var(--eval-tab-result-btn-pass-color)}.result-btn.fail[_ngcontent-%COMP%]{color:var(--eval-tab-result-btn-fail-color)}.evaluation-tab-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%}.evaluation-history-icon[_ngcontent-%COMP%]{cursor:pointer;margin-top:4px}.status-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;border-radius:8px;background-color:var(--eval-tab-status-card-background-color);padding:12px 16px;margin-top:12px}.status-card__overview[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%}.status-card__info[_ngcontent-%COMP%]{display:flex;flex-direction:column}.status-card__timestamp[_ngcontent-%COMP%]{font-size:.9em;color:var(--eval-tab-status-card-timestamp-color);margin-bottom:5px}.status-card__summary[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:.95em;font-weight:500}.status-card__metrics[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:.75em;font-weight:300;margin-top:3px}.status-card__metric[_ngcontent-%COMP%]{width:180px;color:var(--eval-tab-status-card-metric-color)}.status-card__failed[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-failed-color)}.status-card__separator[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-separator-color);margin:0 8px}.status-card__passed[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-passed-color)}.status-card__action[_ngcontent-%COMP%]{display:flex;align-items:center}.status-card__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-action-mat-icon-color);cursor:pointer;transition:transform .2s ease-in-out}.status-card__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]:hover{opacity:.8}.status-card__action[_ngcontent-%COMP%] .status-card__icon[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-icon-color);font-size:1.2em;cursor:pointer}.status-card__action[_ngcontent-%COMP%] .status-card__icon[_ngcontent-%COMP%]:hover{opacity:.8}.status-card__history-cases[_ngcontent-%COMP%]{display:flex;flex-direction:column;margin-top:3px;justify-content:flex-start;width:100%}.status-card__history-case[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%;margin-top:15px}.eval-spinner[_ngcontent-%COMP%]{margin-top:12px}"]})};var Tm=class t{constructor(e,A){this.dialogRef=e;this.data=A}onConfirm(){this.dialogRef.close(!0)}onCancel(){this.dialogRef.close(!1)}static \u0275fac=function(A){return new(A||t)(Ct(Po),Ct(ka))};static \u0275cmp=kA({type:t,selectors:[["app-delete-session-dialog"]],decls:11,vars:4,consts:[[1,"confirm-delete-wrapper"],["mat-dialog-title",""],["align","end"],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"h2",1),K(2),w(),m(3,"mat-dialog-content")(4,"p"),K(5),w()(),m(6,"mat-dialog-actions",2)(7,"button",3),eA("click",function(){return i.onCancel()}),K(8),w(),m(9,"button",4),eA("click",function(){return i.onConfirm()}),K(10),w()()()),A&2&&(p(2),qA(i.data.title),p(3),qA(i.data.message),p(3),qA(i.data.cancelButtonText),p(2),qA(i.data.confirmButtonText))},dependencies:[Ua,yr,or,Fn],encapsulation:2})};var vK=["*"];function gzA(t,e){t&1&&He(0)}var lzA=["tabListContainer"],czA=["tabList"],CzA=["tabListInner"],IzA=["nextPaginator"],dzA=["previousPaginator"],BzA=["content"];function EzA(t,e){}var QzA=["tabBodyWrapper"],hzA=["tabHeader"];function uzA(t,e){}function fzA(t,e){if(t&1&&vt(0,uzA,0,0,"ng-template",12),t&2){let A=v().$implicit;AA("cdkPortalOutlet",A.templateLabel)}}function mzA(t,e){if(t&1&&K(0),t&2){let A=v().$implicit;qA(A.textLabel)}}function pzA(t,e){if(t&1){let A=JA();m(0,"div",7,2),eA("click",function(){let n=Z(A),o=n.$implicit,a=n.$index,r=v(),s=An(1);return X(r._handleClick(o,s,a))})("cdkFocusChange",function(n){let o=Z(A).$index,a=v();return X(a._tabFocusChanged(n,o))}),GA(2,"span",8)(3,"div",9),m(4,"span",10)(5,"span",11),V(6,fzA,1,1,null,12)(7,mzA,1,1),w()()()}if(t&2){let A=e.$implicit,i=e.$index,n=An(1),o=v();zo(A.labelClass),ae("mdc-tab--active",o.selectedIndex===i),AA("id",o._getTabLabelId(A,i))("disabled",A.disabled)("fitInkBarToContent",o.fitInkBarToContent),ie("tabIndex",o._getTabIndex(i))("aria-posinset",i+1)("aria-setsize",o._tabs.length)("aria-controls",o._getTabContentId(i))("aria-selected",o.selectedIndex===i)("aria-label",A.ariaLabel||null)("aria-labelledby",!A.ariaLabel&&A.ariaLabelledby?A.ariaLabelledby:null),p(3),AA("matRippleTrigger",n)("matRippleDisabled",A.disabled||o.disableRipple),p(3),W(A.templateLabel?6:7)}}function wzA(t,e){t&1&&He(0)}function DzA(t,e){if(t&1){let A=JA();m(0,"mat-tab-body",13),eA("_onCentered",function(){Z(A);let n=v();return X(n._removeTabBodyWrapperHeight())})("_onCentering",function(n){Z(A);let o=v();return X(o._setTabBodyWrapperHeight(n))})("_beforeCentering",function(n){Z(A);let o=v();return X(o._bodyCentered(n))}),w()}if(t&2){let A=e.$implicit,i=e.$index,n=v();zo(A.bodyClass),AA("id",n._getTabContentId(i))("content",A.content)("position",A.position)("animationDuration",n.animationDuration)("preserveContent",n.preserveContent),ie("tabindex",n.contentTabIndex!=null&&n.selectedIndex===i?n.contentTabIndex:null)("aria-labelledby",n._getTabLabelId(A,i))("aria-hidden",n.selectedIndex!==i)}}var yzA=new yA("MatTabContent"),vzA=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matTabContent",""]],features:[It([{provide:yzA,useExisting:t}])]})}return t})(),bzA=new yA("MatTabLabel"),hgA=new yA("MAT_TAB"),bK=(()=>{class t extends PH{_closestTab=h(hgA,{optional:!0});static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","mat-tab-label",""],["","matTabLabel",""]],features:[It([{provide:bzA,useExisting:t}]),dt]})}return t})(),ugA=new yA("MAT_TAB_GROUP"),Hm=(()=>{class t{_viewContainerRef=h(Ho);_closestTabGroup=h(ugA,{optional:!0});disabled=!1;get templateLabel(){return this._templateLabel}set templateLabel(A){this._setTemplateLabelInput(A)}_templateLabel;_explicitContent=void 0;_implicitContent;textLabel="";ariaLabel;ariaLabelledby;labelClass;bodyClass;id=null;_contentPortal=null;get content(){return this._contentPortal}_stateChanges=new $A;position=null;origin=null;isActive=!1;constructor(){h(Xn).load(Ir)}ngOnChanges(A){(A.hasOwnProperty("textLabel")||A.hasOwnProperty("disabled"))&&this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete()}ngOnInit(){this._contentPortal=new Is(this._explicitContent||this._implicitContent,this._viewContainerRef)}_setTemplateLabelInput(A){A&&A._closestTab===this&&(this._templateLabel=A)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tab"]],contentQueries:function(i,n,o){if(i&1&&ua(o,bK,5)(o,vzA,7,Tn),i&2){let a;ce(a=Ce())&&(n.templateLabel=a.first),ce(a=Ce())&&(n._explicitContent=a.first)}},viewQuery:function(i,n){if(i&1&&ai(Tn,7),i&2){let o;ce(o=Ce())&&(n._implicitContent=o.first)}},hostAttrs:["hidden",""],hostVars:1,hostBindings:function(i,n){i&2&&ie("id",null)},inputs:{disabled:[2,"disabled","disabled",he],textLabel:[0,"label","textLabel"],ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],labelClass:"labelClass",bodyClass:"bodyClass",id:"id"},exportAs:["matTab"],features:[It([{provide:hgA,useExisting:t}]),ti],ngContentSelectors:vK,decls:1,vars:0,template:function(i,n){i&1&&(Ht(),rp(0,gzA,1,0,"ng-template"))},encapsulation:2})}return t})(),pK="mdc-tab-indicator--active",BgA="mdc-tab-indicator--no-transition",wK=class{_items;_currentItem;constructor(e){this._items=e}hide(){this._items.forEach(e=>e.deactivateInkBar()),this._currentItem=void 0}alignToElement(e){let A=this._items.find(n=>n.elementRef.nativeElement===e),i=this._currentItem;if(A!==i&&(i?.deactivateInkBar(),A)){let n=i?.elementRef.nativeElement.getBoundingClientRect?.();A.activateInkBar(n),this._currentItem=A}}},MzA=(()=>{class t{_elementRef=h(ge);_inkBarElement=null;_inkBarContentElement=null;_fitToContent=!1;get fitInkBarToContent(){return this._fitToContent}set fitInkBarToContent(A){this._fitToContent!==A&&(this._fitToContent=A,this._inkBarElement&&this._appendInkBarElement())}activateInkBar(A){let i=this._elementRef.nativeElement;if(!A||!i.getBoundingClientRect||!this._inkBarContentElement){i.classList.add(pK);return}let n=i.getBoundingClientRect(),o=A.width/n.width,a=A.left-n.left;i.classList.add(BgA),this._inkBarContentElement.style.setProperty("transform",`translateX(${a}px) scaleX(${o})`),i.getBoundingClientRect(),i.classList.remove(BgA),i.classList.add(pK),this._inkBarContentElement.style.setProperty("transform","")}deactivateInkBar(){this._elementRef.nativeElement.classList.remove(pK)}ngOnInit(){this._createInkBarElement()}ngOnDestroy(){this._inkBarElement?.remove(),this._inkBarElement=this._inkBarContentElement=null}_createInkBarElement(){let A=this._elementRef.nativeElement.ownerDocument||document,i=this._inkBarElement=A.createElement("span"),n=this._inkBarContentElement=A.createElement("span");i.className="mdc-tab-indicator",n.className="mdc-tab-indicator__content mdc-tab-indicator__content--underline",i.appendChild(this._inkBarContentElement),this._appendInkBarElement()}_appendInkBarElement(){this._inkBarElement;let A=this._fitToContent?this._elementRef.nativeElement.querySelector(".mdc-tab__content"):this._elementRef.nativeElement;A.appendChild(this._inkBarElement)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,inputs:{fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",he]}})}return t})();var fgA=(()=>{class t extends MzA{elementRef=h(ge);disabled=!1;focus(){this.elementRef.nativeElement.focus()}getOffsetLeft(){return this.elementRef.nativeElement.offsetLeft}getOffsetWidth(){return this.elementRef.nativeElement.offsetWidth}static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matTabLabelWrapper",""]],hostVars:3,hostBindings:function(i,n){i&2&&(ie("aria-disabled",!!n.disabled),ae("mat-mdc-tab-disabled",n.disabled))},inputs:{disabled:[2,"disabled","disabled",he]},features:[dt]})}return t})(),EgA={passive:!0},kzA=650,SzA=100,xzA=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(mt);_viewportRuler=h(Gs);_dir=h(xo,{optional:!0});_ngZone=h(Oe);_platform=h(Ii);_sharedResizeObserver=h(Tp);_injector=h(ft);_renderer=h(Fi);_animationsDisabled=qi();_eventCleanups;_scrollDistance=0;_selectedIndexChanged=!1;_destroyed=new $A;_showPaginationControls=!1;_disableScrollAfter=!0;_disableScrollBefore=!0;_tabLabelCount;_scrollDistanceChanged=!1;_keyManager;_currentTextContent;_stopScrolling=new $A;disablePagination=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(A){let i=isNaN(A)?0:A;this._selectedIndex!=i&&(this._selectedIndexChanged=!0,this._selectedIndex=i,this._keyManager&&this._keyManager.updateActiveItem(i))}_selectedIndex=0;selectFocusedIndex=new WA;indexFocused=new WA;constructor(){this._eventCleanups=this._ngZone.runOutsideAngular(()=>[this._renderer.listen(this._elementRef.nativeElement,"mouseleave",()=>this._stopInterval())])}ngAfterViewInit(){this._eventCleanups.push(this._renderer.listen(this._previousPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("before"),EgA),this._renderer.listen(this._nextPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("after"),EgA))}ngAfterContentInit(){let A=this._dir?this._dir.change:se("ltr"),i=this._sharedResizeObserver.observe(this._elementRef.nativeElement).pipe(Ps(32),Bt(this._destroyed)),n=this._viewportRuler.change(150).pipe(Bt(this._destroyed)),o=()=>{this.updatePagination(),this._alignInkBarToSelectedTab()};this._keyManager=new s0(this._items).withHorizontalOrientation(this._getLayoutDirection()).withHomeAndEnd().withWrap().skipPredicate(()=>!1),this._keyManager.updateActiveItem(Math.max(this._selectedIndex,0)),Yn(o,{injector:this._injector}),hi(A,n,i,this._items.changes,this._itemsResized()).pipe(Bt(this._destroyed)).subscribe(()=>{this._ngZone.run(()=>{Promise.resolve().then(()=>{this._scrollDistance=Math.max(0,Math.min(this._getMaxScrollDistance(),this._scrollDistance)),o()})}),this._keyManager?.withHorizontalOrientation(this._getLayoutDirection())}),this._keyManager.change.subscribe(a=>{this.indexFocused.emit(a),this._setTabFocus(a)})}_itemsResized(){return typeof ResizeObserver!="function"?ja:this._items.changes.pipe(cn(this._items),ki(A=>new ji(i=>this._ngZone.runOutsideAngular(()=>{let n=new ResizeObserver(o=>i.next(o));return A.forEach(o=>n.observe(o.elementRef.nativeElement)),()=>{n.disconnect()}}))),Fg(1),Ze(A=>A.some(i=>i.contentRect.width>0&&i.contentRect.height>0)))}ngAfterContentChecked(){this._tabLabelCount!=this._items.length&&(this.updatePagination(),this._tabLabelCount=this._items.length,this._changeDetectorRef.markForCheck()),this._selectedIndexChanged&&(this._scrollToLabel(this._selectedIndex),this._checkScrollingControls(),this._alignInkBarToSelectedTab(),this._selectedIndexChanged=!1,this._changeDetectorRef.markForCheck()),this._scrollDistanceChanged&&(this._updateTabScrollPosition(),this._scrollDistanceChanged=!1,this._changeDetectorRef.markForCheck())}ngOnDestroy(){this._eventCleanups.forEach(A=>A()),this._keyManager?.destroy(),this._destroyed.next(),this._destroyed.complete(),this._stopScrolling.complete()}_handleKeydown(A){if(!ma(A))switch(A.keyCode){case 13:case 32:if(this.focusIndex!==this.selectedIndex){let i=this._items.get(this.focusIndex);i&&!i.disabled&&(this.selectFocusedIndex.emit(this.focusIndex),this._itemSelected(A))}break;default:this._keyManager?.onKeydown(A)}}_onContentChanges(){let A=this._elementRef.nativeElement.textContent;A!==this._currentTextContent&&(this._currentTextContent=A||"",this._ngZone.run(()=>{this.updatePagination(),this._alignInkBarToSelectedTab(),this._changeDetectorRef.markForCheck()}))}updatePagination(){this._checkPaginationEnabled(),this._checkScrollingControls(),this._updateTabScrollPosition()}get focusIndex(){return this._keyManager?this._keyManager.activeItemIndex:0}set focusIndex(A){!this._isValidIndex(A)||this.focusIndex===A||!this._keyManager||this._keyManager.setActiveItem(A)}_isValidIndex(A){return this._items?!!this._items.toArray()[A]:!0}_setTabFocus(A){if(this._showPaginationControls&&this._scrollToLabel(A),this._items&&this._items.length){this._items.toArray()[A].focus();let i=this._tabListContainer.nativeElement;this._getLayoutDirection()=="ltr"?i.scrollLeft=0:i.scrollLeft=i.scrollWidth-i.offsetWidth}}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_updateTabScrollPosition(){if(this.disablePagination)return;let A=this.scrollDistance,i=this._getLayoutDirection()==="ltr"?-A:A;this._tabList.nativeElement.style.transform=`translateX(${Math.round(i)}px)`,(this._platform.TRIDENT||this._platform.EDGE)&&(this._tabListContainer.nativeElement.scrollLeft=0)}get scrollDistance(){return this._scrollDistance}set scrollDistance(A){this._scrollTo(A)}_scrollHeader(A){let i=this._tabListContainer.nativeElement.offsetWidth,n=(A=="before"?-1:1)*i/3;return this._scrollTo(this._scrollDistance+n)}_handlePaginatorClick(A){this._stopInterval(),this._scrollHeader(A)}_scrollToLabel(A){if(this.disablePagination)return;let i=this._items?this._items.toArray()[A]:null;if(!i)return;let n=this._tabListContainer.nativeElement.offsetWidth,{offsetLeft:o,offsetWidth:a}=i.elementRef.nativeElement,r,s;this._getLayoutDirection()=="ltr"?(r=o,s=r+a):(s=this._tabListInner.nativeElement.offsetWidth-o,r=s-a);let g=this.scrollDistance,l=this.scrollDistance+n;rl&&(this.scrollDistance+=Math.min(s-l,r-g))}_checkPaginationEnabled(){if(this.disablePagination)this._showPaginationControls=!1;else{let A=this._tabListInner.nativeElement.scrollWidth,i=this._elementRef.nativeElement.offsetWidth,n=A-i>=5;n||(this.scrollDistance=0),n!==this._showPaginationControls&&(this._showPaginationControls=n,this._changeDetectorRef.markForCheck())}}_checkScrollingControls(){this.disablePagination?this._disableScrollAfter=this._disableScrollBefore=!0:(this._disableScrollBefore=this.scrollDistance==0,this._disableScrollAfter=this.scrollDistance==this._getMaxScrollDistance(),this._changeDetectorRef.markForCheck())}_getMaxScrollDistance(){let A=this._tabListInner.nativeElement.scrollWidth,i=this._tabListContainer.nativeElement.offsetWidth;return A-i||0}_alignInkBarToSelectedTab(){let A=this._items&&this._items.length?this._items.toArray()[this.selectedIndex]:null,i=A?A.elementRef.nativeElement:null;i?this._inkBar.alignToElement(i):this._inkBar.hide()}_stopInterval(){this._stopScrolling.next()}_handlePaginatorPress(A,i){i&&i.button!=null&&i.button!==0||(this._stopInterval(),Xm(kzA,SzA).pipe(Bt(hi(this._stopScrolling,this._destroyed))).subscribe(()=>{let{maxScrollDistance:n,distance:o}=this._scrollHeader(A);(o===0||o>=n)&&this._stopInterval()}))}_scrollTo(A){if(this.disablePagination)return{maxScrollDistance:0,distance:0};let i=this._getMaxScrollDistance();return this._scrollDistance=Math.max(0,Math.min(i,A)),this._scrollDistanceChanged=!0,this._checkScrollingControls(),{maxScrollDistance:i,distance:this._scrollDistance}}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,inputs:{disablePagination:[2,"disablePagination","disablePagination",he],selectedIndex:[2,"selectedIndex","selectedIndex",en]},outputs:{selectFocusedIndex:"selectFocusedIndex",indexFocused:"indexFocused"}})}return t})(),RzA=(()=>{class t extends xzA{_items;_tabListContainer;_tabList;_tabListInner;_nextPaginator;_previousPaginator;_inkBar;ariaLabel;ariaLabelledby;disableRipple=!1;ngAfterContentInit(){this._inkBar=new wK(this._items),super.ngAfterContentInit()}_itemSelected(A){A.preventDefault()}static \u0275fac=(()=>{let A;return function(n){return(A||(A=ui(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-tab-header"]],contentQueries:function(i,n,o){if(i&1&&ua(o,fgA,4),i&2){let a;ce(a=Ce())&&(n._items=a)}},viewQuery:function(i,n){if(i&1&&ai(lzA,7)(czA,7)(CzA,7)(IzA,5)(dzA,5),i&2){let o;ce(o=Ce())&&(n._tabListContainer=o.first),ce(o=Ce())&&(n._tabList=o.first),ce(o=Ce())&&(n._tabListInner=o.first),ce(o=Ce())&&(n._nextPaginator=o.first),ce(o=Ce())&&(n._previousPaginator=o.first)}},hostAttrs:[1,"mat-mdc-tab-header"],hostVars:4,hostBindings:function(i,n){i&2&&ae("mat-mdc-tab-header-pagination-controls-enabled",n._showPaginationControls)("mat-mdc-tab-header-rtl",n._getLayoutDirection()=="rtl")},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],disableRipple:[2,"disableRipple","disableRipple",he]},features:[dt],ngContentSelectors:vK,decls:13,vars:10,consts:[["previousPaginator",""],["tabListContainer",""],["tabList",""],["tabListInner",""],["nextPaginator",""],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-before",3,"click","mousedown","touchend","matRippleDisabled"],[1,"mat-mdc-tab-header-pagination-chevron"],[1,"mat-mdc-tab-label-container",3,"keydown"],["role","tablist",1,"mat-mdc-tab-list",3,"cdkObserveContent"],[1,"mat-mdc-tab-labels"],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-after",3,"mousedown","click","touchend","matRippleDisabled"]],template:function(i,n){if(i&1){let o=JA();Ht(),m(0,"div",5,0),eA("click",function(){return Z(o),X(n._handlePaginatorClick("before"))})("mousedown",function(r){return Z(o),X(n._handlePaginatorPress("before",r))})("touchend",function(){return Z(o),X(n._stopInterval())}),GA(2,"div",6),w(),m(3,"div",7,1),eA("keydown",function(r){return Z(o),X(n._handleKeydown(r))}),m(5,"div",8,2),eA("cdkObserveContent",function(){return Z(o),X(n._onContentChanges())}),m(7,"div",9,3),He(9),w()()(),m(10,"div",10,4),eA("mousedown",function(r){return Z(o),X(n._handlePaginatorPress("after",r))})("click",function(){return Z(o),X(n._handlePaginatorClick("after"))})("touchend",function(){return Z(o),X(n._stopInterval())}),GA(12,"div",6),w()}i&2&&(ae("mat-mdc-tab-header-pagination-disabled",n._disableScrollBefore),AA("matRippleDisabled",n._disableScrollBefore||n.disableRipple),p(3),ae("_mat-animation-noopable",n._animationsDisabled),p(2),ie("aria-label",n.ariaLabel||null)("aria-labelledby",n.ariaLabelledby||null),p(5),ae("mat-mdc-tab-header-pagination-disabled",n._disableScrollAfter),AA("matRippleDisabled",n._disableScrollAfter||n.disableRipple))},dependencies:[ig,xJ],styles:[`.mat-mdc-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mdc-tab-indicator .mdc-tab-indicator__content{transition-duration:var(--mat-tab-animation-duration, 250ms)}.mat-mdc-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;outline:0}.mat-mdc-tab-header-pagination::-moz-focus-inner{border:0}.mat-mdc-tab-header-pagination .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-controls-enabled .mat-mdc-tab-header-pagination{display:flex}.mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after{padding-left:4px}.mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-pagination-after{padding-right:4px}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-mdc-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px;border-color:var(--mat-tab-pagination-icon-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-disabled{box-shadow:none;cursor:default;pointer-events:none}.mat-mdc-tab-header-pagination-disabled .mat-mdc-tab-header-pagination-chevron{opacity:.4}.mat-mdc-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-mdc-tab-list{transition:none}.mat-mdc-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1;border-bottom-style:solid;border-bottom-width:var(--mat-tab-divider-height, 1px);border-bottom-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-group-inverted-header .mat-mdc-tab-label-container{border-bottom:none;border-top-style:solid;border-top-width:var(--mat-tab-divider-height, 1px);border-top-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-labels{display:flex;flex:1 0 auto}[mat-align-tabs=center]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:flex-end}.cdk-drop-list .mat-mdc-tab-labels,.mat-mdc-tab-labels.cdk-drop-list{min-height:var(--mat-tab-container-height, 48px)}.mat-mdc-tab::before{margin:5px}@media(forced-colors: active){.mat-mdc-tab[aria-disabled=true]{color:GrayText}} +`],encapsulation:2})}return t})(),NzA=new yA("MAT_TABS_CONFIG"),QgA=(()=>{class t extends Jg{_host=h(DK);_ngZone=h(Oe);_centeringSub=Jn.EMPTY;_leavingSub=Jn.EMPTY;constructor(){super()}ngOnInit(){super.ngOnInit(),this._centeringSub=this._host._beforeCentering.pipe(cn(this._host._isCenterPosition())).subscribe(A=>{this._host._content&&A&&!this.hasAttached()&&this._ngZone.run(()=>{Promise.resolve().then(),this.attach(this._host._content)})}),this._leavingSub=this._host._afterLeavingCenter.subscribe(()=>{this._host.preserveContent||this._ngZone.run(()=>this.detach())})}ngOnDestroy(){super.ngOnDestroy(),this._centeringSub.unsubscribe(),this._leavingSub.unsubscribe()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matTabBodyHost",""]],features:[dt]})}return t})(),DK=(()=>{class t{_elementRef=h(ge);_dir=h(xo,{optional:!0});_ngZone=h(Oe);_injector=h(ft);_renderer=h(Fi);_diAnimationsDisabled=qi();_eventCleanups;_initialized=!1;_fallbackTimer;_positionIndex;_dirChangeSubscription=Jn.EMPTY;_position;_previousPosition;_onCentering=new WA;_beforeCentering=new WA;_afterLeavingCenter=new WA;_onCentered=new WA(!0);_portalHost;_contentElement;_content;animationDuration="500ms";preserveContent=!1;set position(A){this._positionIndex=A,this._computePositionAnimationState()}constructor(){if(this._dir){let A=h(mt);this._dirChangeSubscription=this._dir.change.subscribe(i=>{this._computePositionAnimationState(i),A.markForCheck()})}}ngOnInit(){this._bindTransitionEvents(),this._position==="center"&&(this._setActiveClass(!0),Yn(()=>this._onCentering.emit(this._elementRef.nativeElement.clientHeight),{injector:this._injector})),this._initialized=!0}ngOnDestroy(){clearTimeout(this._fallbackTimer),this._eventCleanups?.forEach(A=>A()),this._dirChangeSubscription.unsubscribe()}_bindTransitionEvents(){this._ngZone.runOutsideAngular(()=>{let A=this._elementRef.nativeElement,i=n=>{n.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.remove("mat-tab-body-animating"),n.type==="transitionend"&&this._transitionDone())};this._eventCleanups=[this._renderer.listen(A,"transitionstart",n=>{n.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.add("mat-tab-body-animating"),this._transitionStarted())}),this._renderer.listen(A,"transitionend",i),this._renderer.listen(A,"transitioncancel",i)]})}_transitionStarted(){clearTimeout(this._fallbackTimer);let A=this._position==="center";this._beforeCentering.emit(A),A&&this._onCentering.emit(this._elementRef.nativeElement.clientHeight)}_transitionDone(){this._position==="center"?this._onCentered.emit():this._previousPosition==="center"&&this._afterLeavingCenter.emit()}_setActiveClass(A){this._elementRef.nativeElement.classList.toggle("mat-mdc-tab-body-active",A)}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_isCenterPosition(){return this._positionIndex===0}_computePositionAnimationState(A=this._getLayoutDirection()){this._previousPosition=this._position,this._positionIndex<0?this._position=A=="ltr"?"left":"right":this._positionIndex>0?this._position=A=="ltr"?"right":"left":this._position="center",this._animationsDisabled()?this._simulateTransitionEvents():this._initialized&&(this._position==="center"||this._previousPosition==="center")&&(clearTimeout(this._fallbackTimer),this._fallbackTimer=this._ngZone.runOutsideAngular(()=>setTimeout(()=>this._simulateTransitionEvents(),100)))}_simulateTransitionEvents(){this._transitionStarted(),Yn(()=>this._transitionDone(),{injector:this._injector})}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0ms"||this.animationDuration==="0s"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tab-body"]],viewQuery:function(i,n){if(i&1&&ai(QgA,5)(BzA,5),i&2){let o;ce(o=Ce())&&(n._portalHost=o.first),ce(o=Ce())&&(n._contentElement=o.first)}},hostAttrs:[1,"mat-mdc-tab-body"],hostVars:1,hostBindings:function(i,n){i&2&&ie("inert",n._position==="center"?null:"")},inputs:{_content:[0,"content","_content"],animationDuration:"animationDuration",preserveContent:"preserveContent",position:"position"},outputs:{_onCentering:"_onCentering",_beforeCentering:"_beforeCentering",_onCentered:"_onCentered"},decls:3,vars:6,consts:[["content",""],["cdkScrollable","",1,"mat-mdc-tab-body-content"],["matTabBodyHost",""]],template:function(i,n){i&1&&(m(0,"div",1,0),vt(2,EzA,0,0,"ng-template",2),w()),i&2&&ae("mat-tab-body-content-left",n._position==="left")("mat-tab-body-content-right",n._position==="right")("mat-tab-body-content-can-animate",n._position==="center"||n._previousPosition==="center")},dependencies:[QgA,IC],styles:[`.mat-mdc-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-mdc-tab-body.mat-mdc-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-mdc-tab-group.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body.mat-mdc-tab-body-active{overflow-y:hidden}.mat-mdc-tab-body-content{height:100%;overflow:auto;transform:none;visibility:hidden}.mat-tab-body-animating>.mat-mdc-tab-body-content,.mat-mdc-tab-body-active>.mat-mdc-tab-body-content{visibility:visible}.mat-tab-body-animating>.mat-mdc-tab-body-content{min-height:1px}.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body-content{overflow:hidden}.mat-tab-body-content-can-animate{transition:transform var(--mat-tab-animation-duration) 1ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable .mat-tab-body-content-can-animate{transition:none}.mat-tab-body-content-left{transform:translate3d(-100%, 0, 0)}.mat-tab-body-content-right{transform:translate3d(100%, 0, 0)} +`],encapsulation:2})}return t})(),j7=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(mt);_ngZone=h(Oe);_tabsSubscription=Jn.EMPTY;_tabLabelSubscription=Jn.EMPTY;_tabBodySubscription=Jn.EMPTY;_diAnimationsDisabled=qi();_allTabs;_tabBodies;_tabBodyWrapper;_tabHeader;_tabs=new nl;_indexToSelect=0;_lastFocusedTabIndex=null;_tabBodyWrapperHeight=0;color;get fitInkBarToContent(){return this._fitInkBarToContent}set fitInkBarToContent(A){this._fitInkBarToContent=A,this._changeDetectorRef.markForCheck()}_fitInkBarToContent=!1;stretchTabs=!0;alignTabs=null;dynamicHeight=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(A){this._indexToSelect=isNaN(A)?null:A}_selectedIndex=null;headerPosition="above";get animationDuration(){return this._animationDuration}set animationDuration(A){let i=A+"";this._animationDuration=/^\d+$/.test(i)?A+"ms":i}_animationDuration;get contentTabIndex(){return this._contentTabIndex}set contentTabIndex(A){this._contentTabIndex=isNaN(A)?null:A}_contentTabIndex=null;disablePagination=!1;disableRipple=!1;preserveContent=!1;get backgroundColor(){return this._backgroundColor}set backgroundColor(A){let i=this._elementRef.nativeElement.classList;i.remove("mat-tabs-with-background",`mat-background-${this.backgroundColor}`),A&&i.add("mat-tabs-with-background",`mat-background-${A}`),this._backgroundColor=A}_backgroundColor;ariaLabel;ariaLabelledby;selectedIndexChange=new WA;focusChange=new WA;animationDone=new WA;selectedTabChange=new WA(!0);_groupId;_isServer=!h(Ii).isBrowser;constructor(){let A=h(NzA,{optional:!0});this._groupId=h(an).getId("mat-tab-group-"),this.animationDuration=A&&A.animationDuration?A.animationDuration:"500ms",this.disablePagination=A&&A.disablePagination!=null?A.disablePagination:!1,this.dynamicHeight=A&&A.dynamicHeight!=null?A.dynamicHeight:!1,A?.contentTabIndex!=null&&(this.contentTabIndex=A.contentTabIndex),this.preserveContent=!!A?.preserveContent,this.fitInkBarToContent=A&&A.fitInkBarToContent!=null?A.fitInkBarToContent:!1,this.stretchTabs=A&&A.stretchTabs!=null?A.stretchTabs:!0,this.alignTabs=A&&A.alignTabs!=null?A.alignTabs:null}ngAfterContentChecked(){let A=this._indexToSelect=this._clampTabIndex(this._indexToSelect);if(this._selectedIndex!=A){let i=this._selectedIndex==null;if(!i){this.selectedTabChange.emit(this._createChangeEvent(A));let n=this._tabBodyWrapper.nativeElement;n.style.minHeight=n.clientHeight+"px"}Promise.resolve().then(()=>{this._tabs.forEach((n,o)=>n.isActive=o===A),i||(this.selectedIndexChange.emit(A),this._tabBodyWrapper.nativeElement.style.minHeight="")})}this._tabs.forEach((i,n)=>{i.position=n-A,this._selectedIndex!=null&&i.position==0&&!i.origin&&(i.origin=A-this._selectedIndex)}),this._selectedIndex!==A&&(this._selectedIndex=A,this._lastFocusedTabIndex=null,this._changeDetectorRef.markForCheck())}ngAfterContentInit(){this._subscribeToAllTabChanges(),this._subscribeToTabLabels(),this._tabsSubscription=this._tabs.changes.subscribe(()=>{let A=this._clampTabIndex(this._indexToSelect);if(A===this._selectedIndex){let i=this._tabs.toArray(),n;for(let o=0;o{i[A].isActive=!0,this.selectedTabChange.emit(this._createChangeEvent(A))})}this._changeDetectorRef.markForCheck()})}ngAfterViewInit(){this._tabBodySubscription=this._tabBodies.changes.subscribe(()=>this._bodyCentered(!0))}_subscribeToAllTabChanges(){this._allTabs.changes.pipe(cn(this._allTabs)).subscribe(A=>{this._tabs.reset(A.filter(i=>i._closestTabGroup===this||!i._closestTabGroup)),this._tabs.notifyOnChanges()})}ngOnDestroy(){this._tabs.destroy(),this._tabsSubscription.unsubscribe(),this._tabLabelSubscription.unsubscribe(),this._tabBodySubscription.unsubscribe()}realignInkBar(){this._tabHeader&&this._tabHeader._alignInkBarToSelectedTab()}updatePagination(){this._tabHeader&&this._tabHeader.updatePagination()}focusTab(A){let i=this._tabHeader;i&&(i.focusIndex=A)}_focusChanged(A){this._lastFocusedTabIndex=A,this.focusChange.emit(this._createChangeEvent(A))}_createChangeEvent(A){let i=new yK;return i.index=A,this._tabs&&this._tabs.length&&(i.tab=this._tabs.toArray()[A]),i}_subscribeToTabLabels(){this._tabLabelSubscription&&this._tabLabelSubscription.unsubscribe(),this._tabLabelSubscription=hi(...this._tabs.map(A=>A._stateChanges)).subscribe(()=>this._changeDetectorRef.markForCheck())}_clampTabIndex(A){return Math.min(this._tabs.length-1,Math.max(A||0,0))}_getTabLabelId(A,i){return A.id||`${this._groupId}-label-${i}`}_getTabContentId(A){return`${this._groupId}-content-${A}`}_setTabBodyWrapperHeight(A){if(!this.dynamicHeight||!this._tabBodyWrapperHeight){this._tabBodyWrapperHeight=A;return}let i=this._tabBodyWrapper.nativeElement;i.style.height=this._tabBodyWrapperHeight+"px",this._tabBodyWrapper.nativeElement.offsetHeight&&(i.style.height=A+"px")}_removeTabBodyWrapperHeight(){let A=this._tabBodyWrapper.nativeElement;this._tabBodyWrapperHeight=A.clientHeight,A.style.height="",this._ngZone.run(()=>this.animationDone.emit())}_handleClick(A,i,n){i.focusIndex=n,A.disabled||(this.selectedIndex=n)}_getTabIndex(A){let i=this._lastFocusedTabIndex??this.selectedIndex;return A===i?0:-1}_tabFocusChanged(A,i){A&&A!=="mouse"&&A!=="touch"&&(this._tabHeader.focusIndex=i)}_bodyCentered(A){A&&this._tabBodies?.forEach((i,n)=>i._setActiveClass(n===this._selectedIndex))}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0"||this.animationDuration==="0ms"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tab-group"]],contentQueries:function(i,n,o){if(i&1&&ua(o,Hm,5),i&2){let a;ce(a=Ce())&&(n._allTabs=a)}},viewQuery:function(i,n){if(i&1&&ai(QzA,5)(hzA,5)(DK,5),i&2){let o;ce(o=Ce())&&(n._tabBodyWrapper=o.first),ce(o=Ce())&&(n._tabHeader=o.first),ce(o=Ce())&&(n._tabBodies=o)}},hostAttrs:[1,"mat-mdc-tab-group"],hostVars:11,hostBindings:function(i,n){i&2&&(ie("mat-align-tabs",n.alignTabs),zo("mat-"+(n.color||"primary")),wn("--mat-tab-animation-duration",n.animationDuration),ae("mat-mdc-tab-group-dynamic-height",n.dynamicHeight)("mat-mdc-tab-group-inverted-header",n.headerPosition==="below")("mat-mdc-tab-group-stretch-tabs",n.stretchTabs))},inputs:{color:"color",fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",he],stretchTabs:[2,"mat-stretch-tabs","stretchTabs",he],alignTabs:[0,"mat-align-tabs","alignTabs"],dynamicHeight:[2,"dynamicHeight","dynamicHeight",he],selectedIndex:[2,"selectedIndex","selectedIndex",en],headerPosition:"headerPosition",animationDuration:"animationDuration",contentTabIndex:[2,"contentTabIndex","contentTabIndex",en],disablePagination:[2,"disablePagination","disablePagination",he],disableRipple:[2,"disableRipple","disableRipple",he],preserveContent:[2,"preserveContent","preserveContent",he],backgroundColor:"backgroundColor",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"]},outputs:{selectedIndexChange:"selectedIndexChange",focusChange:"focusChange",animationDone:"animationDone",selectedTabChange:"selectedTabChange"},exportAs:["matTabGroup"],features:[It([{provide:ugA,useExisting:t}])],ngContentSelectors:vK,decls:9,vars:8,consts:[["tabHeader",""],["tabBodyWrapper",""],["tabNode",""],[3,"indexFocused","selectFocusedIndex","selectedIndex","disableRipple","disablePagination","aria-label","aria-labelledby"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"id","mdc-tab--active","class","disabled","fitInkBarToContent"],[1,"mat-mdc-tab-body-wrapper"],["role","tabpanel",3,"id","class","content","position","animationDuration","preserveContent"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"click","cdkFocusChange","id","disabled","fitInkBarToContent"],[1,"mdc-tab__ripple"],["mat-ripple","",1,"mat-mdc-tab-ripple",3,"matRippleTrigger","matRippleDisabled"],[1,"mdc-tab__content"],[1,"mdc-tab__text-label"],[3,"cdkPortalOutlet"],["role","tabpanel",3,"_onCentered","_onCentering","_beforeCentering","id","content","position","animationDuration","preserveContent"]],template:function(i,n){if(i&1){let o=JA();Ht(),m(0,"mat-tab-header",3,0),eA("indexFocused",function(r){return Z(o),X(n._focusChanged(r))})("selectFocusedIndex",function(r){return Z(o),X(n.selectedIndex=r)}),Ut(2,pzA,8,17,"div",4,_i),w(),V(4,wzA,1,0),m(5,"div",5,1),Ut(7,DzA,1,10,"mat-tab-body",6,_i),w()}i&2&&(AA("selectedIndex",n.selectedIndex||0)("disableRipple",n.disableRipple)("disablePagination",n.disablePagination),gp("aria-label",n.ariaLabel)("aria-labelledby",n.ariaLabelledby),p(2),Jt(n._tabs),p(2),W(n._isServer?4:-1),p(),ae("_mat-animation-noopable",n._animationsDisabled()),p(2),Jt(n._tabs))},dependencies:[RzA,fgA,l9,ig,Jg,DK],styles:[`.mdc-tab{min-width:90px;padding:0 24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;z-index:1;touch-action:manipulation}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab--active .mdc-tab__text-label{transition-delay:100ms}._mat-animation-noopable .mdc-tab__text-label{transition:none}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transition:var(--mat-tab-animation-duration, 250ms) transform cubic-bezier(0.4, 0, 0.2, 1);transform-origin:left;opacity:0}.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}._mat-animation-noopable .mdc-tab-indicator__content,.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mat-mdc-tab-ripple.mat-mdc-tab-ripple{position:absolute;top:0;left:0;bottom:0;right:0;pointer-events:none}.mat-mdc-tab{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none;background:none;height:var(--mat-tab-container-height, 48px);font-family:var(--mat-tab-label-text-font, var(--mat-sys-title-small-font));font-size:var(--mat-tab-label-text-size, var(--mat-sys-title-small-size));letter-spacing:var(--mat-tab-label-text-tracking, var(--mat-sys-title-small-tracking));line-height:var(--mat-tab-label-text-line-height, var(--mat-sys-title-small-line-height));font-weight:var(--mat-tab-label-text-weight, var(--mat-sys-title-small-weight))}.mat-mdc-tab.mdc-tab{flex-grow:0}.mat-mdc-tab .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-indicator-color, var(--mat-sys-primary));border-top-width:var(--mat-tab-active-indicator-height, 2px);border-radius:var(--mat-tab-active-indicator-shape, 0)}.mat-mdc-tab:hover .mdc-tab__text-label{color:var(--mat-tab-inactive-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab:focus .mdc-tab__text-label{color:var(--mat-tab-inactive-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__text-label{color:var(--mat-tab-active-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__ripple::before,.mat-mdc-tab.mdc-tab--active .mat-ripple-element{background-color:var(--mat-tab-active-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab__text-label{color:var(--mat-tab-active-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-hover-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab__text-label{color:var(--mat-tab-active-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-focus-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mat-mdc-tab-disabled{opacity:.4;pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__content{pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__ripple::before,.mat-mdc-tab.mat-mdc-tab-disabled .mat-ripple-element{background-color:var(--mat-tab-disabled-ripple-color, var(--mat-sys-on-surface-variant))}.mat-mdc-tab .mdc-tab__ripple::before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-inactive-label-text-color, var(--mat-sys-on-surface));display:inline-flex;align-items:center}.mat-mdc-tab .mdc-tab__content{position:relative;pointer-events:auto}.mat-mdc-tab:hover .mdc-tab__ripple::before{opacity:.04}.mat-mdc-tab.cdk-program-focused .mdc-tab__ripple::before,.mat-mdc-tab.cdk-keyboard-focused .mdc-tab__ripple::before{opacity:.12}.mat-mdc-tab .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-group.mat-mdc-tab-group-stretch-tabs>.mat-mdc-tab-header .mat-mdc-tab{flex-grow:1}.mat-mdc-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination{background-color:var(--mat-tab-background-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-focus-indicator::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-focus-indicator::before{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mdc-tab__ripple::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mdc-tab__ripple::before{background-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header{flex-direction:column-reverse}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header .mdc-tab-indicator__content--underline{align-self:flex-start}.mat-mdc-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important} +`],encapsulation:2})}return t})(),yK=class{index;tab};var q7=new yA("LOGO_COMPONENT");var FzA={noSessionsFound:"No sessions found",readonlyChip:"Read-only",filterSessionsLabel:"Search using session ID"},mgA=new yA("Session Tab Messages",{factory:()=>FzA});function _zA(t,e){if(t&1&&(m(0,"div",1)(1,"mat-form-field",4)(2,"mat-label"),K(3),w(),m(4,"mat-icon",5),K(5,"filter_list"),w(),GA(6,"input",6),w()()),t&2){let A=v();p(3),qA(A.i18n.filterSessionsLabel),p(3),AA("formControl",A.filterControl)}}function LzA(t,e){t&1&&(m(0,"div",2),GA(1,"mat-progress-bar",7),w())}function GzA(t,e){if(t&1&&(m(0,"div",3),K(1),w()),t&2){let A=v();p(),qA(A.i18n.noSessionsFound)}}function KzA(t,e){if(t&1&&(m(0,"div",14)(1,"mat-icon"),K(2,"visibility"),w(),K(3),w()),t&2){let A=v(3);p(3),_e(" ",A.i18n.readonlyChip," ")}}function UzA(t,e){if(t&1){let A=JA();m(0,"div",10),eA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.getSession(n.id))}),m(1,"div",11)(2,"div",12),K(3),w(),m(4,"div",13),K(5),w()(),V(6,KzA,4,1,"div",14),ri(7,"async"),w()}if(t&2){let A=e.$implicit,i=v(2);AA("ngClass",A.id===i.sessionId?"session-item current":"session-item"),p(3),qA(A.id),p(2),qA(i.getDate(A)),p(),W(Ci(7,4,i.sessionService.canEdit(i.userId,A))===!1?6:-1)}}function JzA(t,e){t&1&&(m(0,"div",2),GA(1,"mat-progress-bar",7),w())}function YzA(t,e){if(t&1){let A=JA();V(0,JzA,2,0,"div",2),m(1,"div",15)(2,"button",16),eA("click",function(){Z(A);let n=v(2);return X(n.loadMoreSessions())}),K(3,"Load more"),w()()}if(t&2){v(2);let A=Ws(3);W(A?0:-1)}}function TzA(t,e){if(t&1&&(m(0,"div",8),Ut(1,UzA,8,6,"div",9,_i),w(),V(3,YzA,4,1),ri(4,"async")),t&2){let A=v();p(),Jt(A.sessionList),p(2),W(Ci(4,1,A.isSessionFilteringEnabled)&&A.canLoadMoreSessions?3:-1)}}var Xh=class t{userId="";appName="";sessionId="";sessionSelected=new WA;sessionReloaded=new WA;SESSIONS_PAGE_LIMIT=100;sessionList=[];canLoadMoreSessions=!1;pageToken="";filterControl=new Ss("");refreshSessionsSubject=new $A;getSessionSubject=new $A;reloadSessionSubject=new $A;route=h(ag);changeDetectorRef=h(mt);sessionService=h(dl);uiStateService=h(Bl);i18n=h(mgA);featureFlagService=h(vr);isSessionFilteringEnabled=this.featureFlagService.isSessionFilteringEnabled();isLoadingMoreInProgress=jA(!1);constructor(){this.filterControl.valueChanges.pipe(Ps(300)).subscribe(()=>{this.pageToken="",this.sessionList=[],this.refreshSessionsSubject.next()}),this.refreshSessionsSubject.pipe(oi(()=>{this.uiStateService.setIsSessionListLoading(!0)}),ki(()=>{let e=this.filterControl.value||void 0;return this.isSessionFilteringEnabled?this.sessionService.listSessions(this.userId,this.appName,{filter:e,pageToken:this.pageToken,pageSize:this.SESSIONS_PAGE_LIMIT}).pipe(ea(()=>se({items:[],nextPageToken:""}))):this.sessionService.listSessions(this.userId,this.appName).pipe(ea(()=>se({items:[],nextPageToken:""})))}),oi(({items:e,nextPageToken:A})=>{this.sessionList=Array.from(new Map([...this.sessionList,...e].map(i=>[i.id,i])).values()).sort((i,n)=>Number(n.lastUpdateTime)-Number(i.lastUpdateTime)),this.pageToken=A??"",this.canLoadMoreSessions=!!A,this.changeDetectorRef.markForCheck()})).subscribe(()=>{this.isLoadingMoreInProgress.set(!1),this.uiStateService.setIsSessionListLoading(!1)},()=>{this.isLoadingMoreInProgress.set(!1),this.uiStateService.setIsSessionListLoading(!1)}),this.getSessionSubject.pipe(oi(()=>{this.uiStateService.setIsSessionLoading(!0)}),h2(this.featureFlagService.isInfinityMessageScrollingEnabled()),ki(([e,A])=>this.sessionService.getSession(this.userId,this.appName,e).pipe(fe(i=>({response:i,isInfinityScrollingEnabled:A}))).pipe(ea(()=>se(null)))),oi(e=>{if(!e)return;let A=this.fromApiResultToSession(e.response);e.isInfinityScrollingEnabled&&A.id&&this.uiStateService.lazyLoadMessages(A.id,{pageSize:100,pageToken:""}).pipe(To()).subscribe(),this.sessionSelected.emit(A),this.changeDetectorRef.markForCheck()})).subscribe(e=>{this.uiStateService.setIsSessionLoading(!1)},e=>{this.uiStateService.setIsSessionLoading(!1)}),this.reloadSessionSubject.pipe(h2(this.featureFlagService.isInfinityMessageScrollingEnabled()),ki(([e,A])=>this.sessionService.getSession(this.userId,this.appName,e).pipe(fe(i=>({response:i,isInfinityScrollingEnabled:A}))).pipe(ea(()=>se(null)))),oi(e=>{if(!e)return;let A=this.fromApiResultToSession(e.response);e.isInfinityScrollingEnabled&&A.id&&this.uiStateService.lazyLoadMessages(A.id,{pageSize:100,pageToken:""},!0).pipe(To()).subscribe(),this.sessionReloaded.emit(A),this.changeDetectorRef.markForCheck()})).subscribe()}ngOnInit(){this.featureFlagService.isSessionFilteringEnabled().subscribe(e=>{if(e){let A=this.route.snapshot.queryParams.session;A&&this.filterControl.setValue(A)}}),setTimeout(()=>{this.refreshSessionsSubject.next()},500)}getSession(e){e&&this.getSessionSubject.next(e)}loadMoreSessions(){this.isLoadingMoreInProgress.set(!0),this.refreshSessionsSubject.next()}getDate(e){let A=e.lastUpdateTime||0;return new Date(A*1e3).toLocaleString()}fromApiResultToSession(e){return{id:e.id??"",appName:e.appName??"",userId:e.userId??"",state:e.state??{},events:e.events??[]}}reloadSession(e){this.reloadSessionSubject.next(e)}refreshSession(e){let A=null;if(this.sessionList.length>0){let i=this.sessionList.findIndex(n=>n.id===e);i===this.sessionList.length-1&&(i=-1),A=this.sessionList[i+1]}return this.isSessionFilteringEnabled?this.filterControl.setValue(""):(this.sessionList=[],this.refreshSessionsSubject.next()),A}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-session-tab"]],inputs:{userId:"userId",appName:"appName",sessionId:"sessionId"},outputs:{sessionSelected:"sessionSelected",sessionReloaded:"sessionReloaded"},decls:8,vars:7,consts:[[1,"session-wrapper"],[1,"session-filter-container"],[1,"loading-spinner-container"],[1,"empty-state"],["appearance","outline",1,"session-filter"],["matPrefix",""],["matInput","",3,"formControl"],["mode","indeterminate"],[1,"session-tab-container",2,"margin-top","16px"],[3,"ngClass"],[3,"click","ngClass"],[1,"session-info"],[1,"session-id"],[1,"session-date"],[1,"readonly-badge"],[1,"load-more"],["mat-button","","color","primary",3,"click"]],template:function(A,i){if(A&1&&(m(0,"div",0),V(1,_zA,7,2,"div",1),ri(2,"async"),Ur(3),ri(4,"async"),V(5,LzA,2,0,"div",2)(6,GzA,2,1,"div",3)(7,TzA,5,3),w()),A&2){p(),W(Ci(2,2,i.isSessionFilteringEnabled)?1:-1),p(2);let n=_g(Ci(4,4,i.uiStateService.isSessionListLoading()));p(2),W(n&&!i.isLoadingMoreInProgress()?5:!n&&i.sessionList.length===0?6:7)}},dependencies:[gs,y7,fn,Yr,ta,Zl,y9,rl,Ka,Nn,uo,fo,r0,v1,Fs,Fn,cl,ls],styles:[".session-wrapper[_ngcontent-%COMP%]{padding-left:25px;padding-right:25px;font-size:14px;font-weight:700;color:var(--session-tab-session-wrapper-color);display:flex;flex-direction:column;overflow:hidden;height:100%}.session-wrapper[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{color:initial;padding-top:1em;text-align:center;font-weight:400;font-style:italic}.session-wrapper[_ngcontent-%COMP%] .session-filter-container[_ngcontent-%COMP%]{background-color:var(--session-tab-session-filter-container-background-color);border-radius:8px;padding:16px;margin-bottom:16px;margin-top:16px}.session-wrapper[_ngcontent-%COMP%] .session-filter[_ngcontent-%COMP%]{width:100%}.session-wrapper[_ngcontent-%COMP%] .session-filter[_ngcontent-%COMP%] .mdc-floating-label--float-above{background-color:var(--session-tab-session-filter-container-background-color)}.session-tab-container[_ngcontent-%COMP%]{flex:1;overflow-y:auto}.session-item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;border:none;background-color:var(--session-tab-session-item-background-color);border-radius:8px;margin-bottom:4px;cursor:pointer}.session-item[_ngcontent-%COMP%]:hover{background-color:var(--session-tab-session-item-hover-background-color)}.session-item.current[_ngcontent-%COMP%]{background-color:var(--session-tab-session-item-current-background-color)}.session-item[_ngcontent-%COMP%] mat-chip[_ngcontent-%COMP%]{margin-right:11px}.session-id[_ngcontent-%COMP%]{color:var(--session-tab-session-id-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.session-date[_ngcontent-%COMP%]{color:var(--session-tab-session-date-color);font-family:Roboto;font-size:12px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.3px}.session-info[_ngcontent-%COMP%]{padding:11px}.loading-spinner-container[_ngcontent-%COMP%]{margin-left:auto;margin-right:auto;margin-top:2em;width:100%}.load-more[_ngcontent-%COMP%]{display:flex;justify-content:center;margin-top:1em}.readonly-badge[_ngcontent-%COMP%]{color:var(--chat-readonly-badge-color);background-color:var(--chat-readonly-badge-background-color);border-radius:4px;padding:1px 6px;display:flex;align-items:center;margin-right:8px;font-size:12px;line-height:16px;gap:4px;white-space:nowrap}.readonly-badge[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;padding-top:1px;flex-shrink:0}"]})};var HzA={stateIsEmpty:"State is empty"},pgA=new yA("State Tab Messages",{factory:()=>HzA});function zzA(t,e){if(t&1&&(m(0,"div",1),K(1),w()),t&2){let A=v();p(),qA(A.i18n.stateIsEmpty)}}function OzA(t,e){if(t&1&&(m(0,"div"),GA(1,"ngx-json-viewer",2),w()),t&2){let A=v();p(),AA("json",A.sessionState)}}var V7=class t{sessionState;i18n=h(pgA);get isEmptyState(){return!this.sessionState||Object.keys(this.sessionState).length===0}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-state-tab"]],inputs:{sessionState:"sessionState"},decls:3,vars:1,consts:[[1,"state-wrapper"],[1,"empty-state"],[3,"json"]],template:function(A,i){A&1&&(m(0,"div",0),V(1,zzA,2,1,"div",1)(2,OzA,2,1,"div"),w()),A&2&&(p(),W(i.isEmptyState?1:2))},dependencies:[B0,Y2],styles:[".state-wrapper[_ngcontent-%COMP%]{padding-left:25px;padding-right:25px;margin-top:16px}.state-wrapper[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{text-align:center;font-style:italic}"]})};function PzA(t,e){t&1&&Li(0,"div",8)}function jzA(t,e){if(t&1&&(ci(0,"span",14),K(1),fi()),t&2){let A=v().$implicit,i=v();wn("left",i.getRelativeStart(A.span)+5,"%"),p(),_e("",(i.toMs(A.span.end_time)-i.toMs(A.span.start_time)).toFixed(2),"ms")}}function qzA(t,e){if(t&1){let A=JA();ci(0,"div",5),f2("click",function(){let n=Z(A).$implicit,o=v();return X(o.selectRow(n))})("mouseenter",function(){let n=Z(A).$implicit,o=v();return X(o.onHover(n))})("mouseleave",function(){Z(A);let n=v();return X(n.onHoverOut())}),ci(1,"div",6)(2,"div",7),Ut(3,PzA,1,0,"div",8,wB),fi(),ci(5,"span",9),K(6),fi(),ci(7,"div",10),K(8),fi()(),ci(9,"div",11)(10,"div",12),K(11),fi(),V(12,jzA,2,3,"span",13),fi()()}if(t&2){let A=e.$implicit,i=v();ae("selected",i.rowSelected(A)),p(3),Jt(i.getArray(A.level)),p(2),ae("is-event-row",i.isEventRow(A)),p(),_e(" ",i.getSpanIcon(A.span.name)," "),p(),wn("width",400-A.level*20,"px"),ae("is-event-row",i.isEventRow(A)),p(),_e(" ",A.span.name," "),p(2),wn("left",i.getRelativeStart(A.span),"%")("width",i.getRelativeWidth(A.span),"%"),p(),_e(" ",(i.toMs(A.span.end_time)-i.toMs(A.span.start_time)).toFixed(2),"ms "),p(),W(i.getRelativeWidth(A.span)<10?12:-1)}}var W7=class t{spans=[];invocationId="";tree=[];eventData;baseStartTimeMs=0;totalDurationMs=1;flatTree=[];traceLabelIconMap=new Map([["Invocation","start"],["agent_run","robot"],["invoke_agent","robot_2"],["tool","build"],["execute_tool","build"],["call_llm","chat"]]);selectedRow=void 0;traceService=h(T2);constructor(){}ngOnInit(){this.tree=this.buildSpanTree(this.spans),this.flatTree=this.flattenTree(this.tree);let e=this.getGlobalTimes(this.spans);this.baseStartTimeMs=e.start,this.totalDurationMs=e.duration,this.traceService.selectedTraceRow$.subscribe(A=>this.selectedRow=A),this.traceService.eventData$.subscribe(A=>this.eventData=A)}buildSpanTree(e){let A=e.map(o=>gA({},o)),i=new Map,n=[];return A.forEach(o=>i.set(o.span_id,o)),A.forEach(o=>{if(o.parent_span_id&&i.has(o.parent_span_id)){let a=i.get(o.parent_span_id);a.children=a.children||[],a.children.push(o)}else n.push(o)}),n}getGlobalTimes(e){let A=Math.min(...e.map(n=>this.toMs(n.start_time))),i=Math.max(...e.map(n=>this.toMs(n.end_time)));return{start:A,duration:i-A}}toMs(e){return e/1e6}getRelativeStart(e){return(this.toMs(e.start_time)-this.baseStartTimeMs)/this.totalDurationMs*100}getRelativeWidth(e){return(this.toMs(e.end_time)-this.toMs(e.start_time))/this.totalDurationMs*100}flattenTree(e,A=0){return e.flatMap(n=>[{span:n,level:A},...n.children?this.flattenTree(n.children,A+1):[]])}getSpanIcon(e){for(let[A,i]of this.traceLabelIconMap.entries())if(e.startsWith(A))return i;return"start"}getArray(e){return Array.from({length:e})}selectRow(e){if(this.selectedRow&&this.selectedRow.span_id==e.span.span_id){this.traceService.selectedRow(void 0),this.traceService.setHoveredMessages(void 0,this.invocationId);return}this.traceService.selectedRow(e.span),this.traceService.setHoveredMessages(e.span,this.invocationId)}rowSelected(e){return this.selectedRow==e.span}isEventRow(e){if(!e.span.attributes)return!1;let A=e?.span.attributes["gcp.vertex.agent.event_id"];return!!(A&&this.eventData&&this.eventData.has(A))}onHover(e){this.traceService.setHoveredMessages(e.span,this.invocationId)}onHoverOut(){this.traceService.setHoveredMessages(void 0,this.invocationId),this.selectedRow&&this.traceService.setHoveredMessages(this.selectedRow,this.invocationId)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-trace-tree"]],inputs:{spans:"spans",invocationId:"invocationId"},decls:8,vars:1,consts:[[2,"margin-top","15px"],[1,"invocation-id-container"],[1,"invocation-id"],[1,"trace-container"],[1,"trace-row",3,"selected"],[1,"trace-row",3,"click","mouseenter","mouseleave"],[1,"trace-row-left"],[1,"trace-indent"],[1,"indent-connector"],[1,"material-symbols-outlined",2,"margin-right","8px"],[1,"trace-label"],[1,"trace-bar-container"],[1,"trace-bar"],[1,"short-trace-bar-duration",3,"left"],[1,"short-trace-bar-duration"]],template:function(A,i){A&1&&(ci(0,"div",0)(1,"div",1),K(2,"Invocation ID: "),ci(3,"div",2),K(4),fi()(),ci(5,"div",3),Ut(6,qzA,13,16,"div",4,_i),fi()()),A&2&&(p(4),qA(i.invocationId),p(2),Jt(i.flatTree))},styles:[".trace-container[_ngcontent-%COMP%]{width:100%;white-space:nowrap;font-size:12px}.trace-label[_ngcontent-%COMP%]{width:400px;color:var(--trace-tree-trace-label-color);font-family:Google Sans Mono,monospace;font-size:13px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:0px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.trace-bar-container[_ngcontent-%COMP%]{width:100%;position:relative;height:16px}.trace-bar[_ngcontent-%COMP%]{position:absolute;height:18px;background-color:var(--trace-tree-trace-bar-background-color);border-radius:4px;padding-left:4px;overflow:hidden;font-size:11px;line-height:16px;color:var(--trace-tree-trace-bar-color);font-family:Google Sans}.short-trace-bar-duration[_ngcontent-%COMP%]{position:absolute;color:var(--trace-tree-short-trace-bar-duration-color)}.trace-duration[_ngcontent-%COMP%]{color:var(--trace-tree-trace-duration-color);font-weight:400;margin-left:4px}.trace-row[_ngcontent-%COMP%]{display:flex;align-items:stretch;position:relative;height:32px;align-items:center;cursor:pointer}.trace-row[_ngcontent-%COMP%]:hover{background-color:var(--trace-tree-trace-row-hover-background-color)}.trace-row.selected[_ngcontent-%COMP%]{background-color:var(--trace-tree-trace-row-selected-background-color)}.trace-indent[_ngcontent-%COMP%]{display:flex;flex-shrink:0;height:100%}.indent-connector[_ngcontent-%COMP%]{width:20px;position:relative;height:100%}.vertical-line[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:9px;width:1px;background-color:var(--trace-tree-vertical-line-background-color)}.horizontal-line[_ngcontent-%COMP%]{position:absolute;top:50%;left:9px;width:10px;height:1px;background-color:var(--trace-tree-horizontal-line-background-color)}.trace-row-left[_ngcontent-%COMP%]{display:flex;width:50%}.invocation-id-container[_ngcontent-%COMP%]{color:var(--trace-tree-invocation-id-container-color);font-size:14px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:0px;margin-bottom:5px}.invocation-id[_ngcontent-%COMP%]{font-family:Google Sans Mono,monospace}.trace-row-left[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .trace-row-left[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{color:var(--trace-tree-trace-row-left-span-div-color)}.trace-row-left[_ngcontent-%COMP%] .is-event-row[_ngcontent-%COMP%]{color:var(--trace-tree-trace-row-left-is-event-row-color)}"]})};var VzA={noInvocationsFound:"No invocations found",invocationsTitle:"Invocations"},wgA=new yA("Trace Tab Messages",{factory:()=>VzA});function WzA(t,e){if(t&1&&(m(0,"div",1),K(1),w()),t&2){let A=v();p(),qA(A.i18n.noInvocationsFound)}}function ZzA(t,e){if(t&1&&(m(0,"div",4)(1,"mat-expansion-panel")(2,"mat-expansion-panel-header")(3,"mat-panel-title"),K(4),w()(),GA(5,"app-trace-tree",5),w()()),t&2){let A=e.$implicit,i=v(2);p(4),_e(" ",i.invocToUserMsg.get(A.key)," "),p(),AA("spans",A.value)("invocationId",i.findInvocIdFromTraceId(A.key))}}function XzA(t,e){if(t&1&&(m(0,"h2",2),K(1),w(),m(2,"div",3),Ut(3,ZzA,6,3,"div",4,_i),ri(5,"keyvalue"),w()),t&2){let A=v();p(),qA(A.i18n.invocationsTitle),p(2),Jt(pU(5,1,A.invocTraces,A.mapOrderPreservingSort))}}var Z7=class t{traceData=[];invocTraces=new Map;invocToUserMsg=new Map;i18n=h(wgA);constructor(){}ngOnInit(){}ngOnChanges(e){"traceData"in e&&this.rebuildTrace()}rebuildTrace(){this.invocTraces=this.traceData.reduce((e,A)=>{let i=A.trace_id,n=e.get(i);return n?(n.push(A),n.sort((o,a)=>o.start_time-a.start_time)):e.set(i,[A]),e},new Map);for(let[e,A]of this.invocTraces)this.invocToUserMsg.set(e,this.findUserMsgFromInvocGroup(A))}getArray(e){return Array.from({length:e})}findUserMsgFromInvocGroup(e){let A=e?.find(i=>i.attributes!==void 0&&"gcp.vertex.agent.invocation_id"in i.attributes&&"gcp.vertex.agent.llm_request"in i.attributes);if(!A)return"[no invocation id found]";try{return JSON.parse(A.attributes["gcp.vertex.agent.llm_request"]).contents.filter(o=>o.role=="user").at(-1)?.parts[0]?.text??"[attachment]"}catch{return"[error parsing request]"}}findInvocIdFromTraceId(e){return this.invocTraces.get(e)?.find(i=>i.attributes!==void 0&&"gcp.vertex.agent.invocation_id"in i.attributes).attributes["gcp.vertex.agent.invocation_id"]}mapOrderPreservingSort=(e,A)=>0;static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-trace-tab"]],inputs:{traceData:"traceData"},features:[ti],decls:3,vars:1,consts:[[1,"trace-wrapper"],[1,"empty-state"],["mat-dialog-title","",1,"trace-title"],[1,"trace-list-wrapper"],[1,"trace-item"],[3,"spans","invocationId"]],template:function(A,i){A&1&&(m(0,"div",0),V(1,WzA,2,1,"div",1)(2,XzA,6,4),w()),A&2&&(p(),W(i.invocTraces.size===0?1:2))},dependencies:[Ua,Ok,NO,FO,W7,Ip],styles:[".trace-wrapper[_ngcontent-%COMP%]{padding-left:25px;padding-right:25px}.trace-wrapper[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{padding-top:1em;text-align:center;font-style:italic}.trace-container[_ngcontent-%COMP%]{width:100%;white-space:nowrap;font-size:12px}.trace-title[_ngcontent-%COMP%]{color:var(--trace-tab-trace-title-color);font-size:14px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:0px}.trace-label[_ngcontent-%COMP%]{width:400px;color:var(--trace-tab-trace-label-color);text-overflow:ellipsis;font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:0px}.trace-bar-container[_ngcontent-%COMP%]{width:50vw;position:relative;height:16px}.trace-bar[_ngcontent-%COMP%]{position:absolute;height:18px;background-color:var(--trace-tab-trace-bar-background-color);border-radius:4px;padding-left:4px;overflow:hidden;font-size:11px;line-height:16px;color:var(--trace-tab-trace-bar-color);font-family:Google Sans}.trace-duration[_ngcontent-%COMP%]{color:var(--trace-tab-trace-duration-color);font-weight:400;margin-left:4px}.trace-row[_ngcontent-%COMP%]{display:flex;align-items:stretch;position:relative;height:32px}.trace-indent[_ngcontent-%COMP%]{display:flex;flex-shrink:0;height:100%}.indent-connector[_ngcontent-%COMP%]{width:20px;position:relative;height:100%}.vertical-line[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:9px;width:1px;background-color:var(--trace-tab-vertical-line-background-color)}.horizontal-line[_ngcontent-%COMP%]{position:absolute;top:50%;left:9px;width:10px;height:1px;background-color:var(--trace-tab-horizontal-line-background-color)}.trace-item[_ngcontent-%COMP%]{margin-top:5px;--mat-expansion-container-background-color: var(--trace-tab-trace-item-container-background-color);--mat-expansion-header-focus-state-layer-color: var(--trace-tab-trace-item-header-focus-state-layer-color);--mat-expansion-header-description-color: var(--trace-tab-trace-item-header-description-color);--mat-expansion-header-text-size: 15}.trace-item[_ngcontent-%COMP%] .mat-expansion-panel-header.mat-expanded:focus{background-color:var(--trace-tab-mat-expansion-panel-header-focus-background-color)}.trace-item[_ngcontent-%COMP%] .mat-expansion-panel-header.mat-expanded{background-color:var(--trace-tab-mat-expansion-panel-header-background-color)}.trace-item[_ngcontent-%COMP%] .mat-expansion-panel-header.mat-expanded:hover{background-color:var(--trace-tab-mat-expansion-panel-header-hover-background-color)} .mat-expansion-panel-header-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden} .mat-expansion-panel-header-description{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}"]})};var $zA={agentDevelopmentKitLabel:"Agent Development Kit",collapsePanelTooltip:"Collapse panel",traceTabLabel:"Trace",eventsTabLabel:"Events",stateTabLabel:"State",artifactsTabLabel:"Artifacts",sessionsTabLabel:"Sessions",evalTabLabel:"Eval",selectEventAriaLabel:"Select event",eventDetailsTabLabel:"Event",requestDetailsTabLabel:"Request",responseDetailsTabLabel:"Response",responseIsNotAvailable:"Response is not available",requestIsNotAvailable:"Request is not available"},DgA=new yA("Side Panel Messages",{factory:()=>$zA});var AOA=["evalTabContainer"];function eOA(t,e){t&1&&on(0)}function tOA(t,e){if(t&1&&(m(0,"div"),vt(1,eOA,1,0,"ng-container",13),m(2,"div",14),K(3,"Powered by Agent Development Kit"),w()()),t&2){let A=v(2);p(),AA("ngComponentOutlet",A.logoComponent)}}function iOA(t,e){if(t&1&&(GA(0,"img",15),K(1)),t&2){let A=v(2);p(),_e(" ",A.i18n.agentDevelopmentKitLabel," ")}}function nOA(t,e){if(t&1&&(m(0,"mat-option",21),K(1),w()),t&2){let A=e.$implicit;AA("value",A),p(),qA(A)}}function oOA(t,e){t&1&&Ut(0,nOA,2,2,"mat-option",21,_i),t&2&&Jt(e)}function aOA(t,e){if(t&1&&(m(0,"mat-option",21),K(1),w()),t&2){let A=v(3);AA("value",A.selectedAppControl().value),p(),qA(A.selectedAppControl().value)}}function rOA(t,e){if(t&1){let A=JA();m(0,"div",22)(1,"mat-icon",23),eA("click",function(){Z(A);let n=v(3);return X(n.openAddItemDialog.emit(!0))}),K(2,"add"),w(),m(3,"mat-icon",24),eA("click",function(){Z(A);let n=v(3);return X(!n.disableBuilderIcon()&&n.enterBuilderMode.emit(!0))}),K(4,"edit"),w()()}if(t&2){let A=v(3);p(3),wn("cursor",A.disableBuilderIcon()?"not-allowed":"pointer")("opacity",A.disableBuilderIcon()?"0.5":"1")("margin-right",32,"px"),AA("matTooltip",A.disableBuilderIcon()?"This agent was not built by builder":"Edit in Builder Mode")}}function sOA(t,e){if(t&1){let A=JA();m(0,"div",12)(1,"div",16)(2,"mat-select",17),eA("selectionChange",function(n){Z(A);let o=v(2);return X(o.appSelectionChange.emit(n))})("openedChange",function(){Z(A);let n=v(2);return X(n.agentSearchControl.setValue(""))}),m(3,"mat-option",18),eA("click",function(n){return Z(A),X(n.stopPropagation())}),m(4,"mat-form-field",19),eA("click",function(n){return Z(A),X(n.stopPropagation())}),m(5,"input",20),eA("click",function(n){return Z(A),X(n.stopPropagation())})("keydown",function(n){return Z(A),X(n.stopPropagation())}),w()()(),V(6,oOA,2,0),ri(7,"async"),V(8,aOA,2,2,"mat-option",21),w()(),V(9,rOA,5,7,"div",22),w()}if(t&2){let A,i=v(2);p(2),AA("placeholder",i.isLoadingApps()()?"Loading...":"Select an agent")("formControl",i.selectedAppControl()),p(),AA("value",null),p(2),AA("formControl",i.agentSearchControl),p(),W((A=Ci(7,7,i.filteredApps$))?6:-1,A),p(2),W(i.selectedAppControl().value&&i.isLoadingApps()()?8:-1),p(),W(i.isBuilderMode()?-1:9)}}function gOA(t,e){if(t&1){let A=JA();m(0,"div",6)(1,"div",7)(2,"div",8)(3,"div",9),V(4,tOA,4,1,"div")(5,iOA,2,1),w(),m(6,"div",10),GA(7,"app-theme-toggle"),m(8,"span",11),eA("click",function(){Z(A);let n=v();return X(n.closePanel.emit())}),K(9,"left_panel_close"),w()()()()(),V(10,sOA,10,9,"div",12),ri(11,"async")}if(t&2){let A=v();p(4),W(A.logoComponent?4:5),p(4),AA("matTooltip",D1(A.i18n.collapsePanelTooltip)),p(2),W(Ci(11,4,A.isApplicationSelectorEnabledObs())?10:-1)}}function lOA(t,e){t&1&&(m(0,"div",2),GA(1,"mat-progress-spinner",25),w())}function cOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.sessionsTabLabel)}}function COA(t,e){t&1&&on(0)}function IOA(t,e){if(t&1&&(m(0,"mat-tab",27),vt(1,cOA,2,1,"ng-template",28)(2,COA,1,0,"ng-container",30),w()),t&2){v();let A=An(16);p(2),AA("ngTemplateOutlet",A)}}function dOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.traceTabLabel)}}function BOA(t,e){if(t&1&&(m(0,"mat-tab",27),vt(1,dOA,2,1,"ng-template",28),GA(2,"app-trace-tab",32),w()),t&2){let A=v(2);p(2),AA("traceData",A.traceData())}}function EOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(2);p(),qA(A.i18n.stateTabLabel)}}function QOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.artifactsTabLabel)}}function hOA(t,e){if(t&1&&(m(0,"mat-tab"),vt(1,QOA,2,1,"ng-template",28),GA(2,"app-artifact-tab",33),w()),t&2){let A=v(2);p(2),AA("artifacts",A.artifacts())}}function uOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.sessionsTabLabel)}}function fOA(t,e){t&1&&on(0)}function mOA(t,e){if(t&1&&(m(0,"mat-tab",27),vt(1,uOA,2,1,"ng-template",28)(2,fOA,1,0,"ng-container",30),w()),t&2){v();let A=An(16);p(2),AA("ngTemplateOutlet",A)}}function pOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.evalTabLabel)}}function wOA(t,e){t&1&&(m(0,"mat-tab"),vt(1,pOA,2,1,"ng-template",28),on(2,null,1),w())}function DOA(t,e){if(t&1){let A=JA();m(0,"app-session-tab",34),eA("sessionSelected",function(n){Z(A);let o=v(2);return X(o.sessionSelected.emit(n))})("sessionReloaded",function(n){Z(A);let o=v(2);return X(o.sessionReloaded.emit(n))}),w()}if(t&2){let A=v(2);AA("userId",A.userId())("appName",A.appName())("sessionId",A.sessionId())}}function yOA(t,e){if(t&1){let A=JA();m(0,"div",3)(1,"mat-tab-group",26),eA("selectedTabChange",function(n){Z(A);let o=v();return X(o.tabChange.emit(n))}),Ur(2),ri(3,"async"),V(4,IOA,3,1,"mat-tab",27),V(5,BOA,3,1,"mat-tab",27),ri(6,"async"),m(7,"mat-tab"),vt(8,EOA,2,1,"ng-template",28),GA(9,"app-state-tab",29),w(),V(10,hOA,3,1,"mat-tab"),ri(11,"async"),V(12,mOA,3,1,"mat-tab",27),V(13,wOA,4,0,"mat-tab"),ri(14,"async"),w(),vt(15,DOA,1,3,"ng-template",null,0,m2),w()}if(t&2){let A=v(),i=Ws(2);AA("hidden",i);let n=Ci(3,7,A.isSessionsTabReorderingEnabledObs);p(4),W(n?4:-1),p(),W(Ci(6,9,A.isTraceEnabledObs)?5:-1),p(4),AA("sessionState",A.currentSessionState()),p(),W(Ci(11,11,A.isArtifactsTabEnabledObs)?10:-1),p(2),W(n?-1:12),p(),W(Ci(14,13,A.isEvalEnabledObs)?13:-1)}}function vOA(t,e){if(t&1){let A=JA();m(0,"div",47),eA("click",function(){Z(A);let n=v(3);return X(n.openImageDialog.emit(n.rawSvgString()))}),w()}if(t&2){let A=v(3);AA("innerHtml",A.renderedEventGraph(),ol)}}function bOA(t,e){if(t&1&&(m(0,"div",41),V(1,vOA,1,1,"div",46),w()),t&2){let A=v(2);p(),W(A.renderedEventGraph()?1:-1)}}function MOA(t,e){t&1&&(m(0,"div",48),GA(1,"mat-progress-spinner",25),w())}function kOA(t,e){if(t&1&&(m(0,"div",49),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.requestIsNotAvailable)}}function SOA(t,e){if(t&1&&(m(0,"div",42),GA(1,"ngx-json-viewer",43),w()),t&2){let A=v(3);p(),AA("json",A.llmRequest())}}function xOA(t,e){if(t&1&&(m(0,"mat-tab",40),V(1,MOA,2,0,"div",48),ri(2,"async"),nC(3,kOA,2,1,"div",49)(4,SOA,2,1,"div",42),w()),t&2){let A=v(2);AA("label",D1(A.i18n.requestDetailsTabLabel)),p(),W(Ci(2,3,A.uiStateService.isEventRequestResponseLoading())===!0?1:A.llmRequest()?4:3)}}function ROA(t,e){t&1&&(m(0,"div",48),GA(1,"mat-progress-spinner",25),w())}function NOA(t,e){if(t&1&&(m(0,"div",49),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.responseIsNotAvailable)}}function FOA(t,e){if(t&1&&(m(0,"div",42),GA(1,"ngx-json-viewer",43),w()),t&2){let A=v(3);p(),AA("json",A.llmResponse())}}function _OA(t,e){if(t&1&&(m(0,"mat-tab",40),V(1,ROA,2,0,"div",48),ri(2,"async"),nC(3,NOA,2,1,"div",49)(4,FOA,2,1,"div",42),w()),t&2){let A=v(2);AA("label",D1(A.i18n.responseDetailsTabLabel)),p(),W(Ci(2,3,A.uiStateService.isEventRequestResponseLoading())===!0?1:A.llmResponse()?4:3)}}function LOA(t,e){if(t&1&&(m(0,"mat-tab",44)(1,"div",42),GA(2,"ngx-json-viewer",43),w()()),t&2){let A,i=v(2);p(2),AA("json",(A=i.selectedEvent())==null||A.actions==null?null:A.actions.stateDelta)}}function GOA(t,e){if(t&1&&(m(0,"mat-tab",45),GA(1,"app-artifact-tab",33),w()),t&2){let A=v(2);p(),AA("artifacts",A.artifactDeltaArray())}}function KOA(t,e){if(t&1){let A=JA();m(0,"div",4)(1,"div",35)(2,"div",36)(3,"mat-paginator",37),eA("page",function(n){Z(A);let o=v();return X(o.page.emit(n))}),w(),m(4,"button",38)(5,"mat-icon",39),eA("click",function(){Z(A);let n=v();return X(n.closeSelectedEvent.emit())}),K(6,"close"),w()()()(),m(7,"div")(8,"mat-tab-group")(9,"mat-tab",40),V(10,bOA,2,1,"div",41),m(11,"div",42),GA(12,"ngx-json-viewer",43),w()(),V(13,xOA,5,5,"mat-tab",40),ri(14,"async"),V(15,_OA,5,5,"mat-tab",40),ri(16,"async"),V(17,LOA,3,1,"mat-tab",44),V(18,GOA,2,1,"mat-tab",45),w()()()}if(t&2){let A,i,n,o=v(),a=Ws(2);AA("hidden",a),p(3),AA("length",o.eventData().size)("pageSize",1)("pageIndex",o.selectedEventIndex()),ie("aria-label",o.i18n.selectEventAriaLabel),p(6),AA("label",D1(o.i18n.eventDetailsTabLabel)),p(),W(((A=o.selectedEvent())==null?null:A.author)!=="user"?10:-1),p(2),AA("json",o.selectedEvent()),p(),W(Ci(14,13,o.uiStateService.isEventRequestResponseLoading())===!0||o.llmRequest()&&o.Object.keys(o.llmRequest()).length>0?13:-1),p(2),W(Ci(16,15,o.uiStateService.isEventRequestResponseLoading())===!0||o.llmResponse()&&o.Object.keys(o.llmResponse()).length>0?15:-1),p(2),W(!((i=o.selectedEvent())==null||i.actions==null)&&i.actions.stateDelta&&o.Object.keys((i=o.selectedEvent())==null||i.actions==null?null:i.actions.stateDelta).length>0?17:-1),p(),W(!((n=o.selectedEvent())==null||n.actions==null)&&n.actions.artifactDelta&&o.Object.keys((n=o.selectedEvent())==null||n.actions==null?null:n.actions.artifactDelta).length>0?18:-1)}}var $h=class t{Object=Object;appName=at("");userId=at("");sessionId=at("");traceData=at([]);eventData=at(new Map);currentSessionState=at();artifacts=at([]);selectedEvent=at();selectedEventIndex=at();renderedEventGraph=at();rawSvgString=at(null);llmRequest=at();llmResponse=at();showSidePanel=at(!1);isApplicationSelectorEnabledObs=at(se(!1));apps$=at(se([]));isLoadingApps=at(jA(!1));selectedAppControl=at(new Ss("",{nonNullable:!0}));isBuilderMode=at(!1);disableBuilderIcon=at(!1);closePanel=Oo();appSelectionChange=Oo();tabChange=Oo();sessionSelected=Oo();sessionReloaded=Oo();evalCaseSelected=Oo();evalSetIdSelected=Oo();returnToSession=Oo();evalNotInstalled=Oo();page=Oo();closeSelectedEvent=Oo();openImageDialog=Oo();openAddItemDialog=Oo();enterBuilderMode=Oo();sessionTabComponent=ca(Xh);evalTabComponent=ca(Xc);evalTabContainer=ca("evalTabContainer",{read:Ho});logoComponent=h(q7,{optional:!0});i18n=h(DgA);featureFlagService=h(vr);evalTabComponentClass=h(P7,{optional:!0});environmentInjector=h(Gr);uiStateService=h(Bl);isAlwaysOnSidePanelEnabledObs=this.featureFlagService.isAlwaysOnSidePanelEnabled();isTraceEnabledObs=this.featureFlagService.isTraceEnabled();isArtifactsTabEnabledObs=this.featureFlagService.isArtifactsTabEnabled();isEvalEnabledObs=this.featureFlagService.isEvalEnabled();isTokenStreamingEnabledObs=this.featureFlagService.isTokenStreamingEnabled();isMessageFileUploadEnabledObs=this.featureFlagService.isMessageFileUploadEnabled();isManualStateUpdateEnabledObs=this.featureFlagService.isManualStateUpdateEnabled();isBidiStreamingEnabledObs=this.featureFlagService.isBidiStreamingEnabled;isSessionsTabReorderingEnabledObs=this.featureFlagService.isSessionsTabReorderingEnabled();agentSearchControl=new Ss("",{nonNullable:!0});filteredApps$=$n(this.apps$).pipe(ki(e=>cr([e,this.agentSearchControl.valueChanges.pipe(cn(""))])),fe(([e,A])=>{if(!e||!A||A.trim()==="")return e;let i=A.toLowerCase().trim();return e.filter(n=>n.toLowerCase().startsWith(i))}));artifactDeltaArray=Ke(()=>{let e=this.selectedEvent()?.actions?.artifactDelta;if(!e||Object.keys(e).length===0)return[];let A=[];for(let[i,n]of Object.entries(e)){let o=n;A.push({id:i,versionId:1,data:o.data||"",mimeType:o.mimeType||"",mediaType:H4(o.mimeType||"")})}return A});ngAfterViewInit(){setTimeout(()=>{this.initEvalTab()},500)}initEvalTab(){this.isEvalEnabledObs.pipe(To()).subscribe(e=>{if(e){let A=this.evalTabContainer()?.createComponent(this.evalTabComponentClass??Xc,{environmentInjector:this.environmentInjector});if(!A)return;ir(this.environmentInjector,()=>{La(()=>{A.setInput("appName",this.appName()),A.setInput("userId",this.userId()),A.setInput("sessionId",this.sessionId())})}),A.instance.sessionSelected.subscribe(i=>{this.sessionSelected.emit(i)}),A.instance.evalCaseSelected.subscribe(i=>{this.evalCaseSelected.emit(i)}),A.instance.evalSetIdSelected.subscribe(i=>{this.evalSetIdSelected.emit(i)}),A.instance.shouldReturnToSession.subscribe(i=>{this.returnToSession.emit(i)}),A.instance.evalNotInstalledMsg.subscribe(i=>{this.evalNotInstalled.emit(i)})}})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-side-panel"]],viewQuery:function(A,i){A&1&&rs(i.sessionTabComponent,Xh,5)(i.evalTabComponent,Xc,5)(i.evalTabContainer,AOA,5,Ho),A&2&&wr(3)},inputs:{appName:[1,"appName"],userId:[1,"userId"],sessionId:[1,"sessionId"],traceData:[1,"traceData"],eventData:[1,"eventData"],currentSessionState:[1,"currentSessionState"],artifacts:[1,"artifacts"],selectedEvent:[1,"selectedEvent"],selectedEventIndex:[1,"selectedEventIndex"],renderedEventGraph:[1,"renderedEventGraph"],rawSvgString:[1,"rawSvgString"],llmRequest:[1,"llmRequest"],llmResponse:[1,"llmResponse"],showSidePanel:[1,"showSidePanel"],isApplicationSelectorEnabledObs:[1,"isApplicationSelectorEnabledObs"],apps$:[1,"apps$"],isLoadingApps:[1,"isLoadingApps"],selectedAppControl:[1,"selectedAppControl"],isBuilderMode:[1,"isBuilderMode"],disableBuilderIcon:[1,"disableBuilderIcon"]},outputs:{closePanel:"closePanel",appSelectionChange:"appSelectionChange",tabChange:"tabChange",sessionSelected:"sessionSelected",sessionReloaded:"sessionReloaded",evalCaseSelected:"evalCaseSelected",evalSetIdSelected:"evalSetIdSelected",returnToSession:"returnToSession",evalNotInstalled:"evalNotInstalled",page:"page",closeSelectedEvent:"closeSelectedEvent",openImageDialog:"openImageDialog",openAddItemDialog:"openAddItemDialog",enterBuilderMode:"enterBuilderMode"},decls:8,vars:9,consts:[["sessionsTabBody",""],["evalTabContainer",""],[1,"loading-spinner-container"],[1,"tabs-container",3,"hidden"],[1,"details-panel-container",3,"hidden"],[1,"resize-handler"],[2,"margin-top","20px","margin-left","20px","display","flex"],[2,"width","100%"],[1,"drawer-header"],[1,"drawer-logo"],[2,"display","flex","align-items","center","gap","8px"],[1,"material-symbols-outlined",2,"color","#c4c7c5","cursor","pointer","margin-right","15px",3,"click","matTooltip"],[1,"app-actions"],[4,"ngComponentOutlet"],[1,"powered-by-adk"],["src","assets/ADK-512-color.svg","width","32px","height","32px"],[1,"app-select-container"],["panelClass","wide-agent-dropdown-panel",1,"app-select",3,"selectionChange","openedChange","placeholder","formControl"],[1,"search-option",3,"click","value"],["subscriptSizing","dynamic",1,"agent-search-field",3,"click"],["matInput","","placeholder","Search agents...",3,"click","keydown","formControl"],[1,"app-name-option",3,"value"],[1,"mode-toggle-container"],["matTooltip","Create new agent","matTooltipPosition","below",2,"cursor","pointer","margin-right","16px",3,"click"],[3,"click","matTooltip"],["mode","indeterminate","diameter","50"],[3,"selectedTabChange"],[1,"tabs-header"],["mat-tab-label",""],[3,"sessionState"],[4,"ngTemplateOutlet"],[1,"tab-label"],[3,"traceData"],[3,"artifacts"],[3,"sessionSelected","sessionReloaded","userId","appName","sessionId"],[1,"details-content"],[2,"display","flex","justify-content","flex-end","margin-top","10px"],[1,"event-paginator",3,"page","length","pageSize","pageIndex"],["mat-mini-fab",""],[3,"click"],[3,"label"],[1,"event-graph-container"],[1,"json-viewer-container"],[3,"json"],["label","State"],["label","Artifact"],[3,"innerHtml"],[3,"click","innerHtml"],[1,"request-response-loading-spinner-container"],[1,"request-response-empty-state"]],template:function(A,i){if(A&1&&(V(0,gOA,12,6),ri(1,"async"),Ur(2),ri(3,"async"),V(4,lOA,2,0,"div",2),V(5,yOA,17,15,"div",3),V(6,KOA,19,17,"div",4),GA(7,"div",5)),A&2){W(Ci(1,4,i.isAlwaysOnSidePanelEnabledObs)===!1?0:-1),p(2);let n=_g(Ci(3,6,i.uiStateService.isSessionLoading()));p(2),W(n?4:-1),p(),W(i.appName()!=""&&i.showSidePanel()?5:-1),p(),W(i.selectedEvent()&&i.showSidePanel()?6:-1)}},dependencies:[Nn,uo,fo,p2,al,Sa,j7,Hm,bK,Lh,Z7,V7,rw,Xh,kz,Yp,fn,B0,Y2,Hr,Il,r0,v1,B1,ta,Ka,ls],styles:[".drawer-header[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between;align-items:center;--mat-button-filled-container-color: var(--side-panel-button-filled-container-color);--mat-button-filled-label-text-color: var(--side-panel-button-filled-label-text-color)}.drawer-header[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{width:36px;height:36px;color:var(--side-panel-mat-icon-color);cursor:pointer;display:flex;align-items:center;justify-content:center}.tabs-container[_ngcontent-%COMP%]{width:100%;margin-top:20px}.tab-label[_ngcontent-%COMP%]{font-size:14px}.resize-handler[_ngcontent-%COMP%]{background:var(--side-panel-resize-handler-background-color);width:4px;border-radius:4px;position:absolute;display:block;height:20%;top:40%;right:0;z-index:9999;cursor:ew-resize}.json-viewer-container[_ngcontent-%COMP%]{margin:10px}.event-paginator[_ngcontent-%COMP%]{margin-top:-8px;margin-right:auto;background-color:inherit;display:flex;justify-content:center}[_nghost-%COMP%] .mat-mdc-paginator-page-size{display:none}.details-panel-container[_ngcontent-%COMP%]{position:absolute;width:100%;height:98%;left:0;right:0;bottom:0;background:var(--side-panel-details-panel-container-background-color);display:inline-block;justify-content:center;align-items:center;z-index:10}.details-content[_ngcontent-%COMP%]{color:var(--side-panel-details-content-color);font-size:14px}.event-graph-container[_ngcontent-%COMP%]{margin-top:16px;margin-bottom:16px;display:flex;justify-content:center;max-height:33%;cursor:pointer}.event-graph-container[_ngcontent-%COMP%] svg{width:100%;height:100%;display:block;object-fit:contain}.event-graph-container[_ngcontent-%COMP%] svg text{font-family:Google Sans Mono,monospace;font-size:11px}.drawer-logo[_ngcontent-%COMP%]{margin-left:9px;display:flex;align-items:center}.drawer-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:9px}.drawer-logo[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:.1px}.powered-by-adk[_ngcontent-%COMP%]{font-size:10px;color:var(--side-panel-powered-by-adk-color);text-align:right;margin-top:-5px}.app-select[_ngcontent-%COMP%]{width:100%}.app-select-container[_ngcontent-%COMP%]{width:60%;margin-top:12px;background-color:var(--side-panel-app-select-container-background-color);margin-left:10px;height:30px;display:flex;justify-content:space-between;padding-left:20px;padding-right:20px;border-radius:10px;padding-top:5px}.app-select-container[_ngcontent-%COMP%]{--mat-select-placeholder-text-color: var(--side-panel-select-placeholder-text-color);--mat-select-enabled-trigger-text-color: var(--side-panel-select-enabled-trigger-text-color);--mat-select-enabled-arrow-color: var(--side-panel-select-enabled-arrow-color)}.app-name-option[_ngcontent-%COMP%]{color:var(--side-panel-app-name-option-color);font-family:Google Sans Mono,monospace;font-style:normal;font-weight:400;padding-left:12px;padding-right:12px}.app-select[_ngcontent-%COMP%]{color:var(--side-panel-app-name-option-color);font-family:Google Sans Mono,monospace;font-style:normal;font-weight:400;padding-left:unset}.mode-toggle-container[_ngcontent-%COMP%]{display:flex;align-items:center;margin-right:20px}.build-mode-button[_ngcontent-%COMP%]{margin:0 4px}.build-mode-button.mat-mdc-unelevated-button[_ngcontent-%COMP%]{height:30px}.app-actions[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-top:12px;margin-left:10px}.loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:100%}.request-response-loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-top:2em}.request-response-empty-state[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-top:2em;font-style:italic}[_nghost-%COMP%] .mat-mdc-tooltip .mdc-tooltip__surface{max-width:250px;white-space:wrap;font-size:11px}[_nghost-%COMP%] .wide-agent-dropdown-panel{min-width:300px;max-width:600px;max-height:400px}[_nghost-%COMP%] .wide-agent-dropdown-panel .mat-mdc-option{white-space:normal;line-height:1.4;height:auto;min-height:48px;padding:8px 16px}[_nghost-%COMP%] .wide-agent-dropdown-panel .search-option{position:sticky!important;top:0!important;z-index:1000!important;background-color:var(--mat-select-panel-background-color, white)!important;padding:8px 16px!important;border-bottom:1px solid var(--mat-divider-color, rgba(0, 0, 0, .12));min-height:auto!important;height:auto!important;box-shadow:0 2px 4px #0000001a;opacity:1!important}[_nghost-%COMP%] .wide-agent-dropdown-panel .search-option:hover{background-color:var(--mat-select-panel-background-color, white)!important}[_nghost-%COMP%] .wide-agent-dropdown-panel .search-option.mat-mdc-option.mat-mdc-option-active{background-color:var(--mat-select-panel-background-color, white)!important}.agent-search-field[_ngcontent-%COMP%]{width:100%}.agent-search-field[_ngcontent-%COMP%] .mat-mdc-form-field-subscript-wrapper[_ngcontent-%COMP%]{display:none}"]})};function UOA(t,e){t&1&&GA(0,"mat-progress-spinner",6)}function JOA(t,e){t&1&&(m(0,"div"),K(1,"Request is not available."),w())}function YOA(t,e){if(t&1&&(m(0,"div",3),GA(1,"ngx-json-viewer",4),w()),t&2){let A=v();p(),AA("json",A.llmRequest)}}function TOA(t,e){t&1&&GA(0,"mat-progress-spinner",6)}function HOA(t,e){t&1&&(m(0,"div"),K(1,"Response is not available."),w())}function zOA(t,e){if(t&1&&(m(0,"div",3),GA(1,"ngx-json-viewer",4),w()),t&2){let A=v();p(),AA("json",A.llmResponse)}}function OOA(t,e){if(t&1){let A=JA();m(0,"div",12),eA("click",function(){Z(A);let n=v();return X(n.openViewImageDialog(n.rawSvgString))}),w()}if(t&2){let A=v();AA("innerHtml",A.renderedEventGraph,ol)}}var X7=class t{userId="";sessionId="";appName="";panelClosed=new WA;renderedEventGraph;eventData;selectedRow=void 0;rawSvgString=null;llmRequest=void 0;llmResponse=void 0;llmRequestKey="gcp.vertex.agent.llm_request";llmResponseKey="gcp.vertex.agent.llm_response";dialog=h(Ks);traceService=h(T2);eventService=h(CE);graphService=h(IE);featureFlagService=h(vr);sanitizer=h(ds);uiStateService=h(Bl);isEventFilteringEnabled=_s(this.featureFlagService.isEventFilteringEnabled());constructor(){}ngOnInit(){this.traceService.selectedTraceRow$.subscribe(e=>{this.selectedRow=e;let A=this.getEventIdFromSpan();if(A){let i;this.isEventFilteringEnabled()&&this.selectedRow?.invoc_id&&this.selectedRow?.start_time&&(i={invocationId:this.selectedRow.invoc_id,timestamp:this.selectedRow.start_time/1e6});let n=gA({id:A},i);this.eventService.getEventTrace(n).pipe(oi(()=>{this.uiStateService.setIsEventRequestResponseLoading(!0)})).subscribe(o=>{this.llmRequest=JSON.parse(o[this.llmRequestKey]),this.llmResponse=JSON.parse(o[this.llmResponseKey]),this.uiStateService.setIsEventRequestResponseLoading(!1)},()=>{this.uiStateService.setIsEventRequestResponseLoading(!1)}),this.getEventGraph(A)}}),this.traceService.eventData$.subscribe(e=>this.eventData=e)}openViewImageDialog(e){let A=this.dialog.open(V2,{maxWidth:"90vw",maxHeight:"90vh",data:{imageData:e}})}getEventDetails(){if(this.eventData&&this.selectedRow)return this.eventData.get(this.getEventIdFromSpan())}getEventIdFromSpan(){if(this.selectedRow)return this.selectedRow.attributes["gcp.vertex.agent.event_id"]}getEventGraph(e){this.eventService.getEvent(this.userId,this.appName,this.sessionId,e).subscribe(A=>nt(this,null,function*(){if(!A.dotSrc){this.renderedEventGraph=void 0;return}let i=A.dotSrc,n=yield this.graphService.render(i);this.rawSvgString=n,this.renderedEventGraph=this.sanitizer.bypassSecurityTrustHtml(n)}))}closePanel(){this.panelClosed.emit(!0)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-trace-event"]],inputs:{userId:"userId",sessionId:"sessionId",appName:"appName"},outputs:{panelClosed:"panelClosed"},decls:21,vars:8,consts:[[1,"wrapper"],["mat-stretch-tabs","false","mat-align-tabs","start"],["label","Event"],[1,"json-viewer-container"],[3,"json"],["label","Request"],["mode","indeterminate"],["label","Response"],["label","Graph"],[1,"event-graph-container"],[3,"innerHtml"],["mat-icon-button","",1,"tab-header-action",3,"click"],[3,"click","innerHtml"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"mat-tab-group",1)(2,"mat-tab",2)(3,"div",3),GA(4,"ngx-json-viewer",4),w()(),m(5,"mat-tab",5),V(6,UOA,1,0,"mat-progress-spinner",6),ri(7,"async"),nC(8,JOA,2,0,"div")(9,YOA,2,1,"div",3),w(),m(10,"mat-tab",7),V(11,TOA,1,0,"mat-progress-spinner",6),ri(12,"async"),nC(13,HOA,2,0,"div")(14,zOA,2,1,"div",3),w(),m(15,"mat-tab",8)(16,"div",9),V(17,OOA,1,1,"div",10),w()()(),m(18,"button",11),eA("click",function(){return i.closePanel()}),m(19,"mat-icon"),K(20,"close"),w()()()),A&2&&(p(4),AA("json",i.getEventDetails()),p(2),W(Ci(7,4,i.uiStateService.isEventRequestResponseLoading())===!0?6:i.llmRequest?9:8),p(5),W(Ci(12,6,i.uiStateService.isEventRequestResponseLoading())===!0?11:i.llmResponse?14:13),p(6),W(i.renderedEventGraph?17:-1))},dependencies:[j7,Hm,B0,Y2,Ma,fn,B1,ls],styles:[".json-viewer-container[_ngcontent-%COMP%]{padding-top:8px;padding-left:12px;padding-right:12px;background-color:var(--trace-event-json-viewer-container-background-color)}.event-graph-container[_ngcontent-%COMP%]{text-align:center;padding-top:20px}.event-graph-container[_ngcontent-%COMP%] svg text{font-family:Google Sans Mono,monospace;font-size:11px}.wrapper[_ngcontent-%COMP%]{position:relative}.tab-header-action[_ngcontent-%COMP%]{position:absolute;top:0;right:0;height:48px;z-index:2;margin-right:10px}"]})};var POA={openPanelTooltip:"Open panel",evalCaseIdLabel:"Eval Case ID",cancelButton:"Cancel",saveButton:"Save",editEvalCaseTooltip:"Edit current eval case",deleteEvalCaseTooltip:"Delete current eval case",sessionIdLabel:"Session ID",userIdLabel:"User ID",loadingSessionLabel:"Loading session...",tokenStreamingLabel:"Token Streaming",createNewSessionTooltip:"Create a new Session",newSessionButton:"New Session",deleteSessionTooltip:"Delete current session",exportSessionTooltip:"Export current session",importSessionTooltip:"Import session",loadingAgentsLabel:"Loading agents, please wait...",welcomeMessage:"Welcome to ADK!",selectAgentMessage:"Select an agent on the left to begin with.",failedToLoadAgentsMessage:"Failed to load agents. To get started, run",errorMessageLabel:"Error message:",noAgentsFoundWarning:"Warning: No agents found in current folder.",cannotEditSessionMessage:"Chat is disabled to prevent changes to the end user's session.",readOnlyBadgeLabel:"Read-only",disclosureTooltip:"ADK Web is for development purposes. It has access to all the data and should not be used in production.",adkWebDeveloperUiMessage:"ADK Web Developer UI"},ygA=new yA("Chat Messages",{factory:()=>POA});var jOA=["sideDrawer"],qOA=["bottomPanel"],VOA=[[["","adk-web-chat-container-top",""]]],WOA=["[adk-web-chat-container-top]"],ZOA=t=>({"edit-mode":t}),XOA=()=>[];function $OA(t,e){if(t&1){let A=JA();m(0,"span",8),eA("click",function(){Z(A);let n=v();return X(n.toggleSidePanel())}),K(1,"left_panel_open"),w()}if(t&2){let A=v();AA("matTooltip",A.i18n.openPanelTooltip)}}function APA(t,e){if(t&1){let A=JA();m(0,"app-side-panel",9),eA("closePanel",function(){Z(A);let n=v();return X(n.toggleSidePanel())})("tabChange",function(n){Z(A);let o=v();return X(o.handleTabChange(n))})("sessionSelected",function(n){Z(A);let o=v();return X(o.updateWithSelectedSession(n))})("sessionReloaded",function(n){Z(A);let o=v();return X(o.updateWithSelectedSession(n))})("evalCaseSelected",function(n){Z(A);let o=v();return X(o.updateWithSelectedEvalCase(n))})("evalSetIdSelected",function(n){Z(A);let o=v();return X(o.updateSelectedEvalSetId(n))})("returnToSession",function(n){Z(A);let o=v();return X(o.handleReturnToSession(n))})("evalNotInstalled",function(n){Z(A);let o=v();return X(o.handleEvalNotInstalled(n))})("page",function(n){Z(A);let o=v();return X(o.handlePageEvent(n))})("closeSelectedEvent",function(){Z(A);let n=v();return X(n.closeSelectedEvent())})("openImageDialog",function(n){Z(A);let o=v();return X(o.openViewImageDialog(n))})("appSelectionChange",function(n){Z(A);let o=v();return X(o.onAppSelection(n))})("openAddItemDialog",function(){Z(A);let n=v();return X(n.openAddItemDialog())})("enterBuilderMode",function(){Z(A);let n=v();return X(n.enterBuilderMode())}),w()}if(t&2){let A=v();AA("isApplicationSelectorEnabledObs",A.isApplicationSelectorEnabledObs)("apps$",A.apps$)("isLoadingApps",A.isLoadingApps)("selectedAppControl",A.selectedAppControl)("showSidePanel",A.showSidePanel)("appName",A.appName)("userId",A.userId)("sessionId",A.sessionId)("traceData",A.traceData)("eventData",A.eventData)("currentSessionState",A.currentSessionState)("artifacts",A.artifacts)("selectedEvent",A.selectedEvent)("selectedEventIndex",A.selectedEventIndex)("renderedEventGraph",A.renderedEventGraph)("rawSvgString",A.rawSvgString)("llmRequest",A.llmRequest)("llmResponse",A.llmResponse)("disableBuilderIcon",A.disableBuilderSwitch)}}function ePA(t,e){if(t&1){let A=JA();m(0,"app-builder-tabs",10),eA("exitBuilderMode",function(){Z(A);let n=v();return X(n.exitBuilderMode())})("closePanel",function(){Z(A);let n=v();return X(n.toggleSidePanel())}),w(),GA(1,"div",11)}if(t&2){let A=v();AA("appNameInput",A.appName)}}function tPA(t,e){if(t&1){let A=JA();m(0,"div",6)(1,"div",12)(2,"button",13),eA("click",function(){Z(A);let n=v();return X(n.saveAgentBuilder())}),m(3,"mat-icon"),K(4,"check"),w()(),m(5,"button",14),eA("click",function(){Z(A);let n=v();return X(n.exitBuilderMode())}),m(6,"mat-icon"),K(7,"close"),w()(),m(8,"button",15),eA("click",function(){Z(A);let n=v();return X(n.toggleBuilderAssistant())}),m(9,"mat-icon"),K(10,"assistant"),w()()(),m(11,"app-canvas",16),eA("toggleSidePanelRequest",function(){Z(A);let n=v();return X(n.toggleSidePanel())})("builderAssistantCloseRequest",function(){Z(A);let n=v();return X(n.toggleBuilderAssistant())}),w()()}if(t&2){let A=v();p(8),ae("active",A.showBuilderAssistant),p(3),AA("showSidePanel",A.showSidePanel)("showBuilderAssistant",A.showBuilderAssistant)("appNameInput",A.appName)}}function iPA(t,e){if(t&1){let A=JA();m(0,"span",23),eA("click",function(){Z(A);let n=v(3);return X(n.toggleSidePanel())}),K(1,"left_panel_open"),w()}if(t&2){let A=v(3);AA("matTooltip",A.i18n.openPanelTooltip)}}function nPA(t,e){if(t&1){let A=JA();m(0,"button",28),eA("click",function(){Z(A);let n=v(4);return X(n.cancelEditEvalCase())}),K(1),w(),m(2,"button",29),eA("click",function(){Z(A);let n=v(4);return X(n.saveEvalCase())}),K(3),w()}if(t&2){let A=v(4);p(),_e(" ",A.i18n.cancelButton," "),p(),AA("disabled",!A.hasEvalCaseChanged()||A.isEvalCaseEditing()),p(),_e(" ",A.i18n.saveButton," ")}}function oPA(t,e){if(t&1){let A=JA();m(0,"span",30),eA("click",function(){Z(A);let n=v(4);return X(n.editEvalCase())}),K(1," edit "),w(),m(2,"span",30),eA("click",function(){Z(A);let n=v(4);return X(n.deleteEvalCase())}),K(3," delete "),w()}if(t&2){let A=v(4);AA("matTooltip",A.i18n.editEvalCaseTooltip),p(2),AA("matTooltip",A.i18n.deleteEvalCaseTooltip)}}function aPA(t,e){if(t&1&&(m(0,"div",24)(1,"div",25),K(2),w(),m(3,"div",26),K(4),w()(),m(5,"div",27),V(6,nPA,4,3)(7,oPA,4,2),w()),t&2){let A=v(3);p(2),qA(A.i18n.evalCaseIdLabel),p(2),qA(A.evalCase.evalId),p(2),W(A.isEvalEditMode()?6:7)}}function rPA(t,e){if(t&1&&(m(0,"div",32),K(1),w(),m(2,"div",26),K(3),w()),t&2){let A=v(5);p(),qA(A.i18n.userIdLabel),p(2),qA(A.userId)}}function sPA(t,e){if(t&1&&(m(0,"div",33)(1,"mat-icon"),K(2,"visibility"),w(),K(3),w(),m(4,"div",34),K(5),w()),t&2){let A=v(5);p(3),_e(" ",A.i18n.readOnlyBadgeLabel," "),p(2),qA(A.i18n.cannotEditSessionMessage)}}function gPA(t,e){if(t&1&&(m(0,"div",25),K(1),w(),m(2,"div",26),K(3),w(),V(4,rPA,4,2),ri(5,"async"),V(6,sPA,6,2)),t&2){let A=v(4);p(),qA(A.i18n.sessionIdLabel),p(2),qA(A.sessionId),p(),W(Ci(5,4,A.isUserIdOnToolbarEnabledObs)?4:-1),p(2),W(A.canEditSession()?-1:6)}}function lPA(t,e){if(t&1&&(m(0,"div",25),K(1),w()),t&2){let A=v(4);p(),qA(A.i18n.loadingSessionLabel)}}function cPA(t,e){if(t&1){let A=JA();m(0,"span",42),eA("click",function(){Z(A);let n=v(5);return X(n.deleteSession(n.sessionId))}),K(1," delete "),w()}if(t&2){let A=v(5);AA("matTooltip",A.i18n.deleteSessionTooltip)}}function CPA(t,e){if(t&1){let A=JA();m(0,"span",43),eA("click",function(){Z(A);let n=v(5);return X(n.exportSession())}),K(1," download "),w()}if(t&2){let A=v(5);AA("matTooltip",A.i18n.exportSessionTooltip)}}function IPA(t,e){if(t&1){let A=JA();m(0,"span",44),eA("click",function(){Z(A);let n=v(5);return X(n.importSession())}),K(1," upload "),w()}if(t&2){let A=v(5);AA("matTooltip",A.i18n.importSessionTooltip)}}function dPA(t,e){if(t&1){let A=JA();m(0,"div",27)(1,"div",35)(2,"mat-slide-toggle",36),ri(3,"async"),eA("change",function(){Z(A);let n=v(4);return X(n.toggleSse())}),K(4),w()(),GA(5,"mat-divider",37),m(6,"div",31)(7,"div",38),eA("click",function(){Z(A);let n=v(4);return X(n.onNewSessionClick())}),m(8,"mat-icon"),K(9,"add"),w(),K(10),w(),V(11,cPA,2,1,"span",39),ri(12,"async"),V(13,CPA,2,1,"span",40),ri(14,"async"),V(15,IPA,2,1,"span",41),ri(16,"async"),w()()}if(t&2){let A=v(4);p(2),AA("checked",A.enableSseIndicator())("disabled",!Ci(3,9,A.isTokenStreamingEnabledObs)),p(2),_e(" ",A.i18n.tokenStreamingLabel," "),p(),AA("vertical",!0),p(2),AA("matTooltip",A.i18n.createNewSessionTooltip),p(3),_e(" ",A.i18n.newSessionButton," "),p(),W(Ci(12,11,A.isDeleteSessionEnabledObs)?11:-1),p(2),W(Ci(14,13,A.isExportSessionEnabledObs)?13:-1),p(2),W(Ci(16,15,A.importSessionEnabledObs)?15:-1)}}function BPA(t,e){if(t&1&&(m(0,"div",31),Ur(1),ri(2,"async"),V(3,gPA,7,6)(4,lPA,2,1,"div",25),w(),V(5,dPA,17,17,"div",27)),t&2){let A=Ci(2,2,v(3).uiStateService.isSessionLoading());p(3),W(A===!1?3:4),p(2),W(A===!1?5:-1)}}function EPA(t,e){if(t&1&&(m(0,"div",17),V(1,iPA,2,1,"span",22),V(2,aPA,8,3)(3,BPA,6,4),w()),t&2){let A=v(2);AA("ngClass",ss(3,ZOA,A.isEvalEditMode())),p(),W(A.showSidePanel?-1:1),p(),W(A.evalCase?2:3)}}function QPA(t,e){if(t&1&&(m(0,"div",45)(1,"span"),K(2),w()()),t&2){let A=v(3);p(2),qA(A.i18n.loadingAgentsLabel)}}function hPA(t,e){if(t&1&&(m(0,"span"),K(1),GA(2,"br"),K(3),w()),t&2){let A=v(4);p(),qA(A.i18n.welcomeMessage),p(2),_e(" ",A.i18n.selectAgentMessage)}}function uPA(t,e){if(t&1&&(K(0),GA(1,"br"),m(2,"pre",47),K(3),w()),t&2){let A=v(5);_e(" ",A.i18n.errorMessageLabel," "),p(3),qA(A.loadingError())}}function fPA(t,e){if(t&1&&(m(0,"pre",46),K(1),w()),t&2){let A=v(5);p(),qA(A.i18n.noAgentsFoundWarning)}}function mPA(t,e){if(t&1&&(m(0,"div"),K(1),m(2,"pre"),K(3,"adk web"),w(),K(4," in the folder that contains the agents."),GA(5,"br"),V(6,uPA,4,2)(7,fPA,2,1,"pre",46),w()),t&2){let A=v(4);p(),_e(" ",A.i18n.failedToLoadAgentsMessage," "),p(5),W(A.loadingError()?6:7)}}function pPA(t,e){if(t&1&&(m(0,"div",45),V(1,hPA,4,2,"span"),ri(2,"async"),nC(3,mPA,8,2,"div"),w()),t&2){let A=v(3);p(),W((Ci(2,1,A.apps$)||Cu(3,XOA)).length>0?1:3)}}function wPA(t,e){if(t&1&&(V(0,QPA,3,1,"div",45),ri(1,"async"),nC(2,pPA,4,4,"div",45)),t&2){let A=v(2);W(A.isLoadingApps()?0:Ci(1,1,A.isApplicationSelectorEnabledObs)?2:-1)}}function DPA(t,e){if(t&1){let A=JA();m(0,"app-chat-panel",48),ri(1,"async"),ho("userInputChange",function(n){Z(A);let o=v(2);return ao(o.userInput,n)||(o.userInput=n),X(n)})("userEditEvalCaseMessageChange",function(n){Z(A);let o=v(2);return ao(o.userEditEvalCaseMessage,n)||(o.userEditEvalCaseMessage=n),X(n)}),eA("clickEvent",function(n){Z(A);let o=v(2);return X(o.clickEvent(n))})("handleKeydown",function(n){Z(A);let o=v(2);return X(o.handleKeydown(n.event,n.message))})("cancelEditMessage",function(n){Z(A);let o=v(2);return X(o.cancelEditMessage(n))})("saveEditMessage",function(n){Z(A);let o=v(2);return X(o.saveEditMessage(n))})("openViewImageDialog",function(n){Z(A);let o=v(2);return X(o.openViewImageDialog(n))})("openBase64InNewTab",function(n){Z(A);let o=v(2);return X(o.openBase64InNewTab(n.data,n.mimeType))})("editEvalCaseMessage",function(n){Z(A);let o=v(2);return X(o.editEvalCaseMessage(n))})("deleteEvalCaseMessage",function(n){Z(A);let o=v(2);return X(o.deleteEvalCaseMessage(n.message,n.index))})("editFunctionArgs",function(n){Z(A);let o=v(2);return X(o.editFunctionArgs(n))})("fileSelect",function(n){Z(A);let o=v(2);return X(o.onFileSelect(n))})("removeFile",function(n){Z(A);let o=v(2);return X(o.removeFile(n))})("removeStateUpdate",function(){Z(A);let n=v(2);return X(n.removeStateUpdate())})("sendMessage",function(n){Z(A);let o=v(2);return X(o.sendMessage(n))})("updateState",function(){Z(A);let n=v(2);return X(n.updateState())})("toggleAudioRecording",function(){Z(A);let n=v(2);return X(n.toggleAudioRecording())})("toggleVideoRecording",function(){Z(A);let n=v(2);return X(n.toggleVideoRecording())})("longRunningResponseComplete",function(n){Z(A);let o=v(2);return X(o.processRunSseResponse(n))}),w()}if(t&2){let A=v(2);AA("appName",A.appName)("messages",A.messages())("isChatMode",A.isChatMode())("evalCase",A.evalCase)("isEvalEditMode",A.isEvalEditMode())("isEvalCaseEditing",A.isEvalCaseEditing())("isEditFunctionArgsEnabled",Ci(1,19,A.isEditFunctionArgsEnabledObs)??!1),Qo("userInput",A.userInput)("userEditEvalCaseMessage",A.userEditEvalCaseMessage),AA("selectedFiles",A.selectedFiles)("updatedSessionState",A.updatedSessionState())("eventData",A.eventData)("selectedEvent",A.selectedEvent)("isAudioRecording",A.isAudioRecording)("isVideoRecording",A.isVideoRecording)("hoveredEventMessageIndices",A.hoveredEventMessageIndices)("userId",A.userId)("sessionId",A.sessionId)("sessionName",A.sessionId)}}function yPA(t,e){if(t&1){let A=JA();m(0,"div",20,1),GA(2,"div",49),m(3,"app-trace-event",50),eA("panelClosed",function(){Z(A);let n=v(2);return X(n.closeTraceEventDetailPanel())}),w()()}if(t&2){let A=v(2);p(3),AA("userId",A.userId)("appName",A.appName)("sessionId",A.sessionId)}}function vPA(t,e){if(t&1&&(m(0,"div",21),K(1),w()),t&2){let A=v(2);AA("matTooltip",A.i18n.disclosureTooltip),p(),_e(" ",A.i18n.adkWebDeveloperUiMessage," ")}}function bPA(t,e){if(t&1&&(m(0,"div",7),He(1),V(2,EPA,4,5,"div",17),m(3,"mat-card",18),V(4,wPA,3,3),V(5,DPA,2,21,"app-chat-panel",19),w(),V(6,yPA,4,3,"div",20),V(7,vPA,2,2,"div",21),ri(8,"async"),w()),t&2){let A=v();p(2),W(A.appName!=""?2:-1),p(2),W(A.selectedAppControl.value?-1:4),p(),W(A.appName!=""?5:-1),p(),W(A.bottomPanelVisible?6:-1),p(),W(Ci(8,5,A.isDeveloperUiDisclaimerEnabledObs)?7:-1)}}var MPA="root_agent",$7="q",kPA="hideSidePanel",MK="",kK="",SK="application/json+a2ui";function xK(t){for(t=t.replace(/-/g,"+").replace(/_/g,"/");t.length%4!==0;)t+="=";return t}var RK=class t extends d8{nextPageLabel="Next Event";previousPageLabel="Previous Event";firstPageLabel="First Event";lastPageLabel="Last Event";getRangeLabel=(e,A,i)=>i===0?`Event 0 of ${i}`:(i=Math.max(i,0),`Event ${e*A+1} of ${i}`);static \u0275fac=(()=>{let e;return function(i){return(e||(e=ui(t)))(i||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac})},vgA="Restarting bidirectional streaming is not currently supported. Please refresh the page or start a new session.",Ab=class t{i18n=h(ygA);_snackBar=h(J2);activatedRoute=h(ag);agentService=h(sg);artifactService=h(h8);changeDetectorRef=h(mt);dialog=h(Ks);document=h(Xt);downloadService=h(cE);evalService=h(Q0);eventService=h(CE);featureFlagService=h(vr);graphService=h(IE);localFileService=h(u8);location=h(p8);renderer=h(Fi);router=h(Cs);safeValuesService=h(ds);sessionService=h(dl);streamChatService=h(m8);stringToColorService=h(dE);traceService=h(T2);uiStateService=h(Bl);agentBuilderService=h(E0);chatPanel=ca.required(Vh);canvasComponent=ca.required(jh);sideDrawer=ca.required("sideDrawer");sidePanel=ca.required($h);evalTab=ca(Xc);bottomPanelRef=ca.required("bottomPanel");enableSseIndicator=jA(!1);isChatMode=jA(!0);isEvalCaseEditing=jA(!1);hasEvalCaseChanged=jA(!1);isEvalEditMode=jA(!1);isBuilderMode=jA(!1);videoElement;currentMessage="";messages=jA([]);lastTextChunk="";streamingTextMessage=null;latestThought="";artifacts=[];userInput="";userEditEvalCaseMessage="";userId="user";appName="";sessionId="";sessionIdOfLoadedMessages="";evalCase=null;updatedEvalCase=null;evalSetId="";isAudioRecording=!1;isVideoRecording=!1;longRunningEvents=[];functionCallEventId="";redirectUri=zr.getBaseUrlWithoutPath();showSidePanel=!0;showBuilderAssistant=!0;useSse=!1;currentSessionState={};root_agent=MPA;updatedSessionState=jA(null);isModelThinkingSubject=new Tt(!1);canEditSession=jA(!0);sessionHasUsedBidi=new Set;eventData=new Map;traceData=[];renderedEventGraph;rawSvgString=null;selectedEvent=void 0;selectedEventIndex=void 0;llmRequest=void 0;llmResponse=void 0;llmRequestKey="gcp.vertex.agent.llm_request";llmResponseKey="gcp.vertex.agent.llm_response";getMediaTypeFromMimetype=H4;selectedFiles=[];MediaType=$1;selectedAppControl=new Ss("",{nonNullable:!0});openBase64InNewTab(e,A){this.safeValuesService.openBase64InNewTab(e,A)}isLoadingApps=jA(!1);loadingError=jA("");apps$=se([]).pipe(oi(()=>{this.isLoadingApps.set(!0),this.selectedAppControl.disable()}),ki(()=>this.agentService.listApps().pipe(ea(e=>(this.loadingError.set(e.message),se(void 0))))),oo(1),oi(e=>{this.isLoadingApps.set(!1),this.selectedAppControl.enable(),e?.length==1&&this.router.navigate([],{relativeTo:this.activatedRoute,queryParams:{app:e[0]}})}),js());importSessionEnabledObs=this.featureFlagService.isImportSessionEnabled();isEditFunctionArgsEnabledObs=this.featureFlagService.isEditFunctionArgsEnabled();isSessionUrlEnabledObs=this.featureFlagService.isSessionUrlEnabled();isApplicationSelectorEnabledObs=this.featureFlagService.isApplicationSelectorEnabled();isTokenStreamingEnabledObs=this.featureFlagService.isTokenStreamingEnabled();isExportSessionEnabledObs=this.featureFlagService.isExportSessionEnabled();isEventFilteringEnabled=_s(this.featureFlagService.isEventFilteringEnabled());isApplicationSelectorEnabled=_s(this.featureFlagService.isApplicationSelectorEnabled());isDeleteSessionEnabledObs=this.featureFlagService.isDeleteSessionEnabled();isUserIdOnToolbarEnabledObs=this.featureFlagService.isUserIdOnToolbarEnabled();isDeveloperUiDisclaimerEnabledObs=this.featureFlagService.isDeveloperUiDisclaimerEnabled();bottomPanelVisible=!1;hoveredEventMessageIndices=[];disableBuilderSwitch=!1;constructor(){}ngOnInit(){if(this.syncSelectedAppFromUrl(),this.updateSelectedAppUrl(),this.hideSidePanelIfNeeded(),cr([this.agentService.getApp(),this.activatedRoute.queryParams]).pipe(Ze(([i,n])=>!!i&&!!n[$7]),To(),fe(([,i])=>i[$7])).subscribe(i=>{setTimeout(()=>{this.userInput=i})}),this.streamChatService.onStreamClose().subscribe(i=>{let n=`Please check server log for full details: +`+i;this.openSnackBar(n,"OK")}),new URL(window.location.href).searchParams.has("code")){let i=window.location.href;window.opener?.postMessage({authResponseUrl:i},window.origin),window.close()}this.agentService.getApp().subscribe(i=>{this.appName=i}),cr([this.agentService.getLoadingState(),this.isModelThinkingSubject]).subscribe(([i,n])=>{let o=this.messages()[this.messages().length-1];i?!o?.isLoading&&!this.streamingTextMessage&&this.messages.update(a=>[...a,{role:"bot",isLoading:!0}]):o?.isLoading&&!n&&(this.messages.update(a=>a.slice(0,-1)),this.changeDetectorRef.detectChanges())}),this.traceService.selectedTraceRow$.subscribe(i=>{let n=i?.attributes["gcp.vertex.agent.event_id"];n&&this.eventData.has(n)?this.bottomPanelVisible=!0:this.bottomPanelVisible=!1}),this.traceService.hoveredMessageIndices$.subscribe(i=>this.hoveredEventMessageIndices=i),this.featureFlagService.isInfinityMessageScrollingEnabled().pipe(To()).subscribe(i=>{i&&(this.uiStateService.onNewMessagesLoaded().subscribe(n=>{this.populateMessages(n.items,!0,!n.isBackground),this.loadTraceData()}),this.uiStateService.onNewMessagesLoadingFailed().subscribe(n=>{this.openSnackBar(n.message,"OK")}))})}get sessionTab(){return this.sidePanel().sessionTabComponent()}ngAfterViewInit(){this.showSidePanel&&this.sideDrawer()?.open(),this.isApplicationSelectorEnabled()||this.loadSessionByUrlOrReset()}selectApp(e){e!=this.appName&&(this.agentService.setApp(e),this.loadSessionByUrlOrReset())}loadSessionByUrlOrReset(){this.isSessionUrlEnabledObs.subscribe(e=>{let A=this.activatedRoute.snapshot.queryParams,i=A.session,n=A.userId;if(n&&(this.userId=n),!e||!i){this.createSessionAndReset();return}i&&this.sessionService.getSession(this.userId,this.appName,i).pipe(oo(1),ea(o=>(this.openSnackBar("Cannot find specified session. Creating a new one.","OK"),this.createSessionAndReset(),se(null)))).subscribe(o=>{o&&this.updateWithSelectedSession(o)})})}hideSidePanelIfNeeded(){this.activatedRoute.queryParams.pipe(Ze(e=>e[kPA]==="true"),oo(1)).subscribe(()=>{this.showSidePanel=!1,this.sideDrawer()?.close()})}createSessionAndReset(){this.createSession(),this.eventData=new Map,this.messages.set([]),this.artifacts=[],this.userInput="",this.longRunningEvents=[]}createSession(){this.uiStateService.setIsSessionListLoading(!0),this.sessionService.createSession(this.userId,this.appName).subscribe(e=>{this.currentSessionState=e.state,this.sessionId=e.id??"",this.sessionTab?.refreshSession(),this.sessionTab?.reloadSession(this.sessionId),this.isSessionUrlEnabledObs.subscribe(A=>{A&&this.updateSelectedSessionUrl()})},()=>{this.uiStateService.setIsSessionListLoading(!1)})}sendMessage(e){return nt(this,null,function*(){if(e.preventDefault(),!this.userInput.trim()&&this.selectedFiles.length<=0||e instanceof KeyboardEvent&&(e.isComposing||e.keyCode===229))return;let A=`user_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,i=[],n={role:"user",eventId:A};if(this.userInput.trim()&&(i.push({text:this.userInput}),n.text=this.userInput),this.selectedFiles.length>0){let s=this.selectedFiles.map(g=>({file:g.file,url:g.url}));for(let g of this.selectedFiles){let l=yield this.localFileService.createMessagePartFromFile(g.file);i.push(l)}n.attachments=s}this.messages.update(s=>[...s,n]);let o={id:A,author:"user",content:{parts:i}};this.eventData.set(A,o),this.eventData=new Map(this.eventData);let a={appName:this.appName,userId:this.userId,sessionId:this.sessionId,newMessage:{role:"user",parts:yield this.getUserMessageParts()},streaming:this.useSse,stateDelta:this.updatedSessionState()};this.selectedFiles=[],this.streamingTextMessage=null,this.agentService.runSse(a).subscribe({next:s=>nt(this,null,function*(){if(s.error){this.openSnackBar(s.error,"OK");return}if(s.content){let g=this.combineTextParts(s.content.parts);this.isEventA2aResponse(s)&&(g=this.combineA2uiDataParts(g));for(let l of g)this.processPart(s,l),this.traceService.setEventData(this.eventData)}else s.errorMessage&&this.processErrorMessage(s);s.actions&&(this.processActionArtifact(s),this.processActionStateDelta(s)),this.changeDetectorRef.detectChanges()}),error:s=>{console.error("Send message error:",s),this.openSnackBar(s,"OK")},complete:()=>{this.updatedSessionState()&&(this.currentSessionState=this.updatedSessionState(),this.updatedSessionState.set(null)),this.streamingTextMessage=null,this.featureFlagService.isSessionReloadOnNewMessageEnabled().pipe(To()).subscribe(s=>{s&&this.sessionTab?.reloadSession(this.sessionId)}),this.eventService.getTrace(this.sessionId).pipe(To(),ea(s=>se([]))).subscribe(s=>{this.traceData=s,this.changeDetectorRef.detectChanges()}),this.traceService.setMessages(this.messages()),this.changeDetectorRef.detectChanges()}}),this.userInput="";let r=this.router.parseUrl(this.location.path());r.queryParams[$7]&&(delete r.queryParams[$7],this.location.replaceState(r.toString())),this.changeDetectorRef.detectChanges()})}processErrorMessage(e){this.storeEvents(e,e),this.insertMessageBeforeLoadingMessage({text:e.errorMessage,role:"bot"})}processPart(e,A){let i=e.groundingMetadata?.searchEntryPoint?.renderedContent;if(A.text){this.isModelThinkingSubject.next(!1);let n=A.text;if(A.thought){if(n!==this.latestThought){this.storeEvents(A,e);let o={role:"bot",text:this.processThoughtText(n),thought:!0,eventId:e.id};this.insertMessageBeforeLoadingMessage(o)}this.latestThought=n}else if(this.streamingTextMessage){if(i&&(this.streamingTextMessage.renderedContent=e.groundingMetadata.searchEntryPoint.renderedContent),n==this.streamingTextMessage.text){let o=this.streamingTextMessage.eventId;this.messages.update(a=>a.map(r=>r.eventId===o&&r.role==="bot"?be(gA({},r),{eventId:e.id}):r)),this.storeEvents(A,e),this.streamingTextMessage=null;return}this.streamingTextMessage.text+=n,this.insertMessageBeforeLoadingMessage(this.streamingTextMessage)}else if(this.streamingTextMessage={role:"bot",text:this.processThoughtText(n),thought:!!A.thought,eventId:e.id},i&&(this.streamingTextMessage.renderedContent=e.groundingMetadata.searchEntryPoint.renderedContent),this.useSse)this.insertMessageBeforeLoadingMessage(this.streamingTextMessage);else{this.insertMessageBeforeLoadingMessage(this.streamingTextMessage),this.storeEvents(A,e),this.streamingTextMessage=null;return}}else if(A.thought)this.isModelThinkingSubject.next(!0);else{if(this.useSse&&e.partial)return;if(this.isA2aDataPart(A)){let a=this.extractA2aDataPartJson(A),s=a&&a.kind==="data"&&a.metadata?.mimeType===SK?{a2ui:a.data}:{text:a};this.isModelThinkingSubject.next(!1),this.storeEvents(A,e),this.storeMessage(s,e,e.author==="user"?"user":"bot");return}this.isModelThinkingSubject.next(!1),this.storeEvents(A,e);let o=this.messages().findIndex(a=>a.eventId===e.id&&a.role==="bot");o!==-1?this.messages.update(a=>{let r=[...a];return this.processPartIntoMessage(A,e,r[o]),r}):this.storeMessage(A,e,e.author==="user"?"user":"bot")}}getUserMessageParts(){return nt(this,null,function*(){let e=[];if(this.userInput.trim()&&e.push({text:`${this.userInput}`}),this.selectedFiles.length>0)for(let A of this.selectedFiles)e.push(yield this.localFileService.createMessagePartFromFile(A.file));return e})}processActionArtifact(e){e.actions&&e.actions.artifactDelta&&Object.keys(e.actions.artifactDelta).length>0&&(this.storeEvents(null,e),this.storeMessage(null,e,"bot"))}processActionStateDelta(e){e.actions&&e.actions.stateDelta&&Object.keys(e.actions.stateDelta).length>0&&(this.currentSessionState=e.actions.stateDelta)}combineTextParts(e){let A=[],i;for(let n of e)n.text&&!n.thought?i?i.text+=n.text:(i={text:n.text},A.push(i)):(i=void 0,A.push(n));return A}isEventA2aResponse(e){return!!e?.customMetadata?.["a2a:response"]}isA2aDataPart(e){if(!e.inlineData||e.inlineData.mimeType!=="text/plain")return!1;let A=atob(xK(e.inlineData.data));return A.startsWith(MK)&&A.endsWith(kK)}isA2uiDataPart(e){let A=this.extractA2aDataPartJson(e);return A&&A.kind==="data"&&A.metadata?.mimeType===SK}extractA2aDataPartJson(e){if(!this.isA2aDataPart(e))return null;let A=atob(xK(e.inlineData.data)),i=A.substring(MK.length,A.length-kK.length),n;try{n=JSON.parse(i)}catch{return null}return n}combineA2uiDataParts(e){let A=[],i=[],n;for(let o of e)this.isA2uiDataPart(o)?(i.push(this.extractA2aDataPartJson(o)),n||(n={inlineData:{mimeType:"text/plain",data:o.inlineData.data}},A.push(n))):A.push(o);if(n?.inlineData){let a=MK+JSON.stringify({kind:"data",metadata:{mimeType:SK},data:i})+kK;n.inlineData.data=btoa(a)}return A}processA2uiPartIntoMessage(e){let A={};return e.a2ui.forEach(i=>{i.data.beginRendering?A.beginRendering=i.data:i.data.surfaceUpdate?A.surfaceUpdate=i.data:i.data.dataModelUpdate&&(A.dataModelUpdate=i.data)}),A}updateRedirectUri(e,A){try{let i=new URL(e);return i.searchParams.set("redirect_uri",A),i.toString()}catch(i){return console.warn("Failed to update redirect URI: ",i),e}}storeMessage(e,A,i,n,o,a=!1){if(A?.author&&this.createAgentIconColorClass(A.author),A?.longRunningToolIds&&A.longRunningToolIds.length>0){let s=this.longRunningEvents.length;this.getAsyncFunctionsFromParts(A.longRunningToolIds,A.content.parts,A.invocationId),this.functionCallEventId=A.id;for(let g=s;g{this.sendOAuthResponse(l,d,this.redirectUri)}).catch(d=>{console.error("OAuth Error:",d)});break}}}if(A?.actions&&A.actions.artifactDelta)for(let s in A.actions.artifactDelta)A.actions.artifactDelta.hasOwnProperty(s)&&this.renderArtifact(s,A.actions.artifactDelta[s],a);A?.evalStatus&&this.isChatMode.set(!1);let r={role:i,evalStatus:A?.evalStatus,failedMetric:A?.failedMetric,evalScore:A?.evalScore,evalThreshold:A?.evalThreshold,actualInvocationToolUses:A?.actualInvocationToolUses,expectedInvocationToolUses:A?.expectedInvocationToolUses,actualFinalResponse:A?.actualFinalResponse,expectedFinalResponse:A?.expectedFinalResponse,invocationIndex:n!==void 0?n:void 0,finalResponsePartIndex:o?.finalResponsePartIndex!==void 0?o.finalResponsePartIndex:void 0,toolUseIndex:o?.toolUseIndex!==void 0?o.toolUseIndex:void 0};if(e){if(e.inlineData){let s=this.formatBase64Data(e.inlineData.data,e.inlineData.mimeType);r.inlineData={displayName:e.inlineData.displayName,data:s,mimeType:e.inlineData.mimeType}}else if(e.a2ui)r.a2uiData=this.processA2uiPartIntoMessage(e);else if(e.text)r.text=e.text,r.thought=!!e.thought,A?.groundingMetadata&&A.groundingMetadata.searchEntryPoint&&A.groundingMetadata.searchEntryPoint.renderedContent&&(r.renderedContent=A.groundingMetadata.searchEntryPoint.renderedContent),r.eventId=A?.id;else if(e.functionCall){let s=A?.longRunningToolIds?.includes(e.functionCall.id),g=gA(gA({},e.functionCall),s&&{isLongRunning:!0,invocationId:A.invocationId,functionCallEventId:A.id,needsResponse:!0,responseStatus:"pending",userResponse:""});r.functionCalls=[g],r.eventId=A?.id}else if(e.functionResponse)r.functionResponses=[e.functionResponse],r.eventId=A?.id;else if(e.executableCode)r.executableCode=e.executableCode;else if(e.codeExecutionResult&&(r.codeExecutionResult=e.codeExecutionResult,A.actions&&A.actions.artifact_delta))for(let s in A.actions.artifact_delta)A.actions.artifact_delta.hasOwnProperty(s)&&this.renderArtifact(s,A.actions.artifact_delta[s],a)}e&&Object.keys(e).length>0&&(a?this.messages.update(s=>[r,...s]):this.insertMessageBeforeLoadingMessage(r))}insertMessageBeforeLoadingMessage(e){this.messages.update(A=>{if(this.useSse&&e.text&&e.eventId&&e.role==="bot"){let n=A.findIndex(o=>o.eventId===e.eventId&&o.role==="bot"&&!o.isLoading);if(n!==-1){let o=[...A];return o[n]=be(gA({},o[n]),{text:e.text,renderedContent:e.renderedContent||o[n].renderedContent}),o}}let i=A[A.length-1];return i?.isLoading?[...A.slice(0,-1),e,i]:[...A,e]})}formatBase64Data(e,A){let i=xK(e);return`data:${A};base64,${i}`}processPartIntoMessage(e,A,i){if(e)if(e.text)i.text=e.text,i.thought=!!e.thought,A?.groundingMetadata&&A.groundingMetadata.searchEntryPoint&&A.groundingMetadata.searchEntryPoint.renderedContent&&(i.renderedContent=A.groundingMetadata.searchEntryPoint.renderedContent),A?.id&&(i.eventId=A.id);else if(e.inlineData){let n=this.formatBase64Data(e.inlineData.data,e.inlineData.mimeType);i.inlineData={displayName:e.inlineData.displayName,data:n,mimeType:e.inlineData.mimeType},i.role==="user"&&A?.id&&(i.eventId=A.id)}else e.functionCall?(i.functionCalls||(i.functionCalls=[]),i.functionCalls.push(e.functionCall),A?.id&&(i.eventId=A.id)):e.functionResponse?(i.functionResponses||(i.functionResponses=[]),i.functionResponses.push(e.functionResponse),A?.id&&(i.eventId=A.id)):e.executableCode?i.executableCode=e.executableCode:e.codeExecutionResult?i.codeExecutionResult=e.codeExecutionResult:e.a2ui&&(i.a2uiData=this.processA2uiPartIntoMessage(e))}handleArtifactFetchFailure(e,A,i){this.openSnackBar("Failed to fetch artifact data","OK"),this.messages.update(n=>n.filter(o=>o!==e)),this.artifacts=this.artifacts.filter(n=>n.id!==A||n.versionId!==i)}renderArtifact(e,A,i=!1){if(this.artifacts.some(r=>r.id===e&&r.versionId===A))return;let o={role:"bot",inlineData:{data:"",mimeType:"image/png"}};i?this.messages.update(r=>[o,...r]):this.insertMessageBeforeLoadingMessage(o);let a={id:e,versionId:A,data:"",mimeType:"image/png",mediaType:"image"};this.artifacts=[...this.artifacts,a],this.artifactService.getArtifactVersion(this.userId,this.appName,this.sessionId,e,A).subscribe({next:r=>{let{mimeType:s,data:g}=r.inlineData??{};if(!s||!g){this.handleArtifactFetchFailure(o,e,A);return}let l=this.formatBase64Data(g,s),C=H4(s),I={name:this.createDefaultArtifactName(s),data:l,mimeType:s,mediaType:C};this.messages.update(d=>d.map(B=>B===o?{role:"bot",inlineData:I}:B)),this.artifacts=this.artifacts.map(d=>d.id===e&&d.versionId===A?{id:e,versionId:A,data:l,mimeType:s,mediaType:C}:d)},error:r=>{this.handleArtifactFetchFailure(o,e,A)}})}storeEvents(e,A){let i="";e==null&&A.actions.artifactDelta?i+="eventAction: artifact":e&&(e.text?i+="text:"+e.text:e.functionCall?i+="functionCall:"+e.functionCall.name:e.functionResponse?i+="functionResponse:"+e.functionResponse.name:e.executableCode?i+="executableCode:"+e.executableCode.code.slice(0,10):e.codeExecutionResult?i+="codeExecutionResult:"+e.codeExecutionResult.outcome:e.errorMessage&&(i+="errorMessage:"+e.errorMessage)),A.title=i,this.eventData.set(A.id,A),this.eventData=new Map(this.eventData)}sendOAuthResponse(e,A,i){this.longRunningEvents.pop();let n={appName:this.appName,userId:this.userId,sessionId:this.sessionId,newMessage:{role:"user",parts:[]}};var o=structuredClone(e.args.authConfig);o.exchangedAuthCredential.oauth2.authResponseUri=A,o.exchangedAuthCredential.oauth2.redirectUri=i,n.functionCallEventId=this.functionCallEventId,n.newMessage.parts.push({functionResponse:{id:e.id,name:e.name,response:o}});let a=[];this.agentService.runSse(n).subscribe({next:r=>nt(this,null,function*(){a.push(r)}),error:r=>console.error("SSE error:",r),complete:()=>{this.processRunSseResponse(a)}})}processRunSseResponse(e){for(let A of e)if(A.content)for(let i of A.content.parts)this.processPart(A,i)}createAgentIconColorClass(e){let A=this.stringToColorService.stc(e),i=`custom-icon-color-${A.replace("#","")}`;this.injectCustomIconColorStyle(i,A)}clickEvent(e){let A=this.messages()[e],i=A.eventId;if(i){if(this.selectedEvent&&this.selectedEvent.id===i){this.selectedEvent=void 0,this.selectedEventIndex=void 0;return}if(A.role==="user"){this.selectedEvent=this.eventData.get(i),this.selectedEventIndex=this.getIndexOfKeyInMap(i),this.llmRequest=void 0,this.llmResponse=void 0,this.sideDrawer()?.open(),this.showSidePanel=!0;return}this.sideDrawer()?.open(),this.showSidePanel=!0,this.selectEvent(i)}}ngOnDestroy(){this.streamChatService.closeStream()}onAppSelection(e){this.isAudioRecording&&(this.stopAudioRecording(),this.isAudioRecording=!1),this.isVideoRecording&&(this.stopVideoRecording(),this.isVideoRecording=!1),this.evalTab()?.resetEvalResults(),this.traceData=[],this.bottomPanelVisible=!1}toggleAudioRecording(){this.isAudioRecording?this.stopAudioRecording():this.startAudioRecording()}startAudioRecording(){if(this.sessionHasUsedBidi.has(this.sessionId)){this.openSnackBar(vgA,"OK");return}this.isAudioRecording=!0,this.streamChatService.startAudioChat({appName:this.appName,userId:this.userId,sessionId:this.sessionId}),this.messages.update(e=>[...e,{role:"user",text:"Speaking..."},{role:"bot",text:"Speaking..."}]),this.sessionHasUsedBidi.add(this.sessionId)}stopAudioRecording(){this.streamChatService.stopAudioChat(),this.isAudioRecording=!1}toggleVideoRecording(){this.isVideoRecording?this.stopVideoRecording():this.startVideoRecording()}startVideoRecording(){if(this.sessionHasUsedBidi.has(this.sessionId)){this.openSnackBar(vgA,"OK");return}let e=this.chatPanel()?.videoContainer;e&&(this.isVideoRecording=!0,this.streamChatService.startVideoChat({appName:this.appName,userId:this.userId,sessionId:this.sessionId,videoContainer:e}),this.messages.update(A=>[...A,{role:"user",text:"Speaking..."}]),this.sessionHasUsedBidi.add(this.sessionId))}stopVideoRecording(){let e=this.chatPanel()?.videoContainer;e&&(this.streamChatService.stopVideoChat(e),this.isVideoRecording=!1)}getAsyncFunctionsFromParts(e,A,i){for(let n of A)n.functionCall&&e.includes(n.functionCall.id)&&this.longRunningEvents.push({function:n.functionCall,invocationId:i})}openOAuthPopup(e){return new Promise((A,i)=>{if(!this.safeValuesService.windowOpen(window,e,"oauthPopup","width=600,height=700")){i("Popup blocked!");return}let o=a=>{if(a.origin!==window.location.origin)return;let{authResponseUrl:r}=a.data;r?(A(r),window.removeEventListener("message",o)):console.log("OAuth failed",a)};window.addEventListener("message",o)})}toggleSidePanel(){this.showSidePanel?(this.sideDrawer()?.close(),this.selectedEvent=void 0,this.selectedEventIndex=void 0):this.sideDrawer()?.open(),this.showSidePanel=!this.showSidePanel}handleTabChange(e){this.isChatMode()||(this.resetEditEvalCaseVars(),this.handleReturnToSession(!0))}handleReturnToSession(e){this.sessionTab?.getSession(this.sessionId),this.evalTab()?.resetEvalCase(),this.isChatMode.set(!0)}handleEvalNotInstalled(e){e&&this.openSnackBar(e,"OK")}resetEventsAndMessages({keepMessages:e}={}){e||(this.eventData.clear(),this.messages.set([])),this.artifacts=[]}loadTraceData(){this.eventService.getTrace(this.sessionId).pipe(To(),ea(()=>se([]))).subscribe(e=>{this.traceData=e,this.traceService.setEventData(this.eventData),this.traceService.setMessages(this.messages())}),this.bottomPanelVisible=!1,this.changeDetectorRef.detectChanges()}populateMessages(e,A=!1,i=!1){this.resetEventsAndMessages({keepMessages:i&&this.sessionIdOfLoadedMessages===this.sessionId}),e.forEach(n=>{let o=this.isEventA2aResponse(n),a=o?this.combineA2uiDataParts(n.content?.parts):n.content?.parts||[],r=A?[...a].reverse():a;if(n.author==="user"){let s={role:"user",eventId:n.id};r.forEach(g=>{this.processPartIntoMessage(g,n,s)}),A?this.messages.update(g=>[s,...g]):this.messages.update(g=>[...g,s]),this.eventData.has(n.id)||(this.eventData.set(n.id,n),this.eventData=new Map(this.eventData))}else{let s={role:"bot",eventId:n.id};if(r.forEach(g=>{o&&this.isA2uiDataPart(g)&&(g={a2ui:this.extractA2aDataPartJson(g).data}),this.processPartIntoMessage(g,n,s)}),A?this.messages.update(g=>[s,...g]):this.messages.update(g=>[...g,s]),n.actions?.artifactDelta)for(let g in n.actions.artifactDelta)n.actions.artifactDelta.hasOwnProperty(g)&&this.renderArtifact(g,n.actions.artifactDelta[g],A);this.eventData.has(n.id)||(this.eventData.set(n.id,n),this.eventData=new Map(this.eventData))}}),this.sessionIdOfLoadedMessages=this.sessionId}updateWithSelectedSession(e){!e||!e.id||!e.events||!e.state||(this.traceService.resetTraceService(),this.sessionId=e.id,this.currentSessionState=e.state,this.evalCase=null,this.isChatMode.set(!0),this.isSessionUrlEnabledObs.subscribe(A=>{A&&this.updateSelectedSessionUrl()}),this.resetEventsAndMessages(),e.events.forEach(A=>{if(A.author==="user"){let i={role:"user",eventId:A.id};A.content?.parts?.forEach(n=>{this.processPartIntoMessage(n,A,i)}),this.messages.update(n=>[...n,i]),this.eventData.has(A.id)||(this.eventData.set(A.id,A),this.eventData=new Map(this.eventData))}else{let i={role:"bot",eventId:A.id};if(A.content?.parts?.forEach(n=>{this.processPartIntoMessage(n,A,i)}),this.messages.update(n=>[...n,i]),A.actions?.artifactDelta)for(let n in A.actions.artifactDelta)A.actions.artifactDelta.hasOwnProperty(n)&&this.renderArtifact(n,A.actions.artifactDelta[n]);this.eventData.has(A.id)||(this.eventData.set(A.id,A),this.eventData=new Map(this.eventData))}}),this.eventService.getTrace(this.sessionId).pipe(To(),ea(()=>se([]))).subscribe(A=>{this.traceData=A,this.traceService.setEventData(this.eventData),this.traceService.setMessages(this.messages())}),this.sessionService.canEdit(this.userId,e).pipe(To(),ea(()=>se(!0))).subscribe(A=>{this.chatPanel()?.canEditSession.set(A),this.canEditSession.set(A)}),this.featureFlagService.isInfinityMessageScrollingEnabled().pipe(To()).subscribe(A=>{A||this.populateMessages(e.events||[]),this.loadTraceData()}))}updateWithSelectedEvalCase(e){this.evalCase=e,this.isChatMode.set(!1),this.resetEventsAndMessages();let A=0;for(let i of e.conversation){if(i.userContent?.parts)for(let n of i.userContent.parts)this.storeMessage(n,null,"user");if(i.intermediateData?.toolUses){let n=0;for(let o of i.intermediateData.toolUses){let a={functionCall:{name:o.name,args:o.args}};this.storeMessage(a,null,"bot",A,{toolUseIndex:n}),n++;let r={functionResponse:{name:o.name}};this.storeMessage(r,null,"bot")}}if(i.finalResponse?.parts){let n=0;for(let o of i.finalResponse.parts)this.storeMessage(o,null,"bot",A,{finalResponsePartIndex:n}),n++}A++}}updateSelectedEvalSetId(e){this.evalSetId=e}editEvalCaseMessage(e){this.isEvalCaseEditing.set(!0),this.userEditEvalCaseMessage=e.text,e.isEditing=!0,setTimeout(()=>{let A=this.chatPanel()?.textarea?.nativeElement;if(!A)return;A.focus();let i=A.value.length;e.text.charAt(i-1)===` +`&&i--,A.setSelectionRange(i,i)},0)}editFunctionArgs(e){this.isEvalCaseEditing.set(!0),this.dialog.open(Km,{maxWidth:"90vw",maxHeight:"90vh",data:{dialogHeader:"Edit function arguments",functionName:e.functionCall.name,jsonContent:e.functionCall.args}}).afterClosed().subscribe(i=>{this.isEvalCaseEditing.set(!1),i&&(this.hasEvalCaseChanged.set(!0),e.functionCall.args=i,this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].intermediateData.toolUses[e.toolUseIndex].args=i)})}saveEvalCase(){this.evalService.updateEvalCase(this.appName,this.evalSetId,this.updatedEvalCase.evalId,this.updatedEvalCase).subscribe(e=>{this.openSnackBar("Eval case updated","OK"),this.resetEditEvalCaseVars()})}cancelEditEvalCase(){this.resetEditEvalCaseVars(),this.updateWithSelectedEvalCase(this.evalCase)}resetEditEvalCaseVars(){this.hasEvalCaseChanged.set(!1),this.isEvalCaseEditing.set(!1),this.isEvalEditMode.set(!1),this.updatedEvalCase=null}cancelEditMessage(e){e.isEditing=!1,this.isEvalCaseEditing.set(!1)}saveEditMessage(e){this.hasEvalCaseChanged.set(!0),this.isEvalCaseEditing.set(!1),e.isEditing=!1,e.text=this.userEditEvalCaseMessage?this.userEditEvalCaseMessage:" ",this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].finalResponse.parts[e.finalResponsePartIndex]={text:this.userEditEvalCaseMessage},this.userEditEvalCaseMessage=""}handleKeydown(e,A){e.key==="Enter"&&!e.shiftKey?(e.preventDefault(),this.saveEditMessage(A)):e.key==="Escape"&&this.cancelEditMessage(A)}deleteEvalCaseMessage(e,A){this.hasEvalCaseChanged.set(!0),this.messages.update(i=>i.filter((n,o)=>o!==A)),this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].finalResponse.parts.splice(e.finalResponsePartIndex,1)}editEvalCase(){this.isEvalEditMode.set(!0)}deleteEvalCase(){let e={title:"Confirm delete",message:`Are you sure you want to delete ${this.evalCase.evalId}?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(Tm,{width:"600px",data:e}).afterClosed().subscribe(i=>{i&&(this.evalTab()?.deleteEvalCase(this.evalCase.evalId),this.openSnackBar("Eval case deleted","OK"))})}onNewSessionClick(){this.createSession(),this.eventData.clear(),this.messages.set([]),this.artifacts=[],this.traceData=[],this.bottomPanelVisible=!1,this.selectedEvent=void 0,this.selectedEventIndex=void 0,this.evalTab()?.showEvalHistory&&this.evalTab()?.toggleEvalHistoryButton()}onFileSelect(e){let A=e.target;if(A.files)for(let i=0;i{e&&this.canvasComponent()?.loadFromYaml(e,this.appName)},error:e=>{console.error("Error loading agent configuration:",e),this._snackBar.open("Error loading agent configuration","OK")}})}exitBuilderMode(){let e=this.router.createUrlTree([],{queryParams:{mode:null},queryParamsHandling:"merge"}).toString();this.location.replaceState(e),this.isBuilderMode.set(!1),this.agentBuilderService.clear()}toggleBuilderAssistant(){this.showBuilderAssistant=!this.showBuilderAssistant}openAddItemDialog(){this.apps$.pipe(oo(1)).subscribe(e=>{let A=this.dialog.open(aw,{width:"600px",data:{existingAppNames:e??[]}})})}saveAgentBuilder(){this.canvasComponent()?.saveAgent(this.appName)}selectEvent(e){this.selectedEvent=this.eventData.get(e),this.selectedEventIndex=this.getIndexOfKeyInMap(e);let A;this.isEventFilteringEnabled()&&this.selectedEvent.invocationId&&(this.selectedEvent.timestamp||this.selectedEvent.timestampInMillis)&&(A={invocationId:this.selectedEvent.invocationId,timestamp:this.selectedEvent.timestamp??this.selectedEvent.timestampInMillis});let i=gA({id:this.selectedEvent.id},A);this.uiStateService.setIsEventRequestResponseLoading(!0),this.eventService.getEventTrace(i).subscribe(n=>{n[this.llmRequestKey]&&(this.llmRequest=JSON.parse(n[this.llmRequestKey])),n[this.llmResponseKey]&&(this.llmResponse=JSON.parse(n[this.llmResponseKey])),this.uiStateService.setIsEventRequestResponseLoading(!1)},()=>{this.uiStateService.setIsEventRequestResponseLoading(!1)}),this.eventService.getEvent(this.userId,this.appName,this.sessionId,this.selectedEvent.id).subscribe(n=>nt(this,null,function*(){if(!n.dotSrc){this.renderedEventGraph=void 0;return}let o=yield this.graphService.render(n.dotSrc);this.rawSvgString=o,this.renderedEventGraph=this.safeValuesService.bypassSecurityTrustHtml(o)}))}deleteSession(e){let A={title:"Confirm delete",message:`Are you sure you want to delete this session ${this.sessionId}?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(Tm,{width:"600px",data:A}).afterClosed().subscribe(n=>{n&&this.sessionService.deleteSession(this.userId,this.appName,e).subscribe(o=>{let a=this.sessionTab?.refreshSession(e);a?this.sessionTab?.getSession(a.id):window.location.reload()})})}syncSelectedAppFromUrl(){cr([this.activatedRoute.queryParams,this.apps$]).subscribe(([e,A])=>{let i=e.app;if(A&&A.length&&i){if(!A.includes(i)){this.openSnackBar(`Agent '${i}' not found`,"OK");return}this.selectedAppControl.setValue(i,{emitEvent:!1}),this.selectApp(i),this.agentService.getAgentBuilder(i).subscribe(n=>{!n||n==""?(this.disableBuilderSwitch=!0,this.agentBuilderService.setLoadedAgentData(void 0)):(this.disableBuilderSwitch=!1,this.agentBuilderService.setLoadedAgentData(n))}),this.isBuilderMode.set(!1)}e.mode==="builder"&&this.enterBuilderMode()})}updateSelectedAppUrl(){this.selectedAppControl.valueChanges.pipe(jl(),Ze(Boolean)).subscribe(e=>{this.selectApp(e);let A=this.activatedRoute.snapshot.queryParams.app;e!==A&&this.router.navigate([],{queryParams:{app:e,mode:null},queryParamsHandling:"merge"})})}updateSelectedSessionUrl(){let e=this.router.createUrlTree([],{queryParams:{session:this.sessionId,userId:this.userId},queryParamsHandling:"merge"}).toString();this.location.replaceState(e)}handlePageEvent(e){if(e.pageIndex>=0){let A=this.getKeyAtIndexInMap(e.pageIndex);A&&(this.selectEvent(A),setTimeout(()=>{let i=this.messages().findIndex(n=>n.eventId===A);if(i!==-1){let n=this.chatPanel()?.scrollContainer?.nativeElement;if(!n)return;let o=n.querySelectorAll(".message-column-container");o&&o[i]&&o[i].scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}},0))}}closeSelectedEvent(){this.selectedEvent=void 0,this.selectedEventIndex=void 0}handleEscapeKey(e){e.key==="Escape"&&this.selectedEvent&&(e.preventDefault(),this.selectedEvent=void 0,this.selectedEventIndex=void 0)}getIndexOfKeyInMap(e){let A=0,i=(o,a)=>0,n=Array.from(this.eventData.keys()).sort(i);for(let o of n){if(o===e)return A;A++}}getKeyAtIndexInMap(e){let A=(n,o)=>0,i=Array.from(this.eventData.keys()).sort(A);if(e>=0&&e{console.log(e),this.downloadService.downloadObjectAsJson(e,`session-${this.sessionId}.json`)})}updateState(){this.dialog.open(Km,{maxWidth:"90vw",maxHeight:"90vh",data:{dialogHeader:"Update state",jsonContent:this.currentSessionState}}).afterClosed().subscribe(A=>{A&&this.updatedSessionState.set(A)})}removeStateUpdate(){this.updatedSessionState.set(null)}closeTraceEventDetailPanel(){this.bottomPanelVisible=!1,this.traceService.selectedRow(void 0),this.traceService.setHoveredMessages(void 0,"")}importSession(){let e=document.createElement("input");e.type="file",e.accept="application/json",e.onchange=()=>{if(!e.files||e.files.length===0)return;let A=e.files[0],i=new FileReader;i.onload=n=>{if(n.target?.result)try{let o=JSON.parse(n.target.result);if(!o.userId||!o.appName||!o.events){this.openSnackBar("Invalid session file format","OK");return}this.sessionService.importSession(o.userId,o.appName,o.events).subscribe(a=>{this.openSnackBar("Session imported","OK"),this.sessionTab?.refreshSession()})}catch{this.openSnackBar("Error parsing session file","OK")}},i.readAsText(A)},e.click()}injectCustomIconColorStyle(e,A){if(this.document.getElementById(e))return;let i=this.renderer.createElement("style");this.renderer.setAttribute(i,"id",e),this.renderer.setAttribute(i,"type","text/css");let n=` + .${e} { + background-color: ${A} !important; + } + `;this.renderer.appendChild(i,this.renderer.createText(n)),this.renderer.appendChild(this.document.head,i)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-chat"]],viewQuery:function(A,i){A&1&&rs(i.chatPanel,Vh,5)(i.canvasComponent,jh,5)(i.sideDrawer,jOA,5)(i.sidePanel,$h,5)(i.evalTab,Xc,5)(i.bottomPanelRef,qOA,5),A&2&&wr(6)},hostBindings:function(A,i){A&1&&eA("keydown",function(o){return i.handleEscapeKey(o)},u2)},features:[It([{provide:d8,useClass:RK}])],ngContentSelectors:WOA,decls:8,vars:3,consts:[["sideDrawer",""],["bottomPanel",""],["autosize","",1,"drawer-container"],[1,"material-symbols-outlined",2,"position","absolute","width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","20px","z-index","9999",3,"matTooltip"],["mode","side","appResizableDrawer","",1,"side-drawer"],[3,"isApplicationSelectorEnabledObs","apps$","isLoadingApps","selectedAppControl","showSidePanel","appName","userId","sessionId","traceData","eventData","currentSessionState","artifacts","selectedEvent","selectedEventIndex","renderedEventGraph","rawSvgString","llmRequest","llmResponse","disableBuilderIcon"],[1,"builder-mode-container"],[1,"chat-container"],[1,"material-symbols-outlined",2,"position","absolute","width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","20px","z-index","9999",3,"click","matTooltip"],[3,"closePanel","tabChange","sessionSelected","sessionReloaded","evalCaseSelected","evalSetIdSelected","returnToSession","evalNotInstalled","page","closeSelectedEvent","openImageDialog","appSelectionChange","openAddItemDialog","enterBuilderMode","isApplicationSelectorEnabledObs","apps$","isLoadingApps","selectedAppControl","showSidePanel","appName","userId","sessionId","traceData","eventData","currentSessionState","artifacts","selectedEvent","selectedEventIndex","renderedEventGraph","rawSvgString","llmRequest","llmResponse","disableBuilderIcon"],[3,"exitBuilderMode","closePanel","appNameInput"],[1,"resize-handler"],[1,"builder-exit-button"],["mat-icon-button","","matTooltip","Accept",1,"builder-mode-action-button",3,"click"],["mat-icon-button","","matTooltip","Exit Builder Mode",1,"builder-mode-action-button",3,"click"],["mat-icon-button","","matTooltip","Builder Assistant",1,"builder-mode-action-button",3,"click"],[3,"toggleSidePanelRequest","builderAssistantCloseRequest","showSidePanel","showBuilderAssistant","appNameInput"],[1,"chat-toolbar",3,"ngClass"],[1,"chat-card"],[3,"appName","messages","isChatMode","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userInput","userEditEvalCaseMessage","selectedFiles","updatedSessionState","eventData","selectedEvent","isAudioRecording","isVideoRecording","hoveredEventMessageIndices","userId","sessionId","sessionName"],["appResizableBottomPanel","",1,"trace-detail-container"],["matTooltipPosition","left",1,"adk-web-developer-ui-disclaimer",2,"align-self","flex-end",3,"matTooltip"],[1,"material-symbols-outlined",2,"width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","-2px","z-index","9999",3,"matTooltip"],[1,"material-symbols-outlined",2,"width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","-2px","z-index","9999",3,"click","matTooltip"],[2,"display","flex"],[1,"toolbar-session-text"],[1,"toolbar-session-id"],[1,"toolbar-actions"],["mat-button","",2,"height","30px",3,"click"],["mat-flat-button","",2,"height","30px",3,"click","disabled"],[1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],[2,"display","flex","align-items","center"],[1,"toolbar-session-text",2,"margin-left","16px"],[1,"readonly-badge"],[1,"readonly-session-message"],[1,"toolbar-sse-toggle"],[1,"example-margin",3,"change","checked","disabled"],[2,"margin-left","8px","margin-right","8px","height","22px",3,"vertical"],["id","toolbar-new-session-button",3,"click","matTooltip"],["id","toolbar-delete-session-button",1,"material-symbols-outlined","toolbar-icon",3,"matTooltip"],["id","toolbar-export-session-button",1,"material-symbols-outlined","toolbar-icon",3,"matTooltip"],["id","toolbar-import-session-button",1,"material-symbols-outlined","toolbar-icon",3,"matTooltip"],["id","toolbar-delete-session-button",1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],["id","toolbar-export-session-button",1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],["id","toolbar-import-session-button",1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],[1,"empty-state-container"],[1,"warning"],[1,"error"],[3,"userInputChange","userEditEvalCaseMessageChange","clickEvent","handleKeydown","cancelEditMessage","saveEditMessage","openViewImageDialog","openBase64InNewTab","editEvalCaseMessage","deleteEvalCaseMessage","editFunctionArgs","fileSelect","removeFile","removeStateUpdate","sendMessage","updateState","toggleAudioRecording","toggleVideoRecording","longRunningResponseComplete","appName","messages","isChatMode","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userInput","userEditEvalCaseMessage","selectedFiles","updatedSessionState","eventData","selectedEvent","isAudioRecording","isVideoRecording","hoveredEventMessageIndices","userId","sessionId","sessionName"],[1,"bottom-resize-handler"],[3,"panelClosed","userId","appName","sessionId"]],template:function(A,i){A&1&&(Ht(VOA),m(0,"mat-drawer-container",2),V(1,$OA,2,1,"span",3),m(2,"mat-drawer",4,0),V(4,APA,1,19,"app-side-panel",5)(5,ePA,2,1),w(),V(6,tPA,12,5,"div",6)(7,bPA,9,7,"div",7),w()),A&2&&(p(),W(!i.showSidePanel&&i.appName===""?1:-1),p(3),W(i.isBuilderMode()?5:4),p(2),W(i.isBuilderMode()?6:7))},dependencies:[sk,Sa,rk,D8,Nn,r0,fn,B0,gs,Fn,Rz,a8,aE,w8,X7,Vh,$h,jh,Fv,ls],styles:[".expand-side-drawer[_ngcontent-%COMP%]{position:relative;top:4%;left:1%}.drawer-container[_ngcontent-%COMP%]{height:100%;background-color:var(--chat-drawer-container-background-color)}.drawer-header[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between;align-items:center;--mat-button-filled-container-color: #89b4f8;--mat-button-filled-label-text-color: black}.drawer-header[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{width:36px;height:36px;color:#bdc1c6;cursor:pointer;display:flex;align-items:center;justify-content:center}.drawer-header[_ngcontent-%COMP%] .drawer-logo[_ngcontent-%COMP%]{margin-left:9px;display:flex;align-items:center}.drawer-header[_ngcontent-%COMP%] .drawer-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:9px}.drawer-header[_ngcontent-%COMP%] .drawer-logo[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:.1px}.chat-container[_ngcontent-%COMP%]{width:100%;height:100%;max-width:100%;margin:auto;display:flex;flex-direction:column;flex:1}.event-container[_ngcontent-%COMP%]{color:var(--chat-event-container-color)}.chat-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;overflow:hidden;flex:1;min-height:12%;box-shadow:none;background-color:var(--chat-card-background-color)}.function-event-button[_ngcontent-%COMP%] .mdc-button__label[_ngcontent-%COMP%]{font-family:Google Sans Mono,monospace}.loading-bar[_ngcontent-%COMP%]{width:100px;margin:15px}.chat-messages[_ngcontent-%COMP%]{flex-grow:1;overflow-y:auto;padding:20px;margin-top:16px}.message-card[_ngcontent-%COMP%]{padding:5px 20px;margin:5px;border-radius:20px;max-width:80%;font-size:14px;font-weight:400;position:relative;display:inline-block}.function-event-button[_ngcontent-%COMP%]{background-color:var(--chat-function-event-button-background-color);margin:5px 5px 10px}.function-event-button-highlight[_ngcontent-%COMP%]{background-color:var(--chat-function-event-button-highlight-background-color);border-color:var(--chat-function-event-button-highlight-border-color)!important;color:var(--chat-function-event-button-highlight-color)!important}.user-message[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center}.user-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-user-message-message-card-background-color);align-self:flex-end;color:var(--chat-user-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]{display:flex;align-items:center}.bot-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-bot-message-message-card-background-color);align-self:flex-start;color:var(--chat-bot-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]:focus-within .message-card[_ngcontent-%COMP%]{background-color:var(--chat-bot-message-focus-within-message-card-background-color);border:1px solid var(--chat-bot-message-focus-within-message-card-border-color)}.message-textarea[_ngcontent-%COMP%]{background-color:var(--chat-message-textarea-background-color);max-width:100%;border:none;font-family:Google Sans,Helvetica Neue,sans-serif}.message-textarea[_ngcontent-%COMP%]:focus{background-color:var(--chat-message-textarea-focus-background-color);outline:none}.edit-message-buttons-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%]{visibility:hidden;position:absolute;left:10px;z-index:10;background-color:var(--chat-eval-compare-container-background-color);overflow:hidden;border-radius:20px;padding:5px 20px;margin-bottom:10px;font-size:16px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .actual-result[_ngcontent-%COMP%]{border-right:2px solid var(--chat-actual-result-border-right-color);padding-right:8px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .expected-result[_ngcontent-%COMP%]{padding-left:12px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%]:hover .eval-compare-container[_ngcontent-%COMP%]{visibility:visible}.actual-expected-compare-container[_ngcontent-%COMP%]{display:flex}.score-threshold-container[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:10px;align-items:center;margin-top:15px;font-size:14px;font-weight:600}.eval-response-header[_ngcontent-%COMP%]{padding-bottom:5px;border-bottom:2px solid var(--chat-eval-response-header-border-bottom-color);font-style:italic;font-weight:700}.header-expected[_ngcontent-%COMP%]{color:var(--chat-header-expected-color)}.header-actual[_ngcontent-%COMP%]{color:var(--chat-header-actual-color)}.eval-case-edit-button[_ngcontent-%COMP%]{cursor:pointer;margin-left:4px;margin-right:4px}.eval-pass[_ngcontent-%COMP%]{display:flex;color:var(--chat-eval-pass-color)}.eval-fail[_ngcontent-%COMP%]{display:flex;color:var(--chat-eval-fail-color)}.navigation-button-sidepanel[_ngcontent-%COMP%]{margin-left:auto;margin-right:20px}.fab-button[_ngcontent-%COMP%]{position:fixed;bottom:200px;right:100px;z-index:1000}.sidepanel-toggle[_ngcontent-%COMP%]{position:relative;top:100px;z-index:1000}.side-drawer[_ngcontent-%COMP%]{background-color:var(--chat-side-drawer-background-color);color:var(--chat-side-drawer-color);border-radius:0}.file-preview[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px;margin-bottom:8px}.file-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:5px;background:var(--chat-file-item-background-color);padding:5px;border-radius:4px}button[_ngcontent-%COMP%]{margin-left:20px;margin-right:20px}.empty-state-container[_ngcontent-%COMP%]{color:var(--chat-empty-state-container-color);height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:Google Sans,sans-serif;font-weight:400;letter-spacing:normal;line-height:24px;font-size:18px}.empty-state-container[_ngcontent-%COMP%] pre.warning[_ngcontent-%COMP%]{color:var(--chat-warning-color)}.empty-state-container[_ngcontent-%COMP%] pre.error[_ngcontent-%COMP%]{color:var(--chat-error-color)}[_nghost-%COMP%] .mat-mdc-unelevated-button:not(:disabled){color:var(--chat-mat-mdc-unelevated-button-color);background-color:var(--chat-mat-mdc-unelevated-button-background-color)}[_nghost-%COMP%] .mdc-linear-progress__buffer-dots{background-image:radial-gradient(circle,var(--chat-mdc-linear-progress-buffer-dots-background-color, var(--mat-sys-surface-variant)) calc(var(--mat-progress-bar-track-height, 4px) / 2),transparent 0)}[_nghost-%COMP%] .mat-mdc-select-arrow-wrapper{margin-left:4px}[_nghost-%COMP%] .mat-mdc-text-field-wrapper{border:1px solid var(--chat-mat-mdc-text-field-wrapper-border-color)}[_nghost-%COMP%] .mdc-notched-outline__leading, [_nghost-%COMP%] .mdc-notched-outline__notch, [_nghost-%COMP%] .mdc-notched-outline__trailing{border:none}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{padding:0 10px 0 40px}[_nghost-%COMP%] .segment-key{color:var(--chat-segment-key-color)!important}.mat-mdc-select-placeholder[_ngcontent-%COMP%]{margin-left:20px}.bottom-resize-handler[_ngcontent-%COMP%]{background:var(--chat-bottom-resize-handler-background-color);height:5px;border-radius:4px;position:absolute;display:block;width:20%;left:40%;top:0;right:0;z-index:9999;cursor:ns-resize}.trace-detail-container[_ngcontent-%COMP%]{position:relative;background-color:var(--chat-trace-detail-container-background-color)}.trace-detail-container[_ngcontent-%COMP%] app-trace-event[_ngcontent-%COMP%]{padding-top:8px}.new-session-button[_ngcontent-%COMP%]{margin-top:0;margin-left:50px;width:130px;height:28px;font-size:14px}.app-select-container[_ngcontent-%COMP%]{width:35%;background-color:#212123;height:30px;display:flex;justify-content:space-between;padding-left:20px;padding-right:20px;border-radius:10px;padding-top:5px}.app-select-container[_ngcontent-%COMP%]{--mat-select-placeholder-text-color: #8ab4f8;--mat-select-enabled-trigger-text-color: #8ab4f8;--mat-select-enabled-arrow-color: #8ab4f8}.adk-checkbox[_ngcontent-%COMP%]{position:fixed;bottom:0;left:0;right:0;margin-bottom:20px;margin-left:20px}.chat-toolbar[_ngcontent-%COMP%]{position:sticky;top:0;height:48px;background:var(--chat-toolbar-background-color);display:flex;align-items:center;z-index:10}.chat-toolbar.edit-mode[_ngcontent-%COMP%]{background:var(--chat-toolbar-edit-mode-background-color)}.toolbar-actions[_ngcontent-%COMP%]{margin-left:auto;display:flex;align-items:center;flex-shrink:0}.toolbar-session-text[_ngcontent-%COMP%]{color:var(--chat-toolbar-session-text-color);font-family:Roboto;font-size:12px;font-style:normal;font-weight:500;line-height:12px;letter-spacing:.8px;text-transform:uppercase;margin-left:20px;padding-top:4px;flex-shrink:0}.toolbar-session-id[_ngcontent-%COMP%]{color:var(--chat-toolbar-session-id-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;margin-left:5px;flex-shrink:0}.toolbar-icon[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--chat-toolbar-icon-color);cursor:pointer;margin-right:16px}#toolbar-new-session-button[_ngcontent-%COMP%]{font-size:14px;margin-right:16px;color:var(--chat-toolbar-new-session-color);cursor:pointer;display:flex;align-items:center}.toolbar-sse-toggle[_ngcontent-%COMP%]{--mat-slide-toggle-label-text-size: 14px;--mat-slide-toggle-label-text-color: var(--chat-toolbar-sse-toggle-label-text-color);--mat-slide-toggle-unselected-track-color: var(--chat-toolbar-sse-toggle-unselected-track-color);--mat-slide-toggle-unselected-focus-track-color: var(--chat-toolbar-sse-toggle-unselected-track-color);--mat-slide-toggle-unselected-hover-track-color: var(--chat-toolbar-sse-toggle-unselected-track-color);--mat-slide-toggle-unselected-handle-color: var(--chat-toolbar-sse-toggle-unselected-handle-color);--mat-slide-toggle-unselected-focus-handle-color: var(--chat-toolbar-sse-toggle-unselected-handle-color);--mat-slide-toggle-unselected-hover-handle-color: var(--chat-toolbar-sse-toggle-unselected-handle-color);--mat-slide-toggle-selected-track-color: var(--chat-toolbar-sse-toggle-selected-track-color);--mat-slide-toggle-selected-focus-track-color: var(--chat-toolbar-sse-toggle-selected-track-color);--mat-slide-toggle-selected-hover-track-color: var(--chat-toolbar-sse-toggle-selected-track-color);--mat-slide-toggle-selected-handle-color: var(--chat-toolbar-sse-toggle-selected-handle-color);--mat-slide-toggle-selected-focus-handle-color: var(--chat-toolbar-sse-toggle-selected-handle-color);--mat-slide-toggle-selected-hover-handle-color: var(--chat-toolbar-sse-toggle-selected-handle-color);--mat-slide-toggle-track-height: 24px;--mat-slide-toggle-track-width: 46px;--mat-slide-toggle-track-outline-color: var(--chat-toolbar-sse-toggle-track-outline-color);--mat-slide-toggle-with-icon-handle-size: 20px}[_nghost-%COMP%] pre{white-space:pre-wrap;word-break:break-word;overflow-x:auto;max-width:100%}.readonly-badge[_ngcontent-%COMP%]{color:var(--chat-readonly-badge-color);background-color:var(--chat-readonly-badge-background-color);border-radius:4px;padding:1px 6px;display:flex;align-items:center;margin-left:8px;font-size:12px;line-height:16px;gap:4px;white-space:nowrap}.readonly-badge[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;padding-top:1px;flex-shrink:0}.readonly-session-message[_ngcontent-%COMP%]{display:block;color:var(--chat-toolbar-session-text-color);margin-left:1em;font-weight:400;line-height:16px;letter-spacing:.3px;flex-shrink:1} .mat-drawer-content{display:flex!important} .mat-drawer{border-right:1px solid var(--chat-mat-drawer-border-right-color)!important}.builder-mode-container[_ngcontent-%COMP%]{position:relative;width:100%;height:100vh;display:flex;flex-direction:column;background-color:var(--builder-container-background-color)}.builder-exit-button[_ngcontent-%COMP%]{position:absolute;top:20px;right:20px;z-index:1000;display:flex;gap:8px}.builder-mode-action-button[_ngcontent-%COMP%]{background-color:var(--builder-secondary-background-color)!important;color:var(--builder-text-tertiary-color)!important;border-radius:50%!important;transition:all .2s ease!important;margin:0!important;padding:0!important;width:40px!important;height:40px!important;min-width:40px!important;min-height:40px!important;border:1px solid var(--builder-tool-item-border-color)!important;box-shadow:0 2px 4px #0000001a!important;display:flex!important;align-items:center!important;justify-content:center!important}.builder-mode-action-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-tool-item-hover-background-color)!important;box-shadow:0 4px 8px #00000026!important}.builder-mode-action-button.active[_ngcontent-%COMP%]{background-color:var(--builder-button-primary-background-color)!important;color:#fff!important;border-color:var(--builder-button-primary-background-color)!important}.builder-mode-action-button[_ngcontent-%COMP%] .mat-mdc-button-touch-target[_ngcontent-%COMP%]{display:none!important}.builder-mode-action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}app-canvas[_ngcontent-%COMP%]{width:100%!important;height:100%!important;flex:1!important;display:flex!important;flex-direction:column!important;min-height:0!important}.build-mode-container[_ngcontent-%COMP%]{display:flex;width:100%;height:100%;background-color:var(--builder-container-background-color)}.build-left-panel[_ngcontent-%COMP%], .build-right-panel[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;background-color:var(--builder-tertiary-background-color);border:1px solid var(--builder-border-color);margin:10px;border-radius:8px}.build-panel-header[_ngcontent-%COMP%]{background-color:var(--builder-secondary-background-color);padding:16px 20px;border-bottom:1px solid var(--builder-border-color);border-radius:8px 8px 0 0}.build-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;color:var(--builder-text-primary-color);font-size:16px;font-weight:500;font-family:Google Sans,Helvetica Neue,sans-serif}.build-panel-content[_ngcontent-%COMP%]{flex:1;padding:20px;color:var(--builder-text-secondary-color);overflow-y:auto}.build-panel-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;line-height:1.5}.app-name-option[_ngcontent-%COMP%], .app-select[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-family:Google Sans Mono,monospace;font-style:normal;font-weight:400;padding-left:unset}.adk-web-developer-ui-disclaimer[_ngcontent-%COMP%]{padding-left:4px;padding-bottom:4px;font-size:10px;color:var(--adk-web-text-color-light-gray)}"]})};var Au=class t{static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-root"]],decls:1,vars:0,template:function(A,i){A&1&&GA(0,"app-chat")},dependencies:[Ab],encapsulation:2})};var SPA=[{path:"",component:Au}],eb=class t{static \u0275fac=function(A){return new(A||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[P6.forRoot(SPA),P6]})};var tb=class{static getRuntimeConfig(){return window.runtimeConfig}};function xPA(t,e){if(t&1&&(ci(0,"a",0),Li(1,"img",1),K(2),fi()),t&2){v();let A=Ws(0),i=Ws(1);p(),vo("src",D1(A),Ga),p(),_e(" ",i," ")}}function RPA(t,e){t&1&&(ci(0,"div"),K(1," Invalid custom logo config. Make sure that your runtime config specifies both imgUrl and text in the logo field. "),fi())}var ib=class t{logoConfig=tb.getRuntimeConfig().logo;static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-custom-logo"]],decls:4,vars:3,consts:[["href","/"],["width","32px","height","32px",1,"orcas-logo",3,"src"]],template:function(A,i){if(A&1&&(Ur(0)(1),V(2,xPA,3,3,"a",0)(3,RPA,2,0,"div")),A&2){let n=_g(i.logoConfig==null?null:i.logoConfig.imageUrl);p();let o=_g(i.logoConfig==null?null:i.logoConfig.text);p(),W(n&&o?2:3)}},styles:[`a[_ngcontent-%COMP%]{color:inherit;text-decoration:none;display:flex;align-items:center;gap:8px} + + + + + + + + + + + + + + + + +`]})};var NPA=(t,e)=>({"font-style":t,color:e}),nb=class t{text=at("");thought=at(!1);static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-markdown"]],inputs:{text:[1,"text"],thought:[1,"thought"]},features:[It([$u()])],decls:1,vars:5,consts:[[3,"data","ngStyle"]],template:function(A,i){A&1&&GA(0,"markdown",0),A&2&&AA("data",i.text())("ngStyle",Vl(2,NPA,i.thought()?"italic":"normal",i.thought()?"#9aa0a6":"inherit"))},dependencies:[fa,Cp,KT,GT],encapsulation:2})};var FPA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-as-n":!0,"layout-dis-iflx":!0,"layout-al-c":!0},_PA={"layout-w-100":!0},LPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-mt-0":!0,"layout-mb-2":!0,"typography-sz-bm":!0,"color-c-n10":!0},GPA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-pt-3":!0,"layout-pb-3":!0,"layout-pl-5":!0,"layout-pr-5":!0,"layout-mb-1":!0,"border-br-16":!0,"border-bw-0":!0,"border-c-n70":!0,"border-bs-s":!0,"color-bgc-s30":!0,"color-c-n100":!0,"behavior-ho-80":!0},NK={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mb-2":!0,"color-c-n10":!0},KPA=be(gA({},NK),{"typography-sz-tl":!0}),UPA=be(gA({},NK),{"typography-sz-tm":!0}),JPA=be(gA({},NK),{"typography-sz-ts":!0}),YPA={"behavior-sw-n":!0},RgA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-pl-4":!0,"layout-pr-4":!0,"layout-pt-2":!0,"layout-pb-2":!0,"border-br-6":!0,"border-bw-1":!0,"color-bc-s70":!0,"border-bs-s":!0,"layout-as-n":!0,"color-c-n10":!0},TPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0,"color-c-n10":!0},HPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},zPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},OPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},PPA={"typography-f-c":!0,"typography-fs-n":!0,"typography-w-400":!0,"typography-sz-bm":!0,"typography-ws-p":!0,"layout-as-n":!0},jPA=be(gA({},RgA),{"layout-r-none":!0,"layout-fs-c":!0}),qPA={"layout-el-cv":!0},bgA=Xs.merge(FPA,{"color-c-p30":!0}),VPA=Xs.merge(RgA,{"color-c-n5":!0}),WPA=Xs.merge(jPA,{"color-c-n5":!0}),ZPA=Xs.merge(GPA,{"color-c-n100":!0}),MgA=Xs.merge(KPA,{"color-c-n5":!0}),kgA=Xs.merge(UPA,{"color-c-n5":!0}),SgA=Xs.merge(JPA,{"color-c-n5":!0}),XPA=Xs.merge(LPA,{"color-c-n5":!0}),xgA=Xs.merge(TPA,{"color-c-n60":!0}),$PA=Xs.merge(PPA,{"color-c-n35":!0}),AjA=Xs.merge(HPA,{"color-c-n35":!0}),ejA=Xs.merge(zPA,{"color-c-n35":!0}),tjA=Xs.merge(OPA,{"color-c-n35":!0}),NgA={additionalStyles:{Card:{},Button:{"--n-60":"var(--n-100)"},Image:{"max-width":"120px","max-height":"120px",marginLeft:"auto",marginRight:"auto"}},components:{AudioPlayer:{},Button:{"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-5":!0,"layout-pr-5":!0,"border-br-2":!0,"border-bw-0":!0,"border-bs-s":!0,"color-bgc-p30":!0,"color-c-n100":!0,"behavior-ho-70":!0},Card:{"border-br-4":!0,"color-bgc-p100":!0,"color-bc-n90":!0,"border-bw-1":!0,"border-bs-s":!0,"layout-pt-4":!0,"layout-pb-4":!0,"layout-pl-4":!0,"layout-pr-4":!0},CheckBox:{element:{"layout-m-0":!0,"layout-mr-2":!0,"layout-p-2":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0,"color-c-p30":!0},label:{"color-c-p30":!0,"typography-f-sf":!0,"typography-v-r":!0,"typography-w-400":!0,"layout-flx-1":!0,"typography-sz-ll":!0},container:{"layout-dsp-iflex":!0,"layout-al-c":!0}},Column:{},DateTimeInput:{container:{},label:{},element:{"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-3":!0,"layout-pr-3":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0}},Divider:{"color-bgc-n90":!0,"layout-mt-6":!0,"layout-mb-6":!0},Image:{all:{"border-br-50pc":!0,"layout-el-cv":!0,"layout-w-100":!0,"layout-h-100":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0,"layout-sp-c":!0,"layout-mb-3":!0},avatar:{},header:{},icon:{},largeFeature:{},mediumFeature:{},smallFeature:{}},Icon:{"border-br-1":!0,"layout-p-2":!0,"color-bgc-n98":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0,"layout-sp-c":!0},List:{"layout-g-4":!0,"layout-p-2":!0},Modal:{backdrop:{"color-bbgc-p60_20":!0},element:{"border-br-2":!0,"color-bgc-p100":!0,"layout-p-4":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bc-p80":!0}},MultipleChoice:{container:{},label:{},element:{}},Row:{"layout-g-4":!0},Slider:{container:{},label:{},element:{}},Tabs:{container:{},controls:{all:{},selected:{}},element:{}},Text:{all:{"layout-w-100":!0,"layout-g-2":!0,"color-c-p30":!0},h1:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-2":!0,"layout-p-0":!0,"typography-sz-tl":!0},h2:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-2":!0,"layout-p-0":!0,"typography-sz-tl":!0},h3:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"typography-sz-ts":!0},h4:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"typography-sz-bl":!0},h5:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"color-c-n30":!0,"typography-sz-bm":!0,"layout-mb-1":!0},body:{},caption:{}},TextField:{container:{"typography-sz-bm":!0,"layout-w-100":!0,"layout-g-2":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0},label:{"layout-flx-0":!0},element:{"typography-sz-bm":!0,"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-3":!0,"layout-pr-3":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0,"color-c-p30":!0}},Video:{"border-br-5":!0,"layout-el-cv":!0}},elements:{a:bgA,audio:_PA,body:XPA,button:ZPA,h1:MgA,h2:kgA,h3:SgA,h4:{},h5:{},iframe:YPA,input:VPA,p:xgA,pre:$PA,textarea:WPA,video:qPA},markdown:{p:[...Object.keys(xgA)],h1:[...Object.keys(MgA)],h2:[...Object.keys(kgA)],h3:[...Object.keys(SgA)],h4:[],h5:[],ul:[...Object.keys(ejA)],ol:[...Object.keys(AjA)],li:[...Object.keys(tjA)],a:[...Object.keys(bgA)],strong:[],em:[]}};var ob=class t{nodes=[];subAgentIdCounter=1;selectedToolSubject=new Tt(void 0);selectedNodeSubject=new Tt(void 0);selectedCallbackSubject=new Tt(void 0);loadedAgentDataSubject=new Tt(void 0);agentToolsMapSubject=new Tt(new Map);agentToolsSubject=new Tt(void 0);newAgentToolBoardSubject=new Tt(void 0);agentCallbacksMapSubject=new Tt(new Map);agentCallbacksSubject=new Tt(void 0);agentToolDeletionSubject=new Tt(void 0);deleteSubAgentSubject=new Tt("");addSubAgentSubject=new Tt({parentAgentName:""});tabChangeSubject=new Tt(void 0);agentToolBoardsSubject=new Tt(new Map);constructor(){}getNode(e){return this.nodes.find(i=>i.name===e)}getRootNode(){return this.nodes.find(A=>!!A.isRoot)}addNode(e){let A=this.nodes.findIndex(g=>g.name===e.name);A!==-1?this.nodes[A]=e:this.nodes.push(e);let i=/^sub_agent_(\d+)$/,n=e.name.match(i);if(n){let g=parseInt(n[1],10);g>=this.subAgentIdCounter&&(this.subAgentIdCounter=g+1)}let o=this.agentToolsMapSubject.value,a=new Map(o);a.set(e.name,e.tools||[]),this.agentToolsMapSubject.next(a);let r=this.agentCallbacksMapSubject.value,s=new Map(r);s.set(e.name,e.callbacks||[]),this.agentCallbacksMapSubject.next(s),this.setSelectedNode(this.selectedNodeSubject.value)}getNodes(){return this.nodes}clear(){this.nodes=[],this.subAgentIdCounter=1,this.setSelectedNode(void 0),this.setSelectedTool(void 0),this.agentToolsMapSubject.next(new Map),this.agentCallbacksMapSubject.next(new Map),this.setSelectedCallback(void 0),this.setAgentTools(),this.setAgentCallbacks()}getSelectedNode(){return this.selectedNodeSubject.asObservable()}setSelectedNode(e){this.selectedNodeSubject.next(e)}getSelectedTool(){return this.selectedToolSubject.asObservable()}setSelectedTool(e){this.selectedToolSubject.next(e)}getSelectedCallback(){return this.selectedCallbackSubject.asObservable()}setSelectedCallback(e){this.selectedCallbackSubject.next(e)}getNextSubAgentName(){return`sub_agent_${this.subAgentIdCounter++}`}addTool(e,A){let i=this.getNode(e);if(i){let n=i.tools||[];i.tools=[A,...n];let o=this.agentToolsMapSubject.value,a=new Map(o);a.set(e,i.tools),this.agentToolsMapSubject.next(a)}}deleteTool(e,A){let i=this.getNode(e);if(i&&i.tools){let n=i.tools.length;if(i.tools=i.tools.filter(o=>o.name!==A.name),i.tools.lengthr.name===A.name))return{success:!1,error:`Callback with name '${A.name}' already exists`};i.callbacks.push(A),this.agentCallbacksSubject.next({agentName:e,callbacks:i.callbacks});let o=this.agentCallbacksMapSubject.value,a=new Map(o);return a.set(e,i.callbacks),this.agentCallbacksMapSubject.next(a),{success:!0}}catch(i){return{success:!1,error:"Failed to add callback: "+i.message}}}updateCallback(e,A,i){try{let n=this.getNode(e);if(!n)return{success:!1,error:"Agent not found"};if(!n.callbacks)return{success:!1,error:"No callbacks found for this agent"};let o=n.callbacks.findIndex(l=>l.name===A);if(o===-1)return{success:!1,error:"Callback not found"};if(n.callbacks.some((l,C)=>C!==o&&l.name===i.name))return{success:!1,error:`Callback with name '${i.name}' already exists`};let r=gA(gA({},n.callbacks[o]),i);n.callbacks[o]=r,this.agentCallbacksSubject.next({agentName:e,callbacks:n.callbacks});let s=this.agentCallbacksMapSubject.value,g=new Map(s);return g.set(e,n.callbacks),this.agentCallbacksMapSubject.next(g),this.selectedCallbackSubject.value?.name===A&&this.setSelectedCallback(r),{success:!0}}catch(n){return{success:!1,error:"Failed to update callback: "+n.message}}}deleteCallback(e,A){try{let i=this.getNode(e);if(!i)return{success:!1,error:"Agent not found"};if(!i.callbacks)return{success:!1,error:"No callbacks found for this agent"};let n=i.callbacks.findIndex(r=>r.name===A.name);if(n===-1)return{success:!1,error:"Callback not found"};i.callbacks.splice(n,1),this.agentCallbacksSubject.next({agentName:e,callbacks:i.callbacks});let o=this.agentCallbacksMapSubject.value,a=new Map(o);return a.set(e,i.callbacks),this.agentCallbacksMapSubject.next(a),this.selectedCallbackSubject.value?.name===A.name&&this.setSelectedCallback(void 0),{success:!0}}catch(i){return{success:!1,error:"Failed to delete callback: "+i.message}}}setLoadedAgentData(e){this.loadedAgentDataSubject.next(e)}getLoadedAgentData(){return this.loadedAgentDataSubject.asObservable()}getAgentToolsMap(){return this.agentToolsMapSubject.asObservable()}getAgentCallbacksMap(){return this.agentCallbacksMapSubject.asObservable()}requestSideTabChange(e){this.tabChangeSubject.next(e)}getSideTabChangeRequest(){return this.tabChangeSubject.asObservable()}requestNewTab(e,A){this.newAgentToolBoardSubject.next({toolName:e,currentAgentName:A})}getNewTabRequest(){return this.newAgentToolBoardSubject.asObservable().pipe(fe(A=>A?{tabName:A.toolName,currentAgentName:A.currentAgentName}:void 0))}requestTabDeletion(e){this.agentToolDeletionSubject.next(e)}getTabDeletionRequest(){return this.agentToolDeletionSubject.asObservable()}setAgentToolBoards(e){this.agentToolBoardsSubject.next(e)}getAgentToolBoards(){return this.agentToolBoardsSubject.asObservable()}getCurrentAgentToolBoards(){return this.agentToolBoardsSubject.value}getAgentTools(){return this.agentToolsSubject.asObservable()}getDeleteSubAgentSubject(){return this.deleteSubAgentSubject.asObservable()}setDeleteSubAgentSubject(e){this.deleteSubAgentSubject.next(e)}getAddSubAgentSubject(){return this.addSubAgentSubject.asObservable()}setAddSubAgentSubject(e,A,i){this.addSubAgentSubject.next({parentAgentName:e,agentClass:A,isFromEmptyGroup:i})}setAgentTools(e,A){if(e&&A){this.agentToolsSubject.next({agentName:e,tools:A});let i=this.agentToolsMapSubject.value,n=new Map(i);n.set(e,A),this.agentToolsMapSubject.next(n)}else this.agentToolsSubject.next(void 0)}getAgentCallbacks(){return this.agentCallbacksSubject.asObservable()}setAgentCallbacks(e,A){e&&A?this.agentCallbacksSubject.next({agentName:e,callbacks:A}):this.agentCallbacksSubject.next(void 0)}getParentNode(e,A,i,n){if(e){if(e.name===A.name)return i;for(let o of e.sub_agents){let a=this.getParentNode(o,A,e,n);if(a)return a}if(e.tools){for(let o of e.tools)if(o.toolType==="Agent Tool"){let a=n.get(o.toolAgentName||o.name);if(a){let r=this.getParentNode(a,A,e,n);if(r)return r}}}}}deleteNode(e){this.nodes=this.nodes.filter(A=>A.name!==e.name),this.setSelectedNode(this.selectedNodeSubject.value)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var ab=class t{constructor(e){this.http=e}apiServerDomain=zr.getApiServerBaseUrl();getLatestArtifact(e,A,i,n){let o=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}/artifacts/${n}`;return this.http.get(o)}getArtifactVersion(e,A,i,n,o){let a=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}/artifacts/${n}/versions/${o}`;return this.http.get(a)}static \u0275fac=function(A){return new(A||t)(So($s))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var rb=class t{audioContext=new AudioContext({sampleRate:22e3});lastAudioTime=0;scheduledAudioSources=new Set;playAudio(e){let A=this.combineAudioBuffer(e);A&&this.playPCM(A)}stopAudio(){for(let e of this.scheduledAudioSources)e.onended=null,e.stop();this.scheduledAudioSources.clear(),this.lastAudioTime=this.audioContext.currentTime}combineAudioBuffer(e){if(e.length===0)return;let A=e.reduce((o,a)=>o+a.length,0),i=new Uint8Array(A),n=0;for(let o of e)i.set(o,n),n+=o.length;return i}playPCM(e){let A=new Float32Array(e.length/2);for(let r=0;r=32768&&(s-=65536),A[r]=s/32768}let i=this.audioContext.createBuffer(1,A.length,22e3);i.copyToChannel(A,0);let n=this.audioContext.createBufferSource();n.buffer=i,n.connect(this.audioContext.destination),n.onended=()=>{this.scheduledAudioSources.delete(n)},this.scheduledAudioSources.add(n);let o=this.audioContext.currentTime,a=Math.max(this.lastAudioTime,o);n.start(a),this.lastAudioTime=a+i.duration}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var sb=new yA("AudioRecordingService"),gb=new yA("AudioWorkletModulePath");var lb=class t{audioWorkletModulePath=h(gb);stream;audioContext;source;audioBuffer=[];startRecording(){return nt(this,null,function*(){try{this.stream=yield navigator.mediaDevices.getUserMedia({audio:!0}),this.audioContext=new AudioContext,yield this.audioContext.audioWorklet.addModule(this.audioWorkletModulePath),this.source=this.audioContext.createMediaStreamSource(this.stream);let e=new AudioWorkletNode(this.audioContext,"audio-processor");e.port.onmessage=A=>{let i=A.data,n=this.float32ToPCM(i);this.audioBuffer.push(n)},this.source.connect(e),e.connect(this.audioContext.destination)}catch(e){console.error("Error accessing microphone:",e)}})}stopRecording(){this.source&&this.source.disconnect(),this.audioContext&&this.audioContext.close(),this.stream&&this.stream.getTracks().forEach(e=>e.stop())}getCombinedAudioBuffer(){if(this.audioBuffer.length===0)return;let e=this.audioBuffer.reduce((n,o)=>n+o.length,0),A=new Uint8Array(e),i=0;for(let n of this.audioBuffer)A.set(n,i),i+=n.length;return A}cleanAudioBuffer(){this.audioBuffer=[]}float32ToPCM(e){let A=new ArrayBuffer(e.length*2),i=new DataView(A);for(let n=0;nbe(gA({},t),{attributes:be(gA({},t.attributes),{"gcp.vertex.agent.llm_request":t.attributes["gcp.vertex.agent.llm_request"]??ajA(t),"gcp.vertex.agent.llm_response":t.attributes["gcp.vertex.agent.llm_response"]??ljA(t)})}),ajA=t=>t.name.startsWith(FgA)?t.attributes?.[FK]:t.name.startsWith(_gA)?GgA(t.logs):void 0,rjA=t=>{let e=sjA(t),A=GgA(t);return JSON.stringify({system_message:e,user_message:LK(A)})},GgA=t=>{if(!t)return;let e=t.reverse().find(gjA);if(!e)return;let A=typeof e.body=="string"?LK(e.body):e.body;return typeof A=="string"?A:(A.content.role="user",A.contents=[A.content],delete A.content,JSON.stringify(A))},sjA=t=>{if(!t)return;let e=t.reverse().find(A=>A.event_name==="gen_ai.system.message");if(e)return typeof e.body=="string"?LK(e.body):e.body},gjA=t=>{if(t.event_name!=="gen_ai.user.message")return!1;try{let A=(typeof t.body=="string"?JSON.parse(t.body):t.body)[ijA]?.[njA];return Array.isArray(A)?A.every(i=>!i[ojA]):!1}catch{return!1}},ljA=t=>t.name.startsWith(FgA)?t.attributes?.[_K]:t.name.startsWith(_gA)?KgA(t.logs):void 0,KgA=t=>{if(!t)return;let e=t.reverse().find(A=>A.event_name==="gen_ai.choice");if(e)return cjA(e)},LK=t=>{try{return JSON.parse(t)}catch{return t}},cjA=t=>typeof t.body=="string"?t.body:JSON.stringify(t.body),UgA=t=>be(gA({},t),{"gcp.vertex.agent.llm_request":t["gcp.vertex.agent.llm_request"]??CjA(t),"gcp.vertex.agent.llm_response":t["gcp.vertex.agent.llm_response"]??IjA(t)}),CjA=t=>{if(FK in t)return`${t[FK]}`;if(t.logs)return rjA(t.logs)},IjA=t=>{if(_K in t)return`${t[_K]}`;if(t.logs)return KgA(t.logs)};var Ib=class t{constructor(e){this.http=e}apiServerDomain=zr.getApiServerBaseUrl();getEventTrace(e){let A=this.apiServerDomain+`/debug/trace/${e.id}`;return this.http.get(A).pipe(fe(n=>UgA(n)))}getTrace(e){let A=this.apiServerDomain+`/debug/trace/session/${e}`;return this.http.get(A).pipe(fe(n=>Array.isArray(n)?n.map(LgA):n))}getEvent(e,A,i,n){let o=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}/events/${n}/graph`;return this.http.get(o)}static \u0275fac=function(A){return new(A||t)(So($s))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var db=class t{route=h(ag);constructor(){}isImportSessionEnabled(){return this.route.queryParams.pipe(fe(e=>e[Fz]==="true"))}isEditFunctionArgsEnabled(){return this.route.queryParams.pipe(fe(e=>e[_z]==="true"))}isSessionUrlEnabled(){return se(!0)}isA2ACardEnabled(){return this.route.queryParams.pipe(fe(e=>e[Lz]==="true"))}isApplicationSelectorEnabled(){return se(!0)}isAlwaysOnSidePanelEnabled(){return se(!1)}isTraceEnabled(){return se(!0)}isArtifactsTabEnabled(){return se(!0)}isEvalEnabled(){return se(!0)}isTokenStreamingEnabled(){return se(!0)}isMessageFileUploadEnabled(){return se(!0)}isManualStateUpdateEnabled(){return se(!0)}isBidiStreamingEnabled(){return se(!0)}isExportSessionEnabled(){return se(!0)}isEventFilteringEnabled(){return se(!1)}isDeleteSessionEnabled(){return se(!0)}isLoadingAnimationsEnabled(){return se(!0)}isSessionsTabReorderingEnabled(){return se(!1)}isSessionFilteringEnabled(){return se(!1)}isSessionReloadOnNewMessageEnabled(){return se(!1)}isUserIdOnToolbarEnabled(){return se(!0)}isDeveloperUiDisclaimerEnabled(){return se(!0)}isFeedbackServiceEnabled(){return se(!1)}isInfinityMessageScrollingEnabled(){return se(!1)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Bb=class t{sendFeedback(e,A,i){return se(void 0)}getFeedback(e,A){return se(void 0)}deleteFeedback(e,A){return se(void 0)}getPositiveFeedbackReasons(){return se([])}getNegativeFeedbackReasons(){return se([])}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var djA=(()=>{var t=import.meta.url;return function(e={}){var A,i=e,n,o,a=new Promise((u,y)=>{n=u,o=y});i.agerrMessages=[],i.stderrMessages=[],B=u=>i.stderrMessages.push(u);var r=Object.assign({},i),s="./this.program",g=(u,y)=>{throw y},l="",C,I;typeof document<"u"&&document.currentScript&&(l=document.currentScript.src),t&&(l=t),l.startsWith("blob:")?l="":l=l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1),C=u=>fetch(u,{credentials:"same-origin"}).then(y=>y.ok?y.arrayBuffer():Promise.reject(new Error(y.status+" : "+y.url)));var d=console.log.bind(console),B=console.error.bind(console);Object.assign(i,r),r=null;var E;function Q(u){for(var y=atob(u),x=new Uint8Array(y.length),H=0;Hu.startsWith(Pe);function HA(){var u="data:application/octet-stream;base64,AGFzbQEAAAABmAd0YAJ/fwF/YAF/AGABfwF/YAN/f38Bf2ACf38AYAN/f38AYAR/f39/AX9gBH9/f38AYAV/f39/fwF/YAZ/f39/f38Bf2AFf39/f38AYAZ/f39/f38AYAAAYAh/f39/f39/fwF/YAABf2AHf39/f39/fwF/YAF8AXxgAn9/AXxgAX8BfGAHf39/f39/fwBgA39/fwF8YAd/f39/fHx/AGACf3wAYAR8fHx/AXxgAnx8AXxgA398fABgBX9+fn5+AGAEf39/fABgCn9/f39/f39/f38Bf2ADf35/AX5gBH9/fHwBf2ADfHx8AXxgCX9/f39/f39/fwBgA39/fgBgAAF8YAR/f39/AXxgAn9/AX5gBX9/f39+AX9gA39/fgF/YAp/f39/f39/f39/AGAEf35+fwBgBH9/fH8AYAJ/fgBgAnx/AXxgBH9/f3wBf2ABfwF+YAJ/fgF/YAJ/fAF/YAN8fH8BfGADf3x/AGAIf39/f39/f38AYAV/f39/fAF/YAt/f39/f39/f39/fwF/YAN/f3wAYAV/f35/fwBgBH9/fH8Bf2AAAX5gB39/f398f38Bf2AFf39/f3wAYAN/f3wBf2ADf35/AX9gAn19AX1gBH9/fX8AYAZ/fHx8fHwBfGADf39/AX5gDH9/f39/f39/f39/fwF/YAV/f3x/fwF/YAd/f398fH9/AGAGf39/fH9/AGAGf39/f35/AX9gD39/f39/f39/f39/f39/fwBgBH9/f38BfmAGf3x/f39/AX9gB39/f39/fn4Bf2AGf39/f35+AX9gB39/f39+f38Bf2AGf39/f39+AX9gAn5/AGAEf35/fwF/YAR/f3x8AXxgBX9/fH9/AGAJf39/f39/f39/AX9gBH9/fHwAYAR+fn5+AX9gAn99AX9gAn5/AX9gCH9/f398fHx/AGADf31/AGAGf39+fn5/AGABfAF/YAJ+fgF9YAJ/fQBgBH9/f34BfmAGf31/f39/AGADf3x8AX9gBX9/f3x/AGAFf398fH8AYAZ8fHx/f38AYAJ+fgF8YAJ8fwF/YAR/fHx8AGAGf39/f398AGAEf3x/fwBgBnx8f3x8fwBgB398fHx8fHwAYAV/fHx8fAF/YAF/AX1gA39/fwF9YAN+fn4Bf2AEf35+fgBgBH98f38Bf2AKf3x/f39/f39/fwBg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g+cDIAJBEGoQHxoQLAALFwBBAUF/IAAgASABED8iABChAiAARhsLJQEBfyAAKAIsIgBBAEGAASAAKAIAEQMAIgAEfyAAKAIQBUEACws0AQF/AkAgACABEOUBIgFFDQAgACgCLCIAIAFBCCAAKAIAEQMAIgBFDQAgACgCECECCyACC28BAX8jAEEgayIDJAAgA0IANwMYIANCADcDECADIAI2AgwCQCADQRBqIAEgAhC0CiIBQQBIBEAgA0GQhgsoAgAQswU2AgBBmP0DIAMQNwwBCyAAIANBEGoiABCOBSABEKECGiAAEFwLIANBIGokAAskAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAhDLCyADQRBqJAALMwEBfyACBEAgACEDA0AgAyABLQAAOgAAIANBAWohAyABQQFqIQEgAkEBayICDQALCyAAC6QBAQN/IwBBEGsiAiQAAkAgABAuIgMgACgCAEEDcSAAKQMIEOYJIgEEfyABKAIYBUEACyIBDQAgAygCTCIBKAIAKAIMIgMEQCABKAIIIAAoAgBBA3EgACkDCCADESYAIgENAQtBACEBIAAoAgBBA3FBAkYNACACIAApAwg3AwggAkElNgIAQZDbCiEBQZDbCkEgQY4YIAIQpgEaCyACQRBqJAAgAQsPACAAIAEgAiADQQAQ7wsLQwAgACAAIAGlIAG9Qv///////////wCDQoCAgICAgID4/wBWGyABIAC9Qv///////////wCDQoCAgICAgID4/wBYGwsVACAAEKMBBEAgACgCBA8LIAAQpQMLFAAgABAoBEAgAC0ADw8LIAAoAgQLJgAgACABEK0HIgFFBEBBAA8LIAAQ7QEoAgwgASgCEEECdGooAgALogEBAn8CQAJAIAAEQCAAKAIIIgMgACgCDCICRgRAIAAgA0EBdEEBIAMbIAEQqgIgACgCDCECCyACRQ0BIAAoAggiAyACTw0CIAAgACgCBCADaiACcCICIAEQ3gEaIAAgACgCCEEBajYCCCACDwtBvdIBQbS3AUE3Qc3CARAAAAtB2pMDQbS3AUE/Qc3CARAAAAtBpAxBtLcBQcAAQc3CARAAAAsuACAALQAPIgBBAWpB/wFxQRFPBEBBqrkDQZ38AEHcAEHKlwEQAAALIABB/wFHC0MAIAAgACABpCABvUL///////////8Ag0KA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AEEQayIDJAAgAyACNgIMIAAgASACEMkLIANBEGokAAsIAEEBIAAQGgsMACAAIAFBHGoQ2goLGQEBfyMAQRBrIgEkACAAEKcLIAFBEGokAAsbAQF/QQohASAAEKMBBH8gABD2AkEBawVBCgsL0wECA38CfgJAIAApA3AiBFBFIAQgACkDeCAAKAIEIgEgACgCLCICa6x8IgVXcUUEQCAAEL0FIgNBAE4NASAAKAIsIQIgACgCBCEBCyAAQn83A3AgACABNgJoIAAgBSACIAFrrHw3A3hBfw8LIAVCAXwhBSAAKAIEIQEgACgCCCECAkAgACkDcCIEUA0AIAQgBX0iBCACIAFrrFkNACABIASnaiECCyAAIAI2AmggACAFIAAoAiwiACABa6x8NwN4IAAgAU8EQCABQQFrIAM6AAALIAMLygECAn8BfCMAQRBrIgEkAAJAIAC9QiCIp0H/////B3EiAkH7w6T/A00EQCACQYCAwPIDSQ0BIABEAAAAAAAAAABBABCwBCEADAELIAJBgIDA/wdPBEAgACAAoSEADAELIAAgARCoByECIAErAwghACABKwMAIQMCQAJAAkACQCACQQNxQQFrDgMBAgMACyADIABBARCwBCEADAMLIAMgABCxBCEADAILIAMgAEEBELAEmiEADAELIAMgABCxBJohAAsgAUEQaiQAIAALewEDfwJAIAEQuAohAiAAEPsGIQMgABAkIQQgAiADTQRAIAAQRiIDIAEgAhCoCyMAQRBrIgEkACAAECQaIAAgAhCfAyABQQA2AgwgAyACQQJ0aiABQQxqENsBIAFBEGokAAwBCyAAIAMgAiADayAEQQAgBCACIAEQsQoLC08BA38CQCABED8hAiAAEFUhAyAAECQhBCACIANNBEAgABBGIgMgASACEKoLIAAgAyACEMUKDAELIAAgAyACIANrIARBACAEIAIgARC1CgsLEAAgABCgCyABEKALc0EBcwsQACAAEKELIAEQoQtzQQFzCxUAIAAtAA9B/wFGBEAgACgCABAYCwsLACAAIAFBOBCgCguVBQIDfwJ+IwBB4ABrIgUkAAJAAkACQAJAAkACQCAAQQIgAyAFQdgAakEAEJQDRQRAIAMNAiAEBEAgABDcBUUNBAsgBUIANwNQIAVCADcDSAwBCyAFQgA3A0ggBSAFKQNYNwNQIAVB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CCEBIARBiPIIQRgQzgFFDQJBoPIIIQEgBEGg8ghBGBDOAUUNAkEAIQBBkJ8LLQAARQRAA0AgAEECdEHgngtqIABBlYAFEJ8HNgIAIABBAWoiAEEGRw0AC0GQnwtBAToAAEH4ngtB4J4LKAIANgIAC0HgngshASACQQhqIgBB4J4LQRgQzgFFDQJB+J4LIQEgAEH4ngtBGBDOAUUNAkEYEE0iAUUNAQsgASACKQIINwIAIAEgAikCGDcCECABIAIpAhA3AggMAQtBACEBCyACQSBqJABBhKELQQE6AABBgKELIAE2AgAgAQutAQIBfwJ+AkACQCAABEAgAQRAIABBABDAAiIDKAL0Aw0CIAMpA7AEIgQgAUEIayIBKAIAQQhqrSIFVA0DIAMgBCAFfSIENwOwBCADKALABEECTwRAIANBLSAFIAQgAykDuAQgAhCSBAsgASAAKAIUEQEACw8LQZ3TAUG+vAFBiwdB254BEAAAC0Gn0QFBvrwBQZIHQdueARAAAAtBlqgBQb68AUGbB0HbngEQAAALCQAgAEEAENcGC78KAgV/D34jAEHgAGsiBSQAIARC////////P4MhDCACIASFQoCAgICAgICAgH+DIQogAkL///////8/gyINQiCIIQ4gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCgwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEKIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACEKQgAhAQwDCyAKQoCAgICAgMD//wCEIQpCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASALhEIAIQFQBEBCgICAgICA4P//ACEKDAMLIApCgICAgICAwP//AIQhCgwCCyABIAuEUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyALQv///////z9YBEAgBUHQAGogASANIAEgDSANUCIGG3kgBkEGdK18pyIGQQ9rELMBQRAgBmsh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IABBACAHELgFDAELIAUgAiADIAAgBEEQahCgBwsgAEEBRgRAIARBCGpBARC3BUEADAELIARBCGogBhC3BUEBCyEAIAQgBCgCCEEBciIGNgIIIAIgBWoiBSABSQ0ACwsgBSACIAMgBEEIaiAAQQAgBEEQahC4BQJAIABBAUcNACAEKAIIQQFHDQAgBCgCDEUNAQsDQAJ/IABBAUwEQCAEQQhqIgEgARDfCyIBELkFIAAgAWoMAQsgBEEIaiIBQQIQtwUgBCAEKAIIQQdzNgIIIAFBARC5BSAFIAlqIgggBEEQaiIHIABBAmsiBkECdGooAgBrIAIgAyABIABBAWtBASAHELgFIAFBARC3BSAEIAQoAghBAXI2AgggCCACIAMgASAGQQEgBxC4BSAGCyEAIAUgCWohBSAAQQFHDQAgBCgCCEEBRw0AIAQoAgwNAAsLIARB0AFqJAALxAEBA38CfwJAIAEoAkwiAkEATgRAIAJFDQFBnIgLKAIAIAJB/////wNxRw0BCwJAIABB/wFxIgIgASgCUEYNACABKAIUIgMgASgCEEYNACABIANBAWo2AhQgAyAAOgAAIAIMAgsgASACEKQHDAELIAFBzABqIgQQ6QsaAkACQCAAQf8BcSICIAEoAlBGDQAgASgCFCIDIAEoAhBGDQAgASADQQFqNgIUIAMgADoAAAwBCyABIAIQpAchAgsgBBDpAxogAgsLqwMCBX8BfiAAvUL///////////8Ag0KBgICAgICA+P8AVCABvUL///////////8Ag0KAgICAgICA+P8AWHFFBEAgACABoA8LIAG9IgdCIIinIgJBgIDA/wNrIAenIgVyRQRAIAAQwAUPCyACQR52QQJxIgYgAL0iB0I/iKdyIQMCQCAHQiCIp0H/////B3EiBCAHp3JFBEACQAJAIANBAmsOAgABAwtEGC1EVPshCUAPC0QYLURU+yEJwA8LIAJB/////wdxIgIgBXJFBEBEGC1EVPsh+T8gAKYPCwJAIAJBgIDA/wdGBEAgBEGAgMD/B0cNASADQQN0QYDKCGorAwAPCyAEQYCAwP8HRyACQYCAgCBqIARPcUUEQEQYLURU+yH5PyAApg8LAnwgBgRARAAAAAAAAAAAIARBgICAIGogAkkNARoLIAAgAaOZEMAFCyEAAkACQAJAIANBAWsOAwABAgQLIACaDwtEGC1EVPshCUAgAEQHXBQzJqahvKChDwsgAEQHXBQzJqahvKBEGC1EVPshCcCgDwsgA0EDdEGgyghqKwMAIQALIAALlgECAX8BfgJAIAAQOSABEDlHDQACQAJAAkAgASgCAEEDcQ4CAAECCwNAIAAgAUYiAg0DIAEoAkQiAQ0ACwwCCwJAIAAgASkDCCIDEL8DIgFBAXINAEEAIQEgACAAEDkiAkYNACACIAMQvwMiAkUNACAAIAJBARCDARogAiEBCyABQQBHDwsgACABQQAQ1gJBAEchAgsgAgtEAgJ/AXwgAEEAIABBAEobIQADQCAAIANGRQRAIAEgA0EDdCIEaisDACACIARqKwMAoiAFoCEFIANBAWohAwwBCwsgBQs7AQJ/IAAoAgQiAQRAIAEhAANAIAAiASgCACIADQALIAEPCwNAIAAgACgCCCIBKAIARyABIQANAAsgAAs6AQF/AkAgAUUNACAAEL4DKAIAIAFBARCYBCICRSACQQhqIAFHcg0AIAAgARDVAg8LIAAgAUEAEMsICwwAQYjdChDtCzYCAAuZAgEGfyAAKAIIIgVBgCBxBEAgACgCDA8LAkAgBUEBcQRAIAAoAhAiAiAAKAIUQQJ0aiEGA0AgAiAGTw0CIAIoAgAiBARAAkAgAUUEQCAEIgMhAQwBCyABIAQ2AgALA0AgASIEKAIAIgENAAsgAiAENgIAIAQhAQsgAkEEaiECDAALAAsgACgCDCIDRQRAQQAhAwwBCwNAIAMoAgQiAQRAIAMgASgCADYCBCABIAM2AgAgASEDDAELCyADIQEDQCABIgQoAgAiAQRAIAEoAgQiAkUNAQNAIAEgAigCADYCBCACIAE2AgAgAiIBKAIEIgINAAsgBCABNgIADAELCyAAKAIIIQULIAAgAzYCDCAAIAVBgCByNgIIIAMLoQEBAn8CQCAAECRFIAIgAWtBBUhyDQAgASACEJcFIAJBBGshBCAAEEYiAiAAECRqIQUCQANAAkAgAiwAACEAIAEgBE8NACAAQQBMIABB/wBOckUEQCABKAIAIAIsAABHDQMLIAFBBGohASACIAUgAmtBAUpqIQIMAQsLIABBAEwgAEH/AE5yDQEgAiwAACAEKAIAQQFrSw0BCyADQQQ2AgALC4QBAQJ/IwBBEGsiAiQAIAAQowEEQCAAKAIAIAAQ9gIaEKEFCyABECQaIAEQowEhAyAAIAEoAgg2AgggACABKQIANwIAIAFBABDTASACQQA6AA8gASACQQ9qENIBAkAgACABRiIBIANyRQ0ACyAAEKMBIAFyRQRAIAAQpQMaCyACQRBqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgLzgkCBH8EfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgCUKAgICAgIDA//8AVCAJQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAKQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiBRshBEIAIAEgBRshAwwCCyADIAlCgICAgICAwP//AIWEUA0BIAEgCoRQBEAgAyAJhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAJhFBFDQAgASEDIAIhBAwBCyADIAEgASADVCAJIApWIAkgClEbIggbIQogBCACIAgbIgxC////////P4MhCSACIAQgCBsiC0IwiKdB//8BcSEHIAxCMIinQf//AXEiBUUEQCAGQeAAaiAKIAkgCiAJIAlQIgUbeSAFQQZ0rXynIgVBD2sQswEgBikDaCEJIAYpA2AhCkEQIAVrIQULIAEgAyAIGyEDIAtC////////P4MhASAHBH4gAQUgBkHQAGogAyABIAMgASABUCIHG3kgB0EGdK18pyIHQQ9rELMBQRAgB2shByAGKQNQIQMgBikDWAtCA4YgA0I9iIRCgICAgICAgASEIQEgCUIDhiAKQj2IhCACIASFIQQCfiADQgOGIgIgBSAHRg0AGiAFIAdrIgdB/wBLBEBCACEBQgEMAQsgBkFAayACIAFBgAEgB2sQ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ABCCASIGEP4BRQ0AGiADIAYQ1gMhAQNAAkAgABCVARogAUEwayEBIAAgBUEMahBbIARBAkhyDQAgA0HAACAAEIIBIgYQ/gFFDQMgBEEBayEEIAMgBhDWAyABQQpsaiEBDAELCyAAIAVBDGoQW0UNAUECCyACKAIAcjYCAAsgBUEQaiQAIAELlQEBA38jAEEQayIEJAAgBCABNgIMIAQgAzYCCCAEQQRqIARBDGoQjgIgBCgCCCEDIwBBEGsiASQAIAEgAzYCDCABIAM2AghBfyEFAkBBAEEAIAIgAxBjIgNBAEgNACAAIANBAWoiAxBNIgA2AgAgAEUNACAAIAMgAiABKAIMEGMhBQsgAUEQaiQAEI0CIARBEGokACAFC2MAIAIoAgRBsAFxIgJBIEYEQCABDwsCQCACQRBHDQACQAJAIAAtAAAiAkEraw4DAAEAAQsgAEEBag8LIAJBMEcgASAAa0ECSHINACAALQABQSByQfgARw0AIABBAmohAAsgAAsuAAJAIAAoAgRBygBxIgAEQCAAQcAARgRAQQgPCyAAQQhHDQFBEA8LQQAPC0EKC0YBAX8gACgCACECIAEQbyEAIAJBCGoiARDFAiAASwR/IAEgABCeAygCAEEARwVBAAtFBEAQkAEACyACQQhqIAAQngMoAgALTQEBfyMAQRBrIgMkACAAIAEgAhCLByIABEAgAyAAELMFNgIIIAMgAjYCBCADIAE2AgBBqPMIKAIAQfv7AyADEB8aECwACyADQRBqJAALfQECfyMAQRBrIgQkACMAQSBrIgMkACADQRhqIAEgASACahCkBSADQRBqIAMoAhggAygCHCAAEKsLIAMgASADKAIQEKMFNgIMIAMgACADKAIUEKQDNgIIIARBCGogA0EMaiADQQhqEPwBIANBIGokACAEKAIMGiAEQRBqJAAL4wECBH4CfyMAQRBrIgYkACABvSIFQv////////8HgyECIAACfiAFQjSIQv8PgyIDUEUEQCADQv8PUgRAIAJCBIghBCADQoD4AHwhAyACQjyGDAILIAJCBIghBEL//wEhAyACQjyGDAELIAJQBEBCACEDQgAMAQsgBiACQgAgBadnQSByIAJCIIinZyACQoCAgIAQVBsiB0ExahCzAUGM+AAgB2utIQMgBikDCEKAgICAgIDAAIUhBCAGKQMACzcD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DCABNgJIIAEoAgRBAUcNACAMKAIAEBggDEH23gEQZDYCAAsgCSgCjAEgCUGQAWokAEUNAQJAAkACQCAAEJICDgMAAQIECyATIB0QITYCAEHA9QMgExB/DAMLIBMgHhAhNgIQQcn5AyATQRBqEH8MAgsgGUEwQQAgGSgCAEEDcUEDRxtqKAIoECEhACAUEIECIQEgEyAZQVBBACAZKAIAQQNxQQJHG2ooAigQITYCKCATQbbfAUHUngMgARs2AiQgEyAANgIgQfzuAyATQSBqEH8MAQsgASAAQQAQ8wghAAJ/IAVBAUYEQCAAEJsEDAELIAAgFBDRBgshASAAEBggDCABNgIAIBQoAhAoApABIAwQ9AgLIBNBMGokACAMDwtBwNUBQdH7AEEMQf47EAAACwgAIAAQmQEaC44BAQN/AkAgACgCCCIBQQxxBEAgACgCDCECDAELAkAgAUEBcQRAIAAQsAEhAiAAKAIQIgEgACgCFEECdGohAwNAIAEgA08NAiABQQA2AgAgAUEEaiEBDAALAAsgACgCECECIABBADYCEAwBCyAAKAIIIQELIABBADYCGCAAQQA2AgwgACABQf9fcTYCCCACC78CAgN/AXwjAEEwayICJAAgACgAnAEhAyAAKAKUASACIAApApwBNwMIIAIgACkClAE3AwAgAiADQQFrEBlBAnRqKAIAIQMgAiABKQMYNwMoIAIgASkDEDcDICACIAEpAwg3AxggAiABKQMANwMQIABBlAFqAkAgA0UNAAJAIAIoAhQNACADKAIEIgRFDQAgAiAENgIUCwJAIAIrAyBEAAAAAAAAAABjRQ0AIAMrAxAiBUQAAAAAAAAAAGZFDQAgAiAFOQMgCwJAIAIoAhANACADKAIAIgRFDQAgAiAENgIQCyADKAIYQf8AcSIDRQ0AIAIgAigCKCADcjYCKAsgACAAKAKsASgCiAEiAyACQRBqQQEgAygCABEDADYCqAFBBBAnIQEgACgClAEgAUECdGogACgCqAE2AgAgAkEwaiQAC28BAX8jAEEgayIDJAAgA0IANwMYIANCADcDCCADQoCAgICAgID4v383AxAgAyACNgIYIANCADcDACABBEAgACADQbCbCkEDIAFBqt4BEJAECyAAKAI8KAKIASIAIANBASAAKAIAEQMAIANBIGokAAsLACAAQeXMBBCg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CQoLDA0ODxAREhMUFRYXGBkLIAJBAWoiE0EQEBohEUEBIQMDQCACIANGBEAgESAQIAJBMGxqIgFBGGopAwA3AwggESABKQMQNwMAIBEgAkEEdGoiAyABQRBrIgJBCGopAwA3AwggAyACKQMANwMAIAAgESATIAQQSCAREBggDyACKQMINwMoIA8gAikDADcDICAPIAEpAxg3AzggDyABKQMQNwMwIA8gDysDMCAPKwMgIAErAwChoDkDQCAPIA8rAzggDysDKCABKwMIoaA5A0ggACAPQTBqQQIQPSAPIA8pA0g3AzggDyAPKQNANwMwIAAgD0EgakECED0MGgUgESADQQR0IhJqIhQgASASaiISKQMANwMAIBQgEikDCDcDCCADQQFqIQMMAQsACwALIAJBAmoiA0EQEBoiAiABKQMINwMIIAIgASkDADcDACACIBApAyA3AxAgAiAQKQMoNwMYIAIgECsDICAQKwMwIgYgECsDQKFEAAAAAAAACECjIgegOQMgIBArAyghCCAQKwNIIQkgECsDOCEFIAIgBiAHoDkDMCACIAUgBSAJoUQAAAAAAAAIQKMiBaA5AzggAiAIIAWgOQMoQQQgAyADQQRNGyERIAFBIGshE0EEIQEDQCABIBFGBEAgACACIAMgBBBIIAIQGCAPIBApAzg3AyggDyAQKQMwNwMgIA8gECkDKDcDOCAPIBApAyA3AzAgACAPQSBqQQIQPQwZBSACIAFBBHQiEmoiFCASIBNqIhIpAwA3AwAgFCASKQMINwMIIAFBAWohAQwBCwALAAsgAkEDaiIDQRAQGiICIAFBCGopAwA3AwggAiABKQMANwMAIAIgASsDACIFIAUgECsDEKEiBkQAAAAAAADQv6KgOQMQIAErAwghCCAQKwNIIQkgAiAQKwM4Igc5AzggAiAFIAZEAAAAAAAAAsCioDkDMCACIAUgBiAGoKE5AyAgAiAIIAcgCaFEAAAAAAAACECjoCIFOQMoIAIgBTkDGCAQKwMwIQUgAiAHOQNIIAIgBTkDQEEEIAMgA0EETRshESABQTBrIRNBBCEBA0AgASARRgRAIAAgAiADIAQQSCACEBgMGAUgAiABQQR0IhJqIhQgEiATaiISKQMANwMAIBQgEikDCDcDCCABQQFqIQEMAQsACwALIAJBBEcNG0EGQRAQGiICIAEp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ASkDADcDACAAIAEpAwg3AwgLCgAgAEEIahDTAwsNACAAKAIAIAFBAnRqCxkAIAAQowEEQCAAIAEQvgEPCyAAIAEQ0wELYQEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBAWsiATYCCCAAIAFPDQEgAigCDCACKAIIEPcKIAIgAigCDEEBaiIANgIMIAIoAgghAQwACwALIAJBEGokAAuxAQEDfyMAQRBrIgckAAJAAkAgAEUNACAEKAIMIQYgAiABa0ECdSIIQQBKBEAgACABIAgQ4QMgCEcNAQsgBiADIAFrQQJ1IgFrQQAgASAGSBsiAUEASgRAIAAgB0EEaiABIAUQgAsiBRBGIAEQ4QMhBiAFEHYaIAEgBkcNAQsgAyACa0ECdSIBQQBKBEAgACACIAEQ4QMgAUcNAQsgBBCDCwwBC0EAIQALIAdBEGokACAAC6gBAQN/IwBBEGsiByQAAkACQCAARQ0AIAQoAgwhBiACIAFrIghBAEoEQCAAIAEgCBDhAyAIRw0BCyAGIAMgAWsiAWtBACABIAZIGyIBQQBKBEAgACAHQQRqIAEgBRCECyIFEEYgARDhAyEGIAUQNBogASAGRw0BCyADIAJrIgFBAEoEQCAAIAIgARDhAyABRw0BCyAEEIMLDAELQQAhAAsgB0EQaiQAIAALDgAgACABKAIANgIAIAALCgAgACABIABragsLACAALQALQf8AcQsIACAAQf8BcQtQAQF+AkAgA0HAAHEEQCACIANBQGqtiCEBQgAhAgwBCyADRQ0AIAJBwAAgA2uthiABIAOtIgSIhCEBIAIgBIghAgsgACABNwMAIAAgAjcDCAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEAgACACVCABIANTIAEgA1EbBEBBfw8LIAAgAoUgASADhYRCAFIPCyAAIAJWIAEgA1UgASADURsEQEF/DwsgACAChSABIAOFhEIAUiEECyAECxYAIABFBEBBAA8LQZCGCyAANgIAQX8LCwAgACABIAIRAAALZAECfyMAQRBrIgMkAAJAIABBABCyAiIARQ0AAkACQAJAAkAgAQ4EAAECAgMLIAAoAhAhAgwDCyAAKAIIIQIMAgsgACgCDCECDAELIAMgATYCAEHSwgQgAxA3CyADQRBqJAAgAgukAQIDfwJ8IwBBEGsiAiQAIAAQwgIgACgCECIBKwMYRAAAAAAAAFJAoyEEIAErAxBEAAAAAAAAUkCjIQUgABAcIQEDQCABBEAgASgCECgClAEiAyADKwMAIAWhOQMAIAMgAysDCCAEoTkDCCAAIAEQHSEBDAELCyACIAAoAhAiASkDGDcDCCACIAEpAxA3AwAgACACEL4MIABBARDKBSACQRBqJAALDwAgAUEBaiAAIAAQrAGfC6gBAgR/AnwgASgCACECIABBBGoiAyEAIAMhAQNAIAAoAgAiAARAIAAoAhAiBCsDCCIGIAIrAwgiB2MEQCAAQQRqIQAMAgUgACABIAAgAiAESyIEGyAGIAdkIgUbIQEgACAAIARBAnRqIAUbIQAMAgsACwsCQAJAIAEgA0YNACACKwMIIgYgASgCECIAKwMIIgdjDQAgACACTSAGIAdkcg0BCyADIQELIAELZAEBfyMAQRBrIgQkACAAQQA7ARwgAEEANgIYIAAgAzkDCCAAIAI2AgQgACABNgIAIAQgADYCDCABQTRqIARBDGoQvwEgACgCBCAEIAA2AghBKGogBEEIahC/ASAEQRBqJAAgAAs8ACAAIAEQ0gIEQCAAEMUEDwsgABD8ByIBRQRAQQAPCyAAIAEQ+wchACABEG0gACAALQAkQQNyOgAkIAALrAEBAX8CQCAAECgEQCAAECVBD0YNAQsgABAlIAAQTk8EQCAAQQEQvQELIAAQJSEBIAAQKARAIAAgAWpBADoAACAAIAAtAA9BAWo6AA8gABAlQRBJDQFBibQDQZ38AEGvAkH3sQEQAAALIAAoAgAgAWpBADoAACAAIAAoAgRBAWo2AgQLAkAgABAoBEAgAEEAOgAPDAELIABBADYCBAsgABAoBH8gAAUgACgCAAsLnAEBA38CQCAABEAgAUUEQCAAEDkhAQsgACABRgRADAILIAAQHCEEA0AgBEUNAiABIAQQLSECA0AgAgRAIAAgAkFQQQAgAigCAEEDcUECRxtqKAIoQQAQgwEEQCAAIAJBARDWAhogA0EBaiEDCyABIAIQMCECDAEFIAAgBBAdIQQMAgsACwALAAtBh9QBQbK9AUELQeqfARAAAAsgAwvzAwIEfAN/IAMoAhAiCisDECIJIAorA1ihRAAAAAAAABDAoCEGIAACfCABIAMgBCAFQX8QhQ4iCwRAAnwgASADIAsQhA4iDARAIAwoAhArAyAgAisDEKAMAQsgCygCECILKwMQIAsrA4ACoCEHIAstAKwBRQRAIAcgASgCECgC+AG3RAAAAAAAAOA/oqAMAQsgByACKwMQoAsiByAGIAYgB2QbEDEMAQsgAisDACEHIAYQMSAHECkLIgc5AwACfAJAIAotAKwBIgtBAUcNACAKKAJ4RQ0AIAlEAAAAAAAAJECgDAELIAkgCisDYKBEAAAAAAAAEECgCyEGIAACfCABIAMgBCAFQQEQhQ4iBARAAnwgASADIAQQhA4iAwRAIAMoAhArAxAgAisDEKEMAQsgBCgCECIDKwMQIAMrA1ihIQggAy0ArAFFBEAgCCABKAIQKAL4AbdEAAAAAAAA4L+ioAwBCyAIIAIrAxChCyIIIAYgBiAIYxsQMQwBCyACKwMIIQggBhAxIAgQIwsiBjkDEAJAIAtBAUcNACAKKAJ4RQ0AIAAgBiAKKwNgoSIGOQMQIAYgB2NFDQAgACAJOQMQCyAAIAorAxgiByABKAIQKALEASAKKAL0AUHIAGxqIgErAxChOQMIIAAgByABKwMYoDkDGAsnACAARQRAQYGCAUGcugFByAVB/IEBEAAACyAAQTRBMCABG2ooAgALXwACQCAAIAFBCGpBgAQgACgCABEDACIABEAgACgCECIAIAFBEGpBgAQgACgCABEDACIARQ0BIAAPC0H09QBBnLoBQYQDQa36ABAAAAtB4dsAQZy6AUGGA0Gt+gAQAAALRwEBfyMAQSBrIgMkACADIAI2AhwgAyAAKAIEIAFBBXRqIgApAhA3AxAgAyAAKQIINwMIIANBCGogA0EcahCGByADQSBqJAALCgAgAEHIABCfCgsJACAAQQEQ8wULQgECfyMAQRBrIgIkACABKAIQIQMgAiAAKAIQKQLIATcDCCACIAMpAsABNwMAIAAgAkEIaiABIAIQ9Q4gAkEQaiQAC7gBAQR/IAAoAhAiAiACKAL0ASABazYC9AEDQCACKAKgAiADQQJ0aigCACIFBEAgAigCqAIgBUcEQCAFQVBBACAFKAIAQQNxQQJHG2ooAiggARC6AyAAKAIQIQILIANBAWohAwwBBQNAAkAgAigCmAIgBEECdGooAgAiA0UNACACKAKoAiADRwRAIANBMEEAIAMoAgBBA3FBA0cbaigCKCABELoDIAAoAhAhAgsgBEEBaiEEDAELCwsLCx8AIABFBEBBkdQBQau9AUGhBEG5hwEQAAALIAAoAgQLngQCA38BfCMAQbABayICJAAgAkIANwOoASACQgA3A6ABAkACQAJAAkACQCAAKAIgIgNBAWsOBAECAgACCyAAKAIAIgBB26sBEExFBEAgAkHerwE2AjAgAiABuzkDOCACQaABakHZhQEgAkEwahBzDAQLIABB/+gAEExFBEAgAkGF6QA2AkAgAiABuzkDSCACQaABakHZhQEgAkFAaxBzDAQLIAG7IQUgAEHtjgEQTA0CIAIgBTkDWCACQZuPATYCUCACQaABakHZhQEgAkHQAGoQcwwDCyAALQAAIQMgAC0AASEEIAAtAAIhACACIAG7OQOIASACIAC4RAAAAAAAAHA/ojkDgAEgAiAEuEQAAAAAAABwP6I5A3ggAiADuEQAAAAAAABwP6I5A3AgAkGgAWpB6oUBIAJB8ABqEHMMAgsgAiAAKAIANgIEIAIgAzYCAEGo8wgoAgBBsfoDIAIQHxpBkp0DQfW2AUHfAkGBNRAAAAsgAiAFOQNoIAIgADYCYCACQaABakHZhQEgAkHgAGoQcwsgAkIANwOYASACQgA3A5ABIAIgAkGgAWoiAxCABjYCICACQZABaiIAQbbMAyACQSBqEHMgAxBcAkAgABAoBEAgACAAECUiAxCtAiIADQEgAiADQQFqNgIQQajzCCgCAEGD5wMgAkEQahAfGhAsAAsgAkGQAWoQjA8gAigCkAEhAAsgAkGwAWokACAAC6QBAQN/IwBBIGsiAiQAAkACQAJAAkAgASgCIEEBaw4EAAEBAgELIAEtAANFBEAgAEGgxAMQGxoMAwsgAS0AACEDIAEtAAEhBCACIAEtAAI2AhggAiAENgIUIAIgAzYCECAAQcsTIAJBEGoQHgwCCyACQSs2AgQgAkGouwE2AgBBqPMIKAIAQea8BCACEB8aEDwACyAAIAEoAgAQGxoLIAJBIGokAAsqACAABH8gACgCTEEMagVB3NoKCyIAKAIARQRAIABBAUEMEBo2AgALIAALGgAgACgCMCABELQIIgBFBEBBAA8LIAAoAhALSwECfyMAQRBrIgMkACAAKAIQKAIMIAIQPyEEIAMgAjYCCCADIAQ2AgQgAyABNgIAQQJ0QZDACGooAgBBx8UDIAMQjgEgA0EQaiQAC9QBAQR/IwBBEGsiAyQAAkAgABB1BEAgAyAANgIAIwBBEGsiBSQAIAUgAzYCDCMAQaABayIAJAAgAEEIaiIEQaCJCUGQARAgGiAAIAE2AjQgACABNgIcIABB/////wdBfiABayICIAJB/////wdLGyICNgI4IAAgASACaiICNgIkIAAgAjYCGCAEQebdASADEMsLGiABQX5HBEAgACgCHCIEIAQgACgCGEZrQQA6AAALIABBoAFqJAAgBUEQaiQADAELIAAgARDTCCEBCyADQRBqJAAgAQvsDAIKfwZ8AkAgASgCECgCCEUNACAAKAIAIAAgARAuIAEQ4AhFDQAgASgCECICKwBAIAArAIACZkUNACAAKwCQAiACKwAwZkUNACACKwBIIAArAIgCZkUNACAAKwCYAiACKwA4ZkUNACgCHCIDIAIsAIQBRg0AIAIgAzoAhAEgACABECEQhgQgAUHQ2QooAgBBlYAFEHoiAi0AAARAIAAgAhCGBAsCQCABQZzZCigCAEGVgAUQeiICLQAARQ0AIAIQwwMaQZDdCiECA0AgAigCACIDRQ0BIAJBBGohAiADQcwtEEVFDQALDAELIAAoApgBIQkgABCOBCIHQQg2AgwgByABNgIIIAdBAjYCBCAJQYCAgAhxBEAgByABEC4oAhAvAbIBQQNPBHwCfyABKAIQKAKUASsDEEQAAAAAAABSQKIiDEQAAAAAAADgP0QAAAAAAADgvyAMRAAAAAAAAAAAZhugIgyZRAAAAAAAAOBBYwRAIAyqDAELQYCAgIB4C7cFRAAAAAAAAAAACzkDsAELIAAgASgCECgCeCABEKMGAkAgCUGAgIQCcUUNACAHKALYAUUEQCAHLQCMAkEBcUUNAQsgARDlAiEFIAEoAhAiAisDGCEOIAIrAxAhDEEAIQMCQCABQZzZCigCAEGVgAUQjQEiAi0AAEUNACACEMMDGkGQ3QohAgNAIAIoAgAiBkUNASACQQRqIQIgBkHhrAEQTEUgA3IhAwwACwALQQAhAgJAIAVBfXFBAUcNACABKAIQKAIMIgIoAghBBEcNACACKwMQEKYHmUQAAAAAAADgP2NFDQAgAikDGEIAUg0AIAIpAyBCAFINACACKAIEQQBHIANyIQQLAkACQAJAIAlBgIAgcUUgAkUgBEEBcXJyRQRAIAIoAgQhBiACKAIIIQggAigCLCEEQQAhBSABQeQmECYiCgRAIAoQkAIhBQsgAigCBEEARyADckEBcUUEQCAHQQA2ApACQQJBEBA+IgMgDCABKAIQIgIrA1giDaE5AwAgAisDUCEPIAMgDCANoDkDECADIA4gD0QAAAAAAADgP6IiDaE5AwgMAgtBASAGIAZBAU0bIQZBFCAFIAVBPWtBR0kbIQUgAigCCCIDQQJLDQIgAikDIEIAUg0CIAIpAxhCAFINAiACKAIABEAgB0EBNgKQAkECQRAQPiIDIA45AwggAyAMOQMAIAMgDCAEIAZBBXRqIgJBEGsrAwCgOQMQIAJBCGsrAwAhDQwCCyAHQQI2ApACRBgtRFT7IRlAIAW4oyEPIAQgBkEFdGoiAkEIaysDACEQIAJBEGsrAwAhEUEAIQIgBUEQED4hA0EAIQQDQCAEIAVGBEADQCACIAVGDQYgAyACQQR0aiIEIAwgBCsDAKA5AwAgBCAOIAQrAwigOQMIIAJBAWohAgwACwAFIAMgBEEEdGoiBiAQIA0QV6I5AwggBiARIA0QS6I5AwAgBEEBaiEEIA8gDaAhDQwBCwALAAsgB0EANgKQAkECQRAQPiIDIAwgASgCECICKwNYoTkDACADIA4gAisDUEQAAAAAAADgP6IiDaE5AwggAyAMIAIrA2CgOQMQCyADIA4gDaA5AxhBAiEFDAELIAdBAjYCkAIgAyAGQQFrbCECIAMgBU8EQCADIAVuIQYgBCACQQR0aiEIQQAhBCAFQRAQPiEDQQAhAgNAIAIgBUYNAiADIAJBBHRqIgogDCAIIARBBHRqIgsrAwCgOQMAIAogDiALKwMIoDkDCCACQQFqIQIgBCAGaiEEDAALAAsgBCACQQR0aiEEQQAhAkEBIAggCEEDSRsiBUEQED4hAwNAIAIgBUYNASADIAJBBHQiBmoiCCAMIAQgBmoiBisDAKA5AwAgCCAOIAYrAwigOQMIIAJBAWohAgwACwALIAlBgMAAcUUEQCAAIAMgAyAFEJgCGgsgByAFNgKUAiAHIAM2ApgCC0Gw3wogAUGDmAEQJhDsAjYCAAJAIAAoAjwiAkUNACACKAI4IgJFDQAgACACEQEACyAAIAEgASgCECgCCCgCBCgCFBEEAAJAIAEoAhAoAnwiAUUNACABLQBRQQFHDQAgAEEKIAEQkQMLAkAgACgCPCIBRQ0AIAEoAjwiAUUNACAAIAERAQALQbDfCigCABDsAhAYQbDfCigCABAYQbDfCkEANgIAIAAQjQQLC40EAQh/IwBBwAJrIgMkACAAIQEDQCABIQICQAJAAkACQAJAIAEtAAAiBA4OAwEBAQEBAQEBBAQEBAQACwJAIARBKGsOBQICAQEEAAsgBEEgRg0DCwNAIAQhB0EBIQQgB0UgB0EoayIIQQRNQQBBASAIdEETcRtyDQIgAi0AASEEIAJBAWohAgwACwALIAFBAWohAgsCQCABIAJNBEACQAJAAkAgBEEoaw4CAAECCyAGIAIhAUEBIQZFDQUgAyAANgIgQab9AyADQSBqEDdBkN0KQQA2AgAMAwsgBkEAIQYgAiEBDQQgAyAANgIwQcj9AyADQTBqEDdBkN0KQQA2AgAMAgsgBARAIAZFBEAgBUE/RgRAIAMgADYCAEGc9AQgAxAqQYzfCkEANgIADAQLQZDfChCmBiADQUBrIAVBAnRqQZDfChAlNgIAIAVBAWohBQtBkN8KIAEgAiABaxDnCEGQ3woQpgYgAiEBDAQLIAYEQCADIAA2AhBB5P0DIANBEGoQN0GQ3QpBADYCAAwCC0EAIQFBkN8KEMQDIQADQCABIAVGBEAgBUECdEGQ3QpqQQA2AgAMAwUgAUECdCICQZDdCmogACADQUBrIAJqKAIAajYCACABQQFqIQEMAQsACwALQZvdAEGjuAFBkB9BveYAEAAACyADQcACaiQAQZDdCg8LIAFBAWohAQwACwALQwACQCAAECgEQCAAECVBD0YNAQsgABCmBgsCQCAAECgEQCAAQQA6AA8MAQsgAEEANgIECyAAECgEfyAABSAAKAIACwsNACAAIAEgARA/EOcICwgAQQEgABA+C6EBAQJ/AkACQCABED8iAkUNACAAEE4gABAlayACSQRAIAAgAhCcBAsgABAlIQMgABAoBEAgACADaiABIAIQIBogAkGAAk8NAiAAIAAtAA8gAmo6AA8gABAlQRBJDQFBibQDQZ38AEGXAkHd6gAQAAALIAAoAgAgA2ogASACECAaIAAgACgCBCACajYCBAsPC0GJzQFBnfwAQZUCQd3qABAAAAs9AQF/IAAgASABKAIAQQNxQQJ0QZiQBWooAgAiAREAACIFRQRAQX8PCyAAIAUgAiADIAEgBEEARxD7CEEACxAAQeCbCkG06wkoAgAQkgELcwEBfyAAECUgABBOTwRAIABBARC9AQsgABAlIQICQCAAECgEQCAAIAJqIAE6AAAgACAALQAPQQFqOgAPIAAQJUEQSQ0BQYm0A0Gd/ABBrwJB97EBEAAACyAAKAIAIAJqIAE6AAAgACAAKAIEQQFqNgIECwsRACAAEL4DKAIAIAFBARDrCAuSAgEIfCABKwMIIgMgAisDACABKwMAIgWhIgRELUMc6+I2Gj9ELUMc6+I2Gr8gBEQAAAAAAAAAAGYboEQAAAAAAAAkQCAEIAIrAwggA6EiBhBKRC1DHOviNho/oKMiCaIiB0QAAAAAAADgP6IiCKAhBCAAIAMgCKEiCCAEIAggBkQtQxzr4jYaP0QtQxzr4jYavyAGRAAAAAAAAAAAZhugIAmiIgOgIgYgAyAEoCIJECMQIxAjOQMYIAUgA0QAAAAAAADgP6IiCqAhAyAAIAUgCqEiBSADIAcgBaAiCiAHIAOgIgcQIxAjECM5AxAgACAIIAQgBiAJECkQKRApOQMIIAAgBSADIAogBxApECkQKTkDAAvEAQIEfwN8IABB2NoKKAIARAAAAAAAAPA/RAAAAAAAAAAAEE8hBwJAIABBmNoKKAIARAAAAAAAAPA/RAAAAAAAAAAAEE8iCEQAAAAAAAAAAGENAANAIAJBBEYNASABIAJBA3R2IgRBD3EhBUEAIQACQANAIABBCEYNASAAQRhsIQMgAEEBaiEAIAUgA0Gg4AdqIgMoAgBHDQALIAYgAysDCCAIIAcgBEH/AXEgAygCFBEXAKAhBgsgAkEBaiECDAALAAsgBgsOACAAQdAAahBNQdAAagsZAQF/IAEQxwohAiAAIAE2AgQgACACNgIACyQAIABBAk8EfyAAQQJqQX5xIgAgAEEBayIAIABBAkYbBUEBCwurAQEEfyMAQRBrIgUkACABELgKIQIjAEEQayIDJAACQCACQff///8DTQRAAkAgAhCNBQRAIAAgAhDTASAAIQQMAQsgA0EIaiACENADQQFqEM8DIAMoAgwaIAAgAygCCCIEEPsBIAAgAygCDBD6ASAAIAIQvgELIAQgASACEPcCIANBADYCBCAEIAJBAnRqIANBBGoQ2wEgA0EQaiQADAELEMoBAAsgBUEQaiQAC9kGAg1/AX4jAEGwAWsiBCQAIARBmAFqIAJBOhDQASAEQgA3A5ABIAFBA2tBAkkhAgJ/QQAgBCgCmAEiDSAEKAKcASIOaiIFLQAAQTpHDQAaIARBgAFqIAVBAWpBOhDQASAEIAQpA4ABIhE3A5ABQQAgEaciByARQiCIpyIKaiIFLQAAQTpHDQAaIARBgAFqIAVBAWpBABDQASAEKAKEASEIIAQoAoABCyELQQAgASACGyEMIARCADcDiAEgBEIANwOAASAAIAFBAnRqQUBrIQICQAJAA0AgAigCACICRQRAQQAhBQwCCyAEQfgAaiACKAIEQToQ0AEgBEIANwNwQQAhCUEAIQUgBCgCeCIGIAQoAnwiD2oiEC0AAEE6RgRAIARBqAFqIBBBAWpBABDQASAEIAQpA6gBIhE3A3AgEUIgiKchCSARpyEFCyAEIAQpAng3A2ggBCAEKQKYATcDYCAEQegAaiAEQeAAahCUBUUEQCAEIA02AlwgBCAONgJYIAQgBjYCVCAEIA82AlAgBEGAAWpBm/YEIARB0ABqEI4BDAELAkAgBUUgB0VyDQAgBCAEKQNwNwNIIAQgBCkDkAE3A0AgBEHIAGogBEFAaxCUBQ0AIAQgBzYCPCAEIAo2AjggBCAFNgI0IAQgCTYCMCAEQYABakHv9QQgBEEwahCOAQwBCyALBEAgAigCDCgCCCEGIAQgCDYCpAEgBCALNgKgASAGRQ0DIARBqAFqIAZBABDQASAEIAQpA6ABNwMoIAQgBCkCqAE3AyAgBEEoaiAEQSBqEJQFRQ0BCwJAIAVFIAEgDEZyDQAgACAMIAUgAxDSAw0AIAQgBTYCFCAEIAk2AhAgBEGAAWpBoLwEIARBEGoQjgEMAQsLAkAgAigCEA0AQQAhBUGlrgRBABA3IAIoAhANACAEQYABakGTvQRBABCOAQwBCyAAKAIIQQBKBEAgAigCBCEFIAQgAigCDCgCCDYCCCAEIAU2AgQgBCABQQJ0QdCWBWooAgA2AgBBqPMIKAIAQZDtAyAEEB8aCyACIQULIAMEQCAEQYABahDTAiADEIkBGgsgBEGAAWoQXCAAIAFBAnRqIAU2AlQgBEGwAWokACAFDwtBgNUBQYb7AEHlAEGPPBAAAAsHACAAQQRqC8YBAQZ/IwBBEGsiBCQAIAAQ0wMoAgAhBQJ/IAIoAgAgACgCAGsiA0H/////B0kEQCADQQF0DAELQX8LIgNBBCADGyEDIAEoAgAhBiAAKAIAIQcgBUGsBEYEf0EABSAAKAIACyADEGYiCARAIAVBrARHBEAgABDpAxoLIARBCjYCBCAAIARBCGogCCAEQQRqEH0iBRDtCiAFEHwgASAAKAIAIAYgB2tqNgIAIAIgACgCACADQXxxajYCACAEQRBqJAAPCxCQAQALEwAgACABQQAgACgCACgCNBEDAAsTACAAIAFBACAAKAIAKAIkEQMAC1UBAX8CQCAABEAgAUUNASAAIAIQjAIgACgCCCIDBEAgACgCACADIAIgARCoAQsPC0G90gFBtLcBQcMCQb/CARAAAAtBztMBQbS3AUHEAkG/wgEQAAAL7QIBAn8jAEEQayIKJAAgCiAANgIMAkACQAJAIAMoAgAiCyACRw0AIAkoAmAgAEYEf0ErBSAAIAkoAmRHDQFBLQshACADIAtBAWo2AgAgCyAAOgAADAELIAYQJEUgACAFR3JFBEBBACEAIAgoAgAiASAHa0GfAUoNAiAEKAIAIQAgCCABQQRqNgIAIAEgADYCAAwBC0F/IQAgCSAJQegAaiAKQQxqEIIHIAlrQQJ1IgVBF0oNAQJAAkACQCABQQhrDgMAAgABCyABIAVKDQEMAwsgAUEQRyAFQRZIcg0AIAMoAgAiASACRiABIAJrQQJKcg0CIAFBAWstAABBMEcNAkEAIQAgBEEANgIAIAMgAUEBajYCACABIAVB4K4Jai0AADoAAAwCCyADIAMoAgAiAEEBajYCACAAIAVB4K4Jai0AADoAACAEIAQoAgBBAWo2AgBBACEADAELQQAhACAEQQA2AgALIApBEGokACAACwsAIABBgKMLEKkCC+8CAQN/IwBBEGsiCiQAIAogADoADwJAAkACQCADKAIAIgsgAkcNACAAQf8BcSIMIAktABhGBH9BKwUgDCAJLQAZRw0BQS0LIQAgAyALQQFqNgIAIAsgADoAAAwBCyAGECRFIAAgBUdyRQRAQQAhACAIKAIAIgEgB2tBnwFKDQIgBCgCACEAIAggAUEEajYCACABIAA2AgAMAQtBfyEAIAkgCUEaaiAKQQ9qEIUHIAlrIgVBF0oNAQJAAkACQCABQQhrDgMAAgABCyABIAVKDQEMAwsgAUEQRyAFQRZIcg0AIAMoAgAiASACRiABIAJrQQJKcg0CIAFBAWstAABBMEcNAkEAIQAgBEEANgIAIAMgAUEBajYCACABIAVB4K4Jai0AADoAAAwCCyADIAMoAgAiAEEBajYCACAAIAVB4K4Jai0AADoAACAEIAQoAgBBAWo2AgBBACEADAELQQAhACAEQQA2AgALIApBEGokACAACwsAIABB+KILEKkCC18BAn8jAEEQayIDJAADQAJAIAAoAgggAk0EQEF/IQIMAQsgAyAAKQIINwMIIAMgACkCADcDACABIAAgAyACEBkQlQtBBBDOAUUNACACQQFqIQIMAQsLIANBEGokACACCxQAIABB3wBxIAAgAEHhAGtBGkkbCxsBAX8gAUEBEKILIQIgACABNgIEIAAgAjYCAAskACAAQQtPBH8gAEEIakF4cSIAIABBAWsiACAAQQtGGwVBCgsLJAECfyMAQRBrIgIkACAAIAEQnwUhAyACQRBqJAAgASAAIAMbCxMAIAAgASACIAAoAgAoAjARAwALZwIBfwF+IwBBEGsiAiQAIAACfiABRQRAQgAMAQsgAiABrUIAQfAAIAFnIgFBH3NrELMBIAIpAwhCgICAgICAwACFQZ6AASABa61CMIZ8IQMgAikDAAs3AwAgACADNwMIIAJBEGokAAtSAQJ/QYzXCigCACIBIABBB2pBeHEiAmohAAJAIAJBACAAIAFNG0UEQCAAPwBBEHRNDQEgABAKDQELQZCGC0EwNgIAQX8PC0GM1wogADYCACABC38CAX4DfwJAIABCgICAgBBUBEAgACECDAELA0AgAUEBayIBIAAgAEIKgCICQgp+fadBMHI6AAAgAEL/////nwFWIAIhAA0ACwsgAlBFBEAgAqchAwNAIAFBAWsiASADIANBCm4iBEEKbGtBMHI6AAAgA0EJSyAEIQMNAAsLIAELHAAgAEGBYE8Ef0GQhgtBACAAazYCAEF/BSAACws2ACAAIAEQqwMiAEUEQEEADwsgACgCACEBIAIEQCAAIAJBCCABEQMADwsgAEEAQYABIAERAwALPAAgACgCTEEATgRAIABCAEEAELoFGiAAIAAoAgBBX3E2AgAPCyAAQgBBABC6BRogACAAKAIAQV9xNgIACw8AIAAgASACIANBARDvCwsQAQF/IAAoAgAgAEEANgIAC+8BAQN/IABFBEBBiNcKKAIABEBBiNcKKAIAEOoDIQELQeDUCigCAARAQeDUCigCABDqAyABciEBC0GAiAsoAgAiAARAA0AgACgCTBogACgCFCAAKAIcRwRAIAAQ6gMgAXIhAQsgACgCOCIADQALCyABDwsgACgCTEEASCECAkACQCAAKAIUIAAoAhxGDQAgAEEAQQAgACgCJBEDABogACgCFA0AQX8hAQwBCyAAKAIEIgEgACgCCCIDRwRAIAAgASADa6xBASAAKAIoER0AGgtBACEBIABBADYCHCAAQgA3AxAgAEIANwIEIAINAAsgAQtxAQJ/IAAoAkwaIAAQ6gMaIAAgACgCDBECABogAC0AAEEBcUUEQCAAEOULIAAoAjghASAAKAI0IgIEQCACIAE2AjgLIAEEQCABIAI2AjQLIABBgIgLKAIARgRAQYCICyABNgIACyAAKAJgEBggABAYCwsCAAtSAQN/AkAgAgRAA0ACfyAAIAEgAkEBdiIGIANsaiIFIAQRAAAiB0EASARAIAYMAQsgB0UNAyADIAVqIQEgAiAGQX9zagsiAg0ACwtBACEFCyAFCzIBAX9B99oKLQAAIgBBAWpB/wFxQRFPBEBBqrkDQZ38AEHcAEHKlwEQAAALIABB/wFHC6oJAg1/BHwCQCAARSABRXINAAJAAkAgACgCAEEATA0AIAEoAgBBAEwNACABKAIoIQggACgCKCELIAAoAiAgASgCICAAKAIQIgoQxgUhFQJAIAArAxgiFiABKwMYIhegIAQgFaJjBEAgByAHKwMARAAAAAAAAPA/oDkDACAAKwMIIQQgACgCICECIAAgChDFBSEDIAErAwghFiABKAIgIQcgASAKEMUFIQEgFUQAAAAAAAAAAGRFDQEgFSAVoiAVRAAAAAAAAPA/IAWhEJ0BIAVEAAAAAAAA8L9hGyEFQQAhCCAKQQAgCkEAShshCSAGIAQgFqKiIQQDQCAIIAlGDQUgAyAIQQN0IgBqIg0gBCAAIAJqKwMAIAAgB2orAwChoiAFoyIGIA0rAwCgOQMAIAAgAWoiACAAKwMAIAahOQMAIAhBAWohCAwACwALIAtFIAhFcg0CIAFBKGohDSAKQQAgCkEAShshEUQAAAAAAADwPyAFoSEVA0AgC0UNBCALKAIMIQ8gCygCECIQRQRAIAsgAyAKIA9sQQN0aiIQNgIQCyALKwMAIRYgCygCCCESIA0hCANAAkAgCCgCACIMBEAgDCgCDCEIIAwoAhAiCUUEQCAMIAMgCCAKbEEDdGoiCTYCEAsgACABRiAIIA9IcSAIIA9Gcg0BIAwrAwAhFyAMKAIIIRMgByAHKwMIRAAAAAAAAPA/oDkDCCACIAogDyAIELMCIgQgBKIgBCAVEJ0BIAVEAAAAAAAA8L9hGyEEIAYgFiAXoqIhF0EAIQgDQCAIIBFGDQIgECAIQQN0Ig5qIhQgFyAOIBJqKwMAIA4gE2orAwChoiAEoyIYIBQrAwCgOQMAIAkgDmoiDiAOKwMAIBihOQMAIAhBAWohCAwACwALIAsoAhQhCwwCCyAMQRRqIQgMAAsACwALQe2TA0GgvQFBmgFB1yQQAAALQeCUA0GgvQFBigFB1yQQAAALIAAgAUYEQEEBIAp0IgFBACABQQBKGyENA0AgCSANRg0CIAAoAiQgCUECdGooAgAhCiAJIQgDQCABIAhGRQRAIAogACgCJCAIQQJ0aigCACACIAMgBCAFIAYgBxDvAyAIQQFqIQgMAQsLIAlBAWohCQwACwALIAsgFiAXZEVyRQRAQQAhCEEBIAp0IglBACAJQQBKGyEJA0AgCCAJRg0CIAAoAiQgCEECdGooAgAgASACIAMgBCAFIAYgBxDvAyAIQQFqIQgMAAsACyAWIBdjRSAIckUEQEEAIQhBASAKdCIJQQAgCUEAShshCQNAIAggCUYNAiABKAIkIAhBAnRqKAIAIAAgAiADIAQgBSAGIAcQ7wMgCEEBaiEIDAALAAsgC0UEQEEAIQhBASAKdCIJQQAgCUEAShshCQNAIAggCUYNAiAAKAIkIAhBAnRqKAIAIAEgAiADIAQgBSAGIAcQ7wMgCEEBaiEIDAALAAsgCEUEQEEAIQhBASAKdCIJQQAgCUEAShshCQNAIAggCUYNAiABKAIkIAhBAnRqKAIAIAAgAiADIAQgBSAGIAcQ7wMgCEEBaiEIDAALAAtBkp0DQaC9AUHsAUHXJBAAAAsLEAAQpwG3RAAAwP///99BowvANAIRfwp8IwBBoARrIgIkAAJAIAAQOkECSA0AIAAQ2AwhCQJAIABBmpwBECYiA0UNACACIAJBuANqNgKkAyACIAJBsANqNgKgAyADQdmDASACQaADahBRIgNFDQAgAisDsAMiE5lEldYm6AsuET5jDQACQCADQQFGBEAgAiATOQO4AyATIRQMAQsgAisDuAMiFJlEldYm6AsuET5jDQELIBREAAAAAAAA8D9hIBNEAAAAAAAA8D9hcQ0AQYzYCi0AAARAIAIgFDkDmAMgAiATOQOQA0Go8wgoAgBB3+4EIAJBkANqEDILIAAQHCEEA38gBAR/IAQoAhAoApQBIgMgAisDsAMgAysDAKI5AwAgAyACKwO4AyADKwMIojkDCCAAIAQQHSEEDAEFQQELCyEECyAEIAlqIRIgASgCACIERQ0AQYzYCi0AAARAIAAQISEEIAIgASgCBDYChAMgAiAENgKAA0Go8wgoAgBB7/UDIAJBgANqEB8aIAEoAgAhBAsgBEEDTwRAAn8CQAJAAkACQAJAAkACQCAEQQNrDg0AAQICAgICAgICAwQJBQsgAEEBEPkHDAYLIABBABD5BwwFCyAEIQkjAEEgayIIJAAgACIKEDoiDEEwEBohACAIQQhqIAoQ/gIgCCsDECIYRAAAAAAAABRAoiEbIAgrAwgiGUQAAAAAAAAUQKIhHCAILQAYIAoQHCELQQFxIQUgACEEA0AgCwRAIAsoAhAiASsDICEUIAErAyghFSABKAKUASIBKwMIIRogASsDACEXAnwgBQRAIBgCfyAVRAAAAAAAAOA/okQAAAAAAABSQKIiE0QAAAAAAADgP0QAAAAAAADgvyATRAAAAAAAAAAAZhugIhOZRAAAAAAAAOBBYwRAIBOqDAELQYCAgIB4C7egIBkCfyAURAAAAAAAAOA/okQAAAAAAABSQKIiE0QAAAAAAADgP0QAAAAAAADgvyATRAAAAAAAAAAAZhugIhOZRAAAAAAAAOBBYwRAIBOqDAELQYCAgIB4C7egRAAAAAAAACRAoiEURAAAAAAAACRAogwBCyAcIBSiRAAAAAAAAFJAoiITRAAAAAAAAOA/RAAAAAAAAOC/IBNEAAAAAAAAAABmG6AhFCAbIBWiRAAAAAAAAFJAoiITRAAAAAAAAOA/RAAAAAAAAOC/IBNEAAAAAAAAAABmG6ALIRUgBCALNgIUIAQCfyAaRAAAAAAAACRAokQAAAAAAABSQKIiE0QAAAAAAADgP0QAAAAAAADgvyATRAAAAAAAAAAAZhugIhOZRAAAAAAAAOBBYwRAIBOqDAELQYCAgIB4CyIONgIQIAQCfyAXRAAAAAAAACRAokQAAAAAAABSQKIiE0QAAAAAAADgP0QAAAAAAADgvyATRAAAAAAAAAAAZhugIhOZRAAAAAAAAOBBYwRAIBOqDAELQYCAgIB4CyIGNgIMIAQCfyAVmUQAAAAAAADgQWMEQCAVqgwBC0GAgICAeAsiAyAOajYCLCAEAn8gFJlEAAAAAAAA4EFjBEAgFKoMAQtBgICAgHgLIgEgBmo2AiggBCAOIANrNgIkIAQgBiABazYCICAEQTBqIQQgCiALEB0hCwwBCwtBASAMIAxBAUwbQQFrIQUgACEBAkADQCAFIBFGDQEgEUEBaiIRIQsgAUEwaiIDIQQDQCALIAxGBEAgAyEBDAILAkACQCABKAIoIAQoAiBIDQAgBCgCKCABKAIgSA0AIAEoAiwgBCgCJEgNACAEKAIsIAEoAiRODQELIAtBAWohCyAEQTBqIQQMAQsLCwJAAkACQAJAAkACQAJAAkACQCAJQQVrDggCAwABBwYEBQcLIAogACAMQb8DQQEQhQMgCiAAIAxBwANBARCEAwwHCyAKIAAgDEHAA0EBEIQDIAogACAMQb8DQQEQhQMMBgsgCiAAIAxBwQNBARCFAyAKIAAgDEHAA0EBEIQDDAULIAogACAMQcIDQQEQhAMgCiAAIAxBvwNBARCFAwwECyAKIAAgDEG/A0EAEIUDIAogACAMQcADQQAQhAMMAwsgCiAAIAxBwANBABCEAyAKIAAgDEG/A0EAEIUDDAILIAogACAMQcIDQQAQhAMgCiAAIAxBvwNBABCFAwwBCyAKIAAgDEHBA0EAEIUDIAogACAMQcADQQAQhAMLQQAhCyAMQQAgDEEAShshCSAAIQQDQCAJIAtGDQEgBCgCDCEDIAQoAhQoAhAoApQBIgEgBCgCELdEAAAAAAAAUkCjRAAAAAAAACRAozkDCCABIAO3RAAAAAAAAFJAo0QAAAAAAAAkQKM5AwAgC0EBaiELIARBMGohBAwACwALIAAQGCAIQSBqJAAMAwsgAEF/EPkHDAMLIAAQOiIGQRAQGiEFIAIgBkEBdEEEEBoiCjYCmAQgAiAKIAZBAnRqNgKcBCAAEBwhAwNAIAMEQCADKAIQIgkoApQBIQFBACEEA0AgBEECRgRAIAUgB0EEdGoiASAJKwMgOQMAIAEgCSsDKDkDCCAHQQFqIQcgACADEB0hAwwDBSACQZgEaiAEQQJ0aigCACAHQQJ0aiABIARBA3RqKwMAtjgCACAEQQFqIQQMAQsACwALCyACQgA3AuQDIAJCADcC7ANBACEHIAJBADYC9AMgAkIANwLcAyACQQI2AsADIAJCADcDuAMgAkEANgKwAyACQYAEaiAAEP4CRBzHcRzHcbw/IRZEHMdxHMdxvD8hFCACLQCQBARAIAIrA4AERAAAAAAAAFJAoyITIBOgIRYgAisDiAREAAAAAAAAUkCjIhMgE6AhFAsgAiAFNgLYAyACIBQ5A9ADIAIgFjkDyAMgBiACQZgEaiACQbADahDqDCAAEBwhAwNAIAMEQCADKAIQKAKUASEBQQAhBANAIARBAkYEQCAHQQFqIQcgACADEB0hAwwDBSABIARBA3RqIAJBmARqIARBAnRqKAIAIAdBAnRqKgIAuzkDACAEQQFqIQQMAQsACwALCyAKEBggBRAYDAELIAIgASgCBDYCAEGF8wMgAhAqC0EACyASaiESDAELIAAQOkEATgRAQfT7CiAAEDo2AgBB+PsKAn9B9PsKKAIAQQRquJ8iE5lEAAAAAAAA4EFjBEAgE6oMAQtBgICAgHgLNgIAQaj8CkH0+wooAgBB4AAQGjYCACAAEBwhAyACQbADaiAAEP4CIAIrA7ADIRYCfyACLQDAA0UEQCACKwO4AyEUQdwDDAELIAIrA7gDRAAAAAAAAFJAoyEUIBZEAAAAAAAAUkCjIRZB3QMLIQkCQANAIAdB9PsKKAIAIgVPDQFBqPwKKAIAIAdB4ABsaiIFIAMoAhAoApQBIgQrAwA5AwggBSAEKwMIOQMQIAVBKGogAyAWIBQgCREeAEUEQCAFQgA3A1ggBSADNgIAIAUgBzYCGCAHQQFqIQcgACADEB0hAwwBCwtBqPwKKAIAEBhBqPwKQQA2AgAQ1QwMAgtBACEHIAJBsANqQQBB0AAQNhogBQRAQaj8CigCACEERP///////+9/IRRE////////7/8hGET////////v/yEbRP///////+9/IRkDQCAFIAdGBEBEmpmZmZmZqT8hFgJAIABB6+QAECYiAEUNACAALQAARQ0AIAAQkQIhFgtBwPwKIBsgGyAZoSAWoiIToCIXOQMAQcj8CiAZIBOhIhU5AwBBuPwKIBQgGCAUoSAWoiIToSIUOQMAQbD8CiAYIBOgIhM5AwAgAiAVOQPYAyACIBc5A+gDIAIgFTkDuAMgAiATOQPQAyACIBc5A8gDIAIgFDkD8AMgAiATOQPAAyACIBQ5A+ADIAEoAgAhAEEAEM8HIQkCQAJAIABBAkYEQCAJRQ0CIAJBsANqENQMQQAhAwNAQaj8CigCACEBQfT7CigCACEAQQAhBANAIAAgBEcEQCABIARB4ABsaiIJIAkrAwhEzczMzMzM8D+iOQMIIAkgCSsDEETNzMzMzMzwP6I5AxAgBEEBaiEEDAELCyADQQFqIgMQzwcNAAtBjNgKLQAARQ0BIAIgAzYCEEGo8wgoAgBB+toDIAJBEGoQHxoMAQsgCUUNASACQbADahDUDEEAIQdBACEEA0AgAkGwA2oiASEAIAcEQCAAENIMC0GI/ApC/////////3c3AwBBgPwKQv/////////3/wA3AwACQEH0+wooAgAiBQRAIAAoAgAhBkT////////vfyEURP///////+//IRZBACEAA0AgACAFRg0CQYD8CiAUIAYgAEECdGooAgAiAysDABApIhQ5AwBBiPwKIBYgAysDABAjIhY5AwAgAEEBaiEADAALAAtBjJQDQae3AUHNAUHJkgEQAAALQZD8CiAGKAIAKwMIOQMAIAYgBUECdGpBBGsoAgArAwghE0Gg/AogFiAUoTkDAEGY/AogEzkDAEQAAAAAAAAAACEVRAAAAAAAAAAAIRQjAEEwayIPJABBAUEQEBoiDUH4+wooAgBBAnQiADYCBCANIABBKBAaNgIAQdD8CiABEM0FNgIAIA9CADcDKCAPQgA3AyAgD0IANwMYIwBBIGsiBSQAAkACQAJAIA9BGGoiBgRAIAZCADcCACAGQgA3AhAgBkIANwIIIAZB+PsKKAIAIgNBAXQiADYCCCAAQYCAgIAETw0BQQAgAyAAQQQQRyIAGw0CIAYgADYCDCAGIAZBAEEAELkENgIQIAYgBkEAQQAQuQQiAzYCFCAGKAIQIgAgAzYCBCAAQQA2AgAgA0EANgIEIAMgADYCACAGKAIMIAA2AgAgBigCDCAGKAIIQQJ0akEEayAGKAIUNgIAIAVBIGokAAwDC0G/0gFBsbkBQRtB84gBEAAACyAFQQQ2AgQgBSAANgIAQajzCCgCAEG05wMgBRAfGhAsAAsgBSADQQN0NgIQQajzCCgCAEGD5wMgBUEQahAfGhAsAAsgARDNBSEQA0AgDRDTB0UEQCANKAIMIQYgDSgCACEAA0AgACAGQShsaigCICIDRQRAIA0gBkEBaiIGNgIMDAELCyAPIAMoAhArAwA5AwggDyADKwMYOQMQIA8rAxAhFSAPKwMIIRQLAkAgEEUNAAJAIA0Q0wcNACAQKwMIIhMgFWMNACATIBViDQEgECsDACAUY0UNAQsCf0EAIQUCQCAPQRhqIggEQCAIKAIIIgBBAEwNAQJAIBArAwBBgPwKKwMAoUGg/AorAwCjIAC3oiITRAAAAAAAAAAAYw0AIBMgAEEBayIFuGQNACATmUQAAAAAAADgQWMEQCATqiEFDAELQYCAgIB4IQULAkAgCCAFENEHIgYNAEEBIQMDQCAIIAUgA2sQ0QciBg0BIAMgBWohACADQQFqIQMgCCAAENEHIgZFDQALCyAIKAIUIQMCQAJAIAgoAhAiACAGRwRAIAMgBkYNASAGIBAQ0AdFDQELA0AgAyAGKAIEIgZHBEAgBiAQENAHDQELCyAGKAIAIQYMAQsDQCAGKAIAIgYgAEYNASAGIBAQ0AdFDQALCwJAIAVBAEwNACAFIAgoAghBAWtODQAgCCgCDCAFQQJ0aiAGNgIACyAGDAILQb/SAUGxuQFBtQFBw6QBEAAAC0HWN0GxuQFBqgFB7dkAEAAACyIOKAIEIQUgDiAIIA4Q3AwgECAIEOEMIgNBABC5BCIGENIHIA4gBiAIEM4FIgAEQCANIA4Q1AcgDSAOIAAgACAQEM8FENAFCyAGIA9BGGoiACADQQEQuQQiAxDSByADIAUgABDOBSIABEAgDSADIAAgACAQEM8FENAFCyABEM0FIRAMAQsgDRDTB0UEQCANKAIAIA0oAgxBKGxqIgAgACgCICIIKAIgNgIgIA0gDSgCCEEBazYCCCAIKAIAIQsgCCgCBCIFKAIEIQMgCCgCCCIABH8gAEEkQSAgCC0ADBtqBUHQ/AoLKAIAIQ4gBRDcDCEAIAgoAgggCCwADCAIKAIQIgYgD0EYaiIHENUHIAUoAgggBSwADCAGIAcQ1QcgCBDdDCANIAUQ1AcgBRDdDCALIAcgACAOIA4rAwggACsDCGQiCBsiBSAOIAAgCBsgBxDhDCIAIAgQuQQiDhDSByAAIAhFIAYgBxDVByALIA4gBxDOBSIABEAgDSALENQHIA0gCyAAIAAgBRDPBRDQBQsgDiADIA9BGGoQzgUiAEUNASANIA4gACAAIAUQzwUQ0AUMAQsLIA8oAigoAgQhAQNAIA8oAiwgAUcEQCABKAIIEOAMIAEoAgQhAQwBCwsCQCAPQRhqBEAgDygCGCEBA0AgAQRAIAEoAgAhACABEBggDyAANgIYIAAhAQwBCwsgD0IANwIYDAELQbzVAUGAvgFBowFB9yEQAAALIA8oAiQQGCANBEAgDSgCABAYCyANEBggD0EwaiQAIAJBqPwKKAIAIgApAxA3A/gCIAIgACkDCDcD8AIgAiACKQPgAzcD6AIgAiACKQPYAzcD4AIgAkHwAmogAkHgAmoQgAMhFiACIAApAxA3A9gCIAIgACkDCDcD0AIgAiACKQPAAzcDyAIgAiACKQO4AzcDwAIgAkHQAmogAkHAAmoQgAMhFCACIAApAxA3A7gCIAIgACkDCDcDsAIgAiACKQPwAzcDqAIgAiACKQPoAzcDoAIgAkGwAmogAkGgAmoQgAMhGSACIAApAxA3A5gCIAIgACkDCDcDkAIgAiACKQPQAzcDiAIgAiACKQPIAzcDgAJBASEHIAJBkAJqIAJBgAJqEIADIRggACIDIgshAQNAQfT7CigCACAHSwRAIAJBqPwKKAIAIAdB4ABsaiIFKQMQNwOYASACIAUpAwg3A5ABIAIgAikD4AM3A4gBIAIgAikD2AM3A4ABIAJBkAFqIAJBgAFqEIADIRogAiAFKQMQNwN4IAIgBSkDCDcDcCACIAIpA/ADNwNoIAIgAikD6AM3A2AgAkHwAGogAkHgAGoQgAMhFyACIAUpAxA3A1ggAiAFKQMINwNQIAIgAikDwAM3A0ggAiACKQO4AzcDQCACQdAAaiACQUBrEIADIRUgAiAFKQMQNwM4IAIgBSkDCDcDMCACIAIpA9ADNwMoIAIgAikDyAM3AyAgBSAAIBYgGmQiCBshACAFIAsgFyAZYyIOGyELIAUgAyAUIBVkIgYbIQMgBSABIAJBMGogAkEgahCAAyITIBhjIgUbIQEgGiAWIAgbIRYgFyAZIA4bIRkgFSAUIAYbIRQgEyAYIAUbIRggB0EBaiEHDAELCyAAQQhqIAIrA9gDIAIrA+ADEP8CIAtBCGogAisD6AMgAisD8AMQ/wIgA0EIaiACKwO4AyACKwPAAxD/AiABQQhqIAIrA8gDIAIrA9ADEP8CQQAhAUGo/AooAgAhCEH0+wooAgAhDiAEIQMDQCABIA5HBEAgCCABQeAAbGohBwJAIANFBEAgBy0AIEEBRw0BC0ECIAcoAlwiACAAQQJNG0EBayEGIAcoAlgiCysDCCEZIAsrAwAhHEEBIQREAAAAAAAAAAAhFkQAAAAAAAAAACEYRAAAAAAAAAAAIRsDQCAEIAZHBEAgGyALIARBAWoiAEEEdGoiBSsDACIUIBkgCyAEQQR0aiIEKwMIIhqhoiAcIBogBSsDCCIXoaIgBCsDACITIBcgGaGioKCZRAAAAAAAAOA/oiIVoCEbIBUgGSAaoCAXoEQAAAAAAAAIQKOiIBigIRggFSAcIBOgIBSgRAAAAAAAAAhAo6IgFqAhFiAAIQQMAQsLIAcgGCAbozkDECAHIBYgG6M5AwgLIAFBAWohAQwBCwsgDEEBaiIMEM8HIgAEQCAAIAlJIQFBASEHQQEhBCAAIQlBACAKQQFqIAEbIgpFDQFByPwKQcj8CisDACITQcD8CisDACIUIBOhRJqZmZmZmak/oiIToSIaOQMAQcD8CiAUIBOgIhc5AwBBuPwKQbj8CisDACITQbD8CisDACIUIBOhRJqZmZmZmak/oiIToSIVOQMAQbD8CiAUIBOgIhM5AwAgAiAaOQPYAyACIBc5A+gDIAIgGjkDuAMgAiATOQPQAyACIBc5A8gDIAIgFTkD8AMgAiATOQPAAyACIBU5A+ADIBFBAWohEQwBCwtBjNgKLQAARQ0AQajzCCgCACIFEOwBIAIQ1AE3A4AEIAJBgARqIgkQ6gEiCigCFCEDIAooAhAhBCAKKAIMIQEgCigCCCEAIAIgCigCADYC+AEgAiAANgL0ASACIAE2AvABIAJBxgM2AuQBIAJBp7cBNgLgASACIARBAWo2AuwBIAIgA0HsDmo2AugBIAVBuMkDIAJB4AFqEB8aIAIgDDYC0AEgBUG9GCACQdABahAfGkEKIAUQqQEaIAUQ6wFBjNgKLQAARQ0AIAUQ7AEgAhDUATcDgAQgCRDqASIJKAIUIQMgCSgCECEEIAkoAgwhASAJKAIIIQAgAiAJKAIANgLIASACIAA2AsQBIAIgATYCwAEgAkHHAzYCtAEgAkGntwE2ArABIAIgBEEBajYCvAEgAiADQewOajYCuAEgBUG4yQMgAkGwAWoQHxogAiARNgKgASAFQdcYIAJBoAFqEB8aQQogBRCpARogBRDrAQtBACEEQaj8CigCACEDQfT7CigCACEBQQEhCwNAIAEgBEYNASADIARB4ABsaiIJKAIAKAIQKAKUASIAIAkrAwg5AwAgACAJKwMQOQMIIARBAWohBAwACwALENUMIAIoArADEBggCyASaiESDAQFIAQgB0HgAGxqIgMrAyghGiADKwMIIRwgAysDMCEXIAMrAzghFSAHQQFqIQcgGCADKwMQIhMgAysDQKAQIyEYIBsgHCAVoBAjIRsgFCATIBegECkhFCAZIBwgGqAQKSEZDAELAAsAC0GMlANBp7cBQdwAQdQSEAAAC0GpmANBp7cBQfsAQajfABAAAAsgAkGgBGokACASC7IDAgd/AX0jAEEgayIEJAAgAkEAIAJBAEobIQcDQCAFIAdGBEAgAyAAQQJ0akEANgIAIARBADYCGCAEQgA3AxAgBEIANwMIIAQgADYCHCAEQQhqQQQQJyEAIAQoAgggAEECdGogBCgCHDYCACAEQRxqIQhB/////wchAANAAkAgBCgCEEUEQCAAQQpqIQBBACEFA0AgBSAHRg0CIAMgBUECdGoiASgCAEEASARAIAEgADYCAAsgBUEBaiEFDAALAAsgBEEIaiAIEKMEIAEgBCgCHCIAQRRsaiECIAMgAEECdGooAgAhAEEBIQUDQCAFIAIoAgBPDQIgAyAFQQJ0IgYgAigCBGooAgAiCUECdGoiCigCAEEASARAIAoCf0EBIAEoAghFDQAaIAIoAgggBmoqAgAiC4tDAAAAT10EQCALqAwBC0GAgICAeAsgAGo2AgAgBCAJNgIcIARBCGpBBBAnIQYgBCgCCCAGQQJ0aiAEKAIcNgIACyAFQQFqIQUMAAsACwsgBEEIaiIAQQQQMyAAEDggBEEgaiQABSADIAVBAnRqQX82AgAgBUEBaiEFDAELCwsyAQF/IABBACAAQQBKGyEAA0AgACADRkUEQCACIANBAnRqIAE4AgAgA0EBaiEDDAELCwtIAQJ/IABBACAAQQBKGyEDA0AgAiADRgRAIAEEQCABEBgLDwsgASACQQJ0aigCACIABEAgABCzDQsgABAYIAJBAWohAgwACwALEABBIBCHASAAIAEgAhCvAwsKACAAKAIEEL8EC4QCAQZ/IwBBEGsiBCQAIwBBEGsiAyQAIAEiB0EEaiEFAkAgASgCBCIGRQRAIAUhAQwBCyACKAIAIQgDQCAGIgEoAhAiBiAISwRAIAEhBSABKAIAIgYNAQwCCyAGIAhPDQEgAUEEaiEFIAEoAgQiBg0ACwsgAyABNgIMIAQgBSgCACIBBH9BAAVBFBCHASEBIAMgB0EEajYCBCABIAIoAgA2AhAgA0EBOgAIIAcgAygCDCAFIAEQ3QUgA0EANgIAIAMoAgAhAiADQQA2AgAgAgRAIAIQGAtBAQs6AAwgBCABNgIIIANBEGokACAAIAQoAgg2AgAgACAELQAMOgAEIARBEGokAAuRFQEIfyMAQdAAayINJAACQAJAAkACQAJAIAFBAEwgAkEATHJFBEAgASACIAAgBiAHQQAQvg0iCSgCGCELIAkoAhQhCCABQQFqIQpBACEHA0AgByAKRgRAAkAgBkEBaw4IAAcEBgQEBAUECwUgCCAHQQJ0akEANgIAIAdBAWohBwwBCwsgCEEEaiEKIAkoAhwhDkEAIQdBACEGA0AgACAGRgRAA0AgASAHRgRAQQAhBwNAIAAgB0YEQANAIAFBAEwNDCAIIAFBAnRqIgIgAkEEaygCADYCACABQQFrIQEMAAsABSAOIAggAyAHQQJ0IgZqKAIAQQJ0aiIKKAIAIgJBA3RqIAUgB0EDdGorAwA5AwAgBCAGaigCACEGIAogAkEBajYCACALIAJBAnRqIAY2AgAgB0EBaiEHDAELAAsABSAHQQJ0IQIgCCAHQQFqIgdBAnRqIgYgBigCACACIAhqKAIAajYCAAwBCwALAAsCQCADIAZBAnQiDGooAgAiDyABTw0AIAQgDGooAgAgAk8NACAKIA9BAnRqIgwgDCgCAEEBajYCACAGQQFqIQYMAQsLIA1BxgQ2AhQgDUHGtgE2AhBBqPMIKAIAQea8BCANQRBqEB8aEDwAC0H5lANBxrYBQbUEQZjxABAAAAsgDUGHBTYCBCANQca2ATYCAEGo8wgoAgBB5rwEIA0QHxoQPAALIAhBBGohBUEAIQdBACEGA0AgACAGRgRAA0AgASAHRgRAQQAhBwNAIAAgB0YEQANAIAFBAEwNCSAIIAFBAnRqIgIgAkEEaygCADYCACABQQFrIQEMAAsABSAEIAdBAnQiAmooAgAhBSAIIAIgA2ooAgBBAnRqIgIgAigCACICQQFqNgIAIAsgAkECdGogBTYCACAHQQFqIQcMAQsACwAFIAdBAnQhAiAIIAdBAWoiB0ECdGoiBSAFKAIAIAIgCGooAgBqNgIADAELAAsACwJAIAMgBkECdCIKaigCACIOIAFPDQAgBCAKaigCACACTw0AIAUgDkECdGoiCiAKKAIAQQFqNgIAIAZBAWohBgwBCwsgDUH7BDYCRCANQca2ATYCQEGo8wgoAgBB5rwEIA1BQGsQHxoQPAALIAhBBGohCiAJKAIcIQ5BACEHQQAhBgNAIAAgBkYEQANAIAEgB0YEQEEAIQcDQCAAIAdGBEADQCABQQBMDQggCCABQQJ0aiICIAJBBGsoAgA2AgAgAUEBayEBDAALAAUgDiAIIAMgB0ECdCICaiIGKAIAQQJ0aigCAEECdGogAiAFaigCADYCACACIARqKAIAIQIgCCAGKAIAQQJ0aiIGIAYoAgAiBkEBajYCACALIAZBAnRqIAI2AgAgB0EBaiEHDAELAAsABSAHQQJ0IQIgCCAHQQFqIgdBAnRqIgYgBigCACACIAhqKAIAajYCAAwBCwALAAsCQCADIAZBAnQiDGooAgAiDyABTw0AIAQgDGooAgAgAk8NACAKIA9BAnRqIgwgDCgCAEEBajYCACAGQQFqIQYMAQsLIA1B6wQ2AjQgDUHGtgE2AjBBqPMIKAIAQea8BCANQTBqEB8aEDwACyAIQQRqIQogCSgCHCEOQQAhB0EAIQYDQCAAIAZGBEADQCABIAdGBEBBACEHA0AgACAHRgRAA0AgAUEATA0HIAggAUECdGoiAiACQQRrKAIANgIAIAFBAWshAQwACwAFIA4gCCADIAdBAnQiBmooAgBBAnRqIgooAgAiAkEEdGoiDCAFIAdBBHRqIg8rAwA5AwAgDCAPKwMIOQMIIAQgBmooAgAhBiAKIAJBAWo2AgAgCyACQQJ0aiAGNgIAIAdBAWohBwwBCwALAAUgB0ECdCECIAggB0EBaiIHQQJ0aiIGIAYoAgAgAiAIaigCAGo2AgAMAQsACwALAkAgAyAGQQJ0IgxqKAIAIg8gAU8NACAEIAxqKAIAIAJPDQAgCiAPQQJ0aiIMIAwoAgBBAWo2AgAgBkEBaiEGDAELCyANQdgENgIkIA1BxrYBNgIgQajzCCgCAEHmvAQgDUEgahAfGhA8AAsgCEEANgIAIAkgADYCCAJ/QQAhA0EAIQQgCSIBKAIEIgBBACAAQQBKGyECIAEoAhAhCSABKAIYIQUgASgCFCEGIABBBBA+IQcDQCACIANHBEAgByADQQJ0akF/NgIAIANBAWohAwwBCwtBACEDAkACQAJAAkACQAJAAkACQAJAAkAgCUEBaw4IAAEFAgUFBQMFCyAGKAIAIQAgASgCHCEJA0AgBCABKAIATg0EIAYgBEECdGohCiAGIARBAWoiBEECdGohCANAIAgoAgAiAiAASgRAAkAgByAFIABBAnRqIg4oAgAiAkECdGooAgAiCyAKKAIASARAIAUgA0ECdGogAjYCACAJIANBA3RqIAkgAEEDdGorAwA5AwAgByAOKAIAQQJ0aiADNgIAIANBAWohAwwBCyAFIAtBAnRqKAIAIAJHDQkgCSALQQN0aiICIAkgAEEDdGorAwAgAisDAKA5AwALIABBAWohAAwBCwsgCCADNgIAIAIhAAwACwALIAYoAgAhACABKAIcIQkDQCAEIAEoAgBODQMgBiAEQQJ0aiEKIAYgBEEBaiIEQQJ0aiEIA0AgCCgCACICIABKBEACQCAHIAUgAEECdGoiDigCACICQQJ0aigCACILIAooAgBIBEAgBSADQQJ0aiACNgIAIAkgA0EEdGoiAiAJIABBBHRqIgsrAwA5AwAgAiALKwMIOQMIIAcgDigCAEECdGogAzYCACADQQFqIQMMAQsgBSALQQJ0aigCACACRw0JIAkgC0EEdGoiAiAJIABBBHRqIgsrAwAgAisDAKA5AwAgAiALKwMIIAIrAwigOQMICyAAQQFqIQAMAQsLIAggAzYCACACIQAMAAsACyAGKAIAIQAgASgCHCEJA0AgBCABKAIATg0CIAYgBEECdGohCiAGIARBAWoiBEECdGohCANAIAgoAgAiAiAASgRAAkAgByAFIABBAnQiAmoiDigCACILQQJ0aigCACIMIAooAgBIBEAgBSADQQJ0IgxqIAs2AgAgCSAMaiACIAlqKAIANgIAIAcgDigCAEECdGogAzYCACADQQFqIQMMAQsgCyAFIAxBAnQiDmooAgBHDQkgCSAOaiILIAsoAgAgAiAJaigCAGo2AgALIABBAWohAAwBCwsgCCADNgIAIAIhAAwACwALIAYoAgAhAANAIAQgASgCAE4NASAGIARBAnRqIQggBiAEQQFqIgRBAnRqIQkDQCAJKAIAIgIgAEoEQAJAIAcgBSAAQQJ0aiILKAIAIgJBAnRqKAIAIgogCCgCAEgEQCAFIANBAnRqIAI2AgAgByALKAIAQQJ0aiADNgIAIANBAWohAwwBCyAFIApBAnRqKAIAIAJHDQkLIABBAWohAAwBCwsgCSADNgIAIAIhAAwACwALIAEgAzYCCCABIQMLIAcQGCADDAQLQa3GAUHGtgFBgglB1S8QAAALQa3GAUHGtgFBlwlB1S8QAAALQa3GAUHGtgFBrAlB1S8QAAALQa3GAUHGtgFBvglB1S8QAAALIA1B0ABqJAALPAECfyMAQRBrIgEkAEEBIAAQRyICRQRAIAEgADYCAEGo8wgoAgBBg+cDIAEQHxoQLAALIAFBEGokACACC3oBAX8jAEEQayIEJAAgAwRAIAMgACACIAIQ6gUiAjYCCEGM2AotAAAEQCAEIAI2AgBBqPMIKAIAQe3aAyAEEB8aCyADQQA2AhQgA0EAOgAMIAAgASADEIQIGiADKAIQIARBEGokAA8LQfHeAEHCuwFBhApBnN8AEAAACykBAX8DQCAAIgEoAhAoArABIgANAAsDQCABIgAoAhAoAngiAQ0ACyAAC0kBAXwgASgCFCAAELUDIQFEAAAAAAAA8D8gACgCLLcgASgAILhEAAAAAAAA8D+go6EgASgCNCIAKwNAIAArAzAiAqGiIAKgEDELPQEBfCABKAIYIAAQtQMhASAAKAIstyABKAAguEQAAAAAAADwP6CjIAEoAjQiACsAOCAAKwAoIgKhoiACoAt3AQJ/IwBBEGsiAyQAAkACQCACQQBOBEAgAiABKAAISQ0BCyAAQgA3AgAgAEIANwIIDAELIAEoAgAhBCADIAEpAgg3AwggAyABKQIANwMAIAAgBCADIAIQGUEEdGoiASkCADcCACAAIAEpAgg3AggLIANBEGokAAvgAQIIfAF/IAFBIEEYQeT6Ci0AACIMG2orAwAhBCACIAFBGEEgIAwbaisDACIFOQMYIAIgBDkDECACIAEpAzg3AwAgAiABQUBrKQMANwMIIAIgAisDACAERAAAAAAAAOA/oqEiBjkDACACIAIrAwggBUQAAAAAAADgP6KhIgc5AwggAysDACEIIAMrAwghCSADKwMQIQogACADKwMYIgsgBSAHoCIFIAUgC2MbOQMYIAAgCiAEIAagIgQgBCAKYxs5AxAgACAJIAcgByAJZBs5AwggACAIIAYgBiAIZBs5AwALfAEBfCAAQQBOBEAgAUQAAAAAAAAAAGMEQEEADwsgAUQAAAAAAADwP2RFIAC4IgJEAADA////30EgAaNkRXJFBEBB/////wcPCyABIAKiIgGZRAAAAAAAAOBBYwRAIAGqDwtBgICAgHgPC0HtlgNBhPwAQc0AQefZABAAAAtRAQJ8QQJBAUEDIAArAwggASsDCCIDoSACKwMAIAErAwAiBKGiIAIrAwggA6EgACsDACAEoaKhIgNEAAAAAAAAAABjGyADRAAAAAAAAAAAZBsLCwAgAEGP0AQQGxoLcQEBfyMAQRBrIgUkACAAQcfCAxAbGiAAIAEQiAEgAgRAIABB3wAQZSAAIAIQiAELIAUgAzYCACAAQfQzIAUQHgJAIARBqykQJiIBRQ0AIAEtAABFDQAgAEEgEGUgACABEIgBCyAAQSIQZSAFQRBqJAAL0gEBBn8jAEEgayICJAAgACgCECIBKAKoASEDIAAgASsDoAEQeyAAQYKRBBAbGgNAAkAgA0UNACADKAIAIgVFDQAgA0EEaiEDIAUiAUHu9wAQTEUNAQNAIAEiBEEBaiEBIAQtAAANAAsDQCAELQABBEAgAiAEQQFqIgE2AhAgAEHOxQMgAkEQahAeA0AgAS0AACABIgRBAWohAQ0ACwwBCwsgBUHMLRBMRQRAIAAoAhBCADcDoAELIAIgBTYCACAAQbqABCACEB4MAQsLIAJBIGokAAsQAEEBIAAQP0EBdEECahA+CzEBAX8CQCABRQ0AIAEtAABFDQAgACgCPCICRQ0AIAIoAnAiAkUNACAAIAEgAhEEAAsLrQECAn8CfCMAQSBrIgMkAAJAIAAoAjwiBEUNACAEKAJgIgRFDQAgACgCECgCmAFFDQAgASsAGCEFIAErAAghBiADIAErABAgASsAAKBEAAAAAAAA4D+iOQMAIAMgBSAGoEQAAAAAAADgP6I5AwggAyABKQMYNwMYIAMgASkDEDcDECAALQCZAUEgcUUEQCAAIAMgA0ECEJgCGgsgACADIAIgBBEFAAsgA0EgaiQACzEBAX8CQCAAKAI8IgFFDQAgASgCBCIBRQ0AIAAgAREBAAsgACgCAEEANgIYIAAQrwoLrwEBA38CfyABEDkiASgCEC0Ac0EBRgRAIAAQmwQMAQsgACABENEGCyIAIgMhAQNAQQAhAgJAAkADQCABLQAAIgRFDQEgAUEBaiEBIAJBAXEEQEEKIQICQAJAAkAgBEHsAGsOBwIBAgEBAQABC0ENIQIMAQsgBCECCyADIAI6AAAMAwtBASECIARB3ABGDQALIAMgBDoAAAwBCyADQQA6AAAgAA8LIANBAWohAwwACwALGAAgACgCACAAKAKgASAAKAKcASABENwIC+FrAhl/D3wjAEHgFWsiAiQAIAJBuA5qIAApAJgCNwMAIAJBsA5qIAApAJACNwMAIAJBqA5qIAApAIgCNwMAIAIgACkAgAI3A6AOAkACQAJAAkAgASgCECIEKAIIIgNFDQAgAysAGCACKwOgDmZFDQAgAisDsA4gAysACGZFDQAgAysAICACKwOoDmZFDQAgAisDuA4gAysAEGYNAQsgBCgCYCIDBH8gAiACQbgOaikDADcD0AcgAiACQbAOaikDADcDyAcgAiACQagOaikDADcDwAcgAiACKQOgDjcDuAcgAyACQbgHahDsCQ0BIAEoAhAFIAQLKAJsIgNFDQEgAy0AUUEBRw0BIAIgAkG4DmopAwA3A7AHIAIgAkGwDmopAwA3A6gHIAIgAkGoDmopAwA3A6AHIAIgAikDoA43A5gHIAMgAkGYB2oQ7AlFDQELAkAgACgCnAFBAkgNACAAIAFBoNoKKAIAQZWABRB6IgMQigQNACADQZWABRBFRQ0BIAFBKGohCUEAIQMDQEEwIQVBAyEIAkACQCADDgMBAAQAC0FQIQVBAiEICyAJIAVBACABKAIAQQNxIAhHG2ooAgBByNkKKAIAQZWABRB6IgRBlYAFEEUNASADQQFqIQMgACAEEIoERQ0ACwsgAkIANwPgByACQgA3A9gHIAJB2AdqIgQgAUEwQQAgASgCAEEDcUEDRxtqKAIoECEQxQMgBEG23wFB1J4DIAEgAUEwayIDIAEoAgBBA3FBAkYbKAIoEC4QgQIbEMUDIAQgASADIAEoAgBBA3FBAkYbKAIoECEQxQMgACAEEMQDEIYEIAQQXCABQaTaCigCAEGVgAUQeiIDLQAABEAgACADEIYECwJAIAFBjNoKKAIAQZWABRB6IgMtAAAiF0UNACADEMMDGkGQ3QohDUGQ3QohAwNAIAMoAgAiBEUNASADQQRqIQMgBEHMLRBFRQ0ACwwBCyAAKAKYASEPIAAQjgQiBkEJNgIMIAYgATYCCCAGQQM2AgQCQCABKAIQKAJgIgNFDQAgAy0AUg0AIAFBkawBECYQaUUNACAGIAYvAYwCQYAEcjsBjAILAkAgF0UNACABKAIQKAIIRQ0AIAAgDRDkAQsCQEHY2gooAgAiA0UNACABIAMQRCIDRQ0AIAMtAABFDQAgACABQdjaCigCAEQAAAAAAADwP0QAAAAAAAAAABBPEIcCCwJAIA9BgICACHFFDQAgASABQTBqIgMgASgCAEEDcUEDRhsoAigQLigCEC8BsgFBA08EQCAGAn8gASADIAEoAgBBA3FBA0YbKAIoKAIQKAKUASsDEEQAAAAAAABSQKIiG0QAAAAAAADgP0QAAAAAAADgvyAbRAAAAAAAAAAAZhugIhuZRAAAAAAAAOBBYwRAIBuqDAELQYCAgIB4C7c5A7gBIAYCfyABQVBBACABKAIAQQNxQQJHG2ooAigoAhAoApQBKwMQRAAAAAAAAFJAoiIbRAAAAAAAAOA/RAAAAAAAAOC/IBtEAAAAAAAAAABmG6AiG5lEAAAAAAAA4EFjBEAgG6oMAQtBgICAgHgLtzkDwAEMAQsgBkIANwO4ASAGQgA3A8ABCwJAIA9BgIACcUUNAAJAIAEoAhAiBCgCYCIDRQRAIAYoAsgBIQUMAQsgBiADKAIAIgU2AsgBCyAGIAU2AtQBIAYgBTYCzAEgBiAFNgLQASAEKAJsIgMEQCAGIAMoAgA2AswBCyAEKAJoIgMEQCAGIAMoAgA2AtABCyAEKAJkIgNFDQAgBiADKAIANgLUAQtBACEDQQAhBQJAIA9BgIAEcUUNACACQagOakIANwMAIAJCADcDoA4gBiAAIAEgAkGgDmoiBBCnBiABEIABNgLcASAEEFwCQAJAIAFBq4UBECYiCARAIAgtAAANAQsgAUGW0QEQJiIIRQ0BIAgtAABFDQELIAggARCAASEFCwJAIAYCfwJAAkAgAUGehQEQJiIIBEAgCC0AAA0BCyABQYrRARAmIghFDQEgCC0AAEUNAQsgCCABEIABDAELIAVFDQEgBRBkCzYC2AELAkAgBgJ/AkACQCABQZSFARAmIggEQCAILQAADQELIAFBgdEBECYiCEUNASAILQAARQ0BCyAIIAEQgAEMAQsgBUUNASAFEGQLNgLgAQsCQAJAAkAgAUGLhQEQJiIIBEAgCC0AAA0BCyABQfnQARAmIghFDQEgCC0AAEUNAQsgBiAIIAEQgAE2AuQBIAYgBi8BjAJBgAFyOwGMAgwBCyAFRQ0AIAYgBRBkNgLkAQsCQAJAIAFBp4UBECYiCARAIAgtAAANAQsgAUGS0QEQJiIIRQ0BIAgtAABFDQELIAYgCCABEIABNgLoASAGIAYvAYwCQYACcjsBjAIMAQsgBUUNACAGIAUQZDYC6AELAkAgD0GAgIAEcUUNAAJAIAFBkCMQJiIERQ0AIAQtAABFDQAgBCABEIABIQMLAkAgBgJ/AkAgAUGBIxAmIgRFDQAgBC0AAEUNACAGIAYvAYwCQcAAcjsBjAIgBCABEIABDAELIANFDQEgAxBkCzYC/AELAkAgBgJ/AkAgAUH1IhAmIgRFDQAgBC0AAEUNACAEIAEQgAEMAQsgA0UNASADEGQLNgKAAgsCQAJAIAFB6iIQJiIERQ0AIAQtAABFDQAgBiAEIAEQgAE2AoQCIAYgBi8BjAJBEHI7AYwCDAELIANFDQAgBiADEGQ2AoQCCyAGAn8CQCABQYwjECYiBEUNACAELQAARQ0AIAYgBi8BjAJBIHI7AYwCIAQgARCAAQwBCyADRQRAQQAhAwwCCyADEGQLNgKIAgsCQCAPQYCAgAJxRQ0AAkACQAJAIAFButoAECYiCARAIAgtAAANAQsgAUGq2gAQJiIIRQ0BIAgtAABFDQELIAYgCCABEIkEIgQgARCAATYC7AEgBBAYIAYgBi8BjAJBAXI7AYwCDAELIAYoAsgBIgRFDQAgBiAEEGQ2AuwBCwJAAkAgAUGd2gAQJiIERQ0AIAQtAABFDQAgBiAEIAEQiQQiBCABEIABNgLwASAEEBggBiAGLwGMAkEIcjsBjAIMAQsgBigCyAEiBEUNACAGIAQQZDYC8AELAkACQCABQZHaABAmIgRFDQAgBC0AAEUNACAGIAQgARCJBCIEIAEQgAE2AvQBIAQQGCAGIAYvAYwCQQJyOwGMAgwBCyAGKALQASIERQ0AIAYgBBBkNgL0AQsCQCABQbbaABAmIgRFDQAgBC0AAEUNACAGIAQgARCJBCIEIAEQgAE2AvgBIAQQGCAGIAYvAYwCQQRyOwGMAgwBCyAGKALUASIERQ0AIAYgBBBkNgL4AQsgBRAYIAMQGAJAIA9BgICEAnFFDQAgASgCECgCCCIRRQ0AAkAgBigC2AFFBEAgBigC7AFFDQIgD0GAgCBxDQEMAgsgD0GAgCBxRQ0BCyARKAIEIRIgACgCECsDoAEgAkGAFWpBAEEoEDYaIAJCADcD+AcgAkIANwPwByACQgA3A+gHIAJBmBVqIQpEAAAAAAAA4D+iRAAAAAAAAABAECMhJQJAA0ACQCAQIBJGBEAgD0GAwABxDQNBACEFQQAhAwwBCyARKAIAQQAhBCACQbAVakEAQSgQNhogEEEwbGoiDigCBEEBa0EDbiEIQQAhDANAIAggDEYEQEEAIQMDQCACKAK4FSIIIANNBEBBACEDA0AgAyAISQRAIAIgAkG4FWopAwA3A5AHIAIgAikDsBU3A4gHIAJBiAdqIAMQGSEEAkACQCACKALAFSIFDgIBDQALIAIgAigCsBUgBEEEdGoiBCkDCDcDgAcgAiAEKQMANwP4BiACQfgGaiAFEQEACyADQQFqIQMgAigCuBUhCAwBCwsgAkGwFWoiA0EQEDMgEEEBaiEQIAMQOAwFC0EAIQcgAigCsBUhCwJAIANFBEBBACEFDAELIAIgAkG4FWoiCSkDADcD8AYgAiACKQOwFTcD6AYgCyACQegGaiADQQFrEBlBBHRqIQUgCSgCACEIIAIoArAVIQsLIAggA0EBaiIJSwRAIAIgAkG4FWopAwA3A+AGIAIgAikDsBU3A9gGIAsgAkHYBmogCRAZQQR0aiEHIAIoArAVIQsLIAIgAkG4FWopAwA3A9AGIAIgAikDsBU3A8gGIARBBHQiCCACQYAIamohDiACQaAOaiAIaiEIIAsgAkHIBmogAxAZQQR0aiIDKwAIISQgAysAACEiAkAgBQRAIAUrAwghHSAFKwMAISEgBwRAIAcrAwghHiAHKwMAISAMAgsgJCAdoSIbIBugIR4gIiAhoSIbIBugISAMAQsgJCAHKwMIIh6hIhsgG6AhHSAiIAcrAwAiIKEiGyAboCEhCyAeICShICAgIqEQqgEhHCAIICQgJSAdICShICEgIqEQqgEiGyAcIBuhIhtEGC1EVPshGcCgIBsgG0QAAAAAAAAAAGQbRAAAAAAAAOA/oqAiGxBXoiIcoDkDCCAIICIgJSAbEEuiIhugOQMAIA4gJCAcoTkDCCAOICIgG6E5AwAgBEEBaiEEIAIoArgVIAlHBEAgCSEDIARBMkcNAQsgAiAEQQF0NgL8ByACQegHakEEECchAyACKALoByADQQJ0aiACKAL8BzYCAEEAIQMDQCADIARGBEAgAkGACGogBEEEdGohB0EAIQMDQCADIARHBEAgCiAHIANBf3NBBHRqIgUpAwA3AwAgCiAFKQMINwMIIAJBgBVqQRAQJyEFIAIoAoAVIAVBBHRqIgUgCikDADcDACAFIAopAwg3AwggA0EBaiEDDAELCyACIAgpAwA3A6AOIAIgCCkDCDcDqA4gAiAOKQMANwOACCACIA4pAwg3A4gIQQEhBCAJIQMMAgUgCiACQaAOaiADQQR0aiIFKQMINwMIIAogBSkDADcDACACQYAVakEQECchBSACKAKAFSAFQQR0aiIFIAopAwA3AwAgBSAKKQMINwMIIANBAWohAwwBCwALAAsACyAOKAIAIAxBMGxqIQdBACEDA0AgA0EERgRAIAxBAWohDCACQcAUaiACQbAVahCgBgwCBSADQQR0IgUgAkHAFGpqIgkgBSAHaiIFKQMANwMAIAkgBSkDCDcDCCADQQFqIQMMAQsACwALAAsLA0AgAigC8AcgA0sEQCACIAIpA/AHNwOABiACIAIpA+gHNwP4BSACKALoByACQfgFaiADEBlBAnRqKAIAIAVqIQUgA0EBaiEDDAELCyACIAJBiBVqIgkpAwA3A8AGIAIgAikDgBU3A7gGIAIoAoAVIQQgAkG4BmpBABAZIQMgAiAJKQMANwOwBiACIAIpA4AVNwOoBiAAIAQgA0EEdGogAigCgBUgAkGoBmpBABAZQQR0aiAFEJgCGgsgAiACQYgVaikDADcDoAYgAiACKQOAFTcDmAYgAigCgBUhBCACQZgGakEAEBkhAyAGQQI2ApACIAYgBCADQQR0ajYCpAIgAkGAFWogBkGYAmpBAEEQEMYBIAIgAikD8Ac3A5AGIAIgAikD6Ac3A4gGIAYgAigC6AcgAkGIBmpBABAZQQJ0aigCADYClAIgAkHoB2ogBkGgAmogBkGcAmpBBBDGAQsCQCAAKAI8IgNFDQAgAygCQCIDRQ0AIAAgAxEBAAsCQCAGKALYASIDRQRAIAYtAIwCQQFxRQ0BCyAAIAMgBigC7AEgBigC/AEgBigC3AEQwwELIAAoAhArA6ABISUgAkIANwPwByACQgA3A+gHIAFBg5gBECYQ7AIhGgJAIAEoAhAoAghFDQBBACEIIAFBmNoKKAIARAAAAAAAAPA/RAAAAAAAAAAAEE8hKCABQezZCigCAEGVgAUQeiEHQQAhBAJAIBdFDQAgDSEDA0AgAygCACIFQQBHIQQgBUUNASADQQRqIQMgBUGEqwEQRUUNAAsLIAchA0EAIQsCQAJAAkADQAJAAkACQAJAAkAgAy0AACIFQTprDgIBAgALIAUNAiALRSAIRXINByAHIAJBgBVqEOIEIglBAkkNAyABIAFBMGoiBSABKAIAQQNxQQNGGygCKBAuIAEgBSABKAIAQQNxQQNGGygCKBAhIQUQgQIhAyACIAFBUEEAIAEoAgBBA3FBAkcbaigCKBAhNgLoBSACQaLIA0GtygMgAxs2AuQFIAIgBTYC4AVBgO0DIAJB4AVqEH8gCUECRw0FDAYLIAhBAWohCAwBCyALQQFqIQsLIANBAWohAwwBCwsgCUEBRg0BCyACQcAOaiEOIAJBsA5qIQhBACEHQQAhBQNAIAEoAhAoAggiAygCBCAHTQRAQQAhAwNAIAIoAogVIANLBEAgAiACQYgVaikDADcD2AUgAiACKQOAFTcD0AUgAkHQBWogAxAZIQQCQAJAIAIoApAVIgEOAgEKAAsgAiACKAKAFSAEQRhsaiIEKQMINwPABSACIAQpAxA3A8gFIAIgBCkDADcDuAUgAkG4BWogAREBAAsgA0EBaiEDDAELCyACQYAVaiIBQRgQMyABEDgMBAsgAkGgDmogAygCACAHQTBsakEwECAaRAAAAAAAAPA/IRxBASELQQAhAyAFIQQCQAJAA0AgAyACKAKIFU8NASACIAJBiBVqKQMANwOwBSACIAIpA4AVNwOoBSACKAKAFSACQagFaiADEBlBGGxqIgkoAgAiBUUNAQJAIAkrAwgiG5lE8WjjiLX45D5jRQRAIAAgBRBJIBwgG6EhHAJ/IAsEQCACQaAOaiAbIAJBwBRqIAJBsBVqEN8IIAAgAigCwBQiBCACKALEFEEAEPEBIAQQGEEAIByZRPFo44i1+OQ+Y0UNARogAigCsBUhAwwDCyAcmUTxaOOItfjkPmMEQCAAIAIoArAVIgMgAigCtBVBABDxAQwDCyACQYAIaiIJIAJBsBVqIgRBMBAgGiAJIBsgGyAcoKMgAkHAFGogBBDfCCACKAKACBAYIAAgAigCwBQiBCACKALEFEEAEPEBIAQQGEEACyELIAUhBAsgA0EBaiEDDAELCyADEBgMAQsgBCEFCyACKAKoDgRAIAIgAkGIFWoiAykDADcDoAUgAiACKQOAFTcDmAUgACACKAKAFSACQZgFakEAEBlBGGxqKAIAEEkgAiADKQMANwOQBSACIAIpA4AVNwOIBSAAIAIoAoAVIAJBiAVqQQAQGUEYbGooAgAQXSACIAgpAwg3A4AFIAIgCCkDADcD+AQgAiACKAKgDiIDKQMINwPwBCACIAMpAwA3A+gEIABBAiACQfgEaiACQegEaiAoICUgAigCqA4Q6gILIAIoAqwOIgQEQCAAIAUQSSAAIAUQXSACIA4pAwg3A+AEIAIgDikDADcD2AQgAiACKAKgDiACKAKkDkEEdGpBEGsiAykDCDcD0AQgAiADKQMANwPIBCAAQQMgAkHYBGogAkHIBGogKCAlIAQQ6gILAkAgF0UgASgCECgCCCgCBEECSXINACACKAKoDiACKAKsDnJFDQAgACANEOQBCyAHQQFqIQcMAAsAC0GY9QAhBwsCQAJAAn8gASgCEC0AdCIDQQFxBEBB+o4DIQtBsbUBDAELIANBAnEEQEHPkAMhC0GE6AEMAQsgA0EIcQRAQYWOAyELQf2NAwwBCyADQQRxRQ0BQfiQAyELQfznAQshDCACQegHaiALEMUDIAchAwNAAkAgAy0AACIFQTpHBEAgBQ0BIAJB6AdqEMQDIgkgB0YNBCAAIAkQSQwECyACIAs2AsAEIAJB6AdqQbczIAJBwARqEH4LIANBAWohAwwACwALIAFB8NkKKAIAIAcQjQEhDCAHIQkLIAcgDEcEQCAAIAwQXQsCQAJAIAQEQCAMLQAAIRIgCS0AACEDIABB6R8QSSAAIAlBmPUAIAMbIhEQXSACQcAUaiIEIAEoAhAoAggoAgBBMBAgGiACQaAOaiEPAn8CQEGI2gooAgAiA0UNACABIAMQRCIDLQAARQ0AQZgCIANB/qEBEEUNARpBmQIgA0Gk9QAQRQ0BGkGaAiADQZb3ABBFDQEaIANBoZYBEEVFDQBBmwIMAQtBmAJBmwIgAUFQQQAgASgCAEEDcUECRxtqKAIoEC4QgQIbCyEORAAAAAAAAAAAIR0jAEGwAWsiBiQAIAZCADcDGCAGQgA3AxAgBkIANwMIIAQoAgQhCCAEKAIAIgorAAAhGyAGIAorAAg5AyggBiAbOQMgIAZBMGpBAEEwEDYaIAZBCGpBwAAQJyEBIAYoAgggAUEGdGogBkEgaiINQcAAECAaIAYgCikDCDcDqAEgBiAKKQMANwOgASAGQThqIQdBACEDA0AgCCADQQNqIgFLBEAgBiAGKQOgATcDcCAGIAYpA6gBNwN4IAogA0EEdGohCUEBIQMDQCADQQRGBEBBASEDIAYrA3ghGyAGKwNwIR4DQCADQRVGBEAgASEDDAUFIAZB4ABqIAZB8ABqIAO4RAAAAAAAADRAo0EAQQAQoQEgBisDYCEgIAYgBisDaCIcOQMoIAYgIDkDICAGIB0gHiAgoSAbIByhEEqgIh05AzAgB0EAQSgQNhogBkEIakHAABAnIQQgBigCCCAEQQZ0aiANQcAAECAaIANBAWohAyAgIR4gHCEbDAELAAsABSADQQR0IgQgBkHwAGpqIgUgBCAJaiIEKQMANwMAIAUgBCkDCDcDCCADQQFqIQMMAQsACwALCyAGQQhqIAZB4ABqIAZB8ABqQcAAEMYBIAYoAmAiByAGKAJwIg1BBnRqQTBrKwMAISREAAAAAAAAAAAhHkQAAAAAAAAAACEcQQAhAUQAAAAAAAAAACEbA0AgDSABIgNNBEAgD0IANwIAQQAhBwNAAkAgByANTwRAIBtEGC1EVPshCUCgIiAQVyEbIA8gIBBLIByiIB6gIBsgHKIgJqAQ5QQgBigCcCIBDQFB9pMDQd25AUGnAkGTORAAAAsgBigCYCAHQQZ0aiIDKwMoIRwgAysDICIbEFchHSADKwMIISYgGxBLIR4gAysDOCEgIAMtADAgDyAeIByiIAMrAwAiHqAgJiAdIByioBDlBEEBcQRAIB4gHEEBIBsgICAPEO4ICyAHQQFqIQcgBigCcCENDAELCyABQQJrIQ0DQAJAIAYoAmAhASANQX9GDQAgASANQQZ0aiIDKwMoISIgAysDOEQYLURU+yEJQKAiHRBXIR4gAysDCCEgIB0QSyEbIAMrAyAhHCADLQAwIA8gGyAioiADKwMAIhugICAgHiAioqAQ5QRBAXEEQCAbICJBACAcRBgtRFT7IQlAoCAdIA8Q7ggLIA1BAWshDQwBCwsgARAYIAZBsAFqJAAFIAcgA0EBaiIBQQAgASANRxtBBnRqIgQrAwggByADQQZ0IgVqIgkrAwgiJqEgBCsDACAJKwMAIh6hEO0IIRsgByADIA0gAxtBBnRqIgRBOGsrAwAgJqEgBEFAaisDACAeoRDtCCEnIAkrAxAiIiAkICUgDhEfACEcAkACfwJAAnwgAwRAIAMgBigCcEEBa0cNAiAnRBgtRFT7Ifm/oAwBCyAbRBgtRFT7Ifk/oAshHUEADAELIBtEGC1EVPsh+T+gIR1EAAAAAAAAAAAgHCAbICehIhtEGC1EVPshGUCgIBsgG0QAAAAAAAAAAGMbRAAAAAAAAOC/okQYLURU+yH5P6AiIBBLIhujIBtEAAAAAAAAAABhGyIbIBxEAAAAAAAAJECiZARAICdEGC1EVPsh+b+gIhtEAAAAAAAAAABjIBtEGC1EVPshGUBmcgRAIBsgG0QYLURU+yEZQKOcRBgtRFT7IRlAoqEhGwtBASENIB1EAAAAAAAAAABjIB1EGC1EVPshGUBmckUNAiAdIB1EGC1EVPshGUCjnEQYLURU+yEZQKKhIR0MAgsgHSAgoCEdIBshHEEACyENIB0hGwsgBigCYCIHIAVqIgMgHTkDOCADIA06ADAgAyAcOQMoIAMgGzkDICADQewAOgAYIAMgIjkDECADICY5AwggAyAeOQMAIAYoAnAhDQwBCwsgAigCoA4iAUEASA0BIAAgAigCpA4gAUEBEEggAigCpA4QGCAAIBEQSSARIAxBmPUAIBIbIgFHBEAgACABEF0LIAIoAsgUIgMEQCACIAJB2BRqKQMANwNgIAIgAikD0BQ3A1ggAiACKALAFCIBKQMINwNQIAIgASkDADcDSCAAQQIgAkHYAGogAkHIAGogKCAlIAMQ6gILIAIoAswUIgNFDQMgAkFAayACQegUaikDADcDACACIAIpA+AUNwM4IAIgAigCwBQgAigCxBRBBHRqQRBrIgEpAwg3AzAgAiABKQMANwMoIABBAyACQThqIAJBKGogKCAlIAMQ6gIMAwsgASgCECEDIAhFDQEgCLhEAAAAAAAAAECgRAAAAAAAAOC/oiEfQQAhDCADKAIIKAIEIhVBMBA+IQYgFUEwED4hDwNAIAwgFUYEQCAJEGQiCCEDIAkiBSEQA0AgA0Hn4QEQsQUiAwRAAkAgA0GY9QAgAy0AABsiBCAJRg0AIAQhCSABKAIQLQB0QQNxDQAgACAEEEkgACAEEF0LQQAhDANAIAwgFUYEQCAQIAQgFhshECAEIAUgFkECSRshBSAWQQFqIRZBACEDDAMLIA8gDEEwbCIHaiIDKAIEIRIgBiAHaigCACENIAMoAgAhDkEAIQMDQCADIBJGBEAgACAOIBJBABDxASAMQQFqIQwMAgUgDiADQQR0IgdqIhEgByANaiIHKwMAIBErAwCgOQMAIBEgBysDCCARKwMIoDkDCCADQQFqIQMMAQsACwALAAsLAkAgAigCyBQiA0UEQEEAIQUMAQsCQCAFRQ0AIAEoAhAtAHRBA3ENACAAIAUQSSAAIAUQXSACKALIFCEDCyACIAJB2BRqKQMANwOgASACIAIpA9AUNwOYASACIAIoAsAUIgQpAwg3A5ABIAIgBCkDADcDiAEgAEECIAJBmAFqIAJBiAFqICggJSADEOoCCyACKALMFCIDBEACQCAFIBBGDQAgASgCEC0AdEEDcQ0AIAAgEBBJIAAgEBBdIAIoAswUIQMLIAIgAkHoFGopAwA3A4ABIAIgAikD4BQ3A3ggAiACKALAFCACKALEFEEEdGpBEGsiASkDCDcDcCACIAEpAwA3A2ggAEEDIAJB+ABqIAJB6ABqICggJSADEOoCCyAIEBhBACEDA0AgAyAVRgRAIAYQGCAPEBgMBgUgBiADQTBsIgFqKAIAEBggASAPaigCABAYIANBAWohAwwBCwALAAUgAkHAFGogDEEwbCIDIAEoAhAoAggoAgBqQTAQIBogAyAGaiIEIAIoAsQUIgU2AgQgAyAPaiIDIAU2AgQgBCAFQRAQPiIQNgIAIAMgAigCxBRBEBA+Igo2AgAgAigCxBRBAWshByACKALAFCIRKwMIIR4gESsDACEgQQAhAwNAIAMgB0kEQCARIANBAWpBBHQiCGoiBCsDCCEjIAQrAwAhKQJAIANFBEAgEEQAAAAAAAAAQCAgICmhIh0gHaIgHiAjoSIcIByioEQtQxzr4jYaP6CfoyIbIB2aojkDCCAQIBwgG6I5AwAMAQsgECADQQR0aiIERAAAAAAAAABAICYgKaEiHSAdoiAnICOhIhwgHKKgRC1DHOviNho/oJ+jIhsgHZqiOQMIIAQgHCAbojkDAAsgESADQQNqIgRBBHRqIgUrAwghHCAFKwMAIRsgECADQQJqQQR0Ig1qIhJEAAAAAAAAAEAgKSANIBFqIgUrAwAiJqEiISAjIAUrAwgiJ6EiJBBKIh1ELUMc6+I2Gj9jBHwgICAboSIhICGiIB4gHKEiJCAkoqBELUMc6+I2Gj+gnwUgHQujIh0gIZqiIiI5AwggEiAdICSiIh05AwAgCCAQaiIOIBIpAwg3AwggDiASKQMANwMAIAogA0EEdCIDaiIFIB8gAyAQaiIDKwMAoiAgoDkDACAFIB8gAysDCKIgHqA5AwggCCAKaiIDIB8gDisDAKIgKaA5AwAgAyAfIA4rAwiiICOgOQMIIAogDWoiAyAfICKiICegOQMIIAMgHyAdoiAmoDkDACAbISAgHCEeIAQhAwwBCwsgECADQQR0IgRqIgNEAAAAAAAAAEAgJiAgoSIcIByiICcgHqEiHSAdoqBELUMc6+I2Gj+gn6MiGyAcmqIiHDkDCCADIB0gG6IiGzkDACAEIApqIgMgHyAcoiAeoDkDCCADIB8gG6IgIKA5AwAgDEEBaiEMDAELAAsAC0GWygFBo7gBQf8SQfIxEAAACyADLQB0QQNxRQRAAkAgCS0AAARAIAAgCRBJDAELIABBmPUAEEkgDEGY9QAgDC0AABshDAsgACAMEF0LIAFBKGohESACQeAUaiEQIAJB0BRqIRUgAkHIFWohGCACQagIaiEGIAJBmAhqIRMgAkG4DmohEiAlRAAAAAAAACBAokQAAAAAAAAoQBAjIR0DQCAZIAEoAhAoAggiAygCBE8NASACQcAUaiADKAIAIBlBMGxqQTAQIBpBACEIQQAhCyARQVBBACABKAIAQQNxQQJHG2ooAgAQLkHXLhAmIgMEQCADQdfeABBFIQsLIA0hAwJAIBdFDQADQCADKAIAIgRBAEchCCAERQ0BIANBBGohAyAEQYyuARBFRQ0ACwtEAAAAAAAAAAAhGwJAIAFB1iYQJiIDRQ0AIAMtAABFDQAgAxCRAiIbRAAAAAAAAAAAZCEICwJAAkACQAJAIAggC3FBAUcNACAdIBsgG0QAAAAAAAAAAGEbIBsgCBsiH0QAAAAAAAAAAGRFDQBBACEEIAJBoA5qIgNBAEHgABA2GiADIAIoAsQUQcgAEKoCIAIoAsQUIQ4gAigCwBQhCgNAIAQgDkcEQCAKIARBBHRqIQcgBCEFA0ACQCAFRQRAQX8hBQwBCyAKIAVBAWsiBUEEdGoiAysDACAHKwMAoSADKwMIIAcrAwihEEpEexSuR+F6hD9kRQ0BCwsgBCEIAkADQCAIQQFqIgggDk8NASAKIAhBBHRqIgMrAwAgBysDACIhoSIpIAMrAwggBysDCCIjoSImEEoiJ0R7FK5H4XqEP2RFDQALIAVBf0YNAEEAIQMgKZkiHkSamZmZmZm5P2MgJpkiIESamZmZmZm5P2RxICMgCiAFQQR0aiIFKwMIoSIkmSIcRJqZmZmZmbk/YyAhIAUrAwChIiKZIhtEmpmZmZmZuT9kcXEiCCAbRJqZmZmZmbk/YyAgRJqZmZmZmbk/Y3EgHESamZmZmZm5P2RxIB5EmpmZmZmZuT9kcXJFDQADQCACKAKoDiADSwRAIAIgAkGoDmopAwA3A6gEIAIgAikDoA43A6AEIAIoAqAOIQcgAkGgBGogAxAZIQUgA0EBaiEDICEgCiAHIAVByABsaigCAEEEdGoiBSsDAKEgIyAFKwMIoRBKRHsUrkfheoQ/Y0UNAQwCCwsgEkEAQcgAEDYhBSACQaAOakHIABAnIQMgAigCoA4gA0HIAGxqIAVByAAQIBogAiACQagOaiIDKQMANwO4BCACIAIpA6AONwOwBCACKAKgDiACQbAEaiADKAIAQQFrEBlByABsaiIFIAQ2AgAgBSAmICejIiAgH6IgI6A5AyAgBSApICejIhwgH6IgIaA5AxggBSAjICQgIiAkEEoiG6MiHiAfoqE5AxAgBSAhICIgG6MiGyAfoqE5AwggCARAICBEAAAAAAAAAABjIgNFIBtEAAAAAAAAAABkRXJFBEAgBUKY2pCitb/I/D83A0AgBUIANwM4IAUgIyAfoTkDMCAFICEgH6E5AygMAgsgIEQAAAAAAAAAAGRFIBtEAAAAAAAAAABkRXJFBEAgBUIANwNAIAVCmNqQorW/yPy/fzcDOCAFIB8gI6A5AzAgBSAhIB+hOQMoDAILIAUgHyAhoDkDKCADRSAbRAAAAAAAAAAAY0VyRQRAIAVCmNqQorW/yITAADcDQCAFQpjakKK1v8j8PzcDOCAFICMgH6E5AzAMAgsgBULSw8z5x6+2icAANwNAIAVCmNqQorW/yITAADcDOCAFIB8gI6A5AzAMAQsgHEQAAAAAAAAAAGQiA0UgHkQAAAAAAAAAAGNFckUEQCAFQtLDzPnHr7aJwAA3A0AgBUKY2pCitb/IhMAANwM4IAUgHyAjoDkDMCAFIB8gIaA5AygMAQsgHEQAAAAAAAAAAGNFIB5EAAAAAAAAAABjRXJFBEAgBUKY2pCitb/IjMAANwNAIAVC0sPM+cevtonAADcDOCAFIB8gI6A5AzAgBSAhIB+hOQMoDAELICMgH6EhGyADRSAeRAAAAAAAAAAAZEVyRQRAIAVCmNqQorW/yITAADcDQCAFQpjakKK1v8j8PzcDOCAFIBs5AzAgBSAfICGgOQMoDAELIAVCmNqQorW/yPw/NwNAIAVCADcDOCAFIBs5AzAgBSAhIB+hOQMoCyAEQQFqIQQMAQsLIAIoAqgORQ0BIAJBoA5qQZwCQcgAENcDIAJBiBVqIg8gAigCwBQiAykDCDcDACACIAMpAwA3A4AVQQAhDEEAIQVBACEUA0AgAigCqA4iAyAUSQRAA0AgAyAMTQ0FIAIgAkGoDmopAwA3A4gDIAIgAikDoA43A4ADIAJBgAhqIAIoAqAOIAJBgANqIAwQGUHIAGxqQcgAECAaIAIgBikDCDcD+AIgAiAGKQMANwPwAgJAIAJB8AJqIB8gHyACKwO4CCACKwPACBDxCCIIRQ0AIAgoAgQiA0EFSQ0AIANBBmtBACADQQdrQX1JGyIFQQJPBEBBACEDIAJBsBVqIgRBAEEoEDYaIAQgBUEQEKoCA0AgAyAFRgRAAkAgCQRAIAkiAy0AAA0BC0GY9QAhAwsgACADEEkgAiACQbgVaiIHKQMANwPoAiACIAIpA7AVNwPgAkEAIQMgACACKAKwFSACQeACakEAEBlBBHRqIAUQPQNAIAIoArgVIANLBEAgAiAHKQMANwPYAiACIAIpA7AVNwPQAiACQdACaiADEBkhBAJAAkAgAigCwBUiBQ4CARIACyACIAIoArAVIARBBHRqIgQpAwg3A8gCIAIgBCkDADcDwAIgAkHAAmogBREBAAsgA0EBaiEDDAELCyACQbAVaiIDQRAQMyADEDgFIBggCCgCACADQQR0aiIEKQM4NwMIIBggBCkDMDcDACACQbAVakEQECchBCACKAKwFSAEQQR0aiIEIBgpAwA3AwAgBCAYKQMINwMIIANBAWohAwwBCwsLIAgoAgAQGCAIEBgLIAxBAWohDCACKAKoDiEDDAALAAUgAkG4FWoiDgJ/IAMgFEsEQCACIAJBqA5qIgMpAwA3A5gEIAIgAikDoA43A5AEIAIoAqAOIAJBkARqIBQQGUHIAGxqKAIAIRYgAiADKQMANwOIBCACIAIpA6AONwOABCACKAKgDiACQYAEaiAUEBlByABsakEIagwBCyACKALAFCACKALEFEEBayIWQQR0agsiAykDCDcDACACIAMpAwA3A7AVIAJBkAhqQgA3AwAgAkGICGoiC0IANwMAIAJCADcDgAggEyAPKQMANwMIIBMgAikDgBU3AwAgAkGACGpBEBAnIQMgAigCgAggA0EEdGoiAyATKQMANwMAIAMgEykDCDcDCCAFIQQDQCAWIARBAWoiBEsEQEEAIQMgAigCwBQhCANAIAIoAqgOIANLBEAgAiACQagOaikDADcDmAMgAiACKQOgDjcDkAMgCCACKAKgDiACQZADaiADEBlByABsaigCAEEEdGohCiADQQFqIQMgAigCwBQiByEIIAcgBEEEdGoiBysDACAKKwMAoSAHKwMIIAorAwihEEpEexSuR+F6hD9jRQ0BDAMLCyATIAggBEEEdGoiAykDADcDACATIAMpAwg3AwggAkGACGpBEBAnIQMgAigCgAggA0EEdGoiAyATKQMANwMAIAMgEykDCDcDCAwBCwsgEyACKQOwFTcDACATIA4pAwA3AwggAkGACGpBEBAnIQMgAigCgAggA0EEdGoiAyATKQMANwMAIAMgEykDCDcDCCACIAspAwA3A/gDIAIgAikDgAg3A/ADQQAhAyAAIAIoAoAIIAJB8ANqQQAQGUEEdGogCygCABA9AkADQAJAIAIoAogIIANNBEAgAkGACGoiA0EQEDMgAxA4IBQgAigCqA5PDQMgAiACQagOaiIKKQMANwPoAyACIAIpA6AONwPgAyACKAKgDiACQeADaiAUEBlByABsaigCACEFA0BBACEDIAVBAWoiBSACKALEFE8NAgNAIAMgAigCqA5PDQMgAiAKKQMANwPIAyACIAIpA6AONwPAAyACKALAFCEOIAIoAqAOIQggAkHAA2ogAxAZIQQgA0EBaiEDIAIoAsAUIAVBBHRqIgcrAwAgDiAIIARByABsaigCAEEEdGoiBCsDAKEgBysDCCAEKwMIoRBKRHsUrkfheoQ/Y0UNAAsMAAsACyACIAspAwA3A7gDIAIgAikDgAg3A7ADIAJBsANqIAMQGSEEAkACQCACKAKQCCIHDgIBDgALIAIgAigCgAggBEEEdGoiBCkDCDcDqAMgAiAEKQMANwOgAyACQaADaiAHEQEACyADQQFqIQMMAQsLIAIgCikDADcD2AMgAiACKQOgDjcD0AMgDyACKAKgDiACQdADaiAUEBlByABsaiIDKQMgNwMAIAIgAykDGDcDgBULIBRBAWohFAwBCwALAAsgACACKALAFCACKALEFEEAEPEBDAILIAAgAigCwBQgAigCxBRBABDxAQtBACEDA0AgAigCqA4gA00EQCACQaAOaiIDQcgAEDMgAxA4BSACIAJBqA5qKQMANwP4ASACIAIpA6AONwPwASACQfABaiADEBkhBwJAAkAgAigCsA4iBQ4CAQgACyACQagBaiIEIAIoAqAOIAdByABsakHIABAgGiAEIAURAQALIANBAWohAwwBCwsLIAIoAsgUIgQEQCACIBUpAwg3A7gCIAIgFSkDADcDsAIgAiACKALAFCIDKQMINwOoAiACIAMpAwA3A6ACIABBAiACQbACaiACQaACaiAoICUgBBDqAgsgAigCzBQiBARAIAIgECkDCDcDmAIgAiAQKQMANwOQAiACIAIoAsAUIAIoAsQUQQR0akEQayIDKQMINwOIAiACIAMpAwA3A4ACIABBAyACQZACaiACQYACaiAoICUgBBDqAgsCQCAXRSABKAIQKAIIKAIEQQJJcg0AIAIoAsgUIAIoAswUckUNACAAIA0Q5AELIBlBAWohGQwACwALIBoQ7AIQGCAaEBggAkHoB2oQXCAAKAIQIgcoAgghCQJAIAcoAtgBRQRAIActAIwCQQFxRQ0BCyAAEJcCIAcoApwCIgtFDQAgBygCoAIiBCgCACEIQQEhBQNAIAUgC08NASAHIAQgBUECdCIBaigCADYClAIgByAHKAKkAiAIQQR0ajYCmAIgACAHKALYASAHKALsASAHKAL8ASAHKALcARDDASAAEJcCIAVBAWohBSABIAcoAqACIgRqKAIAIAhqIQggBygCnAIhCwwACwALIAdCADcClAIgACAJKAIQIgMoAggiAQR/IAcoAuQBIQMgBy8BjAIhBCACIAEoAgAiAUEQaiABKAIAIAEoAggbIgEpAwg3AyAgAiABKQMANwMYIAAgAkEYaiAEQYABcUEHdiADIARBAnFBAXYQ3gggBygC6AEhAyAHLwGMAiEEIAIgCSgCECgCCCIBKAIAIAEoAgRBMGxqIgEgAUEwaygCACABQSxrKAIAQQR0aiABQSRrKAIAG0EQayIBKQMINwMQIAIgASkDADcDCCAAIAJBCGogBEGAAnFBCHYgAyAEQQRxQQJ2EN4IIAkoAhAFIAMLKAJgQQsgBy8BjAJBA3ZBAXEgBygC4AEgBygC8AEgBygCgAIgBygC3AEgCUGQ2gooAgBB6pMBEHoQaQR/IAkoAhAoAggFQQALEN4EIAAgCSgCECgCbEELIAcvAYwCQQN2QQFxIAcoAuABIAcoAvABIAcoAoACIAcoAtwBIAlBkNoKKAIAQeqTARB6EGkEfyAJKAIQKAIIBUEACxDeBCAAIAkoAhAoAmRBByAHLwGMAkECdkEBcSAHKALoASAHKAL4ASAHKAKIAiAHKALcAUEAEN4EIAAgCSgCECgCaEEGIAcvAYwCQQF2QQFxIAcoAuQBIAcoAvQBIAcoAoQCIAcoAtwBQQAQ3gQCQCAAKAI8IgFFDQAgASgCRCIBRQ0AIAAgAREBAAsgABCNBAsgAkHgFWokAA8LQb6ABEHCAEEBQajzCCgCABA7GhA8AAvOBgECfyMAQYACayIDJAAgA0HQAWoiBEGovwhBMBAgGiABQgA3AgACQAJAAkACQCAAIAQQ4gQNACADKALYAUECSQ0AIAMgAykD2AE3A8gBIAMgAykD0AE3A8ABIAMoAtABIANBwAFqQQAQGUEYbGooAgANAQtBACEAQQAhAQNAIAEgAygC2AFPDQIgAyADKQPYATcDICADIAMpA9ABNwMYIANBGGogARAZIQICQAJAIAMoAuABIgQOAgEFAAsgAyADKALQASACQRhsaiICKQMINwMIIAMgAikDEDcDECADIAIpAwA3AwAgAyAEEQEACyABQQFqIQEMAAsACyADKALYAUEDTwRAQYWWBEEAECoLIAMgAykD2AE3A7gBIAMgAykD0AE3A7ABIAEgAygC0AEgA0GwAWpBABAZQRhsaigCABBkNgIAIAMgAykD2AE3A6gBIAMgAykD0AE3A6ABIAMoAtABIANBoAFqQQEQGUEYbGooAgAEQCADIAMpA9gBNwOYASADIAMpA9ABNwOQASABIAMoAtABIANBkAFqQQEQGUEYbGooAgAQZDYCBAsgAyADKQPYATcDiAEgAyADKQPQATcDgAEgAygC0AEhASADQYABakEAEBkhBCADKALQASEAIAICfCABIARBGGxqLQAQQQFGBEAgAyADKQPYATcDWCADIAMpA9ABNwNQIAAgA0HQAGpBABAZQRhsaisDCAwBCyADIAMpA9gBNwN4IAMgAykD0AE3A3BEAAAAAAAAAAAgACADQfAAakEBEBlBGGxqLQAQQQFHDQAaIAMgAykD2AE3A2ggAyADKQPQATcDYEQAAAAAAADwPyADKALQASADQeAAakEBEBlBGGxqKwMIoQs5AwBBACEBQQEhAANAIAEgAygC2AFPDQEgAyADKQPYATcDSCADIAMpA9ABNwNAIANBQGsgARAZIQICQAJAIAMoAuABIgQOAgEEAAsgAyADKALQASACQRhsaiICKQMINwMwIAMgAikDEDcDOCADIAIpAwA3AyggA0EoaiAEEQEACyABQQFqIQEMAAsACyADQdABaiIBQRgQMyABEDggA0GAAmokACAADwtBvoAEQcIAQQFBqPMIKAIAEDsaEDwAC68BAQF/IAAoAhAiAUUEQEG39QBBo7gBQYcBQc+RARAAAAsgASgC3AEQGCABKALYARAYIAEoAuABEBggASgC5AEQGCABKALoARAYIAEoAuwBEBggASgC8AEQGCABKAL0ARAYIAEoAvgBEBggASgC/AEQGCABKAKAAhAYIAEoAoQCEBggASgCiAIQGCABKAKYAhAYIAEoAqQCEBggASgCoAIQGCAAIAEoAgA2AhAgARAYC54BAQJ/QbgCEMYDIgEgACgCECICNgIAIAAgATYCECACBEAgAUEQaiACQRBqQSgQIBogAUE4aiACQThqQSgQIBogASACKAKYATYCmAEgASACKAKcATYCnAEgASACKwOgATkDoAEgASACKAKIATYCiAEgAUHgAGogAkHgAGpBKBAgGiABDwsgAUKAgICAgICA+D83A6ABIAFCAzcDmAEgAQvjAwIIfwJ+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KAIIIQMgBCEBDAALAAtBvdIBQbS3AUHYAUH5wwEQAAALQd6HAUG0twFB2QFB+cMBEAAACyACIAApAgg3AyggAiAAKQIANwMgIAAgAkEgaiADQQFrEBlBBBDeARogACAAKAIIQQFrNgIIIAJBMGokAAunAQEEfyMAQRBrIgUkACABED8hAiMAQRBrIgMkAAJAIAJB9////wdNBEACQCACEKAFBEAgACACENMBIAAhBAwBCyADQQhqIAIQ3wNBAWoQ3gMgAygCDBogACADKAIIIgQQ+wEgACADKAIMEPoBIAAgAhC+AQsgBCABIAIQqwIgA0EAOgAHIAIgBGogA0EHahDSASADQRBqJAAMAQsQygEACyAFQRBqJAALFwAgACADNgIQIAAgAjYCDCAAIAE2AggLDQAgACABIAJBARChBwsSACAAIAEgAkL/////DxCwBacLzAEBA38jAEEgayIDQgA3AxggA0IANwMQIANCADcDCCADQgA3AwAgAS0AACICRQRAQQAPCyABLQABRQRAIAAhAQNAIAEiA0EBaiEBIAMtAAAgAkYNAAsgAyAAaw8LA0AgAyACQQN2QRxxaiIEIAQoAgBBASACdHI2AgAgAS0AASECIAFBAWohASACDQALAkAgACIBLQAAIgJFDQADQCADIAJBA3ZBHHFqKAIAIAJ2QQFxRQ0BIAEtAAEhAiABQQFqIQEgAg0ACwsgASAAawuAAQEEfyAAIABBPRC0BSIBRgRAQQAPCwJAIAAgASAAayIEai0AAA0AQaCGCygCACIBRQ0AIAEoAgAiAkUNAANAAkAgACACIAQQ6QFFBEAgASgCACAEaiICLQAAQT1GDQELIAEoAgQhAiABQQRqIQEgAg0BDAILCyACQQFqIQMLIAMLTgEBf0EBQRwQGiIGIAU6ABQgBiAAIAEQrgE2AggCfyADBEAgACACENUCDAELIAAgAhCuAQshBSAGIAA2AhggBiAENgIQIAYgBTYCDCAGCwkAIAC9QjSIpwuZAQEDfCAAIACiIgMgAyADoqIgA0R81c9aOtnlPaJE65wriublWr6goiADIANEff6xV+Mdxz6iRNVhwRmgASq/oKJEpvgQERERgT+goCEFIAAgA6IhBCACRQRAIAQgAyAFokRJVVVVVVXFv6CiIACgDwsgACADIAFEAAAAAAAA4D+iIAQgBaKh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IAAQ9gJBAWshASAAKAIECyIDIAFGBEAgACABQQEgASABEP0GIAAQRhoMAQsgABBGGiAEDQAgACIBIANBAWoQ0wEMAQsgACgCACEBIAAgA0EBahC+AQsgASADaiIAIAJBD2oQ0gEgAkEAOgAOIABBAWogAkEOahDSASACQRBqJAALDQAgAEHI6Ak2AgAgAAsHACAAQQhqCwcAIABBAkkLOwACQCAAECgEQCAAECVBD0YNAQsgAEEAEMoDCwJAIAAQKARAIABBADoADwwBCyAAQQA2AgQLIAAQiAULBABBBAslAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAhC0ChogA0EQaiQAC6EBAQJ/AkACQCABED8iAkUNACAAEE4gABAlayACSQRAIAAgAhC9AQsgABAlIQMgABAoBEAgACADaiABIAIQIBogAkGAAk8NAiAAIAAtAA8gAmo6AA8gABAlQRBJDQFBibQDQZ38AEGXAkHd6gAQAAALIAAoAgAgA2ogASACECAaIAAgACgCBCACajYCBAsPC0GJzQFBnfwAQZUCQd3qABAAAAsdACAAQQRqEPgGQX9GBEAgACAAKAIAKAIIEQEACwsRACAAIAEgASgCACgCKBEEAAtpAQF/IwBBEGsiAiQAAkAgACgCAARAIAEoAgBFDQEgAiAAKQIANwMIIAIgASkCADcDACACQQhqIAIQ8wogAkEQaiQARQ8LQa3VAUGG+wBB2wBBhDwQAAALQZ7VAUGG+wBB3ABBhDwQAAALCABB/////wcLBQBB/wALYQEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBBGsiATYCCCAAIAFPDQEgAigCDCACKAIIEKYFIAIgAigCDEEEaiIANgIMIAIoAgghAQwACwALIAJBEGokAAvQAQECfyACQYAQcQRAIABBKzoAACAAQQFqIQALIAJBgAhxBEAgAEEjOgAAIABBAWohAAsgAkGEAnEiA0GEAkcEQCAAQa7UADsAACAAQQJqIQALIAJBgIABcSECA0AgAS0AACIEBEAgACAEOgAAIABBAWohACABQQFqIQEMAQsLIAACfwJAIANBgAJHBEAgA0EERw0BQcYAQeYAIAIbDAILQcUAQeUAIAIbDAELQcEAQeEAIAIbIANBhAJGDQAaQccAQecAIAIbCzoAACADQYQCRwvxAQEEfyMAQRBrIgQkAAJAAkACQCAABEAgACABEIwCIAAoAgwiBSAAKAIIIgJLBEAgAUUNAiAFQX8gAW5PDQMgACgCACEDAkAgASACbCICRQRAIAMQGEEAIQMMAQsgAyACEGYiA0UNBSACIAEgBWwiAU0NACABIANqQQAgAiABaxA2GgsgACADNgIAIAAgACgCCDYCDAsgBEEQaiQADwtBvdIBQbS3AUHnAkGLwwEQAAALQdGvA0HP/ABBzABB7bIBEAAAC0GgvQNBz/wAQc0AQe2yARAAAAsgBCACNgIAQajzCCgCAEGD5wMgBBAfGhAsAAuqAQEBfwJAIANBgBBxRQ0AIAJFIANBygBxIgRBCEYgBEHAAEZycg0AIABBKzoAACAAQQFqIQALIANBgARxBEAgAEEjOgAAIABBAWohAAsDQCABLQAAIgQEQCAAIAQ6AAAgAEEBaiEAIAFBAWohAQwBCwsgAAJ/Qe8AIANBygBxIgFBwABGDQAaQdgAQfgAIANBgIABcRsgAUEIRg0AGkHkAEH1ACACGws6AAALDAAgABBGIAFBAnRqC5wEAQt/IwBBgAFrIgwkACAMIAE2AnwgAiADEJQLIQggDEEKNgIQIAxBCGpBACAMQRBqIgkQfSEPAkACQAJAIAhB5QBPBEAgCBBNIglFDQEgDyAJEI8BCyAJIQcgAiEBA0AgASADRgRAQQAhCwNAIAAgDEH8AGoiARBaQQEgCBsEQCAAIAEQWgRAIAUgBSgCAEECcjYCAAsDQCACIANGDQYgCS0AAEECRg0HIAlBAWohCSACQQxqIQIMAAsACyAAEIEBIQ0gBkUEQCAEIA0QmwEhDQsgC0EBaiEQQQAhDiAJIQcgAiEBA0AgASADRgRAIBAhCyAORQ0CIAAQlAEaIAkhByACIQEgCCAKakECSQ0CA0AgASADRgRADAQFAkAgBy0AAEECRw0AIAEQJCALRg0AIAdBADoAACAKQQFrIQoLIAdBAWohByABQQxqIQEMAQsACwAFAkAgBy0AAEEBRw0AIAEgCxCbBSgCACERAkAgBgR/IBEFIAQgERCbAQsgDUYEQEEBIQ4gARAkIBBHDQIgB0ECOgAAIApBAWohCgwBCyAHQQA6AAALIAhBAWshCAsgB0EBaiEHIAFBDGohAQwBCwALAAsABSAHQQJBASABEPcBIgsbOgAAIAdBAWohByABQQxqIQEgCiALaiEKIAggC2shCAwBCwALAAsQkAEACyAFIAUoAgBBBHI2AgALIA8QfCAMQYABaiQAIAILEQAgACABIAAoAgAoAgwRAAALmwQBC38jAEGAAWsiDCQAIAwgATYCfCACIAMQlAshCCAMQQo2AhAgDEEIakEAIAxBEGoiCRB9IQ8CQAJAAkAgCEHlAE8EQCAIEE0iCUUNASAPIAkQjwELIAkhByACIQEDQCABIANGBEBBACELA0AgACAMQfwAaiIBEFtBASAIGwRAIAAgARBbBEAgBSAFKAIAQQJyNgIACwNAIAIgA0YNBiAJLQAAQQJGDQcgCUEBaiEJIAJBDGohAgwACwALIAAQggEhDSAGRQRAIAQgDRCdBSENCyALQQFqIRBBACEOIAkhByACIQEDQCABIANGBEAgECELIA5FDQIgABCVARogCSEHIAIhASAIIApqQQJJDQIDQCABIANGBEAMBAUCQCAHLQAAQQJHDQAgARAkIAtGDQAgB0EAOgAAIApBAWshCgsgB0EBaiEHIAFBDGohAQwBCwALAAUCQCAHLQAAQQFHDQAgASALEEIsAAAhEQJAIAYEfyARBSAEIBEQnQULIA1GBEBBASEOIAEQJCAQRw0CIAdBAjoAACAKQQFqIQoMAQsgB0EAOgAACyAIQQFrIQgLIAdBAWohByABQQxqIQEMAQsACwALAAUgB0ECQQEgARD3ASILGzoAACAHQQFqIQcgAUEMaiEBIAogC2ohCiAIIAtrIQgMAQsACwALEJABAAsgBSAFKAIAQQRyNgIACyAPEHwgDEGAAWokACACCw0AIAAoAgAgASgCAEkLBwAgAEELSQsJACAAQQEQpgsLFgAgACABKAIANgIAIAAgAigCADYCBAsJACAAIAEQpAMLMQEBfyMAQRBrIgMkACADIAE2AgwgAyACNgIIIAAgA0EMaiADQQhqEKIFIANBEGokAAtvAQR/IAAQLiEFAkAgACgCACICIAEoAgBzQQNxDQADQCAFIAJBA3EgAxDmAyIDRQ0BIAEgAygCCBCtByICRQ0BAkAgACADEEQiBBB1BEAgASACIAQQqgQMAQsgASACIAQQcQsgACgCACECDAALAAsLHAEBfyAAKAIAIQIgACABKAIANgIAIAEgAjYCAAsIACAAKAIARQuNAQEB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AUEsQfEjEAAACxoAIAArAwAgASsDAKEgACsDCCABKwMIoRBKC4EBAgJ/AXwgASACNgIQIAEgAyACKwMIoDkDGCAAKAIAIAAgARDfDEEobGohBANAAkAgBCIFKAIgIgRFDQAgASsDGCIGIAQrAxgiA2QNASADIAZkDQAgAisDACAEKAIQKwMAZA0BCwsgASAENgIgIAUgATYCICAAIAAoAghBAWo2AggLtQECA38CfAJAIABB5CYQJiIEBEAgBBCQAiIEQQJKDQELQRQhBAsgBBDNAiEFIAMgACgCECIAKwMoRAAAAAAAAOA/oqAhAyACIAArAyBEAAAAAAAA4D+ioCECIAS4IQhBACEAA38gACAERgR/IAEgBDYCACAFBSAFIABBBHRqIgYgALggCKNEGC1EVPshCUCiIgcgB6AiBxBXIAOiOQMIIAYgBxBLIAKiOQMAIABBAWohAAwBCwsLIgAgACABKwMAIAIrAwCgOQMAIAAgASsDCCACKwMIoDkDCAumEQIRfwh8IwBBEGsiDSQAIAAoAgggACgCBGoiB0EgEBohECAHIAUoAjAiCUEBdEEAIAlBAEobayIVQQAgFUEAShshDiABIAFDRwOAP5QgAxu7IRcDQCAGIA5HBEAgECAGQQV0aiIIIAUrAxhEAAAAAAAA4D+iIhggBSgCKCAGQQR0aiIRKwMAIBeiRAAAAAAAAOA/oiIZIAZBAnQiEiACKAIAaioCALsiGqCgOQMQIAggGiAZoSAYoTkDACAIIAUrAyBEAAAAAAAA4D+iIhggESsDCCAXokQAAAAAAADgP6IiGSACKAIEIBJqKgIAuyIaoKA5AxggCCAaIBmhIBihOQMIIAZBAWohBgwBCwsCQCAJQQBKBEAgCUEBakEEEBohEUEAIRIgBSgCMEEBakEEEBohDkEAIQIDQCAFKAIwIgYgAkoEQEEAIQYgAkECdCIKIAUoAjRqKAIAIghBACAIQQBKGyETRP///////+9/IRdE////////7/8hGCAIQQJqIgxBBBAaIQcgDEEgEBohCUT////////v/yEZRP///////+9/IRoDQCAGIBNHBEAgByAGQQJ0IgtqIAAoAhAgBSgCOCAKaigCACALaigCACIPQQJ0aigCADYCACAJIAZBBXRqIgsgECAPQQV0aiIPKwMAIhs5AwAgCyAPKwMIIhw5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QQAhBwNAIAgoAgAgB00EQCACIAIoAgBBAWs2AgAgAUGSgAUQGxogASACKAIAEEMgAUH1xwEQGxogCBCMCgwDCyAHBEAgAUHH6gQQGxoLIAgoAgghAyACIAIoAgAiBkEBajYCACABIAYQQyABQf7VAxAbGiABIAIoAgAQQwJAAkACQAJAAkACQAJAAkACQAJAAkACQCADIAdB0ABsaiIDKAIAIgYOEAoKAAABAQIDBAQGBwsFBQgJCyAEQdAAQfAAIAZBAkYbNgJQIAFB/ekEIARB0ABqEB4gASACKAIAEEMgASADQQhqELIIDAoLIARBwgBB4gAgBkEERhs2AmAgAUH96QQgBEHgAGoQHiABIAIoAgAQQyABIANBCGoQsggMCQsgAUGy6gRBABAeIAEgAigCABBDIAEgA0EIahCyCAwICyABQZrqBEEAEB4gASACKAIAEEMgAysDCCELIAQgAysDEDkDmAEgBCALOQOQASABQYXoBCAEQZABahAeIAEgAigCABBDIARB4wBB8gAgAygCGCIGQQFGG0HsACAGGzYCgAEgAUGK6gQgBEGAAWoQHiABIAIoAgAQQyAEIAMrAyA5A3AgAUHJ5wQgBEHwAGoQHiABIAIoAgAQQyABQeXJAxAbGiADKAIoIAIgARC8AiABQQoQZQwHCyAEQcMAQeMAIAZBCEYbNgKgASABQf3pBCAEQaABahAeIAEgAigCABBDIAFBsekEQQAQHiABIAIoAgAQQyABQf7JAxAbGiADKAIIIAIgARC8AiABQQoQZQwGCyAEQcMAQeMAIAZBDUYbNgKQAiABQf3pBCAEQZACahAeIAEgAigCABBDAkACQAJAIAMoAggOAgABAgsgAUGx6QRBABAeIAEgAigCABBDIAFB/skDEBsaIAMoAhAgAiABELwCIAFBChBlDAcLIAFBi+kEQQAQHiABIAIoAgAQQyABIAIoAgAQQyADKwMQIQsgBCADKwMYOQOIAiAEIAs5A4ACIAFBsegEIARBgAJqEB4gASACKAIAEEMgAysDICELIAQgAysDKDkD+AEgBCALOQPwASABQZvoBCAEQfABahAeIAEgAigCABBDIAEgAygCMCADKAI0IAIQjw8MBgsgAUGe6QRBABAeIAEgAigCABBDIAEgAigCABBDIAMrAxAhCyADKwMYIQwgBCADKwMgOQPgASAEIAw5A9gBIAQgCzkD0AEgAUHj6AQgBEHQAWoQHiABIAIoAgAQQyADKwMoIQsgAysDMCEMIAQgAysDODkDwAEgBCAMOQO4ASAEIAs5A7ABIAFBx+gEIARBsAFqEB4gASACKAIAEEMgASADKAJAIAMoAkQgAhCPDwwFCyABQb7qBEEAEB4gASACKAIAEEMgBCADKwMIOQOgAiABQdrnBCAEQaACahAeIAEgAigCABBDIAFBm8oDEBsaIAMoAhAgAiABELwCIAFBChBlDAQLIAFBpuoEQQAQHiABIAIoAgAQQyABQZHKAxAbGiADKAIIIAIgARC8AiABQQoQZQwDCyABQf/oBEEAEB4gASACKAIAEEMgBCADKAIINgKwAiABQfzEBCAEQbACahAeDAILIARBsgI2AhQgBEGkugE2AhBBqPMIKAIAQea8BCAEQRBqEB8aEDwACyAEQeUAQcUAIAYbNgJAIAFB/ekEIARBQGsQHiABIAIoAgAQQyADKwMIIQsgAysDECEMIAMrAxghDSAEIAMrAyA5AzggBCANOQMwIAQgDDkDKCAEIAs5AyAgAUHXxwQgBEEgahAeCyACIAIoAgBBAWsiAzYCACABIAMQQyABQa8IEBsaIAdBAWohBwwACwALIAAgBRBEIAIgARC8AgsgCSAKIAUQ5gMhBQwACwALIARBwAJqJAAL/AIBA38jAEFAaiIDJAACQCABmUT8qfHSTWJAP2MEQCAAQbLhARAbGgwBCyABRAAAAAAAAPC/oJlE/Knx0k1iQD9jBEAgAEGO4QEQGxoMAQsgAyABOQMwIABB5uABIANBMGoQHgsgAigCACEEAkACQAJAAkACQCACKAIgIgJBAWsOBAECAgACCyAEQanBCBBMDQIgAEGQwQgQGxoMAwsgAyAEQf8BcTYCICADIARBEHZB/wFxNgIoIAMgBEEIdkH/AXE2AiQgAEHLEyADQSBqEB4MAgsgA0GhATYCBCADQd27ATYCAEGo8wgoAgBB5rwEIAMQHxoQPAALIAAgBBAbGgsgAEGQ4AEQGxoCQAJAIAJBAUcNACAEQRh2IgVB/wFGDQAgAyAFuEQAAAAAAOBvQKM5AxAgAEGChwEgA0EQahAeDAELAkAgAkEERw0AIARBqcEIEEwNACAAQZKdAxAbGgwBCyAAQbmeAxAbGgsgAEHZ0QQQGxogA0FAayQAC7ECAgR/AnwjAEHwAGsiASQAQZz5CkGc+QooAgAiBEEBajYCAAJ8IAAoAhAiAygCiAEiAkUEQEQAAAAAAABJQCEFRAAAAAAAAElADAELIAK3RBgtRFT7IQlAokQAAAAAAIBmQKMiBRBLRAAAAAAAAPA/IAUQV6FEAAAAAAAASUCiEDEhBUQAAAAAAADwP6BEAAAAAAAASUCiEDELIQYgAEGhwgMQGxogAygC3AEiAgRAIAAgAhCIASAAQd8AEGULIAEgBTkDYCABIAY5A1ggASAENgJQIABB5tIEIAFB0ABqEB4gAUEoaiICIANBOGpBKBAgGiAARAAAAAAAAAAAIAIQggYgAEQAAAAAAADwPyABIANB4ABqQSgQICIBEIIGIABB388EEBsaIAFB8ABqJAAgBAuAAwIEfwF8IwBBgAFrIgMkAEGY+QpBmPkKKAIAIgVBAWo2AgAgACgCECIEKAKIASEGIANCADcDeCADQgA3A3AgA0IANwNoIANCADcDYCABIANB4ABqIAIgBrdEGC1EVPshCUCiRAAAAAAAgGZAo0EAENAGIABBhcIDEBsaIAQoAtwBIgEEQCAAIAEQiAEgAEHfABBlCyADIAU2AlAgAEG6ygMgA0HQAGoQHiAAQenCAxAbGiAAIAMrA2AQeyAAQeLCAxAbGiAAIAMrA2gQeyAAQdvCAxAbGiAAIAMrA3AQeyAAQdTCAxAbGiAAIAMrA3gQeyAAQaPTBBAbGiAEKwOQASEHIANBKGoiASAEQThqQSgQIBogACAHRPyp8dJNYlC/oEQAAAAAAAAAACAHRAAAAAAAAAAAZBsgARCCBiAAIAQrA5ABIgdEAAAAAAAA8D8gB0QAAAAAAAAAAGQbIAMgBEHgAGpBKBAgIgEQggYgAEHEzwQQGxogAUGAAWokACAFCwsAIABB/KwEEBsaC6gIAgJ/BHwjAEGwAmsiCCQAAkACQCACRSADRXINACAAKAJAIgkgBEVyRQRAIAQtAABFDQECQAJAAkACQCABDgMAAQIDCyACKwMAIQogAisDGCELIAIrAxAhDCAIIAIrAwg5AzAgCCAMOQMoIAggCzkDICAIIAo5AxggCCAENgIQIABB9KMEIAhBEGoQHgwECyACKwMQIQsgAisDACEKIAggAisDCDkDUCAIIAsgCqE5A1ggCCAKOQNIIAggBDYCQCAAQdqjBCAIQUBrEB4MAwsgCCAENgJwIABBgDQgCEHwAGoQHkEAIQQDQCADIARGBEAgAEGSgAUQGxoMBAUgAiAEQQR0aiIBKwMAIQogCCABKwMIOQNoIAggCjkDYCAAQbCGASAIQeAAahAeIARBAWohBAwBCwALAAsgCEE7NgIEIAhBgboBNgIAQajzCCgCAEHmvAQgCBAfGhA8AAsgBEUgCUEBR3JFBEAgBC0AAEUNASABRQRAIAIrAwAhCiACKwMYIQsgAisDECEMIAIrAwghDSAIIAU2AqQBIAggBDYCoAEgCCANOQOYASAIIAw5A5ABIAggCzkDiAEgCCAKOQOAASAAQdPvAyAIQYABahAeDAILIAhBxgA2ArQBIAhBgboBNgKwAUGo8wgoAgBB5rwEIAhBsAFqEB8aEDwACyAJQX5xQQJHDQAgAUEDTw0BIAAgAUECdEH0wAhqKAIAEBsaAkAgB0UNACAHLQAARQ0AIABBycIDEBsaIAAgBxC2CCAAQaHEAxAbGgsCQCAERQ0AIAQtAABFDQAgAEHRwQMQGxogACAEELYIIABBocQDEBsaCwJAIAZFDQAgBi0AAEUNACAAQePAAxAbGiAAIAYQiAEgAEGhxAMQGxoLAkAgBUUNACAFLQAARQ0AIABB8cEDEBsaIAAgBRCIASAAQaHEAxAbGgsgAEGbxAMQGxogAEH3wAMQGxogAisDACEKAkACQAJAAkAgAUEBaw4CAgEACyACKwMYIQsgAisDECEMIAggAisDCDkD+AEgCCAMOQPwASAIIAs5A+gBIAggCjkD4AEgAEGchgEgCEHgAWoQHgwCCyAIIAIrAwg5A5gCIAggCjkDkAIgAEGxhgEgCEGQAmoQHkEBIQQDQCADIARGDQIgAiAEQQR0aiIBKwMAIQogCCABKwMIOQOIAiAIIAo5A4ACIABBpYYBIAhBgAJqEB4gBEEBaiEEDAALAAsgAisDCCELIAIrAxAhDCAIIAo5A8ABIAggDCAKoTkD0AEgCCALOQPIASAAQaGGASAIQcABahAeCyAAKAJAQQNGBEAgAEHa0QQQGxoMAQsgAEGf0wQQGxoLIAhBsAJqJAAPCyAIQdUANgKkAiAIQYG6ATYCoAJBqPMIKAIAQea8BCAIQaACahAfGhA8AAsLAEGA4QpBAjYCAAs9AQF/IwBBEGsiAyQAIAMgATkDACAAQdOFASADEI4BIAAQjAYgAEEgENkBIABBlYAFIAIQugggA0EQaiQACxMAIABBn8gDIAAoAhBBOGoQuwgL/QICBX8BfCMAQTBrIgEkACABQgA3AyggAUIANwMgAkAgACgCECICKwOgASIGIAIoAgxBA3RB0KEKaiIDKwMAoZlE/Knx0k1iQD9mBH8gAyAGOQMAIAFBIGoiAkGFqgMQ8gEgASAAKAIQKwOgATkDECACQYyGASABQRBqEI4BIAIQjAYgAkEpENkBIABBjcgDIAIQwQEQwAMgACgCEAUgAgsoAqgBIgRFDQADQCAEKAIAIgNFDQEgBEEEaiEEIANB4awBEGINACADQfykARBiDQAgA0Hu9wAQYg0AIAFBIGogAxDyAQNAIAMtAAAgA0EBaiICIQMNAAsgAi0AAARAIAFBIGpBKBDZAUGVgAUhAwNAIAItAAAEQCABIAI2AgQgASADNgIAIAFBIGpB0TIgARCOAQNAIAItAAAgAkEBaiECDQALQdieAyEDDAEFIAFBIGpBKRDZAQsLCyAAQY3IAyABQSBqEMEBEMADDAALAAsgAUEgahBcIAFBMGokAAtrAQJ/IwBBEGsiAyQAIANCADcDCCADQgA3AwADQAJAIAItAAAiBEHcAEcEQCAEDQEgACABIAMQwQEQcSADEFwgA0EQaiQADwsgA0HcABDZASACLQAAIQQLIAMgBMAQ2QEgAkEBaiECDAALAAuSAgEFfyAAEIgFIQMgABAlIQECQAJAAkADQCABIgJFDQEgAyABQQFrIgFqLQAAQS5HDQALIAAQJSEBA0AgAUEBayEFIAEgAkcEQCADIAVqLQAAQTBHDQILAkAgABAoBEAgAC0ADyIERQ0EIAAgBEEBazoADwwBCyAAIAAoAgRBAWs2AgQLIAEgAkcgBSEBDQALIAAQJSIBQQJJDQAgASADaiIBQQJrIgItAABBLUcNACABQQFrLQAAQTBHDQAgAkEwOgAAIAAQKARAIAAtAA8iAUUNAyAAIAFBAWs6AA8PCyAAIAAoAgRBAWs2AgQLDwtBjY4DQZ38AEGSA0GWKxAAAAtBjY4DQZ38AEGoA0GWKxAAAAvHAQEDfyMAQRBrIgIkACABQVBBACABKAIAQQNxQQJHG2oiAUFQQQAgASgCAEEDcSIDQQJHG2ooAighBCABQTBBACADQQNHG2ooAighAyACIAEpAwg3AwggAiABKQMANwMAAkAgACADIAQgAhDZAkUNACAAEDkgAEYEQCAALQAYQSBxBEAgARDFCwsgACABEM4HIAEQsgcgAEECIAEpAwgQvwYLIAAgAUEPQQBBABDIAw0AIAAQOSAARgRAIAEQGAsLIAJBEGokAAsaACAAIAEQrgEiASACEMEDIAAgAUEAEIoBGgtFACAAIAFBzMsDIAIrAwBEAAAAAAAAUkCjEI4DIAAgAUHMywMgAyACKwMIIgOhIANB2NgKLQAAG0QAAAAAAABSQKMQjgMLfQEDfyMAQTBrIgIkACAAECEhAyAAEC4hBAJAAkAgAwRAQX8hACAEIAEgAxCSBkF/Rw0BDAILIAIgACkDCDcDACACQRBqIgNBHkHLzgEgAhCmARpBfyEAIAEgAyAEKAJMKAIEKAIEEQAAQX9GDQELQQAhAAsgAkEwaiQAIAALzQQBBn8jAEEwayIHJAAgBEUEQCADQQAQ6AIhCQsgA0EAQYABIAMoAgARAwAhCAJAAkADQCAIBEACQAJAIAgoAgwiBgRAIAYtAAANAQsgCC0AFg0AIAlFDQEgCSAIQQQgCSgCABEDACIGRQ0FIAYoAgwiCwRAIAstAAANAQsgBi0AFg0BCwJAIApFBEAgByAFKQIINwMYIAcgBSkCADcDEEF/IQYgACABIAdBEGoQ2AJBf0YNBSABIAIgACgCTCgCBCgCBBEAAEF/Rg0FIAFBjsgBIAAoAkwoAgQoAgQRAABBf0YNBSAFIAUoAgxBAWo2AgwMAQtBfyEGIAFBx+oEIAAoAkwoAgQoAgQRAABBf0YNBCAHIAUpAgg3AyggByAFKQIANwMgIAAgASAHQSBqENgCQX9GDQQLIAAgASAIKAIIQQEQvQJBf0YNAyABQcTfASAAKAJMKAIEKAIEEQAAQX9GDQMgACABIAgoAgxBARC9AkF/Rg0DIApBAWohCgsgAyAIQQggAygCABEDACEIDAELCwJAIApBAEoEQEF/IQYgBSAFKAIMQQFrNgIMIApBAUcEQCABQZKABSAAKAJMKAIEKAIEEQAAQX9GDQMgByAFKQIINwMIIAcgBSkCADcDACAAIAEgBxDYAkF/Rg0DC0F/QQAgAUHS1AQgACgCTCgCBCgCBBEAAEF/RiIAGyEGIAQNAiAARQ0BDAILQQAhBiAEDQELIAMgCRDoAhpBACEGCyAHQTBqJAAgBg8LQerrAEGrvAFBkwJB5iMQAAALHgAgACABIAAgAhCuASICQQEQvQIgACACQQAQigEaCxcAIAAoAgAQGCAAKAIEEBggACgCCBAYC6UhAgl/A3wjAEHQAmsiBiQAAn8gACACENQJQecHRgRAIAYgAEEBIAIQogQ2AgQgBiACNgIAQc3tAyAGEDdBfwwBCyMAQRBrIgkkACABQZAmQZgCQQEQNRogASgCECAANgKQASABEDkgAUcEQCABEDlBkCZBmAJBARA1GiABEDkoAhAgADYCkAELAn8CQAJAAkAgAUGlGRAmIgJFDQAgAEEANgKkASAAIAIQ1AlB5wdHDQAgCSAAQQEgAhCiBDYCBCAJIAI2AgBBze0DIAkQNwwBCyAAKAKkASIKDQELQX8MAQtBARDaAiAAKAKsASgCAEEBcSELIwBBQGoiAiQAQQFB4AAQGiEAIAEoAhAgADYCCCABQYnjABAmIgAEQCACQgA3AzggAkIANwMwIAEQgQIhBCACIAA2AiQgAkG0+QBBhfoAIAQbNgIgIAJBMGohACMAQTBrIgQkACAEIAJBIGoiBTYCDCAEIAU2AiwgBCAFNgIQAkACQAJAAkACQAJAQQBBAEGnCCAFEGMiB0EASA0AIAdBAWohBQJAIAAQTiAAECVrIgggB0sNACAFIAhrIQggABAoBEBBASEDIAhBAUYNAQsgACAIENIJQQAhAwsgBEIANwMYIARCADcDECADIAdBEE9xDQEgBEEQaiEIIAcgAwR/IAgFIAAQeQsgBUGnCCAEKAIsEGMiBUcgBUEATnENAiAFQQBMDQAgABAoBEAgBUGAAk8NBCADBEAgABB5IARBEGogBRAgGgsgACAALQAPIAVqOgAPIAAQJUEQSQ0BQYm0A0Gd/ABB6gFBph8QAAALIAMNBCAAIAAoAgQgBWo2AgQLIARBMGokAAwEC0G8pANBnfwAQd0BQaYfEAAAC0HLnANBnfwAQeIBQaYfEAAAC0HwzAFBnfwAQeUBQaYfEAAAC0HWnQFBnfwAQewBQaYfEAAACwJAIAAQKARAIAAQJUEPRg0BCyAAECUgABBOTwRAIABBARDSCQsgABAlIQMgABAoBEAgACADakEAOgAAIAAgAC0AD0EBajoADyAAECVBEEkNAUGJtANBnfwAQa8CQfexARAAAAsgACgCACADakEAOgAAIAAgACgCBEEBajYCBAsCQCAAECgEQCAAQQA6AA8MAQsgAEEANgIECyABIAAQKAR/IAAFIAAoAgALENYNGiAAEFwLAkAgAUGF+AAQJiIARQRAQdXXARCtBCIARQ0BCwJAAkBB4dcBQT0QtAUiA0Hh1wFHBEAgA0Hh1wFrIgNB4dcBai0AAEUNAQtBkIYLQRw2AgAMAQsgAyAAED8iBWpBAmoQTSIERQ0AIARB4dcBIAMQIBogAyAEaiIHQT06AAAgB0EBaiAAIAVBAWoQIBoCQAJAAkACQEGghgsoAgAiAEUEQEEAIQAMAQsgACgCACIFDQELQQAhAwwBCyADQQFqIQdBACEDA0AgBCAFIAcQ6QFFBEAgACgCACAAIAQ2AgAgBBDcCwwDCyADQQFqIQMgACgCBCEFIABBBGohACAFDQALQaCGCygCACEACyADQQJ0IgdBCGohBQJAAkAgAEGQiQsoAgAiCEYEQCAIIAUQZiIADQEMAgsgBRBNIgBFDQEgAwRAIABBoIYLKAIAIAcQIBoLQZCJCygCABAYCyAAIANBAnRqIgMgBDYCACADQQA2AgRBoIYLIAA2AgBBkIkLIAA2AgAgBARAQQAgBBDcCwsMAQsgBBAYCwsLQQEhAAJAIAEgAUEAQdohQQAQIkHY8AEQjQEiA0H3igMQL0UNACADQbbuAhAvRQ0AIANBn+8CEC9FDQAgA0GUiwMQL0UNACADQf+KAxAvRQ0AIANBiosDEC9FDQAgA0GzkwMQL0UNAEECIQAgA0HJmwIQL0UNACADQciKAhAvRQ0AQQAhACADQdjwARAvRQ0AIANB9+cBEC9FDQAgAiADNgIQQc7WBCACQRBqECoLIAEoAhAgADoAcwJAQZDYCigCAA0AQYjYCiABQaH4ABAmIgA2AgAgAA0AQYjYCkGE2AooAgA2AgALIAEgAUEAQYDsAEEAECJEAAAAAAAAAABEAAAAAAAAAAAQTyEMIAEoAhAoAgggDDkDAAJ/QQAgAUHANxAmIgBFDQAaQQEgAEGwzwEQRQ0AGkECIABB2c4BEEUNABpBA0EAIABBl9EBEEUbCyEAIAEoAhAgAEEFbCAAQQJ0IAsbNgJ0IAIgASABQQBBrdsAQQAQIkQAAAAAAADQP0R7FK5H4XqUPxBPIgw5AzAgASgCEAJ/IAxEAAAAAAAAUkCiIgxEAAAAAAAA4D9EAAAAAAAA4L8gDEQAAAAAAAAAAGYboCIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAs2AvgBAkAgASABQQBBpdsAQQAQIkEAEHoiAwRAIAIgAkEwajYCAAJAAkAgA0HtgwEgAhBRRQRARAAAAAAAAOA/IQwMAQtEexSuR+F6lD8hDCACKwMwIg1EexSuR+F6lD9jRQ0BCyACIAw5AzAgDCENCyABKAIQIQAgA0HIDhCyBUUNASAAQQE6AJQCDAELIAJCgICAgICAgPA/NwMwIAEoAhAhAEQAAAAAAADgPyENCyAAAn8gDUQAAAAAAABSQKIiDEQAAAAAAADgP0QAAAAAAADgvyAMRAAAAAAAAAAAZhugIgyZRAAAAAAAAOBBYwRAIAyqDAELQYCAgIB4CzYC/AEgASABQQBBlS5BABAiQQBBABBhIQAgASgCEEH/ASAAIABB/wFOGzoA8QEgASABQQBBiy9BABAiQQAQekGwmApBwJgKENUGIQAgASgCECAANgL0AQJAIAFB0N4AECYiA0UEQCABKAIQIQAMAQsgA0Hk3QAQRQRAIAEoAhAiACgCCEEENgJUDAELIANBhCkQRQRAIAEoAhAiACgCCEEDNgJUDAELIANBzaQBEEUEQCABKAIQIgAoAghBBTYCVAwBCyADQcbuABBFBEAgASgCECIAKAIIQQI2AlQMAQsgASgCECEAIAMQkQIiDEQAAAAAAAAAAGRFDQAgACgCCCIDIAw5AxAgA0EBNgJUCyABQeSIASAAKAIIQUBrENMJIQAgASgCECgCCCIDIAA6AFAgAUHnnQEgA0EwahDTCRogAUGlOBAmEGkhACABKAIQKAIIIAA6AFICQAJ/IAFB4ZEBECYiAARAIAAQkAJB2gBGDAELIAFBneMAECYiAARAIAAtAABB3wFxQcwARgwBCyABQYiWARAmIgBFDQEgABBpCyEAIAEoAhAoAgggADoAUQtBqNgKIAFBh/QAECZBkJgKQaCYChDVBjYCAEGs2AogAUHokQEQJhBpOgAAQcDYCkEANgIAQcTYCkEANgIAIAEoAhAoAghCADcDGAJAAkAgAUHg9QAQJiIABEAgAC0AAA0BCyABQZviABAmIgBFDQEgAC0AAEUNAQsgASgCECgCCCAAEJECOQMYCyABEJUEQcjYCkKb0t2ahPeFz8cANwMAQdzYCiABQQBB6v4AQQAQIjYCAEHo2AogAUEAQbOaAUEAECI2AgBB7NgKIAFBAEHw5ABBABAiNgIAQfDYCiABQQFBsSFBABAiNgIAQfTYCiABQQFB9fcAQQAQIjYCAEH42AogAUEBQYKWAUEAECI2AgBB/NgKIAFBAUGON0EAECI2AgBBgNkKIAFBAUGCN0EAECI2AgBBnNkKIAFBAUGomQFBABAiNgIAQYTZCiABQQFBm4cBQQAQIjYCAEGI2QogAUEBQaaYAUEAECI2AgBBjNkKIAFBAUHvNkEAECI2AgBBkNkKIAFBAUHV8ABBABAiIgA2AgAgAEUEQEGQ2QogAUEBQdXwAEG00AEQIjYCAAtBlNkKIAFBAUG08ABBABAiNgIAQaDZCiABQQFBlS5BABAiNgIAQdzZCiABQQFB3vcAQQAQIjYCAEGs2QogAUEBQer+AEEAECI2AgBBpNkKIAFBAUG2MUEAECI2AgBBqNkKIAFBAUH1L0EAECI2AgBBtNkKIAFBAUH4FkEAECI2AgBBsNkKIAFBAUGd4wBBABAiNgIAQbjZCiABQQFBpuIAQQAQIjYCAEG82QogAUEBQa+HAUEAECI2AgBBwNkKIAFBAUGVnAFBABAiNgIAQcTZCiABQQFBtStBABAiNgIAQZjZCiABQQFB+A5BABAiNgIAQcjZCiABQQFB0DdBABAiNgIAQczZCiABQQFB2dgAQQAQIjYCAEHQ2QogAUEBQZAgQQAQIjYCAEHU2QogAUEBQcMxQQAQIjYCAEHY2QogAUEBQfkIQQAQIjYCAEHg2QogAUEBQbOaAUEAECI2AgBB5NkKIAFBAkGpIUEAECI2AgBB7NkKIAFBAkGON0EAECI2AgBB8NkKIAFBAkGCN0EAECI2AgBB9NkKIAFBAkGbhwFBABAiNgIAQfjZCiABQQJBppgBQQAQIjYCAEH82QogAUECQe82QQAQIjYCAEGA2gogAUECQdXwAEEAECI2AgBBhNoKIAFBAkG08ABBABAiNgIAQajaCiABQQJBuSVBABAiNgIAQYjaCiABQQJBzDdBABAiNgIAQbTaCiABQQJBxfAAQQAQIjYCAEG42gogAUECQbvwAEEAECI2AgBBvNoKIAFBAkGWhwFBABAiNgIAQcDaCiABQQJBoZgBQQAQIjYCAEHE2gogAUECQeo2QQAQIjYCAEHI2gogAUECQYGhAUEAECI2AgBBzNoKIAFBAkHVmgFBABAiNgIAQejZCiABQQJBtuYAQQAQIjYCAEGU2gogAUECQZUuQQAQIjYCAEGM2gogAUECQaiZAUEAECI2AgBBkNoKIAFBAkH0kQFBABAiNgIAQZjaCiABQQJBjIcBQQAQIjYCAEGc2gogAUECQd4fQQAQIjYCAEGg2gogAUECQdA3QQAQIjYCAEGk2gogAUECQZAgQQAQIjYCAEHQ2gogAUECQcnaAEEAECI2AgBB1NoKIAFBAkHS2gBBABAiNgIAQdjaCiABQQJB3vcAQQAQIjYCAEEAIQAjAEEgayIDJAACQAJAIAFBjKMBECYiBARAIAQtAAANAQsgAUG4wgEQJiIERQ0BIAQtAABFDQELIARB+AAQjgoiAA0AIAMgARAhNgIQQYv1AyADQRBqECogAyAENgIAQaD7BCADEH9BACEACyADQSBqJAAgASgCECgCCCAANgJYAkAgAUHopgEQJiIARQ0AIAAtAABFDQAgACABEIABIQAgASgCECgCCCAANgJcCyACQUBrJAAgASgCECgCCCEAIAEQOSgCECAANgIIAkAgCigCACIARQ0AIAEgABEBACAKKAIEIgBFDQAgASgCECAANgKUAQtBABDaAkEACyEAIAlBEGokAEF/IABBf0YNABoCQCABKAIQIgAoAggtAFFBAUYEQCAAKwMYIQwgACsDECENIAArAyghDiAGIAArAyAQMTkDKCAGIA4QMTkDICAGIA0QMTkDGCAGIAwQMTkDECAGQdAAakGAAkG7hgEgBkEQahCmARoMAQsgACsDECEMIAArAxghDSAAKwMgIQ4gBiAAKwMoEDE5A0ggBkFAayAOEDE5AwAgBiANEDE5AzggBiAMEDE5AzAgBkHQAGpBgAJBu4YBIAZBMGoQpgEaCyABQZu/ASAGQdAAahCPB0EACyAGQdACaiQAC50FAQ1/QQBBAUHV8ABBtNABECIaENQIIgBBADYCJCAAQaDTCjYCICAAQZ8CNgIQIABByJ0KNgIAAkAgACICKAIgIgVFDQADQCAFKAIAIgBFDQECQCAALQAAQecARw0AIABBgA4QsgVFDQAgBSgCBCEDIwBBEGsiByQAIAMoAgAhAAJAQQFBDBBHIgQEQCAEQQA2AgQgBCAAEGQ2AgggBCACKAJoNgIAIAIgBDYCaCADKAIEIQYDQEEAIQggBigCBCILBEADQCALIAhBFGxqIgkoAgQiAwRAIAYoAgAhACAJKAIIIQojAEEwayIBJAAgAxClASIMBEAgAUEoaiADQToQ0AEgAiAAQQJ0akFAayEDA0ACQCADKAIAIgBFDQAgAUEgaiAAKAIEQToQ0AEgASABKQIoNwMYIAEgASkCIDcDECABQRhqIAFBEGoQ8wpBAEwNACADKAIAIQMMAQsLA0ACQCADKAIAIgBFDQAgAUEgaiAAKAIEQToQ0AEgASABKQIoNwMIIAEgASkCIDcDACABQQhqIAEQlAVFDQAgCiADKAIAIgAoAghODQAgACEDDAELC0EBQRQQGiIAIAMoAgA2AgAgAyAANgIAIAAgCTYCECAAIAQ2AgwgACAKNgIIIAAgDDYCBAsgAUEwaiQAIAhBAWohCAwBCwsgBkEIaiEGDAELCyAHQRBqJAAMAQsgB0EMNgIAQajzCCgCAEGD5wMgBxAfGhAsAAsLIAVBCGohBQwACwALIAJBADoALCACQQJBiRlBABDSAyIABEAgAiAAKAIQKAIMNgKMAQsgAkEjNgKEASACQSQ2AoABIAJBJTYCfCACQX82AnggAkKAgICAgAQ3A3AgAiACQfAAakG06wkoAgAQkgE2AogBIAIL4gEBBH9BjN0KKAIAIgEEQCABEJkBGkGM3QpBADYCAAsgACgCOCEBA0AgAQRAIAEoAgQgARAYIQEMAQsLIAAoAmghAQNAIAEEQCABKAIAIAEoAgQQGCABKAIIEBggARAYIQEMAQsLIAAQlgQgACgCKBAYIAAoAjAQGCAAKAKIARCZARogAEFAayEEA0AgA0EFRwRAIAQgA0ECdGooAgAhAQNAIAEEQCABKAIAIAEoAgQQGCABEBghAQwBCwsgA0EBaiEDDAELCyAAKAKsAhAYIAAQGEGU2AooAgAaQfjaCigCABoLEgAgACgCuAEiAARAIAAQiAQLC8cBAQZ/IwBBEGsiAyQAIAFBUEEAIAEoAgBBA3EiBEECRxtqIgUoAighBiABQTBBACAEQQNHG2oiBCgCKCEHA0ACQCAARQ0AIAMgASkDCDcDCCADIAEpAwA3AwAgACAHIAYgAxDZAg0AIAAgBxDlASECIAAoAjQgAkEgaiAFENgEIAAoAjggAkEYaiAFENgEIAAgBhDlASECIAAoAjQgAkEcaiAEENgEIAAoAjggAkEUaiAEENgEIAAoAkQhAAwBCwsgA0EQaiQAC7kBAQN/IwBBMGsiAyQAAkAgAigCACIERQ0AIAQtAABFDQAgACgCPCEEIAAoAhAiBQRAIAUoApgBRQ0BCwJAIAAtAJkBQSBxBEAgAyABKQMINwMoIAMgASkDADcDIAwBCyADIAEpAwg3AxggAyABKQMANwMQIANBIGogACADQRBqEJ0GCyAERQ0AIAQoAlgiAUUNACADIAMpAyg3AwggAyADKQMgNwMAIAAgAyACIAERBQALIANBMGokAAsiAQF/AkAgACgCPCIBRQ0AIAEoAjAiAUUNACAAIAERAQALCyIBAX8CQCAAKAI8IgFFDQAgASgCLCIBRQ0AIAAgAREBAAsLIgEBfwJAIAAoAjwiAUUNACABKAIoIgFFDQAgACABEQEACwt7AQZ8IAErA5AEIQcgASsDiAQhCCABKwPgAiEEIAErA4AEIQMgASsD+AMhBQJ8IAEoAugCBEAgBSACKwMAoCEGIAMgAisDCKCaDAELIAMgAisDCKAhBiAFIAIrAwCgCyEDIAAgBCAHoiAGojkDCCAAIAQgCKIgA6I5AwALgQEBAX8CQCABQdzuABBFDQAgASEDA0AgAywAACECIANBAWohAyACQTprQXVLDQALIAJFBEAgARCQAg8LQX8hAiAAKAKsAkUNAEEBIQMDfyADIAAoArACSg0BIAEgACgCrAIgA0ECdGooAgAQRQR/IAMFIANBAWohAwwBCwshAgsgAgvuMwMMfwp8AX4jAEGABWsiAyQAQYzYCi0AAARAEK8BCwJAAkAgAUGQJkEAQQEQNQRAIAEoAhAoAggNAQtBxfwEQQAQN0F/IQJBjNgKLQAARQ0BQajzCCgCACIGEOwBIAMQ1AE3A8AEIANBwARqEOoBIgcoAhQhCCAHKAIQIQUgBygCDCEEIAcoAgghACADIAcoAgA2AiggAyAANgIkIAMgBDYCICADQeggNgIUIANBo7gBNgIQIAMgBUEBajYCHCADIAhB7A5qNgIYIAZBuMkDIANBEGoQHxogARAhIQAgAxCMATkDCCADIAA2AgAgBkGcnQMgAxAyQQogBhCpARogBhDrAQwBCyABEBwhBwJAA0AgBwRAIAcoAhAiAiACKwMQIg4gAisDWKE5AzAgAiAOIAIrA2CgOQNAIAIgAisDGCITIAIrA1BEAAAAAAAA4D+iIg6hOQM4IAIgEyAOoDkDSCABIAcQLSEGA0AgBgRAIAYoAhAoAggiCARAIAgoAgRFDQUgA0HABGogCCgCACIEQTAQIBogA0HwA2oiAiAEQTAQIBogA0GgBGogAhDdCCADKwO4BCERIAMrA7AEIRAgAysDqAQhDyADKwOgBCESQQAhAgNAIAgoAgQgAksEQCACBEAgA0HABGogCCgCACACQTBsaiIFQTAQIBogA0HAA2oiBCAFQTAQIBogA0GgBGogBBDdCCADKwOgBCEUIAMrA6gEIRMgAysDsAQhDiARIAMrA7gEECMhESAQIA4QIyEQIA8gExApIQ8gEiAUECkhEgsgAygCyAQEQCADIAMpA9gENwO4AyADIAMpA9AENwOwAyADIAMoAsAEIgQpAwg3A6gDIAMgBCkDADcDoAMgA0GgBGogA0GwA2ogA0GgA2oQzAMgAysDoAQhFCADKwOoBCETIAMrA7AEIQ4gESADKwO4BBAjIREgECAOECMhECAPIBMQKSEPIBIgFBApIRILIAMoAswEBEAgAyADKQPoBDcDmAMgAyADKQPgBDcDkAMgAyADKALABCADKALEBEEEdGpBEGsiBCkDCDcDiAMgAyAEKQMANwOAAyADQaAEaiADQZADaiADQYADahDMAyADKwOgBCEUIAMrA6gEIRMgAysDsAQhDiARIAMrA7gEECMhESAQIA4QIyEQIA8gExApIQ8gEiAUECkhEgsgAkEBaiECDAELCyAIIBE5AyAgCCAQOQMYIAggDzkDECAIIBI5AwgLIAEgBhAwIQYMAQsLIAEgBxAdIQcMAQsLIABBADoAnQIgACABNgKgAQJAIAFB8OQAECYiAkUNACADIANBoARqNgL0AiADIANBwARqNgLwAiACQdmDASADQfACahBRIgJBAEwNACAAIAMrA8AERAAAAAAAAFJAoiIOOQPAASAAIA45A8gBIAJBAUcEQCAAIAMrA6AERAAAAAAAAFJAojkDyAELIABBAToAnQILIABBADoAnAICQCABQaOwARAmIgJFDQAgAyADQaAEajYC5AIgAyADQcAEajYC4AIgAkHZgwEgA0HgAmoQUSICQQBMDQAgACADKwPABEQAAAAAAABSQKIiDjkD0AEgACAOOQPYASACQQFHBEAgACADKwOgBEQAAAAAAABSQKI5A9gBCyAAQQE6AJwCCyAAQQA6AJ4CIAAgASgCECgCCCICKQMwNwPgASAAIAIpAzg3A+gBAkAgASgCECgCCCICKwMwRPyp8dJNYlA/ZEUNACACKwM4RPyp8dJNYlA/ZEUNACAAQQE6AJ4CCyACLQBRIQIgAEGb1gE2ArwBIABB2gBBACACGzYCmAICQCABQcg3ECYiAkUNACACLQAARQ0AIAAgAjYCvAELIAAgASgCECICKQMQNwP4ASAAIAIpAyg3A5ACIAAgAikDIDcDiAIgACACKQMYNwOAAkHg2AogAUEAQfUvQQAQIjYCAEHk2AogAUEAQd73AEEAECI2AgAgAEEAQYjZCigCAEGD6gAQjQE2ArgCQQBBhNkKKAIARAAAAAAAACxARAAAAAAAAPA/EE8hDiAAQbydCjYCyAIgACAOOQPAAiAAIAEQITYCtAEgACgCqAIQGCAAQQA2AqgCIAAoAqwCEBggAEEANgKsAiAAKAK0AhAYIABBADYCtAICQAJAIAFB2CkQJiIFBEAgACABQZbbABAmIgJByssDIAIbNgKgAiAAIAFBidsAECYiAkHYngMgAhsiBDYCpAIgACgCoAIiAiAEEPkCIAJqIgJBACACLQAAGyICBEAgAyACLAAANgLQAkGQ4QQgA0HQAmoQKiAAQZWABTYCpAILIAAgBRBkNgKoAiADQgA3A9AEIANCADcDyAQgA0IANwPABCADQcAEakEEECchAiADKALABCACQQJ0aiADKALUBDYCACAAKAKoAiECA0AgAiAAKAKgAhCxBSICBEAgAyACNgLUBCADQcAEakEEECchAiADKALABCACQQJ0aiADKALUBDYCAEEAIQIMAQsLIAMoAsgEIgJBAWsiBUEASA0CIAJBAk8EQCADQQA2AtQEIANBwARqIgRBBBAnIQIgAygCwAQgAkECdGogAygC1AQ2AgAgBCAAQawCakEAQQQQxgELQQAhAgNAIAMoAsgEIAJLBEAgAyADKQPIBDcDuAIgAyADKQPABDcDsAIgA0GwAmogAhAZIQgCQAJAAkAgAygC0AQiBA4CAgABCyADKALABCAIQQJ0aigCABAYDAELIAMoAsAE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AAsgAgvUAQEGfyAAKAIUIAAoAgxBAnRqKAIAKAIcIAAoAixqIQEgACgCJCEEIAAoAlAhAgNAIAIgBEkEQCACLQAAIgMEfyADQaCABWotAAAFQQELIQMgAUEBdEGgggVqLwEABEAgACACNgJEIAAgATYCQAsDQAJAA0AgASABQQF0IgVBgIgFai4BACADakEBdCIGQeCDBWouAQBGDQEgBUHgiQVqLgEAIgFB3QBIDQALIANBwIsFai0AACEDDAELCyACQQFqIQIgBkGAjAVqLgEAIQEMAQsLIAELvAICAX4CfyAABEAgACAAED8iBEF4cWohAyAErSECA0AgAkKV08fetfKp0kZ+IQIgACADRkUEQCACIAApAABCldPH3rXyqdJGfiICQi+IIAKFQpXTx9618qnSRn6FIQIgAEEIaiEADAELCyACQoCAgICAgICAAUIAIAEbhSECAkACQAJAAkACQAJAAkACQCAEQQdxQQFrDgcGBQQDAgEABwsgAzEABkIwhiAChSECCyADMQAFQiiGIAKFIQILIAMxAARCIIYgAoUhAgsgAzEAA0IYhiAChSECCyADMQACQhCGIAKFIQILIAMxAAFCCIYgAoUhAgsgAiADMQAAhSECCyACQpXTx9618qnSRn4iAkIviCAChUKV08fetfKp0kZ+IgJCL4ggAoWnDwtB9NIBQcG5AUGYAUGb+QAQAAALJAAgACABIAIQ4wkgACgCTCIAKAIIIAEgAiAAKAIAKAIIESEAC9EDAQF/AkAgASACRgRAIANBADYCAAwBCwJAAkAgACABIAIQ4wJBCWsiB0EXS0EBIAd0QZOAgARxRXINAANAIAAgASAAKAJAaiIBIAIQ4wJBCWsiB0EXTQRAQQEgB3RBk4CABHENAQsLIAEgAkYEQCADQQA2AgAMAwsgAyABNgIAAkACQAJAA0ACQCAAIAEgAhDjAiIHQQlrQQJJDQAgB0E9Rg0CIAdBDUYgB0EgRnINACAHQX9GDQUgASAAKAJAaiEBDAELCyAEIAE2AgADQCAAIAEgACgCQGoiASACEOMCIgRBCWsiB0EXSw0CQQEgB3RBk4CABHENAAsMAQsgBCABNgIADAELIARBPUcNAQsgASADKAIARg0AA0AgACABIAAoAkBqIgEgAhDjAiIDQQlrQQJJDQACQCADQSBrDgMBAgMACyAD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BEAgASAAKAIMTQRAQQAPCyABrSACrX5CIIhQRQRAQT0PCyAAKAIAIAEgAmwQZiIERQRAQTAPCyAEIAAoAgwiAyACbGpBACABIANrIAJsEDYaIAMgACgCBCIFIAAoAghqSQRAIAQgASADIAVrIgNrIgYgAmxqIAQgAiAFbGogAiADbBC2ARogACAGNgIECyAAIAE2AgwgACAENgIAQQAPC0G90gFBtLcBQeEAQY6JARAAAAs6AQF/IABB8JEJKAIAIgE2AgAgACABQQxrKAIAakH8kQkoAgA2AgAgAEEEahCNBxogAEE4ahDCCyAACxgAIABBhI8JNgIAIABBIGoQNBogABCVBwsdACMAQRBrIgMkACAAIAEgAhCvCyADQRBqJAAgAAuZAQECfwJAIAAQLiIEIAAoAgBBA3EgAUEAECIiAw0AAkAgBEGVgAUQywMiA0GVgAVHDQAgAxB1RQ0AIAQgACgCAEEDcSABQZWABRDoAyEDDAELIAQgACgCAEEDcSABQZWABRAiIQMLAkACQCACRQ0AIAQgAhDLAyIBIAJHDQAgARB1RQ0AIAAgAyACEKoEDAELIAAgAyACEHELC64BAQZ/IwBBEGsiAiQAIAJBCGoiAyAAEKkFGgJAIAMtAABFDQAgAkEEaiIDIAAgACgCAEEMaygCAGoQUyADELkLIQQgAxBQIAIgABC4CyEFIAAgACgCAEEMaygCAGoiBhC3CyEHIAIgBCAFKAIAIAYgByABIAQoAgAoAiARMwA2AgQgAxCnBUUNACAAIAAoAgBBDGsoAgBqQQUQqgULIAJBCGoQqAUgAkEQaiQAIAALDAAgAEEEahDCCyAACygBAn8jAEEQayICJAAgASgCACAAKAIASCEDIAJBEGokACABIAAgAxsLEAAgACABNwMIIABCADcDAAsCAAsUACAAQZSOCTYCACAAQQRqEFAgAAvzAwICfgV/IwBBIGsiBSQAIAFC////////P4MhAgJ+IAFCMIhC//8BgyIDpyIEQYH4AGtB/Q9NBEAgAkIEhiAAQjyIhCECIARBgPgAa60hAwJAIABC//////////8PgyIAQoGAgICAgICACFoEQCACQgF8IQIMAQsgAEKAgICAgICAgAhSDQAgAkIBgyACfCECC0IAIAIgAkL/////////B1YiBBshACAErSADfAwBCyAAIAKE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EGsiAyQAIAMgAToADwJAAkAgACgCECICBH8gAgUgABClBwRAQX8hAgwDCyAAKAIQCyAAKAIUIgRGDQAgAUH/AXEiAiAAKAJQRg0AIAAgBEEBajYCFCAEIAE6AAAMAQsgACADQQ9qQQEgACgCJBEDAEEBRwRAQX8hAgwBCyADLQAPIQILIANBEGokACACC1kBAX8gACAAKAJIIgFBAWsgAXI2AkggACgCACIBQQhxBEAgACABQSByNgIAQX8PCyAAQgA3AgQgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCEEEAC5QDAgN+An8CQCAAvSICQjSIp0H/D3EiBEH/D0cNACAARAAAAAAAgFZAoiIAIACjDwsgAkIBhiIBQoCAgICAgMDWgH9YBEAgAEQAAAAAAAAAAKIgACABQoCAgICAgMDWgH9RGw8LAn4gBEUEQEEAIQQgAkIMhiIBQgBZBEADQCAEQQFrIQQgAUIBhiIBQgBZDQALCyACQQEgBGuthgwBCyACQv////////8Hg0KAgICAgICACIQLIQEgBEGFCEoEQANAAkAgAUKAgICAgICgC30iA0IAUw0AIAMiAUIAUg0AIABEAAAAAAAAAACiDwsgAUIBhiEBIARBAWsiBEGFCEoNAAtBhQghBAsCQCABQoCAgICAgKALfSIDQgBTDQAgAyIBQgBSDQAgAEQAAAAAAAAAAKIPCyABQv////////8HWARAA0AgBEEBayEEIAFCgICAgICAgARUIAFCAYYhAQ0ACwsgAkKAgICAgICAgIB/gyABQoCAgICAgIAIfSAErUI0hoQgAUEBIARrrYggBEEAShuEvwviAgEFfwJAAkACQCACKAJMQQBOBEAgAUECSA0BDAILQQEhBiABQQFKDQELIAIgAigCSCICQQFrIAJyNgJIIAFBAUcNASAAQQA6AAAgAA8LIAFBAWshBCAAIQECQANAAkACQAJAIAIoAgQiAyACKAIIIgVGDQACfyADQQogBSADaxD7AiIHBEAgByACKAIEIgNrQQFqDAELIAIoAgggAigCBCIDawshBSABIAMgBSAEIAQgBUsbIgMQIBogAiACKAIEIANqIgU2AgQgASADaiEBIAcNAiAEIANrIgRFDQIgBSACKAIIRg0AIAIgBUEBajYCBCAFLQAAIQMMAQsgAhC9BSIDQQBO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AwAgA0EBaiEDDAIFIBAgNyAXIAFBA3QiGGorAwAgFCAYaisDAKKhIjc5AwAgAUEBaiEBDAELAAsACwALQcTWCigCABoCQEHnqwFB+NUKEIkBQQBIDQACQEHI1gooAgBBCkYNAEGM1gooAgAiAEGI1gooAgBGDQBBjNYKIABBAWo2AgAgAEEKOgAADAELQfjVCkEKEKQHGgsLIA0QGCAIEBhBACEBA0BBvNgKLwEAIhQgAUsEQEHQ2AorAwAhNxDVASE4IAFBA3QiACAJQaABamoiAyADKwMAIDcgOEQAAAAAAADwPyA3oSI3IDegoqCiIjc5AwAgAigCECgClAEgAGoiACA3IAArAwCgOQMAIAFBAWohAQwBCwsgBygCECIAIAAoApwBQQFqNgKcASAAKAKYASITIAtqKAIAIQ1BACEBA0AgASAURgRAQQAhAwNAIAMgFUcEQAJAIAMgDkYNAEEAIQogDSgCECgClAEgEyADQQJ0IgRqKAIAKAIQKAKUASAJQfABahDFDSE3A0AgCiAURg0BIApBA3QiASAAKAKsASIIIAtqKAIAIARqKAIAaiIRIANBA3QiEiAAKAKkASALaigCAGorAwAgCUHwAWogAWorAwAiOCA4IAAoAqABIAtqKAIAIBJqKwMAoiA3o6GiIjg5AwAgACgCqAEiEiALaigCACABaiIQIDggECsDAKA5AwAgBCAIaigCACALaigCACABaiIIKwMAITggCCARKwMAmiI5OQMAIAQgEmooAgAgAWoiASA5IDihIAErAwCgOQMAIApBAWohCgwACwALIANBAWohAwwBCwtB6NsKKAIABEBBACEBQbzYCi8BACEARAAAAAAAAAAAITgDQCAAIAFHBEAgOCAJQaABaiABQQN0aisDAJmgITggAUEBaiEBDAELCyACECEhACAJIDifOQM4IAkgADYCMCAMQdWiBCAJQTBqEDILIAUQGAwFBSAAKAKoASALaigCACABQQN0akIANwMAIAFBAWohAQwBCwALAAsgBUEBaiEFDAALAAsLQQAhAUGM2AotAAAEQEEBIAYgBkEBTBtBAWshBEG82AovAQAhBUQAAAAAAAAAACE3A0AgASAERwRAIAcoAhAiAigCmAEiCiABQQJ0IgNqKAIAIRUgAUEBaiIAIQsDQCAGIAtGBEAgACEBDAMFIAogC0EC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IDcDECAJIAIpAxg3AwgCQCACKAIIKAJYIgZFDQACQCAJKwMAIAkrAxBiDQAgCSsDCCAJKwMYYg0AIAlC/////////3c3AxggCUL/////////9/8ANwMAIAlC//////////f/ADcDCCAJQv////////93NwMQCyAGKAIIIQcDQCARIAYoAgBPDQEgC0IANwM4IAtCADcDMCALQgA3AyggC0IANwMgAkACQAJAAkACQAJAAkACQCAHKAIADhAAAAEBAgIDBAcHBQcHBwcGBwsgByAHKwMQIhwgBysDICIXoCIZOQNoIAcgBysDCCIUIAcrAxgiE6AiGjkDYCAHIBwgF6EiFzkDWCAHIBQgE6EiEzkDUCAJIAkrAwAgExApIBoQKTkDACAJIAkrAxggFxAjIBkQIzkDGCAJIAkrAwggFxApIBkQKTkDCCAJIAkrAxAgExAjIBoQIzkDEAwGCyALIAcoAgwgBygCCCAJEKQGIAcgCykDGDcDaCAHIAspAxA3A2AgByALKQMINwNYIAcgCykDADcDUAwFCyALIAcoAgwgBygCCCAJEKQGIAcgCykDGDcDaCAHIAspAxA3A2AgByALKQMINwNYIAcgCykDADcDUAwECyALIAcoAgwgBygCCCAJEKQGIAcgCykDGDcDaCAHIAspAxA3A2AgByALKQMINwNYIAcgCykDADcDUAwDCyAHQTgQxgM2AnAgBygCKBBkIQUgBygCcCICIAU2AgAgAiAHKAIYQaS/CGotAAA6ADAgCyAYOQMwIAsgEjYCICALIAsoAjhBgH9xIA5B/wBxcjYCOCANKAKIASICIAtBIGpBASACKAIAEQMAIQUgBygCcCICIAU2AgQgCyANIAIQ3wYgBysDCCETIAcoAnAiAisDKCEXIAIrAyAhFAJAAkACQAJAIAItADBB7ABrDgcAAwEDAwMCAwsgEyAUoCEWIBMhFQwCCyATIBREAAAAAAAA4D+iIhWgIRYgEyAVoSEVDAELIBMgFKEhFSATIRYLIAcrAxAhFCACKwMQIRMgByAWOQNgIAcgFTkDUCAHIBQgE6AiFDkDaCAHIBQgF6EiEzkDWCAJIAkrAxAgFRAjIBYQIzkDECAJIAkrAxggExAjIBQQIzkDGCAJIAkrAwAgFRApIBYQKTkDACAJIAkrAwggExApIBQQKTkDCCAGKAIMDQIg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IAIpAwA3A+ACIAEgBCkDQDcD2AIgASAEKQM4NwPQAiABQdADaiABQeACaiABQdACahDSBQJAIAErA4AEIAErA9ADZUUNACABKwPgAyABKwPwA2VFDQAgASsDiAQgASsD2ANlRQ0AIAErA+gDIAErA/gDZUUNAEEBIQMgBSgCKCIGQQFxBEAgBC0AUEEBcQ0BCwJAIAZBAnFFDQAgBC0AUEECcUUNACACKwMQIAIrAwChIhsgG6IgAisDGCACKwMIoSIbIBuioCAFKwMQIAUrAwChIAQrAzigIAQrAyihIhsgG6JEAAAAAAAA0D+iZSEDDAELIAUoAiAhAyAFKAIkIAEgAikDGDcDyAIgASACKQMQNwPAAiADIAFBwAJqEOUMIQYgBCgCSCEDIAQoAkwgASACKQMINwO4AiABIAIpAwA3A7ACIAMgAUGwAmoQ5QwhByAEKAJIIhFBAXQhFyAFKAIgIg5BAXQhGCARQQFrIRkgDkEBayEaQQAhA0EAIQgCQANAIAEgBiAIQQR0aiIJKQMINwOoAiABIAkpAwA3A6ACIAEgBiAIIBpqIA5vQQR0aiISKQMINwOYAiABIBIpAwA3A5ACIAFBwARqIAFBoAJqIAFBkAJqEOkMIAEgByAMQQR0aiILKQMINwOIAiABIAspAwA3A4ACIAEgByAMIBlqIBFvQQR0aiITKQMINwP4ASABIBMpAwA3A/ABIAFBsARqIAFBgAJqIAFB8AFqEOkMIAFCADcDmAQgAUIANwPoASABIAEpA8gENwPYASABIAEpA7gENwPIASABQgA3A5AEIAFCADcD4AEgASABKQPABDcD0AEgASABKQOwBDcDwAEgASsD6AEgASsD2AEiG6EgASsDwAEgASsD0AEiHKGiIAErA8gBIBuhIAErA+ABIByhoqEhHyABIBIpAwg3A7gBIAEgEikDADcDsAEgASAJKQMINwOoASABIAkpAwA3A6ABIAEgCykDCDcDmAEgASALKQMANwOQASABQbABaiABQaABaiABQZABahDoDCEVIAEgEykDCDcDiAEgASATKQMANwOAASABIAspAwg3A3ggASALKQMANwNwIAEgCSkDCDcDaCABIAkpAwA3A2AgAUGAAWogAUHwAGogAUHgAGoQ6AwhFiABIBIpAwg3A1ggASASKQMANwNQIAEgCSkDCDcDSCAB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AiAEKAIAEQAARQ0AIAIgAxC4ASACIAEgBCgCABEAAEUNACABIAIQuAEgASAAIAQoAgARAABFDQAgACABELgBCws7AQJ/IAAoAgAiAQRAIAEhAANAIAAiASgCBCIADQALIAEPCwNAIAAgACgCCCIBKAIARiABIQANAAsgAAtdAQR/IABBoM8KNgIAQej7CkEANgIAIABBBGoiAkEEaiEEIAIoAgAhAQNAIAEgBEcEQCABKAIQIgMEQCADEKUNGgsgAxAYIAEQrQEhAQwBCwsgAiACKAIEEOwHIAALHwAgAQRAIAAgASgCABDsByAAIAEoAgQQ7AcgARAYCws+AQF/IAFBgICAgARPBEAQwgQAC0H/////AyAAKAIIIAAoAgBrIgBBAXUiAiABIAEgAkkbIABB/P///wdPGwtXAQF/IANBADoAHEHIABCHASIEQQAQ+AcaIAEgBDYCACAAIAQgAygCACADKAIEEN8FQcgAEIcBIgFBABD4BxogAiABNgIAIAAgASADKAIEIAMoAgAQ3wULoQMCCH8CfCMAQRBrIgskACADKwMQIAMoAiArAxAgAysDGKAgAysDCKGiIQ8gAygCLCEMIAMoAighCCAFQQJGIQ0DQCAIIAxGBEACQCADKAI4IQwgAygCNCEIA0AgCCAMRg0BAkAgCCgCACIKKAIEIgcoAiAgAUcgBCAHRnINACAKLQAcQQFxRQ0AIAsgAUEAIAIgAiAHRiINGyICIAcgA0ECIAVBAUYgBnIiBkEBcSIOEO8HIAogCysDACIQOQMQIAogCSANGyEJAkAgAkUNACALKAIIIgdFDQAgDgRAIAohCSAQIAcrAxBjDQELIAchCQsgDyAQoCEPCyAIQQRqIQgMAAsACwUCQCAIKAIAIgooAgAiBygCICABRyAEIAdGcg0AIAotABxBAXFFDQAgCyABQQAgAiACIAdGIg4bIgIgByADQQEgBiANciIGQQFxEO8HIAogCysDACIQmjkDECALKAIIIgcgCiAJIA4bIgkgBxsgCSACGyEJIA8gEKAhDwsgCEEEaiEIDAELCyAAIAk2AgggACAPOQMAIAtBEGokAAupAgIEfwN8IAErAxAgASgCICsDECABKwMYoCABKwMIoaIhCCABKAI4IQcgASgCNCEEA0AgBCAHRgRAAkAgASgCLCEHIAEoAighBANAIAQg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NwO4BiAFIAIpAgA3A7AGIAVBsAZqIAMQGUHIAGxqKAIsQQFrQX1LDQAgAigCACAFIAIpAgg3A/gDIAUgAikCADcD8AMgBUHwA2ogAxAZQcgAbGooAjwgAigCACEAIAUgAikCCDcD6AMgBSACKQIANwPgAyAFQeADaiADEBkhAUEBa0F9TQRAIAIoAgAhBgJ/IAAgAUHIAGxqKAJAQQFGBEAgBSACKQIINwPIASAFIAIpAgA3A8ABIAYgBUHAAWogAxAZQcgAbGooAiwhACACKAIAIAUgAikCCDcDuAEgBSACKQIANwOwASAFQbABaiAEEBlByABsaiAANgIoIAIoAgAgBSACKQIINwOoASAFIAIpAgA3A6ABIAVBoAFqIAMQGUHIAGxqQX82AiwgAigCACAFIAIpAgg3A5gBIAUgAikCADcDkAEgBUGQAWogAxAZQcgAbGooAjwhACACKAIAIAUgAikCCDcDiAEgBSACKQIANwOAASAFQYABaiAEEBlByABsaiAANgIsIAIoAgAhACAFIAIpAgg3A3ggBSACKQIANwNwIAAgBUHwAGogAxAZQcgAbGooAighASAFIAIpAgg3A2ggBSACKQIANwNgIAAgBUHgAGogARAZQcgAbGogAzYCMCACKAIAIQAgBSACKQIINwNYIAUgAikCADcDUCAAIAVB0ABqIAQQGUHIAGxqKAIoIQEgBSACKQIINwNIIAUgAikCADcDQCAAIAVBQGsgARAZQcgAbGogBDYCMCACKAIAIQAgBSACKQIINwM4IAUgAikCADcDMCAAIAVBMGogBBAZQcgAbGpBLGoMAQsgBSACKQIINwOIAyAFIAIpAgA3A4ADIAYgBUGAA2ogBBAZQcgAbGpBfzYCLCACKAIAIAUgAikCCDcD+AIgBSACKQIANwPwAiAFQfACaiADEBlByABsaigCLCEAIAIoAgAgBSACKQIINwPoAiAFIAIpAgA3A+ACIAVB4AJqIAQQGUHIAGxqIAA2AiggAigCACAFIAIpAgg3A9gCIAUgAikCADcD0AIgBUHQAmogAxAZQcgAbGooAighACACKAIAIAUgAikCCDcDyAIgBSACKQIANwPAAiAFQcACaiADEBlByABsaiAANgIsIAIoAgAgBSACKQIINwO4AiAFIAIpAgA3A7ACIAVBsAJqIAMQGUHIAGxqKAI8IQAgAigCACAFIAIpAgg3A6gCIAUgAikCADcDoAIgBUGgAmogAxAZQcgAbGogADYCKCACKAIAIQAgBSACKQIINwOYAiAFIAIpAgA3A5ACIAAgBUGQAmogAxAZQcgAbGooAighASAFIAIpAgg3A4gCIAUgAikCADcDgAIgACAFQYACaiABEBlByABsaiADNgIwIAIoAgAhACAFIAIpAgg3A/gBIAUgAikCADcD8AEgACAFQfABaiADEBlByABsaigCLCEBIAUgAikCCDcD6AEgBSACKQIANwPgASAAIAVB4AFqIAEQGUHIAGxqIAM2AjAgAigCACEAIAUgAikCCDcD2AEgBSACKQIANwPQASAAIAVB0AFqIAQQGUHIAGxqQShqCygCACEBIAUgAikCCDcDKCAFIAIpAgA3AyAgACAFQSBqIAEQGUHIAGxqIAQ2AjAgAigCACAFIAIpAgg3AxggBSACKQIANwMQIAVBEGogAxAZQcgAbGpBADYCPCACKAIAIAUgAikCCDcDCCAFIAIpAgA3AwAgBSAEEBlByABsakEANgI8DAILIAAgAUHIAGxqKAIsIQAgAigCACAFIAIpAgg3A9gDIAUgAikCADcD0AMgBUHQA2ogBBAZQcgAbGogADYCKCACKAIAIAUgAikCCDcDyAMgBSACKQIANwPAAyAFQcADaiADEBlByABsakF/NgIsIAIoAgAgBSACKQIINwO4AyAFIAIpAgA3A7ADIAVBsANqIAQQGUHIAGxqQX82AiwgAigCACEAIAUgAikCCDcDqAMgBSACKQIANwOgAyAAIAVBoANqIAQQGUHIAGxqKAIoIQEgBSACKQIINwOYAyAFIAIpAgA3A5ADIAAgBUGQA2ogARAZQcgAbGogBDYCMAwBCyACKAIAIAUgAikCCDcDqAYgBSACKQIANwOgBiAFQaAGaiADEBlByABsaigCKCEGIAIoAgAhByAFIAIpAgg3A5gGIAUgAikCADcDkAYCQCAHIAVBkAZqIAYQGUHIAGxqKAIwIgdBAWtBfUsNACACKAIAIAUgAikCCDcDiAYgBSACKQIANwOABiAFQYAGaiAGEBlByABsaigCNEEBa0F9Sw0AIAIoAgAhBiAFIAIpAgg3A7gFIAUgAikCADcDsAUCQCAGIAVBsAVqIAcQGUHIAGxqKAIEQQBMDQAgAigCACAF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AEIANwMIAkACQAJAAkAgAkEBaw4DAgEDAAsgACABKQMANwMAIAAgASkDCDcDCA8LIAAgASsDADkDACAAIAErAwiaOQMIDwsgACABKwMAOQMIIAAgASsDCJo5AwAPCyAAIAErAwA5AwggACABKwMIOQMACzcBA38DQCABQQNHBEAgACABQQJ0aiICKAIAIgMEQCADEJkBGiACQQA2AgALIAFBAWohAQwBCwsLsQICCX8CfCMAQRBrIgUkACAAIAI6AEEgASsDCCEMIAAgASsDACINOQMQIAAgDDkDKCAAIAwgACsDCKE5AxggACANIAArAwCgOQMgIAAoAjAiBEEAIARBAEobIQdBDkEPIARBAWsiBhshCEENQQ8gBhshCQNAIAMgB0ZFBEACf0EAIAJFDQAaIAAtAEAEQCAJIANFDQEaQQdBBSADIAZGGwwBCyAIIANFDQAaQQtBCiADIAZGGwshBCADQQJ0IgogACgCOGooAgAgBSABKQMINwMIIAUgASkDADcDACAFIAIgBHEQ4AkgACgCOCAKaigCACEEAkAgAC0AQARAIAEgASsDACAEKwMAoDkDAAwBCyABIAErAwggBCsDCKE5AwgLIANBAWohAwwBCwsgBUEQaiQAC/MCAgV8A38jAEEgayIIJAAgAUEIaisDACEFIAArAwAhBCABKwMAIQYgACABKQMANwMAIAArAwghAyAAIAEpAwg3AwggBSADoSEDIAYgBKEhBAJAIAINACAAKAI0IgFFDQAgASAEIAErAyigOQMoIAEgAyABKwMwoDkDMAsCQCAAKAIwIglFDQAgBCADIAAtAEAbIAm3oyEHQQAhAQNAIAEgCU4NAQJ/IAcgAbiiIgOZRAAAAAAAAOBBYwRAIAOqDAELQYCAgIB4CyEJAn8gByABQQFqIgq4oiIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsgCWshCSAAKAI4IAFBAnRqKAIAIQECfCAALQBABEAgBSEEIAErAwAgCbegDAELIAErAwggCbegIQQgBgshAyAIIAQ5AxggCCAIKQMYNwMIIAggAzkDECAIIAgpAxA3AwAgASAIIAIQ4QkgACgCMCEJIAohAQwACwALIAhBIGokAAuMAwIEfAJ/IwBBIGsiByQAAkAgAigCNCIIBEAgCCsDGCIERAAAAAAAAAAAZCAIKwMg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IANBtewDIAEoAiwQYyIDRyADQQBOcQ0CIANBAEwNACAAECgEQCADQYACTw0EIAQEQCAAEHkgAUEQaiADECAaCyAAIAAtAA8gA2o6AA8gABAlQRBJDQFBibQDQZ38AEHqAUGmHxAAAAsgBA0EIAAgACgCBCADajYCBAsgAUEwaiQADAQLQbykA0Gd/ABB3QFBph8QAAALQcucA0Gd/ABB4gFBph8QAAALQfDMAUGd/ABB5QFBph8QAAALQdadAUGd/ABB7AFBph8QAAALAkAgABAoBEAgABAlQQ9GDQELIAJBIGoiABAlIAAQTk8EQCAAQQEQvQELIAJBIGoiABAlIQEgABAoBEAgACABakEAOgAAIAIgAi0AL0EBajoALyAAECVBEEkNAUGJtANBnfwAQa8CQfexARAAAAsgAigCICABakEAOgAAIAIgAigCJEEBajYCJAsCQCACQSBqECgEQCACQQA6AC8MAQsgAkEANgIkCyACQSBqIgAQKCEBIAAgAigCICABGyIAEKEGBEAgAiAANgIAQcg0IAIQKgsgAi0AL0H/AUYEQCACKAIgEBgLQYUvEIsKIQULIAJBMGokACAFDwtBgaQDQZi3AUHwBUHSiQEQAAALQcrVAUGYtwFB8QVB0okBEAAAC78CAQZ/IAAoAgghBSAAKAIMIQYDQCAAKAIAIARLBEAgBSAAKAIEIARsaiEBIAYEQCABIAYRAQALAkACQAJAAkACQAJAAkACQAJAAkAgASgCAEECaw4NAAABAQIDBAQGBwgFBQkLIAEoAgwQGAwICyABKAIMEBgMBwsgASgCDBAYDAYLIAEoAigQGAwFCyABKAIIEBgMBAtBACECAkACQAJAAkAgASgCCEEBaw4CAAEDCwNAIAEoAjQhAyACIAEoAjBODQIgAyACQQR0aigCCBAYIAJBAWohAgwACwALA0AgASgCRCEDIAIgASgCQE4NASADIAJBBHRqKAIIEBggAkEBaiECDAALAAsgAxAYCwwDCyABKAIQEBgMAgsgASgCCBAYDAELIAEoAigQGAsgBEEBaiEEDAELCyAFEBggABAYC98BAQN/IAAQJSAAEE5PBEAgABBOIgJBAWoiAyACQQF0QYAIIAIbIgQgAyAESxshAyAAECUhBAJAIAAtAA9B/wFGBEAgACgCACACIANBARCGBSECDAELIANB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KAIIGiAEBEAgAiAJIAQQqwILIAYEQCACIARqIAcgBhCrAgsgAyAEIAVqIgprIQcgAyAKRwRAIAIgBGogBmogBCAJaiAFaiAHEKsCCyABQQpHBEAgCRChBQsgACACEPsBIAAgCCgCCBD6ASAAIAQgBmogB2oiABC+ASAIQQA6AAwgACACaiAIQQxqENIBIAhBEGokAA8LEMoBAAsWACAAIAEgAkKAgICAgICAgIB/ELAFCwkAIAAQZzYCAAsjAQJ/IAAhAQNAIAEiAkEEaiEBIAIoAgANAAsgAiAAa0ECdQsPACAAIAAoAgBBBGs2AgALCgAgACgCAEEEawsHACAAKAIECy0BAX8jAEEQayICJAACQCAAIAFGBEAgAEEAOgB4DAELIAEQngQLIAJBEGokAAsTACAAEIwFKAIAIAAoAgBrQQJ1CywBAX8gACgCBCECA0AgASACRwRAIAAQnQMaIAJBBGshAgwBCwsgACABNgIECwkAIABBADYCAAtJAQF/IwBBEGsiAyQAAkACQCACQR5LDQAgAS0AeEEBcQ0AIAFBAToAeAwBCyACEMcKIQELIANBEGokACAAIAI2AgQgACABNgIAC0ABAX8jAEEQayIBJAAgABCdAxogAUH/////AzYCDCABQf////8HNgIIIAFBDGogAUEIahCtCygCACABQRBqJAALCwAgAEEANgIAIAALNwEBfyMAQRBrIgMkACADIAEQ7QI2AgwgAyACEO0CNgIIIAAgA0EMaiADQQhqEKIFIANBEGokAAtOAQF/IwBBEGsiAyQAIAMgATYCCCADIAA2AgwgAyACNgIEQQAhASADQQRqIgAgA0EMahCfBUUEQCAAIANBCGoQnwUhAQsgA0EQaiQAIAELNAEBfyMAQRBrIgMkACAAECQaIAAgAhCfAyADQQA6AA8gASACaiADQQ9qENIBIANBEGokAAtnAQJ/IwBBEGsiAyQAA0ACQCABLQAAIgJB3ABHBEAgAgRAIALAIgJBAE4EQCAAIAIQZQwDCyADIAI2AgAgAEHO3wAgAxAeDAILIANBEGokAA8LIABB98cBEBsaCyABQQFqIQEMAAsACxwAIABB/////wNLBEAQkAEACyAAQQJ0QQQQogsLCQAgABD1BhAYCxUAIABBgLoJNgIAIABBEGoQNBogAAsVACAAQdi5CTYCACAAQQxq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ACABKAIEIgIgACACSSIDGxDpASIBDQBBASEBIAAgAksNAEF/QQAgAxshAQsgAQsMACAAQQFBLRCACxoLDAAgAEEBQS0QhAsaCwoAIAEgAGtBAnULHAEBfyAALQAAIQIgACABLQAAOgAAIAEgAjoAAAtlAQF/IwBBEGsiBiQAIAZBADoADyAGIAU6AA4gBiAEOgANIAZBJToADCAFBEAgBkENaiAGQQ5qEPcKCyACIAEgASACKAIAEKMLIAZBDGogAyAAKAIAEJsLIAFqNgIAIAZBEGokAAtCACABIAIgAyAEQQQQpAIhASADLQAAQQRxRQRAIAAgAUHQD2ogAUHsDmogASABQeQASRsgAUHFAEgbQewOazYCAAsLQAAgAiADIABBCGogACgCCCgCBBECACIAIABBoAJqIAUgBEEAEJwFIABrIgBBnwJMBEAgASAAQQxtQQxvNgIACwtAACACIAMgAEEIaiAAKAIIKAIAEQIAIgAgAEGoAWogBSAEQQAQnAUgAGsiAEGnAUwEQCABIABBDG1BB282AgALC0IAIAEgAiADIARBBBClAiEBIAMtAABBBHFFBEAgACABQdAPaiABQewOaiABIAFB5ABJGyABQcUASBtB7A5rNgIACwtAACACIAMgAEEIaiAAKAIIKAIEEQIAIgAgAEGgAmogBSAEQQAQngUgAGsiAEGfAkwEQCABIABBDG1BDG82AgALC0AAIAIgAyAAQQhqIAAoAggoAgARAgAiACAAQagBaiAFIARBABCeBSAAayIAQacBTARAIAEgAEEMbUEHbzYCAAsLBABBAgveAQEFfyMAQRBrIgckACMAQRBrIgMkACAAIQQCQCABQff///8DTQRAAkAgARCNBQRAIAQgARDTAQwBCyADQQhqIAEQ0ANBAWoQzwMgAygCDBogBCADKAIIIgAQ+wEgBCADKAIMEPoBIAQgARC+AQsjAEEQayIFJAAgBSACNgIMIAAhAiABIQYDQCAGBEAgAiAFKAIMNgIAIAZBAWshBiACQQRqIQIMAQsLIAVBEGokACADQQA2AgQgACABQQJ0aiADQQRqENsBIANBEGokAAwBCxDKAQALIAdBEGokACAEC8AFAQ5/IwBBEGsiCyQAIAYQywEhCiALQQRqIAYQ2QMiDhDIASAFIAM2AgACQAJAIAAiBy0AACIGQStrDgMA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aygCAGooAhg2AgAgAAsLACAAQYCgCxCpAgsJACAAEJEHEBgLPQEBfyAAKAIYIgIgACgCHEYEQCAAIAEQpgMgACgCACgCNBEAAA8LIAAgAkEBajYCGCACIAE6AAAgARCmAws0AQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBECAA8LIAAgAUEBajYCDCABLAAAEKYDCyoBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQIADwsgASwAABCmAwsPACAAIAAoAgAoAhgRAgALLAAgACABEK0HIgFFBEAPCwJAIAMEQCAAIAEgAhCqBAwBCyAAIAEgAhC2CwsLCAAgACgCEEULBABBfwsIACAAEIoHGgu+DwIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQogAkL///////8/gyELIAIgBIVCgICAgICAgICAf4MhDCAEQjCIp0H//wFxIQgCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAIQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIg1CgICAgICAwP//AFQgDUKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEMDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQwgAyEBDAILIAEgDUKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACEMDAMLIAxCgICAgICAwP//AIQhDEIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASANhFAEQEKAgICAgIDg//8AIAwgAiADhFAbIQxCACEBDAILIAIgA4RQBEAgDEKAgICAgIDA//8AhCEMQgAhAQwCCyANQv///////z9YBEAgBUHAAmogASALIAEgCyALUCIGG3kgBkEGdK18pyIGQQ9rELMBQRAgBmshBiAFKQPIAiELIAUpA8ACIQELIAJC////////P1YNACAFQbACaiADIAogAyAKIApQIgcbeSAHQQZ0rXynIgdBD2sQswEgBiAHakEQayEGIAUpA7gCIQogBSkDsAIhAwsgBUGgAmogCkKAgICAgIDAAIQiEkIPhiADQjGIhCICQgBCgICAgLDmvIL1ACACfSIEQgAQnAEgBUGQAmpCACAFKQOoAn1CACAEQgAQnAEgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQnAEgBUHwAWogBEIAQgAgBSkDiAJ9QgAQnAEgBUHgAWogBSkD+AFCAYYgBSkD8AFCP4iEIgRCACACQgAQnAEgBUHQAWogBEIAQgAgBSkD6AF9QgAQnAEgBUHAAWogBSkD2AFCAYYgBSkD0AFCP4iEIgRCACACQgAQnAEgBUGwAWogBEIAQgAgBSkDyAF9QgAQnAEgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQnAEgBUGQAWogA0IPhkIAIAJCABCcASAFQfAAaiACQgBCACAFKQOoASAFKQOgASINIAUpA5gBfCIEIA1UrXwgBEIBVq18fUIAEJwBIAVBgAFqQgEgBH1CACACQgAQnAEgBiAJIAhraiEGAn8gBSkDcCITQgGGIg4gBSkDiAEiD0IBhiAFKQOAAUI/iIR8IhBC5+wAfSIUQiCIIgIgC0KAgICAgIDAAIQiFUIBhiIWQiCIIgR+IhEgAUIBhiINQiCIIgogECAUVq0gDiAQVq0gBSkDeEIBhiATQj+IhCAPQj+IfHx8QgF9IhNCIIgiEH58Ig4gEVStIA4gDiATQv////8PgyITIAFCP4giFyALQgGGhEL/////D4MiC358Ig5WrXwgBCAQfnwgBCATfiIRIAsgEH58Ig8gEVStQiCGIA9CIIiEfCAOIA4gD0IghnwiDlatfCAOIA4gFEL/////D4MiFCALfiIRIAIgCn58Ig8gEVStIA8gDyATIA1C/v///w+DIhF+fCIPVq18fCIOVq18IA4gBCAUfiIYIBAgEX58IgQgAiALfnwiCyAKIBN+fCIQQiCIIAsgEFatIAQgGFStIAQgC1atfHxCIIaEfCIEIA5UrXwgBCAPIAIgEX4iAiAKIBR+fCIKQiCIIAIgClatQiCGhHwiAiAPVK0gAiAQQiCGfCACVK18fCICIARUrXwiBEL/////////AFgEQCAWIBeEIRUgBUHQAGogAiAEIAMgEhCcASABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQpCACABfSELIAZB/v8AagwBCyAFQeAAaiAEQj+GIAJCAYiEIgIgBEIBiCIEIAMgEhCcASABQjCGIAUpA2h9IAUpA2AiDUIAUq19IQpCACANfSELIAEhDSAGQf//AGoLIgZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgCkIBhiALQj+IhCEBIARC////////P4MgBq1CMIaEIQogC0IBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAIgBEEBIAZrEKcDIAVBMGogDSAVIAZB8ABqELMBIAVBIGogAyASIAUpA0AiAiAFKQNIIgoQnAEgBSkDOCAFKQMoQgGGIAUpAyAiAUI/iIR9IAUpAzAiBCABQgGGIg1UrX0hASAEIA19CyEEIAVBEGogAyASQgNCABCcASAFIAMgEkIFQgAQnAEgCiACIAIgAyAEIAJCAYMiBHwiA1QgASADIARUrXwiASASViABIBJRG618IgJWrXwiBCACIAIgBEKAgICAgIDA//8AVCADIAUpAxBWIAEgBSkDGCIEViABIARRG3GtfCICVq18IgQgAiAEQoCAgICAgMD//wBUIAMgBSkDAFYgASAFKQMIIgNWIAEgA1Ebca18IgEgAlStfCAMhCEMCyAAIAE3AwAgACAMNwMIIAVB0AJqJAALwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCABIAJSIAEgAlNxDQEgACABIAKFhEIAUg8LIABCAFIgASACVSABIAJRGw0AIAAgASAChYRCAFIhAwsgAwseAQF/IAAQ7QEiAQRAIAAgARDHCyAAQbWWBRDhAQsLnwMBBX9BECECAkBBECAAIABBEE0bIgMgA0EBa3FFBEAgAyEADAELA0AgAiIAQQF0IQIgACADSQ0ACwtBQCAAayABTQRAQZCGC0EwNgIAQQAPC0EQIAFBC2pBeHEgAUELSRsiAyAAakEMahBNIgJFBEBBAA8LIAJBCGshAQJAIABBAWsgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAAgAmpBAWtBACAAa3FBCGsiAiAAQQAgAiABa0EPTRtqIgAgAWsiAmshBCAGQQNxRQRAIAEo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IAMgCRCoAwRAIAEhBAwCCyAFQfAAaiABIAJCAEIAEGogBSkDeCECIAUpA3AhBAwBCyAEQjCIp0H//wFxIQcgBgR+IAEFIAVB4ABqIAEgCkIAQoCAgICAgMC7wAAQaiAFKQNoIgpCMIinQfgAayEGIAUpA2ALIQQgB0UEQCAFQdAAaiADIAlCAEKAgICAgIDAu8AAEGogBSkDWCIJQjCIp0H4AGshByAFKQNQIQMLIAlC////////P4NCgICAgICAwACEIQsgCkL///////8/g0KAgICAgIDAAIQhCiAGIAdKBEADQAJ+IAogC30gAyAEVq19IglCAFkEQCAJIAQgA30iBIRQBEAgBUEgaiABIAJCAEIAEGogBSkDKCECIAUpAyAhBAwFCyAJQgGGIARCP4iEDAELIApCAYYgBEI/iIQLIQogBEIBhiEEIAZBAWsiBiAHSg0ACyAHIQYLAkAgCiALfSADIARWrX0iCUIAUwRAIAohCQwBCyAJIAQgA30iBIRCAFINACAFQTBqIAEgAkIAQgAQaiAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ggBkEBayEGIARCAYYhBCAJQgGGhCIJQoCAgICAgMAAVA0ACwsgCEGAgAJxIQcgBkEATARAIAVBQGsgBCAJQv///////z+DIAZB+ABqIAdyrUIwhoRCAEKAgICAgIDAwz8QaiAFKQNIIQIgBSkDQCEEDAELIAlC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQaiAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABBqQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORBqIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORBqQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhBqIAAg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A0AgBQRAIAAgBSAHEKMHIAYgBRAwIQUMAQUgBiACEB0hAgwCCwALAAsACyAIQa0CNgIEIAhBurkBNgIAQajzCCgCAEHmvAQgCBAfGhA8AAsgBiAGQR4gB0EBEMgDGgsgASAHRXJFBEAgACAHIAMgBBChBwsgACAAIAcQ3gwMAQsgACABIAIQ7gshBwsgCEEwaiQAIAcPC0HA1QFB0fsAQQxB/jsQAAALTQEDf0EBIQEDQCAAKAIQIgMoArgBIQIgAygCtAEgAUgEQCACEBgFIAIgAUECdGooAgAiAigCECgCDBC8ASACEPALIAFBAWohAQwBCwsL5gMCBn8GfCMAQeAAayIDJAAgACgCECICKwMYIQkgAisDECEKQYzYCi0AAEECTwRAIAEQsQIgAyAAECE2AlBBqPMIKAIAQaHzAyADQdAAahAfGgsCQCABRQRAQajzCCgCACEGDAELQajzCCgCACEGIAAQHCECIANBQGshBQNAIAJFDQECQCACKAIQIgQoAoABIABHDQAgBCAKIAQrAxCgOQMQIAQgCSAEKwMYoDkDGEGM2AotAABBAkkNACABELECIAIQISEEIAIoAhAiBysDECEIIAUgBysDGDkDACADIAg5AzggAyAENgIwIAZBg6kEIANBMGoQMgsgACACEB0hAgwACwALIAFBAWohB0EBIQQDQCAAKAIQIgIoArQBIAROBEAgAigCuAEgBEECdGooAgAhBSABBEAgCSAFKAIQIgIrAyigIQggCiACKwMgoCELIAkgAisDGKAhDCAKIAIrAxCgIQ1BjNgKLQAAQQJPBEAgARCxAiAFECEhAiADIAg5AyAgAyALOQMYIAMgDDkDECADIA05AwggAyACNgIAIAZB8agEIAMQMiAFKAIQIQILIAIgCDkDKCACIAs5AyAgAiAMOQMYIAIgDTkDEAsgBSAHEPELIARBAWohBAwBCwsgA0HgAGokAAv0GQMNfwt8AX4jAEGwBGsiAiQAIAAoAkghBkGM2AotAABBAk8EQCABELECIAIgABAhNgKwA0Go8wgoAgBB/u0DIAJBsANqEB8aCyABQQFqIQdBASEEA0AgACgCECIFKAK0ASAESARAAkACQCAAEDogA2siCSAAKAIQIgQoArQBaiINDQAgBCgCDA0AIARCADcDECAEQoCAgICAgICZwAA3AyggBEKA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oSIQOQMgIARCADcDGEEAIQRBjNgKLQAAQQFLBEAgARCxAiAAECEhACACIA85A7ACIAIgEDkDqAIgAkIANwOgAiACQgA3A5gCIAIgADYCkAIgB0HxqAQgAkGQAmoQMgsDQCACKALgAyAETQRAIAJB2ANqIgBBIBAzIAAQOEEAIQQDQCACKALIAyAETQRAIAJBwANqIgBBBBAzIAAQOCAGEBgMCgUgAiACKQPIAzcDiAIgAiACKQPAAzcDgAIgAkGAAmogBBAZIQACQAJAAkAgAigC0AMiAQ4CAgABCyACKALAAyAAQQJ0aigCABAYDAELIAIoAsADIABBAnRqKAIAIAERAQALIARBAWohBAwBCwALAAUgAiACKQPgAzcD+AEgAiACKQPYAzcD8AEgAkHwAWogBBAZIQACQAJAAkAgAigC6AMiAQ4CAgABC0G+gARBwgBBASAHEDsaEDwACyACIAIoAtgDIABBBXRqIgApAwg3A9gBIAIgACkDEDcD4AEgAiAAKQMYNwPoASACIAApAwA3A9ABIAJB0AFqIAERAQALIARBAWohBAwBCwALAAUgACgCECgCtAEhAyACIAIpA8gDNwPIASACIAIpA8ADNwPAASACKALAAyACQcABaiAEEBlBAnRqKAIAIQUCQCADIARLBEAgBSgCECIDIAMrAyggD6EiEjkDKCADIAMrAyAgEKEiFjkDICADIAMrAxggD6EiFDkDGCADIAMrAxAgEKEiFTkDEEGM2AotAABBAkkNASABELECIAUQISEDIAIgEjkDkAEgAiAWOQOIASACIBQ5A4ABIAIgFTkDeCACIAM2AnAgB0HxqAQgAkHwAGoQMgwBCyAFRQ0AIAUoAhAiAyADKwAYIA+hOQMYIAMgAysAECAQoTkDEEGM2AotAABBAkkNACABELECIAUQISEDIAUoAhAiBSsDECESIAIgBSsDGDkDsAEgAiASOQOoASACIAM2AqABIAdBg6kEIAJBoAFqEDILIARBAWohBAwBCwALAAUgBiAEQQR0aiIDKwMIIRQgAysDACEVIAIgAikD4AM3A2ggAiACKQPYAzcDYCACKALYAyACQeAAaiAEEBlBBXRqIgMrAxghDyADKwMQIRMgAysDCCEXIAMrAwAhGCAAKAIQKAK0ASEFIAIgAikDyAM3A1ggAiACKQPAAzcDUCACKALA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ACsDECEFIAArA2AhBCAAKwNYIQYgACsDGCEHIAIgACsDUDkDGCACIAc5AxAgAiAGIASgOQMgIAIgBTkDCCACIAM2AgBBqPMIKAIAQb2oBCACEDILIAJB8ABqJAALswYCCn8FfCMAQdABayIBJAACQCAAKAJAIgRFDQAgBEEEENYEIQUgAEEwaiIHIQMDQCACIARGBEAgBSAEQQRB8AMQqAFBACECIARBCBDWBCEDA0AgAiAERgRAAn8gACsDCCIMIAArAwBhBEAgASAAKQMoNwOIASABIAApAyA3A4ABIAEgACkDGDcDeCABIAApAxA3A3AgBCADIAFB8ABqEPsLDAELIAArAyAhCyAAKwMoIQ0gASAAKwMQOQOwASABIAArAxg5A7gBIAEgCyANIAugIA0gC6EiCyALoiAMRAAAAAAAABBAoqCfoUQAAAAAAADgP6IiC6E5A8ABIAEgDSALoTkDyAEgASABKQO4ATcDmAEgASABKQPAATcDoAEgASABKQPIATcDqAEgASABKQOwATcDkAEgBCADIAFBkAFqEPsLCyEIQajzCCgCACEJQYzYCi0AAARAIAArAxAhCyAAKwMYIQ0gACsDICEMIAEgACsDKDkDaCABIAw5A2AgASANOQNYIAEgCzkDUCAJQeCoBCABQdAAahAyCyABQUBrIQpBACECA0AgAiAERgRAIAUQGCADEBggCBAYQQAhAgNAIAIgBEYNByAHKAIAIgAoAjxFBEAgABD5CwsgAkEBaiECIABBNGohBwwACwALIAUgAkECdGooAgAiBiAIIAJBBXRqIgApAwA3AxAgBiAAKQMYNwMoIAYgACkDEDcDICAGIAApAwg3AxhBjNgKLQAABEAgAyACQQN0aisDACEPIAArAwAhCyAAKwMIIQ0gACsDECEMIAEgACsDGCIOOQNIIAogDDkDACABIA05AzggASALOQMwIAEgDCAOojkDKCABIA0gDkQAAAAAAADgP6IiDqA5AyAgASALIAxEAAAAAAAA4D+iIgygOQMYIAEgDSAOoTkDECABIAsgDKE5AwggASAPOQMAIAlBivEEIAEQMgsgAkEBaiECDAALAAUgAyACQQN0aiAFIAJBAnRqKAIAKwMAOQMAIAJBAWohAgwBCwALAAUgBSACQQJ0aiADKAIAIgM2AgAgAkEBaiECIANBNGohAwwB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QTAgBygCECgCfCgCAEEBRiIIG0EAIAcoAgBBA3FBAkEDIAgbRxtqKAIoIggoAhAoAoABKAIMRQRAIAVFBEAgACACEIMMIQULIAUgCBCwBwsgBiAHRw0ACyAFRQ0BAkAgASgCECgCgAEoAgwNACAFKAIIEDpBAkgNACAFIAEQsAcLAkAgA0UNACABKAIQKAKAASgCDCAFRw0AIAIgBRCGDAwCCyACIAUQhwwMAQsgByABKAIQKAKAASIIKAIIRg0AIAggCCgCGCIHIAUgBSAHShs2AhgLIAAgBiABEHIhBgwBBQJAIANFDQAgASgCECgCgAEoAgwNACAAIAIQgwwiACABELAHIAIgABCGDAsLCwshAQF/IAEgACAAKAIAIgIbIAIgASACGzYCBCAAIAE2AgALLwEBfyABQQA2AgQCQCAAKAIEIgIEQCACIAE2AgQMAQsgACABNgIACyAAIAE2AgQLRQECfyMAQRBrIgEkAEEBQdAAEEciAkUEQCABQdAANgIAQajzCCgCAEGD5wMgARAfGhAsAAsgAiAANgIIIAFBEGokACACCwkAIABCADcCAAsrAQF/IAAQHCECA0ACQCACRQ0AIAIgARBEEGkNACAAIAIQHSECDAELCyACC94BAgN/AnwgASgCECgCgAEiAigCIAR8IAIrAzAgAisDKEQAAAAAAADgv6KgBUQAAAAAAAAAAAshBSAAIAEQbiECA0AgAgRAIAEgAkEwQQAgAigCAEEDcSIDQQNHG2ooAigiBEYEQCACQVBBACADQQJHG2ooAighBAsCQCAEKAIQKAKAASIDKAIgIAFHDQAgAykDMEKAgICAgICAksAAUg0AIAMgBSADKwMoIgZEAAAAAAAA4D+ioDkDMCAFIAagIQUgAykDEFANACAAIAQQiwwLIAAgAiABEHIhAgwBCwsLrwECA38BfCABKAIQKAKAASICKwMoIAIpAwi6oyEFIAAgARBuIQIDQCACBEAgASACQTBBACACKAIAQQNxIgNBA0cbaigCKCIERgRAIAJBUEEAIANBAkcbaigCKCEECwJAIAQoAhAoAoABIgMoAiAgAUcNACADKwMoRAAAAAAAAAAAYg0AIAMgBSADKQMIuqI5AyggAykDEFANACAAIAQQjAwLIAAgAiABEHIhAgwBCwsLkgECA38BfiABKAIQKAKAASkDAEIB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AFJAojkDEEEBIQEDQCABIAIoArQBSkUEQCACKAK4ASABQQJ0aigCABCjDCABQQFqIQEgACgCECECDAELCwvvAQIDfwJ8IAAoAhAoAowBIgIrAxAhBSACKwMIIQYCQCAAIAFGDQAgABAcIQIDQCACRQ0BIAAgAigCECIDKALoAUYEQCADKAKUASIDIAYgAysDAKA5AwAgAyAFIAMrAwigOQMICyAAIAIQHSECDAALAAtBASEDA0AgACgCECICKAK0ASADTgRAIAIoArgBIANBAnRqKAIAIQQgACABRwRAIAQoAhAoAowBIgIgBSACKwMgoDkDICACIAYgAisDGKA5AxggAiAFIAIrAxCgOQMQIAIgBiACKwMIoDkDCAsgBCABEKQMIANBAWohAwwBCwsLoUsDGH8QfAF+IwBBsAFrIggkAEGM2AotAAAEQCAIIAAQITYCcEGo8wgoAgBB/u0DIAhB8ABqEB8aCyAAEBwhAgNAIAIEQCACKAIQQQA2ArgBIAAgAhAdIQIMAQsLQYzYCi0AAEECTwRAIAEoAhAhAiAIIAAQITYCZCAIIAI2AmBBqPMIKAIAQZv2AyAIQeAAahAfGgsgASABKAIQQQFqNgIQIAhB3O0JKAIANgJcQYWnASAIQdwAakEAEOIBIgpBkCZBmAJBARA1GkE4EFIhAiAKKAIQIAI2AowBIAAQOSECIAooAhAgAigCEC8BsAE7AbABIAAgCkHz3AAQuAcgACAKQbHbABC4ByAAIApBnNcBELgHIAhBmAFqIQcgCEGQAWohBiAIQYgBaiEJQQEhDANAIAAoAhAiAigCtAEgDE4EQCACKAK4ASAMQQJ0aigCACIDEJUEIAogAxAhELcHIgQoAhAiAiALNgKIASACIAM2AugBAkACQCABKAIEIgVFBEBE////////738hG0T////////v/yEaDAELRP///////+9/IRtE////////7/8hGiADIAUQRCICLQAARQ0AIAEoAgAgA0cEQCACIAMoAkQgBRBEEExFDQELIAhBADoArAEgCCAJNgJEIAggBjYCSCAIIAc2AkwgCCAIQawBajYCUCAIIAhBgAFqNgJAIAJBl74BIAhBQGsQUUEETgRAIAgrA5gBIRogCCsDkAEhHiAIKwOIASEbIAgrA4ABIRxBoNgKKwMAIh1EAAAAAAAAAABkBEAg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IAM2AggLIAMgAS0ADDoADCADIAAgACABRhshAAsgAEUgB0EBcUVyRQRAIAYEQANAIAItAAwhAwJAIAIoAggiASgCACACRwRAIANBAXFFBEAgAkEBOgAMIAFBADoADCABEMEEIAIgACAAIAIoAgAiAUYbIQAgASgCBCECCwJAAkACQAJAIAIoAgAiAQRAIAEtAAxBAUcNAQsgAigCBCIDBEAgAy0ADEEBRw0CCyACQQA6AAwgACACKAIIIgJHBEAgAi0ADA0GCyACQQE6AAwPCyACKAIEIgNFDQELIAMtAAxBAUcNAQsgAUEBOgAMIAJBADoADCACEMAEIAIoAggiAigCBCEDCyACIAIoAggiAC0ADDoADCAAQQE6AAwgA0EBOgAMIAAQwQQPCyADQQFxRQRAIAJBAToADCABQQA6AAwgARDABCACIAAgACACKAIEIgFGGyEAIAEoAgAhAgsCQAJAAkACQCACKAIAIgMEQCADLQAMIgFBAUcNAQsCQCACKAIEIgEEQCABLQAMQQFHDQELIAJBADoADCACKAIIIgItAAxBAUYgACACR3ENBSACQQE6AAwPCyADRQ0CIAMtAAxBAXENAQwDCyABRQ0CCyACKAIEIQELIAFBAToADCACQQA6AAwgAhDBBCACKAIIIgIoAgAhAwsgAiACKAIIIgAtAAw6AAwgAEEBOgAMIANBAToADCAAEMAEDwsgAigCCCIBIAIgASgCAEZBAnRqKAIAIQIMAAsACyAFQQE6AAwLCy0BAX8gACgCACIBBEAgACABNgIEIAAoAggaIAEQGCAAQQA2AgggAEIANwIACwsZACAAQYjPCjYCACAAQSRqEIICGiAAEOsHCw0AIAAtABhBf3NBAXELgQMCCn8BfCMAQSBrIgIkACAAQQhqIQQgACgCBCEBA0AgASAERwRAIAEoAhAiAyADEK8NIgs5AyAgAyALIAMrAxijOQMQIAEQrQEhAQwBCwsgAEEANgIgIABBJGohByAAQQhqIQggAEEEaiEEIAAoAgQhAwJAA0AgAyAIRwRAIAIgAygCEBCrDSIBNgIcAkAgAUUNACABKwMQREivvJry13q+Y0UNACAAIAAoAiBBAWo2AiAgASgCACgCICEFIAJBADYCGCACQQA2AhQgASgCACgCICABKAIEKAIgRw0DIAUrAxAhCyAFIAJBGGoi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AyAAKAIQIQEoAhAtAHRBAXENACAHIAErA1igIQcgCCABKwM4oCEICyABIAc5A4ABIAEgCDkDeCAAEGAgAEcEQCAFIAAoAhAiACgC6AFByABsaiIBIAErAxgiCSAHIAcgCWMbOQMYIAUgACgC7AFByABsaiIAIAArAxAiByAIIAcgCGQbOQMQCyADC3ABAn9BASEEA0AgBCAAKAIQIgMoArQBSkUEQCADKAK4ASAEQQJ0aigCACABIAIQ7A0gBEEBaiEEDAELCyADIAEgAysDEKI5AxAgAyACIAMrAxiiOQMYIAMgASADKwMgojkDICADIAIgAysDKKI5AygL5QQCCH8EfEEBIQIDQCACIAAoAhAiAygCtAFKRQRAIAMoArgBIAJBAnRqKAIAIAEQ7Q0gAkEBaiECDAELCyAAEGAhAiAAKAIQIQMCQCAAIAJGBEAgAygC7AEhBUQAAMD////fwSEKRAAAwP///99BIQsgAygC6AEiCCEEA0AgBCAFSgRAIAMoArQBIgBBACAAQQBKG0EBaiEAQQEhAgNAIAAgAkYNBCAKIAMoArgBIAJBAnRqKAIAKAIQIgQrAyBEAAAAAAAAIECgIgwgCiAMZBshCiALIAQrAxBEAAAAAAAAIMCgIgwgCyAMYxshCyACQQFqIQIMAAsABQJAIAMoAsQBIARByABsaiIAKAIAIgZFDQBBASECIAAoAgQiBygCACIARQ0AA0AgACgCECIALQCsASIJRSACIAZOckUEQCAHIAJBAnRqKAIAIQAgAkEBaiECDAELCyAJDQAgBkECayECIAArAxAgACsDWKEhDCAHIAZBAnRqQQRrIQADQCAAKAIAKAIQIgAtAKwBBEAgByACQQJ0aiEAIAJBAWshAgwBCwsgCiAAKwMQIAArA2CgIg0gCiANZBshCiALIAwgCyAMYxshCwsgBEEBaiEEDAELAAsACyADKALoASEIIAMoAuwBIQUgAygChAIoAhAoAvQBtyEKIAMoAoACKAIQKAL0AbchCwsgASgCECgCxAEiACAFQcgAbGooAgQoAgAoAhArAxghDCAAIAhByABsaigCBCgCACgCECsDGCENIAMgCjkDICADIAs5AxAgAyANIAMrA4ABoDkDKCADIAwgAysDeKE5AxgLogECAnwBfwJAAn9B/////wcgAEGCIRAmIgNFDQAaIAAQ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KGQEQCAFIAs5AyggBSALOQMYCyALIAUrAyBkBEAgBSALOQMgIAUgCzkDEAsCQCAGKALoASIBRQ0AAkAgACABRgRARAAAAAAAAAAAIQwMAQsgAUHs2AooAgBBCEEAEGG3IQwgCigCECEGCyAGKAL0ASIDIAEoAhAiASgC6AFGBEAgASABKwOAASALIAygECM5A4ABCyADIAEoAuwBRw0AIAEgASsDeCALIAygECM5A3gLIAJBAWohAgwACwALCyAAEOsNIQcgBCAAKAIQIgIoAuwBIgFByABsaiIDKAIEKAIAKAIQIAMrAxA5AxggAigC6AEhCkQAAAAAAAAAACELA0AgASAKSgRAIAQgAUEBayIDQcgAbGoiBigCACAEIAFByABsaiIBKwMoIAYrAyCgIAIoAvwBt6AgASsDGCAGKwMQoEQAAAAAAAAgQKAQIyENQQBKBEAgBigCBCgCACgCECANIAEoAgQoAgAoAhArAxigOQMYCyALIA0QIyELIAMhAQwBCwsCQCAHRQ0AIAItAHRBAXFFDQAgAEEAEOoNIAAoAhAiAi0AlAJBAUcNACAEIAIoAuwBIgFByABsaigCBCgCACgCECsDGCEMIAIoAugBIQBEAAAAAAAAAAAhCwNAIAAgAU4NASALIAFByABsIARqQcQAaygCACgCACgCECsDGCINIAyhECMhCyABQQFrIQEgDSEMDAALAAsCQCACLQCUAkEBRw0AIAIoAugBIQggAigC7AEhAwNAIAMiACAITA0BIAQgAEEBayIDQcgAbGoiASgCAEEATA0AIAEoAgQoAgAoAhAgCyAEIABByABsaigCBCgCACgCECsDGKA5AxgMAAsACyACQcABaiEBA0AgASgCACIABEAgACgCECIAIAQgACgC9AFByABsaigCBCgCACgCECsDGDkDGCAAQbgBaiEBDAELCwv4NAMQfwh8AX4jAEEQayIPJAACQCAAKAIQKALAAUUNACAAEIcIIAAQ9Q1BrNgKLQAAQQFGBEAjAEGgAWsiCCQAAkAgACgCECIBKALsASABKALoAWtBAkgNACABKALEASEEQQEhAgNAIAQgAkEBaiIFQcgAbGooAgAEQEEAIQMDQCAEIAJByABsIglqIgYoAgAgA0wEQCAFIQIMAwUCQCAGKAIEIANBAnRqKAIAIgsQgA5FDQAgAyEBA0AC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QcD7Ci0AAEHA+wpBAToAAEEBcQ0EQZnmA0EAECogBRAhIQMgABCBAiEFIAIgCBAhNgLoBCACQbbfAUHUngMgBRs2AuQEIAIgAzYC4ARBl+8DIAJB4ARqEH8MBAsDQCADIAtGBEAgB0EBcQRAIAJB2O0JQeDtCSAAEIECGygCADYCjAVBACEDQeb8ACACQYwFakEAEOIBIgdBkCZBmAJBARA1GiAHQQBBufQAQZWABRAiGkEBQeAAEBohCSAHKAIQIgQgCTYCCCAJIAAoAhAiBigCCCIKKwMAOQMAIAkgCisDGDkDGCAEIAYtAHM6AHMgBCAGKAJ0QX9zQQFxNgJ0IAQgBigC+AE2AvgBIAQgBigC/AE2AvwBQQAhBgNAIAAQOUEBIAYQ5gMiBgRAIAYoAgwQdSAGKAIMIQQgBigCCCEJBH8gB0EBIAkgBBDoAwUgB0EBIAkgBBAiCxoMAQsLA0AgABA5QQIgAxDmAyIDBEAgAygCDBB1IAMoAgwhBCADKAIIIQYEfyAHQQIgBiAEEOgDBSAHQQIgBiAEECILGgwBCwsgB0ECQb0cQQAQIkUEQCAHQQJBvRxBlYAFECIaCyAHQQJBgRxBABAiRQRAIAdBAkGBHEGVgAUQIhoLQdzYCigCACEgQcDYCigCACEhQczZCigCACEiQZjZCigCACEXQbzZCigCACEwQbjZCigCACExQbDZCigCACEyQbTZCigCACEzQajZCigCACE0QaTZCigCACE1QazZCigCACE2QaDZCigCACE3QZTZCigCACE4QZDZCigCACE5QYzZCigCACE6QYjZCigCACE7QYTZCigCACE8QZzZCigCACE9QfjYCigCACE+QfTYCigCACE/QfDYCigCACFAQYTaCigCACFBQbjaCigCACFCQdDaCigCACFDQbzaCigCACFEQcDaCigCACFFQcTaCigCACFGQajaCigCACFHQYDaCigCACFIQbTaCigCACFJQdTaCigCACFKQfTZCigCACFLQfjZCigCACFMQfzZCigCACFNQejZCigCACFOQeTZCigCACFPQbDaCigCACFQQazaCigCACFRQYjaCigCACFSQZzaCigCACFTQZzaCkEANgIAQYjaCiAHQQJBzDdBABAiNgIAQazaCiAHQQJB0rABQQAQIjYCAEGw2gogB0ECQZfvAEEAECI2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AEGQzgBOGyISQQVsQQNqEE0iAEUNASAAIAIgDiACayIEQQFqIgUQICIAIBJBA2pBBG1BAnRqIBQgBUECdCIGECAhFCAKQdAGaiACRwRAIAIQGAsgBSASTg0DIAAgBGohDiAGIBRqQQRrIQcgACECCyANQQZGDQQCfwJAAkACQAJAIA1BsJAFai0AACIJQe4BRg0AAn8gAUF+RgRAAn8jAEEwayIMJAAgAyAKQZwIajYCXCADKAIoRQRAIANBATYCKCADKAIsRQRAIANBATYCLAsgAygCBEUEQCADQazzCCgCADYCBAsgAygCCEUEQCADQbDzCCgCADYCCAsCQCADKAIUIgAEQCAAIAMoAgxBAnRqKAIADQELIAMQvgkgAygCBCADELgJIQAgAygCFCADKAIMQQJ0aiAANgIACyADEO8ECyADQcQAaiEYIANBJGohDwNAIAMoAiQiCCADLQAYOgAAIAMoAhQgAygCDEECdGooAgAoAhwgAygCLGohACAIIQUDQCAFLQAAQaCABWotAAAhASAAQQF0QaCCBWovAQAEQCADIAU2AkQgAyAANgJACwNAIAFB/wFxIQECQANAIAAgAEEBdCIEQYCIBWouAQAgAWpBAXQiBkHggwVqLgEARg0BIARB4IkFai4BACIAQd0ASA0ACyABQcCLBWotAAAhAQwBCwsgBUEBaiEFIAZBgIwFai4BACIAQQF0QYCIBWovAQBB2wFHDQAgACEBA0AgAUEBdEGgggVqLwEAIgBFBEAgAygCRCEFIAMoAkBBAXRBoIIFai8BACEACyADIAg2AlAgAyAFIAhrNgIgIAMgBS0AADoAGCAFQQA6AAAgAyAFNgIkIADBIQACfwNAAkBBACEBAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAOKQABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQnJycnJQsgBSADLQAYOgAAIAMoAkAhASAYDC4LIAMoAiAiAEEASg0kQX8hAQwlCyADKAIgIgBBAEoEQCADKAIUIAMoAgxBAnRqKAIAIAMoAlAgAGpBAWstAABBCkY2AhwLIAMoAgAiACAAKAIU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AygCACACIAMpAgg3A+ADIAIgAykCADcD2AMgAkHYA2ogBRAZQQJ0aigCACgCMCsDCCADKAIAIAIgAykCCDcD0AMgAiADKQIANwPIAyACQcgDaiAAEBlBAnRqKAIAKAIwKwMIYgshBCADKAIAIAIgAykCCDcDwAMgAiADKQIANwO4AyACQbgDaiAFEBlBAnRqKAIAIQcgAygCACEGIAIgAykCCDcDsAMgAiADKQIANwOoAyACQagEaiIIIAcgBiACQagDaiAAEBlBAnRqKAIAQQAgBBCWDg0FIAMoAgAgAiADKQIINwOgAyACIAMpAgA3A5gDIAIoAqwEIQkgAigCqAQhBiACQZgDaiAFEBlBAnRqKAIAIQcgAygCACELIAIgAykCCDcDkAMgAiADKQIANwOIAyAIIAcgCyACQYgDaiAAEBlBAnRqKAIAQQEgBEUiBxCWDg0FIAIoAqwEIQggAigCqAQhCwJAAkACQCAJQQFqDgMAAQIDCyADKAIAIAIgAykCCDcDYCACIAMpAgA3A1ggAkHYAGogABAZQQJ0aigCACADKAIAIAIgAykCCDcDUCACIAMpAgA3A0ggAkHIAGogBRAZQQJ0aigCACAEQQAgBiABELkCIAMoAgAgAkFAayADKQIINwMAIAIgAykCADcDOCACQThqIAAQGUECdGooAgAgAygCACACIAMpAgg3AzAgAiADKQIANwMoIAJBKGogBRAZQQJ0aigCACAHQQEgCyABELkCIAhBAUcNAiADKAIAIAIgAykCCDcDICACIAMpAgA3AxggAkEYaiAFEBlBAnRqKAIAIAMoAgAgAiADKQIINwMQIAIgAykCADcDCCACQQhqIAAQGUECdGooAgAgByABEJUODAILAkACQAJAIAhBAWoOAwABAgQLIAMoAgAgAiADKQIINwOgASACIAMpAgA3A5gBIAJBmAFqIAAQGUECdGooAgAgAygCACACIAMpAgg3A5ABIAIgAykCADcDiAEgAkGIAWogBRAZQQJ0aigCACAEQQAgBiABELkCIAMoAgAgAiADKQIINwOAASACIAMpAgA3A3ggAkH4AGogABAZQQJ0aigCACADKAIAIAIgAykCCDcDcCACIAMpAgA3A2ggAkHoAGogBRAZQQJ0aigCACAHQQEgCyABELkCDAMLIAMoAgAgAiADKQIINwPgASACIAMpAgA3A9gBIAJB2AFqIAUQGUECdGooAgAgAygCACACIAMpAgg3A9ABIAIgAykCADcDyAEgAkHIAWogABAZQQJ0aigCAEEAIAQgBiABELkCIAMoAgAgAiADKQIINwPAASACIAMpAgA3A7gBIAJBuAFqIAUQGUECdGooAgAgAygCACACIAMpAgg3A7ABIAIgAykCADcDqAEgAkGoAWogABAZQQJ0aigCAEEBIAcgCyABELkCDAILIAMoAgAgAiADKQIINwOgAiACIAMpAgA3A5gCIAJBmAJqIAUQGUECdGooAgAgAygCACACIAMpAgg3A5ACIAIgAykCADcDiAIgAkGIAmogABAZQQJ0aigCAEEAIAQgBiABELkCIAMoAgAgAiADKQIINwOAAiACIAMpAgA3A/gBIAJB+AFqIAUQGUECdGooAgAgAygCACACIAMpAgg3A/ABIAIgAykCADcD6AEgAkHoAWogABAZQQJ0aigCAEEBIAcgCyABELkCDAELIAMoAgAgAiADKQIINwOAAyACIAMpAgA3A/gCIAJB+AJqIAUQGUECdGooAgAgAygCACACIAMpAgg3A/ACIAIgAykCADcD6AIgAkHoAmogABAZQQJ0aigCAEEAIAQgBiABELkCIAMoAgAgAiADKQIINwPgAiACIAMpAgA3A9gCIAJB2AJqIAUQGUECdGooAgAgAygCACACIAMpAgg3A9ACIAIgAykCADcDyAIgAkHIAmogABAZQQJ0aigCAEEBIAcgCyABELkCIAhBf0cNACADKAIAIAIgAykCCDcDwAIgAiADKQIANwO4AiACQbgCaiAFEBlBAnRqKAIAIAMoAgAgAiADKQIINwOwAiACIAMpAgA3A6gCIAJBqAJqIAAQGUECdGooAgAgByABEJUOCyAAQQFqIQAgCigAICEEDAALAAsACwsgDCgCACEMDAELCyACQbAEaiQAQX9BACAMGwurAgELfyMAQSBrIgEkACAAELABIQYDQAJAIAZFDQAgBigCEBCwASECA0AgAgRAIAIoACAiBwRAIAJBGGohAyAHQQFrIQogAigCMCEIQQAhAANAAkAgAEEBaiIJIQQgACAKRg0AA0AgBCAHRgRAIAkhAAwDCyADKAIAIAEgAykCCDcDGCABIAMpAgA3AxAgAUEQaiAAEBlBAnRqKAIAIAMoAgAgASAD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IANBoAFqEDIgAUEBaiEBDAELAAsAC0G+mANBjbwBQcwDQYCJARAAAAsgDiADKAKUAkHIABAaIg82AgggDiADKAKUAiIRNgIAQQAhAQNAIAEgEUYEQCAGEBggAysDsAIhGyADKwOoAiEcIAMrA6ACIR0gAysDmAIhH0EBQRgQGiIEQQA2AgAgBCARQQJ0IgBBAnJBKBAaNgIQQZzNCkG06wkoAgAQkgEhC0G0zQpBtOsJKAIAEJIBIQkgAEEgEBohDCAAQQQQGiEGQQAhAANAIAAgEUYEQEEAIQYDQCAGIApHBEAgA0IANwPIAiADQgA3A8ACIANCADcDuAIgAyACIAZByABsaiIBKQMwNwPYAiADIAEpAyg3A9ACIAkgA0HQAmpBgAQgCSgCABEDACEAA0ACQCAARQ0AIAArAwggASsDOGNFDQAgAyAAKAIANgLMAiADQbgCakEEECchByADKAK4AiAHQQJ0aiADKALMAjYCACAAKAIAIAE2AhggCSAAQQggCSgCABEDACEADAELCyALIANB0AJqQYAEIAsoAgARAwAhAANAAkAgASsDQCEbIABFDQAgACsDECAbY0UNACADIAAoAgA2AswCIANBuAJqQQQQJyEHIAMoArgCIAdBAnRqIAMoAswCNgIAIAAoAgAgATYCGCALIABBCCALKAIAEQMAIQAMAQsLIAMgGzkD2AIgCSADQdACakGABCAJKAIAEQMAIQADQAJAIAErAzghGyAARQ0AIAArAwggG2NFDQAgAyAAKAIANgLMAiADQbgCakEEECchByADKAK4AiAHQQJ0aiADKALMAjYCACAAKAIAIAE2AhQgCSAAQQggCSgCABEDACEADAELCyADIBs5A9ACIAMgASsDMDkD2AIgCyADQdACakGABCALKAIAEQMAIQADQAJAIABFDQAgACsDECABKwNAY0UNACADIAAoAgA2AswCIANBuAJqQQQQJyEHIAMoArgCIAdBAnRqIAMoAswCNgIAIAAoAgAgATYCFCALIABBCCALKAIAEQMAIQAMAQsLIANBuAJqIAFBJGogAUEgakEEEMYBIAEoAiAiACAQIAAgEEsbIRAgBkEBaiEGDAELCwNAIAogDUYEQCAEKAIQIAQoAgAiAEEobGoiASAANgIgIAEgAEEBajYCSEEAIQIgBCgCAEEGbCAQQQF0akEE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BiAEQdgXaiACKQIINwMAIAQgAikCADcD0BcCQCAGIARB0BdqIAwQGUHIAGxqKAIwIgZBAWtBfUsNACACKAIAIARByBdqIAIpAgg3AwAgBCACKQIANwPAFyAEQcAXaiAGEBlByABsaigCLCAFRw0AIAIoAgAgBEG4F2ogAikCCDcDACAEIAIpAgA3A7AXIARBsBdqIAYQGUHIAGxqIAw2AiwLIAIoAgAhBiAEQagXaiACKQIINwMAIAQgAikCADcDoBcCQCAGIARBoBdqIAwQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARBmBdqIAIpAgg3AwAgBCACKQIANwOQFyAEQZAXaiAGEBlByABsaigCKCAFRw0AIAIoAgAgBEGIF2ogAikCCDcDACAEIAIpAgA3A4AXIARBgBdqIAYQGUHIAGxqIAw2AigLIAIoAgAhBiAEQfgWaiACKQIINwMAIAQgAikCADcD8BYCQCAGIARB8BZqIAwQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARB6BZqIAIpAgg3AwAgBCACKQIANwPgFiAEQeAWaiAGEBlByABsaigCLCAFRw0AIAIoAgAgBEHYFmogAikCCDcDACAEIAIpAgA3A9AWIARB0BZqIAYQGUHIAGxqIAw2AiwLIAMQ8AEhCSADEPABIQcgAigCACAEQcgWaiACKQIINwMAIAQgAikCADcDwBYgBEHAFmogBRAZQcgAbGooAjghBiADKAIAIARBuBZqIAMpAgg3AwAgBCADKQIANwOwFiAEQbAWaiAGEBlBKGxqQQI2AgAgAygCACAEQagWaiADKQIINwMAIAQgAykCADcDoBYgBEGgFmogBhAZQShsaiILIAQpA9gZNwMIIAsgBEHgGWopAwA3AxAgAygCACAEQZgWaiADKQIINwMAIAQgAykCADcDkBYgBEGQFmogBhAZQShsaiAANgIEIAMoAgAgBEGIFmogAykCCDcDACAEIAMpAgA3A4AWIARBgBZqIAYQGUEobGogBzYCICADKAIAIARB+BVqIAMpAgg3AwAgBCADKQIANwPwFSAEQfAVaiAGEBlBKGxqIAk2AiQgAygCACAEQegVaiADKQIINwMAIAQgAykCADcD4BUgBEHgFWogCRAZQShsakEDNgIAIAMoAgAgBEHYFWogAykCCDcDACAEIAMpAgA3A9AVIARB0BVqIAkQGUEobGogBTYCGCADKAIAIARByBVqIAMpAgg3AwAgBCADKQIANwPAFSAEQcAVaiAJEBlBKGxqIAY2AhwgAygCACAEQbgVaiADKQIINwMAIAQgAykCADcDsBUgBEGwFWogBxAZQShsakEDNgIAIAMoAgAgBEGoFWogAykCCDcDACAEIAMpAgA3A6AVIARBoBVqIAcQGUEobGogDDYCGCADKAIAIARBmBVqIAMpAgg3AwAgBCADKQIANwOQFSAEQZAVaiAHEBlBKGxqIAY2AhwgAigCACAEQYgVaiACKQIINwMAIAQgAikCADcDgBUgBEGAFWogBRAZQcgAbGogCTYCOCACKAIAIARB+BRqIAIpAgg3AwAgBCACKQIANwPwFCAEQfAUaiAMEBlByABsaiAHNgI4CyABQTBBLCAKGyIQIAEgAEE4bGpqKAIAQThsai0AICELIAggBEHYGWogBCgCgBogASADEPIFIQkgC0UEQCACELcDIQUgAigCACEGIARB6BRqIAIpAgg3AwAgBCACKQIANwPgFCACQRhqIAYgBEHgFGogCRAZQcgAbGpByAAQICEHIARB2BRqIAIpAgg3AwAgBCACKQIANwPQFCAEQdAUaiAFEBkhBgJAAkAgAigCECIKDgIBAwALIARBiBRqIg0gAigCACAGQcgAbGpByAAQIBogDSAKEQEACyACKAIAIAZByABsaiAHQcgAECAaIAIoAgAgBEGAFGogAikCCDcDACAEIAIpAgA3A/gTIARB+BNqIAkQGUHIAGxqIgYgCCkDADcDGCAGIAgpAwg3AyAgAigCACAEQfATaiACKQIINwMAIAQgAikCADcD6BMgBEHoE2ogBRAZQcgAbGoiBiAIKQMANwMIIAYgCCkDCDcDECACKAIAIARB4BNqIAIpAgg3AwAgBCACKQIANwPYEyAEQdgTaiAJEBlByABsaiAFNgIwIAIoAgAgBEHQE2ogAikCCDcDACAEIAIpAgA3A8gTIARByBNqIAkQGUHIAGxqQQA2AjQgAigCACAEQcATaiACKQIINwMAIAQgAikCADcDuBMgBEG4E2ogBRAZQcgAbGogCTYCKCACKAIAIARBsBNqIAIpAgg3AwAgBCACKQIANwOoEyAEQagTaiAFEBlByABsakEANgIsIAIoAgAhBiAEQaATaiACKQIINwMAIAQgAikCADcDmBMCQCAGIARBmBNqIAUQGUHIAGxqKAIwIgZBAWtBfUsNACACKAIAIARBkBNqIAIpAgg3AwAgBCACKQIANwOIEyAEQYgTaiAGEBlByABsaigCKCAJRw0AIAIoAgAgBEGAE2ogAikCCDcDACAEIAIpAgA3A/gSIARB+BJqIAYQGUHIAGxqIAU2AigLIAIoAgAhBiAEQfASaiACKQIINwMAIAQgAikCADcD6BICQCAGIARB6BJqIAUQGUHIAGxqKAIwIgZBAWtBfUsNACACKAIAIARB4BJqIAIpAgg3AwAgBCACKQIANwPYEiAEQdgSaiAGEBlByABsaigCLCAJRw0AIAIoAgAgBEHQEmogAikCCDcDACAEIAIpAgA3A8gSIARByBJqIAYQGUHIAGxqIAU2AiwLIAIoAgAhBiAEQcASaiACKQIINwMAIAQgAikCADcDuBICQCAGIARBuBJqIAUQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARBsBJqIAIpAgg3AwAgBCACKQIANwOoEiAEQagSaiAGEBlByABsaigCKCAJRw0AIAIoAgAgBEGgEmogAikCCDcDACAEIAIpAgA3A5gSIARBmBJqIAYQGUHIAGxqIAU2AigLIAIoAgAhBiAEQZASaiACKQIINwMAIAQgAikCADcDiBICQCAGIARBiBJqIAUQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARBgBJqIAIpAgg3AwAgBCACKQIANwP4ESAEQfgRaiAGEBlByABsaigCLCAJRw0AIAIoAgAgBEHwEWogAikCCDcDACAEIAIpAgA3A+gRIARB6BFqIAYQGUHIAGxqIAU2AiwLIAMQ8AEhByADEPABIQogAigCACAEQeARaiACKQIINwMAIAQgAikCADcD2BEgBEHYEWogCRAZQcgAbGooAjghBiADKAIAIARB0BFqIAMpAgg3AwAgBCADKQIANwPIESAEQcgRaiAGEBlBKGxqQQI2AgAgAygCACAEQcARaiADKQIINwMAIAQgAykCADcDuBEgBEG4EWogBhAZQShsaiIOIAgpAwA3AwggDiAIKQMINwMQIAMoAgAgBEGwEWogAykCCDcDACAEIAMpAgA3A6gRIARBqBFqIAYQGUEobGogADYCBCADKAIAIARBoBFqIAMpAgg3AwAgBCADKQIANwOYESAEQZgRaiAGEBlBKGxqIAo2AiAgAygCACAEQZARaiADKQIINwMAIAQgAykCADcDiBEgBEGIEWogBhAZQShsaiAHNgIkIAMoAgAgBEGAEWogAykCCDcDACAEIAMpAgA3A/gQIARB+BBqIAcQGUEobGpBAzYCACADKAIAIARB8BBqIAMpAgg3AwAgBCADKQIANwPoECAEQegQaiAHEBlBKGxqIAk2AhggAygCACAEQeAQaiADKQIINwMAIAQgAykCADcD2BAgBEHYEGogBxAZQShsaiAGNgIcIAMoAgAgBEHQEGogAykCCDcDACAEIAMpAgA3A8gQIARByBBqIAoQGUEobGpBAzYCACADKAIAIARBwBBqIAMpAgg3AwAgBCADKQIANwO4ECAEQbgQaiAKEBlBKGxqIAU2AhggAygCACAEQbAQaiADKQIINwMAIAQgAykCADcDqBAgBEGoEGogChAZQShsaiAGNgIcIAIoAgAgBEGgEGogAikCCDcDACAEIAIpAgA3A5gQIARBmBBqIAkQGUHIAGxqIAc2AjggAigCACAEQZAQaiACKQIINwMAIAQgAikCADcDiBAgBEGIEGogBRAZQcgAbGogCjYCOAsgDyAQaiETIAJBGGohFEEAIRAgDCEFQQAhDgNAAkACQCAFIghBAWtBfUsNACACKAIAIQUgBEGAEGogAikCCDcDACAEIAIpAgA3A/gPIARB+A9qIAgQGSEGIAIoAgAhByAEQfAPaiACKQIINwMAIAQgAikCADcD6A8gBEHoD2ogCRAZIQoCQCAFIAZByABsaiIFKwAgIhUgByAKQcgAbGoiBisAICIWREivvJry13o+oGQNACAVIBZESK+8mvLXer6gY0UgBSsAGCIXIAYrABgiGGRxDQAgFSAWoZlESK+8mvLXej5lRSAXIBihmURIr7ya8td6PmVFcg0BCyACKAIAIARB4A9qIAIpAgg3AwAgBCACKQIANwPYDyAEQdgPaiAIEBlByABsaigCOCEFIAMQ8AEhByADEPABIQogAygCACAEQdAPaiADKQIINwMAIAQgAykCADcDyA8gBEHID2ogBRAZQShsakEBNgIAIAMoAgAgBEHAD2ogAykCCDcDACAEIAMpAgA3A7gPIARBuA9qIAUQGUEobGogADYCBCADKAIAIARBsA9qIAMpAgg3AwAgBCADKQIANwOoDyAEQagPaiAFEBlBKGxqIAc2AiAgAygCACAEQaAPaiADKQIINwMAIAQgAykCADcDmA8gBEGYD2ogBRAZQShsaiAKNgIkIAMoAgAgBEGQD2ogAykCCDcDACAEIAMpAgA3A4gPIARBiA9qIAcQGUEobGpBAzYCACADKAIAIARBgA9qIAMpAgg3AwAgBCADKQIANwP4DiAEQfgOaiAHEBlBKGxqIAg2AhggAygCACAEQfAOaiADKQIINwMAIAQgAykCADcD6A4gBEHoDmogBxAZQShsaiAFNgIcIAMoAgAgBEHgDmogAykCCDcDACAEIAMpAgA3A9gOIARB2A5qIAoQGUEobGpBAzYCACACELcDIQYgAygCACAEQdAOaiADKQIINwMAIAQgAykCADcDyA4gBEHIDmogChAZQShsaiAGNgIYIAIoAgAgBEHADmogAikCCDcDACAEIAIpAgA3A7gOIARBuA5qIAYQGUHIAGxqQQE6AEQgAygCACAEQbAOaiADKQIINwMAIAQgAykCADcDqA4gBEGoDmogChAZQShsaiAFNgIcIAIoAgAgBEGgDmogAikCCDcDACAEIAIpAgA3A5gOIARBmA5qIAgQGSACKAIAIREgBEGQDmogAikCCDcDACAEIAIpAgA3A4gOIARBiA5qIAkQGSESQcgAbGoiBSsAICEVIBEgEkHIAGxqIg0rACAhFiAFKwAYIRcgDSsAGCEYIAIoAgAhBSAEQYAOaiACKQIINwMAIAQgAikCADcD+A0gFCAFIARB+A1qIAgQGUHIAGxqQcgAECAhDSAEQfANaiACKQIINwMAIAQgAikCADcD6A0gBEHoDWogBhAZIQUCQAJAIAIoAhAiEQ4CAQUACyAEQaANaiISIAIoAgAgBUHIAGxqQcgAECAaIBIgEREBAAsgBiAQIBcgGKGZREivvJry13o+ZRsgECAVIBahmURIr7ya8td6PmUbIRAgBiAOIAggDEYbIQ4gAigCACAFQcgAbGogDUHIABAgGiACKAIAIARBmA1qIAIpAgg3AwAgBCACKQIANwOQDSAEQZANaiAIEBlByABsaiAHNgI4IAIoAgAgBEGIDWogAikCCDcDACAEIAIpAgA3A4ANIARBgA1qIAYQGUHIAGxqIAo2AjggAigCACAEQfgMaiACKQIINwMAIAQgAikCADcD8AwgBEHwDGogCBAZQcgAbGooAjBBAWtBfkkNASACKAIAIARB6AxqIAIpAgg3AwAgBCACKQIANwPgDCAEQeAMaiAIEBlByABsaigCNEEBa0F+SQ0BQdqCBEETQQFBqPMIKAIAEDsaCyAAIAwgCUEBIAIgAxCtDiAAIA4gEEECIAIgAxCtDiAPQQE6ACAgBEGQGmokAA8LIAIoAgAhBSAEQdgMaiACKQIINwMAIAQgAikCADcD0AwCfwJAIAUgBEHQDGogCBAZQcgAbGooAjBBAWtBfUsNACACKAIAIARByAxqIAIpAgg3AwAgBCACKQIANwPADCAEQcAMaiAIEBlByABsaigCNEEBa0F+SQ0AIARB2BlqIgcgASACIAggBhCNCCACKAIAIARBuAxqIAIpAgg3AwAgBCACKQIANwOwDCAEQbAMaiAIEBlByABsaisDICEVIAIoAgAhBSAEQagMaiACKQIINwMAIAQgAikCADcDoAwCQAJAIBUgBSAEQaAMaiAJEBlByABsaisDIKGZREivvJry13o+ZUUNACACKAIAIARBmAxqIAIpAgg3AwAgBCACKQIANwOQDCAEQZAMaiAIEBlByABsaisDGCACKAIAIARBiAxqIAIpAgg3AwAgBCACKQIANwOADCAEQYAMaiAJEBlByABsaisDGKGZREivvJry13o+ZUUgC0VyDQACQCATKAIAIgVBAEwNACAFIAEgBxDJBEUNACACKAIAIQUgBEG4C2ogAikCCDcDACAEIAIpAgA3A7ALIAUgBEGwC2ogCBAZQcgAbGooAjAhByAEQagLaiACKQIINwMAIAQgAikCADcDoAsgBSAEQaALaiAHEBlByABsaiAINgIoIAIoAgAgBEGYC2ogAikCCDcDACAEIAIpAgA3A5ALIARBkAtqIAYQGUHIAGxqQX82AjAgAigCACAEQYgLaiACKQIINwMAIAQgAikCADcDgAsgBEGAC2ogBhAZQcgAbGpBfzYCNAwCCyACKAIAIQUgBEH4C2ogAikCCDcDACAEIAIpAgA3A/ALIAUgBEHwC2ogBhAZQcgAbGooAjAhByAEQegLaiACKQIINwMAIAQgAikCADcD4AsgBSAEQeALaiAHEBlByABsaiAGNgIsIAIoAgAgBEHYC2ogAikCCDcDACAEIAIpAgA3A9ALIARB0AtqIAgQGUHIAGxqQX82AjAgAigCACAEQcgLaiACKQIINwMAIAQgAikCADcDwAsgBEHAC2ogCBAZQcgAbGpBfzYCNAwBCyACKAIAIQUgBEH4CmogAikCCDcDACAEIAIpAgA3A/AKIAUgBEHwCmogCBAZQcgAbGooAjAhByAEQegKaiACKQIINwMAIAQgAikCADcD4AoCQCAFIARB4ApqIAcQGUHIAGxqKAIoQQFrQX1LDQAgAigCACEFIARB2ApqIAIpAgg3AwAgBCACKQIANwPQCiAFIARB0ApqIAgQGUHIAGxqKAIwIQcgBEHICmogAikCCDcDACAEIAIpAgA3A8AKIAUgBEHACmogBxAZQcgAbGooAixBAWtBfUsNACACKAIAIQUgBEG4CmogAikCCDcDACAEIAIpAgA3A7AKIAUgBEGwCmogCBAZQcgAbGooAjAhByAEQagKaiACKQIINwMAIAQgAikCADcDoAogBSAEQaAKaiAHEBlByABsaigCKCEHIAIoAgAhBSAEQZgKaiACKQIINwMAIAQgAikCADcDkAogBSAEQZAKaiAIEBlByABsaigCMCEKIARBiApqIAIpAgg3AwAgBCACKQIANwOACiAFIARBgApqIAoQGUHIAGxqIgVBLGogBUEoaiAHIAhGIgcbKAIAIQogAigCACEFIARB+AlqIAIpAgg3AwAgBCACKQIANwPwCSAFIARB8AlqIAgQGUHIAGxqKAIwIQ0gBEHoCWogAikCCDcDACAEIAIpAgA3A+AJIAUgBEHgCWogDRAZQcgAbGogCjYCPCACKAIAIQUgBEHYCWogAikCCDcDACAEIAIpAgA3A9AJIAUgBEHQCWogCBAZQcgAbGooAjAhCiAEQcgJaiACKQIINwMAIAQgAikCADcDwAkgBSAEQcAJaiAKEBlByABsakEBQQIgBxs2AkALIAIoAgAhBSAEQbgJaiACKQIINwMAIAQgAikCADcDsAkgBSAEQbAJaiAIEBlByABsaigCMCEHIARBqAlqIAIpAgg3AwAgBCACKQIANwOgCSAFIARBoAlqIAcQGUHIAGxqIAg2AiggAigCACEFIARBmAlqIAIpAgg3AwAgBCACKQIANwOQCSAFIARBkAlqIAgQGUHIAGxqKAIwIQcgBEGICWogAikCCDcDACAEIAIpAgA3A4AJIAUgBEGACWogBxAZQcgAbGogBjYCLAsgAigCACAEQfgIaiACKQIINwMAIAQgAikCADcD8AggBEHwCGogCBAZQcgAbGpBMGoMAQsgAigCACEFIARB6AhqIAIpAgg3AwAgBCACKQIANwPgCAJAIAUgBEHgCGogCBAZQcgAbGooAjBBAWtBfkkNACACKAIAIARB2AhqIAIpAgg3AwAgBCACKQIANwPQCCAEQdAIaiAIEBlByABsaigCNEEBa0F9Sw0AIARB2BlqIgcgASACIAggBhCNCCACKAIAIARByAhqIAIpAgg3AwAgBCACKQIANwPACCAEQcAIaiAIEBlByABsaisDICEVIAIoAgAhBSAEQbgIaiACKQIINwMAIAQgAikCADcDsAgCQAJAIBUgBSAEQbAIaiAJEBlByABsaisDIKGZREivvJry13o+ZUUNACACKAIAIARBqAhqIAIpAgg3AwAgBCACKQIANwOgCCAEQaAIaiAIEBlByABsaisDGCACKAIAIARBmAhqIAIpAgg3AwAgBCACKQIANwOQCCAEQZAIaiAJEBlByABsaisDGKGZREivvJry13o+ZUUgC0VyDQACQCATKAIAIgVBAEwNACAFIAEgBxDJBEUNACACKAIAIQUgBCACKQIINwPIByAEIAIpAgA3A8AHIAUgBEHAB2ogCBAZQcgAbGooAjQhByAEIAIpAgg3A7gHIAQgAikCADcDsAcgBSAEQbAHaiAHEBlByABsaiAINgIoIAIoAgAgBCACKQIINwOoByAEIAIpAgA3A6AHIARBoAdqIAYQGUHIAGxqQX82AjAgAigCACAEIAIpAgg3A5gHIAQgAikCADcDkAcgBEGQB2ogBhAZQcgAbGpBfzYCNAwCCyACKAIAIQUgBEGICGogAikCCDcDACAEIAIpAgA3A4AIIAUgBEGACGogBhAZQcgAbGooAjQhByAEIAIpAgg3A/gHIAQgAikCADcD8AcgBSAEQfAHaiAHEBlByABsaiAGNgIsIAIoAgAgBCACKQIINwPoByAEIAIpAgA3A+AHIARB4AdqIAgQGUHIAGxqQX82AjAgAigCACAEIAIpAgg3A9gHIAQgAikCADcD0AcgBEHQB2ogCBAZQcgAbGpBfzYCNAwBCyACKAIAIQUgBCACKQIINwOIByAEIAIpAgA3A4AHIAUgBEGAB2og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IARB0AVqIBIQGUEobGpBAzYCACAEIAApAwA3A8gFIAQgBCkDoAg3A8AFIAQoAqAIIARBwAVqIBIQGUEobGogBzYCHCAFELcDIQcgBRC3AyEKIAUQtwMhDCAFELcDIQ0gBSgCACAEIAUpAgg3A7gFIAQgBSkCADcDsAUgBEGwBWogBxAZIAQgACkDADcDqAUgBCAEKQOgCDcDoAVByABsaiIIIAQoAqAIIARBoAVqIAkQGUEobGoiCykDCDcDCCAIIAspAxA3AxAgBSgCACAEIAUpAgg3A5gFIAQgBSkCADcDkAUgBEGQBWogChAZIAQgACkDADcDiAUgBCAEKQOgCDcDgAVByABsaiIIIAQoAqAIIARBgAVqIAkQGUEobGoiCykDCDcDCCAIIAspAxA3AxAgBSgCACAEIAUpAgg3A/gEIAQgBSkCADcD8AQgBEHwBGogDRAZIAQgACkDADcD6AQgBCAEKQOgCDcD4ARByABsaiIIIAQoAqAIIARB4ARqIAkQGUEobGoiCykDCDcDGCAIIAspAxA3AyAgBSgCACAEIAUpAgg3A9gEIAQgBSkCADcD0AQgBEHQBGogBxAZIAQgACkDADcDyAQgBCAEKQOgCDcDwARByABsaiIIIAQoAqAIIARBwARqIAYQGUEobGoiCykDCDcDGCAIIAspAxA3AyAgBSgCACAEIAUpAgg3A7gEIAQgBSkCADcDsAQgBEGwBGogChAZIAQgACkDADcDqAQgBCAEKQOgCDcDoARByABsaiIIIAQoAqAIIARBoARqIAYQGUEobGoiCykDCDcDGCAIIAspAxA3AyAgBSgCACAEIAUpAgg3A5gEIAQgBSkCADcDkAQgBEGQBGogDBAZIAQgACkDADcDiAQgBCAEKQOgCDcDgARByABsaiIIIAQoAqAIIARBgARqIAYQGUEobGoiBikDCDcDCCAIIAYpAxA3AxAgBSgCACAEIAUpAgg3A/gDIAQgBSkCADcD8AMgBEHwA2ogDRAZQcgAbGpC//////////f/ADcDECAFKAIAIAQgBSkCCDcD6AMgBCAFKQIANwPgAyAEQeADaiANEBlByABsakL/////////9/8ANwMIIAUoAgAgBCAFKQIINwPYAyAEIAUpAgA3A9ADIARB0ANqIAwQGUHIAGxqQv////////93NwMgIAUoAgAgBCAF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AkAgBiAFQShsaiIBKAIgRQ0AIAMgAikDGDcDmAEgAyACKQMQNwOQASADIAIpAwg3A4gBIAMgAikDADcDgAEgAyABKQMINwNoIAMgASkDEDcDcCADIAEpAxg3A3ggAyABKQMANwNgIANBgAFqIANB4ABqEIoDRQ0AIAEoAiAhASADIAIpAxg3A1ggAyACKQMQNwNQIAMgAikDCDcDSCADIAIpAwA3A0AgACABIANBQGsQuA4hByAEIgFFBEAgByEEDAELA0AgASIIKAIAIgENAAsgCCAHNgIACyAFQQFqIQUMAAsACyADQaABaiQAIAQLfQEEfyAAQShqIQICQCAAKAIEQQBKBEADQCABQcAARg0CIAIgAUEobGoiAygCACIEBEAgBBC5DiADKAIAEBggACABELoOCyABQQFqIQEMAAsACwNAIAFBwABGDQEgAiABQShsaigCAARAIAAgARC6DgsgAUEBaiEBDAALAAsLXQACQCAARSABQcAAT3JFBEAgACABQShsaiIBKAIoRQ0BIAFBCGoQuw4gACAAKAIAQQFrNgIADwtBy9sBQau9AUGtAUHK+gAQAAALQfWlAUGrvQFBrgFByvoAEAAACw4AIAAQvQ4gAEEANgIgCzoBAX8gAEKAgICAcDcDACAAQQhqIQFBACEAA0AgAEHAAEcEQCABIABBKGxqELsOIABBAWohAAwBCwsLJQEBfwNAIAFBBEcEQCAAIAFBA3RqQgA3AwAgAUEBaiEBDAELCwvyAwEDfyMAQfAAayIDJAACQAJAAkACQANAIAQgACgACE8NASAAKAIAIAMgACkCCDcDSCADIAApAgA3A0AgA0FAayAEEBlBHGxqKAIAIgVFDQMgAkUNBCAFIAIQTARAIARBAWohBAwBCwsgACgCACADIAApAgg3AzggAyAAKQIANwMwIANBMGogBBAZQRxsaiABNgIYIAAoAgAgAyAAKQIINwMoIAMgACkCADcDICADQSBqIAQQGUEcbGpBBGpBBBAnIQEgACgCACADIAApAgg3AxggAyAAKQIANwMQIANBEGogBBAZQRxsaigCGCECIAAoAgAgAyAAKQIINwMIIAMgACkCADcDACADIAQQGUEcbGooAgQgAUECdGogAjYCAAwBCyADQQA2AmggA0IANwJgIAMgATYCbCADQgA3AlggAyACNgJUIANB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ASgCsAIgAEEcbGoiACkCCDcDOCABQUBrIAApAhA3AwAgASAAKAIYNgJIIAEgACkCADcDMCABQTBqIAMRAQALIAJBAWohAgwBCwALAAUgASABKQLoAjcDKCABIAEpAuACNwMgIAFBIGogAhAZIQACQAJAIAEoAvACIgMOAgEHAAsgASABKALgAiAAQRxsaiIAKQIINwMIIAEgACkCEDcDECABIAAoAhg2AhggASAAKQIANwMAIAEgAxEBAAsgAkEBaiECDAELAAsACyAAIAUQbiECA0BBACEDAkACQAJAIAJFBEBBACECA0AgAiABKALoAiIETw0CIAEgASkC6AI3A5ABIAEgASkC4AI3A4gBIAEoAuACIAFBiAFqIAIQGUEcbGooAAxBAk8EQCABIAEpAugCNwOAASABIAEpAuACNwN4IAEgASgC4AIgAUH4AGogAhAZQRxsaiIEKQIUNwNwIAEgBCkCDDcDaCABIAQpAgQ3A2AgBSABQeAAahC/DgsgAkEBaiECDAALAAsgAkFQQQAgAigCAEEDcSIDQQJHG2ooAigiBCACIAJBMGoiBiADQQNGGygCKEYNAgJAIAQgBUcNAEGs2gooAgAiBEUNACACIAQQRCIDLQAADQIgAigCAEEDcSEDCyACIAYgA0EDRhsoAiggBUcNAkGw2gooAgAiA0UNAiACIAMQRCIDLQAARQ0CIAFBsAJqIAIgAxC+DgwCCwNAAkAgAyAETwRAIAFB4AJqQRwQM0EAIQNBACECA0AgAiABKAK4AiIETw0CIAEgASkCuAI3A/gBIAEgASkCsAI3A/ABIAEoArACIAFB8AFqIAIQGUEcbGooAAxBAk8EQCABIAEpArgCNwPoASABIAEpArACNwPgASABIAEoArACIAFB4AFqIAIQGUEcbGoiBCkCFDcD2AEgASAEKQIMNwPQASABIAQpAgQ3A8gBIAUgAUHIAWoQvw4LIAJBAWohAgwACwALIAEgASkC6AI3A8ABIAEgASkC4AI3A7gBIAFBuAFqIAMQGSECAkACQCABKALwAiIEDgIBCQALIAEgASgC4AIgAkEcbGoiAikCCDcDoAEgASACKQIQNwOoASABIAIoAhg2ArABIAEgAikCADcDmAEgAUGYAWogBBEBAAsgA0EBaiEDIAEoAugCIQQMAQsLA0AgAyAETwRAIAFBsAJqQRwQMyAAIAUQHSEFDAUFIAEgASkCuAI3A6gCIAEgASkCsAI3A6ACIAFBoAJqIAMQGSECAkACQCABKALAAiIEDgIBCQALIAEgASgCsAIgAkEcbGoiAikCCDcDiAIgASACKQIQNwOQAiABIAIoAhg2ApgCIAEgAikCADcDgAIgAUGAAmogBBEBAAsgA0EBaiEDIAEoArgCIQQMAQsACwALIAFB4AJqIAIgAxC+DgsgACACIAUQciECDAALAAsACyABQZADaiQADwtBvoAEQcIAQQFBqPMIKAIAEDsaEDwACxwBAX9BASECIAAgARDQDgR/QQEFIAAgARDPDgsLQAECfwJAIAEgACgCAE8NACACIAAoAgQiBE8NACAAKAIIIAEgBGwgAmoiAEEDdmotAAAgAEEHcXZBAXEhAwsgAwvOAgEKfwJAAkAgAARAIAAoAgAiBSABSyAAKAIEIgQgAktxRQRAIAQgAkEBaiIDIAMgBEkbIgQgBSABQQFqIgMgAyAFSRsiBWwiA0EDdiADQQdxQQBHahDGAyEHIAAoAgAhCANAIAYgCEcEQCAEIAZsIQkgACgCBCEKQQAhAwNAIAMgCkYEQCAGQQFqIQYMAwsgACAGIAMQwg4EQCAHIAMgCWoiC0EDdmoiDCAMLQAAQQEgC0EHcXRyOgAACyADQQFqIQMMAAsACwsgACgCCBAYIAAgBzYCCCAAIAQ2AgQgACAFNgIACyABIAVPDQEgAiAETw0CIAAoAgggASAEbCACaiIAQQN2aiIBIAEtAABBASAAQQdxdHI6AAAPC0Gy1AFBurgBQccAQZoiEAAAC0G6JkG6uAFB5ABBmiIQAAALQdwsQbq4AUHlAEGaIhAAAAuqAgEHfyMAQRBrIgQkACAAKAIAIgMoAhAhBSADKAIIIQYgAgRAEJ4OCyAFQRhqIgIhAANAIAAoAgAiAARAIAAoAghFBEAQng4LIABBDGohAAwBCwsgAUGCAmsiAUEDSQRAIAMgARCgCCACIQADQCAAKAIAIgAEQAJAIAAoAgBBiwJGDQACQCAAKAIEIgMtABUEQCAFKAIAIAZGDQELIAAoAggQdSAAKAIIIQMgBSgCACEHIAAoAgQoAgghCARAIAcgASAIIAMQ6AMhAwwBCyAHIAEgCCADECIhAwsgBSgCACAGRw0AIANBAToAFgsgAEEMaiEADAELCyAGIAIQugIgBEEQaiQADwsgBEH2AjYCBCAEQY0SNgIAQajzCCgCAEHmvAQgBBAfGhA8AAtMAQF/A0AgACIBKAIQKAJ4IgANAAsgAUEwQQAgASgCAEEDcSIAQQNHG2ooAigoAhAoAugBIAFBUEEAIABBAkcbaigCKCgCECgC6AFHC88EAQd/IwBBIGsiBCQAAkACQAJAAkACQCABQVBBACABKAIAQQNxIgVBAkcbaigCKCIGKAIQKALQASIHRQ0AIAFBMEEAIAVBA0cbaiEIA0AgByADQQJ0aigCACICRQ0BIANBAWohAyACQVBBACACKAIAQQNxQQJHG2ooAiggCCgCKEcNAAsgASACEI0DAkAgAigCECIALQBwQQRHDQAgACgCeA0AIAAgATYCeAsgASABQTBqIgAgASgCAEEDcUEDRhsoAigoAhAiAygC5AEiAkEBaiIFQf////8DTw0CIAJBAmoiAkGAgICABE8NAyADKALgASEDAkAgAkUEQCADEBhBACECDAELIAMgAkECdCIDEGYiAkUNBSADIAVBAnQiBU0NACACIAVqQQA2AAALIAEgACABKAIAQQNxQQNGGygCKCgCECACNgLgASABIAAgASgCAEEDcUEDRhsoAigoAhAiAiACKALkASIDQQFqNgLkASACKALgASADQQJ0aiABNgIAIAEgACABKAIAQQNxQQNGGygCKCgCECIAKALgASAAKALkAUECdGpBADYCAAwBCyAGIAFBMEEAIAVBA0cbaigCKCABEKUIIgIoAhAiA0EEQQMgASgCECIBLQBwQQRGGzoAcCADIAEoAmA2AmAgACACEPwFCyAEQSBqJAAPC0GgvQNBz/wAQc0AQe2yARAAAAsgBEEENgIEIAQgAjYCAEGo8wgoAgBBtOcDIAQQHxoQLAALIAQgAzYCEEGo8wgoAgBBg+cDIARBEGoQHxoQLAALvAEBA38gASgCECIEQQE2ArABAkAgBCgC1AFFDQADQCAEKALQASAFQQJ0aigCACIGRQ0BAkAgACAGEPkFRQ0AIAZBUEEAIAYoAgBBA3FBAkcbaigCKCIEKAIQKAKwAQ0AIAAgBCACIAMQxw4LIAVBAWohBSABKAIQIQQMAAsACyADIAQoAvQBRwRAQe47Qbq4AUGKC0HiORAAAAsgAiABNgIUIAJBBBAnIQAgAigCACAA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IAEQzQ4gBUEBaiEFIAYoAhAiBCgC7AEhBwwBCwsgBCAMOgCRAkEAIQQLIARFDQALQQAhAgNAIAIgAygCQE8NBCADIANBQGspAwA3AyAgAyADKQM4NwMYIANBGGogAhAZIQACQAJAAkAgAygCSCIBDgICAAELIAMoAjggAEECdGooAgAQGAwBCyADKAI4IABBAnRqKAIAIAERAQALIAJBAWohAgwACwALIAIoAhAgCWooAgAhAgwBCwtByPoKKAIAIQUgACgCECICKALoASEEA0AgAigC7AEgBE4EQCAEQcgAbCIBIAUoAhAoAsQBakEAOgAxAkAgAi0AdEEBcUUNACACKALEASABaiIBKAIAIgZBAEwNACAGQQFrIgZBAXZBAWohByABKAIEIQFBACECA0AgAiAHRwRAIAEgAkECdGooAgAgASAGIAJrQQJ0aigCABCVCCACQQFqIQIMAQsLIAAoAhAhAgsgBEEBaiEEDAELCwJAIAAQYCAARw0AEMsEQgBXDQAgAEEAEJQIC0EAIQRBACECA0AgAiADKAJATw0BIAMgA0FAaykDADcDECADIAMpAzg3AwggA0EIaiACEBkhAAJAAkACQCADKAJIIgEOAgIAAQsgAygCOCAAQQJ0aigCABAYDAELIAMoAjggAEECdGooAgAgAREBAAsgAkEBaiECDAALAAsgA0E4aiIAQQQQMyAAEDggA0HQAGokACAEC80IAgp/An5CfyELAkACfyAAIgIQ5g0gACgCECIAQQE2AtwBIAAoAtgBIAAoAsABNgIAIAIQ2w4CQAJAIAJBABDZDiIDDQAgAigCECIAKALoASAAKALsAUoNASACEGAhASACKAIQIgMoAugBIgRBAEoEQCABKAIQKALEASAEQcgAbGpBF2tBADoAAAsDQCADKALsASAETgRAIAEgBCADKAKMAiAEQQJ0aigCACgCECgC+AEiACAEQcgAbCIIIAMoAsQBaigCABDkDUEAIQUgACEGA0AgAigCECIDKALEASAIaiIHKAIAIAVKBEAgASgCECgCxAEgCGooAgQgBkECdGogBygCBCAFQQJ0aigCACIDNgIAIAMoAhAiByAGNgL4ASAHLQCsAUEBRgRAIAMgARA5NgIYCyAGQQFqIQYgAiADEP0FIAEgAxCkCCAFQQFqIQUMAQsLIAcgASgCECgCxAEg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A0AgAQRAAkAgASgCECgCsAENACABEN8NDQAgASABQTBqIgYgASgCAEEDcUEDRhsoAigQogEiBCABIAFBMGsiByABKAIAQQNxQQJGGygCKBCiASICRg0AAkAgBCgCECgC6AFFBEAgAigCECgC6AFFDQELIAEgByABKAIAQQNxIgRBAkYiBxsgASAGIARBA0YiBhshCkEAIQRBACECIAFBAEEwIAYbaigCKCgCECIGKALoASILBEAgBigC9AEgCygCECgCiAIoAhAoAvQBayECCygCKCAKKAIoIAFBAEFQIAcbaigCKCgCECIGKALoASIHBEAgBygCECgCiAIoAhAoAvQBIAYoAvQBayEECyABKAIQKAKsASEHIAAQuwIiBigCEEECOgCsARCiASEKEKIBIQkgBiAKRAAAAAAAAAAAQQAgByACIARqaiIEa7ggBEEASiICGyABKAIQKAKcAUEKbBCfASAGIAkgBEEAIAIbuCABKAIQKAKcARCfASgCECABNgJ4KAIQIAE2AngMAQsgBCACELkDIgYEQCABIAYQjQMMAQsgBCACIAEQ4wEaCyAAIAEQMCEBDAELCyAAIAMQHSEDDAELCyAAKAIQIgMoAuABIQECQAJAAkACQAJAIAMoAuQBIgNFBEAgAQ0BQQAhBgwFCyABRQ0BCyABEKIBIQEgACgCECICIAE2AuABIAIoAuQBIgNFDQELIAMQogEhASAAKAIQIgIgATYC5AEgAUUNACABKAIQIgItALUBQQVGIQYCQANAIAIoAsgBKAIAIgMEQCADQVBBACADKAIAQQNxQQJHG2ooAigiBBCiASAERw0CIAMQogggASgCECECDAELCyAAKAIQIQIMAgtB6KcDQbu7AUGUA0GhMBAAAAtBACEGCyACKALgASIDRQRADAELIAMoAhAiAi0AtQFBA0YhCANAIAIoAsABKAIAIgFFDQEgAUEwQQAgASgCAEEDcUEDRxtqKAIoIgQQogEgBEYEQCABEKIIIAMoAhAhAgwBCwtByKcDQbu7AUGbA0GhMBAAAAsgAEEAEKEIIAAhAUEAIQQDQCABKAIQIgAoAtwBIARLBEAgACAAKALYASAEQQJ0aigCACIANgLAASAAIQMDQCADBEAgAygCECIDQQA2ArABIAMoArgBIQMMAQsLA0AgAARAIAAQ7w4gACgCECgCuAEh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AugBCyADIQEgAgRAIAEgAiAEIAIoAhAoAvQBSBshAQsgACADEB0hAyABIQIMAQsLIAEgAjYCiAILNwAgASgCEEG0+gooAgBBAWo2ArABIAAgATYCFCAAQQQQJyEBIAAoAgAgAUECdGogACgCFDYCAAuUAQEEfyAAKAIQIgEoArABRQRAIAFBAToAtAEgAUEBNgKwAQNAIAEoAsgBIAJBAnRqKAIAIgMEQAJAIANBUEEAIAMoAgBBA3FBAkcbaigCKCIBKAIQIgQtALQBBEAgAxCiCCACQQFrIQIMAQsgBCgCsAENACABEO8OCyACQQFqIQIgACgCECEBDAELCyABQQA6ALQBCwsYAQF/QSQQUiICIAE2AgAgAiAANgIgIAILnAEBBX8gAEEwQQAgACgCAEEDcUEDRxtqKAIoKAIQIgIoAuABIQQgAigC5AEhAwJAA0AgASADRwRAIAFBAnQhBSABQQFqIQEgACAEIAVqKAIARw0BDAILCyACIAQgA0EBaiADQQJqENgBIgE2AuABIAIgAigC5AEiAkEBaiIDNgLkASABIAJBAnRqIAA2AgAgASADQQJ0akEANgIACwv/AgEHfyAAKAJQIQQgACgCJCICIAAtABg6AAACQAJAIAAoAhQgACgCDEECdGooAgAiAygCBCIBQQJqIAJLBEAgASAAKAIcakECaiEFIAEgAygCDGpBAmohBgNAIAEgBUkEQCAGQQFrIgYgBUEBayIFLQAAOgAAIAAoAhQgACgCDEECdGooAgAiAygCBCEBDAELCyAAIAMoAgwiBzYCHCADIAc2AhAgAiAGIAVrIgNqIgIgAUECakkNASADIARqIQQLIAJBAWsiAUHAADoAACAAIAQ2AlAgAS0AACECIAAgATYCJCAAIAI6ABgMAQtB3xUQnQIAC0EAIQIgACgCACgCCCIDKAJMQSxqIQUDQCACQQNHBEACQCAFIAJBAnRqIgQoAgAiAEUNACAAQQBBgAEgACgCABEDACEBA0AgASIARQ0BIAQoAgAiASAAQQggASgCABEDACEBIAAoAhgtAABBJUcNACADIAIgACkDEBDjCQwACwALIAJBAWohAgwBCwsL8AIBA38gACAAQTBqIgIgACgCAEEDcUEDRhsoAigoAhAiASgCyAEgASgCzAEiAUEBaiABQQJqENgBIQEgACACIAAoAgBBA3FBA0YbKAIoKAIQIAE2AsgBIAAgAiAAKAIAQQNxQQNGGygCKCgCECIBIAEoAswBIgNBAWo2AswBIAEoAsgBIANBAnRqIAA2AgAgACACIAAoAgBBA3FBA0YbKAIoKAIQIgIoAsgBIAIoAswBQQJ0akEANgIAIAAgAEEwayICIAAoAgBBA3FBAkYbKAIoKAIQIgEoAsABIAEoAsQBIgFBAWogAUECahDYASEBIAAgAiAAKAIAQQNxQQJGGygCKCgCECABNgLAASAAIAIgACgCAEEDcUECRhsoAigoAhAiASABKALEASIDQQFqNgLEASABKALAASADQQJ0aiAANgIAIAAgAiAAKAIAQQNxQQJGGygCKCgCECICKALAASACKALEAUECdGpBADYCACAAC0IBAn8jAEEQayICJAAgASgCECEDIAIgACgCECkC0AE3AwggAiADKQLYATcDACAAIAJBCGogASACEPUOIAJBEGokAAutAQEDfwJAAkAgASgCBCIFRQ0AIAMoAgQiBkUNACAFIAZPBEAgAygCACECQQAhAQNAIAIgAUECdGooAgAiBEUNAyABQQFqIQEgBEEwQQAgBCgCAEEDcUEDRxtqKAIoIABHDQALDAELIAEoAgAhAEEAIQEDQCAAIAFBAnRqKAIAIgRFDQIgAUEBaiEBIARBUEEAIAQoAgBBA3FBAkcbaigCKCACRw0ACwsgBA8LQQAL2QEBBH8gAEEwQQAgACgCAEEDcSIFQQNHG2ooAigiBiEDAn8CQCABIAZGBH8gAEFQQQAgBUECRxtqKAIoBSADCygCECgCsAIiAyABKAIQIgQoAqwCTgRAIAMgBCgCsAJMDQELIAAoAhAoApwBIQNBAAwBC0EAIQMgACgCECIEKAKkAUEATgR/IAQoAqABBUEACyAEKAKcAWshA0EBCyEEQQAgA2sgA0EBQX8gAkEATAR/IAEgBkYFIABBUEEAIAVBAkcbaigCKCABRgsbIgBBACAAayAEG0EASBsLkwEBBX8jAEEQayICJAAgAEEEaiEBA0AgAyAAKAAMT0UEQCACIAEpAgg3AwggAiABKQIANwMAIAIgAxAZIQQCQAJAAkAgACgCFCIFDgICAAELIAEoAgAgBEECdGooAgAQGAwBCyABKAIAIARBAnRqKAIAIAURAQALIANBAWohAwwBCwsgAUEEEDMgARA4IAJBEGokAAtWAQF/IAAoAgAiACgCECEBA0AgAQRAIAAoAgggAUEIahC6AiAAKAIIIAAoAhBBGGoQugIgACgCCCAAKAIQQRBqELoCIAAgACgCEBC0DiIBNgIQDAELCwuYAQEEf0GAgICAeCECQf////8HIQEgACgCACgCEEHAAWoiAyEAA0AgACgCACIABEAgACgCECIELQCsAUUEQCACIAQoAvQBIgAgACACSBshAiABIAAgACABShshAQsgBEG4AWohAAwBCwsDQCADKAIAIgAEQCAAKAIQIgAgACgC9AEgAWs2AvQBIABBuAFqIQMMAQsLIAIgAWsLlwEBAn8DQAJAAkAgASgCECICKAKsAkF/Rg0AIAJBfzYCrAIgAigCqAIiA0UNACACKAKwAiAAKAIQKAKwAkgNASAAIAFGDQBBss0EQQAQNwsPCyADQTBBACADKAIAQQNxIgFBA0cbaigCKCICIANBUEEAIAFBAkcbaigCKCIBIAIoAhAoArACIAEoAhAoArACShshAQwACwALtgEBA39BACACayEGIAEoAhAoArACIQUDQAJAIAUgACgCECIBKAKsAk4EQCAFIAEoArACTA0BCyABKAKoAiIBKAIQIgQgBCgCoAEgAiAGIAMgACABIAFBMGoiBCABKAIAQQNxQQNGGygCKEdzG2o2AqABIAEgBCABKAIAQQNxIgBBA0YbKAIoIgQgAUFQQQAgAEECRxtqKAIoIgAgBCgCECgCsAIgACgCECgCsAJKGyEADAELCyAAC6oIAQ5/IwBBIGsiASQAAkAgAEEwQQAgACgCAEEDcSICQQNHG2ooAigiBCgCECgCsAIgAEFQQQAgAkECRxtqKAIoIgAoAhAoArACTgRAIAAoAhAiBCgCsAIhCCAEKAKsAiEJIAFBADYCGCABQgA3AxAgAUIANwMIIAEgADYCHCABQQhqQQQQJyEAIAEoAgggAEECdGogASgCHDYCACABQRxqIQpB/////wchBANAIAEoAhAEQCABQQhqIApBBBDHAUEAIQAgASgCHCEHA0AgBygCECICKALIASAAQQJ0aigCACIDBEAgA0FQQQAgAygCAEEDcSILQQJHG2ooAigiDCgCECINKAKwAiEGAkAgAygCECIOKAKkAUEASARAIAYgCEwgBiAJTnENASANKAL0ASADQTBBACALQQNHG2ooAigoAhAoAvQBIA4oAqwBamsiAiAEIAVFIAIgBEhyIgIbIQQgAyAFIAIbIQUMAQsgBiACKAKwAk4NACABIAw2AhwgAUEIakEEECchAiABKAIIIAJBAnRqIAEoAhw2AgALIABBAWohAAwBBUEAIQAgBEEATA0DA0AgAigCmAIgAEECdGooAgAiA0UNBCADQTBBACADKAIAQQNxQQNHG2ooAigiAygCECgCsAIgAigCsAJIBEAgASADNgIcIAFBCGpBBBAnIQIgASgCCCACQQJ0aiABKAIcNgIAIAcoAhAhAgsgAEEBaiEADAALAAsACwALCwwBCyAEKAIQIgAoArACIQggACgCrAIhCSABQQA2AhggAUIANwMQIAFCADcDCCABIAQ2AhwgAUEIakEEECchACABKAIIIABBAnRqIAEoAhw2AgAgAUEcaiEKQf////8HIQQDQCABKAIQBEAgAUEIaiAKQQQQxwFBACEAIAEoAhwhBwNAIAcoAhAiAigCwAEgAEECdGooAgAiAwRAIANBMEEAIAMoAgBBA3EiC0EDRxtqKAIoIgwoAhAiDSgCsAIhBgJAIAMoAhAiDigCpAFBAEgEQCAGIAhMIAYgCU5xDQEgA0FQQQAgC0ECRxtqKAIoKAIQKAL0ASANKAL0ASAOKAKsAWprIgIgBCAFRSACIARIciICGyEEIAMgBSACGyEFDAELIAYgAigCsAJODQAgASAMNgIcIAFBCGpBBBAnIQIgASgCCCACQQJ0aiABKAIcNgIACyAAQQFqIQAMAQVBACEAIARBAEwNAwNAIAIoAqACIABBAnRqKAIAIgNFDQQgA0FQQQAgAygCAEEDcUECRxtqKAIoIgMoAhAoArACIAIoArACSARAIAEgAzYCHCABQQhqQQQQJyECIAEoAgggAkECdGogASgCHDYCACAHKAIQIQILIABBAWohAAwACwALAAsACwsLIAFBCGoiAEEEEDMgABA4IAFBIGokACAFC4JEAhB/AX4jAEHwBGsiBCQAIARB8MQILwEAOwHABCAEQejECCkDADcDuAQgBEHgxAgpAwA3A7AEIARBhARqQQBBLBA2GkGM2AotAAAEQCAAKAIQQcABaiEFA0AgBSgCACIFBEAgBSgCECIKKALIASEJQQAhBQNAIAkgBUECdGooAgAEQCAFQQFqIQUgBkEB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4AIRAAANAyAAIAEgACgC1AIRAABFDQNBAiEEDAILIAZBA0kNDSAAIAEgACgC5AIRAAANAiAAIAEgACgC2AIRAABFDQJBAyEEDAELIAZBBEkNDCAAIAEgACgC6AIRAAANASAAIAEgACgC3AIRAABFDQFBBCEECyABIARqIQEDQCACIAFrIgZBAEwEQEFsDwtBASEEQRQhBQJAAkACQAJAAkAgByABLQAAai0AAEEFaw4gAAECBAYGBgQEBAQEBAQEBAYDBAMDAwMEBAYEBgQEBAYECyAGQQFGDRAgACABIAAoAuACEQAADQMgACABIAAoAsgCEQAARQ0DQQIhBAwCCyAGQQNJDQ8gACABIAAoAuQCEQAADQIgACABIAAoAswCEQAARQ0CQQMhBAwBCyAGQQRJDQ4gACABIAAoAugCEQAADQEgACABIAAoAtACEQAARQ0BQQQhBAsgASAEaiEBDAELC0EAIQULIAMgATYCACAFDwsgAiABa0ECSA0JIAAgASAAKALgAhEAAA0IQQIhBCAAIAEgACgC1AIRAAANAiAAIAEgACgCyAIRAABFDQgMBQsgAiABa0EDSA0IIAAgASAAKALkAhEAAA0HQQMhBCAAIAEgACgC2AIRAAANASAAIAEgACgCzAIRAABFDQcMBAsgAiABa0EESA0HIAAgASAAKALoAhEAAA0GQQQhBCAAIAEgACgC3AIRAABFDQELDAMLIAAgASAAKALQAhEAAEUNBAwBC0ETIQUMAQtBEyEFCyABIARqIQQCQAJAAkACQANAIAIgBCIBayIEQQBMDQQCQAJAAkACQAJAAkACQCAHIAEtAABqLQAAQQVrDiABAgMKBAQECgoKCQoKCgoEBAAFAAAAAAoKBAoECAYEBAoLIAFBAWohBAwGCyAEQQFGDQwgACABIAAoAuACEQAADQggACABIAAoAsgCEQAARQ0IIAFBAmohBAwFCyAEQQNJDQsgACABIAAoAuQCEQAADQcgACABIAAoAswCEQAARQ0HIAFBA2ohBAwECyAEQQRJDQogACABIAAoAugCEQAADQYgACABIAAoAtACEQAARQ0GIAFBBGohBAwDCyADIAE2AgAgBQ8LIAFBAWohBCAFQSlHBEAgBUESRw0CIAIgBGsiBkEATA0LQRMhBQJAAkACQAJAAkACQAJAIAcgBC0AAGotAAAi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QQA2AggDQAJAIABBvAJqIABBuAJqEFoNACAAKAK0ASADECQgAWpGBEAgAxAkIQIgAyADECRBAXQQQCADIAMQVRBAIAAgAiADQQAQQiIBajYCtAELIABBvAJqIgIQgQFBECABIABBtAFqIABBCGpBACAGIABBEGogAEEMaiAAQdABahDYAw0AIAIQlAEaDAELCyADIAAoArQBIAFrEEAgAxBGEGcgACAFNgIAIAAQigtBAUcEQCAEQQQ2AgALIABBvAJqIABBuAJqEFoEQCAEIAQoAgBBAnI2AgALIAAoArwCIAMQNBogBhA0GiAAQcACaiQAC9ADAQF+IwBBgANrIgAkACAAIAI2AvgCIAAgATYC/AIgAEHcAWogAyAAQfABaiAAQewBaiAAQegBahCEByAAQdABahBUIgEgARBVEEAgACABQQAQQiICNgLMASAAIABBIGo2AhwgAEEANgIYIABBAToAFyAAQcUAOgAWA0ACQCAAQfwCaiAAQfgCahBaDQAgACgCzAEgARAkIAJqRgRAIAEQJCEDIAEgARAkQQF0EEAgASABEFUQQCAAIAMgAUEAEEIiAmo2AswBCyAAQfwCaiIDEIEBIABBF2ogAEEWaiACIABBzAFqIAAoAuwBIAAoAugBIABB3AFqIABBIGogAEEcaiAAQRhqIABB8AFqEIMHDQAgAxCUARoMAQsLAkAgAEHcAWoQJEUNACAALQAXQQFHDQAgACgCHCIDIABBIGprQZ8BSg0AIAAgA0EEajYCHCADIAAoAhg2AgALIAAgAiAAKALMASAEEIsLIAApAwAhBiAFIAApAwg3AwggBSAGNwMAIABB3AFqIABBIGogACgCHCAEELEBIABB/AJqIABB+AJqEFoEQCAEIAQoAgBBAnI2AgALIAAoAvwCIAEQNBogAEHcAWoQNBogAEGAA2okAAu5AwAjAEHwAmsiACQAIAAgAjYC6AIgACABNgLsAiAAQcwBaiADIABB4AFqIABB3AFqIABB2AFqEIQHIABBwAFqEFQiASABEFUQQCAAIAFBABBCIgI2ArwBIAAgAEEQajYCDCAAQQA2AgggAEEBOgAHIABBxQA6AAYDQAJAIABB7AJqIABB6AJqEFoNACAAKAK8ASABECQgAmpGBEAgARAkIQMgASABECRBAXQQQCABIAEQVRBAIAAgAyABQQAQ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QQA2AggDQAJAIABB/AFqIABB+AFqEFsNACAAKAK0ASADECQgAWpGBEAgAxAkIQIgAyADECRBAXQQQCADIAMQVRBAIAAgAiADQQAQQiIBajYCtAELIABB/AFqIgIQggFBECABIABBtAFqIABBCGpBACAGIABBEGogAEEMaiAAQdABahDaAw0AIAIQlQEaDAELCyADIAAoArQBIAFrEEAgAxBGEGcgACAFNgIAIAAQigtBAUcEQCAEQQQ2AgALIABB/AFqIABB+AFqEFsEQCAEIAQoAgBBAnI2AgALIAAoAvwBIAMQNBogBhA0GiAAQYACaiQAC9ADAQF+IwBBkAJrIgAkACAAIAI2AogCIAAgATYCjAIgAEHQAWogAyAAQeABaiAAQd8BaiAAQd4BahCIByAAQcQBahBUIgEgARBVEEAgACABQQAQQiICNgLAASAAIABBIGo2AhwgAEEANgIYIABBAToAFyAAQcUAOgAWA0ACQCAAQYwCaiAAQYgCahBbDQAgACgCwAEgARAkIAJqRgRAIAEQJCEDIAEgARAkQQF0EEAgASABEFUQQCAAIAMgAUEAEEIiAmo2AsABCyAAQYwCaiIDEIIBIABBF2ogAEEWaiACIABBwAFqIAAsAN8BIAAsAN4BIABB0AFqIABBIGogAEEcaiAAQRhqIABB4AFqEIcHDQAgAxCVARoMAQsLAkAgAEHQAWoQJEUNACAALQAXQQFHDQAgACgCHCIDIABBIGprQZ8BSg0AIAAgA0EEajYCHCADIAAoAhg2AgALIAAgAiAAKALAASAEEIsLIAApAwAhBiAFIAApAwg3AwggBSAGNwMAIABB0AFqIABBIGogACgCHCAEELEBIABBjAJqIABBiAJqEFsEQCAEIAQoAgBBAnI2AgALIAAoAowCIAEQNBogAEHQAWoQNBogAEGQAmokAAu5AwAjAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASAAQcABaiADIABB0AFqIABBzwFqIABBzgFqEIgHIABBtAFqEFQiASABEFUQQCAAIAFBABBCIgI2ArABIAAgAEEQajYCDCAAQQA2AgggAEEBOgAHIABBxQA6AAYDQAJAIABB/AFqIABB+AFqEFsNACAAKAKwASABECQgAmpGBEAgARAkIQMgASABECRBAXQQQCABIAEQVRBAIAAgAyABQQAQ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sAEgBEG+ogQgAkGwAWoQMiACIAEoAhA2AqABIARB+b4EIAJBoAFqEB8aIAIgASgCFDYClAEgAkEtNgKQASAEQeW/BCACQZABahAfGiACIAEoAhg2AoABIAJC/NPGl93JmKg/NwN4IAJCs+bMmbPmzPE/NwNwIARBkr8EIAJB8ABqEDIgASsDICEIIAIgBkEBdkEBcTYCYCACIAg5A1ggAkLNmbPmzJmz9j83A1AgBEGqwQQgAkHQAGoQMiACIAErA0g5A0ggAkEANgJEIAIgBkECdkEBcTYCQCAEQeyhBCACQUBrEDIgASgCMCEGIAEoAjQhByABKwNAIQggAiABLQA4NgIwIAIgCDkDKCACIAc2AiQgAiAGQQJ0QeDICGooAgA2AiAgBEHpwAQgAkEgahAyIAIgASgCPEECdEGAyQhqKAIANgIQIARB3PcDIAJBEGoQHxogAiABKAJQNgIAIARBt8IEIAIQHxogAkHgAWokAAsgACADQawBahCCCCEEAkAgAygCrAFBAUYEQCADIAMpA5ACNwMQIAMgAykDiAI3AwggACADQbABaiADQQhqEI8MIAVFBEAgACADQZgCahDxAxoLIAAQrAMMAQsgAEECQQggA0GIAWoQ+gMaIANBAToAlAFBACECA0AgAygCrAEiASACTQRAIAEgBCAAIANBiAFqEOsFDAILIAQgAkECdGooAgAiAUEAELIDGiADIAMpA5ACNwMgIAMgAykDiAI3AxggASADQbABaiADQRhqEI8MIAVFBEAgASADQZgCahDxAxoLIAFBAhCJAiABEKwDIAJBAWohAgwACwALQQAhAQNAIAMoAqwBIAFLBEAgACAEIAFBAnRqKAIAELcBIAFBAWohAQwBCwsgBBAYCyAAELgDIANBsAJqJAALCQAgASACEOEBC0MBAnwCf0EBIAArAwgiAiABKwMIIgNkDQAaQX8gAiADYw0AGkEBIAArAxAiAiABKwMQIgNkDQAaQX9BACACIANjGwsLyRQCEH8IfCMAQUBqIgkkAEGg2AorAwAhFkGg2AogABD/CTkDACAAQQIQiQJBOBBSIQEgACgCECABNgKMASAAIABBAEH77ABBABAiQQJBAhBhIQEgABA5KAIQIAE7AbABQQohASAAEDkoAhAvAbABQQlNBEAgABA5KAIQLwGwASEBCyAAEDkoAhAg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CS0AhgFBAUcEQCACIQkgBiECDAELIAMgAigCECgCjAEoAjAiCTYCmAELAkAgCC0AhgFBAUcEQCAFIQggBCEFDAELIAMgBSgCECgCjAEoAjAiCDYCzAELAkAgCSgCECgCjAEoAiwiBiAIKAIQKAKMASgCLCIESgRAIANBsAFqIAYgAiAEIANBmAFqIAEQqAwgAygCmAEiAigCECgCjAEoAjAhCQwBCyAEIAZMDQAgA0GwAWogBCAFIAYgA0HMAWogARCoDCADKALMASIFKAIQKAKMASgCMCEICwNAIAkiBCAIIgZGRQRAIANBsAFqIgggBEEAIAIgARDIBSAIIAYgBUEAIAEQyAUgBigCECgCjAEoAjAhCCAEKAIQKAKMASgCMCEJIAQhAiAGIQUMAQsLIANBsAFqIgQgBiAFIAIgARDIBSADKAK4AUEATgRAIARBBBCMAiADIAMpA7gBNwOQASADIAMpA7ABNwOIAQJAIAMoArABIANBiAFqQQAQGUECdGogAygCuAEQzAwEQCADIAMpA7gBNwOAASADIAMpA7ABNwN4IAchAiADKAKwASADQfgAakEAEBlBAnRqIAMoArgBEM8MIgsNAUEAIQtBsOkDQQAQKkEAIQIDQCACIAMoArgBTw0FIAMgAykDuAE3A1AgAyADKQOwATcDSCADQcgAaiACEBkhBAJAAkACQCADKALAASIFDgICAAELIAMoArABIARBAnRqKAIAEBgMAQsgAygCsAEgBEECdGooAgAgBREBAAsgAkEBaiECDAALAAsCQCAMDQAgA0GYAWogABD+AiAAQQhBCBDqBSECQdLqA0EAECogASsDACINIAK3Ig5mIA4gASsDCCIPZXIEQCADQUBrIA85AwAgAyANOQM4IAMgAjYCMEHx7QQgA0EwahB/DAELIAMrA5gBIg4gDWUgAysDoAEiECAPZXJFDQAgAyAPOQMoIAMgDTkDICADIBA5AxggAyAOOQMQQaPuBCADQRBqEH8LQQAhAgNAIAIgAygCuAFPDQQgAyADKQO4ATcDCCADIAMpA7ABNwMAIAMgAhAZIQQCQAJAAkAgAygCwAEiBQ4CAgABCyADKAKwASAEQQJ0aigCABAYDAELIAMoArABIARBAnRqKAIAIAURAQALIAJBAWohAgwACwALA0AgAkUEQEEAIQIDQCACIAMoArgB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AxABAAsgASgCCCgCICIDLQAoDQEgAxCjDQwBCwsCQCAFQQRqIgIoAghFDQAgAigCBCIAKAIAIgEgAigCACgCBCIDNgIEIAMgATYCACACQQA2AggDQCAAIAJGDQEgACgCBCAAEBghAAwACwALIAVBEGokAAu6AQICfwJ8RP///////+//IQQCfET////////v/yABKAIAKAIgIgIoAiwgASgCGEoNABpE////////7/8gAiABKAIEKAIgRg0AGiABELYCCyEFAkAgACgCACgCICICKAIsIAAoAhhKDQAgAiAAKAIEKAIgRg0AIAAQtgIhBAsgBCAFYQRAIAEoAgAoAgAiAiAAKAIAKAIAIgNGBEAgASgCBCgCACAAKAIEKAIASA8LIAIgA0gPCyAEIAVkCzMAIAAQng0gACABKAIANgIAIAAgASgCBDYCBCAAIAEoAgg2AgggAUEANgIIIAFCADcCAAvKAQEHfyMAQRBrIgUkACAAQQA2AgggAEIANwIAQShBNCACGyEHIAEoAgQhCCABKAIAIQQDQCAEIAhHBEAgBCgCACAHaiIDKAIEIQkgAygCACEDA0AgAyAJRgRAIARBBGohBAwDBSAFIAMoAgAiBjYCDCAGQej7CigCADYCGAJAAkAgAgRAIAYoAgAoAiAgAUcNAQsgAg0BIAYoAgQoAiAgAUYNAQsgACAFQQxqEL8BCyADQQRqIQMMAQsACwALCyAAEK4NIAVBEGokAAs+AQJ8An9BfyAAKwMAIgIgASsDACIDYw0AGkEBIAIgA2QNABpBfyAAKwMIIgIgASsDCCIDYw0AGiACIANkCwscACAAKAIMIAEoAgxqIAAoAgQgASgCBGprQQJtCxwAIAAoAgggASgCCGogACgCACABKAIAamtBAm0LjAEBB38CQCAAKAIgIgMgASgCKCIESg0AIAEoAiAiBSAAKAIoIgZKDQBBASECIAAoAiwiByABKAIkIghIDQAgACgCECABKAIQayAHIAEoAixqIAAoAiQgCGprQQJtaiAGIAMgBWprIARqQQJtIAEoAgwiASAAKAIMIgBrIAAgAWsgACABShtqTCECCyACC4wBAQd/AkAgACgCJCIDIAEoAiwiBEoNACABKAIkIgUgACgCLCIGSg0AQQEhAiAAKAIoIgcgASgCICIISA0AIAAoAgwgASgCDGsgASgC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AAAAAADQP6I5A4gCIAMgBTkDgAIgBEG50AQgA0GAAmoQcyADIAAoAugCsrs5A/ABIANCADcD6AEgA0KAgICAgICgq8AANwPgASAEQZXQBCADQeABahBzIANB1PkKKAIANgLQASADIAYgByANoKIiBjkDwAEgAyAKIAsgDKCiIgc5A8gBIARBtNEEIANBwAFqEHMgAyABNgKwASAEQc7LAyADQbABahBzIAAgBBCABhAbGiABEBggAgRAIANBiAFqIgEgACgCEEE4akEoECAaIAFDAAAAABC8AyEBIANCADcDgAEgA0IANwN4IANCADcDcCAAQcHaBCADQfAAahAeIANCgICAgICAgPg/NwNgIAMgCDkDWCADIAU5A1AgAEG50AQgA0HQAGoQHiADQUBrIAAoAugCsrs5AwAgA0IANwM4IANCADcDMCAAQZXQBCADQTBqEB4gA0HU+QooAgA2AiAgAyAGOQMQIAMgBzkDGCAAQbTRBCADQRBqEB4gAyABNgIAIABBzssDIAMQHiABEBgLIANB4AJqEFwgA0HwAmokAAvoAwIDfwZ8IwBB0AFrIgMkACACKAIAIQQgAigCBCIFKwMQIQYgAyAFKAIANgKwASADIAY5A6gBIAMgBDYCoAEgAEGd+wMgA0GgAWoQHkHU+QpB0PkKKAIAQQlrNgIAAnwgASsDACIGIAItADAiBEHsAEYNABogBEHyAEYEQCAGIAIrAyChDAELIAYgAisDIEQAAAAAAADgv6KgCyEGIAArA/ADIQcgACsDgAQhCCABKwMIIQkgACsD6AMhCiAAKwP4AyELIANB+ABqIgEgACgCEEEQakEoECAaIAFDAAAAABC8AyEBIANCADcDyAEgA0IANwPAASACKAIEKAIAIQQgAigCACEFIANCADcDcCADQoCAgICAgIDoPzcDaCADIAU2AmQgAyAENgJgIANBwAFqIgRBpdkDIANB4ABqEHMgAyACKAIEKwMQIAArA+gDojkDUCAEQfqiBCADQdAAahBzIANBQGsgACgC6AKyuzkDACADQgA3AzggA0IANwMwIARBldAEIANBMGoQcyADQdT5CigCADYCICADIAogBiALoKI5AxAgAyAHIAkgCKCiOQMYIARBtNEEIANBEGoQcyADIAE2AgAgBEHOywMgAxBzIAAgBBCABhAbGiAEEFwgARAY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C6GgIgdEAAAgFXvL2z+iIA5ENivxEfP+WT2iIAcgDKBE1a2ayjiUuz2ioKCgoCEHCyAHCyIHmUQAAAAAAADgQWMEQCAHqgwBC0GAgICAeAshAiAHRAAAAAAAAAhAIAK3oaAFRAAAAAAAAAhACxCdASIHOQMAIAEgBzkDoAMgASAHOQOoAyAAQeSlBCABQaADahAeIAFBncIINgKQAyAAQeGSBCABQZADahAeIAFBncIINgKAAyAAQaTXBCABQYADahAeIAFBncIINgLwAiAAQdDYAyABQfACahAeIAFBncIINgLgAiAAQe/jAyABQeACahAeIAFBncIINgLQAiAAQY7aBCABQdACahAeIAFBncIINgLAAiAAQabFBCABQcACahAeIAFBncIINgKwAiAAQeDXBCABQbACahAeIAFBncIINgKgAiAAQfXXAyABQaACahAeIAFBncIINgKQAiAAQdeOBCABQZACahAeIAFBncIINgKAAiAAQc7YBCABQYACahAeIAFBncIINgLwASAAQbHkAyABQfABahAeIABB6MsEQQAQHiABQZ3CCDYC4AEgAEGRqwQgAUHgAWoQHiABQZ3CCDYC0AEgAEHpqgQgAUHQAWoQHiAAQdbUBEEAEB4gAUGdwgg2AsABIABBwukEIAFBwAFqEB4gAUGdwgg2ArABIABBgdQEIAFBsAFqEB4gAUGdwgg2AqABIABBu9MEIAFBoAFqEB4gAEGPywRBABAeIAFBncIINgKQASAAQduIBCABQZABahAeIAFBncIINgKAASAAQcSJBCABQYABahAeIAFBncIINgJwIABBgdYDIAFB8ABqEB4gAUGdwgg2AmAgAEHe3QMgAUHgAGoQHiABQZ3CCDYCUCAAQajWAyABQdAAahAeIAFBncIINgJAIABBhd0DIAFBQGsQHiAAQdmQBEEAEB4gAUGdwgg2AjAgAEGy3AMgAUEwahAeIAFBncIINgIgIABB9ocEIAFBIGoQHiABQZ3CCDYCECAAQeTFBCABQRBqEB4gASAJOQMIIAEgDTkDACAAQY+pBCABEB4gAEHRygRBABAeIABB9PQEQQAQHiABQeADaiQACycBAX8jAEEQayIBJAAgAUGYwgg2AgAgAEH3zAQgARAeIAFBEGokAAuIAQIDfwF+IwBBMGsiASQAIAAoAhAhAiAAKAIMKAIA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ZW1wdHkAbm9kZV9zZXRfaXNfZW1wdHkAcmVmZXJlbmNlIHRvIGJpbmFyeSBlbnRpdHkAYXN5bmNocm9ub3VzIGVudGl0eQBpbmNvbXBsZXRlIG1hcmt1cCBpbiBwYXJhbWV0ZXIgZW50aXR5AGVudGl0eSBkZWNsYXJlZCBpbiBwYXJhbWV0ZXIgZW50aXR5AGNhbm5vdCBzdXNwZW5kIGluIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdHkAWE1MIG9yIHRleHQgZGVjbGFyYXRpb24gbm90IGF0IHN0YXJ0IG9mIGVudGl0eQB1bmRlZmluZWQgZW50aXR5AHBhcnNlci0+bV9vcGVuSW50ZXJuYWxFbnRpdGllcyA9PSBvcGVuRW50aXR5AHBhcnNlci0+bV9vcGVuVmFsdWVFbnRpdGllcyA9PSBvcGVuRW50aXR5AHBhcnNlci0+bV9vcGVuQXR0cmlidXRlRW50aXRpZXMgPT0gb3BlbkVudGl0eQBpbmZpbml0eQBsaXN0LT5zaXplIDwgbGlzdC0+Y2FwYWNpdHkAcmV0LnNpemUgPCByZXQuY2FwYWNpdHkAZmFudGFzeQBTcGFyc2VNYXRyaXhfY29vcmRpbmF0ZV9mb3JtX2FkZF9lbnRyeQAvc3ZnL2l2b3J5AG91dCBvZiBtZW1vcnkARmVicnVhcnkASmFudWFyeQBndnBsdWdpbl9kb3RfbGF5b3V0X0xUWF9saWJyYXJ5AGd2cGx1Z2luX25lYXRvX2xheW91dF9MVFhfbGlicmFyeQBndnBsdWdpbl9jb3JlX0xUWF9saWJyYXJ5AGdhdGhlcl90aW1lX2VudHJvcHkAY29weQBhbGJhbnkASnVseQBTcGFyc2VNYXRyaXhfbXVsdGlwbHkAZXF1YWxseQBhc3NlbWJseQBzdW1tZXJza3kAc2h5AHNhdGlzZnkAYmVhdXRpZnkAbm9qdXN0aWZ5AENsYXNzaWZ5AC9zdmcvbGlnaHRncmV5AC9zdmcvZGltZ3JleQAvc3ZnL2RhcmtncmV5AC9zdmcvbGlnaHRzbGF0ZWdyZXkAL3N2Zy9kYXJrc2xhdGVncmV5AC9zdmcvc2xhdGVncmV5AHdlYmdyZXkAeDExZ3JleQAvc3ZnL2dyZXkAbW92ZSB0byBmcm9udCBsb2NrIGluY29uc2lzdGVuY3kAZXh0cmFjdF9hZGphY2VuY3kAbWVyZ2Vfb25ld2F5AGFycmF5AGFsbG9jQXJyYXkAL3N2Zy9saWdodGdyYXkAL3N2Zy9kaW1ncmF5AC9zdmcvZGFya2dyYXkAL3N2Zy9saWdodHNsYXRlZ3JheQAvc3ZnL2RhcmtzbGF0ZWdyYXkAL3N2Zy9zbGF0ZWdyYXkAd2ViZ3JheQB4MTFncmF5AC9zdmcvZ3JheQBUaHVyc2RheQBUdWVzZGF5AFdlZG5lc2RheQBTYXR1cmRheQBTdW5kYXkATW9uZGF5AEZyaWRheQBNYXkALi4vLi4vbGliL2NncmFwaC9ncmFtbWFyLnkAJW0vJWQvJXkAcG9ydGhveXgAcG9ydGhvX3l4AHh4eABib3gAdmlld0JveABjaGtCb3VuZEJveAAvTWVkaWFCb3gAZ2V0X2VkZ2VfbGFiZWxfbWF0cml4AGlkZWFsX2Rpc3RhbmNlX21hdHJpeABtdXN0IG5vdCB1bmRlY2xhcmUgcHJlZml4AHVuYm91bmQgcHJlZml4AGh0bWxsZXgAbWF4ACMlMDJ4JTAyeCUwMngAIyUyeCUyeCUyeCUyeAAjJTF4JTF4JTF4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAcmFycm93AGxhcnJvdwBIZWx2ZXRpY2EtTmFycm93AGFycm93X2xlbmd0aF9jcm93AC9zdmcvc25vdwBzcHJpbmdfZWxlY3RyaWNhbF9lbWJlZGRpbmdfc2xvdwAvc3ZnL2xpZ2h0eWVsbG93AC9zdmcvZ3JlZW55ZWxsb3cAL3N2Zy9saWdodGdvbGRlbnJvZHllbGxvdwAvc3ZnL3llbGxvdwBmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93AGZsZXggc2Nhbm5lciBwdXNoLWJhY2sgb3ZlcmZsb3cAY291cmllcm5ldwBTcHJpbmdTbW9vdGhlcl9uZXcAVHJpYW5nbGVTbW9vdGhlcl9uZXcAZGlhZ19wcmVjb25fbmV3AFF1YWRUcmVlX25ldwBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcjJfbmV3AG4gJiYgbmV3AHNrZXcAc3RydmlldwAvc3ZnL2hvbmV5ZGV3ACAtYW5jaG9yIHcAc29ydHYAcG92OnBvdgBOb3YAaW52AGVxdWl2AHBpdgBub25hbWUuZ3YAR0RfcmFuayhnKVtyXS5hdiA9PSBHRF9yYW5rKGcpW3JdLnYAY2Mlc18lenUAY2MlcyslenUAL3N2Zy9wZXJ1AG51AG11ACVjJWxsdQBUaHUAdGF1AFRhdQBOdQBNdQBfcG9ydF8lc18oJWQpXyglZClfJXUATnVtYmVyIG9mIGl0ZXJhdGlvbnMgPSAldQBOdW1iZXIgb2YgaW5jcmVhc2VzID0gJXUAcGxhaW50ZXh0AHN0cmVzc3d0AGlucHV0AHRleHRsYXlvdXQAZG90X2xheW91dABuZWF0b19sYXlvdXQAaW5pdExheW91dABjbHVzdABtYXBDbHVzdABsYWJlbGp1c3QAc2NBZGp1c3QAQXVndXN0AGVkZ2VzZmlyc3QAbm9kZXNmaXJzdABtYXhpbWFsX2luZGVwZW5kZW50X2VkZ2Vfc2V0X2hlYXZlc3RfZWRnZV9wZXJub2RlX3N1cGVybm9kZXNfZmlyc3QAZXhpc3QAcmVhbGlnbk5vZGVsaXN0AGFwcGVuZE5vZGVsaXN0AHNsb3RfZnJvbV9jb25zdF9saXN0AHNsb3RfZnJvbV9saXN0AGRlZmF1bHRkaXN0AG1pbmRpc3QAcG93ZXJfZGlzdABncmFwaF9kaXN0AGF2Z19kaXN0AGdldEVkZ2VMaXN0AGlxdWVzdABsb3dhc3QAc3ByaW5nX2VsZWN0cmljYWxfZW1iZWRkaW5nX2Zhc3QAZ3Zfc29ydAB2aWV3cG9ydAB0YWlscG9ydAB1bmV4cGVjdGVkIHBhcnNlciBzdGF0ZSAtIHBsZWFzZSBzZW5kIGEgYnVnIHJlcG9ydABoZWFkcG9ydABodG1sX3BvcnQAaW5zZXJ0AFJUcmVlSW5zZXJ0AGZpbmRTVmVydABzdGFydABwYXJ0AGVzdGltYXRlX3RleHRfd2lkdGhfMXB0AHF1b3QAf3Jvb3QAbm90AG1ha2Vfdm5fc2xvdABlbWl0X3hkb3QAeGRvdDp4ZG90AGVwczp4ZG90AHN2Zzp4ZG90AGpwZzp4ZG90AHBuZzp4ZG90AGpwZWc6eGRvdABnaWY6eGRvdABqcGU6eGRvdAB4ZG90MS40Onhkb3QAeGRvdDEuMjp4ZG90AHNkb3QAbWlkZG90AGd2OmRvdABwbGFpbi1leHQ6ZG90AGRvdDpkb3QAZXBzOmRvdABjYW5vbjpkb3QAcGxhaW46ZG90AHN2Zzpkb3QAanBnOmRvdABwbmc6ZG90AGpwZWc6ZG90AGdpZjpkb3QAanBlOmRvdAB/Ym90AGRvRG90AHNwYW4tPmZvbnQAdmFneGJwcmludABlbmRwb2ludAB4ZG90X3BvaW50AGRlY2lkZV9wb2ludABVbnNhdGlzZmllZCBjb25zdHJhaW50AHRyYW5zcGFyZW50AGNvbXBvbmVudABpbnZhbGlkIGFyZ3VtZW50AGNvbW1lbnQAanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50AGNlbnQAaSA9PSBlY250AGFyaWFsbXQAZ2V0X2hhc2hfc2VjcmV0X3NhbHQAY2lyY3VpdABwb2x5X2luaXQATXVsdGlsZXZlbF9pbml0AG5zbGltaXQAbWNsaW1pdABQb3J0cmFpdABsaWdodAB2aXJ0dWFsX3dlaWdodABsaGVpZ2h0AEtQX1JpZ2h0AEJvb2ttYW4tTGlnaHQAZ3QAS1BfTGVmdABjaGFyc2V0AGluc2V0AGJpdGFycmF5X3Jlc2V0AGd2X2FyZW5hX3Jlc2V0AHN1YnNldABiaXRhcnJheV9zZXQAbWF0cml4X3NldABzY2FybGV0AC9zdmcvZGFya3Zpb2xldAAvc3ZnL2JsdWV2aW9sZXQAL3N2Zy92aW9sZXQAVHJlYnVjaGV0AGFneGdldAB0YWlsdGFyZ2V0AGxhYmVsdGFyZ2V0AGVkZ2V0YXJnZXQAaGVhZHRhcmdldABiaXRhcnJheV9nZXQAc3R5bGVzaGVldABzdHJpY3QAYWdjb3B5ZGljdABhZ21ha2VkYXRhZGljdAByZWMtPmRpY3QgPT0gZGF0YWRpY3QAd3JpdGVfZGljdABoaW50ZXJzZWN0AGd2YmlzZWN0AGVuY29kaW5nIHNwZWNpZmllZCBpbiBYTUwgZGVjbGFyYXRpb24gaXMgaW5jb3JyZWN0AGFzcGVjdABsYXllcnNlbGVjdABLUF9TdWJ0cmFjdABRdWFkVHJlZV9yZXB1bHNpdmVfZm9yY2VfaW50ZXJhY3QAY29tcGFjdABPY3QAcmVxdWVzdGVkIGZlYXR1cmUgcmVxdWlyZXMgWE1MX0RURCBzdXBwb3J0IGluIEV4cGF0AGxhYmVsZmxvYXQAbGFiZWxfZmxvYXQAU3BhcnNlTWF0cml4X2Zyb21fY29vcmRpbmF0ZV9mb3JtYXQAL3N2Zy93aGVhdABtb25jaGFpbnNfYXQAU2F0AEFncmFwaGluZm9fdABBZ2VkZ2VpbmZvX3QAQWdub2RlaW5mb190AFx0AHJvdyA8IG1lLT5ucm93cwBtaW51cwBvcGx1cwByYWRpdXMAaGVhcnRzAHNhbXBsZXBvaW50cwBkaXJlZGdlY29uc3RyYWludHMAbGV2ZWwgYXNzaWdubWVudCBjb25zdHJhaW50cwB4eSBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwB5eCBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwB4eSBvcnRob2dvbmFsIGNvbnN0cmFpbnRzAHl4IG9ydGhvZ29uYWwgY29uc3RyYWludHMAbGluZSBzZWdtZW50cwBzZXRfY2VsbF9oZWlnaHRzAHJlY3RzAGFjY291bnRpbmdSZXBvcnRTdGF0cwBlbnRpdHlUcmFja2luZ1JlcG9ydFN0YXRzAFphcGZEaW5nYmF0cwByZW1pbmNyb3NzAGNvbXByZXNzAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAGJyYXNzAGNsYXNzAGFwcGx5YXR0cnMAYWdtYWtlYXR0cnMAYmluZGF0dHJzAHBhcnNlX2xheWVycwBta0NsdXN0ZXJzAHJvdW5kX2Nvcm5lcnMAbWFrZV9iYXJyaWVycwBjZGF0YS5udG9wbGV2ZWwgPT0gYWdubm9kZXMoZykgLSBjZGF0YS5udmFycwBjYW5ub3QgcmVhbGxvYyBvcHMAY2Fubm90IHJlYWxsb2MgcG5scHMAZXBzAGNvcmVfbG9hZGltYWdlX3BzAGVwczpwcwBwczI6cHMAKGxpYik6cHMAZ3ZfdHJpbV96ZXJvcwBhZ3hidWZfdHJpbV96ZXJvcwB0ZXhneXJlaGVyb3MAaW1hZ2Vwb3MAdGlub3MAc2V0RWRnZUxhYmVsUG9zAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMAeGxpbnRlcnNlY3Rpb25zAGNvbHVtbnMAZGVqYXZ1c2FucwBuaW1idXNzYW5zAGxpYmVyYXRpb25zYW5zAGZyZWVzYW5zAE9wZW5TYW5zAG9mZnNldCA9PSBuX3Rlcm1zAGRpdGVtcwBkaWFtcwBjb2wgPCBtZS0+bmNvbHMAY2Fubm90IHJlYWxsb2MgZHEucG5scwBjYW5ub3QgcmVhbGxvYyBwbmxzAGxldmVscwBmb3JjZWxhYmVscwBkaWFnb25hbHMAbWVyZ2VfcmFua3MAc3BsaXRCbG9ja3MAaW52aXMAY2Fubm90IHJlYWxsb2MgdHJpcwBzZXRfY2VsbF93aWR0aHMAQ2FsY3VsYXRpbmcgc2hvcnRlc3QgcGF0aHMAeWVzAHNob3dib3hlcwBiZWF1dGlmeV9sZWF2ZXMAYXR0YWNoX2VkZ2VfbGFiZWxfY29vcmRpbmF0ZXMAcG9seWxpbmVzAHNwbGluZXMAb3J0aG9nb25hbCBsaW5lcwB0ZXhneXJldGVybWVzAG90aW1lcwBUaW1lcwBmb250bmFtZXMAcHJlZml4IG11c3Qgbm90IGJlIGJvdW5kIHRvIG9uZSBvZiB0aGUgcmVzZXJ2ZWQgbmFtZXNwYWNlIG5hbWVzAFNwYXJzZU1hdHJpeF9zdW1fcmVwZWF0X2VudHJpZXMAcGVyaXBoZXJpZXMAR2V0QnJhbmNoZXMAZiA8IGdyYXBoW2pdLm5lZGdlcwBtaW5tYXhfZWRnZXMAZXhjaGFuZ2VfdHJlZV9lZGdlcwBtYWtlU3RyYWlnaHRFZGdlcwB1bmRvQ2x1c3RlckVkZ2VzAGNvbXBvdW5kRWRnZXMAbWVyZ2VfdHJlZXMAX19jbHVzdGVybm9kZXMAYWdubm9kZXMATkRfaWQobnApID09IG5fbm9kZXMATG9hZE5vZGVzAHNpZGVzAHNwYWRlcwB2ZXJ0aWNlcwBjb29yZHMAc2V0Ym91bmRzAG1kcwBjZHMAbWFrZVNlbGZBcmNzAGVtaXRfZWRnZV9ncmFwaGljcwBjbHVicwBjb25zb2xhcwAlbGYlMnMAClN0cmluZyBzdGFydGluZzo8JS44MHMAClN0cmluZyBzdGFydGluZzoiJS44MHMAICUuKnMAJXMlcwBleHBhdDogQWNjb3VudGluZyglcCk6IERpcmVjdCAlMTBsbHUsIGluZGlyZWN0ICUxMGxsdSwgYW1wbGlmaWNhdGlvbiAlOC4yZiVzACUuKnMlYyVzACAlczolcwBfXyVkOiVzAC8lcy8lcwAlcy0lcwAsJXMAIGZvbnQtZmFtaWx5PSIlcwAiIHN0cm9rZS1kYXNoYXJyYXk9IiVzACIgY2xhc3M9IiVzAHBvbHkgJXMAKCglZiwlZiksKCVmLCVmKSkgJXMgJXMAY29sb3IgJXMAcm9vdCA9ICVzACBUaXRsZTogJXMAInN0cmljdCI6ICVzAGNvdXIAdXRyAGFwcGVuZGF0dHIAYWRkYXR0cgBiZWdpbnN0cgBmc3RyAHN0cnZpZXdfc3RyAHBvdl9jb2xvcl9hc19zdHIAdnBzYyE9bnVsbHB0cgBiZW5kVG9TdHIAdWFycgBjcmFycgBsYXJyAGhhcnIAZGFycgB1QXJyAHJBcnIAbEFycgBoQXJyAGRBcnIAQXByAFNwYXJzZU1hdHJpeF9tdWx0aXBseV92ZWN0b3IAdGVybWluYXRvcgBpbnN1bGF0b3IAaW50ZXJuYWxFbnRpdHlQcm9jZXNzb3IAdGV4Z3lyZWN1cnNvcgBzeW50YXggZXJyb3IAbW9uZXlfZ2V0IGVycm9yAEVycm9yAHJmbG9vcgBsZmxvb3IAbGFiZWxmb250Y29sb3IAcGVuY29sb3IAZmlsbGNvbG9yAGJnY29sb3IAcm93IG1ham9yAGNvbHVtbiBtYWpvcgBuZWlnaGJvcgBzdHlsZV9vcgBtcgByYW5rZGlyAHBhZ2VkaXIAbGF5ZXIAdXBwZXIgPj0gbG93ZXIATm9kZUNvdmVyAC9zdmcvc2lsdmVyAGNsdXN0ZXIAZXhwYW5kQ2x1c3RlcgBycHJvbW90ZXIAbHByb21vdGVyAGNlbnRlcgBtYXhpdGVyAHBhcnRpYWwgY2hhcmFjdGVyACEgcm9vdFBhcnNlci0+bV9wYXJlbnRQYXJzZXIAZGtncmVlbmNvcHBlcgBjb29sY29wcGVyAGd2X3NvcnRfY29tcGFyX3dyYXBwZXIAdGFwZXIAb3ZlcmxhcF9iZXppZXIAZmlnX2JlemllcgBjb3VyaWVyAENvdXJpZXIAaGllcgBkYWdnZXIARGFnZ2VyAG91dHB1dG9yZGVyAHBvc3RvcmRlcgBmbGF0X3Jlb3JkZXIAY2VsbGJvcmRlcgBmaXhMYWJlbE9yZGVyAGN5bGluZGVyAC9zdmcvbGF2ZW5kZXIAcmVuZGVyAGZvbGRlcgBjbHVzdGVyX2xlYWRlcgBORF9VRl9zaXplKG4pIDw9IDEgfHwgbiA9PSBsZWFkZXIAT2N0b2JlcgByZWZlcmVuY2UgdG8gaW52YWxpZCBjaGFyYWN0ZXIgbnVtYmVyAE5vdmVtYmVyAFNlcHRlbWJlcgBEZWNlbWJlcgBtYWNyAGJyAHN0YXIAZmVsZHNwYXIAcmVndWxhcgBpb3NfYmFzZTo6Y2xlYXIAYnJ2YmFyAE1hcgBccgBORF9yYW5rKHYpID09IHIAc3RyZXEAc3Rydmlld19lcQBzdHJ2aWV3X3N0cl9lcQBzdHJ2aWV3X2Nhc2Vfc3RyX2VxAHN0cnZpZXdfY2FzZV9lcQB2cAAlJUJlZ2luUHJvbG9nCi9Eb3REaWN0IDIwMCBkaWN0IGRlZgpEb3REaWN0IGJlZ2luCgovc2V0dXBMYXRpbjEgewptYXJrCi9FbmNvZGluZ1ZlY3RvciAyNTYgYXJyYXkgZGVmCiBFbmNvZGluZ1ZlY3RvciAwCgpJU09MYXRpbjFFbmNvZGluZyAwIDI1NSBnZXRpbnRlcnZhbCBwdXRpbnRlcnZhbApFbmNvZGluZ1ZlY3RvciA0NSAvaHlwaGVuIHB1dAoKJSBTZXQgdXAgSVNPIExhdGluIDEgY2hhcmFjdGVyIGVuY29kaW5nCi9zdGFybmV0SVNPIHsKICAgICAgICBkdXAgZHVwIGZpbmRmb250IGR1cCBsZW5ndGggZGljdCBiZWdpbgogICAgICAgIHsgMSBpbmRleCAvRklEIG5lIHsgZGVmIH17IHBvcCBwb3AgfSBpZmVsc2UKICAgICAgICB9IGZvcmFsbAogICAgICAgIC9FbmNvZGluZyBFbmNvZGluZ1ZlY3RvciBkZWYKICAgICAgICBjdXJyZW50ZGljdCBlbmQgZGVmaW5lZm9udAp9IGRlZgovVGltZXMtUm9tYW4gc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUl0YWxpYyBzdGFybmV0SVNPIGRlZgovVGltZXMtQm9sZCBzdGFybmV0SVNPIGRlZgovVGltZXMtQm9sZEl0YWxpYyBzdGFybmV0SVNPIGRlZgovSGVsdmV0aWNhIHN0YXJuZXRJU08gZGVmCi9IZWx2ZXRpY2EtT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgovSGVsdmV0aWNhLUJvbGQgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYS1Cb2xkT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgovQ291cmllciBzdGFybmV0SVNPIGRlZgovQ291cmllci1PYmxpcXVlIHN0YXJuZXRJU08gZGVmCi9Db3VyaWVyLUJvbGQgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXItQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKY2xlYXJ0b21hcmsKfSBiaW5kIGRlZgoKJSVCZWdpblJlc291cmNlOiBwcm9jc2V0IGdyYXBodml6IDAgMAovY29vcmQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgovZGVmYXVsdC1mb250LWZhbWlseSAvVGltZXMtUm9tYW4gZGVmCi9jb29yZGZvbnQgY29vcmQtZm9udC1mYW1pbHkgZmluZGZvbnQgOCBzY2FsZWZvbnQgZGVmCgovSW52U2NhbGVGYWN0b3IgMS4wIGRlZgovc2V0X3NjYWxlIHsKICAgICAgIGR1cCAxIGV4Y2ggZGl2IC9JbnZTY2FsZUZhY3RvciBleGNoIGRlZgogICAgICAgc2NhbGUKfSBiaW5kIGRlZgoKJSBzdHlsZXMKL3NvbGlkIHsgW10gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2Rhc2hlZCB7IFs5IEludlNjYWxlRmFjdG9yIG11bCBkdXAgXSAwIHNldGRhc2ggfSBiaW5kIGRlZgovZG90dGVkIHsgWzEgSW52U2NhbGVGYWN0b3IgbXVsIDYgSW52U2NhbGVGYWN0b3IgbXVsXSAwIHNldGRhc2ggfSBiaW5kIGRlZgovaW52aXMgey9maWxsIHtuZXdwYXRofSBkZWYgL3N0cm9rZSB7bmV3cGF0aH0gZGVmIC9zaG93IHtwb3AgbmV3cGF0aH0gZGVmfSBiaW5kIGRlZgovYm9sZCB7IDIgc2V0bGluZXdpZHRoIH0gYmluZCBkZWYKL2ZpbGxlZCB7IH0gYmluZCBkZWYKL3VuZmlsbGVkIHsgfSBiaW5kIGRlZgovcm91bmRlZCB7IH0gYmluZCBkZWYKL2RpYWdvbmFscyB7IH0gYmluZCBkZWYKL3RhcGVyZWQgeyB9IGJpbmQgZGVmCgolIGhvb2tzIGZvciBzZXR0aW5nIGNvbG9yIAovbm9kZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgovZWRnZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgovZ3JhcGhjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL25vcGNvbG9yIHtwb3AgcG9wIHBvcH0gYmluZCBkZWYKCi9iZWdpbnBhZ2UgewklIGkgaiBucGFnZXMKCS9ucGFnZXMgZXhjaCBkZWYKCS9qIGV4Y2ggZGVmCgkvaSBleGNoIGRlZgoJL3N0ciAxMCBzdHJpbmcgZGVmCglucGFnZXMgMSBndCB7CgkJZ3NhdmUKCQkJY29vcmRmb250IHNldGZvbnQKCQkJMCAwIG1vdmV0bwoJCQkoXCgpIHNob3cgaSBzdHIgY3ZzIHNob3cgKCwpIHNob3cgaiBzdHIgY3ZzIHNob3cgKFwpKSBzaG93CgkJZ3Jlc3RvcmUKCX0gaWYKfSBiaW5kIGRlZgoKL3NldF9mb250IHsKCWZpbmRmb250IGV4Y2gKCXNjYWxlZm9udCBzZXRmb250Cn0gZGVmCgolIGRyYXcgdGV4dCBmaXR0ZWQgdG8gaXRzIGV4cGVjdGVkIHdpZHRoCi9hbGlnbmVkdGV4dCB7CQkJJSB3aWR0aCB0ZXh0CgkvdGV4dCBleGNoIGRlZgoJL3dpZHRoIGV4Y2ggZGVmCglnc2F2ZQoJCXdpZHRoIDAgZ3QgewoJCQlbXSAwIHNldGRhc2gKCQkJdGV4dCBzdHJpbmd3aWR0aCBwb3Agd2lkdGggZXhjaCBzdWIgdGV4dCBsZW5ndGggZGl2IDAgdGV4dCBhc2hvdwoJCX0gaWYKCWdyZXN0b3JlCn0gZGVmCgovYm94cHJpbSB7CQkJCSUgeGNvcm5lciB5Y29ybmVyIHhzaXplIHlzaXplCgkJNCAyIHJvbGwKCQltb3ZldG8KCQkyIGNvcHkKCQlleGNoIDAgcmxpbmV0bwoJCTAgZXhjaCBybGluZXRvCgkJcG9wIG5lZyAwIHJsaW5ldG8KCQljbG9zZXBhdGgKfSBiaW5kIGRlZgoKL2VsbGlwc2VfcGF0aCB7CgkvcnkgZXhjaCBkZWYKCS9yeCBleGNoIGRlZgoJL3kgZXhjaCBkZWYKCS94IGV4Y2ggZGVmCgltYXRyaXggY3VycmVudG1hdHJpeAoJbmV3cGF0aAoJeCB5IHRyYW5zbGF0ZQoJcnggcnkgc2NhbGUKCTAgMCAxIDAgMzYwIGFyYwoJc2V0bWF0cml4Cn0gYmluZCBkZWYKCi9lbmRwYWdlIHsgc2hvd3BhZ2UgfSBiaW5kIGRlZgovc2hvd3BhZ2UgeyB9IGRlZgoKL2xheWVyY29sb3JzZXEKCVsJJSBsYXllciBjb2xvciBzZXF1ZW5jZSAtIGRhcmtlc3QgdG8gbGlnaHRlc3QKCQlbMCAwIDBdCgkJWy4yIC44IC44XQoJCVsuNCAuOCAuOF0KCQlbLjYgLjggLjhdCgkJWy44IC44IC44XQoJXQpkZWYKCi9sYXllcmxlbiBsYXllcmNvbG9yc2VxIGxlbmd0aCBkZWYKCi9zZXRsYXllciB7L21heGxheWVyIGV4Y2ggZGVmIC9jdXJsYXllciBleGNoIGRlZgoJbGF5ZXJjb2xvcnNlcSBjdXJsYXllciAxIHN1YiBsYXllcmxlbiBtb2QgZ2V0CglhbG9hZCBwb3Agc2V0aHNiY29sb3IKCS9ub2RlY29sb3Ige25vcGNvbG9yfSBkZWYKCS9lZGdlY29sb3Ige25vcGNvbG9yfSBkZWYKCS9ncmFwaGNvbG9yIHtub3Bjb2xvcn0gZGVmCn0gYmluZCBkZWYKCi9vbmxheWVyIHsgY3VybGF5ZXIgbmUge2ludmlzfSBpZiB9IGRlZgoKL29ubGF5ZXJzIHsKCS9teXVwcGVyIGV4Y2ggZGVmCgkvbXlsb3dlciBleGNoIGRlZgoJY3VybGF5ZXIgbXlsb3dlciBsdAoJY3VybGF5ZXIgbXl1cHBlciBndAoJb3IKCXtpbnZpc30gaWYKfSBkZWYKCi9jdXJsYXllciAwIGRlZgoKJSVFbmRSZXNvdXJjZQolJUVuZFByb2xvZwolJUJlZ2luU2V0dXAKMTQgZGVmYXVsdC1mb250LWZhbWlseSBzZXRfZm9udAolIC9hcnJvd2xlbmd0aCAxMCBkZWYKJSAvYXJyb3d3aWR0aCA1IGRlZgoKJSBtYWtlIHN1cmUgcGRmbWFyayBpcyBoYXJtbGVzcyBmb3IgUFMtaW50ZXJwcmV0ZXJzIG90aGVyIHRoYW4gRGlzdGlsbGVyCi9wZGZtYXJrIHdoZXJlIHtwb3B9IHt1c2VyZGljdCAvcGRmbWFyayAvY2xlYXJ0b21hcmsgbG9hZCBwdXR9IGlmZWxzZQolIG1ha2UgJzw8JyBhbmQgJz4+JyBzYWZlIG9uIFBTIExldmVsIDEgZGV2aWNlcwovbGFuZ3VhZ2VsZXZlbCB3aGVyZSB7cG9wIGxhbmd1YWdlbGV2ZWx9ezF9IGlmZWxzZQoyIGx0IHsKICAgIHVzZXJkaWN0ICg8PCkgY3ZuIChbKSBjdm4gbG9hZCBwdXQKICAgIHVzZXJkaWN0ICg+PikgY3ZuIChbKSBjdm4gbG9hZCBwdXQKfSBpZgoKJSVFbmRTZXR1cABzdXAAZ3JvdXAAY3VwAHRoaW5zcABlbnNwAGVtc3AAbmJzcABwZXJwAHdlaWVycABnZW5lcmF0ZS1jb25zdHJhaW50cy5jcHAAYmxvY2suY3BwAGNzb2x2ZV9WUFNDLmNwcAB/dG9wAHByb3AAYWd4YnBvcABub3AAYXN5bXAAY29tcABmaW5kQ0NvbXAAYm1wAHNjYWxlX2NsYW1wAHhscABscCAhPSBjbHAAdGFpbF9scABoZWFkX2xwAHRhaWx0b29sdGlwAGxhYmVsdG9vbHRpcABlZGdldG9vbHRpcABoZWFkdG9vbHRpcABoZWxsaXAAdGFpbGNsaXAAaGVhZGNsaXAAL3N2Zy9wYXBheWF3aGlwAGhwAHRyYW5zcG9zZV9zdGVwAGNvbXB1dGVTdGVwAGxheWVybGlzdHNlcABsYXllcnNlcABpcHNlcAByYW5rc2VwAG5vZGVzZXAAc3ViZ3JhcGhzIG5lc3RlZCBtb3JlIHRoYW4gJWQgZGVlcABTZXAAc2ZkcABjcAB3ZWJwAGlkbWFwAGNsdXN0ZXJfbWFwAGNtYXB4Om1hcABlcHM6bWFwAGNtYXB4X25wOm1hcABpbWFwX25wOm1hcABpc21hcDptYXAAaW1hcDptYXAAY21hcDptYXAAc3ZnOm1hcABqcGc6bWFwAHBuZzptYXAAanBlZzptYXAAZ2lmOm1hcABqcGU6bWFwAG92ZXJsYXAAbGV2ZWxzZ2FwAGNhcABLUF9VcAAlSTolTTolUyAlcABzdGFydCA8PSBwAHJzcXVvAGxzcXVvAHJkcXVvAGxkcXVvAGJkcXVvAHNicXVvAHJzYXF1bwBsc2FxdW8AcmFxdW8AbGFxdW8AYXV0bwBOdW5pdG8AL3N2Zy90b21hdG8AbmVhdG8AZXVybwAvc3ZnL2dhaW5zYm9ybwBNZXRob2RaZXJvAG1pY3JvAG5pbWJ1c21vbm8AbGliZXJhdGlvbm1vbm8AZnJlZW1vbm8AYXJpbW8AcmF0aW8AcG9ydGhvAHJobwBSaG8AL3N2Zy9pbmRpZ28AcGluZm8AY2NncmFwaGluZm8AY2Nnbm9kZWluZm8AY2xfZWRnZV9pbmZvAGdldFBhY2tJbmZvAG1ha2VJbmZvAHBhcnNlUGFja01vZGVJbmZvAGNpcmNvAGljbwBcJTAzbwAvc3ZnL3Jvc3licm93bgAvc3ZnL3NhbmR5YnJvd24AdmVyeWRhcmticm93bgAvc3ZnL3NhZGRsZWJyb3duAC9zdmcvYnJvd24AS1BfRG93bgBjYW5ub3QgY2hhbmdlIHNldHRpbmcgb25jZSBwYXJzaW5nIGhhcyBiZWd1bgBTdW4ASnVuAHRob3JuAC9zdmcvY3JpbXNvbgB4ZG90X2pzb24AeGRvdF9qc29uOmpzb24AanNvbjA6anNvbgBvbWljcm9uAE9taWNyb24Ac2Nhcm9uAFNjYXJvbgB3ZWJtYXJvb24AeDExbWFyb29uAC9zdmcvbWFyb29uAC9zdmcvbGlnaHRzYWxtb24AL3N2Zy9kYXJrc2FsbW9uAC9zdmcvc2FsbW9uAHVwc2lsb24AZXBzaWxvbgBVcHNpbG9uAEVwc2lsb24AcmVzb2x1dGlvbgBkaXN0b3J0aW9uAHN0ZDo6ZXhjZXB0aW9uAHBhcnRpdGlvbgBkb3RfcG9zaXRpb24AU2V0dGluZyB1cCBzdHJlc3MgZnVuY3Rpb24AdW5jbG9zZWQgQ0RBVEEgc2VjdGlvbgBwb3N0YWN0aW9uAHJvdGF0aW9uAG9yaWVudGF0aW9uAGFib21pbmF0aW9uAGFjY291bnRpbmdHZXRDdXJyZW50QW1wbGlmaWNhdGlvbgB4ZG90dmVyc2lvbgBTVHNldFVuaW9uADxwb2x5Z29uAGhleGFnb24Ac2VwdGFnb24AcGVudGFnb24AdHJpcGxlb2N0YWdvbgBkb3VibGVvY3RhZ29uAC9zdmcvbGVtb25jaGlmZm9uAE1vbgBwbHVzbW4Abm90aW4AaXNpbgAvc3ZnL21vY2Nhc2luAHBpbgBtaW4Adm9yb19tYXJnaW4AaW5maW4Ab25lZF9vcHRpbWl6ZXJfdHJhaW4AcGxhaW4AbWFrZV9jaGFpbgBtZXJnZV9jaGFpbgBkZWxldGVNaW4AZmluZE1pbgB2YWxpZ24AYmFsaWduAHllbgBNdWx0aWxldmVsX2NvYXJzZW4AY3VycmVuAFBvYnNvcGVuAGd2X2ZvcGVuAGd2dXNlcnNoYXBlX29wZW4AZW50aXR5VHJhY2tpbmdPbk9wZW4AL3N2Zy9saW5lbgBkaW1lbgBtaW5sZW4Ac3R5bGVfdG9rZW4AdW5jbG9zZWQgdG9rZW4AL3N2Zy95ZWxsb3dncmVlbgBtZWRpdW1mb3Jlc3RncmVlbgAvc3ZnL2ZvcmVzdGdyZWVuAC9zdmcvbGlnaHRncmVlbgBodW50ZXJzZ3JlZW4AL3N2Zy9sYXduZ3JlZW4AL3N2Zy9kYXJrZ3JlZW4AL3N2Zy9tZWRpdW1zcHJpbmdncmVlbgAvc3ZnL3NwcmluZ2dyZWVuAC9zdmcvZGFya29saXZlZ3JlZW4AL3N2Zy9saW1lZ3JlZW4AL3N2Zy9wYWxlZ3JlZW4Ad2ViZ3JlZW4AL3N2Zy9saWdodHNlYWdyZWVuAC9zdmcvbWVkaXVtc2VhZ3JlZW4AL3N2Zy9kYXJrc2VhZ3JlZW4AL3N2Zy9zZWFncmVlbgB4MTFncmVlbgAvc3ZnL2dyZWVuAEdyZWVuAC9zdmcvbGlnaHRjeWFuAC9zdmcvZGFya2N5YW4AL3N2Zy9jeWFuAG5ld3RhbgBkYXJrdGFuAC9zdmcvdGFuAHJvd3NwYW4AY29sc3BhbgBuYW4AdGltZXNuZXdyb21hbgBuaW1idXNyb21hbgB0aW1lc3JvbWFuAFRpbWVzLVJvbWFuAFBhbGF0aW5vLVJvbWFuAE5ld0NlbnR1cnlTY2hsYmstUm9tYW4ASmFuAEdEX3JhbmsoZylbcl0ubiA8PSBHRF9yYW5rKGcpW3JdLmFuAGFneGJwdXRfbgBcbgBuX25vZGVzID09IGdyYXBoLT5uAEEtPm0gPT0gQS0+bgBqb2ItPm9iai0+dS5uAG56YyA9PSAoc2l6ZV90KW4AcywlbGYsJWxmJW4AIGUsJWxmLCVsZiVuACVkICUxWyJdJW4AdiA9PSBuAGIgPT0gbgBuY2x1c3RlciA8PSBuAHBzeW0AYWxlZnN5bQB0aGV0YXN5bQBxdWFudHVtAHN1bQAvc3ZnL3BsdW0AaW52dHJhcGV6aXVtAG1lZGl1bQA5OnByaXNtAGxybQBjdXN0b20AYXB0ci0+dGFnID09IFRfYXRvbQAvZGV2L3VyYW5kb20AZ3ZfcmFuZG9tAHJsbQBzaW0ASU1EU19naXZlbl9kaW0Ab3JkbQBwYXJhbGxlbG9ncmFtAC9zdmcvbWludGNyZWFtAEp1bAB0bABmcmFzbABTeW1ib2wAZmluZENvbAA8P3htbAB5dW1sAHV1bWwAb3VtbABpdW1sAGV1bWwAYXVtbABZdW1sAFV1bWwAT3VtbABJdW1sAEV1bWwAQXVtbABjb3JlX2xvYWRpbWFnZV92cm1sAGpwZzp2cm1sAHBuZzp2cm1sAGpwZWc6dnJtbABnaWY6dnJtbABqcGU6dnJtbABidWxsAGZpbGwAL3N2Zy9zZWFzaGVsbABmb3JhbGwAQXByaWwAcGVybWlsAHJjZWlsAGxjZWlsAGNjZWRpbABDY2VkaWwAYXJyb3d0YWlsAGx0YWlsAHNhbWV0YWlsAGxldmVsID49IDAgJiYgbGV2ZWwgPD0gbi0+bGV2ZWwAc3RyZXNzX21ham9yaXphdGlvbl9rRF9ta2VybmVsAGlzX3BhcmFsbGVsAENhbGN1bGF0aW5nIGNpcmN1aXQgbW9kZWwAQ2FsY3VsYXRpbmcgc3Vic2V0IG1vZGVsAENhbGN1bGF0aW5nIE1EUyBtb2RlbAB4bGFiZWwAdGFpbGxhYmVsAGhlYWRsYWJlbABncmFwaCBsYWJlbABpZXhjbABvYmpwLT5sYmwAb3ZhbABtZXJnZXZpcnR1YWwAL3N2Zy9saWdodGNvcmFsAC9zdmcvY29yYWwAU3BhcnNlTWF0cml4X2Zyb21fY29vcmRpbmF0ZV9hcnJheXNfaW50ZXJuYWwATXVsdGlsZXZlbF9jb2Fyc2VuX2ludGVybmFsAFF1YWRUcmVlX2FkZF9pbnRlcm5hbABhcnJvd19sZW5ndGhfbm9ybWFsAGFyaWFsAHJhZGlhbAAvc3ZnL3RlYWwAcmVhbABsb2NhbABlc3RpbWF0ZV9jaGFyYWN0ZXJfd2lkdGhfY2Fub25pY2FsAGdsb2JhbABxLT5sAC4uLy4uL2xpYi9jZ3JhcGgvc2Nhbi5sAHRrOnRrAGdpZjp0awBwYXRjaHdvcmsAdG9rAGJvb2sAQXZhbnRHYXJkZS1Cb29rAHNpbmsAb3ZlcmxhcF9zaHJpbmsAc3BpY3lwaW5rAC9zdmcvaG90cGluawAvc3ZnL2xpZ2h0cGluawAvc3ZnL2RlZXBwaW5rAG5lb25waW5rAC9zdmcvcGluawBuZXdyYW5rAGNsdXN0ZXJyYW5rAF9uZXdfcmFuawBpbnN0YWxsX2luX3JhbmsAcmVtb3ZlX2Zyb21fcmFuawAvc3ZnL2Nvcm5zaWxrAG9uZWJsb2NrAHYtPmxlZnQtPmJsb2NrID09IHYtPnJpZ2h0LT5ibG9jawAvc3ZnL2ZpcmVicmljawBQUWNoZWNrAHBhY2sAL3N2Zy9ibGFjawBCbGFjawBiYWNrAHp3agB6d25qAGpvYi0+b2JqAGdldGludHJzeGkAcHNpAFBzaQBDYWxpYnJpAEZyaQB0d29waQBkcGkAdm9yb25vaQBWb3Jvbm9pAGNoYW5pAGRlbWkAQm9va21hbi1EZW1pAEF2YW50R2FyZGUtRGVtaQAvc3ZnL2RhcmtraGFraQAvc3ZnL2toYWtpAHBoaQBjaGkAUGhpAENoaQBkaQBYaQBQaQBORF9pZChucCkgPT0gaQBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcl9zbW9vdGgAU3ByaW5nU21vb3RoZXJfc21vb3RoAGJvdGgAc3RhcnRzd2l0aABsaW5lbGVuZ3RoAGJhZF9hcnJheV9uZXdfbGVuZ3RoAGF2ZXJhZ2VfZWRnZV9sZW5ndGgAZXRoAHBlbndpZHRoAGx3aWR0aABzZXRsaW5ld2lkdGgAc2hvcnRwYXRoAGZvbnRwYXRoAFBvYnNwYXRoAGJlZ2lucGF0aABpbWFnZXBhdGgAZW5kcGF0aABzdHJhaWdodF9wYXRoAG1hcF9wYXRoADxwYXRoAGNhbm5vdCBmaW5kIHRyaWFuZ2xlIHBhdGgAL3N2Zy9sYXZlbmRlcmJsdXNoAGZsZXNoAG9zbGFzaABPc2xhc2gAZHRzdHJoYXNoAHN0cmRpY3RfaGFzaABuZGFzaABtZGFzaABkaWdyYXBoAHN1YmdyYXBoAGNvbnN0cnVjdF9ncmFwaABjaGtTZ3JhcGgAY2xvc2VzdF9wYWlyczJncmFwaABhZ2RlbGV0ZSBvbiB3cm9uZyBncmFwaABjb25uZWN0R3JhcGgAdXBzaWgAJXNsaW5lLXRocm91Z2gAY2hhblNlYXJjaABSVHJlZVNlYXJjaABNYXJjaABEaXNjb25CcmFuY2gAUGlja0JyYW5jaABBZGRCcmFuY2gALi4vLi4vbGliL3V0aWwvYml0YXJyYXkuaAAuLi8uLi9saWIvdXRpbC9zdHJ2aWV3LmgALi4vLi4vbGliL3V0aWwvc29ydC5oAC4uLy4uL2xpYi9jZ3JhcGgvbm9kZV9zZXQuaAAuLi8uLi9saWIvdXRpbC9zdHJlcS5oAC4uLy4uL2xpYi91dGlsL3N0YXJ0c3dpdGguaAAuLi8uLi9saWIvdXRpbC9ndl9tYXRoLmgALi4vLi4vbGliL3V0aWwvYWd4YnVmLmgALi4vLi4vbGliL3V0aWwvdG9rZW5pemUuaAAuLi8uLi9saWIvdXRpbC9hbGxvYy5oAGF1eGcAY29yZV9sb2FkaW1hZ2Vfc3ZnAHN2ZzpzdmcAanBnOnN2ZwBwbmc6c3ZnAGpwZWc6c3ZnAGdpZjpzdmcAanBlOnN2ZwBzdmdfaW5saW5lOnN2ZwBBdWcAZG9Qcm9sb2cAcG93ZXJfaXRlcmF0aW9uX29ydGhvZwBwbmcAaWRlYWxfZGlzdF9zY2hlbWUgdmFsdWUgd3JvbmcAeGRvdCB2ZXJzaW9uICIlcyIgdG9vIGxvbmcAY29uZwBsYmxlbmNsb3NpbmcAYmFzaWNfc3RyaW5nAGZhaWx1cmUgbWFsbG9jJ2luZyBmb3IgcmVzdWx0IHN0cmluZwBzcHJpbmcAb3JkZXJpbmcAZ2VuZXJhdGVSYW5kb21PcmRlcmluZwBhcmluZwBBcmluZwBEYW1waW5nAFdhcm5pbmcAb3ZlcmxhcF9zY2FsaW5nAHggYW5kIHkgc2NhbGluZwBvbGQgc2NhbGluZwBzbW9vdGhpbmcAdW5rbm93biBlbmNvZGluZwBtdWx0aWxldmVsX3NwcmluZ19lbGVjdHJpY2FsX2VtYmVkZGluZwBzcHJpbmdfZWxlY3RyaWNhbF9zcHJpbmdfZW1iZWRkaW5nAGNlbGxwYWRkaW5nAGNlbGxzcGFjaW5nAHJhbmcAbGFuZwBmaXZlcG92ZXJoYW5nAHRocmVlcG92ZXJoYW5nAG5vdmVyaGFuZwBlbWl0X2h0bWxfaW1nAGxnAG9yaWcAc3psaWcAb2VsaWcAYWVsaWcAT0VsaWcAQUVsaWcAY29yZV9sb2FkaW1hZ2VfZmlnAGpwZzpmaWcAcG5nOmZpZwBmaWc6ZmlnAGpwZWc6ZmlnAGdpZjpmaWcAanBlOmZpZwBlZ2cAbmV4dF9zZWcAcmVnAGpwZWcAaSA9PSBkZWcAZGcAY2cAY2xvc2VzdWJnAG1pc21hdGNoZWQgdGFnAGJlei0+c2ZsYWcAYmV6LT5lZmxhZwAhKmZsYWcAIWZsYWcAPGcAJS41ZywlLjVnLCUuNWcsJS41ZwAlLjVnICUuNWcAJWcgJWcAYm94SW50ZXJzZWN0ZgBlcHNmAGFnZWRnZXNlcWNtcGYAY2N3cm90YXRlcGYAZm5vZgBpbmYAc2VsZgBoYWxmACVsZiVsZiVsZiVsZgAlbGYsJWxmLCVsZiwlbGYsJWxmACUqZiAlKmYgJWxmICVsZgBsaWJlcmF0aW9uc2VyaWYAZnJlZXNlcmlmAHNhbnMtU2VyaWYAZ2lmAC9zdmcvcGVhY2hwdWZmAHJpZmYAYWNjb3VudGluZ1JlcG9ydERpZmYAKFhtbEJpZ0NvdW50KS0xIC0gcm9vdFBhcnNlci0+bV9hbGxvY190cmFja2VyLmJ5dGVzQWxsb2NhdGVkID49IGFic0RpZmYAdGFpbGhyZWYAbGFiZWxocmVmAGVkZ2VocmVmAGhlYWRocmVmAG9yZGYAcGRmAHNpZ21hZgBcZgAlLjBMZgAlTGYAdXMtPmYAJS4wM2YAJXMgdHJhbnNtaXQgJS4zZgByZ2I8JTkuM2YsICU5LjNmLCAlOS4zZj4gdHJhbnNtaXQgJS4zZgAlLjAyZgAlLjJmACUuMGYsJS4wZiwlLjBmLCUuMGYAICUuMGYsJS4wZgAlLjBmICUuMGYgJS4wZiAlLjBmACIgZmlsbC1vcGFjaXR5PSIlZgAiIHN0cm9rZS1vcGFjaXR5PSIlZgAKZmluYWwgZSA9ICVmAGJyb256ZQBhcnJvd3NpemUAbGFiZWxmb250c2l6ZQBzZWFyY2hzaXplAGZpeGVkc2l6ZQBub2RlX3NldF9zaXplAHRleHRzcGFuX3NpemUAc3ZnX3NpemUAaW5kZXggPCBsaXN0LT5zaXplAGNhcGFjaXR5ID4gZGljdC0+c2l6ZQBjYXBhY2l0eSA+IHNlbGYtPnNpemUAYnouc2l6ZQBwb2ludC1zaXplAFNJWkVfTUFYIC0gc2l6ZW9mKHNpemVfdCkgLSBFWFBBVF9NQUxMT0NfUEFERElORyA+PSBzaXplAG5vcm1hbGl6ZQBFTGluaXRpYWxpemUAbWtNYXplAGljdXJ2ZQB0cnlfcmVzZXJ2ZQBub2RlX3NldF9yZW1vdmUAc3RyZGljdF9yZW1vdmUAc29sdmUAIXYtPmFjdGl2ZQAtYWN0aXZlAGZvbnRfaW5fbGlzdF9wZXJtaXNzaXZlAC9zdmcvb2xpdmUAdWdyYXZlAG9ncmF2ZQBpZ3JhdmUAZWdyYXZlAGFncmF2ZQBVZ3JhdmUAT2dyYXZlAElncmF2ZQBFZ3JhdmUAQWdyYXZlAHRydWUAL3N2Zy9iaXNxdWUAb2JsaXF1ZQBBdmFudEdhcmRlLUJvb2tPYmxpcXVlAEF2YW50R2FyZGUtRGVtaU9ibGlxdWUASGVsdmV0aWNhLU5hcnJvdy1Cb2xkT2JsaXF1ZQBDb3VyaWVyLUJvbGRPYmxpcXVlAEhlbHZldGljYS1Cb2xkT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93LU9ibGlxdWUAQ291cmllci1PYmxpcXVlAEhlbHZldGljYS1PYmxpcXVlAG5hdnlibHVlAC9zdmcvbGlnaHRza3libHVlAC9zdmcvZGVlcHNreWJsdWUAL3N2Zy9za3libHVlAG5ld21pZG5pZ2h0Ymx1ZQAvc3ZnL21pZG5pZ2h0Ymx1ZQAvc3ZnL2xpZ2h0Ymx1ZQAvc3ZnL2NhZGV0Ymx1ZQAvc3ZnL2Nvcm5mbG93ZXJibHVlAC9zdmcvZG9kZ2VyYmx1ZQAvc3ZnL3Bvd2RlcmJsdWUAbmVvbmJsdWUAL3N2Zy9tZWRpdW1ibHVlAC9zdmcvbGlnaHRzdGVlbGJsdWUAL3N2Zy9zdGVlbGJsdWUAL3N2Zy9yb3lhbGJsdWUAL3N2Zy9kYXJrYmx1ZQByaWNoYmx1ZQBsaWdodHNsYXRlYmx1ZQAvc3ZnL21lZGl1bXNsYXRlYmx1ZQAvc3ZnL2RhcmtzbGF0ZWJsdWUAL3N2Zy9zbGF0ZWJsdWUAL3N2Zy9hbGljZWJsdWUAL3N2Zy9ibHVlAGNhbGxTdG9yZUVudGl0eVZhbHVlAHN0b3JlQXR0cmlidXRlVmFsdWUAQmx1ZQBuZWF0b19lbnF1ZXVlAFR1ZQB5YWN1dGUAdWFjdXRlAG9hY3V0ZQBpYWN1dGUAZWFjdXRlAGFhY3V0ZQBZYWN1dGUAVWFjdXRlAE9hY3V0ZQBJYWN1dGUARWFjdXRlAEFhY3V0ZQByZWZlcmVuY2UgdG8gZXh0ZXJuYWwgZW50aXR5IGluIGF0dHJpYnV0ZQBkdXBsaWNhdGUgYXR0cmlidXRlAG5vdGUAcHJpbWVyc2l0ZQByaWJvc2l0ZQByZXN0cmljdGlvbnNpdGUAcHJvdGVhc2VzaXRlAC9zdmcvZ2hvc3R3aGl0ZQAvc3ZnL25hdmFqb3doaXRlAC9zdmcvZmxvcmFsd2hpdGUAL3N2Zy9hbnRpcXVld2hpdGUAL3N2Zy93aGl0ZQBXaGl0ZQBwb3Bfb2JqX3N0YXRlAHBjcF9yb3RhdGUAY29uY2VudHJhdGUAZGVjb3JhdGUAUXVhZFRyZWVfcmVwdWxzaXZlX2ZvcmNlX2FjY3VtdWxhdGUAbm90cmFuc2xhdGUAL3N2Zy9jaG9jb2xhdGUAcGFyc2VyQ3JlYXRlAGdlb21VcGRhdGUAaW52aG91c2UAL3N2Zy9jaGFydHJldXNlAFhNTF9QYXJzZQA8ZWxsaXBzZQBkdXN0eXJvc2UAL3N2Zy9taXN0eXJvc2UAU3BhcnNlTWF0cml4X3RyYW5zcG9zZQBhZ2Nsb3NlAGVudGl0eVRyYWNraW5nT25DbG9zZQBTcGFyc2VNYXRyaXhfbXVsdGlwbHlfZGVuc2UAZmFsc2UAL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvcGFsZXR1cnF1b2lzZQAvc3ZnL3R1cnF1b2lzZQBwaGFzZQBTSVpFX01BWCAtIHJvb3RQYXJzZXItPm1fYWxsb2NfdHJhY2tlci5ieXRlc0FsbG9jYXRlZCA+PSBpbmNyZWFzZQAvc3ZnL2F6dXJlAHNpZ25hdHVyZQBtb3JlX2NvcmUATXNxdWFyZQBQYWxhdGlubyBMaW5vdHlwZQBBLT50eXBlID09IEItPnR5cGUAc3VwZQBlbGxpcHNlX3RhbmdlbnRfc2xvcGUAZ3ZyZW5kZXJfdXNlcnNoYXBlAG1pdGVyX3NoYXBlAGxhbmRzY2FwZQBMYW5kc2NhcGUASnVuZQBub25lAGRvY3VtZW50IGlzIG5vdCBzdGFuZGFsb25lAGNvdXNpbmUAL3N2Zy9tZWRpdW1hcXVhbWFyaW5lAC9zdmcvYXF1YW1hcmluZQA8cG9seWxpbmUAJXNvdmVybGluZQB1bmRlcmxpbmUAcmVhbGx5cm91dGVzcGxpbmUAUHJvdXRlc3BsaW5lAGxpbmVhcl9zcGxpbmUAYl9zcGxpbmUAb2xpbmUAYWd4YnVmX2lzX2lubGluZQBzdmdfaW5saW5lAHJlZmluZQBwcmltZQBQcmltZQAvc3ZnL2xpbWUAY29sb3JzY2hlbWUAbGFiZWxfc2NoZW1lAHNhbWUAbGFiZWxmb250bmFtZQBVRl9zZXRuYW1lAGZvbnRfbmFtZQBmb250LT5uYW1lAHVzLT5uYW1lAHJlc2VydmVkIHByZWZpeCAoeG1sKSBtdXN0IG5vdCBiZSB1bmRlY2xhcmVkIG9yIGJvdW5kIHRvIGFub3RoZXIgbmFtZXNwYWNlIG5hbWUAc3R5bGUAL3N2Zy90aGlzdGxlAHRpdGxlAC9zdmcvbWVkaXVtcHVycGxlAGRhcmtwdXJwbGUAd2VicHVycGxlAHJlYmVjY2FwdXJwbGUAdmVyeV9saWdodF9wdXJwbGUAbWVkX3B1cnBsZQB4MTFwdXJwbGUAL3N2Zy9wdXJwbGUAc2hhcGVmaWxlAGdyYWRpZW50YW5nbGUAcmVjdGFuZ2xlAFJlY3RhbmdsZQBsYWJlbGFuZ2xlAGludnRyaWFuZ2xlAGRlc3RpbmF0aW9uIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAc291cmNlIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAZGZzQ3ljbGUAZG91YmxlY2lyY2xlAE1jaXJjbGUAaW52aXNpYmxlAGV4cGF0X2hlYXBfaW5jcmVhc2VfdG9sZXJhYmxlAHRob3JuZGFsZQBpbnB1dHNjYWxlAG9zY2FsZQBpbWFnZXNjYWxlAC9zdmcvd2hpdGVzbW9rZQBtYW5kYXJpbm9yYW5nZQAvc3ZnL2RhcmtvcmFuZ2UAL3N2Zy9vcmFuZ2UAZXhjaGFuZ2UAL3N2Zy9iZWlnZQBuZXdlZGdlAGRlbGV0ZV9mYXN0X2VkZ2UAZGVsZXRlX2ZsYXRfZWRnZQBhZGRfdHJlZV9lZGdlAG1ha2VTdHJhaWdodEVkZ2UAbWFrZVNlbGZFZGdlAG1ha2VDb21wb3VuZEVkZ2UAIXVzZV9zdGFnZQBvc2FnZQBwYWdlAGd2bG9hZGltYWdlAHZlZQB0ZWUAUVVBRF9UUkVFX0hZQlJJRCwgc2l6ZSBsYXJnZXIgdGhhbiAlZCwgc3dpdGNoIHRvIGZhc3QgcXVhZHRyZWUAZmVhc2libGVfdHJlZQBub2RlX3NldF9mcmVlAGV4cGF0X2ZyZWUAZ3ZfYXJlbmFfZnJlZQBuZXdub2RlAGluc3RhbGxub2RlAGFnbm9kZQBkZWxldGVfZmFzdF9ub2RlAHBhY2ttb2RlAFNwbGl0Tm9kZQBvdGlsZGUAbnRpbGRlAGF0aWxkZQBPdGlsZGUATnRpbGRlAEF0aWxkZQBkaXZpZGUAdHJhZGUAZ3JhcGh2aXpfbm9kZV9pbmR1Y2UAc291cmNlAHJlcHVsc2l2ZWZvcmNlAGlsbGVnYWwgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UAZXJyb3IgaW4gcHJvY2Vzc2luZyBleHRlcm5hbCBlbnRpdHkgcmVmZXJlbmNlAHJlY3Vyc2l2ZSBlbnRpdHkgcmVmZXJlbmNlAGxhYmVsZGlzdGFuY2UAVEJfYmFsYW5jZQBUQmJhbGFuY2UAZGV2aWNlAG1vbm9zcGFjZQAvc3ZnL29sZGxhY2UAZmFjZQBzdWJlACAtYW5jaG9yIGUAczEtPmNvbW1fY29vcmQ9PXMyLT5jb21tX2Nvb3JkAE1yZWNvcmQAZm9yd2FyZABwcm9kAGxpZ2h0Z29sZGVucm9kAG1lZGl1bWdvbGRlbnJvZAAvc3ZnL2Rhcmtnb2xkZW5yb2QAL3N2Zy9wYWxlZ29sZGVucm9kAC9zdmcvZ29sZGVucm9kAC9zdmcvYnVybHl3b29kAGxpZ2h0d29vZABtZWRpdW13b29kAGRhcmt3b29kAF9iYWNrZ3JvdW5kAGNvbXBvdW5kAG5vIGVsZW1lbnQgZm91bmQAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQAL3N2Zy9ibGFuY2hlZGFsbW9uZABhcnJvd19sZW5ndGhfZGlhbW9uZABNZGlhbW9uZABub2RlX3NldF9maW5kAHN0cmRpY3RfZmluZABndnVzZXJzaGFwZV9maW5kAEVMbGVmdGJuZABleHBhbmQAY3VtYmVybGFuZABicmlnaHRnb2xkAG9sZGdvbGQAL3N2Zy9nb2xkAGJvbGQASGVsdmV0aWNhLU5hcnJvdy1Cb2xkAFRpbWVzLUJvbGQAQ291cmllci1Cb2xkAFBhbGF0aW5vLUJvbGQATmV3Q2VudHVyeVNjaGxiay1Cb2xkAEhlbHZldGljYS1Cb2xkACUwKmxsZAAlKmxsZAArJWxsZABuLT5icmFuY2hbaV0uY2hpbGQAJSsuNGxkACVzJWxkAHNvbGlkAC9zdmcvbWVkaXVtb3JjaGlkAC9zdmcvZGFya29yY2hpZAAvc3ZnL29yY2hpZABpbGxlZ2FsIGNoYXJhY3RlcihzKSBpbiBwdWJsaWMgaWQAZGlqa3N0cmFfc2dkAGZpeGVkAGN1cnZlZABkZXJpdmVkAGRvdHRlZABtZW1vcnkgZXhoYXVzdGVkAGxvY2FsZSBub3Qgc3VwcG9ydGVkAHBhcnNpbmcgYWJvcnRlZABwYXJzZXIgbm90IHN0YXJ0ZWQAYXR0cmlidXRlIG1hY3JvcyBub3QgaW1wbGVtZW50ZWQAYWNjb3VudGluZ0RpZmZUb2xlcmF0ZWQAcm9vdFBhcnNlci0+bV9hbGxvY190cmFja2VyLmJ5dGVzQWxsb2NhdGVkID49IGJ5dGVzQWxsb2NhdGVkAGZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQAY29uZGVuc2VkAC9zdmcvbWVkaXVtdmlvbGV0cmVkAC9zdmcvcGFsZXZpb2xldHJlZABJbXByb3BlciAlcyB2YWx1ZSAlcyAtIGlnbm9yZWQAJXMgdmFsdWUgJXMgPCAlZCAtIHRvbyBzbWFsbCAtIGlnbm9yZWQAJXMgdmFsdWUgJXMgPiAlZCAtIHRvbyBsYXJnZSAtIGlnbm9yZWQAL3N2Zy9pbmRpYW5yZWQAL3N2Zy9kYXJrcmVkAGEgc3VjY2Vzc2Z1bCBwcmlvciBjYWxsIHRvIGZ1bmN0aW9uIFhNTF9HZXRCdWZmZXIgaXMgcmVxdWlyZWQAdGFwZXJlZAAvc3ZnL29yYW5nZXJlZAByZXNlcnZlZCBwcmVmaXggKHhtbG5zKSBtdXN0IG5vdCBiZSBkZWNsYXJlZCBvciB1bmRlY2xhcmVkAC9zdmcvcmVkAHN0cmlwZWQAaWxsLWNvbmRpdGlvbmVkAHVuZGVmaW5lZABub3QgY29uc3RyYWluZWQAbGFiZWxhbGlnbmVkAHRleHQgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkAFhNTCBkZWNsYXJhdGlvbiBub3Qgd2VsbC1mb3JtZWQAdW5maWxsZWQAaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZAB0cmlhbmd1bGF0aW9uIGZhaWxlZABwYXJzaW5nIGZpbmlzaGVkAGRhc2hlZABsaW1pdCBvbiBpbnB1dCBhbXBsaWZpY2F0aW9uIGZhY3RvciAoZnJvbSBEVEQgYW5kIGVudGl0aWVzKSBicmVhY2hlZAB3ZWRnZWQAc2l6ZSA9PSBmcmVlZAByb3VuZGVkAHNwbGluZSBbJS4wM2YsICUuMDNmXSAtLSBbJS4wM2YsICUuMDNmXSBpcyBob3Jpem9udGFsOyB3aWxsIGJlIHRyaXZpYWxseSBib3VuZGVkAHNwbGluZSBbJS4wM2YsICUuMDNmXSAtLSBbJS4wM2YsICUuMDNmXSBpcyB2ZXJ0aWNhbDsgd2lsbCBiZSB0cml2aWFsbHkgYm91bmRlZABwYXJzZXIgbm90IHN1c3BlbmRlZABwYXJzZXIgc3VzcGVuZGVkAFdlZABSZWQAU3BhcnNlTWF0cml4X2FkZABub2RlX3NldF9hZGQAc3RyZGljdF9hZGQAZGQgIT0gcGFyZW50X2RkAEtQX0FkZABwYWQAeGxoZHhsb2FkAHhsaGR4dW5sb2FkAHJlYWQAYXJyb3doZWFkAGxoZWFkAHNhbWVoZWFkAGJveDNkACVzXyVkAF9zcGFuXyVkAF9ibG9ja18lZABfd2Vha18lZABfY2xvbmVfJWQALiVkACVZLSVtLSVkACVsZiwlZAAlcyBpbiBsaW5lICVkACUlJSVCb3VuZGluZ0JveDogJWQgJWQgJWQgJWQAIl9zdWJncmFwaF9jbnQiOiAlZAAiX2d2aWQiOiAlZAAiaGVhZCI6ICVkAGFneGJwdXRjAHZwc2MAY3AtPnNyYwB1Y2lyYwBvY2lyYwBpY2lyYwBlY2lyYwBhY2lyYwBVY2lyYwBPY2lyYwBJY2lyYwBFY2lyYwBBY2lyYwBsYWJlbGxvYwBleHBhdF9tYWxsb2MAZXhwYXRfcmVhbGxvYwBndl9yZWNhbGxvYwBzdGQ6OmJhZF9hbGxvYwBndl9hcmVuYV9hbGxvYwBiYWtlcnNjaG9jAHNlbWlTd2VldENob2MAbWMAU3BhcnNlTWF0cml4X2lzX3N5bW1ldHJpYwBBLT5pc19wYXR0ZXJuX3N5bW1ldHJpYwBwaWM6cGljAGl0YWxpYwBCb29rbWFuLUxpZ2h0SXRhbGljAFphcGZDaGFuY2VyeS1NZWRpdW1JdGFsaWMAQm9va21hbi1EZW1pSXRhbGljAFRpbWVzLUJvbGRJdGFsaWMAUGFsYXRpbm8tQm9sZEl0YWxpYwBOZXdDZW50dXJ5U2NobGJrLUJvbGRJdGFsaWMAVGltZXMtSXRhbGljAFBhbGF0aW5vLUl0YWxpYwBOZXdDZW50dXJ5U2NobGJrLUl0YWxpYwByYWRpYwAjZmNmY2ZjAHJvdXRlc3BsaW5lczogJWQgZWRnZXMsICV6dSBib3hlcyAlLjJmIHNlYwA6ICUuMmYgc2VjAGxpc3RkZWxyZWMAbGV2ZWwgZ3JhcGggcmVjAGxldmVsIGVkZ2UgcmVjAGxldmVsIG5vZGUgcmVjAERlYwBfbmVhdG9fY2MAYmMAdmlzaWJpbGl0eS5jAFNwYXJzZU1hdHJpeC5jAGh0bWxsZXguYwBpbmRleC5jAHNtYXJ0X2luaV94LmMAZ3ZyZW5kZXJfY29yZV9wb3YuYwBjdnQuYwBsYXlvdXQuYwB0ZXh0c3Bhbl9sdXQuYwBhZGp1c3QuYwBub2RlbGlzdC5jAHNob3J0ZXN0LmMAY2xvc2VzdC5jAGd2cmVuZGVyX2NvcmVfZG90LmMAY29uc3RyYWludC5jAGRvdGluaXQuYwBuZWF0b2luaXQuYwBwYXRjaHdvcmtpbml0LmMAb3NhZ2Vpbml0LmMAZW1pdC5jAGZsYXQuYwBhcnJvd3MuYwBtaW5jcm9zcy5jAHN0cmVzcy5jAHBvc3RfcHJvY2Vzcy5jAGNjb21wcy5jAG5zLmMAdXRpbHMuYwB4bGFiZWxzLmMAc2hhcGVzLmMAZG90c3BsaW5lcy5jAG5lYXRvc3BsaW5lcy5jAGNsdXN0ZXJlZGdlcy5jAGhlZGdlcy5jAGF0dHIuYwByZWZzdHIuYwBmYXN0Z3IuYwBjbHVzdGVyLmMAdGFwZXIuYwBndnJlbmRlci5jAHNwbGl0LnEuYwBjb21wLmMAZ3ZyZW5kZXJfY29yZV9tYXAuYwBoZWFwLmMAb3J0aG8uYwBndnJlbmRlcl9jb3JlX2pzb24uYwBwYXJ0aXRpb24uYwBwb3NpdGlvbi5jAGd2X2ZvcGVuLmMAdGV4dHNwYW4uYwBnZW9tLmMAcmFuZG9tLmMAcm91dGVzcGwuYwB4bWwuYwBNdWx0aWxldmVsLmMAc3ByaW5nX2VsZWN0cmljYWwuYwBndnJlbmRlcl9jb3JlX3RrLmMAcmFuay5jAHBhY2suYwBkdHN0cmhhc2guYwBncmFwaC5jAGd2cmVuZGVyX2NvcmVfc3ZnLmMAZ3ZyZW5kZXJfY29yZV9maWcuYwBzdHVmZi5jAG1hemUuYwBzcGFyc2Vfc29sdmUuYwByb3V0ZS5jAHdyaXRlLmMAY29seGxhdGUuYwB4bWxwYXJzZS5jAGd2bG9hZGltYWdlX2NvcmUuYwBndnVzZXJzaGFwZS5jAGNpcmNsZS5jAGh0bWx0YWJsZS5jAGVkZ2UuYwBndmxvYWRpbWFnZS5jAGJsb2NrdHJlZS5jAFF1YWRUcmVlLmMAbm9kZS5jAG5vZGVfaW5kdWNlLmMAZ3ZkZXZpY2UuYwBjb21wb3VuZC5jAHRyYXBlem9pZC5jAHNnZC5jAGNvbmMuYwByZWMuYwBkaWprc3RyYS5jAGFyZW5hLmMAZlBRLmMAY2xhc3MyLmMAJWxmLCVsZiwlbGYsJWxmJWMAJWxmLCVsZiwlbGYsJVteLF0lYwBcJWMAJGMAd2IAbnN1YgBzZXRoc2IAcmIAcHJvdGVjdF9yc3FiAGpvYgBjb3JlX2xvYWRpbWFnZV9wc2xpYgBGZWIAb2RiAGluaXRfc3BsaW5lc19iYgBiZXppZXJfYmIAcHJvdGVpbnN0YWIAcm5hc3RhYgAvc3ZnL29saXZlZHJhYgBcYgByd2EAL3N2Zy9hcXVhAGlvdGEASW90YQAvc3ZnL2RhcmttYWdlbnRhAC9zdmcvbWFnZW50YQBkZWx0YQBEZWx0YQB6ZXRhAHRoZXRhAFRoZXRhAGJldGEAWmV0YQBCZXRhAHByZXYgIT0gb2JqLT5kYXRhAG1ha2VHcmFwaERhdGEARXRhAG5pbWJ1c3NhbnNhAHBhcmEAa2FwcGEAS2FwcGEAL3N2Zy9zaWVubmEAVmVyZGFuYQBnYW1tYQBHYW1tYQBzaWdtYQBTaWdtYQBjb25zb2xhAG5hYmxhAC9zdmcvZnVjaHNpYQBHZW9yZ2lhAGFscGhhAEFscGhhAG9tZWdhAE9tZWdhAGFyZWEAbGFtYmRhAExhbWJkYQBoZWx2ZXRpY2EASGVsdmV0aWNhAG1pY2EAPjxhAGAAZ3ZfbGlzdF9jb3B5XwBfdGRyYXdfAF90bGRyYXdfAF9obGRyYXdfAF9sZHJhd18AX2hkcmF3XwBfZHJhd18AZ3ZfbGlzdF9zb3J0XwBndl9saXN0X2FwcGVuZF9zbG90XwBndl9saXN0X3ByZXBlbmRfc2xvdF8AZ3ZfbGlzdF9wb3BfZnJvbnRfAGd2X2xpc3Rfc2hyaW5rX3RvX2ZpdF8AYWd4c2V0XwBndl9saXN0X2dldF8AZG90X3NwbGluZXNfACVzXwBndl9saXN0X2NsZWFyXwBndl9saXN0X3BvcF9iYWNrXwBndl9saXN0X2RldGFjaF8AZ3ZfbGlzdF9yZW1vdmVfAGd2X2xpc3RfcmV2ZXJzZV8AZ3ZfbGlzdF9mcmVlXwBndl9saXN0X3RyeV9hcHBlbmRfAHBhZ2UlZCwlZF8AZ3ZfbGlzdF9zeW5jXwBfY2NfACBpZD0iYV8AXgBTdGFydGluZyBwaGFzZSAyIFtkb3RfbWluY3Jvc3NdAFN0YXJ0aW5nIHBoYXNlIDMgW2RvdF9wb3NpdGlvbl0Abl9lZGdlcyA9PSBncmFwaC0+c291cmNlc1tncmFwaC0+bl0AU3RhcnRpbmcgcGhhc2UgMSBbZG90X3JhbmtdAGpkW21hc2tbamNba11dXSA9PSBqY1trXQBqY1ttYXNrW2piW2tdXV0gPT0gamJba10AbmVlZGxlW2ldICE9IG5lZWRsZVtqXQBqYVttYXNrW2phW2pdXV0gPT0gamFbal0AcS0+cXRzW2lpXQAhcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnRha2VuW2ldAHIuYm91bmRhcnlbaV0gPD0gci5ib3VuZGFyeVtOVU1ESU1TICsgaV0AWyUuMDNmLCUuMDNmXQBbaW50ZXJuYWwgaGFyZC1jb2RlZF0AbnAtPmNlbGxzWzFdAG5wLT5jZWxsc1swXQB1cy0+bmFtZVswXQBjcC0+c3JjWzBdAFsuLl0AXFwAInBvaW50cyI6IFsAInN0b3BzIjogWwAJWwBaAGNvbXB1dGVTY2FsZVhZAHk8PVkAJWEgJWIgJWQgJUg6JU06JVMgJVkAUE9TSVgAbnogPD0gSU5UX01BWAB5ID49IElOVF9NSU4gJiYgeSA8PSBJTlRfTUFYAHggPj0gSU5UX01JTiAmJiB4IDw9IElOVF9NQVgAdyA+PSAwICYmIHcgPD0gSU5UX01BWABlX2NudCA8PSBJTlRfTUFYAHBhaXIucmlnaHQgPD0gSU5UX01BWABwYWlyLmxlZnQgPD0gSU5UX01BWAB0YXJnZXQgPD0gSU5UX01BWABuc2VncyA8PSBJTlRfTUFYAG5fZWRnZXMgPD0gSU5UX01BWABzdHAubnZlcnRpY2VzIDw9IElOVF9NQVgAb2JzW3BvbHlfaV0tPnBuIDw9IElOVF9NQVgAaW5wdXRfcm91dGUucG4gPD0gSU5UX01BWABncmFwaC0+biA8PSBJTlRfTUFYAGggPj0gMCAmJiBoIDw9IElOVF9NQVgAZV9jbnQgLSAxIDw9IElOVF9NQVgATElTVF9TSVpFKCZsaXN0KSAtIDEgPD0gSU5UX01BWABMSVNUX1NJWkUoJmxheWVySURzKSAtIDEgPD0gSU5UX01BWABzdHJsZW4oYXJncykgPD0gSU5UX01BWABMSVNUX1NJWkUoJm9iamwpIDw9IElOVF9NQVgATElTVF9TSVpFKCZjdHgtPlRyZWVfZWRnZSkgPD0gSU5UX01BWABub2RlX3NldF9zaXplKGctPm5faWQpIDw9IElOVF9NQVgAaSA8IElOVF9NQVgAcmVzdWx0IDw9IChpbnQpVUNIQVJfTUFYAHNzeiA8PSBVQ0hBUl9NQVgAY29sID49IDAgJiYgY29sIDw9IFVJTlQxNl9NQVgAeDw9WABXAFYAVQBcVABURVhUAFNUUkVTU19NQUpPUklaQVRJT05fUE9XRVJfRElTVABTVFJFU1NfTUFKT1JJWkFUSU9OX0dSQVBIX0RJU1QAU1RSRVNTX01BSk9SSVpBVElPTl9BVkdfRElTVABGQVNUAEZPTlQAYiA9PSBCX1JJR0hUAEhFSUdIVABCX0xFRlQAXyVsbHVfU1VTUEVDVABCVABUcmVidWNoZXQgTVMASU5WSVMAJUg6JU06JVMAVlIAVFIAQS0+Zm9ybWF0ID09IEItPmZvcm1hdCAmJiBBLT5mb3JtYXQgPT0gRk9STUFUX0NTUgBMUgBESVIASFIAQ0VOVEVSACUlVFJBSUxFUgBBLT50eXBlID09IE1BVFJJWF9UWVBFX1JFQUwgfHwgQS0+dHlwZSA9PSBNQVRSSVhfVFlQRV9JTlRFR0VSAENFTExCT1JERVIAQlIAKlIAUQBFWFAAQl9VUABTVVAAVE9QAE8AbWFwTgBcTgBCX0RPV04AVEhPUk4AJSVCRUdJTgBST1dTUEFOAENPTFNQQU4ATkFOAFBNAEJPVFRPTQBCTQBBTQAlSDolTQBcTAB0YWlsVVJMAGxhYmVsVVJMAGVkZ2VVUkwAaGVhZFVSTABIVE1MAHghPU5VTEwAcm9vdFBhcnNlci0+bV9wYXJlbnRQYXJzZXIgPT0gTlVMTABFRF90b192aXJ0KG9yaWcpID09IE5VTEwARURfdG9fdmlydChlKSA9PSBOVUxMAHByZWZpeCAhPSBOVUxMAGR0ZC0+c2NhZmZJbmRleCAhPSBOVUxMAHNtLT5MdyAhPSBOVUxMAGlucHV0ICE9IE5VTEwAbGlzdCAhPSBOVUxMAHJlZmVyZW50ICE9IE5VTEwAZGljdCAhPSBOVUxMAGRpY3QtPmJ1Y2tldHMgIT0gTlVMTABhdHRyICE9IE5VTEwAYWxsb2NhdG9yICE9IE5VTEwAcGFyc2VyICE9IE5VTEwAcm9vdFBhcnNlciAhPSBOVUxMAGxlYWRlciAhPSBOVUxMAGNtcCAhPSBOVUxMAGRhdGFwICE9IE5VTEwAaW50byAhPSBOVUxMAGl0ZW0gIT0gTlVMTABvcnRob2cgIT0gTlVMTABzZWxmICE9IE5VTEwAdmFsdWUgIT0gTlVMTABmaWxlbmFtZSAhPSBOVUxMAGpvYi0+b3V0cHV0X2ZpbGUgIT0gTlVMTABtb2RlICE9IE5VTEwAeGQgIT0gTlVMTABzbS0+THdkICE9IE5VTEwAam9iICE9IE5VTEwAc291cmNlLmRhdGEgIT0gTlVMTABiLmRhdGEgIT0gTlVMTABhLmRhdGEgIT0gTlVMTABhcmVuYSAhPSBOVUxMAGxpc3QgJiYgbGlzdFswXSAhPSBOVUxMAEFGICE9IE5VTEwAc20tPkQgIT0gTlVMTABFRF90b192aXJ0KG9yaWcpICE9IE5VTEwATENfQUxMAEJMAGJlc3Rjb3N0IDwgSFVHRV9WQUwATk9STUFMAFJBRElBTABBLT50eXBlID09IE1BVFJJWF9UWVBFX1JFQUwAVVJXIENoYW5jZXJ5IEwAVVJXIEJvb2ttYW4gTABDZW50dXJ5IFNjaG9vbGJvb2sgTABVUlcgR290aGljIEwAS0sASgBpIDwgTUFYX0kAUC0+ZW5kLnRoZXRhIDwgMiAqIE1fUEkAQVNDSUkAXEgARVRIAFdJRFRIAERPVEZPTlRQQVRIAEdERk9OVFBBVEgAbWtOQ29uc3RyYWludEcAXEcARVhQQVRfRU5USVRZX0RFQlVHAEVYUEFUX0VOVFJPUFlfREVCVUcARVhQQVRfQUNDT1VOVElOR19ERUJVRwBFWFBBVF9NQUxMT0NfREVCVUcAUk5HAFNQUklORwBDRUxMUEFERElORwBDRUxMU1BBQ0lORwBMQU5HAElNRwBceEYAJSVFT0YASU5GAFx4RkYAUklGRgBkZWx0YSA8PSAweEZGRkYAXHhFRgBceERGAFx4Q0YAXHhCRgBceEFGAFx4OUYAXHg4RgBceDdGAFx4MUYAXHhFAFxFAFBPSU5ULVNJWkUAVFJVRQBDTE9TRQBGQUxTRQBrZXkgIT0gVE9NQlNUT05FAHIgIT0gVE9NQlNUT05FAE5PTkUAR1JBRElFTlRBTkdMRQBUUklBTkdMRQBNSURETEUASU5WSVNJQkxFAFRBQkxFAEFHVFlQRShvYmopID09IEFHSU5FREdFIHx8IEFHVFlQRShvYmopID09IEFHT1VURURHRQBceEZFAFx4RUUAXHhERQBCX05PREUAXHhDRQBceEJFAFx4QUUAXHg5RQBceDhFAFx4MUUAVEQAQS0+Zm9ybWF0ID09IEZPUk1BVF9DT09SRABuICYmIGkgPj0gMCAmJiBpIDwgTk9ERUNBUkQAJSVFTkQASFlCUklEAFNPTElEAFx4RkQAXHhFRABET1RURUQAREFTSEVEAFJPVU5ERUQAXHhERABceENEAFx4QkQAXHhBRABceDlEAFx4OEQAXHgxRABceEMAZGVsZXRlVlBTQwBceEZDAFx4RUMAXHhEQwBceENDAFx4QkMAXHhBQwBceDlDAFx4OEMAXHgxQwBceEIAU1VCAFx4RkIAXHhFQgBceERCAFx4Q0IAXHhCQgBceEFCAFx4OUIAXHg4QgBceDFCAEEgJiYgQgBceEZBAFx4RUEAXHhEQQBceENBAFx4QkEAXHhBQQBceDlBAFx4OEEAXHgxQQBAAD8APCVzPgA8bmlsPgA8L3RzcGFuPjwvdGV4dFBhdGg+AAogICAgPCU5LjNmLCAlOS4zZiwgJTkuM2Y+AD4KPHRpdGxlPgA8Rk9OVD4APEJSPgA8SFRNTD4APC9IVE1MPgA8SU1HPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBiZWZvcmUgPFRBQkxFPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBhZnRlciA8L1RBQkxFPgA8VEQ+AC0+ACI+AAlba2V5PQA8PQA8ACYjeCV4OwAmcXVvdDsAJmx0OwAmZ3Q7ACZhbXA7ACMlZDsAJiMzOTsAJiM0NTsAJiM5MzsAJiMxMzsAJiMxNjA7ACYjMTA7ADtzdG9wLW9wYWNpdHk6ACUlQm91bmRpbmdCb3g6AGNhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzIGFuZCBzZXR0aW5nIHVwIHN0cmVzcyB0ZXJtczoAPHN0b3Agb2Zmc2V0PSIlLjAzZiIgc3R5bGU9InN0b3AtY29sb3I6ADxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6ADxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6AHNvbHZpbmcgbW9kZWw6AC9cOgBncmV5OQBncmF5OQBceEY5AFx4RTkAXHhEOQBceEM5AFx4QjkAXHhBOQBncmV5OTkAZ3JheTk5AFx4OTkAZ3JleTg5AGdyYXk4OQBceDg5ADAxMjM0NTY3ODkAZ3JleTc5AGdyYXk3OQBncmV5NjkAZ3JheTY5AGdyZXk1OQBncmF5NTkAZ3JleTQ5AGdyYXk0OQBncmV5MzkAZ3JheTM5AGdyZXkyOQBncmF5MjkAZ3JleTE5AGdyYXkxOQBceDE5AC9yZGd5OS85AC9idXB1OS85AC9yZHB1OS85AC9wdWJ1OS85AC95bGduYnU5LzkAL2duYnU5LzkAL3JkeWxidTkvOQAvcmRidTkvOQAvZ3JleXM5LzkAL2dyZWVuczkvOQAvYmx1ZXM5LzkAL3B1cnBsZXM5LzkAL29yYW5nZXM5LzkAL3JlZHM5LzkAL3B1b3I5LzkAL3lsb3JicjkvOQAvcHVidWduOS85AC9idWduOS85AC9wcmduOS85AC9yZHlsZ245LzkAL3lsZ245LzkAL3NwZWN0cmFsOS85AC9waXlnOS85AC9icmJnOS85AC9wdXJkOS85AC95bG9ycmQ5LzkAL29ycmQ5LzkAL3BhaXJlZDkvOQAvc2V0MzkvOQAvc2V0MTkvOQAvcGFzdGVsMTkvOQAvcGFpcmVkMTIvOQAvc2V0MzEyLzkAL3JkZ3kxMS85AC9yZHlsYnUxMS85AC9yZGJ1MTEvOQAvcHVvcjExLzkAL3ByZ24xMS85AC9yZHlsZ24xMS85AC9zcGVjdHJhbDExLzkAL3BpeWcxMS85AC9icmJnMTEvOQAvcGFpcmVkMTEvOQAvc2V0MzExLzkAL3JkZ3kxMC85AC9yZHlsYnUxMC85AC9yZGJ1MTAvOQAvcHVvcjEwLzkAL3ByZ24xMC85AC9yZHlsZ24xMC85AC9zcGVjdHJhbDEwLzkAL3BpeWcxMC85AC9icmJnMTAvOQAvcGFpcmVkMTAvOQAvc2V0MzEwLzkAZ3JleTgAZ3JheTgAXHg4AHV0ZjgAI2Y4ZjhmOAAjZThlOGU4AFx4RjgAR0lGOABceEU4AFx4RDgAXHhDOABceEI4AFx4QTgAZ3JleTk4AGdyYXk5OABceDk4AGdyZXk4OABncmF5ODgAXHg4OABncmV5NzgAZ3JheTc4AGdyZXk2OABncmF5NjgAZ3JleTU4AGdyYXk1OABncmV5NDgAZ3JheTQ4AGdyZXkzOABncmF5MzgAZ3JleTI4AGdyYXkyOABncmV5MTgAZ3JheTE4AFx4MTgAL3JkZ3k5LzgAL2J1cHU5LzgAL3JkcHU5LzgAL3B1YnU5LzgAL3lsZ25idTkvOAAvZ25idTkvOAAvcmR5bGJ1OS84AC9yZGJ1OS84AC9ncmV5czkvOAAvZ3JlZW5zOS84AC9ibHVlczkvOAAvcHVycGxlczkvOAAvb3JhbmdlczkvOAAvcmVkczkvOAAvcHVvcjkvOAAveWxvcmJyOS84AC9wdWJ1Z245LzgAL2J1Z245LzgAL3ByZ245LzgAL3JkeWxnbjkvOAAveWxnbjkvOAAvc3BlY3RyYWw5LzgAL3BpeWc5LzgAL2JyYmc5LzgAL3B1cmQ5LzgAL3lsb3JyZDkvOAAvb3JyZDkvOAAvcGFpcmVkOS84AC9zZXQzOS84AC9zZXQxOS84AC9wYXN0ZWwxOS84AC9yZGd5OC84AC9idXB1OC84AC9yZHB1OC84AC9wdWJ1OC84AC95bGduYnU4LzgAL2duYnU4LzgAL3JkeWxidTgvOAAvcmRidTgvOAAvYWNjZW50OC84AC9ncmV5czgvOAAvZ3JlZW5zOC84AC9ibHVlczgvOAAvcHVycGxlczgvOAAvb3JhbmdlczgvOAAvcmVkczgvOAAvcHVvcjgvOAAveWxvcmJyOC84AC9wdWJ1Z244LzgAL2J1Z244LzgAL3ByZ244LzgAL3JkeWxnbjgvOAAveWxnbjgvOAAvc3BlY3RyYWw4LzgAL3BpeWc4LzgAL2JyYmc4LzgAL3B1cmQ4LzgAL3lsb3JyZDgvOAAvb3JyZDgvOAAvcGFpcmVkOC84AC9zZXQzOC84AC9zZXQyOC84AC9wYXN0ZWwyOC84AC9kYXJrMjgvOAAvc2V0MTgvOAAvcGFzdGVsMTgvOAAvcGFpcmVkMTIvOAAvc2V0MzEyLzgAL3JkZ3kxMS84AC9yZHlsYnUxMS84AC9yZGJ1MTEvOAAvcHVvcjExLzgAL3ByZ24xMS84AC9yZHlsZ24xMS84AC9zcGVjdHJhbDExLzgAL3BpeWcxMS84AC9icmJnMTEvOAAvcGFpcmVkMTEvOAAvc2V0MzExLzgAL3JkZ3kxMC84AC9yZHlsYnUxMC84AC9yZGJ1MTAvOAAvcHVvcjEwLzgAL3ByZ24xMC84AC9yZHlsZ24xMC84AC9zcGVjdHJhbDEwLzgAL3BpeWcxMC84AC9icmJnMTAvOAAvcGFpcmVkMTAvOAAvc2V0MzEwLzgAdXRmLTgAQy5VVEYtOABncmV5NwBncmF5NwBceDcAXHhGNwBceEU3AFx4RDcAXHhDNwBceEI3AFx4QTcAZ3JleTk3AGdyYXk5NwBceDk3AGdyZXk4NwBncmF5ODcAXHg4NwBncmV5NzcAZ3JheTc3AGdyZXk2NwBncmF5NjcAZ3JleTU3AGdyYXk1NwBncmV5NDcAZ3JheTQ3AGdyZXkzNwBncmF5MzcAZ3JleTI3AGdyYXkyNwBncmV5MTcAZ3JheTE3AFx4MTcAL3JkZ3k5LzcAL2J1cHU5LzcAL3JkcHU5LzcAL3B1YnU5LzcAL3lsZ25idTkvNwAvZ25idTkvNwAvcmR5bGJ1OS83AC9yZGJ1OS83AC9ncmV5czkvNwAvZ3JlZW5zOS83AC9ibHVlczkvNwAvcHVycGxlczkvNwAvb3JhbmdlczkvNwAvcmVkczkvNwAvcHVvcjkvNwAveWxvcmJyOS83AC9wdWJ1Z245LzcAL2J1Z245LzcAL3ByZ245LzcAL3JkeWxnbjkvNwAveWxnbjkvNwAvc3BlY3RyYWw5LzcAL3BpeWc5LzcAL2JyYmc5LzcAL3B1cmQ5LzcAL3lsb3JyZDkvNwAvb3JyZDkvNwAvcGFpcmVkOS83AC9zZXQzOS83AC9zZXQxOS83AC9wYXN0ZWwxOS83AC9yZGd5OC83AC9idXB1OC83AC9yZHB1OC83AC9wdWJ1OC83AC95bGduYnU4LzcAL2duYnU4LzcAL3JkeWxidTgvNwAvcmRidTgvNwAvYWNjZW50OC83AC9ncmV5czgvNwAvZ3JlZW5zOC83AC9ibHVlczgvNwAvcHVycGxlczgvNwAvb3JhbmdlczgvNwAvcmVkczgvNwAvcHVvcjgvNwAveWxvcmJyOC83AC9wdWJ1Z244LzcAL2J1Z244LzcAL3ByZ244LzcAL3JkeWxnbjgvNwAveWxnbjgvNwAvc3BlY3RyYWw4LzcAL3BpeWc4LzcAL2JyYmc4LzcAL3B1cmQ4LzcAL3lsb3JyZDgvNwAvb3JyZDgvNwAvcGFpcmVkOC83AC9zZXQzOC83AC9zZXQyOC83AC9wYXN0ZWwyOC83AC9kYXJrMjgvNwAvc2V0MTgvNwAvcGFzdGVsMTgvNwAvcmRneTcvNwAvYnVwdTcvNwAvcmRwdTcvNwAvcHVidTcvNwAveWxnbmJ1Ny83AC9nbmJ1Ny83AC9yZHlsYnU3LzcAL3JkYnU3LzcAL2FjY2VudDcvNwAvZ3JleXM3LzcAL2dyZWVuczcvNwAvYmx1ZXM3LzcAL3B1cnBsZXM3LzcAL29yYW5nZXM3LzcAL3JlZHM3LzcAL3B1b3I3LzcAL3lsb3JicjcvNwAvcHVidWduNy83AC9idWduNy83AC9wcmduNy83AC9yZHlsZ243LzcAL3lsZ243LzcAL3NwZWN0cmFsNy83AC9waXlnNy83AC9icmJnNy83AC9wdXJkNy83AC95bG9ycmQ3LzcAL29ycmQ3LzcAL3BhaXJlZDcvNwAvc2V0MzcvNwAvc2V0MjcvNwAvcGFzdGVsMjcvNwAvZGFyazI3LzcAL3NldDE3LzcAL3Bhc3RlbDE3LzcAL3BhaXJlZDEyLzcAL3NldDMxMi83AC9yZGd5MTEvNwAvcmR5bGJ1MTEvNwAvcmRidTExLzcAL3B1b3IxMS83AC9wcmduMTEvNwAvcmR5bGduMTEvNwAvc3BlY3RyYWwxMS83AC9waXlnMTEvNwAvYnJiZzExLzcAL3BhaXJlZDExLzcAL3NldDMxMS83AC9yZGd5MTAvNwAvcmR5bGJ1MTAvNwAvcmRidTEwLzcAL3B1b3IxMC83AC9wcmduMTAvNwAvcmR5bGduMTAvNwAvc3BlY3RyYWwxMC83AC9waXlnMTAvNwAvYnJiZzEwLzcAL3BhaXJlZDEwLzcAL3NldDMxMC83ADEuNwBncmV5NgBncmF5NgBceDYAXHhGNgBceEU2AFx4RDYAXHhDNgBceEI2AFx4QTYAZ3JleTk2AGdyYXk5NgBceDk2AGdyZXk4NgBncmF5ODYAXHg4NgBncmV5NzYAZ3JheTc2AGdyZXk2NgBncmF5NjYAZ3JleTU2AGdyYXk1NgBncmV5NDYAZ3JheTQ2AGdyZXkzNgBncmF5MzYAZ3JleTI2AGdyYXkyNgBncmV5MTYAZ3JheTE2AFx4MTYAL3JkZ3k5LzYAL2J1cHU5LzYAL3JkcHU5LzYAL3B1YnU5LzYAL3lsZ25idTkvNgAvZ25idTkvNgAvcmR5bGJ1OS82AC9yZGJ1OS82AC9ncmV5czkvNgAvZ3JlZW5zOS82AC9ibHVlczkvNgAvcHVycGxlczkvNgAvb3JhbmdlczkvNgAvcmVkczkvNgAvcHVvcjkvNgAveWxvcmJyOS82AC9wdWJ1Z245LzYAL2J1Z245LzYAL3ByZ245LzYAL3JkeWxnbjkvNgAveWxnbjkvNgAvc3BlY3RyYWw5LzYAL3BpeWc5LzYAL2JyYmc5LzYAL3B1cmQ5LzYAL3lsb3JyZDkvNgAvb3JyZDkvNgAvcGFpcmVkOS82AC9zZXQzOS82AC9zZXQxOS82AC9wYXN0ZWwxOS82AC9yZGd5OC82AC9idXB1OC82AC9yZHB1OC82AC9wdWJ1OC82AC95bGduYnU4LzYAL2duYnU4LzYAL3JkeWxidTgvNgAvcmRidTgvNgAvYWNjZW50OC82AC9ncmV5czgvNgAvZ3JlZW5zOC82AC9ibHVlczgvNgAvcHVycGxlczgvNgAvb3JhbmdlczgvNgAvcmVkczgvNgAvcHVvcjgvNgAveWxvcmJyOC82AC9wdWJ1Z244LzYAL2J1Z244LzYAL3ByZ244LzYAL3JkeWxnbjgvNgAveWxnbjgvNgAvc3BlY3RyYWw4LzYAL3BpeWc4LzYAL2JyYmc4LzYAL3B1cmQ4LzYAL3lsb3JyZDgvNgAvb3JyZDgvNgAvcGFpcmVkOC82AC9zZXQzOC82AC9zZXQyOC82AC9wYXN0ZWwyOC82AC9kYXJrMjgvNgAvc2V0MTgvNgAvcGFzdGVsMTgvNgAvcmRneTcvNgAvYnVwdTcvNgAvcmRwdTcvNgAvcHVidTcvNgAveWxnbmJ1Ny82AC9nbmJ1Ny82AC9yZHlsYnU3LzYAL3JkYnU3LzYAL2FjY2VudDcvNgAvZ3JleXM3LzYAL2dyZWVuczcvNgAvYmx1ZXM3LzYAL3B1cnBsZXM3LzYAL29yYW5nZXM3LzYAL3JlZHM3LzYAL3B1b3I3LzYAL3lsb3JicjcvNgAvcHVidWduNy82AC9idWduNy82AC9wcmduNy82AC9yZHlsZ243LzYAL3lsZ243LzYAL3NwZWN0cmFsNy82AC9waXlnNy82AC9icmJnNy82AC9wdXJkNy82AC95bG9ycmQ3LzYAL29ycmQ3LzYAL3BhaXJlZDcvNgAvc2V0MzcvNgAvc2V0MjcvNgAvcGFzdGVsMjcvNgAvZGFyazI3LzYAL3NldDE3LzYAL3Bhc3RlbDE3LzYAL3JkZ3k2LzYAL2J1cHU2LzYAL3JkcHU2LzYAL3B1YnU2LzYAL3lsZ25idTYvNgAvZ25idTYvNgAvcmR5bGJ1Ni82AC9yZGJ1Ni82AC9hY2NlbnQ2LzYAL2dyZXlzNi82AC9ncmVlbnM2LzYAL2JsdWVzNi82AC9wdXJwbGVzNi82AC9vcmFuZ2VzNi82AC9yZWRzNi82AC9wdW9yNi82AC95bG9yYnI2LzYAL3B1YnVnbjYvNgAvYnVnbjYvNgAvcHJnbjYvNgAvcmR5bGduNi82AC95bGduNi82AC9zcGVjdHJhbDYvNgAvcGl5ZzYvNgAvYnJiZzYvNgAvcHVyZDYvNgAveWxvcnJkNi82AC9vcnJkNi82AC9wYWlyZWQ2LzYAL3NldDM2LzYAL3NldDI2LzYAL3Bhc3RlbDI2LzYAL2RhcmsyNi82AC9zZXQxNi82AC9wYXN0ZWwxNi82AC9wYWlyZWQxMi82AC9zZXQzMTIvNgAvcmRneTExLzYAL3JkeWxidTExLzYAL3JkYnUxMS82AC9wdW9yMTEvNgAvcHJnbjExLzYAL3JkeWxnbjExLzYAL3NwZWN0cmFsMTEvNgAvcGl5ZzExLzYAL2JyYmcxMS82AC9wYWlyZWQxMS82AC9zZXQzMTEvNgAvcmRneTEwLzYAL3JkeWxidTEwLzYAL3JkYnUxMC82AC9wdW9yMTAvNgAvcHJnbjEwLzYAL3JkeWxnbjEwLzYAL3NwZWN0cmFsMTAvNgAvcGl5ZzEwLzYAL2JyYmcxMC82AC9wYWlyZWQxMC82AC9zZXQzMTAvNgBncmV5NQBncmF5NQBceDUAYmlnNQBceEY1AFx4RTUAXHhENQBceEM1AFx4QjUAXHhBNQBncmV5OTUAZ3JheTk1AFx4OTUAZ3JleTg1AGdyYXk4NQBceDg1AGdyZXk3NQBncmF5NzUAZ3JleTY1AGdyYXk2NQBncmV5NTUAZ3JheTU1AGdyZXk0NQBncmF5NDUAZ3JleTM1AGdyYXkzNQBncmV5MjUAZ3JheTI1ADIwMjUxMjEzLjE5MjUAZ3JleTE1AGdyYXkxNQBceDE1AGdyYXkwNQAvcmRneTkvNQAvYnVwdTkvNQAvcmRwdTkvNQAvcHVidTkvNQAveWxnbmJ1OS81AC9nbmJ1OS81AC9yZHlsYnU5LzUAL3JkYnU5LzUAL2dyZXlzOS81AC9ncmVlbnM5LzUAL2JsdWVzOS81AC9wdXJwbGVzOS81AC9vcmFuZ2VzOS81AC9yZWRzOS81AC9wdW9yOS81AC95bG9yYnI5LzUAL3B1YnVnbjkvNQAvYnVnbjkvNQAvcHJnbjkvNQAvcmR5bGduOS81AC95bGduOS81AC9zcGVjdHJhbDkvNQAvcGl5ZzkvNQAvYnJiZzkvNQAvcHVyZDkvNQAveWxvcnJkOS81AC9vcnJkOS81AC9wYWlyZWQ5LzUAL3NldDM5LzUAL3NldDE5LzUAL3Bhc3RlbDE5LzUAL3JkZ3k4LzUAL2J1cHU4LzUAL3JkcHU4LzUAL3B1YnU4LzUAL3lsZ25idTgvNQAvZ25idTgvNQAvcmR5bGJ1OC81AC9yZGJ1OC81AC9hY2NlbnQ4LzUAL2dyZXlzOC81AC9ncmVlbnM4LzUAL2JsdWVzOC81AC9wdXJwbGVzOC81AC9vcmFuZ2VzOC81AC9yZWRzOC81AC9wdW9yOC81AC95bG9yYnI4LzUAL3B1YnVnbjgvNQAvYnVnbjgvNQAvcHJnbjgvNQAvcmR5bGduOC81AC95bGduOC81AC9zcGVjdHJhbDgvNQAvcGl5ZzgvNQAvYnJiZzgvNQAvcHVyZDgvNQAveWxvcnJkOC81AC9vcnJkOC81AC9wYWlyZWQ4LzUAL3NldDM4LzUAL3NldDI4LzUAL3Bhc3RlbDI4LzUAL2RhcmsyOC81AC9zZXQxOC81AC9wYXN0ZWwxOC81AC9yZGd5Ny81AC9idXB1Ny81AC9yZHB1Ny81AC9wdWJ1Ny81AC95bGduYnU3LzUAL2duYnU3LzUAL3JkeWxidTcvNQAvcmRidTcvNQAvYWNjZW50Ny81AC9ncmV5czcvNQAvZ3JlZW5zNy81AC9ibHVlczcvNQAvcHVycGxlczcvNQAvb3JhbmdlczcvNQAvcmVkczcvNQAvcHVvcjcvNQAveWxvcmJyNy81AC9wdWJ1Z243LzUAL2J1Z243LzUAL3ByZ243LzUAL3JkeWxnbjcvNQAveWxnbjcvNQAvc3BlY3RyYWw3LzUAL3BpeWc3LzUAL2JyYmc3LzUAL3B1cmQ3LzUAL3lsb3JyZDcvNQAvb3JyZDcvNQAvcGFpcmVkNy81AC9zZXQzNy81AC9zZXQyNy81AC9wYXN0ZWwyNy81AC9kYXJrMjcvNQAvc2V0MTcvNQAvcGFzdGVsMTcvNQAvcmRneTYvNQAvYnVwdTYvNQAvcmRwdTYvNQAvcHVidTYvNQAveWxnbmJ1Ni81AC9nbmJ1Ni81AC9yZHlsYnU2LzUAL3JkYnU2LzUAL2FjY2VudDYvNQAvZ3JleXM2LzUAL2dyZWVuczYvNQAvYmx1ZXM2LzUAL3B1cnBsZXM2LzUAL29yYW5nZXM2LzUAL3JlZHM2LzUAL3B1b3I2LzUAL3lsb3JicjYvNQAvcHVidWduNi81AC9idWduNi81AC9wcmduNi81AC9yZHlsZ242LzUAL3lsZ242LzUAL3NwZWN0cmFsNi81AC9waXlnNi81AC9icmJnNi81AC9wdXJkNi81AC95bG9ycmQ2LzUAL29ycmQ2LzUAL3BhaXJlZDYvNQAvc2V0MzYvNQAvc2V0MjYvNQAvcGFzdGVsMjYvNQAvZGFyazI2LzUAL3NldDE2LzUAL3Bhc3RlbDE2LzUAL3JkZ3k1LzUAL2J1cHU1LzUAL3JkcHU1LzUAL3B1YnU1LzUAL3lsZ25idTUvNQAvZ25idTUvNQAvcmR5bGJ1NS81AC9yZGJ1NS81AC9hY2NlbnQ1LzUAL2dyZXlzNS81AC9ncmVlbnM1LzUAL2JsdWVzNS81AC9wdXJwbGVzNS81AC9vcmFuZ2VzNS81AC9yZWRzNS81AC9wdW9yNS81AC95bG9yYnI1LzUAL3B1YnVnbjUvNQAvYnVnbjUvNQAvcHJnbjUvNQAvcmR5bGduNS81AC95bGduNS81AC9zcGVjdHJhbDUvNQAvcGl5ZzUvNQAvYnJiZzUvNQAvcHVyZDUvNQAveWxvcnJkNS81AC9vcnJkNS81AC9wYWlyZWQ1LzUAL3NldDM1LzUAL3NldDI1LzUAL3Bhc3RlbDI1LzUAL2RhcmsyNS81AC9zZXQxNS81AC9wYXN0ZWwxNS81AC9wYWlyZWQxMi81AC9zZXQzMTIvNQAvcmRneTExLzUAL3JkeWxidTExLzUAL3JkYnUxMS81AC9wdW9yMTEvNQAvcHJnbjExLzUAL3JkeWxnbjExLzUAL3NwZWN0cmFsMTEvNQAvcGl5ZzExLzUAL2JyYmcxMS81AC9wYWlyZWQxMS81AC9zZXQzMTEvNQAvcmRneTEwLzUAL3JkeWxidTEwLzUAL3JkYnUxMC81AC9wdW9yMTAvNQAvcHJnbjEwLzUAL3JkeWxnbjEwLzUAL3NwZWN0cmFsMTAvNQAvcGl5ZzEwLzUAL2JyYmcxMC81AC9wYWlyZWQxMC81AC9zZXQzMTAvNQBiaWctNQBCSUctNQAgLWRhc2ggNQBpdm9yeTQAZ3JleTQAZGFya3NsYXRlZ3JheTQAXHg0AHNub3c0AGxpZ2h0eWVsbG93NABob25leWRldzQAd2hlYXQ0AHRvbWF0bzQAcm9zeWJyb3duNABtYXJvb240AGxpZ2h0c2FsbW9uNABsZW1vbmNoaWZmb240AHNwcmluZ2dyZWVuNABkYXJrb2xpdmVncmVlbjQAcGFsZWdyZWVuNABkYXJrc2VhZ3JlZW40AGxpZ2h0Y3lhbjQAdGFuNABwbHVtNABzZWFzaGVsbDQAY29yYWw0AGhvdHBpbms0AGxpZ2h0cGluazQAZGVlcHBpbms0AGNvcm5zaWxrNABmaXJlYnJpY2s0AGtoYWtpNABsYXZlbmRlcmJsdXNoNABwZWFjaHB1ZmY0AGJpc3F1ZTQAbGlnaHRza3libHVlNABkZWVwc2t5Ymx1ZTQAbGlnaHRibHVlNABjYWRldGJsdWU0AGRvZGdlcmJsdWU0AGxpZ2h0c3RlZWxibHVlNAByb3lhbGJsdWU0AHNsYXRlYmx1ZTQAbmF2YWpvd2hpdGU0AGFudGlxdWV3aGl0ZTQAY2hvY29sYXRlNABjaGFydHJldXNlNABtaXN0eXJvc2U0AHBhbGV0dXJxdW9pc2U0AGF6dXJlNAB0aGVyZTQAYXF1YW1hcmluZTQAdGhpc3RsZTQAbWVkaXVtcHVycGxlNABkYXJrb3JhbmdlNABsaWdodGdvbGRlbnJvZDQAZGFya2dvbGRlbnJvZDQAYnVybHl3b29kNABnb2xkNABtZWRpdW1vcmNoaWQ0AGRhcmtvcmNoaWQ0AHBhbGV2aW9sZXRyZWQ0AGluZGlhbnJlZDQAb3JhbmdlcmVkNABvbGl2ZWRyYWI0AG1hZ2VudGE0AHNpZW5uYTQAXHhGNABceEU0AFx4RDQAXHhDNABceEI0AFx4QTQAZ3JleTk0AGdyYXk5NABceDk0AGdyZXk4NABncmF5ODQAXHg4NABncmV5NzQAZ3JheTc0AGdyZXk2NABncmF5NjQAZ3JleTU0AGdyYXk1NABncmV5NDQAZ3JheTQ0AGdyZXkzNABncmF5MzQAZnJhYzM0AGdyZXkyNABncmF5MjQAZ3JleTE0AGdyYXkxNABceDE0AGZyYWMxNAAvcmRneTkvNAAvYnVwdTkvNAAvcmRwdTkvNAAvcHVidTkvNAAveWxnbmJ1OS80AC9nbmJ1OS80AC9yZHlsYnU5LzQAL3JkYnU5LzQAL2dyZXlzOS80AC9ncmVlbnM5LzQAL2JsdWVzOS80AC9wdXJwbGVzOS80AC9vcmFuZ2VzOS80AC9yZWRzOS80AC9wdW9yOS80AC95bG9yYnI5LzQAL3B1YnVnbjkvNAAvYnVnbjkvNAAvcHJnbjkvNAAvcmR5bGduOS80AC95bGduOS80AC9zcGVjdHJhbDkvNAAvcGl5ZzkvNAAvYnJiZzkvNAAvcHVyZDkvNAAveWxvcnJkOS80AC9vcnJkOS80AC9wYWlyZWQ5LzQAL3NldDM5LzQAL3NldDE5LzQAL3Bhc3RlbDE5LzQAL3JkZ3k4LzQAL2J1cHU4LzQAL3JkcHU4LzQAL3B1YnU4LzQAL3lsZ25idTgvNAAvZ25idTgvNAAvcmR5bGJ1OC80AC9yZGJ1OC80AC9hY2NlbnQ4LzQAL2dyZXlzOC80AC9ncmVlbnM4LzQAL2JsdWVzOC80AC9wdXJwbGVzOC80AC9vcmFuZ2VzOC80AC9yZWRzOC80AC9wdW9yOC80AC95bG9yYnI4LzQAL3B1YnVnbjgvNAAvYnVnbjgvNAAvcHJnbjgvNAAvcmR5bGduOC80AC95bGduOC80AC9zcGVjdHJhbDgvNAAvcGl5ZzgvNAAvYnJiZzgvNAAvcHVyZDgvNAAveWxvcnJkOC80AC9vcnJkOC80AC9wYWlyZWQ4LzQAL3NldDM4LzQAL3NldDI4LzQAL3Bhc3RlbDI4LzQAL2RhcmsyOC80AC9zZXQxOC80AC9wYXN0ZWwxOC80AC9yZGd5Ny80AC9idXB1Ny80AC9yZHB1Ny80AC9wdWJ1Ny80AC95bGduYnU3LzQAL2duYnU3LzQAL3JkeWxidTcvNAAvcmRidTcvNAAvYWNjZW50Ny80AC9ncmV5czcvNAAvZ3JlZW5zNy80AC9ibHVlczcvNAAvcHVycGxlczcvNAAvb3JhbmdlczcvNAAvcmVkczcvNAAvcHVvcjcvNAAveWxvcmJyNy80AC9wdWJ1Z243LzQAL2J1Z243LzQAL3ByZ243LzQAL3JkeWxnbjcvNAAveWxnbjcvNAAvc3BlY3RyYWw3LzQAL3BpeWc3LzQAL2JyYmc3LzQAL3B1cmQ3LzQAL3lsb3JyZDcvNAAvb3JyZDcvNAAvcGFpcmVkNy80AC9zZXQzNy80AC9zZXQyNy80AC9wYXN0ZWwyNy80AC9kYXJrMjcvNAAvc2V0MTcvNAAvcGFzdGVsMTcvNAAvcmRneTYvNAAvYnVwdTYvNAAvcmRwdTYvNAAvcHVidTYvNAAveWxnbmJ1Ni80AC9nbmJ1Ni80AC9yZHlsYnU2LzQAL3JkYnU2LzQAL2FjY2VudDYvNAAvZ3JleXM2LzQAL2dyZWVuczYvNAAvYmx1ZXM2LzQAL3B1cnBsZXM2LzQAL29yYW5nZXM2LzQAL3JlZHM2LzQAL3B1b3I2LzQAL3lsb3JicjYvNAAvcHVidWduNi80AC9idWduNi80AC9wcmduNi80AC9yZHlsZ242LzQAL3lsZ242LzQAL3NwZWN0cmFsNi80AC9waXlnNi80AC9icmJnNi80AC9wdXJkNi80AC95bG9ycmQ2LzQAL29ycmQ2LzQAL3BhaXJlZDYvNAAvc2V0MzYvNAAvc2V0MjYvNAAvcGFzdGVsMjYvNAAvZGFyazI2LzQAL3NldDE2LzQAL3Bhc3RlbDE2LzQAL3JkZ3k1LzQAL2J1cHU1LzQAL3JkcHU1LzQAL3B1YnU1LzQAL3lsZ25idTUvNAAvZ25idTUvNAAvcmR5bGJ1NS80AC9yZGJ1NS80AC9hY2NlbnQ1LzQAL2dyZXlzNS80AC9ncmVlbnM1LzQAL2JsdWVzNS80AC9wdXJwbGVzNS80AC9vcmFuZ2VzNS80AC9yZWRzNS80AC9wdW9yNS80AC95bG9yYnI1LzQAL3B1YnVnbjUvNAAvYnVnbjUvNAAvcHJnbjUvNAAvcmR5bGduNS80AC95bGduNS80AC9zcGVjdHJhbDUvNAAvcGl5ZzUvNAAvYnJiZzUvNAAvcHVyZDUvNAAveWxvcnJkNS80AC9vcnJkNS80AC9wYWlyZWQ1LzQAL3NldDM1LzQAL3NldDI1LzQAL3Bhc3RlbDI1LzQAL2RhcmsyNS80AC9zZXQxNS80AC9wYXN0ZWwxNS80AC9yZGd5NC80AC9idXB1NC80AC9yZHB1NC80AC9wdWJ1NC80AC95bGduYnU0LzQAL2duYnU0LzQAL3JkeWxidTQvNAAvcmRidTQvNAAvYWNjZW50NC80AC9ncmV5czQvNAAvZ3JlZW5zNC80AC9ibHVlczQvNAAvcHVycGxlczQvNAAvb3JhbmdlczQvNAAvcmVkczQvNAAvcHVvcjQvNAAveWxvcmJyNC80AC9wdWJ1Z240LzQAL2J1Z240LzQAL3ByZ240LzQAL3JkeWxnbjQvNAAveWxnbjQvNAAvc3BlY3RyYWw0LzQAL3BpeWc0LzQAL2JyYmc0LzQAL3B1cmQ0LzQAL3lsb3JyZDQvNAAvb3JyZDQvNAAvcGFpcmVkNC80AC9zZXQzNC80AC9zZXQyNC80AC9wYXN0ZWwyNC80AC9kYXJrMjQvNAAvc2V0MTQvNAAvcGFzdGVsMTQvNAAvcGFpcmVkMTIvNAAvc2V0MzEyLzQAL3JkZ3kxMS80AC9yZHlsYnUxMS80AC9yZGJ1MTEvNAAvcHVvcjExLzQAL3ByZ24xMS80AC9yZHlsZ24xMS80AC9zcGVjdHJhbDExLzQAL3BpeWcxMS80AC9icmJnMTEvNAAvcGFpcmVkMTEvNAAvc2V0MzExLzQAL3JkZ3kxMC80AC9yZHlsYnUxMC80AC9yZGJ1MTAvNAAvcHVvcjEwLzQAL3ByZ24xMC80AC9yZHlsZ24xMC80AC9zcGVjdHJhbDEwLzQAL3BpeWcxMC80AC9icmJnMTAvNAAvcGFpcmVkMTAvNAAvc2V0MzEwLzQAMS40AG4gPj0gNABzaWRlcyA9PSA0AGl2b3J5MwBTcGFyc2VNYXRyaXhfbXVsdGlwbHkzAGdyZXkzAGRhcmtzbGF0ZWdyYXkzAFx4MwBzbm93MwBsaWdodHllbGxvdzMAaG9uZXlkZXczAHdoZWF0MwBzdXAzAHRvbWF0bzMAcm9zeWJyb3duMwBtYXJvb24zAGxpZ2h0c2FsbW9uMwBsZW1vbmNoaWZmb24zAHNwcmluZ2dyZWVuMwBkYXJrb2xpdmVncmVlbjMAcGFsZWdyZWVuMwBkYXJrc2VhZ3JlZW4zAGxpZ2h0Y3lhbjMAdGFuMwBwbHVtMwBzZWFzaGVsbDMAY29yYWwzAGhvdHBpbmszAGxpZ2h0cGluazMAZGVlcHBpbmszAGNvcm5zaWxrMwBmaXJlYnJpY2szAGtoYWtpMwBsYXZlbmRlcmJsdXNoMwBwZWFjaHB1ZmYzAGJpc3F1ZTMAbGlnaHRza3libHVlMwBkZWVwc2t5Ymx1ZTMAbGlnaHRibHVlMwBjYWRldGJsdWUzAGRvZGdlcmJsdWUzAGxpZ2h0c3RlZWxibHVlMwByb3lhbGJsdWUzAHNsYXRlYmx1ZTMAbmF2YWpvd2hpdGUzAGFudGlxdWV3aGl0ZTMAY2hvY29sYXRlMwBjaGFydHJldXNlMwBtaXN0eXJvc2UzAHBhbGV0dXJxdW9pc2UzAGF6dXJlMwBhcXVhbWFyaW5lMwB0aGlzdGxlMwBtZWRpdW1wdXJwbGUzAGRhcmtvcmFuZ2UzAGxpZ2h0Z29sZGVucm9kMwBkYXJrZ29sZGVucm9kMwBidXJseXdvb2QzAGdvbGQzAG1lZGl1bW9yY2hpZDMAZGFya29yY2hpZDMAcGFsZXZpb2xldHJlZDMAaW5kaWFucmVkMwBvcmFuZ2VyZWQzAG9saXZlZHJhYjMAbWFnZW50YTMAc2llbm5hMwBceEYzAFx4RTMAXHhEMwBceEMzAFx4QjMAXHhBMwBncmV5OTMAZ3JheTkzAFx4OTMAZ3JleTgzAGdyYXk4MwBceDgzAGdyZXk3MwBncmF5NzMAZ3JleTYzAGdyYXk2MwBncmV5NTMAZ3JheTUzAGdyZXk0MwBncmF5NDMAZ3JleTMzAGdyYXkzMwBncmV5MjMAZ3JheTIzAGdyZXkxMwBncmF5MTMAXHgxMwAvcmRneTkvMwAvYnVwdTkvMwAvcmRwdTkvMwAvcHVidTkvMwAveWxnbmJ1OS8zAC9nbmJ1OS8zAC9yZHlsYnU5LzMAL3JkYnU5LzMAL2dyZXlzOS8zAC9ncmVlbnM5LzMAL2JsdWVzOS8zAC9wdXJwbGVzOS8zAC9vcmFuZ2VzOS8zAC9yZWRzOS8zAC9wdW9yOS8zAC95bG9yYnI5LzMAL3B1YnVnbjkvMwAvYnVnbjkvMwAvcHJnbjkvMwAvcmR5bGduOS8zAC95bGduOS8zAC9zcGVjdHJhbDkvMwAvcGl5ZzkvMwAvYnJiZzkvMwAvcHVyZDkvMwAveWxvcnJkOS8zAC9vcnJkOS8zAC9wYWlyZWQ5LzMAL3NldDM5LzMAL3NldDE5LzMAL3Bhc3RlbDE5LzMAL3JkZ3k4LzMAL2J1cHU4LzMAL3JkcHU4LzMAL3B1YnU4LzMAL3lsZ25idTgvMwAvZ25idTgvMwAvcmR5bGJ1OC8zAC9yZGJ1OC8zAC9hY2NlbnQ4LzMAL2dyZXlzOC8zAC9ncmVlbnM4LzMAL2JsdWVzOC8zAC9wdXJwbGVzOC8zAC9vcmFuZ2VzOC8zAC9yZWRzOC8zAC9wdW9yOC8zAC95bG9yYnI4LzMAL3B1YnVnbjgvMwAvYnVnbjgvMwAvcHJnbjgvMwAvcmR5bGduOC8zAC95bGduOC8zAC9zcGVjdHJhbDgvMwAvcGl5ZzgvMwAvYnJiZzgvMwAvcHVyZDgvMwAveWxvcnJkOC8zAC9vcnJkOC8zAC9wYWlyZWQ4LzMAL3NldDM4LzMAL3NldDI4LzMAL3Bhc3RlbDI4LzMAL2RhcmsyOC8zAC9zZXQxOC8zAC9wYXN0ZWwxOC8zAC9yZGd5Ny8zAC9idXB1Ny8zAC9yZHB1Ny8zAC9wdWJ1Ny8zAC95bGduYnU3LzMAL2duYnU3LzMAL3JkeWxidTcvMwAvcmRidTcvMwAvYWNjZW50Ny8zAC9ncmV5czcvMwAvZ3JlZW5zNy8zAC9ibHVlczcvMwAvcHVycGxlczcvMwAvb3JhbmdlczcvMwAvcmVkczcvMwAvcHVvcjcvMwAveWxvcmJyNy8zAC9wdWJ1Z243LzMAL2J1Z243LzMAL3ByZ243LzMAL3JkeWxnbjcvMwAveWxnbjcvMwAvc3BlY3RyYWw3LzMAL3BpeWc3LzMAL2JyYmc3LzMAL3B1cmQ3LzMAL3lsb3JyZDcvMwAvb3JyZDcvMwAvcGFpcmVkNy8zAC9zZXQzNy8zAC9zZXQyNy8zAC9wYXN0ZWwyNy8zAC9kYXJrMjcvMwAvc2V0MTcvMwAvcGFzdGVsMTcvMwAvcmRneTYvMwAvYnVwdTYvMwAvcmRwdTYvMwAvcHVidTYvMwAveWxnbmJ1Ni8zAC9nbmJ1Ni8zAC9yZHlsYnU2LzMAL3JkYnU2LzMAL2FjY2VudDYvMwAvZ3JleXM2LzMAL2dyZWVuczYvMwAvYmx1ZXM2LzMAL3B1cnBsZXM2LzMAL29yYW5nZXM2LzMAL3JlZHM2LzMAL3B1b3I2LzMAL3lsb3JicjYvMwAvcHVidWduNi8zAC9idWduNi8zAC9wcmduNi8zAC9yZHlsZ242LzMAL3lsZ242LzMAL3NwZWN0cmFsNi8zAC9waXlnNi8zAC9icmJnNi8zAC9wdXJkNi8zAC95bG9ycmQ2LzMAL29ycmQ2LzMAL3BhaXJlZDYvMwAvc2V0MzYvMwAvc2V0MjYvMwAvcGFzdGVsMjYvMwAvZGFyazI2LzMAL3NldDE2LzMAL3Bhc3RlbDE2LzMAL3JkZ3k1LzMAL2J1cHU1LzMAL3JkcHU1LzMAL3B1YnU1LzMAL3lsZ25idTUvMwAvZ25idTUvMwAvcmR5bGJ1NS8zAC9yZGJ1NS8zAC9hY2NlbnQ1LzMAL2dyZXlzNS8zAC9ncmVlbnM1LzMAL2JsdWVzNS8zAC9wdXJwbGVzNS8zAC9vcmFuZ2VzNS8zAC9yZWRzNS8zAC9wdW9yNS8zAC95bG9yYnI1LzMAL3B1YnVnbjUvMwAvYnVnbjUvMwAvcHJnbjUvMwAvcmR5bGduNS8zAC95bGduNS8zAC9zcGVjdHJhbDUvMwAvcGl5ZzUvMwAvYnJiZzUvMwAvcHVyZDUvMwAveWxvcnJkNS8zAC9vcnJkNS8zAC9wYWlyZWQ1LzMAL3NldDM1LzMAL3NldDI1LzMAL3Bhc3RlbDI1LzMAL2RhcmsyNS8zAC9zZXQxNS8zAC9wYXN0ZWwxNS8zAC9yZGd5NC8zAC9idXB1NC8zAC9yZHB1NC8zAC9wdWJ1NC8zAC95bGduYnU0LzMAL2duYnU0LzMAL3JkeWxidTQvMwAvcmRidTQvMwAvYWNjZW50NC8zAC9ncmV5czQvMwAvZ3JlZW5zNC8zAC9ibHVlczQvMwAvcHVycGxlczQvMwAvb3JhbmdlczQvMwAvcmVkczQvMwAvcHVvcjQvMwAveWxvcmJyNC8zAC9wdWJ1Z240LzMAL2J1Z240LzMAL3ByZ240LzMAL3JkeWxnbjQvMwAveWxnbjQvMwAvc3BlY3RyYWw0LzMAL3BpeWc0LzMAL2JyYmc0LzMAL3B1cmQ0LzMAL3lsb3JyZDQvMwAvb3JyZDQvMwAvcGFpcmVkNC8zAC9zZXQzNC8zAC9zZXQyNC8zAC9wYXN0ZWwyNC8zAC9kYXJrMjQvMwAvc2V0MTQvMwAvcGFzdGVsMTQvMwAvcmRneTMvMwAvYnVwdTMvMwAvcmRwdTMvMwAvcHVidTMvMwAveWxnbmJ1My8zAC9nbmJ1My8zAC9yZHlsYnUzLzMAL3JkYnUzLzMAL2FjY2VudDMvMwAvZ3JleXMzLzMAL2dyZWVuczMvMwAvYmx1ZXMzLzMAL3B1cnBsZXMzLzMAL29yYW5nZXMzLzMAL3JlZHMzLzMAL3B1b3IzLzMAL3lsb3JicjMvMwAvcHVidWduMy8zAC9idWduMy8zAC9wcmduMy8zAC9yZHlsZ24zLzMAL3lsZ24zLzMAL3NwZWN0cmFsMy8zAC9waXlnMy8zAC9icmJnMy8zAC9wdXJkMy8zAC95bG9ycmQzLzMAL29ycmQzLzMAL3BhaXJlZDMvMwAvc2V0MzMvMwAvc2V0MjMvMwAvcGFzdGVsMjMvMwAvZGFyazIzLzMAL3NldDEzLzMAL3Bhc3RlbDEzLzMAL3BhaXJlZDEyLzMAL3NldDMxMi8zAC9yZGd5MTEvMwAvcmR5bGJ1MTEvMwAvcmRidTExLzMAL3B1b3IxMS8zAC9wcmduMTEvMwAvcmR5bGduMTEvMwAvc3BlY3RyYWwxMS8zAC9waXlnMTEvMwAvYnJiZzExLzMAL3BhaXJlZDExLzMAL3NldDMxMS8zAC9yZGd5MTAvMwAvcmR5bGJ1MTAvMwAvcmRidTEwLzMAL3B1b3IxMC8zAC9wcmduMTAvMwAvcmR5bGduMTAvMwAvc3BlY3RyYWwxMC8zAC9waXlnMTAvMwAvYnJiZzEwLzMAL3BhaXJlZDEwLzMAL3NldDMxMC8zAGl2b3J5MgBncmV5MgBkYXJrc2xhdGVncmF5MgBceDIAc25vdzIAbGlnaHR5ZWxsb3cyAGhvbmV5ZGV3MgBSVHJlZUluc2VydDIAd2hlYXQyAHN1cDIAbm9wMgB0b21hdG8yAHJvc3licm93bjIAbWFyb29uMgBsaWdodHNhbG1vbjIAbGVtb25jaGlmZm9uMgBzcHJpbmdncmVlbjIAZGFya29saXZlZ3JlZW4yAHBhbGVncmVlbjIAZGFya3NlYWdyZWVuMgBsaWdodGN5YW4yAHRhbjIAcGx1bTIAc2Vhc2hlbGwyAGNvcmFsMgBob3RwaW5rMgBsaWdodHBpbmsyAGRlZXBwaW5rMgBjb3Juc2lsazIAZmlyZWJyaWNrMgBraGFraTIAbGF2ZW5kZXJibHVzaDIAcGVhY2hwdWZmMgBicm9uemUyAGJpc3F1ZTIAbGlnaHRza3libHVlMgBkZWVwc2t5Ymx1ZTIAbGlnaHRibHVlMgBjYWRldGJsdWUyAGRvZGdlcmJsdWUyAGxpZ2h0c3RlZWxibHVlMgByb3lhbGJsdWUyAHNsYXRlYmx1ZTIAbmF2YWpvd2hpdGUyAGFudGlxdWV3aGl0ZTIAY2hvY29sYXRlMgBjaGFydHJldXNlMgBtaXN0eXJvc2UyAHBhbGV0dXJxdW9pc2UyAGF6dXJlMgBhcXVhbWFyaW5lMgB0aGlzdGxlMgBtZWRpdW1wdXJwbGUyAGRhcmtvcmFuZ2UyAGxpZ2h0Z29sZGVucm9kMgBkYXJrZ29sZGVucm9kMgBidXJseXdvb2QyAGdvbGQyAG1lZGl1bW9yY2hpZDIAZGFya29yY2hpZDIAcGFsZXZpb2xldHJlZDIAaW5kaWFucmVkMgBvcmFuZ2VyZWQyAG9saXZlZHJhYjIAbWFnZW50YTIAc2llbm5hMgBceEYyAFx4RTIAXHhEMgBceEMyAFx4QjIAXHhBMgBncmV5OTIAZ3JheTkyAFx4OTIAZ3JleTgyAGdyYXk4MgBceDgyAGdyZXk3MgBncmF5NzIAZ3JleTYyAGdyYXk2MgBncmV5NTIAZ3JheTUyAGdyZXk0MgBncmF5NDIAZ3JleTMyAGdyYXkzMgBncmV5MjIAZ3JheTIyAGdyZXkxMgBncmF5MTIAXHgxMgBmcmFjMTIAL3BhaXJlZDEyLzEyAC9zZXQzMTIvMTIAL3JkZ3k5LzIAL2J1cHU5LzIAL3JkcHU5LzIAL3B1YnU5LzIAL3lsZ25idTkvMgAvZ25idTkvMgAvcmR5bGJ1OS8yAC9yZGJ1OS8yAC9ncmV5czkvMgAvZ3JlZW5zOS8yAC9ibHVlczkvMgAvcHVycGxlczkvMgAvb3JhbmdlczkvMgAvcmVkczkvMgAvcHVvcjkvMgAveWxvcmJyOS8yAC9wdWJ1Z245LzIAL2J1Z245LzIAL3ByZ245LzIAL3JkeWxnbjkvMgAveWxnbjkvMgAvc3BlY3RyYWw5LzIAL3BpeWc5LzIAL2JyYmc5LzIAL3B1cmQ5LzIAL3lsb3JyZDkvMgAvb3JyZDkvMgAvcGFpcmVkOS8yAC9zZXQzOS8yAC9zZXQxOS8yAC9wYXN0ZWwxOS8yAC9yZGd5OC8yAC9idXB1OC8yAC9yZHB1OC8yAC9wdWJ1OC8yAC95bGduYnU4LzIAL2duYnU4LzIAL3JkeWxidTgvMgAvcmRidTgvMgAvYWNjZW50OC8yAC9ncmV5czgvMgAvZ3JlZW5zOC8yAC9ibHVlczgvMgAvcHVycGxlczgvMgAvb3JhbmdlczgvMgAvcmVkczgvMgAvcHVvcjgvMgAveWxvcmJyOC8yAC9wdWJ1Z244LzIAL2J1Z244LzIAL3ByZ244LzIAL3JkeWxnbjgvMgAveWxnbjgvMgAvc3BlY3RyYWw4LzIAL3BpeWc4LzIAL2JyYmc4LzIAL3B1cmQ4LzIAL3lsb3JyZDgvMgAvb3JyZDgvMgAvcGFpcmVkOC8yAC9zZXQzOC8yAC9zZXQyOC8yAC9wYXN0ZWwyOC8yAC9kYXJrMjgvMgAvc2V0MTgvMgAvcGFzdGVsMTgvMgAvcmRneTcvMgAvYnVwdTcvMgAvcmRwdTcvMgAvcHVidTcvMgAveWxnbmJ1Ny8yAC9nbmJ1Ny8yAC9yZHlsYnU3LzIAL3JkYnU3LzIAL2FjY2VudDcvMgAvZ3JleXM3LzIAL2dyZWVuczcvMgAvYmx1ZXM3LzIAL3B1cnBsZXM3LzIAL29yYW5nZXM3LzIAL3JlZHM3LzIAL3B1b3I3LzIAL3lsb3JicjcvMgAvcHVidWduNy8yAC9idWduNy8yAC9wcmduNy8yAC9yZHlsZ243LzIAL3lsZ243LzIAL3NwZWN0cmFsNy8yAC9waXlnNy8yAC9icmJnNy8yAC9wdXJkNy8yAC95bG9ycmQ3LzIAL29ycmQ3LzIAL3BhaXJlZDcvMgAvc2V0MzcvMgAvc2V0MjcvMgAvcGFzdGVsMjcvMgAvZGFyazI3LzIAL3NldDE3LzIAL3Bhc3RlbDE3LzIAL3JkZ3k2LzIAL2J1cHU2LzIAL3JkcHU2LzIAL3B1YnU2LzIAL3lsZ25idTYvMgAvZ25idTYvMgAvcmR5bGJ1Ni8yAC9yZGJ1Ni8yAC9hY2NlbnQ2LzIAL2dyZXlzNi8yAC9ncmVlbnM2LzIAL2JsdWVzNi8yAC9wdXJwbGVzNi8yAC9vcmFuZ2VzNi8yAC9yZWRzNi8yAC9wdW9yNi8yAC95bG9yYnI2LzIAL3B1YnVnbjYvMgAvYnVnbjYvMgAvcHJnbjYvMgAvcmR5bGduNi8yAC95bGduNi8yAC9zcGVjdHJhbDYvMgAvcGl5ZzYvMgAvYnJiZzYvMgAvcHVyZDYvMgAveWxvcnJkNi8yAC9vcnJkNi8yAC9wYWlyZWQ2LzIAL3NldDM2LzIAL3NldDI2LzIAL3Bhc3RlbDI2LzIAL2RhcmsyNi8yAC9zZXQxNi8yAC9wYXN0ZWwxNi8yAC9yZGd5NS8yAC9idXB1NS8yAC9yZHB1NS8yAC9wdWJ1NS8yAC95bGduYnU1LzIAL2duYnU1LzIAL3JkeWxidTUvMgAvcmRidTUvMgAvYWNjZW50NS8yAC9ncmV5czUvMgAvZ3JlZW5zNS8yAC9ibHVlczUvMgAvcHVycGxlczUvMgAvb3JhbmdlczUvMgAvcmVkczUvMgAvcHVvcjUvMgAveWxvcmJyNS8yAC9wdWJ1Z241LzIAL2J1Z241LzIAL3ByZ241LzIAL3JkeWxnbjUvMgAveWxnbjUvMgAvc3BlY3RyYWw1LzIAL3BpeWc1LzIAL2JyYmc1LzIAL3B1cmQ1LzIAL3lsb3JyZDUvMgAvb3JyZDUvMgAvcGFpcmVkNS8yAC9zZXQzNS8yAC9zZXQyNS8yAC9wYXN0ZWwyNS8yAC9kYXJrMjUvMgAvc2V0MTUvMgAvcGFzdGVsMTUvMgAvcmRneTQvMgAvYnVwdTQvMgAvcmRwdTQvMgAvcHVidTQvMgAveWxnbmJ1NC8yAC9nbmJ1NC8yAC9yZHlsYnU0LzIAL3JkYnU0LzIAL2FjY2VudDQvMgAvZ3JleXM0LzIAL2dyZWVuczQvMgAvYmx1ZXM0LzIAL3B1cnBsZXM0LzIAL29yYW5nZXM0LzIAL3JlZHM0LzIAL3B1b3I0LzIAL3lsb3JicjQvMgAvcHVidWduNC8yAC9idWduNC8yAC9wcmduNC8yAC9yZHlsZ240LzIAL3lsZ240LzIAL3NwZWN0cmFsNC8yAC9waXlnNC8yAC9icmJnNC8yAC9wdXJkNC8yAC95bG9ycmQ0LzIAL29ycmQ0LzIAL3BhaXJlZDQvMgAvc2V0MzQvMgAvc2V0MjQvMgAvcGFzdGVsMjQvMgAvZGFyazI0LzIAL3NldDE0LzIAL3Bhc3RlbDE0LzIAL3JkZ3kzLzIAL2J1cHUzLzIAL3JkcHUzLzIAL3B1YnUzLzIAL3lsZ25idTMvMgAvZ25idTMvMgAvcmR5bGJ1My8yAC9yZGJ1My8yAC9hY2NlbnQzLzIAL2dyZXlzMy8yAC9ncmVlbnMzLzIAL2JsdWVzMy8yAC9wdXJwbGVzMy8yAC9vcmFuZ2VzMy8yAC9yZWRzMy8yAC9wdW9yMy8yAC95bG9yYnIzLzIAL3B1YnVnbjMvMgAvYnVnbjMvMgAvcHJnbjMvMgAvcmR5bGduMy8yAC95bGduMy8yAC9zcGVjdHJhbDMvMgAvcGl5ZzMvMgAvYnJiZzMvMgAvcHVyZDMvMgAveWxvcnJkMy8yAC9vcnJkMy8yAC9wYWlyZWQzLzIAL3NldDMzLzIAL3NldDIzLzIAL3Bhc3RlbDIzLzIAL2RhcmsyMy8yAC9zZXQxMy8yAC9wYXN0ZWwxMy8yAC9wYWlyZWQxMi8yAC9zZXQzMTIvMgAvcmRneTExLzIAL3JkeWxidTExLzIAL3JkYnUxMS8yAC9wdW9yMTEvMgAvcHJnbjExLzIAL3JkeWxnbjExLzIAL3NwZWN0cmFsMTEvMgAvcGl5ZzExLzIAL2JyYmcxMS8yAC9wYWlyZWQxMS8yAC9zZXQzMTEvMgAvcmRneTEwLzIAL3JkeWxidTEwLzIAL3JkYnUxMC8yAC9wdW9yMTAvMgAvcHJnbjEwLzIAL3JkeWxnbjEwLzIAL3NwZWN0cmFsMTAvMgAvcGl5ZzEwLzIAL2JyYmcxMC8yAC9wYWlyZWQxMC8yAC9zZXQzMTAvMgAxLjIAIC1kYXNoIDIAbGVuID49IDIAZXhwID09IDEgfHwgZXhwID09IDIAZGltID09IDIATkRfb3V0KHYpLnNpemUgPT0gMgBpdm9yeTEAZ3JleTEAZGFya3NsYXRlZ3JheTEAXHgxAHNub3cxAGxpZ2h0eWVsbG93MQBob25leWRldzEAbnNsaW1pdDEAd2hlYXQxAHN1cDEAbm9wMQB0b21hdG8xAHJvc3licm93bjEAbWFyb29uMQBsaWdodHNhbG1vbjEAbGVtb25jaGlmZm9uMQBsYXRpbjEAYWdvcGVuMQBzcHJpbmdncmVlbjEAZGFya29saXZlZ3JlZW4xAHBhbGVncmVlbjEAZGFya3NlYWdyZWVuMQBsaWdodGN5YW4xAHRhbjEAcGx1bTEAc2Vhc2hlbGwxAGNvcmFsMQBob3RwaW5rMQBsaWdodHBpbmsxAGRlZXBwaW5rMQBjb3Juc2lsazEAZmlyZWJyaWNrMQBqMCA8PSBpMSAmJiBpMSA8PSBqMQBraGFraTEAbGF2ZW5kZXJibHVzaDEAcGVhY2hwdWZmMQBiaXNxdWUxAGxpZ2h0c2t5Ymx1ZTEAZGVlcHNreWJsdWUxAGxpZ2h0Ymx1ZTEAY2FkZXRibHVlMQBkb2RnZXJibHVlMQBsaWdodHN0ZWVsYmx1ZTEAcm95YWxibHVlMQBzbGF0ZWJsdWUxAG5hdmFqb3doaXRlMQBhbnRpcXVld2hpdGUxAGNob2NvbGF0ZTEAY2hhcnRyZXVzZTEAbWlzdHlyb3NlMQBwYWxldHVycXVvaXNlMQBhenVyZTEAYXF1YW1hcmluZTEAdGhpc3RsZTEAbWVkaXVtcHVycGxlMQBkYXJrb3JhbmdlMQBhcmdfZTAgJiYgYXJnX2UxAGxpZ2h0Z29sZGVucm9kMQBkYXJrZ29sZGVucm9kMQBidXJseXdvb2QxAGdvbGQxAG1lZGl1bW9yY2hpZDEAZGFya29yY2hpZDEAcGFsZXZpb2xldHJlZDEAaW5kaWFucmVkMQBvcmFuZ2VyZWQxAG9saXZlZHJhYjEAbWFnZW50YTEAc2llbm5hMQBceEYxAFx4RTEAXHhEMQBceEMxAFx4QjEAXHhBMQBncmV5OTEAZ3JheTkxAFx4OTEAZ3JleTgxAGdyYXk4MQBceDgxAGdyZXk3MQBncmF5NzEAZ3JleTYxAGdyYXk2MQBncmV5NTEAZ3JheTUxAGdyZXk0MQBncmF5NDEAZ3JleTMxAGdyYXkzMQBncmV5MjEAZ3JheTIxAGdyZXkxMQBncmF5MTEAXHgxMQAvcGFpcmVkMTIvMTEAL3NldDMxMi8xMQAvcmRneTExLzExAC9yZHlsYnUxMS8xMQAvcmRidTExLzExAC9wdW9yMTEvMTEAL3ByZ24xMS8xMQAvcmR5bGduMTEvMTEAL3NwZWN0cmFsMTEvMTEAL3BpeWcxMS8xMQAvYnJiZzExLzExAC9wYWlyZWQxMS8xMQAvc2V0MzExLzExAGNzW2ldLT5zbGFjaygpPi0wLjAwMDAwMDEAL3JkZ3k5LzEAL2J1cHU5LzEAL3JkcHU5LzEAL3B1YnU5LzEAL3lsZ25idTkvMQAvZ25idTkvMQAvcmR5bGJ1OS8xAC9yZGJ1OS8xAC9ncmV5czkvMQAvZ3JlZW5zOS8xAC9ibHVlczkvMQAvcHVycGxlczkvMQAvb3JhbmdlczkvMQAvcmVkczkvMQAvcHVvcjkvMQAveWxvcmJyOS8xAC9wdWJ1Z245LzEAL2J1Z245LzEAL3ByZ245LzEAL3JkeWxnbjkvMQAveWxnbjkvMQAvc3BlY3RyYWw5LzEAL3BpeWc5LzEAL2JyYmc5LzEAL3B1cmQ5LzEAL3lsb3JyZDkvMQAvb3JyZDkvMQAvcGFpcmVkOS8xAC9zZXQzOS8xAC9zZXQxOS8xAC9wYXN0ZWwxOS8xAC9yZGd5OC8xAC9idXB1OC8xAC9yZHB1OC8xAC9wdWJ1OC8xAC95bGduYnU4LzEAL2duYnU4LzEAL3JkeWxidTgvMQAvcmRidTgvMQAvYWNjZW50OC8xAC9ncmV5czgvMQAvZ3JlZW5zOC8xAC9ibHVlczgvMQAvcHVycGxlczgvMQAvb3JhbmdlczgvMQAvcmVkczgvMQAvcHVvcjgvMQAveWxvcmJyOC8xAC9wdWJ1Z244LzEAL2J1Z244LzEAL3ByZ244LzEAL3JkeWxnbjgvMQAveWxnbjgvMQAvc3BlY3RyYWw4LzEAL3BpeWc4LzEAL2JyYmc4LzEAL3B1cmQ4LzEAL3lsb3JyZDgvMQAvb3JyZDgvMQAvcGFpcmVkOC8xAC9zZXQzOC8xAC9zZXQyOC8xAC9wYXN0ZWwyOC8xAC9kYXJrMjgvMQAvc2V0MTgvMQAvcGFzdGVsMTgvMQAvcmRneTcvMQAvYnVwdTcvMQAvcmRwdTcvMQAvcHVidTcvMQAveWxnbmJ1Ny8xAC9nbmJ1Ny8xAC9yZHlsYnU3LzEAL3JkYnU3LzEAL2FjY2VudDcvMQAvZ3JleXM3LzEAL2dyZWVuczcvMQAvYmx1ZXM3LzEAL3B1cnBsZXM3LzEAL29yYW5nZXM3LzEAL3JlZHM3LzEAL3B1b3I3LzEAL3lsb3JicjcvMQAvcHVidWduNy8xAC9idWduNy8xAC9wcmduNy8xAC9yZHlsZ243LzEAL3lsZ243LzEAL3NwZWN0cmFsNy8xAC9waXlnNy8xAC9icmJnNy8xAC9wdXJkNy8xAC95bG9ycmQ3LzEAL29ycmQ3LzEAL3BhaXJlZDcvMQAvc2V0MzcvMQAvc2V0MjcvMQAvcGFzdGVsMjcvMQAvZGFyazI3LzEAL3NldDE3LzEAL3Bhc3RlbDE3LzEAL3JkZ3k2LzEAL2J1cHU2LzEAL3JkcHU2LzEAL3B1YnU2LzEAL3lsZ25idTYvMQAvZ25idTYvMQAvcmR5bGJ1Ni8xAC9yZGJ1Ni8xAC9hY2NlbnQ2LzEAL2dyZXlzNi8xAC9ncmVlbnM2LzEAL2JsdWVzNi8xAC9wdXJwbGVzNi8xAC9vcmFuZ2VzNi8xAC9yZWRzNi8xAC9wdW9yNi8xAC95bG9yYnI2LzEAL3B1YnVnbjYvMQAvYnVnbjYvMQAvcHJnbjYvMQAvcmR5bGduNi8xAC95bGduNi8xAC9zcGVjdHJhbDYvMQAvcGl5ZzYvMQAvYnJiZzYvMQAvcHVyZDYvMQAveWxvcnJkNi8xAC9vcnJkNi8xAC9wYWlyZWQ2LzEAL3NldDM2LzEAL3NldDI2LzEAL3Bhc3RlbDI2LzEAL2RhcmsyNi8xAC9zZXQxNi8xAC9wYXN0ZWwxNi8xAC9yZGd5NS8xAC9idXB1NS8xAC9yZHB1NS8xAC9wdWJ1NS8xAC95bGduYnU1LzEAL2duYnU1LzEAL3JkeWxidTUvMQAvcmRidTUvMQAvYWNjZW50NS8xAC9ncmV5czUvMQAvZ3JlZW5zNS8xAC9ibHVlczUvMQAvcHVycGxlczUvMQAvb3JhbmdlczUvMQAvcmVkczUvMQAvcHVvcjUvMQAveWxvcmJyNS8xAC9wdWJ1Z241LzEAL2J1Z241LzEAL3ByZ241LzEAL3JkeWxnbjUvMQAveWxnbjUvMQAvc3BlY3RyYWw1LzEAL3BpeWc1LzEAL2JyYmc1LzEAL3B1cmQ1LzEAL3lsb3JyZDUvMQAvb3JyZDUvMQAvcGFpcmVkNS8xAC9zZXQzNS8xAC9zZXQyNS8xAC9wYXN0ZWwyNS8xAC9kYXJrMjUvMQAvc2V0MTUvMQAvcGFzdGVsMTUvMQAvcmRneTQvMQAvYnVwdTQvMQAvcmRwdTQvMQAvcHVidTQvMQAveWxnbmJ1NC8xAC9nbmJ1NC8xAC9yZHlsYnU0LzEAL3JkYnU0LzEAL2FjY2VudDQvMQAvZ3JleXM0LzEAL2dyZWVuczQvMQAvYmx1ZXM0LzEAL3B1cnBsZXM0LzEAL29yYW5nZXM0LzEAL3JlZHM0LzEAL3B1b3I0LzEAL3lsb3JicjQvMQAvcHVidWduNC8xAC9idWduNC8xAC9wcmduNC8xAC9yZHlsZ240LzEAL3lsZ240LzEAL3NwZWN0cmFsNC8xAC9waXlnNC8xAC9icmJnNC8xAC9wdXJkNC8xAC95bG9ycmQ0LzEAL29ycmQ0LzEAL3BhaXJlZDQvMQAvc2V0MzQvMQAvc2V0MjQvMQAvcGFzdGVsMjQvMQAvZGFyazI0LzEAL3NldDE0LzEAL3Bhc3RlbDE0LzEAL3JkZ3kzLzEAL2J1cHUzLzEAL3JkcHUzLzEAL3B1YnUzLzEAL3lsZ25idTMvMQAvZ25idTMvMQAvcmR5bGJ1My8xAC9yZGJ1My8xAC9hY2NlbnQzLzEAL2dyZXlzMy8xAC9ncmVlbnMzLzEAL2JsdWVzMy8xAC9wdXJwbGVzMy8xAC9vcmFuZ2VzMy8xAC9yZWRzMy8xAC9wdW9yMy8xAC95bG9yYnIzLzEAL3B1YnVnbjMvMQAvYnVnbjMvMQAvcHJnbjMvMQAvcmR5bGduMy8xAC95bGduMy8xAC9zcGVjdHJhbDMvMQAvcGl5ZzMvMQAvYnJiZzMvMQAvcHVyZDMvMQAveWxvcnJkMy8xAC9vcnJkMy8xAC9wYWlyZWQzLzEAL3NldDMzLzEAL3NldDIzLzEAL3Bhc3RlbDIzLzEAL2RhcmsyMy8xAC9zZXQxMy8xAC9wYXN0ZWwxMy8xAC9wYWlyZWQxMi8xAC9zZXQzMTIvMQAvcmRneTExLzEAL3JkeWxidTExLzEAL3JkYnUxMS8xAC9wdW9yMTEvMQAvcHJnbjExLzEAL3JkeWxnbjExLzEAL3NwZWN0cmFsMTEvMQAvcGl5ZzExLzEAL2JyYmcxMS8xAC9wYWlyZWQxMS8xAC9zZXQzMTEvMQAvcmRneTEwLzEAL3JkeWxidTEwLzEAL3JkYnUxMC8xAC9wdW9yMTAvMQAvcHJnbjEwLzEAL3JkeWxnbjEwLzEAL3NwZWN0cmFsMTAvMQAvcGl5ZzEwLzEAL2JyYmcxMC8xAC9wYWlyZWQxMC8xAC9zZXQzMTAvMQAxNC4xLjEAbGF0aW4tMQBJU09fODg1OS0xAElTTzg4NTktMQBJU08tODg1OS0xAGkgPj0gMQBxLT5uID09IDEAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnBhcnRpdGlvbltpXSA9PSAwIHx8IHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5wYXJ0aXRpb25baV0gPT0gMQBiei5zaXplICUgMyA9PSAxAExJU1RfU0laRSgmY3R4LT5UcmVlX2VkZ2UpID09IGN0eC0+Tl9ub2RlcyAtIDEAbm9kZV9zZXRfc2l6ZShnLT5uX2lkKSA9PSBvc2l6ZSArIDEAbi0+Y291bnQgKyAoKm5uKS0+Y291bnQgPT0gTk9ERUNBUkQgKyAxAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSArIHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFsxXSA9PSBOT0RFQ0FSRCArIDEAZ3JleTAAZ3JheTAAanNvbjAAI2YwZjBmMAAjZTBlMGUwAHhiLT5sb2NhdGVkID4gQUdYQlVGX0lOTElORV9TSVpFXzAAXDAAVDAAXHhGMABceEUwAFx4RDAAXHhDMABceEIwAFx4QTAAZ3JleTkwAGdyYXk5MABceDkwAGdyZXk4MABncmF5ODAAXHg4MAAjODA4MDgwAGdyZXk3MABncmF5NzAAY2N3cm90ID09IDAgfHwgY2N3cm90ID09IDkwIHx8IGNjd3JvdCA9PSAxODAgfHwgY2N3cm90ID09IDI3MABjd3JvdCA9PSAwIHx8IGN3cm90ID09IDkwIHx8IGN3cm90ID09IDE4MCB8fCBjd3JvdCA9PSAyNzAAZ3JleTYwAGdyYXk2MABncmV5NTAAZ3JheTUwAGdyZXk0MABncmF5NDAAci53aWR0aCgpPDFlNDAAZ3JleTMwAGdyYXkzMAAjMzAzMDMwAGdyZXkyMABncmF5MjAAZ3JleTEwAGdyYXkxMABceDEwACMxMDEwMTAAL3BhaXJlZDEyLzEwAC9zZXQzMTIvMTAAL3JkZ3kxMS8xMAAvcmR5bGJ1MTEvMTAAL3JkYnUxMS8xMAAvcHVvcjExLzEwAC9wcmduMTEvMTAAL3JkeWxnbjExLzEwAC9zcGVjdHJhbDExLzEwAC9waXlnMTEvMTAAL2JyYmcxMS8xMAAvcGFpcmVkMTEvMTAAL3NldDMxMS8xMAAvcmRneTEwLzEwAC9yZHlsYnUxMC8xMAAvcmRidTEwLzEwAC9wdW9yMTAvMTAAL3ByZ24xMC8xMAAvcmR5bGduMTAvMTAAL3NwZWN0cmFsMTAvMTAAL3BpeWcxMC8xMAAvYnJiZzEwLzEwAC9wYWlyZWQxMC8xMAAvc2V0MzEwLzEwADEyMDAAZ3JleTEwMABncmF5MTAwAElTTy1JUi0xMDAAMTAwMDAAJSFQUy1BZG9iZS0zLjAAbnogPiAwAGxpc3QtPmNhcGFjaXR5ID4gMABkaXN0ID4gMABwYXRoY291bnQgPiAwAHdndCA+IDAAbnNpdGVzID4gMABzaWRlcyA+IDAAcnYgPT0gMCB8fCAoTkRfb3JkZXIocnYpLU5EX29yZGVyKHYpKSpkaXIgPiAwAGlucG4gPiAwAGxlbiA+IDAAcXQxLT5uID4gMCAmJiBxdDItPm4gPiAwAG0gPiAwICYmIG4gPiAwAG5ld1RvdGFsID4gMAB3aWR0aCA+IDAAbGlzdC0+c2l6ZSA+IDAAZGljdC0+c2l6ZSA+IDAAc3BsLT5zaXplID4gMABzZWxmLT5zaXplID4gMABiei5zaXplID4gMABpbmNyZWFzZSA+IDAAYm91bmQgPiAwAGdyYXBoLT53ZWlnaHRzW3hdID4gMABncmFwaC0+d2VpZ2h0c1tuX2VkZ2VzXSA+IDAAaW5kZXggPj0gMAB0ID49IDAAbm5vZGVzID49IDAAbl9vYnMgPj0gMABuID49IDAAbi0+bGV2ZWwgPj0gMABvcmlnaW5hbCA+PSAwAE1heHJhbmsgPj0gMABQYWNrID49IDAAaWkgPCAxPDxkaW0gJiYgaWkgPj0gMAB3aWR0aCA+PSAwAGpkaWFnID49IDAAaWRpYWcgPj0gMABkID49IDAAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzBdID49IDAgJiYgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID49IDAAViA+PSAwAGFnbm5vZGVzKGdyYXBoKSA+PSAwAGFnbm5vZGVzKGcpID49IDAARURfdHJlZV9pbmRleChlKSA+PSAwAEVEX2NvdW50KGUpID49IDAAb2JqcDEtPnN6LnggPT0gMCAmJiBvYmpwMS0+c3oueSA9PSAwAGNfY250ID09IDAAcmFua19yZXN1bHQgPT0gMABnZXR0aW1lb2ZkYXlfcmVzID09IDAAaiA9PSAwAE5EX2luKHJpZ2h0KS5zaXplICsgTkRfb3V0KHJpZ2h0KS5zaXplID09IDAAYS5zaGFwZSA9PSAwIHx8IGIuc2hhcGUgPT0gMABsaXN0LT5iYXNlICE9IE5VTEwgfHwgaW5kZXggPT0gMCB8fCBzdHJpZGUgPT0gMABkdHNpemUoZGVzdCkgPT0gMABkdHNpemUoZy0+bl9zZXEpID09IDAAZHRzaXplKGctPmdfc2VxKSA9PSAwAGR0c2l6ZShnLT5lX3NlcSkgPT0gMABHRF9taW5yYW5rKGcpID09IDAAZHRzaXplKGctPmdfaWQpID09IDAAZHRzaXplKGctPmVfaWQpID09IDAAY29zeCAhPSAwIHx8IHNpbnggIT0gMAByZXFfYWxpZ25tZW50ICE9IDAAbWVtY21wKCZzdHlsZSwgJihncmFwaHZpel9wb2x5Z29uX3N0eWxlX3QpezB9LCBzaXplb2Yoc3R5bGUpKSAhPSAwAHJlc3VsdCA9PSAoaW50KShzaXplIC0gMSkgfHwgcmVzdWx0IDwgMABtYXNrW2lpXSA8IDAATkRfaGVhcGluZGV4KHYpIDwgMABcLwBYMTEvAGd2UmVuZGVySm9icyAlczogJS4yZiBzZWNzLgAlLipzLgBzcGVjaWZpZWQgcm9vdCBub2RlICIlcyIgd2FzIG5vdCBmb3VuZC4AR3JhcGggJXMgaGFzIGFycmF5IHBhY2tpbmcgd2l0aCB1c2VyIHZhbHVlcyBidXQgbm8gInNvcnR2IiBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLgAxLgAtMC4AJSFQUy1BZG9iZS0AJVBERi0APCEtLQAgLAArACoAc3RyZXEoYXB0ci0+dS5uYW1lLEtleSkAIWlzX2V4YWN0bHlfZXF1YWwoUi54LCBRLngpIHx8ICFpc19leGFjdGx5X2VxdWFsKFIueSwgUS55KQBORF9vcmRlcih2KSA8IE5EX29yZGVyKHcpAHUgPT0gVUZfZmluZCh1KQAhTElTVF9JU19FTVBUWShwbGlzdCkAZ3ZfbGlzdF9pc19jb250aWd1b3VzXygqbGlzdCkAb25lIDw9IExJU1RfU0laRShsaXN0KQBucCA8IExJU1RfU0laRShsaXN0KQBpc19wb3dlcl9vZl8yKGFsaWdubWVudCkAc3RkOjppc19oZWFwKGhlYXAuYmVnaW4oKSwgaGVhcC5lbmQoKSwgZ3QpACEocS0+cXRzKQAhTElTVF9JU19FTVBUWSgmbGVhdmVzKQBvbl9oZWFwKHIpAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPT0gKHNpemVfdClkdHNpemUoZy0+bl9zZXEpAE5EX3JhbmsoZnJvbSkgPCBORF9yYW5rKHRvKQBub3Qgd2VsbC1mb3JtZWQgKGludmFsaWQgdG9rZW4pAGFnc3VicmVwKGcsbikAbiAhPSBORF9uZXh0KG4pAGZpbmRfZmFzdF9ub2RlKGcsIG4pAChudWxsKQAoIWpjbikgJiYgKCF2YWwpACEocS0+bCkAc3ltLT5pZCA+PSAwICYmIHN5bS0+aWQgPCB0b3BkaWN0c2l6ZShvYmopAG1vdmUgdG8gKCUuMGYsICUuMGYpADsgc3BsaW5lIHRvICglLjBmLCAlLjBmKQA7IGxpbmUgdG8gKCUuMGYsICUuMGYpAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMoQSwgdHJ1ZSkAdmFsdWUgJiYgc3RybGVuKHZhbHVlKQBTcGFyc2VNYXRyaXhfaXNfc3ltbWV0cmljKEEsIGZhbHNlKQAhdXNlX3N0YWdlIHx8IHNpemUgPD0gc2l6ZW9mKHN0YWdlKQBFRF9sYWJlbChmZSkAIVRSRUVfRURHRShlKQAhY29uc3RyYWluaW5nX2ZsYXRfZWRnZShnLCBlKQBub2RlX3NldF9pc19lbXB0eShnLT5uX2lkKQByXyVkKQBsXyVkKQAobGliKQAhU3BhcnNlTWF0cml4X2hhc19kaWFnb25hbChBKQAgc2Nhbm5pbmcgYSBIVE1MIHN0cmluZyAobWlzc2luZyAnPic/IGJhZCBuZXN0aW5nPyBsb25nZXIgdGhhbiAlZD8pACBzY2FubmluZyBhIHF1b3RlZCBzdHJpbmcgKG1pc3NpbmcgZW5kcXVvdGU/IGxvbmdlciB0aGFuICVkPykAIHNjYW5uaW5nIGEgLyouLi4qLyBjb21tZW50IChtaXNzaW5nICcqLz8gbG9uZ2VyIHRoYW4gJWQ/KQBmYWxsYmFjayg0KQBvbl9oZWFwKHIwKSB8fCBvbl9oZWFwKHIxKQBhZ3RhaWwoZSkgPT0gVUZfZmluZChhZ3RhaWwoZSkpAGFnaGVhZChlKSA9PSBVRl9maW5kKGFnaGVhZChlKSkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpAG91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpAHN0cmVxKG1vZGUsICJyIikgfHwgc3RyZXEobW9kZSwgInJiIikgfHwgc3RyZXEobW9kZSwgInciKSB8fCBzdHJlcShtb2RlLCAid2IiKQBwbmFtZSAhPSBOVUxMICYmICFzdHJlcShwbmFtZSwgIiIpAHNldGxpbmV3aWR0aCgAKSByb3RhdGUoJWQpIHRyYW5zbGF0ZSgAIHRyYW5zZm9ybT0ic2NhbGUoAE5PVEFUSU9OKAAgKAAgbmVhciAnJXMnACVsZiwlbGYsJWxmLCclW14nXScAaXNkaWdpdCgoaW50KWRvdHBbMV0pICYmIGlzZGlnaXQoKGludClkb3RwWzJdKSAmJiBkb3RwWzNdID09ICdcMCcAJgAlACQAdXJsKCMAPHRleHRQYXRoIHhsaW5rOmhyZWY9IiMAPGFyZWEgc2hhcGU9InBvbHkiACBmaWxsPSIjJTAyeCUwMnglMDJ4IgAoc2VxICYgU0VRX01BU0spID09IHNlcSAmJiAic2VxdWVuY2UgSUQgb3ZlcmZsb3ciAGd2X3NvcnRfY29tcGFyID09IE5VTEwgJiYgZ3Zfc29ydF9hcmcgPT0gTlVMTCAmJiAidW5zdXBwb3J0ZWQgcmVjdXJzaXZlIGNhbGwgdG8gZ3Zfc29ydCIAZ3Zfc29ydF9jb21wYXIgIT0gTlVMTCAmJiAibm8gY29tcGFyYXRvciBzZXQgaW4gZ3Zfc29ydCIAb3AtPm9wLnUucG9seWdvbi5jbnQgPD0gSU5UX01BWCAmJiAicG9seWdvbiBjb3VudCBleGNlZWRzIGd2cmVuZGVyX3BvbHlnb24gc3VwcG9ydCIAIHRleHQtYW5jaG9yPSJzdGFydCIAcC54ICE9IGEgJiYgImNhbm5vdCBoYW5kbGUgZWxsaXBzZSB0YW5nZW50IHNsb3BlIGluIGhvcml6b250YWwgZXh0cmVtZSBwb2ludCIAZnVsbF9sZW5ndGhfd2l0aG91dF9zaGFmdCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCB3aXRob3V0IHNoYWZ0IgA8YXJlYSBzaGFwZT0icmVjdCIAc2l6ZSA+IDAgJiYgImF0dGVtcHQgdG8gYWxsb2NhdGUgYXJyYXkgb2YgMC1zaXplZCBlbGVtZW50cyIAaW5kZXggPCBzZWxmLT5zaXplX2JpdHMgJiYgIm91dCBvZiBib3VuZHMgYWNjZXNzIgBpbmRleCA8IHNlbGYuc2l6ZV9iaXRzICYmICJvdXQgb2YgYm91bmRzIGFjY2VzcyIAKnMxICE9ICpzMiAmJiAiZHVwbGljYXRlIHNlcGFyYXRvciBjaGFyYWN0ZXJzIgBHRF9taW5yYW5rKHN1YmcpIDw9IEdEX21heHJhbmsoc3ViZykgJiYgImNvcnJ1cHRlZCByYW5rIGJvdW5kcyIAaW5kZXggPCBsaXN0LnNpemUgJiYgImluZGV4IG91dCBvZiBib3VuZHMiACh1aW50cHRyX3QpcyAlIDIgPT0gMCAmJiAiaGVhcCBwb2ludGVyIHdpdGggbG93IGJpdCBzZXQgd2lsbCBjb2xsaWRlIHdpdGggYW5vbnltb3VzIElEcyIAICgrJTZsZCBieXRlcyAlc3wldSwgeG1scGFyc2UuYzolZCkgJSpzIgAgZm9udC1mYW1pbHk9IiVzIgAgZm9udC13ZWlnaHQ9IiVzIgAgZmlsbD0iJXMiACBmb250LXN0cmV0Y2g9IiVzIgAgZm9udC1zdHlsZT0iJXMiAGJhZCBlZGdlIGxlbiAiJXMiACBiYXNlbGluZS1zaGlmdD0ic3VwZXIiAGFneGJsZW4oeGIpIDw9IHNpemVvZih4Yi0+c3RvcmUpICYmICJhZ3hidWYgY29ycnVwdGlvbiIAY2VsbC5yb3cgPCB0YWJsZS0+cm93X2NvdW50ICYmICJvdXQgb2YgcmFuZ2UgY2VsbCIAY2VsbC5jb2wgPCB0YWJsZS0+Y29sdW1uX2NvdW50ICYmICJvdXQgb2YgcmFuZ2UgY2VsbCIAIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiAGZ1bGxfbGVuZ3RoID4gMCAmJiAibm9uLXBvc2l0aXZlIGZ1bGwgbGVuZ3RoIgBmdWxsX2Jhc2Vfd2lkdGggPiAwICYmICJub24tcG9zaXRpdmUgZnVsbCBiYXNlIHdpZHRoIgBub21pbmFsX2Jhc2Vfd2lkdGggPiAwICYmICJub24tcG9zaXRpdmUgbm9taW5hbCBiYXNlIHdpZHRoIgAiIHdpZHRoPSIlZ3B4IiBoZWlnaHQ9IiVncHgiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIG1lZXQiIHg9IiVnIiB5PSIlZyIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB4PSIlZyIgeT0iJWciACBmb250LXNpemU9IiUuMmYiACBmaWxsLW9wYWNpdHk9IiVmIgA8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIgBpc2Zpbml0ZShtKSAmJiAiZWxsaXBzZSB0YW5nZW50IHNsb3BlIGlzIGluZmluaXRlIgAoeGItPmxvY2F0ZWQgPT0gQUdYQlVGX09OX0hFQVAgfHwgeGItPmxvY2F0ZWQgPD0gc2l6ZW9mKHhiLT5zdG9yZSkpICYmICJjb3JydXB0ZWQgYWd4YnVmIHR5cGUiACB0ZXh0LWFuY2hvcj0ibWlkZGxlIgA8YXJlYSBzaGFwZT0iY2lyY2xlIgBjZWxsLT5yb3cgKyBjZWxsLT5yb3dzcGFuIDw9IHRhYmxlLT5yb3dfY291bnQgJiYgImNlbGwgc3BhbnMgaGlnaGVyIHRoYW4gY29udGFpbmluZyB0YWJsZSIAY2VsbC5yb3cgKyBjZWxsLnJvd3NwYW4gPD0gdGFibGUtPnJvd19jb3VudCAmJiAiY2VsbCBzcGFucyBoaWdoZXIgdGhhbiBjb250YWluaW5nIHRhYmxlIgBjZWxsLT5jb2wgKyBjZWxsLT5jb2xzcGFuIDw9IHRhYmxlLT5jb2x1bW5fY291bnQgJiYgImNlbGwgc3BhbnMgd2lkZXIgdGhhbiBjb250YWluaW5nIHRhYmxlIgBjZWxsLmNvbCArIGNlbGwuY29sc3BhbiA8PSB0YWJsZS0+Y29sdW1uX2NvdW50ICYmICJjZWxsIHNwYW5zIHdpZGVyIHRoYW4gY29udGFpbmluZyB0YWJsZSIAb2xkX25tZW1iIDwgU0laRV9NQVggLyBzaXplICYmICJjbGFpbWVkIHByZXZpb3VzIGV4dGVudCBpcyB0b28gbGFyZ2UiAHRoZXRhID49IDAgJiYgdGhldGEgPD0gTV9QSSAmJiAidGhldGEgb3V0IG9mIHJhbmdlIgB0YWJsZS0+aGVpZ2h0cyA9PSBOVUxMICYmICJ0YWJsZSBoZWlnaHRzIGNvbXB1dGVkIHR3aWNlIgB0YWJsZS0+d2lkdGhzID09IE5VTEwgJiYgInRhYmxlIHdpZHRocyBjb21wdXRlZCB0d2ljZSIAIHRleHQtYW5jaG9yPSJlbmQiACBmb250LXdlaWdodD0iYm9sZCIAIGZvbnQtc3R5bGU9Iml0YWxpYyIAIGJhc2VsaW5lLXNoaWZ0PSJzdWIiAFwiAGxsZW4gPD0gSU5UX01BWCAmJiAiWE1MIHRva2VuIHRvbyBsb25nIGZvciBleHBhdCBBUEkiACIgcnk9IgBfcCIgc3RhcnRPZmZzZXQ9IjUwJSI+PHRzcGFuIHg9IjAiIGR5PSIAIiBjeT0iACIgeT0iACIgcng9IgAgY3g9IgAgeD0iACB0YXJnZXQ9IgAgcG9pbnRzPSIAIGNvb3Jkcz0iACB0ZXh0LWRlY29yYXRpb249IgAgZmlsbD0iACIgc3Ryb2tlLXdpZHRoPSIAPGltYWdlIHhsaW5rOmhyZWY9IgA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IgAiIG5hbWU9IgAgeGxpbms6dGl0bGU9IgAgdGl0bGU9IgAiIHN0cm9rZT0iADxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9IgA8ZGVmcz4KPHJhZGlhbEdyYWRpZW50IGlkPSIAPG1hcCBpZD0iADxnIGlkPSIAIGQ9IgAiIHkyPSIAIiB4Mj0iACIgeTE9IgB4MT0iACB2aWV3Qm94PSIlZC4wMCAlZC4wMCAlZC4wMCAlZC4wMCIAIHRyYW5zZm9ybT0icm90YXRlKCVkICVnICVnKSIAYWd4YmxlbigmY3R4LT5TYnVmKSA9PSAwICYmICJwZW5kaW5nIHN0cmluZyBkYXRhIHRoYXQgd2FzIG5vdCBjb25zdW1lZCAobWlzc2luZyAiICJlbmRzdHIoKS9lbmRodG1sc3RyKCk/KSIAIGFsdD0iIgBDeWNsZSBFcnJvciEAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAPCEtLSBHZW5lcmF0ZWQgYnkgACVzJXp1IC0jJTAyeCUwMnglMDJ4JTAyeCAAJXMlenUgLSMlMDJ4JTAyeCUwMnggACVjICV6dSAAdCAldSAAIGNyZWF0ZSB0ZXh0IAB4TGF5b3V0IABkZWZhdWx0IABzdHJpY3QgACVzJXp1IC0lcyAAIC1zbW9vdGggYmV6aWVyIAAgbW92ZXRvIAAgdmVyc2lvbiAAIGNyZWF0ZSBwb2x5Z29uIAAgLXRleHQgeyVzfSAtZmlsbCAAIGNyZWF0ZSBvdmFsIAAgLXdpZHRoIABuZXdwYXRoIABncmFwaCAAcywlLjVnLCUuNWcgACUuNWcsJS41ZywlLjVnLCUuNWcgAGUsJS41ZywlLjVnIAAlZyAlZyAAJS4wM2xmIAAlLjNmIAAlZCAlZCAlZCAlZCAlZCAlZCAlLjFmICUuNGYgJWQgJS4xZiAlLjFmICUuMGYgJS4wZiAAIC1vdXRsaW5lIAAgY3JlYXRlIGxpbmUgAG5vZGUgACVkIABUb3RhbCBzaXplID4gMSBpbiAiJXMiIGNvbG9yIHNwZWMgAFsgL1JlY3QgWyAAVCAAUyAAT1BFTiAASSAARiAARSAAQyAAIC0+IABSYW5rIHNlcGFyYXRpb24gPSAAVW5zYXRpc2ZpZWQgY29uc3RyYWludDogAENhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzOiAAJXM6IABTb2x2aW5nIG1vZGVsOiAAU2V0dGluZyB1cCBzcHJpbmcgbW9kZWw6IABjb252ZXJ0IGdyYXBoOiAAIFRpdGxlOiAAW0dyYXBodml6XSAlczolZDogJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiAAInRleHQiOiAAeyJmcmFjIjogJS4wM2YsICJjb2xvciI6IAAibmFtZSI6IAAic3R5bGUiOiAAImZhY2UiOiAAMiAAPCEtLSAAIC0tIAAlIABfcCIgAGxfJWQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAADSAgICAgICAgICAgICAgICBpdGVyID0gJWQsIHN0ZXAgPSAlZiBGbm9ybSA9ICVmIG56ID0gJXp1ICBLID0gJWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAogICAgADoJIAAgICAgJXN9CgB0cnlpbmcgdG8gYWRkIHRvIHJlY3QgeyVmICsvLSAlZiwgJWYgKy8tICVmfQoAI2RlZmF1bHQgeyBmaW5pc2ggeyBhbWJpZW50IDAuMSBkaWZmdXNlIDAuOSB9IH0KAHBpZ21lbnQgeyBjb2xvciAlcyB9CgBsaWdodF9zb3VyY2UgeyA8MTUwMCwzMDAwLC0yNTAwPiBjb2xvciBXaGl0ZSB9CgBnbG9iYWxfc2V0dGluZ3MgeyBhc3N1bWVkX2dhbW1hIDEuMCB9CgAgICAgdGV4dHVyZSBJbWFnZVRleHR1cmUgeyB1cmwgIiVzIiB9CgAgICAgfQoALy9za3kKcGxhbmUgeyA8MCwgMSwgMD4sIDEgaG9sbG93CiAgICB0ZXh0dXJlIHsKICAgICAgICBwaWdtZW50IHsgYm96byB0dXJidWxlbmNlIDAuOTUKICAgICAgICAgICAgY29sb3JfbWFwIHsKICAgICAgICAgICAgICAgIFswLjAwIHJnYiA8MC4wNSwgMC4yMCwgMC41MD5dCiAgICAgICAgICAgICAgICBbMC41MCByZ2IgPDAuMDUsIDAuMjAsIDAuNTA+XQogICAgICAgICAgICAgICAgWzAuNzUgcmdiIDwxLjAwLCAxLjAwLCAxLjAwPl0KICAgICAgICAgICAgICAgIFswLjc1IHJnYiA8MC4yNSwgMC4yNSwgMC4yNT5dCiAgICAgICAgICAgICAgICBbMS4wMCByZ2IgPDAuNTAsIDAuNTAsIDAuNTA+XQogICAgICAgICAgICB9CiAgICAgICAgICAgIHNjYWxlIDwxLjAwLCAxLjAwLCAxLjUwPiAqIDIuNTAKICAgICAgICAgICAgdHJhbnNsYXRlIDwwLjAwLCAwLjAwLCAwLjAwPgogICAgICAgIH0KICAgICAgICBmaW5pc2ggeyBhbWJpZW50IDEgZGlmZnVzZSAwIH0KICAgIH0KICAgIHNjYWxlIDEwMDAwCn0KLy9taXN0CmZvZyB7IGZvZ190eXBlIDIKICAgIGRpc3RhbmNlIDUwCiAgICBjb2xvciByZ2IgPDEuMDAsIDEuMDAsIDEuMDA+ICog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aWR0aCBvciBoZWlnaHQKAGZpeGVkIHRhYmxlIHNpemUgd2l0aCB1bnNwZWNpZmllZCB3aWR0aCBvciBoZWlnaHQKAHBvcyBhdHRyaWJ1dGUgZm9yIGVkZ2UgKCVzLCVzKSBkb2Vzbid0IGhhdmUgM24rMSBwb2ludHMKACAgZ2VuZXJhdGVkICVkIGNvbnN0cmFpbnRzCgBzcGxpbmVzIGFuZCBjbHVzdGVyIGVkZ2VzIG5vdCBzdXBwb3J0ZWQgLSB1c2luZyBsaW5lIHNlZ21lbnRzCgBvYmplY3RzCgBXYXJuaW5nOiBub2RlICVzLCBwb3NpdGlvbiAlcywgZXhwZWN0ZWQgdHdvIGZsb2F0cwoAZm9udCBuYW1lICVzIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBtYXkgbm90IGJlIGFjY2VwdGVkIGJ5IHNvbWUgUFMgdmlld2VycwoAZm9udCBuYW1lICVzIGlzIGxvbmdlciB0aGFuIDI5IGNoYXJhY3RlcnMgd2hpY2ggbWF5IGJlIHJlamVjdGVkIGJ5IHNvbWUgUFMgdmlld2VycwoAY2Fubm90IGFsbG9jYXRlIHBzCgBzY2FsZT0xLjAgJXMgcmVxdWlyZWQgZm9yIGNvbXBhcmlzb25zCgBTZXR0aW5nIGluaXRpYWwgcG9zaXRpb25zCgAlcyBEV0IgMiBjb21wYXRpYmlsaXR5IGRlZmluaXRpb25zCgBhcnJheSBwYWNraW5nOiAlcyAlenUgcm93cyAlenUgY29sdW1ucwoAc3ludGF4IGFtYmlndWl0eSAtIGJhZGx5IGRlbGltaXRlZCBudW1iZXIgJyVzJyBpbiBsaW5lICVkIG9mICVzIHNwbGl0cyBpbnRvIHR3byB0b2tlbnMKAGVkZ2UgbGFiZWxzIHdpdGggc3BsaW5lcz1jdXJ2ZWQgbm90IHN1cHBvcnRlZCBpbiBkb3QgLSB1c2UgeGxhYmVscwoAZmxhdCBlZGdlIGJldHdlZW4gYWRqYWNlbnQgbm9kZXMgb25lIG9mIHdoaWNoIGhhcyBhIHJlY29yZCBzaGFwZSAtIHJlcGxhY2UgcmVjb3JkcyB3aXRoIEhUTUwtbGlrZSBsYWJlbHMKAG91dCBvZiBtZW1vcnkgd2hlbiB0cnlpbmcgdG8gYWxsb2NhdGUgJXp1IGJ5dGVzCgBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gdHJ5aW5nIHRvIGFsbG9jYXRlICV6dSAqICV6dSBieXRlcwoAdXBkYXRlOiBtaXNtYXRjaGVkIGxjYSBpbiB0cmVldXBkYXRlcwoAZ3JhcGggJXMsIGNvb3JkICVzLCBleHBlY3RlZCBmb3VyIGRvdWJsZXMKAG5vZGUgJXMsIHBvc2l0aW9uICVzLCBleHBlY3RlZCB0d28gZG91YmxlcwoARm91bmQgJWQgRGlHLUNvTGEgYm91bmRhcmllcwoASW5jaGVzCgAoJTR6dSkgJTd6dSBub2RlcyAlN3p1IGVkZ2VzCgBjb21wb3VuZEVkZ2VzOiBjb3VsZCBub3QgY29uc3RydWN0IG9ic3RhY2xlcyAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgB0aGUgYm91bmRpbmcgYm94ZXMgb2Ygc29tZSBub2RlcyB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBjb21wb3VuZEVkZ2VzOiBub2RlcyB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBzb21lIG5vZGVzIHdpdGggbWFyZ2luICglLjAyZiwlLjAyZikgdG91Y2ggLSBmYWxsaW5nIGJhY2sgdG8gc3RyYWlnaHQgbGluZSBlZGdlcwoAbWVyZ2UyOiBncmFwaCAlcywgcmFuayAlZCBoYXMgb25seSAlZCA8ICVkIG5vZGVzCgBTY2FubmluZyBncmFwaCAlcywgJWQgbm9kZXMKAFdhcm5pbmc6IG5vIGhhcmQtY29kZWQgbWV0cmljcyBmb3IgJyVzJy4gIEZhbGxpbmcgYmFjayB0byAnVGltZXMnIG1ldHJpY3MKAGluIGVkZ2UgJXMlcyVzCgBVc2luZyAlczogJXM6JXMKAEZvcm1hdDogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoATGF5b3V0IHR5cGU6ICIlcyIgbm90IHJlY29nbml6ZWQuIFVzZSBvbmUgb2Y6JXMKAGxheW91dCAlcwoALmZ0ICVzCgBiYWQgbGFiZWwgZm9ybWF0ICVzCgBpbiByb3V0ZXNwbGluZXMsIGVkZ2UgaXMgYSBsb29wIGF0ICVzCgAgICAgICAgJTdkIG5vZGVzICU3ZCBlZGdlcyAlN3p1IGNvbXBvbmVudHMgJXMKAGluIGxhYmVsIG9mIGVkZ2UgJXMgJXMgJXMKACAgRWRnZSAlcyAlcyAlcwoAb3J0aG8gJXMgJXMKAHBvbHlsaW5lICVzICVzCgBzcGxpbmUgJXMgJXMKAHJlY3RhbmdsZSAoJS4wZiwlLjBmKSAoJS4wZiwlLjBmKSAlcyAlcwoAaW4gY2x1c3RlciAlcwoAJXMgd2FzIGFscmVhZHkgaW4gYSByYW5rc2V0LCBkZWxldGVkIGZyb20gY2x1c3RlciAlcwoAJXMgLT4gJXM6IHRhaWwgbm90IGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiBoZWFkIGlzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAGhlYWQgY2x1c3RlciAlcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgBoZWFkIG5vZGUgJXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAJXMgLT4gJXM6IGhlYWQgbm90IGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiB0YWlsIGlzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAHRhaWwgY2x1c3RlciAlcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgB0YWlsIG5vZGUgJXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAVW5oYW5kbGVkIGFkanVzdCBvcHRpb24gJXMKAHJlcG9zaXRpb24gJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggeGxhYmVsICVzCgBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIHRhaWwgbGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggbGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggaGVhZCBsYWJlbCAlcwoALy8qKiogYmVnaW5fZ3JhcGggJXMKAE1heC4gaXRlcmF0aW9ucyAoJWQpIHJlYWNoZWQgb24gZ3JhcGggJXMKAENvdWxkIG5vdCBwYXJzZSAiX2JhY2tncm91bmQiIGF0dHJpYnV0ZSBpbiBncmFwaCAlcwoAaW4gbGFiZWwgb2YgZ3JhcGggJXMKAENyZWF0aW5nIGVkZ2VzIHVzaW5nICVzCgBBZGp1c3RpbmcgJXMgdXNpbmcgJXMKACVzIHdoaWxlIG9wZW5pbmcgJXMKAGRlcml2ZSBncmFwaCBfZGdfJWQgb2YgJXMKACBdICAlenUgdHJ1ZSAlcwoAXSAgJWQgdHJ1ZSAlcwoAIF0gICV6dSBmYWxzZSAlcwoAXSAgJWQgZmFsc2UgJXMKAG1ha2VQb2x5OiB1bmtub3duIHNoYXBlIHR5cGUgJXMKAG1ha2VBZGRQb2x5OiB1bmtub3duIHNoYXBlIHR5cGUgJXMKAHVzaW5nICVzIGZvciB1bmtub3duIHNoYXBlICVzCgAgIG9jdHJlZSBzY2hlbWUgJXMKAGNhbid0IG9wZW4gbGlicmFyeSBmaWxlICVzCgBjYW4ndCBmaW5kIGxpYnJhcnkgZmlsZSAlcwoAQm91bmRpbmdCb3ggbm90IGZvdW5kIGluIGVwc2YgZmlsZSAlcwoAY291bGRuJ3Qgb3BlbiBlcHNmIGZpbGUgJXMKAGNvdWxkbid0IHJlYWQgZnJvbSBlcHNmIGZpbGUgJXMKAGluIG5vZGUgJXMKAHNoYXBlZmlsZSBub3Qgc2V0IG9yIG5vdCBmb3VuZCBmb3IgZXBzZiBub2RlICVzCgBpbiBsYWJlbCBvZiBub2RlICVzCgBlbmQgJXMKAHJhbmtpbmc6IGZhaWx1cmUgdG8gY3JlYXRlIHN0cm9uZyBjb25zdHJhaW50IGVkZ2UgYmV0d2VlbiBub2RlcyAlcyBhbmQgJXMKAG9vcHMsIGludGVybmFsIGVycm9yOiB1bmhhbmRsZWQgY29sb3IgdHlwZT0lZCAlcwoAJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlZCAlZCAlZCAlZCAlZCAlZAogJWQgJXMKAC8vKioqIHRleHRzcGFuOiAlcywgZm9udHNpemUgPSAlLjNmLCBmb250bmFtZSA9ICVzCgB0cmllcyA9ICVkLCBtb2RlID0gJXMKAC8vKioqIGNvbW1lbnQ6ICVzCgBmYWlsZWQgdG8gcmVzZXJ2ZSAlenUgZWxlbWVudHMgb2Ygc2l6ZSAlenUgYnl0ZXM6ICVzCgBmb250bmFtZTogIiVzIiByZXNvbHZlZCB0bzogJXMKACUlJSVQYWdlT3JpZW50YXRpb246ICVzCgBkZWxhdW5heV90cmlhbmd1bGF0aW9uOiAlcwoAZGVsYXVuYXlfdHJpOiAlcwoAZ3ZwcmludGY6ICVzCgBuZXN0aW5nIG5vdCBhbGxvd2VkIGluIHN0eWxlOiAlcwoAdW5tYXRjaGVkICcpJyBpbiBzdHlsZTogJXMKAHVubWF0Y2hlZCAnKCcgaW4gc3R5bGU6ICVzCgAlJSUlVGl0bGU6ICVzCgAlcyBUaXRsZTogJXMKACMgVGl0bGU6ICVzCgAvLyoqKiBiZWdpbl9ub2RlOiAlcwoAbGliL3BhdGhwbGFuLyVzOiVkOiAlcwoAZ3JpZCglZCwlZCk6ICVzCgBDb3VsZCBub3Qgb3BlbiAiJXMiIGZvciB3cml0aW5nIDogJXMKAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgAgWyV6dV0gJXAgc2V0ICVkICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcwoAJSUgJXMKACMgJXMKACAgbW9kZSAgICVzCgBsaXN0IGVsZW1lbnQgdHlwZSBpcyBub3QgYSBwb2ludGVyLCBidXQgYGZyZWVgIHVzZWQgYXMgZGVzdHJ1Y3RvcgoAY29uanVnYXRlX2dyYWRpZW50OiB1bmV4cGVjdGVkIGxlbmd0aCAwIHZlY3RvcgoAJXMgdG8gY2hhbmdlIGRyYXdpbmcgc2l6ZSwgbXVsdGlwbHkgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb24gdGhlIC5QUyBsaW5lIGFib3ZlIGFuZCB0aGUgbnVtYmVyIG9uIHRoZSB0d28gbGluZXMgYmVsb3cgKHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikgYnkgYSBzY2FsZSBmYWN0b3IKAGFkZF9zZWdtZW50OiBlcnJvcgoAJS41ZyAlLjVnICUuNWcgJXNjb2xvcgoAMCAwIDAgZWRnZWNvbG9yCgAwLjggMC44IDAuOCBzZXRyZ2Jjb2xvcgoAMCAwIDEgc2V0cmdiY29sb3IKADEgMCAwIHNldHJnYmNvbG9yCgAwIDAgMCBzZXRyZ2Jjb2xvcgoAJWQgJWQgc2V0bGF5ZXIKAC8vKioqIGVuZF9sYXllcgoAVVRGLTggaW5wdXQgdXNlcyBub24tTGF0aW4xIGNoYXJhY3RlcnMgd2hpY2ggY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBQb3N0U2NyaXB0IGRyaXZlcgoATGV0dGVyCgAvLyoqKiBiZWdpbl9jbHVzdGVyCgAvLyoqKiBlbmRfY2x1c3RlcgoAcmVtb3ZpbmcgZW1wdHkgY2x1c3RlcgoAQ2VudGVyCgBXYXJuaW5nOiBubyB2YWx1ZSBmb3Igd2lkdGggb2Ygbm9uLUFTQ0lJIGNoYXJhY3RlciAldS4gRmFsbGluZyBiYWNrIHRvIHdpZHRoIG9mIHNwYWNlIGNoYXJhY3RlcgoAYmFzZSByZWZlcmVyCgAlJVBhZ2VUcmFpbGVyCgAlJVRyYWlsZXIKAC8vKioqIGJlemllcgoAIiVzIiB3YXMgbm90IGZvdW5kIGFzIGEgZmlsZSBvciBhcyBhIHNoYXBlIGxpYnJhcnkgbWVtYmVyCgBzdG9wCgAgY3VydmV0bwoAbmV3cGF0aCAlLjBmICUuMGYgbW92ZXRvCgAlLjBmICUuMGYgbGluZXRvCgAgbGF5b3V0PW5lYXRvCgBub2RlICVzIGluIGdyYXBoICVzIGhhcyBubyBwb3NpdGlvbgoAJXMgbWF4cHNodCBhbmQgbWF4cHN3aWQgaGF2ZSBubyBtZWFuaW5nIGluIERXQiAyLjAsIHNldCBwYWdlIGJvdW5kYXJpZXMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaGFzIG5vIG1lYW5pbmcgaW4gRFdCIDIsIGFycm93aGVhZCA9IDcgbWFrZXMgZmlsbGVkIGFycm93aGVhZHMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaXMgdW5kZWZpbmVkIGluIERXQiAyLCBpbml0aWFsbHkgMSBpbiBncGljLCAyIGluIDEwdGggRWRpdGlvbgoAbWFqb3JpemF0aW9uCgAvLyoqKiBwb2x5Z29uCgBvdmVyZmxvdyB3aGVuIGNvbXB1dGluZyBlZGdlIHdlaWdodCBzdW0KAHNmZHAgb25seSBzdXBwb3J0cyBzdGFydD1yYW5kb20KAG5vZGUgcG9zaXRpb25zIGFyZSBpZ25vcmVkIHVubGVzcyBzdGFydD1yYW5kb20KAGNsb3NlcGF0aCBmaWxsCgAgZWxsaXBzZV9wYXRoIGZpbGwKACAgJS4wZiAlLjBmIGNlbGwKACVmICVmICVmICVmIGNlbGwKAGdyYXBoICVzIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBncmFwaCBpcyBkaXNjb25uZWN0ZWQuIEhlbmNlLCB0aGUgY2lyY3VpdCBtb2RlbAoAZWRnZXMgaW4gZ3JhcGggJXMgaGF2ZSBubyBsZW4gYXR0cmlidXRlLiBIZW5jZSwgdGhlIG1kcyBtb2RlbAoAY2lyY3VpdCBtb2RlbCBub3QgeWV0IHN1cHBvcnRlZCBpbiBHbW9kZT1zZ2QsIHJldmVydGluZyB0byBzaG9ydHBhdGggbW9kZWwKAG1kcyBtb2RlbCBub3QgeWV0IHN1cHBvcnRlZCBpbiBHbW9kZT1zZ2QsIHJldmVydGluZyB0byBzaG9ydHBhdGggbW9kZWwKAG5vZGUgJyVzJywgZ3JhcGggJyVzJyBzaXplIHRvbyBzbWFsbCBmb3IgbGFiZWwKACVzIERXQiAyIGRvZXNuJ3QgdXNlIGZpbGwgYW5kIGRvZXNuJ3QgZGVmaW5lIGZpbGx2YWwKAFsge0NhdGFsb2d9IDw8IC9VUkkgPDwgL0Jhc2UgJXMgPj4gPj4KL1BVVCBwZGZtYXJrCgBbIC9Dcm9wQm94IFslZCAlZCAlZCAlZF0gL1BBR0VTIHBkZm1hcmsKACAgL0JvcmRlciBbIDAgMCAwIF0KICAvQWN0aW9uIDw8IC9TdWJ0eXBlIC9VUkkgL1VSSSAlcyA+PgogIC9TdWJ0eXBlIC9MaW5rCi9BTk4gcGRmbWFyawoAdHJvdWJsZSBpbiBpbml0X3JhbmsKAGxpbmV0aGljayA9IDA7IG9sZGxpbmV0aGljayA9IGxpbmV0aGljawoAIHNldGxpbmV3aWR0aAoAZ3NhdmUKJWQgJWQgJWQgJWQgYm94cHJpbSBjbGlwIG5ld3BhdGgKAGdzYXZlICVnICVnIHRyYW5zbGF0ZSBuZXdwYXRoCgAvLyoqKiBlbmRfZ3JhcGgKAGxheW91dCBhdHRyaWJ1dGUgaXMgaW52YWxpZCBleGNlcHQgb24gdGhlIHJvb3QgZ3JhcGgKAGluIGNoZWNrcGF0aCwgYm94ZXMgJXp1IGFuZCAlenUgZG9uJ3QgdG91Y2gKAG1lcmdlX29uZXdheSBnbGl0Y2gKACVzIGRvbid0IGNoYW5nZSBhbnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgaW4gdGhpcyBkcmF3aW5nCgBOb2RlIG5vdCBhZGphY2VudCB0byBjZWxsIC0tIEFib3J0aW5nCgBpbmNvbXBhcmFibGUgc2VnbWVudHMgISEgLS0gQWJvcnRpbmcKAEFsdGVybmF0aXZlbHksIGNvbnNpZGVyIHJ1bm5pbmcgbmVhdG8gdXNpbmcgLUdwYWNrPXRydWUgb3IgZGVjb21wb3NpbmcKAGxhYmVsX3NjaGVtZSA9ICVkID4gNCA6IGlnbm9yaW5nCgBndnJlbmRlcl9zZXRfc3R5bGU6IHVuc3VwcG9ydGVkIHN0eWxlICVzIC0gaWdub3JpbmcKAEFycm93IHR5cGUgIiVzIiB1bmtub3duIC0gaWdub3JpbmcKAGZkcCBkb2VzIG5vdCBzdXBwb3J0IHN0YXJ0PXNlbGYgLSBpZ25vcmluZwoAJXMgYXR0cmlidXRlIHZhbHVlIG11c3QgYmUgMSBvciAyIC0gaWdub3JpbmcKAE1vcmUgdGhhbiAyIGNvbG9ycyBzcGVjaWZpZWQgZm9yIGEgZ3JhZGllbnQgLSBpZ25vcmluZyByZW1haW5pbmcKAGFzIHJlcXVpcmVkIGJ5IHRoZSAtbiBmbGFnCgBiYlslc10gJS41ZyAlLjVnICUuNWcgJS41ZwoAL3BhdGhib3ggewogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC9YIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQogfSBkZWYKL2RiZ3N0YXJ0IHsgZ3NhdmUgJS41ZyAlLjVnIHRyYW5zbGF0ZSB9IGRlZgovYXJyb3dsZW5ndGggMTAgZGVmCi9hcnJvd3dpZHRoIGFycm93bGVuZ3RoIDIgZGl2IGRlZgovYXJyb3doZWFkIHsKICAgIGdzYXZlCiAgICByb3RhdGUKICAgIGN1cnJlbnRwb2ludAogICAgbmV3cGF0aAogICAgbW92ZXRvCiAgICBhcnJvd2xlbmd0aCBhcnJvd3dpZHRoIDIgZGl2IHJsaW5ldG8KICAgIDAgYXJyb3d3aWR0aCBuZWcgcmxpbmV0bwogICAgY2xvc2VwYXRoIGZpbGwKICAgIGdyZXN0b3JlCn0gYmluZCBkZWYKL21ha2VhcnJvdyB7CiAgICBjdXJyZW50cG9pbnQgZXhjaCBwb3Agc3ViIGV4Y2ggY3VycmVudHBvaW50IHBvcCBzdWIgYXRhbgogICAgYXJyb3doZWFkCn0gYmluZCBkZWYKL3BvaW50IHsgICAgbmV3cGF0aCAgICAyIDAgMzYwIGFyYyBmaWxsfSBkZWYvbWFrZXZlYyB7CiAgICAvWSBleGNoIGRlZgogICAgL1ggZXhjaCBkZWYKICAgIC95IGV4Y2ggZGVmCiAgICAveCBleGNoIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIFkgbGluZXRvIHN0cm9rZQogICAgWCBZIG1vdmV0bwogICAgeCB5IG1ha2VhcnJvdwp9IGRlZgoAL3BhdGhib3ggewogICAgL1ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgAlIVBTLUFkb2JlLTIuMAovbm9kZSB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBmaWxsCn0gZGVmCi9jZWxsIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAfSBiaW5kIGRlZgoALlBTICUuNWYgJS41ZgoAb3ZlcmxhcDogJXMgdmFsdWUgJWQgc2NhbGluZyAlLjA0ZgoAICBiZWF1dGlmeV9sZWF2ZXMgJWQgbm9kZSB3ZWlnaHRzICVkIHJvdGF0aW9uICUuMDNmCgAgIHJlcHVsc2l2ZSBleHBvbmVudDogJS4wM2YKACAgSyA6ICUuMDNmIEMgOiAlLjAzZgoAJXMgJS4zZgoACmludGVyc2VjdGlvbiBhdCAlLjNmICUuM2YKACAgICBzY2FsZSAlLjNmCgB0b3J1cyB7ICUuM2YsICUuM2YKACAgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4sICUuM2YKACBpbiAlcyAtIHNldHRpbmcgdG8gJS4wMmYKAGNpcmNsZSAlcyAlLjBmLCUuMGYsJS4wZgoAcmVjdCAlcyAlLjBmLCUuMGYgJS4wZiwlLjBmCgAlZCAlZCAlZCAlLjBmICVkICVkICVkICVkICVkICUuM2YgJWQgJS40ZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYKACAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmCgAlJSUlUGFnZTogMSAxCiUlJSVQYWdlQm91bmRpbmdCb3g6ICUuMGYgJS4wZiAlLjBmICUuMGYKAHBvc1slenVdICUuMGYgJS4wZgoALm5yIFNGICUuMGYKc2NhbGV0aGlja25lc3MgPSAlLjBmCgAlcyBzYXZlIHBvaW50IHNpemUgYW5kIGZvbnQKLm5yIC5TIFxuKC5zCi5uciBERiBcbiguZgoAc2hvd3BhZ2UKJSUlJVRyYWlsZXIKJSUlJUJvdW5kaW5nQm94OiAlLmYgJS5mICUuZiAlLmYKAGFkZGluZyAlenUgaXRlbXMsIHRvdGFsIGFyZWEgPSAlZiwgdyA9ICVmLCBhcmVhL3c9JWYKAGdhcD0lZiwlZgoAICBhc3BlY3QgJWYKAGEgJWYgYiAlZiBjICVmIGQgJWYgciAlZgoAbW9kZWwgJWQgc21hcnRfaW5pdCAlZCBzdHJlc3N3dCAlZCBpdGVyYXRpb25zICVkIHRvbCAlZgoAU29sdmluZyBtb2RlbCAlZCBpdGVyYXRpb25zICVkIHRvbCAlZgoAJXMgY29vcmQgJS41ZyAlLjVnIGh0ICVmIHdpZHRoICVmCgByZWMgJWYgJWYgJWYgJWYKACVzIDogJWYgJWYgJWYgJWYKACVzIDogJWYgJWYKAG1heHBzaHQgPSAlZgptYXhwc3dpZCA9ICVmCgBtZHNNb2RlbDogZGVsdGEgPSAlZgoAIHIxICVmIHIyICVmCgBQYWNraW5nOiBjb21wdXRlIGdyaWQgc2l6ZQoAZ3NhdmUKACUlRW5kQ29tbWVudHMKc2F2ZQoAVW5yZWNvZ25pemVkIGNoYXJhY3RlciAnJWMnICglZCkgaW4gc2lkZXMgYXR0cmlidXRlCgBJbWFnZXMgdW5zdXBwb3J0ZWQgaW4gImJhY2tncm91bmQiIGF0dHJpYnV0ZQoAJXMgR05VIHBpYyB2cy4gMTB0aCBFZGl0aW9uIGRcKGUndGVudGUKAHJlc2V0ICVzIHNldCB0byBrbm93biBzdGF0ZQoAJWcgJWcgc2V0X3NjYWxlICVkIHJvdGF0ZSAlZyAlZyB0cmFuc2xhdGUKACVmICVmIHRyYW5zbGF0ZQoAJWQgJWQgdHJhbnNsYXRlCgAvLyoqKiBlbGxpcHNlCgBVbnJlY29nbml6ZWQgb3ZlcmxhcCB2YWx1ZSAiJXMiIC0gdXNpbmcgZmFsc2UKAG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKACVzOiB2c25wcmludGYgZmFpbHVyZQoAZW5kcGFnZQpzaG93cGFnZQpncmVzdG9yZQoAZW5kCnJlc3RvcmUKAGxheW91dCB3YXMgbm90IGRvbmUKAExheW91dCB3YXMgbm90IGRvbmUKAC8vKioqIHBvbHlsaW5lCgB0cnlpbmcgdG8gZGVsZXRlIGEgbm9uLWxpbmUKACMgZW5kIG9mIEZJRyBmaWxlCgBTaW5nbGUKAHJlbmRlcmVyIGZvciAlcyBpcyB1bmF2YWlsYWJsZQoAZHluYW1pYyBsb2FkaW5nIG5vdCBhdmFpbGFibGUKACUuMGYgJS4wZiBsaW5ldG8gc3Ryb2tlCgBjbG9zZXBhdGggc3Ryb2tlCgAgZWxsaXBzZV9wYXRoIHN0cm9rZQoALy8qKiogYmVnaW5fZWRnZQoALy8qKiogZW5kX2VkZ2UKAGxvc3QgJXMgJXMgZWRnZQoAb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB2aXJ0dWFsIHdlaWdodCBvZiBlZGdlCgBhZGRfdHJlZV9lZGdlOiBtaXNzaW5nIHRyZWUgZWRnZQoAaW4gcm91dGVzcGxpbmVzLCBjYW5ub3QgZmluZCBOT1JNQUwgZWRnZQoAc2hvd3BhZ2UKACVkICVkICVkIGJlZ2lucGFnZQoALy8qKiogYmVnaW5fcGFnZQoALy8qKiogZW5kX3BhZ2UKAEZpbGVuYW1lICIlcyIgaXMgdW5zYWZlCgBsYWJlbDogYXJlYSB0b28gbGFyZ2UgZm9yIHJ0cmVlCgAvLyoqKiBlbmRfbm9kZQoAVXNpbmcgZGVmYXVsdCBjYWxjdWxhdGlvbiBmb3Igcm9vdCBub2RlCgBjb250YWluX25vZGVzIGNsdXN0ICVzIHJhbmsgJWQgbWlzc2luZyBub2RlCgAlZiAlZiAlZiAlZiBub2RlCgA8PCAvUGFnZVNpemUgWyVkICVkXSA+PiBzZXRwYWdlZGV2aWNlCgBpbiBjaGVja3BhdGgsIGJveCAlenUgaGFzIExMIGNvb3JkID4gVVIgY29vcmQKAGluIGNoZWNrcGF0aCwgYm94IDAgaGFzIExMIGNvb3JkID4gVVIgY29vcmQKAGNsdXN0ZXIgbmFtZWQgJXMgbm90IGZvdW5kCgBtaW5jcm9zczogcGFzcyAlZCBpdGVyICVkIHRyeWluZyAlZCBjdXJfY3Jvc3MgJWxsZCBiZXN0X2Nyb3NzICVsbGQKAG5vZGUgJXMsIHBvcnQgJXMgdW5yZWNvZ25pemVkCgAlcyVzIHVuc3VwcG9ydGVkCgBjbHVzdGVyIGN5Y2xlICVzIC0tICVzIG5vdCBzdXBwb3J0ZWQKACVzIC0+ICVzOiBzcGxpbmUgc2l6ZSA+IDEgbm90IHN1cHBvcnRlZAoAbGF5b3V0IGFib3J0ZWQKAHBhZ2VkaXI9JXMgaWdub3JlZAoAVHdvIGNsdXN0ZXJzIG5hbWVkICVzIC0gdGhlIHNlY29uZCB3aWxsIGJlIGlnbm9yZWQKAElsbGVnYWwgYXR0cmlidXRlICVzIGluICVzIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgYXR0cmlidXRlICJtb2RlbCIgaW4gZ3JhcGggJXMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGUiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAc3RhcnQ9MCBub3Qgc3VwcG9ydGVkIHdpdGggbW9kZT1zZWxmIC0gaWdub3JlZAoAT3ZlcmxhcCB2YWx1ZSAiJXMiIHVuc3VwcG9ydGVkIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgUk9XUyAtIGlnbm9yZWQKAFVua25vd24gdmFsdWUgJXMgZm9yIENPTFVNTlMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBWQUxJR04gLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJXMgZm9yIEZJWEVEU0laRSAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJS4qcyBmb3IgU1RZTEUgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBCQUxJR04gaW4gVEQgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiBpbiBURCAtIGlnbm9yZWQKAFJPV1NQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBDT0xTUEFOIHZhbHVlIGNhbm5vdCBiZSAwIC0gaWdub3JlZAoAbm9kZSAlcywgcG9ydCAlcywgdW5yZWNvZ25pemVkIGNvbXBhc3MgcG9pbnQgJyVzJyAtIGlnbm9yZWQKAFVua25vd24gInNwbGluZXMiIHZhbHVlOiAiJXMiIC0gaWdub3JlZAoAaW4gcm91dGVzcGxpbmVzLCBQc2hvcnRlc3RwYXRoIGZhaWxlZAoAaW4gcm91dGVzcGxpbmVzLCBQcm91dGVzcGxpbmUgZmFpbGVkCgAjIHBsdWdpbiBsb2FkaW5nIG9mIGRlcGVuZGVuY3kgIiUuKnMiIGZhaWxlZAoAUGFyc2luZyBvZiAiJXMiIGZhaWxlZAoAJXM6JWQ6IGNsYWltZWQgdW5yZWFjaGFibGUgY29kZSB3YXMgcmVhY2hlZAoAIyB1bnN1Y2Nlc3NmdWwgcGx1Z2luIGxvYWQKACUuNWcgJS41ZyB0cmFuc2xhdGUgbmV3cGF0aCB1c2VyX3NoYXBlXyVkCgBuc2l6ZXNjYWxlPSVmLGl0ZXJhdGlvbnM9JWQKAGN0cmwtPm92ZXJsYXA9JWQKACVzICV6dSBub2RlcyAlenUgZWRnZXMgbWF4aXRlcj0lZCBiYWxhbmNlPSVkCgAvLyoqKiBiZWdpbl9sYXllcjogJXMsICVkLyVkCgBkZWdlbmVyYXRlIGNvbmNlbnRyYXRlZCByYW5rICVzLCVkCgAgIG1heCBsZXZlbHMgJWQKAAklcyAlZAoAICBCYXJuZXMtSHV0dCBjb25zdGFudCAlLjAzZiB0b2xlcmFuY2UgICUuMDNmIG1heGl0ZXIgJWQKAGd2d3JpdGVfbm9feiBwcm9ibGVtICVkCgAgIHF1YWR0cmVlIHNpemUgJWQgbWF4X2xldmVsICVkCgByZWJ1aWxkX3ZsaXN0czogbGVhZCBpcyBudWxsIGZvciByYW5rICVkCgByZWJ1aWxkX3ZsaXN0czogcmFuayBsZWFkICVzIG5vdCBpbiBvcmRlciAlZCBvZiByYW5rICVkCgAgIHNtb290aGluZyAlcyBvdmVybGFwICVkIGluaXRpYWxfc2NhbGluZyAlLjAzZiBkb19zaHJpbmtpbmcgJWQKACAgY29vbGluZyAlLjAzZiBzdGVwIHNpemUgICUuMDNmIGFkYXB0aXZlICVkCgBVbnN1cHBvcnRlZCBjaGFyc2V0IHZhbHVlICVkCgBpbiByb3V0ZXNwbGluZXMsIGlsbGVnYWwgdmFsdWVzIG9mIHByZXYgJWQgYW5kIG5leHQgJWQsIGxpbmUgJWQKACAgZWRnZV9sYWJlbGluZ19zY2hlbWUgJWQKAGFnZGljdG9mOiB1bmtub3duIGtpbmQgJWQKACAgcmFuZG9tIHN0YXJ0ICVkIHNlZWQgJWQKACVkICVkICVkICUuMGYgJWQgJWQgJWQgJWQgJWQgJS4xZiAlZCAlZCAlZCAlZAoAJSUlJVBhZ2VCb3VuZGluZ0JveDogJWQgJWQgJWQgJWQKACUlJSVCb3VuZGluZ0JveDogJWQgJWQgJWQgJWQKACUlJSVQYWdlOiAlZCAlZAoAJXMgbm8uIGNlbGxzICVkIFcgJWQgSCAlZAoATWF4cmFuayA9ICVkLCBtaW5yYW5rID0gJWQKAHN0ZXAgc2l6ZSA9ICVkCgAlJSUlUGFnZXM6ICVkCgAjIFBhZ2VzOiAlZAoAJSUlJUVuZFBhZ2U6ICVkCgAiZm9udGNoYXIiOiAlZAoAICBmbGFncyAgJWQKACAgc2l6ZSAgICVkCgAlcyBkYXNod2lkIGlzIDAuMSBpbiAxMHRoIEVkaXRpb24sIDAuMDUgaW4gRFdCIDIgYW5kIGluIGdwaWMKACVzIG1heHBzaHQgYW5kIG1heHBzd2lkIGFyZSBwcmVkZWZpbmVkIHRvIDExLjAgYW5kIDguNSBpbiBncGljCgAgJWQlcyBpdGVyYXRpb25zICUuMmYgc2VjCgAKZmluYWwgZSA9ICVmICVkIGl0ZXJhdGlvbnMgJS4yZiBzZWMKACVkIG5vZGVzICUuMmYgc2VjCgAlcyV6dSBub2RlcyAlenUgZWRnZXMgJWQgaXRlciAlLjJmIHNlYwoACmZpbmlzaGVkIGluICUuMmYgc2VjCgA6ICUuMmYgc2VjCgAgbm9kZVtzaGFwZT1wb2ludF0KACJyZWN0IjogWyUuMDNmLCUuMDNmLCUuMDNmLCUuMDNmXQoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiBORF9vcmRlciglcykgWyVkXSA+IEdEX3JhbmsoUm9vdClbJWRdLmFuIFslZF0KAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogR0RfcmFuayhnKVslZF0udiArIE5EX29yZGVyKCVzKSBbJWRdID4gR0RfcmFuayhnKVslZF0uYXYgKyBHRF9yYW5rKFJvb3QpWyVkXS5hbiBbJWRdCgBpbnN0YWxsX2luX3JhbmssIGxpbmUgJWQ6IHJhbmsgJWQgbm90IGluIHJhbmsgcmFuZ2UgWyVkLCVkXQoAZmFpbGVkIGF0IG5vZGUgJWRbMV0KAGZhaWxlZCBhdCBub2RlICVkWzBdCgAgICVkIC0tICVkW2xhYmVsPSIlZiJdCgAgICVkIFtwb3M9IiUuMGYsJS4wZiEiXQoAIF0KAERvdDogWwoAIm9iamVjdHMiOiBbCgAic3ViZ3JhcGhzIjogWwoAImVkZ2VzIjogWwoAIm5vZGVzIjogWwoAWCBlbHNlIFoKCWRlZmluZSBzZXRmaWxsdmFsIFkgZmlsbHZhbCA9IFk7CglkZWZpbmUgYm9sZCBZIFk7CglkZWZpbmUgZmlsbGVkIFkgZmlsbCBZOwpaCgBpZiBib3hyYWQgPiAxLjAgJiYgZGFzaHdpZCA8IDAuMDc1IHRoZW4gWAoJZmlsbHZhbCA9IDE7CglkZWZpbmUgZmlsbCBZIFk7CglkZWZpbmUgc29saWQgWSBZOwoJZGVmaW5lIHJlc2V0IFkgc2NhbGU9MS4wIFk7ClgKACBBQk9SVElORwoAJSVFT0YKACVzIHJlc3RvcmUgcG9pbnQgc2l6ZSBhbmQgZm9udAoucHMgXG4oLlMKLmZ0IFxuKERGCgBdCi5QRQoAaW52YWxpZGF0ZV9wYXRoOiBza2lwcGVkIG92ZXIgTENBCgBJbnZhbGlkICVkLWJ5dGUgVVRGOCBmb3VuZCBpbiBpbnB1dCBvZiBncmFwaCAlcyAtIHRyZWF0ZWQgYXMgTGF0aW4tMS4gUGVyaGFwcyAiLUdjaGFyc2V0PWxhdGluMSIgaXMgbmVlZGVkPwoAVVRGOCBjb2RlcyA+IDQgYnl0ZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIChncmFwaCAlcykgLSB0cmVhdGVkIGFzIExhdGluLTEuIFBlcmhhcHMgIi1HY2hhcnNldD1sYXRpbjEiIGlzIG5lZWRlZD8KADwvdGV4dD4KADwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KADwvcmFkaWFsR3JhZGllbnQ+CjwvZGVmcz4KADwvbWFwPgoAPC9zdmc+CgA8L2E+CjwvZz4KACAgICByb3RhdGUgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4KACAgICBzY2FsZSAgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4KADwvdGl0bGU+CgAiIHR5cGU9InRleHQvY3NzIj8+CgA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KACAgICB0cmFuc2xhdGU8JTkuM2YsICU5LjNmLCAlZC4wMDA+CgA7Ii8+CgAgUGFnZXM6ICVkIC0tPgoAKQogLS0+CgAgLT4KADwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgoAKSI+CgByXyVkIiBjeD0iNTAlJSIgY3k9IjUwJSUiIHI9Ijc1JSUiIGZ4PSIlLjBmJSUiIGZ5PSIlLjBmJSUiPgoAIiA+CgAjZGVjbGFyZSAlcyA9ICVzOwoACSVzCXNvcnJ5LCB0aGUgZ3JvZmYgZm9sa3MgY2hhbmdlZCBncGljOyBzZW5kIGFueSBjb21wbGFpbnQgdG8gdGhlbTsKAAklcwlpbnN0YWxsIGEgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiBncGljIG9yIHN3aXRjaCB0byBEV0Igb3IgMTB0aCBFZGl0aW9uIHBpYzsKAF07CgBpZiBmaWxsdmFsID4gMC40IHRoZW4gWAoJZGVmaW5lIHNldGZpbGx2YWwgWSBmaWxsdmFsID0gMSAtIFk7CglkZWZpbmUgYm9sZCBZIHRoaWNrbmVzcyAyIFk7CgAjdmVyc2lvbiAzLjY7CgBlbGxpcHNlIGF0dHJzMCAlc3dpZCAlLjVmIGh0ICUuNWYgYXQgKCUuNWYsJS41Zik7CgAiIGF0ICglLjVmLCUuNWYpOwoAJSVCZWdpbkRvY3VtZW50OgoAJXp1IGJveGVzOgoAcGFjayBpbmZvOgoAc3ByaW5nX2VsZWN0cmljYWxfY29udHJvbDoKAFVuc3VwcG9ydGVkIGNoYXJzZXQgIiVzIiAtIGFzc3VtaW5nIHV0Zi04CgAgICAgICBhbWJpZW50SW50ZW5zaXR5IDAuMzMKACNGSUcgMy4yCgAtMgoAJXMgbm9uLWZhdGFsIHJ1bi10aW1lIHBpYyB2ZXJzaW9uIGRldGVybWluYXRpb24sIHZlcnNpb24gMgoAJXMgZmlsbHZhbCBpcyAwLjMgaW4gMTB0aCBFZGl0aW9uIChmaWxsIDAgbWVhbnMgYmxhY2spLCAwLjUgaW4gZ3BpYyAoZmlsbCAwIG1lYW5zIHdoaXRlKSwgdW5kZWZpbmVkIGluIERXQiAyCgAlcyByZXNldCB3b3JrcyBpbiBncGljIGFuZCAxMHRoIGVkaXRpb24sIGJ1dCBpc24ndCBkZWZpbmVkIGluIERXQiAyCgBzZXR1cExhdGluMQoAXDAwMQoAJXMgICAgICAgIHRvbGVyYW5jZSAwLjAxCgAgICAgdG9sZXJhbmNlIDAuMQoAJSVQYWdlczogMQoAICAgICAgICBkaWZmdXNlQ29sb3IgMSAxIDEKADEwMC4wMAoAIEVQU0YtMy4wCgAlcyBib3hyYWQgaXMgbm93IDAuMCBpbiBncGljLCBlbHNlIGl0IHJlbWFpbnMgMi4wCgBzcGhlcmUgezwlOS4zZiwgJTkuM2YsICU5LjNmPiwgMS4wCgBXYXJuaW5nOiBubyB2YWx1ZSBmb3Igd2lkdGggb2YgQVNDSUkgY2hhcmFjdGVyICV1LiBGYWxsaW5nIGJhY2sgdG8gMAoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiAlcyAlcyByYW5rICVkIGkgPSAlZCBhbiA9IDAKAGNvbmNlbnRyYXRlPXRydWUgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4KAE5vIGxpYnogc3VwcG9ydC4KAHR3b3BpOiB1c2Ugb2Ygd2VpZ2h0PTAgY3JlYXRlcyBkaXNjb25uZWN0ZWQgY29tcG9uZW50LgoAdGhlIGdyYXBoIGludG8gY29ubmVjdGVkIGNvbXBvbmVudHMuCgBPcnRob2dvbmFsIGVkZ2VzIGRvIG5vdCBjdXJyZW50bHkgaGFuZGxlIGVkZ2UgbGFiZWxzLiBUcnkgdXNpbmcgeGxhYmVscy4KAG1pbmNyb3NzICVzOiAlbGxkIGNyb3NzaW5ncywgJS4yZiBzZWNzLgoAJXMgaXMgbm90IGEga25vd24gY29sb3IuCgBpcyBpbmFwcHJvcHJpYXRlLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBpcyB1bmRlZmluZWQuIFJldmVydGluZyB0byB0aGUgc2hvcnRlc3QgcGF0aCBtb2RlbC4KAFVuYWJsZSB0byByZWNsYWltIGJveCBzcGFjZSBpbiBzcGxpbmUgcm91dGluZyBmb3IgZWRnZSAiJXMiIC0+ICIlcyIuIFNvbWV0aGluZyBpcyBwcm9iYWJseSBzZXJpb3VzbHkgd3JvbmcuCgBFcnJvciBkdXJpbmcgY29udmVyc2lvbiB0byAiVVRGLTgiLiBRdWl0aW5nLgoAb3JkZXJpbmcgJyVzJyBub3QgcmVjb2duaXplZC4KAGdyYWRpZW50IHBlbiBjb2xvcnMgbm90IHlldCBzdXBwb3J0ZWQuCgAgIGluaXRDTWFqVlBTQyBkb25lOiAlZCBnbG9iYWwgY29uc3RyYWludHMgZ2VuZXJhdGVkLgoAVGhlIGNoYXJhY3RlciAnJWMnIGFwcGVhcnMgaW4gYm90aCB0aGUgbGF5ZXJzZXAgYW5kIGxheWVybGlzdHNlcCBhdHRyaWJ1dGVzIC0gbGF5ZXJsaXN0c2VwIGlnbm9yZWQuCgB0aGUgYXNwZWN0IGF0dHJpYnV0ZSBoYXMgYmVlbiBkaXNhYmxlZCBkdWUgdG8gaW1wbGVtZW50YXRpb24gZmxhd3MgLSBhdHRyaWJ1dGUgaWdub3JlZC4KAFRoZSBsYXllcnNlbGVjdCBhdHRyaWJ1dGUgIiVzIiBkb2VzIG5vdCBtYXRjaCBhbnkgbGF5ZXIgc3BlY2lmZWQgYnkgdGhlIGxheWVycyBhdHRyaWJ1dGUgLSBpZ25vcmVkLgoAZWRnZSAlcyAtPiAlcyA6IHNldCBtb3JlIHRoYW4gb25lIHNwbGluZS4gRmlyc3QgdXNlZCwgb3RoZXIgZHJvcHBlZC4KACV6dSBvdXQgb2YgJXp1IGxhYmVscyBwb3NpdGlvbmVkLgoAJXp1IG91dCBvZiAlenUgZXh0ZXJpb3IgbGFiZWxzIHBvc2l0aW9uZWQuCgAgIGdlbmVyYXRlIGVkZ2UgY29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgTm9uLW92ZXJsYXAgQ29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgRWRnZSBDb25zdHJhaW50cy4uLgoAR2VuZXJhdGluZyBEaUctQ29MYSBFZGdlIENvbnN0cmFpbnRzLi4uCgBSZW1vdmluZyBvdmVybGFwcyBhcyBwb3N0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ZWUgZG90KDEpKQoAZXJyb3IgaW4gY29sb3J4bGF0ZSgpCgB0cnVuY2F0aW5nIHN0eWxlICclcycKAElsbGVnYWwgdmFsdWUgaW4gIiVzIiBjb2xvciBhdHRyaWJ1dGU7IGZsb2F0IGV4cGVjdGVkIGFmdGVyICc7JwoAZGVmaW5lIGF0dHJzMCAlJSAlJTsgZGVmaW5lIHVuZmlsbGVkICUlICUlOyBkZWZpbmUgcm91bmRlZCAlJSAlJTsgZGVmaW5lIGRpYWdvbmFscyAlJSAlJQoAPHN2ZyB3aWR0aD0iJWRwdCIgaGVpZ2h0PSIlZHB0IgoAIyBkZXBlbmRlbmNpZXMgIiUuKnMiIGRpZCBub3QgbWF0Y2ggIiUuKnMiCgAjIHR5cGUgIiUuKnMiIGRpZCBub3QgbWF0Y2ggIiUuKnMiCgAkYyBjcmVhdGUgaW1hZ2UgJS4yZiAlLjJmIC1pbWFnZSAicGhvdG9fJXMiCgBObyBvciBpbXByb3BlciBpbWFnZSBmaWxlPSIlcyIKAGZpbGUgbG9hZGluZyBpcyBkaXNhYmxlZCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBjb250YWlucyBTRVJWRVJfTkFNRT0iJXMiCgBDb3VsZCBub3QgcGFyc2UgeGRvdCAiJXMiCgBObyBsb2FkaW1hZ2UgcGx1Z2luIGZvciAiJXMiCgAgWyV6dV0gKCUuMDJmLCUuMDJmKSAoJS4wMmYsJS4wMmYpICVwICIlcyIKAGZvbnRuYW1lOiB1bmFibGUgdG8gcmVzb2x2ZSAiJXMiCgBEdXBsaWNhdGUgY2x1c3RlciBuYW1lICIlcyIKAHVucmVjb2duaXplZCBhcGkgbmFtZSAiJXMiCgBpbWFnZSBjcmVhdGUgcGhvdG8gInBob3RvXyVzIiAtZmlsZSAiJXMiCgBObyBvciBpbXByb3BlciBzaGFwZWZpbGU9IiVzIiBmb3Igbm9kZSAiJXMiCgBObyBvciBpbXByb3BlciBpbWFnZT0iJXMiIGZvciBub2RlICIlcyIKAG5vZGUgIiVzIiBpcyBjb250YWluZWQgaW4gdHdvIG5vbi1jb21wYXJhYmxlIGNsdXN0ZXJzICIlcyIgYW5kICIlcyIKAEVycm9yOiBub2RlICIlcyIgYmVsb25ncyB0byB0d28gbm9uLW5lc3RlZCBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgAgICIlcyIKACNpbmNsdWRlICJjb2xvcnMuaW5jIgojaW5jbHVkZSAidGV4dHVyZXMuaW5jIgojaW5jbHVkZSAic2hhcGVzLmluYyIKAFVua25vd24gSFRNTCBlbGVtZW50IDwlcz4gb24gbGluZSAlbHUgCgAlcyBpbiBsaW5lICVsdSAKAHNjYWxlIGJ5ICVnLCVnIAoAY29tcHJlc3MgJWcgCgBMYXlvdXQgd2FzIG5vdCBkb25lLiAgTWlzc2luZyBsYXlvdXQgcGx1Z2lucz8gCgCJUE5HDQoaCgAlJSFQUy1BZG9iZS0yLjAKJSUlJUJvdW5kaW5nQm94OiAoYXRlbmQpCi9wb2ludCB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIG5ld3BhdGgKICBYIFkgMyAwIDM2MCBhcmMgZmlsbAp9IGRlZgovY2VsbCB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBzdHJva2UKfSBkZWYKL25vZGUgewogL3UgZXhjaCBkZWYKIC9yIGV4Y2ggZGVmCiAvZCBleGNoIGRlZgogL2wgZXhjaCBkZWYKIG5ld3BhdGggbCBkIG1vdmV0bwogciBkIGxpbmV0byByIHUgbGluZXRvIGwgdSBsaW5ldG8KIGNsb3NlcGF0aCBmaWxsCn0gZGVmCgoACQBBoYAFC7YDAQEBAQEBAQECAwEBAgEBAQEBAQEBAQEBAQEBAQEBAQIBBAUBAQEBAQEGAQEHCAkKCgoKCgoKCgoKAQELAQwBDQ4PEBESExQVFhMTExMXGBkTGhscHRMTExMTAR4BARMBHyAhIiMTJCUmExMTEycoKRMqKywtExMTExMBAQEBARMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTLhMTEy8TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEzATExMTExMTExMTExMTExMTAAAAAAAABAAEABwAHAAhACEAJAAiAAoAAgAWAAkAIgAiACIAFQAdAAEAFAAUABQAFAAUABQAFAAIAAQABQAcABsAFwAcACEAIAAfAB4ACQATAAAAFQASABUAAwAHABUAFQAUABQAFAAUABQAFAAUABQACAAEAAUABQAGABwAGgAYABkAIQAHABUAFAAUABQAFAAUABQACwAUAA0AFAAMABQAFAAUAA4AFAAUABQAEAAUAA8AFAARAEHigwULlQQBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAQABwADAAQABQAFAAYABgAIAAcABwARABYAEgARABIACAAIAA8ADwAXAA8AGAAPABkAGgAaAB4AFgA0AB4ABQAyAAYAIgAiADMAFwAYADUAGQAaABoAKgA2ACoANAA3ADIARQA7ADwAMwA7ADwARgA1AEcASABMADYAIgBJAEoANwBFAE4AUABiAFEAUgBUAEYARwBVAEgATABWAEkASgBYAFoATgBEAFAAUQBSAFQAOAAvACwAVQApAFYAGwAQAFgAWgBdAF0AXQBdAF0AXQBdAF4AXgBeAF4AXgBeAF4AXwBfAF8AXwBfAF8AXwBgAAkAYABgAGAAYABgAGEAYQBjAAIAYwBjAGMAYwBjAGQAAABkAAAAZABkAGQAZQAAAGUAZQBlAGUAZQBmAAAAAABmAGYAZgBmAGcAAABnAGcAZwBnAGgAAABoAGgAaABoAGgAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABBhIgFC80BrgAuAC8AMwA1ADAANwCqANsA2wDbANsAAAA9AIcANwA3ANsA2wAAACgANQAuADIALwBiAAAAAABHAAAA2wDbAFEAAADbANsA2wAAANsAhABVANsAggDbAAAAgQDbAAAAPgBCAEEASABEAFIAWwAAAAAAXgBfANsAAADbANsA2wAAAAAAewBJAFcAUgBaAFoAXQAAAF8AAABfAAAAZQBdAF8AAABdAG4AagAAAGkAAABuAAAA2wCTAJoAoQCoAKsAcACxALgAvwDGAM0A0wBB4okFC88BXAABAF0AXQBeAF4AXwBfAFwAXABcAFwAXABgAFwAXABcAGEAXABcAGIAYgBiAGIAYgBiAGIAYwBkAGUAZgBcAFwAXABnAFwAXABcAGAAXABcAGEAXABhAFwAaABhAFwAYgBiAGIAYgBiAGIAYgBiAGMAZABlAGUAXABmAFwAXABcAGcAaABhAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgAAAFwAXABcAFwAXABcAFwAXABcAFwAXABcAEHBiwULMAEBAgMBBAEFAQYHBwEGBgYGBgYGBgYGBgYGBgYGAwYGBgYGBgYGBgYGBgYGBgYGBgBBgowFC6MECgALAAwADQAOAAoADwAQABEAEgATAAoAFAAVABUAFQAWABcAFQAYABUAFQAZABUAFQAVABoAFQAVAAoAFQAVABUAFgAXABgAFQAVABkAFQAVABUAGgAVABUAFQAVABsADAAMACQAHgAeACAAIQAgACEAJAAlACYALQAyAC8ALgAqACUAJgAoACkAMwAqADQAKwA1ADYANwA8ADIARwA9ACIARQAiAD8AQABGADMANABIADUANgA3AC8ASQAqAEcASgBFAEwAXAA8AEYAXAA9AE0ASABOAE8AUgBJAEEAUABRAEoATABTAFQAMQBVAFYAVwBNAE4AWABPAFIAWQBQAFEAWgBbAFMARABUAFUAVgBXAEsARAAsAFgALABZADgALABaAFsAHQAdAB0AHQAdAB0AHQAfAB8AHwAfAB8AHwAfACMAIwAjACMAIwAjACMAJwBcACcAJwAnACcAJwAwADAAOQAcADkAOQA5ADkAOQA6AFwAOgBcADoAOgA6ADsAXAA7ADsAOwA7ADsAPgBcAFwAPgA+AD4APgBCAFwAQgBCAEIAQgBDAFwAQwBDAEMAQwBDAAkAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwADAAAAA0AAAAOAAAADgBBsJAFC9EFEe7u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APX//wBPqgAAgf/uAOXu/wBmnAAAgf/NAMXN/wC1jwAAgf+LAIaL/wBSEQAA1HPu7oLu/wCzVAAA49fQ0CCQ/wBXuQAA68H//z6W/wDeqgAA68Du7jqM/wD1nAAA68DNzTJ4/wBLkAAA68CLiyJS/wC2CAAAAACAgICA/wAhNAAAVf+AAIAA/wDrBwAAAACAgICA/wCuMAAAAP+AgAAA/wDeTAAA1P+AgACA/wD5EgAAG0T19d6z/wDvtgAAG0X//+e6/wCjqAAAG0Tu7tiu/wDHmgAAG0TNzbqW/wAbjgAAG0OLi35m/wDDSAAAAAD//////wAlTgAAAAD19fX1/wC+CAAAAAC+vr6+/wBxNAAAVf//AP8A/wDzBwAAAAC+vr6+/wC4MAAA77mwsDBg/wATTQAAxN3woCDw/wCsCgAAKv////8A/wDUtgAAKv////8A/wCEqAAAKv/u7u4A/wC1mgAAKv/Nzc0A/wAJjgAAKv+Li4sA/wBdMwAAOMDNms0y/wBB4IIHCwM0dwIAQe6CBwuFCKBA/////////////////////////////////////////////////////////////////////////////////////wACqgJEAwAEAASqBjkGcQGqAqoCAASDBAACqgIAAjkCAAQABAAEAAQABAAEAAQABAAEAAQ5AjkCgwSDBIMEjQNeB8cFVgVWBccF4wRzBMcFxwWqAh0DxwXjBB0HxwXHBXMExwVWBXME4wTHBccFjQfHBccF4wSqAjkCqgLBAwAEqgKNAwAEjQMABI0DqgIABAAEOQI5AgAEOQI5BgAEAAQABAAEqgIdAzkCAAQABMcFAAQABI0D1wOaAdcDVAT///////////////////////////////////////////////////////////////////////////////////////8AAqoCcQQABAAEAAiqBjkCqgKqAgAEjwQAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEqgKqAo8EjwSPBAAEcQfHBVYFxwXHBVYF4wQ5BjkGHQMABDkGVgWNB8cFOQbjBDkGxwVzBFYFxwXHBQAIxwXHBVYFqgI5AqoCpgQABKoCAARzBI0DcwSNA6oCAARzBDkCqgJzBDkCqgZzBAAEcwRzBI0DHQOqAnMEAATHBQAEAASNAycDwwEnAykE////////////////////////////////////////////////////////////////////////////////////////AAKqAlwDAAQABKoGOQa2AaoCqgIABGYFAAKqAgACOQIABAAEAAQABAAEAAQABAAEAAQABKoCqgJmBWYFZgUABFwH4wTjBFYFxwXjBOMExwXHBaoCjQNWBXMEqgZWBccF4wTHBeMEAARzBMcF4wSqBuMEcwRzBB0DOQIdA2ADAASqAgAEAASNAwAEjQM5AgAEAAQ5AjkCjQM5AscFAAQABAAEAAQdAx0DOQIABI0DVgWNA40DHQMzAzMCMwNUBP///////////////////////////////////////////////////////////////////////////////////////wACHQNxBAAEAASqBjkGOQKqAqoCAASPBAACqgIAAjkCAAQABAAEAAQABAAEAAQABAAEAASqAqoCjwSPBI8EAASoBlYFVgVWBccFVgVWBccFOQYdAwAEVgXjBB0HxwXHBeMExwVWBXME4wTHBVYFHQdWBeME4wSqAjkCqgKPBAAEqgIABAAEjQMABI0DqgIABHMEOQI5AgAEOQI5BnMEAAQABAAEHQMdAzkCcwSNA1YFAASNAx0DyQLDAckCjwT//1x3AgBB/ooHC4UIoED/////////////////////////////////////////////////////////////////////////////////////OQI5AtcCcwRzBB0HVgWHAaoCqgIdA6wEOQKqAjkCOQJzBHMEcwRzBHMEcwRzBHMEcwRzBDkCOQKsBKwErARzBB8IVgVWBccFxwVWBeMEOQbHBTkCAARWBXMEqgbHBTkGVgU5BscFVgXjBMcFVgWNB1YFVgXjBDkCOQI5AsEDcwSqAnMEcwQABHMEcwQ5AnMEcwTHAccBAATHAaoGcwRzBHMEcwSqAgAEOQJzBAAExwUABAAEAASsAhQCrAKsBP///////////////////////////////////////////////////////////////////////////////////////zkCqgLLA3MEcwQdB8cF5wGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwSqAqoCrASsBKwE4wTNB8cFxwXHBccFVgXjBDkGxwU5AnMExwXjBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wSqAjkCqgKsBHMEqgJzBOMEcwTjBHMEqgLjBOMEOQI5AnMEOQIdB+ME4wTjBOMEHQNzBKoC4wRzBDkGcwRzBAAEHQM9Ah0DrAT///////////////////////////////////////////////////////////////////////////////////////85AjkC1wJzBHMEHQdWBYcBqgKqAh0DrAQ5AqoCOQI5AnMEcwRzBHMEcwRzBHMEcwRzBHMEOQI5AqwErASsBHMEHwhWBVYFxwXHBVYF4wQ5BscFOQIABFYFcwSqBscFOQZWBTkGxwVWBeMExwVWBY0HVgVWBeMEOQI5AjkCwQNzBKoCcwRzBAAEcwRzBDkCcwRzBMcBxwEABMcBqgZzBHMEcwRzBKoCAAQ5AnMEAATHBQAEAAQABKwCFAKsAqwE////////////////////////////////////////////////////////////////////////////////////////OQKqAssDcwRzBB0HxwXnAaoCqgIdA6wEOQKqAjkCOQJzBHMEcwRzBHMEcwRzBHMEcwRzBKoCqgKsBKwErATjBM0HxwXHBccFxwVWBeMEOQbHBTkCcwTHBeMEqgbHBTkGVgU5BscFVgXjBMcFVgWNB1YFVgXjBKoCOQKqAqwEcwSqAnME4wRzBOMEcwSqAuME4wQ5AjkCcwQ5Ah0H4wTjBOME4wQdA3MEqgLjBHMEOQZzBHMEAAQdAz0CHQOsBP//kHcCAEGOkwcLhQigQP/////////////////////////////////////////////////////////////////////////////////////NBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0E////////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP///////////////////////////////////////////////////////////////////////////////////////80EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQT////////////////////////////////////////////////////////////////////////////////////////NBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0E//+4dwIAQZ2bBwuGCECPQAAA////////////////////////////////AgH///////////////////////////////////////////////8CAeQAiAFYAlgCogO1At0APQE9AcIBWALkAKgB5AAbAVgCWAJYAlgCWAJYAlgCWAJYAlgC5ADkAFgCWAJYArsBsgPZAqQCoQLmAkcCJALWAvkCAQFEAXECHwJXA+QC/wJ5Av8CnQJnAloC2AKxAk0EigJUAk0COwEbATsBWAL0AfQBEgJHAs8BRwIUAk0BSgI4AugA7AD0ASgBWAM4AiwCRwJHAmYB4QFeATECAwJJAw0CAgLPAWABCQFgAVgC//8AAP///////////////////////////////w8B////////////////////////////////////////////////DwH4AMABWAJYArED1gLzAGYBZgHFAVgC+ACyAfgAOQFYAlgCWAJYAlgCWAJYAlgCWAJYAvgA+ABYAlgCWALLAbYD6AKwAqgC+gJVAjIC4AIFAxoBYgGZAjICZAPsAhEDjAIRA64CdwJtAuICyQJZBKACagJdAmIBOQFiAVgC9AH0ASMCWALYAVgCHgJsAVwCSQL/AAMBGAI/AW0DSQJAAlgCWAKIAegBgAFDAg8CVQMiAg4C2gGHASABhwFYAv//AAD///////////////////////////////8CAf///////////////////////////////////////////////wIB5ACIAVgCWAKiA7UC3QA9AT0BwgFYAuQAqAHkABsBWAJYAlgCWAJYAlgCWAJYAlgCWALkAOQAWAJYAlgCuwGyA9kCpAKhAuYCRwIkAtYC+QIBAUQBcQIfAlgD4wL/AnkC/wKdAmcCWgLYArACTQSKAlQCTQI7ARsBOwFYAvQB9AESAkcCzwFHAhQCTQFKAjgC6ADsAPQBKAFYAzgCLAJHAkcCZgHhAV4BMQIDAkkDDQICAs8BYAEJAWABWAL//wAA////////////////////////////////DwH///////////////////////////////////////////////8PAfgAwAFYAlgCsQPWAvMAZgFmAcUBWAL4ALIB+AA5AVgCWAJYAlgCWAJYAlgCWAJYAlgC+AD4AFgCWAJYAssBtgPoArACqAL6AlUCMgLgAgUDGgFiAZgCMgJlA+sCEQOMAhEDrgJ3Am0C4gLJAlkEoAJqAl0CYgE5AWIBWAL0AfQBIwJYAtgBWAIeAmwBXAJJAv8AAwEYAj8BbQNJAkACWAJYAogB6AGAAUMCDwJVAyICDgLaAYcBIAGHAVgC///AdwIAQa6jBwuFCKBA/////////////////////////////////////////////////////////////////////////////////////4sCNQOuA7QGFwWaBz0GMwIfAx8DAAS0BosC4wKLArICFwUXBRcFFwUXBRcFFwUXBRcFFwWyArICtAa0BrQGPwQACHkFfQWWBSkGDgWaBDMGBAZcAlwCPwV1BOcG/AVMBtMETAaPBRQF4wTbBXkF6Qd7BeMEewUfA7ICHwO0BgAEAATnBBQFZgQUBewE0QIUBRIFOQI5AqIEOQLLBxIF5QQUBRQFSgMrBCMDEgW8BIsGvAS8BDMEFwWyAhcFtAb////////////////////////////////////////////////////////////////////////////////////////JAqYDKwS0BpEFBAj6BnMCqAOoAy8EtAYKA1IDCgPsApEFkQWRBZEFkQWRBZEFkQWRBZEFMwMzA7QGtAa0BqQEAAgxBhkG3wWkBncFdwWRBrIG+gL6AjMGGQX2B7IGzQbdBc0GKQbDBXUFfwYxBtMIKwbLBc0FqAPsAqgDtAYABAAEZgW6Bb4EugVtBXsDugWyBb4CvgJSBb4CVgiyBX8FugW6BfIDwwTTA7IFNwVkBykFNwWoBLIF7AKyBbQG////////////////////////////////////////////////////////////////////////////////////////iwI1A64DtAYXBZoHPQYzAh8DHwMABLQGiwLjAosCsgIXBRcFFwUXBRcFFwUXBRcFFwUXBbICsgK0BrQGtAY/BAAIeQV9BZYFKQYOBZoEMwYEBlwCXAI/BXUE5wb8BUwG0wRMBo8FFAXjBNsFeQXpB3sF4wR7BR8DsgIfA7QGAAQABOcEFAVmBBQF7ATRAhQFEgU5AjkCogQ5AssHEgXlBBQFFAVKAysEIwMSBbwEiwa8BLwEMwQXBbICFwW0Bv///////////////////////////////////////////////////////////////////////////////////////8kCpgMrBJEFkQUECPoGcwKoA6gDLwS0BgoDUgMKA+wCkQWRBZEFkQWRBZEFkQWRBZEFkQUzAzMDtAa0BrQGpAQACDEGGQbfBaQGdwV3BZEGsgb6AvoCMwYZBfYHsgbNBt0FzQYpBsMFdQV/BjEG0wgrBssFzQWoA+wCqAO0BgAEAARmBboFvgS6BW0FewO6BbIFvgK+AlIFvgJWCLIFfwW6BboF8gPDBNMDsgU3BWQHKQU3BagEsgXsArIFtAb//8h3AgBBvqsHC4UIoEBmBP///////////////////////////////wAA////////////////////////////////////////////////ZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBP//ZgT///////////////////////////////8AAP///////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT//2YE////////////////////////////////AAD///////////////////////////////////////////////9mBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYE////////////////////////////////////////////////////////////////////////////////////////ZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBP//1HcCAEHOswcLhQigQP////////////////////////////////////////////////////////////////////////////////////9pAvACmQIyBDIEzQSmBUcB8ALwAvACMgTwAvAC8AIyBDIEMgQyBDIEMgQyBDIEMgQyBDIE8ALwAjIEMgQyBPACKga4BIcEyQToBEkEMwRpBTwFOgLQA5sEDQStBRsFZAV2BGgFqATZA6UEMAWzBNEGdASQBGcE8ALYAvACMgQyBDIENAR1BPYDdQRdBPUCBARfBEgC7wIJBFwCpAZfBEsEdQR1BBwDPQMsA18E6wP0BQIE8gPMA/ACMgTwAjIE////////////////////////////////////////////////////////////////////////////////////////aQLwAu8CsASwBHkFpgXWAfAC8AJ1A7AE8ALwAvACHwOwBLAEsASwBLAEsASwBLAEsASwBPAC8AKwBLAEsASBAyoGEQXDBOUEJAWNBKsEXwV4BToCQwTwBGwE9gVXBaAFsgSsBeMEFwTlBGwF+QQSB84E6AR7BDcD2AI3A7AEsASwBEMEpwQYBKUEmQT1AgQEvgRjAu8CYgRcAuAGuQSHBKkErARrA3IDLAO6BDgERQZrBEUEOgR4A7AEeAOwBP///////////////////////////////////////////////////////////////////////////////////////2kC8AKZAjIE2QPNBKYFRwHwAvAC8AIyBPAC8ALwAjIEMgQyBDIEMgQyBDIEMgQyBDIEMgTwAvACMgQyBDIE8AIqBuMEhwTJBOgESQQzBGkFPAU6AtADmwQNBBcGGwVkBVkEZAWoBNkDpQQwBbME0QZ0BJAEZwTwAtgC8AIyBDIEMgQ0BHUErgN1BEwENgMEBHUEdALvAgkEkAKkBl8ESwR1BHUEVQM9A1wDdATrA/QFAgTyA8wD8AIyBPACMgT///////////////////////////////////////////////////////////////////////////////////////9pAvACIAOwBLAE3AWmBWkC8ALwAnUDsATwAvAC8AItA7AEsASwBLAEsASwBLAEsASwBLAE8ALwArAEsASwBC0DKgbpBLgE5wQPBb8ErwRpBW0FOgL9AzMFOgRKBkgFngWrBCgG/QQDBHsFSwV3BWkHQQV4BeQE4gPSA+IDsASwBLAEvgS/BPEDvwRqBEgDSAR/BJ0CGgNRBI8CpAZ/BI8EygTKBJMDrAOBA3UEawQwBpsEgwRDBOIDsATiA7AE///gdwIAQd67BwuFCKBA/////////////////////////////////////////////////////////////////////////////////////9ACJgOsA4wGFgWcCNAFJgKiA6IDFgWMBukCogPpAqIDFgUWBRYFFgUWBRYFFgUWBRYFFgWiA6IDjAaMBowGXQQACHgFfAWWBSoGDwWZBDQGAwZeA6MDiwV0BL4G/AVMBtMETAaQBXgF7gTbBXgF6Qd7BewEewWiA6IDogOMBhYFFgXOBPwEKwT8BMQE0AL8BBAFMgLBArwEMgLIBxAF2wT8BPwEagMrBCcDEAW8BIwGvAS8BDQEFAWiAxQFjAb///////////////////////////////////////////////////////////////////////////////////////+8AjgDswTwBrAFLQrmBqgCWQRZBLAF8AbkAtcD5AKEBbAFsAWwBbAFsAWwBbAFsAWwBbAFOAM4A/AG8AbwBu8Etgc2BhgGygWkBncFNAV9BrMGXgRxBCsGGQWVB8YGzQbdBc0GQgavBXQFfwYcBgcJHAblBYkFWQSEBVkE8AawBbAFWAWYBbUEmAVQBWEDmAWzBbwCOQNeBbwCdwizBX4FmAWYBfoDvwSlA7MFMwXWB1oFNQXGBLAFWQSwBfAG////////////////////////////////////////////////////////////////////////////////////////0AImA6wDjAYWBZwI0AUmAqIDogMWBYwG6QKiA+kCogMWBRYFFgUWBRYFFgUWBRYFFgUWBaIDogOMBowGjAZdBAAIdgV8BZYFIAYPBZkENAYDBl4DowOLBXQEvgb8BUwG0wRMBpAFeAXuBNsFdgXsB3sF7AR7BaIDogOiA4wGFgUWBc4E/AQrBPwExATQAvkEEAUyAsECsgQyAskHEAXbBPwE/ARqAysEJwMQBboEjAa8BLoENAQUBaIDFAWMBv///////////////////////////////////////////////////////////////////////////////////////7wCOAOzBPAGsAUtCuYGqAJZBFkEsAXwBuQC1wPkAoQFsAWwBbAFsAWwBbAFsAWwBbAFsAU4AzgD8AbwBvAG7wS2BzYGGAbKBaQGdwU0BX0GswZeBHEEKwYZBZUHxgbNBt0FzQZCBq8FdAV/BhwGBwkcBuUFiQVZBIQFWQTwBrAFsAVYBZgFtQSYBVAFYQOYBbMFvAI5A14FvAJ3CLMFfAWYBZgF+gO/BKUDswUxBdYHWgU1BcYEsAVZBLAF8Ab//+h3AgBB7sMHC4UIoED/////////////////////////////////////////////////////////////////////////////////////FAIjAjUDKwWTBJYG1wXFAV4CXgJqBJME9gGTAiEC8AKTBJMEkwSTBJMEkwSTBJMEkwSTBCECIQKTBJMEkwRvAzEHEAUvBQwF1QVzBCEE0wXnBTsCIwLpBCcEOQcIBjsG0QQ7BvIEZARtBNMFwwRoB54EewSRBKIC8AKiAlYElgOeBHME5wTPA+cEfQS2AmIE6QQGAgYCMwQGAnEH6QTVBOcE5wREA9ED0wLpBAIEOQYxBAgEvgMIA2gECAOTBP///////////////////////////////////////////////////////////////////////////////////////xQCSgLHAysFkQQ1BwAGIQK2ArYCXASRBFICkwJIAk4DkQSRBJEEkQSRBJEEkQSRBJEEkQRIAlICkQSRBJEE0QMtB4UFYAUZBewFewRkBMsFHwamAqYCUAWFBIsHgQZeBgYFXgZIBWgEogQMBjMFvAdWBf4EogSmAk4DpgJCBEoD2wTVBBAFHQQQBboEGQOFBEIFcQJxAvYEcQLbB0IF9AQQBRAFogP6A3kDQgWNBNkGoASNBOcDJwNoBCcDkQT///////////////////////////////////////////////////////////////////////////////////////8UAhICFwMrBWgEWAZcBbwBSAJIAmoEaATsAX8CBgLNAmgEaARoBGgEaARoBGgEaARoBGgEBgIGAmgEaARoBGoDxwZxBMkErgRUBRcExwNqBW0FLwIjAnUEywOyBp4FwwWHBMMFjQQEBPwDaAViBNEGJwQGBD8ESgLNAkoCIwQnA28EhQSeBJoDngTyA4ECAgSeBAgCCALnAwgC+gaeBH0EngSeBCsDbQOYAp4EsgO8BdMDsgONA8sCaATLAmgE////////////////////////////////////////////////////////////////////////////////////////FAJKAqADKwVoBNkGqgUKArYCtgJcBGgEOQKTAkgCXgNoBGgEaARoBGgEaARoBGgEaARoBEgCSAJoBGgEaASsA9kGBgX2BOUEagVWBD8EhQWaBZMCpgLnBCUECgcKBtcFpATXBd8EPQQ/BIcFuAQnB9kEgwRKBKYCXgOmAjkEMwNvBMEEwwTdA8EEdQT8AlQE1QRgAmACiwRgAj0H1QSuBMMEwQReA8kDSAPVBBkETgY/BCcEpAPXAmgE1wJoBP//8HcCAEH+ywcLhQigQP/////////////////////////////////////////////////////////////////////////////////////uAaYCSwMlBeEEigavBbkBAAMAA8cDJQUoAv4CKALAA+kEcAN4BGoEhQQ6BIcEBQTFBIcEgAKAAiUFJQUlBdQDbgdeBTsFIwX+BToFywTNBYUGHgMkBI4F1ARrByMG9AXhBPQFnQV9BPMEDQZVBc4HrwXsBNAEAAPAAwADJQUlBQAECAR7BKIDmATeA5oCEwSoBFgCVgJJBEoCDAe6BFAEkgR6BEcDdQPDApoE+QPmBQoE8AONA3EDAANxAyUF////////////////////////////////////////////////////////////////////////////////////////CAIDAxQEoAUgBQkHZQYnApMDkwPbA6AFoAIIA6ACxgOcBesDAwX/BDIFywQvBW8EaQUvBfAC8AKgBaAFoAVjBLwHEQYPBrkFrAbFBV8FdQZOB5EDwwSJBnwFMAi3Bo8GnAWPBmEGMQV5BasGGQYDCXgG2wWEBZMDxgOTA6AFoAUABMQEKgVABE4FkwQlA50EcAXUAsUCDgXBAiAIhQUWBUMFMAUpBBoELgNqBYkE6Aa0BH8ENAQABBoDAASgBf///////////////////////////////////////////////////////////////////////////////////////+4BpgJLAyUF4QSKBq8FuQEAAwADxwMlBSgC/gIoAsAD6QRwA3gEagSFBDoEhwT5A8UEhwQSAxIDJQUlBSUF1ANuB14FOwUjBf4FOgXLBM0FhQYeAyQEjgXUBGsHIwbYBeEE2AWdBX0E8wQNBlUFzgevBewE0AQAA8ADAAMlBSUFAASVBG4EoQOaBMYDoQKVBIAEYQJUAjkESAIJB7gETASgBHEEsQNzA8cCmgROBJQGAgR6BI0DcQMAA3EDJQX///////////////////////////////////////////////////////////////////////////////////////8IAgMDFASgBSAFCQdlBicCkwOTA9sDoAWgAggDoALGA5wF6wMDBf8EMgXLBC8FiARpBS8F8ALwAqAFoAWgBWMEvAcRBhMGuQWsBsUFXwV1Bk4HmwPDBIkGfAVECKMGjwamBY8GYQY5BXkFqwYZBgMJawbbBYQFkwPGA5MDoAWgBQAESAUxBUkETQV1BAwDMgVnBe0C6wIhBdYCBAiFBRYFTQUzBUUEIwRWA3sF5gR4B6sEWwUjBAAEGgMABKAF///4dwIAQY7UBwvICqBA/////////////////////////////////////////////////////////////////////////////////////88BmwI1A/wDDgS4BXUFxAFtAm0C/AP8A/8BcwIFAhcDDgQOBA4EDgQOBA4EDgQOBA4EDgQkAiQC/AP8A/wDtQMnB6EEWgREBOwE6AOtAwwF/AQEAo0CKARdA9cGKgVMBSIEYgVYBK0D5gMiBYoEHgcnBOYDvwN0AhcDdAL8A/wDVALVAzQEYgM0BPsDcQLEAzQE1gHqAaMD1gFkBjQEOAQ0BDQEygIhA64CNASdA7gFdwOfAykDhAKvA4QC/AP//wAA////////////////////////////////AAD////////////////////////////////////////////////PAZsCggP8Aw4E1QWjBd4BfgJ+AvwD/AMQAnMCIwJwAw4EDgQOBA4EDgQOBA4EDgQOBA4ENQI1AvwD/AP8A7UDMAfZBHwEPAQLBecDrAMZBQwFIgKmAmAEYgP+BkUFaQVCBH0FgQTIA/YDOQW7BEAHaAQoBNMDmQJwA5kC/AP8A2cC8wNLBFkDSwQHBIgCywNLBPcBCwLXA/cBggZLBE0ESwRLBNgCMQPGAksEyQP2Ba0DygMuA8ACzQPAAvwD////////////////////////////////////////////////////////////////////////////////////////zwGbAjUD/AMOBLgFdQXEAW0CbQL8A/wD/wFzAgUCGgMOBA4EDgQOBA4EDgQOBA4EDgQOBCQCJAL8A/wD/AO1AycHoQRaBC4E7AToA60DDAX8BAQCjQIoBF0D1wYoBTwFIgRQBVgEngPmAyIFigQfBycE5gO/A3QCEwN0AvwD/ANUAh0EHQRUAx0E0gNxAh0EHQTWAeoBowPWAVQGHQQbBB0EHQS+Ah0DrgIdBJEDuAV3A5QDKQOEAq8DhAL8A////////////////////////////////////////////////////////////////////////////////////////88BmwKCA/wDDgTVBaMF3gF+An4C/AP8AxACcwIjAnkDDgQOBA4EDgQOBA4EDgQOBA4EDgQ1AjUC/AP8A/wDtQMwB9kEfAQmBAsF5wOsAxkFDAUiAqYCYARi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AMg2AAD8AAAAfiwAABghAADDOgAAvgMAALJHAAD9AAAAzzIAAKUAAADDNgAA/wAAAAZgAAC2AwAAqToAAA0gAACtOgAADCAAAHU+AQAIAAAAAwAAAOI+AABAzwAACwAAAAYAAACFFQAAamgAAAIAAAABAAAA4ywAABF0AAAEAAAAAgAAABZCAAAABAAAAwAAAAQAAAAJQQAATM8AAAUAAAAFAAAAtUIAAAQEAAAEAAAABwAAAFsVAAC9NgAABQAAAAkAAAC/NgAAjmwAAAQAAAAKAAAAKUIAAGD5AQAEAAAADAAAAMkvAAAAAAEAAAHQ0dLT1NXW19jZAEGG8wcLCfC/AAAAAAAAAQBBmPMHCw1pbnZpcwAAZmlsbGVkAEGw8wcLGkkaAADVUAAA6DUAAJwLAABgeAAAlMUAAM+NAEHw8wcLef//////////////////////////////////////////AAAAAAAAAAT+//+H/v//BwAAAAAAAAAA//9/////f//////////zf/79//////9///////////8P4P////8x/P///wAAAAAAAAD//////////////wEA+AMAQYD1BwtBQNf///v/////f39U/f8PAP7f///////////+3/////8DAP///////58Z////zz8DAAAAAAAA/v///38C/v///38AQcr1BwuzAf///wcHAAAAAAD+//8H/gcAAAAA/v//////////fP9/LwBgAAAA4P///////yMAAAD/AwAAAOCf+f///cUDAAAAsAMAAwDgh/n///1tAwAAAF4AABwA4K/7///97SMAAAAAAQAAAOCf+f///c0jAAAAsAMAAADgxz3WGMe/AwAAAAAAAAAA4N/9///97wMAAAAAAwAAAODf/f///e8DAAAAQAMAAADg3/3///3/AwAAAAADAEGQ9wcLGf7/////fw0APwAAAAAAAACWJfD+rmwNIB8AQbj3BwsG//7///8DAEHk9wcLcv////8/AP////9/AO3aBwAAAABQAVAxgqtiLAAAAABAAMmA9QcAAAAACAEC/////////////////////////w///////////////wP//z8//////z8//6r///8/////////31/cH88P/x/cHwAAAABATABB4PgHCwEHAEHw+AcLJoAAAAD+AwAA/v///////////x8A/v////////////8H4P////8fAEGw+QcLFf//////////////////////////PwBB0PkHCxX//////////////////////////w8AQfX5BwvJAmD/B/7//4f+//8HAAAAAAAAgAD//3////9//////wAAAAAAAAD//////////////wEA+AMAAwAAAAAA//////////8/AAAAAwAAAMDX///7/////39/VP3/DwD+3////////////t//////ewD///////+fGf///88/AwAAAAAAAP7///9/Av7///9/AP7/+///uxYA////BwcAAAAAAP7//wf//wcA/wP///////////98/3/v//89/wPu////////8/8/Hv/P/wAA7p/5///9xdOfOYCwz/8DAOSH+f///W3ThzkAXsD/HwDur/v///3t8787AADB/wAA7p/5///9zfOPOcCww/8AAOzHPdYYx7/Dxz2AAID/AADu3/3///3vw989YADD/wAA7N/9///978PfPWBAw/8AAOzf/f///f/Dzz2AAMP/AEHQ/AcLOP7/////f/8H/3//AwAAAACWJfD+rmz/O18//wMAAAAAAAAAA/8DoML//v///wP+/98Pv/7/P/4CAEGq/QcLZ/8fAgAAAKAAAAD+/z4A/v///////////x9m/v////////////93YAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAAEAQaH+BwsFFQoAAAkAQbj+BwvgARUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFhICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAEHAgAgLEgIDBAUGBwgAAAkKCwwNDg8QEQBB3oAICwQSEwAUAEHwgAgLAhUWAEGOgQgLUgEBAQEBAQEBAQEBAQEB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sQQAAAZIAABWBQAA3D8AAAUSAAByMQAAOFAAACZLAAAKDgAABgUAAIUSAAAkMAAAsAkAAJYJAADgBAAAP1YAAB5WAABJUwAAyVcAALRXAAC6UwAAmlYAACoFAABYTAAAm1UAAJUXAAD/DwAARlUAALJWAADKUwAAdccAANO5AABaqwAAcZ0AAMeQAACMhQAAcH4AALV4AABQdAAANHEAANhuAACkbgAAb24AADNuAACkbQAAwWwAAGLHAADAuQAAR6sAAF6dAAC0kAAAeYUAAF1+AACieAAAPXQAACFxAADTbgAAn24AAGpuAAAubgAAn20AALxsAABPxwAArbkAADSrAABLnQAAoZAAAGaFAABKfgAAj3gAACp0AAAOcQAAzm4AAJpuAABlbgAAKW4AAJptAAC3bAAASscAAKi5AAAvqwAARp0AAJyQAABhhQAARX4AAIp4AAAldAAACXEAAMluAACVbgAAYG4AACRuAACVbQAAsmwAAEXHAACjuQAAKqsAAEGdAACXkAAAXIUAAEB+AACFeAAAIHQAAARxAADEbgAAkG4AAFtuAAAfbgAAkG0AAK1sAABAxwAAnrkAACWrAAA8nQAAkpAAAFeFAAA7fgAAgHgAABt0AAD/cAAAv24AAItuAABWbgAAGm4AAIRtAACobAAAO8cAAJm5AAAgqwAAN50AAI2QAABShQAANn4AAHt4AAAWdAAA+nAAALpuAACGbgAAUW4AAP9tAAB/bQAAo2wAADbHAACUuQAAG6sAADKdAACIkAAATYUAADF+AAB2eAAADHQAAPVwAAC1bgAAgW4AAExuAAD6bQAAem0AAIlsAAAwxwAAxbYAAHWoAACmmgAA+o0AAESFAAAtfgAAcngAAPNzAAA3EwAAZzUAAHluAAA9bgAA6x0AANBsAAB7bAAAc8gAADq6AADBqwAA2J0AADWRAAABhgAA134AABx5AAC3dAAApnEAAN1uAACpbgAAdG4AADhuAACpbQAAy2wAAMzlAABM4gAA3N8AADgUAgCw1QAArtUAAKzVAACq1QAASdUAAAPVAABczwAAWs8AAFjPAABVzwAAPs8AAJrOAACSzgAA6cYAAKe2AABXqAAAcZoAANyNAAA2hQAAH34AAGR4AADlcwAA53AAAA5wAADGbwAAxG8AALpvAADkbgAA4m4AAOBuAACzbgAAd24AADtuAACsbQAAzmwAAHlsAADqawAAxmsAAJ5rAACcawAAmWsAAHRoAABeaAAALWgAACtoAAAaaAAAGGgAAHZnAABaZwAAwWYAAL9mAAC9ZgAAu2YAAD1kAAAUZAAAEmQAAPdjAAD1YwAAYmIAAGBiAAD+YAAA/GAAAMJfAABCXwAA9VgAANVQAACDQwAAfkEAAGQ+AABcOwAAuToAAKc6AAByOQAAnzYAAOg1AADRLwAApC4AAEAeAAD8HQAASRoAADgTAABuDAAA6gsAAJwLAAANCgAALwkAAHkEAABEBAAAOwQAAC8EAAAJBAAAxmwAAAAAAAAIAK7/0QAKAK7/rv8LAK7/rv+u/67/rv+u/67/rv8FANEArv/RANEA0QDRANEA0QDRANEArv/7/67/DgDs/67/rv+u/67/0QDRANEA0QDRAA0AJQAMAEIAEABQABMAbQB7ABQAmAAPAKYAwwCu/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv8XAK7/dwCu/wcALgCu/yYArv8XABEAIwCu/w0Arv+u/67/rv86AK7/rv81AK7/rv+u/ygArv8HAK7/OwBFAK7/SACu/67/rv+u/67/AEGhtQgLwQYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoAAAAAAAAAAACAgICAgIQDFkBAB9QCAMHEhMUVxYXCAtpDB8KBQwOKRErDy0QLzAgMgY0NRscHR4LDCEiIyQlJicoDBgZFwQKGxwaICoKISIjJCUmJygMCg5TCixYMVhYWFhYWAwbHA8uWDMhIiMkJSYnKBsc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X05VTUVSSUMAAExDX1RJTUUAAAAAAExDX0NPTExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTAEGQ8wgLB0MuVVRGLTgAQajzCAugENCpAgBoqgIA+KoCAE5vIGVycm9yIGluZm9ybWF0aW9uAElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE11bHRpaG9wIGF0dGVtcHRlZABSZXF1aXJlZCBrZXkgbm90IGF2YWlsYWJsZQBLZXkgaGFzIGV4cGlyZWQAS2V5IGhhcyBiZWVuIHJldm9rZWQAS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlAAAAAAClAlsA8AG1BYwFJQGDBh0DlAT/AMcDMQMLBrwBjwF/A8oEKwDaBq8AQgNOA9wBDgQVAKEGDQGUAgsCOAZkArwC/wJdA+cECwfPAssF7wXbBeECHgZFAoUAggJsA28E8QDzAxgF2QDaA0wGVAJ7AZ0DvQQAAFEAFQK7ALMDbQD/AYUELwX5BDgAZQFGAZ8AtwaoAXMCUwEAQfiDCQsMIQQAAAAAAAAAAC8CAEGYhAkLBjUERwRWBABBroQJCwKgBABBwoQJCyJGBWAFbgVhBgAAzwEAAAAAAAAAAMkG6Qb5Bh4HOQdJB14HAEHwhAkLkQHRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAABkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEGRhgkLIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBy4YJCwEMAEHXhgkLFRMAAAAAEwAAAAAJDAAAAAAADAAADABBhYcJCwEQAEGRhwkLFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABBv4cJCwESAEHLhwkLHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBgogJCw4aAAAAGhoaAAAAAAAACQBBs4gJCwEUAEG/iAkLFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABB7YgJCwEWAEH5iAkLJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBBxIkJCwILAgBB7IkJCwj//////////wBBsIoJC/UI/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAAACAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNsAAAAA9EcCAA0CAAAOAgAADwIAABACAAARAgAAEgIAABMCAAAUAgAAFQIAABYCAAAXAgAAGAIAABkCAAAaAgAABAAAAAAAAAAwSAIAGwIAABwCAAD8/////P///zBIAgAdAgAAHgIAAFhHAgBsRwIAAAAAAHhIAgAfAgAAIAIAAA8CAAAQAgAAIQIAACICAAATAgAAFAIAABUCAAAjAgAAFwIAACQCAAAZAgAAJQIAAGhzAgDIRwIAjEkCAE5TdDNfXzI5YmFzaWNfaW9zSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAQHMCAPxHAgBOU3QzX18yMTViYXNpY19zdHJlYW1idWZJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAAAAxHMCAEhIAgAAAAAAAQAAALxHAgAD9P//TlN0M19fMjEzYmFzaWNfb3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAAaHMCAIRIAgD0RwIATlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxv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";return u}var uA;function XA(u){if(u==uA&&E)return new Uint8Array(E);var y=f(u);if(y)return y;throw"both async and sync fetching of the wasm failed"}function QA(u){return Promise.resolve().then(()=>XA(u))}function ZA(u,y,x){return QA(u).then(H=>WebAssembly.instantiate(H,y)).then(x,H=>{B(`failed to asynchronously prepare wasm: ${H}`),KA(H)})}function MA(u,y,x,H){return ZA(y,x,H)}function Me(){return{a:Lt}}function LA(){var u=Me();function y(H,k){return st=H.exports,b=st.y,O(),sA(st.z),mA(),st}UA();function x(H){y(H.instance)}return uA??=HA(),MA(E,uA,u,x).catch(o),{}}function pA(u){return i.agerrMessages.push(ke(u)),0}function Ft(u){this.name="ExitStatus",this.message=`Program terminated with exit(${u})`,this.status=u}var ht=u=>{u.forEach(y=>y(i))};function Ee(u,y="i8"){switch(y.endsWith("*")&&(y="*"),y){case"i1":return M[u];case"i8":return M[u];case"i16":return F[u>>1];case"i32":return _[u>>2];case"i64":return j[u>>3];case"float":return J[u>>2];case"double":return $[u>>3];case"*":return U[u>>2];default:KA(`invalid type for getValue: ${y}`)}}var Kt=u=>Oi(u),Je=()=>hn(),ze=typeof TextDecoder<"u"?new TextDecoder:void 0,ut=(u,y=0,x=NaN)=>{for(var H=y+x,k=y;u[k]&&!(k>=H);)++k;if(k-y>16&&u.buffer&&ze)return ze.decode(u.subarray(y,k));for(var T="";y>10,56320|Ae&1023)}}return T},ke=(u,y)=>u?ut(D,u,y):"",ei=(u,y,x,H)=>{KA(`Assertion failed: ${ke(u)}, at: `+[y?ke(y):"unknown filename",x,H?ke(H):"unknown function"])};class Y{constructor(y){this.excPtr=y,this.ptr=y-24}set_type(y){U[this.ptr+4>>2]=y}get_type(){return U[this.ptr+4>>2]}set_destructor(y){U[this.ptr+8>>2]=y}get_destructor(){return U[this.ptr+8>>2]}set_caught(y){y=y?1:0,M[this.ptr+12]=y}get_caught(){return M[this.ptr+12]!=0}set_rethrown(y){y=y?1:0,M[this.ptr+13]=y}get_rethrown(){return M[this.ptr+13]!=0}init(y,x){this.set_adjusted_ptr(0),this.set_type(y),this.set_destructor(x)}set_adjusted_ptr(y){U[this.ptr+16>>2]=y}get_adjusted_ptr(){return U[this.ptr+16>>2]}}var z=0,nA=(u,y,x)=>{var H=new Y(u);throw H.init(y,x),z=u,z},rA={isAbs:u=>u.charAt(0)==="/",splitPath:u=>{var y=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return y.exec(u).slice(1)},normalizeArray:(u,y)=>{for(var x=0,H=u.length-1;H>=0;H--){var k=u[H];k==="."?u.splice(H,1):k===".."?(u.splice(H,1),x++):x&&(u.splice(H,1),x--)}if(y)for(;x;x--)u.unshift("..");return u},normalize:u=>{var y=rA.isAbs(u),x=u.substr(-1)==="/";return u=rA.normalizeArray(u.split("/").filter(H=>!!H),!y).join("/"),!u&&!y&&(u="."),u&&x&&(u+="/"),(y?"/":"")+u},dirname:u=>{var y=rA.splitPath(u),x=y[0],H=y[1];return!x&&!H?".":(H&&(H=H.substr(0,H.length-1)),x+H)},basename:u=>{if(u==="/")return"/";u=rA.normalize(u),u=u.replace(/\/$/,"");var y=u.lastIndexOf("/");return y===-1?u:u.substr(y+1)},join:(...u)=>rA.normalize(u.join("/")),join2:(u,y)=>rA.normalize(u+"/"+y)},NA=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return u=>crypto.getRandomValues(u);KA("initRandomDevice")},Ie=u=>(Ie=NA())(u),Qe={resolve:(...u)=>{for(var y="",x=!1,H=u.length-1;H>=-1&&!x;H--){var k=H>=0?u[H]:L.cwd();if(typeof k!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!k)return"";y=k+"/"+y,x=rA.isAbs(k)}return y=rA.normalizeArray(y.split("/").filter(T=>!!T),!x).join("/"),(x?"/":"")+y||"."},relative:(u,y)=>{u=Qe.resolve(u).substr(1),y=Qe.resolve(y).substr(1);function x(Ae){for(var ne=0;ne=0&&Ae[Be]==="";Be--);return ne>Be?[]:Ae.slice(ne,Be-ne+1)}for(var H=x(u.split("/")),k=x(y.split("/")),T=Math.min(H.length,k.length),tA=T,lA=0;lA{for(var y=0,x=0;x=55296&&H<=57343?(y+=4,++x):y+=3}return y},Et=(u,y,x,H)=>{if(!(H>0))return 0;for(var k=x,T=x+H-1,tA=0;tA=55296&&lA<=57343){var wA=u.charCodeAt(++tA);lA=65536+((lA&1023)<<10)|wA&1023}if(lA<=127){if(x>=T)break;y[x++]=lA}else if(lA<=2047){if(x+1>=T)break;y[x++]=192|lA>>6,y[x++]=128|lA&63}else if(lA<=65535){if(x+2>=T)break;y[x++]=224|lA>>12,y[x++]=128|lA>>6&63,y[x++]=128|lA&63}else{if(x+3>=T)break;y[x++]=240|lA>>18,y[x++]=128|lA>>12&63,y[x++]=128|lA>>6&63,y[x++]=128|lA&63}}return y[x]=0,x-k};function et(u,y,x){var H=x>0?x:_A(u)+1,k=new Array(H),T=Et(u,k,0,k.length);return y&&(k.length=T),k}var Ye=()=>{if(!xA.length){var u=null;if(typeof window<"u"&&typeof window.prompt=="function"&&(u=window.prompt("Input: "),u!==null&&(u+=` +`)),!u)return null;xA=et(u,!0)}return xA.shift()},Ge={ttys:[],init(){},shutdown(){},register(u,y){Ge.ttys[u]={input:[],output:[],ops:y},L.registerDevice(u,Ge.stream_ops)},stream_ops:{open(u){var y=Ge.ttys[u.node.rdev];if(!y)throw new L.ErrnoError(43);u.tty=y,u.seekable=!1},close(u){u.tty.ops.fsync(u.tty)},fsync(u){u.tty.ops.fsync(u.tty)},read(u,y,x,H,k){if(!u.tty||!u.tty.ops.get_char)throw new L.ErrnoError(60);for(var T=0,tA=0;tA0&&(d(ut(u.output)),u.output=[])},ioctl_tcgets(u){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(u,y,x){return 0},ioctl_tiocgwinsz(u){return[24,80]}},default_tty1_ops:{put_char(u,y){y===null||y===10?(B(ut(u.output)),u.output=[]):y!=0&&u.output.push(y)},fsync(u){u.output&&u.output.length>0&&(B(ut(u.output)),u.output=[])}}},si=(u,y)=>{D.fill(0,u,u+y)},gn=(u,y)=>Math.ceil(u/y)*y,dn=u=>{u=gn(u,65536);var y=Ni(65536,u);return y&&si(y,u),y},Le={ops_table:null,mount(u){return Le.createNode(null,"/",16895,0)},createNode(u,y,x,H){if(L.isBlkdev(x)||L.isFIFO(x))throw new L.ErrnoError(63);Le.ops_table||={dir:{node:{getattr:Le.node_ops.getattr,setattr:Le.node_ops.setattr,lookup:Le.node_ops.lookup,mknod:Le.node_ops.mknod,rename:Le.node_ops.rename,unlink:Le.node_ops.unlink,rmdir:Le.node_ops.rmdir,readdir:Le.node_ops.readdir,symlink:Le.node_ops.symlink},stream:{llseek:Le.stream_ops.llseek}},file:{node:{getattr:Le.node_ops.getattr,setattr:Le.node_ops.setattr},stream:{llseek:Le.stream_ops.llseek,read:Le.stream_ops.read,write:Le.stream_ops.write,allocate:Le.stream_ops.allocate,mmap:Le.stream_ops.mmap,msync:Le.stream_ops.msync}},link:{node:{getattr:Le.node_ops.getattr,setattr:Le.node_ops.setattr,readlink:Le.node_ops.readlink},stream:{}},chrdev:{node:{getattr:Le.node_ops.getattr,setattr:Le.node_ops.setattr},stream:L.chrdev_stream_ops}};var k=L.createNode(u,y,x,H);return L.isDir(k.mode)?(k.node_ops=Le.ops_table.dir.node,k.stream_ops=Le.ops_table.dir.stream,k.contents={}):L.isFile(k.mode)?(k.node_ops=Le.ops_table.file.node,k.stream_ops=Le.ops_table.file.stream,k.usedBytes=0,k.contents=null):L.isLink(k.mode)?(k.node_ops=Le.ops_table.link.node,k.stream_ops=Le.ops_table.link.stream):L.isChrdev(k.mode)&&(k.node_ops=Le.ops_table.chrdev.node,k.stream_ops=Le.ops_table.chrdev.stream),k.timestamp=Date.now(),u&&(u.contents[y]=k,u.timestamp=k.timestamp),k},getFileDataAsTypedArray(u){return u.contents?u.contents.subarray?u.contents.subarray(0,u.usedBytes):new Uint8Array(u.contents):new Uint8Array(0)},expandFileStorage(u,y){var x=u.contents?u.contents.length:0;if(!(x>=y)){var H=1024*1024;y=Math.max(y,x*(x>>0),x!=0&&(y=Math.max(y,256));var k=u.contents;u.contents=new Uint8Array(y),u.usedBytes>0&&u.contents.set(k.subarray(0,u.usedBytes),0)}},resizeFileStorage(u,y){if(u.usedBytes!=y)if(y==0)u.contents=null,u.usedBytes=0;else{var x=u.contents;u.contents=new Uint8Array(y),x&&u.contents.set(x.subarray(0,Math.min(y,u.usedBytes))),u.usedBytes=y}},node_ops:{getattr(u){var y={};return y.dev=L.isChrdev(u.mode)?u.id:1,y.ino=u.id,y.mode=u.mode,y.nlink=1,y.uid=0,y.gid=0,y.rdev=u.rdev,L.isDir(u.mode)?y.size=4096:L.isFile(u.mode)?y.size=u.usedBytes:L.isLink(u.mode)?y.size=u.link.length:y.size=0,y.atime=new Date(u.timestamp),y.mtime=new Date(u.timestamp),y.ctime=new Date(u.timestamp),y.blksize=4096,y.blocks=Math.ceil(y.size/y.blksize),y},setattr(u,y){y.mode!==void 0&&(u.mode=y.mode),y.timestamp!==void 0&&(u.timestamp=y.timestamp),y.size!==void 0&&Le.resizeFileStorage(u,y.size)},lookup(u,y){throw L.genericErrors[44]},mknod(u,y,x,H){return Le.createNode(u,y,x,H)},rename(u,y,x){if(L.isDir(u.mode)){var H;try{H=L.lookupNode(y,x)}catch{}if(H)for(var k in H.contents)throw new L.ErrnoError(55)}delete u.parent.contents[u.name],u.parent.timestamp=Date.now(),u.name=x,y.contents[x]=u,y.timestamp=u.parent.timestamp},unlink(u,y){delete u.contents[y],u.timestamp=Date.now()},rmdir(u,y){var x=L.lookupNode(u,y);for(var H in x.contents)throw new L.ErrnoError(55);delete u.contents[y],u.timestamp=Date.now()},readdir(u){var y=[".",".."];for(var x of Object.keys(u.contents))y.push(x);return y},symlink(u,y,x){var H=Le.createNode(u,y,41471,0);return H.link=x,H},readlink(u){if(!L.isLink(u.mode))throw new L.ErrnoError(28);return u.link}},stream_ops:{read(u,y,x,H,k){var T=u.node.contents;if(k>=u.node.usedBytes)return 0;var tA=Math.min(u.node.usedBytes-k,H);if(tA>8&&T.subarray)y.set(T.subarray(k,k+tA),x);else for(var lA=0;lA0||x+y{var k=H?"":`al ${u}`;C(u).then(T=>{y(new Uint8Array(T)),k&&mA()},T=>{if(x)x();else throw`Loading data file "${u}" failed.`}),k&&UA()},Qi=(u,y,x,H,k,T)=>{L.createDataFile(u,y,x,H,k,T)},bi=[],zi=(u,y,x,H)=>{typeof Browser<"u"&&Browser.init();var k=!1;return bi.forEach(T=>{k||T.canHandle(y)&&(T.handle(u,y,x,H),k=!0)}),k},yt=(u,y,x,H,k,T,tA,lA,wA,Ae)=>{var ne=y?Qe.resolve(rA.join2(u,y)):u;function Be(Te){function Se(Ne){Ae?.(),lA||Qi(u,y,Ne,H,k,wA),T?.(),mA()}zi(Te,ne,Se,()=>{tA?.(),mA()})||Se(Te)}UA(),typeof x=="string"?Zi(x,Be,tA):Be(x)},Xi=u=>{var y={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},x=y[u];if(typeof x>"u")throw new Error(`Unknown file open mode: ${u}`);return x},_t=(u,y)=>{var x=0;return u&&(x|=365),y&&(x|=146),x},L={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(u){this.name="ErrnoError",this.errno=u}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(u){this.node=u}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(u){this.shared.flags=u}get position(){return this.shared.position}set position(u){this.shared.position=u}},FSNode:class{constructor(u,y,x,H){u||(u=this),this.parent=u,this.mount=u.mount,this.mounted=null,this.id=L.nextInode++,this.name=y,this.mode=x,this.node_ops={},this.stream_ops={},this.rdev=H,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(u){u?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(u){u?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return L.isDir(this.mode)}get isDevice(){return L.isChrdev(this.mode)}},lookupPath(u,y={}){if(u=Qe.resolve(u),!u)return{path:"",node:null};var x={follow_mount:!0,recurse_count:0};if(y=Object.assign(x,y),y.recurse_count>8)throw new L.ErrnoError(32);for(var H=u.split("/").filter(Be=>!!Be),k=L.root,T="/",tA=0;tA40)throw new L.ErrnoError(32)}}return{path:T,node:k}},getPath(u){for(var y;;){if(L.isRoot(u)){var x=u.mount.mountpoint;return y?x[x.length-1]!=="/"?`${x}/${y}`:x+y:x}y=y?`${u.name}/${y}`:u.name,u=u.parent}},hashName(u,y){for(var x=0,H=0;H>>0)%L.nameTable.length},hashAddNode(u){var y=L.hashName(u.parent.id,u.name);u.name_next=L.nameTable[y],L.nameTable[y]=u},hashRemoveNode(u){var y=L.hashName(u.parent.id,u.name);if(L.nameTable[y]===u)L.nameTable[y]=u.name_next;else for(var x=L.nameTable[y];x;){if(x.name_next===u){x.name_next=u.name_next;break}x=x.name_next}},lookupNode(u,y){var x=L.mayLookup(u);if(x)throw new L.ErrnoError(x);for(var H=L.hashName(u.id,y),k=L.nameTable[H];k;k=k.name_next){var T=k.name;if(k.parent.id===u.id&&T===y)return k}return L.lookup(u,y)},createNode(u,y,x,H){var k=new L.FSNode(u,y,x,H);return L.hashAddNode(k),k},destroyNode(u){L.hashRemoveNode(u)},isRoot(u){return u===u.parent},isMountpoint(u){return!!u.mounted},isFile(u){return(u&61440)===32768},isDir(u){return(u&61440)===16384},isLink(u){return(u&61440)===40960},isChrdev(u){return(u&61440)===8192},isBlkdev(u){return(u&61440)===24576},isFIFO(u){return(u&61440)===4096},isSocket(u){return(u&49152)===49152},flagsToPermissionString(u){var y=["r","w","rw"][u&3];return u&512&&(y+="w"),y},nodePermissions(u,y){return L.ignorePermissions?0:y.includes("r")&&!(u.mode&292)||y.includes("w")&&!(u.mode&146)||y.includes("x")&&!(u.mode&73)?2:0},mayLookup(u){if(!L.isDir(u.mode))return 54;var y=L.nodePermissions(u,"x");return y||(u.node_ops.lookup?0:2)},mayCreate(u,y){try{var x=L.lookupNode(u,y);return 20}catch{}return L.nodePermissions(u,"wx")},mayDelete(u,y,x){var H;try{H=L.lookupNode(u,y)}catch(T){return T.errno}var k=L.nodePermissions(u,"wx");if(k)return k;if(x){if(!L.isDir(H.mode))return 54;if(L.isRoot(H)||L.getPath(H)===L.cwd())return 10}else if(L.isDir(H.mode))return 31;return 0},mayOpen(u,y){return u?L.isLink(u.mode)?32:L.isDir(u.mode)&&(L.flagsToPermissionString(y)!=="r"||y&512)?31:L.nodePermissions(u,L.flagsToPermissionString(y)):44},MAX_OPEN_FDS:4096,nextfd(){for(var u=0;u<=L.MAX_OPEN_FDS;u++)if(!L.streams[u])return u;throw new L.ErrnoError(33)},getStreamChecked(u){var y=L.getStream(u);if(!y)throw new L.ErrnoError(8);return y},getStream:u=>L.streams[u],createStream(u,y=-1){return u=Object.assign(new L.FSStream,u),y==-1&&(y=L.nextfd()),u.fd=y,L.streams[y]=u,u},closeStream(u){L.streams[u]=null},dupStream(u,y=-1){var x=L.createStream(u,y);return x.stream_ops?.dup?.(x),x},chrdev_stream_ops:{open(u){var y=L.getDevice(u.node.rdev);u.stream_ops=y.stream_ops,u.stream_ops.open?.(u)},llseek(){throw new L.ErrnoError(70)}},major:u=>u>>8,minor:u=>u&255,makedev:(u,y)=>u<<8|y,registerDevice(u,y){L.devices[u]={stream_ops:y}},getDevice:u=>L.devices[u],getMounts(u){for(var y=[],x=[u];x.length;){var H=x.pop();y.push(H),x.push(...H.mounts)}return y},syncfs(u,y){typeof u=="function"&&(y=u,u=!1),L.syncFSRequests++,L.syncFSRequests>1&&B(`warning: ${L.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var x=L.getMounts(L.root.mount),H=0;function k(tA){return L.syncFSRequests--,y(tA)}function T(tA){if(tA)return T.errored?void 0:(T.errored=!0,k(tA));++H>=x.length&&k(null)}x.forEach(tA=>{if(!tA.type.syncfs)return T(null);tA.type.syncfs(tA,u,T)})},mount(u,y,x){var H=x==="/",k=!x,T;if(H&&L.root)throw new L.ErrnoError(10);if(!H&&!k){var tA=L.lookupPath(x,{follow_mount:!1});if(x=tA.path,T=tA.node,L.isMountpoint(T))throw new L.ErrnoError(10);if(!L.isDir(T.mode))throw new L.ErrnoError(54)}var lA={type:u,opts:y,mountpoint:x,mounts:[]},wA=u.mount(lA);return wA.mount=lA,lA.root=wA,H?L.root=wA:T&&(T.mounted=lA,T.mount&&T.mount.mounts.push(lA)),wA},unmount(u){var y=L.lookupPath(u,{follow_mount:!1});if(!L.isMountpoint(y.node))throw new L.ErrnoError(28);var x=y.node,H=x.mounted,k=L.getMounts(H);Object.keys(L.nameTable).forEach(tA=>{for(var lA=L.nameTable[tA];lA;){var wA=lA.name_next;k.includes(lA.mount)&&L.destroyNode(lA),lA=wA}}),x.mounted=null;var T=x.mount.mounts.indexOf(H);x.mount.mounts.splice(T,1)},lookup(u,y){return u.node_ops.lookup(u,y)},mknod(u,y,x){var H=L.lookupPath(u,{parent:!0}),k=H.node,T=rA.basename(u);if(!T||T==="."||T==="..")throw new L.ErrnoError(28);var tA=L.mayCreate(k,T);if(tA)throw new L.ErrnoError(tA);if(!k.node_ops.mknod)throw new L.ErrnoError(63);return k.node_ops.mknod(k,T,y,x)},create(u,y){return y=y!==void 0?y:438,y&=4095,y|=32768,L.mknod(u,y,0)},mkdir(u,y){return y=y!==void 0?y:511,y&=1023,y|=16384,L.mknod(u,y,0)},mkdirTree(u,y){for(var x=u.split("/"),H="",k=0;k"u"&&(x=y,y=438),y|=8192,L.mknod(u,y,x)},symlink(u,y){if(!Qe.resolve(u))throw new L.ErrnoError(44);var x=L.lookupPath(y,{parent:!0}),H=x.node;if(!H)throw new L.ErrnoError(44);var k=rA.basename(y),T=L.mayCreate(H,k);if(T)throw new L.ErrnoError(T);if(!H.node_ops.symlink)throw new L.ErrnoError(63);return H.node_ops.symlink(H,k,u)},rename(u,y){var x=rA.dirname(u),H=rA.dirname(y),k=rA.basename(u),T=rA.basename(y),tA,lA,wA;if(tA=L.lookupPath(u,{parent:!0}),lA=tA.node,tA=L.lookupPath(y,{parent:!0}),wA=tA.node,!lA||!wA)throw new L.ErrnoError(44);if(lA.mount!==wA.mount)throw new L.ErrnoError(75);var Ae=L.lookupNode(lA,k),ne=Qe.relative(u,H);if(ne.charAt(0)!==".")throw new L.ErrnoError(28);if(ne=Qe.relative(y,x),ne.charAt(0)!==".")throw new L.ErrnoError(55);var Be;try{Be=L.lookupNode(wA,T)}catch{}if(Ae!==Be){var Te=L.isDir(Ae.mode),Se=L.mayDelete(lA,k,Te);if(Se)throw new L.ErrnoError(Se);if(Se=Be?L.mayDelete(wA,T,Te):L.mayCreate(wA,T),Se)throw new L.ErrnoError(Se);if(!lA.node_ops.rename)throw new L.ErrnoError(63);if(L.isMountpoint(Ae)||Be&&L.isMountpoint(Be))throw new L.ErrnoError(10);if(wA!==lA&&(Se=L.nodePermissions(lA,"w"),Se))throw new L.ErrnoError(Se);L.hashRemoveNode(Ae);try{lA.node_ops.rename(Ae,wA,T),Ae.parent=wA}catch(Ne){throw Ne}finally{L.hashAddNode(Ae)}}},rmdir(u){var y=L.lookupPath(u,{parent:!0}),x=y.node,H=rA.basename(u),k=L.lookupNode(x,H),T=L.mayDelete(x,H,!0);if(T)throw new L.ErrnoError(T);if(!x.node_ops.rmdir)throw new L.ErrnoError(63);if(L.isMountpoint(k))throw new L.ErrnoError(10);x.node_ops.rmdir(x,H),L.destroyNode(k)},readdir(u){var y=L.lookupPath(u,{follow:!0}),x=y.node;if(!x.node_ops.readdir)throw new L.ErrnoError(54);return x.node_ops.readdir(x)},unlink(u){var y=L.lookupPath(u,{parent:!0}),x=y.node;if(!x)throw new L.ErrnoError(44);var H=rA.basename(u),k=L.lookupNode(x,H),T=L.mayDelete(x,H,!1);if(T)throw new L.ErrnoError(T);if(!x.node_ops.unlink)throw new L.ErrnoError(63);if(L.isMountpoint(k))throw new L.ErrnoError(10);x.node_ops.unlink(x,H),L.destroyNode(k)},readlink(u){var y=L.lookupPath(u),x=y.node;if(!x)throw new L.ErrnoError(44);if(!x.node_ops.readlink)throw new L.ErrnoError(28);return Qe.resolve(L.getPath(x.parent),x.node_ops.readlink(x))},stat(u,y){var x=L.lookupPath(u,{follow:!y}),H=x.node;if(!H)throw new L.ErrnoError(44);if(!H.node_ops.getattr)throw new L.ErrnoError(63);return H.node_ops.getattr(H)},lstat(u){return L.stat(u,!0)},chmod(u,y,x){var H;if(typeof u=="string"){var k=L.lookupPath(u,{follow:!x});H=k.node}else H=u;if(!H.node_ops.setattr)throw new L.ErrnoError(63);H.node_ops.setattr(H,{mode:y&4095|H.mode&-4096,timestamp:Date.now()})},lchmod(u,y){L.chmod(u,y,!0)},fchmod(u,y){var x=L.getStreamChecked(u);L.chmod(x.node,y)},chown(u,y,x,H){var k;if(typeof u=="string"){var T=L.lookupPath(u,{follow:!H});k=T.node}else k=u;if(!k.node_ops.setattr)throw new L.ErrnoError(63);k.node_ops.setattr(k,{timestamp:Date.now()})},lchown(u,y,x){L.chown(u,y,x,!0)},fchown(u,y,x){var H=L.getStreamChecked(u);L.chown(H.node,y,x)},truncate(u,y){if(y<0)throw new L.ErrnoError(28);var x;if(typeof u=="string"){var H=L.lookupPath(u,{follow:!0});x=H.node}else x=u;if(!x.node_ops.setattr)throw new L.ErrnoError(63);if(L.isDir(x.mode))throw new L.ErrnoError(31);if(!L.isFile(x.mode))throw new L.ErrnoError(28);var k=L.nodePermissions(x,"w");if(k)throw new L.ErrnoError(k);x.node_ops.setattr(x,{size:y,timestamp:Date.now()})},ftruncate(u,y){var x=L.getStreamChecked(u);if((x.flags&2097155)===0)throw new L.ErrnoError(28);L.truncate(x.node,y)},utime(u,y,x){var H=L.lookupPath(u,{follow:!0}),k=H.node;k.node_ops.setattr(k,{timestamp:Math.max(y,x)})},open(u,y,x){if(u==="")throw new L.ErrnoError(44);y=typeof y=="string"?Xi(y):y,y&64?(x=typeof x>"u"?438:x,x=x&4095|32768):x=0;var H;if(typeof u=="object")H=u;else{u=rA.normalize(u);try{var k=L.lookupPath(u,{follow:!(y&131072)});H=k.node}catch{}}var T=!1;if(y&64)if(H){if(y&128)throw new L.ErrnoError(20)}else H=L.mknod(u,x,0),T=!0;if(!H)throw new L.ErrnoError(44);if(L.isChrdev(H.mode)&&(y&=-513),y&65536&&!L.isDir(H.mode))throw new L.ErrnoError(54);if(!T){var tA=L.mayOpen(H,y);if(tA)throw new L.ErrnoError(tA)}y&512&&!T&&L.truncate(H,0),y&=-131713;var lA=L.createStream({node:H,path:L.getPath(H),flags:y,seekable:!0,position:0,stream_ops:H.stream_ops,ungotten:[],error:!1});return lA.stream_ops.open&&lA.stream_ops.open(lA),lA},close(u){if(L.isClosed(u))throw new L.ErrnoError(8);u.getdents&&(u.getdents=null);try{u.stream_ops.close&&u.stream_ops.close(u)}catch(y){throw y}finally{L.closeStream(u.fd)}u.fd=null},isClosed(u){return u.fd===null},llseek(u,y,x){if(L.isClosed(u))throw new L.ErrnoError(8);if(!u.seekable||!u.stream_ops.llseek)throw new L.ErrnoError(70);if(x!=0&&x!=1&&x!=2)throw new L.ErrnoError(28);return u.position=u.stream_ops.llseek(u,y,x),u.ungotten=[],u.position},read(u,y,x,H,k){if(H<0||k<0)throw new L.ErrnoError(28);if(L.isClosed(u))throw new L.ErrnoError(8);if((u.flags&2097155)===1)throw new L.ErrnoError(8);if(L.isDir(u.node.mode))throw new L.ErrnoError(31);if(!u.stream_ops.read)throw new L.ErrnoError(28);var T=typeof k<"u";if(!T)k=u.position;else if(!u.seekable)throw new L.ErrnoError(70);var tA=u.stream_ops.read(u,y,x,H,k);return T||(u.position+=tA),tA},write(u,y,x,H,k,T){if(H<0||k<0)throw new L.ErrnoError(28);if(L.isClosed(u))throw new L.ErrnoError(8);if((u.flags&2097155)===0)throw new L.ErrnoError(8);if(L.isDir(u.node.mode))throw new L.ErrnoError(31);if(!u.stream_ops.write)throw new L.ErrnoError(28);u.seekable&&u.flags&1024&&L.llseek(u,0,2);var tA=typeof k<"u";if(!tA)k=u.position;else if(!u.seekable)throw new L.ErrnoError(70);var lA=u.stream_ops.write(u,y,x,H,k,T);return tA||(u.position+=lA),lA},allocate(u,y,x){if(L.isClosed(u))throw new L.ErrnoError(8);if(y<0||x<=0)throw new L.ErrnoError(28);if((u.flags&2097155)===0)throw new L.ErrnoError(8);if(!L.isFile(u.node.mode)&&!L.isDir(u.node.mode))throw new L.ErrnoError(43);if(!u.stream_ops.allocate)throw new L.ErrnoError(138);u.stream_ops.allocate(u,y,x)},mmap(u,y,x,H,k){if((H&2)!==0&&(k&2)===0&&(u.flags&2097155)!==2)throw new L.ErrnoError(2);if((u.flags&2097155)===1)throw new L.ErrnoError(2);if(!u.stream_ops.mmap)throw new L.ErrnoError(43);if(!y)throw new L.ErrnoError(28);return u.stream_ops.mmap(u,y,x,H,k)},msync(u,y,x,H,k){return u.stream_ops.msync?u.stream_ops.msync(u,y,x,H,k):0},ioctl(u,y,x){if(!u.stream_ops.ioctl)throw new L.ErrnoError(59);return u.stream_ops.ioctl(u,y,x)},readFile(u,y={}){if(y.flags=y.flags||0,y.encoding=y.encoding||"binary",y.encoding!=="utf8"&&y.encoding!=="binary")throw new Error(`Invalid encoding type "${y.encoding}"`);var x,H=L.open(u,y.flags),k=L.stat(u),T=k.size,tA=new Uint8Array(T);return L.read(H,tA,0,T,0),y.encoding==="utf8"?x=ut(tA):y.encoding==="binary"&&(x=tA),L.close(H),x},writeFile(u,y,x={}){x.flags=x.flags||577;var H=L.open(u,x.flags,x.mode);if(typeof y=="string"){var k=new Uint8Array(_A(y)+1),T=Et(y,k,0,k.length);L.write(H,k,0,T,void 0,x.canOwn)}else if(ArrayBuffer.isView(y))L.write(H,y,0,y.byteLength,void 0,x.canOwn);else throw new Error("Unsupported data type");L.close(H)},cwd:()=>L.currentPath,chdir(u){var y=L.lookupPath(u,{follow:!0});if(y.node===null)throw new L.ErrnoError(44);if(!L.isDir(y.node.mode))throw new L.ErrnoError(54);var x=L.nodePermissions(y.node,"x");if(x)throw new L.ErrnoError(x);L.currentPath=y.path},createDefaultDirectories(){L.mkdir("/tmp"),L.mkdir("/home"),L.mkdir("/home/web_user")},createDefaultDevices(){L.mkdir("/dev"),L.registerDevice(L.makedev(1,3),{read:()=>0,write:(H,k,T,tA,lA)=>tA}),L.mkdev("/dev/null",L.makedev(1,3)),Ge.register(L.makedev(5,0),Ge.default_tty_ops),Ge.register(L.makedev(6,0),Ge.default_tty1_ops),L.mkdev("/dev/tty",L.makedev(5,0)),L.mkdev("/dev/tty1",L.makedev(6,0));var u=new Uint8Array(1024),y=0,x=()=>(y===0&&(y=Ie(u).byteLength),u[--y]);L.createDevice("/dev","random",x),L.createDevice("/dev","urandom",x),L.mkdir("/dev/shm"),L.mkdir("/dev/shm/tmp")},createSpecialDirectories(){L.mkdir("/proc");var u=L.mkdir("/proc/self");L.mkdir("/proc/self/fd"),L.mount({mount(){var y=L.createNode(u,"fd",16895,73);return y.node_ops={lookup(x,H){var k=+H,T=L.getStreamChecked(k),tA={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>T.path}};return tA.parent=tA,tA}},y}},{},"/proc/self/fd")},createStandardStreams(u,y,x){u?L.createDevice("/dev","stdin",u):L.symlink("/dev/tty","/dev/stdin"),y?L.createDevice("/dev","stdout",null,y):L.symlink("/dev/tty","/dev/stdout"),x?L.createDevice("/dev","stderr",null,x):L.symlink("/dev/tty1","/dev/stderr"),L.open("/dev/stdin",0),L.open("/dev/stdout",1),L.open("/dev/stderr",1)},staticInit(){[44].forEach(u=>{L.genericErrors[u]=new L.ErrnoError(u),L.genericErrors[u].stack=""}),L.nameTable=new Array(4096),L.mount(Le,{},"/"),L.createDefaultDirectories(),L.createDefaultDevices(),L.createSpecialDirectories(),L.filesystems={MEMFS:Le}},init(u,y,x){L.initialized=!0,L.createStandardStreams(u,y,x)},quit(){L.initialized=!1;for(var u=0;uthis.length-1||Se<0)){var Ne=Se%this.chunkSize,ni=Se/this.chunkSize|0;return this.getter(ni)[Ne]}}setDataGetter(Se){this.getter=Se}cacheLength(){var Se=new XMLHttpRequest;if(Se.open("HEAD",x,!1),Se.send(null),!(Se.status>=200&&Se.status<300||Se.status===304))throw new Error("Couldn't load "+x+". Status: "+Se.status);var Ne=Number(Se.getResponseHeader("Content-length")),ni,Un=(ni=Se.getResponseHeader("Accept-Ranges"))&&ni==="bytes",q=(ni=Se.getResponseHeader("Content-Encoding"))&&ni==="gzip",fA=1024*1024;Un||(fA=Ne);var PA=(pe,De)=>{if(pe>De)throw new Error("invalid range ("+pe+", "+De+") or no bytes requested!");if(De>Ne-1)throw new Error("only "+Ne+" bytes available! programmer error!");var ot=new XMLHttpRequest;if(ot.open("GET",x,!1),Ne!==fA&&ot.setRequestHeader("Range","bytes="+pe+"-"+De),ot.responseType="arraybuffer",ot.overrideMimeType&&ot.overrideMimeType("text/plain; charset=x-user-defined"),ot.send(null),!(ot.status>=200&&ot.status<300||ot.status===304))throw new Error("Couldn't load "+x+". Status: "+ot.status);return ot.response!==void 0?new Uint8Array(ot.response||[]):et(ot.responseText||"",!0)},Fe=this;Fe.setDataGetter(pe=>{var De=pe*fA,ot=(pe+1)*fA-1;if(ot=Math.min(ot,Ne-1),typeof Fe.chunks[pe]>"u"&&(Fe.chunks[pe]=PA(De,ot)),typeof Fe.chunks[pe]>"u")throw new Error("doXHR failed!");return Fe.chunks[pe]}),(q||!Ne)&&(fA=Ne=1,Ne=this.getter(0).length,fA=Ne,d("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=Ne,this._chunkSize=fA,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<"u"){throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var tA,lA}else var lA={isDevice:!1,url:x};var wA=L.createFile(u,y,lA,H,k);lA.contents?wA.contents=lA.contents:lA.url&&(wA.contents=null,wA.url=lA.url),Object.defineProperties(wA,{usedBytes:{get:function(){return this.contents.length}}});var Ae={},ne=Object.keys(wA.stream_ops);ne.forEach(Te=>{var Se=wA.stream_ops[Te];Ae[Te]=(...Ne)=>(L.forceLoadFile(wA),Se(...Ne))});function Be(Te,Se,Ne,ni,Un){var q=Te.node.contents;if(Un>=q.length)return 0;var fA=Math.min(q.length-Un,ni);if(q.slice)for(var PA=0;PA(L.forceLoadFile(wA),Be(Te,Se,Ne,ni,Un)),Ae.mmap=(Te,Se,Ne,ni,Un)=>{L.forceLoadFile(wA);var q=dn(Se);if(!q)throw new L.ErrnoError(48);return Be(Te,M,q,Se,Ne),{ptr:q,allocated:!0}},wA.stream_ops=Ae,wA}},ct={DEFAULT_POLLMASK:5,calculateAt(u,y,x){if(rA.isAbs(y))return y;var H;if(u===-100)H=L.cwd();else{var k=ct.getStreamFromFD(u);H=k.path}if(y.length==0){if(!x)throw new L.ErrnoError(44);return H}return rA.join2(H,y)},doStat(u,y,x){var H=u(y);_[x>>2]=H.dev,_[x+4>>2]=H.mode,U[x+8>>2]=H.nlink,_[x+12>>2]=H.uid,_[x+16>>2]=H.gid,_[x+20>>2]=H.rdev,j[x+24>>3]=BigInt(H.size),_[x+32>>2]=4096,_[x+36>>2]=H.blocks;var k=H.atime.getTime(),T=H.mtime.getTime(),tA=H.ctime.getTime();return j[x+40>>3]=BigInt(Math.floor(k/1e3)),U[x+48>>2]=k%1e3*1e3*1e3,j[x+56>>3]=BigInt(Math.floor(T/1e3)),U[x+64>>2]=T%1e3*1e3*1e3,j[x+72>>3]=BigInt(Math.floor(tA/1e3)),U[x+80>>2]=tA%1e3*1e3*1e3,j[x+88>>3]=BigInt(H.ino),0},doMsync(u,y,x,H,k){if(!L.isFile(y.node.mode))throw new L.ErrnoError(43);if(H&2)return 0;var T=D.slice(u,u+x);L.msync(y,T,k,x,H)},getStreamFromFD(u){var y=L.getStreamChecked(u);return y},varargs:void 0,getStr(u){var y=ke(u);return y}};function li(u,y,x,H){try{if(y=ct.getStr(y),y=ct.calculateAt(u,y),x&-8)return-28;var k=L.lookupPath(y,{follow:!0}),T=k.node;if(!T)return-44;var tA="";return x&4&&(tA+="r"),x&2&&(tA+="w"),x&1&&(tA+="x"),tA&&L.nodePermissions(T,tA)?-2:0}catch(lA){if(typeof L>"u"||lA.name!=="ErrnoError")throw lA;return-lA.errno}}function Bn(){var u=_[+ct.varargs>>2];return ct.varargs+=4,u}var En=Bn;function qn(u,y,x){ct.varargs=x;try{var H=ct.getStreamFromFD(u);switch(y){case 0:{var k=Bn();if(k<0)return-28;for(;L.streams[k];)k++;var T;return T=L.dupStream(H,k),T.fd}case 1:case 2:return 0;case 3:return H.flags;case 4:{var k=Bn();return H.flags|=k,0}case 12:{var k=En(),tA=0;return F[k+tA>>1]=2,0}case 13:case 14:return 0}return-28}catch(lA){if(typeof L>"u"||lA.name!=="ErrnoError")throw lA;return-lA.errno}}function Uo(u,y){try{var x=ct.getStreamFromFD(u);return ct.doStat(L.stat,x.path,y)}catch(H){if(typeof L>"u"||H.name!=="ErrnoError")throw H;return-H.errno}}function Co(u,y,x){ct.varargs=x;try{var H=ct.getStreamFromFD(u);switch(y){case 21509:return H.tty?0:-59;case 21505:{if(!H.tty)return-59;if(H.tty.ops.ioctl_tcgets){var k=H.tty.ops.ioctl_tcgets(H),T=En();_[T>>2]=k.c_iflag||0,_[T+4>>2]=k.c_oflag||0,_[T+8>>2]=k.c_cflag||0,_[T+12>>2]=k.c_lflag||0;for(var tA=0;tA<32;tA++)M[T+tA+17]=k.c_cc[tA]||0;return 0}return 0}case 21510:case 21511:case 21512:return H.tty?0:-59;case 21506:case 21507:case 21508:{if(!H.tty)return-59;if(H.tty.ops.ioctl_tcsets){for(var T=En(),lA=_[T>>2],wA=_[T+4>>2],Ae=_[T+8>>2],ne=_[T+12>>2],Be=[],tA=0;tA<32;tA++)Be.push(M[T+tA+17]);return H.tty.ops.ioctl_tcsets(H.tty,y,{c_iflag:lA,c_oflag:wA,c_cflag:Ae,c_lflag:ne,c_cc:Be})}return 0}case 21519:{if(!H.tty)return-59;var T=En();return _[T>>2]=0,0}case 21520:return H.tty?-28:-59;case 21531:{var T=En();return L.ioctl(H,y,T)}case 21523:{if(!H.tty)return-59;if(H.tty.ops.ioctl_tiocgwinsz){var Te=H.tty.ops.ioctl_tiocgwinsz(H.tty),T=En();F[T>>1]=Te[0],F[T+2>>1]=Te[1]}return 0}case 21524:return H.tty?0:-59;case 21515:return H.tty?0:-59;default:return-28}}catch(Se){if(typeof L>"u"||Se.name!=="ErrnoError")throw Se;return-Se.errno}}function Mo(u,y,x,H){try{y=ct.getStr(y);var k=H&256,T=H&4096;return H=H&-6401,y=ct.calculateAt(u,y,T),ct.doStat(k?L.lstat:L.stat,y,x)}catch(tA){if(typeof L>"u"||tA.name!=="ErrnoError")throw tA;return-tA.errno}}function Wo(u,y,x,H){ct.varargs=H;try{y=ct.getStr(y),y=ct.calculateAt(u,y);var k=H?Bn():0;return L.open(y,x,k).fd}catch(T){if(typeof L>"u"||T.name!=="ErrnoError")throw T;return-T.errno}}function wo(u,y){try{return u=ct.getStr(u),ct.doStat(L.stat,u,y)}catch(x){if(typeof L>"u"||x.name!=="ErrnoError")throw x;return-x.errno}}var Qa=()=>{KA("")},Zo=u=>u%4===0&&(u%100!==0||u%400===0),ra=[0,31,60,91,121,152,182,213,244,274,305,335],Do=[0,31,59,90,120,151,181,212,243,273,304,334],re=u=>{var y=Zo(u.getFullYear()),x=y?ra:Do,H=x[u.getMonth()]+u.getDate()-1;return H},di=9007199254740992,ln=-9007199254740992,Qn=u=>udi?NaN:Number(u);function Jo(u,y){u=Qn(u);var x=new Date(u*1e3);_[y>>2]=x.getSeconds(),_[y+4>>2]=x.getMinutes(),_[y+8>>2]=x.getHours(),_[y+12>>2]=x.getDate(),_[y+16>>2]=x.getMonth(),_[y+20>>2]=x.getFullYear()-1900,_[y+24>>2]=x.getDay();var H=re(x)|0;_[y+28>>2]=H,_[y+36>>2]=-(x.getTimezoneOffset()*60);var k=new Date(x.getFullYear(),0,1),T=new Date(x.getFullYear(),6,1).getTimezoneOffset(),tA=k.getTimezoneOffset(),lA=(T!=tA&&x.getTimezoneOffset()==Math.min(tA,T))|0;_[y+32>>2]=lA}function ya(u,y,x,H,k,T,tA){k=Qn(k);try{if(isNaN(k))return 61;var lA=ct.getStreamFromFD(H),wA=L.mmap(lA,u,k,y,x),Ae=wA.ptr;return _[T>>2]=wA.allocated,U[tA>>2]=Ae,0}catch(ne){if(typeof L>"u"||ne.name!=="ErrnoError")throw ne;return-ne.errno}}function wi(u,y,x,H,k,T){T=Qn(T);try{var tA=ct.getStreamFromFD(k);x&2&&ct.doMsync(u,tA,y,H,T)}catch(lA){if(typeof L>"u"||lA.name!=="ErrnoError")throw lA;return-lA.errno}}var Io=(u,y,x)=>Et(u,D,y,x),tr=(u,y,x,H)=>{var k=new Date().getFullYear(),T=new Date(k,0,1),tA=new Date(k,6,1),lA=T.getTimezoneOffset(),wA=tA.getTimezoneOffset(),Ae=Math.max(lA,wA);U[u>>2]=Ae*60,_[y>>2]=+(lA!=wA);var ne=Se=>{var Ne=Se>=0?"-":"+",ni=Math.abs(Se),Un=String(Math.floor(ni/60)).padStart(2,"0"),q=String(ni%60).padStart(2,"0");return`UTC${Ne}${Un}${q}`},Be=ne(lA),Te=ne(wA);wADate.now(),Pa=()=>2147483648,Gn=u=>{var y=b.buffer,x=(u-y.byteLength+65535)/65536|0;try{return b.grow(x),O(),1}catch{}},Si=u=>{var y=D.length;u>>>=0;var x=Pa();if(u>x)return!1;for(var H=1;H<=4;H*=2){var k=y*(1+.2/H);k=Math.min(k,u+100663296);var T=Math.min(x,gn(Math.max(u,k),65536)),tA=Gn(T);if(tA)return!0}return!1},Pt={},Sn=()=>s,Bo=()=>{if(!Bo.strings){var u=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",y={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:u,_:Sn()};for(var x in Pt)Pt[x]===void 0?delete y[x]:y[x]=Pt[x];var H=[];for(var x in y)H.push(`${x}=${y[x]}`);Bo.strings=H}return Bo.strings},ko=(u,y)=>{for(var x=0;x{var x=0;return Bo().forEach((H,k)=>{var T=y+x;U[u+k*4>>2]=T,ko(H,T),x+=H.length+1}),0},VA=(u,y)=>{var x=Bo();U[u>>2]=x.length;var H=0;return x.forEach(k=>H+=k.length+1),U[y>>2]=H,0},me=u=>{g(u,new Ft(u))},dA=(u,y)=>{me(u)},SA=dA;function oe(u){try{var y=ct.getStreamFromFD(u);return L.close(y),0}catch(x){if(typeof L>"u"||x.name!=="ErrnoError")throw x;return x.errno}}var xe=(u,y,x,H)=>{for(var k=0,T=0;T>2],lA=U[y+4>>2];y+=8;var wA=L.read(u,M,tA,lA,H);if(wA<0)return-1;if(k+=wA,wA>2]=T,0}catch(tA){if(typeof L>"u"||tA.name!=="ErrnoError")throw tA;return tA.errno}}function rt(u,y,x,H){y=Qn(y);try{if(isNaN(y))return 61;var k=ct.getStreamFromFD(u);return L.llseek(k,y,x),j[H>>3]=BigInt(k.position),k.getdents&&y===0&&x===0&&(k.getdents=null),0}catch(T){if(typeof L>"u"||T.name!=="ErrnoError")throw T;return T.errno}}var bt=(u,y,x,H)=>{for(var k=0,T=0;T>2],lA=U[y+4>>2];y+=8;var wA=L.write(u,M,tA,lA,H);if(wA<0)return-1;if(k+=wA,wA>2]=T,0}catch(tA){if(typeof L>"u"||tA.name!=="ErrnoError")throw tA;return tA.errno}}var xi=u=>{var y=i["_"+u];return y},Ji=(u,y)=>{M.set(u,y)},Vt=u=>Vn(u),Ri=u=>{var y=_A(u)+1,x=Vt(y);return Io(u,x,y),x},va=(u,y,x,H,k)=>{var T={string:Ne=>{var ni=0;return Ne!=null&&Ne!==0&&(ni=Ri(Ne)),ni},array:Ne=>{var ni=Vt(Ne.length);return Ji(Ne,ni),ni}};function tA(Ne){return y==="string"?ke(Ne):y==="boolean"?!!Ne:Ne}var lA=xi(u),wA=[],Ae=0;if(H)for(var ne=0;ne(i._viz_set_y_invert=st.A)(u),i._viz_set_reduce=u=>(i._viz_set_reduce=st.B)(u),i._viz_get_graphviz_version=()=>(i._viz_get_graphviz_version=st.C)(),i._free=u=>(i._free=st.D)(u),i._malloc=u=>(i._malloc=st.E)(u),i._viz_get_plugin_list=u=>(i._viz_get_plugin_list=st.G)(u),i._viz_create_graph=(u,y,x)=>(i._viz_create_graph=st.H)(u,y,x),i._viz_read_one_graph=u=>(i._viz_read_one_graph=st.I)(u),i._viz_string_dup=(u,y)=>(i._viz_string_dup=st.J)(u,y),i._viz_string_dup_html=(u,y)=>(i._viz_string_dup_html=st.K)(u,y),i._viz_string_free=(u,y)=>(i._viz_string_free=st.L)(u,y),i._viz_string_free_html=(u,y)=>(i._viz_string_free_html=st.M)(u,y),i._viz_add_node=(u,y)=>(i._viz_add_node=st.N)(u,y),i._viz_add_edge=(u,y,x)=>(i._viz_add_edge=st.O)(u,y,x),i._viz_add_subgraph=(u,y)=>(i._viz_add_subgraph=st.P)(u,y),i._viz_set_default_graph_attribute=(u,y,x)=>(i._viz_set_default_graph_attribute=st.Q)(u,y,x),i._viz_set_default_node_attribute=(u,y,x)=>(i._viz_set_default_node_attribute=st.R)(u,y,x),i._viz_set_default_edge_attribute=(u,y,x)=>(i._viz_set_default_edge_attribute=st.S)(u,y,x),i._viz_set_attribute=(u,y,x)=>(i._viz_set_attribute=st.T)(u,y,x),i._viz_free_graph=u=>(i._viz_free_graph=st.U)(u),i._viz_create_context=()=>(i._viz_create_context=st.V)(),i._viz_free_context=u=>(i._viz_free_context=st.W)(u),i._viz_layout=(u,y,x)=>(i._viz_layout=st.X)(u,y,x),i._viz_free_layout=(u,y)=>(i._viz_free_layout=st.Y)(u,y),i._viz_reset_errors=()=>(i._viz_reset_errors=st.Z)(),i._viz_render=(u,y,x)=>(i._viz_render=st._)(u,y,x);var Ni=(u,y)=>(Ni=st.$)(u,y),Oi=u=>(Oi=st.aa)(u),Vn=u=>(Vn=st.ba)(u),hn=()=>(hn=st.ca)();i.ccall=va,i.getValue=Ee,i.PATH=rA,i.UTF8ToString=ke,i.stringToUTF8=Io,i.lengthBytesUTF8=_A,i.FS=L;var Mt,sa;YA=function u(){Mt||Yo(),Mt||(YA=u)};function Yo(){if(hA>0||!sa&&(sa=1,iA(),hA>0))return;function u(){Mt||(Mt=1,i.calledRun=1,!S&&(BA(),n(i),oA()))}u()}return Yo(),A=a,A}})(),JgA=[[/^Error: (.*)/,"error"],[/^Warning: (.*)/,"warning"]];function BjA(t){return t.map(e=>{for(let A=0;A{if(typeof A.name!="string")throw new Error("image name must be a string");if(typeof A.width!="number"&&typeof A.width!="string")throw new Error("image width must be a number or string");if(typeof A.height!="number"&&typeof A.height!="string")throw new Error("image height must be a number or string");let i=t.PATH.join("/",A.name),n=` + +`;return t.FS.createPath("/",t.PATH.dirname(i)),t.FS.writeFile(i,n),i}):[]}function ujA(t,e){for(let A of e)t.FS.analyzePath(A).exists&&t.FS.unlink(A)}function fjA(t,e,A){let i;try{let n=t.lengthBytesUTF8(e);return i=t.ccall("malloc","number",["number"],[n+1]),t.stringToUTF8(e,i,n+1),t.ccall("viz_read_one_graph","number",["number"],[i])}finally{i&&t.ccall("free","number",["number"],[i])}}function mjA(t,e,A){let i=t.ccall("viz_create_graph","number",["string","number","number"],[e.name,typeof e.directed<"u"?e.directed:!0,typeof e.strict<"u"?e.strict:!1]);return zgA(t,i,e),i}function zgA(t,e,A){OgA(t,e,A),A.nodes&&A.nodes.forEach(i=>{if(typeof i.name>"u")throw new Error("nodes must have a name");let n=t.ccall("viz_add_node","number",["number","string"],[e,String(i.name)]);i.attributes&&HgA(t,e,n,i.attributes)}),A.edges&&A.edges.forEach(i=>{if(typeof i.tail>"u")throw new Error("edges must have a tail");if(typeof i.head>"u")throw new Error("edges must have a head");let n=t.ccall("viz_add_edge","number",["number","string","string"],[e,String(i.tail),String(i.head)]);i.attributes&&HgA(t,e,n,i.attributes)}),A.subgraphs&&A.subgraphs.forEach(i=>{let n=t.ccall("viz_add_subgraph","number",["number","string"],[e,typeof i.name<"u"?String(i.name):0]);zgA(t,n,i)})}function OgA(t,e,A){if(A.graphAttributes)for(let[i,n]of Object.entries(A.graphAttributes))Eb(t,e,n,o=>{t.ccall("viz_set_default_graph_attribute","number",["number","string","number"],[e,i,o])});if(A.nodeAttributes)for(let[i,n]of Object.entries(A.nodeAttributes))Eb(t,e,n,o=>{t.ccall("viz_set_default_node_attribute","number",["number","string","number"],[e,i,o])});if(A.edgeAttributes)for(let[i,n]of Object.entries(A.edgeAttributes))Eb(t,e,n,o=>{t.ccall("viz_set_default_edge_attribute","number",["number","string","number"],[e,i,o])})}function HgA(t,e,A,i){for(let[n,o]of Object.entries(i))Eb(t,e,o,a=>{t.ccall("viz_set_attribute","number",["number","string","number"],[A,n,a])})}function Eb(t,e,A,i){let n;if(typeof A=="object"&&"html"in A?n=t.ccall("viz_string_dup_html","number",["number","string"],[e,String(A.html)]):n=t.ccall("viz_string_dup","number",["number","string"],[e,String(A)]),n==0)throw new Error("couldn't dup string");i(n),typeof A=="object"&&"html"in A?t.ccall("viz_string_free_html","number",["number","number"],[e,n]):t.ccall("viz_string_free","number",["number","number"],[e,n])}var GK=class{constructor(e){this.module=e}get graphvizVersion(){return QjA(this.module)}get formats(){return YgA(this.module,"device")}get engines(){return YgA(this.module,"layout")}renderFormats(e,A,i={}){return TgA(this.module,e,A,gA({engine:"dot"},i))}render(e,A={}){let i;A.format===void 0?i="dot":i=A.format;let n=TgA(this.module,e,[i],gA({engine:"dot"},A));return n.status==="success"&&(n.output=n.output[i]),n}renderString(e,A={}){let i=this.render(e,A);if(i.status!=="success")throw new Error(i.errors.find(n=>n.level=="error")?.message||"render failed");return i.output}renderSVGElement(e,A={}){let i=this.renderString(e,be(gA({},A),{format:"svg"})),n;return typeof A.trustedTypePolicy<"u"?n=A.trustedTypePolicy.createHTML(i):n=i,new DOMParser().parseFromString(n,"image/svg+xml").documentElement}renderJSON(e,A={}){let i=this.renderString(e,be(gA({},A),{format:"json"}));return JSON.parse(i)}};function PgA(){return djA().then(t=>new GK(t))}var Qb=class t{render(e){return nt(this,null,function*(){let A={format:"svg",engine:"dot"};return(yield PgA()).renderString(e,A)})}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var hb=new yA("AudioPlayingService");var ub=new yA("VideoService");var fb=new yA("WebSocketService");var mb=class t{createMessagePartFromFile(e){return nt(this,null,function*(){return{inlineData:{displayName:e.name,data:yield this.readFileAsBytes(e),mimeType:e.type}}})}readFileAsBytes(e){return new Promise((A,i)=>{let n=new FileReader;n.onload=o=>{let a=o.target.result.split(",")[1];A(a)},n.onerror=i,n.readAsDataURL(e)})}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var pb=class t extends f8{sanitizer=h(w2);windowOpen(e,A,i,n){return e.open(A,i,n)}createObjectUrl(e){return URL.createObjectURL(e)}openBlobUrl(e){let A=this.createObjectUrl(e);return this.windowOpen(window,A,"_blank")}setAnchorHref(e,A){e.href=A}bypassSecurityTrustHtml(e){return this.sanitizer.bypassSecurityTrustHtml(e)}bypassSecurityTrustUrl(e){return this.sanitizer.bypassSecurityTrustUrl(e)}static \u0275fac=(()=>{let e;return function(i){return(e||(e=ui(t)))(i||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var wb=class t{constructor(e){this.http=e}apiServerDomain=zr.getApiServerBaseUrl();createSession(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`;return this.http.post(i,null)}return new ji}listSessions(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`;return this.http.get(i).pipe(fe(n=>({items:n,nextPageToken:""})))}return se({items:[],nextPageToken:""})}deleteSession(e,A,i){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}`;return this.http.delete(n)}getSession(e,A,i){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}`;return this.http.get(n)}importSession(e,A,i){if(this.apiServerDomain!=null){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`;return this.http.post(n,{appName:A,userId:e,events:i})}return new ji}canEdit(e,A){return se(!0)}static \u0275fac=function(A){return new(A||t)(So($s))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Db=class t{audioRecordingService=h(sb);videoService=h(ub);webSocketService=h(fb);audioIntervalId=void 0;videoIntervalId=void 0;constructor(){}startAudioChat(n){return nt(this,arguments,function*({appName:e,userId:A,sessionId:i}){let o=window.location.protocol==="https:"?"wss":"ws";this.webSocketService.connect(`${o}://${zr.getWSServerUrl()}/run_live?app_name=${e}&user_id=${A}&session_id=${i}`),yield this.startAudioStreaming()})}stopAudioChat(){this.stopAudioStreaming(),this.webSocketService.closeConnection()}startAudioStreaming(){return nt(this,null,function*(){try{yield this.audioRecordingService.startRecording(),this.audioIntervalId=setInterval(()=>this.sendBufferedAudio(),250)}catch(e){console.error("Error accessing microphone:",e)}})}stopAudioStreaming(){clearInterval(this.audioIntervalId),this.audioIntervalId=void 0,this.audioRecordingService.stopRecording()}sendBufferedAudio(){let e=this.audioRecordingService.getCombinedAudioBuffer();if(!e)return;let A={blob:{mime_type:"audio/pcm",data:e}};this.webSocketService.sendMessage(A),this.audioRecordingService.cleanAudioBuffer()}startVideoChat(o){return nt(this,arguments,function*({appName:e,userId:A,sessionId:i,videoContainer:n}){let a=window.location.protocol==="https:"?"wss":"ws";this.webSocketService.connect(`${a}://${zr.getWSServerUrl()}/run_live?app_name=${e}&user_id=${A}&session_id=${i}`),yield this.startAudioStreaming(),yield this.startVideoStreaming(n)})}stopVideoChat(e){this.stopAudioStreaming(),this.stopVideoStreaming(e),this.webSocketService.closeConnection()}startVideoStreaming(e){return nt(this,null,function*(){try{yield this.videoService.startRecording(e),this.videoIntervalId=setInterval(()=>nt(this,null,function*(){return yield this.sendCapturedFrame()}),1e3)}catch(A){console.error("Error accessing camera:",A)}})}sendCapturedFrame(){return nt(this,null,function*(){let e=yield this.videoService.getCapturedFrame();if(!e)return;let A={blob:{mime_type:"image/jpeg",data:e}};this.webSocketService.sendMessage(A)})}stopVideoStreaming(e){clearInterval(this.videoIntervalId),this.videoIntervalId=void 0,this.videoService.stopRecording(e)}onStreamClose(){return this.webSocketService.onCloseReason()}closeStream(){this.webSocketService.closeConnection()}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var gcA=su(scA());var vb=class t{stc(e){return(0,gcA.default)(e)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var bb=class t{THEME_STORAGE_KEY="adk-theme-preference";currentTheme=jA(this.getInitialTheme());constructor(){La(()=>{this.applyTheme(this.currentTheme())})}getInitialTheme(){let e=window.localStorage.getItem(this.THEME_STORAGE_KEY);return e==="light"||e==="dark"?e:"dark"}applyTheme(e){let A=document.documentElement;A.classList.remove("light-theme","dark-theme"),A.classList.add(`${e}-theme`),A.style.colorScheme=e,window.localStorage.setItem(this.THEME_STORAGE_KEY,e)}toggleTheme(){this.currentTheme.update(e=>e==="light"?"dark":"light")}setTheme(e){this.currentTheme.set(e)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Mb=class t{selectedTraceRowSource=new Tt(void 0);selectedTraceRow$=this.selectedTraceRowSource.asObservable();eventDataSource=new Tt(void 0);eventData$=this.eventDataSource.asObservable();hoveredMessageIndicesSource=new Tt([]);hoveredMessageIndices$=this.hoveredMessageIndicesSource.asObservable();messagesSource=new Tt([]);messages$=this.messagesSource.asObservable();selectedRow(e){this.selectedTraceRowSource.next(e)}setEventData(e){this.eventDataSource.next(e)}setMessages(e){this.messagesSource.next(e)}setHoveredMessages(e,A){if(!e){this.hoveredMessageIndicesSource.next([]);return}let i=e.attributes,n=i&&i["gcp.vertex.agent.event_id"],o=[];for(let[a,r]of this.messagesSource.value.entries())r.role!=="user"&&this.eventDataSource.value?.get(r.eventId)?.invocationId===A&&(!n||i["gcp.vertex.agent.event_id"]===r.eventId)&&o.push(a);this.hoveredMessageIndicesSource.next(o)}resetTraceService(){this.eventDataSource.next(void 0),this.messagesSource.next([]),this.hoveredMessageIndicesSource.next([])}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var kb=class t{_isSessionLoading=new Tt(!1);_isSessionListLoading=new Tt(!1);_isEventRequestResponseLoading=new Tt(!1);_isMessagesLoading=new Tt(!1);_newMessagesLoadedResponse=new $A;_newMessagesLoadingFailedResponse=new $A;featureFlagService=h(vr);isSessionLoading(){return this._isSessionLoading.pipe(h2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),js({bufferSize:1,refCount:!0}))}setIsSessionLoading(e){this._isSessionLoading.next(e)}isSessionListLoading(){return this._isSessionListLoading.pipe(h2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),js({bufferSize:1,refCount:!0}))}setIsSessionListLoading(e){this._isSessionListLoading.next(e)}isEventRequestResponseLoading(){return this._isEventRequestResponseLoading.pipe(h2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),js({bufferSize:1,refCount:!0}))}setIsEventRequestResponseLoading(e){this._isEventRequestResponseLoading.next(e)}setIsMessagesLoading(e){this._isMessagesLoading.next(e)}isMessagesLoading(){return this._isMessagesLoading.pipe(h2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),js({bufferSize:1,refCount:!0}))}lazyLoadMessages(e,A,i){throw new Error("Not implemented")}onNewMessagesLoaded(){return this._newMessagesLoadedResponse}onNewMessagesLoadingFailed(){return this._newMessagesLoadingFailedResponse}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Sb=class t{mediaRecorder;stream;renderer;videoElement;videoBuffer=[];constructor(e){this.renderer=e.createRenderer(null,null)}createVideoElement(e){e?.nativeElement&&(this.clearVideoElement(e),this.videoElement=this.renderer.createElement("video"),this.renderer.setAttribute(this.videoElement,"width","400"),this.renderer.setAttribute(this.videoElement,"height","300"),this.renderer.setAttribute(this.videoElement,"autoplay","true"),this.renderer.setAttribute(this.videoElement,"muted","true"),this.renderer.appendChild(e.nativeElement,this.videoElement))}startRecording(e){return nt(this,null,function*(){this.createVideoElement(e);try{this.stream=yield navigator.mediaDevices.getUserMedia({video:!0}),this.videoElement&&(this.videoElement.srcObject=this.stream),this.mediaRecorder=new MediaRecorder(this.stream,{mimeType:"video/webm"}),this.mediaRecorder.start(1e3)}catch(A){console.error("Error accessing camera/microphone:",A)}})}getCapturedFrame(){return nt(this,null,function*(){try{let e=yield this.captureFrame();return this.blobToUint8Array(e)}catch(e){console.error("Error capturing frame:",e);return}})}blobToUint8Array(e){return nt(this,null,function*(){let A=yield e.arrayBuffer();return new Uint8Array(A)})}captureFrame(){return nt(this,null,function*(){return new Promise((e,A)=>{try{if(!this.videoElement){A(new Error("Video element not available"));return}let i=document.createElement("canvas");i.width=this.videoElement.videoWidth,i.height=this.videoElement.videoHeight;let n=i.getContext("2d");if(!n){A(new Error("Canvas context not supported"));return}n.drawImage(this.videoElement,0,0,i.width,i.height),i.toBlob(o=>{o?e(o):A(new Error("Failed to create image blob"))},"image/png")}catch(i){A(i)}})})}stopRecording(e){this.mediaRecorder&&this.mediaRecorder.stop(),this.stream&&this.stream.getTracks().forEach(A=>A.stop()),this.clearVideoElement(e)}clearVideoElement(e){let A=e.nativeElement.querySelector("video");A&&this.renderer.removeChild(e.nativeElement,A)}static \u0275fac=function(A){return new(A||t)(So(Kr))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var vVA={url:"",deserializer:t=>JSON.parse(t.data),serializer:t=>JSON.stringify(t)},bVA="WebSocketSubject.error must be called with an object with an error code, and an optional reason: { code: number, reason: string }",Pm=class t extends iU{constructor(e,A){if(super(),this._socket=null,e instanceof ji)this.destination=A,this.source=e;else{let i=this._config=Object.assign({},vVA);if(this._output=new $A,typeof e=="string")i.url=e;else for(let n in e)e.hasOwnProperty(n)&&(i[n]=e[n]);if(!i.WebSocketCtor&&WebSocket)i.WebSocketCtor=WebSocket;else if(!i.WebSocketCtor)throw new Error("no WebSocket constructor can be found");this.destination=new Pl}}lift(e){let A=new t(this._config,this.destination);return A.operator=e,A.source=this,A}_resetState(){this._socket=null,this.source||(this.destination=new Pl),this._output=new $A}multiplex(e,A,i){let n=this;return new ji(o=>{try{n.next(e())}catch(r){o.error(r)}let a=n.subscribe({next:r=>{try{i(r)&&o.next(r)}catch(s){o.error(s)}},error:r=>o.error(r),complete:()=>o.complete()});return()=>{try{n.next(A())}catch(r){o.error(r)}a.unsubscribe()}})}_connectSocket(){let{WebSocketCtor:e,protocol:A,url:i,binaryType:n}=this._config,o=this._output,a=null;try{a=A?new e(i,A):new e(i),this._socket=a,n&&(this._socket.binaryType=n)}catch(s){o.error(s);return}let r=new Jn(()=>{this._socket=null,a&&a.readyState===1&&a.close()});a.onopen=s=>{let{_socket:g}=this;if(!g){a.close(),this._resetState();return}let{openObserver:l}=this._config;l&&l.next(s);let C=this.destination;this.destination=AU.create(I=>{if(a.readyState===1)try{let{serializer:d}=this._config;a.send(d(I))}catch(d){this.destination.error(d)}},I=>{let{closingObserver:d}=this._config;d&&d.next(void 0),I&&I.code?a.close(I.code,I.reason):o.error(new TypeError(bVA)),this._resetState()},()=>{let{closingObserver:I}=this._config;I&&I.next(void 0),a.close(),this._resetState()}),C&&C instanceof Pl&&r.add(C.subscribe(this.destination))},a.onerror=s=>{this._resetState(),o.error(s)},a.onclose=s=>{a===this._socket&&this._resetState();let{closeObserver:g}=this._config;g&&g.next(s),s.wasClean?o.complete():o.error(s)},a.onmessage=s=>{try{let{deserializer:g}=this._config;o.next(g(s))}catch(g){o.error(g)}}}_subscribe(e){let{source:A}=this;return A?A.subscribe(e):(this._socket||this._connectSocket(),this._output.subscribe(e),e.add(()=>{let{_socket:i}=this;this._output.observers.length===0&&(i&&(i.readyState===1||i.readyState===0)&&i.close(),this._resetState())}),e)}unsubscribe(){let{_socket:e}=this;e&&(e.readyState===1||e.readyState===0)&&e.close(),this._resetState(),super.unsubscribe()}};var xb=class t{audioPlayingService=h(hb);socket$;messages$=new Tt("");audioBuffer=[];audioIntervalId=null;closeReasonSubject=new $A;connect(e){this.socket$=new Pm({url:e,serializer:A=>JSON.stringify(A),deserializer:A=>A.data,closeObserver:{next:A=>{this.emitWsCloseReason(A.reason)}}}),this.socket$.subscribe(A=>{this.handleIncomingAudio(A),this.messages$.next(A)},A=>{console.error("WebSocket error:",A)}),this.audioIntervalId=setInterval(()=>this.playIncomingAudio(),250)}playIncomingAudio(){this.audioPlayingService.playAudio(this.audioBuffer),this.audioBuffer=[]}sendMessage(e){if(e.blob.data=this.arrayBufferToBase64(e.blob.data.buffer),!this.socket$||this.socket$.closed){console.error("WebSocket is not open.");return}this.socket$.next(e)}closeConnection(){clearInterval(this.audioIntervalId),this.audioIntervalId=null,this.socket$&&this.socket$.complete()}getMessages(){return this.messages$.asObservable()}arrayBufferToBase64(e){let A="",i=new Uint8Array(e),n=i.byteLength;for(let o=0;ot.json()).then(t=>{window.runtimeConfig=t,_U(Au,{providers:[cU(LU,Nn,GU,eb,rl,Yr,Fs),{provide:dl,useClass:wb},{provide:sg,useClass:Kh},{provide:R7,useClass:Bb},{provide:fb,useClass:xb},{provide:gb,useValue:"./assets/audio-processor.js"},{provide:sb,useClass:lb},{provide:hb,useClass:rb},{provide:ub,useClass:Sb},{provide:m8,useClass:Db},{provide:CE,useClass:Ib},{provide:Q0,useClass:Cb},{provide:h8,useClass:ab},{provide:cE,useClass:cb},{provide:T2,useClass:Mb},{provide:vr,useClass:db},{provide:IE,useClass:Qb},{provide:dE,useClass:vb},{provide:ds,useClass:pb},{provide:u8,useClass:mb},{provide:UU,useValue:TU},{provide:YU,useValue:NgA},{provide:Gh,useValue:nb},...t.logo?[{provide:q7,useValue:ib}]:[],{provide:E0,useClass:ob},{provide:P7,useValue:Xc},hT(),$u(),{provide:p8,useClass:n0},{provide:Bl,useClass:kb},{provide:Nv,useClass:bb}]}).catch(e=>console.error(e))}); diff --git a/src/google/adk/cli/browser/main-QQBY56NS.js b/src/google/adk/cli/browser/main-QQBY56NS.js deleted file mode 100644 index 1f105b547a..0000000000 --- a/src/google/adk/cli/browser/main-QQBY56NS.js +++ /dev/null @@ -1,4134 +0,0 @@ -import{$ as f2,$a as rp,$b as qA,$c as sC,A as i0,Aa as Ga,Ab as GA,Ac as jo,B as $m,Ba as la,Bb as li,Bc as rt,C as nl,Ca as ti,Cb as Ei,Cc as ca,D as Ap,Da as Bi,Db as Di,Dc as xU,E as fi,Ea as ge,Eb as js,Ec as rC,F as gU,Fa as ol,Fb as qs,Fc as Dt,G as Ze,Ga as ip,Gb as on,Gc as y1,H as lU,Ha as np,Hb as JA,Hc as he,I as m1,Ia as p1,Ib as vo,Ic as en,J as ta,Ja as QU,Jb as tA,Jc as RU,K as lu,Ka as hU,Kb as p2,Kc as Ip,L as Os,La as Wl,Lb as v,Lc as NU,M as oo,Ma as al,Mb as Yt,Mc as Ob,N as cu,Na as Ka,Nb as Ke,Nc as FU,O as Vl,Oa as m2,Ob as fa,Oc as Pb,P as ep,Pa as nC,Pb as ai,Pc as _U,Q as zo,Qa as p,Qb as ce,Qc as o0,R as Yb,Ra as op,Rb as Ce,Rc as LU,S as h2,Sa as Yn,Sb as Cp,Sc as gs,T as u2,Ta as Tn,Tb as rs,Tc as D2,U as Ps,Ua as Kr,Ub as Dr,Uc as DB,V as Fg,Va as _i,Vb as An,Vc as rl,W as cn,Wa as at,Wb as wn,Wc as dp,X as Si,Xa as ap,Xb as ne,Xc as sl,Y as Bt,Ya as Oo,Yb as pU,Yc as ls,Z as cU,Za as Hb,Zb as Po,Zc as Bp,_ as oi,_a as uU,_b as K,_c as ma,a as Jn,aa as kt,ab as kA,ac as Se,ad as jb,b as iU,ba as CU,bb as $e,bc as n0,bd as Zs,c as nU,ca as wr,cb as OA,cc as wU,cd as GU,d as $i,da as zA,db as sp,dc as Qo,dd as KU,e as oU,ea as Xe,eb as It,ec as ao,ed as UU,f as XA,fa as IU,fb as pt,fc as ho,fd as Xs,g as aU,ga as yA,gb as gp,gc as Ur,gd as JU,h as Ht,ha as xo,hb as fU,hc as _g,hd as YU,i as ql,ia as h,ib as w1,ic as Vs,id as $s,j as Ub,ja as dU,jb as lp,jc as D1,jd as TU,k as Wm,ka as Gr,kb as zb,kc as DU,kd as HU,l as uB,la as or,lb as mU,lc as dt,ld as zU,m as ja,ma as BU,mb as oC,mc as Cu,n as gu,na as Z,nb as cp,nc as ss,o as fB,oa as X,ob as ie,oc as Zl,od as OU,p as Ms,pa as Qt,pb as pB,pc as ri,pd as PU,q as se,qa as as,qb as V,qc as Ci,r as Zm,ra as ft,rb as aC,rc as yU,s as mB,sa as Xt,sb as W,sc as w2,t as rU,ta as qa,tb as wB,tc as vU,u as sU,ua as EU,ub as Li,uc as bU,v as fe,va as $A,vb as Ut,vc as Ue,w as Ir,wa as Oe,wb as Jt,wc as MU,x as t0,xa as tp,xb as $,xc as kU,y as Jb,ya as Tb,yb as m,yc as Ws,z as Xm,za as jA,zb as w,zc as SU}from"./chunk-BX7YU7E6.js";import{a as cA,b as Ge,c as tU,d as qe,f as su,g as nt,h as le}from"./chunk-W7GRJBO5.js";var jO=qe(aS=>{"use strict";var PO={b:"\b",f:"\f",n:` -`,r:"\r",t:" ",'"':'"',"/":"/","\\":"\\"},ZEA=97;aS.parse=function(t,e,A){var i={},n=0,o=0,a=0,r=A&&A.bigint&&typeof BigInt<"u";return{data:s("",!0),pointers:i};function s(J,j){g();var AA;S(J,"value");var O=E();switch(O){case"t":B("rue"),AA=!0;break;case"f":B("alse"),AA=!1;break;case"n":B("ull"),AA=null;break;case'"':AA=l();break;case"[":AA=I(J);break;case"{":AA=d(J);break;default:Q(),"-0123456789".indexOf(O)>=0?AA=C():F()}return S(J,"valueEnd"),g(),j&&aNumber.MAX_SAFE_INTEGER||AA="a"&&AA<="f"?j+=AA.charCodeAt()-ZEA+10:AA>="0"&&AA<="9"?j+=+AA:_()}return String.fromCharCode(j)}function b(){for(var J="";t[a]>="0"&&t[a]<="9";)J+=E();if(J.length)return J;U(),F()}function S(J,j){M(J,j,D())}function M(J,j,AA){i[J]=i[J]||{},i[J][j]=AA}function D(){return{line:n,column:o,pos:a}}function F(){throw new SyntaxError("Unexpected token "+t[a]+" in JSON at position "+a)}function _(){Q(),F()}function U(){if(a>=t.length)throw new SyntaxError("Unexpected end of JSON input")}};aS.stringify=function(t,e,A){if(!Cw(t))return;var i=0,n,o,a=typeof A=="object"?A.space:A;switch(typeof a){case"number":var r=a>10?10:a<0?0:Math.floor(a);a=r&&M(r," "),n=r,o=r;break;case"string":a=a.slice(0,10),n=0,o=0;for(var s=0;s=0}var $EA=/"|\\/g,AQA=/[\b]/g,eQA=/\f/g,tQA=/\n/g,iQA=/\r/g,nQA=/\t/g;function Iw(t){return t=t.replace($EA,"\\$&").replace(eQA,"\\f").replace(AQA,"\\b").replace(tQA,"\\n").replace(iQA,"\\r").replace(nQA,"\\t"),'"'+t+'"'}var oQA=/~/g,aQA=/\//g;function oS(t){return t.replace(oQA,"~0").replace(aQA,"~1")}});var BV=qe((Zpe,dV)=>{"use strict";var IV=function(t,e){var A,i,n=1,o=0,a=0,r=String.alphabet;function s(g,l,C){if(C){for(A=l;C=s(g,A),C<76&&C>65;)++A;return+g.slice(l-1,A)}return C=r&&r.indexOf(g.charAt(l)),C>-1?C+76:(C=g.charCodeAt(l)||0,C<45||C>127?C:C<46?65:C<48?C-1:C<58?C+18:C<65?C-11:C<91?C+11:C<97?C-37:C<123?C+5:C-63)}if((t+="")!=(e+="")){for(;n;)if(i=s(t,o++),n=s(e,a++),i<76&&n<76&&i>66&&n>66&&(i=s(t,o,o),n=s(e,a,o=A),a=A),i!=n)return i{"use strict";Object.defineProperty(zn,"__esModule",{value:!0});zn.regexpCode=zn.getEsmExportName=zn.getProperty=zn.safeStringify=zn.stringify=zn.strConcat=zn.addCodeArg=zn.str=zn._=zn.nil=zn._Code=zn.Name=zn.IDENTIFIER=zn._CodeOrName=void 0;var d3=class{};zn._CodeOrName=d3;zn.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var rd=class extends d3{constructor(e){if(super(),!zn.IDENTIFIER.test(e))throw new Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}};zn.Name=rd;var yl=class extends d3{constructor(e){super(),this._items=typeof e=="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((A,i)=>`${A}${i}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((A,i)=>(i instanceof rd&&(A[i.str]=(A[i.str]||0)+1),A),{})}};zn._Code=yl;zn.nil=new yl("");function QV(t,...e){let A=[t[0]],i=0;for(;i{"use strict";Object.defineProperty(dg,"__esModule",{value:!0});dg.ValueScope=dg.ValueScopeName=dg.Scope=dg.varKinds=dg.UsedValueState=void 0;var Ig=E3(),OS=class extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`),this.value=e.value}},A5=(function(t){return t[t.Started=0]="Started",t[t.Completed=1]="Completed",t})(A5||(dg.UsedValueState=A5={}));dg.varKinds={const:new Ig.Name("const"),let:new Ig.Name("let"),var:new Ig.Name("var")};var e5=class{constructor({prefixes:e,parent:A}={}){this._names={},this._prefixes=e,this._parent=A}toName(e){return e instanceof Ig.Name?e:this.name(e)}name(e){return new Ig.Name(this._newName(e))}_newName(e){let A=this._names[e]||this._nameGroup(e);return`${e}${A.index++}`}_nameGroup(e){var A,i;if(!((i=(A=this._parent)===null||A===void 0?void 0:A._prefixes)===null||i===void 0)&&i.has(e)||this._prefixes&&!this._prefixes.has(e))throw new Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}};dg.Scope=e5;var t5=class extends Ig.Name{constructor(e,A){super(A),this.prefix=e}setValue(e,{property:A,itemIndex:i}){this.value=e,this.scopePath=(0,Ig._)`.${new Ig.Name(A)}[${i}]`}};dg.ValueScopeName=t5;var n6A=(0,Ig._)`\n`,PS=class extends e5{constructor(e){super(e),this._values={},this._scope=e.scope,this.opts=Ge(cA({},e),{_n:e.lines?n6A:Ig.nil})}get(){return this._scope}name(e){return new t5(e,this._newName(e))}value(e,A){var i;if(A.ref===void 0)throw new Error("CodeGen: ref must be passed in value");let n=this.toName(e),{prefix:o}=n,a=(i=A.key)!==null&&i!==void 0?i:A.ref,r=this._values[o];if(r){let l=r.get(a);if(l)return l}else r=this._values[o]=new Map;r.set(a,n);let s=this._scope[o]||(this._scope[o]=[]),g=s.length;return s[g]=A.ref,n.setValue(A,{property:o,itemIndex:g}),n}getValue(e,A){let i=this._values[e];if(i)return i.get(A)}scopeRefs(e,A=this._values){return this._reduceValues(A,i=>{if(i.scopePath===void 0)throw new Error(`CodeGen: name "${i}" has no value`);return(0,Ig._)`${e}${i.scopePath}`})}scopeCode(e=this._values,A,i){return this._reduceValues(e,n=>{if(n.value===void 0)throw new Error(`CodeGen: name "${n}" has no value`);return n.value.code},A,i)}_reduceValues(e,A,i={},n){let o=Ig.nil;for(let a in e){let r=e[a];if(!r)continue;let s=i[a]=i[a]||new Map;r.forEach(g=>{if(s.has(g))return;s.set(g,A5.Started);let l=A(g);if(l){let C=this.opts.es5?dg.varKinds.var:dg.varKinds.const;o=(0,Ig._)`${o}${C} ${g} = ${l};${this.opts._n}`}else if(l=n?.(g))o=(0,Ig._)`${o}${l}${this.opts._n}`;else throw new OS(g);s.set(g,A5.Completed)})}return o}};dg.ValueScope=PS});var rn=qe(nn=>{"use strict";Object.defineProperty(nn,"__esModule",{value:!0});nn.or=nn.and=nn.not=nn.CodeGen=nn.operators=nn.varKinds=nn.ValueScopeName=nn.ValueScope=nn.Scope=nn.Name=nn.regexpCode=nn.stringify=nn.getProperty=nn.nil=nn.strConcat=nn.str=nn._=void 0;var vn=E3(),wc=jS(),EI=E3();Object.defineProperty(nn,"_",{enumerable:!0,get:function(){return EI._}});Object.defineProperty(nn,"str",{enumerable:!0,get:function(){return EI.str}});Object.defineProperty(nn,"strConcat",{enumerable:!0,get:function(){return EI.strConcat}});Object.defineProperty(nn,"nil",{enumerable:!0,get:function(){return EI.nil}});Object.defineProperty(nn,"getProperty",{enumerable:!0,get:function(){return EI.getProperty}});Object.defineProperty(nn,"stringify",{enumerable:!0,get:function(){return EI.stringify}});Object.defineProperty(nn,"regexpCode",{enumerable:!0,get:function(){return EI.regexpCode}});Object.defineProperty(nn,"Name",{enumerable:!0,get:function(){return EI.Name}});var r5=jS();Object.defineProperty(nn,"Scope",{enumerable:!0,get:function(){return r5.Scope}});Object.defineProperty(nn,"ValueScope",{enumerable:!0,get:function(){return r5.ValueScope}});Object.defineProperty(nn,"ValueScopeName",{enumerable:!0,get:function(){return r5.ValueScopeName}});Object.defineProperty(nn,"varKinds",{enumerable:!0,get:function(){return r5.varKinds}});nn.operators={GT:new vn._Code(">"),GTE:new vn._Code(">="),LT:new vn._Code("<"),LTE:new vn._Code("<="),EQ:new vn._Code("==="),NEQ:new vn._Code("!=="),NOT:new vn._Code("!"),OR:new vn._Code("||"),AND:new vn._Code("&&"),ADD:new vn._Code("+")};var RC=class{optimizeNodes(){return this}optimizeNames(e,A){return this}},qS=class extends RC{constructor(e,A,i){super(),this.varKind=e,this.name=A,this.rhs=i}render({es5:e,_n:A}){let i=e?wc.varKinds.var:this.varKind,n=this.rhs===void 0?"":` = ${this.rhs}`;return`${i} ${this.name}${n};`+A}optimizeNames(e,A){if(e[this.name.str])return this.rhs&&(this.rhs=XE(this.rhs,e,A)),this}get names(){return this.rhs instanceof vn._CodeOrName?this.rhs.names:{}}},n5=class extends RC{constructor(e,A,i){super(),this.lhs=e,this.rhs=A,this.sideEffects=i}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,A){if(!(this.lhs instanceof vn.Name&&!e[this.lhs.str]&&!this.sideEffects))return this.rhs=XE(this.rhs,e,A),this}get names(){let e=this.lhs instanceof vn.Name?{}:cA({},this.lhs.names);return a5(e,this.rhs)}},VS=class extends n5{constructor(e,A,i,n){super(e,i,n),this.op=A}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}},WS=class extends RC{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}},ZS=class extends RC{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}},XS=class extends RC{constructor(e){super(),this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}},$S=class extends RC{constructor(e){super(),this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,A){return this.code=XE(this.code,e,A),this}get names(){return this.code instanceof vn._CodeOrName?this.code.names:{}}},Q3=class extends RC{constructor(e=[]){super(),this.nodes=e}render(e){return this.nodes.reduce((A,i)=>A+i.render(e),"")}optimizeNodes(){let{nodes:e}=this,A=e.length;for(;A--;){let i=e[A].optimizeNodes();Array.isArray(i)?e.splice(A,1,...i):i?e[A]=i:e.splice(A,1)}return e.length>0?this:void 0}optimizeNames(e,A){let{nodes:i}=this,n=i.length;for(;n--;){let o=i[n];o.optimizeNames(e,A)||(o6A(e,o.names),i.splice(n,1))}return i.length>0?this:void 0}get names(){return this.nodes.reduce((e,A)=>sd(e,A.names),{})}},NC=class extends Q3{render(e){return"{"+e._n+super.render(e)+"}"+e._n}},Ax=class extends Q3{},ex=(()=>{class t extends NC{}return t.kind="else",t})(),i5=(()=>{class t extends NC{constructor(A,i){super(i),this.condition=A}render(A){let i=`if(${this.condition})`+super.render(A);return this.else&&(i+="else "+this.else.render(A)),i}optimizeNodes(){super.optimizeNodes();let A=this.condition;if(A===!0)return this.nodes;let i=this.else;if(i){let n=i.optimizeNodes();i=this.else=Array.isArray(n)?new ex(n):n}if(i)return A===!1?i instanceof t?i:i.nodes:this.nodes.length?this:new t(wV(A),i instanceof t?[i]:i.nodes);if(!(A===!1||!this.nodes.length))return this}optimizeNames(A,i){var n;if(this.else=(n=this.else)===null||n===void 0?void 0:n.optimizeNames(A,i),!!(super.optimizeNames(A,i)||this.else))return this.condition=XE(this.condition,A,i),this}get names(){let A=super.names;return a5(A,this.condition),this.else&&sd(A,this.else.names),A}}return t.kind="if",t})(),s5=(()=>{class t extends NC{}return t.kind="for",t})(),tx=class extends s5{constructor(e){super(),this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,A){if(super.optimizeNames(e,A))return this.iteration=XE(this.iteration,e,A),this}get names(){return sd(super.names,this.iteration.names)}},ix=class extends s5{constructor(e,A,i,n){super(),this.varKind=e,this.name=A,this.from=i,this.to=n}render(e){let A=e.es5?wc.varKinds.var:this.varKind,{name:i,from:n,to:o}=this;return`for(${A} ${i}=${n}; ${i}<${o}; ${i}++)`+super.render(e)}get names(){let e=a5(super.names,this.from);return a5(e,this.to)}},o5=class extends s5{constructor(e,A,i,n){super(),this.loop=e,this.varKind=A,this.name=i,this.iterable=n}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,A){if(super.optimizeNames(e,A))return this.iterable=XE(this.iterable,e,A),this}get names(){return sd(super.names,this.iterable.names)}},uV=(()=>{class t extends NC{constructor(A,i,n){super(),this.name=A,this.args=i,this.async=n}render(A){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(A)}}return t.kind="func",t})(),fV=(()=>{class t extends Q3{render(A){return"return "+super.render(A)}}return t.kind="return",t})(),nx=class extends NC{render(e){let A="try"+super.render(e);return this.catch&&(A+=this.catch.render(e)),this.finally&&(A+=this.finally.render(e)),A}optimizeNodes(){var e,A;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(A=this.finally)===null||A===void 0||A.optimizeNodes(),this}optimizeNames(e,A){var i,n;return super.optimizeNames(e,A),(i=this.catch)===null||i===void 0||i.optimizeNames(e,A),(n=this.finally)===null||n===void 0||n.optimizeNames(e,A),this}get names(){let e=super.names;return this.catch&&sd(e,this.catch.names),this.finally&&sd(e,this.finally.names),e}},mV=(()=>{class t extends NC{constructor(A){super(),this.error=A}render(A){return`catch(${this.error})`+super.render(A)}}return t.kind="catch",t})(),pV=(()=>{class t extends NC{render(A){return"finally"+super.render(A)}}return t.kind="finally",t})(),ox=class{constructor(e,A={}){this._values={},this._blockStarts=[],this._constants={},this.opts=Ge(cA({},A),{_n:A.lines?` -`:""}),this._extScope=e,this._scope=new wc.Scope({parent:e}),this._nodes=[new Ax]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,A){let i=this._extScope.value(e,A);return(this._values[i.prefix]||(this._values[i.prefix]=new Set)).add(i),i}getScopeValue(e,A){return this._extScope.getValue(e,A)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,A,i,n){let o=this._scope.toName(A);return i!==void 0&&n&&(this._constants[o.str]=i),this._leafNode(new qS(e,o,i)),o}const(e,A,i){return this._def(wc.varKinds.const,e,A,i)}let(e,A,i){return this._def(wc.varKinds.let,e,A,i)}var(e,A,i){return this._def(wc.varKinds.var,e,A,i)}assign(e,A,i){return this._leafNode(new n5(e,A,i))}add(e,A){return this._leafNode(new VS(e,nn.operators.ADD,A))}code(e){return typeof e=="function"?e():e!==vn.nil&&this._leafNode(new $S(e)),this}object(...e){let A=["{"];for(let[i,n]of e)A.length>1&&A.push(","),A.push(i),(i!==n||this.opts.es5)&&(A.push(":"),(0,vn.addCodeArg)(A,n));return A.push("}"),new vn._Code(A)}if(e,A,i){if(this._blockNode(new i5(e)),A&&i)this.code(A).else().code(i).endIf();else if(A)this.code(A).endIf();else if(i)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new i5(e))}else(){return this._elseNode(new ex)}endIf(){return this._endBlockNode(i5,ex)}_for(e,A){return this._blockNode(e),A&&this.code(A).endFor(),this}for(e,A){return this._for(new tx(e),A)}forRange(e,A,i,n,o=this.opts.es5?wc.varKinds.var:wc.varKinds.let){let a=this._scope.toName(e);return this._for(new ix(o,a,A,i),()=>n(a))}forOf(e,A,i,n=wc.varKinds.const){let o=this._scope.toName(e);if(this.opts.es5){let a=A instanceof vn.Name?A:this.var("_arr",A);return this.forRange("_i",0,(0,vn._)`${a}.length`,r=>{this.var(o,(0,vn._)`${a}[${r}]`),i(o)})}return this._for(new o5("of",n,o,A),()=>i(o))}forIn(e,A,i,n=this.opts.es5?wc.varKinds.var:wc.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,(0,vn._)`Object.keys(${A})`,i);let o=this._scope.toName(e);return this._for(new o5("in",n,o,A),()=>i(o))}endFor(){return this._endBlockNode(s5)}label(e){return this._leafNode(new WS(e))}break(e){return this._leafNode(new ZS(e))}return(e){let A=new fV;if(this._blockNode(A),this.code(e),A.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(fV)}try(e,A,i){if(!A&&!i)throw new Error('CodeGen: "try" without "catch" and "finally"');let n=new nx;if(this._blockNode(n),this.code(e),A){let o=this.name("e");this._currNode=n.catch=new mV(o),A(o)}return i&&(this._currNode=n.finally=new pV,this.code(i)),this._endBlockNode(mV,pV)}throw(e){return this._leafNode(new XS(e))}block(e,A){return this._blockStarts.push(this._nodes.length),e&&this.code(e).endBlock(A),this}endBlock(e){let A=this._blockStarts.pop();if(A===void 0)throw new Error("CodeGen: not in self-balancing block");let i=this._nodes.length-A;if(i<0||e!==void 0&&i!==e)throw new Error(`CodeGen: wrong number of nodes: ${i} vs ${e} expected`);return this._nodes.length=A,this}func(e,A=vn.nil,i,n){return this._blockNode(new uV(e,A,i)),n&&this.code(n).endFunc(),this}endFunc(){return this._endBlockNode(uV)}optimize(e=1){for(;e-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,A){let i=this._currNode;if(i instanceof e||A&&i instanceof A)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${A?`${e.kind}/${A.kind}`:e.kind}"`)}_elseNode(e){let A=this._currNode;if(!(A instanceof i5))throw new Error('CodeGen: "else" without "if"');return this._currNode=A.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let A=this._nodes;A[A.length-1]=e}};nn.CodeGen=ox;function sd(t,e){for(let A in e)t[A]=(t[A]||0)+(e[A]||0);return t}function a5(t,e){return e instanceof vn._CodeOrName?sd(t,e.names):t}function XE(t,e,A){if(t instanceof vn.Name)return i(t);if(!n(t))return t;return new vn._Code(t._items.reduce((o,a)=>(a instanceof vn.Name&&(a=i(a)),a instanceof vn._Code?o.push(...a._items):o.push(a),o),[]));function i(o){let a=A[o.str];return a===void 0||e[o.str]!==1?o:(delete e[o.str],a)}function n(o){return o instanceof vn._Code&&o._items.some(a=>a instanceof vn.Name&&e[a.str]===1&&A[a.str]!==void 0)}}function o6A(t,e){for(let A in e)t[A]=(t[A]||0)-(e[A]||0)}function wV(t){return typeof t=="boolean"||typeof t=="number"||t===null?!t:(0,vn._)`!${ax(t)}`}nn.not=wV;var a6A=DV(nn.operators.AND);function r6A(...t){return t.reduce(a6A)}nn.and=r6A;var s6A=DV(nn.operators.OR);function g6A(...t){return t.reduce(s6A)}nn.or=g6A;function DV(t){return(e,A)=>e===vn.nil?A:A===vn.nil?e:(0,vn._)`${ax(e)} ${t} ${ax(A)}`}function ax(t){return t instanceof vn.Name?t:(0,vn._)`(${t})`}});var On=qe(sn=>{"use strict";Object.defineProperty(sn,"__esModule",{value:!0});sn.checkStrictMode=sn.getErrorPath=sn.Type=sn.useFunc=sn.setEvaluated=sn.evaluatedPropsToName=sn.mergeEvaluated=sn.eachItem=sn.unescapeJsonPointer=sn.escapeJsonPointer=sn.escapeFragment=sn.unescapeFragment=sn.schemaRefOrVal=sn.schemaHasRulesButRef=sn.schemaHasRules=sn.checkUnknownRules=sn.alwaysValidSchema=sn.toHash=void 0;var Vo=rn(),l6A=E3();function c6A(t){let e={};for(let A of t)e[A]=!0;return e}sn.toHash=c6A;function C6A(t,e){return typeof e=="boolean"?e:Object.keys(e).length===0?!0:(bV(t,e),!MV(e,t.self.RULES.all))}sn.alwaysValidSchema=C6A;function bV(t,e=t.schema){let{opts:A,self:i}=t;if(!A.strictSchema||typeof e=="boolean")return;let n=i.RULES.keywords;for(let o in e)n[o]||xV(t,`unknown keyword: "${o}"`)}sn.checkUnknownRules=bV;function MV(t,e){if(typeof t=="boolean")return!t;for(let A in t)if(e[A])return!0;return!1}sn.schemaHasRules=MV;function I6A(t,e){if(typeof t=="boolean")return!t;for(let A in t)if(A!=="$ref"&&e.all[A])return!0;return!1}sn.schemaHasRulesButRef=I6A;function d6A({topSchemaRef:t,schemaPath:e},A,i,n){if(!n){if(typeof A=="number"||typeof A=="boolean")return A;if(typeof A=="string")return(0,Vo._)`${A}`}return(0,Vo._)`${t}${e}${(0,Vo.getProperty)(i)}`}sn.schemaRefOrVal=d6A;function B6A(t){return kV(decodeURIComponent(t))}sn.unescapeFragment=B6A;function E6A(t){return encodeURIComponent(sx(t))}sn.escapeFragment=E6A;function sx(t){return typeof t=="number"?`${t}`:t.replace(/~/g,"~0").replace(/\//g,"~1")}sn.escapeJsonPointer=sx;function kV(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}sn.unescapeJsonPointer=kV;function Q6A(t,e){if(Array.isArray(t))for(let A of t)e(A);else e(t)}sn.eachItem=Q6A;function yV({mergeNames:t,mergeToName:e,mergeValues:A,resultToName:i}){return(n,o,a,r)=>{let s=a===void 0?o:a instanceof Vo.Name?(o instanceof Vo.Name?t(n,o,a):e(n,o,a),a):o instanceof Vo.Name?(e(n,a,o),o):A(o,a);return r===Vo.Name&&!(s instanceof Vo.Name)?i(n,s):s}}sn.mergeEvaluated={props:yV({mergeNames:(t,e,A)=>t.if((0,Vo._)`${A} !== true && ${e} !== undefined`,()=>{t.if((0,Vo._)`${e} === true`,()=>t.assign(A,!0),()=>t.assign(A,(0,Vo._)`${A} || {}`).code((0,Vo._)`Object.assign(${A}, ${e})`))}),mergeToName:(t,e,A)=>t.if((0,Vo._)`${A} !== true`,()=>{e===!0?t.assign(A,!0):(t.assign(A,(0,Vo._)`${A} || {}`),gx(t,A,e))}),mergeValues:(t,e)=>t===!0?!0:cA(cA({},t),e),resultToName:SV}),items:yV({mergeNames:(t,e,A)=>t.if((0,Vo._)`${A} !== true && ${e} !== undefined`,()=>t.assign(A,(0,Vo._)`${e} === true ? true : ${A} > ${e} ? ${A} : ${e}`)),mergeToName:(t,e,A)=>t.if((0,Vo._)`${A} !== true`,()=>t.assign(A,e===!0?!0:(0,Vo._)`${A} > ${e} ? ${A} : ${e}`)),mergeValues:(t,e)=>t===!0?!0:Math.max(t,e),resultToName:(t,e)=>t.var("items",e)})};function SV(t,e){if(e===!0)return t.var("props",!0);let A=t.var("props",(0,Vo._)`{}`);return e!==void 0&&gx(t,A,e),A}sn.evaluatedPropsToName=SV;function gx(t,e,A){Object.keys(A).forEach(i=>t.assign((0,Vo._)`${e}${(0,Vo.getProperty)(i)}`,!0))}sn.setEvaluated=gx;var vV={};function h6A(t,e){return t.scopeValue("func",{ref:e,code:vV[e.code]||(vV[e.code]=new l6A._Code(e.code))})}sn.useFunc=h6A;var rx=(function(t){return t[t.Num=0]="Num",t[t.Str=1]="Str",t})(rx||(sn.Type=rx={}));function u6A(t,e,A){if(t instanceof Vo.Name){let i=e===rx.Num;return A?i?(0,Vo._)`"[" + ${t} + "]"`:(0,Vo._)`"['" + ${t} + "']"`:i?(0,Vo._)`"/" + ${t}`:(0,Vo._)`"/" + ${t}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return A?(0,Vo.getProperty)(t).toString():"/"+sx(t)}sn.getErrorPath=u6A;function xV(t,e,A=t.opts.strictSchema){if(A){if(e=`strict mode: ${e}`,A===!0)throw new Error(e);t.self.logger.warn(e)}}sn.checkStrictMode=xV});var FC=qe(lx=>{"use strict";Object.defineProperty(lx,"__esModule",{value:!0});var hs=rn(),f6A={data:new hs.Name("data"),valCxt:new hs.Name("valCxt"),instancePath:new hs.Name("instancePath"),parentData:new hs.Name("parentData"),parentDataProperty:new hs.Name("parentDataProperty"),rootData:new hs.Name("rootData"),dynamicAnchors:new hs.Name("dynamicAnchors"),vErrors:new hs.Name("vErrors"),errors:new hs.Name("errors"),this:new hs.Name("this"),self:new hs.Name("self"),scope:new hs.Name("scope"),json:new hs.Name("json"),jsonPos:new hs.Name("jsonPos"),jsonLen:new hs.Name("jsonLen"),jsonPart:new hs.Name("jsonPart")};lx.default=f6A});var h3=qe(us=>{"use strict";Object.defineProperty(us,"__esModule",{value:!0});us.extendErrors=us.resetErrorsCount=us.reportExtraError=us.reportError=us.keyword$DataError=us.keywordError=void 0;var Ln=rn(),g5=On(),Js=FC();us.keywordError={message:({keyword:t})=>(0,Ln.str)`must pass "${t}" keyword validation`};us.keyword$DataError={message:({keyword:t,schemaType:e})=>e?(0,Ln.str)`"${t}" keyword must be ${e} ($data)`:(0,Ln.str)`"${t}" keyword is invalid ($data)`};function m6A(t,e=us.keywordError,A,i){let{it:n}=t,{gen:o,compositeRule:a,allErrors:r}=n,s=FV(t,e,A);i??(a||r)?RV(o,s):NV(n,(0,Ln._)`[${s}]`)}us.reportError=m6A;function p6A(t,e=us.keywordError,A){let{it:i}=t,{gen:n,compositeRule:o,allErrors:a}=i,r=FV(t,e,A);RV(n,r),o||a||NV(i,Js.default.vErrors)}us.reportExtraError=p6A;function w6A(t,e){t.assign(Js.default.errors,e),t.if((0,Ln._)`${Js.default.vErrors} !== null`,()=>t.if(e,()=>t.assign((0,Ln._)`${Js.default.vErrors}.length`,e),()=>t.assign(Js.default.vErrors,null)))}us.resetErrorsCount=w6A;function D6A({gen:t,keyword:e,schemaValue:A,data:i,errsCount:n,it:o}){if(n===void 0)throw new Error("ajv implementation error");let a=t.name("err");t.forRange("i",n,Js.default.errors,r=>{t.const(a,(0,Ln._)`${Js.default.vErrors}[${r}]`),t.if((0,Ln._)`${a}.instancePath === undefined`,()=>t.assign((0,Ln._)`${a}.instancePath`,(0,Ln.strConcat)(Js.default.instancePath,o.errorPath))),t.assign((0,Ln._)`${a}.schemaPath`,(0,Ln.str)`${o.errSchemaPath}/${e}`),o.opts.verbose&&(t.assign((0,Ln._)`${a}.schema`,A),t.assign((0,Ln._)`${a}.data`,i))})}us.extendErrors=D6A;function RV(t,e){let A=t.const("err",e);t.if((0,Ln._)`${Js.default.vErrors} === null`,()=>t.assign(Js.default.vErrors,(0,Ln._)`[${A}]`),(0,Ln._)`${Js.default.vErrors}.push(${A})`),t.code((0,Ln._)`${Js.default.errors}++`)}function NV(t,e){let{gen:A,validateName:i,schemaEnv:n}=t;n.$async?A.throw((0,Ln._)`new ${t.ValidationError}(${e})`):(A.assign((0,Ln._)`${i}.errors`,e),A.return(!1))}var gd={keyword:new Ln.Name("keyword"),schemaPath:new Ln.Name("schemaPath"),params:new Ln.Name("params"),propertyName:new Ln.Name("propertyName"),message:new Ln.Name("message"),schema:new Ln.Name("schema"),parentSchema:new Ln.Name("parentSchema")};function FV(t,e,A){let{createErrors:i}=t.it;return i===!1?(0,Ln._)`{}`:y6A(t,e,A)}function y6A(t,e,A={}){let{gen:i,it:n}=t,o=[v6A(n,A),b6A(t,A)];return M6A(t,e,o),i.object(...o)}function v6A({errorPath:t},{instancePath:e}){let A=e?(0,Ln.str)`${t}${(0,g5.getErrorPath)(e,g5.Type.Str)}`:t;return[Js.default.instancePath,(0,Ln.strConcat)(Js.default.instancePath,A)]}function b6A({keyword:t,it:{errSchemaPath:e}},{schemaPath:A,parentSchema:i}){let n=i?e:(0,Ln.str)`${e}/${t}`;return A&&(n=(0,Ln.str)`${n}${(0,g5.getErrorPath)(A,g5.Type.Str)}`),[gd.schemaPath,n]}function M6A(t,{params:e,message:A},i){let{keyword:n,data:o,schemaValue:a,it:r}=t,{opts:s,propertyName:g,topSchemaRef:l,schemaPath:C}=r;i.push([gd.keyword,n],[gd.params,typeof e=="function"?e(t):e||(0,Ln._)`{}`]),s.messages&&i.push([gd.message,typeof A=="function"?A(t):A]),s.verbose&&i.push([gd.schema,a],[gd.parentSchema,(0,Ln._)`${l}${C}`],[Js.default.data,o]),g&&i.push([gd.propertyName,g])}});var LV=qe($E=>{"use strict";Object.defineProperty($E,"__esModule",{value:!0});$E.boolOrEmptySchema=$E.topBoolOrEmptySchema=void 0;var k6A=h3(),S6A=rn(),x6A=FC(),R6A={message:"boolean schema is false"};function N6A(t){let{gen:e,schema:A,validateName:i}=t;A===!1?_V(t,!1):typeof A=="object"&&A.$async===!0?e.return(x6A.default.data):(e.assign((0,S6A._)`${i}.errors`,null),e.return(!0))}$E.topBoolOrEmptySchema=N6A;function F6A(t,e){let{gen:A,schema:i}=t;i===!1?(A.var(e,!1),_V(t)):A.var(e,!0)}$E.boolOrEmptySchema=F6A;function _V(t,e){let{gen:A,data:i}=t,n={gen:A,keyword:"false schema",data:i,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:t};(0,k6A.reportError)(n,R6A,void 0,e)}});var cx=qe(AQ=>{"use strict";Object.defineProperty(AQ,"__esModule",{value:!0});AQ.getRules=AQ.isJSONType=void 0;var _6A=["string","number","integer","boolean","null","object","array"],L6A=new Set(_6A);function G6A(t){return typeof t=="string"&&L6A.has(t)}AQ.isJSONType=G6A;function K6A(){let t={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:Ge(cA({},t),{integer:!0,boolean:!0,null:!0}),rules:[{rules:[]},t.number,t.string,t.array,t.object],post:{rules:[]},all:{},keywords:{}}}AQ.getRules=K6A});var Cx=qe(QI=>{"use strict";Object.defineProperty(QI,"__esModule",{value:!0});QI.shouldUseRule=QI.shouldUseGroup=QI.schemaHasRulesForType=void 0;function U6A({schema:t,self:e},A){let i=e.RULES.types[A];return i&&i!==!0&&GV(t,i)}QI.schemaHasRulesForType=U6A;function GV(t,e){return e.rules.some(A=>KV(t,A))}QI.shouldUseGroup=GV;function KV(t,e){var A;return t[e.keyword]!==void 0||((A=e.definition.implements)===null||A===void 0?void 0:A.some(i=>t[i]!==void 0))}QI.shouldUseRule=KV});var u3=qe(fs=>{"use strict";Object.defineProperty(fs,"__esModule",{value:!0});fs.reportTypeError=fs.checkDataTypes=fs.checkDataType=fs.coerceAndCheckDataType=fs.getJSONTypes=fs.getSchemaTypes=fs.DataType=void 0;var J6A=cx(),Y6A=Cx(),T6A=h3(),Ti=rn(),UV=On(),eQ=(function(t){return t[t.Correct=0]="Correct",t[t.Wrong=1]="Wrong",t})(eQ||(fs.DataType=eQ={}));function H6A(t){let e=JV(t.type);if(e.includes("null")){if(t.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!e.length&&t.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');t.nullable===!0&&e.push("null")}return e}fs.getSchemaTypes=H6A;function JV(t){let e=Array.isArray(t)?t:t?[t]:[];if(e.every(J6A.isJSONType))return e;throw new Error("type must be JSONType or JSONType[]: "+e.join(","))}fs.getJSONTypes=JV;function z6A(t,e){let{gen:A,data:i,opts:n}=t,o=O6A(e,n.coerceTypes),a=e.length>0&&!(o.length===0&&e.length===1&&(0,Y6A.schemaHasRulesForType)(t,e[0]));if(a){let r=dx(e,i,n.strictNumbers,eQ.Wrong);A.if(r,()=>{o.length?P6A(t,e,o):Bx(t)})}return a}fs.coerceAndCheckDataType=z6A;var YV=new Set(["string","number","integer","boolean","null"]);function O6A(t,e){return e?t.filter(A=>YV.has(A)||e==="array"&&A==="array"):[]}function P6A(t,e,A){let{gen:i,data:n,opts:o}=t,a=i.let("dataType",(0,Ti._)`typeof ${n}`),r=i.let("coerced",(0,Ti._)`undefined`);o.coerceTypes==="array"&&i.if((0,Ti._)`${a} == 'object' && Array.isArray(${n}) && ${n}.length == 1`,()=>i.assign(n,(0,Ti._)`${n}[0]`).assign(a,(0,Ti._)`typeof ${n}`).if(dx(e,n,o.strictNumbers),()=>i.assign(r,n))),i.if((0,Ti._)`${r} !== undefined`);for(let g of A)(YV.has(g)||g==="array"&&o.coerceTypes==="array")&&s(g);i.else(),Bx(t),i.endIf(),i.if((0,Ti._)`${r} !== undefined`,()=>{i.assign(n,r),j6A(t,r)});function s(g){switch(g){case"string":i.elseIf((0,Ti._)`${a} == "number" || ${a} == "boolean"`).assign(r,(0,Ti._)`"" + ${n}`).elseIf((0,Ti._)`${n} === null`).assign(r,(0,Ti._)`""`);return;case"number":i.elseIf((0,Ti._)`${a} == "boolean" || ${n} === null - || (${a} == "string" && ${n} && ${n} == +${n})`).assign(r,(0,Ti._)`+${n}`);return;case"integer":i.elseIf((0,Ti._)`${a} === "boolean" || ${n} === null - || (${a} === "string" && ${n} && ${n} == +${n} && !(${n} % 1))`).assign(r,(0,Ti._)`+${n}`);return;case"boolean":i.elseIf((0,Ti._)`${n} === "false" || ${n} === 0 || ${n} === null`).assign(r,!1).elseIf((0,Ti._)`${n} === "true" || ${n} === 1`).assign(r,!0);return;case"null":i.elseIf((0,Ti._)`${n} === "" || ${n} === 0 || ${n} === false`),i.assign(r,null);return;case"array":i.elseIf((0,Ti._)`${a} === "string" || ${a} === "number" - || ${a} === "boolean" || ${n} === null`).assign(r,(0,Ti._)`[${n}]`)}}}function j6A({gen:t,parentData:e,parentDataProperty:A},i){t.if((0,Ti._)`${e} !== undefined`,()=>t.assign((0,Ti._)`${e}[${A}]`,i))}function Ix(t,e,A,i=eQ.Correct){let n=i===eQ.Correct?Ti.operators.EQ:Ti.operators.NEQ,o;switch(t){case"null":return(0,Ti._)`${e} ${n} null`;case"array":o=(0,Ti._)`Array.isArray(${e})`;break;case"object":o=(0,Ti._)`${e} && typeof ${e} == "object" && !Array.isArray(${e})`;break;case"integer":o=a((0,Ti._)`!(${e} % 1) && !isNaN(${e})`);break;case"number":o=a();break;default:return(0,Ti._)`typeof ${e} ${n} ${t}`}return i===eQ.Correct?o:(0,Ti.not)(o);function a(r=Ti.nil){return(0,Ti.and)((0,Ti._)`typeof ${e} == "number"`,r,A?(0,Ti._)`isFinite(${e})`:Ti.nil)}}fs.checkDataType=Ix;function dx(t,e,A,i){if(t.length===1)return Ix(t[0],e,A,i);let n,o=(0,UV.toHash)(t);if(o.array&&o.object){let a=(0,Ti._)`typeof ${e} != "object"`;n=o.null?a:(0,Ti._)`!${e} || ${a}`,delete o.null,delete o.array,delete o.object}else n=Ti.nil;o.number&&delete o.integer;for(let a in o)n=(0,Ti.and)(n,Ix(a,e,A,i));return n}fs.checkDataTypes=dx;var q6A={message:({schema:t})=>`must be ${t}`,params:({schema:t,schemaValue:e})=>typeof t=="string"?(0,Ti._)`{type: ${t}}`:(0,Ti._)`{type: ${e}}`};function Bx(t){let e=V6A(t);(0,T6A.reportError)(e,q6A)}fs.reportTypeError=Bx;function V6A(t){let{gen:e,data:A,schema:i}=t,n=(0,UV.schemaRefOrVal)(t,i,"type");return{gen:e,keyword:"type",data:A,schema:i.type,schemaCode:n,schemaValue:n,parentSchema:i,params:{},it:t}}});var HV=qe(l5=>{"use strict";Object.defineProperty(l5,"__esModule",{value:!0});l5.assignDefaults=void 0;var tQ=rn(),W6A=On();function Z6A(t,e){let{properties:A,items:i}=t.schema;if(e==="object"&&A)for(let n in A)TV(t,n,A[n].default);else e==="array"&&Array.isArray(i)&&i.forEach((n,o)=>TV(t,o,n.default))}l5.assignDefaults=Z6A;function TV(t,e,A){let{gen:i,compositeRule:n,data:o,opts:a}=t;if(A===void 0)return;let r=(0,tQ._)`${o}${(0,tQ.getProperty)(e)}`;if(n){(0,W6A.checkStrictMode)(t,`default is ignored for: ${r}`);return}let s=(0,tQ._)`${r} === undefined`;a.useDefaults==="empty"&&(s=(0,tQ._)`${s} || ${r} === null || ${r} === ""`),i.if(s,(0,tQ._)`${r} = ${(0,tQ.stringify)(A)}`)}});var vl=qe(Fo=>{"use strict";Object.defineProperty(Fo,"__esModule",{value:!0});Fo.validateUnion=Fo.validateArray=Fo.usePattern=Fo.callValidateCode=Fo.schemaProperties=Fo.allSchemaProperties=Fo.noPropertyInData=Fo.propertyInData=Fo.isOwnProperty=Fo.hasPropFunc=Fo.reportMissingProp=Fo.checkMissingProp=Fo.checkReportMissingProp=void 0;var da=rn(),Ex=On(),hI=FC(),X6A=On();function $6A(t,e){let{gen:A,data:i,it:n}=t;A.if(hx(A,i,e,n.opts.ownProperties),()=>{t.setParams({missingProperty:(0,da._)`${e}`},!0),t.error()})}Fo.checkReportMissingProp=$6A;function A8A({gen:t,data:e,it:{opts:A}},i,n){return(0,da.or)(...i.map(o=>(0,da.and)(hx(t,e,o,A.ownProperties),(0,da._)`${n} = ${o}`)))}Fo.checkMissingProp=A8A;function e8A(t,e){t.setParams({missingProperty:e},!0),t.error()}Fo.reportMissingProp=e8A;function zV(t){return t.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,da._)`Object.prototype.hasOwnProperty`})}Fo.hasPropFunc=zV;function Qx(t,e,A){return(0,da._)`${zV(t)}.call(${e}, ${A})`}Fo.isOwnProperty=Qx;function t8A(t,e,A,i){let n=(0,da._)`${e}${(0,da.getProperty)(A)} !== undefined`;return i?(0,da._)`${n} && ${Qx(t,e,A)}`:n}Fo.propertyInData=t8A;function hx(t,e,A,i){let n=(0,da._)`${e}${(0,da.getProperty)(A)} === undefined`;return i?(0,da.or)(n,(0,da.not)(Qx(t,e,A))):n}Fo.noPropertyInData=hx;function OV(t){return t?Object.keys(t).filter(e=>e!=="__proto__"):[]}Fo.allSchemaProperties=OV;function i8A(t,e){return OV(e).filter(A=>!(0,Ex.alwaysValidSchema)(t,e[A]))}Fo.schemaProperties=i8A;function n8A({schemaCode:t,data:e,it:{gen:A,topSchemaRef:i,schemaPath:n,errorPath:o},it:a},r,s,g){let l=g?(0,da._)`${t}, ${e}, ${i}${n}`:e,C=[[hI.default.instancePath,(0,da.strConcat)(hI.default.instancePath,o)],[hI.default.parentData,a.parentData],[hI.default.parentDataProperty,a.parentDataProperty],[hI.default.rootData,hI.default.rootData]];a.opts.dynamicRef&&C.push([hI.default.dynamicAnchors,hI.default.dynamicAnchors]);let I=(0,da._)`${l}, ${A.object(...C)}`;return s!==da.nil?(0,da._)`${r}.call(${s}, ${I})`:(0,da._)`${r}(${I})`}Fo.callValidateCode=n8A;var o8A=(0,da._)`new RegExp`;function a8A({gen:t,it:{opts:e}},A){let i=e.unicodeRegExp?"u":"",{regExp:n}=e.code,o=n(A,i);return t.scopeValue("pattern",{key:o.toString(),ref:o,code:(0,da._)`${n.code==="new RegExp"?o8A:(0,X6A.useFunc)(t,n)}(${A}, ${i})`})}Fo.usePattern=a8A;function r8A(t){let{gen:e,data:A,keyword:i,it:n}=t,o=e.name("valid");if(n.allErrors){let r=e.let("valid",!0);return a(()=>e.assign(r,!1)),r}return e.var(o,!0),a(()=>e.break()),o;function a(r){let s=e.const("len",(0,da._)`${A}.length`);e.forRange("i",0,s,g=>{t.subschema({keyword:i,dataProp:g,dataPropType:Ex.Type.Num},o),e.if((0,da.not)(o),r)})}}Fo.validateArray=r8A;function s8A(t){let{gen:e,schema:A,keyword:i,it:n}=t;if(!Array.isArray(A))throw new Error("ajv implementation error");if(A.some(s=>(0,Ex.alwaysValidSchema)(n,s))&&!n.opts.unevaluated)return;let a=e.let("valid",!1),r=e.name("_valid");e.block(()=>A.forEach((s,g)=>{let l=t.subschema({keyword:i,schemaProp:g,compositeRule:!0},r);e.assign(a,(0,da._)`${a} || ${r}`),t.mergeValidEvaluated(l,r)||e.if((0,da.not)(a))})),t.result(a,()=>t.reset(),()=>t.error(!0))}Fo.validateUnion=s8A});var qV=qe(k0=>{"use strict";Object.defineProperty(k0,"__esModule",{value:!0});k0.validateKeywordUsage=k0.validSchemaType=k0.funcKeywordCode=k0.macroKeywordCode=void 0;var Ys=rn(),ld=FC(),g8A=vl(),l8A=h3();function c8A(t,e){let{gen:A,keyword:i,schema:n,parentSchema:o,it:a}=t,r=e.macro.call(a.self,n,o,a),s=jV(A,i,r);a.opts.validateSchema!==!1&&a.self.validateSchema(r,!0);let g=A.name("valid");t.subschema({schema:r,schemaPath:Ys.nil,errSchemaPath:`${a.errSchemaPath}/${i}`,topSchemaRef:s,compositeRule:!0},g),t.pass(g,()=>t.error(!0))}k0.macroKeywordCode=c8A;function C8A(t,e){var A;let{gen:i,keyword:n,schema:o,parentSchema:a,$data:r,it:s}=t;d8A(s,e);let g=!r&&e.compile?e.compile.call(s.self,o,a,s):e.validate,l=jV(i,n,g),C=i.let("valid");t.block$data(C,I),t.ok((A=e.valid)!==null&&A!==void 0?A:C);function I(){if(e.errors===!1)E(),e.modifying&&PV(t),Q(()=>t.error());else{let f=e.async?d():B();e.modifying&&PV(t),Q(()=>I8A(t,f))}}function d(){let f=i.let("ruleErrs",null);return i.try(()=>E((0,Ys._)`await `),b=>i.assign(C,!1).if((0,Ys._)`${b} instanceof ${s.ValidationError}`,()=>i.assign(f,(0,Ys._)`${b}.errors`),()=>i.throw(b))),f}function B(){let f=(0,Ys._)`${l}.errors`;return i.assign(f,null),E(Ys.nil),f}function E(f=e.async?(0,Ys._)`await `:Ys.nil){let b=s.opts.passContext?ld.default.this:ld.default.self,S=!("compile"in e&&!r||e.schema===!1);i.assign(C,(0,Ys._)`${f}${(0,g8A.callValidateCode)(t,l,b,S)}`,e.modifying)}function Q(f){var b;i.if((0,Ys.not)((b=e.valid)!==null&&b!==void 0?b:C),f)}}k0.funcKeywordCode=C8A;function PV(t){let{gen:e,data:A,it:i}=t;e.if(i.parentData,()=>e.assign(A,(0,Ys._)`${i.parentData}[${i.parentDataProperty}]`))}function I8A(t,e){let{gen:A}=t;A.if((0,Ys._)`Array.isArray(${e})`,()=>{A.assign(ld.default.vErrors,(0,Ys._)`${ld.default.vErrors} === null ? ${e} : ${ld.default.vErrors}.concat(${e})`).assign(ld.default.errors,(0,Ys._)`${ld.default.vErrors}.length`),(0,l8A.extendErrors)(t)},()=>t.error())}function d8A({schemaEnv:t},e){if(e.async&&!t.$async)throw new Error("async keyword in sync schema")}function jV(t,e,A){if(A===void 0)throw new Error(`keyword "${e}" failed to compile`);return t.scopeValue("keyword",typeof A=="function"?{ref:A}:{ref:A,code:(0,Ys.stringify)(A)})}function B8A(t,e,A=!1){return!e.length||e.some(i=>i==="array"?Array.isArray(t):i==="object"?t&&typeof t=="object"&&!Array.isArray(t):typeof t==i||A&&typeof t>"u")}k0.validSchemaType=B8A;function E8A({schema:t,opts:e,self:A,errSchemaPath:i},n,o){if(Array.isArray(n.keyword)?!n.keyword.includes(o):n.keyword!==o)throw new Error("ajv implementation error");let a=n.dependencies;if(a?.some(r=>!Object.prototype.hasOwnProperty.call(t,r)))throw new Error(`parent schema must have dependencies of ${o}: ${a.join(",")}`);if(n.validateSchema&&!n.validateSchema(t[o])){let s=`keyword "${o}" value is invalid at path "${i}": `+A.errorsText(n.validateSchema.errors);if(e.validateSchema==="log")A.logger.error(s);else throw new Error(s)}}k0.validateKeywordUsage=E8A});var WV=qe(uI=>{"use strict";Object.defineProperty(uI,"__esModule",{value:!0});uI.extendSubschemaMode=uI.extendSubschemaData=uI.getSubschema=void 0;var S0=rn(),VV=On();function Q8A(t,{keyword:e,schemaProp:A,schema:i,schemaPath:n,errSchemaPath:o,topSchemaRef:a}){if(e!==void 0&&i!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(e!==void 0){let r=t.schema[e];return A===void 0?{schema:r,schemaPath:(0,S0._)`${t.schemaPath}${(0,S0.getProperty)(e)}`,errSchemaPath:`${t.errSchemaPath}/${e}`}:{schema:r[A],schemaPath:(0,S0._)`${t.schemaPath}${(0,S0.getProperty)(e)}${(0,S0.getProperty)(A)}`,errSchemaPath:`${t.errSchemaPath}/${e}/${(0,VV.escapeFragment)(A)}`}}if(i!==void 0){if(n===void 0||o===void 0||a===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:i,schemaPath:n,topSchemaRef:a,errSchemaPath:o}}throw new Error('either "keyword" or "schema" must be passed')}uI.getSubschema=Q8A;function h8A(t,e,{dataProp:A,dataPropType:i,data:n,dataTypes:o,propertyName:a}){if(n!==void 0&&A!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');let{gen:r}=e;if(A!==void 0){let{errorPath:g,dataPathArr:l,opts:C}=e,I=r.let("data",(0,S0._)`${e.data}${(0,S0.getProperty)(A)}`,!0);s(I),t.errorPath=(0,S0.str)`${g}${(0,VV.getErrorPath)(A,i,C.jsPropertySyntax)}`,t.parentDataProperty=(0,S0._)`${A}`,t.dataPathArr=[...l,t.parentDataProperty]}if(n!==void 0){let g=n instanceof S0.Name?n:r.let("data",n,!0);s(g),a!==void 0&&(t.propertyName=a)}o&&(t.dataTypes=o);function s(g){t.data=g,t.dataLevel=e.dataLevel+1,t.dataTypes=[],e.definedProperties=new Set,t.parentData=e.data,t.dataNames=[...e.dataNames,g]}}uI.extendSubschemaData=h8A;function u8A(t,{jtdDiscriminator:e,jtdMetadata:A,compositeRule:i,createErrors:n,allErrors:o}){i!==void 0&&(t.compositeRule=i),n!==void 0&&(t.createErrors=n),o!==void 0&&(t.allErrors=o),t.jtdDiscriminator=e,t.jtdMetadata=A}uI.extendSubschemaMode=u8A});var ux=qe((Q6e,ZV)=>{"use strict";ZV.exports=function t(e,A){if(e===A)return!0;if(e&&A&&typeof e=="object"&&typeof A=="object"){if(e.constructor!==A.constructor)return!1;var i,n,o;if(Array.isArray(e)){if(i=e.length,i!=A.length)return!1;for(n=i;n--!==0;)if(!t(e[n],A[n]))return!1;return!0}if(e.constructor===RegExp)return e.source===A.source&&e.flags===A.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===A.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===A.toString();if(o=Object.keys(e),i=o.length,i!==Object.keys(A).length)return!1;for(n=i;n--!==0;)if(!Object.prototype.hasOwnProperty.call(A,o[n]))return!1;for(n=i;n--!==0;){var a=o[n];if(!t(e[a],A[a]))return!1}return!0}return e!==e&&A!==A}});var $V=qe((h6e,XV)=>{"use strict";var fI=XV.exports=function(t,e,A){typeof e=="function"&&(A=e,e={}),A=e.cb||A;var i=typeof A=="function"?A:A.pre||function(){},n=A.post||function(){};c5(e,i,n,t,"",t)};fI.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};fI.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};fI.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};fI.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function c5(t,e,A,i,n,o,a,r,s,g){if(i&&typeof i=="object"&&!Array.isArray(i)){e(i,n,o,a,r,s,g);for(var l in i){var C=i[l];if(Array.isArray(C)){if(l in fI.arrayKeywords)for(var I=0;I{"use strict";Object.defineProperty(Bg,"__esModule",{value:!0});Bg.getSchemaRefs=Bg.resolveUrl=Bg.normalizeId=Bg._getFullPath=Bg.getFullPath=Bg.inlineRef=void 0;var m8A=On(),p8A=ux(),w8A=$V(),D8A=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function y8A(t,e=!0){return typeof t=="boolean"?!0:e===!0?!fx(t):e?AW(t)<=e:!1}Bg.inlineRef=y8A;var v8A=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function fx(t){for(let e in t){if(v8A.has(e))return!0;let A=t[e];if(Array.isArray(A)&&A.some(fx)||typeof A=="object"&&fx(A))return!0}return!1}function AW(t){let e=0;for(let A in t){if(A==="$ref")return 1/0;if(e++,!D8A.has(A)&&(typeof t[A]=="object"&&(0,m8A.eachItem)(t[A],i=>e+=AW(i)),e===1/0))return 1/0}return e}function eW(t,e="",A){A!==!1&&(e=iQ(e));let i=t.parse(e);return tW(t,i)}Bg.getFullPath=eW;function tW(t,e){return t.serialize(e).split("#")[0]+"#"}Bg._getFullPath=tW;var b8A=/#\/?$/;function iQ(t){return t?t.replace(b8A,""):""}Bg.normalizeId=iQ;function M8A(t,e,A){return A=iQ(A),t.resolve(e,A)}Bg.resolveUrl=M8A;var k8A=/^[a-z_][-a-z0-9._]*$/i;function S8A(t,e){if(typeof t=="boolean")return{};let{schemaId:A,uriResolver:i}=this.opts,n=iQ(t[A]||e),o={"":n},a=eW(i,n,!1),r={},s=new Set;return w8A(t,{allKeys:!0},(C,I,d,B)=>{if(B===void 0)return;let E=a+I,Q=o[B];typeof C[A]=="string"&&(Q=f.call(this,C[A])),b.call(this,C.$anchor),b.call(this,C.$dynamicAnchor),o[I]=Q;function f(S){let M=this.opts.uriResolver.resolve;if(S=iQ(Q?M(Q,S):S),s.has(S))throw l(S);s.add(S);let D=this.refs[S];return typeof D=="string"&&(D=this.refs[D]),typeof D=="object"?g(C,D.schema,S):S!==iQ(E)&&(S[0]==="#"?(g(C,r[S],S),r[S]=C):this.refs[S]=E),S}function b(S){if(typeof S=="string"){if(!k8A.test(S))throw new Error(`invalid anchor "${S}"`);f.call(this,`#${S}`)}}}),r;function g(C,I,d){if(I!==void 0&&!p8A(C,I))throw l(d)}function l(C){return new Error(`reference "${C}" resolves to more than one schema`)}}Bg.getSchemaRefs=S8A});var w3=qe(mI=>{"use strict";Object.defineProperty(mI,"__esModule",{value:!0});mI.getData=mI.KeywordCxt=mI.validateFunctionCode=void 0;var rW=LV(),iW=u3(),px=Cx(),C5=u3(),x8A=HV(),p3=qV(),mx=WV(),Nt=rn(),hi=FC(),R8A=f3(),_C=On(),m3=h3();function N8A(t){if(lW(t)&&(cW(t),gW(t))){L8A(t);return}sW(t,()=>(0,rW.topBoolOrEmptySchema)(t))}mI.validateFunctionCode=N8A;function sW({gen:t,validateName:e,schema:A,schemaEnv:i,opts:n},o){n.code.es5?t.func(e,(0,Nt._)`${hi.default.data}, ${hi.default.valCxt}`,i.$async,()=>{t.code((0,Nt._)`"use strict"; ${nW(A,n)}`),_8A(t,n),t.code(o)}):t.func(e,(0,Nt._)`${hi.default.data}, ${F8A(n)}`,i.$async,()=>t.code(nW(A,n)).code(o))}function F8A(t){return(0,Nt._)`{${hi.default.instancePath}="", ${hi.default.parentData}, ${hi.default.parentDataProperty}, ${hi.default.rootData}=${hi.default.data}${t.dynamicRef?(0,Nt._)`, ${hi.default.dynamicAnchors}={}`:Nt.nil}}={}`}function _8A(t,e){t.if(hi.default.valCxt,()=>{t.var(hi.default.instancePath,(0,Nt._)`${hi.default.valCxt}.${hi.default.instancePath}`),t.var(hi.default.parentData,(0,Nt._)`${hi.default.valCxt}.${hi.default.parentData}`),t.var(hi.default.parentDataProperty,(0,Nt._)`${hi.default.valCxt}.${hi.default.parentDataProperty}`),t.var(hi.default.rootData,(0,Nt._)`${hi.default.valCxt}.${hi.default.rootData}`),e.dynamicRef&&t.var(hi.default.dynamicAnchors,(0,Nt._)`${hi.default.valCxt}.${hi.default.dynamicAnchors}`)},()=>{t.var(hi.default.instancePath,(0,Nt._)`""`),t.var(hi.default.parentData,(0,Nt._)`undefined`),t.var(hi.default.parentDataProperty,(0,Nt._)`undefined`),t.var(hi.default.rootData,hi.default.data),e.dynamicRef&&t.var(hi.default.dynamicAnchors,(0,Nt._)`{}`)})}function L8A(t){let{schema:e,opts:A,gen:i}=t;sW(t,()=>{A.$comment&&e.$comment&&IW(t),Y8A(t),i.let(hi.default.vErrors,null),i.let(hi.default.errors,0),A.unevaluated&&G8A(t),CW(t),z8A(t)})}function G8A(t){let{gen:e,validateName:A}=t;t.evaluated=e.const("evaluated",(0,Nt._)`${A}.evaluated`),e.if((0,Nt._)`${t.evaluated}.dynamicProps`,()=>e.assign((0,Nt._)`${t.evaluated}.props`,(0,Nt._)`undefined`)),e.if((0,Nt._)`${t.evaluated}.dynamicItems`,()=>e.assign((0,Nt._)`${t.evaluated}.items`,(0,Nt._)`undefined`))}function nW(t,e){let A=typeof t=="object"&&t[e.schemaId];return A&&(e.code.source||e.code.process)?(0,Nt._)`/*# sourceURL=${A} */`:Nt.nil}function K8A(t,e){if(lW(t)&&(cW(t),gW(t))){U8A(t,e);return}(0,rW.boolOrEmptySchema)(t,e)}function gW({schema:t,self:e}){if(typeof t=="boolean")return!t;for(let A in t)if(e.RULES.all[A])return!0;return!1}function lW(t){return typeof t.schema!="boolean"}function U8A(t,e){let{schema:A,gen:i,opts:n}=t;n.$comment&&A.$comment&&IW(t),T8A(t),H8A(t);let o=i.const("_errs",hi.default.errors);CW(t,o),i.var(e,(0,Nt._)`${o} === ${hi.default.errors}`)}function cW(t){(0,_C.checkUnknownRules)(t),J8A(t)}function CW(t,e){if(t.opts.jtd)return oW(t,[],!1,e);let A=(0,iW.getSchemaTypes)(t.schema),i=(0,iW.coerceAndCheckDataType)(t,A);oW(t,A,!i,e)}function J8A(t){let{schema:e,errSchemaPath:A,opts:i,self:n}=t;e.$ref&&i.ignoreKeywordsWithRef&&(0,_C.schemaHasRulesButRef)(e,n.RULES)&&n.logger.warn(`$ref: keywords ignored in schema at path "${A}"`)}function Y8A(t){let{schema:e,opts:A}=t;e.default!==void 0&&A.useDefaults&&A.strictSchema&&(0,_C.checkStrictMode)(t,"default is ignored in the schema root")}function T8A(t){let e=t.schema[t.opts.schemaId];e&&(t.baseId=(0,R8A.resolveUrl)(t.opts.uriResolver,t.baseId,e))}function H8A(t){if(t.schema.$async&&!t.schemaEnv.$async)throw new Error("async schema in sync schema")}function IW({gen:t,schemaEnv:e,schema:A,errSchemaPath:i,opts:n}){let o=A.$comment;if(n.$comment===!0)t.code((0,Nt._)`${hi.default.self}.logger.log(${o})`);else if(typeof n.$comment=="function"){let a=(0,Nt.str)`${i}/$comment`,r=t.scopeValue("root",{ref:e.root});t.code((0,Nt._)`${hi.default.self}.opts.$comment(${o}, ${a}, ${r}.schema)`)}}function z8A(t){let{gen:e,schemaEnv:A,validateName:i,ValidationError:n,opts:o}=t;A.$async?e.if((0,Nt._)`${hi.default.errors} === 0`,()=>e.return(hi.default.data),()=>e.throw((0,Nt._)`new ${n}(${hi.default.vErrors})`)):(e.assign((0,Nt._)`${i}.errors`,hi.default.vErrors),o.unevaluated&&O8A(t),e.return((0,Nt._)`${hi.default.errors} === 0`))}function O8A({gen:t,evaluated:e,props:A,items:i}){A instanceof Nt.Name&&t.assign((0,Nt._)`${e}.props`,A),i instanceof Nt.Name&&t.assign((0,Nt._)`${e}.items`,i)}function oW(t,e,A,i){let{gen:n,schema:o,data:a,allErrors:r,opts:s,self:g}=t,{RULES:l}=g;if(o.$ref&&(s.ignoreKeywordsWithRef||!(0,_C.schemaHasRulesButRef)(o,l))){n.block(()=>BW(t,"$ref",l.all.$ref.definition));return}s.jtd||P8A(t,e),n.block(()=>{for(let I of l.rules)C(I);C(l.post)});function C(I){(0,px.shouldUseGroup)(o,I)&&(I.type?(n.if((0,C5.checkDataType)(I.type,a,s.strictNumbers)),aW(t,I),e.length===1&&e[0]===I.type&&A&&(n.else(),(0,C5.reportTypeError)(t)),n.endIf()):aW(t,I),r||n.if((0,Nt._)`${hi.default.errors} === ${i||0}`))}}function aW(t,e){let{gen:A,schema:i,opts:{useDefaults:n}}=t;n&&(0,x8A.assignDefaults)(t,e.type),A.block(()=>{for(let o of e.rules)(0,px.shouldUseRule)(i,o)&&BW(t,o.keyword,o.definition,e.type)})}function P8A(t,e){t.schemaEnv.meta||!t.opts.strictTypes||(j8A(t,e),t.opts.allowUnionTypes||q8A(t,e),V8A(t,t.dataTypes))}function j8A(t,e){if(e.length){if(!t.dataTypes.length){t.dataTypes=e;return}e.forEach(A=>{dW(t.dataTypes,A)||wx(t,`type "${A}" not allowed by context "${t.dataTypes.join(",")}"`)}),Z8A(t,e)}}function q8A(t,e){e.length>1&&!(e.length===2&&e.includes("null"))&&wx(t,"use allowUnionTypes to allow union type keyword")}function V8A(t,e){let A=t.self.RULES.all;for(let i in A){let n=A[i];if(typeof n=="object"&&(0,px.shouldUseRule)(t.schema,n)){let{type:o}=n.definition;o.length&&!o.some(a=>W8A(e,a))&&wx(t,`missing type "${o.join(",")}" for keyword "${i}"`)}}}function W8A(t,e){return t.includes(e)||e==="number"&&t.includes("integer")}function dW(t,e){return t.includes(e)||e==="integer"&&t.includes("number")}function Z8A(t,e){let A=[];for(let i of t.dataTypes)dW(e,i)?A.push(i):e.includes("integer")&&i==="number"&&A.push("integer");t.dataTypes=A}function wx(t,e){let A=t.schemaEnv.baseId+t.errSchemaPath;e+=` at "${A}" (strictTypes)`,(0,_C.checkStrictMode)(t,e,t.opts.strictTypes)}var I5=class{constructor(e,A,i){if((0,p3.validateKeywordUsage)(e,A,i),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=i,this.data=e.data,this.schema=e.schema[i],this.$data=A.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,_C.schemaRefOrVal)(e,this.schema,i,this.$data),this.schemaType=A.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=A,this.$data)this.schemaCode=e.gen.const("vSchema",EW(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,p3.validSchemaType)(this.schema,A.schemaType,A.allowUndefined))throw new Error(`${i} value must be ${JSON.stringify(A.schemaType)}`);("code"in A?A.trackErrors:A.errors!==!1)&&(this.errsCount=e.gen.const("_errs",hi.default.errors))}result(e,A,i){this.failResult((0,Nt.not)(e),A,i)}failResult(e,A,i){this.gen.if(e),i?i():this.error(),A?(this.gen.else(),A(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,A){this.failResult((0,Nt.not)(e),void 0,A)}fail(e){if(e===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:A}=this;this.fail((0,Nt._)`${A} !== undefined && (${(0,Nt.or)(this.invalid$data(),e)})`)}error(e,A,i){if(A){this.setParams(A),this._error(e,i),this.setParams({});return}this._error(e,i)}_error(e,A){(e?m3.reportExtraError:m3.reportError)(this,this.def.error,A)}$dataError(){(0,m3.reportError)(this,this.def.$dataError||m3.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,m3.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,A){A?Object.assign(this.params,e):this.params=e}block$data(e,A,i=Nt.nil){this.gen.block(()=>{this.check$data(e,i),A()})}check$data(e=Nt.nil,A=Nt.nil){if(!this.$data)return;let{gen:i,schemaCode:n,schemaType:o,def:a}=this;i.if((0,Nt.or)((0,Nt._)`${n} === undefined`,A)),e!==Nt.nil&&i.assign(e,!0),(o.length||a.validateSchema)&&(i.elseIf(this.invalid$data()),this.$dataError(),e!==Nt.nil&&i.assign(e,!1)),i.else()}invalid$data(){let{gen:e,schemaCode:A,schemaType:i,def:n,it:o}=this;return(0,Nt.or)(a(),r());function a(){if(i.length){if(!(A instanceof Nt.Name))throw new Error("ajv implementation error");let s=Array.isArray(i)?i:[i];return(0,Nt._)`${(0,C5.checkDataTypes)(s,A,o.opts.strictNumbers,C5.DataType.Wrong)}`}return Nt.nil}function r(){if(n.validateSchema){let s=e.scopeValue("validate$data",{ref:n.validateSchema});return(0,Nt._)`!${s}(${A})`}return Nt.nil}}subschema(e,A){let i=(0,mx.getSubschema)(this.it,e);(0,mx.extendSubschemaData)(i,this.it,e),(0,mx.extendSubschemaMode)(i,e);let n=Ge(cA(cA({},this.it),i),{items:void 0,props:void 0});return K8A(n,A),n}mergeEvaluated(e,A){let{it:i,gen:n}=this;i.opts.unevaluated&&(i.props!==!0&&e.props!==void 0&&(i.props=_C.mergeEvaluated.props(n,e.props,i.props,A)),i.items!==!0&&e.items!==void 0&&(i.items=_C.mergeEvaluated.items(n,e.items,i.items,A)))}mergeValidEvaluated(e,A){let{it:i,gen:n}=this;if(i.opts.unevaluated&&(i.props!==!0||i.items!==!0))return n.if(A,()=>this.mergeEvaluated(e,Nt.Name)),!0}};mI.KeywordCxt=I5;function BW(t,e,A,i){let n=new I5(t,A,e);"code"in A?A.code(n,i):n.$data&&A.validate?(0,p3.funcKeywordCode)(n,A):"macro"in A?(0,p3.macroKeywordCode)(n,A):(A.compile||A.validate)&&(0,p3.funcKeywordCode)(n,A)}var X8A=/^\/(?:[^~]|~0|~1)*$/,$8A=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function EW(t,{dataLevel:e,dataNames:A,dataPathArr:i}){let n,o;if(t==="")return hi.default.rootData;if(t[0]==="/"){if(!X8A.test(t))throw new Error(`Invalid JSON-pointer: ${t}`);n=t,o=hi.default.rootData}else{let g=$8A.exec(t);if(!g)throw new Error(`Invalid JSON-pointer: ${t}`);let l=+g[1];if(n=g[2],n==="#"){if(l>=e)throw new Error(s("property/index",l));return i[e-l]}if(l>e)throw new Error(s("data",l));if(o=A[e-l],!n)return o}let a=o,r=n.split("/");for(let g of r)g&&(o=(0,Nt._)`${o}${(0,Nt.getProperty)((0,_C.unescapeJsonPointer)(g))}`,a=(0,Nt._)`${a} && ${o}`);return a;function s(g,l){return`Cannot access ${g} ${l} levels up, current level is ${e}`}}mI.getData=EW});var d5=qe(yx=>{"use strict";Object.defineProperty(yx,"__esModule",{value:!0});var Dx=class extends Error{constructor(e){super("validation failed"),this.errors=e,this.ajv=this.validation=!0}};yx.default=Dx});var D3=qe(Mx=>{"use strict";Object.defineProperty(Mx,"__esModule",{value:!0});var vx=f3(),bx=class extends Error{constructor(e,A,i,n){super(n||`can't resolve reference ${i} from id ${A}`),this.missingRef=(0,vx.resolveUrl)(e,A,i),this.missingSchema=(0,vx.normalizeId)((0,vx.getFullPath)(e,this.missingRef))}};Mx.default=bx});var E5=qe(bl=>{"use strict";Object.defineProperty(bl,"__esModule",{value:!0});bl.resolveSchema=bl.getCompilingSchema=bl.resolveRef=bl.compileSchema=bl.SchemaEnv=void 0;var Dc=rn(),AwA=d5(),cd=FC(),yc=f3(),QW=On(),ewA=w3(),nQ=class{constructor(e){var A;this.refs={},this.dynamicAnchors={};let i;typeof e.schema=="object"&&(i=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(A=e.baseId)!==null&&A!==void 0?A:(0,yc.normalizeId)(i?.[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=i?.$async,this.refs={}}};bl.SchemaEnv=nQ;function Sx(t){let e=hW.call(this,t);if(e)return e;let A=(0,yc.getFullPath)(this.opts.uriResolver,t.root.baseId),{es5:i,lines:n}=this.opts.code,{ownProperties:o}=this.opts,a=new Dc.CodeGen(this.scope,{es5:i,lines:n,ownProperties:o}),r;t.$async&&(r=a.scopeValue("Error",{ref:AwA.default,code:(0,Dc._)`require("ajv/dist/runtime/validation_error").default`}));let s=a.scopeName("validate");t.validateName=s;let g={gen:a,allErrors:this.opts.allErrors,data:cd.default.data,parentData:cd.default.parentData,parentDataProperty:cd.default.parentDataProperty,dataNames:[cd.default.data],dataPathArr:[Dc.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:a.scopeValue("schema",this.opts.code.source===!0?{ref:t.schema,code:(0,Dc.stringify)(t.schema)}:{ref:t.schema}),validateName:s,ValidationError:r,schema:t.schema,schemaEnv:t,rootId:A,baseId:t.baseId||A,schemaPath:Dc.nil,errSchemaPath:t.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,Dc._)`""`,opts:this.opts,self:this},l;try{this._compilations.add(t),(0,ewA.validateFunctionCode)(g),a.optimize(this.opts.code.optimize);let C=a.toString();l=`${a.scopeRefs(cd.default.scope)}return ${C}`,this.opts.code.process&&(l=this.opts.code.process(l,t));let d=new Function(`${cd.default.self}`,`${cd.default.scope}`,l)(this,this.scope.get());if(this.scope.value(s,{ref:d}),d.errors=null,d.schema=t.schema,d.schemaEnv=t,t.$async&&(d.$async=!0),this.opts.code.source===!0&&(d.source={validateName:s,validateCode:C,scopeValues:a._values}),this.opts.unevaluated){let{props:B,items:E}=g;d.evaluated={props:B instanceof Dc.Name?void 0:B,items:E instanceof Dc.Name?void 0:E,dynamicProps:B instanceof Dc.Name,dynamicItems:E instanceof Dc.Name},d.source&&(d.source.evaluated=(0,Dc.stringify)(d.evaluated))}return t.validate=d,t}catch(C){throw delete t.validate,delete t.validateName,l&&this.logger.error("Error compiling schema, function code:",l),C}finally{this._compilations.delete(t)}}bl.compileSchema=Sx;function twA(t,e,A){var i;A=(0,yc.resolveUrl)(this.opts.uriResolver,e,A);let n=t.refs[A];if(n)return n;let o=owA.call(this,t,A);if(o===void 0){let a=(i=t.localRefs)===null||i===void 0?void 0:i[A],{schemaId:r}=this.opts;a&&(o=new nQ({schema:a,schemaId:r,root:t,baseId:e}))}if(o!==void 0)return t.refs[A]=iwA.call(this,o)}bl.resolveRef=twA;function iwA(t){return(0,yc.inlineRef)(t.schema,this.opts.inlineRefs)?t.schema:t.validate?t:Sx.call(this,t)}function hW(t){for(let e of this._compilations)if(nwA(e,t))return e}bl.getCompilingSchema=hW;function nwA(t,e){return t.schema===e.schema&&t.root===e.root&&t.baseId===e.baseId}function owA(t,e){let A;for(;typeof(A=this.refs[e])=="string";)e=A;return A||this.schemas[e]||B5.call(this,t,e)}function B5(t,e){let A=this.opts.uriResolver.parse(e),i=(0,yc._getFullPath)(this.opts.uriResolver,A),n=(0,yc.getFullPath)(this.opts.uriResolver,t.baseId,void 0);if(Object.keys(t.schema).length>0&&i===n)return kx.call(this,A,t);let o=(0,yc.normalizeId)(i),a=this.refs[o]||this.schemas[o];if(typeof a=="string"){let r=B5.call(this,t,a);return typeof r?.schema!="object"?void 0:kx.call(this,A,r)}if(typeof a?.schema=="object"){if(a.validate||Sx.call(this,a),o===(0,yc.normalizeId)(e)){let{schema:r}=a,{schemaId:s}=this.opts,g=r[s];return g&&(n=(0,yc.resolveUrl)(this.opts.uriResolver,n,g)),new nQ({schema:r,schemaId:s,root:t,baseId:n})}return kx.call(this,A,a)}}bl.resolveSchema=B5;var awA=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function kx(t,{baseId:e,schema:A,root:i}){var n;if(((n=t.fragment)===null||n===void 0?void 0:n[0])!=="/")return;for(let r of t.fragment.slice(1).split("/")){if(typeof A=="boolean")return;let s=A[(0,QW.unescapeFragment)(r)];if(s===void 0)return;A=s;let g=typeof A=="object"&&A[this.opts.schemaId];!awA.has(r)&&g&&(e=(0,yc.resolveUrl)(this.opts.uriResolver,e,g))}let o;if(typeof A!="boolean"&&A.$ref&&!(0,QW.schemaHasRulesButRef)(A,this.RULES)){let r=(0,yc.resolveUrl)(this.opts.uriResolver,e,A.$ref);o=B5.call(this,i,r)}let{schemaId:a}=this.opts;if(o=o||new nQ({schema:A,schemaId:a,root:i,baseId:e}),o.schema!==o.root.schema)return o}});var uW=qe((y6e,rwA)=>{rwA.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var Rx=qe((v6e,wW)=>{"use strict";var swA=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),mW=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function xx(t){let e="",A=0,i=0;for(i=0;i=48&&A<=57||A>=65&&A<=70||A>=97&&A<=102))return"";e+=t[i];break}for(i+=1;i=48&&A<=57||A>=65&&A<=70||A>=97&&A<=102))return"";e+=t[i]}return e}var gwA=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function fW(t){return t.length=0,!0}function lwA(t,e,A){if(t.length){let i=xx(t);if(i!=="")e.push(i);else return A.error=!0,!1;t.length=0}return!0}function cwA(t){let e=0,A={error:!1,address:"",zone:""},i=[],n=[],o=!1,a=!1,r=lwA;for(let s=0;s7){A.error=!0;break}s>0&&t[s-1]===":"&&(o=!0),i.push(":");continue}else if(g==="%"){if(!r(n,i,A))break;r=fW}else{n.push(g);continue}}return n.length&&(r===fW?A.zone=n.join(""):a?i.push(n.join("")):i.push(xx(n))),A.address=i.join(""),A}function pW(t){if(CwA(t,":")<2)return{host:t,isIPV6:!1};let e=cwA(t);if(e.error)return{host:t,isIPV6:!1};{let A=e.address,i=e.address;return e.zone&&(A+="%"+e.zone,i+="%25"+e.zone),{host:A,isIPV6:!0,escapedHost:i}}}function CwA(t,e){let A=0;for(let i=0;i{"use strict";var{isUUID:EwA}=Rx(),QwA=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,hwA=["http","https","ws","wss","urn","urn:uuid"];function uwA(t){return hwA.indexOf(t)!==-1}function Nx(t){return t.secure===!0?!0:t.secure===!1?!1:t.scheme?t.scheme.length===3&&(t.scheme[0]==="w"||t.scheme[0]==="W")&&(t.scheme[1]==="s"||t.scheme[1]==="S")&&(t.scheme[2]==="s"||t.scheme[2]==="S"):!1}function DW(t){return t.host||(t.error=t.error||"HTTP URIs must have a host."),t}function yW(t){let e=String(t.scheme).toLowerCase()==="https";return(t.port===(e?443:80)||t.port==="")&&(t.port=void 0),t.path||(t.path="/"),t}function fwA(t){return t.secure=Nx(t),t.resourceName=(t.path||"/")+(t.query?"?"+t.query:""),t.path=void 0,t.query=void 0,t}function mwA(t){if((t.port===(Nx(t)?443:80)||t.port==="")&&(t.port=void 0),typeof t.secure=="boolean"&&(t.scheme=t.secure?"wss":"ws",t.secure=void 0),t.resourceName){let[e,A]=t.resourceName.split("?");t.path=e&&e!=="/"?e:void 0,t.query=A,t.resourceName=void 0}return t.fragment=void 0,t}function pwA(t,e){if(!t.path)return t.error="URN can not be parsed",t;let A=t.path.match(QwA);if(A){let i=e.scheme||t.scheme||"urn";t.nid=A[1].toLowerCase(),t.nss=A[2];let n=`${i}:${e.nid||t.nid}`,o=Fx(n);t.path=void 0,o&&(t=o.parse(t,e))}else t.error=t.error||"URN can not be parsed.";return t}function wwA(t,e){if(t.nid===void 0)throw new Error("URN without nid cannot be serialized");let A=e.scheme||t.scheme||"urn",i=t.nid.toLowerCase(),n=`${A}:${e.nid||i}`,o=Fx(n);o&&(t=o.serialize(t,e));let a=t,r=t.nss;return a.path=`${i||e.nid}:${r}`,e.skipEscape=!0,a}function DwA(t,e){let A=t;return A.uuid=A.nss,A.nss=void 0,!e.tolerant&&(!A.uuid||!EwA(A.uuid))&&(A.error=A.error||"UUID is not valid."),A}function ywA(t){let e=t;return e.nss=(t.uuid||"").toLowerCase(),e}var vW={scheme:"http",domainHost:!0,parse:DW,serialize:yW},vwA={scheme:"https",domainHost:vW.domainHost,parse:DW,serialize:yW},Q5={scheme:"ws",domainHost:!0,parse:fwA,serialize:mwA},bwA={scheme:"wss",domainHost:Q5.domainHost,parse:Q5.parse,serialize:Q5.serialize},MwA={scheme:"urn",parse:pwA,serialize:wwA,skipNormalize:!0},kwA={scheme:"urn:uuid",parse:DwA,serialize:ywA,skipNormalize:!0},h5={http:vW,https:vwA,ws:Q5,wss:bwA,urn:MwA,"urn:uuid":kwA};Object.setPrototypeOf(h5,null);function Fx(t){return t&&(h5[t]||h5[t.toLowerCase()])||void 0}bW.exports={wsIsSecure:Nx,SCHEMES:h5,isValidSchemeName:uwA,getSchemeHandler:Fx}});var xW=qe((M6e,f5)=>{"use strict";var{normalizeIPv6:SwA,removeDotSegments:y3,recomposeAuthority:xwA,normalizeComponentEncoding:u5,isIPv4:RwA,nonSimpleDomain:NwA}=Rx(),{SCHEMES:FwA,getSchemeHandler:kW}=MW();function _wA(t,e){return typeof t=="string"?t=x0(LC(t,e),e):typeof t=="object"&&(t=LC(x0(t,e),e)),t}function LwA(t,e,A){let i=A?Object.assign({scheme:"null"},A):{scheme:"null"},n=SW(LC(t,i),LC(e,i),i,!0);return i.skipEscape=!0,x0(n,i)}function SW(t,e,A,i){let n={};return i||(t=LC(x0(t,A),A),e=LC(x0(e,A),A)),A=A||{},!A.tolerant&&e.scheme?(n.scheme=e.scheme,n.userinfo=e.userinfo,n.host=e.host,n.port=e.port,n.path=y3(e.path||""),n.query=e.query):(e.userinfo!==void 0||e.host!==void 0||e.port!==void 0?(n.userinfo=e.userinfo,n.host=e.host,n.port=e.port,n.path=y3(e.path||""),n.query=e.query):(e.path?(e.path[0]==="/"?n.path=y3(e.path):((t.userinfo!==void 0||t.host!==void 0||t.port!==void 0)&&!t.path?n.path="/"+e.path:t.path?n.path=t.path.slice(0,t.path.lastIndexOf("/")+1)+e.path:n.path=e.path,n.path=y3(n.path)),n.query=e.query):(n.path=t.path,e.query!==void 0?n.query=e.query:n.query=t.query),n.userinfo=t.userinfo,n.host=t.host,n.port=t.port),n.scheme=t.scheme),n.fragment=e.fragment,n}function GwA(t,e,A){return typeof t=="string"?(t=unescape(t),t=x0(u5(LC(t,A),!0),Ge(cA({},A),{skipEscape:!0}))):typeof t=="object"&&(t=x0(u5(t,!0),Ge(cA({},A),{skipEscape:!0}))),typeof e=="string"?(e=unescape(e),e=x0(u5(LC(e,A),!0),Ge(cA({},A),{skipEscape:!0}))):typeof e=="object"&&(e=x0(u5(e,!0),Ge(cA({},A),{skipEscape:!0}))),t.toLowerCase()===e.toLowerCase()}function x0(t,e){let A={host:t.host,scheme:t.scheme,userinfo:t.userinfo,port:t.port,path:t.path,query:t.query,nid:t.nid,nss:t.nss,uuid:t.uuid,fragment:t.fragment,reference:t.reference,resourceName:t.resourceName,secure:t.secure,error:""},i=Object.assign({},e),n=[],o=kW(i.scheme||A.scheme);o&&o.serialize&&o.serialize(A,i),A.path!==void 0&&(i.skipEscape?A.path=unescape(A.path):(A.path=escape(A.path),A.scheme!==void 0&&(A.path=A.path.split("%3A").join(":")))),i.reference!=="suffix"&&A.scheme&&n.push(A.scheme,":");let a=xwA(A);if(a!==void 0&&(i.reference!=="suffix"&&n.push("//"),n.push(a),A.path&&A.path[0]!=="/"&&n.push("/")),A.path!==void 0){let r=A.path;!i.absolutePath&&(!o||!o.absolutePath)&&(r=y3(r)),a===void 0&&r[0]==="/"&&r[1]==="/"&&(r="/%2F"+r.slice(2)),n.push(r)}return A.query!==void 0&&n.push("?",A.query),A.fragment!==void 0&&n.push("#",A.fragment),n.join("")}var KwA=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function LC(t,e){let A=Object.assign({},e),i={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},n=!1;A.reference==="suffix"&&(A.scheme?t=A.scheme+":"+t:t="//"+t);let o=t.match(KwA);if(o){if(i.scheme=o[1],i.userinfo=o[3],i.host=o[4],i.port=parseInt(o[5],10),i.path=o[6]||"",i.query=o[7],i.fragment=o[8],isNaN(i.port)&&(i.port=o[5]),i.host)if(RwA(i.host)===!1){let s=SwA(i.host);i.host=s.host.toLowerCase(),n=s.isIPV6}else n=!0;i.scheme===void 0&&i.userinfo===void 0&&i.host===void 0&&i.port===void 0&&i.query===void 0&&!i.path?i.reference="same-document":i.scheme===void 0?i.reference="relative":i.fragment===void 0?i.reference="absolute":i.reference="uri",A.reference&&A.reference!=="suffix"&&A.reference!==i.reference&&(i.error=i.error||"URI is not a "+A.reference+" reference.");let a=kW(A.scheme||i.scheme);if(!A.unicodeSupport&&(!a||!a.unicodeSupport)&&i.host&&(A.domainHost||a&&a.domainHost)&&n===!1&&NwA(i.host))try{i.host=URL.domainToASCII(i.host.toLowerCase())}catch(r){i.error=i.error||"Host's domain name can not be converted to ASCII: "+r}(!a||a&&!a.skipNormalize)&&(t.indexOf("%")!==-1&&(i.scheme!==void 0&&(i.scheme=unescape(i.scheme)),i.host!==void 0&&(i.host=unescape(i.host))),i.path&&(i.path=escape(unescape(i.path))),i.fragment&&(i.fragment=encodeURI(decodeURIComponent(i.fragment)))),a&&a.parse&&a.parse(i,A)}else i.error=i.error||"URI can not be parsed.";return i}var _x={SCHEMES:FwA,normalize:_wA,resolve:LwA,resolveComponent:SW,equal:GwA,serialize:x0,parse:LC};f5.exports=_x;f5.exports.default=_x;f5.exports.fastUri=_x});var NW=qe(Lx=>{"use strict";Object.defineProperty(Lx,"__esModule",{value:!0});var RW=xW();RW.code='require("ajv/dist/runtime/uri").default';Lx.default=RW});var YW=qe(Pr=>{"use strict";Object.defineProperty(Pr,"__esModule",{value:!0});Pr.CodeGen=Pr.Name=Pr.nil=Pr.stringify=Pr.str=Pr._=Pr.KeywordCxt=void 0;var UwA=w3();Object.defineProperty(Pr,"KeywordCxt",{enumerable:!0,get:function(){return UwA.KeywordCxt}});var oQ=rn();Object.defineProperty(Pr,"_",{enumerable:!0,get:function(){return oQ._}});Object.defineProperty(Pr,"str",{enumerable:!0,get:function(){return oQ.str}});Object.defineProperty(Pr,"stringify",{enumerable:!0,get:function(){return oQ.stringify}});Object.defineProperty(Pr,"nil",{enumerable:!0,get:function(){return oQ.nil}});Object.defineProperty(Pr,"Name",{enumerable:!0,get:function(){return oQ.Name}});Object.defineProperty(Pr,"CodeGen",{enumerable:!0,get:function(){return oQ.CodeGen}});var JwA=d5(),KW=D3(),YwA=cx(),v3=E5(),TwA=rn(),b3=f3(),m5=u3(),Kx=On(),FW=uW(),HwA=NW(),UW=(t,e)=>new RegExp(t,e);UW.code="new RegExp";var zwA=["removeAdditional","useDefaults","coerceTypes"],OwA=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),PwA={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},jwA={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},_W=200;function qwA(t){var e,A,i,n,o,a,r,s,g,l,C,I,d,B,E,Q,f,b,S,M,D,F,_,U,J;let j=t.strict,AA=(e=t.code)===null||e===void 0?void 0:e.optimize,O=AA===!0||AA===void 0?1:AA||0,DA=(i=(A=t.code)===null||A===void 0?void 0:A.regExp)!==null&&i!==void 0?i:UW,P=(n=t.uriResolver)!==null&&n!==void 0?n:HwA.default;return{strictSchema:(a=(o=t.strictSchema)!==null&&o!==void 0?o:j)!==null&&a!==void 0?a:!0,strictNumbers:(s=(r=t.strictNumbers)!==null&&r!==void 0?r:j)!==null&&s!==void 0?s:!0,strictTypes:(l=(g=t.strictTypes)!==null&&g!==void 0?g:j)!==null&&l!==void 0?l:"log",strictTuples:(I=(C=t.strictTuples)!==null&&C!==void 0?C:j)!==null&&I!==void 0?I:"log",strictRequired:(B=(d=t.strictRequired)!==null&&d!==void 0?d:j)!==null&&B!==void 0?B:!1,code:t.code?Ge(cA({},t.code),{optimize:O,regExp:DA}):{optimize:O,regExp:DA},loopRequired:(E=t.loopRequired)!==null&&E!==void 0?E:_W,loopEnum:(Q=t.loopEnum)!==null&&Q!==void 0?Q:_W,meta:(f=t.meta)!==null&&f!==void 0?f:!0,messages:(b=t.messages)!==null&&b!==void 0?b:!0,inlineRefs:(S=t.inlineRefs)!==null&&S!==void 0?S:!0,schemaId:(M=t.schemaId)!==null&&M!==void 0?M:"$id",addUsedSchema:(D=t.addUsedSchema)!==null&&D!==void 0?D:!0,validateSchema:(F=t.validateSchema)!==null&&F!==void 0?F:!0,validateFormats:(_=t.validateFormats)!==null&&_!==void 0?_:!0,unicodeRegExp:(U=t.unicodeRegExp)!==null&&U!==void 0?U:!0,int32range:(J=t.int32range)!==null&&J!==void 0?J:!0,uriResolver:P}}var M3=class{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts=cA(cA({},e),qwA(e));let{es5:A,lines:i}=this.opts.code;this.scope=new TwA.ValueScope({scope:{},prefixes:OwA,es5:A,lines:i}),this.logger=A5A(e.logger);let n=e.validateFormats;e.validateFormats=!1,this.RULES=(0,YwA.getRules)(),LW.call(this,PwA,e,"NOT SUPPORTED"),LW.call(this,jwA,e,"DEPRECATED","warn"),this._metaOpts=XwA.call(this),e.formats&&WwA.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&ZwA.call(this,e.keywords),typeof e.meta=="object"&&this.addMetaSchema(e.meta),VwA.call(this),e.validateFormats=n}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:A,schemaId:i}=this.opts,n=FW;i==="id"&&(n=cA({},FW),n.id=n.$id,delete n.$id),A&&e&&this.addMetaSchema(n,n[i],!1)}defaultMeta(){let{meta:e,schemaId:A}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[A]||e:void 0}validate(e,A){let i;if(typeof e=="string"){if(i=this.getSchema(e),!i)throw new Error(`no schema with key or ref "${e}"`)}else i=this.compile(e);let n=i(A);return"$async"in i||(this.errors=i.errors),n}compile(e,A){let i=this._addSchema(e,A);return i.validate||this._compileSchemaEnv(i)}compileAsync(e,A){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");let{loadSchema:i}=this.opts;return n.call(this,e,A);function n(l,C){return nt(this,null,function*(){yield o.call(this,l.$schema);let I=this._addSchema(l,C);return I.validate||a.call(this,I)})}function o(l){return nt(this,null,function*(){l&&!this.getSchema(l)&&(yield n.call(this,{$ref:l},!0))})}function a(l){return nt(this,null,function*(){try{return this._compileSchemaEnv(l)}catch(C){if(!(C instanceof KW.default))throw C;return r.call(this,C),yield s.call(this,C.missingSchema),a.call(this,l)}})}function r({missingSchema:l,missingRef:C}){if(this.refs[l])throw new Error(`AnySchema ${l} is loaded but ${C} cannot be resolved`)}function s(l){return nt(this,null,function*(){let C=yield g.call(this,l);this.refs[l]||(yield o.call(this,C.$schema)),this.refs[l]||this.addSchema(C,l,A)})}function g(l){return nt(this,null,function*(){let C=this._loading[l];if(C)return C;try{return yield this._loading[l]=i(l)}finally{delete this._loading[l]}})}}addSchema(e,A,i,n=this.opts.validateSchema){if(Array.isArray(e)){for(let a of e)this.addSchema(a,void 0,i,n);return this}let o;if(typeof e=="object"){let{schemaId:a}=this.opts;if(o=e[a],o!==void 0&&typeof o!="string")throw new Error(`schema ${a} must be string`)}return A=(0,b3.normalizeId)(A||o),this._checkUnique(A),this.schemas[A]=this._addSchema(e,i,A,n,!0),this}addMetaSchema(e,A,i=this.opts.validateSchema){return this.addSchema(e,A,!0,i),this}validateSchema(e,A){if(typeof e=="boolean")return!0;let i;if(i=e.$schema,i!==void 0&&typeof i!="string")throw new Error("$schema must be a string");if(i=i||this.opts.defaultMeta||this.defaultMeta(),!i)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let n=this.validate(i,e);if(!n&&A){let o="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(o);else throw new Error(o)}return n}getSchema(e){let A;for(;typeof(A=GW.call(this,e))=="string";)e=A;if(A===void 0){let{schemaId:i}=this.opts,n=new v3.SchemaEnv({schema:{},schemaId:i});if(A=v3.resolveSchema.call(this,n,e),!A)return;this.refs[e]=A}return A.validate||this._compileSchemaEnv(A)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let A=GW.call(this,e);return typeof A=="object"&&this._cache.delete(A.schema),delete this.schemas[e],delete this.refs[e],this}case"object":{let A=e;this._cache.delete(A);let i=e[this.opts.schemaId];return i&&(i=(0,b3.normalizeId)(i),delete this.schemas[i],delete this.refs[i]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let A of e)this.addKeyword(A);return this}addKeyword(e,A){let i;if(typeof e=="string")i=e,typeof A=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),A.keyword=i);else if(typeof e=="object"&&A===void 0){if(A=e,i=A.keyword,Array.isArray(i)&&!i.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(t5A.call(this,i,A),!A)return(0,Kx.eachItem)(i,o=>Gx.call(this,o)),this;n5A.call(this,A);let n=Ge(cA({},A),{type:(0,m5.getJSONTypes)(A.type),schemaType:(0,m5.getJSONTypes)(A.schemaType)});return(0,Kx.eachItem)(i,n.type.length===0?o=>Gx.call(this,o,n):o=>n.type.forEach(a=>Gx.call(this,o,n,a))),this}getKeyword(e){let A=this.RULES.all[e];return typeof A=="object"?A.definition:!!A}removeKeyword(e){let{RULES:A}=this;delete A.keywords[e],delete A.all[e];for(let i of A.rules){let n=i.rules.findIndex(o=>o.keyword===e);n>=0&&i.rules.splice(n,1)}return this}addFormat(e,A){return typeof A=="string"&&(A=new RegExp(A)),this.formats[e]=A,this}errorsText(e=this.errors,{separator:A=", ",dataVar:i="data"}={}){return!e||e.length===0?"No errors":e.map(n=>`${i}${n.instancePath} ${n.message}`).reduce((n,o)=>n+A+o)}$dataMetaSchema(e,A){let i=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let n of A){let o=n.split("/").slice(1),a=e;for(let r of o)a=a[r];for(let r in i){let s=i[r];if(typeof s!="object")continue;let{$data:g}=s.definition,l=a[r];g&&l&&(a[r]=JW(l))}}return e}_removeAllSchemas(e,A){for(let i in e){let n=e[i];(!A||A.test(i))&&(typeof n=="string"?delete e[i]:n&&!n.meta&&(this._cache.delete(n.schema),delete e[i]))}}_addSchema(e,A,i,n=this.opts.validateSchema,o=this.opts.addUsedSchema){let a,{schemaId:r}=this.opts;if(typeof e=="object")a=e[r];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof e!="boolean")throw new Error("schema must be object or boolean")}let s=this._cache.get(e);if(s!==void 0)return s;i=(0,b3.normalizeId)(a||i);let g=b3.getSchemaRefs.call(this,e,i);return s=new v3.SchemaEnv({schema:e,schemaId:r,meta:A,baseId:i,localRefs:g}),this._cache.set(s.schema,s),o&&!i.startsWith("#")&&(i&&this._checkUnique(i),this.refs[i]=s),n&&this.validateSchema(e,!0),s}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw new Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):v3.compileSchema.call(this,e),!e.validate)throw new Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let A=this.opts;this.opts=this._metaOpts;try{v3.compileSchema.call(this,e)}finally{this.opts=A}}};M3.ValidationError=JwA.default;M3.MissingRefError=KW.default;Pr.default=M3;function LW(t,e,A,i="error"){for(let n in t){let o=n;o in e&&this.logger[i](`${A}: option ${n}. ${t[o]}`)}}function GW(t){return t=(0,b3.normalizeId)(t),this.schemas[t]||this.refs[t]}function VwA(){let t=this.opts.schemas;if(t)if(Array.isArray(t))this.addSchema(t);else for(let e in t)this.addSchema(t[e],e)}function WwA(){for(let t in this.opts.formats){let e=this.opts.formats[t];e&&this.addFormat(t,e)}}function ZwA(t){if(Array.isArray(t)){this.addVocabulary(t);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let e in t){let A=t[e];A.keyword||(A.keyword=e),this.addKeyword(A)}}function XwA(){let t=cA({},this.opts);for(let e of zwA)delete t[e];return t}var $wA={log(){},warn(){},error(){}};function A5A(t){if(t===!1)return $wA;if(t===void 0)return console;if(t.log&&t.warn&&t.error)return t;throw new Error("logger must implement log, warn and error methods")}var e5A=/^[a-z_$][a-z0-9_$:-]*$/i;function t5A(t,e){let{RULES:A}=this;if((0,Kx.eachItem)(t,i=>{if(A.keywords[i])throw new Error(`Keyword ${i} is already defined`);if(!e5A.test(i))throw new Error(`Keyword ${i} has invalid name`)}),!!e&&e.$data&&!("code"in e||"validate"in e))throw new Error('$data keyword must have "code" or "validate" function')}function Gx(t,e,A){var i;let n=e?.post;if(A&&n)throw new Error('keyword with "post" flag cannot have "type"');let{RULES:o}=this,a=n?o.post:o.rules.find(({type:s})=>s===A);if(a||(a={type:A,rules:[]},o.rules.push(a)),o.keywords[t]=!0,!e)return;let r={keyword:t,definition:Ge(cA({},e),{type:(0,m5.getJSONTypes)(e.type),schemaType:(0,m5.getJSONTypes)(e.schemaType)})};e.before?i5A.call(this,a,r,e.before):a.rules.push(r),o.all[t]=r,(i=e.implements)===null||i===void 0||i.forEach(s=>this.addKeyword(s))}function i5A(t,e,A){let i=t.rules.findIndex(n=>n.keyword===A);i>=0?t.rules.splice(i,0,e):(t.rules.push(e),this.logger.warn(`rule ${A} is not defined`))}function n5A(t){let{metaSchema:e}=t;e!==void 0&&(t.$data&&this.opts.$data&&(e=JW(e)),t.validateSchema=this.compile(e,!0))}var o5A={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function JW(t){return{anyOf:[t,o5A]}}});var TW=qe(Ux=>{"use strict";Object.defineProperty(Ux,"__esModule",{value:!0});var a5A={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};Ux.default=a5A});var PW=qe(Cd=>{"use strict";Object.defineProperty(Cd,"__esModule",{value:!0});Cd.callRef=Cd.getValidate=void 0;var r5A=D3(),HW=vl(),Eg=rn(),aQ=FC(),zW=E5(),p5=On(),s5A={keyword:"$ref",schemaType:"string",code(t){let{gen:e,schema:A,it:i}=t,{baseId:n,schemaEnv:o,validateName:a,opts:r,self:s}=i,{root:g}=o;if((A==="#"||A==="#/")&&n===g.baseId)return C();let l=zW.resolveRef.call(s,g,n,A);if(l===void 0)throw new r5A.default(i.opts.uriResolver,n,A);if(l instanceof zW.SchemaEnv)return I(l);return d(l);function C(){if(o===g)return w5(t,a,o,o.$async);let B=e.scopeValue("root",{ref:g});return w5(t,(0,Eg._)`${B}.validate`,g,g.$async)}function I(B){let E=OW(t,B);w5(t,E,B,B.$async)}function d(B){let E=e.scopeValue("schema",r.code.source===!0?{ref:B,code:(0,Eg.stringify)(B)}:{ref:B}),Q=e.name("valid"),f=t.subschema({schema:B,dataTypes:[],schemaPath:Eg.nil,topSchemaRef:E,errSchemaPath:A},Q);t.mergeEvaluated(f),t.ok(Q)}}};function OW(t,e){let{gen:A}=t;return e.validate?A.scopeValue("validate",{ref:e.validate}):(0,Eg._)`${A.scopeValue("wrapper",{ref:e})}.validate`}Cd.getValidate=OW;function w5(t,e,A,i){let{gen:n,it:o}=t,{allErrors:a,schemaEnv:r,opts:s}=o,g=s.passContext?aQ.default.this:Eg.nil;i?l():C();function l(){if(!r.$async)throw new Error("async schema referenced by sync schema");let B=n.let("valid");n.try(()=>{n.code((0,Eg._)`await ${(0,HW.callValidateCode)(t,e,g)}`),d(e),a||n.assign(B,!0)},E=>{n.if((0,Eg._)`!(${E} instanceof ${o.ValidationError})`,()=>n.throw(E)),I(E),a||n.assign(B,!1)}),t.ok(B)}function C(){t.result((0,HW.callValidateCode)(t,e,g),()=>d(e),()=>I(e))}function I(B){let E=(0,Eg._)`${B}.errors`;n.assign(aQ.default.vErrors,(0,Eg._)`${aQ.default.vErrors} === null ? ${E} : ${aQ.default.vErrors}.concat(${E})`),n.assign(aQ.default.errors,(0,Eg._)`${aQ.default.vErrors}.length`)}function d(B){var E;if(!o.opts.unevaluated)return;let Q=(E=A?.validate)===null||E===void 0?void 0:E.evaluated;if(o.props!==!0)if(Q&&!Q.dynamicProps)Q.props!==void 0&&(o.props=p5.mergeEvaluated.props(n,Q.props,o.props));else{let f=n.var("props",(0,Eg._)`${B}.evaluated.props`);o.props=p5.mergeEvaluated.props(n,f,o.props,Eg.Name)}if(o.items!==!0)if(Q&&!Q.dynamicItems)Q.items!==void 0&&(o.items=p5.mergeEvaluated.items(n,Q.items,o.items));else{let f=n.var("items",(0,Eg._)`${B}.evaluated.items`);o.items=p5.mergeEvaluated.items(n,f,o.items,Eg.Name)}}}Cd.callRef=w5;Cd.default=s5A});var jW=qe(Jx=>{"use strict";Object.defineProperty(Jx,"__esModule",{value:!0});var g5A=TW(),l5A=PW(),c5A=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",g5A.default,l5A.default];Jx.default=c5A});var qW=qe(Yx=>{"use strict";Object.defineProperty(Yx,"__esModule",{value:!0});var D5=rn(),pI=D5.operators,y5={maximum:{okStr:"<=",ok:pI.LTE,fail:pI.GT},minimum:{okStr:">=",ok:pI.GTE,fail:pI.LT},exclusiveMaximum:{okStr:"<",ok:pI.LT,fail:pI.GTE},exclusiveMinimum:{okStr:">",ok:pI.GT,fail:pI.LTE}},C5A={message:({keyword:t,schemaCode:e})=>(0,D5.str)`must be ${y5[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>(0,D5._)`{comparison: ${y5[t].okStr}, limit: ${e}}`},I5A={keyword:Object.keys(y5),type:"number",schemaType:"number",$data:!0,error:C5A,code(t){let{keyword:e,data:A,schemaCode:i}=t;t.fail$data((0,D5._)`${A} ${y5[e].fail} ${i} || isNaN(${A})`)}};Yx.default=I5A});var VW=qe(Tx=>{"use strict";Object.defineProperty(Tx,"__esModule",{value:!0});var k3=rn(),d5A={message:({schemaCode:t})=>(0,k3.str)`must be multiple of ${t}`,params:({schemaCode:t})=>(0,k3._)`{multipleOf: ${t}}`},B5A={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:d5A,code(t){let{gen:e,data:A,schemaCode:i,it:n}=t,o=n.opts.multipleOfPrecision,a=e.let("res"),r=o?(0,k3._)`Math.abs(Math.round(${a}) - ${a}) > 1e-${o}`:(0,k3._)`${a} !== parseInt(${a})`;t.fail$data((0,k3._)`(${i} === 0 || (${a} = ${A}/${i}, ${r}))`)}};Tx.default=B5A});var ZW=qe(Hx=>{"use strict";Object.defineProperty(Hx,"__esModule",{value:!0});function WW(t){let e=t.length,A=0,i=0,n;for(;i=55296&&n<=56319&&i{"use strict";Object.defineProperty(zx,"__esModule",{value:!0});var Id=rn(),E5A=On(),Q5A=ZW(),h5A={message({keyword:t,schemaCode:e}){let A=t==="maxLength"?"more":"fewer";return(0,Id.str)`must NOT have ${A} than ${e} characters`},params:({schemaCode:t})=>(0,Id._)`{limit: ${t}}`},u5A={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:h5A,code(t){let{keyword:e,data:A,schemaCode:i,it:n}=t,o=e==="maxLength"?Id.operators.GT:Id.operators.LT,a=n.opts.unicode===!1?(0,Id._)`${A}.length`:(0,Id._)`${(0,E5A.useFunc)(t.gen,Q5A.default)}(${A})`;t.fail$data((0,Id._)`${a} ${o} ${i}`)}};zx.default=u5A});var $W=qe(Ox=>{"use strict";Object.defineProperty(Ox,"__esModule",{value:!0});var f5A=vl(),v5=rn(),m5A={message:({schemaCode:t})=>(0,v5.str)`must match pattern "${t}"`,params:({schemaCode:t})=>(0,v5._)`{pattern: ${t}}`},p5A={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:m5A,code(t){let{data:e,$data:A,schema:i,schemaCode:n,it:o}=t,a=o.opts.unicodeRegExp?"u":"",r=A?(0,v5._)`(new RegExp(${n}, ${a}))`:(0,f5A.usePattern)(t,i);t.fail$data((0,v5._)`!${r}.test(${e})`)}};Ox.default=p5A});var AZ=qe(Px=>{"use strict";Object.defineProperty(Px,"__esModule",{value:!0});var S3=rn(),w5A={message({keyword:t,schemaCode:e}){let A=t==="maxProperties"?"more":"fewer";return(0,S3.str)`must NOT have ${A} than ${e} properties`},params:({schemaCode:t})=>(0,S3._)`{limit: ${t}}`},D5A={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:w5A,code(t){let{keyword:e,data:A,schemaCode:i}=t,n=e==="maxProperties"?S3.operators.GT:S3.operators.LT;t.fail$data((0,S3._)`Object.keys(${A}).length ${n} ${i}`)}};Px.default=D5A});var eZ=qe(jx=>{"use strict";Object.defineProperty(jx,"__esModule",{value:!0});var x3=vl(),R3=rn(),y5A=On(),v5A={message:({params:{missingProperty:t}})=>(0,R3.str)`must have required property '${t}'`,params:({params:{missingProperty:t}})=>(0,R3._)`{missingProperty: ${t}}`},b5A={keyword:"required",type:"object",schemaType:"array",$data:!0,error:v5A,code(t){let{gen:e,schema:A,schemaCode:i,data:n,$data:o,it:a}=t,{opts:r}=a;if(!o&&A.length===0)return;let s=A.length>=r.loopRequired;if(a.allErrors?g():l(),r.strictRequired){let d=t.parentSchema.properties,{definedProperties:B}=t.it;for(let E of A)if(d?.[E]===void 0&&!B.has(E)){let Q=a.schemaEnv.baseId+a.errSchemaPath,f=`required property "${E}" is not defined at "${Q}" (strictRequired)`;(0,y5A.checkStrictMode)(a,f,a.opts.strictRequired)}}function g(){if(s||o)t.block$data(R3.nil,C);else for(let d of A)(0,x3.checkReportMissingProp)(t,d)}function l(){let d=e.let("missing");if(s||o){let B=e.let("valid",!0);t.block$data(B,()=>I(d,B)),t.ok(B)}else e.if((0,x3.checkMissingProp)(t,A,d)),(0,x3.reportMissingProp)(t,d),e.else()}function C(){e.forOf("prop",i,d=>{t.setParams({missingProperty:d}),e.if((0,x3.noPropertyInData)(e,n,d,r.ownProperties),()=>t.error())})}function I(d,B){t.setParams({missingProperty:d}),e.forOf(d,i,()=>{e.assign(B,(0,x3.propertyInData)(e,n,d,r.ownProperties)),e.if((0,R3.not)(B),()=>{t.error(),e.break()})},R3.nil)}}};jx.default=b5A});var tZ=qe(qx=>{"use strict";Object.defineProperty(qx,"__esModule",{value:!0});var N3=rn(),M5A={message({keyword:t,schemaCode:e}){let A=t==="maxItems"?"more":"fewer";return(0,N3.str)`must NOT have ${A} than ${e} items`},params:({schemaCode:t})=>(0,N3._)`{limit: ${t}}`},k5A={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:M5A,code(t){let{keyword:e,data:A,schemaCode:i}=t,n=e==="maxItems"?N3.operators.GT:N3.operators.LT;t.fail$data((0,N3._)`${A}.length ${n} ${i}`)}};qx.default=k5A});var b5=qe(Vx=>{"use strict";Object.defineProperty(Vx,"__esModule",{value:!0});var iZ=ux();iZ.code='require("ajv/dist/runtime/equal").default';Vx.default=iZ});var nZ=qe(Zx=>{"use strict";Object.defineProperty(Zx,"__esModule",{value:!0});var Wx=u3(),jr=rn(),S5A=On(),x5A=b5(),R5A={message:({params:{i:t,j:e}})=>(0,jr.str)`must NOT have duplicate items (items ## ${e} and ${t} are identical)`,params:({params:{i:t,j:e}})=>(0,jr._)`{i: ${t}, j: ${e}}`},N5A={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:R5A,code(t){let{gen:e,data:A,$data:i,schema:n,parentSchema:o,schemaCode:a,it:r}=t;if(!i&&!n)return;let s=e.let("valid"),g=o.items?(0,Wx.getSchemaTypes)(o.items):[];t.block$data(s,l,(0,jr._)`${a} === false`),t.ok(s);function l(){let B=e.let("i",(0,jr._)`${A}.length`),E=e.let("j");t.setParams({i:B,j:E}),e.assign(s,!0),e.if((0,jr._)`${B} > 1`,()=>(C()?I:d)(B,E))}function C(){return g.length>0&&!g.some(B=>B==="object"||B==="array")}function I(B,E){let Q=e.name("item"),f=(0,Wx.checkDataTypes)(g,Q,r.opts.strictNumbers,Wx.DataType.Wrong),b=e.const("indices",(0,jr._)`{}`);e.for((0,jr._)`;${B}--;`,()=>{e.let(Q,(0,jr._)`${A}[${B}]`),e.if(f,(0,jr._)`continue`),g.length>1&&e.if((0,jr._)`typeof ${Q} == "string"`,(0,jr._)`${Q} += "_"`),e.if((0,jr._)`typeof ${b}[${Q}] == "number"`,()=>{e.assign(E,(0,jr._)`${b}[${Q}]`),t.error(),e.assign(s,!1).break()}).code((0,jr._)`${b}[${Q}] = ${B}`)})}function d(B,E){let Q=(0,S5A.useFunc)(e,x5A.default),f=e.name("outer");e.label(f).for((0,jr._)`;${B}--;`,()=>e.for((0,jr._)`${E} = ${B}; ${E}--;`,()=>e.if((0,jr._)`${Q}(${A}[${B}], ${A}[${E}])`,()=>{t.error(),e.assign(s,!1).break(f)})))}}};Zx.default=N5A});var oZ=qe($x=>{"use strict";Object.defineProperty($x,"__esModule",{value:!0});var Xx=rn(),F5A=On(),_5A=b5(),L5A={message:"must be equal to constant",params:({schemaCode:t})=>(0,Xx._)`{allowedValue: ${t}}`},G5A={keyword:"const",$data:!0,error:L5A,code(t){let{gen:e,data:A,$data:i,schemaCode:n,schema:o}=t;i||o&&typeof o=="object"?t.fail$data((0,Xx._)`!${(0,F5A.useFunc)(e,_5A.default)}(${A}, ${n})`):t.fail((0,Xx._)`${o} !== ${A}`)}};$x.default=G5A});var aZ=qe(AR=>{"use strict";Object.defineProperty(AR,"__esModule",{value:!0});var F3=rn(),K5A=On(),U5A=b5(),J5A={message:"must be equal to one of the allowed values",params:({schemaCode:t})=>(0,F3._)`{allowedValues: ${t}}`},Y5A={keyword:"enum",schemaType:"array",$data:!0,error:J5A,code(t){let{gen:e,data:A,$data:i,schema:n,schemaCode:o,it:a}=t;if(!i&&n.length===0)throw new Error("enum must have non-empty array");let r=n.length>=a.opts.loopEnum,s,g=()=>s??(s=(0,K5A.useFunc)(e,U5A.default)),l;if(r||i)l=e.let("valid"),t.block$data(l,C);else{if(!Array.isArray(n))throw new Error("ajv implementation error");let d=e.const("vSchema",o);l=(0,F3.or)(...n.map((B,E)=>I(d,E)))}t.pass(l);function C(){e.assign(l,!1),e.forOf("v",o,d=>e.if((0,F3._)`${g()}(${A}, ${d})`,()=>e.assign(l,!0).break()))}function I(d,B){let E=n[B];return typeof E=="object"&&E!==null?(0,F3._)`${g()}(${A}, ${d}[${B}])`:(0,F3._)`${A} === ${E}`}}};AR.default=Y5A});var rZ=qe(eR=>{"use strict";Object.defineProperty(eR,"__esModule",{value:!0});var T5A=qW(),H5A=VW(),z5A=XW(),O5A=$W(),P5A=AZ(),j5A=eZ(),q5A=tZ(),V5A=nZ(),W5A=oZ(),Z5A=aZ(),X5A=[T5A.default,H5A.default,z5A.default,O5A.default,P5A.default,j5A.default,q5A.default,V5A.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},W5A.default,Z5A.default];eR.default=X5A});var iR=qe(_3=>{"use strict";Object.defineProperty(_3,"__esModule",{value:!0});_3.validateAdditionalItems=void 0;var dd=rn(),tR=On(),$5A={message:({params:{len:t}})=>(0,dd.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,dd._)`{limit: ${t}}`},ADA={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:$5A,code(t){let{parentSchema:e,it:A}=t,{items:i}=e;if(!Array.isArray(i)){(0,tR.checkStrictMode)(A,'"additionalItems" is ignored when "items" is not an array of schemas');return}sZ(t,i)}};function sZ(t,e){let{gen:A,schema:i,data:n,keyword:o,it:a}=t;a.items=!0;let r=A.const("len",(0,dd._)`${n}.length`);if(i===!1)t.setParams({len:e.length}),t.pass((0,dd._)`${r} <= ${e.length}`);else if(typeof i=="object"&&!(0,tR.alwaysValidSchema)(a,i)){let g=A.var("valid",(0,dd._)`${r} <= ${e.length}`);A.if((0,dd.not)(g),()=>s(g)),t.ok(g)}function s(g){A.forRange("i",e.length,r,l=>{t.subschema({keyword:o,dataProp:l,dataPropType:tR.Type.Num},g),a.allErrors||A.if((0,dd.not)(g),()=>A.break())})}}_3.validateAdditionalItems=sZ;_3.default=ADA});var nR=qe(L3=>{"use strict";Object.defineProperty(L3,"__esModule",{value:!0});L3.validateTuple=void 0;var gZ=rn(),M5=On(),eDA=vl(),tDA={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(t){let{schema:e,it:A}=t;if(Array.isArray(e))return lZ(t,"additionalItems",e);A.items=!0,!(0,M5.alwaysValidSchema)(A,e)&&t.ok((0,eDA.validateArray)(t))}};function lZ(t,e,A=t.schema){let{gen:i,parentSchema:n,data:o,keyword:a,it:r}=t;l(n),r.opts.unevaluated&&A.length&&r.items!==!0&&(r.items=M5.mergeEvaluated.items(i,A.length,r.items));let s=i.name("valid"),g=i.const("len",(0,gZ._)`${o}.length`);A.forEach((C,I)=>{(0,M5.alwaysValidSchema)(r,C)||(i.if((0,gZ._)`${g} > ${I}`,()=>t.subschema({keyword:a,schemaProp:I,dataProp:I},s)),t.ok(s))});function l(C){let{opts:I,errSchemaPath:d}=r,B=A.length,E=B===C.minItems&&(B===C.maxItems||C[e]===!1);if(I.strictTuples&&!E){let Q=`"${a}" is ${B}-tuple, but minItems or maxItems/${e} are not specified or different at path "${d}"`;(0,M5.checkStrictMode)(r,Q,I.strictTuples)}}}L3.validateTuple=lZ;L3.default=tDA});var cZ=qe(oR=>{"use strict";Object.defineProperty(oR,"__esModule",{value:!0});var iDA=nR(),nDA={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:t=>(0,iDA.validateTuple)(t,"items")};oR.default=nDA});var IZ=qe(aR=>{"use strict";Object.defineProperty(aR,"__esModule",{value:!0});var CZ=rn(),oDA=On(),aDA=vl(),rDA=iR(),sDA={message:({params:{len:t}})=>(0,CZ.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,CZ._)`{limit: ${t}}`},gDA={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:sDA,code(t){let{schema:e,parentSchema:A,it:i}=t,{prefixItems:n}=A;i.items=!0,!(0,oDA.alwaysValidSchema)(i,e)&&(n?(0,rDA.validateAdditionalItems)(t,n):t.ok((0,aDA.validateArray)(t)))}};aR.default=gDA});var dZ=qe(rR=>{"use strict";Object.defineProperty(rR,"__esModule",{value:!0});var Ml=rn(),k5=On(),lDA={message:({params:{min:t,max:e}})=>e===void 0?(0,Ml.str)`must contain at least ${t} valid item(s)`:(0,Ml.str)`must contain at least ${t} and no more than ${e} valid item(s)`,params:({params:{min:t,max:e}})=>e===void 0?(0,Ml._)`{minContains: ${t}}`:(0,Ml._)`{minContains: ${t}, maxContains: ${e}}`},cDA={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:lDA,code(t){let{gen:e,schema:A,parentSchema:i,data:n,it:o}=t,a,r,{minContains:s,maxContains:g}=i;o.opts.next?(a=s===void 0?1:s,r=g):a=1;let l=e.const("len",(0,Ml._)`${n}.length`);if(t.setParams({min:a,max:r}),r===void 0&&a===0){(0,k5.checkStrictMode)(o,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(r!==void 0&&a>r){(0,k5.checkStrictMode)(o,'"minContains" > "maxContains" is always invalid'),t.fail();return}if((0,k5.alwaysValidSchema)(o,A)){let E=(0,Ml._)`${l} >= ${a}`;r!==void 0&&(E=(0,Ml._)`${E} && ${l} <= ${r}`),t.pass(E);return}o.items=!0;let C=e.name("valid");r===void 0&&a===1?d(C,()=>e.if(C,()=>e.break())):a===0?(e.let(C,!0),r!==void 0&&e.if((0,Ml._)`${n}.length > 0`,I)):(e.let(C,!1),I()),t.result(C,()=>t.reset());function I(){let E=e.name("_valid"),Q=e.let("count",0);d(E,()=>e.if(E,()=>B(Q)))}function d(E,Q){e.forRange("i",0,l,f=>{t.subschema({keyword:"contains",dataProp:f,dataPropType:k5.Type.Num,compositeRule:!0},E),Q()})}function B(E){e.code((0,Ml._)`${E}++`),r===void 0?e.if((0,Ml._)`${E} >= ${a}`,()=>e.assign(C,!0).break()):(e.if((0,Ml._)`${E} > ${r}`,()=>e.assign(C,!1).break()),a===1?e.assign(C,!0):e.if((0,Ml._)`${E} >= ${a}`,()=>e.assign(C,!0)))}}};rR.default=cDA});var QZ=qe(R0=>{"use strict";Object.defineProperty(R0,"__esModule",{value:!0});R0.validateSchemaDeps=R0.validatePropertyDeps=R0.error=void 0;var sR=rn(),CDA=On(),G3=vl();R0.error={message:({params:{property:t,depsCount:e,deps:A}})=>{let i=e===1?"property":"properties";return(0,sR.str)`must have ${i} ${A} when property ${t} is present`},params:({params:{property:t,depsCount:e,deps:A,missingProperty:i}})=>(0,sR._)`{property: ${t}, - missingProperty: ${i}, - depsCount: ${e}, - deps: ${A}}`};var IDA={keyword:"dependencies",type:"object",schemaType:"object",error:R0.error,code(t){let[e,A]=dDA(t);BZ(t,e),EZ(t,A)}};function dDA({schema:t}){let e={},A={};for(let i in t){if(i==="__proto__")continue;let n=Array.isArray(t[i])?e:A;n[i]=t[i]}return[e,A]}function BZ(t,e=t.schema){let{gen:A,data:i,it:n}=t;if(Object.keys(e).length===0)return;let o=A.let("missing");for(let a in e){let r=e[a];if(r.length===0)continue;let s=(0,G3.propertyInData)(A,i,a,n.opts.ownProperties);t.setParams({property:a,depsCount:r.length,deps:r.join(", ")}),n.allErrors?A.if(s,()=>{for(let g of r)(0,G3.checkReportMissingProp)(t,g)}):(A.if((0,sR._)`${s} && (${(0,G3.checkMissingProp)(t,r,o)})`),(0,G3.reportMissingProp)(t,o),A.else())}}R0.validatePropertyDeps=BZ;function EZ(t,e=t.schema){let{gen:A,data:i,keyword:n,it:o}=t,a=A.name("valid");for(let r in e)(0,CDA.alwaysValidSchema)(o,e[r])||(A.if((0,G3.propertyInData)(A,i,r,o.opts.ownProperties),()=>{let s=t.subschema({keyword:n,schemaProp:r},a);t.mergeValidEvaluated(s,a)},()=>A.var(a,!0)),t.ok(a))}R0.validateSchemaDeps=EZ;R0.default=IDA});var uZ=qe(gR=>{"use strict";Object.defineProperty(gR,"__esModule",{value:!0});var hZ=rn(),BDA=On(),EDA={message:"property name must be valid",params:({params:t})=>(0,hZ._)`{propertyName: ${t.propertyName}}`},QDA={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:EDA,code(t){let{gen:e,schema:A,data:i,it:n}=t;if((0,BDA.alwaysValidSchema)(n,A))return;let o=e.name("valid");e.forIn("key",i,a=>{t.setParams({propertyName:a}),t.subschema({keyword:"propertyNames",data:a,dataTypes:["string"],propertyName:a,compositeRule:!0},o),e.if((0,hZ.not)(o),()=>{t.error(!0),n.allErrors||e.break()})}),t.ok(o)}};gR.default=QDA});var cR=qe(lR=>{"use strict";Object.defineProperty(lR,"__esModule",{value:!0});var S5=vl(),vc=rn(),hDA=FC(),x5=On(),uDA={message:"must NOT have additional properties",params:({params:t})=>(0,vc._)`{additionalProperty: ${t.additionalProperty}}`},fDA={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:uDA,code(t){let{gen:e,schema:A,parentSchema:i,data:n,errsCount:o,it:a}=t;if(!o)throw new Error("ajv implementation error");let{allErrors:r,opts:s}=a;if(a.props=!0,s.removeAdditional!=="all"&&(0,x5.alwaysValidSchema)(a,A))return;let g=(0,S5.allSchemaProperties)(i.properties),l=(0,S5.allSchemaProperties)(i.patternProperties);C(),t.ok((0,vc._)`${o} === ${hDA.default.errors}`);function C(){e.forIn("key",n,Q=>{!g.length&&!l.length?B(Q):e.if(I(Q),()=>B(Q))})}function I(Q){let f;if(g.length>8){let b=(0,x5.schemaRefOrVal)(a,i.properties,"properties");f=(0,S5.isOwnProperty)(e,b,Q)}else g.length?f=(0,vc.or)(...g.map(b=>(0,vc._)`${Q} === ${b}`)):f=vc.nil;return l.length&&(f=(0,vc.or)(f,...l.map(b=>(0,vc._)`${(0,S5.usePattern)(t,b)}.test(${Q})`))),(0,vc.not)(f)}function d(Q){e.code((0,vc._)`delete ${n}[${Q}]`)}function B(Q){if(s.removeAdditional==="all"||s.removeAdditional&&A===!1){d(Q);return}if(A===!1){t.setParams({additionalProperty:Q}),t.error(),r||e.break();return}if(typeof A=="object"&&!(0,x5.alwaysValidSchema)(a,A)){let f=e.name("valid");s.removeAdditional==="failing"?(E(Q,f,!1),e.if((0,vc.not)(f),()=>{t.reset(),d(Q)})):(E(Q,f),r||e.if((0,vc.not)(f),()=>e.break()))}}function E(Q,f,b){let S={keyword:"additionalProperties",dataProp:Q,dataPropType:x5.Type.Str};b===!1&&Object.assign(S,{compositeRule:!0,createErrors:!1,allErrors:!1}),t.subschema(S,f)}}};lR.default=fDA});var pZ=qe(IR=>{"use strict";Object.defineProperty(IR,"__esModule",{value:!0});var mDA=w3(),fZ=vl(),CR=On(),mZ=cR(),pDA={keyword:"properties",type:"object",schemaType:"object",code(t){let{gen:e,schema:A,parentSchema:i,data:n,it:o}=t;o.opts.removeAdditional==="all"&&i.additionalProperties===void 0&&mZ.default.code(new mDA.KeywordCxt(o,mZ.default,"additionalProperties"));let a=(0,fZ.allSchemaProperties)(A);for(let C of a)o.definedProperties.add(C);o.opts.unevaluated&&a.length&&o.props!==!0&&(o.props=CR.mergeEvaluated.props(e,(0,CR.toHash)(a),o.props));let r=a.filter(C=>!(0,CR.alwaysValidSchema)(o,A[C]));if(r.length===0)return;let s=e.name("valid");for(let C of r)g(C)?l(C):(e.if((0,fZ.propertyInData)(e,n,C,o.opts.ownProperties)),l(C),o.allErrors||e.else().var(s,!0),e.endIf()),t.it.definedProperties.add(C),t.ok(s);function g(C){return o.opts.useDefaults&&!o.compositeRule&&A[C].default!==void 0}function l(C){t.subschema({keyword:"properties",schemaProp:C,dataProp:C},s)}}};IR.default=pDA});var vZ=qe(dR=>{"use strict";Object.defineProperty(dR,"__esModule",{value:!0});var wZ=vl(),R5=rn(),DZ=On(),yZ=On(),wDA={keyword:"patternProperties",type:"object",schemaType:"object",code(t){let{gen:e,schema:A,data:i,parentSchema:n,it:o}=t,{opts:a}=o,r=(0,wZ.allSchemaProperties)(A),s=r.filter(E=>(0,DZ.alwaysValidSchema)(o,A[E]));if(r.length===0||s.length===r.length&&(!o.opts.unevaluated||o.props===!0))return;let g=a.strictSchema&&!a.allowMatchingProperties&&n.properties,l=e.name("valid");o.props!==!0&&!(o.props instanceof R5.Name)&&(o.props=(0,yZ.evaluatedPropsToName)(e,o.props));let{props:C}=o;I();function I(){for(let E of r)g&&d(E),o.allErrors?B(E):(e.var(l,!0),B(E),e.if(l))}function d(E){for(let Q in g)new RegExp(E).test(Q)&&(0,DZ.checkStrictMode)(o,`property ${Q} matches pattern ${E} (use allowMatchingProperties)`)}function B(E){e.forIn("key",i,Q=>{e.if((0,R5._)`${(0,wZ.usePattern)(t,E)}.test(${Q})`,()=>{let f=s.includes(E);f||t.subschema({keyword:"patternProperties",schemaProp:E,dataProp:Q,dataPropType:yZ.Type.Str},l),o.opts.unevaluated&&C!==!0?e.assign((0,R5._)`${C}[${Q}]`,!0):!f&&!o.allErrors&&e.if((0,R5.not)(l),()=>e.break())})})}}};dR.default=wDA});var bZ=qe(BR=>{"use strict";Object.defineProperty(BR,"__esModule",{value:!0});var DDA=On(),yDA={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(t){let{gen:e,schema:A,it:i}=t;if((0,DDA.alwaysValidSchema)(i,A)){t.fail();return}let n=e.name("valid");t.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},n),t.failResult(n,()=>t.reset(),()=>t.error())},error:{message:"must NOT be valid"}};BR.default=yDA});var MZ=qe(ER=>{"use strict";Object.defineProperty(ER,"__esModule",{value:!0});var vDA=vl(),bDA={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:vDA.validateUnion,error:{message:"must match a schema in anyOf"}};ER.default=bDA});var kZ=qe(QR=>{"use strict";Object.defineProperty(QR,"__esModule",{value:!0});var N5=rn(),MDA=On(),kDA={message:"must match exactly one schema in oneOf",params:({params:t})=>(0,N5._)`{passingSchemas: ${t.passing}}`},SDA={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:kDA,code(t){let{gen:e,schema:A,parentSchema:i,it:n}=t;if(!Array.isArray(A))throw new Error("ajv implementation error");if(n.opts.discriminator&&i.discriminator)return;let o=A,a=e.let("valid",!1),r=e.let("passing",null),s=e.name("_valid");t.setParams({passing:r}),e.block(g),t.result(a,()=>t.reset(),()=>t.error(!0));function g(){o.forEach((l,C)=>{let I;(0,MDA.alwaysValidSchema)(n,l)?e.var(s,!0):I=t.subschema({keyword:"oneOf",schemaProp:C,compositeRule:!0},s),C>0&&e.if((0,N5._)`${s} && ${a}`).assign(a,!1).assign(r,(0,N5._)`[${r}, ${C}]`).else(),e.if(s,()=>{e.assign(a,!0),e.assign(r,C),I&&t.mergeEvaluated(I,N5.Name)})})}}};QR.default=SDA});var SZ=qe(hR=>{"use strict";Object.defineProperty(hR,"__esModule",{value:!0});var xDA=On(),RDA={keyword:"allOf",schemaType:"array",code(t){let{gen:e,schema:A,it:i}=t;if(!Array.isArray(A))throw new Error("ajv implementation error");let n=e.name("valid");A.forEach((o,a)=>{if((0,xDA.alwaysValidSchema)(i,o))return;let r=t.subschema({keyword:"allOf",schemaProp:a},n);t.ok(n),t.mergeEvaluated(r)})}};hR.default=RDA});var NZ=qe(uR=>{"use strict";Object.defineProperty(uR,"__esModule",{value:!0});var F5=rn(),RZ=On(),NDA={message:({params:t})=>(0,F5.str)`must match "${t.ifClause}" schema`,params:({params:t})=>(0,F5._)`{failingKeyword: ${t.ifClause}}`},FDA={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:NDA,code(t){let{gen:e,parentSchema:A,it:i}=t;A.then===void 0&&A.else===void 0&&(0,RZ.checkStrictMode)(i,'"if" without "then" and "else" is ignored');let n=xZ(i,"then"),o=xZ(i,"else");if(!n&&!o)return;let a=e.let("valid",!0),r=e.name("_valid");if(s(),t.reset(),n&&o){let l=e.let("ifClause");t.setParams({ifClause:l}),e.if(r,g("then",l),g("else",l))}else n?e.if(r,g("then")):e.if((0,F5.not)(r),g("else"));t.pass(a,()=>t.error(!0));function s(){let l=t.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},r);t.mergeEvaluated(l)}function g(l,C){return()=>{let I=t.subschema({keyword:l},r);e.assign(a,r),t.mergeValidEvaluated(I,a),C?e.assign(C,(0,F5._)`${l}`):t.setParams({ifClause:l})}}}};function xZ(t,e){let A=t.schema[e];return A!==void 0&&!(0,RZ.alwaysValidSchema)(t,A)}uR.default=FDA});var FZ=qe(fR=>{"use strict";Object.defineProperty(fR,"__esModule",{value:!0});var _DA=On(),LDA={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:t,parentSchema:e,it:A}){e.if===void 0&&(0,_DA.checkStrictMode)(A,`"${t}" without "if" is ignored`)}};fR.default=LDA});var _Z=qe(mR=>{"use strict";Object.defineProperty(mR,"__esModule",{value:!0});var GDA=iR(),KDA=cZ(),UDA=nR(),JDA=IZ(),YDA=dZ(),TDA=QZ(),HDA=uZ(),zDA=cR(),ODA=pZ(),PDA=vZ(),jDA=bZ(),qDA=MZ(),VDA=kZ(),WDA=SZ(),ZDA=NZ(),XDA=FZ();function $DA(t=!1){let e=[jDA.default,qDA.default,VDA.default,WDA.default,ZDA.default,XDA.default,HDA.default,zDA.default,TDA.default,ODA.default,PDA.default];return t?e.push(KDA.default,JDA.default):e.push(GDA.default,UDA.default),e.push(YDA.default),e}mR.default=$DA});var LZ=qe(pR=>{"use strict";Object.defineProperty(pR,"__esModule",{value:!0});var Ar=rn(),AyA={message:({schemaCode:t})=>(0,Ar.str)`must match format "${t}"`,params:({schemaCode:t})=>(0,Ar._)`{format: ${t}}`},eyA={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:AyA,code(t,e){let{gen:A,data:i,$data:n,schema:o,schemaCode:a,it:r}=t,{opts:s,errSchemaPath:g,schemaEnv:l,self:C}=r;if(!s.validateFormats)return;n?I():d();function I(){let B=A.scopeValue("formats",{ref:C.formats,code:s.code.formats}),E=A.const("fDef",(0,Ar._)`${B}[${a}]`),Q=A.let("fType"),f=A.let("format");A.if((0,Ar._)`typeof ${E} == "object" && !(${E} instanceof RegExp)`,()=>A.assign(Q,(0,Ar._)`${E}.type || "string"`).assign(f,(0,Ar._)`${E}.validate`),()=>A.assign(Q,(0,Ar._)`"string"`).assign(f,E)),t.fail$data((0,Ar.or)(b(),S()));function b(){return s.strictSchema===!1?Ar.nil:(0,Ar._)`${a} && !${f}`}function S(){let M=l.$async?(0,Ar._)`(${E}.async ? await ${f}(${i}) : ${f}(${i}))`:(0,Ar._)`${f}(${i})`,D=(0,Ar._)`(typeof ${f} == "function" ? ${M} : ${f}.test(${i}))`;return(0,Ar._)`${f} && ${f} !== true && ${Q} === ${e} && !${D}`}}function d(){let B=C.formats[o];if(!B){b();return}if(B===!0)return;let[E,Q,f]=S(B);E===e&&t.pass(M());function b(){if(s.strictSchema===!1){C.logger.warn(D());return}throw new Error(D());function D(){return`unknown format "${o}" ignored in schema at path "${g}"`}}function S(D){let F=D instanceof RegExp?(0,Ar.regexpCode)(D):s.code.formats?(0,Ar._)`${s.code.formats}${(0,Ar.getProperty)(o)}`:void 0,_=A.scopeValue("formats",{key:o,ref:D,code:F});return typeof D=="object"&&!(D instanceof RegExp)?[D.type||"string",D.validate,(0,Ar._)`${_}.validate`]:["string",D,_]}function M(){if(typeof B=="object"&&!(B instanceof RegExp)&&B.async){if(!l.$async)throw new Error("async format in sync schema");return(0,Ar._)`await ${f}(${i})`}return typeof Q=="function"?(0,Ar._)`${f}(${i})`:(0,Ar._)`${f}.test(${i})`}}}};pR.default=eyA});var GZ=qe(wR=>{"use strict";Object.defineProperty(wR,"__esModule",{value:!0});var tyA=LZ(),iyA=[tyA.default];wR.default=iyA});var KZ=qe(rQ=>{"use strict";Object.defineProperty(rQ,"__esModule",{value:!0});rQ.contentVocabulary=rQ.metadataVocabulary=void 0;rQ.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];rQ.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var JZ=qe(DR=>{"use strict";Object.defineProperty(DR,"__esModule",{value:!0});var nyA=jW(),oyA=rZ(),ayA=_Z(),ryA=GZ(),UZ=KZ(),syA=[nyA.default,oyA.default,(0,ayA.default)(),ryA.default,UZ.metadataVocabulary,UZ.contentVocabulary];DR.default=syA});var TZ=qe(_5=>{"use strict";Object.defineProperty(_5,"__esModule",{value:!0});_5.DiscrError=void 0;var YZ=(function(t){return t.Tag="tag",t.Mapping="mapping",t})(YZ||(_5.DiscrError=YZ={}))});var zZ=qe(vR=>{"use strict";Object.defineProperty(vR,"__esModule",{value:!0});var sQ=rn(),yR=TZ(),HZ=E5(),gyA=D3(),lyA=On(),cyA={message:({params:{discrError:t,tagName:e}})=>t===yR.DiscrError.Tag?`tag "${e}" must be string`:`value of tag "${e}" must be in oneOf`,params:({params:{discrError:t,tag:e,tagName:A}})=>(0,sQ._)`{error: ${t}, tag: ${A}, tagValue: ${e}}`},CyA={keyword:"discriminator",type:"object",schemaType:"object",error:cyA,code(t){let{gen:e,data:A,schema:i,parentSchema:n,it:o}=t,{oneOf:a}=n;if(!o.opts.discriminator)throw new Error("discriminator: requires discriminator option");let r=i.propertyName;if(typeof r!="string")throw new Error("discriminator: requires propertyName");if(i.mapping)throw new Error("discriminator: mapping is not supported");if(!a)throw new Error("discriminator: requires oneOf keyword");let s=e.let("valid",!1),g=e.const("tag",(0,sQ._)`${A}${(0,sQ.getProperty)(r)}`);e.if((0,sQ._)`typeof ${g} == "string"`,()=>l(),()=>t.error(!1,{discrError:yR.DiscrError.Tag,tag:g,tagName:r})),t.ok(s);function l(){let d=I();e.if(!1);for(let B in d)e.elseIf((0,sQ._)`${g} === ${B}`),e.assign(s,C(d[B]));e.else(),t.error(!1,{discrError:yR.DiscrError.Mapping,tag:g,tagName:r}),e.endIf()}function C(d){let B=e.name("valid"),E=t.subschema({keyword:"oneOf",schemaProp:d},B);return t.mergeEvaluated(E,sQ.Name),B}function I(){var d;let B={},E=f(n),Q=!0;for(let M=0;M{IyA.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var jZ=qe((Ba,bR)=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});Ba.MissingRefError=Ba.ValidationError=Ba.CodeGen=Ba.Name=Ba.nil=Ba.stringify=Ba.str=Ba._=Ba.KeywordCxt=Ba.Ajv=void 0;var dyA=YW(),ByA=JZ(),EyA=zZ(),PZ=OZ(),QyA=["/properties"],L5="http://json-schema.org/draft-07/schema",gQ=class extends dyA.default{_addVocabularies(){super._addVocabularies(),ByA.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(EyA.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(PZ,QyA):PZ;this.addMetaSchema(e,L5,!1),this.refs["http://json-schema.org/schema"]=L5}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(L5)?L5:void 0)}};Ba.Ajv=gQ;bR.exports=Ba=gQ;bR.exports.Ajv=gQ;Object.defineProperty(Ba,"__esModule",{value:!0});Ba.default=gQ;var hyA=w3();Object.defineProperty(Ba,"KeywordCxt",{enumerable:!0,get:function(){return hyA.KeywordCxt}});var lQ=rn();Object.defineProperty(Ba,"_",{enumerable:!0,get:function(){return lQ._}});Object.defineProperty(Ba,"str",{enumerable:!0,get:function(){return lQ.str}});Object.defineProperty(Ba,"stringify",{enumerable:!0,get:function(){return lQ.stringify}});Object.defineProperty(Ba,"nil",{enumerable:!0,get:function(){return lQ.nil}});Object.defineProperty(Ba,"Name",{enumerable:!0,get:function(){return lQ.Name}});Object.defineProperty(Ba,"CodeGen",{enumerable:!0,get:function(){return lQ.CodeGen}});var uyA=d5();Object.defineProperty(Ba,"ValidationError",{enumerable:!0,get:function(){return uyA.default}});var fyA=D3();Object.defineProperty(Ba,"MissingRefError",{enumerable:!0,get:function(){return fyA.default}})});var qZ=qe(G5=>{"use strict";(function(t){"use strict";function e(Y){return Y!==null?Object.prototype.toString.call(Y)==="[object Array]":!1}function A(Y){return Y!==null?Object.prototype.toString.call(Y)==="[object Object]":!1}function i(Y,z){if(Y===z)return!0;var nA=Object.prototype.toString.call(Y);if(nA!==Object.prototype.toString.call(z))return!1;if(e(Y)===!0){if(Y.length!==z.length)return!1;for(var rA=0;rA",9:"Array"},S="EOF",M="UnquotedIdentifier",D="QuotedIdentifier",F="Rbracket",_="Rparen",U="Comma",J="Colon",j="Rbrace",AA="Number",O="Current",DA="Expref",P="Pipe",aA="Or",iA="And",BA="EQ",oA="GT",sA="LT",hA="GTE",YA="LTE",ee="NE",UA="Flatten",mA="Star",KA="Filter",Pe="Dot",Je="Not",HA="Lbrace",uA="Lbracket",ZA="Lparen",QA="Literal",WA={".":Pe,"*":mA,",":U,":":J,"{":HA,"}":j,"]":F,"(":ZA,")":_,"@":O},MA={"<":!0,">":!0,"=":!0,"!":!0},be={" ":!0," ":!0,"\n":!0};function LA(Y){return Y>="a"&&Y<="z"||Y>="A"&&Y<="Z"||Y==="_"}function pA(Y){return Y>="0"&&Y<="9"||Y==="-"}function Ft(Y){return Y>="a"&&Y<="z"||Y>="A"&&Y<="Z"||Y>="0"&&Y<="9"||Y==="_"}function ht(){}ht.prototype={tokenize:function(Y){var z=[];this._current=0;for(var nA,rA,NA;this._current")return Y[this._current]==="="?(this._current++,{type:hA,value:">=",start:z}):{type:oA,value:">",start:z};if(nA==="="&&Y[this._current]==="=")return this._current++,{type:BA,value:"==",start:z}},_consumeLiteral:function(Y){this._current++;for(var z=this._current,nA=Y.length,rA;Y[this._current]!=="`"&&this._current=0)return!0;if(nA.indexOf(Y)>=0)return!0;if(rA.indexOf(Y[0])>=0)try{return JSON.parse(Y),!0}catch{return!1}else return!1}};var Ee={};Ee[S]=0,Ee[M]=0,Ee[D]=0,Ee[F]=0,Ee[_]=0,Ee[U]=0,Ee[j]=0,Ee[AA]=0,Ee[O]=0,Ee[DA]=0,Ee[P]=1,Ee[aA]=2,Ee[iA]=3,Ee[BA]=5,Ee[oA]=5,Ee[sA]=5,Ee[hA]=5,Ee[YA]=5,Ee[ee]=5,Ee[UA]=9,Ee[mA]=20,Ee[KA]=21,Ee[Pe]=40,Ee[Je]=45,Ee[HA]=50,Ee[uA]=55,Ee[ZA]=60;function Kt(){}Kt.prototype={parse:function(Y){this._loadTokens(Y),this.index=0;var z=this.expression(0);if(this._lookahead(0)!==S){var nA=this._lookaheadToken(0),rA=new Error("Unexpected token type: "+nA.type+", value: "+nA.value);throw rA.name="ParserError",rA}return z},_loadTokens:function(Y){var z=new ht,nA=z.tokenize(Y);nA.push({type:S,value:"",start:Y.length}),this.tokens=nA},expression:function(Y){var z=this._lookaheadToken(0);this._advance();for(var nA=this.nud(z),rA=this._lookahead(0);Y=0)return this.expression(Y);if(z===uA)return this._match(uA),this._parseMultiselectList();if(z===HA)return this._match(HA),this._parseMultiselectHash()},_parseProjectionRHS:function(Y){var z;if(Ee[this._lookahead(0)]<10)z={type:"Identity"};else if(this._lookahead(0)===uA)z=this.expression(Y);else if(this._lookahead(0)===KA)z=this.expression(Y);else if(this._lookahead(0)===Pe)this._match(Pe),z=this._parseDotRHS(Y);else{var nA=this._lookaheadToken(0),rA=new Error("Sytanx error, unexpected token: "+nA.value+"("+nA.type+")");throw rA.name="ParserError",rA}return z},_parseMultiselectList:function(){for(var Y=[];this._lookahead(0)!==F;){var z=this.expression(0);if(Y.push(z),this._lookahead(0)===U&&(this._match(U),this._lookahead(0)===F))throw new Error("Unexpected token Rbracket")}return this._match(F),{type:"MultiSelectList",children:Y}},_parseMultiselectHash:function(){for(var Y=[],z=[M,D],nA,rA,NA,Ie;;){if(nA=this._lookaheadToken(0),z.indexOf(nA.type)<0)throw new Error("Expecting an identifier token, got: "+nA.type);if(rA=nA.value,this._advance(),this._match(J),NA=this.expression(0),Ie={type:"KeyValuePair",name:rA,value:NA},Y.push(Ie),this._lookahead(0)===U)this._match(U);else if(this._lookahead(0)===j){this._match(j);break}}return{type:"MultiSelectHash",children:Y}}};function Ye(Y){this.runtime=Y}Ye.prototype={search:function(Y,z){return this.visit(Y,z)},visit:function(Y,z){var nA,rA,NA,Ie,Qe,xA,_A,Et,et,Te;switch(Y.type){case"Field":return z!==null&&A(z)?(xA=z[Y.name],xA===void 0?null:xA):null;case"Subexpression":for(NA=this.visit(Y.children[0],z),Te=1;Te0)for(Te=dn;Te<_e;Te+=Wi)NA.push(z[Te]);else for(Te=dn;Te>_e;Te+=Wi)NA.push(z[Te]);return NA;case"Projection":var ui=this.visit(Y.children[0],z);if(!e(ui))return null;for(et=[],Te=0;TeQe;break;case hA:NA=Ie>=Qe;break;case sA:NA=Ie=Y&&(z=nA<0?Y-1:Y),z}};function ze(Y){this._interpreter=Y,this.functionTable={abs:{_func:this._functionAbs,_signature:[{types:[s]}]},avg:{_func:this._functionAvg,_signature:[{types:[Q]}]},ceil:{_func:this._functionCeil,_signature:[{types:[s]}]},contains:{_func:this._functionContains,_signature:[{types:[l,C]},{types:[g]}]},ends_with:{_func:this._functionEndsWith,_signature:[{types:[l]},{types:[l]}]},floor:{_func:this._functionFloor,_signature:[{types:[s]}]},length:{_func:this._functionLength,_signature:[{types:[l,C,I]}]},map:{_func:this._functionMap,_signature:[{types:[B]},{types:[C]}]},max:{_func:this._functionMax,_signature:[{types:[Q,f]}]},merge:{_func:this._functionMerge,_signature:[{types:[I],variadic:!0}]},max_by:{_func:this._functionMaxBy,_signature:[{types:[C]},{types:[B]}]},sum:{_func:this._functionSum,_signature:[{types:[Q]}]},starts_with:{_func:this._functionStartsWith,_signature:[{types:[l]},{types:[l]}]},min:{_func:this._functionMin,_signature:[{types:[Q,f]}]},min_by:{_func:this._functionMinBy,_signature:[{types:[C]},{types:[B]}]},type:{_func:this._functionType,_signature:[{types:[g]}]},keys:{_func:this._functionKeys,_signature:[{types:[I]}]},values:{_func:this._functionValues,_signature:[{types:[I]}]},sort:{_func:this._functionSort,_signature:[{types:[f,Q]}]},sort_by:{_func:this._functionSortBy,_signature:[{types:[C]},{types:[B]}]},join:{_func:this._functionJoin,_signature:[{types:[l]},{types:[f]}]},reverse:{_func:this._functionReverse,_signature:[{types:[l,C]}]},to_array:{_func:this._functionToArray,_signature:[{types:[g]}]},to_string:{_func:this._functionToString,_signature:[{types:[g]}]},to_number:{_func:this._functionToNumber,_signature:[{types:[g]}]},not_null:{_func:this._functionNotNull,_signature:[{types:[g],variadic:!0}]}}}ze.prototype={callFunction:function(Y,z){var nA=this.functionTable[Y];if(nA===void 0)throw new Error("Unknown function: "+Y+"()");return this._validateArgs(Y,z,nA._signature),nA._func.call(this,z)},_validateArgs:function(Y,z,nA){var rA;if(nA[nA.length-1].variadic){if(z.length=0;NA--)rA+=nA[NA];return rA}else{var Ie=Y[0].slice(0);return Ie.reverse(),Ie}},_functionAbs:function(Y){return Math.abs(Y[0])},_functionCeil:function(Y){return Math.ceil(Y[0])},_functionAvg:function(Y){for(var z=0,nA=Y[0],rA=0;rA=0},_functionFloor:function(Y){return Math.floor(Y[0])},_functionLength:function(Y){return A(Y[0])?Object.keys(Y[0]).length:Y[0].length},_functionMap:function(Y){for(var z=[],nA=this._interpreter,rA=Y[0],NA=Y[1],Ie=0;Ie0){var z=this._getTypeName(Y[0][0]);if(z===s)return Math.max.apply(Math,Y[0]);for(var nA=Y[0],rA=nA[0],NA=1;NA0){var z=this._getTypeName(Y[0][0]);if(z===s)return Math.min.apply(Math,Y[0]);for(var nA=Y[0],rA=nA[0],NA=1;NALe?1:TeNA&&(NA=Qe,Ie=nA[xA]);return Ie},_functionMinBy:function(Y){for(var z=Y[1],nA=Y[0],rA=this.createKeyFunction(z,[s,l]),NA=1/0,Ie,Qe,xA=0;xA"u"?G5.jmespath={}:G5)});var OgA=qe(($Je,zgA)=>{"use strict";zgA.exports=[{value:"#B0171F",name:"indian red"},{value:"#DC143C",css:!0,name:"crimson"},{value:"#FFB6C1",css:!0,name:"lightpink"},{value:"#FFAEB9",name:"lightpink 1"},{value:"#EEA2AD",name:"lightpink 2"},{value:"#CD8C95",name:"lightpink 3"},{value:"#8B5F65",name:"lightpink 4"},{value:"#FFC0CB",css:!0,name:"pink"},{value:"#FFB5C5",name:"pink 1"},{value:"#EEA9B8",name:"pink 2"},{value:"#CD919E",name:"pink 3"},{value:"#8B636C",name:"pink 4"},{value:"#DB7093",css:!0,name:"palevioletred"},{value:"#FF82AB",name:"palevioletred 1"},{value:"#EE799F",name:"palevioletred 2"},{value:"#CD6889",name:"palevioletred 3"},{value:"#8B475D",name:"palevioletred 4"},{value:"#FFF0F5",name:"lavenderblush 1"},{value:"#FFF0F5",css:!0,name:"lavenderblush"},{value:"#EEE0E5",name:"lavenderblush 2"},{value:"#CDC1C5",name:"lavenderblush 3"},{value:"#8B8386",name:"lavenderblush 4"},{value:"#FF3E96",name:"violetred 1"},{value:"#EE3A8C",name:"violetred 2"},{value:"#CD3278",name:"violetred 3"},{value:"#8B2252",name:"violetred 4"},{value:"#FF69B4",css:!0,name:"hotpink"},{value:"#FF6EB4",name:"hotpink 1"},{value:"#EE6AA7",name:"hotpink 2"},{value:"#CD6090",name:"hotpink 3"},{value:"#8B3A62",name:"hotpink 4"},{value:"#872657",name:"raspberry"},{value:"#FF1493",name:"deeppink 1"},{value:"#FF1493",css:!0,name:"deeppink"},{value:"#EE1289",name:"deeppink 2"},{value:"#CD1076",name:"deeppink 3"},{value:"#8B0A50",name:"deeppink 4"},{value:"#FF34B3",name:"maroon 1"},{value:"#EE30A7",name:"maroon 2"},{value:"#CD2990",name:"maroon 3"},{value:"#8B1C62",name:"maroon 4"},{value:"#C71585",css:!0,name:"mediumvioletred"},{value:"#D02090",name:"violetred"},{value:"#DA70D6",css:!0,name:"orchid"},{value:"#FF83FA",name:"orchid 1"},{value:"#EE7AE9",name:"orchid 2"},{value:"#CD69C9",name:"orchid 3"},{value:"#8B4789",name:"orchid 4"},{value:"#D8BFD8",css:!0,name:"thistle"},{value:"#FFE1FF",name:"thistle 1"},{value:"#EED2EE",name:"thistle 2"},{value:"#CDB5CD",name:"thistle 3"},{value:"#8B7B8B",name:"thistle 4"},{value:"#FFBBFF",name:"plum 1"},{value:"#EEAEEE",name:"plum 2"},{value:"#CD96CD",name:"plum 3"},{value:"#8B668B",name:"plum 4"},{value:"#DDA0DD",css:!0,name:"plum"},{value:"#EE82EE",css:!0,name:"violet"},{value:"#FF00FF",vga:!0,name:"magenta"},{value:"#FF00FF",vga:!0,css:!0,name:"fuchsia"},{value:"#EE00EE",name:"magenta 2"},{value:"#CD00CD",name:"magenta 3"},{value:"#8B008B",name:"magenta 4"},{value:"#8B008B",css:!0,name:"darkmagenta"},{value:"#800080",vga:!0,css:!0,name:"purple"},{value:"#BA55D3",css:!0,name:"mediumorchid"},{value:"#E066FF",name:"mediumorchid 1"},{value:"#D15FEE",name:"mediumorchid 2"},{value:"#B452CD",name:"mediumorchid 3"},{value:"#7A378B",name:"mediumorchid 4"},{value:"#9400D3",css:!0,name:"darkviolet"},{value:"#9932CC",css:!0,name:"darkorchid"},{value:"#BF3EFF",name:"darkorchid 1"},{value:"#B23AEE",name:"darkorchid 2"},{value:"#9A32CD",name:"darkorchid 3"},{value:"#68228B",name:"darkorchid 4"},{value:"#4B0082",css:!0,name:"indigo"},{value:"#8A2BE2",css:!0,name:"blueviolet"},{value:"#9B30FF",name:"purple 1"},{value:"#912CEE",name:"purple 2"},{value:"#7D26CD",name:"purple 3"},{value:"#551A8B",name:"purple 4"},{value:"#9370DB",css:!0,name:"mediumpurple"},{value:"#AB82FF",name:"mediumpurple 1"},{value:"#9F79EE",name:"mediumpurple 2"},{value:"#8968CD",name:"mediumpurple 3"},{value:"#5D478B",name:"mediumpurple 4"},{value:"#483D8B",css:!0,name:"darkslateblue"},{value:"#8470FF",name:"lightslateblue"},{value:"#7B68EE",css:!0,name:"mediumslateblue"},{value:"#6A5ACD",css:!0,name:"slateblue"},{value:"#836FFF",name:"slateblue 1"},{value:"#7A67EE",name:"slateblue 2"},{value:"#6959CD",name:"slateblue 3"},{value:"#473C8B",name:"slateblue 4"},{value:"#F8F8FF",css:!0,name:"ghostwhite"},{value:"#E6E6FA",css:!0,name:"lavender"},{value:"#0000FF",vga:!0,css:!0,name:"blue"},{value:"#0000EE",name:"blue 2"},{value:"#0000CD",name:"blue 3"},{value:"#0000CD",css:!0,name:"mediumblue"},{value:"#00008B",name:"blue 4"},{value:"#00008B",css:!0,name:"darkblue"},{value:"#000080",vga:!0,css:!0,name:"navy"},{value:"#191970",css:!0,name:"midnightblue"},{value:"#3D59AB",name:"cobalt"},{value:"#4169E1",css:!0,name:"royalblue"},{value:"#4876FF",name:"royalblue 1"},{value:"#436EEE",name:"royalblue 2"},{value:"#3A5FCD",name:"royalblue 3"},{value:"#27408B",name:"royalblue 4"},{value:"#6495ED",css:!0,name:"cornflowerblue"},{value:"#B0C4DE",css:!0,name:"lightsteelblue"},{value:"#CAE1FF",name:"lightsteelblue 1"},{value:"#BCD2EE",name:"lightsteelblue 2"},{value:"#A2B5CD",name:"lightsteelblue 3"},{value:"#6E7B8B",name:"lightsteelblue 4"},{value:"#778899",css:!0,name:"lightslategray"},{value:"#708090",css:!0,name:"slategray"},{value:"#C6E2FF",name:"slategray 1"},{value:"#B9D3EE",name:"slategray 2"},{value:"#9FB6CD",name:"slategray 3"},{value:"#6C7B8B",name:"slategray 4"},{value:"#1E90FF",name:"dodgerblue 1"},{value:"#1E90FF",css:!0,name:"dodgerblue"},{value:"#1C86EE",name:"dodgerblue 2"},{value:"#1874CD",name:"dodgerblue 3"},{value:"#104E8B",name:"dodgerblue 4"},{value:"#F0F8FF",css:!0,name:"aliceblue"},{value:"#4682B4",css:!0,name:"steelblue"},{value:"#63B8FF",name:"steelblue 1"},{value:"#5CACEE",name:"steelblue 2"},{value:"#4F94CD",name:"steelblue 3"},{value:"#36648B",name:"steelblue 4"},{value:"#87CEFA",css:!0,name:"lightskyblue"},{value:"#B0E2FF",name:"lightskyblue 1"},{value:"#A4D3EE",name:"lightskyblue 2"},{value:"#8DB6CD",name:"lightskyblue 3"},{value:"#607B8B",name:"lightskyblue 4"},{value:"#87CEFF",name:"skyblue 1"},{value:"#7EC0EE",name:"skyblue 2"},{value:"#6CA6CD",name:"skyblue 3"},{value:"#4A708B",name:"skyblue 4"},{value:"#87CEEB",css:!0,name:"skyblue"},{value:"#00BFFF",name:"deepskyblue 1"},{value:"#00BFFF",css:!0,name:"deepskyblue"},{value:"#00B2EE",name:"deepskyblue 2"},{value:"#009ACD",name:"deepskyblue 3"},{value:"#00688B",name:"deepskyblue 4"},{value:"#33A1C9",name:"peacock"},{value:"#ADD8E6",css:!0,name:"lightblue"},{value:"#BFEFFF",name:"lightblue 1"},{value:"#B2DFEE",name:"lightblue 2"},{value:"#9AC0CD",name:"lightblue 3"},{value:"#68838B",name:"lightblue 4"},{value:"#B0E0E6",css:!0,name:"powderblue"},{value:"#98F5FF",name:"cadetblue 1"},{value:"#8EE5EE",name:"cadetblue 2"},{value:"#7AC5CD",name:"cadetblue 3"},{value:"#53868B",name:"cadetblue 4"},{value:"#00F5FF",name:"turquoise 1"},{value:"#00E5EE",name:"turquoise 2"},{value:"#00C5CD",name:"turquoise 3"},{value:"#00868B",name:"turquoise 4"},{value:"#5F9EA0",css:!0,name:"cadetblue"},{value:"#00CED1",css:!0,name:"darkturquoise"},{value:"#F0FFFF",name:"azure 1"},{value:"#F0FFFF",css:!0,name:"azure"},{value:"#E0EEEE",name:"azure 2"},{value:"#C1CDCD",name:"azure 3"},{value:"#838B8B",name:"azure 4"},{value:"#E0FFFF",name:"lightcyan 1"},{value:"#E0FFFF",css:!0,name:"lightcyan"},{value:"#D1EEEE",name:"lightcyan 2"},{value:"#B4CDCD",name:"lightcyan 3"},{value:"#7A8B8B",name:"lightcyan 4"},{value:"#BBFFFF",name:"paleturquoise 1"},{value:"#AEEEEE",name:"paleturquoise 2"},{value:"#AEEEEE",css:!0,name:"paleturquoise"},{value:"#96CDCD",name:"paleturquoise 3"},{value:"#668B8B",name:"paleturquoise 4"},{value:"#2F4F4F",css:!0,name:"darkslategray"},{value:"#97FFFF",name:"darkslategray 1"},{value:"#8DEEEE",name:"darkslategray 2"},{value:"#79CDCD",name:"darkslategray 3"},{value:"#528B8B",name:"darkslategray 4"},{value:"#00FFFF",name:"cyan"},{value:"#00FFFF",css:!0,name:"aqua"},{value:"#00EEEE",name:"cyan 2"},{value:"#00CDCD",name:"cyan 3"},{value:"#008B8B",name:"cyan 4"},{value:"#008B8B",css:!0,name:"darkcyan"},{value:"#008080",vga:!0,css:!0,name:"teal"},{value:"#48D1CC",css:!0,name:"mediumturquoise"},{value:"#20B2AA",css:!0,name:"lightseagreen"},{value:"#03A89E",name:"manganeseblue"},{value:"#40E0D0",css:!0,name:"turquoise"},{value:"#808A87",name:"coldgrey"},{value:"#00C78C",name:"turquoiseblue"},{value:"#7FFFD4",name:"aquamarine 1"},{value:"#7FFFD4",css:!0,name:"aquamarine"},{value:"#76EEC6",name:"aquamarine 2"},{value:"#66CDAA",name:"aquamarine 3"},{value:"#66CDAA",css:!0,name:"mediumaquamarine"},{value:"#458B74",name:"aquamarine 4"},{value:"#00FA9A",css:!0,name:"mediumspringgreen"},{value:"#F5FFFA",css:!0,name:"mintcream"},{value:"#00FF7F",css:!0,name:"springgreen"},{value:"#00EE76",name:"springgreen 1"},{value:"#00CD66",name:"springgreen 2"},{value:"#008B45",name:"springgreen 3"},{value:"#3CB371",css:!0,name:"mediumseagreen"},{value:"#54FF9F",name:"seagreen 1"},{value:"#4EEE94",name:"seagreen 2"},{value:"#43CD80",name:"seagreen 3"},{value:"#2E8B57",name:"seagreen 4"},{value:"#2E8B57",css:!0,name:"seagreen"},{value:"#00C957",name:"emeraldgreen"},{value:"#BDFCC9",name:"mint"},{value:"#3D9140",name:"cobaltgreen"},{value:"#F0FFF0",name:"honeydew 1"},{value:"#F0FFF0",css:!0,name:"honeydew"},{value:"#E0EEE0",name:"honeydew 2"},{value:"#C1CDC1",name:"honeydew 3"},{value:"#838B83",name:"honeydew 4"},{value:"#8FBC8F",css:!0,name:"darkseagreen"},{value:"#C1FFC1",name:"darkseagreen 1"},{value:"#B4EEB4",name:"darkseagreen 2"},{value:"#9BCD9B",name:"darkseagreen 3"},{value:"#698B69",name:"darkseagreen 4"},{value:"#98FB98",css:!0,name:"palegreen"},{value:"#9AFF9A",name:"palegreen 1"},{value:"#90EE90",name:"palegreen 2"},{value:"#90EE90",css:!0,name:"lightgreen"},{value:"#7CCD7C",name:"palegreen 3"},{value:"#548B54",name:"palegreen 4"},{value:"#32CD32",css:!0,name:"limegreen"},{value:"#228B22",css:!0,name:"forestgreen"},{value:"#00FF00",vga:!0,name:"green 1"},{value:"#00FF00",vga:!0,css:!0,name:"lime"},{value:"#00EE00",name:"green 2"},{value:"#00CD00",name:"green 3"},{value:"#008B00",name:"green 4"},{value:"#008000",vga:!0,css:!0,name:"green"},{value:"#006400",css:!0,name:"darkgreen"},{value:"#308014",name:"sapgreen"},{value:"#7CFC00",css:!0,name:"lawngreen"},{value:"#7FFF00",name:"chartreuse 1"},{value:"#7FFF00",css:!0,name:"chartreuse"},{value:"#76EE00",name:"chartreuse 2"},{value:"#66CD00",name:"chartreuse 3"},{value:"#458B00",name:"chartreuse 4"},{value:"#ADFF2F",css:!0,name:"greenyellow"},{value:"#CAFF70",name:"darkolivegreen 1"},{value:"#BCEE68",name:"darkolivegreen 2"},{value:"#A2CD5A",name:"darkolivegreen 3"},{value:"#6E8B3D",name:"darkolivegreen 4"},{value:"#556B2F",css:!0,name:"darkolivegreen"},{value:"#6B8E23",css:!0,name:"olivedrab"},{value:"#C0FF3E",name:"olivedrab 1"},{value:"#B3EE3A",name:"olivedrab 2"},{value:"#9ACD32",name:"olivedrab 3"},{value:"#9ACD32",css:!0,name:"yellowgreen"},{value:"#698B22",name:"olivedrab 4"},{value:"#FFFFF0",name:"ivory 1"},{value:"#FFFFF0",css:!0,name:"ivory"},{value:"#EEEEE0",name:"ivory 2"},{value:"#CDCDC1",name:"ivory 3"},{value:"#8B8B83",name:"ivory 4"},{value:"#F5F5DC",css:!0,name:"beige"},{value:"#FFFFE0",name:"lightyellow 1"},{value:"#FFFFE0",css:!0,name:"lightyellow"},{value:"#EEEED1",name:"lightyellow 2"},{value:"#CDCDB4",name:"lightyellow 3"},{value:"#8B8B7A",name:"lightyellow 4"},{value:"#FAFAD2",css:!0,name:"lightgoldenrodyellow"},{value:"#FFFF00",vga:!0,name:"yellow 1"},{value:"#FFFF00",vga:!0,css:!0,name:"yellow"},{value:"#EEEE00",name:"yellow 2"},{value:"#CDCD00",name:"yellow 3"},{value:"#8B8B00",name:"yellow 4"},{value:"#808069",name:"warmgrey"},{value:"#808000",vga:!0,css:!0,name:"olive"},{value:"#BDB76B",css:!0,name:"darkkhaki"},{value:"#FFF68F",name:"khaki 1"},{value:"#EEE685",name:"khaki 2"},{value:"#CDC673",name:"khaki 3"},{value:"#8B864E",name:"khaki 4"},{value:"#F0E68C",css:!0,name:"khaki"},{value:"#EEE8AA",css:!0,name:"palegoldenrod"},{value:"#FFFACD",name:"lemonchiffon 1"},{value:"#FFFACD",css:!0,name:"lemonchiffon"},{value:"#EEE9BF",name:"lemonchiffon 2"},{value:"#CDC9A5",name:"lemonchiffon 3"},{value:"#8B8970",name:"lemonchiffon 4"},{value:"#FFEC8B",name:"lightgoldenrod 1"},{value:"#EEDC82",name:"lightgoldenrod 2"},{value:"#CDBE70",name:"lightgoldenrod 3"},{value:"#8B814C",name:"lightgoldenrod 4"},{value:"#E3CF57",name:"banana"},{value:"#FFD700",name:"gold 1"},{value:"#FFD700",css:!0,name:"gold"},{value:"#EEC900",name:"gold 2"},{value:"#CDAD00",name:"gold 3"},{value:"#8B7500",name:"gold 4"},{value:"#FFF8DC",name:"cornsilk 1"},{value:"#FFF8DC",css:!0,name:"cornsilk"},{value:"#EEE8CD",name:"cornsilk 2"},{value:"#CDC8B1",name:"cornsilk 3"},{value:"#8B8878",name:"cornsilk 4"},{value:"#DAA520",css:!0,name:"goldenrod"},{value:"#FFC125",name:"goldenrod 1"},{value:"#EEB422",name:"goldenrod 2"},{value:"#CD9B1D",name:"goldenrod 3"},{value:"#8B6914",name:"goldenrod 4"},{value:"#B8860B",css:!0,name:"darkgoldenrod"},{value:"#FFB90F",name:"darkgoldenrod 1"},{value:"#EEAD0E",name:"darkgoldenrod 2"},{value:"#CD950C",name:"darkgoldenrod 3"},{value:"#8B6508",name:"darkgoldenrod 4"},{value:"#FFA500",name:"orange 1"},{value:"#FF8000",css:!0,name:"orange"},{value:"#EE9A00",name:"orange 2"},{value:"#CD8500",name:"orange 3"},{value:"#8B5A00",name:"orange 4"},{value:"#FFFAF0",css:!0,name:"floralwhite"},{value:"#FDF5E6",css:!0,name:"oldlace"},{value:"#F5DEB3",css:!0,name:"wheat"},{value:"#FFE7BA",name:"wheat 1"},{value:"#EED8AE",name:"wheat 2"},{value:"#CDBA96",name:"wheat 3"},{value:"#8B7E66",name:"wheat 4"},{value:"#FFE4B5",css:!0,name:"moccasin"},{value:"#FFEFD5",css:!0,name:"papayawhip"},{value:"#FFEBCD",css:!0,name:"blanchedalmond"},{value:"#FFDEAD",name:"navajowhite 1"},{value:"#FFDEAD",css:!0,name:"navajowhite"},{value:"#EECFA1",name:"navajowhite 2"},{value:"#CDB38B",name:"navajowhite 3"},{value:"#8B795E",name:"navajowhite 4"},{value:"#FCE6C9",name:"eggshell"},{value:"#D2B48C",css:!0,name:"tan"},{value:"#9C661F",name:"brick"},{value:"#FF9912",name:"cadmiumyellow"},{value:"#FAEBD7",css:!0,name:"antiquewhite"},{value:"#FFEFDB",name:"antiquewhite 1"},{value:"#EEDFCC",name:"antiquewhite 2"},{value:"#CDC0B0",name:"antiquewhite 3"},{value:"#8B8378",name:"antiquewhite 4"},{value:"#DEB887",css:!0,name:"burlywood"},{value:"#FFD39B",name:"burlywood 1"},{value:"#EEC591",name:"burlywood 2"},{value:"#CDAA7D",name:"burlywood 3"},{value:"#8B7355",name:"burlywood 4"},{value:"#FFE4C4",name:"bisque 1"},{value:"#FFE4C4",css:!0,name:"bisque"},{value:"#EED5B7",name:"bisque 2"},{value:"#CDB79E",name:"bisque 3"},{value:"#8B7D6B",name:"bisque 4"},{value:"#E3A869",name:"melon"},{value:"#ED9121",name:"carrot"},{value:"#FF8C00",css:!0,name:"darkorange"},{value:"#FF7F00",name:"darkorange 1"},{value:"#EE7600",name:"darkorange 2"},{value:"#CD6600",name:"darkorange 3"},{value:"#8B4500",name:"darkorange 4"},{value:"#FFA54F",name:"tan 1"},{value:"#EE9A49",name:"tan 2"},{value:"#CD853F",name:"tan 3"},{value:"#CD853F",css:!0,name:"peru"},{value:"#8B5A2B",name:"tan 4"},{value:"#FAF0E6",css:!0,name:"linen"},{value:"#FFDAB9",name:"peachpuff 1"},{value:"#FFDAB9",css:!0,name:"peachpuff"},{value:"#EECBAD",name:"peachpuff 2"},{value:"#CDAF95",name:"peachpuff 3"},{value:"#8B7765",name:"peachpuff 4"},{value:"#FFF5EE",name:"seashell 1"},{value:"#FFF5EE",css:!0,name:"seashell"},{value:"#EEE5DE",name:"seashell 2"},{value:"#CDC5BF",name:"seashell 3"},{value:"#8B8682",name:"seashell 4"},{value:"#F4A460",css:!0,name:"sandybrown"},{value:"#C76114",name:"rawsienna"},{value:"#D2691E",css:!0,name:"chocolate"},{value:"#FF7F24",name:"chocolate 1"},{value:"#EE7621",name:"chocolate 2"},{value:"#CD661D",name:"chocolate 3"},{value:"#8B4513",name:"chocolate 4"},{value:"#8B4513",css:!0,name:"saddlebrown"},{value:"#292421",name:"ivoryblack"},{value:"#FF7D40",name:"flesh"},{value:"#FF6103",name:"cadmiumorange"},{value:"#8A360F",name:"burntsienna"},{value:"#A0522D",css:!0,name:"sienna"},{value:"#FF8247",name:"sienna 1"},{value:"#EE7942",name:"sienna 2"},{value:"#CD6839",name:"sienna 3"},{value:"#8B4726",name:"sienna 4"},{value:"#FFA07A",name:"lightsalmon 1"},{value:"#FFA07A",css:!0,name:"lightsalmon"},{value:"#EE9572",name:"lightsalmon 2"},{value:"#CD8162",name:"lightsalmon 3"},{value:"#8B5742",name:"lightsalmon 4"},{value:"#FF7F50",css:!0,name:"coral"},{value:"#FF4500",name:"orangered 1"},{value:"#FF4500",css:!0,name:"orangered"},{value:"#EE4000",name:"orangered 2"},{value:"#CD3700",name:"orangered 3"},{value:"#8B2500",name:"orangered 4"},{value:"#5E2612",name:"sepia"},{value:"#E9967A",css:!0,name:"darksalmon"},{value:"#FF8C69",name:"salmon 1"},{value:"#EE8262",name:"salmon 2"},{value:"#CD7054",name:"salmon 3"},{value:"#8B4C39",name:"salmon 4"},{value:"#FF7256",name:"coral 1"},{value:"#EE6A50",name:"coral 2"},{value:"#CD5B45",name:"coral 3"},{value:"#8B3E2F",name:"coral 4"},{value:"#8A3324",name:"burntumber"},{value:"#FF6347",name:"tomato 1"},{value:"#FF6347",css:!0,name:"tomato"},{value:"#EE5C42",name:"tomato 2"},{value:"#CD4F39",name:"tomato 3"},{value:"#8B3626",name:"tomato 4"},{value:"#FA8072",css:!0,name:"salmon"},{value:"#FFE4E1",name:"mistyrose 1"},{value:"#FFE4E1",css:!0,name:"mistyrose"},{value:"#EED5D2",name:"mistyrose 2"},{value:"#CDB7B5",name:"mistyrose 3"},{value:"#8B7D7B",name:"mistyrose 4"},{value:"#FFFAFA",name:"snow 1"},{value:"#FFFAFA",css:!0,name:"snow"},{value:"#EEE9E9",name:"snow 2"},{value:"#CDC9C9",name:"snow 3"},{value:"#8B8989",name:"snow 4"},{value:"#BC8F8F",css:!0,name:"rosybrown"},{value:"#FFC1C1",name:"rosybrown 1"},{value:"#EEB4B4",name:"rosybrown 2"},{value:"#CD9B9B",name:"rosybrown 3"},{value:"#8B6969",name:"rosybrown 4"},{value:"#F08080",css:!0,name:"lightcoral"},{value:"#CD5C5C",css:!0,name:"indianred"},{value:"#FF6A6A",name:"indianred 1"},{value:"#EE6363",name:"indianred 2"},{value:"#8B3A3A",name:"indianred 4"},{value:"#CD5555",name:"indianred 3"},{value:"#A52A2A",css:!0,name:"brown"},{value:"#FF4040",name:"brown 1"},{value:"#EE3B3B",name:"brown 2"},{value:"#CD3333",name:"brown 3"},{value:"#8B2323",name:"brown 4"},{value:"#B22222",css:!0,name:"firebrick"},{value:"#FF3030",name:"firebrick 1"},{value:"#EE2C2C",name:"firebrick 2"},{value:"#CD2626",name:"firebrick 3"},{value:"#8B1A1A",name:"firebrick 4"},{value:"#FF0000",vga:!0,name:"red 1"},{value:"#FF0000",vga:!0,css:!0,name:"red"},{value:"#EE0000",name:"red 2"},{value:"#CD0000",name:"red 3"},{value:"#8B0000",name:"red 4"},{value:"#8B0000",css:!0,name:"darkred"},{value:"#800000",vga:!0,css:!0,name:"maroon"},{value:"#8E388E",name:"sgi beet"},{value:"#7171C6",name:"sgi slateblue"},{value:"#7D9EC0",name:"sgi lightblue"},{value:"#388E8E",name:"sgi teal"},{value:"#71C671",name:"sgi chartreuse"},{value:"#8E8E38",name:"sgi olivedrab"},{value:"#C5C1AA",name:"sgi brightgray"},{value:"#C67171",name:"sgi salmon"},{value:"#555555",name:"sgi darkgray"},{value:"#1E1E1E",name:"sgi gray 12"},{value:"#282828",name:"sgi gray 16"},{value:"#515151",name:"sgi gray 32"},{value:"#5B5B5B",name:"sgi gray 36"},{value:"#848484",name:"sgi gray 52"},{value:"#8E8E8E",name:"sgi gray 56"},{value:"#AAAAAA",name:"sgi lightgray"},{value:"#B7B7B7",name:"sgi gray 72"},{value:"#C1C1C1",name:"sgi gray 76"},{value:"#EAEAEA",name:"sgi gray 92"},{value:"#F4F4F4",name:"sgi gray 96"},{value:"#FFFFFF",vga:!0,css:!0,name:"white"},{value:"#F5F5F5",name:"white smoke"},{value:"#F5F5F5",name:"gray 96"},{value:"#DCDCDC",css:!0,name:"gainsboro"},{value:"#D3D3D3",css:!0,name:"lightgrey"},{value:"#C0C0C0",vga:!0,css:!0,name:"silver"},{value:"#A9A9A9",css:!0,name:"darkgray"},{value:"#808080",vga:!0,css:!0,name:"gray"},{value:"#696969",css:!0,name:"dimgray"},{value:"#696969",name:"gray 42"},{value:"#000000",vga:!0,css:!0,name:"black"},{value:"#FCFCFC",name:"gray 99"},{value:"#FAFAFA",name:"gray 98"},{value:"#F7F7F7",name:"gray 97"},{value:"#F2F2F2",name:"gray 95"},{value:"#F0F0F0",name:"gray 94"},{value:"#EDEDED",name:"gray 93"},{value:"#EBEBEB",name:"gray 92"},{value:"#E8E8E8",name:"gray 91"},{value:"#E5E5E5",name:"gray 90"},{value:"#E3E3E3",name:"gray 89"},{value:"#E0E0E0",name:"gray 88"},{value:"#DEDEDE",name:"gray 87"},{value:"#DBDBDB",name:"gray 86"},{value:"#D9D9D9",name:"gray 85"},{value:"#D6D6D6",name:"gray 84"},{value:"#D4D4D4",name:"gray 83"},{value:"#D1D1D1",name:"gray 82"},{value:"#CFCFCF",name:"gray 81"},{value:"#CCCCCC",name:"gray 80"},{value:"#C9C9C9",name:"gray 79"},{value:"#C7C7C7",name:"gray 78"},{value:"#C4C4C4",name:"gray 77"},{value:"#C2C2C2",name:"gray 76"},{value:"#BFBFBF",name:"gray 75"},{value:"#BDBDBD",name:"gray 74"},{value:"#BABABA",name:"gray 73"},{value:"#B8B8B8",name:"gray 72"},{value:"#B5B5B5",name:"gray 71"},{value:"#B3B3B3",name:"gray 70"},{value:"#B0B0B0",name:"gray 69"},{value:"#ADADAD",name:"gray 68"},{value:"#ABABAB",name:"gray 67"},{value:"#A8A8A8",name:"gray 66"},{value:"#A6A6A6",name:"gray 65"},{value:"#A3A3A3",name:"gray 64"},{value:"#A1A1A1",name:"gray 63"},{value:"#9E9E9E",name:"gray 62"},{value:"#9C9C9C",name:"gray 61"},{value:"#999999",name:"gray 60"},{value:"#969696",name:"gray 59"},{value:"#949494",name:"gray 58"},{value:"#919191",name:"gray 57"},{value:"#8F8F8F",name:"gray 56"},{value:"#8C8C8C",name:"gray 55"},{value:"#8A8A8A",name:"gray 54"},{value:"#878787",name:"gray 53"},{value:"#858585",name:"gray 52"},{value:"#828282",name:"gray 51"},{value:"#7F7F7F",name:"gray 50"},{value:"#7D7D7D",name:"gray 49"},{value:"#7A7A7A",name:"gray 48"},{value:"#787878",name:"gray 47"},{value:"#757575",name:"gray 46"},{value:"#737373",name:"gray 45"},{value:"#707070",name:"gray 44"},{value:"#6E6E6E",name:"gray 43"},{value:"#666666",name:"gray 40"},{value:"#636363",name:"gray 39"},{value:"#616161",name:"gray 38"},{value:"#5E5E5E",name:"gray 37"},{value:"#5C5C5C",name:"gray 36"},{value:"#595959",name:"gray 35"},{value:"#575757",name:"gray 34"},{value:"#545454",name:"gray 33"},{value:"#525252",name:"gray 32"},{value:"#4F4F4F",name:"gray 31"},{value:"#4D4D4D",name:"gray 30"},{value:"#4A4A4A",name:"gray 29"},{value:"#474747",name:"gray 28"},{value:"#454545",name:"gray 27"},{value:"#424242",name:"gray 26"},{value:"#404040",name:"gray 25"},{value:"#3D3D3D",name:"gray 24"},{value:"#3B3B3B",name:"gray 23"},{value:"#383838",name:"gray 22"},{value:"#363636",name:"gray 21"},{value:"#333333",name:"gray 20"},{value:"#303030",name:"gray 19"},{value:"#2E2E2E",name:"gray 18"},{value:"#2B2B2B",name:"gray 17"},{value:"#292929",name:"gray 16"},{value:"#262626",name:"gray 15"},{value:"#242424",name:"gray 14"},{value:"#212121",name:"gray 13"},{value:"#1F1F1F",name:"gray 12"},{value:"#1C1C1C",name:"gray 11"},{value:"#1A1A1A",name:"gray 10"},{value:"#171717",name:"gray 9"},{value:"#141414",name:"gray 8"},{value:"#121212",name:"gray 7"},{value:"#0F0F0F",name:"gray 6"},{value:"#0D0D0D",name:"gray 5"},{value:"#0A0A0A",name:"gray 4"},{value:"#080808",name:"gray 3"},{value:"#050505",name:"gray 2"},{value:"#030303",name:"gray 1"},{value:"#F5F5F5",css:!0,name:"whitesmoke"}]});var qgA=qe((AYe,E1)=>{"use strict";var kb=OgA(),PgA=kb.filter(function(t){return!!t.css}),jgA=kb.filter(function(t){return!!t.vga});E1.exports=function(t){var e=E1.exports.get(t);return e&&e.value};E1.exports.get=function(t){return t=t||"",t=t.trim().toLowerCase(),kb.filter(function(e){return e.name.toLowerCase()===t}).pop()};E1.exports.all=E1.exports.get.all=function(){return kb};E1.exports.get.css=function(t){return t?(t=t||"",t=t.trim().toLowerCase(),PgA.filter(function(e){return e.name.toLowerCase()===t}).pop()):PgA};E1.exports.get.vga=function(t){return t?(t=t||"",t=t.trim().toLowerCase(),jgA.filter(function(e){return e.name.toLowerCase()===t}).pop()):jgA}});var ElA=qe((eYe,BlA)=>{"use strict";var ljA=1/0,cjA="[object Symbol]",CjA=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tlA="\\ud800-\\udfff",IjA="\\u0300-\\u036f\\ufe20-\\ufe23",djA="\\u20d0-\\u20f0",ilA="\\u2700-\\u27bf",nlA="a-z\\xdf-\\xf6\\xf8-\\xff",BjA="\\xac\\xb1\\xd7\\xf7",EjA="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",QjA="\\u2000-\\u206f",hjA=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",olA="A-Z\\xc0-\\xd6\\xd8-\\xde",ujA="\\ufe0e\\ufe0f",alA=BjA+EjA+QjA+hjA,rlA="['\u2019]",VgA="["+alA+"]",fjA="["+IjA+djA+"]",slA="\\d+",mjA="["+ilA+"]",glA="["+nlA+"]",llA="[^"+tlA+alA+slA+ilA+nlA+olA+"]",pjA="\\ud83c[\\udffb-\\udfff]",wjA="(?:"+fjA+"|"+pjA+")",DjA="[^"+tlA+"]",clA="(?:\\ud83c[\\udde6-\\uddff]){2}",ClA="[\\ud800-\\udbff][\\udc00-\\udfff]",eu="["+olA+"]",yjA="\\u200d",WgA="(?:"+glA+"|"+llA+")",vjA="(?:"+eu+"|"+llA+")",ZgA="(?:"+rlA+"(?:d|ll|m|re|s|t|ve))?",XgA="(?:"+rlA+"(?:D|LL|M|RE|S|T|VE))?",IlA=wjA+"?",dlA="["+ujA+"]?",bjA="(?:"+yjA+"(?:"+[DjA,clA,ClA].join("|")+")"+dlA+IlA+")*",MjA=dlA+IlA+bjA,kjA="(?:"+[mjA,clA,ClA].join("|")+")"+MjA,SjA=RegExp([eu+"?"+glA+"+"+ZgA+"(?="+[VgA,eu,"$"].join("|")+")",vjA+"+"+XgA+"(?="+[VgA,eu+WgA,"$"].join("|")+")",eu+"?"+WgA+"+"+ZgA,eu+"+"+XgA,slA,kjA].join("|"),"g"),xjA=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,RjA=typeof global=="object"&&global&&global.Object===Object&&global,NjA=typeof self=="object"&&self&&self.Object===Object&&self,FjA=RjA||NjA||Function("return this")();function _jA(t){return t.match(CjA)||[]}function LjA(t){return xjA.test(t)}function GjA(t){return t.match(SjA)||[]}var KjA=Object.prototype,UjA=KjA.toString,$gA=FjA.Symbol,AlA=$gA?$gA.prototype:void 0,elA=AlA?AlA.toString:void 0;function JjA(t){if(typeof t=="string")return t;if(TjA(t))return elA?elA.call(t):"";var e=t+"";return e=="0"&&1/t==-ljA?"-0":e}function YjA(t){return!!t&&typeof t=="object"}function TjA(t){return typeof t=="symbol"||YjA(t)&&UjA.call(t)==cjA}function HjA(t){return t==null?"":JjA(t)}function zjA(t,e,A){return t=HjA(t),e=A?void 0:e,e===void 0?LjA(t)?GjA(t):_jA(t):t.match(e)||[]}BlA.exports=zjA});var RlA=qe((tYe,xlA)=>{"use strict";var OjA=1/0,PjA="[object Symbol]",jjA=/^\s+/,HK="\\ud800-\\udfff",mlA="\\u0300-\\u036f\\ufe20-\\ufe23",plA="\\u20d0-\\u20f0",wlA="\\ufe0e\\ufe0f",qjA="["+HK+"]",YK="["+mlA+plA+"]",TK="\\ud83c[\\udffb-\\udfff]",VjA="(?:"+YK+"|"+TK+")",DlA="[^"+HK+"]",ylA="(?:\\ud83c[\\udde6-\\uddff]){2}",vlA="[\\ud800-\\udbff][\\udc00-\\udfff]",blA="\\u200d",MlA=VjA+"?",klA="["+wlA+"]?",WjA="(?:"+blA+"(?:"+[DlA,ylA,vlA].join("|")+")"+klA+MlA+")*",ZjA=klA+MlA+WjA,XjA="(?:"+[DlA+YK+"?",YK,ylA,vlA,qjA].join("|")+")",$jA=RegExp(TK+"(?="+TK+")|"+XjA+ZjA,"g"),AqA=RegExp("["+blA+HK+mlA+plA+wlA+"]"),eqA=typeof global=="object"&&global&&global.Object===Object&&global,tqA=typeof self=="object"&&self&&self.Object===Object&&self,iqA=eqA||tqA||Function("return this")();function nqA(t){return t.split("")}function oqA(t,e,A,i){for(var n=t.length,o=A+(i?1:-1);i?o--:++o-1;);return A}function gqA(t){return AqA.test(t)}function QlA(t){return gqA(t)?lqA(t):nqA(t)}function lqA(t){return t.match($jA)||[]}var cqA=Object.prototype,CqA=cqA.toString,hlA=iqA.Symbol,ulA=hlA?hlA.prototype:void 0,flA=ulA?ulA.toString:void 0;function IqA(t,e,A){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),A=A>n?n:A,A<0&&(A+=n),n=e>A?0:A-e>>>0,e>>>=0;for(var o=Array(n);++i=i?t:IqA(t,e,A)}function BqA(t){return!!t&&typeof t=="object"}function EqA(t){return typeof t=="symbol"||BqA(t)&&CqA.call(t)==PjA}function QqA(t){return t==null?"":SlA(t)}function hqA(t,e,A){if(t=QqA(t),t&&(A||e===void 0))return t.replace(jjA,"");if(!t||!(e=SlA(e)))return t;var i=QlA(t),n=sqA(i,QlA(e));return dqA(i,n).join("")}xlA.exports=hqA});var XlA=qe((iYe,ZlA)=>{"use strict";var zK=1/0,uqA=9007199254740991,fqA=17976931348623157e292,NlA=NaN,mqA="[object Symbol]",pqA=/^\s+|\s+$/g,wqA=/^[-+]0x[0-9a-f]+$/i,DqA=/^0b[01]+$/i,yqA=/^0o[0-7]+$/i,qK="\\ud800-\\udfff",UlA="\\u0300-\\u036f\\ufe20-\\ufe23",JlA="\\u20d0-\\u20f0",YlA="\\ufe0e\\ufe0f",vqA="["+qK+"]",OK="["+UlA+JlA+"]",PK="\\ud83c[\\udffb-\\udfff]",bqA="(?:"+OK+"|"+PK+")",TlA="[^"+qK+"]",HlA="(?:\\ud83c[\\udde6-\\uddff]){2}",zlA="[\\ud800-\\udbff][\\udc00-\\udfff]",OlA="\\u200d",PlA=bqA+"?",jlA="["+YlA+"]?",MqA="(?:"+OlA+"(?:"+[TlA,HlA,zlA].join("|")+")"+jlA+PlA+")*",kqA=jlA+PlA+MqA,SqA="(?:"+[TlA+OK+"?",OK,HlA,zlA,vqA].join("|")+")",jK=RegExp(PK+"(?="+PK+")|"+SqA+kqA,"g"),xqA=RegExp("["+OlA+qK+UlA+JlA+YlA+"]"),RqA=parseInt,NqA=typeof global=="object"&&global&&global.Object===Object&&global,FqA=typeof self=="object"&&self&&self.Object===Object&&self,_qA=NqA||FqA||Function("return this")(),LqA=KqA("length");function GqA(t){return t.split("")}function KqA(t){return function(e){return e?.[t]}}function VK(t){return xqA.test(t)}function qlA(t){return VK(t)?JqA(t):LqA(t)}function UqA(t){return VK(t)?YqA(t):GqA(t)}function JqA(t){for(var e=jK.lastIndex=0;jK.test(t);)e++;return e}function YqA(t){return t.match(jK)||[]}var TqA=Object.prototype,HqA=TqA.toString,FlA=_qA.Symbol,zqA=Math.ceil,OqA=Math.floor,_lA=FlA?FlA.prototype:void 0,LlA=_lA?_lA.toString:void 0;function GlA(t,e){var A="";if(!t||e<1||e>uqA)return A;do e%2&&(A+=t),e=OqA(e/2),e&&(t+=t);while(e);return A}function PqA(t,e,A){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),A=A>n?n:A,A<0&&(A+=n),n=e>A?0:A-e>>>0,e>>>=0;for(var o=Array(n);++i=i?t:PqA(t,e,A)}function qqA(t,e){e=e===void 0?" ":VlA(e);var A=e.length;if(A<2)return A?GlA(e,t):e;var i=GlA(e,zqA(t/qlA(e)));return VK(e)?jqA(UqA(i),0,t).join(""):i.slice(0,t)}function KlA(t){var e=typeof t;return!!t&&(e=="object"||e=="function")}function VqA(t){return!!t&&typeof t=="object"}function WlA(t){return typeof t=="symbol"||VqA(t)&&HqA.call(t)==mqA}function WqA(t){if(!t)return t===0?t:0;if(t=XqA(t),t===zK||t===-zK){var e=t<0?-1:1;return e*fqA}return t===t?t:0}function ZqA(t){var e=WqA(t),A=e%1;return e===e?A?e-A:e:0}function XqA(t){if(typeof t=="number")return t;if(WlA(t))return NlA;if(KlA(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=KlA(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=t.replace(pqA,"");var A=DqA.test(t);return A||yqA.test(t)?RqA(t.slice(2),A?2:8):wqA.test(t)?NlA:+t}function $qA(t){return t==null?"":VlA(t)}function AVA(t,e,A){t=$qA(t),e=ZqA(e);var i=e?qlA(t):0;return e&&i{"use strict";$lA.exports=(t,e,A,i)=>{let n=(t+(i||"")).toString().includes("%");if(typeof t=="string"?[t,e,A,i]=t.match(/(0?\.?\d{1,3})%?\b/g).map(Number):i!==void 0&&(i=parseFloat(i)),typeof t!="number"||typeof e!="number"||typeof A!="number"||t>255||e>255||A>255)throw new TypeError("Expected three numbers below 256");if(typeof i=="number"){if(!n&&i>=0&&i<=1)i=Math.round(255*i);else if(n&&i>=0&&i<=100)i=Math.round(255*i/100);else throw new TypeError(`Expected alpha value (${i}) as a fraction or percentage`);i=(i|256).toString(16).slice(1)}else i="";return(A|e<<8|t<<16|1<<24).toString(16).slice(1)+i}});var tcA=qe((oYe,ecA)=>{"use strict";var jm="a-f\\d",eVA=`#?[${jm}]{3}[${jm}]?`,tVA=`#?[${jm}]{6}([${jm}]{2})?`,iVA=new RegExp(`[^#${jm}]`,"gi"),nVA=new RegExp(`^${eVA}$|^${tVA}$`,"i");ecA.exports=(t,e={})=>{if(typeof t!="string"||iVA.test(t)||!nVA.test(t))throw new TypeError("Expected a valid hex string");t=t.replace(/^#/,"");let A=1;t.length===8&&(A=Number.parseInt(t.slice(6,8),16)/255,t=t.slice(0,6)),t.length===4&&(A=Number.parseInt(t.slice(3,4).repeat(2),16)/255,t=t.slice(0,3)),t.length===3&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]);let i=Number.parseInt(t,16),n=i>>16,o=i>>8&255,a=i&255,r=typeof e.alpha=="number"?e.alpha:A;if(e.format==="array")return[n,o,a,r];if(e.format==="css"){let s=r===1?"":` / ${Number((r*100).toFixed(2))}%`;return`rgb(${n} ${o} ${a}${s})`}return{red:n,green:o,blue:a,alpha:r}}});var ocA=qe((aYe,ncA)=>{"use strict";var oVA=qgA(),aVA=ElA(),rVA=RlA(),sVA=XlA(),gVA=AcA(),icA=tcA(),WK=.75,ZK=.25,XK=16777215,lVA=49979693;ncA.exports=function(t){return"#"+IVA(String(JSON.stringify(t)))};function cVA(t){var e=aVA(t),A=[];return e.forEach(function(i){var n=oVA(i);n&&A.push(icA(rVA(n,"#"),{format:"array"}))}),A}function CVA(t){var e=[0,0,0];return t.forEach(function(A){for(var i=0;i<3;i++)e[i]+=A[i]}),[e[0]/t.length,e[1]/t.length,e[2]/t.length]}function IVA(t){var e,A=cVA(t);A.length>0&&(e=CVA(A));var i=1,n=0,o=1;if(t.length>0)for(var a=0;an&&(n=t[a].charCodeAt(0)),o=parseInt(XK/n),i=(i+t[a].charCodeAt(0)*o*lVA)%XK;var r=(i*t.length%XK).toString(16);r=sVA(r,6,r);var s=icA(r,{format:"array"});return e?gVA(ZK*s[0]+WK*e[0],ZK*s[1]+WK*e[1],ZK*s[2]+WK*e[2]):r}});var AJ=(()=>{class t{_renderer;_elementRef;onChange=A=>{};onTouched=()=>{};constructor(A,i){this._renderer=A,this._elementRef=i}setProperty(A,i){this._renderer.setProperty(this._elementRef.nativeElement,A,i)}registerOnTouched(A){this.onTouched=A}registerOnChange(A){this.onChange=A}setDisabledState(A){this.setProperty("disabled",A)}static \u0275fac=function(i){return new(i||t)(at(_i),at(ge))};static \u0275dir=OA({type:t})}return t})(),eJ=(()=>{class t extends AJ{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,features:[It]})}return t})(),Lg=new yA("");var CcA={provide:Lg,useExisting:wr(()=>uo),multi:!0};function IcA(){let t=Ob()?Ob().getUserAgent():"";return/android (\d+)/.test(t.toLowerCase())}var dcA=new yA(""),uo=(()=>{class t extends AJ{_compositionMode;_composing=!1;constructor(A,i,n){super(A,i),this._compositionMode=n,this._compositionMode==null&&(this._compositionMode=!IcA())}writeValue(A){let i=A??"";this.setProperty("value",i)}_handleInput(A){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(A)}_compositionStart(){this._composing=!0}_compositionEnd(A){this._composing=!1,this._compositionMode&&this.onChange(A)}static \u0275fac=function(i){return new(i||t)(at(_i),at(ge),at(dcA,8))};static \u0275dir=OA({type:t,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(i,n){i&1&&tA("input",function(a){return n._handleInput(a.target.value)})("blur",function(){return n.onTouched()})("compositionstart",function(){return n._compositionStart()})("compositionend",function(a){return n._compositionEnd(a.target.value)})},standalone:!1,features:[dt([CcA]),It]})}return t})();function Zb(t){return t==null||Xb(t)===0}function Xb(t){return t==null?null:Array.isArray(t)||typeof t=="string"?t.length:t instanceof Set?t.size:null}var a0=new yA(""),fu=new yA(""),BcA=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,Ag=class{static min(e){return tJ(e)}static max(e){return EcA(e)}static required(e){return QcA(e)}static requiredTrue(e){return hcA(e)}static email(e){return ucA(e)}static minLength(e){return fcA(e)}static maxLength(e){return mcA(e)}static pattern(e){return pcA(e)}static nullValidator(e){return Qp()}static compose(e){return sJ(e)}static composeAsync(e){return gJ(e)}};function tJ(t){return e=>{if(e.value==null||t==null)return null;let A=parseFloat(e.value);return!isNaN(A)&&A{if(e.value==null||t==null)return null;let A=parseFloat(e.value);return!isNaN(A)&&A>t?{max:{max:t,actual:e.value}}:null}}function QcA(t){return Zb(t.value)?{required:!0}:null}function hcA(t){return t.value===!0?null:{required:!0}}function ucA(t){return Zb(t.value)||BcA.test(t.value)?null:{email:!0}}function fcA(t){return e=>{let A=e.value?.length??Xb(e.value);return A===null||A===0?null:A{let A=e.value?.length??Xb(e.value);return A!==null&&A>t?{maxlength:{requiredLength:t,actualLength:A}}:null}}function pcA(t){if(!t)return Qp;let e,A;return typeof t=="string"?(A="",t.charAt(0)!=="^"&&(A+="^"),A+=t,t.charAt(t.length-1)!=="$"&&(A+="$"),e=new RegExp(A)):(A=t.toString(),e=t),i=>{if(Zb(i.value))return null;let n=i.value;return e.test(n)?null:{pattern:{requiredPattern:A,actualValue:n}}}}function Qp(t){return null}function iJ(t){return t!=null}function nJ(t){return lp(t)?Ms(t):t}function oJ(t){let e={};return t.forEach(A=>{e=A!=null?cA(cA({},e),A):e}),Object.keys(e).length===0?null:e}function aJ(t,e){return e.map(A=>A(t))}function wcA(t){return!t.validate}function rJ(t){return t.map(e=>wcA(e)?e:A=>e.validate(A))}function sJ(t){if(!t)return null;let e=t.filter(iJ);return e.length==0?null:function(A){return oJ(aJ(A,e))}}function $b(t){return t!=null?sJ(rJ(t)):null}function gJ(t){if(!t)return null;let e=t.filter(iJ);return e.length==0?null:function(A){let i=aJ(A,e).map(nJ);return $m(i).pipe(fe(oJ))}}function A9(t){return t!=null?gJ(rJ(t)):null}function jU(t,e){return t===null?[e]:Array.isArray(t)?[...t,e]:[t,e]}function lJ(t){return t._rawValidators}function cJ(t){return t._rawAsyncValidators}function qb(t){return t?Array.isArray(t)?t:[t]:[]}function hp(t,e){return Array.isArray(t)?t.includes(e):t===e}function qU(t,e){let A=qb(e);return qb(t).forEach(n=>{hp(A,n)||A.push(n)}),A}function VU(t,e){return qb(e).filter(A=>!hp(t,A))}var up=class{get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators=[];_rawAsyncValidators=[];_setValidators(e){this._rawValidators=e||[],this._composedValidatorFn=$b(this._rawValidators)}_setAsyncValidators(e){this._rawAsyncValidators=e||[],this._composedAsyncValidatorFn=A9(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_onDestroyCallbacks=[];_registerOnDestroy(e){this._onDestroyCallbacks.push(e)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(e=>e()),this._onDestroyCallbacks=[]}reset(e=void 0){this.control&&this.control.reset(e)}hasError(e,A){return this.control?this.control.hasError(e,A):!1}getError(e,A){return this.control?this.control.getError(e,A):null}},gC=class extends up{name;get formDirective(){return null}get path(){return null}},eg=class extends up{_parent=null;name=null;valueAccessor=null},fp=class{_cd;constructor(e){this._cd=e}get isTouched(){return this._cd?.control?._touched?.(),!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return this._cd?.control?._pristine?.(),!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return this._cd?.control?._status?.(),!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return this._cd?._submitted?.(),!!this._cd?.submitted}};var fo=(()=>{class t extends fp{constructor(A){super(A)}static \u0275fac=function(i){return new(i||t)(at(eg,2))};static \u0275dir=OA({type:t,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(i,n){i&2&&ne("ng-untouched",n.isUntouched)("ng-touched",n.isTouched)("ng-pristine",n.isPristine)("ng-dirty",n.isDirty)("ng-valid",n.isValid)("ng-invalid",n.isInvalid)("ng-pending",n.isPending)},standalone:!1,features:[It]})}return t})(),CJ=(()=>{class t extends fp{constructor(A){super(A)}static \u0275fac=function(i){return new(i||t)(at(gC,10))};static \u0275dir=OA({type:t,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["","formArray",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(i,n){i&2&&ne("ng-untouched",n.isUntouched)("ng-touched",n.isTouched)("ng-pristine",n.isPristine)("ng-dirty",n.isDirty)("ng-valid",n.isValid)("ng-invalid",n.isInvalid)("ng-pending",n.isPending)("ng-submitted",n.isSubmitted)},standalone:!1,features:[It]})}return t})();var Iu="VALID",Ep="INVALID",yB="PENDING",du="DISABLED",y2=class{},mp=class extends y2{value;source;constructor(e,A){super(),this.value=e,this.source=A}},Eu=class extends y2{pristine;source;constructor(e,A){super(),this.pristine=e,this.source=A}},Qu=class extends y2{touched;source;constructor(e,A){super(),this.touched=e,this.source=A}},vB=class extends y2{status;source;constructor(e,A){super(),this.status=e,this.source=A}},pp=class extends y2{source;constructor(e){super(),this.source=e}},hu=class extends y2{source;constructor(e){super(),this.source=e}};function e9(t){return(vp(t)?t.validators:t)||null}function DcA(t){return Array.isArray(t)?$b(t):t||null}function t9(t,e){return(vp(e)?e.asyncValidators:t)||null}function ycA(t){return Array.isArray(t)?A9(t):t||null}function vp(t){return t!=null&&!Array.isArray(t)&&typeof t=="object"}function IJ(t,e,A){let i=t.controls;if(!(e?Object.keys(i):i).length)throw new kt(1e3,"");if(!i[A])throw new kt(1001,"")}function dJ(t,e,A){t._forEachChild((i,n)=>{if(A[n]===void 0)throw new kt(1002,"")})}var bB=class{_pendingDirty=!1;_hasOwnPendingAsyncValidator=null;_pendingTouched=!1;_onCollectionChange=()=>{};_updateOn;_parent=null;_asyncValidationSubscription;_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators;_rawAsyncValidators;value;constructor(e,A){this._assignValidators(e),this._assignAsyncValidators(A)}get validator(){return this._composedValidatorFn}set validator(e){this._rawValidators=this._composedValidatorFn=e}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(e){this._rawAsyncValidators=this._composedAsyncValidatorFn=e}get parent(){return this._parent}get status(){return la(this.statusReactive)}set status(e){la(()=>this.statusReactive.set(e))}_status=Ue(()=>this.statusReactive());statusReactive=jA(void 0);get valid(){return this.status===Iu}get invalid(){return this.status===Ep}get pending(){return this.status==yB}get disabled(){return this.status===du}get enabled(){return this.status!==du}errors;get pristine(){return la(this.pristineReactive)}set pristine(e){la(()=>this.pristineReactive.set(e))}_pristine=Ue(()=>this.pristineReactive());pristineReactive=jA(!0);get dirty(){return!this.pristine}get touched(){return la(this.touchedReactive)}set touched(e){la(()=>this.touchedReactive.set(e))}_touched=Ue(()=>this.touchedReactive());touchedReactive=jA(!1);get untouched(){return!this.touched}_events=new XA;events=this._events.asObservable();valueChanges;statusChanges;get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(e){this._assignValidators(e)}setAsyncValidators(e){this._assignAsyncValidators(e)}addValidators(e){this.setValidators(qU(e,this._rawValidators))}addAsyncValidators(e){this.setAsyncValidators(qU(e,this._rawAsyncValidators))}removeValidators(e){this.setValidators(VU(e,this._rawValidators))}removeAsyncValidators(e){this.setAsyncValidators(VU(e,this._rawAsyncValidators))}hasValidator(e){return hp(this._rawValidators,e)}hasAsyncValidator(e){return hp(this._rawAsyncValidators,e)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(e={}){let A=this.touched===!1;this.touched=!0;let i=e.sourceControl??this;this._parent&&!e.onlySelf&&this._parent.markAsTouched(Ge(cA({},e),{sourceControl:i})),A&&e.emitEvent!==!1&&this._events.next(new Qu(!0,i))}markAllAsDirty(e={}){this.markAsDirty({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:this}),this._forEachChild(A=>A.markAllAsDirty(e))}markAllAsTouched(e={}){this.markAsTouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:this}),this._forEachChild(A=>A.markAllAsTouched(e))}markAsUntouched(e={}){let A=this.touched===!0;this.touched=!1,this._pendingTouched=!1;let i=e.sourceControl??this;this._forEachChild(n=>{n.markAsUntouched({onlySelf:!0,emitEvent:e.emitEvent,sourceControl:i})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e,i),A&&e.emitEvent!==!1&&this._events.next(new Qu(!1,i))}markAsDirty(e={}){let A=this.pristine===!0;this.pristine=!1;let i=e.sourceControl??this;this._parent&&!e.onlySelf&&this._parent.markAsDirty(Ge(cA({},e),{sourceControl:i})),A&&e.emitEvent!==!1&&this._events.next(new Eu(!1,i))}markAsPristine(e={}){let A=this.pristine===!1;this.pristine=!0,this._pendingDirty=!1;let i=e.sourceControl??this;this._forEachChild(n=>{n.markAsPristine({onlySelf:!0,emitEvent:e.emitEvent})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e,i),A&&e.emitEvent!==!1&&this._events.next(new Eu(!0,i))}markAsPending(e={}){this.status=yB;let A=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new vB(this.status,A)),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.markAsPending(Ge(cA({},e),{sourceControl:A}))}disable(e={}){let A=this._parentMarkedDirty(e.onlySelf);this.status=du,this.errors=null,this._forEachChild(n=>{n.disable(Ge(cA({},e),{onlySelf:!0}))}),this._updateValue();let i=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new mp(this.value,i)),this._events.next(new vB(this.status,i)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(Ge(cA({},e),{skipPristineCheck:A}),this),this._onDisabledChange.forEach(n=>n(!0))}enable(e={}){let A=this._parentMarkedDirty(e.onlySelf);this.status=Iu,this._forEachChild(i=>{i.enable(Ge(cA({},e),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(Ge(cA({},e),{skipPristineCheck:A}),this),this._onDisabledChange.forEach(i=>i(!1))}_updateAncestors(e,A){this._parent&&!e.onlySelf&&(this._parent.updateValueAndValidity(e),e.skipPristineCheck||this._parent._updatePristine({},A),this._parent._updateTouched({},A))}setParent(e){this._parent=e}getRawValue(){return this.value}updateValueAndValidity(e={}){if(this._setInitialStatus(),this._updateValue(),this.enabled){let i=this._cancelExistingSubscription();this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===Iu||this.status===yB)&&this._runAsyncValidator(i,e.emitEvent)}let A=e.sourceControl??this;e.emitEvent!==!1&&(this._events.next(new mp(this.value,A)),this._events.next(new vB(this.status,A)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(Ge(cA({},e),{sourceControl:A}))}_updateTreeValidity(e={emitEvent:!0}){this._forEachChild(A=>A._updateTreeValidity(e)),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?du:Iu}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(e,A){if(this.asyncValidator){this.status=yB,this._hasOwnPendingAsyncValidator={emitEvent:A!==!1,shouldHaveEmitted:e!==!1};let i=nJ(this.asyncValidator(this));this._asyncValidationSubscription=i.subscribe(n=>{this._hasOwnPendingAsyncValidator=null,this.setErrors(n,{emitEvent:A,shouldHaveEmitted:e})})}}_cancelExistingSubscription(){if(this._asyncValidationSubscription){this._asyncValidationSubscription.unsubscribe();let e=(this._hasOwnPendingAsyncValidator?.emitEvent||this._hasOwnPendingAsyncValidator?.shouldHaveEmitted)??!1;return this._hasOwnPendingAsyncValidator=null,e}return!1}setErrors(e,A={}){this.errors=e,this._updateControlsErrors(A.emitEvent!==!1,this,A.shouldHaveEmitted)}get(e){let A=e;return A==null||(Array.isArray(A)||(A=A.split(".")),A.length===0)?null:A.reduce((i,n)=>i&&i._find(n),this)}getError(e,A){let i=A?this.get(A):this;return i&&i.errors?i.errors[e]:null}hasError(e,A){return!!this.getError(e,A)}get root(){let e=this;for(;e._parent;)e=e._parent;return e}_updateControlsErrors(e,A,i){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),(e||i)&&this._events.next(new vB(this.status,A)),this._parent&&this._parent._updateControlsErrors(e,A,i)}_initObservables(){this.valueChanges=new $A,this.statusChanges=new $A}_calculateStatus(){return this._allControlsDisabled()?du:this.errors?Ep:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(yB)?yB:this._anyControlsHaveStatus(Ep)?Ep:Iu}_anyControlsHaveStatus(e){return this._anyControls(A=>A.status===e)}_anyControlsDirty(){return this._anyControls(e=>e.dirty)}_anyControlsTouched(){return this._anyControls(e=>e.touched)}_updatePristine(e,A){let i=!this._anyControlsDirty(),n=this.pristine!==i;this.pristine=i,this._parent&&!e.onlySelf&&this._parent._updatePristine(e,A),n&&this._events.next(new Eu(this.pristine,A))}_updateTouched(e={},A){this.touched=this._anyControlsTouched(),this._events.next(new Qu(this.touched,A)),this._parent&&!e.onlySelf&&this._parent._updateTouched(e,A)}_onDisabledChange=[];_registerOnCollectionChange(e){this._onCollectionChange=e}_setUpdateStrategy(e){vp(e)&&e.updateOn!=null&&(this._updateOn=e.updateOn)}_parentMarkedDirty(e){let A=this._parent&&this._parent.dirty;return!e&&!!A&&!this._parent._anyControlsDirty()}_find(e){return null}_assignValidators(e){this._rawValidators=Array.isArray(e)?e.slice():e,this._composedValidatorFn=DcA(this._rawValidators)}_assignAsyncValidators(e){this._rawAsyncValidators=Array.isArray(e)?e.slice():e,this._composedAsyncValidatorFn=ycA(this._rawAsyncValidators)}},MB=class extends bB{constructor(e,A,i){super(e9(A),t9(i,A)),this.controls=e,this._initObservables(),this._setUpdateStrategy(A),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}controls;registerControl(e,A){return this.controls[e]?this.controls[e]:(this.controls[e]=A,A.setParent(this),A._registerOnCollectionChange(this._onCollectionChange),A)}addControl(e,A,i={}){this.registerControl(e,A),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}removeControl(e,A={}){this.controls[e]&&this.controls[e]._registerOnCollectionChange(()=>{}),delete this.controls[e],this.updateValueAndValidity({emitEvent:A.emitEvent}),this._onCollectionChange()}setControl(e,A,i={}){this.controls[e]&&this.controls[e]._registerOnCollectionChange(()=>{}),delete this.controls[e],A&&this.registerControl(e,A),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}contains(e){return this.controls.hasOwnProperty(e)&&this.controls[e].enabled}setValue(e,A={}){dJ(this,!0,e),Object.keys(e).forEach(i=>{IJ(this,!0,i),this.controls[i].setValue(e[i],{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A)}patchValue(e,A={}){e!=null&&(Object.keys(e).forEach(i=>{let n=this.controls[i];n&&n.patchValue(e[i],{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A))}reset(e={},A={}){this._forEachChild((i,n)=>{i.reset(e?e[n]:null,Ge(cA({},A),{onlySelf:!0}))}),this._updatePristine(A,this),this._updateTouched(A,this),this.updateValueAndValidity(A),A?.emitEvent!==!1&&this._events.next(new hu(this))}getRawValue(){return this._reduceChildren({},(e,A,i)=>(e[i]=A.getRawValue(),e))}_syncPendingControls(){let e=this._reduceChildren(!1,(A,i)=>i._syncPendingControls()?!0:A);return e&&this.updateValueAndValidity({onlySelf:!0}),e}_forEachChild(e){Object.keys(this.controls).forEach(A=>{let i=this.controls[A];i&&e(i,A)})}_setUpControls(){this._forEachChild(e=>{e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(e){for(let[A,i]of Object.entries(this.controls))if(this.contains(A)&&e(i))return!0;return!1}_reduceValue(){let e={};return this._reduceChildren(e,(A,i,n)=>((i.enabled||this.disabled)&&(A[n]=i.value),A))}_reduceChildren(e,A){let i=e;return this._forEachChild((n,o)=>{i=A(i,n,o)}),i}_allControlsDisabled(){for(let e of Object.keys(this.controls))if(this.controls[e].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(e){return this.controls.hasOwnProperty(e)?this.controls[e]:null}};var Vb=class extends MB{};var kB=new yA("",{factory:()=>bp}),bp="always";function BJ(t,e){return[...e.path,t]}function uu(t,e,A=bp){i9(t,e),e.valueAccessor.writeValue(t.value),(t.disabled||A==="always")&&e.valueAccessor.setDisabledState?.(t.disabled),bcA(t,e),kcA(t,e),McA(t,e),vcA(t,e)}function wp(t,e,A=!0){let i=()=>{};e.valueAccessor&&(e.valueAccessor.registerOnChange(i),e.valueAccessor.registerOnTouched(i)),yp(t,e),t&&(e._invokeOnDestroyCallbacks(),t._registerOnCollectionChange(()=>{}))}function Dp(t,e){t.forEach(A=>{A.registerOnValidatorChange&&A.registerOnValidatorChange(e)})}function vcA(t,e){if(e.valueAccessor.setDisabledState){let A=i=>{e.valueAccessor.setDisabledState(i)};t.registerOnDisabledChange(A),e._registerOnDestroy(()=>{t._unregisterOnDisabledChange(A)})}}function i9(t,e){let A=lJ(t);e.validator!==null?t.setValidators(jU(A,e.validator)):typeof A=="function"&&t.setValidators([A]);let i=cJ(t);e.asyncValidator!==null?t.setAsyncValidators(jU(i,e.asyncValidator)):typeof i=="function"&&t.setAsyncValidators([i]);let n=()=>t.updateValueAndValidity();Dp(e._rawValidators,n),Dp(e._rawAsyncValidators,n)}function yp(t,e){let A=!1;if(t!==null){if(e.validator!==null){let n=lJ(t);if(Array.isArray(n)&&n.length>0){let o=n.filter(a=>a!==e.validator);o.length!==n.length&&(A=!0,t.setValidators(o))}}if(e.asyncValidator!==null){let n=cJ(t);if(Array.isArray(n)&&n.length>0){let o=n.filter(a=>a!==e.asyncValidator);o.length!==n.length&&(A=!0,t.setAsyncValidators(o))}}}let i=()=>{};return Dp(e._rawValidators,i),Dp(e._rawAsyncValidators,i),A}function bcA(t,e){e.valueAccessor.registerOnChange(A=>{t._pendingValue=A,t._pendingChange=!0,t._pendingDirty=!0,t.updateOn==="change"&&EJ(t,e)})}function McA(t,e){e.valueAccessor.registerOnTouched(()=>{t._pendingTouched=!0,t.updateOn==="blur"&&t._pendingChange&&EJ(t,e),t.updateOn!=="submit"&&t.markAsTouched()})}function EJ(t,e){t._pendingDirty&&t.markAsDirty(),t.setValue(t._pendingValue,{emitModelToViewChange:!1}),e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1}function kcA(t,e){let A=(i,n)=>{e.valueAccessor.writeValue(i),n&&e.viewToModelUpdate(i)};t.registerOnChange(A),e._registerOnDestroy(()=>{t._unregisterOnChange(A)})}function QJ(t,e){t==null,i9(t,e)}function ScA(t,e){return yp(t,e)}function n9(t,e){if(!t.hasOwnProperty("model"))return!1;let A=t.model;return A.isFirstChange()?!0:!Object.is(e,A.currentValue)}function xcA(t){return Object.getPrototypeOf(t.constructor)===eJ}function hJ(t,e){t._syncPendingControls(),e.forEach(A=>{let i=A.control;i.updateOn==="submit"&&i._pendingChange&&(A.viewToModelUpdate(i._pendingValue),i._pendingChange=!1)})}function o9(t,e){if(!e)return null;Array.isArray(e);let A,i,n;return e.forEach(o=>{o.constructor===uo?A=o:xcA(o)?i=o:n=o}),n||i||A||null}function RcA(t,e){let A=t.indexOf(e);A>-1&&t.splice(A,1)}var NcA={provide:gC,useExisting:wr(()=>SB)},Bu=Promise.resolve(),SB=(()=>{class t extends gC{callSetDisabledState;get submitted(){return la(this.submittedReactive)}_submitted=Ue(()=>this.submittedReactive());submittedReactive=jA(!1);_directives=new Set;form;ngSubmit=new $A;options;constructor(A,i,n){super(),this.callSetDisabledState=n,this.form=new MB({},$b(A),A9(i))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(A){Bu.then(()=>{let i=this._findContainer(A.path);A.control=i.registerControl(A.name,A.control),uu(A.control,A,this.callSetDisabledState),A.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(A)})}getControl(A){return this.form.get(A.path)}removeControl(A){Bu.then(()=>{let i=this._findContainer(A.path);i&&i.removeControl(A.name),this._directives.delete(A)})}addFormGroup(A){Bu.then(()=>{let i=this._findContainer(A.path),n=new MB({});QJ(n,A),i.registerControl(A.name,n),n.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(A){Bu.then(()=>{let i=this._findContainer(A.path);i&&i.removeControl(A.name)})}getFormGroup(A){return this.form.get(A.path)}updateModel(A,i){Bu.then(()=>{this.form.get(A.path).setValue(i)})}setValue(A){this.control.setValue(A)}onSubmit(A){return this.submittedReactive.set(!0),hJ(this.form,this._directives),this.ngSubmit.emit(A),this.form._events.next(new pp(this.control)),A?.target?.method==="dialog"}onReset(){this.resetForm()}resetForm(A=void 0){this.form.reset(A),this.submittedReactive.set(!1)}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.form._updateOn=this.options.updateOn)}_findContainer(A){return A.pop(),A.length?this.form.get(A):this.form}static \u0275fac=function(i){return new(i||t)(at(a0,10),at(fu,10),at(kB,8))};static \u0275dir=OA({type:t,selectors:[["form",3,"ngNoForm","",3,"formGroup","",3,"formArray",""],["ng-form"],["","ngForm",""]],hostBindings:function(i,n){i&1&&tA("submit",function(a){return n.onSubmit(a)})("reset",function(){return n.onReset()})},inputs:{options:[0,"ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],standalone:!1,features:[dt([NcA]),It]})}return t})();function WU(t,e){let A=t.indexOf(e);A>-1&&t.splice(A,1)}function ZU(t){return typeof t=="object"&&t!==null&&Object.keys(t).length===2&&"value"in t&&"disabled"in t}var ks=class extends bB{defaultValue=null;_onChange=[];_pendingValue;_pendingChange=!1;constructor(e=null,A,i){super(e9(A),t9(i,A)),this._applyFormState(e),this._setUpdateStrategy(A),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),vp(A)&&(A.nonNullable||A.initialValueIsDefault)&&(ZU(e)?this.defaultValue=e.value:this.defaultValue=e)}setValue(e,A={}){this.value=this._pendingValue=e,this._onChange.length&&A.emitModelToViewChange!==!1&&this._onChange.forEach(i=>i(this.value,A.emitViewToModelChange!==!1)),this.updateValueAndValidity(A)}patchValue(e,A={}){this.setValue(e,A)}reset(e=this.defaultValue,A={}){this._applyFormState(e),this.markAsPristine(A),this.markAsUntouched(A),this.setValue(this.value,A),A.overwriteDefaultValue&&(this.defaultValue=this.value),this._pendingChange=!1,A?.emitEvent!==!1&&this._events.next(new hu(this))}_updateValue(){}_anyControls(e){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(e){this._onChange.push(e)}_unregisterOnChange(e){WU(this._onChange,e)}registerOnDisabledChange(e){this._onDisabledChange.push(e)}_unregisterOnDisabledChange(e){WU(this._onDisabledChange,e)}_forEachChild(e){}_syncPendingControls(){return this.updateOn==="submit"&&(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),this._pendingChange)?(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),!0):!1}_applyFormState(e){ZU(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e}};var FcA=t=>t instanceof ks;var _cA={provide:eg,useExisting:wr(()=>Sa)},XU=Promise.resolve(),Sa=(()=>{class t extends eg{_changeDetectorRef;callSetDisabledState;control=new ks;static ngAcceptInputType_isDisabled;_registered=!1;viewModel;name="";isDisabled;model;options;update=new $A;constructor(A,i,n,o,a,r){super(),this._changeDetectorRef=a,this.callSetDisabledState=r,this._parent=A,this._setValidators(i),this._setAsyncValidators(n),this.valueAccessor=o9(this,o)}ngOnChanges(A){if(this._checkForErrors(),!this._registered||"name"in A){if(this._registered&&(this._checkName(),this.formDirective)){let i=A.name.previousValue;this.formDirective.removeControl({name:i,path:this._getPath(i)})}this._setUpControl()}"isDisabled"in A&&this._updateDisabled(A),n9(A,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(A){this.viewModel=A,this.update.emit(A)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!!(this.options&&this.options.standalone)}_setUpStandalone(){uu(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._checkName()}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),!this._isStandalone()&&this.name}_updateValue(A){XU.then(()=>{this.control.setValue(A,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(A){let i=A.isDisabled.currentValue,n=i!==0&&he(i);XU.then(()=>{n&&!this.control.disabled?this.control.disable():!n&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(A){return this._parent?BJ(A,this._parent):[A]}static \u0275fac=function(i){return new(i||t)(at(gC,9),at(a0,10),at(fu,10),at(Lg,10),at(Dt,8),at(kB,8))};static \u0275dir=OA({type:t,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"],options:[0,"ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],standalone:!1,features:[dt([_cA]),It,ti]})}return t})();var uJ=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""],standalone:!1})}return t})(),LcA={provide:Lg,useExisting:wr(()=>a9),multi:!0},a9=(()=>{class t extends eJ{writeValue(A){let i=A??"";this.setProperty("value",i)}registerOnChange(A){this.onChange=i=>{A(i==""?null:parseFloat(i))}}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["input","type","number","formControlName",""],["input","type","number","formControl",""],["input","type","number","ngModel",""]],hostBindings:function(i,n){i&1&&tA("input",function(a){return n.onChange(a.target.value)})("blur",function(){return n.onTouched()})},standalone:!1,features:[dt([LcA]),It]})}return t})();var Wb=class extends bB{constructor(e,A,i){super(e9(A),t9(i,A)),this.controls=e,this._initObservables(),this._setUpdateStrategy(A),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}controls;at(e){return this.controls[this._adjustIndex(e)]}push(e,A={}){Array.isArray(e)?e.forEach(i=>{this.controls.push(i),this._registerControl(i)}):(this.controls.push(e),this._registerControl(e)),this.updateValueAndValidity({emitEvent:A.emitEvent}),this._onCollectionChange()}insert(e,A,i={}){this.controls.splice(e,0,A),this._registerControl(A),this.updateValueAndValidity({emitEvent:i.emitEvent})}removeAt(e,A={}){let i=this._adjustIndex(e);i<0&&(i=0),this.controls[i]&&this.controls[i]._registerOnCollectionChange(()=>{}),this.controls.splice(i,1),this.updateValueAndValidity({emitEvent:A.emitEvent})}setControl(e,A,i={}){let n=this._adjustIndex(e);n<0&&(n=0),this.controls[n]&&this.controls[n]._registerOnCollectionChange(()=>{}),this.controls.splice(n,1),A&&(this.controls.splice(n,0,A),this._registerControl(A)),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}get length(){return this.controls.length}setValue(e,A={}){dJ(this,!1,e),e.forEach((i,n)=>{IJ(this,!1,n),this.at(n).setValue(i,{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A)}patchValue(e,A={}){e!=null&&(e.forEach((i,n)=>{this.at(n)&&this.at(n).patchValue(i,{onlySelf:!0,emitEvent:A.emitEvent})}),this.updateValueAndValidity(A))}reset(e=[],A={}){this._forEachChild((i,n)=>{i.reset(e[n],Ge(cA({},A),{onlySelf:!0}))}),this._updatePristine(A,this),this._updateTouched(A,this),this.updateValueAndValidity(A),A?.emitEvent!==!1&&this._events.next(new hu(this))}getRawValue(){return this.controls.map(e=>e.getRawValue())}clear(e={}){this.controls.length<1||(this._forEachChild(A=>A._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity({emitEvent:e.emitEvent}))}_adjustIndex(e){return e<0?e+this.length:e}_syncPendingControls(){let e=this.controls.reduce((A,i)=>i._syncPendingControls()?!0:A,!1);return e&&this.updateValueAndValidity({onlySelf:!0}),e}_forEachChild(e){this.controls.forEach((A,i)=>{e(A,i)})}_updateValue(){this.value=this.controls.filter(e=>e.enabled||this.disabled).map(e=>e.value)}_anyControls(e){return this.controls.some(A=>A.enabled&&e(A))}_setUpControls(){this._forEachChild(e=>this._registerControl(e))}_allControlsDisabled(){for(let e of this.controls)if(e.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(e){e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)}_find(e){return this.at(e)??null}};var GcA=(()=>{class t extends gC{callSetDisabledState;get submitted(){return la(this._submittedReactive)}set submitted(A){this._submittedReactive.set(A)}_submitted=Ue(()=>this._submittedReactive());_submittedReactive=jA(!1);_oldForm;_onCollectionChange=()=>this._updateDomValue();directives=[];constructor(A,i,n){super(),this.callSetDisabledState=n,this._setValidators(A),this._setAsyncValidators(i)}ngOnChanges(A){this.onChanges(A)}ngOnDestroy(){this.onDestroy()}onChanges(A){this._checkFormPresent(),A.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}onDestroy(){this.form&&(yp(this.form,this),this.form._onCollectionChange===this._onCollectionChange&&this.form._registerOnCollectionChange(()=>{}))}get formDirective(){return this}get path(){return[]}addControl(A){let i=this.form.get(A.path);return uu(i,A,this.callSetDisabledState),i.updateValueAndValidity({emitEvent:!1}),this.directives.push(A),i}getControl(A){return this.form.get(A.path)}removeControl(A){wp(A.control||null,A,!1),RcA(this.directives,A)}addFormGroup(A){this._setUpFormContainer(A)}removeFormGroup(A){this._cleanUpFormContainer(A)}getFormGroup(A){return this.form.get(A.path)}getFormArray(A){return this.form.get(A.path)}addFormArray(A){this._setUpFormContainer(A)}removeFormArray(A){this._cleanUpFormContainer(A)}updateModel(A,i){this.form.get(A.path).setValue(i)}onReset(){this.resetForm()}resetForm(A=void 0,i={}){this.form.reset(A,i),this._submittedReactive.set(!1)}onSubmit(A){return this.submitted=!0,hJ(this.form,this.directives),this.ngSubmit.emit(A),this.form._events.next(new pp(this.control)),A?.target?.method==="dialog"}_updateDomValue(){this.directives.forEach(A=>{let i=A.control,n=this.form.get(A.path);i!==n&&(wp(i||null,A),FcA(n)&&(uu(n,A,this.callSetDisabledState),A.control=n))}),this.form._updateTreeValidity({emitEvent:!1})}_setUpFormContainer(A){let i=this.form.get(A.path);QJ(i,A),i.updateValueAndValidity({emitEvent:!1})}_cleanUpFormContainer(A){if(this.form){let i=this.form.get(A.path);i&&ScA(i,A)&&i.updateValueAndValidity({emitEvent:!1})}}_updateRegistrations(){this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm&&this._oldForm._registerOnCollectionChange(()=>{})}_updateValidators(){i9(this.form,this),this._oldForm&&yp(this._oldForm,this)}_checkFormPresent(){this.form}static \u0275fac=function(i){return new(i||t)(at(a0,10),at(fu,10),at(kB,8))};static \u0275dir=OA({type:t,features:[It,ti]})}return t})();var r9=new yA(""),KcA={provide:eg,useExisting:wr(()=>v1)},v1=(()=>{class t extends eg{_ngModelWarningConfig;callSetDisabledState;viewModel;form;set isDisabled(A){}model;update=new $A;static _ngModelWarningSentOnce=!1;_ngModelWarningSent=!1;constructor(A,i,n,o,a){super(),this._ngModelWarningConfig=o,this.callSetDisabledState=a,this._setValidators(A),this._setAsyncValidators(i),this.valueAccessor=o9(this,n)}ngOnChanges(A){if(this._isControlChanged(A)){let i=A.form.previousValue;i&&wp(i,this,!1),uu(this.form,this,this.callSetDisabledState),this.form.updateValueAndValidity({emitEvent:!1})}n9(A,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.form&&wp(this.form,this,!1)}get path(){return[]}get control(){return this.form}viewToModelUpdate(A){this.viewModel=A,this.update.emit(A)}_isControlChanged(A){return A.hasOwnProperty("form")}static \u0275fac=function(i){return new(i||t)(at(a0,10),at(fu,10),at(Lg,10),at(r9,8),at(kB,8))};static \u0275dir=OA({type:t,selectors:[["","formControl",""]],inputs:{form:[0,"formControl","form"],isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"]},outputs:{update:"ngModelChange"},exportAs:["ngForm"],standalone:!1,features:[dt([KcA]),It,ti]})}return t})();var UcA={provide:eg,useExisting:wr(()=>s9)},s9=(()=>{class t extends eg{_ngModelWarningConfig;_added=!1;viewModel;control;name=null;set isDisabled(A){}model;update=new $A;static _ngModelWarningSentOnce=!1;_ngModelWarningSent=!1;constructor(A,i,n,o,a){super(),this._ngModelWarningConfig=a,this._parent=A,this._setValidators(i),this._setAsyncValidators(n),this.valueAccessor=o9(this,o)}ngOnChanges(A){this._added||this._setUpControl(),n9(A,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}viewToModelUpdate(A){this.viewModel=A,this.update.emit(A)}get path(){return BJ(this.name==null?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_setUpControl(){this.control=this.formDirective.addControl(this),this._added=!0}static \u0275fac=function(i){return new(i||t)(at(gC,13),at(a0,10),at(fu,10),at(Lg,10),at(r9,8))};static \u0275dir=OA({type:t,selectors:[["","formControlName",""]],inputs:{name:[0,"formControlName","name"],isDisabled:[0,"disabled","isDisabled"],model:[0,"ngModel","model"]},outputs:{update:"ngModelChange"},standalone:!1,features:[dt([UcA]),It,ti]})}return t})();var JcA={provide:gC,useExisting:wr(()=>v2)},v2=(()=>{class t extends GcA{form=null;ngSubmit=new $A;get control(){return this.form}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","formGroup",""]],hostBindings:function(i,n){i&1&&tA("submit",function(a){return n.onSubmit(a)})("reset",function(){return n.onReset()})},inputs:{form:[0,"formGroup","form"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],standalone:!1,features:[dt([JcA]),It]})}return t})();function YcA(t){return typeof t=="number"?t:parseFloat(t)}var TcA=(()=>{class t{_validator=Qp;_onChange;_enabled;ngOnChanges(A){if(this.inputName in A){let i=this.normalizeInput(A[this.inputName].currentValue);this._enabled=this.enabled(i),this._validator=this._enabled?this.createValidator(i):Qp,this._onChange&&this._onChange()}}validate(A){return this._validator(A)}registerOnValidatorChange(A){this._onChange=A}enabled(A){return A!=null}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,features:[ti]})}return t})();var HcA={provide:a0,useExisting:wr(()=>g9),multi:!0},g9=(()=>{class t extends TcA{min;inputName="min";normalizeInput=A=>YcA(A);createValidator=A=>tJ(A);static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["input","type","number","min","","formControlName",""],["input","type","number","min","","formControl",""],["input","type","number","min","","ngModel",""]],hostVars:1,hostBindings:function(i,n){i&2&&ie("min",n._enabled?n.min:null)},inputs:{min:"min"},standalone:!1,features:[dt([HcA]),It]})}return t})();var fJ=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();function $U(t){return!!t&&(t.asyncValidators!==void 0||t.validators!==void 0||t.updateOn!==void 0)}var mJ=(()=>{class t{useNonNullable=!1;get nonNullable(){let A=new t;return A.useNonNullable=!0,A}group(A,i=null){let n=this._reduceControls(A),o={};return $U(i)?o=i:i!==null&&(o.validators=i.validator,o.asyncValidators=i.asyncValidator),new MB(n,o)}record(A,i=null){let n=this._reduceControls(A);return new Vb(n,i)}control(A,i,n){let o={};return this.useNonNullable?($U(i)?o=i:(o.validators=i,o.asyncValidators=n),new ks(A,Ge(cA({},o),{nonNullable:!0}))):new ks(A,i,n)}array(A,i,n){let o=A.map(a=>this._createControl(a));return new Wb(o,i,n)}_reduceControls(A){let i={};return Object.keys(A).forEach(n=>{i[n]=this._createControl(A[n])}),i}_createControl(A){if(A instanceof ks)return A;if(A instanceof bB)return A;if(Array.isArray(A)){let i=A[0],n=A.length>1?A[1]:null,o=A.length>2?A[2]:null;return this.control(i,n,o)}else return this.control(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var Nn=(()=>{class t{static withConfig(A){return{ngModule:t,providers:[{provide:kB,useValue:A.callSetDisabledState??bp}]}}static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[fJ]})}return t})(),r0=(()=>{class t{static withConfig(A){return{ngModule:t,providers:[{provide:r9,useValue:A.warnOnNgModelWithFormControl??"always"},{provide:kB,useValue:A.callSetDisabledState??bp}]}}static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[fJ]})}return t})();function b1(t){return t.buttons===0||t.detail===0}function M1(t){let e=t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0];return!!e&&e.identifier===-1&&(e.radiusX==null||e.radiusX===1)&&(e.radiusY==null||e.radiusY===1)}var l9;function pJ(){if(l9==null){let t=typeof document<"u"?document.head:null;l9=!!(t&&(t.createShadowRoot||t.attachShadow))}return l9}function c9(t){if(pJ()){let e=t.getRootNode?t.getRootNode():null;if(typeof ShadowRoot<"u"&&ShadowRoot&&e instanceof ShadowRoot)return e}return null}function mu(){let t=typeof document<"u"&&document?document.activeElement:null;for(;t&&t.shadowRoot;){let e=t.shadowRoot.activeElement;if(e===t)break;t=e}return t}function Jr(t){return t.composedPath?t.composedPath()[0]:t.target}var C9;try{C9=typeof Intl<"u"&&Intl.v8BreakIterator}catch{C9=!1}var Ii=(()=>{class t{_platformId=h(np);isBrowser=this._platformId?sC(this._platformId):typeof document=="object"&&!!document;EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent);TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent);BLINK=this.isBrowser&&!!(window.chrome||C9)&&typeof CSS<"u"&&!this.EDGE&&!this.TRIDENT;WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT;IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!("MSStream"in window);FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent);ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT;SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT;constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var pu;function wJ(){if(pu==null&&typeof window<"u")try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:()=>pu=!0}))}finally{pu=pu||!1}return pu}function b2(t){return wJ()?t:!!t.capture}function tg(t,e=0){return Mp(t)?Number(t):arguments.length===2?e:0}function Mp(t){return!isNaN(parseFloat(t))&&!isNaN(Number(t))}function xs(t){return t instanceof ge?t.nativeElement:t}var DJ=new yA("cdk-input-modality-detector-options"),yJ={ignoreKeys:[18,17,224,91,16]},vJ=650,I9={passive:!0,capture:!0},bJ=(()=>{class t{_platform=h(Ii);_listenerCleanups;modalityDetected;modalityChanged;get mostRecentModality(){return this._modality.value}_mostRecentTarget=null;_modality=new Ht(null);_options;_lastTouchMs=0;_onKeydown=A=>{this._options?.ignoreKeys?.some(i=>i===A.keyCode)||(this._modality.next("keyboard"),this._mostRecentTarget=Jr(A))};_onMousedown=A=>{Date.now()-this._lastTouchMs{if(M1(A)){this._modality.next("keyboard");return}this._lastTouchMs=Date.now(),this._modality.next("touch"),this._mostRecentTarget=Jr(A)};constructor(){let A=h(Oe),i=h(Xt),n=h(DJ,{optional:!0});if(this._options=cA(cA({},yJ),n),this.modalityDetected=this._modality.pipe(Fg(1)),this.modalityChanged=this.modalityDetected.pipe(Vl()),this._platform.isBrowser){let o=h(Kr).createRenderer(null,null);this._listenerCleanups=A.runOutsideAngular(()=>[o.listen(i,"keydown",this._onKeydown,I9),o.listen(i,"mousedown",this._onMousedown,I9),o.listen(i,"touchstart",this._onTouchstart,I9)])}}ngOnDestroy(){this._modality.complete(),this._listenerCleanups?.forEach(A=>A())}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),wu=(function(t){return t[t.IMMEDIATE=0]="IMMEDIATE",t[t.EVENTUAL=1]="EVENTUAL",t})(wu||{}),MJ=new yA("cdk-focus-monitor-default-options"),kp=b2({passive:!0,capture:!0}),ar=(()=>{class t{_ngZone=h(Oe);_platform=h(Ii);_inputModalityDetector=h(bJ);_origin=null;_lastFocusOrigin=null;_windowFocused=!1;_windowFocusTimeoutId;_originTimeoutId;_originFromTouchInteraction=!1;_elementInfo=new Map;_monitoredElementCount=0;_rootNodeFocusListenerCount=new Map;_detectionMode;_windowFocusListener=()=>{this._windowFocused=!0,this._windowFocusTimeoutId=setTimeout(()=>this._windowFocused=!1)};_document=h(Xt);_stopInputModalityDetector=new XA;constructor(){let A=h(MJ,{optional:!0});this._detectionMode=A?.detectionMode||wu.IMMEDIATE}_rootNodeFocusAndBlurListener=A=>{let i=Jr(A);for(let n=i;n;n=n.parentElement)A.type==="focus"?this._onFocus(A,n):this._onBlur(A,n)};monitor(A,i=!1){let n=xs(A);if(!this._platform.isBrowser||n.nodeType!==1)return se();let o=c9(n)||this._document,a=this._elementInfo.get(n);if(a)return i&&(a.checkChildren=!0),a.subject;let r={checkChildren:i,subject:new XA,rootNode:o};return this._elementInfo.set(n,r),this._registerGlobalListeners(r),r.subject}stopMonitoring(A){let i=xs(A),n=this._elementInfo.get(i);n&&(n.subject.complete(),this._setClasses(i),this._elementInfo.delete(i),this._removeGlobalListeners(n))}focusVia(A,i,n){let o=xs(A),a=this._document.activeElement;o===a?this._getClosestElementsInfo(o).forEach(([r,s])=>this._originChanged(r,i,s)):(this._setOrigin(i),typeof o.focus=="function"&&o.focus(n))}ngOnDestroy(){this._elementInfo.forEach((A,i)=>this.stopMonitoring(i))}_getWindow(){return this._document.defaultView||window}_getFocusOrigin(A){return this._origin?this._originFromTouchInteraction?this._shouldBeAttributedToTouch(A)?"touch":"program":this._origin:this._windowFocused&&this._lastFocusOrigin?this._lastFocusOrigin:A&&this._isLastInteractionFromInputLabel(A)?"mouse":"program"}_shouldBeAttributedToTouch(A){return this._detectionMode===wu.EVENTUAL||!!A?.contains(this._inputModalityDetector._mostRecentTarget)}_setClasses(A,i){A.classList.toggle("cdk-focused",!!i),A.classList.toggle("cdk-touch-focused",i==="touch"),A.classList.toggle("cdk-keyboard-focused",i==="keyboard"),A.classList.toggle("cdk-mouse-focused",i==="mouse"),A.classList.toggle("cdk-program-focused",i==="program")}_setOrigin(A,i=!1){this._ngZone.runOutsideAngular(()=>{if(this._origin=A,this._originFromTouchInteraction=A==="touch"&&i,this._detectionMode===wu.IMMEDIATE){clearTimeout(this._originTimeoutId);let n=this._originFromTouchInteraction?vJ:1;this._originTimeoutId=setTimeout(()=>this._origin=null,n)}})}_onFocus(A,i){let n=this._elementInfo.get(i),o=Jr(A);!n||!n.checkChildren&&i!==o||this._originChanged(i,this._getFocusOrigin(o),n)}_onBlur(A,i){let n=this._elementInfo.get(i);!n||n.checkChildren&&A.relatedTarget instanceof Node&&i.contains(A.relatedTarget)||(this._setClasses(i),this._emitOrigin(n,null))}_emitOrigin(A,i){A.subject.observers.length&&this._ngZone.run(()=>A.subject.next(i))}_registerGlobalListeners(A){if(!this._platform.isBrowser)return;let i=A.rootNode,n=this._rootNodeFocusListenerCount.get(i)||0;n||this._ngZone.runOutsideAngular(()=>{i.addEventListener("focus",this._rootNodeFocusAndBlurListener,kp),i.addEventListener("blur",this._rootNodeFocusAndBlurListener,kp)}),this._rootNodeFocusListenerCount.set(i,n+1),++this._monitoredElementCount===1&&(this._ngZone.runOutsideAngular(()=>{this._getWindow().addEventListener("focus",this._windowFocusListener)}),this._inputModalityDetector.modalityDetected.pipe(Bt(this._stopInputModalityDetector)).subscribe(o=>{this._setOrigin(o,!0)}))}_removeGlobalListeners(A){let i=A.rootNode;if(this._rootNodeFocusListenerCount.has(i)){let n=this._rootNodeFocusListenerCount.get(i);n>1?this._rootNodeFocusListenerCount.set(i,n-1):(i.removeEventListener("focus",this._rootNodeFocusAndBlurListener,kp),i.removeEventListener("blur",this._rootNodeFocusAndBlurListener,kp),this._rootNodeFocusListenerCount.delete(i))}--this._monitoredElementCount||(this._getWindow().removeEventListener("focus",this._windowFocusListener),this._stopInputModalityDetector.next(),clearTimeout(this._windowFocusTimeoutId),clearTimeout(this._originTimeoutId))}_originChanged(A,i,n){this._setClasses(A,i),this._emitOrigin(n,i),this._lastFocusOrigin=i}_getClosestElementsInfo(A){let i=[];return this._elementInfo.forEach((n,o)=>{(o===A||n.checkChildren&&o.contains(A))&&i.push([o,n])}),i}_isLastInteractionFromInputLabel(A){let{_mostRecentTarget:i,mostRecentModality:n}=this._inputModalityDetector;if(n!=="mouse"||!i||i===A||A.nodeName!=="INPUT"&&A.nodeName!=="TEXTAREA"||A.disabled)return!1;let o=A.labels;if(o){for(let a=0;a{class t{_elementRef=h(ge);_focusMonitor=h(ar);_monitorSubscription;_focusOrigin=null;cdkFocusChange=new $A;constructor(){}get focusOrigin(){return this._focusOrigin}ngAfterViewInit(){let A=this._elementRef.nativeElement;this._monitorSubscription=this._focusMonitor.monitor(A,A.nodeType===1&&A.hasAttribute("cdkMonitorSubtreeFocus")).subscribe(i=>{this._focusOrigin=i,this.cdkFocusChange.emit(i)})}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._monitorSubscription?.unsubscribe()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkMonitorElementFocus",""],["","cdkMonitorSubtreeFocus",""]],outputs:{cdkFocusChange:"cdkFocusChange"},exportAs:["cdkMonitorFocus"]})}return t})();var Sp=new WeakMap,Xn=(()=>{class t{_appRef;_injector=h(ft);_environmentInjector=h(Gr);load(A){let i=this._appRef=this._appRef||this._injector.get(oC),n=Sp.get(i);n||(n={loaders:new Set,refs:[]},Sp.set(i,n),i.onDestroy(()=>{Sp.get(i)?.refs.forEach(o=>o.destroy()),Sp.delete(i)})),n.loaders.has(A)||(n.loaders.add(A),n.refs.push(Ip(A,{environmentInjector:this._environmentInjector})))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var M2=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],exportAs:["cdkVisuallyHidden"],decls:0,vars:0,template:function(i,n){},styles:[`.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0} -`],encapsulation:2,changeDetection:0})}return t})(),xp;function zcA(){if(xp===void 0&&(xp=null,typeof window<"u")){let t=window;t.trustedTypes!==void 0&&(xp=t.trustedTypes.createPolicy("angular#components",{createHTML:e=>e}))}return xp}function k1(t){return zcA()?.createHTML(t)||t}function kJ(t,e,A){let i=A.sanitize(Wl.HTML,e);t.innerHTML=k1(i||"")}function xB(t){return Array.isArray(t)?t:[t]}var SJ=new Set,S1,RB=(()=>{class t{_platform=h(Ii);_nonce=h(QU,{optional:!0});_matchMedia;constructor(){this._matchMedia=this._platform.isBrowser&&window.matchMedia?window.matchMedia.bind(window):PcA}matchMedia(A){return(this._platform.WEBKIT||this._platform.BLINK)&&OcA(A,this._nonce),this._matchMedia(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function OcA(t,e){if(!SJ.has(t))try{S1||(S1=document.createElement("style"),e&&S1.setAttribute("nonce",e),S1.setAttribute("type","text/css"),document.head.appendChild(S1)),S1.sheet&&(S1.sheet.insertRule(`@media ${t} {body{ }}`,0),SJ.add(t))}catch(A){console.error(A)}}function PcA(t){return{matches:t==="all"||t==="",media:t,addListener:()=>{},removeListener:()=>{}}}var Du=(()=>{class t{_mediaMatcher=h(RB);_zone=h(Oe);_queries=new Map;_destroySubject=new XA;constructor(){}ngOnDestroy(){this._destroySubject.next(),this._destroySubject.complete()}isMatched(A){return xJ(xB(A)).some(n=>this._registerQuery(n).mql.matches)}observe(A){let n=xJ(xB(A)).map(a=>this._registerQuery(a).observable),o=Ir(n);return o=Xm(o.pipe(oo(1)),o.pipe(Fg(1),Os(0))),o.pipe(fe(a=>{let r={matches:!1,breakpoints:{}};return a.forEach(({matches:s,query:g})=>{r.matches=r.matches||s,r.breakpoints[g]=s}),r}))}_registerQuery(A){if(this._queries.has(A))return this._queries.get(A);let i=this._mediaMatcher.matchMedia(A),o={observable:new $i(a=>{let r=s=>this._zone.run(()=>a.next(s));return i.addListener(r),()=>{i.removeListener(r)}}).pipe(cn(i),fe(({matches:a})=>({query:A,matches:a})),Bt(this._destroySubject)),mql:i};return this._queries.set(A,o),o}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function xJ(t){return t.map(e=>e.split(",")).reduce((e,A)=>e.concat(A)).map(e=>e.trim())}function jcA(t){if(t.type==="characterData"&&t.target instanceof Comment)return!0;if(t.type==="childList"){for(let e=0;e{class t{create(A){return typeof MutationObserver>"u"?null:new MutationObserver(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),NJ=(()=>{class t{_mutationObserverFactory=h(RJ);_observedElements=new Map;_ngZone=h(Oe);constructor(){}ngOnDestroy(){this._observedElements.forEach((A,i)=>this._cleanupObserver(i))}observe(A){let i=xs(A);return new $i(n=>{let a=this._observeElement(i).pipe(fe(r=>r.filter(s=>!jcA(s))),Ze(r=>!!r.length)).subscribe(r=>{this._ngZone.run(()=>{n.next(r)})});return()=>{a.unsubscribe(),this._unobserveElement(i)}})}_observeElement(A){return this._ngZone.runOutsideAngular(()=>{if(this._observedElements.has(A))this._observedElements.get(A).count++;else{let i=new XA,n=this._mutationObserverFactory.create(o=>i.next(o));n&&n.observe(A,{characterData:!0,childList:!0,subtree:!0}),this._observedElements.set(A,{observer:n,stream:i,count:1})}return this._observedElements.get(A).stream})}_unobserveElement(A){this._observedElements.has(A)&&(this._observedElements.get(A).count--,this._observedElements.get(A).count||this._cleanupObserver(A))}_cleanupObserver(A){if(this._observedElements.has(A)){let{observer:i,stream:n}=this._observedElements.get(A);i&&i.disconnect(),n.complete(),this._observedElements.delete(A)}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),FJ=(()=>{class t{_contentObserver=h(NJ);_elementRef=h(ge);event=new $A;get disabled(){return this._disabled}set disabled(A){this._disabled=A,this._disabled?this._unsubscribe():this._subscribe()}_disabled=!1;get debounce(){return this._debounce}set debounce(A){this._debounce=tg(A),this._subscribe()}_debounce;_currentSubscription=null;constructor(){}ngAfterContentInit(){!this._currentSubscription&&!this.disabled&&this._subscribe()}ngOnDestroy(){this._unsubscribe()}_subscribe(){this._unsubscribe();let A=this._contentObserver.observe(this._elementRef);this._currentSubscription=(this.debounce?A.pipe(Os(this.debounce)):A).subscribe(this.event)}_unsubscribe(){this._currentSubscription?.unsubscribe()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkObserveContent",""]],inputs:{disabled:[2,"cdkObserveContentDisabled","disabled",he],debounce:"debounce"},outputs:{event:"cdkObserveContent"},exportAs:["cdkObserveContent"]})}return t})(),Rp=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[RJ]})}return t})();var NB=(()=>{class t{_platform=h(Ii);constructor(){}isDisabled(A){return A.hasAttribute("disabled")}isVisible(A){return VcA(A)&&getComputedStyle(A).visibility==="visible"}isTabbable(A){if(!this._platform.isBrowser)return!1;let i=qcA(i0A(A));if(i&&(_J(i)===-1||!this.isVisible(i)))return!1;let n=A.nodeName.toLowerCase(),o=_J(A);return A.hasAttribute("contenteditable")?o!==-1:n==="iframe"||n==="object"||this._platform.WEBKIT&&this._platform.IOS&&!e0A(A)?!1:n==="audio"?A.hasAttribute("controls")?o!==-1:!1:n==="video"?o===-1?!1:o!==null?!0:this._platform.FIREFOX||A.hasAttribute("controls"):A.tabIndex>=0}isFocusable(A,i){return t0A(A)&&!this.isDisabled(A)&&(i?.ignoreVisibility||this.isVisible(A))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function qcA(t){try{return t.frameElement}catch{return null}}function VcA(t){return!!(t.offsetWidth||t.offsetHeight||typeof t.getClientRects=="function"&&t.getClientRects().length)}function WcA(t){let e=t.nodeName.toLowerCase();return e==="input"||e==="select"||e==="button"||e==="textarea"}function ZcA(t){return $cA(t)&&t.type=="hidden"}function XcA(t){return A0A(t)&&t.hasAttribute("href")}function $cA(t){return t.nodeName.toLowerCase()=="input"}function A0A(t){return t.nodeName.toLowerCase()=="a"}function KJ(t){if(!t.hasAttribute("tabindex")||t.tabIndex===void 0)return!1;let e=t.getAttribute("tabindex");return!!(e&&!isNaN(parseInt(e,10)))}function _J(t){if(!KJ(t))return null;let e=parseInt(t.getAttribute("tabindex")||"",10);return isNaN(e)?-1:e}function e0A(t){let e=t.nodeName.toLowerCase(),A=e==="input"&&t.type;return A==="text"||A==="password"||e==="select"||e==="textarea"}function t0A(t){return ZcA(t)?!1:WcA(t)||XcA(t)||t.hasAttribute("contenteditable")||KJ(t)}function i0A(t){return t.ownerDocument&&t.ownerDocument.defaultView||window}var Np=class{_element;_checker;_ngZone;_document;_injector;_startAnchor=null;_endAnchor=null;_hasAttached=!1;startAnchorListener=()=>this.focusLastTabbableElement();endAnchorListener=()=>this.focusFirstTabbableElement();get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(e,this._startAnchor),this._toggleAnchorTabIndex(e,this._endAnchor))}_enabled=!0;constructor(e,A,i,n,o=!1,a){this._element=e,this._checker=A,this._ngZone=i,this._document=n,this._injector=a,o||this.attachAnchors()}destroy(){let e=this._startAnchor,A=this._endAnchor;e&&(e.removeEventListener("focus",this.startAnchorListener),e.remove()),A&&(A.removeEventListener("focus",this.endAnchorListener),A.remove()),this._startAnchor=this._endAnchor=null,this._hasAttached=!1}attachAnchors(){return this._hasAttached?!0:(this._ngZone.runOutsideAngular(()=>{this._startAnchor||(this._startAnchor=this._createAnchor(),this._startAnchor.addEventListener("focus",this.startAnchorListener)),this._endAnchor||(this._endAnchor=this._createAnchor(),this._endAnchor.addEventListener("focus",this.endAnchorListener))}),this._element.parentNode&&(this._element.parentNode.insertBefore(this._startAnchor,this._element),this._element.parentNode.insertBefore(this._endAnchor,this._element.nextSibling),this._hasAttached=!0),this._hasAttached)}focusInitialElementWhenReady(e){return new Promise(A=>{this._executeOnStable(()=>A(this.focusInitialElement(e)))})}focusFirstTabbableElementWhenReady(e){return new Promise(A=>{this._executeOnStable(()=>A(this.focusFirstTabbableElement(e)))})}focusLastTabbableElementWhenReady(e){return new Promise(A=>{this._executeOnStable(()=>A(this.focusLastTabbableElement(e)))})}_getRegionBoundary(e){let A=this._element.querySelectorAll(`[cdk-focus-region-${e}], [cdkFocusRegion${e}], [cdk-focus-${e}]`);return e=="start"?A.length?A[0]:this._getFirstTabbableElement(this._element):A.length?A[A.length-1]:this._getLastTabbableElement(this._element)}focusInitialElement(e){let A=this._element.querySelector("[cdk-focus-initial], [cdkFocusInitial]");if(A){if(!this._checker.isFocusable(A)){let i=this._getFirstTabbableElement(A);return i?.focus(e),!!i}return A.focus(e),!0}return this.focusFirstTabbableElement(e)}focusFirstTabbableElement(e){let A=this._getRegionBoundary("start");return A&&A.focus(e),!!A}focusLastTabbableElement(e){let A=this._getRegionBoundary("end");return A&&A.focus(e),!!A}hasAttached(){return this._hasAttached}_getFirstTabbableElement(e){if(this._checker.isFocusable(e)&&this._checker.isTabbable(e))return e;let A=e.children;for(let i=0;i=0;i--){let n=A[i].nodeType===this._document.ELEMENT_NODE?this._getLastTabbableElement(A[i]):null;if(n)return n}return null}_createAnchor(){let e=this._document.createElement("div");return this._toggleAnchorTabIndex(this._enabled,e),e.classList.add("cdk-visually-hidden"),e.classList.add("cdk-focus-trap-anchor"),e.setAttribute("aria-hidden","true"),e}_toggleAnchorTabIndex(e,A){e?A.setAttribute("tabindex","0"):A.removeAttribute("tabindex")}toggleAnchors(e){this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(e,this._startAnchor),this._toggleAnchorTabIndex(e,this._endAnchor))}_executeOnStable(e){this._injector?Yn(e,{injector:this._injector}):setTimeout(e)}},yu=(()=>{class t{_checker=h(NB);_ngZone=h(Oe);_document=h(Xt);_injector=h(ft);constructor(){h(Xn).load(M2)}create(A,i=!1){return new Np(A,this._checker,this._ngZone,this._document,i,this._injector)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var UJ=new yA("liveAnnouncerElement",{providedIn:"root",factory:()=>null}),JJ=new yA("LIVE_ANNOUNCER_DEFAULT_OPTIONS"),n0A=0,vu=(()=>{class t{_ngZone=h(Oe);_defaultOptions=h(JJ,{optional:!0});_liveElement;_document=h(Xt);_sanitizer=h($s);_previousTimeout;_currentPromise;_currentResolve;constructor(){let A=h(UJ,{optional:!0});this._liveElement=A||this._createLiveElement()}announce(A,...i){let n=this._defaultOptions,o,a;return i.length===1&&typeof i[0]=="number"?a=i[0]:[o,a]=i,this.clear(),clearTimeout(this._previousTimeout),o||(o=n&&n.politeness?n.politeness:"polite"),a==null&&n&&(a=n.duration),this._liveElement.setAttribute("aria-live",o),this._liveElement.id&&this._exposeAnnouncerToModals(this._liveElement.id),this._ngZone.runOutsideAngular(()=>(this._currentPromise||(this._currentPromise=new Promise(r=>this._currentResolve=r)),clearTimeout(this._previousTimeout),this._previousTimeout=setTimeout(()=>{!A||typeof A=="string"?this._liveElement.textContent=A:kJ(this._liveElement,A,this._sanitizer),typeof a=="number"&&(this._previousTimeout=setTimeout(()=>this.clear(),a)),this._currentResolve?.(),this._currentPromise=this._currentResolve=void 0},100),this._currentPromise))}clear(){this._liveElement&&(this._liveElement.textContent="")}ngOnDestroy(){clearTimeout(this._previousTimeout),this._liveElement?.remove(),this._liveElement=null,this._currentResolve?.(),this._currentPromise=this._currentResolve=void 0}_createLiveElement(){let A="cdk-live-announcer-element",i=this._document.getElementsByClassName(A),n=this._document.createElement("div");for(let o=0;o .cdk-overlay-container [aria-modal="true"]');for(let n=0;n{class t{_platform=h(Ii);_hasCheckedHighContrastMode=!1;_document=h(Xt);_breakpointSubscription;constructor(){this._breakpointSubscription=h(Du).observe("(forced-colors: active)").subscribe(()=>{this._hasCheckedHighContrastMode&&(this._hasCheckedHighContrastMode=!1,this._applyBodyHighContrastModeCssClasses())})}getHighContrastMode(){if(!this._platform.isBrowser)return k2.NONE;let A=this._document.createElement("div");A.style.backgroundColor="rgb(1,2,3)",A.style.position="absolute",this._document.body.appendChild(A);let i=this._document.defaultView||window,n=i&&i.getComputedStyle?i.getComputedStyle(A):null,o=(n&&n.backgroundColor||"").replace(/ /g,"");switch(A.remove(),o){case"rgb(0,0,0)":case"rgb(45,50,54)":case"rgb(32,32,32)":return k2.WHITE_ON_BLACK;case"rgb(255,255,255)":case"rgb(255,250,239)":return k2.BLACK_ON_WHITE}return k2.NONE}ngOnDestroy(){this._breakpointSubscription.unsubscribe()}_applyBodyHighContrastModeCssClasses(){if(!this._hasCheckedHighContrastMode&&this._platform.isBrowser&&this._document.body){let A=this._document.body.classList;A.remove(B9,LJ,GJ),this._hasCheckedHighContrastMode=!0;let i=this.getHighContrastMode();i===k2.BLACK_ON_WHITE?A.add(B9,LJ):i===k2.WHITE_ON_BLACK&&A.add(B9,GJ)}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),bu=(()=>{class t{constructor(){h(YJ)._applyBodyHighContrastModeCssClasses()}static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Rp]})}return t})();var E9={},an=class t{_appId=h(ip);static _infix=`a${Math.floor(Math.random()*1e5).toString()}`;getId(e,A=!1){return this._appId!=="ng"&&(e+=this._appId),E9.hasOwnProperty(e)||(E9[e]=0),`${e}${A?t._infix+"-":""}${E9[e]++}`}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var o0A=200,Fp=class{_letterKeyStream=new XA;_items=[];_selectedItemIndex=-1;_pressedLetters=[];_skipPredicateFn;_selectedItem=new XA;selectedItem=this._selectedItem;constructor(e,A){let i=typeof A?.debounceInterval=="number"?A.debounceInterval:o0A;A?.skipPredicate&&(this._skipPredicateFn=A.skipPredicate),this.setItems(e),this._setupKeyHandler(i)}destroy(){this._pressedLetters=[],this._letterKeyStream.complete(),this._selectedItem.complete()}setCurrentSelectedItemIndex(e){this._selectedItemIndex=e}setItems(e){this._items=e}handleKey(e){let A=e.keyCode;e.key&&e.key.length===1?this._letterKeyStream.next(e.key.toLocaleUpperCase()):(A>=65&&A<=90||A>=48&&A<=57)&&this._letterKeyStream.next(String.fromCharCode(A))}isTyping(){return this._pressedLetters.length>0}reset(){this._pressedLetters=[]}_setupKeyHandler(e){this._letterKeyStream.pipe(oi(A=>this._pressedLetters.push(A)),Os(e),Ze(()=>this._pressedLetters.length>0),fe(()=>this._pressedLetters.join("").toLocaleUpperCase())).subscribe(A=>{for(let i=1;it[A]):t.altKey||t.shiftKey||t.ctrlKey||t.metaKey}var FB=class{_items;_activeItemIndex=jA(-1);_activeItem=jA(null);_wrap=!1;_typeaheadSubscription=Jn.EMPTY;_itemChangesSubscription;_vertical=!0;_horizontal=null;_allowedModifierKeys=[];_homeAndEnd=!1;_pageUpAndDown={enabled:!1,delta:10};_effectRef;_typeahead;_skipPredicateFn=e=>e.disabled;constructor(e,A){this._items=e,e instanceof ol?this._itemChangesSubscription=e.changes.subscribe(i=>this._itemsChanged(i.toArray())):w1(e)&&(this._effectRef=Ga(()=>this._itemsChanged(e()),{injector:A}))}tabOut=new XA;change=new XA;skipPredicate(e){return this._skipPredicateFn=e,this}withWrap(e=!0){return this._wrap=e,this}withVerticalOrientation(e=!0){return this._vertical=e,this}withHorizontalOrientation(e){return this._horizontal=e,this}withAllowedModifierKeys(e){return this._allowedModifierKeys=e,this}withTypeAhead(e=200){this._typeaheadSubscription.unsubscribe();let A=this._getItemsArray();return this._typeahead=new Fp(A,{debounceInterval:typeof e=="number"?e:void 0,skipPredicate:i=>this._skipPredicateFn(i)}),this._typeaheadSubscription=this._typeahead.selectedItem.subscribe(i=>{this.setActiveItem(i)}),this}cancelTypeahead(){return this._typeahead?.reset(),this}withHomeAndEnd(e=!0){return this._homeAndEnd=e,this}withPageUpDown(e=!0,A=10){return this._pageUpAndDown={enabled:e,delta:A},this}setActiveItem(e){let A=this._activeItem();this.updateActiveItem(e),this._activeItem()!==A&&this.change.next(this._activeItemIndex())}onKeydown(e){let A=e.keyCode,n=["altKey","ctrlKey","metaKey","shiftKey"].every(o=>!e[o]||this._allowedModifierKeys.indexOf(o)>-1);switch(A){case 9:this.tabOut.next();return;case 40:if(this._vertical&&n){this.setNextItemActive();break}else return;case 38:if(this._vertical&&n){this.setPreviousItemActive();break}else return;case 39:if(this._horizontal&&n){this._horizontal==="rtl"?this.setPreviousItemActive():this.setNextItemActive();break}else return;case 37:if(this._horizontal&&n){this._horizontal==="rtl"?this.setNextItemActive():this.setPreviousItemActive();break}else return;case 36:if(this._homeAndEnd&&n){this.setFirstItemActive();break}else return;case 35:if(this._homeAndEnd&&n){this.setLastItemActive();break}else return;case 33:if(this._pageUpAndDown.enabled&&n){let o=this._activeItemIndex()-this._pageUpAndDown.delta;this._setActiveItemByIndex(o>0?o:0,1);break}else return;case 34:if(this._pageUpAndDown.enabled&&n){let o=this._activeItemIndex()+this._pageUpAndDown.delta,a=this._getItemsArray().length;this._setActiveItemByIndex(o-1&&i!==this._activeItemIndex()&&(this._activeItemIndex.set(i),this._typeahead?.setCurrentSelectedItemIndex(i))}}};var Ru=class extends FB{setActiveItem(e){this.activeItem&&this.activeItem.setInactiveStyles(),super.setActiveItem(e),this.activeItem&&this.activeItem.setActiveStyles()}};var s0=class extends FB{_origin="program";setFocusOrigin(e){return this._origin=e,this}setActiveItem(e){super.setActiveItem(e),this.activeItem&&this.activeItem.focus(this._origin)}};var zJ=" ";function u9(t,e,A){let i=Lp(t,e);A=A.trim(),!i.some(n=>n.trim()===A)&&(i.push(A),t.setAttribute(e,i.join(zJ)))}function Gp(t,e,A){let i=Lp(t,e);A=A.trim();let n=i.filter(o=>o!==A);n.length?t.setAttribute(e,n.join(zJ)):t.removeAttribute(e)}function Lp(t,e){return t.getAttribute(e)?.match(/\S+/g)??[]}var OJ="cdk-describedby-message",_p="cdk-describedby-host",h9=0,PJ=(()=>{class t{_platform=h(Ii);_document=h(Xt);_messageRegistry=new Map;_messagesContainer=null;_id=`${h9++}`;constructor(){h(Xn).load(M2),this._id=h(ip)+"-"+h9++}describe(A,i,n){if(!this._canBeDescribed(A,i))return;let o=Q9(i,n);typeof i!="string"?(HJ(i,this._id),this._messageRegistry.set(o,{messageElement:i,referenceCount:0})):this._messageRegistry.has(o)||this._createMessageElement(i,n),this._isElementDescribedByMessage(A,o)||this._addMessageReference(A,o)}removeDescription(A,i,n){if(!i||!this._isElementNode(A))return;let o=Q9(i,n);if(this._isElementDescribedByMessage(A,o)&&this._removeMessageReference(A,o),typeof i=="string"){let a=this._messageRegistry.get(o);a&&a.referenceCount===0&&this._deleteMessageElement(o)}this._messagesContainer?.childNodes.length===0&&(this._messagesContainer.remove(),this._messagesContainer=null)}ngOnDestroy(){let A=this._document.querySelectorAll(`[${_p}="${this._id}"]`);for(let i=0;in.indexOf(OJ)!=0);A.setAttribute("aria-describedby",i.join(" "))}_addMessageReference(A,i){let n=this._messageRegistry.get(i);u9(A,"aria-describedby",n.messageElement.id),A.setAttribute(_p,this._id),n.referenceCount++}_removeMessageReference(A,i){let n=this._messageRegistry.get(i);n.referenceCount--,Gp(A,"aria-describedby",n.messageElement.id),A.removeAttribute(_p)}_isElementDescribedByMessage(A,i){let n=Lp(A,"aria-describedby"),o=this._messageRegistry.get(i),a=o&&o.messageElement.id;return!!a&&n.indexOf(a)!=-1}_canBeDescribed(A,i){if(!this._isElementNode(A))return!1;if(i&&typeof i=="object")return!0;let n=i==null?"":`${i}`.trim(),o=A.getAttribute("aria-label");return n?!o||o.trim()!==n:!1}_isElementNode(A){return A.nodeType===this._document.ELEMENT_NODE}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function Q9(t,e){return typeof t=="string"?`${e||""}/${t}`:t}function HJ(t,e){t.id||(t.id=`${OJ}-${e}-${h9++}`)}var Xl=(function(t){return t[t.NORMAL=0]="NORMAL",t[t.NEGATED=1]="NEGATED",t[t.INVERTED=2]="INVERTED",t})(Xl||{}),Kp,x1;function Up(){if(x1==null){if(typeof document!="object"||!document||typeof Element!="function"||!Element)return x1=!1,x1;if(document.documentElement?.style&&"scrollBehavior"in document.documentElement.style)x1=!0;else{let t=Element.prototype.scrollTo;t?x1=!/\{\s*\[native code\]\s*\}/.test(t.toString()):x1=!1}}return x1}function _B(){if(typeof document!="object"||!document)return Xl.NORMAL;if(Kp==null){let t=document.createElement("div"),e=t.style;t.dir="rtl",e.width="1px",e.overflow="auto",e.visibility="hidden",e.pointerEvents="none",e.position="absolute";let A=document.createElement("div"),i=A.style;i.width="2px",i.height="1px",t.appendChild(A),document.body.appendChild(t),Kp=Xl.NORMAL,t.scrollLeft===0&&(t.scrollLeft=1,Kp=t.scrollLeft===0?Xl.NEGATED:Xl.INVERTED),t.remove()}return Kp}function f9(){return typeof __karma__<"u"&&!!__karma__||typeof jasmine<"u"&&!!jasmine||typeof jest<"u"&&!!jest||typeof Mocha<"u"&&!!Mocha}var LB,jJ=["color","button","checkbox","date","datetime-local","email","file","hidden","image","month","number","password","radio","range","reset","search","submit","tel","text","time","url","week"];function m9(){if(LB)return LB;if(typeof document!="object"||!document)return LB=new Set(jJ),LB;let t=document.createElement("input");return LB=new Set(jJ.filter(e=>(t.setAttribute("type",e),t.type===e))),LB}var qJ={XSmall:"(max-width: 599.98px)",Small:"(min-width: 600px) and (max-width: 959.98px)",Medium:"(min-width: 960px) and (max-width: 1279.98px)",Large:"(min-width: 1280px) and (max-width: 1919.98px)",XLarge:"(min-width: 1920px)",Handset:"(max-width: 599.98px) and (orientation: portrait), (max-width: 959.98px) and (orientation: landscape)",Tablet:"(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait), (min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)",Web:"(min-width: 840px) and (orientation: portrait), (min-width: 1280px) and (orientation: landscape)",HandsetPortrait:"(max-width: 599.98px) and (orientation: portrait)",TabletPortrait:"(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait)",WebPortrait:"(min-width: 840px) and (orientation: portrait)",HandsetLandscape:"(max-width: 959.98px) and (orientation: landscape)",TabletLandscape:"(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)",WebLandscape:"(min-width: 1280px) and (orientation: landscape)"};var r0A=new yA("MATERIAL_ANIMATIONS"),VJ=null;function Nu(){return h(r0A,{optional:!0})?.animationsDisabled||h(p1,{optional:!0})==="NoopAnimations"?"di-disabled":(VJ??=h(RB).matchMedia("(prefers-reduced-motion)").matches,VJ?"reduced-motion":"enabled")}function ji(){return Nu()!=="enabled"}function Va(t){return t==null?"":typeof t=="string"?t:`${t}px`}function yr(t){return t!=null&&`${t}`!="false"}var Rs=(function(t){return t[t.FADING_IN=0]="FADING_IN",t[t.VISIBLE=1]="VISIBLE",t[t.FADING_OUT=2]="FADING_OUT",t[t.HIDDEN=3]="HIDDEN",t})(Rs||{}),p9=class{_renderer;element;config;_animationForciblyDisabledThroughCss;state=Rs.HIDDEN;constructor(e,A,i,n=!1){this._renderer=e,this.element=A,this.config=i,this._animationForciblyDisabledThroughCss=n}fadeOut(){this._renderer.fadeOutRipple(this)}},WJ=b2({passive:!0,capture:!0}),w9=class{_events=new Map;addHandler(e,A,i,n){let o=this._events.get(A);if(o){let a=o.get(i);a?a.add(n):o.set(i,new Set([n]))}else this._events.set(A,new Map([[i,new Set([n])]])),e.runOutsideAngular(()=>{document.addEventListener(A,this._delegateEventHandler,WJ)})}removeHandler(e,A,i){let n=this._events.get(e);if(!n)return;let o=n.get(A);o&&(o.delete(i),o.size===0&&n.delete(A),n.size===0&&(this._events.delete(e),document.removeEventListener(e,this._delegateEventHandler,WJ)))}_delegateEventHandler=e=>{let A=Jr(e);A&&this._events.get(e.type)?.forEach((i,n)=>{(n===A||n.contains(A))&&i.forEach(o=>o.handleEvent(e))})}},Fu={enterDuration:225,exitDuration:150},s0A=800,ZJ=b2({passive:!0,capture:!0}),XJ=["mousedown","touchstart"],$J=["mouseup","mouseleave","touchend","touchcancel"],g0A=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],hostAttrs:["mat-ripple-style-loader",""],decls:0,vars:0,template:function(i,n){},styles:[`.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale3d(0, 0, 0);background-color:var(--mat-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface) 10%, transparent))}@media(forced-colors: active){.mat-ripple-element{display:none}}.cdk-drag-preview .mat-ripple-element,.cdk-drag-placeholder .mat-ripple-element{display:none} -`],encapsulation:2,changeDetection:0})}return t})(),_u=class t{_target;_ngZone;_platform;_containerElement;_triggerElement=null;_isPointerDown=!1;_activeRipples=new Map;_mostRecentTransientRipple=null;_lastTouchStartEvent;_pointerUpEventsRegistered=!1;_containerRect=null;static _eventManager=new w9;constructor(e,A,i,n,o){this._target=e,this._ngZone=A,this._platform=n,n.isBrowser&&(this._containerElement=xs(i)),o&&o.get(Xn).load(g0A)}fadeInRipple(e,A,i={}){let n=this._containerRect=this._containerRect||this._containerElement.getBoundingClientRect(),o=cA(cA({},Fu),i.animation);i.centered&&(e=n.left+n.width/2,A=n.top+n.height/2);let a=i.radius||l0A(e,A,n),r=e-n.left,s=A-n.top,g=o.enterDuration,l=document.createElement("div");l.classList.add("mat-ripple-element"),l.style.left=`${r-a}px`,l.style.top=`${s-a}px`,l.style.height=`${a*2}px`,l.style.width=`${a*2}px`,i.color!=null&&(l.style.backgroundColor=i.color),l.style.transitionDuration=`${g}ms`,this._containerElement.appendChild(l);let C=window.getComputedStyle(l),I=C.transitionProperty,d=C.transitionDuration,B=I==="none"||d==="0s"||d==="0s, 0s"||n.width===0&&n.height===0,E=new p9(this,l,i,B);l.style.transform="scale3d(1, 1, 1)",E.state=Rs.FADING_IN,i.persistent||(this._mostRecentTransientRipple=E);let Q=null;return!B&&(g||o.exitDuration)&&this._ngZone.runOutsideAngular(()=>{let f=()=>{Q&&(Q.fallbackTimer=null),clearTimeout(S),this._finishRippleTransition(E)},b=()=>this._destroyRipple(E),S=setTimeout(b,g+100);l.addEventListener("transitionend",f),l.addEventListener("transitioncancel",b),Q={onTransitionEnd:f,onTransitionCancel:b,fallbackTimer:S}}),this._activeRipples.set(E,Q),(B||!g)&&this._finishRippleTransition(E),E}fadeOutRipple(e){if(e.state===Rs.FADING_OUT||e.state===Rs.HIDDEN)return;let A=e.element,i=cA(cA({},Fu),e.config.animation);A.style.transitionDuration=`${i.exitDuration}ms`,A.style.opacity="0",e.state=Rs.FADING_OUT,(e._animationForciblyDisabledThroughCss||!i.exitDuration)&&this._finishRippleTransition(e)}fadeOutAll(){this._getActiveRipples().forEach(e=>e.fadeOut())}fadeOutAllNonPersistent(){this._getActiveRipples().forEach(e=>{e.config.persistent||e.fadeOut()})}setupTriggerEvents(e){let A=xs(e);!this._platform.isBrowser||!A||A===this._triggerElement||(this._removeTriggerEvents(),this._triggerElement=A,XJ.forEach(i=>{t._eventManager.addHandler(this._ngZone,i,A,this)}))}handleEvent(e){e.type==="mousedown"?this._onMousedown(e):e.type==="touchstart"?this._onTouchStart(e):this._onPointerUp(),this._pointerUpEventsRegistered||(this._ngZone.runOutsideAngular(()=>{$J.forEach(A=>{this._triggerElement.addEventListener(A,this,ZJ)})}),this._pointerUpEventsRegistered=!0)}_finishRippleTransition(e){e.state===Rs.FADING_IN?this._startFadeOutTransition(e):e.state===Rs.FADING_OUT&&this._destroyRipple(e)}_startFadeOutTransition(e){let A=e===this._mostRecentTransientRipple,{persistent:i}=e.config;e.state=Rs.VISIBLE,!i&&(!A||!this._isPointerDown)&&e.fadeOut()}_destroyRipple(e){let A=this._activeRipples.get(e)??null;this._activeRipples.delete(e),this._activeRipples.size||(this._containerRect=null),e===this._mostRecentTransientRipple&&(this._mostRecentTransientRipple=null),e.state=Rs.HIDDEN,A!==null&&(e.element.removeEventListener("transitionend",A.onTransitionEnd),e.element.removeEventListener("transitioncancel",A.onTransitionCancel),A.fallbackTimer!==null&&clearTimeout(A.fallbackTimer)),e.element.remove()}_onMousedown(e){let A=b1(e),i=this._lastTouchStartEvent&&Date.now(){let A=e.state===Rs.VISIBLE||e.config.terminateOnPointerUp&&e.state===Rs.FADING_IN;!e.config.persistent&&A&&e.fadeOut()}))}_getActiveRipples(){return Array.from(this._activeRipples.keys())}_removeTriggerEvents(){let e=this._triggerElement;e&&(XJ.forEach(A=>t._eventManager.removeHandler(A,e,this)),this._pointerUpEventsRegistered&&($J.forEach(A=>e.removeEventListener(A,this,ZJ)),this._pointerUpEventsRegistered=!1))}};function l0A(t,e,A){let i=Math.max(Math.abs(t-A.left),Math.abs(t-A.right)),n=Math.max(Math.abs(e-A.top),Math.abs(e-A.bottom));return Math.sqrt(i*i+n*n)}var S2=new yA("mat-ripple-global-options"),ig=(()=>{class t{_elementRef=h(ge);_animationsDisabled=ji();color;unbounded=!1;centered=!1;radius=0;animation;get disabled(){return this._disabled}set disabled(A){A&&this.fadeOutAllNonPersistent(),this._disabled=A,this._setupTriggerEventsIfEnabled()}_disabled=!1;get trigger(){return this._trigger||this._elementRef.nativeElement}set trigger(A){this._trigger=A,this._setupTriggerEventsIfEnabled()}_trigger;_rippleRenderer;_globalOptions;_isInitialized=!1;constructor(){let A=h(Oe),i=h(Ii),n=h(S2,{optional:!0}),o=h(ft);this._globalOptions=n||{},this._rippleRenderer=new _u(this,A,this._elementRef,i,o)}ngOnInit(){this._isInitialized=!0,this._setupTriggerEventsIfEnabled()}ngOnDestroy(){this._rippleRenderer._removeTriggerEvents()}fadeOutAll(){this._rippleRenderer.fadeOutAll()}fadeOutAllNonPersistent(){this._rippleRenderer.fadeOutAllNonPersistent()}get rippleConfig(){return{centered:this.centered,radius:this.radius,color:this.color,animation:cA(cA(cA({},this._globalOptions.animation),this._animationsDisabled?{enterDuration:0,exitDuration:0}:{}),this.animation),terminateOnPointerUp:this._globalOptions.terminateOnPointerUp}}get rippleDisabled(){return this.disabled||!!this._globalOptions.disabled}_setupTriggerEventsIfEnabled(){!this.disabled&&this._isInitialized&&this._rippleRenderer.setupTriggerEvents(this.trigger)}launch(A,i=0,n){return typeof A=="number"?this._rippleRenderer.fadeInRipple(A,i,cA(cA({},this.rippleConfig),n)):this._rippleRenderer.fadeInRipple(0,0,cA(cA({},this.rippleConfig),A))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","mat-ripple",""],["","matRipple",""]],hostAttrs:[1,"mat-ripple"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mat-ripple-unbounded",n.unbounded)},inputs:{color:[0,"matRippleColor","color"],unbounded:[0,"matRippleUnbounded","unbounded"],centered:[0,"matRippleCentered","centered"],radius:[0,"matRippleRadius","radius"],animation:[0,"matRippleAnimation","animation"],disabled:[0,"matRippleDisabled","disabled"],trigger:[0,"matRippleTrigger","trigger"]},exportAs:["matRipple"]})}return t})();var c0A={capture:!0},C0A=["focus","mousedown","mouseenter","touchstart"],D9="mat-ripple-loader-uninitialized",y9="mat-ripple-loader-class-name",AY="mat-ripple-loader-centered",Jp="mat-ripple-loader-disabled",Yp=(()=>{class t{_document=h(Xt);_animationsDisabled=ji();_globalRippleOptions=h(S2,{optional:!0});_platform=h(Ii);_ngZone=h(Oe);_injector=h(ft);_eventCleanups;_hosts=new Map;constructor(){let A=h(Kr).createRenderer(null,null);this._eventCleanups=this._ngZone.runOutsideAngular(()=>C0A.map(i=>A.listen(this._document,i,this._onInteraction,c0A)))}ngOnDestroy(){let A=this._hosts.keys();for(let i of A)this.destroyRipple(i);this._eventCleanups.forEach(i=>i())}configureRipple(A,i){A.setAttribute(D9,this._globalRippleOptions?.namespace??""),(i.className||!A.hasAttribute(y9))&&A.setAttribute(y9,i.className||""),i.centered&&A.setAttribute(AY,""),i.disabled&&A.setAttribute(Jp,"")}setDisabled(A,i){let n=this._hosts.get(A);n?(n.target.rippleDisabled=i,!i&&!n.hasSetUpEvents&&(n.hasSetUpEvents=!0,n.renderer.setupTriggerEvents(A))):i?A.setAttribute(Jp,""):A.removeAttribute(Jp)}_onInteraction=A=>{let i=Jr(A);if(i instanceof HTMLElement){let n=i.closest(`[${D9}="${this._globalRippleOptions?.namespace??""}"]`);n&&this._createRipple(n)}};_createRipple(A){if(!this._document||this._hosts.has(A))return;A.querySelector(".mat-ripple")?.remove();let i=this._document.createElement("span");i.classList.add("mat-ripple",A.getAttribute(y9)),A.append(i);let n=this._globalRippleOptions,o=this._animationsDisabled?0:n?.animation?.enterDuration??Fu.enterDuration,a=this._animationsDisabled?0:n?.animation?.exitDuration??Fu.exitDuration,r={rippleDisabled:this._animationsDisabled||n?.disabled||A.hasAttribute(Jp),rippleConfig:{centered:A.hasAttribute(AY),terminateOnPointerUp:n?.terminateOnPointerUp,animation:{enterDuration:o,exitDuration:a}}},s=new _u(r,this._ngZone,i,this._platform,this._injector),g=!r.rippleDisabled;g&&s.setupTriggerEvents(A),this._hosts.set(A,{target:r,renderer:s,hasSetUpEvents:g}),A.removeAttribute(D9)}destroyRipple(A){let i=this._hosts.get(A);i&&(i.renderer._removeTriggerEvents(),this._hosts.delete(A))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var dr=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["structural-styles"]],decls:0,vars:0,template:function(i,n){},styles:[`.mat-focus-indicator{position:relative}.mat-focus-indicator::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border-width:var(--mat-focus-indicator-border-width, 3px);border-style:var(--mat-focus-indicator-border-style, solid);border-color:var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus-visible::before{content:""}@media(forced-colors: active){html{--mat-focus-indicator-display: block}} -`],encapsulation:2,changeDetection:0})}return t})();var I0A=["mat-icon-button",""],d0A=["*"],B0A=new yA("MAT_BUTTON_CONFIG");function eY(t){return t==null?void 0:en(t)}var Lu=(()=>{class t{_elementRef=h(ge);_ngZone=h(Oe);_animationsDisabled=ji();_config=h(B0A,{optional:!0});_focusMonitor=h(ar);_cleanupClick;_renderer=h(_i);_rippleLoader=h(Yp);_isAnchor;_isFab=!1;color;get disableRipple(){return this._disableRipple}set disableRipple(A){this._disableRipple=A,this._updateRippleDisabled()}_disableRipple=!1;get disabled(){return this._disabled}set disabled(A){this._disabled=A,this._updateRippleDisabled()}_disabled=!1;ariaDisabled;disabledInteractive;tabIndex;set _tabindex(A){this.tabIndex=A}constructor(){h(Xn).load(dr);let A=this._elementRef.nativeElement;this._isAnchor=A.tagName==="A",this.disabledInteractive=this._config?.disabledInteractive??!1,this.color=this._config?.color??null,this._rippleLoader?.configureRipple(A,{className:"mat-mdc-button-ripple"})}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0),this._isAnchor&&this._setupAsAnchor()}ngOnDestroy(){this._cleanupClick?.(),this._focusMonitor.stopMonitoring(this._elementRef),this._rippleLoader?.destroyRipple(this._elementRef.nativeElement)}focus(A="program",i){A?this._focusMonitor.focusVia(this._elementRef.nativeElement,A,i):this._elementRef.nativeElement.focus(i)}_getAriaDisabled(){return this.ariaDisabled!=null?this.ariaDisabled:this._isAnchor?this.disabled||null:this.disabled&&this.disabledInteractive?!0:null}_getDisabledAttribute(){return this.disabledInteractive||!this.disabled?null:!0}_updateRippleDisabled(){this._rippleLoader?.setDisabled(this._elementRef.nativeElement,this.disableRipple||this.disabled)}_getTabIndex(){return this._isAnchor?this.disabled&&!this.disabledInteractive?-1:this.tabIndex:this.tabIndex}_setupAsAnchor(){this._cleanupClick=this._ngZone.runOutsideAngular(()=>this._renderer.listen(this._elementRef.nativeElement,"click",A=>{this.disabled&&(A.preventDefault(),A.stopImmediatePropagation())}))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,hostAttrs:[1,"mat-mdc-button-base"],hostVars:13,hostBindings:function(i,n){i&2&&(ie("disabled",n._getDisabledAttribute())("aria-disabled",n._getAriaDisabled())("tabindex",n._getTabIndex()),Po(n.color?"mat-"+n.color:""),ne("mat-mdc-button-disabled",n.disabled)("mat-mdc-button-disabled-interactive",n.disabledInteractive)("mat-unthemed",!n.color)("_mat-animation-noopable",n._animationsDisabled))},inputs:{color:"color",disableRipple:[2,"disableRipple","disableRipple",he],disabled:[2,"disabled","disabled",he],ariaDisabled:[2,"aria-disabled","ariaDisabled",he],disabledInteractive:[2,"disabledInteractive","disabledInteractive",he],tabIndex:[2,"tabIndex","tabIndex",eY],_tabindex:[2,"tabindex","_tabindex",eY]}})}return t})(),Wa=(()=>{class t extends Lu{constructor(){super(),this._rippleLoader.configureRipple(this._elementRef.nativeElement,{centered:!0})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["button","mat-icon-button",""],["a","mat-icon-button",""],["button","matIconButton",""],["a","matIconButton",""]],hostAttrs:[1,"mdc-icon-button","mat-mdc-icon-button"],exportAs:["matButton","matAnchor"],features:[It],attrs:I0A,ngContentSelectors:d0A,decls:4,vars:0,consts:[[1,"mat-mdc-button-persistent-ripple","mdc-icon-button__ripple"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(i,n){i&1&&(Yt(),Di(0,"span",0),Ke(1),Di(2,"span",1)(3,"span",2))},styles:[`.mat-mdc-icon-button{-webkit-user-select:none;user-select:none;display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:rgba(0,0,0,0);fill:currentColor;text-decoration:none;cursor:pointer;z-index:0;overflow:visible;border-radius:var(--mat-icon-button-container-shape, var(--mat-sys-corner-full, 50%));flex-shrink:0;text-align:center;width:var(--mat-icon-button-state-layer-size, 40px);height:var(--mat-icon-button-state-layer-size, 40px);padding:calc(calc(var(--mat-icon-button-state-layer-size, 40px) - var(--mat-icon-button-icon-size, 24px)) / 2);font-size:var(--mat-icon-button-icon-size, 24px);color:var(--mat-icon-button-icon-color, var(--mat-sys-on-surface-variant));-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-icon-button .mat-mdc-button-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-icon-button .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-icon-button .mdc-button__label,.mat-mdc-icon-button .mat-icon{z-index:1;position:relative}.mat-mdc-icon-button .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit}.mat-mdc-icon-button:focus-visible>.mat-focus-indicator::before{content:"";border-radius:inherit}.mat-mdc-icon-button .mat-ripple-element{background-color:var(--mat-icon-button-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface-variant) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-icon-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-icon-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-icon-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-icon-button-touch-target-size, 48px);display:var(--mat-icon-button-touch-target-display, block);left:50%;width:var(--mat-icon-button-touch-target-size, 48px);transform:translate(-50%, -50%)}.mat-mdc-icon-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-icon-button[disabled],.mat-mdc-icon-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-icon-button-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-icon-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-icon-button img,.mat-mdc-icon-button svg{width:var(--mat-icon-button-icon-size, 24px);height:var(--mat-icon-button-icon-size, 24px);vertical-align:baseline}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple{border-radius:var(--mat-icon-button-container-shape, var(--mat-sys-corner-full, 50%))}.mat-mdc-icon-button[hidden]{display:none}.mat-mdc-icon-button.mat-unthemed:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-primary:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-accent:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-warn:not(.mdc-ripple-upgraded):focus::before{background:rgba(0,0,0,0);opacity:1} -`,`@media(forced-colors: active){.mat-mdc-button:not(.mdc-button--outlined),.mat-mdc-unelevated-button:not(.mdc-button--outlined),.mat-mdc-raised-button:not(.mdc-button--outlined),.mat-mdc-outlined-button:not(.mdc-button--outlined),.mat-mdc-button-base.mat-tonal-button,.mat-mdc-icon-button.mat-mdc-icon-button,.mat-mdc-outlined-button .mdc-button__ripple{outline:solid 1px}} -`],encapsulation:2,changeDetection:0})}return t})();var E0A=new yA("cdk-dir-doc",{providedIn:"root",factory:()=>h(Xt)}),Q0A=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;function tY(t){let e=t?.toLowerCase()||"";return e==="auto"&&typeof navigator<"u"&&navigator?.language?Q0A.test(navigator.language)?"rtl":"ltr":e==="rtl"?"rtl":"ltr"}var Ro=(()=>{class t{get value(){return this.valueSignal()}valueSignal=jA("ltr");change=new $A;constructor(){let A=h(E0A,{optional:!0});if(A){let i=A.body?A.body.dir:null,n=A.documentElement?A.documentElement.dir:null;this.valueSignal.set(tY(i||n||"ltr"))}}ngOnDestroy(){this.change.complete()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var Gi=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();var x2=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var h0A=["matButton",""],v9=[[["",8,"material-icons",3,"iconPositionEnd",""],["mat-icon",3,"iconPositionEnd",""],["","matButtonIcon","",3,"iconPositionEnd",""]],"*",[["","iconPositionEnd","",8,"material-icons"],["mat-icon","iconPositionEnd",""],["","matButtonIcon","","iconPositionEnd",""]]],b9=[".material-icons:not([iconPositionEnd]), mat-icon:not([iconPositionEnd]), [matButtonIcon]:not([iconPositionEnd])","*",".material-icons[iconPositionEnd], mat-icon[iconPositionEnd], [matButtonIcon][iconPositionEnd]"],u0A=["mat-fab",""],f0A=["mat-mini-fab",""],m0A=`.mat-mdc-fab-base{-webkit-user-select:none;user-select:none;position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:56px;height:56px;padding:0;border:none;fill:currentColor;text-decoration:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;overflow:visible;transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1);flex-shrink:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-fab-base .mat-mdc-button-ripple,.mat-mdc-fab-base .mat-mdc-button-persistent-ripple,.mat-mdc-fab-base .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-fab-base .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-fab-base .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-fab-base .mdc-button__label,.mat-mdc-fab-base .mat-icon{z-index:1;position:relative}.mat-mdc-fab-base .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute}.mat-mdc-fab-base:focus-visible>.mat-focus-indicator::before{content:""}.mat-mdc-fab-base._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-fab-base::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mat-mdc-fab-base[hidden]{display:none}.mat-mdc-fab-base::-moz-focus-inner{padding:0;border:0}.mat-mdc-fab-base:active,.mat-mdc-fab-base:focus{outline:none}.mat-mdc-fab-base:hover{cursor:pointer}.mat-mdc-fab-base>svg{width:100%}.mat-mdc-fab-base .mat-icon,.mat-mdc-fab-base .material-icons{transition:transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);fill:currentColor;will-change:transform}.mat-mdc-fab-base .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-fab-base[disabled],.mat-mdc-fab-base.mat-mdc-button-disabled{cursor:default;pointer-events:none}.mat-mdc-fab-base[disabled],.mat-mdc-fab-base[disabled]:focus,.mat-mdc-fab-base.mat-mdc-button-disabled,.mat-mdc-fab-base.mat-mdc-button-disabled:focus{box-shadow:none}.mat-mdc-fab-base.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-fab{background-color:var(--mat-fab-container-color, var(--mat-sys-primary-container));border-radius:var(--mat-fab-container-shape, var(--mat-sys-corner-large));color:var(--mat-fab-foreground-color, var(--mat-sys-on-primary-container, inherit));box-shadow:var(--mat-fab-container-elevation-shadow, var(--mat-sys-level3))}@media(hover: hover){.mat-mdc-fab:hover{box-shadow:var(--mat-fab-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-fab:focus{box-shadow:var(--mat-fab-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-fab:active,.mat-mdc-fab:focus:active{box-shadow:var(--mat-fab-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-fab[disabled],.mat-mdc-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-fab-disabled-state-foreground-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-fab-disabled-state-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-fab .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-fab-touch-target-size, 48px);display:var(--mat-fab-touch-target-display, block);left:50%;width:var(--mat-fab-touch-target-size, 48px);transform:translate(-50%, -50%)}.mat-mdc-fab .mat-ripple-element{background-color:var(--mat-fab-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-fab .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-state-layer-color, var(--mat-sys-on-primary-container))}.mat-mdc-fab.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-disabled-state-layer-color)}.mat-mdc-fab:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-fab.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-fab.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-fab.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-fab:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-mini-fab{width:40px;height:40px;background-color:var(--mat-fab-small-container-color, var(--mat-sys-primary-container));border-radius:var(--mat-fab-small-container-shape, var(--mat-sys-corner-medium));color:var(--mat-fab-small-foreground-color, var(--mat-sys-on-primary-container, inherit));box-shadow:var(--mat-fab-small-container-elevation-shadow, var(--mat-sys-level3))}@media(hover: hover){.mat-mdc-mini-fab:hover{box-shadow:var(--mat-fab-small-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-mini-fab:focus{box-shadow:var(--mat-fab-small-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-mini-fab:active,.mat-mdc-mini-fab:focus:active{box-shadow:var(--mat-fab-small-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-mini-fab[disabled],.mat-mdc-mini-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-fab-small-disabled-state-foreground-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-fab-small-disabled-state-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-mini-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-mini-fab .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-fab-small-touch-target-size, 48px);display:var(--mat-fab-small-touch-target-display);left:50%;width:var(--mat-fab-small-touch-target-size, 48px);transform:translate(-50%, -50%)}.mat-mdc-mini-fab .mat-ripple-element{background-color:var(--mat-fab-small-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-mini-fab .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-small-state-layer-color, var(--mat-sys-on-primary-container))}.mat-mdc-mini-fab.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-small-disabled-state-layer-color)}.mat-mdc-mini-fab:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-mini-fab.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-mini-fab.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-mini-fab.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-mini-fab:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-extended-fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding-left:20px;padding-right:20px;width:auto;max-width:100%;line-height:normal;box-shadow:var(--mat-fab-extended-container-elevation-shadow, var(--mat-sys-level3));height:var(--mat-fab-extended-container-height, 56px);border-radius:var(--mat-fab-extended-container-shape, var(--mat-sys-corner-large));font-family:var(--mat-fab-extended-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-fab-extended-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-fab-extended-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-fab-extended-label-text-tracking, var(--mat-sys-label-large-tracking))}@media(hover: hover){.mat-mdc-extended-fab:hover{box-shadow:var(--mat-fab-extended-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-extended-fab:focus{box-shadow:var(--mat-fab-extended-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-extended-fab:active,.mat-mdc-extended-fab:focus:active{box-shadow:var(--mat-fab-extended-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-extended-fab[disabled],.mat-mdc-extended-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none}.mat-mdc-extended-fab[disabled],.mat-mdc-extended-fab[disabled]:focus,.mat-mdc-extended-fab.mat-mdc-button-disabled,.mat-mdc-extended-fab.mat-mdc-button-disabled:focus{box-shadow:none}.mat-mdc-extended-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}[dir=rtl] .mat-mdc-extended-fab .mdc-button__label+.mat-icon,[dir=rtl] .mat-mdc-extended-fab .mdc-button__label+.material-icons,.mat-mdc-extended-fab>.mat-icon,.mat-mdc-extended-fab>.material-icons{margin-left:-8px;margin-right:12px}.mat-mdc-extended-fab .mdc-button__label+.mat-icon,.mat-mdc-extended-fab .mdc-button__label+.material-icons,[dir=rtl] .mat-mdc-extended-fab>.mat-icon,[dir=rtl] .mat-mdc-extended-fab>.material-icons{margin-left:12px;margin-right:-8px}.mat-mdc-extended-fab .mat-mdc-button-touch-target{width:100%} -`,iY=new Map([["text",["mat-mdc-button"]],["filled",["mdc-button--unelevated","mat-mdc-unelevated-button"]],["elevated",["mdc-button--raised","mat-mdc-raised-button"]],["outlined",["mdc-button--outlined","mat-mdc-outlined-button"]],["tonal",["mat-tonal-button"]]]),fn=(()=>{class t extends Lu{get appearance(){return this._appearance}set appearance(A){this.setAppearance(A||this._config?.defaultAppearance||"text")}_appearance=null;constructor(){super();let A=p0A(this._elementRef.nativeElement);A&&this.setAppearance(A)}setAppearance(A){if(A===this._appearance)return;let i=this._elementRef.nativeElement.classList,n=this._appearance?iY.get(this._appearance):null,o=iY.get(A);n&&i.remove(...n),i.add(...o),this._appearance=A}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["button","matButton",""],["a","matButton",""],["button","mat-button",""],["button","mat-raised-button",""],["button","mat-flat-button",""],["button","mat-stroked-button",""],["a","mat-button",""],["a","mat-raised-button",""],["a","mat-flat-button",""],["a","mat-stroked-button",""]],hostAttrs:[1,"mdc-button"],inputs:{appearance:[0,"matButton","appearance"]},exportAs:["matButton","matAnchor"],features:[It],attrs:h0A,ngContentSelectors:b9,decls:7,vars:4,consts:[[1,"mat-mdc-button-persistent-ripple"],[1,"mdc-button__label"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(i,n){i&1&&(Yt(v9),Di(0,"span",0),Ke(1),li(2,"span",1),Ke(3,1),Ei(),Ke(4,2),Di(5,"span",2)(6,"span",3)),i&2&&ne("mdc-button__ripple",!n._isFab)("mdc-fab__ripple",n._isFab)},styles:[`.mat-mdc-button-base{text-decoration:none}.mat-mdc-button-base .mat-icon{min-height:fit-content;flex-shrink:0}@media(hover: none){.mat-mdc-button-base:hover>span.mat-mdc-button-persistent-ripple::before{opacity:0}}.mdc-button{-webkit-user-select:none;user-select:none;position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:64px;border:none;outline:none;line-height:inherit;-webkit-appearance:none;overflow:visible;vertical-align:middle;background:rgba(0,0,0,0);padding:0 8px}.mdc-button::-moz-focus-inner{padding:0;border:0}.mdc-button:active{outline:none}.mdc-button:hover{cursor:pointer}.mdc-button:disabled{cursor:default;pointer-events:none}.mdc-button[hidden]{display:none}.mdc-button .mdc-button__label{position:relative}.mat-mdc-button{padding:0 var(--mat-button-text-horizontal-padding, 12px);height:var(--mat-button-text-container-height, 40px);font-family:var(--mat-button-text-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-text-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-text-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-text-label-text-transform);font-weight:var(--mat-button-text-label-text-weight, var(--mat-sys-label-large-weight))}.mat-mdc-button,.mat-mdc-button .mdc-button__ripple{border-radius:var(--mat-button-text-container-shape, var(--mat-sys-corner-full))}.mat-mdc-button:not(:disabled){color:var(--mat-button-text-label-text-color, var(--mat-sys-primary))}.mat-mdc-button[disabled],.mat-mdc-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-text-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-button:has(.material-icons,mat-icon,[matButtonIcon]){padding:0 var(--mat-button-text-with-icon-horizontal-padding, 16px)}.mat-mdc-button>.mat-icon{margin-right:var(--mat-button-text-icon-spacing, 8px);margin-left:var(--mat-button-text-icon-offset, -4px)}[dir=rtl] .mat-mdc-button>.mat-icon{margin-right:var(--mat-button-text-icon-offset, -4px);margin-left:var(--mat-button-text-icon-spacing, 8px)}.mat-mdc-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-text-icon-offset, -4px);margin-left:var(--mat-button-text-icon-spacing, 8px)}[dir=rtl] .mat-mdc-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-text-icon-spacing, 8px);margin-left:var(--mat-button-text-icon-offset, -4px)}.mat-mdc-button .mat-ripple-element{background-color:var(--mat-button-text-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-text-state-layer-color, var(--mat-sys-primary))}.mat-mdc-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-text-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-text-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-text-touch-target-size, 48px);display:var(--mat-button-text-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-unelevated-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-filled-container-height, 40px);font-family:var(--mat-button-filled-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-filled-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-filled-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-filled-label-text-transform);font-weight:var(--mat-button-filled-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-filled-horizontal-padding, 24px)}.mat-mdc-unelevated-button>.mat-icon{margin-right:var(--mat-button-filled-icon-spacing, 8px);margin-left:var(--mat-button-filled-icon-offset, -8px)}[dir=rtl] .mat-mdc-unelevated-button>.mat-icon{margin-right:var(--mat-button-filled-icon-offset, -8px);margin-left:var(--mat-button-filled-icon-spacing, 8px)}.mat-mdc-unelevated-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-filled-icon-offset, -8px);margin-left:var(--mat-button-filled-icon-spacing, 8px)}[dir=rtl] .mat-mdc-unelevated-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-filled-icon-spacing, 8px);margin-left:var(--mat-button-filled-icon-offset, -8px)}.mat-mdc-unelevated-button .mat-ripple-element{background-color:var(--mat-button-filled-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-filled-state-layer-color, var(--mat-sys-on-primary))}.mat-mdc-unelevated-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-filled-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-unelevated-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-unelevated-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-unelevated-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-filled-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-unelevated-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-filled-touch-target-size, 48px);display:var(--mat-button-filled-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-unelevated-button:not(:disabled){color:var(--mat-button-filled-label-text-color, var(--mat-sys-on-primary));background-color:var(--mat-button-filled-container-color, var(--mat-sys-primary))}.mat-mdc-unelevated-button,.mat-mdc-unelevated-button .mdc-button__ripple{border-radius:var(--mat-button-filled-container-shape, var(--mat-sys-corner-full))}.mat-mdc-unelevated-button[disabled],.mat-mdc-unelevated-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-filled-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-filled-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-unelevated-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-raised-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);box-shadow:var(--mat-button-protected-container-elevation-shadow, var(--mat-sys-level1));height:var(--mat-button-protected-container-height, 40px);font-family:var(--mat-button-protected-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-protected-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-protected-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-protected-label-text-transform);font-weight:var(--mat-button-protected-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-protected-horizontal-padding, 24px)}.mat-mdc-raised-button>.mat-icon{margin-right:var(--mat-button-protected-icon-spacing, 8px);margin-left:var(--mat-button-protected-icon-offset, -8px)}[dir=rtl] .mat-mdc-raised-button>.mat-icon{margin-right:var(--mat-button-protected-icon-offset, -8px);margin-left:var(--mat-button-protected-icon-spacing, 8px)}.mat-mdc-raised-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-protected-icon-offset, -8px);margin-left:var(--mat-button-protected-icon-spacing, 8px)}[dir=rtl] .mat-mdc-raised-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-protected-icon-spacing, 8px);margin-left:var(--mat-button-protected-icon-offset, -8px)}.mat-mdc-raised-button .mat-ripple-element{background-color:var(--mat-button-protected-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-protected-state-layer-color, var(--mat-sys-primary))}.mat-mdc-raised-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-protected-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-raised-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-raised-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-raised-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-protected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-raised-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-protected-touch-target-size, 48px);display:var(--mat-button-protected-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-raised-button:not(:disabled){color:var(--mat-button-protected-label-text-color, var(--mat-sys-primary));background-color:var(--mat-button-protected-container-color, var(--mat-sys-surface))}.mat-mdc-raised-button,.mat-mdc-raised-button .mdc-button__ripple{border-radius:var(--mat-button-protected-container-shape, var(--mat-sys-corner-full))}@media(hover: hover){.mat-mdc-raised-button:hover{box-shadow:var(--mat-button-protected-hover-container-elevation-shadow, var(--mat-sys-level2))}}.mat-mdc-raised-button:focus{box-shadow:var(--mat-button-protected-focus-container-elevation-shadow, var(--mat-sys-level1))}.mat-mdc-raised-button:active,.mat-mdc-raised-button:focus:active{box-shadow:var(--mat-button-protected-pressed-container-elevation-shadow, var(--mat-sys-level1))}.mat-mdc-raised-button[disabled],.mat-mdc-raised-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-protected-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-protected-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-raised-button[disabled].mat-mdc-button-disabled,.mat-mdc-raised-button.mat-mdc-button-disabled.mat-mdc-button-disabled{box-shadow:var(--mat-button-protected-disabled-container-elevation-shadow, var(--mat-sys-level0))}.mat-mdc-raised-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-outlined-button{border-style:solid;transition:border 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-outlined-container-height, 40px);font-family:var(--mat-button-outlined-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-outlined-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-outlined-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-outlined-label-text-transform);font-weight:var(--mat-button-outlined-label-text-weight, var(--mat-sys-label-large-weight));border-radius:var(--mat-button-outlined-container-shape, var(--mat-sys-corner-full));border-width:var(--mat-button-outlined-outline-width, 1px);padding:0 var(--mat-button-outlined-horizontal-padding, 24px)}.mat-mdc-outlined-button>.mat-icon{margin-right:var(--mat-button-outlined-icon-spacing, 8px);margin-left:var(--mat-button-outlined-icon-offset, -8px)}[dir=rtl] .mat-mdc-outlined-button>.mat-icon{margin-right:var(--mat-button-outlined-icon-offset, -8px);margin-left:var(--mat-button-outlined-icon-spacing, 8px)}.mat-mdc-outlined-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-outlined-icon-offset, -8px);margin-left:var(--mat-button-outlined-icon-spacing, 8px)}[dir=rtl] .mat-mdc-outlined-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-outlined-icon-spacing, 8px);margin-left:var(--mat-button-outlined-icon-offset, -8px)}.mat-mdc-outlined-button .mat-ripple-element{background-color:var(--mat-button-outlined-ripple-color, color-mix(in srgb, var(--mat-sys-primary) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-outlined-state-layer-color, var(--mat-sys-primary))}.mat-mdc-outlined-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-outlined-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-outlined-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-outlined-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-outlined-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-outlined-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-outlined-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-outlined-touch-target-size, 48px);display:var(--mat-button-outlined-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-outlined-button:not(:disabled){color:var(--mat-button-outlined-label-text-color, var(--mat-sys-primary));border-color:var(--mat-button-outlined-outline-color, var(--mat-sys-outline))}.mat-mdc-outlined-button[disabled],.mat-mdc-outlined-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-outlined-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:var(--mat-button-outlined-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-outlined-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-tonal-button{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-button-tonal-container-height, 40px);font-family:var(--mat-button-tonal-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-button-tonal-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-button-tonal-label-text-tracking, var(--mat-sys-label-large-tracking));text-transform:var(--mat-button-tonal-label-text-transform);font-weight:var(--mat-button-tonal-label-text-weight, var(--mat-sys-label-large-weight));padding:0 var(--mat-button-tonal-horizontal-padding, 24px)}.mat-tonal-button:not(:disabled){color:var(--mat-button-tonal-label-text-color, var(--mat-sys-on-secondary-container));background-color:var(--mat-button-tonal-container-color, var(--mat-sys-secondary-container))}.mat-tonal-button,.mat-tonal-button .mdc-button__ripple{border-radius:var(--mat-button-tonal-container-shape, var(--mat-sys-corner-full))}.mat-tonal-button[disabled],.mat-tonal-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-button-tonal-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-button-tonal-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-tonal-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-tonal-button>.mat-icon{margin-right:var(--mat-button-tonal-icon-spacing, 8px);margin-left:var(--mat-button-tonal-icon-offset, -8px)}[dir=rtl] .mat-tonal-button>.mat-icon{margin-right:var(--mat-button-tonal-icon-offset, -8px);margin-left:var(--mat-button-tonal-icon-spacing, 8px)}.mat-tonal-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-tonal-icon-offset, -8px);margin-left:var(--mat-button-tonal-icon-spacing, 8px)}[dir=rtl] .mat-tonal-button .mdc-button__label+.mat-icon{margin-right:var(--mat-button-tonal-icon-spacing, 8px);margin-left:var(--mat-button-tonal-icon-offset, -8px)}.mat-tonal-button .mat-ripple-element{background-color:var(--mat-button-tonal-ripple-color, color-mix(in srgb, var(--mat-sys-on-secondary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-tonal-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-tonal-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-tonal-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-button-tonal-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-tonal-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-tonal-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-tonal-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-tonal-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-tonal-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-button-tonal-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-tonal-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-button-tonal-touch-target-size, 48px);display:var(--mat-button-tonal-touch-target-display, block);left:0;right:0;transform:translateY(-50%)}.mat-mdc-button,.mat-mdc-unelevated-button,.mat-mdc-raised-button,.mat-mdc-outlined-button,.mat-tonal-button{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-button .mat-mdc-button-ripple,.mat-mdc-button .mat-mdc-button-persistent-ripple,.mat-mdc-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button .mat-mdc-button-ripple,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button .mat-mdc-button-ripple,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before,.mat-tonal-button .mat-mdc-button-ripple,.mat-tonal-button .mat-mdc-button-persistent-ripple,.mat-tonal-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-button .mat-mdc-button-ripple,.mat-mdc-unelevated-button .mat-mdc-button-ripple,.mat-mdc-raised-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-tonal-button .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before,.mat-tonal-button .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-button .mdc-button__label,.mat-mdc-button .mat-icon,.mat-mdc-unelevated-button .mdc-button__label,.mat-mdc-unelevated-button .mat-icon,.mat-mdc-raised-button .mdc-button__label,.mat-mdc-raised-button .mat-icon,.mat-mdc-outlined-button .mdc-button__label,.mat-mdc-outlined-button .mat-icon,.mat-tonal-button .mdc-button__label,.mat-tonal-button .mat-icon{z-index:1;position:relative}.mat-mdc-button .mat-focus-indicator,.mat-mdc-unelevated-button .mat-focus-indicator,.mat-mdc-raised-button .mat-focus-indicator,.mat-mdc-outlined-button .mat-focus-indicator,.mat-tonal-button .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit}.mat-mdc-button:focus-visible>.mat-focus-indicator::before,.mat-mdc-unelevated-button:focus-visible>.mat-focus-indicator::before,.mat-mdc-raised-button:focus-visible>.mat-focus-indicator::before,.mat-mdc-outlined-button:focus-visible>.mat-focus-indicator::before,.mat-tonal-button:focus-visible>.mat-focus-indicator::before{content:"";border-radius:inherit}.mat-mdc-button._mat-animation-noopable,.mat-mdc-unelevated-button._mat-animation-noopable,.mat-mdc-raised-button._mat-animation-noopable,.mat-mdc-outlined-button._mat-animation-noopable,.mat-tonal-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-button>.mat-icon,.mat-mdc-unelevated-button>.mat-icon,.mat-mdc-raised-button>.mat-icon,.mat-mdc-outlined-button>.mat-icon,.mat-tonal-button>.mat-icon{display:inline-block;position:relative;vertical-align:top;font-size:1.125rem;height:1.125rem;width:1.125rem}.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mdc-button__ripple{top:-1px;left:-1px;bottom:-1px;right:-1px}.mat-mdc-unelevated-button .mat-focus-indicator::before,.mat-tonal-button .mat-focus-indicator::before,.mat-mdc-raised-button .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-outlined-button .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px)*-1)} -`,`@media(forced-colors: active){.mat-mdc-button:not(.mdc-button--outlined),.mat-mdc-unelevated-button:not(.mdc-button--outlined),.mat-mdc-raised-button:not(.mdc-button--outlined),.mat-mdc-outlined-button:not(.mdc-button--outlined),.mat-mdc-button-base.mat-tonal-button,.mat-mdc-icon-button.mat-mdc-icon-button,.mat-mdc-outlined-button .mdc-button__ripple{outline:solid 1px}} -`],encapsulation:2,changeDetection:0})}return t})();function p0A(t){return t.hasAttribute("mat-raised-button")?"elevated":t.hasAttribute("mat-stroked-button")?"outlined":t.hasAttribute("mat-flat-button")?"filled":t.hasAttribute("mat-button")?"text":null}var nY=new yA("mat-mdc-fab-default-options",{providedIn:"root",factory:()=>Gu}),Gu={color:"accent"},oY=(()=>{class t extends Lu{_options=h(nY,{optional:!0});_isFab=!0;extended=!1;constructor(){super(),this._options=this._options||Gu,this.color=this._options.color||Gu.color}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["button","mat-fab",""],["a","mat-fab",""],["button","matFab",""],["a","matFab",""]],hostAttrs:[1,"mdc-fab","mat-mdc-fab-base","mat-mdc-fab"],hostVars:4,hostBindings:function(i,n){i&2&&ne("mdc-fab--extended",n.extended)("mat-mdc-extended-fab",n.extended)},inputs:{extended:[2,"extended","extended",he]},exportAs:["matButton","matAnchor"],features:[It],attrs:u0A,ngContentSelectors:b9,decls:7,vars:4,consts:[[1,"mat-mdc-button-persistent-ripple"],[1,"mdc-button__label"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(i,n){i&1&&(Yt(v9),Di(0,"span",0),Ke(1),li(2,"span",1),Ke(3,1),Ei(),Ke(4,2),Di(5,"span",2)(6,"span",3)),i&2&&ne("mdc-button__ripple",!n._isFab)("mdc-fab__ripple",n._isFab)},styles:[`.mat-mdc-fab-base{-webkit-user-select:none;user-select:none;position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:56px;height:56px;padding:0;border:none;fill:currentColor;text-decoration:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;overflow:visible;transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1);flex-shrink:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-fab-base .mat-mdc-button-ripple,.mat-mdc-fab-base .mat-mdc-button-persistent-ripple,.mat-mdc-fab-base .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-fab-base .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-fab-base .mat-mdc-button-persistent-ripple::before{content:"";opacity:0}.mat-mdc-fab-base .mdc-button__label,.mat-mdc-fab-base .mat-icon{z-index:1;position:relative}.mat-mdc-fab-base .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute}.mat-mdc-fab-base:focus-visible>.mat-focus-indicator::before{content:""}.mat-mdc-fab-base._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-fab-base::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mat-mdc-fab-base[hidden]{display:none}.mat-mdc-fab-base::-moz-focus-inner{padding:0;border:0}.mat-mdc-fab-base:active,.mat-mdc-fab-base:focus{outline:none}.mat-mdc-fab-base:hover{cursor:pointer}.mat-mdc-fab-base>svg{width:100%}.mat-mdc-fab-base .mat-icon,.mat-mdc-fab-base .material-icons{transition:transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);fill:currentColor;will-change:transform}.mat-mdc-fab-base .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-fab-base[disabled],.mat-mdc-fab-base.mat-mdc-button-disabled{cursor:default;pointer-events:none}.mat-mdc-fab-base[disabled],.mat-mdc-fab-base[disabled]:focus,.mat-mdc-fab-base.mat-mdc-button-disabled,.mat-mdc-fab-base.mat-mdc-button-disabled:focus{box-shadow:none}.mat-mdc-fab-base.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-fab{background-color:var(--mat-fab-container-color, var(--mat-sys-primary-container));border-radius:var(--mat-fab-container-shape, var(--mat-sys-corner-large));color:var(--mat-fab-foreground-color, var(--mat-sys-on-primary-container, inherit));box-shadow:var(--mat-fab-container-elevation-shadow, var(--mat-sys-level3))}@media(hover: hover){.mat-mdc-fab:hover{box-shadow:var(--mat-fab-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-fab:focus{box-shadow:var(--mat-fab-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-fab:active,.mat-mdc-fab:focus:active{box-shadow:var(--mat-fab-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-fab[disabled],.mat-mdc-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-fab-disabled-state-foreground-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-fab-disabled-state-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-fab .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-fab-touch-target-size, 48px);display:var(--mat-fab-touch-target-display, block);left:50%;width:var(--mat-fab-touch-target-size, 48px);transform:translate(-50%, -50%)}.mat-mdc-fab .mat-ripple-element{background-color:var(--mat-fab-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-fab .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-state-layer-color, var(--mat-sys-on-primary-container))}.mat-mdc-fab.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-disabled-state-layer-color)}.mat-mdc-fab:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-fab.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-fab.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-fab.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-fab:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-mini-fab{width:40px;height:40px;background-color:var(--mat-fab-small-container-color, var(--mat-sys-primary-container));border-radius:var(--mat-fab-small-container-shape, var(--mat-sys-corner-medium));color:var(--mat-fab-small-foreground-color, var(--mat-sys-on-primary-container, inherit));box-shadow:var(--mat-fab-small-container-elevation-shadow, var(--mat-sys-level3))}@media(hover: hover){.mat-mdc-mini-fab:hover{box-shadow:var(--mat-fab-small-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-mini-fab:focus{box-shadow:var(--mat-fab-small-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-mini-fab:active,.mat-mdc-mini-fab:focus:active{box-shadow:var(--mat-fab-small-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-mini-fab[disabled],.mat-mdc-mini-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mat-fab-small-disabled-state-foreground-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));background-color:var(--mat-fab-small-disabled-state-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-mini-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-mini-fab .mat-mdc-button-touch-target{position:absolute;top:50%;height:var(--mat-fab-small-touch-target-size, 48px);display:var(--mat-fab-small-touch-target-display);left:50%;width:var(--mat-fab-small-touch-target-size, 48px);transform:translate(-50%, -50%)}.mat-mdc-mini-fab .mat-ripple-element{background-color:var(--mat-fab-small-ripple-color, color-mix(in srgb, var(--mat-sys-on-primary-container) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-mini-fab .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-small-state-layer-color, var(--mat-sys-on-primary-container))}.mat-mdc-mini-fab.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-fab-small-disabled-state-layer-color)}.mat-mdc-mini-fab:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-mini-fab.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-mini-fab.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-mini-fab.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-mini-fab:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-fab-small-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-extended-fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding-left:20px;padding-right:20px;width:auto;max-width:100%;line-height:normal;box-shadow:var(--mat-fab-extended-container-elevation-shadow, var(--mat-sys-level3));height:var(--mat-fab-extended-container-height, 56px);border-radius:var(--mat-fab-extended-container-shape, var(--mat-sys-corner-large));font-family:var(--mat-fab-extended-label-text-font, var(--mat-sys-label-large-font));font-size:var(--mat-fab-extended-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-fab-extended-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-fab-extended-label-text-tracking, var(--mat-sys-label-large-tracking))}@media(hover: hover){.mat-mdc-extended-fab:hover{box-shadow:var(--mat-fab-extended-hover-container-elevation-shadow, var(--mat-sys-level4))}}.mat-mdc-extended-fab:focus{box-shadow:var(--mat-fab-extended-focus-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-extended-fab:active,.mat-mdc-extended-fab:focus:active{box-shadow:var(--mat-fab-extended-pressed-container-elevation-shadow, var(--mat-sys-level3))}.mat-mdc-extended-fab[disabled],.mat-mdc-extended-fab.mat-mdc-button-disabled{cursor:default;pointer-events:none}.mat-mdc-extended-fab[disabled],.mat-mdc-extended-fab[disabled]:focus,.mat-mdc-extended-fab.mat-mdc-button-disabled,.mat-mdc-extended-fab.mat-mdc-button-disabled:focus{box-shadow:none}.mat-mdc-extended-fab.mat-mdc-button-disabled-interactive{pointer-events:auto}[dir=rtl] .mat-mdc-extended-fab .mdc-button__label+.mat-icon,[dir=rtl] .mat-mdc-extended-fab .mdc-button__label+.material-icons,.mat-mdc-extended-fab>.mat-icon,.mat-mdc-extended-fab>.material-icons{margin-left:-8px;margin-right:12px}.mat-mdc-extended-fab .mdc-button__label+.mat-icon,.mat-mdc-extended-fab .mdc-button__label+.material-icons,[dir=rtl] .mat-mdc-extended-fab>.mat-icon,[dir=rtl] .mat-mdc-extended-fab>.material-icons{margin-left:12px;margin-right:-8px}.mat-mdc-extended-fab .mat-mdc-button-touch-target{width:100%} -`],encapsulation:2,changeDetection:0})}return t})(),Tp=(()=>{class t extends Lu{_options=h(nY,{optional:!0});_isFab=!0;constructor(){super(),this._options=this._options||Gu,this.color=this._options.color||Gu.color}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["button","mat-mini-fab",""],["a","mat-mini-fab",""],["button","matMiniFab",""],["a","matMiniFab",""]],hostAttrs:[1,"mdc-fab","mat-mdc-fab-base","mdc-fab--mini","mat-mdc-mini-fab"],exportAs:["matButton","matAnchor"],features:[It],attrs:f0A,ngContentSelectors:b9,decls:7,vars:4,consts:[[1,"mat-mdc-button-persistent-ripple"],[1,"mdc-button__label"],[1,"mat-focus-indicator"],[1,"mat-mdc-button-touch-target"]],template:function(i,n){i&1&&(Yt(v9),Di(0,"span",0),Ke(1),li(2,"span",1),Ke(3,1),Ei(),Ke(4,2),Di(5,"span",2)(6,"span",3)),i&2&&ne("mdc-button__ripple",!n._isFab)("mdc-fab__ripple",n._isFab)},styles:[m0A],encapsulation:2,changeDetection:0})}return t})();var Ns=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[x2,Gi]})}return t})();var M9=class{_box;_destroyed=new XA;_resizeSubject=new XA;_resizeObserver;_elementObservables=new Map;constructor(e){this._box=e,typeof ResizeObserver<"u"&&(this._resizeObserver=new ResizeObserver(A=>this._resizeSubject.next(A)))}observe(e){return this._elementObservables.has(e)||this._elementObservables.set(e,new $i(A=>{let i=this._resizeSubject.subscribe(A);return this._resizeObserver?.observe(e,{box:this._box}),()=>{this._resizeObserver?.unobserve(e),i.unsubscribe(),this._elementObservables.delete(e)}}).pipe(Ze(A=>A.some(i=>i.target===e)),Ps({bufferSize:1,refCount:!0}),Bt(this._destroyed))),this._elementObservables.get(e)}destroy(){this._destroyed.next(),this._destroyed.complete(),this._resizeSubject.complete(),this._elementObservables.clear()}},Hp=(()=>{class t{_cleanupErrorListener;_observers=new Map;_ngZone=h(Oe);constructor(){typeof ResizeObserver<"u"}ngOnDestroy(){for(let[,A]of this._observers)A.destroy();this._observers.clear(),this._cleanupErrorListener?.()}observe(A,i){let n=i?.box||"content-box";return this._observers.has(n)||this._observers.set(n,new M9(n)),this._observers.get(n).observe(A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var w0A=["notch"],D0A=["matFormFieldNotchedOutline",""],y0A=["*"],aY=["iconPrefixContainer"],rY=["textPrefixContainer"],sY=["iconSuffixContainer"],gY=["textSuffixContainer"],v0A=["textField"],b0A=["*",[["mat-label"]],[["","matPrefix",""],["","matIconPrefix",""]],[["","matTextPrefix",""]],[["","matTextSuffix",""]],[["","matSuffix",""],["","matIconSuffix",""]],[["mat-error"],["","matError",""]],[["mat-hint",3,"align","end"]],[["mat-hint","align","end"]]],M0A=["*","mat-label","[matPrefix], [matIconPrefix]","[matTextPrefix]","[matTextSuffix]","[matSuffix], [matIconSuffix]","mat-error, [matError]","mat-hint:not([align='end'])","mat-hint[align='end']"];function k0A(t,e){t&1&&GA(0,"span",21)}function S0A(t,e){if(t&1&&(m(0,"label",20),Ke(1,1),V(2,k0A,1,0,"span",21),w()),t&2){let A=v(2);$("floating",A._shouldLabelFloat())("monitorResize",A._hasOutline())("id",A._labelId),ie("for",A._control.disableAutomaticLabeling?null:A._control.id),p(2),W(!A.hideRequiredMarker&&A._control.required?2:-1)}}function x0A(t,e){if(t&1&&V(0,S0A,3,5,"label",20),t&2){let A=v();W(A._hasFloatingLabel()?0:-1)}}function R0A(t,e){t&1&&GA(0,"div",7)}function N0A(t,e){}function F0A(t,e){if(t&1&&pt(0,N0A,0,0,"ng-template",13),t&2){v(2);let A=An(1);$("ngTemplateOutlet",A)}}function _0A(t,e){if(t&1&&(m(0,"div",9),V(1,F0A,1,1,null,13),w()),t&2){let A=v();$("matFormFieldNotchedOutlineOpen",A._shouldLabelFloat()),p(),W(A._forceDisplayInfixLabel()?-1:1)}}function L0A(t,e){t&1&&(m(0,"div",10,2),Ke(2,2),w())}function G0A(t,e){t&1&&(m(0,"div",11,3),Ke(2,3),w())}function K0A(t,e){}function U0A(t,e){if(t&1&&pt(0,K0A,0,0,"ng-template",13),t&2){v();let A=An(1);$("ngTemplateOutlet",A)}}function J0A(t,e){t&1&&(m(0,"div",14,4),Ke(2,4),w())}function Y0A(t,e){t&1&&(m(0,"div",15,5),Ke(2,5),w())}function T0A(t,e){t&1&&GA(0,"div",16)}function H0A(t,e){t&1&&(m(0,"div",18),Ke(1,6),w())}function z0A(t,e){if(t&1&&(m(0,"mat-hint",22),K(1),w()),t&2){let A=v(2);$("id",A._hintLabelId),p(),qA(A.hintLabel)}}function O0A(t,e){if(t&1&&(m(0,"div",19),V(1,z0A,2,2,"mat-hint",22),Ke(2,7),GA(3,"div",23),Ke(4,8),w()),t&2){let A=v();p(),W(A.hintLabel?1:-1)}}var Gg=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-label"]]})}return t})(),EY=new yA("MatError"),k9=(()=>{class t{id=h(an).getId("mat-mdc-error-");constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-error"],["","matError",""]],hostAttrs:[1,"mat-mdc-form-field-error","mat-mdc-form-field-bottom-align"],hostVars:1,hostBindings:function(i,n){i&2&&vo("id",n.id)},inputs:{id:"id"},features:[dt([{provide:EY,useExisting:t}])]})}return t})(),R1=(()=>{class t{align="start";id=h(an).getId("mat-mdc-hint-");static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-hint"]],hostAttrs:[1,"mat-mdc-form-field-hint","mat-mdc-form-field-bottom-align"],hostVars:4,hostBindings:function(i,n){i&2&&(vo("id",n.id),ie("align",null),ne("mat-mdc-form-field-hint-end",n.align==="end"))},inputs:{align:"align",id:"id"}})}return t})(),QY=new yA("MatPrefix"),S9=(()=>{class t{set _isTextSelector(A){this._isText=!0}_isText=!1;static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matPrefix",""],["","matIconPrefix",""],["","matTextPrefix",""]],inputs:{_isTextSelector:[0,"matTextPrefix","_isTextSelector"]},features:[dt([{provide:QY,useExisting:t}])]})}return t})(),hY=new yA("MatSuffix"),x9=(()=>{class t{set _isTextSelector(A){this._isText=!0}_isText=!1;static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matSuffix",""],["","matIconSuffix",""],["","matTextSuffix",""]],inputs:{_isTextSelector:[0,"matTextSuffix","_isTextSelector"]},features:[dt([{provide:hY,useExisting:t}])]})}return t})(),uY=new yA("FloatingLabelParent"),lY=(()=>{class t{_elementRef=h(ge);get floating(){return this._floating}set floating(A){this._floating=A,this.monitorResize&&this._handleResize()}_floating=!1;get monitorResize(){return this._monitorResize}set monitorResize(A){this._monitorResize=A,this._monitorResize?this._subscribeToResize():this._resizeSubscription.unsubscribe()}_monitorResize=!1;_resizeObserver=h(Hp);_ngZone=h(Oe);_parent=h(uY);_resizeSubscription=new Jn;constructor(){}ngOnDestroy(){this._resizeSubscription.unsubscribe()}getWidth(){return P0A(this._elementRef.nativeElement)}get element(){return this._elementRef.nativeElement}_handleResize(){setTimeout(()=>this._parent._handleLabelResized())}_subscribeToResize(){this._resizeSubscription.unsubscribe(),this._ngZone.runOutsideAngular(()=>{this._resizeSubscription=this._resizeObserver.observe(this._elementRef.nativeElement,{box:"border-box"}).subscribe(()=>this._handleResize())})}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["label","matFormFieldFloatingLabel",""]],hostAttrs:[1,"mdc-floating-label","mat-mdc-floating-label"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mdc-floating-label--float-above",n.floating)},inputs:{floating:"floating",monitorResize:"monitorResize"}})}return t})();function P0A(t){let e=t;if(e.offsetParent!==null)return e.scrollWidth;let A=e.cloneNode(!0);A.style.setProperty("position","absolute"),A.style.setProperty("transform","translate(-9999px, -9999px)"),document.documentElement.appendChild(A);let i=A.scrollWidth;return A.remove(),i}var cY="mdc-line-ripple--active",zp="mdc-line-ripple--deactivating",CY=(()=>{class t{_elementRef=h(ge);_cleanupTransitionEnd;constructor(){let A=h(Oe),i=h(_i);A.runOutsideAngular(()=>{this._cleanupTransitionEnd=i.listen(this._elementRef.nativeElement,"transitionend",this._handleTransitionEnd)})}activate(){let A=this._elementRef.nativeElement.classList;A.remove(zp),A.add(cY)}deactivate(){this._elementRef.nativeElement.classList.add(zp)}_handleTransitionEnd=A=>{let i=this._elementRef.nativeElement.classList,n=i.contains(zp);A.propertyName==="opacity"&&n&&i.remove(cY,zp)};ngOnDestroy(){this._cleanupTransitionEnd()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["div","matFormFieldLineRipple",""]],hostAttrs:[1,"mdc-line-ripple"]})}return t})(),IY=(()=>{class t{_elementRef=h(ge);_ngZone=h(Oe);open=!1;_notch;ngAfterViewInit(){let A=this._elementRef.nativeElement,i=A.querySelector(".mdc-floating-label");i?(A.classList.add("mdc-notched-outline--upgraded"),typeof requestAnimationFrame=="function"&&(i.style.transitionDuration="0s",this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>i.style.transitionDuration="")}))):A.classList.add("mdc-notched-outline--no-label")}_setNotchWidth(A){let i=this._notch.nativeElement;!this.open||!A?i.style.width="":i.style.width=`calc(${A}px * var(--mat-mdc-form-field-floating-label-scale, 0.75) + 9px)`}_setMaxWidth(A){this._notch.nativeElement.style.setProperty("--mat-form-field-notch-max-width",`calc(100% - ${A}px)`)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["div","matFormFieldNotchedOutline",""]],viewQuery:function(i,n){if(i&1&&ai(w0A,5),i&2){let o;ce(o=Ce())&&(n._notch=o.first)}},hostAttrs:[1,"mdc-notched-outline"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mdc-notched-outline--notched",n.open)},inputs:{open:[0,"matFormFieldNotchedOutlineOpen","open"]},attrs:D0A,ngContentSelectors:y0A,decls:5,vars:0,consts:[["notch",""],[1,"mat-mdc-notch-piece","mdc-notched-outline__leading"],[1,"mat-mdc-notch-piece","mdc-notched-outline__notch"],[1,"mat-mdc-notch-piece","mdc-notched-outline__trailing"]],template:function(i,n){i&1&&(Yt(),Di(0,"div",1),li(1,"div",2,0),Ke(3),Ei(),Di(4,"div",3))},encapsulation:2,changeDetection:0})}return t})(),Ku=(()=>{class t{value=null;stateChanges;id;placeholder;ngControl=null;focused=!1;empty=!1;shouldLabelFloat=!1;required=!1;disabled=!1;errorState=!1;controlType;autofilled;userAriaDescribedBy;disableAutomaticLabeling;describedByIds;static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t})}return t})();var Uu=new yA("MatFormField"),j0A=new yA("MAT_FORM_FIELD_DEFAULT_OPTIONS"),dY="fill",q0A="auto",BY="fixed",V0A="translateY(-50%)",No=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_platform=h(Ii);_idGenerator=h(an);_ngZone=h(Oe);_defaults=h(j0A,{optional:!0});_currentDirection;_textField;_iconPrefixContainer;_textPrefixContainer;_iconSuffixContainer;_textSuffixContainer;_floatingLabel;_notchedOutline;_lineRipple;_iconPrefixContainerSignal=ca("iconPrefixContainer");_textPrefixContainerSignal=ca("textPrefixContainer");_iconSuffixContainerSignal=ca("iconSuffixContainer");_textSuffixContainerSignal=ca("textSuffixContainer");_prefixSuffixContainers=Ue(()=>[this._iconPrefixContainerSignal(),this._textPrefixContainerSignal(),this._iconSuffixContainerSignal(),this._textSuffixContainerSignal()].map(A=>A?.nativeElement).filter(A=>A!==void 0));_formFieldControl;_prefixChildren;_suffixChildren;_errorChildren;_hintChildren;_labelChild=rC(Gg);get hideRequiredMarker(){return this._hideRequiredMarker}set hideRequiredMarker(A){this._hideRequiredMarker=yr(A)}_hideRequiredMarker=!1;color="primary";get floatLabel(){return this._floatLabel||this._defaults?.floatLabel||q0A}set floatLabel(A){A!==this._floatLabel&&(this._floatLabel=A,this._changeDetectorRef.markForCheck())}_floatLabel;get appearance(){return this._appearanceSignal()}set appearance(A){let i=A||this._defaults?.appearance||dY;this._appearanceSignal.set(i)}_appearanceSignal=jA(dY);get subscriptSizing(){return this._subscriptSizing||this._defaults?.subscriptSizing||BY}set subscriptSizing(A){this._subscriptSizing=A||this._defaults?.subscriptSizing||BY}_subscriptSizing=null;get hintLabel(){return this._hintLabel}set hintLabel(A){this._hintLabel=A,this._processHints()}_hintLabel="";_hasIconPrefix=!1;_hasTextPrefix=!1;_hasIconSuffix=!1;_hasTextSuffix=!1;_labelId=this._idGenerator.getId("mat-mdc-form-field-label-");_hintLabelId=this._idGenerator.getId("mat-mdc-hint-");_describedByIds;get _control(){return this._explicitFormFieldControl||this._formFieldControl}set _control(A){this._explicitFormFieldControl=A}_destroyed=new XA;_isFocused=null;_explicitFormFieldControl;_previousControl=null;_previousControlValidatorFn=null;_stateChanges;_valueChanges;_describedByChanges;_outlineLabelOffsetResizeObserver=null;_animationsDisabled=ji();constructor(){let A=this._defaults,i=h(Ro);A&&(A.appearance&&(this.appearance=A.appearance),this._hideRequiredMarker=!!A?.hideRequiredMarker,A.color&&(this.color=A.color)),Ga(()=>this._currentDirection=i.valueSignal()),this._syncOutlineLabelOffset()}ngAfterViewInit(){this._updateFocusState(),this._animationsDisabled||this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-form-field-animations-enabled")},300)}),this._changeDetectorRef.detectChanges()}ngAfterContentInit(){this._assertFormFieldControl(),this._initializeSubscript(),this._initializePrefixAndSuffix()}ngAfterContentChecked(){this._assertFormFieldControl(),this._control!==this._previousControl&&(this._initializeControl(this._previousControl),this._control.ngControl&&this._control.ngControl.control&&(this._previousControlValidatorFn=this._control.ngControl.control.validator),this._previousControl=this._control),this._control.ngControl&&this._control.ngControl.control&&this._control.ngControl.control.validator!==this._previousControlValidatorFn&&this._changeDetectorRef.markForCheck()}ngOnDestroy(){this._outlineLabelOffsetResizeObserver?.disconnect(),this._stateChanges?.unsubscribe(),this._valueChanges?.unsubscribe(),this._describedByChanges?.unsubscribe(),this._destroyed.next(),this._destroyed.complete()}getLabelId=Ue(()=>this._hasFloatingLabel()?this._labelId:null);getConnectedOverlayOrigin(){return this._textField||this._elementRef}_animateAndLockLabel(){this._hasFloatingLabel()&&(this.floatLabel="always")}_initializeControl(A){let i=this._control,n="mat-mdc-form-field-type-";A&&this._elementRef.nativeElement.classList.remove(n+A.controlType),i.controlType&&this._elementRef.nativeElement.classList.add(n+i.controlType),this._stateChanges?.unsubscribe(),this._stateChanges=i.stateChanges.subscribe(()=>{this._updateFocusState(),this._changeDetectorRef.markForCheck()}),this._describedByChanges?.unsubscribe(),this._describedByChanges=i.stateChanges.pipe(cn([void 0,void 0]),fe(()=>[i.errorState,i.userAriaDescribedBy]),h2(),Ze(([[o,a],[r,s]])=>o!==r||a!==s)).subscribe(()=>this._syncDescribedByIds()),this._valueChanges?.unsubscribe(),i.ngControl&&i.ngControl.valueChanges&&(this._valueChanges=i.ngControl.valueChanges.pipe(Bt(this._destroyed)).subscribe(()=>this._changeDetectorRef.markForCheck()))}_checkPrefixAndSuffixTypes(){this._hasIconPrefix=!!this._prefixChildren.find(A=>!A._isText),this._hasTextPrefix=!!this._prefixChildren.find(A=>A._isText),this._hasIconSuffix=!!this._suffixChildren.find(A=>!A._isText),this._hasTextSuffix=!!this._suffixChildren.find(A=>A._isText)}_initializePrefixAndSuffix(){this._checkPrefixAndSuffixTypes(),fi(this._prefixChildren.changes,this._suffixChildren.changes).subscribe(()=>{this._checkPrefixAndSuffixTypes(),this._changeDetectorRef.markForCheck()})}_initializeSubscript(){this._hintChildren.changes.subscribe(()=>{this._processHints(),this._changeDetectorRef.markForCheck()}),this._errorChildren.changes.subscribe(()=>{this._syncDescribedByIds(),this._changeDetectorRef.markForCheck()}),this._validateHints(),this._syncDescribedByIds()}_assertFormFieldControl(){this._control}_updateFocusState(){let A=this._control.focused;A&&!this._isFocused?(this._isFocused=!0,this._lineRipple?.activate()):!A&&(this._isFocused||this._isFocused===null)&&(this._isFocused=!1,this._lineRipple?.deactivate()),this._elementRef.nativeElement.classList.toggle("mat-focused",A),this._textField?.nativeElement.classList.toggle("mdc-text-field--focused",A)}_syncOutlineLabelOffset(){RU({earlyRead:()=>{if(this._appearanceSignal()!=="outline")return this._outlineLabelOffsetResizeObserver?.disconnect(),null;if(globalThis.ResizeObserver){this._outlineLabelOffsetResizeObserver||=new globalThis.ResizeObserver(()=>{this._writeOutlinedLabelStyles(this._getOutlinedLabelOffset())});for(let A of this._prefixSuffixContainers())this._outlineLabelOffsetResizeObserver.observe(A,{box:"border-box"})}return this._getOutlinedLabelOffset()},write:A=>this._writeOutlinedLabelStyles(A())})}_shouldAlwaysFloat(){return this.floatLabel==="always"}_hasOutline(){return this.appearance==="outline"}_forceDisplayInfixLabel(){return!this._platform.isBrowser&&this._prefixChildren.length&&!this._shouldLabelFloat()}_hasFloatingLabel=Ue(()=>!!this._labelChild());_shouldLabelFloat(){return this._hasFloatingLabel()?this._control.shouldLabelFloat||this._shouldAlwaysFloat():!1}_shouldForward(A){let i=this._control?this._control.ngControl:null;return i&&i[A]}_getSubscriptMessageType(){return this._errorChildren&&this._errorChildren.length>0&&this._control.errorState?"error":"hint"}_handleLabelResized(){this._refreshOutlineNotchWidth()}_refreshOutlineNotchWidth(){!this._hasOutline()||!this._floatingLabel||!this._shouldLabelFloat()?this._notchedOutline?._setNotchWidth(0):this._notchedOutline?._setNotchWidth(this._floatingLabel.getWidth())}_processHints(){this._validateHints(),this._syncDescribedByIds()}_validateHints(){this._hintChildren}_syncDescribedByIds(){if(this._control){let A=[];if(this._control.userAriaDescribedBy&&typeof this._control.userAriaDescribedBy=="string"&&A.push(...this._control.userAriaDescribedBy.split(" ")),this._getSubscriptMessageType()==="hint"){let o=this._hintChildren?this._hintChildren.find(r=>r.align==="start"):null,a=this._hintChildren?this._hintChildren.find(r=>r.align==="end"):null;o?A.push(o.id):this._hintLabel&&A.push(this._hintLabelId),a&&A.push(a.id)}else this._errorChildren&&A.push(...this._errorChildren.map(o=>o.id));let i=this._control.describedByIds,n;if(i){let o=this._describedByIds||A;n=A.concat(i.filter(a=>a&&!o.includes(a)))}else n=A;this._control.setDescribedByIds(n),this._describedByIds=A}}_getOutlinedLabelOffset(){if(!this._hasOutline()||!this._floatingLabel)return null;if(!this._iconPrefixContainer&&!this._textPrefixContainer)return["",null];if(!this._isAttachedToDom())return null;let A=this._iconPrefixContainer?.nativeElement,i=this._textPrefixContainer?.nativeElement,n=this._iconSuffixContainer?.nativeElement,o=this._textSuffixContainer?.nativeElement,a=A?.getBoundingClientRect().width??0,r=i?.getBoundingClientRect().width??0,s=n?.getBoundingClientRect().width??0,g=o?.getBoundingClientRect().width??0,l=this._currentDirection==="rtl"?"-1":"1",C=`${a+r}px`,d=`calc(${l} * (${C} + var(--mat-mdc-form-field-label-offset-x, 0px)))`,B=`var(--mat-mdc-form-field-label-transform, ${V0A} translateX(${d}))`,E=a+r+s+g;return[B,E]}_writeOutlinedLabelStyles(A){if(A!==null){let[i,n]=A;this._floatingLabel&&(this._floatingLabel.element.style.transform=i),n!==null&&this._notchedOutline?._setMaxWidth(n)}}_isAttachedToDom(){let A=this._elementRef.nativeElement;if(A.getRootNode){let i=A.getRootNode();return i&&i!==A}return document.documentElement.contains(A)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-form-field"]],contentQueries:function(i,n,o){if(i&1&&(Cp(o,n._labelChild,Gg,5),fa(o,Ku,5)(o,QY,5)(o,hY,5)(o,EY,5)(o,R1,5)),i&2){Dr();let a;ce(a=Ce())&&(n._formFieldControl=a.first),ce(a=Ce())&&(n._prefixChildren=a),ce(a=Ce())&&(n._suffixChildren=a),ce(a=Ce())&&(n._errorChildren=a),ce(a=Ce())&&(n._hintChildren=a)}},viewQuery:function(i,n){if(i&1&&(rs(n._iconPrefixContainerSignal,aY,5)(n._textPrefixContainerSignal,rY,5)(n._iconSuffixContainerSignal,sY,5)(n._textSuffixContainerSignal,gY,5),ai(v0A,5)(aY,5)(rY,5)(sY,5)(gY,5)(lY,5)(IY,5)(CY,5)),i&2){Dr(4);let o;ce(o=Ce())&&(n._textField=o.first),ce(o=Ce())&&(n._iconPrefixContainer=o.first),ce(o=Ce())&&(n._textPrefixContainer=o.first),ce(o=Ce())&&(n._iconSuffixContainer=o.first),ce(o=Ce())&&(n._textSuffixContainer=o.first),ce(o=Ce())&&(n._floatingLabel=o.first),ce(o=Ce())&&(n._notchedOutline=o.first),ce(o=Ce())&&(n._lineRipple=o.first)}},hostAttrs:[1,"mat-mdc-form-field"],hostVars:38,hostBindings:function(i,n){i&2&&ne("mat-mdc-form-field-label-always-float",n._shouldAlwaysFloat())("mat-mdc-form-field-has-icon-prefix",n._hasIconPrefix)("mat-mdc-form-field-has-icon-suffix",n._hasIconSuffix)("mat-form-field-invalid",n._control.errorState)("mat-form-field-disabled",n._control.disabled)("mat-form-field-autofilled",n._control.autofilled)("mat-form-field-appearance-fill",n.appearance=="fill")("mat-form-field-appearance-outline",n.appearance=="outline")("mat-form-field-hide-placeholder",n._hasFloatingLabel()&&!n._shouldLabelFloat())("mat-primary",n.color!=="accent"&&n.color!=="warn")("mat-accent",n.color==="accent")("mat-warn",n.color==="warn")("ng-untouched",n._shouldForward("untouched"))("ng-touched",n._shouldForward("touched"))("ng-pristine",n._shouldForward("pristine"))("ng-dirty",n._shouldForward("dirty"))("ng-valid",n._shouldForward("valid"))("ng-invalid",n._shouldForward("invalid"))("ng-pending",n._shouldForward("pending"))},inputs:{hideRequiredMarker:"hideRequiredMarker",color:"color",floatLabel:"floatLabel",appearance:"appearance",subscriptSizing:"subscriptSizing",hintLabel:"hintLabel"},exportAs:["matFormField"],features:[dt([{provide:Uu,useExisting:t},{provide:uY,useExisting:t}])],ngContentSelectors:M0A,decls:18,vars:21,consts:[["labelTemplate",""],["textField",""],["iconPrefixContainer",""],["textPrefixContainer",""],["textSuffixContainer",""],["iconSuffixContainer",""],[1,"mat-mdc-text-field-wrapper","mdc-text-field",3,"click"],[1,"mat-mdc-form-field-focus-overlay"],[1,"mat-mdc-form-field-flex"],["matFormFieldNotchedOutline","",3,"matFormFieldNotchedOutlineOpen"],[1,"mat-mdc-form-field-icon-prefix"],[1,"mat-mdc-form-field-text-prefix"],[1,"mat-mdc-form-field-infix"],[3,"ngTemplateOutlet"],[1,"mat-mdc-form-field-text-suffix"],[1,"mat-mdc-form-field-icon-suffix"],["matFormFieldLineRipple",""],["aria-atomic","true","aria-live","polite",1,"mat-mdc-form-field-subscript-wrapper","mat-mdc-form-field-bottom-align"],[1,"mat-mdc-form-field-error-wrapper"],[1,"mat-mdc-form-field-hint-wrapper"],["matFormFieldFloatingLabel","",3,"floating","monitorResize","id"],["aria-hidden","true",1,"mat-mdc-form-field-required-marker","mdc-floating-label--required"],[3,"id"],[1,"mat-mdc-form-field-hint-spacer"]],template:function(i,n){if(i&1){let o=JA();Yt(b0A),pt(0,x0A,1,1,"ng-template",null,0,w2),m(2,"div",6,1),tA("click",function(r){return Z(o),X(n._control.onContainerClick(r))}),V(4,R0A,1,0,"div",7),m(5,"div",8),V(6,_0A,2,2,"div",9),V(7,L0A,3,0,"div",10),V(8,G0A,3,0,"div",11),m(9,"div",12),V(10,U0A,1,1,null,13),Ke(11),w(),V(12,J0A,3,0,"div",14),V(13,Y0A,3,0,"div",15),w(),V(14,T0A,1,0,"div",16),w(),m(15,"div",17),V(16,H0A,2,0,"div",18)(17,O0A,5,1,"div",19),w()}if(i&2){let o;p(2),ne("mdc-text-field--filled",!n._hasOutline())("mdc-text-field--outlined",n._hasOutline())("mdc-text-field--no-label",!n._hasFloatingLabel())("mdc-text-field--disabled",n._control.disabled)("mdc-text-field--invalid",n._control.errorState),p(2),W(!n._hasOutline()&&!n._control.disabled?4:-1),p(2),W(n._hasOutline()?6:-1),p(),W(n._hasIconPrefix?7:-1),p(),W(n._hasTextPrefix?8:-1),p(2),W(!n._hasOutline()||n._forceDisplayInfixLabel()?10:-1),p(2),W(n._hasTextSuffix?12:-1),p(),W(n._hasIconSuffix?13:-1),p(),W(n._hasOutline()?-1:14),p(),ne("mat-mdc-form-field-subscript-dynamic-size",n.subscriptSizing==="dynamic");let a=n._getSubscriptMessageType();p(),W((o=a)==="error"?16:o==="hint"?17:-1)}},dependencies:[lY,IY,sl,CY,R1],styles:[`.mdc-text-field{display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-text-field__input{width:100%;min-width:0;border:none;border-radius:0;background:none;padding:0;-moz-appearance:none;-webkit-appearance:none;height:28px}.mdc-text-field__input::-webkit-calendar-picker-indicator,.mdc-text-field__input::-webkit-search-cancel-button{display:none}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}.mdc-text-field__input::placeholder{opacity:0}.mdc-text-field__input::-moz-placeholder{opacity:0}.mdc-text-field__input::-webkit-input-placeholder{opacity:0}.mdc-text-field__input:-ms-input-placeholder{opacity:0}.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-moz-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive::-webkit-input-placeholder{opacity:0}.mdc-text-field--disabled:not(.mdc-text-field--no-label) .mdc-text-field__input.mat-mdc-input-disabled-interactive:-ms-input-placeholder{opacity:0}.mdc-text-field--outlined .mdc-text-field__input,.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mat-form-field-filled-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-filled-caret-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-filled-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mat-form-field-outlined-input-text-color, var(--mat-sys-on-surface));caret-color:var(--mat-form-field-outlined-caret-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-outlined-input-text-placeholder-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mat-form-field-filled-error-caret-color, var(--mat-sys-error))}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mat-form-field-outlined-error-caret-color, var(--mat-sys-error))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-filled-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mat-form-field-outlined-disabled-input-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}}.mdc-text-field--filled{height:56px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:var(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mat-form-field-filled-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mat-form-field-filled-container-color, var(--mat-sys-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mat-form-field-filled-disabled-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 4%, transparent))}.mdc-text-field--outlined{height:56px;overflow:visible;padding-right:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)));padding-left:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px)}[dir=rtl] .mdc-text-field--outlined{padding-right:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)) + 4px);padding-left:max(16px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)))}.mdc-floating-label{position:absolute;left:0;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label{right:0;left:auto;transform-origin:right top;text-align:right}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:auto}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label{left:auto;right:4px}.mdc-text-field--filled .mdc-floating-label{left:16px;right:auto}[dir=rtl] .mdc-text-field--filled .mdc-floating-label{left:auto;right:16px}.mdc-text-field--disabled .mdc-floating-label{cursor:default}@media(forced-colors: active){.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mat-form-field-filled-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-filled-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mat-form-field-filled-hover-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-filled-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mat-form-field-filled-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-filled-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mat-form-field-filled-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mat-form-field-filled-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-filled-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-filled-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-filled-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mat-form-field-outlined-label-text-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-outlined-focus-label-text-color, var(--mat-sys-primary))}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mat-form-field-outlined-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label{color:var(--mat-form-field-outlined-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mat-form-field-outlined-error-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mat-form-field-outlined-error-focus-label-text-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mat-form-field-outlined-error-hover-label-text-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mat-form-field-outlined-label-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-form-field-outlined-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-form-field-outlined-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-form-field-outlined-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-floating-label--float-above{cursor:auto;transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1);font-size:.75rem}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:1px;margin-right:0;content:"*"}[dir=rtl] .mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:0;margin-right:1px}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline{text-align:right}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mat-mdc-notch-piece{box-sizing:border-box;height:100%;pointer-events:none;border:none;border-top:1px solid;border-bottom:1px solid}.mdc-text-field--focused .mat-mdc-notch-piece{border-width:2px}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-outline-color, var(--mat-sys-outline));border-width:var(--mat-form-field-outlined-outline-width, 1px)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-hover-outline-color, var(--mat-sys-on-surface))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-focus-outline-color, var(--mat-sys-primary))}.mdc-text-field--outlined.mdc-text-field--disabled .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-notched-outline .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-hover-outline-color, var(--mat-sys-on-error-container))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mat-form-field-outlined-error-focus-outline-color, var(--mat-sys-error))}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mat-mdc-notch-piece{border-width:var(--mat-form-field-outlined-focus-outline-width, 2px)}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small)))}[dir=rtl] .mdc-notched-outline__leading{border-left:none;border-right:1px solid;border-bottom-left-radius:0;border-top-left-radius:0;border-top-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__trailing{flex-grow:1;border-left:none;border-right:1px solid;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}[dir=rtl] .mdc-notched-outline__trailing{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small));border-bottom-left-radius:var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))}.mdc-notched-outline__notch{flex:0 0 auto;width:auto}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:min(var(--mat-form-field-notch-max-width, 100%),calc(100% - max(12px, var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))) * 2))}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{max-width:min(100%,calc(100% - max(12px, var(--mat-form-field-outlined-container-shape, var(--mat-sys-corner-extra-small))) * 2))}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:""}.mdc-line-ripple::before{z-index:1;border-bottom-width:var(--mat-form-field-filled-active-indicator-height, 1px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-active-indicator-color, var(--mat-sys-on-surface-variant))}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-hover-active-indicator-color, var(--mat-sys-on-surface))}.mdc-text-field--filled.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-disabled-active-indicator-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-error-active-indicator-color, var(--mat-sys-error))}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mat-form-field-filled-error-hover-active-indicator-color, var(--mat-sys-on-error-container))}.mdc-line-ripple::after{transform:scaleX(0);opacity:0;z-index:2}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-width:var(--mat-form-field-filled-focus-active-indicator-height, 2px)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mat-form-field-filled-focus-active-indicator-color, var(--mat-sys-primary))}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mat-form-field-filled-error-focus-active-indicator-color, var(--mat-sys-error))}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-text-field--disabled{pointer-events:none}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font:inherit;letter-spacing:inherit;text-decoration:inherit;text-transform:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;line-height:normal;pointer-events:all;will-change:auto}.mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label.mdc-floating-label{cursor:inherit}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto;will-change:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0;--mat-mdc-form-field-label-offset-x: -16px}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-form-field-disabled .mdc-text-field__input::placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-disabled .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:1px solid rgba(0,0,0,0)}[dir=rtl] .mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:none;border-right:1px solid rgba(0,0,0,0)}.mat-mdc-form-field-infix{min-height:var(--mat-form-field-container-height, 56px);padding-top:var(--mat-form-field-filled-with-label-container-padding-top, 24px);padding-bottom:var(--mat-form-field-filled-with-label-container-padding-bottom, 8px)}.mdc-text-field--outlined .mat-mdc-form-field-infix,.mdc-text-field--no-label .mat-mdc-form-field-infix{padding-top:var(--mat-form-field-container-vertical-padding, 16px);padding-bottom:var(--mat-form-field-container-vertical-padding, 16px)}.mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:calc(var(--mat-form-field-container-height, 56px)/2)}.mdc-text-field--filled .mat-mdc-floating-label{display:var(--mat-form-field-filled-label-display, block)}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY(calc(calc(6.75px + var(--mat-form-field-container-height, 56px) / 2) * -1)) scale(var(--mat-mdc-form-field-floating-label-scale, 0.75));transform:var(--mat-mdc-form-field-label-transform)}@keyframes _mat-form-field-subscript-animation{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px;opacity:1;transform:translateY(0);animation:_mat-form-field-subscript-animation 0ms cubic-bezier(0.55, 0, 0.55, 0.2)}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:"";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block;color:var(--mat-form-field-error-text-color, var(--mat-sys-error))}.mat-mdc-form-field-subscript-wrapper,.mat-mdc-form-field-bottom-align::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-subscript-text-font, var(--mat-sys-body-small-font));line-height:var(--mat-form-field-subscript-text-line-height, var(--mat-sys-body-small-line-height));font-size:var(--mat-form-field-subscript-text-size, var(--mat-sys-body-small-size));letter-spacing:var(--mat-form-field-subscript-text-tracking, var(--mat-sys-body-small-tracking));font-weight:var(--mat-form-field-subscript-text-weight, var(--mat-sys-body-small-weight))}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0;pointer-events:none;background-color:var(--mat-form-field-state-layer-color, var(--mat-sys-on-surface))}.mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-form-field.mat-focused .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-focus-state-layer-opacity, 0)}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option{color:var(--mat-form-field-select-option-text-color, var(--mat-sys-neutral10))}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option:disabled{color:var(--mat-form-field-select-disabled-option-text-color, color-mix(in srgb, var(--mat-sys-neutral10) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:"";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;top:50%;margin-top:-2.5px;pointer-events:none;color:var(--mat-form-field-enabled-select-arrow-color, var(--mat-sys-on-surface-variant))}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select.mat-focused .mat-mdc-form-field-infix::after{color:var(--mat-form-field-focus-select-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field-type-mat-native-select.mat-form-field-disabled .mat-mdc-form-field-infix::after{color:var(--mat-form-field-disabled-select-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}@media(forced-colors: active){.mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}}@media(forced-colors: active){.mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}}@media(forced-colors: active){.mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}}.mat-mdc-form-field-input-control[type=date],.mat-mdc-form-field-input-control[type=datetime],.mat-mdc-form-field-input-control[type=datetime-local],.mat-mdc-form-field-input-control[type=month],.mat-mdc-form-field-input-control[type=week],.mat-mdc-form-field-input-control[type=time]{line-height:1}.mat-mdc-form-field-input-control::-webkit-datetime-edit{line-height:1;padding:0;margin-bottom:-2px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-container-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-form-field-container-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-form-field-container-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-form-field-container-text-tracking, var(--mat-sys-body-large-tracking));font-weight:var(--mat-form-field-container-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(var(--mat-form-field-outlined-label-text-populated-size)*var(--mat-mdc-form-field-floating-label-scale))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:var(--mat-form-field-outlined-label-text-populated-size)}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%;z-index:0}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0;pointer-events:auto;position:relative;z-index:1}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:0 12px;box-sizing:content-box}.mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-leading-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-disabled-leading-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-form-field-disabled .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-disabled-trailing-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-invalid .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-trailing-icon-color, var(--mat-sys-error))}.mat-form-field-invalid:not(.mat-focused):not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-hover-trailing-icon-color, var(--mat-sys-on-error-container))}.mat-form-field-invalid.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-focus-trailing-icon-color, var(--mat-sys-error))}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field-infix:has(textarea[cols]){width:auto}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input{transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-moz-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mat-mdc-form-field.mat-form-field-animations-enabled.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field.mat-form-field-animations-enabled .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field.mat-form-field-animations-enabled .mat-mdc-form-field-error-wrapper{animation-duration:300ms}.mdc-notched-outline .mdc-floating-label{max-width:calc(100% + 1px)}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(133.3333333333% + 1px)} -`],encapsulation:2,changeDetection:0})}return t})();var Yr=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Rp,No,Gi]})}return t})();var fY=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],hostAttrs:["cdk-text-field-style-loader",""],decls:0,vars:0,template:function(i,n){},styles:[`textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms} -`],encapsulation:2,changeDetection:0})}return t})(),W0A={passive:!0},mY=(()=>{class t{_platform=h(Ii);_ngZone=h(Oe);_renderer=h(Kr).createRenderer(null,null);_styleLoader=h(Xn);_monitoredElements=new Map;constructor(){}monitor(A){if(!this._platform.isBrowser)return ja;this._styleLoader.load(fY);let i=xs(A),n=this._monitoredElements.get(i);if(n)return n.subject;let o=new XA,a="cdk-text-field-autofilled",r=g=>{g.animationName==="cdk-text-field-autofill-start"&&!i.classList.contains(a)?(i.classList.add(a),this._ngZone.run(()=>o.next({target:g.target,isAutofilled:!0}))):g.animationName==="cdk-text-field-autofill-end"&&i.classList.contains(a)&&(i.classList.remove(a),this._ngZone.run(()=>o.next({target:g.target,isAutofilled:!1})))},s=this._ngZone.runOutsideAngular(()=>(i.classList.add("cdk-text-field-autofill-monitored"),this._renderer.listen(i,"animationstart",r,W0A)));return this._monitoredElements.set(i,{subject:o,unlisten:s}),o}stopMonitoring(A){let i=xs(A),n=this._monitoredElements.get(i);n&&(n.unlisten(),n.subject.complete(),i.classList.remove("cdk-text-field-autofill-monitored"),i.classList.remove("cdk-text-field-autofilled"),this._monitoredElements.delete(i))}ngOnDestroy(){this._monitoredElements.forEach((A,i)=>this.stopMonitoring(i))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var Op=(()=>{class t{_elementRef=h(ge);_platform=h(Ii);_ngZone=h(Oe);_renderer=h(_i);_resizeEvents=new XA;_previousValue;_initialHeight;_destroyed=new XA;_listenerCleanups;_minRows;_maxRows;_enabled=!0;_previousMinRows=-1;_textareaElement;get minRows(){return this._minRows}set minRows(A){this._minRows=tg(A),this._setMinHeight()}get maxRows(){return this._maxRows}set maxRows(A){this._maxRows=tg(A),this._setMaxHeight()}get enabled(){return this._enabled}set enabled(A){this._enabled!==A&&((this._enabled=A)?this.resizeToFitContent(!0):this.reset())}get placeholder(){return this._textareaElement.placeholder}set placeholder(A){this._cachedPlaceholderHeight=void 0,A?this._textareaElement.setAttribute("placeholder",A):this._textareaElement.removeAttribute("placeholder"),this._cacheTextareaPlaceholderHeight()}_cachedLineHeight;_cachedPlaceholderHeight;_document=h(Xt);_hasFocus=!1;_isViewInited=!1;constructor(){h(Xn).load(fY),this._textareaElement=this._elementRef.nativeElement}_setMinHeight(){let A=this.minRows&&this._cachedLineHeight?`${this.minRows*this._cachedLineHeight}px`:null;A&&(this._textareaElement.style.minHeight=A)}_setMaxHeight(){let A=this.maxRows&&this._cachedLineHeight?`${this.maxRows*this._cachedLineHeight}px`:null;A&&(this._textareaElement.style.maxHeight=A)}ngAfterViewInit(){this._platform.isBrowser&&(this._initialHeight=this._textareaElement.style.height,this.resizeToFitContent(),this._ngZone.runOutsideAngular(()=>{this._listenerCleanups=[this._renderer.listen("window","resize",()=>this._resizeEvents.next()),this._renderer.listen(this._textareaElement,"focus",this._handleFocusEvent),this._renderer.listen(this._textareaElement,"blur",this._handleFocusEvent)],this._resizeEvents.pipe(m1(16)).subscribe(()=>{this._cachedLineHeight=this._cachedPlaceholderHeight=void 0,this.resizeToFitContent(!0)})}),this._isViewInited=!0,this.resizeToFitContent(!0))}ngOnDestroy(){this._listenerCleanups?.forEach(A=>A()),this._resizeEvents.complete(),this._destroyed.next(),this._destroyed.complete()}_cacheTextareaLineHeight(){if(this._cachedLineHeight)return;let A=this._textareaElement.cloneNode(!1),i=A.style;A.rows=1,i.position="absolute",i.visibility="hidden",i.border="none",i.padding="0",i.height="",i.minHeight="",i.maxHeight="",i.top=i.bottom=i.left=i.right="auto",i.overflow="hidden",this._textareaElement.parentNode.appendChild(A),this._cachedLineHeight=A.clientHeight,A.remove(),this._setMinHeight(),this._setMaxHeight()}_measureScrollHeight(){let A=this._textareaElement,i=A.style.marginBottom||"",n=this._platform.FIREFOX,o=this._hasFocus,a=n?"cdk-textarea-autosize-measuring-firefox":"cdk-textarea-autosize-measuring";o&&(A.style.marginBottom=`${A.clientHeight}px`),A.classList.add(a);let r=A.scrollHeight-4;return A.classList.remove(a),o&&(A.style.marginBottom=i),r}_cacheTextareaPlaceholderHeight(){if(!this._isViewInited||this._cachedPlaceholderHeight!=null)return;if(!this.placeholder){this._cachedPlaceholderHeight=0;return}let A=this._textareaElement.value;this._textareaElement.value=this._textareaElement.placeholder,this._cachedPlaceholderHeight=this._measureScrollHeight(),this._textareaElement.value=A}_handleFocusEvent=A=>{this._hasFocus=A.type==="focus"};ngDoCheck(){this._platform.isBrowser&&this.resizeToFitContent()}resizeToFitContent(A=!1){if(!this._enabled||(this._cacheTextareaLineHeight(),this._cacheTextareaPlaceholderHeight(),!this._cachedLineHeight))return;let i=this._elementRef.nativeElement,n=i.value;if(!A&&this._minRows===this._previousMinRows&&n===this._previousValue)return;let o=this._measureScrollHeight(),a=Math.max(o,this._cachedPlaceholderHeight||0);i.style.height=`${a}px`,this._ngZone.runOutsideAngular(()=>{typeof requestAnimationFrame<"u"?requestAnimationFrame(()=>this._scrollToCaretPosition(i)):setTimeout(()=>this._scrollToCaretPosition(i))}),this._previousValue=n,this._previousMinRows=this._minRows}reset(){this._initialHeight!==void 0&&(this._textareaElement.style.height=this._initialHeight)}_noopInputHandler(){}_scrollToCaretPosition(A){let{selectionStart:i,selectionEnd:n}=A;!this._destroyed.isStopped&&this._hasFocus&&A.setSelectionRange(i,n)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["textarea","cdkTextareaAutosize",""]],hostAttrs:["rows","1",1,"cdk-textarea-autosize"],hostBindings:function(i,n){i&1&&tA("input",function(){return n._noopInputHandler()})},inputs:{minRows:[0,"cdkAutosizeMinRows","minRows"],maxRows:[0,"cdkAutosizeMaxRows","maxRows"],enabled:[2,"cdkTextareaAutosize","enabled",he],placeholder:"placeholder"},exportAs:["cdkTextareaAutosize"]})}return t})(),KB=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();var wY=new yA("MAT_INPUT_VALUE_ACCESSOR");var UB=(()=>{class t{isErrorState(A,i){return!!(A&&A.invalid&&(A.touched||i&&i.submitted))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var JB=class{_defaultMatcher;ngControl;_parentFormGroup;_parentForm;_stateChanges;errorState=!1;matcher;constructor(e,A,i,n,o){this._defaultMatcher=e,this.ngControl=A,this._parentFormGroup=i,this._parentForm=n,this._stateChanges=o}updateErrorState(){let e=this.errorState,A=this._parentFormGroup||this._parentForm,i=this.matcher||this._defaultMatcher,n=this.ngControl?this.ngControl.control:null,o=i?.isErrorState(n,A)??!1;o!==e&&(this.errorState=o,this._stateChanges.next())}};var Z0A=["button","checkbox","file","hidden","image","radio","range","reset","submit"],X0A=new yA("MAT_INPUT_CONFIG"),wa=(()=>{class t{_elementRef=h(ge);_platform=h(Ii);ngControl=h(eg,{optional:!0,self:!0});_autofillMonitor=h(mY);_ngZone=h(Oe);_formField=h(Uu,{optional:!0});_renderer=h(_i);_uid=h(an).getId("mat-input-");_previousNativeValue;_inputValueAccessor;_signalBasedValueAccessor;_previousPlaceholder=null;_errorStateTracker;_config=h(X0A,{optional:!0});_cleanupIosKeyup;_cleanupWebkitWheel;_isServer=!1;_isNativeSelect=!1;_isTextarea=!1;_isInFormField=!1;focused=!1;stateChanges=new XA;controlType="mat-input";autofilled=!1;get disabled(){return this._disabled}set disabled(A){this._disabled=yr(A),this.focused&&(this.focused=!1,this.stateChanges.next())}_disabled=!1;get id(){return this._id}set id(A){this._id=A||this._uid}_id;placeholder;name;get required(){return this._required??this.ngControl?.control?.hasValidator(Ag.required)??!1}set required(A){this._required=yr(A)}_required;get type(){return this._type}set type(A){this._type=A||"text",this._validateType(),!this._isTextarea&&m9().has(this._type)&&(this._elementRef.nativeElement.type=this._type)}_type="text";get errorStateMatcher(){return this._errorStateTracker.matcher}set errorStateMatcher(A){this._errorStateTracker.matcher=A}userAriaDescribedBy;get value(){return this._signalBasedValueAccessor?this._signalBasedValueAccessor.value():this._inputValueAccessor.value}set value(A){A!==this.value&&(this._signalBasedValueAccessor?this._signalBasedValueAccessor.value.set(A):this._inputValueAccessor.value=A,this.stateChanges.next())}get readonly(){return this._readonly}set readonly(A){this._readonly=yr(A)}_readonly=!1;disabledInteractive;get errorState(){return this._errorStateTracker.errorState}set errorState(A){this._errorStateTracker.errorState=A}_neverEmptyInputTypes=["date","datetime","datetime-local","month","time","week"].filter(A=>m9().has(A));constructor(){let A=h(SB,{optional:!0}),i=h(v2,{optional:!0}),n=h(UB),o=h(wY,{optional:!0,self:!0}),a=this._elementRef.nativeElement,r=a.nodeName.toLowerCase();o?w1(o.value)?this._signalBasedValueAccessor=o:this._inputValueAccessor=o:this._inputValueAccessor=a,this._previousNativeValue=this.value,this.id=this.id,this._platform.IOS&&this._ngZone.runOutsideAngular(()=>{this._cleanupIosKeyup=this._renderer.listen(a,"keyup",this._iOSKeyupListener)}),this._errorStateTracker=new JB(n,this.ngControl,i,A,this.stateChanges),this._isServer=!this._platform.isBrowser,this._isNativeSelect=r==="select",this._isTextarea=r==="textarea",this._isInFormField=!!this._formField,this.disabledInteractive=this._config?.disabledInteractive||!1,this._isNativeSelect&&(this.controlType=a.multiple?"mat-native-select-multiple":"mat-native-select"),this._signalBasedValueAccessor&&Ga(()=>{this._signalBasedValueAccessor.value(),this.stateChanges.next()})}ngAfterViewInit(){this._platform.isBrowser&&this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(A=>{this.autofilled=A.isAutofilled,this.stateChanges.next()})}ngOnChanges(){this.stateChanges.next()}ngOnDestroy(){this.stateChanges.complete(),this._platform.isBrowser&&this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement),this._cleanupIosKeyup?.(),this._cleanupWebkitWheel?.()}ngDoCheck(){this.ngControl&&(this.updateErrorState(),this.ngControl.disabled!==null&&this.ngControl.disabled!==this.disabled&&(this.disabled=this.ngControl.disabled,this.stateChanges.next())),this._dirtyCheckNativeValue(),this._dirtyCheckPlaceholder()}focus(A){this._elementRef.nativeElement.focus(A)}updateErrorState(){this._errorStateTracker.updateErrorState()}_focusChanged(A){if(A!==this.focused){if(!this._isNativeSelect&&A&&this.disabled&&this.disabledInteractive){let i=this._elementRef.nativeElement;i.type==="number"?(i.type="text",i.setSelectionRange(0,0),i.type="number"):i.setSelectionRange(0,0)}this.focused=A,this.stateChanges.next()}}_onInput(){}_dirtyCheckNativeValue(){let A=this._elementRef.nativeElement.value;this._previousNativeValue!==A&&(this._previousNativeValue=A,this.stateChanges.next())}_dirtyCheckPlaceholder(){let A=this._getPlaceholder();if(A!==this._previousPlaceholder){let i=this._elementRef.nativeElement;this._previousPlaceholder=A,A?i.setAttribute("placeholder",A):i.removeAttribute("placeholder")}}_getPlaceholder(){return this.placeholder||null}_validateType(){Z0A.indexOf(this._type)>-1}_isNeverEmpty(){return this._neverEmptyInputTypes.indexOf(this._type)>-1}_isBadInput(){let A=this._elementRef.nativeElement.validity;return A&&A.badInput}get empty(){return!this._isNeverEmpty()&&!this._elementRef.nativeElement.value&&!this._isBadInput()&&!this.autofilled}get shouldLabelFloat(){if(this._isNativeSelect){let A=this._elementRef.nativeElement,i=A.options[0];return this.focused||A.multiple||!this.empty||!!(A.selectedIndex>-1&&i&&i.label)}else return this.focused&&!this.disabled||!this.empty}get describedByIds(){return this._elementRef.nativeElement.getAttribute("aria-describedby")?.split(" ")||[]}setDescribedByIds(A){let i=this._elementRef.nativeElement;A.length?i.setAttribute("aria-describedby",A.join(" ")):i.removeAttribute("aria-describedby")}onContainerClick(){this.focused||this.focus()}_isInlineSelect(){let A=this._elementRef.nativeElement;return this._isNativeSelect&&(A.multiple||A.size>1)}_iOSKeyupListener=A=>{let i=A.target;!i.value&&i.selectionStart===0&&i.selectionEnd===0&&(i.setSelectionRange(1,1),i.setSelectionRange(0,0))};_getReadonlyAttribute(){return this._isNativeSelect?null:this.readonly||this.disabled&&this.disabledInteractive?"true":null}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["input","matInput",""],["textarea","matInput",""],["select","matNativeControl",""],["input","matNativeControl",""],["textarea","matNativeControl",""]],hostAttrs:[1,"mat-mdc-input-element"],hostVars:21,hostBindings:function(i,n){i&1&&tA("focus",function(){return n._focusChanged(!0)})("blur",function(){return n._focusChanged(!1)})("input",function(){return n._onInput()}),i&2&&(vo("id",n.id)("disabled",n.disabled&&!n.disabledInteractive)("required",n.required),ie("name",n.name||null)("readonly",n._getReadonlyAttribute())("aria-disabled",n.disabled&&n.disabledInteractive?"true":null)("aria-invalid",n.empty&&n.required?null:n.errorState)("aria-required",n.required)("id",n.id),ne("mat-input-server",n._isServer)("mat-mdc-form-field-textarea-control",n._isInFormField&&n._isTextarea)("mat-mdc-form-field-input-control",n._isInFormField)("mat-mdc-input-disabled-interactive",n.disabledInteractive)("mdc-text-field__input",n._isInFormField)("mat-mdc-native-select-inline",n._isInlineSelect()))},inputs:{disabled:"disabled",id:"id",placeholder:"placeholder",name:"name",required:"required",type:"type",errorStateMatcher:"errorStateMatcher",userAriaDescribedBy:[0,"aria-describedby","userAriaDescribedBy"],value:"value",readonly:"readonly",disabledInteractive:[2,"disabledInteractive","disabledInteractive",he]},exportAs:["matInput"],features:[dt([{provide:Ku,useExisting:t}]),ti]})}return t})(),gl=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Yr,Yr,KB,Gi]})}return t})();var tn=(function(t){return t[t.State=0]="State",t[t.Transition=1]="Transition",t[t.Sequence=2]="Sequence",t[t.Group=3]="Group",t[t.Animate=4]="Animate",t[t.Keyframes=5]="Keyframes",t[t.Style=6]="Style",t[t.Trigger=7]="Trigger",t[t.Reference=8]="Reference",t[t.AnimateChild=9]="AnimateChild",t[t.AnimateRef=10]="AnimateRef",t[t.Query=11]="Query",t[t.Stagger=12]="Stagger",t})(tn||{}),$l="*";function DY(t,e=null){return{type:tn.Sequence,steps:t,options:e}}function R9(t){return{type:tn.Style,styles:t,offset:null}}var lC=class{_onDoneFns=[];_onStartFns=[];_onDestroyFns=[];_originalOnDoneFns=[];_originalOnStartFns=[];_started=!1;_destroyed=!1;_finished=!1;_position=0;parentPlayer=null;totalTime;constructor(e=0,A=0){this.totalTime=e+A}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){queueMicrotask(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(e=>e()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(e){this._position=this.totalTime?e*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(e){let A=e=="start"?this._onStartFns:this._onDoneFns;A.forEach(i=>i()),A.length=0}},YB=class{_onDoneFns=[];_onStartFns=[];_finished=!1;_started=!1;_destroyed=!1;_onDestroyFns=[];parentPlayer=null;totalTime=0;players;constructor(e){this.players=e;let A=0,i=0,n=0,o=this.players.length;o==0?queueMicrotask(()=>this._onFinish()):this.players.forEach(a=>{a.onDone(()=>{++A==o&&this._onFinish()}),a.onDestroy(()=>{++i==o&&this._onDestroy()}),a.onStart(()=>{++n==o&&this._onStart()})}),this.totalTime=this.players.reduce((a,r)=>Math.max(a,r.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this.players.forEach(e=>e.init())}onStart(e){this._onStartFns.push(e)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(e=>e()),this._onStartFns=[])}onDone(e){this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(e=>e.play())}pause(){this.players.forEach(e=>e.pause())}restart(){this.players.forEach(e=>e.restart())}finish(){this._onFinish(),this.players.forEach(e=>e.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(e=>e.destroy()),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this.players.forEach(e=>e.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(e){let A=e*this.totalTime;this.players.forEach(i=>{let n=i.totalTime?Math.min(1,A/i.totalTime):1;i.setPosition(n)})}getPosition(){let e=this.players.reduce((A,i)=>A===null||i.totalTime>A.totalTime?i:A,null);return e!=null?e.getPosition():0}beforeDestroy(){this.players.forEach(e=>{e.beforeDestroy&&e.beforeDestroy()})}triggerCallback(e){let A=e=="start"?this._onStartFns:this._onDoneFns;A.forEach(i=>i()),A.length=0}},Tu="!";function yY(t){return new kt(3e3,!1)}function $0A(){return new kt(3100,!1)}function ACA(){return new kt(3101,!1)}function eCA(t){return new kt(3001,!1)}function tCA(t){return new kt(3003,!1)}function iCA(t){return new kt(3004,!1)}function bY(t,e){return new kt(3005,!1)}function MY(){return new kt(3006,!1)}function kY(){return new kt(3007,!1)}function SY(t,e){return new kt(3008,!1)}function xY(t){return new kt(3002,!1)}function RY(t,e,A,i,n){return new kt(3010,!1)}function NY(){return new kt(3011,!1)}function FY(){return new kt(3012,!1)}function _Y(){return new kt(3200,!1)}function LY(){return new kt(3202,!1)}function GY(){return new kt(3013,!1)}function KY(t){return new kt(3014,!1)}function UY(t){return new kt(3015,!1)}function JY(t){return new kt(3016,!1)}function YY(t,e){return new kt(3404,!1)}function nCA(t){return new kt(3502,!1)}function TY(t){return new kt(3503,!1)}function HY(){return new kt(3300,!1)}function zY(t){return new kt(3504,!1)}function OY(t){return new kt(3301,!1)}function PY(t,e){return new kt(3302,!1)}function jY(t){return new kt(3303,!1)}function qY(t,e){return new kt(3400,!1)}function VY(t){return new kt(3401,!1)}function WY(t){return new kt(3402,!1)}function ZY(t,e){return new kt(3505,!1)}function cC(t){switch(t.length){case 0:return new lC;case 1:return t[0];default:return new YB(t)}}function L9(t,e,A=new Map,i=new Map){let n=[],o=[],a=-1,r=null;if(e.forEach(s=>{let g=s.get("offset"),l=g==a,C=l&&r||new Map;s.forEach((I,d)=>{let B=d,E=I;if(d!=="offset")switch(B=t.normalizePropertyName(B,n),E){case Tu:E=A.get(d);break;case $l:E=i.get(d);break;default:E=t.normalizeStyleValue(d,B,E,n);break}C.set(B,E)}),l||o.push(C),r=C,a=g}),n.length)throw nCA(n);return o}function Pp(t,e,A,i){switch(e){case"start":t.onStart(()=>i(A&&N9(A,"start",t)));break;case"done":t.onDone(()=>i(A&&N9(A,"done",t)));break;case"destroy":t.onDestroy(()=>i(A&&N9(A,"destroy",t)));break}}function N9(t,e,A){let i=A.totalTime,n=!!A.disabled,o=jp(t.element,t.triggerName,t.fromState,t.toState,e||t.phaseName,i??t.totalTime,n),a=t._data;return a!=null&&(o._data=a),o}function jp(t,e,A,i,n="",o=0,a){return{element:t,triggerName:e,fromState:A,toState:i,phaseName:n,totalTime:o,disabled:!!a}}function ng(t,e,A){let i=t.get(e);return i||t.set(e,i=A),i}function G9(t){let e=t.indexOf(":"),A=t.substring(1,e),i=t.slice(e+1);return[A,i]}var oCA=typeof document>"u"?null:document.documentElement;function qp(t){let e=t.parentNode||t.host||null;return e===oCA?null:e}function aCA(t){return t.substring(1,6)=="ebkit"}var N1=null,vY=!1;function XY(t){N1||(N1=rCA()||{},vY=N1.style?"WebkitAppearance"in N1.style:!1);let e=!0;return N1.style&&!aCA(t)&&(e=t in N1.style,!e&&vY&&(e="Webkit"+t.charAt(0).toUpperCase()+t.slice(1)in N1.style)),e}function rCA(){return typeof document<"u"?document.body:null}function K9(t,e){for(;e;){if(e===t)return!0;e=qp(e)}return!1}function U9(t,e,A){if(A)return Array.from(t.querySelectorAll(e));let i=t.querySelector(e);return i?[i]:[]}var sCA=1e3,J9="{{",gCA="}}",Y9="ng-enter",Vp="ng-leave",Hu="ng-trigger",zu=".ng-trigger",T9="ng-animating",Wp=".ng-animating";function g0(t){if(typeof t=="number")return t;let e=t.match(/^(-?[\.\d]+)(m?s)/);return!e||e.length<2?0:F9(parseFloat(e[1]),e[2])}function F9(t,e){return e==="s"?t*sCA:t}function Ou(t,e,A){return t.hasOwnProperty("duration")?t:cCA(t,e,A)}var lCA=/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;function cCA(t,e,A){let i,n=0,o="";if(typeof t=="string"){let a=t.match(lCA);if(a===null)return e.push(yY(t)),{duration:0,delay:0,easing:""};i=F9(parseFloat(a[1]),a[2]);let r=a[3];r!=null&&(n=F9(parseFloat(r),a[4]));let s=a[5];s&&(o=s)}else i=t;if(!A){let a=!1,r=e.length;i<0&&(e.push($0A()),a=!0),n<0&&(e.push(ACA()),a=!0),a&&e.splice(r,0,yY(t))}return{duration:i,delay:n,easing:o}}function $Y(t){return t.length?t[0]instanceof Map?t:t.map(e=>new Map(Object.entries(e))):[]}function Ac(t,e,A){e.forEach((i,n)=>{let o=Zp(n);A&&!A.has(n)&&A.set(n,t.style[o]),t.style[o]=i})}function R2(t,e){e.forEach((A,i)=>{let n=Zp(i);t.style[n]=""})}function TB(t){return Array.isArray(t)?t.length==1?t[0]:DY(t):t}function AT(t,e,A){let i=e.params||{},n=H9(t);n.length&&n.forEach(o=>{i.hasOwnProperty(o)||A.push(eCA(o))})}var _9=new RegExp(`${J9}\\s*(.+?)\\s*${gCA}`,"g");function H9(t){let e=[];if(typeof t=="string"){let A;for(;A=_9.exec(t);)e.push(A[1]);_9.lastIndex=0}return e}function HB(t,e,A){let i=`${t}`,n=i.replace(_9,(o,a)=>{let r=e[a];return r==null&&(A.push(tCA(a)),r=""),r.toString()});return n==i?t:n}var CCA=/-+([a-z0-9])/g;function Zp(t){return t.replace(CCA,(...e)=>e[1].toUpperCase())}function eT(t,e){return t===0||e===0}function tT(t,e,A){if(A.size&&e.length){let i=e[0],n=[];if(A.forEach((o,a)=>{i.has(a)||n.push(a),i.set(a,o)}),n.length)for(let o=1;oa.set(r,Xp(t,r)))}}return e}function og(t,e,A){switch(e.type){case tn.Trigger:return t.visitTrigger(e,A);case tn.State:return t.visitState(e,A);case tn.Transition:return t.visitTransition(e,A);case tn.Sequence:return t.visitSequence(e,A);case tn.Group:return t.visitGroup(e,A);case tn.Animate:return t.visitAnimate(e,A);case tn.Keyframes:return t.visitKeyframes(e,A);case tn.Style:return t.visitStyle(e,A);case tn.Reference:return t.visitReference(e,A);case tn.AnimateChild:return t.visitAnimateChild(e,A);case tn.AnimateRef:return t.visitAnimateRef(e,A);case tn.Query:return t.visitQuery(e,A);case tn.Stagger:return t.visitStagger(e,A);default:throw iCA(e.type)}}function Xp(t,e){return window.getComputedStyle(t)[e]}var aM=(()=>{class t{validateStyleProperty(A){return XY(A)}containsElement(A,i){return K9(A,i)}getParentElement(A){return qp(A)}query(A,i,n){return U9(A,i,n)}computeStyle(A,i,n){return n||""}animate(A,i,n,o,a,r=[],s){return new lC(n,o)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac})}return t})(),_1=class{static NOOP=new aM},L1=class{};var ICA=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]),i6=class extends L1{normalizePropertyName(e,A){return Zp(e)}normalizeStyleValue(e,A,i,n){let o="",a=i.toString().trim();if(ICA.has(A)&&i!==0&&i!=="0")if(typeof i=="number")o="px";else{let r=i.match(/^[+-]?[\d\.]+([a-z]*)$/);r&&r[1].length==0&&n.push(bY(e,i))}return a+o}};var n6="*";function dCA(t,e){let A=[];return typeof t=="string"?t.split(/\s*,\s*/).forEach(i=>BCA(i,A,e)):A.push(t),A}function BCA(t,e,A){if(t[0]==":"){let s=ECA(t,A);if(typeof s=="function"){e.push(s);return}t=s}let i=t.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/);if(i==null||i.length<4)return A.push(UY(t)),e;let n=i[1],o=i[2],a=i[3];e.push(iT(n,a));let r=n==n6&&a==n6;o[0]=="<"&&!r&&e.push(iT(a,n))}function ECA(t,e){switch(t){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(A,i)=>parseFloat(i)>parseFloat(A);case":decrement":return(A,i)=>parseFloat(i) *"}}var $p=new Set(["true","1"]),A6=new Set(["false","0"]);function iT(t,e){let A=$p.has(t)||A6.has(t),i=$p.has(e)||A6.has(e);return(n,o)=>{let a=t==n6||t==n,r=e==n6||e==o;return!a&&A&&typeof n=="boolean"&&(a=n?$p.has(t):A6.has(t)),!r&&i&&typeof o=="boolean"&&(r=o?$p.has(e):A6.has(e)),a&&r}}var IT=":self",QCA=new RegExp(`s*${IT}s*,?`,"g");function dT(t,e,A,i){return new V9(t).build(e,A,i)}var nT="",V9=class{_driver;constructor(e){this._driver=e}build(e,A,i){let n=new W9(A);return this._resetContextStyleTimingState(n),og(this,TB(e),n)}_resetContextStyleTimingState(e){e.currentQuerySelector=nT,e.collectedStyles=new Map,e.collectedStyles.set(nT,new Map),e.currentTime=0}visitTrigger(e,A){let i=A.queryCount=0,n=A.depCount=0,o=[],a=[];return e.name.charAt(0)=="@"&&A.errors.push(MY()),e.definitions.forEach(r=>{if(this._resetContextStyleTimingState(A),r.type==tn.State){let s=r,g=s.name;g.toString().split(/\s*,\s*/).forEach(l=>{s.name=l,o.push(this.visitState(s,A))}),s.name=g}else if(r.type==tn.Transition){let s=this.visitTransition(r,A);i+=s.queryCount,n+=s.depCount,a.push(s)}else A.errors.push(kY())}),{type:tn.Trigger,name:e.name,states:o,transitions:a,queryCount:i,depCount:n,options:null}}visitState(e,A){let i=this.visitStyle(e.styles,A),n=e.options&&e.options.params||null;if(i.containsDynamicStyles){let o=new Set,a=n||{};i.styles.forEach(r=>{r instanceof Map&&r.forEach(s=>{H9(s).forEach(g=>{a.hasOwnProperty(g)||o.add(g)})})}),o.size&&A.errors.push(SY(e.name,[...o.values()]))}return{type:tn.State,name:e.name,style:i,options:n?{params:n}:null}}visitTransition(e,A){A.queryCount=0,A.depCount=0;let i=og(this,TB(e.animation),A),n=dCA(e.expr,A.errors);return{type:tn.Transition,matchers:n,animation:i,queryCount:A.queryCount,depCount:A.depCount,options:F1(e.options)}}visitSequence(e,A){return{type:tn.Sequence,steps:e.steps.map(i=>og(this,i,A)),options:F1(e.options)}}visitGroup(e,A){let i=A.currentTime,n=0,o=e.steps.map(a=>{A.currentTime=i;let r=og(this,a,A);return n=Math.max(n,A.currentTime),r});return A.currentTime=n,{type:tn.Group,steps:o,options:F1(e.options)}}visitAnimate(e,A){let i=mCA(e.timings,A.errors);A.currentAnimateTimings=i;let n,o=e.styles?e.styles:R9({});if(o.type==tn.Keyframes)n=this.visitKeyframes(o,A);else{let a=e.styles,r=!1;if(!a){r=!0;let g={};i.easing&&(g.easing=i.easing),a=R9(g)}A.currentTime+=i.duration+i.delay;let s=this.visitStyle(a,A);s.isEmptyStep=r,n=s}return A.currentAnimateTimings=null,{type:tn.Animate,timings:i,style:n,options:null}}visitStyle(e,A){let i=this._makeStyleAst(e,A);return this._validateStyleAst(i,A),i}_makeStyleAst(e,A){let i=[],n=Array.isArray(e.styles)?e.styles:[e.styles];for(let r of n)typeof r=="string"?r===$l?i.push(r):A.errors.push(xY(r)):i.push(new Map(Object.entries(r)));let o=!1,a=null;return i.forEach(r=>{if(r instanceof Map&&(r.has("easing")&&(a=r.get("easing"),r.delete("easing")),!o)){for(let s of r.values())if(s.toString().indexOf(J9)>=0){o=!0;break}}}),{type:tn.Style,styles:i,easing:a,offset:e.offset,containsDynamicStyles:o,options:null}}_validateStyleAst(e,A){let i=A.currentAnimateTimings,n=A.currentTime,o=A.currentTime;i&&o>0&&(o-=i.duration+i.delay),e.styles.forEach(a=>{typeof a!="string"&&a.forEach((r,s)=>{let g=A.collectedStyles.get(A.currentQuerySelector),l=g.get(s),C=!0;l&&(o!=n&&o>=l.startTime&&n<=l.endTime&&(A.errors.push(RY(s,l.startTime,l.endTime,o,n)),C=!1),o=l.startTime),C&&g.set(s,{startTime:o,endTime:n}),A.options&&AT(r,A.options,A.errors)})})}visitKeyframes(e,A){let i={type:tn.Keyframes,styles:[],options:null};if(!A.currentAnimateTimings)return A.errors.push(NY()),i;let n=1,o=0,a=[],r=!1,s=!1,g=0,l=e.steps.map(f=>{let b=this._makeStyleAst(f,A),S=b.offset!=null?b.offset:fCA(b.styles),M=0;return S!=null&&(o++,M=b.offset=S),s=s||M<0||M>1,r=r||M0&&o{let S=I>0?b==d?1:I*b:a[b],M=S*Q;A.currentTime=B+E.delay+M,E.duration=M,this._validateStyleAst(f,A),f.offset=S,i.styles.push(f)}),i}visitReference(e,A){return{type:tn.Reference,animation:og(this,TB(e.animation),A),options:F1(e.options)}}visitAnimateChild(e,A){return A.depCount++,{type:tn.AnimateChild,options:F1(e.options)}}visitAnimateRef(e,A){return{type:tn.AnimateRef,animation:this.visitReference(e.animation,A),options:F1(e.options)}}visitQuery(e,A){let i=A.currentQuerySelector,n=e.options||{};A.queryCount++,A.currentQuery=e;let[o,a]=hCA(e.selector);A.currentQuerySelector=i.length?i+" "+o:o,ng(A.collectedStyles,A.currentQuerySelector,new Map);let r=og(this,TB(e.animation),A);return A.currentQuery=null,A.currentQuerySelector=i,{type:tn.Query,selector:o,limit:n.limit||0,optional:!!n.optional,includeSelf:a,animation:r,originalSelector:e.selector,options:F1(e.options)}}visitStagger(e,A){A.currentQuery||A.errors.push(GY());let i=e.timings==="full"?{duration:0,delay:0,easing:"full"}:Ou(e.timings,A.errors,!0);return{type:tn.Stagger,animation:og(this,TB(e.animation),A),timings:i,options:null}}};function hCA(t){let e=!!t.split(/\s*,\s*/).find(A=>A==IT);return e&&(t=t.replace(QCA,"")),t=t.replace(/@\*/g,zu).replace(/@\w+/g,A=>zu+"-"+A.slice(1)).replace(/:animating/g,Wp),[t,e]}function uCA(t){return t?cA({},t):null}var W9=class{errors;queryCount=0;depCount=0;currentTransition=null;currentQuery=null;currentQuerySelector=null;currentAnimateTimings=null;currentTime=0;collectedStyles=new Map;options=null;unsupportedCSSPropertiesFound=new Set;constructor(e){this.errors=e}};function fCA(t){if(typeof t=="string")return null;let e=null;if(Array.isArray(t))t.forEach(A=>{if(A instanceof Map&&A.has("offset")){let i=A;e=parseFloat(i.get("offset")),i.delete("offset")}});else if(t instanceof Map&&t.has("offset")){let A=t;e=parseFloat(A.get("offset")),A.delete("offset")}return e}function mCA(t,e){if(t.hasOwnProperty("duration"))return t;if(typeof t=="number"){let o=Ou(t,e).duration;return z9(o,0,"")}let A=t;if(A.split(/\s+/).some(o=>o.charAt(0)=="{"&&o.charAt(1)=="{")){let o=z9(0,0,"");return o.dynamic=!0,o.strValue=A,o}let n=Ou(A,e);return z9(n.duration,n.delay,n.easing)}function F1(t){return t?(t=cA({},t),t.params&&(t.params=uCA(t.params))):t={},t}function z9(t,e,A){return{duration:t,delay:e,easing:A}}function rM(t,e,A,i,n,o,a=null,r=!1){return{type:1,element:t,keyframes:e,preStyleProps:A,postStyleProps:i,duration:n,delay:o,totalTime:n+o,easing:a,subTimeline:r}}var ju=class{_map=new Map;get(e){return this._map.get(e)||[]}append(e,A){let i=this._map.get(e);i||this._map.set(e,i=[]),i.push(...A)}has(e){return this._map.has(e)}clear(){this._map.clear()}},pCA=1,wCA=":enter",DCA=new RegExp(wCA,"g"),yCA=":leave",vCA=new RegExp(yCA,"g");function BT(t,e,A,i,n,o=new Map,a=new Map,r,s,g=[]){return new Z9().buildKeyframes(t,e,A,i,n,o,a,r,s,g)}var Z9=class{buildKeyframes(e,A,i,n,o,a,r,s,g,l=[]){g=g||new ju;let C=new X9(e,A,g,n,o,l,[]);C.options=s;let I=s.delay?g0(s.delay):0;C.currentTimeline.delayNextStep(I),C.currentTimeline.setStyles([a],null,C.errors,s),og(this,i,C);let d=C.timelines.filter(B=>B.containsAnimation());if(d.length&&r.size){let B;for(let E=d.length-1;E>=0;E--){let Q=d[E];if(Q.element===A){B=Q;break}}B&&!B.allowOnlyTimelineStyles()&&B.setStyles([r],null,C.errors,s)}return d.length?d.map(B=>B.buildKeyframes()):[rM(A,[],[],[],0,I,"",!1)]}visitTrigger(e,A){}visitState(e,A){}visitTransition(e,A){}visitAnimateChild(e,A){let i=A.subInstructions.get(A.element);if(i){let n=A.createSubContext(e.options),o=A.currentTimeline.currentTime,a=this._visitSubInstructions(i,n,n.options);o!=a&&A.transformIntoNewTimeline(a)}A.previousNode=e}visitAnimateRef(e,A){let i=A.createSubContext(e.options);i.transformIntoNewTimeline(),this._applyAnimationRefDelays([e.options,e.animation.options],A,i),this.visitReference(e.animation,i),A.transformIntoNewTimeline(i.currentTimeline.currentTime),A.previousNode=e}_applyAnimationRefDelays(e,A,i){for(let n of e){let o=n?.delay;if(o){let a=typeof o=="number"?o:g0(HB(o,n?.params??{},A.errors));i.delayNextStep(a)}}}_visitSubInstructions(e,A,i){let o=A.currentTimeline.currentTime,a=i.duration!=null?g0(i.duration):null,r=i.delay!=null?g0(i.delay):null;return a!==0&&e.forEach(s=>{let g=A.appendInstructionToTimeline(s,a,r);o=Math.max(o,g.duration+g.delay)}),o}visitReference(e,A){A.updateOptions(e.options,!0),og(this,e.animation,A),A.previousNode=e}visitSequence(e,A){let i=A.subContextCount,n=A,o=e.options;if(o&&(o.params||o.delay)&&(n=A.createSubContext(o),n.transformIntoNewTimeline(),o.delay!=null)){n.previousNode.type==tn.Style&&(n.currentTimeline.snapshotCurrentStyles(),n.previousNode=o6);let a=g0(o.delay);n.delayNextStep(a)}e.steps.length&&(e.steps.forEach(a=>og(this,a,n)),n.currentTimeline.applyStylesToKeyframe(),n.subContextCount>i&&n.transformIntoNewTimeline()),A.previousNode=e}visitGroup(e,A){let i=[],n=A.currentTimeline.currentTime,o=e.options&&e.options.delay?g0(e.options.delay):0;e.steps.forEach(a=>{let r=A.createSubContext(e.options);o&&r.delayNextStep(o),og(this,a,r),n=Math.max(n,r.currentTimeline.currentTime),i.push(r.currentTimeline)}),i.forEach(a=>A.currentTimeline.mergeTimelineCollectedStyles(a)),A.transformIntoNewTimeline(n),A.previousNode=e}_visitTiming(e,A){if(e.dynamic){let i=e.strValue,n=A.params?HB(i,A.params,A.errors):i;return Ou(n,A.errors)}else return{duration:e.duration,delay:e.delay,easing:e.easing}}visitAnimate(e,A){let i=A.currentAnimateTimings=this._visitTiming(e.timings,A),n=A.currentTimeline;i.delay&&(A.incrementTime(i.delay),n.snapshotCurrentStyles());let o=e.style;o.type==tn.Keyframes?this.visitKeyframes(o,A):(A.incrementTime(i.duration),this.visitStyle(o,A),n.applyStylesToKeyframe()),A.currentAnimateTimings=null,A.previousNode=e}visitStyle(e,A){let i=A.currentTimeline,n=A.currentAnimateTimings;!n&&i.hasCurrentStyleProperties()&&i.forwardFrame();let o=n&&n.easing||e.easing;e.isEmptyStep?i.applyEmptyStep(o):i.setStyles(e.styles,o,A.errors,A.options),A.previousNode=e}visitKeyframes(e,A){let i=A.currentAnimateTimings,n=A.currentTimeline.duration,o=i.duration,r=A.createSubContext().currentTimeline;r.easing=i.easing,e.styles.forEach(s=>{let g=s.offset||0;r.forwardTime(g*o),r.setStyles(s.styles,s.easing,A.errors,A.options),r.applyStylesToKeyframe()}),A.currentTimeline.mergeTimelineCollectedStyles(r),A.transformIntoNewTimeline(n+o),A.previousNode=e}visitQuery(e,A){let i=A.currentTimeline.currentTime,n=e.options||{},o=n.delay?g0(n.delay):0;o&&(A.previousNode.type===tn.Style||i==0&&A.currentTimeline.hasCurrentStyleProperties())&&(A.currentTimeline.snapshotCurrentStyles(),A.previousNode=o6);let a=i,r=A.invokeQuery(e.selector,e.originalSelector,e.limit,e.includeSelf,!!n.optional,A.errors);A.currentQueryTotal=r.length;let s=null;r.forEach((g,l)=>{A.currentQueryIndex=l;let C=A.createSubContext(e.options,g);o&&C.delayNextStep(o),g===A.element&&(s=C.currentTimeline),og(this,e.animation,C),C.currentTimeline.applyStylesToKeyframe();let I=C.currentTimeline.currentTime;a=Math.max(a,I)}),A.currentQueryIndex=0,A.currentQueryTotal=0,A.transformIntoNewTimeline(a),s&&(A.currentTimeline.mergeTimelineCollectedStyles(s),A.currentTimeline.snapshotCurrentStyles()),A.previousNode=e}visitStagger(e,A){let i=A.parentContext,n=A.currentTimeline,o=e.timings,a=Math.abs(o.duration),r=a*(A.currentQueryTotal-1),s=a*A.currentQueryIndex;switch(o.duration<0?"reverse":o.easing){case"reverse":s=r-s;break;case"full":s=i.currentStaggerTime;break}let l=A.currentTimeline;s&&l.delayNextStep(s);let C=l.currentTime;og(this,e.animation,A),A.previousNode=e,i.currentStaggerTime=n.currentTime-C+(n.startTime-i.currentTimeline.startTime)}},o6={},X9=class t{_driver;element;subInstructions;_enterClassName;_leaveClassName;errors;timelines;parentContext=null;currentTimeline;currentAnimateTimings=null;previousNode=o6;subContextCount=0;options={};currentQueryIndex=0;currentQueryTotal=0;currentStaggerTime=0;constructor(e,A,i,n,o,a,r,s){this._driver=e,this.element=A,this.subInstructions=i,this._enterClassName=n,this._leaveClassName=o,this.errors=a,this.timelines=r,this.currentTimeline=s||new a6(this._driver,A,0),r.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(e,A){if(!e)return;let i=e,n=this.options;i.duration!=null&&(n.duration=g0(i.duration)),i.delay!=null&&(n.delay=g0(i.delay));let o=i.params;if(o){let a=n.params;a||(a=this.options.params={}),Object.keys(o).forEach(r=>{(!A||!a.hasOwnProperty(r))&&(a[r]=HB(o[r],a,this.errors))})}}_copyOptions(){let e={};if(this.options){let A=this.options.params;if(A){let i=e.params={};Object.keys(A).forEach(n=>{i[n]=A[n]})}}return e}createSubContext(e=null,A,i){let n=A||this.element,o=new t(this._driver,n,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(n,i||0));return o.previousNode=this.previousNode,o.currentAnimateTimings=this.currentAnimateTimings,o.options=this._copyOptions(),o.updateOptions(e),o.currentQueryIndex=this.currentQueryIndex,o.currentQueryTotal=this.currentQueryTotal,o.parentContext=this,this.subContextCount++,o}transformIntoNewTimeline(e){return this.previousNode=o6,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(e,A,i){let n={duration:A??e.duration,delay:this.currentTimeline.currentTime+(i??0)+e.delay,easing:""},o=new $9(this._driver,e.element,e.keyframes,e.preStyleProps,e.postStyleProps,n,e.stretchStartingKeyframe);return this.timelines.push(o),n}incrementTime(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)}delayNextStep(e){e>0&&this.currentTimeline.delayNextStep(e)}invokeQuery(e,A,i,n,o,a){let r=[];if(n&&r.push(this.element),e.length>0){e=e.replace(DCA,"."+this._enterClassName),e=e.replace(vCA,"."+this._leaveClassName);let s=i!=1,g=this._driver.query(this.element,e,s);i!==0&&(g=i<0?g.slice(g.length+i,g.length):g.slice(0,i)),r.push(...g)}return!o&&r.length==0&&a.push(KY(A)),r}},a6=class t{_driver;element;startTime;_elementTimelineStylesLookup;duration=0;easing=null;_previousKeyframe=new Map;_currentKeyframe=new Map;_keyframes=new Map;_styleSummary=new Map;_localTimelineStyles=new Map;_globalTimelineStyles;_pendingStyles=new Map;_backFill=new Map;_currentEmptyStepKeyframe=null;constructor(e,A,i,n){this._driver=e,this.element=A,this.startTime=i,this._elementTimelineStylesLookup=n,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(A),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(A,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(e){let A=this._keyframes.size===1&&this._pendingStyles.size;this.duration||A?(this.forwardTime(this.currentTime+e),A&&this.snapshotCurrentStyles()):this.startTime+=e}fork(e,A){return this.applyStylesToKeyframe(),new t(this._driver,e,A||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=pCA,this._loadKeyframe()}forwardTime(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()}_updateStyle(e,A){this._localTimelineStyles.set(e,A),this._globalTimelineStyles.set(e,A),this._styleSummary.set(e,{time:this.currentTime,value:A})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(e){e&&this._previousKeyframe.set("easing",e);for(let[A,i]of this._globalTimelineStyles)this._backFill.set(A,i||$l),this._currentKeyframe.set(A,$l);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(e,A,i,n){A&&this._previousKeyframe.set("easing",A);let o=n&&n.params||{},a=bCA(e,this._globalTimelineStyles);for(let[r,s]of a){let g=HB(s,o,i);this._pendingStyles.set(r,g),this._localTimelineStyles.has(r)||this._backFill.set(r,this._globalTimelineStyles.get(r)??$l),this._updateStyle(r,g)}}applyStylesToKeyframe(){this._pendingStyles.size!=0&&(this._pendingStyles.forEach((e,A)=>{this._currentKeyframe.set(A,e)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((e,A)=>{this._currentKeyframe.has(A)||this._currentKeyframe.set(A,e)}))}snapshotCurrentStyles(){for(let[e,A]of this._localTimelineStyles)this._pendingStyles.set(e,A),this._updateStyle(e,A)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){let e=[];for(let A in this._currentKeyframe)e.push(A);return e}mergeTimelineCollectedStyles(e){e._styleSummary.forEach((A,i)=>{let n=this._styleSummary.get(i);(!n||A.time>n.time)&&this._updateStyle(i,A.value)})}buildKeyframes(){this.applyStylesToKeyframe();let e=new Set,A=new Set,i=this._keyframes.size===1&&this.duration===0,n=[];this._keyframes.forEach((r,s)=>{let g=new Map([...this._backFill,...r]);g.forEach((l,C)=>{l===Tu?e.add(C):l===$l&&A.add(C)}),i||g.set("offset",s/this.duration),n.push(g)});let o=[...e.values()],a=[...A.values()];if(i){let r=n[0],s=new Map(r);r.set("offset",0),s.set("offset",1),n=[r,s]}return rM(this.element,n,o,a,this.duration,this.startTime,this.easing,!1)}},$9=class extends a6{keyframes;preStyleProps;postStyleProps;_stretchStartingKeyframe;timings;constructor(e,A,i,n,o,a,r=!1){super(e,A,a.delay),this.keyframes=i,this.preStyleProps=n,this.postStyleProps=o,this._stretchStartingKeyframe=r,this.timings={duration:a.duration,delay:a.delay,easing:a.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let e=this.keyframes,{delay:A,duration:i,easing:n}=this.timings;if(this._stretchStartingKeyframe&&A){let o=[],a=i+A,r=A/a,s=new Map(e[0]);s.set("offset",0),o.push(s);let g=new Map(e[0]);g.set("offset",oT(r)),o.push(g);let l=e.length-1;for(let C=1;C<=l;C++){let I=new Map(e[C]),d=I.get("offset"),B=A+d*i;I.set("offset",oT(B/a)),o.push(I)}i=a,A=0,n="",e=o}return rM(this.element,e,this.preStyleProps,this.postStyleProps,i,A,n,!0)}};function oT(t,e=3){let A=Math.pow(10,e-1);return Math.round(t*A)/A}function bCA(t,e){let A=new Map,i;return t.forEach(n=>{if(n==="*"){i??=e.keys();for(let o of i)A.set(o,$l)}else for(let[o,a]of n)A.set(o,a)}),A}function aT(t,e,A,i,n,o,a,r,s,g,l,C,I){return{type:0,element:t,triggerName:e,isRemovalTransition:n,fromState:A,fromStyles:o,toState:i,toStyles:a,timelines:r,queriedElements:s,preStyleProps:g,postStyleProps:l,totalTime:C,errors:I}}var O9={},r6=class{_triggerName;ast;_stateStyles;constructor(e,A,i){this._triggerName=e,this.ast=A,this._stateStyles=i}match(e,A,i,n){return MCA(this.ast.matchers,e,A,i,n)}buildStyles(e,A,i){let n=this._stateStyles.get("*");return e!==void 0&&(n=this._stateStyles.get(e?.toString())||n),n?n.buildStyles(A,i):new Map}build(e,A,i,n,o,a,r,s,g,l){let C=[],I=this.ast.options&&this.ast.options.params||O9,d=r&&r.params||O9,B=this.buildStyles(i,d,C),E=s&&s.params||O9,Q=this.buildStyles(n,E,C),f=new Set,b=new Map,S=new Map,M=n==="void",D={params:ET(E,I),delay:this.ast.options?.delay},F=l?[]:BT(e,A,this.ast.animation,o,a,B,Q,D,g,C),_=0;return F.forEach(U=>{_=Math.max(U.duration+U.delay,_)}),C.length?aT(A,this._triggerName,i,n,M,B,Q,[],[],b,S,_,C):(F.forEach(U=>{let J=U.element,j=ng(b,J,new Set);U.preStyleProps.forEach(O=>j.add(O));let AA=ng(S,J,new Set);U.postStyleProps.forEach(O=>AA.add(O)),J!==A&&f.add(J)}),aT(A,this._triggerName,i,n,M,B,Q,F,[...f.values()],b,S,_))}};function MCA(t,e,A,i,n){return t.some(o=>o(e,A,i,n))}function ET(t,e){let A=cA({},e);return Object.entries(t).forEach(([i,n])=>{n!=null&&(A[i]=n)}),A}var AM=class{styles;defaultParams;normalizer;constructor(e,A,i){this.styles=e,this.defaultParams=A,this.normalizer=i}buildStyles(e,A){let i=new Map,n=ET(e,this.defaultParams);return this.styles.styles.forEach(o=>{typeof o!="string"&&o.forEach((a,r)=>{a&&(a=HB(a,n,A));let s=this.normalizer.normalizePropertyName(r,A);a=this.normalizer.normalizeStyleValue(r,s,a,A),i.set(r,a)})}),i}};function kCA(t,e,A){return new eM(t,e,A)}var eM=class{name;ast;_normalizer;transitionFactories=[];fallbackTransition;states=new Map;constructor(e,A,i){this.name=e,this.ast=A,this._normalizer=i,A.states.forEach(n=>{let o=n.options&&n.options.params||{};this.states.set(n.name,new AM(n.style,o,i))}),rT(this.states,"true","1"),rT(this.states,"false","0"),A.transitions.forEach(n=>{this.transitionFactories.push(new r6(e,n,this.states))}),this.fallbackTransition=SCA(e,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(e,A,i,n){return this.transitionFactories.find(a=>a.match(e,A,i,n))||null}matchStyles(e,A,i){return this.fallbackTransition.buildStyles(e,A,i)}};function SCA(t,e,A){let i=[(a,r)=>!0],n={type:tn.Sequence,steps:[],options:null},o={type:tn.Transition,animation:n,matchers:i,options:null,queryCount:0,depCount:0};return new r6(t,o,e)}function rT(t,e,A){t.has(e)?t.has(A)||t.set(A,t.get(e)):t.has(A)&&t.set(e,t.get(A))}var xCA=new ju,tM=class{bodyNode;_driver;_normalizer;_animations=new Map;_playersById=new Map;players=[];constructor(e,A,i){this.bodyNode=e,this._driver=A,this._normalizer=i}register(e,A){let i=[],n=[],o=dT(this._driver,A,i,n);if(i.length)throw TY(i);this._animations.set(e,o)}_buildPlayer(e,A,i){let n=e.element,o=L9(this._normalizer,e.keyframes,A,i);return this._driver.animate(n,o,e.duration,e.delay,e.easing,[],!0)}create(e,A,i={}){let n=[],o=this._animations.get(e),a,r=new Map;if(o?(a=BT(this._driver,A,o,Y9,Vp,new Map,new Map,i,xCA,n),a.forEach(l=>{let C=ng(r,l.element,new Map);l.postStyleProps.forEach(I=>C.set(I,null))})):(n.push(HY()),a=[]),n.length)throw zY(n);r.forEach((l,C)=>{l.forEach((I,d)=>{l.set(d,this._driver.computeStyle(C,d,$l))})});let s=a.map(l=>{let C=r.get(l.element);return this._buildPlayer(l,new Map,C)}),g=cC(s);return this._playersById.set(e,g),g.onDestroy(()=>this.destroy(e)),this.players.push(g),g}destroy(e){let A=this._getPlayer(e);A.destroy(),this._playersById.delete(e);let i=this.players.indexOf(A);i>=0&&this.players.splice(i,1)}_getPlayer(e){let A=this._playersById.get(e);if(!A)throw OY(e);return A}listen(e,A,i,n){let o=jp(A,"","","");return Pp(this._getPlayer(e),i,o,n),()=>{}}command(e,A,i,n){if(i=="register"){this.register(e,n[0]);return}if(i=="create"){let a=n[0]||{};this.create(e,A,a);return}let o=this._getPlayer(e);switch(i){case"play":o.play();break;case"pause":o.pause();break;case"reset":o.reset();break;case"restart":o.restart();break;case"finish":o.finish();break;case"init":o.init();break;case"setPosition":o.setPosition(parseFloat(n[0]));break;case"destroy":this.destroy(e);break}}},sT="ng-animate-queued",RCA=".ng-animate-queued",P9="ng-animate-disabled",NCA=".ng-animate-disabled",FCA="ng-star-inserted",_CA=".ng-star-inserted",LCA=[],QT={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},GCA={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},ec="__ng_removed",qu=class{namespaceId;value;options;get params(){return this.options.params}constructor(e,A=""){this.namespaceId=A;let i=e&&e.hasOwnProperty("value"),n=i?e.value:e;if(this.value=UCA(n),i){let o=e,{value:a}=o,r=tU(o,["value"]);this.options=r}else this.options={};this.options.params||(this.options.params={})}absorbOptions(e){let A=e.params;if(A){let i=this.options.params;Object.keys(A).forEach(n=>{i[n]==null&&(i[n]=A[n])})}}},Pu="void",j9=new qu(Pu),iM=class{id;hostElement;_engine;players=[];_triggers=new Map;_queue=[];_elementListeners=new Map;_hostClassName;constructor(e,A,i){this.id=e,this.hostElement=A,this._engine=i,this._hostClassName="ng-tns-"+e,ll(A,this._hostClassName)}listen(e,A,i,n){if(!this._triggers.has(A))throw PY(i,A);if(i==null||i.length==0)throw jY(A);if(!JCA(i))throw qY(i,A);let o=ng(this._elementListeners,e,[]),a={name:A,phase:i,callback:n};o.push(a);let r=ng(this._engine.statesByElement,e,new Map);return r.has(A)||(ll(e,Hu),ll(e,Hu+"-"+A),r.set(A,j9)),()=>{this._engine.afterFlush(()=>{let s=o.indexOf(a);s>=0&&o.splice(s,1),this._triggers.has(A)||r.delete(A)})}}register(e,A){return this._triggers.has(e)?!1:(this._triggers.set(e,A),!0)}_getTrigger(e){let A=this._triggers.get(e);if(!A)throw VY(e);return A}trigger(e,A,i,n=!0){let o=this._getTrigger(A),a=new Vu(this.id,A,e),r=this._engine.statesByElement.get(e);r||(ll(e,Hu),ll(e,Hu+"-"+A),this._engine.statesByElement.set(e,r=new Map));let s=r.get(A),g=new qu(i,this.id);if(!(i&&i.hasOwnProperty("value"))&&s&&g.absorbOptions(s.options),r.set(A,g),s||(s=j9),!(g.value===Pu)&&s.value===g.value){if(!HCA(s.params,g.params)){let E=[],Q=o.matchStyles(s.value,s.params,E),f=o.matchStyles(g.value,g.params,E);E.length?this._engine.reportError(E):this._engine.afterFlush(()=>{R2(e,Q),Ac(e,f)})}return}let I=ng(this._engine.playersByElement,e,[]);I.forEach(E=>{E.namespaceId==this.id&&E.triggerName==A&&E.queued&&E.destroy()});let d=o.matchTransition(s.value,g.value,e,g.params),B=!1;if(!d){if(!n)return;d=o.fallbackTransition,B=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:A,transition:d,fromState:s,toState:g,player:a,isFallbackTransition:B}),B||(ll(e,sT),a.onStart(()=>{zB(e,sT)})),a.onDone(()=>{let E=this.players.indexOf(a);E>=0&&this.players.splice(E,1);let Q=this._engine.playersByElement.get(e);if(Q){let f=Q.indexOf(a);f>=0&&Q.splice(f,1)}}),this.players.push(a),I.push(a),a}deregister(e){this._triggers.delete(e),this._engine.statesByElement.forEach(A=>A.delete(e)),this._elementListeners.forEach((A,i)=>{this._elementListeners.set(i,A.filter(n=>n.name!=e))})}clearElementCache(e){this._engine.statesByElement.delete(e),this._elementListeners.delete(e);let A=this._engine.playersByElement.get(e);A&&(A.forEach(i=>i.destroy()),this._engine.playersByElement.delete(e))}_signalRemovalForInnerTriggers(e,A){let i=this._engine.driver.query(e,zu,!0);i.forEach(n=>{if(n[ec])return;let o=this._engine.fetchNamespacesByElement(n);o.size?o.forEach(a=>a.triggerLeaveAnimation(n,A,!1,!0)):this.clearElementCache(n)}),this._engine.afterFlushAnimationsDone(()=>i.forEach(n=>this.clearElementCache(n)))}triggerLeaveAnimation(e,A,i,n){let o=this._engine.statesByElement.get(e),a=new Map;if(o){let r=[];if(o.forEach((s,g)=>{if(a.set(g,s.value),this._triggers.has(g)){let l=this.trigger(e,g,Pu,n);l&&r.push(l)}}),r.length)return this._engine.markElementAsRemoved(this.id,e,!0,A,a),i&&cC(r).onDone(()=>this._engine.processLeaveNode(e)),!0}return!1}prepareLeaveAnimationListeners(e){let A=this._elementListeners.get(e),i=this._engine.statesByElement.get(e);if(A&&i){let n=new Set;A.forEach(o=>{let a=o.name;if(n.has(a))return;n.add(a);let s=this._triggers.get(a).fallbackTransition,g=i.get(a)||j9,l=new qu(Pu),C=new Vu(this.id,a,e);this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:a,transition:s,fromState:g,toState:l,player:C,isFallbackTransition:!0})})}}removeNode(e,A){let i=this._engine;if(e.childElementCount&&this._signalRemovalForInnerTriggers(e,A),this.triggerLeaveAnimation(e,A,!0))return;let n=!1;if(i.totalAnimations){let o=i.players.length?i.playersByQueriedElement.get(e):[];if(o&&o.length)n=!0;else{let a=e;for(;a=a.parentNode;)if(i.statesByElement.get(a)){n=!0;break}}}if(this.prepareLeaveAnimationListeners(e),n)i.markElementAsRemoved(this.id,e,!1,A);else{let o=e[ec];(!o||o===QT)&&(i.afterFlush(()=>this.clearElementCache(e)),i.destroyInnerAnimations(e),i._onRemovalComplete(e,A))}}insertNode(e,A){ll(e,this._hostClassName)}drainQueuedTransitions(e){let A=[];return this._queue.forEach(i=>{let n=i.player;if(n.destroyed)return;let o=i.element,a=this._elementListeners.get(o);a&&a.forEach(r=>{if(r.name==i.triggerName){let s=jp(o,i.triggerName,i.fromState.value,i.toState.value);s._data=e,Pp(i.player,r.phase,s,r.callback)}}),n.markedForDestroy?this._engine.afterFlush(()=>{n.destroy()}):A.push(i)}),this._queue=[],A.sort((i,n)=>{let o=i.transition.ast.depCount,a=n.transition.ast.depCount;return o==0||a==0?o-a:this._engine.driver.containsElement(i.element,n.element)?1:-1})}destroy(e){this.players.forEach(A=>A.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,e)}},nM=class{bodyNode;driver;_normalizer;players=[];newHostElements=new Map;playersByElement=new Map;playersByQueriedElement=new Map;statesByElement=new Map;disabledNodes=new Set;totalAnimations=0;totalQueuedPlayers=0;_namespaceLookup={};_namespaceList=[];_flushFns=[];_whenQuietFns=[];namespacesByHostElement=new Map;collectedEnterElements=[];collectedLeaveElements=[];onRemovalComplete=(e,A)=>{};_onRemovalComplete(e,A){this.onRemovalComplete(e,A)}constructor(e,A,i){this.bodyNode=e,this.driver=A,this._normalizer=i}get queuedPlayers(){let e=[];return this._namespaceList.forEach(A=>{A.players.forEach(i=>{i.queued&&e.push(i)})}),e}createNamespace(e,A){let i=new iM(e,A,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,A)?this._balanceNamespaceList(i,A):(this.newHostElements.set(A,i),this.collectEnterElement(A)),this._namespaceLookup[e]=i}_balanceNamespaceList(e,A){let i=this._namespaceList,n=this.namespacesByHostElement;if(i.length-1>=0){let a=!1,r=this.driver.getParentElement(A);for(;r;){let s=n.get(r);if(s){let g=i.indexOf(s);i.splice(g+1,0,e),a=!0;break}r=this.driver.getParentElement(r)}a||i.unshift(e)}else i.push(e);return n.set(A,e),e}register(e,A){let i=this._namespaceLookup[e];return i||(i=this.createNamespace(e,A)),i}registerTrigger(e,A,i){let n=this._namespaceLookup[e];n&&n.register(A,i)&&this.totalAnimations++}destroy(e,A){e&&(this.afterFlush(()=>{}),this.afterFlushAnimationsDone(()=>{let i=this._fetchNamespace(e);this.namespacesByHostElement.delete(i.hostElement);let n=this._namespaceList.indexOf(i);n>=0&&this._namespaceList.splice(n,1),i.destroy(A),delete this._namespaceLookup[e]}))}_fetchNamespace(e){return this._namespaceLookup[e]}fetchNamespacesByElement(e){let A=new Set,i=this.statesByElement.get(e);if(i){for(let n of i.values())if(n.namespaceId){let o=this._fetchNamespace(n.namespaceId);o&&A.add(o)}}return A}trigger(e,A,i,n){if(e6(A)){let o=this._fetchNamespace(e);if(o)return o.trigger(A,i,n),!0}return!1}insertNode(e,A,i,n){if(!e6(A))return;let o=A[ec];if(o&&o.setForRemoval){o.setForRemoval=!1,o.setForMove=!0;let a=this.collectedLeaveElements.indexOf(A);a>=0&&this.collectedLeaveElements.splice(a,1)}if(e){let a=this._fetchNamespace(e);a&&a.insertNode(A,i)}n&&this.collectEnterElement(A)}collectEnterElement(e){this.collectedEnterElements.push(e)}markElementAsDisabled(e,A){A?this.disabledNodes.has(e)||(this.disabledNodes.add(e),ll(e,P9)):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),zB(e,P9))}removeNode(e,A,i){if(e6(A)){let n=e?this._fetchNamespace(e):null;n?n.removeNode(A,i):this.markElementAsRemoved(e,A,!1,i);let o=this.namespacesByHostElement.get(A);o&&o.id!==e&&o.removeNode(A,i)}else this._onRemovalComplete(A,i)}markElementAsRemoved(e,A,i,n,o){this.collectedLeaveElements.push(A),A[ec]={namespaceId:e,setForRemoval:n,hasAnimation:i,removedBeforeQueried:!1,previousTriggersValues:o}}listen(e,A,i,n,o){return e6(A)?this._fetchNamespace(e).listen(A,i,n,o):()=>{}}_buildInstruction(e,A,i,n,o){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,i,n,e.fromState.options,e.toState.options,A,o)}destroyInnerAnimations(e){let A=this.driver.query(e,zu,!0);A.forEach(i=>this.destroyActiveAnimationsForElement(i)),this.playersByQueriedElement.size!=0&&(A=this.driver.query(e,Wp,!0),A.forEach(i=>this.finishActiveQueriedAnimationOnElement(i)))}destroyActiveAnimationsForElement(e){let A=this.playersByElement.get(e);A&&A.forEach(i=>{i.queued?i.markedForDestroy=!0:i.destroy()})}finishActiveQueriedAnimationOnElement(e){let A=this.playersByQueriedElement.get(e);A&&A.forEach(i=>i.finish())}whenRenderingDone(){return new Promise(e=>{if(this.players.length)return cC(this.players).onDone(()=>e());e()})}processLeaveNode(e){let A=e[ec];if(A&&A.setForRemoval){if(e[ec]=QT,A.namespaceId){this.destroyInnerAnimations(e);let i=this._fetchNamespace(A.namespaceId);i&&i.clearElementCache(e)}this._onRemovalComplete(e,A.setForRemoval)}e.classList?.contains(P9)&&this.markElementAsDisabled(e,!1),this.driver.query(e,NCA,!0).forEach(i=>{this.markElementAsDisabled(i,!1)})}flush(e=-1){let A=[];if(this.newHostElements.size&&(this.newHostElements.forEach((i,n)=>this._balanceNamespaceList(i,n)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let i=0;ii()),this._flushFns=[],this._whenQuietFns.length){let i=this._whenQuietFns;this._whenQuietFns=[],A.length?cC(A).onDone(()=>{i.forEach(n=>n())}):i.forEach(n=>n())}}reportError(e){throw WY(e)}_flushAnimations(e,A){let i=new ju,n=[],o=new Map,a=[],r=new Map,s=new Map,g=new Map,l=new Set;this.disabledNodes.forEach(iA=>{l.add(iA);let BA=this.driver.query(iA,RCA,!0);for(let oA=0;oA{let oA=Y9+E++;B.set(BA,oA),iA.forEach(sA=>ll(sA,oA))});let Q=[],f=new Set,b=new Set;for(let iA=0;iAf.add(sA)):b.add(BA))}let S=new Map,M=cT(I,Array.from(f));M.forEach((iA,BA)=>{let oA=Vp+E++;S.set(BA,oA),iA.forEach(sA=>ll(sA,oA))}),e.push(()=>{d.forEach((iA,BA)=>{let oA=B.get(BA);iA.forEach(sA=>zB(sA,oA))}),M.forEach((iA,BA)=>{let oA=S.get(BA);iA.forEach(sA=>zB(sA,oA))}),Q.forEach(iA=>{this.processLeaveNode(iA)})});let D=[],F=[];for(let iA=this._namespaceList.length-1;iA>=0;iA--)this._namespaceList[iA].drainQueuedTransitions(A).forEach(oA=>{let sA=oA.player,hA=oA.element;if(D.push(sA),this.collectedEnterElements.length){let Je=hA[ec];if(Je&&Je.setForMove){if(Je.previousTriggersValues&&Je.previousTriggersValues.has(oA.triggerName)){let HA=Je.previousTriggersValues.get(oA.triggerName),uA=this.statesByElement.get(oA.element);if(uA&&uA.has(oA.triggerName)){let ZA=uA.get(oA.triggerName);ZA.value=HA,uA.set(oA.triggerName,ZA)}}sA.destroy();return}}let YA=!C||!this.driver.containsElement(C,hA),ee=S.get(hA),UA=B.get(hA),mA=this._buildInstruction(oA,i,UA,ee,YA);if(mA.errors&&mA.errors.length){F.push(mA);return}if(YA){sA.onStart(()=>R2(hA,mA.fromStyles)),sA.onDestroy(()=>Ac(hA,mA.toStyles)),n.push(sA);return}if(oA.isFallbackTransition){sA.onStart(()=>R2(hA,mA.fromStyles)),sA.onDestroy(()=>Ac(hA,mA.toStyles)),n.push(sA);return}let KA=[];mA.timelines.forEach(Je=>{Je.stretchStartingKeyframe=!0,this.disabledNodes.has(Je.element)||KA.push(Je)}),mA.timelines=KA,i.append(hA,mA.timelines);let Pe={instruction:mA,player:sA,element:hA};a.push(Pe),mA.queriedElements.forEach(Je=>ng(r,Je,[]).push(sA)),mA.preStyleProps.forEach((Je,HA)=>{if(Je.size){let uA=s.get(HA);uA||s.set(HA,uA=new Set),Je.forEach((ZA,QA)=>uA.add(QA))}}),mA.postStyleProps.forEach((Je,HA)=>{let uA=g.get(HA);uA||g.set(HA,uA=new Set),Je.forEach((ZA,QA)=>uA.add(QA))})});if(F.length){let iA=[];F.forEach(BA=>{iA.push(ZY(BA.triggerName,BA.errors))}),D.forEach(BA=>BA.destroy()),this.reportError(iA)}let _=new Map,U=new Map;a.forEach(iA=>{let BA=iA.element;i.has(BA)&&(U.set(BA,BA),this._beforeAnimationBuild(iA.player.namespaceId,iA.instruction,_))}),n.forEach(iA=>{let BA=iA.element;this._getPreviousPlayers(BA,!1,iA.namespaceId,iA.triggerName,null).forEach(sA=>{ng(_,BA,[]).push(sA),sA.destroy()})});let J=Q.filter(iA=>CT(iA,s,g)),j=new Map;lT(j,this.driver,b,g,$l).forEach(iA=>{CT(iA,s,g)&&J.push(iA)});let O=new Map;d.forEach((iA,BA)=>{lT(O,this.driver,new Set(iA),s,Tu)}),J.forEach(iA=>{let BA=j.get(iA),oA=O.get(iA);j.set(iA,new Map([...BA?.entries()??[],...oA?.entries()??[]]))});let DA=[],P=[],aA={};a.forEach(iA=>{let{element:BA,player:oA,instruction:sA}=iA;if(i.has(BA)){if(l.has(BA)){oA.onDestroy(()=>Ac(BA,sA.toStyles)),oA.disabled=!0,oA.overrideTotalTime(sA.totalTime),n.push(oA);return}let hA=aA;if(U.size>1){let ee=BA,UA=[];for(;ee=ee.parentNode;){let mA=U.get(ee);if(mA){hA=mA;break}UA.push(ee)}UA.forEach(mA=>U.set(mA,hA))}let YA=this._buildAnimation(oA.namespaceId,sA,_,o,O,j);if(oA.setRealPlayer(YA),hA===aA)DA.push(oA);else{let ee=this.playersByElement.get(hA);ee&&ee.length&&(oA.parentPlayer=cC(ee)),n.push(oA)}}else R2(BA,sA.fromStyles),oA.onDestroy(()=>Ac(BA,sA.toStyles)),P.push(oA),l.has(BA)&&n.push(oA)}),P.forEach(iA=>{let BA=o.get(iA.element);if(BA&&BA.length){let oA=cC(BA);iA.setRealPlayer(oA)}}),n.forEach(iA=>{iA.parentPlayer?iA.syncPlayerEvents(iA.parentPlayer):iA.destroy()});for(let iA=0;iA!YA.destroyed);hA.length?YCA(this,BA,hA):this.processLeaveNode(BA)}return Q.length=0,DA.forEach(iA=>{this.players.push(iA),iA.onDone(()=>{iA.destroy();let BA=this.players.indexOf(iA);this.players.splice(BA,1)}),iA.play()}),DA}afterFlush(e){this._flushFns.push(e)}afterFlushAnimationsDone(e){this._whenQuietFns.push(e)}_getPreviousPlayers(e,A,i,n,o){let a=[];if(A){let r=this.playersByQueriedElement.get(e);r&&(a=r)}else{let r=this.playersByElement.get(e);if(r){let s=!o||o==Pu;r.forEach(g=>{g.queued||!s&&g.triggerName!=n||a.push(g)})}}return(i||n)&&(a=a.filter(r=>!(i&&i!=r.namespaceId||n&&n!=r.triggerName))),a}_beforeAnimationBuild(e,A,i){let n=A.triggerName,o=A.element,a=A.isRemovalTransition?void 0:e,r=A.isRemovalTransition?void 0:n;for(let s of A.timelines){let g=s.element,l=g!==o,C=ng(i,g,[]);this._getPreviousPlayers(g,l,a,r,A.toState).forEach(d=>{let B=d.getRealPlayer();B.beforeDestroy&&B.beforeDestroy(),d.destroy(),C.push(d)})}R2(o,A.fromStyles)}_buildAnimation(e,A,i,n,o,a){let r=A.triggerName,s=A.element,g=[],l=new Set,C=new Set,I=A.timelines.map(B=>{let E=B.element;l.add(E);let Q=E[ec];if(Q&&Q.removedBeforeQueried)return new lC(B.duration,B.delay);let f=E!==s,b=TCA((i.get(E)||LCA).map(_=>_.getRealPlayer())).filter(_=>{let U=_;return U.element?U.element===E:!1}),S=o.get(E),M=a.get(E),D=L9(this._normalizer,B.keyframes,S,M),F=this._buildPlayer(B,D,b);if(B.subTimeline&&n&&C.add(E),f){let _=new Vu(e,r,E);_.setRealPlayer(F),g.push(_)}return F});g.forEach(B=>{ng(this.playersByQueriedElement,B.element,[]).push(B),B.onDone(()=>KCA(this.playersByQueriedElement,B.element,B))}),l.forEach(B=>ll(B,T9));let d=cC(I);return d.onDestroy(()=>{l.forEach(B=>zB(B,T9)),Ac(s,A.toStyles)}),C.forEach(B=>{ng(n,B,[]).push(d)}),d}_buildPlayer(e,A,i){return A.length>0?this.driver.animate(e.element,A,e.duration,e.delay,e.easing,i):new lC(e.duration,e.delay)}},Vu=class{namespaceId;triggerName;element;_player=new lC;_containsRealPlayer=!1;_queuedCallbacks=new Map;destroyed=!1;parentPlayer=null;markedForDestroy=!1;disabled=!1;queued=!0;totalTime=0;constructor(e,A,i){this.namespaceId=e,this.triggerName=A,this.element=i}setRealPlayer(e){this._containsRealPlayer||(this._player=e,this._queuedCallbacks.forEach((A,i)=>{A.forEach(n=>Pp(e,i,void 0,n))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(e.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(e){this.totalTime=e}syncPlayerEvents(e){let A=this._player;A.triggerCallback&&e.onStart(()=>A.triggerCallback("start")),e.onDone(()=>this.finish()),e.onDestroy(()=>this.destroy())}_queueEvent(e,A){ng(this._queuedCallbacks,e,[]).push(A)}onDone(e){this.queued&&this._queueEvent("done",e),this._player.onDone(e)}onStart(e){this.queued&&this._queueEvent("start",e),this._player.onStart(e)}onDestroy(e){this.queued&&this._queueEvent("destroy",e),this._player.onDestroy(e)}init(){this._player.init()}hasStarted(){return this.queued?!1:this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(e){this.queued||this._player.setPosition(e)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(e){let A=this._player;A.triggerCallback&&A.triggerCallback(e)}};function KCA(t,e,A){let i=t.get(e);if(i){if(i.length){let n=i.indexOf(A);i.splice(n,1)}i.length==0&&t.delete(e)}return i}function UCA(t){return t??null}function e6(t){return t&&t.nodeType===1}function JCA(t){return t=="start"||t=="done"}function gT(t,e){let A=t.style.display;return t.style.display=e??"none",A}function lT(t,e,A,i,n){let o=[];A.forEach(s=>o.push(gT(s)));let a=[];i.forEach((s,g)=>{let l=new Map;s.forEach(C=>{let I=e.computeStyle(g,C,n);l.set(C,I),(!I||I.length==0)&&(g[ec]=GCA,a.push(g))}),t.set(g,l)});let r=0;return A.forEach(s=>gT(s,o[r++])),a}function cT(t,e){let A=new Map;if(t.forEach(r=>A.set(r,[])),e.length==0)return A;let i=1,n=new Set(e),o=new Map;function a(r){if(!r)return i;let s=o.get(r);if(s)return s;let g=r.parentNode;return A.has(g)?s=g:n.has(g)?s=i:s=a(g),o.set(r,s),s}return e.forEach(r=>{let s=a(r);s!==i&&A.get(s).push(r)}),A}function ll(t,e){t.classList?.add(e)}function zB(t,e){t.classList?.remove(e)}function YCA(t,e,A){cC(A).onDone(()=>t.processLeaveNode(e))}function TCA(t){let e=[];return hT(t,e),e}function hT(t,e){for(let A=0;An.add(o)):e.set(t,i),A.delete(t),!0}var OB=class{_driver;_normalizer;_transitionEngine;_timelineEngine;_triggerCache={};onRemovalComplete=(e,A)=>{};constructor(e,A,i){this._driver=A,this._normalizer=i,this._transitionEngine=new nM(e.body,A,i),this._timelineEngine=new tM(e.body,A,i),this._transitionEngine.onRemovalComplete=(n,o)=>this.onRemovalComplete(n,o)}registerTrigger(e,A,i,n,o){let a=e+"-"+n,r=this._triggerCache[a];if(!r){let s=[],g=[],l=dT(this._driver,o,s,g);if(s.length)throw YY(n,s);r=kCA(n,l,this._normalizer),this._triggerCache[a]=r}this._transitionEngine.registerTrigger(A,n,r)}register(e,A){this._transitionEngine.register(e,A)}destroy(e,A){this._transitionEngine.destroy(e,A)}onInsert(e,A,i,n){this._transitionEngine.insertNode(e,A,i,n)}onRemove(e,A,i){this._transitionEngine.removeNode(e,A,i)}disableAnimations(e,A){this._transitionEngine.markElementAsDisabled(e,A)}process(e,A,i,n){if(i.charAt(0)=="@"){let[o,a]=G9(i),r=n;this._timelineEngine.command(o,A,a,r)}else this._transitionEngine.trigger(e,A,i,n)}listen(e,A,i,n,o){if(i.charAt(0)=="@"){let[a,r]=G9(i);return this._timelineEngine.listen(a,A,r,o)}return this._transitionEngine.listen(e,A,i,n,o)}flush(e=-1){this._transitionEngine.flush(e)}get players(){return[...this._transitionEngine.players,...this._timelineEngine.players]}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}afterFlushAnimationsDone(e){this._transitionEngine.afterFlushAnimationsDone(e)}};function zCA(t,e){let A=null,i=null;return Array.isArray(e)&&e.length?(A=q9(e[0]),e.length>1&&(i=q9(e[e.length-1]))):e instanceof Map&&(A=q9(e)),A||i?new OCA(t,A,i):null}var OCA=(()=>{class t{_element;_startStyles;_endStyles;static initialStylesByElement=new WeakMap;_state=0;_initialStyles;constructor(A,i,n){this._element=A,this._startStyles=i,this._endStyles=n;let o=t.initialStylesByElement.get(A);o||t.initialStylesByElement.set(A,o=new Map),this._initialStyles=o}start(){this._state<1&&(this._startStyles&&Ac(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(Ac(this._element,this._initialStyles),this._endStyles&&(Ac(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(t.initialStylesByElement.delete(this._element),this._startStyles&&(R2(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(R2(this._element,this._endStyles),this._endStyles=null),Ac(this._element,this._initialStyles),this._state=3)}}return t})();function q9(t){let e=null;return t.forEach((A,i)=>{PCA(i)&&(e=e||new Map,e.set(i,A))}),e}function PCA(t){return t==="display"||t==="position"}var s6=class{element;keyframes;options;_specialStyles;_onDoneFns=[];_onStartFns=[];_onDestroyFns=[];_duration;_delay;_initialized=!1;_finished=!1;_started=!1;_destroyed=!1;_finalKeyframe;_originalOnDoneFns=[];_originalOnStartFns=[];domPlayer=null;time=0;parentPlayer=null;currentSnapshot=new Map;constructor(e,A,i,n){this.element=e,this.keyframes=A,this.options=i,this._specialStyles=n,this._duration=i.duration,this._delay=i.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this._buildPlayer()&&this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return this.domPlayer;this._initialized=!0;let e=this.keyframes,A=this._triggerWebAnimation(this.element,e,this.options);if(!A)return this._onFinish(),null;this.domPlayer=A,this._finalKeyframe=e.length?e[e.length-1]:new Map;let i=()=>this._onFinish();return A.addEventListener("finish",i),this.onDestroy(()=>{A.removeEventListener("finish",i)}),A}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer?.pause()}_convertKeyframesToObject(e){let A=[];return e.forEach(i=>{A.push(Object.fromEntries(i))}),A}_triggerWebAnimation(e,A,i){let n=this._convertKeyframesToObject(A);try{return e.animate(n,i)}catch{return null}}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}play(){let e=this._buildPlayer();e&&(this.hasStarted()||(this._onStartFns.forEach(A=>A()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),e.play())}pause(){this.init(),this.domPlayer?.pause()}finish(){this.init(),this.domPlayer&&(this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish())}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer?.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}setPosition(e){this.domPlayer||this.init(),this.domPlayer&&(this.domPlayer.currentTime=e*this.time)}getPosition(){return this.domPlayer?+(this.domPlayer.currentTime??0)/this.time:this._initialized?1:0}get totalTime(){return this._delay+this._duration}beforeDestroy(){let e=new Map;this.hasStarted()&&this._finalKeyframe.forEach((i,n)=>{n!=="offset"&&e.set(n,this._finished?i:Xp(this.element,n))}),this.currentSnapshot=e}triggerCallback(e){let A=e==="start"?this._onStartFns:this._onDoneFns;A.forEach(i=>i()),A.length=0}},g6=class{validateStyleProperty(e){return!0}validateAnimatableStyleProperty(e){return!0}containsElement(e,A){return K9(e,A)}getParentElement(e){return qp(e)}query(e,A,i){return U9(e,A,i)}computeStyle(e,A,i){return Xp(e,A)}animate(e,A,i,n,o,a=[]){let r=n==0?"both":"forwards",s={duration:i,delay:n,fill:r};o&&(s.easing=o);let g=new Map,l=a.filter(d=>d instanceof s6);eT(i,n)&&l.forEach(d=>{d.currentSnapshot.forEach((B,E)=>g.set(E,B))});let C=$Y(A).map(d=>new Map(d));C=tT(e,C,g);let I=zCA(e,C);return new s6(e,C,s,I)}};var t6="@",uT="@.disabled",l6=class{namespaceId;delegate;engine;_onDestroy;\u0275type=0;constructor(e,A,i,n){this.namespaceId=e,this.delegate=A,this.engine=i,this._onDestroy=n}get data(){return this.delegate.data}destroyNode(e){this.delegate.destroyNode?.(e)}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.engine.afterFlushAnimationsDone(()=>{queueMicrotask(()=>{this.delegate.destroy()})}),this._onDestroy?.()}createElement(e,A){return this.delegate.createElement(e,A)}createComment(e){return this.delegate.createComment(e)}createText(e){return this.delegate.createText(e)}appendChild(e,A){this.delegate.appendChild(e,A),this.engine.onInsert(this.namespaceId,A,e,!1)}insertBefore(e,A,i,n=!0){this.delegate.insertBefore(e,A,i),this.engine.onInsert(this.namespaceId,A,e,n)}removeChild(e,A,i,n){if(n){this.delegate.removeChild(e,A,i,n);return}this.parentNode(A)&&this.engine.onRemove(this.namespaceId,A,this.delegate)}selectRootElement(e,A){return this.delegate.selectRootElement(e,A)}parentNode(e){return this.delegate.parentNode(e)}nextSibling(e){return this.delegate.nextSibling(e)}setAttribute(e,A,i,n){this.delegate.setAttribute(e,A,i,n)}removeAttribute(e,A,i){this.delegate.removeAttribute(e,A,i)}addClass(e,A){this.delegate.addClass(e,A)}removeClass(e,A){this.delegate.removeClass(e,A)}setStyle(e,A,i,n){this.delegate.setStyle(e,A,i,n)}removeStyle(e,A,i){this.delegate.removeStyle(e,A,i)}setProperty(e,A,i){A.charAt(0)==t6&&A==uT?this.disableAnimations(e,!!i):this.delegate.setProperty(e,A,i)}setValue(e,A){this.delegate.setValue(e,A)}listen(e,A,i,n){return this.delegate.listen(e,A,i,n)}disableAnimations(e,A){this.engine.disableAnimations(e,A)}},oM=class extends l6{factory;constructor(e,A,i,n,o){super(A,i,n,o),this.factory=e,this.namespaceId=A}setProperty(e,A,i){A.charAt(0)==t6?A.charAt(1)=="."&&A==uT?(i=i===void 0?!0:!!i,this.disableAnimations(e,i)):this.engine.process(this.namespaceId,e,A.slice(1),i):this.delegate.setProperty(e,A,i)}listen(e,A,i,n){if(A.charAt(0)==t6){let o=jCA(e),a=A.slice(1),r="";return a.charAt(0)!=t6&&([a,r]=qCA(a)),this.engine.listen(this.namespaceId,o,a,r,s=>{let g=s._data||-1;this.factory.scheduleListenerCallback(g,i,s)})}return this.delegate.listen(e,A,i,n)}};function jCA(t){switch(t){case"body":return document.body;case"document":return document;case"window":return window;default:return t}}function qCA(t){let e=t.indexOf("."),A=t.substring(0,e),i=t.slice(e+1);return[A,i]}var c6=class{delegate;engine;_zone;_currentId=0;_microtaskId=1;_animationCallbacksBuffer=[];_rendererCache=new Map;_cdRecurDepth=0;constructor(e,A,i){this.delegate=e,this.engine=A,this._zone=i,A.onRemovalComplete=(n,o)=>{o?.removeChild(null,n)}}createRenderer(e,A){let n=this.delegate.createRenderer(e,A);if(!e||!A?.data?.animation){let g=this._rendererCache,l=g.get(n);if(!l){let C=()=>g.delete(n);l=new l6("",n,this.engine,C),g.set(n,l)}return l}let o=A.id,a=A.id+"-"+this._currentId;this._currentId++,this.engine.register(a,e);let r=g=>{Array.isArray(g)?g.forEach(r):this.engine.registerTrigger(o,a,e,g.name,g)};return A.data.animation.forEach(r),new oM(this,a,n,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){queueMicrotask(()=>{this._microtaskId++})}scheduleListenerCallback(e,A,i){if(e>=0&&eA(i));return}let n=this._animationCallbacksBuffer;n.length==0&&queueMicrotask(()=>{this._zone.run(()=>{n.forEach(o=>{let[a,r]=o;a(r)}),this._animationCallbacksBuffer=[]})}),n.push([A,i])}end(){this._cdRecurDepth--,this._cdRecurDepth==0&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}componentReplaced(e){this.engine.flush(),this.delegate.componentReplaced?.(e)}};var WCA=(()=>{class t extends OB{constructor(A,i,n){super(A,i,n)}ngOnDestroy(){this.flush()}static \u0275fac=function(i){return new(i||t)(xo(Xt),xo(_1),xo(L1))};static \u0275prov=zA({token:t,factory:t.\u0275fac})}return t})();function ZCA(){return new i6}function XCA(){return new c6(h(GU),h(OB),h(Oe))}var fT=[{provide:L1,useFactory:ZCA},{provide:OB,useClass:WCA},{provide:Kr,useFactory:XCA}],CAe=[{provide:_1,useClass:aM},{provide:p1,useValue:"NoopAnimations"},...fT],$CA=[{provide:_1,useFactory:()=>new g6},{provide:p1,useFactory:()=>"BrowserAnimations"},...fT];function mT(){return op("NgEagerAnimations"),[...$CA]}function Tr(t){t||(t=h(qa));let e=new $i(A=>{if(t.destroyed){A.next();return}return t.onDestroy(A.next.bind(A))});return A=>A.pipe(Bt(e))}var sM=class{source;destroyed=!1;destroyRef=h(qa);constructor(e){this.source=e,this.destroyRef.onDestroy(()=>{this.destroyed=!0})}subscribe(e){if(this.destroyed)throw new kt(953,!1);let A=this.source.pipe(Tr(this.destroyRef)).subscribe({next:i=>e(i)});return{unsubscribe:()=>A.unsubscribe()}}};function Dn(t,e){return new sM(t)}function $n(t,e){let A=e?.injector??h(ft),i=new ql(1),n=Ga(()=>{let o;try{o=t()}catch(a){la(()=>i.error(a));return}la(()=>i.next(o))},{injector:A,manualCleanup:!0});return A.get(qa).onDestroy(()=>{n.destroy(),i.complete()}),i.asObservable()}function Fs(t,e){let i=!e?.manualCleanup?e?.injector?.get(qa)??h(qa):null,n=A2A(e?.equal),o;e?.requireSync?o=jA({kind:0},{equal:n}):o=jA({kind:1,value:e?.initialValue},{equal:n});let a,r=t.subscribe({next:s=>o.set({kind:1,value:s}),error:s=>{o.set({kind:2,error:s}),a?.()},complete:()=>{a?.()}});if(e?.requireSync&&o().kind===0)throw new kt(601,!1);return a=i?.onDestroy(r.unsubscribe.bind(r)),Ue(()=>{let s=o();switch(s.kind){case 1:return s.value;case 2:throw s.error;case 0:throw new kt(601,!1)}},{equal:e?.equal})}function A2A(t=Object.is){return(e,A)=>e.kind===1&&A.kind===1&&t(e.value,A.value)}function C6(t){return MU(Ge(cA({},t),{loader:void 0,stream:e=>{let A,i=()=>A?.unsubscribe();e.abortSignal.addEventListener("abort",i);let n=jA({value:void 0}),o,a=new Promise(g=>o=g);function r(g){n.set(g),o?.(n),o=void 0}let s=t.stream??t.loader;if(s===void 0)throw new kt(990,!1);return A=s(e).subscribe({next:g=>r({value:g}),error:g=>{r({error:kU(g)}),e.abortSignal.removeEventListener("abort",i)},complete:()=>{o&&r({error:new kt(991,!1)}),e.abortSignal.removeEventListener("abort",i)}}),a}}))}function CM(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var K1=CM();function MT(t){K1=t}var $u={exec:()=>null};function Ao(t,e=""){let A=typeof t=="string"?t:t.source,i={replace:(n,o)=>{let a=typeof o=="string"?o:o.source;return a=a.replace(_s.caret,"$1"),A=A.replace(n,a),i},getRegex:()=>new RegExp(A,e)};return i}var e2A=(()=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),htmlBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i")},t2A=/^(?:[ \t]*(?:\n|$))+/,i2A=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,n2A=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,A4=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,o2A=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,IM=/(?:[*+-]|\d{1,9}[.)])/,kT=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,ST=Ao(kT).replace(/bull/g,IM).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),a2A=Ao(kT).replace(/bull/g,IM).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),dM=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,r2A=/^[^\n]+/,BM=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,s2A=Ao(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",BM).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),g2A=Ao(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,IM).getRegex(),E6="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",EM=/|$))/,l2A=Ao("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",EM).replace("tag",E6).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),xT=Ao(dM).replace("hr",A4).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",E6).getRegex(),c2A=Ao(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",xT).getRegex(),QM={blockquote:c2A,code:i2A,def:s2A,fences:n2A,heading:o2A,hr:A4,html:l2A,lheading:ST,list:g2A,newline:t2A,paragraph:xT,table:$u,text:r2A},pT=Ao("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",A4).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",E6).getRegex(),C2A=Ge(cA({},QM),{lheading:a2A,table:pT,paragraph:Ao(dM).replace("hr",A4).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",pT).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",E6).getRegex()}),I2A=Ge(cA({},QM),{html:Ao(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",EM).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:$u,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Ao(dM).replace("hr",A4).replace("heading",` *#{1,6} *[^ -]`).replace("lheading",ST).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()}),d2A=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,B2A=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,RT=/^( {2,}|\\)\n(?!\s*$)/,E2A=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",e2A?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),_T=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,m2A=Ao(_T,"u").replace(/punct/g,Q6).getRegex(),p2A=Ao(_T,"u").replace(/punct/g,FT).getRegex(),LT="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",w2A=Ao(LT,"gu").replace(/notPunctSpace/g,NT).replace(/punctSpace/g,hM).replace(/punct/g,Q6).getRegex(),D2A=Ao(LT,"gu").replace(/notPunctSpace/g,u2A).replace(/punctSpace/g,h2A).replace(/punct/g,FT).getRegex(),y2A=Ao("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,NT).replace(/punctSpace/g,hM).replace(/punct/g,Q6).getRegex(),v2A=Ao(/\\(punct)/,"gu").replace(/punct/g,Q6).getRegex(),b2A=Ao(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),M2A=Ao(EM).replace("(?:-->|$)","-->").getRegex(),k2A=Ao("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",M2A).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),d6=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,S2A=Ao(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",d6).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),GT=Ao(/^!?\[(label)\]\[(ref)\]/).replace("label",d6).replace("ref",BM).getRegex(),KT=Ao(/^!?\[(ref)\](?:\[\])?/).replace("ref",BM).getRegex(),x2A=Ao("reflink|nolink(?!\\()","g").replace("reflink",GT).replace("nolink",KT).getRegex(),wT=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,uM={_backpedal:$u,anyPunctuation:v2A,autolink:b2A,blockSkip:f2A,br:RT,code:B2A,del:$u,emStrongLDelim:m2A,emStrongRDelimAst:w2A,emStrongRDelimUnd:y2A,escape:d2A,link:S2A,nolink:KT,punctuation:Q2A,reflink:GT,reflinkSearch:x2A,tag:k2A,text:E2A,url:$u},R2A=Ge(cA({},uM),{link:Ao(/^!?\[(label)\]\((.*?)\)/).replace("label",d6).getRegex(),reflink:Ao(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",d6).getRegex()}),gM=Ge(cA({},uM),{emStrongRDelimAst:D2A,emStrongLDelim:p2A,url:Ao(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",wT).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:Ao(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},DT=t=>F2A[t];function CC(t,e){if(e){if(_s.escapeTest.test(t))return t.replace(_s.escapeReplace,DT)}else if(_s.escapeTestNoEncode.test(t))return t.replace(_s.escapeReplaceNoEncode,DT);return t}function yT(t){try{t=encodeURI(t).replace(_s.percentDecode,"%")}catch{return null}return t}function vT(t,e){let A=t.replace(_s.findPipe,(o,a,r)=>{let s=!1,g=a;for(;--g>=0&&r[g]==="\\";)s=!s;return s?"|":" |"}),i=A.split(_s.splitPipe),n=0;if(i[0].trim()||i.shift(),i.length>0&&!i.at(-1)?.trim()&&i.pop(),e)if(i.length>e)i.splice(e);else for(;i.length0?-2:-1}function bT(t,e,A,i,n){let o=e.href,a=e.title||null,r=t[1].replace(n.other.outputLinkReplace,"$1");i.state.inLink=!0;let s={type:t[0].charAt(0)==="!"?"image":"link",raw:A,href:o,title:a,text:r,tokens:i.inlineTokens(r)};return i.state.inLink=!1,s}function L2A(t,e,A){let i=t.match(A.other.indentCodeCompensation);if(i===null)return e;let n=i[1];return e.split(` -`).map(o=>{let a=o.match(A.other.beginningSpace);if(a===null)return o;let[r]=a;return r.length>=n.length?o.slice(n.length):o}).join(` -`)}var B6=class{options;rules;lexer;constructor(t){this.options=t||K1}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let A=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?A:Zu(A,` -`)}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let A=e[0],i=L2A(A,e[3]||"",this.rules);return{type:"code",raw:A,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:i}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let A=e[2].trim();if(this.rules.other.endingHash.test(A)){let i=Zu(A,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(A=i.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:A,tokens:this.lexer.inline(A)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:Zu(e[0],` -`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let A=Zu(e[0],` -`).split(` -`),i="",n="",o=[];for(;A.length>0;){let a=!1,r=[],s;for(s=0;s1,n={type:"list",raw:"",ordered:i,start:i?+A.slice(0,-1):"",loose:!1,items:[]};A=i?`\\d{1,9}\\${A.slice(-1)}`:`\\${A}`,this.options.pedantic&&(A=i?A:"[*+-]");let o=this.rules.other.listItemRegex(A),a=!1;for(;t;){let s=!1,g="",l="";if(!(e=o.exec(t))||this.rules.block.hr.test(t))break;g=e[0],t=t.substring(g.length);let C=e[2].split(` -`,1)[0].replace(this.rules.other.listReplaceTabs,E=>" ".repeat(3*E.length)),I=t.split(` -`,1)[0],d=!C.trim(),B=0;if(this.options.pedantic?(B=2,l=C.trimStart()):d?B=e[1].length+1:(B=e[2].search(this.rules.other.nonSpaceChar),B=B>4?1:B,l=C.slice(B),B+=e[1].length),d&&this.rules.other.blankLine.test(I)&&(g+=I+` -`,t=t.substring(I.length+1),s=!0),!s){let E=this.rules.other.nextBulletRegex(B),Q=this.rules.other.hrRegex(B),f=this.rules.other.fencesBeginRegex(B),b=this.rules.other.headingBeginRegex(B),S=this.rules.other.htmlBeginRegex(B);for(;t;){let M=t.split(` -`,1)[0],D;if(I=M,this.options.pedantic?(I=I.replace(this.rules.other.listReplaceNesting," "),D=I):D=I.replace(this.rules.other.tabCharGlobal," "),f.test(I)||b.test(I)||S.test(I)||E.test(I)||Q.test(I))break;if(D.search(this.rules.other.nonSpaceChar)>=B||!I.trim())l+=` -`+D.slice(B);else{if(d||C.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||f.test(C)||b.test(C)||Q.test(C))break;l+=` -`+I}!d&&!I.trim()&&(d=!0),g+=M+` -`,t=t.substring(M.length+1),C=D.slice(B)}}n.loose||(a?n.loose=!0:this.rules.other.doubleBlankLine.test(g)&&(a=!0)),n.items.push({type:"list_item",raw:g,task:!!this.options.gfm&&this.rules.other.listIsTask.test(l),loose:!1,text:l,tokens:[]}),n.raw+=g}let r=n.items.at(-1);if(r)r.raw=r.raw.trimEnd(),r.text=r.text.trimEnd();else return;n.raw=n.raw.trimEnd();for(let s of n.items){if(this.lexer.state.top=!1,s.tokens=this.lexer.blockTokens(s.text,[]),s.task){if(s.text=s.text.replace(this.rules.other.listReplaceTask,""),s.tokens[0]?.type==="text"||s.tokens[0]?.type==="paragraph"){s.tokens[0].raw=s.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),s.tokens[0].text=s.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let l=this.lexer.inlineQueue.length-1;l>=0;l--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[l].src)){this.lexer.inlineQueue[l].src=this.lexer.inlineQueue[l].src.replace(this.rules.other.listReplaceTask,"");break}}let g=this.rules.other.listTaskCheckbox.exec(s.raw);if(g){let l={type:"checkbox",raw:g[0]+" ",checked:g[0]!=="[ ]"};s.checked=l.checked,n.loose?s.tokens[0]&&["paragraph","text"].includes(s.tokens[0].type)&&"tokens"in s.tokens[0]&&s.tokens[0].tokens?(s.tokens[0].raw=l.raw+s.tokens[0].raw,s.tokens[0].text=l.raw+s.tokens[0].text,s.tokens[0].tokens.unshift(l)):s.tokens.unshift({type:"paragraph",raw:l.raw,text:l.raw,tokens:[l]}):s.tokens.unshift(l)}}if(!n.loose){let g=s.tokens.filter(C=>C.type==="space"),l=g.length>0&&g.some(C=>this.rules.other.anyLine.test(C.raw));n.loose=l}}if(n.loose)for(let s of n.items){s.loose=!0;for(let g of s.tokens)g.type==="text"&&(g.type="paragraph")}return n}}html(t){let e=this.rules.block.html.exec(t);if(e)return{type:"html",block:!0,raw:e[0],pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:e[0]}}def(t){let e=this.rules.block.def.exec(t);if(e){let A=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),i=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",n=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:A,raw:e[0],href:i,title:n}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let A=vT(e[1]),i=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),n=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(` -`):[],o={type:"table",raw:e[0],header:[],align:[],rows:[]};if(A.length===i.length){for(let a of i)this.rules.other.tableAlignRight.test(a)?o.align.push("right"):this.rules.other.tableAlignCenter.test(a)?o.align.push("center"):this.rules.other.tableAlignLeft.test(a)?o.align.push("left"):o.align.push(null);for(let a=0;a({text:r,tokens:this.lexer.inline(r),header:!1,align:o.align[s]})));return o}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let A=e[1].charAt(e[1].length-1)===` -`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:A,tokens:this.lexer.inline(A)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let A=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(A)){if(!this.rules.other.endAngleBracket.test(A))return;let o=Zu(A.slice(0,-1),"\\");if((A.length-o.length)%2===0)return}else{let o=_2A(e[2],"()");if(o===-2)return;if(o>-1){let a=(e[0].indexOf("!")===0?5:4)+e[1].length+o;e[2]=e[2].substring(0,o),e[0]=e[0].substring(0,a).trim(),e[3]=""}}let i=e[2],n="";if(this.options.pedantic){let o=this.rules.other.pedanticHrefTitle.exec(i);o&&(i=o[1],n=o[3])}else n=e[3]?e[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(A)?i=i.slice(1):i=i.slice(1,-1)),bT(e,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:n&&n.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let A;if((A=this.rules.inline.reflink.exec(t))||(A=this.rules.inline.nolink.exec(t))){let i=(A[2]||A[1]).replace(this.rules.other.multipleSpaceGlobal," "),n=e[i.toLowerCase()];if(!n){let o=A[0].charAt(0);return{type:"text",raw:o,text:o}}return bT(A,n,A[0],this.lexer,this.rules)}}emStrong(t,e,A=""){let i=this.rules.inline.emStrongLDelim.exec(t);if(!(!i||i[3]&&A.match(this.rules.other.unicodeAlphaNumeric))&&(!(i[1]||i[2])||!A||this.rules.inline.punctuation.exec(A))){let n=[...i[0]].length-1,o,a,r=n,s=0,g=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(g.lastIndex=0,e=e.slice(-1*t.length+n);(i=g.exec(e))!=null;){if(o=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!o)continue;if(a=[...o].length,i[3]||i[4]){r+=a;continue}else if((i[5]||i[6])&&n%3&&!((n+a)%3)){s+=a;continue}if(r-=a,r>0)continue;a=Math.min(a,a+r+s);let l=[...i[0]][0].length,C=t.slice(0,n+i.index+l+a);if(Math.min(n,a)%2){let d=C.slice(1,-1);return{type:"em",raw:C,text:d,tokens:this.lexer.inlineTokens(d)}}let I=C.slice(2,-2);return{type:"strong",raw:C,text:I,tokens:this.lexer.inlineTokens(I)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let A=e[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(A),n=this.rules.other.startingSpaceChar.test(A)&&this.rules.other.endingSpaceChar.test(A);return i&&n&&(A=A.substring(1,A.length-1)),{type:"codespan",raw:e[0],text:A}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){let e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let A,i;return e[2]==="@"?(A=e[1],i="mailto:"+A):(A=e[1],i=A),{type:"link",raw:e[0],text:A,href:i,tokens:[{type:"text",raw:A,text:A}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let A,i;if(e[2]==="@")A=e[0],i="mailto:"+A;else{let n;do n=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(n!==e[0]);A=e[0],e[1]==="www."?i="http://"+e[0]:i=e[0]}return{type:"link",raw:e[0],text:A,href:i,tokens:[{type:"text",raw:A,text:A}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let A=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:A}}}},tc=class lM{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||K1,this.options.tokenizer=this.options.tokenizer||new B6,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let A={other:_s,block:I6.normal,inline:Wu.normal};this.options.pedantic?(A.block=I6.pedantic,A.inline=Wu.pedantic):this.options.gfm&&(A.block=I6.gfm,this.options.breaks?A.inline=Wu.breaks:A.inline=Wu.gfm),this.tokenizer.rules=A}static get rules(){return{block:I6,inline:Wu}}static lex(e,A){return new lM(A).lex(e)}static lexInline(e,A){return new lM(A).inlineTokens(e)}lex(e){e=e.replace(_s.carriageReturn,` -`),this.blockTokens(e,this.tokens);for(let A=0;A(n=a.call({lexer:this},e,A))?(e=e.substring(n.raw.length),A.push(n),!0):!1))continue;if(n=this.tokenizer.space(e)){e=e.substring(n.raw.length);let a=A.at(-1);n.raw.length===1&&a!==void 0?a.raw+=` -`:A.push(n);continue}if(n=this.tokenizer.code(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(` -`)?"":` -`)+n.raw,a.text+=` -`+n.text,this.inlineQueue.at(-1).src=a.text):A.push(n);continue}if(n=this.tokenizer.fences(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.heading(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.hr(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.blockquote(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.list(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.html(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.def(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(` -`)?"":` -`)+n.raw,a.text+=` -`+n.raw,this.inlineQueue.at(-1).src=a.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title},A.push(n));continue}if(n=this.tokenizer.table(e)){e=e.substring(n.raw.length),A.push(n);continue}if(n=this.tokenizer.lheading(e)){e=e.substring(n.raw.length),A.push(n);continue}let o=e;if(this.options.extensions?.startBlock){let a=1/0,r=e.slice(1),s;this.options.extensions.startBlock.forEach(g=>{s=g.call({lexer:this},r),typeof s=="number"&&s>=0&&(a=Math.min(a,s))}),a<1/0&&a>=0&&(o=e.substring(0,a+1))}if(this.state.top&&(n=this.tokenizer.paragraph(o))){let a=A.at(-1);i&&a?.type==="paragraph"?(a.raw+=(a.raw.endsWith(` -`)?"":` -`)+n.raw,a.text+=` -`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):A.push(n),i=o.length!==e.length,e=e.substring(n.raw.length);continue}if(n=this.tokenizer.text(e)){e=e.substring(n.raw.length);let a=A.at(-1);a?.type==="text"?(a.raw+=(a.raw.endsWith(` -`)?"":` -`)+n.raw,a.text+=` -`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):A.push(n);continue}if(e){let a="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(a);break}else throw new Error(a)}}return this.state.top=!0,A}inline(e,A=[]){return this.inlineQueue.push({src:e,tokens:A}),A}inlineTokens(e,A=[]){let i=e,n=null;if(this.tokens.links){let s=Object.keys(this.tokens.links);if(s.length>0)for(;(n=this.tokenizer.rules.inline.reflinkSearch.exec(i))!=null;)s.includes(n[0].slice(n[0].lastIndexOf("[")+1,-1))&&(i=i.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(n=this.tokenizer.rules.inline.anyPunctuation.exec(i))!=null;)i=i.slice(0,n.index)+"++"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let o;for(;(n=this.tokenizer.rules.inline.blockSkip.exec(i))!=null;)o=n[2]?n[2].length:0,i=i.slice(0,n.index+o)+"["+"a".repeat(n[0].length-o-2)+"]"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);i=this.options.hooks?.emStrongMask?.call({lexer:this},i)??i;let a=!1,r="";for(;e;){a||(r=""),a=!1;let s;if(this.options.extensions?.inline?.some(l=>(s=l.call({lexer:this},e,A))?(e=e.substring(s.raw.length),A.push(s),!0):!1))continue;if(s=this.tokenizer.escape(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.tag(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.link(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(s.raw.length);let l=A.at(-1);s.type==="text"&&l?.type==="text"?(l.raw+=s.raw,l.text+=s.text):A.push(s);continue}if(s=this.tokenizer.emStrong(e,i,r)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.codespan(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.br(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.del(e)){e=e.substring(s.raw.length),A.push(s);continue}if(s=this.tokenizer.autolink(e)){e=e.substring(s.raw.length),A.push(s);continue}if(!this.state.inLink&&(s=this.tokenizer.url(e))){e=e.substring(s.raw.length),A.push(s);continue}let g=e;if(this.options.extensions?.startInline){let l=1/0,C=e.slice(1),I;this.options.extensions.startInline.forEach(d=>{I=d.call({lexer:this},C),typeof I=="number"&&I>=0&&(l=Math.min(l,I))}),l<1/0&&l>=0&&(g=e.substring(0,l+1))}if(s=this.tokenizer.inlineText(g)){e=e.substring(s.raw.length),s.raw.slice(-1)!=="_"&&(r=s.raw.slice(-1)),a=!0;let l=A.at(-1);l?.type==="text"?(l.raw+=s.raw,l.text+=s.text):A.push(s);continue}if(e){let l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return A}},N2=class{options;parser;constructor(t){this.options=t||K1}space(t){return""}code({text:t,lang:e,escaped:A}){let i=(e||"").match(_s.notSpaceStart)?.[0],n=t.replace(_s.endingNewline,"")+` -`;return i?'
      '+(A?n:CC(n,!0))+`
      -`:"
      "+(A?n:CC(n,!0))+`
      -`}blockquote({tokens:t}){return`
      -${this.parser.parse(t)}
      -`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`${this.parser.parseInline(t)} -`}hr(t){return`
      -`}list(t){let e=t.ordered,A=t.start,i="";for(let a=0;a -`+i+" -`}listitem(t){return`
    • ${this.parser.parse(t.tokens)}
    • -`}checkbox({checked:t}){return" '}paragraph({tokens:t}){return`

      ${this.parser.parseInline(t)}

      -`}table(t){let e="",A="";for(let n=0;n${i}`),` - -`+e+` -`+i+`
      -`}tablerow({text:t}){return` -${t} -`}tablecell(t){let e=this.parser.parseInline(t.tokens),A=t.header?"th":"td";return(t.align?`<${A} align="${t.align}">`:`<${A}>`)+e+` -`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${CC(t,!0)}`}br(t){return"
      "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,tokens:A}){let i=this.parser.parseInline(A),n=yT(t);if(n===null)return i;t=n;let o='
      ",o}image({href:t,title:e,text:A,tokens:i}){i&&(A=this.parser.parseInline(i,this.parser.textRenderer));let n=yT(t);if(n===null)return CC(A);t=n;let o=`${A}{let a=n[o].flat(1/0);A=A.concat(this.walkTokens(a,e))}):n.tokens&&(A=A.concat(this.walkTokens(n.tokens,e)))}}return A}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(A=>{let i=cA({},A);if(i.async=this.defaults.async||i.async||!1,A.extensions&&(A.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let o=e.renderers[n.name];o?e.renderers[n.name]=function(...a){let r=n.renderer.apply(this,a);return r===!1&&(r=o.apply(this,a)),r}:e.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||n.level!=="block"&&n.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let o=e[n.level];o?o.unshift(n.tokenizer):e[n.level]=[n.tokenizer],n.start&&(n.level==="block"?e.startBlock?e.startBlock.push(n.start):e.startBlock=[n.start]:n.level==="inline"&&(e.startInline?e.startInline.push(n.start):e.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(e.childTokens[n.name]=n.childTokens)}),i.extensions=e),A.renderer){let n=this.defaults.renderer||new N2(this.defaults);for(let o in A.renderer){if(!(o in n))throw new Error(`renderer '${o}' does not exist`);if(["options","parser"].includes(o))continue;let a=o,r=A.renderer[a],s=n[a];n[a]=(...g)=>{let l=r.apply(n,g);return l===!1&&(l=s.apply(n,g)),l||""}}i.renderer=n}if(A.tokenizer){let n=this.defaults.tokenizer||new B6(this.defaults);for(let o in A.tokenizer){if(!(o in n))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;let a=o,r=A.tokenizer[a],s=n[a];n[a]=(...g)=>{let l=r.apply(n,g);return l===!1&&(l=s.apply(n,g)),l}}i.tokenizer=n}if(A.hooks){let n=this.defaults.hooks||new Xu;for(let o in A.hooks){if(!(o in n))throw new Error(`hook '${o}' does not exist`);if(["options","block"].includes(o))continue;let a=o,r=A.hooks[a],s=n[a];Xu.passThroughHooks.has(o)?n[a]=g=>{if(this.defaults.async&&Xu.passThroughHooksRespectAsync.has(o))return nt(this,null,function*(){let C=yield r.call(n,g);return s.call(n,C)});let l=r.call(n,g);return s.call(n,l)}:n[a]=(...g)=>{if(this.defaults.async)return nt(this,null,function*(){let C=yield r.apply(n,g);return C===!1&&(C=yield s.apply(n,g)),C});let l=r.apply(n,g);return l===!1&&(l=s.apply(n,g)),l}}i.hooks=n}if(A.walkTokens){let n=this.defaults.walkTokens,o=A.walkTokens;i.walkTokens=function(a){let r=[];return r.push(o.call(this,a)),n&&(r=r.concat(n.call(this,a))),r}}this.defaults=cA(cA({},this.defaults),i)}),this}setOptions(t){return this.defaults=cA(cA({},this.defaults),t),this}lexer(t,e){return tc.lex(t,e??this.defaults)}parser(t,e){return ic.parse(t,e??this.defaults)}parseMarkdown(t){return(e,A)=>{let i=cA({},A),n=cA(cA({},this.defaults),i),o=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(n.hooks&&(n.hooks.options=n,n.hooks.block=t),n.async)return nt(this,null,function*(){let a=n.hooks?yield n.hooks.preprocess(e):e,r=yield(n.hooks?yield n.hooks.provideLexer():t?tc.lex:tc.lexInline)(a,n),s=n.hooks?yield n.hooks.processAllTokens(r):r;n.walkTokens&&(yield Promise.all(this.walkTokens(s,n.walkTokens)));let g=yield(n.hooks?yield n.hooks.provideParser():t?ic.parse:ic.parseInline)(s,n);return n.hooks?yield n.hooks.postprocess(g):g}).catch(o);try{n.hooks&&(e=n.hooks.preprocess(e));let a=(n.hooks?n.hooks.provideLexer():t?tc.lex:tc.lexInline)(e,n);n.hooks&&(a=n.hooks.processAllTokens(a)),n.walkTokens&&this.walkTokens(a,n.walkTokens);let r=(n.hooks?n.hooks.provideParser():t?ic.parse:ic.parseInline)(a,n);return n.hooks&&(r=n.hooks.postprocess(r)),r}catch(a){return o(a)}}}onError(t,e){return A=>{if(A.message+=` -Please report this to https://github.com/markedjs/marked.`,t){let i="

      An error occurred:

      "+CC(A.message+"",!0)+"
      ";return e?Promise.resolve(i):i}if(e)return Promise.reject(A);throw A}}},G1=new G2A;function Hn(t,e){return G1.parse(t,e)}Hn.options=Hn.setOptions=function(t){return G1.setOptions(t),Hn.defaults=G1.defaults,MT(Hn.defaults),Hn};Hn.getDefaults=CM;Hn.defaults=K1;Hn.use=function(...t){return G1.use(...t),Hn.defaults=G1.defaults,MT(Hn.defaults),Hn};Hn.walkTokens=function(t,e){return G1.walkTokens(t,e)};Hn.parseInline=G1.parseInline;Hn.Parser=ic;Hn.parser=ic.parse;Hn.Renderer=N2;Hn.TextRenderer=fM;Hn.Lexer=tc;Hn.lexer=tc.lex;Hn.Tokenizer=B6;Hn.Hooks=Xu;Hn.parse=Hn;var DAe=Hn.options,yAe=Hn.setOptions,vAe=Hn.use,bAe=Hn.walkTokens,MAe=Hn.parseInline;var kAe=ic.parse,SAe=tc.lex;var K2A=["*"],U2A="Copy",J2A="Copied",Y2A=(()=>{class t{constructor(){this._buttonClick$=new XA,this.copied=Fs(this._buttonClick$.pipe(Si(()=>fi(se(!0),Ap(3e3).pipe(cu(!1)))),Vl(),Ps(1))),this.copiedText=Ue(()=>this.copied()?J2A:U2A)}onCopyToClipboardClick(){this._buttonClick$.next()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["markdown-clipboard"]],decls:2,vars:3,consts:[[1,"markdown-clipboard-button",3,"click"]],template:function(i,n){i&1&&(li(0,"button",0),p2("click",function(){return n.onCopyToClipboardClick()}),K(1),Ei()),i&2&&(ne("copied",n.copied()),p(),qA(n.copiedText()))},encapsulation:2,changeDetection:0})}}return t})(),T2A=new yA("CLIPBOARD_OPTIONS");var H2A=new yA("MARKED_EXTENSIONS"),z2A=new yA("MARKED_OPTIONS"),O2A=new yA("MERMAID_OPTIONS"),P2A=new yA("SANITIZE");function j2A(t){return typeof t=="function"}var q2A="[ngx-markdown] When using the `emoji` attribute you *have to* include Emoji-Toolkit files to `angular.json` or use imports. See README for more information",V2A="[ngx-markdown] When using the `katex` attribute you *have to* include KaTeX files to `angular.json` or use imports. See README for more information",W2A="[ngx-markdown] When using the `mermaid` attribute you *have to* include Mermaid files to `angular.json` or use imports. See README for more information",Z2A="[ngx-markdown] When using the `clipboard` attribute you *have to* include Clipboard files to `angular.json` or use imports. See README for more information",X2A="[ngx-markdown] When using the `clipboard` attribute you *have to* provide the `viewContainerRef` parameter to `MarkdownService.render()` function",$2A="[ngx-markdown] When using the `src` attribute you *have to* pass the `HttpClient` as a parameter of the `forRoot` method. See README for more information";var UT=(()=>{class t{get options(){return this._options}set options(A){this._options=cA(cA({},this.DEFAULT_MARKED_OPTIONS),A)}get renderer(){return this.options.renderer}set renderer(A){this.options.renderer=A}constructor(){this.clipboardOptions=h(T2A,{optional:!0}),this.extensions=h(H2A,{optional:!0}),this.http=h(Xs,{optional:!0}),this.mermaidOptions=h(O2A,{optional:!0}),this.platform=h(np),this.sanitize=h(P2A,{optional:!0}),this.sanitizer=h($s),this.DEFAULT_MARKED_OPTIONS={renderer:new N2},this.DEFAULT_KATEX_OPTIONS={delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}]},this.DEFAULT_MERMAID_OPTIONS={startOnLoad:!1},this.DEFAULT_CLIPBOARD_OPTIONS={buttonComponent:void 0},this.DEFAULT_PARSE_OPTIONS={decodeHtml:!1,inline:!1,emoji:!1,mermaid:!1,markedOptions:void 0,disableSanitizer:!1},this.DEFAULT_RENDER_OPTIONS={clipboard:!1,clipboardOptions:void 0,katex:!1,katexOptions:void 0,mermaid:!1,mermaidOptions:void 0},this.DEFAULT_SECURITY_CONTEXT=Wl.HTML,this._options=null,this._reload$=new XA,this.reload$=this._reload$.asObservable(),this.options=h(z2A,{optional:!0})}parse(A,i=this.DEFAULT_PARSE_OPTIONS){let{decodeHtml:n,inline:o,emoji:a,mermaid:r,disableSanitizer:s}=i,g=cA(cA({},this.options),i.markedOptions),l=g.renderer||this.renderer||new N2;this.extensions&&(this.renderer=this.extendsRendererForExtensions(l)),r&&(this.renderer=this.extendsRendererForMermaid(l));let C=this.trimIndentation(A),I=n?this.decodeHtml(C):C,d=a?this.parseEmoji(I):I,B=this.parseMarked(d,g,o);return s?B:this.sanitizeHtml(B)}render(A,i=this.DEFAULT_RENDER_OPTIONS,n){let{clipboard:o,clipboardOptions:a,katex:r,katexOptions:s,mermaid:g,mermaidOptions:l}=i;r&&this.renderKatex(A,cA(cA({},this.DEFAULT_KATEX_OPTIONS),s)),g&&this.renderMermaid(A,cA(cA(cA({},this.DEFAULT_MERMAID_OPTIONS),this.mermaidOptions),l)),o&&this.renderClipboard(A,n,cA(cA(cA({},this.DEFAULT_CLIPBOARD_OPTIONS),this.clipboardOptions),a)),this.highlight(A)}reload(){this._reload$.next()}getSource(A){if(!this.http)throw new Error($2A);return this.http.get(A,{responseType:"text"}).pipe(fe(i=>this.handleExtension(A,i)))}highlight(A){if(!sC(this.platform)||typeof Prism>"u"||typeof Prism.highlightAllUnder>"u")return;A||(A=document);let i=A.querySelectorAll('pre code:not([class*="language-"])');Array.prototype.forEach.call(i,n=>n.classList.add("language-none")),Prism.highlightAllUnder(A)}decodeHtml(A){if(!sC(this.platform))return A;let i=document.createElement("textarea");return i.innerHTML=A,i.value}extendsRendererForExtensions(A){let i=A;return i.\u0275NgxMarkdownRendererExtendedForExtensions===!0||(this.extensions&&this.extensions.length>0&&Hn.use(...this.extensions),i.\u0275NgxMarkdownRendererExtendedForExtensions=!0),A}extendsRendererForMermaid(A){let i=A;if(i.\u0275NgxMarkdownRendererExtendedForMermaid===!0)return A;let n=A.code;return A.code=o=>o.lang==="mermaid"?`
      ${o.text}
      `:n(o),i.\u0275NgxMarkdownRendererExtendedForMermaid=!0,A}handleExtension(A,i){let n=A.lastIndexOf("://"),o=n>-1?A.substring(n+4):A,a=o.lastIndexOf("/"),r=a>-1?o.substring(a+1).split("?")[0]:"",s=r.lastIndexOf("."),g=s>-1?r.substring(s+1):"";return g&&g!=="md"?"```"+g+` -`+i+"\n```":i}parseMarked(A,i,n=!1){if(i.renderer){let o=cA({},i.renderer);delete o.\u0275NgxMarkdownRendererExtendedForExtensions,delete o.\u0275NgxMarkdownRendererExtendedForMermaid,delete i.renderer,Hn.use({renderer:o})}return n?Hn.parseInline(A,i):Hn.parse(A,i)}parseEmoji(A){if(!sC(this.platform))return A;if(typeof joypixels>"u"||typeof joypixels.shortnameToUnicode>"u")throw new Error(q2A);return joypixels.shortnameToUnicode(A)}renderKatex(A,i){if(sC(this.platform)){if(typeof katex>"u"||typeof renderMathInElement>"u")throw new Error(V2A);renderMathInElement(A,i)}}renderClipboard(A,i,n){if(!sC(this.platform))return;if(typeof ClipboardJS>"u")throw new Error(Z2A);if(!i)throw new Error(X2A);let{buttonComponent:o,buttonTemplate:a}=n,r=A.querySelectorAll("pre");for(let s=0;sC.classList.add("hover"),l.onmouseleave=()=>C.classList.remove("hover");let I;if(o){let B=i.createComponent(o);I=B.hostView,B.changeDetectorRef.markForCheck()}else if(a)I=i.createEmbeddedView(a);else{let B=i.createComponent(Y2A);I=B.hostView,B.changeDetectorRef.markForCheck()}let d;I.rootNodes.forEach(B=>{C.appendChild(B),d=new ClipboardJS(B,{text:()=>g.innerText})}),I.onDestroy(()=>d.destroy())}}renderMermaid(A,i=this.DEFAULT_MERMAID_OPTIONS){if(!sC(this.platform))return;if(typeof mermaid>"u"||typeof mermaid.initialize>"u")throw new Error(W2A);let n=A.querySelectorAll(".mermaid");n.length!==0&&(mermaid.initialize(i),mermaid.run({nodes:n}))}trimIndentation(A){if(!A)return"";let i;return A.split(` -`).map(n=>{let o=i;return n.length>0&&(o=isNaN(o)?n.search(/\S|$/):Math.min(n.search(/\S|$/),o)),isNaN(i)&&(i=o),o?n.substring(o):n}).join(` -`)}sanitizeHtml(A){return nt(this,null,function*(){return j2A(this.sanitize)?this.sanitize(yield A):this.sanitize!==Wl.NONE?this.sanitizer.sanitize(this.sanitize??this.DEFAULT_SECURITY_CONTEXT,A)??"":A})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),mM=(function(t){return t.CommandLine="command-line",t.LineHighlight="line-highlight",t.LineNumbers="line-numbers",t})(mM||{}),JT=(()=>{class t{constructor(){this.element=h(ge),this.markdownService=h(UT),this.viewContainerRef=h(Oo),this.error=new $A,this.load=new $A,this.ready=new $A,this._clipboard=!1,this._commandLine=!1,this._disableSanitizer=!1,this._emoji=!1,this._inline=!1,this._katex=!1,this._lineHighlight=!1,this._lineNumbers=!1,this._mermaid=!1,this.destroyed$=new XA}get disableSanitizer(){return this._disableSanitizer}set disableSanitizer(A){this._disableSanitizer=this.coerceBooleanProperty(A)}get inline(){return this._inline}set inline(A){this._inline=this.coerceBooleanProperty(A)}get clipboard(){return this._clipboard}set clipboard(A){this._clipboard=this.coerceBooleanProperty(A)}get emoji(){return this._emoji}set emoji(A){this._emoji=this.coerceBooleanProperty(A)}get katex(){return this._katex}set katex(A){this._katex=this.coerceBooleanProperty(A)}get mermaid(){return this._mermaid}set mermaid(A){this._mermaid=this.coerceBooleanProperty(A)}get lineHighlight(){return this._lineHighlight}set lineHighlight(A){this._lineHighlight=this.coerceBooleanProperty(A)}get lineNumbers(){return this._lineNumbers}set lineNumbers(A){this._lineNumbers=this.coerceBooleanProperty(A)}get commandLine(){return this._commandLine}set commandLine(A){this._commandLine=this.coerceBooleanProperty(A)}ngOnChanges(){this.loadContent()}loadContent(){if(this.data!=null){this.handleData();return}if(this.src!=null){this.handleSrc();return}}ngAfterViewInit(){!this.data&&!this.src&&this.handleTransclusion(),this.markdownService.reload$.pipe(Bt(this.destroyed$)).subscribe(()=>this.loadContent())}ngOnDestroy(){this.destroyed$.next(),this.destroyed$.complete()}render(A,i=!1){return nt(this,null,function*(){let n={decodeHtml:i,inline:this.inline,emoji:this.emoji,mermaid:this.mermaid,disableSanitizer:this.disableSanitizer},o={clipboard:this.clipboard,clipboardOptions:this.getClipboardOptions(),katex:this.katex,katexOptions:this.katexOptions,mermaid:this.mermaid,mermaidOptions:this.mermaidOptions},a=yield this.markdownService.parse(A,n);this.element.nativeElement.innerHTML=a,this.handlePlugins(),this.markdownService.render(this.element.nativeElement,o,this.viewContainerRef),this.ready.emit()})}coerceBooleanProperty(A){return A!=null&&`${String(A)}`!="false"}getClipboardOptions(){if(this.clipboardButtonComponent||this.clipboardButtonTemplate)return{buttonComponent:this.clipboardButtonComponent,buttonTemplate:this.clipboardButtonTemplate}}handleData(){this.render(this.data)}handleSrc(){this.markdownService.getSource(this.src).subscribe({next:A=>{this.render(A).then(()=>{this.load.emit(A)})},error:A=>this.error.emit(A)})}handleTransclusion(){this.render(this.element.nativeElement.innerHTML,!0)}handlePlugins(){this.commandLine&&(this.setPluginClass(this.element.nativeElement,mM.CommandLine),this.setPluginOptions(this.element.nativeElement,{dataFilterOutput:this.filterOutput,dataHost:this.host,dataPrompt:this.prompt,dataOutput:this.output,dataUser:this.user})),this.lineHighlight&&this.setPluginOptions(this.element.nativeElement,{dataLine:this.line,dataLineOffset:this.lineOffset}),this.lineNumbers&&(this.setPluginClass(this.element.nativeElement,mM.LineNumbers),this.setPluginOptions(this.element.nativeElement,{dataStart:this.start}))}setPluginClass(A,i){let n=A.querySelectorAll("pre");for(let o=0;o{let r=i[a];if(r){let s=this.toLispCase(a);n.item(o).setAttribute(s,r.toString())}})}toLispCase(A){let i=A.match(/([A-Z])/g);if(!i)return A;let n=A.toString();for(let o=0,a=i.length;o{class t{static forRoot(A){return{ngModule:t,providers:[e4(A)]}}static forChild(){return{ngModule:t}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275mod=$e({type:t})}static{this.\u0275inj=Xe({})}}return t})();var yi="primary",c4=Symbol("RouteTitle"),vM=class{params;constructor(e){this.params=e||{}}has(e){return Object.prototype.hasOwnProperty.call(this.params,e)}get(e){if(this.has(e)){let A=this.params[e];return Array.isArray(A)?A[0]:A}return null}getAll(e){if(this.has(e)){let A=this.params[e];return Array.isArray(A)?A:[A]}return[]}get keys(){return Object.keys(this.params)}};function Y1(t){return new vM(t)}function pM(t,e,A){for(let i=0;it.length||A.pathMatch==="full"&&(e.hasChildren()||i.lengtht.length||A.pathMatch==="full"&&e.hasChildren()&&A.path!=="**")return null;let r={};return!pM(o,t.slice(0,o.length),r)||!pM(a,t.slice(t.length-a.length),r)?null:{consumed:t,posParams:r}}function w6(t){return new Promise((e,A)=>{t.pipe(zo()).subscribe({next:i=>e(i),error:i=>A(i)})})}function eIA(t,e){if(t.length!==e.length)return!1;for(let A=0;Ai[o]===n)}else return t===e}function tIA(t){return t.length>0?t[t.length-1]:null}function H1(t){return mB(t)?t:lp(t)?Ms(Promise.resolve(t)):se(t)}function $T(t){return mB(t)?w6(t):Promise.resolve(t)}var iIA={exact:eH,subset:tH},AH={exact:nIA,subset:oIA,ignored:()=>!0};function TT(t,e,A){return iIA[A.paths](t.root,e.root,A.matrixParams)&&AH[A.queryParams](t.queryParams,e.queryParams)&&!(A.fragment==="exact"&&t.fragment!==e.fragment)}function nIA(t,e){return l0(t,e)}function eH(t,e,A){if(!U1(t.segments,e.segments)||!f6(t.segments,e.segments,A)||t.numberOfChildren!==e.numberOfChildren)return!1;for(let i in e.children)if(!t.children[i]||!eH(t.children[i],e.children[i],A))return!1;return!0}function oIA(t,e){return Object.keys(e).length<=Object.keys(t).length&&Object.keys(e).every(A=>XT(t[A],e[A]))}function tH(t,e,A){return iH(t,e,e.segments,A)}function iH(t,e,A,i){if(t.segments.length>A.length){let n=t.segments.slice(0,A.length);return!(!U1(n,A)||e.hasChildren()||!f6(n,A,i))}else if(t.segments.length===A.length){if(!U1(t.segments,A)||!f6(t.segments,A,i))return!1;for(let n in e.children)if(!t.children[n]||!tH(t.children[n],e.children[n],i))return!1;return!0}else{let n=A.slice(0,t.segments.length),o=A.slice(t.segments.length);return!U1(t.segments,n)||!f6(t.segments,n,i)||!t.children[yi]?!1:iH(t.children[yi],e,o,i)}}function f6(t,e,A){return e.every((i,n)=>AH[A](t[n].parameters,i.parameters))}var oc=class{root;queryParams;fragment;_queryParamMap;constructor(e=new ro([],{}),A={},i=null){this.root=e,this.queryParams=A,this.fragment=i}get queryParamMap(){return this._queryParamMap??=Y1(this.queryParams),this._queryParamMap}toString(){return sIA.serialize(this)}},ro=class{segments;children;parent=null;constructor(e,A){this.segments=e,this.children=A,Object.values(A).forEach(i=>i.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return m6(this)}},F2=class{path;parameters;_parameterMap;constructor(e,A){this.path=e,this.parameters=A}get parameterMap(){return this._parameterMap??=Y1(this.parameters),this._parameterMap}toString(){return oH(this)}};function aIA(t,e){return U1(t,e)&&t.every((A,i)=>l0(A.parameters,e[i].parameters))}function U1(t,e){return t.length!==e.length?!1:t.every((A,i)=>A.path===e[i].path)}function rIA(t,e){let A=[];return Object.entries(t.children).forEach(([i,n])=>{i===yi&&(A=A.concat(e(n,i)))}),Object.entries(t.children).forEach(([i,n])=>{i!==yi&&(A=A.concat(e(n,i)))}),A}var z1=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>new dC,providedIn:"root"})}return t})(),dC=class{parse(e){let A=new kM(e);return new oc(A.parseRootSegment(),A.parseQueryParams(),A.parseFragment())}serialize(e){let A=`/${t4(e.root,!0)}`,i=cIA(e.queryParams),n=typeof e.fragment=="string"?`#${gIA(e.fragment)}`:"";return`${A}${i}${n}`}},sIA=new dC;function m6(t){return t.segments.map(e=>oH(e)).join("/")}function t4(t,e){if(!t.hasChildren())return m6(t);if(e){let A=t.children[yi]?t4(t.children[yi],!1):"",i=[];return Object.entries(t.children).forEach(([n,o])=>{n!==yi&&i.push(`${n}:${t4(o,!1)}`)}),i.length>0?`${A}(${i.join("//")})`:A}else{let A=rIA(t,(i,n)=>n===yi?[t4(t.children[yi],!1)]:[`${n}:${t4(i,!1)}`]);return Object.keys(t.children).length===1&&t.children[yi]!=null?`${m6(t)}/${A[0]}`:`${m6(t)}/(${A.join("//")})`}}function nH(t){return encodeURIComponent(t).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function h6(t){return nH(t).replace(/%3B/gi,";")}function gIA(t){return encodeURI(t)}function MM(t){return nH(t).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function p6(t){return decodeURIComponent(t)}function HT(t){return p6(t.replace(/\+/g,"%20"))}function oH(t){return`${MM(t.path)}${lIA(t.parameters)}`}function lIA(t){return Object.entries(t).map(([e,A])=>`;${MM(e)}=${MM(A)}`).join("")}function cIA(t){let e=Object.entries(t).map(([A,i])=>Array.isArray(i)?i.map(n=>`${h6(A)}=${h6(n)}`).join("&"):`${h6(A)}=${h6(i)}`).filter(A=>A);return e.length?`?${e.join("&")}`:""}var CIA=/^[^\/()?;#]+/;function wM(t){let e=t.match(CIA);return e?e[0]:""}var IIA=/^[^\/()?;=#]+/;function dIA(t){let e=t.match(IIA);return e?e[0]:""}var BIA=/^[^=?&#]+/;function EIA(t){let e=t.match(BIA);return e?e[0]:""}var QIA=/^[^&#]+/;function hIA(t){let e=t.match(QIA);return e?e[0]:""}var kM=class{url;remaining;constructor(e){this.url=e,this.remaining=e}parseRootSegment(){return this.consumeOptional("/"),this.remaining===""||this.peekStartsWith("?")||this.peekStartsWith("#")?new ro([],{}):new ro([],this.parseChildren())}parseQueryParams(){let e={};if(this.consumeOptional("?"))do this.parseQueryParam(e);while(this.consumeOptional("&"));return e}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(this.remaining==="")return{};this.consumeOptional("/");let e=[];for(this.peekStartsWith("(")||e.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),e.push(this.parseSegment());let A={};this.peekStartsWith("/(")&&(this.capture("/"),A=this.parseParens(!0));let i={};return this.peekStartsWith("(")&&(i=this.parseParens(!1)),(e.length>0||Object.keys(A).length>0)&&(i[yi]=new ro(e,A)),i}parseSegment(){let e=wM(this.remaining);if(e===""&&this.peekStartsWith(";"))throw new kt(4009,!1);return this.capture(e),new F2(p6(e),this.parseMatrixParams())}parseMatrixParams(){let e={};for(;this.consumeOptional(";");)this.parseParam(e);return e}parseParam(e){let A=dIA(this.remaining);if(!A)return;this.capture(A);let i="";if(this.consumeOptional("=")){let n=wM(this.remaining);n&&(i=n,this.capture(i))}e[p6(A)]=p6(i)}parseQueryParam(e){let A=EIA(this.remaining);if(!A)return;this.capture(A);let i="";if(this.consumeOptional("=")){let a=hIA(this.remaining);a&&(i=a,this.capture(i))}let n=HT(A),o=HT(i);if(e.hasOwnProperty(n)){let a=e[n];Array.isArray(a)||(a=[a],e[n]=a),a.push(o)}else e[n]=o}parseParens(e){let A={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){let i=wM(this.remaining),n=this.remaining[i.length];if(n!=="/"&&n!==")"&&n!==";")throw new kt(4010,!1);let o;i.indexOf(":")>-1?(o=i.slice(0,i.indexOf(":")),this.capture(o),this.capture(":")):e&&(o=yi);let a=this.parseChildren();A[o??yi]=Object.keys(a).length===1&&a[yi]?a[yi]:new ro([],a),this.consumeOptional("//")}return A}peekStartsWith(e){return this.remaining.startsWith(e)}consumeOptional(e){return this.peekStartsWith(e)?(this.remaining=this.remaining.substring(e.length),!0):!1}capture(e){if(!this.consumeOptional(e))throw new kt(4011,!1)}};function aH(t){return t.segments.length>0?new ro([],{[yi]:t}):t}function rH(t){let e={};for(let[i,n]of Object.entries(t.children)){let o=rH(n);if(i===yi&&o.segments.length===0&&o.hasChildren())for(let[a,r]of Object.entries(o.children))e[a]=r;else(o.segments.length>0||o.hasChildren())&&(e[i]=o)}let A=new ro(t.segments,e);return uIA(A)}function uIA(t){if(t.numberOfChildren===1&&t.children[yi]){let e=t.children[yi];return new ro(t.segments.concat(e.segments),e.children)}return t}function WB(t){return t instanceof oc}function sH(t,e,A=null,i=null,n=new dC){let o=gH(t);return lH(o,e,A,i,n)}function gH(t){let e;function A(o){let a={};for(let s of o.children){let g=A(s);a[s.outlet]=g}let r=new ro(o.url,a);return o===t&&(e=r),r}let i=A(t.root),n=aH(i);return e??n}function lH(t,e,A,i,n){let o=t;for(;o.parent;)o=o.parent;if(e.length===0)return DM(o,o,o,A,i,n);let a=fIA(e);if(a.toRoot())return DM(o,o,new ro([],{}),A,i,n);let r=mIA(a,o,t),s=r.processChildren?n4(r.segmentGroup,r.index,a.commands):CH(r.segmentGroup,r.index,a.commands);return DM(o,r.segmentGroup,s,A,i,n)}function D6(t){return typeof t=="object"&&t!=null&&!t.outlets&&!t.segmentPath}function a4(t){return typeof t=="object"&&t!=null&&t.outlets}function zT(t,e,A){t||="\u0275";let i=new oc;return i.queryParams={[t]:e},A.parse(A.serialize(i)).queryParams[t]}function DM(t,e,A,i,n,o){let a={};for(let[g,l]of Object.entries(i??{}))a[g]=Array.isArray(l)?l.map(C=>zT(g,C,o)):zT(g,l,o);let r;t===e?r=A:r=cH(t,e,A);let s=aH(rH(r));return new oc(s,a,n)}function cH(t,e,A){let i={};return Object.entries(t.children).forEach(([n,o])=>{o===e?i[n]=A:i[n]=cH(o,e,A)}),new ro(t.segments,i)}var y6=class{isAbsolute;numberOfDoubleDots;commands;constructor(e,A,i){if(this.isAbsolute=e,this.numberOfDoubleDots=A,this.commands=i,e&&i.length>0&&D6(i[0]))throw new kt(4003,!1);let n=i.find(a4);if(n&&n!==tIA(i))throw new kt(4004,!1)}toRoot(){return this.isAbsolute&&this.commands.length===1&&this.commands[0]=="/"}};function fIA(t){if(typeof t[0]=="string"&&t.length===1&&t[0]==="/")return new y6(!0,0,t);let e=0,A=!1,i=t.reduce((n,o,a)=>{if(typeof o=="object"&&o!=null){if(o.outlets){let r={};return Object.entries(o.outlets).forEach(([s,g])=>{r[s]=typeof g=="string"?g.split("/"):g}),[...n,{outlets:r}]}if(o.segmentPath)return[...n,o.segmentPath]}return typeof o!="string"?[...n,o]:a===0?(o.split("/").forEach((r,s)=>{s==0&&r==="."||(s==0&&r===""?A=!0:r===".."?e++:r!=""&&n.push(r))}),n):[...n,o]},[]);return new y6(A,e,i)}var jB=class{segmentGroup;processChildren;index;constructor(e,A,i){this.segmentGroup=e,this.processChildren=A,this.index=i}};function mIA(t,e,A){if(t.isAbsolute)return new jB(e,!0,0);if(!A)return new jB(e,!1,NaN);if(A.parent===null)return new jB(A,!0,0);let i=D6(t.commands[0])?0:1,n=A.segments.length-1+i;return pIA(A,n,t.numberOfDoubleDots)}function pIA(t,e,A){let i=t,n=e,o=A;for(;o>n;){if(o-=n,i=i.parent,!i)throw new kt(4005,!1);n=i.segments.length}return new jB(i,!1,n-o)}function wIA(t){return a4(t[0])?t[0].outlets:{[yi]:t}}function CH(t,e,A){if(t??=new ro([],{}),t.segments.length===0&&t.hasChildren())return n4(t,e,A);let i=DIA(t,e,A),n=A.slice(i.commandIndex);if(i.match&&i.pathIndexo!==yi)&&t.children[yi]&&t.numberOfChildren===1&&t.children[yi].segments.length===0){let o=n4(t.children[yi],e,A);return new ro(t.segments,o.children)}return Object.entries(i).forEach(([o,a])=>{typeof a=="string"&&(a=[a]),a!==null&&(n[o]=CH(t.children[o],e,a))}),Object.entries(t.children).forEach(([o,a])=>{i[o]===void 0&&(n[o]=a)}),new ro(t.segments,n)}}function DIA(t,e,A){let i=0,n=e,o={match:!1,pathIndex:0,commandIndex:0};for(;n=A.length)return o;let a=t.segments[n],r=A[i];if(a4(r))break;let s=`${r}`,g=i0&&s===void 0)break;if(s&&g&&typeof g=="object"&&g.outlets===void 0){if(!PT(s,g,a))return o;i+=2}else{if(!PT(s,{},a))return o;i++}n++}return{match:!0,pathIndex:n,commandIndex:i}}function SM(t,e,A){let i=t.segments.slice(0,e),n=0;for(;n{typeof i=="string"&&(i=[i]),i!==null&&(e[A]=SM(new ro([],{}),0,i))}),e}function OT(t){let e={};return Object.entries(t).forEach(([A,i])=>e[A]=`${i}`),e}function PT(t,e,A){return t==A.path&&l0(e,A.parameters)}var qB="imperative",Br=(function(t){return t[t.NavigationStart=0]="NavigationStart",t[t.NavigationEnd=1]="NavigationEnd",t[t.NavigationCancel=2]="NavigationCancel",t[t.NavigationError=3]="NavigationError",t[t.RoutesRecognized=4]="RoutesRecognized",t[t.ResolveStart=5]="ResolveStart",t[t.ResolveEnd=6]="ResolveEnd",t[t.GuardsCheckStart=7]="GuardsCheckStart",t[t.GuardsCheckEnd=8]="GuardsCheckEnd",t[t.RouteConfigLoadStart=9]="RouteConfigLoadStart",t[t.RouteConfigLoadEnd=10]="RouteConfigLoadEnd",t[t.ChildActivationStart=11]="ChildActivationStart",t[t.ChildActivationEnd=12]="ChildActivationEnd",t[t.ActivationStart=13]="ActivationStart",t[t.ActivationEnd=14]="ActivationEnd",t[t.Scroll=15]="Scroll",t[t.NavigationSkipped=16]="NavigationSkipped",t})(Br||{}),Ug=class{id;url;constructor(e,A){this.id=e,this.url=A}},_2=class extends Ug{type=Br.NavigationStart;navigationTrigger;restoredState;constructor(e,A,i="imperative",n=null){super(e,A),this.navigationTrigger=i,this.restoredState=n}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}},ac=class extends Ug{urlAfterRedirects;type=Br.NavigationEnd;constructor(e,A,i){super(e,A),this.urlAfterRedirects=i}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}},cs=(function(t){return t[t.Redirect=0]="Redirect",t[t.SupersededByNewNavigation=1]="SupersededByNewNavigation",t[t.NoDataFromResolver=2]="NoDataFromResolver",t[t.GuardRejected=3]="GuardRejected",t[t.Aborted=4]="Aborted",t})(cs||{}),ZB=(function(t){return t[t.IgnoredSameUrlNavigation=0]="IgnoredSameUrlNavigation",t[t.IgnoredByUrlHandlingStrategy=1]="IgnoredByUrlHandlingStrategy",t})(ZB||{}),cl=class extends Ug{reason;code;type=Br.NavigationCancel;constructor(e,A,i,n){super(e,A),this.reason=i,this.code=n}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}};function IH(t){return t instanceof cl&&(t.code===cs.Redirect||t.code===cs.SupersededByNewNavigation)}var c0=class extends Ug{reason;code;type=Br.NavigationSkipped;constructor(e,A,i,n){super(e,A),this.reason=i,this.code=n}},T1=class extends Ug{error;target;type=Br.NavigationError;constructor(e,A,i,n){super(e,A),this.error=i,this.target=n}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}},XB=class extends Ug{urlAfterRedirects;state;type=Br.RoutesRecognized;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},v6=class extends Ug{urlAfterRedirects;state;type=Br.GuardsCheckStart;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},b6=class extends Ug{urlAfterRedirects;state;shouldActivate;type=Br.GuardsCheckEnd;constructor(e,A,i,n,o){super(e,A),this.urlAfterRedirects=i,this.state=n,this.shouldActivate=o}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}},M6=class extends Ug{urlAfterRedirects;state;type=Br.ResolveStart;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},k6=class extends Ug{urlAfterRedirects;state;type=Br.ResolveEnd;constructor(e,A,i,n){super(e,A),this.urlAfterRedirects=i,this.state=n}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},S6=class{route;type=Br.RouteConfigLoadStart;constructor(e){this.route=e}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}},x6=class{route;type=Br.RouteConfigLoadEnd;constructor(e){this.route=e}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}},R6=class{snapshot;type=Br.ChildActivationStart;constructor(e){this.snapshot=e}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},N6=class{snapshot;type=Br.ChildActivationEnd;constructor(e){this.snapshot=e}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},F6=class{snapshot;type=Br.ActivationStart;constructor(e){this.snapshot=e}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},_6=class{snapshot;type=Br.ActivationEnd;constructor(e){this.snapshot=e}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},$B=class{routerEvent;position;anchor;scrollBehavior;type=Br.Scroll;constructor(e,A,i,n){this.routerEvent=e,this.position=A,this.anchor=i,this.scrollBehavior=n}toString(){let e=this.position?`${this.position[0]}, ${this.position[1]}`:null;return`Scroll(anchor: '${this.anchor}', position: '${e}')`}},AE=class{},eE=class{url;navigationBehaviorOptions;constructor(e,A){this.url=e,this.navigationBehaviorOptions=A}};function vIA(t){return!(t instanceof AE)&&!(t instanceof eE)}var L6=class{rootInjector;outlet=null;route=null;children;attachRef=null;get injector(){return this.route?.snapshot._environmentInjector??this.rootInjector}constructor(e){this.rootInjector=e,this.children=new O1(this.rootInjector)}},O1=(()=>{class t{rootInjector;contexts=new Map;constructor(A){this.rootInjector=A}onChildOutletCreated(A,i){let n=this.getOrCreateContext(A);n.outlet=i,this.contexts.set(A,n)}onChildOutletDestroyed(A){let i=this.getContext(A);i&&(i.outlet=null,i.attachRef=null)}onOutletDeactivated(){let A=this.contexts;return this.contexts=new Map,A}onOutletReAttached(A){this.contexts=A}getOrCreateContext(A){let i=this.getContext(A);return i||(i=new L6(this.rootInjector),this.contexts.set(A,i)),i}getContext(A){return this.contexts.get(A)||null}static \u0275fac=function(i){return new(i||t)(xo(Gr))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),G6=class{_root;constructor(e){this._root=e}get root(){return this._root.value}parent(e){let A=this.pathFromRoot(e);return A.length>1?A[A.length-2]:null}children(e){let A=xM(e,this._root);return A?A.children.map(i=>i.value):[]}firstChild(e){let A=xM(e,this._root);return A&&A.children.length>0?A.children[0].value:null}siblings(e){let A=RM(e,this._root);return A.length<2?[]:A[A.length-2].children.map(n=>n.value).filter(n=>n!==e)}pathFromRoot(e){return RM(e,this._root).map(A=>A.value)}};function xM(t,e){if(t===e.value)return e;for(let A of e.children){let i=xM(t,A);if(i)return i}return null}function RM(t,e){if(t===e.value)return[e];for(let A of e.children){let i=RM(t,A);if(i.length)return i.unshift(e),i}return[]}var Kg=class{value;children;constructor(e,A){this.value=e,this.children=A}toString(){return`TreeNode(${this.value})`}};function PB(t){let e={};return t&&t.children.forEach(A=>e[A.value.outlet]=A),e}var r4=class extends G6{snapshot;constructor(e,A){super(e),this.snapshot=A,YM(this,e)}toString(){return this.snapshot.toString()}};function dH(t,e){let A=bIA(t,e),i=new Ht([new F2("",{})]),n=new Ht({}),o=new Ht({}),a=new Ht({}),r=new Ht(""),s=new ag(i,n,a,r,o,yi,t,A.root);return s.snapshot=A.root,new r4(new Kg(s,[]),A)}function bIA(t,e){let A={},i={},n={},a=new J1([],A,n,"",i,yi,t,null,{},e);return new s4("",new Kg(a,[]))}var ag=class{urlSubject;paramsSubject;queryParamsSubject;fragmentSubject;dataSubject;outlet;component;snapshot;_futureSnapshot;_routerState;_paramMap;_queryParamMap;title;url;params;queryParams;fragment;data;constructor(e,A,i,n,o,a,r,s){this.urlSubject=e,this.paramsSubject=A,this.queryParamsSubject=i,this.fragmentSubject=n,this.dataSubject=o,this.outlet=a,this.component=r,this._futureSnapshot=s,this.title=this.dataSubject?.pipe(fe(g=>g[c4]))??se(void 0),this.url=e,this.params=A,this.queryParams=i,this.fragment=n,this.data=o}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=this.params.pipe(fe(e=>Y1(e))),this._paramMap}get queryParamMap(){return this._queryParamMap??=this.queryParams.pipe(fe(e=>Y1(e))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}};function K6(t,e,A="emptyOnly"){let i,{routeConfig:n}=t;return e!==null&&(A==="always"||n?.path===""||!e.component&&!e.routeConfig?.loadComponent)?i={params:cA(cA({},e.params),t.params),data:cA(cA({},e.data),t.data),resolve:cA(cA(cA(cA({},t.data),e.data),n?.data),t._resolvedData)}:i={params:cA({},t.params),data:cA({},t.data),resolve:cA(cA({},t.data),t._resolvedData??{})},n&&EH(n)&&(i.resolve[c4]=n.title),i}var J1=class{url;params;queryParams;fragment;data;outlet;component;routeConfig;_resolve;_resolvedData;_routerState;_paramMap;_queryParamMap;_environmentInjector;get title(){return this.data?.[c4]}constructor(e,A,i,n,o,a,r,s,g,l){this.url=e,this.params=A,this.queryParams=i,this.fragment=n,this.data=o,this.outlet=a,this.component=r,this.routeConfig=s,this._resolve=g,this._environmentInjector=l}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=Y1(this.params),this._paramMap}get queryParamMap(){return this._queryParamMap??=Y1(this.queryParams),this._queryParamMap}toString(){let e=this.url.map(i=>i.toString()).join("/"),A=this.routeConfig?this.routeConfig.path:"";return`Route(url:'${e}', path:'${A}')`}},s4=class extends G6{url;constructor(e,A){super(A),this.url=e,YM(this,A)}toString(){return BH(this._root)}};function YM(t,e){e.value._routerState=t,e.children.forEach(A=>YM(t,A))}function BH(t){let e=t.children.length>0?` { ${t.children.map(BH).join(", ")} } `:"";return`${t.value}${e}`}function yM(t){if(t.snapshot){let e=t.snapshot,A=t._futureSnapshot;t.snapshot=A,l0(e.queryParams,A.queryParams)||t.queryParamsSubject.next(A.queryParams),e.fragment!==A.fragment&&t.fragmentSubject.next(A.fragment),l0(e.params,A.params)||t.paramsSubject.next(A.params),eIA(e.url,A.url)||t.urlSubject.next(A.url),l0(e.data,A.data)||t.dataSubject.next(A.data)}else t.snapshot=t._futureSnapshot,t.dataSubject.next(t._futureSnapshot.data)}function NM(t,e){let A=l0(t.params,e.params)&&aIA(t.url,e.url),i=!t.parent!=!e.parent;return A&&!i&&(!t.parent||NM(t.parent,e.parent))}function EH(t){return typeof t.title=="string"||t.title===null}var QH=new yA(""),TM=(()=>{class t{activated=null;get activatedComponentRef(){return this.activated}_activatedRoute=null;name=yi;activateEvents=new $A;deactivateEvents=new $A;attachEvents=new $A;detachEvents=new $A;routerOutletData=rt();parentContexts=h(O1);location=h(Oo);changeDetector=h(Dt);inputBinder=h(C4,{optional:!0});supportsBindingToComponentInputs=!0;ngOnChanges(A){if(A.name){let{firstChange:i,previousValue:n}=A.name;if(i)return;this.isTrackedInParentContexts(n)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(n)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(A){return this.parentContexts.getContext(A)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;let A=this.parentContexts.getContext(this.name);A?.route&&(A.attachRef?this.attach(A.attachRef,A.route):this.activateWith(A.route,A.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new kt(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new kt(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new kt(4012,!1);this.location.detach();let A=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(A.instance),A}attach(A,i){this.activated=A,this._activatedRoute=i,this.location.insert(A.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(A.instance)}deactivate(){if(this.activated){let A=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(A)}}activateWith(A,i){if(this.isActivated)throw new kt(4013,!1);this._activatedRoute=A;let n=this.location,a=A.snapshot.component,r=this.parentContexts.getOrCreateContext(this.name).children,s=new FM(A,r,n.injector,this.routerOutletData);this.activated=n.createComponent(a,{index:n.length,injector:s,environmentInjector:i}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["router-outlet"]],inputs:{name:"name",routerOutletData:[1,"routerOutletData"]},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],features:[ti]})}return t})(),FM=class{route;childContexts;parent;outletData;constructor(e,A,i,n){this.route=e,this.childContexts=A,this.parent=i,this.outletData=n}get(e,A){return e===ag?this.route:e===O1?this.childContexts:e===QH?this.outletData:this.parent.get(e,A)}},C4=new yA(""),HM=(()=>{class t{outletDataSubscriptions=new Map;bindActivatedRouteToOutletComponent(A){this.unsubscribeFromRouteData(A),this.subscribeToRouteData(A)}unsubscribeFromRouteData(A){this.outletDataSubscriptions.get(A)?.unsubscribe(),this.outletDataSubscriptions.delete(A)}subscribeToRouteData(A){let{activatedRoute:i}=A,n=Ir([i.queryParams,i.params,i.data]).pipe(Si(([o,a,r],s)=>(r=cA(cA(cA({},o),a),r),s===0?se(r):Promise.resolve(r)))).subscribe(o=>{if(!A.isActivated||!A.activatedComponentRef||A.activatedRoute!==i||i.component===null){this.unsubscribeFromRouteData(A);return}let a=NU(i.component);if(!a){this.unsubscribeFromRouteData(A);return}for(let{templateName:r}of a.inputs)A.activatedComponentRef.setInput(r,o[r])});this.outletDataSubscriptions.set(A,n)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac})}return t})(),zM=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],exportAs:["emptyRouterOutlet"],decls:1,vars:0,template:function(i,n){i&1&&GA(0,"router-outlet")},dependencies:[TM],encapsulation:2})}return t})();function OM(t){let e=t.children&&t.children.map(OM),A=e?Ge(cA({},t),{children:e}):cA({},t);return!A.component&&!A.loadComponent&&(e||A.loadChildren)&&A.outlet&&A.outlet!==yi&&(A.component=zM),A}function MIA(t,e,A){let i=g4(t,e._root,A?A._root:void 0);return new r4(i,e)}function g4(t,e,A){if(A&&t.shouldReuseRoute(e.value,A.value.snapshot)){let i=A.value;i._futureSnapshot=e.value;let n=kIA(t,e,A);return new Kg(i,n)}else{if(t.shouldAttach(e.value)){let o=t.retrieve(e.value);if(o!==null){let a=o.route;return a.value._futureSnapshot=e.value,a.children=e.children.map(r=>g4(t,r)),a}}let i=SIA(e.value),n=e.children.map(o=>g4(t,o));return new Kg(i,n)}}function kIA(t,e,A){return e.children.map(i=>{for(let n of A.children)if(t.shouldReuseRoute(i.value,n.value.snapshot))return g4(t,i,n);return g4(t,i)})}function SIA(t){return new ag(new Ht(t.url),new Ht(t.params),new Ht(t.queryParams),new Ht(t.fragment),new Ht(t.data),t.outlet,t.component,t)}var tE=class{redirectTo;navigationBehaviorOptions;constructor(e,A){this.redirectTo=e,this.navigationBehaviorOptions=A}},hH="ngNavigationCancelingError";function U6(t,e){let{redirectTo:A,navigationBehaviorOptions:i}=WB(e)?{redirectTo:e,navigationBehaviorOptions:void 0}:e,n=uH(!1,cs.Redirect);return n.url=A,n.navigationBehaviorOptions=i,n}function uH(t,e){let A=new Error(`NavigationCancelingError: ${t||""}`);return A[hH]=!0,A.cancellationCode=e,A}function xIA(t){return fH(t)&&WB(t.url)}function fH(t){return!!t&&t[hH]}var _M=class{routeReuseStrategy;futureState;currState;forwardEvent;inputBindingEnabled;constructor(e,A,i,n,o){this.routeReuseStrategy=e,this.futureState=A,this.currState=i,this.forwardEvent=n,this.inputBindingEnabled=o}activate(e){let A=this.futureState._root,i=this.currState?this.currState._root:null;this.deactivateChildRoutes(A,i,e),yM(this.futureState.root),this.activateChildRoutes(A,i,e)}deactivateChildRoutes(e,A,i){let n=PB(A);e.children.forEach(o=>{let a=o.value.outlet;this.deactivateRoutes(o,n[a],i),delete n[a]}),Object.values(n).forEach(o=>{this.deactivateRouteAndItsChildren(o,i)})}deactivateRoutes(e,A,i){let n=e.value,o=A?A.value:null;if(n===o)if(n.component){let a=i.getContext(n.outlet);a&&this.deactivateChildRoutes(e,A,a.children)}else this.deactivateChildRoutes(e,A,i);else o&&this.deactivateRouteAndItsChildren(A,i)}deactivateRouteAndItsChildren(e,A){e.value.component&&this.routeReuseStrategy.shouldDetach(e.value.snapshot)?this.detachAndStoreRouteSubtree(e,A):this.deactivateRouteAndOutlet(e,A)}detachAndStoreRouteSubtree(e,A){let i=A.getContext(e.value.outlet),n=i&&e.value.component?i.children:A,o=PB(e);for(let a of Object.values(o))this.deactivateRouteAndItsChildren(a,n);if(i&&i.outlet){let a=i.outlet.detach(),r=i.children.onOutletDeactivated();this.routeReuseStrategy.store(e.value.snapshot,{componentRef:a,route:e,contexts:r})}}deactivateRouteAndOutlet(e,A){let i=A.getContext(e.value.outlet),n=i&&e.value.component?i.children:A,o=PB(e);for(let a of Object.values(o))this.deactivateRouteAndItsChildren(a,n);i&&(i.outlet&&(i.outlet.deactivate(),i.children.onOutletDeactivated()),i.attachRef=null,i.route=null)}activateChildRoutes(e,A,i){let n=PB(A);e.children.forEach(o=>{this.activateRoutes(o,n[o.value.outlet],i),this.forwardEvent(new _6(o.value.snapshot))}),e.children.length&&this.forwardEvent(new N6(e.value.snapshot))}activateRoutes(e,A,i){let n=e.value,o=A?A.value:null;if(yM(n),n===o)if(n.component){let a=i.getOrCreateContext(n.outlet);this.activateChildRoutes(e,A,a.children)}else this.activateChildRoutes(e,A,i);else if(n.component){let a=i.getOrCreateContext(n.outlet);if(this.routeReuseStrategy.shouldAttach(n.snapshot)){let r=this.routeReuseStrategy.retrieve(n.snapshot);this.routeReuseStrategy.store(n.snapshot,null),a.children.onOutletReAttached(r.contexts),a.attachRef=r.componentRef,a.route=r.route.value,a.outlet&&a.outlet.attach(r.componentRef,r.route.value),yM(r.route.value),this.activateChildRoutes(e,null,a.children)}else a.attachRef=null,a.route=n,a.outlet&&a.outlet.activateWith(n,a.injector),this.activateChildRoutes(e,null,a.children)}else this.activateChildRoutes(e,null,i)}},J6=class{path;route;constructor(e){this.path=e,this.route=this.path[this.path.length-1]}},VB=class{component;route;constructor(e,A){this.component=e,this.route=A}};function RIA(t,e,A){let i=t._root,n=e?e._root:null;return i4(i,n,A,[i.value])}function NIA(t){let e=t.routeConfig?t.routeConfig.canActivateChild:null;return!e||e.length===0?null:{node:t,guards:e}}function nE(t,e){let A=Symbol(),i=e.get(t,A);return i===A?typeof t=="function"&&!IU(t)?t:e.get(t):i}function i4(t,e,A,i,n={canDeactivateChecks:[],canActivateChecks:[]}){let o=PB(e);return t.children.forEach(a=>{FIA(a,o[a.value.outlet],A,i.concat([a.value]),n),delete o[a.value.outlet]}),Object.entries(o).forEach(([a,r])=>o4(r,A.getContext(a),n)),n}function FIA(t,e,A,i,n={canDeactivateChecks:[],canActivateChecks:[]}){let o=t.value,a=e?e.value:null,r=A?A.getContext(t.value.outlet):null;if(a&&o.routeConfig===a.routeConfig){let s=_IA(a,o,o.routeConfig.runGuardsAndResolvers);s?n.canActivateChecks.push(new J6(i)):(o.data=a.data,o._resolvedData=a._resolvedData),o.component?i4(t,e,r?r.children:null,i,n):i4(t,e,A,i,n),s&&r&&r.outlet&&r.outlet.isActivated&&n.canDeactivateChecks.push(new VB(r.outlet.component,a))}else a&&o4(e,r,n),n.canActivateChecks.push(new J6(i)),o.component?i4(t,null,r?r.children:null,i,n):i4(t,null,A,i,n);return n}function _IA(t,e,A){if(typeof A=="function")return or(e._environmentInjector,()=>A(t,e));switch(A){case"pathParamsChange":return!U1(t.url,e.url);case"pathParamsOrQueryParamsChange":return!U1(t.url,e.url)||!l0(t.queryParams,e.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!NM(t,e)||!l0(t.queryParams,e.queryParams);default:return!NM(t,e)}}function o4(t,e,A){let i=PB(t),n=t.value;Object.entries(i).forEach(([o,a])=>{n.component?e?o4(a,e.children.getContext(o),A):o4(a,null,A):o4(a,e,A)}),n.component?e&&e.outlet&&e.outlet.isActivated?A.canDeactivateChecks.push(new VB(e.outlet.component,n)):A.canDeactivateChecks.push(new VB(null,n)):A.canDeactivateChecks.push(new VB(null,n))}function I4(t){return typeof t=="function"}function LIA(t){return typeof t=="boolean"}function GIA(t){return t&&I4(t.canLoad)}function KIA(t){return t&&I4(t.canActivate)}function UIA(t){return t&&I4(t.canActivateChild)}function JIA(t){return t&&I4(t.canDeactivate)}function YIA(t){return t&&I4(t.canMatch)}function mH(t){return t instanceof rU||t?.name==="EmptyError"}var u6=Symbol("INITIAL_VALUE");function iE(){return Si(t=>Ir(t.map(e=>e.pipe(oo(1),cn(u6)))).pipe(fe(e=>{for(let A of e)if(A!==!0){if(A===u6)return u6;if(A===!1||TIA(A))return A}return!0}),Ze(e=>e!==u6),oo(1)))}function TIA(t){return WB(t)||t instanceof tE}function pH(t){return t.aborted?se(void 0).pipe(oo(1)):new $i(e=>{let A=()=>{e.next(),e.complete()};return t.addEventListener("abort",A),()=>t.removeEventListener("abort",A)})}function wH(t){return Bt(pH(t))}function HIA(t){return t0(e=>{let{targetSnapshot:A,currentSnapshot:i,guards:{canActivateChecks:n,canDeactivateChecks:o}}=e;return o.length===0&&n.length===0?se(Ge(cA({},e),{guardsResult:!0})):zIA(o,A,i).pipe(t0(a=>a&&LIA(a)?OIA(A,n,t):se(a)),fe(a=>Ge(cA({},e),{guardsResult:a})))})}function zIA(t,e,A){return Ms(t).pipe(t0(i=>WIA(i.component,i.route,A,e)),zo(i=>i!==!0,!0))}function OIA(t,e,A){return Ms(e).pipe(lu(i=>Xm(jIA(i.route.parent,A),PIA(i.route,A),VIA(t,i.path),qIA(t,i.route))),zo(i=>i!==!0,!0))}function PIA(t,e){return t!==null&&e&&e(new F6(t)),se(!0)}function jIA(t,e){return t!==null&&e&&e(new R6(t)),se(!0)}function qIA(t,e){let A=e.routeConfig?e.routeConfig.canActivate:null;if(!A||A.length===0)return se(!0);let i=A.map(n=>i0(()=>{let o=e._environmentInjector,a=nE(n,o),r=KIA(a)?a.canActivate(e,t):or(o,()=>a(e,t));return H1(r).pipe(zo())}));return se(i).pipe(iE())}function VIA(t,e){let A=e[e.length-1],n=e.slice(0,e.length-1).reverse().map(o=>NIA(o)).filter(o=>o!==null).map(o=>i0(()=>{let a=o.guards.map(r=>{let s=o.node._environmentInjector,g=nE(r,s),l=UIA(g)?g.canActivateChild(A,t):or(s,()=>g(A,t));return H1(l).pipe(zo())});return se(a).pipe(iE())}));return se(n).pipe(iE())}function WIA(t,e,A,i){let n=e&&e.routeConfig?e.routeConfig.canDeactivate:null;if(!n||n.length===0)return se(!0);let o=n.map(a=>{let r=e._environmentInjector,s=nE(a,r),g=JIA(s)?s.canDeactivate(t,e,A,i):or(r,()=>s(t,e,A,i));return H1(g).pipe(zo())});return se(o).pipe(iE())}function ZIA(t,e,A,i,n){let o=e.canLoad;if(o===void 0||o.length===0)return se(!0);let a=o.map(r=>{let s=nE(r,t),g=GIA(s)?s.canLoad(e,A):or(t,()=>s(e,A)),l=H1(g);return n?l.pipe(wH(n)):l});return se(a).pipe(iE(),DH(i))}function DH(t){return nU(oi(e=>{if(typeof e!="boolean")throw U6(t,e)}),fe(e=>e===!0))}function XIA(t,e,A,i,n){let o=e.canMatch;if(!o||o.length===0)return se(!0);let a=o.map(r=>{let s=nE(r,t),g=YIA(s)?s.canMatch(e,A):or(t,()=>s(e,A));return H1(g).pipe(wH(n))});return se(a).pipe(iE(),DH(i))}var IC=class t extends Error{segmentGroup;constructor(e){super(),this.segmentGroup=e||null,Object.setPrototypeOf(this,t.prototype)}},l4=class t extends Error{urlTree;constructor(e){super(),this.urlTree=e,Object.setPrototypeOf(this,t.prototype)}};function $IA(t){throw new kt(4e3,!1)}function A1A(t){throw uH(!1,cs.GuardRejected)}var LM=class{urlSerializer;urlTree;constructor(e,A){this.urlSerializer=e,this.urlTree=A}lineralizeSegments(e,A){return nt(this,null,function*(){let i=[],n=A.root;for(;;){if(i=i.concat(n.segments),n.numberOfChildren===0)return i;if(n.numberOfChildren>1||!n.children[yi])throw $IA(`${e.redirectTo}`);n=n.children[yi]}})}applyRedirectCommands(e,A,i,n,o){return nt(this,null,function*(){let a=yield e1A(A,n,o);if(a instanceof oc)throw new l4(a);let r=this.applyRedirectCreateUrlTree(a,this.urlSerializer.parse(a),e,i);if(a[0]==="/")throw new l4(r);return r})}applyRedirectCreateUrlTree(e,A,i,n){let o=this.createSegmentGroup(e,A.root,i,n);return new oc(o,this.createQueryParams(A.queryParams,this.urlTree.queryParams),A.fragment)}createQueryParams(e,A){let i={};return Object.entries(e).forEach(([n,o])=>{if(typeof o=="string"&&o[0]===":"){let r=o.substring(1);i[n]=A[r]}else i[n]=o}),i}createSegmentGroup(e,A,i,n){let o=this.createSegments(e,A.segments,i,n),a={};return Object.entries(A.children).forEach(([r,s])=>{a[r]=this.createSegmentGroup(e,s,i,n)}),new ro(o,a)}createSegments(e,A,i,n){return A.map(o=>o.path[0]===":"?this.findPosParam(e,o,n):this.findOrReturn(o,i))}findPosParam(e,A,i){let n=i[A.path.substring(1)];if(!n)throw new kt(4001,!1);return n}findOrReturn(e,A){let i=0;for(let n of A){if(n.path===e.path)return A.splice(i),n;i++}return e}};function e1A(t,e,A){if(typeof t=="string")return Promise.resolve(t);let i=t,{queryParams:n,fragment:o,routeConfig:a,url:r,outlet:s,params:g,data:l,title:C,paramMap:I,queryParamMap:d}=e;return w6(H1(or(A,()=>i({params:g,data:l,queryParams:n,fragment:o,routeConfig:a,url:r,outlet:s,title:C,paramMap:I,queryParamMap:d}))))}function t1A(t,e){return t.providers&&!t._injector&&(t._injector=rp(t.providers,e,`Route: ${t.path}`)),t._injector??e}function nc(t){return t.outlet||yi}function i1A(t,e){let A=t.filter(i=>nc(i)===e);return A.push(...t.filter(i=>nc(i)!==e)),A}var GM={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function n1A(t,e,A,i,n,o){let a=yH(t,e,A);return a.matched?(i=t1A(e,i),XIA(i,e,A,n,o).pipe(fe(r=>r===!0?a:cA({},GM)))):se(a)}function yH(t,e,A){if(e.path==="")return e.pathMatch==="full"&&(t.hasChildren()||A.length>0)?cA({},GM):{matched:!0,consumedSegments:[],remainingSegments:A,parameters:{},positionalParamSegments:{}};let n=(e.matcher||ZT)(A,t,e);if(!n)return cA({},GM);let o={};Object.entries(n.posParams??{}).forEach(([r,s])=>{o[r]=s.path});let a=n.consumed.length>0?cA(cA({},o),n.consumed[n.consumed.length-1].parameters):o;return{matched:!0,consumedSegments:n.consumed,remainingSegments:A.slice(n.consumed.length),parameters:a,positionalParamSegments:n.posParams??{}}}function jT(t,e,A,i){return A.length>0&&r1A(t,A,i)?{segmentGroup:new ro(e,a1A(i,new ro(A,t.children))),slicedSegments:[]}:A.length===0&&s1A(t,A,i)?{segmentGroup:new ro(t.segments,o1A(t,A,i,t.children)),slicedSegments:A}:{segmentGroup:new ro(t.segments,t.children),slicedSegments:A}}function o1A(t,e,A,i){let n={};for(let o of A)if(T6(t,e,o)&&!i[nc(o)]){let a=new ro([],{});n[nc(o)]=a}return cA(cA({},i),n)}function a1A(t,e){let A={};A[yi]=e;for(let i of t)if(i.path===""&&nc(i)!==yi){let n=new ro([],{});A[nc(i)]=n}return A}function r1A(t,e,A){return A.some(i=>T6(t,e,i)&&nc(i)!==yi)}function s1A(t,e,A){return A.some(i=>T6(t,e,i))}function T6(t,e,A){return(t.hasChildren()||e.length>0)&&A.pathMatch==="full"?!1:A.path===""}function g1A(t,e,A){return e.length===0&&!t.children[A]}var KM=class{};function l1A(t,e,A,i,n,o,a="emptyOnly",r){return nt(this,null,function*(){return new UM(t,e,A,i,n,a,o,r).recognize()})}var c1A=31,UM=class{injector;configLoader;rootComponentType;config;urlTree;paramsInheritanceStrategy;urlSerializer;abortSignal;applyRedirects;absoluteRedirectCount=0;allowRedirects=!0;constructor(e,A,i,n,o,a,r,s){this.injector=e,this.configLoader=A,this.rootComponentType=i,this.config=n,this.urlTree=o,this.paramsInheritanceStrategy=a,this.urlSerializer=r,this.abortSignal=s,this.applyRedirects=new LM(this.urlSerializer,this.urlTree)}noMatchError(e){return new kt(4002,`'${e.segmentGroup}'`)}recognize(){return nt(this,null,function*(){let e=jT(this.urlTree.root,[],[],this.config).segmentGroup,{children:A,rootSnapshot:i}=yield this.match(e),n=new Kg(i,A),o=new s4("",n),a=sH(i,[],this.urlTree.queryParams,this.urlTree.fragment);return a.queryParams=this.urlTree.queryParams,o.url=this.urlSerializer.serialize(a),{state:o,tree:a}})}match(e){return nt(this,null,function*(){let A=new J1([],Object.freeze({}),Object.freeze(cA({},this.urlTree.queryParams)),this.urlTree.fragment,Object.freeze({}),yi,this.rootComponentType,null,{},this.injector);try{return{children:yield this.processSegmentGroup(this.injector,this.config,e,yi,A),rootSnapshot:A}}catch(i){if(i instanceof l4)return this.urlTree=i.urlTree,this.match(i.urlTree.root);throw i instanceof IC?this.noMatchError(i):i}})}processSegmentGroup(e,A,i,n,o){return nt(this,null,function*(){if(i.segments.length===0&&i.hasChildren())return this.processChildren(e,A,i,o);let a=yield this.processSegment(e,A,i,i.segments,n,!0,o);return a instanceof Kg?[a]:[]})}processChildren(e,A,i,n){return nt(this,null,function*(){let o=[];for(let s of Object.keys(i.children))s==="primary"?o.unshift(s):o.push(s);let a=[];for(let s of o){let g=i.children[s],l=i1A(A,s),C=yield this.processSegmentGroup(e,l,g,s,n);a.push(...C)}let r=vH(a);return C1A(r),r})}processSegment(e,A,i,n,o,a,r){return nt(this,null,function*(){for(let s of A)try{return yield this.processSegmentAgainstRoute(s._injector??e,A,s,i,n,o,a,r)}catch(g){if(g instanceof IC||mH(g))continue;throw g}if(g1A(i,n,o))return new KM;throw new IC(i)})}processSegmentAgainstRoute(e,A,i,n,o,a,r,s){return nt(this,null,function*(){if(nc(i)!==a&&(a===yi||!T6(n,o,i)))throw new IC(n);if(i.redirectTo===void 0)return this.matchSegmentAgainstRoute(e,n,i,o,a,s);if(this.allowRedirects&&r)return this.expandSegmentAgainstRouteUsingRedirect(e,n,A,i,o,a,s);throw new IC(n)})}expandSegmentAgainstRouteUsingRedirect(e,A,i,n,o,a,r){return nt(this,null,function*(){let{matched:s,parameters:g,consumedSegments:l,positionalParamSegments:C,remainingSegments:I}=yH(A,n,o);if(!s)throw new IC(A);typeof n.redirectTo=="string"&&n.redirectTo[0]==="/"&&(this.absoluteRedirectCount++,this.absoluteRedirectCount>c1A&&(this.allowRedirects=!1));let d=new J1(o,g,Object.freeze(cA({},this.urlTree.queryParams)),this.urlTree.fragment,qT(n),nc(n),n.component??n._loadedComponent??null,n,VT(n),e),B=K6(d,r,this.paramsInheritanceStrategy);if(d.params=Object.freeze(B.params),d.data=Object.freeze(B.data),this.abortSignal.aborted)throw new Error(this.abortSignal.reason);let E=yield this.applyRedirects.applyRedirectCommands(l,n.redirectTo,C,d,e),Q=yield this.applyRedirects.lineralizeSegments(n,E);return this.processSegment(e,i,A,Q.concat(I),a,!1,r)})}matchSegmentAgainstRoute(e,A,i,n,o,a){return nt(this,null,function*(){if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);let r=yield w6(n1A(A,i,n,e,this.urlSerializer,this.abortSignal));if(i.path==="**"&&(A.children={}),!r?.matched)throw new IC(A);e=i._injector??e;let{routes:s}=yield this.getChildConfig(e,i,n),g=i._loadedInjector??e,{parameters:l,consumedSegments:C,remainingSegments:I}=r,d=new J1(C,l,Object.freeze(cA({},this.urlTree.queryParams)),this.urlTree.fragment,qT(i),nc(i),i.component??i._loadedComponent??null,i,VT(i),e),B=K6(d,a,this.paramsInheritanceStrategy);d.params=Object.freeze(B.params),d.data=Object.freeze(B.data);let{segmentGroup:E,slicedSegments:Q}=jT(A,C,I,s);if(Q.length===0&&E.hasChildren()){let S=yield this.processChildren(g,s,E,d);return new Kg(d,S)}if(s.length===0&&Q.length===0)return new Kg(d,[]);let f=nc(i)===o,b=yield this.processSegment(g,s,E,Q,f?yi:o,!0,d);return new Kg(d,b instanceof Kg?[b]:[])})}getChildConfig(e,A,i){return nt(this,null,function*(){if(A.children)return{routes:A.children,injector:e};if(A.loadChildren){if(A._loadedRoutes!==void 0){let o=A._loadedNgModuleFactory;return o&&!A._loadedInjector&&(A._loadedInjector=o.create(e).injector),{routes:A._loadedRoutes,injector:A._loadedInjector}}if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);if(yield w6(ZIA(e,A,i,this.urlSerializer,this.abortSignal))){let o=yield this.configLoader.loadChildren(e,A);return A._loadedRoutes=o.routes,A._loadedInjector=o.injector,A._loadedNgModuleFactory=o.factory,o}throw A1A(A)}return{routes:[],injector:e}})}};function C1A(t){t.sort((e,A)=>e.value.outlet===yi?-1:A.value.outlet===yi?1:e.value.outlet.localeCompare(A.value.outlet))}function I1A(t){let e=t.value.routeConfig;return e&&e.path===""}function vH(t){let e=[],A=new Set;for(let i of t){if(!I1A(i)){e.push(i);continue}let n=e.find(o=>i.value.routeConfig===o.value.routeConfig);n!==void 0?(n.children.push(...i.children),A.add(n)):e.push(i)}for(let i of A){let n=vH(i.children);e.push(new Kg(i.value,n))}return e.filter(i=>!A.has(i))}function qT(t){return t.data||{}}function VT(t){return t.resolve||{}}function d1A(t,e,A,i,n,o,a){return t0(r=>nt(null,null,function*(){let{state:s,tree:g}=yield l1A(t,e,A,i,r.extractedUrl,n,o,a);return Ge(cA({},r),{targetSnapshot:s,urlAfterRedirects:g})}))}function B1A(t){return t0(e=>{let{targetSnapshot:A,guards:{canActivateChecks:i}}=e;if(!i.length)return se(e);let n=new Set(i.map(r=>r.route)),o=new Set;for(let r of n)if(!o.has(r))for(let s of bH(r))o.add(s);let a=0;return Ms(o).pipe(lu(r=>n.has(r)?E1A(r,A,t):(r.data=K6(r,r.parent,t).resolve,se(void 0))),oi(()=>a++),Yb(1),t0(r=>a===o.size?se(e):ja))})}function bH(t){let e=t.children.map(A=>bH(A)).flat();return[t,...e]}function E1A(t,e,A){let i=t.routeConfig,n=t._resolve;return i?.title!==void 0&&!EH(i)&&(n[c4]=i.title),i0(()=>(t.data=K6(t,t.parent,A).resolve,Q1A(n,t,e).pipe(fe(o=>(t._resolvedData=o,t.data=cA(cA({},t.data),o),null)))))}function Q1A(t,e,A){let i=bM(t);if(i.length===0)return se({});let n={};return Ms(i).pipe(t0(o=>h1A(t[o],e,A).pipe(zo(),oi(a=>{if(a instanceof tE)throw U6(new dC,a);n[o]=a}))),Yb(1),fe(()=>n),ta(o=>mH(o)?ja:Zm(o)))}function h1A(t,e,A){let i=e._environmentInjector,n=nE(t,i),o=n.resolve?n.resolve(e,A):or(i,()=>n(e,A));return H1(o)}function WT(t){return Si(e=>{let A=t(e);return A?Ms(A).pipe(fe(()=>e)):se(e)})}var PM=(()=>{class t{buildTitle(A){let i,n=A.root;for(;n!==void 0;)i=this.getResolvedTitleForRoute(n)??i,n=n.children.find(o=>o.outlet===yi);return i}getResolvedTitleForRoute(A){return A.data[c4]}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(MH),providedIn:"root"})}return t})(),MH=(()=>{class t extends PM{title;constructor(A){super(),this.title=A}updateTitle(A){let i=this.buildTitle(A);i!==void 0&&this.title.setTitle(i)}static \u0275fac=function(i){return new(i||t)(xo(YU))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),P1=new yA("",{factory:()=>({})}),oE=new yA(""),H6=(()=>{class t{componentLoaders=new WeakMap;childrenLoaders=new WeakMap;onLoadStartListener;onLoadEndListener;compiler=h(vU);loadComponent(A,i){return nt(this,null,function*(){if(this.componentLoaders.get(i))return this.componentLoaders.get(i);if(i._loadedComponent)return Promise.resolve(i._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(i);let n=nt(this,null,function*(){try{let o=yield $T(or(A,()=>i.loadComponent())),a=yield xH(SH(o));return this.onLoadEndListener&&this.onLoadEndListener(i),i._loadedComponent=a,a}finally{this.componentLoaders.delete(i)}});return this.componentLoaders.set(i,n),n})}loadChildren(A,i){if(this.childrenLoaders.get(i))return this.childrenLoaders.get(i);if(i._loadedRoutes)return Promise.resolve({routes:i._loadedRoutes,injector:i._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(i);let n=nt(this,null,function*(){try{let o=yield kH(i,this.compiler,A,this.onLoadEndListener);return i._loadedRoutes=o.routes,i._loadedInjector=o.injector,i._loadedNgModuleFactory=o.factory,o}finally{this.childrenLoaders.delete(i)}});return this.childrenLoaders.set(i,n),n}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function kH(t,e,A,i){return nt(this,null,function*(){let n=yield $T(or(A,()=>t.loadChildren())),o=yield xH(SH(n)),a;o instanceof uU||Array.isArray(o)?a=o:a=yield e.compileModuleAsync(o),i&&i(t);let r,s,g=!1,l;return Array.isArray(a)?(s=a,g=!0):(r=a.create(A).injector,l=a,s=r.get(oE,[],{optional:!0,self:!0}).flat()),{routes:s.map(OM),injector:r,factory:l}})}function u1A(t){return t&&typeof t=="object"&&"default"in t}function SH(t){return u1A(t)?t.default:t}function xH(t){return nt(this,null,function*(){return t})}var z6=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(f1A),providedIn:"root"})}return t})(),f1A=(()=>{class t{shouldProcessUrl(A){return!0}extract(A){return A}merge(A,i){return A}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),jM=new yA(""),qM=new yA("");function RH(t,e,A){let i=t.get(qM),n=t.get(Xt);if(!n.startViewTransition||i.skipNextTransition)return i.skipNextTransition=!1,new Promise(g=>setTimeout(g));let o,a=new Promise(g=>{o=g}),r=n.startViewTransition(()=>(o(),m1A(t)));r.updateCallbackDone.catch(g=>{}),r.ready.catch(g=>{}),r.finished.catch(g=>{});let{onViewTransitionCreated:s}=i;return s&&or(t,()=>s({transition:r,from:e,to:A})),a}function m1A(t){return new Promise(e=>{Yn({read:()=>setTimeout(e)},{injector:t})})}var p1A=()=>{},VM=new yA(""),O6=(()=>{class t{currentNavigation=jA(null,{equal:()=>!1});currentTransition=null;lastSuccessfulNavigation=jA(null);events=new XA;transitionAbortWithErrorSubject=new XA;configLoader=h(H6);environmentInjector=h(Gr);destroyRef=h(qa);urlSerializer=h(z1);rootContexts=h(O1);location=h(o0);inputBindingEnabled=h(C4,{optional:!0})!==null;titleStrategy=h(PM);options=h(P1,{optional:!0})||{};paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly";urlHandlingStrategy=h(z6);createViewTransition=h(jM,{optional:!0});navigationErrorHandler=h(VM,{optional:!0});navigationId=0;get hasRequestedNavigation(){return this.navigationId!==0}transitions;afterPreactivation=()=>se(void 0);rootComponentType=null;destroyed=!1;constructor(){let A=n=>this.events.next(new S6(n)),i=n=>this.events.next(new x6(n));this.configLoader.onLoadEndListener=i,this.configLoader.onLoadStartListener=A,this.destroyRef.onDestroy(()=>{this.destroyed=!0})}complete(){this.transitions?.complete()}handleNavigationRequest(A){let i=++this.navigationId;la(()=>{this.transitions?.next(Ge(cA({},A),{extractedUrl:this.urlHandlingStrategy.extract(A.rawUrl),targetSnapshot:null,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null,id:i}))})}setupNavigations(A){return this.transitions=new Ht(null),this.transitions.pipe(Ze(i=>i!==null),Si(i=>{let n=!1,o=new AbortController,a=()=>!n&&this.currentTransition?.id===i.id;return se(i).pipe(Si(r=>{if(this.navigationId>i.id)return this.cancelNavigationTransition(i,"",cs.SupersededByNewNavigation),ja;this.currentTransition=i;let s=this.lastSuccessfulNavigation();this.currentNavigation.set({id:r.id,initialUrl:r.rawUrl,extractedUrl:r.extractedUrl,targetBrowserUrl:typeof r.extras.browserUrl=="string"?this.urlSerializer.parse(r.extras.browserUrl):r.extras.browserUrl,trigger:r.source,extras:r.extras,previousNavigation:s?Ge(cA({},s),{previousNavigation:null}):null,abort:()=>o.abort()});let g=!A.navigated||this.isUpdatingInternalState()||this.isUpdatedBrowserUrl(),l=r.extras.onSameUrlNavigation??A.onSameUrlNavigation;if(!g&&l!=="reload")return this.events.next(new c0(r.id,this.urlSerializer.serialize(r.rawUrl),"",ZB.IgnoredSameUrlNavigation)),r.resolve(!1),ja;if(this.urlHandlingStrategy.shouldProcessUrl(r.rawUrl))return se(r).pipe(Si(C=>(this.events.next(new _2(C.id,this.urlSerializer.serialize(C.extractedUrl),C.source,C.restoredState)),C.id!==this.navigationId?ja:Promise.resolve(C))),d1A(this.environmentInjector,this.configLoader,this.rootComponentType,A.config,this.urlSerializer,this.paramsInheritanceStrategy,o.signal),oi(C=>{i.targetSnapshot=C.targetSnapshot,i.urlAfterRedirects=C.urlAfterRedirects,this.currentNavigation.update(d=>(d.finalUrl=C.urlAfterRedirects,d));let I=new XB(C.id,this.urlSerializer.serialize(C.extractedUrl),this.urlSerializer.serialize(C.urlAfterRedirects),C.targetSnapshot);this.events.next(I)}));if(g&&this.urlHandlingStrategy.shouldProcessUrl(r.currentRawUrl)){let{id:C,extractedUrl:I,source:d,restoredState:B,extras:E}=r,Q=new _2(C,this.urlSerializer.serialize(I),d,B);this.events.next(Q);let f=dH(this.rootComponentType,this.environmentInjector).snapshot;return this.currentTransition=i=Ge(cA({},r),{targetSnapshot:f,urlAfterRedirects:I,extras:Ge(cA({},E),{skipLocationChange:!1,replaceUrl:!1})}),this.currentNavigation.update(b=>(b.finalUrl=I,b)),se(i)}else return this.events.next(new c0(r.id,this.urlSerializer.serialize(r.extractedUrl),"",ZB.IgnoredByUrlHandlingStrategy)),r.resolve(!1),ja}),fe(r=>{let s=new v6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);return this.events.next(s),this.currentTransition=i=Ge(cA({},r),{guards:RIA(r.targetSnapshot,r.currentSnapshot,this.rootContexts)}),i}),HIA(r=>this.events.next(r)),Si(r=>{if(i.guardsResult=r.guardsResult,r.guardsResult&&typeof r.guardsResult!="boolean")throw U6(this.urlSerializer,r.guardsResult);let s=new b6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot,!!r.guardsResult);if(this.events.next(s),!a())return ja;if(!r.guardsResult)return this.cancelNavigationTransition(r,"",cs.GuardRejected),ja;if(r.guards.canActivateChecks.length===0)return se(r);let g=new M6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);if(this.events.next(g),!a())return ja;let l=!1;return se(r).pipe(B1A(this.paramsInheritanceStrategy),oi({next:()=>{l=!0;let C=new k6(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects),r.targetSnapshot);this.events.next(C)},complete:()=>{l||this.cancelNavigationTransition(r,"",cs.NoDataFromResolver)}}))}),WT(r=>{let s=l=>{let C=[];if(l.routeConfig?._loadedComponent)l.component=l.routeConfig?._loadedComponent;else if(l.routeConfig?.loadComponent){let I=l._environmentInjector;C.push(this.configLoader.loadComponent(I,l.routeConfig).then(d=>{l.component=d}))}for(let I of l.children)C.push(...s(I));return C},g=s(r.targetSnapshot.root);return g.length===0?se(r):Ms(Promise.all(g).then(()=>r))}),WT(()=>this.afterPreactivation()),Si(()=>{let{currentSnapshot:r,targetSnapshot:s}=i,g=this.createViewTransition?.(this.environmentInjector,r.root,s.root);return g?Ms(g).pipe(fe(()=>i)):se(i)}),oo(1),fe(r=>{let s=MIA(A.routeReuseStrategy,r.targetSnapshot,r.currentRouterState);this.currentTransition=i=r=Ge(cA({},r),{targetRouterState:s}),this.currentNavigation.update(g=>(g.targetRouterState=s,g)),this.events.next(new AE),a()&&(new _M(A.routeReuseStrategy,i.targetRouterState,i.currentRouterState,g=>this.events.next(g),this.inputBindingEnabled).activate(this.rootContexts),a()&&(n=!0,this.currentNavigation.update(g=>(g.abort=p1A,g)),this.lastSuccessfulNavigation.set(la(this.currentNavigation)),this.events.next(new ac(r.id,this.urlSerializer.serialize(r.extractedUrl),this.urlSerializer.serialize(r.urlAfterRedirects))),this.titleStrategy?.updateTitle(r.targetRouterState.snapshot),r.resolve(!0)))}),Bt(pH(o.signal).pipe(Ze(()=>!n&&!i.targetRouterState),oi(()=>{this.cancelNavigationTransition(i,o.signal.reason+"",cs.Aborted)}))),oi({complete:()=>{n=!0}}),Bt(this.transitionAbortWithErrorSubject.pipe(oi(r=>{throw r}))),ep(()=>{o.abort(),n||this.cancelNavigationTransition(i,"",cs.SupersededByNewNavigation),this.currentTransition?.id===i.id&&(this.currentNavigation.set(null),this.currentTransition=null)}),ta(r=>{if(n=!0,this.destroyed)return i.resolve(!1),ja;if(fH(r))this.events.next(new cl(i.id,this.urlSerializer.serialize(i.extractedUrl),r.message,r.cancellationCode)),xIA(r)?this.events.next(new eE(r.url,r.navigationBehaviorOptions)):i.resolve(!1);else{let s=new T1(i.id,this.urlSerializer.serialize(i.extractedUrl),r,i.targetSnapshot??void 0);try{let g=or(this.environmentInjector,()=>this.navigationErrorHandler?.(s));if(g instanceof tE){let{message:l,cancellationCode:C}=U6(this.urlSerializer,g);this.events.next(new cl(i.id,this.urlSerializer.serialize(i.extractedUrl),l,C)),this.events.next(new eE(g.redirectTo,g.navigationBehaviorOptions))}else throw this.events.next(s),r}catch(g){this.options.resolveNavigationPromiseOnError?i.resolve(!1):i.reject(g)}}return ja}))}))}cancelNavigationTransition(A,i,n){let o=new cl(A.id,this.urlSerializer.serialize(A.extractedUrl),i,n);this.events.next(o),A.resolve(!1)}isUpdatingInternalState(){return this.currentTransition?.extractedUrl.toString()!==this.currentTransition?.currentUrlTree.toString()}isUpdatedBrowserUrl(){let A=this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(!0))),i=la(this.currentNavigation),n=i?.targetBrowserUrl??i?.extractedUrl;return A.toString()!==n?.toString()&&!i?.extras.skipLocationChange}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function w1A(t){return t!==qB}var NH=new yA("");var FH=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(D1A),providedIn:"root"})}return t})(),Y6=class{shouldDetach(e){return!1}store(e,A){}shouldAttach(e){return!1}retrieve(e){return null}shouldReuseRoute(e,A){return e.routeConfig===A.routeConfig}shouldDestroyInjector(e){return!0}},D1A=(()=>{class t extends Y6{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),WM=(()=>{class t{urlSerializer=h(z1);options=h(P1,{optional:!0})||{};canceledNavigationResolution=this.options.canceledNavigationResolution||"replace";location=h(o0);urlHandlingStrategy=h(z6);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";currentUrlTree=new oc;getCurrentUrlTree(){return this.currentUrlTree}rawUrlTree=this.currentUrlTree;getRawUrlTree(){return this.rawUrlTree}createBrowserPath({finalUrl:A,initialUrl:i,targetBrowserUrl:n}){let o=A!==void 0?this.urlHandlingStrategy.merge(A,i):i,a=n??o;return a instanceof oc?this.urlSerializer.serialize(a):a}commitTransition({targetRouterState:A,finalUrl:i,initialUrl:n}){i&&A?(this.currentUrlTree=i,this.rawUrlTree=this.urlHandlingStrategy.merge(i,n),this.routerState=A):this.rawUrlTree=n}routerState=dH(null,h(Gr));getRouterState(){return this.routerState}_stateMemento=this.createStateMemento();get stateMemento(){return this._stateMemento}updateStateMemento(){this._stateMemento=this.createStateMemento()}createStateMemento(){return{rawUrlTree:this.rawUrlTree,currentUrlTree:this.currentUrlTree,routerState:this.routerState}}restoredState(){return this.location.getState()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:()=>h(y1A),providedIn:"root"})}return t})(),y1A=(()=>{class t extends WM{currentPageId=0;lastSuccessfulId=-1;get browserPageId(){return this.canceledNavigationResolution!=="computed"?this.currentPageId:this.restoredState()?.\u0275routerPageId??this.currentPageId}registerNonRouterCurrentEntryChangeListener(A){return this.location.subscribe(i=>{i.type==="popstate"&&setTimeout(()=>{A(i.url,i.state,"popstate")})})}handleRouterEvent(A,i){A instanceof _2?this.updateStateMemento():A instanceof c0?this.commitTransition(i):A instanceof XB?this.urlUpdateStrategy==="eager"&&(i.extras.skipLocationChange||this.setBrowserUrl(this.createBrowserPath(i),i)):A instanceof AE?(this.commitTransition(i),this.urlUpdateStrategy==="deferred"&&!i.extras.skipLocationChange&&this.setBrowserUrl(this.createBrowserPath(i),i)):A instanceof cl&&!IH(A)?this.restoreHistory(i):A instanceof T1?this.restoreHistory(i,!0):A instanceof ac&&(this.lastSuccessfulId=A.id,this.currentPageId=this.browserPageId)}setBrowserUrl(A,{extras:i,id:n}){let{replaceUrl:o,state:a}=i;if(this.location.isCurrentPathEqualTo(A)||o){let r=this.browserPageId,s=cA(cA({},a),this.generateNgRouterState(n,r));this.location.replaceState(A,"",s)}else{let r=cA(cA({},a),this.generateNgRouterState(n,this.browserPageId+1));this.location.go(A,"",r)}}restoreHistory(A,i=!1){if(this.canceledNavigationResolution==="computed"){let n=this.browserPageId,o=this.currentPageId-n;o!==0?this.location.historyGo(o):this.getCurrentUrlTree()===A.finalUrl&&o===0&&(this.resetInternalState(A),this.resetUrlToCurrentUrlTree())}else this.canceledNavigationResolution==="replace"&&(i&&this.resetInternalState(A),this.resetUrlToCurrentUrlTree())}resetInternalState({finalUrl:A}){this.routerState=this.stateMemento.routerState,this.currentUrlTree=this.stateMemento.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,A??this.rawUrlTree)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.getRawUrlTree()),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(A,i){return this.canceledNavigationResolution==="computed"?{navigationId:A,\u0275routerPageId:i}:{navigationId:A}}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function P6(t,e){t.events.pipe(Ze(A=>A instanceof ac||A instanceof cl||A instanceof T1||A instanceof c0),fe(A=>A instanceof ac||A instanceof c0?0:(A instanceof cl?A.code===cs.Redirect||A.code===cs.SupersededByNewNavigation:!1)?2:1),Ze(A=>A!==2),oo(1)).subscribe(()=>{e()})}var _H={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},LH={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"},Cs=(()=>{class t{get currentUrlTree(){return this.stateManager.getCurrentUrlTree()}get rawUrlTree(){return this.stateManager.getRawUrlTree()}disposed=!1;nonRouterCurrentEntryChangeSubscription;console=h(fU);stateManager=h(WM);options=h(P1,{optional:!0})||{};pendingTasks=h(EU);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";navigationTransitions=h(O6);urlSerializer=h(z1);location=h(o0);urlHandlingStrategy=h(z6);injector=h(Gr);_events=new XA;get events(){return this._events}get routerState(){return this.stateManager.getRouterState()}navigated=!1;routeReuseStrategy=h(FH);injectorCleanup=h(NH,{optional:!0});onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore";config=h(oE,{optional:!0})?.flat()??[];componentInputBindingEnabled=!!h(C4,{optional:!0});currentNavigation=this.navigationTransitions.currentNavigation.asReadonly();constructor(){this.resetConfig(this.config),this.navigationTransitions.setupNavigations(this).subscribe({error:A=>{}}),this.subscribeToNavigationEvents()}eventsSubscription=new Jn;subscribeToNavigationEvents(){let A=this.navigationTransitions.events.subscribe(i=>{try{let n=this.navigationTransitions.currentTransition,o=la(this.navigationTransitions.currentNavigation);if(n!==null&&o!==null){if(this.stateManager.handleRouterEvent(i,o),i instanceof cl&&i.code!==cs.Redirect&&i.code!==cs.SupersededByNewNavigation)this.navigated=!0;else if(i instanceof ac)this.navigated=!0,this.injectorCleanup?.(this.routeReuseStrategy,this.routerState,this.config);else if(i instanceof eE){let a=i.navigationBehaviorOptions,r=this.urlHandlingStrategy.merge(i.url,n.currentRawUrl),s=cA({scroll:n.extras.scroll,browserUrl:n.extras.browserUrl,info:n.extras.info,skipLocationChange:n.extras.skipLocationChange,replaceUrl:n.extras.replaceUrl||this.urlUpdateStrategy==="eager"||w1A(n.source)},a);this.scheduleNavigation(r,qB,null,s,{resolve:n.resolve,reject:n.reject,promise:n.promise})}}vIA(i)&&this._events.next(i)}catch(n){this.navigationTransitions.transitionAbortWithErrorSubject.next(n)}});this.eventsSubscription.add(A)}resetRootComponentType(A){this.routerState.root.component=A,this.navigationTransitions.rootComponentType=A}initialNavigation(){this.setUpLocationChangeListener(),this.navigationTransitions.hasRequestedNavigation||this.navigateToSyncWithBrowser(this.location.path(!0),qB,this.stateManager.restoredState())}setUpLocationChangeListener(){this.nonRouterCurrentEntryChangeSubscription??=this.stateManager.registerNonRouterCurrentEntryChangeListener((A,i,n)=>{this.navigateToSyncWithBrowser(A,n,i)})}navigateToSyncWithBrowser(A,i,n){let o={replaceUrl:!0},a=n?.navigationId?n:null;if(n){let s=cA({},n);delete s.navigationId,delete s.\u0275routerPageId,Object.keys(s).length!==0&&(o.state=s)}let r=this.parseUrl(A);this.scheduleNavigation(r,i,a,o).catch(s=>{this.disposed||this.injector.get(Tb)(s)})}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return la(this.navigationTransitions.currentNavigation)}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(A){this.config=A.map(OM),this.navigated=!1}ngOnDestroy(){this.dispose()}dispose(){this._events.unsubscribe(),this.navigationTransitions.complete(),this.nonRouterCurrentEntryChangeSubscription?.unsubscribe(),this.nonRouterCurrentEntryChangeSubscription=void 0,this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(A,i={}){let{relativeTo:n,queryParams:o,fragment:a,queryParamsHandling:r,preserveFragment:s}=i,g=s?this.currentUrlTree.fragment:a,l=null;switch(r??this.options.defaultQueryParamsHandling){case"merge":l=cA(cA({},this.currentUrlTree.queryParams),o);break;case"preserve":l=this.currentUrlTree.queryParams;break;default:l=o||null}l!==null&&(l=this.removeEmptyProps(l));let C;try{let I=n?n.snapshot:this.routerState.snapshot.root;C=gH(I)}catch{(typeof A[0]!="string"||A[0][0]!=="/")&&(A=[]),C=this.currentUrlTree.root}return lH(C,A,l,g??null,this.urlSerializer)}navigateByUrl(A,i={skipLocationChange:!1}){let n=WB(A)?A:this.parseUrl(A),o=this.urlHandlingStrategy.merge(n,this.rawUrlTree);return this.scheduleNavigation(o,qB,null,i)}navigate(A,i={skipLocationChange:!1}){return v1A(A),this.navigateByUrl(this.createUrlTree(A,i),i)}serializeUrl(A){return this.urlSerializer.serialize(A)}parseUrl(A){try{return this.urlSerializer.parse(A)}catch{return this.console.warn(CU(4018,!1)),this.urlSerializer.parse("/")}}isActive(A,i){let n;if(i===!0?n=cA({},_H):i===!1?n=cA({},LH):n=i,WB(A))return TT(this.currentUrlTree,A,n);let o=this.parseUrl(A);return TT(this.currentUrlTree,o,n)}removeEmptyProps(A){return Object.entries(A).reduce((i,[n,o])=>(o!=null&&(i[n]=o),i),{})}scheduleNavigation(A,i,n,o,a){if(this.disposed)return Promise.resolve(!1);let r,s,g;a?(r=a.resolve,s=a.reject,g=a.promise):g=new Promise((C,I)=>{r=C,s=I});let l=this.pendingTasks.add();return P6(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(l))}),this.navigationTransitions.handleNavigationRequest({source:i,restoredState:n,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:A,extras:o,resolve:r,reject:s,promise:g,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),g.catch(C=>Promise.reject(C))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function v1A(t){for(let e=0;e{class t{router;injector;preloadingStrategy;loader;subscription;constructor(A,i,n,o){this.router=A,this.injector=i,this.preloadingStrategy=n,this.loader=o}setUpPreloading(){this.subscription=this.router.events.pipe(Ze(A=>A instanceof ac),lu(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription?.unsubscribe()}processRoutes(A,i){let n=[];for(let o of i){o.providers&&!o._injector&&(o._injector=rp(o.providers,A,""));let a=o._injector??A;o._loadedNgModuleFactory&&!o._loadedInjector&&(o._loadedInjector=o._loadedNgModuleFactory.create(a).injector);let r=o._loadedInjector??a;(o.loadChildren&&!o._loadedRoutes&&o.canLoad===void 0||o.loadComponent&&!o._loadedComponent)&&n.push(this.preloadConfig(a,o)),(o.children||o._loadedRoutes)&&n.push(this.processRoutes(r,o.children??o._loadedRoutes))}return Ms(n).pipe(Jb())}preloadConfig(A,i){return this.preloadingStrategy.preload(i,()=>{if(A.destroyed)return se(null);let n;i.loadChildren&&i.canLoad===void 0?n=Ms(this.loader.loadChildren(A,i)):n=se(null);let o=n.pipe(t0(a=>a===null?se(void 0):(i._loadedRoutes=a.routes,i._loadedInjector=a.injector,i._loadedNgModuleFactory=a.factory,this.processRoutes(a.injector??A,a.routes))));if(i.loadComponent&&!i._loadedComponent){let a=this.loader.loadComponent(A,i);return Ms([o,a]).pipe(Jb())}else return o})}static \u0275fac=function(i){return new(i||t)(xo(Cs),xo(Gr),xo(d4),xo(H6))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),KH=new yA(""),M1A=(()=>{class t{options;routerEventsSubscription;scrollEventsSubscription;lastId=0;lastSource=qB;restoredId=0;store={};urlSerializer=h(z1);zone=h(Oe);viewportScroller=h(jb);transitions=h(O6);constructor(A){this.options=A,this.options.scrollPositionRestoration||="disabled",this.options.anchorScrolling||="disabled"}init(){this.options.scrollPositionRestoration!=="disabled"&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(A=>{A instanceof _2?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=A.navigationTrigger,this.restoredId=A.restoredState?A.restoredState.navigationId:0):A instanceof ac?(this.lastId=A.id,this.scheduleScrollEvent(A,this.urlSerializer.parse(A.urlAfterRedirects).fragment)):A instanceof c0&&A.code===ZB.IgnoredSameUrlNavigation&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(A,this.urlSerializer.parse(A.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(A=>{if(!(A instanceof $B)||A.scrollBehavior==="manual")return;let i={behavior:"instant"};A.position?this.options.scrollPositionRestoration==="top"?this.viewportScroller.scrollToPosition([0,0],i):this.options.scrollPositionRestoration==="enabled"&&this.viewportScroller.scrollToPosition(A.position,i):A.anchor&&this.options.anchorScrolling==="enabled"?this.viewportScroller.scrollToAnchor(A.anchor):this.options.scrollPositionRestoration!=="disabled"&&this.viewportScroller.scrollToPosition([0,0])})}scheduleScrollEvent(A,i){let n=la(this.transitions.currentNavigation)?.extras.scroll;this.zone.runOutsideAngular(()=>nt(this,null,function*(){yield new Promise(o=>{setTimeout(o),typeof requestAnimationFrame<"u"&&requestAnimationFrame(o)}),this.zone.run(()=>{this.transitions.events.next(new $B(A,this.lastSource==="popstate"?this.store[this.restoredId]:null,i,n))})}))}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}static \u0275fac=function(i){ap()};static \u0275prov=zA({token:t,factory:t.\u0275fac})}return t})();function k1A(){return h(Cs).routerState.root}function B4(t,e){return{\u0275kind:t,\u0275providers:e}}function S1A(){let t=h(ft);return e=>{let A=t.get(oC);if(e!==A.components[0])return;let i=t.get(Cs),n=t.get(UH);t.get(XM)===1&&i.initialNavigation(),t.get(TH,null,{optional:!0})?.setUpPreloading(),t.get(KH,null,{optional:!0})?.init(),i.resetRootComponentType(A.componentTypes[0]),n.closed||(n.next(),n.complete(),n.unsubscribe())}}var UH=new yA("",{factory:()=>new XA}),XM=new yA("",{factory:()=>1});function JH(){let t=[{provide:hU,useValue:!0},{provide:XM,useValue:0},zb(()=>{let e=h(ft);return e.get(FU,Promise.resolve()).then(()=>new Promise(i=>{let n=e.get(Cs),o=e.get(UH);P6(n,()=>{i(!0)}),e.get(O6).afterPreactivation=()=>(i(!0),o.closed?se(void 0):o),n.initialNavigation()}))})];return B4(2,t)}function YH(){let t=[zb(()=>{h(Cs).setUpLocationChangeListener()}),{provide:XM,useValue:2}];return B4(3,t)}var TH=new yA("");function HH(t){return B4(0,[{provide:TH,useExisting:GH},{provide:d4,useExisting:t}])}function zH(){return B4(8,[HM,{provide:C4,useExisting:HM}])}function OH(t){op("NgRouterViewTransitions");let e=[{provide:jM,useValue:RH},{provide:qM,useValue:cA({skipNextTransition:!!t?.skipInitialTransition},t)}];return B4(9,e)}var PH=[o0,{provide:z1,useClass:dC},Cs,O1,{provide:ag,useFactory:k1A},H6,[]],j6=(()=>{class t{constructor(){}static forRoot(A,i){return{ngModule:t,providers:[PH,[],{provide:oE,multi:!0,useValue:A},[],i?.errorHandler?{provide:VM,useValue:i.errorHandler}:[],{provide:P1,useValue:i||{}},i?.useHash?R1A():N1A(),x1A(),i?.preloadingStrategy?HH(i.preloadingStrategy).\u0275providers:[],i?.initialNavigation?F1A(i):[],i?.bindToComponentInputs?zH().\u0275providers:[],i?.enableViewTransitions?OH().\u0275providers:[],_1A()]}}static forChild(A){return{ngModule:t,providers:[{provide:oE,multi:!0,useValue:A}]}}static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();function x1A(){return{provide:KH,useFactory:()=>{let t=h(jb),e=h(P1);return e.scrollOffset&&t.setOffset(e.scrollOffset),new M1A(e)}}}function R1A(){return{provide:Pb,useClass:LU}}function N1A(){return{provide:Pb,useClass:_U}}function F1A(t){return[t.initialNavigation==="disabled"?YH().\u0275providers:[],t.initialNavigation==="enabledBlocking"?JH().\u0275providers:[]]}var ZM=new yA("");function _1A(){return[{provide:ZM,useFactory:S1A},{provide:mU,multi:!0,useExisting:ZM}]}var K1A=["*"];var U1A=new yA("MAT_CARD_CONFIG"),aE=(()=>{class t{appearance;constructor(){let A=h(U1A,{optional:!0});this.appearance=A?.appearance||"raised"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-card"]],hostAttrs:[1,"mat-mdc-card","mdc-card"],hostVars:8,hostBindings:function(i,n){i&2&&ne("mat-mdc-card-outlined",n.appearance==="outlined")("mdc-card--outlined",n.appearance==="outlined")("mat-mdc-card-filled",n.appearance==="filled")("mdc-card--filled",n.appearance==="filled")},inputs:{appearance:"appearance"},exportAs:["matCard"],ngContentSelectors:K1A,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),Ke(0))},styles:[`.mat-mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-elevated-container-elevation, var(--mat-sys-level1))}.mat-mdc-card::after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px rgba(0,0,0,0);content:"";display:block;pointer-events:none;box-sizing:border-box;border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium))}.mat-mdc-card-outlined{background-color:var(--mat-card-outlined-container-color, var(--mat-sys-surface));border-radius:var(--mat-card-outlined-container-shape, var(--mat-sys-corner-medium));border-width:var(--mat-card-outlined-outline-width, 1px);border-color:var(--mat-card-outlined-outline-color, var(--mat-sys-outline-variant));box-shadow:var(--mat-card-outlined-container-elevation, var(--mat-sys-level0))}.mat-mdc-card-outlined::after{border:none}.mat-mdc-card-filled{background-color:var(--mat-card-filled-container-color, var(--mat-sys-surface-container-highest));border-radius:var(--mat-card-filled-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-filled-container-elevation, var(--mat-sys-level0))}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:""}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mat-mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mat-mdc-card-title{font-family:var(--mat-card-title-text-font, var(--mat-sys-title-large-font));line-height:var(--mat-card-title-text-line-height, var(--mat-sys-title-large-line-height));font-size:var(--mat-card-title-text-size, var(--mat-sys-title-large-size));letter-spacing:var(--mat-card-title-text-tracking, var(--mat-sys-title-large-tracking));font-weight:var(--mat-card-title-text-weight, var(--mat-sys-title-large-weight))}.mat-mdc-card-subtitle{color:var(--mat-card-subtitle-text-color, var(--mat-sys-on-surface));font-family:var(--mat-card-subtitle-text-font, var(--mat-sys-title-medium-font));line-height:var(--mat-card-subtitle-text-line-height, var(--mat-sys-title-medium-line-height));font-size:var(--mat-card-subtitle-text-size, var(--mat-sys-title-medium-size));letter-spacing:var(--mat-card-subtitle-text-tracking, var(--mat-sys-title-medium-tracking));font-weight:var(--mat-card-subtitle-text-weight, var(--mat-sys-title-medium-weight))}.mat-mdc-card-title,.mat-mdc-card-subtitle{display:block;margin:0}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle{padding:16px 16px 0}.mat-mdc-card-header{display:flex;padding:16px 16px 0}.mat-mdc-card-content{display:block;padding:0 16px}.mat-mdc-card-content:first-child{padding-top:16px}.mat-mdc-card-content:last-child{padding-bottom:16px}.mat-mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mat-mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title{line-height:normal}.mat-mdc-card-sm-image{width:80px;height:80px}.mat-mdc-card-md-image{width:112px;height:112px}.mat-mdc-card-lg-image{width:152px;height:152px}.mat-mdc-card-xl-image{width:240px;height:240px}.mat-mdc-card-subtitle~.mat-mdc-card-title,.mat-mdc-card-title~.mat-mdc-card-subtitle,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-title-group .mat-mdc-card-title,.mat-mdc-card-title-group .mat-mdc-card-subtitle{padding-top:0}.mat-mdc-card-content>:last-child:not(.mat-mdc-card-footer){margin-bottom:0}.mat-mdc-card-actions-align-end{justify-content:flex-end} -`],encapsulation:2,changeDetection:0})}return t})();var jH=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var E4=class{};function Q4(t){return t&&typeof t.connect=="function"&&!(t instanceof oU)}var rc=(function(t){return t[t.REPLACED=0]="REPLACED",t[t.INSERTED=1]="INSERTED",t[t.MOVED=2]="MOVED",t[t.REMOVED=3]="REMOVED",t})(rc||{}),q6=class{viewCacheSize=20;_viewCache=[];applyChanges(e,A,i,n,o){e.forEachOperation((a,r,s)=>{let g,l;if(a.previousIndex==null){let C=()=>i(a,r,s);g=this._insertView(C,s,A,n(a)),l=g?rc.INSERTED:rc.REPLACED}else s==null?(this._detachAndCacheView(r,A),l=rc.REMOVED):(g=this._moveView(r,s,A,n(a)),l=rc.MOVED);o&&o({context:g?.context,operation:l,record:a})})}detach(){for(let e of this._viewCache)e.destroy();this._viewCache=[]}_insertView(e,A,i,n){let o=this._insertViewFromCache(A,i);if(o){o.context.$implicit=n;return}let a=e();return i.createEmbeddedView(a.templateRef,a.context,a.index)}_detachAndCacheView(e,A){let i=A.detach(e);this._maybeCacheView(i,A)}_moveView(e,A,i,n){let o=i.get(e);return i.move(o,A),o.context.$implicit=n,o}_maybeCacheView(e,A){if(this._viewCache.length{class t{_ngZone=h(Oe);_platform=h(Ii);_renderer=h(Kr).createRenderer(null,null);_cleanupGlobalListener;constructor(){}_scrolled=new XA;_scrolledCount=0;scrollContainers=new Map;register(A){this.scrollContainers.has(A)||this.scrollContainers.set(A,A.elementScrolled().subscribe(()=>this._scrolled.next(A)))}deregister(A){let i=this.scrollContainers.get(A);i&&(i.unsubscribe(),this.scrollContainers.delete(A))}scrolled(A=Y1A){return this._platform.isBrowser?new $i(i=>{this._cleanupGlobalListener||(this._cleanupGlobalListener=this._ngZone.runOutsideAngular(()=>this._renderer.listen("document","scroll",()=>this._scrolled.next())));let n=A>0?this._scrolled.pipe(m1(A)).subscribe(i):this._scrolled.subscribe(i);return this._scrolledCount++,()=>{n.unsubscribe(),this._scrolledCount--,this._scrolledCount||(this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0)}}):se()}ngOnDestroy(){this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0,this.scrollContainers.forEach((A,i)=>this.deregister(i)),this._scrolled.complete()}ancestorScrolled(A,i){let n=this.getAncestorScrollContainers(A);return this.scrolled(i).pipe(Ze(o=>!o||n.indexOf(o)>-1))}getAncestorScrollContainers(A){let i=[];return this.scrollContainers.forEach((n,o)=>{this._scrollableContainsElement(o,A)&&i.push(o)}),i}_scrollableContainsElement(A,i){let n=xs(i),o=A.getElementRef().nativeElement;do if(n==o)return!0;while(n=n.parentElement);return!1}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),BC=(()=>{class t{elementRef=h(ge);scrollDispatcher=h(I0);ngZone=h(Oe);dir=h(Ro,{optional:!0});_scrollElement=this.elementRef.nativeElement;_destroyed=new XA;_renderer=h(_i);_cleanupScroll;_elementScrolled=new XA;constructor(){}ngOnInit(){this._cleanupScroll=this.ngZone.runOutsideAngular(()=>this._renderer.listen(this._scrollElement,"scroll",A=>this._elementScrolled.next(A))),this.scrollDispatcher.register(this)}ngOnDestroy(){this._cleanupScroll?.(),this._elementScrolled.complete(),this.scrollDispatcher.deregister(this),this._destroyed.next(),this._destroyed.complete()}elementScrolled(){return this._elementScrolled}getElementRef(){return this.elementRef}scrollTo(A){let i=this.elementRef.nativeElement,n=this.dir&&this.dir.value=="rtl";A.left==null&&(A.left=n?A.end:A.start),A.right==null&&(A.right=n?A.start:A.end),A.bottom!=null&&(A.top=i.scrollHeight-i.clientHeight-A.bottom),n&&_B()!=Xl.NORMAL?(A.left!=null&&(A.right=i.scrollWidth-i.clientWidth-A.left),_B()==Xl.INVERTED?A.left=A.right:_B()==Xl.NEGATED&&(A.left=A.right?-A.right:A.right)):A.right!=null&&(A.left=i.scrollWidth-i.clientWidth-A.right),this._applyScrollToOptions(A)}_applyScrollToOptions(A){let i=this.elementRef.nativeElement;Up()?i.scrollTo(A):(A.top!=null&&(i.scrollTop=A.top),A.left!=null&&(i.scrollLeft=A.left))}measureScrollOffset(A){let i="left",n="right",o=this.elementRef.nativeElement;if(A=="top")return o.scrollTop;if(A=="bottom")return o.scrollHeight-o.clientHeight-o.scrollTop;let a=this.dir&&this.dir.value=="rtl";return A=="start"?A=a?n:i:A=="end"&&(A=a?i:n),a&&_B()==Xl.INVERTED?A==i?o.scrollWidth-o.clientWidth-o.scrollLeft:o.scrollLeft:a&&_B()==Xl.NEGATED?A==i?o.scrollLeft+o.scrollWidth-o.clientWidth:-o.scrollLeft:A==i?o.scrollLeft:o.scrollWidth-o.clientWidth-o.scrollLeft}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdk-scrollable",""],["","cdkScrollable",""]]})}return t})(),T1A=20,Ls=(()=>{class t{_platform=h(Ii);_listeners;_viewportSize=null;_change=new XA;_document=h(Xt);constructor(){let A=h(Oe),i=h(Kr).createRenderer(null,null);A.runOutsideAngular(()=>{if(this._platform.isBrowser){let n=o=>this._change.next(o);this._listeners=[i.listen("window","resize",n),i.listen("window","orientationchange",n)]}this.change().subscribe(()=>this._viewportSize=null)})}ngOnDestroy(){this._listeners?.forEach(A=>A()),this._change.complete()}getViewportSize(){this._viewportSize||this._updateViewportSize();let A={width:this._viewportSize.width,height:this._viewportSize.height};return this._platform.isBrowser||(this._viewportSize=null),A}getViewportRect(){let A=this.getViewportScrollPosition(),{width:i,height:n}=this.getViewportSize();return{top:A.top,left:A.left,bottom:A.top+n,right:A.left+i,height:n,width:i}}getViewportScrollPosition(){if(!this._platform.isBrowser)return{top:0,left:0};let A=this._document,i=this._getWindow(),n=A.documentElement,o=n.getBoundingClientRect(),a=-o.top||A.body?.scrollTop||i.scrollY||n.scrollTop||0,r=-o.left||A.body?.scrollLeft||i.scrollX||n.scrollLeft||0;return{top:a,left:r}}change(A=T1A){return A>0?this._change.pipe(m1(A)):this._change}_getWindow(){return this._document.defaultView||window}_updateViewportSize(){let A=this._getWindow();this._viewportSize=this._platform.isBrowser?{width:A.innerWidth,height:A.innerHeight}:{width:0,height:0}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var qH=new yA("CDK_VIRTUAL_SCROLL_VIEWPORT");var C0=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})(),V6=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi,C0,Gi,C0]})}return t})();var h4=class{_attachedHost=null;attach(e){return this._attachedHost=e,e.attach(this)}detach(){let e=this._attachedHost;e!=null&&(this._attachedHost=null,e.detach())}get isAttached(){return this._attachedHost!=null}setAttachedHost(e){this._attachedHost=e}},Jg=class extends h4{component;viewContainerRef;injector;projectableNodes;constructor(e,A,i,n){super(),this.component=e,this.viewContainerRef=A,this.injector=i,this.projectableNodes=n}},Is=class extends h4{templateRef;viewContainerRef;context;injector;constructor(e,A,i,n){super(),this.templateRef=e,this.viewContainerRef=A,this.context=i,this.injector=n}get origin(){return this.templateRef.elementRef}attach(e,A=this.context){return this.context=A,super.attach(e)}detach(){return this.context=void 0,super.detach()}},$M=class extends h4{element;constructor(e){super(),this.element=e instanceof ge?e.nativeElement:e}},L2=class{_attachedPortal=null;_disposeFn=null;_isDisposed=!1;hasAttached(){return!!this._attachedPortal}attach(e){if(e instanceof Jg)return this._attachedPortal=e,this.attachComponentPortal(e);if(e instanceof Is)return this._attachedPortal=e,this.attachTemplatePortal(e);if(this.attachDomPortal&&e instanceof $M)return this._attachedPortal=e,this.attachDomPortal(e)}attachDomPortal=null;detach(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()}dispose(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0}setDisposeFn(e){this._disposeFn=e}_invokeDisposeFn(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)}},u4=class extends L2{outletElement;_appRef;_defaultInjector;constructor(e,A,i){super(),this.outletElement=e,this._appRef=A,this._defaultInjector=i}attachComponentPortal(e){let A;if(e.viewContainerRef){let i=e.injector||e.viewContainerRef.injector,n=i.get(Hb,null,{optional:!0})||void 0;A=e.viewContainerRef.createComponent(e.component,{index:e.viewContainerRef.length,injector:i,ngModuleRef:n,projectableNodes:e.projectableNodes||void 0}),this.setDisposeFn(()=>A.destroy())}else{let i=this._appRef,n=e.injector||this._defaultInjector||ft.NULL,o=n.get(Gr,i.injector);A=Ip(e.component,{elementInjector:n,environmentInjector:o,projectableNodes:e.projectableNodes||void 0}),i.attachView(A.hostView),this.setDisposeFn(()=>{i.viewCount>0&&i.detachView(A.hostView),A.destroy()})}return this.outletElement.appendChild(this._getComponentRootNode(A)),this._attachedPortal=e,A}attachTemplatePortal(e){let A=e.viewContainerRef,i=A.createEmbeddedView(e.templateRef,e.context,{injector:e.injector});return i.rootNodes.forEach(n=>this.outletElement.appendChild(n)),i.detectChanges(),this.setDisposeFn(()=>{let n=A.indexOf(i);n!==-1&&A.remove(n)}),this._attachedPortal=e,i}attachDomPortal=e=>{let A=e.element;A.parentNode;let i=this.outletElement.ownerDocument.createComment("dom-portal");A.parentNode.insertBefore(i,A),this.outletElement.appendChild(A),this._attachedPortal=e,super.setDisposeFn(()=>{i.parentNode&&i.parentNode.replaceChild(A,i)})};dispose(){super.dispose(),this.outletElement.remove()}_getComponentRootNode(e){return e.hostView.rootNodes[0]}},VH=(()=>{class t extends Is{constructor(){let A=h(Tn),i=h(Oo);super(A,i)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkPortal",""]],exportAs:["cdkPortal"],features:[It]})}return t})(),Yg=(()=>{class t extends L2{_moduleRef=h(Hb,{optional:!0});_document=h(Xt);_viewContainerRef=h(Oo);_isInitialized=!1;_attachedRef=null;constructor(){super()}get portal(){return this._attachedPortal}set portal(A){this.hasAttached()&&!A&&!this._isInitialized||(this.hasAttached()&&super.detach(),A&&super.attach(A),this._attachedPortal=A||null)}attached=new $A;get attachedRef(){return this._attachedRef}ngOnInit(){this._isInitialized=!0}ngOnDestroy(){super.dispose(),this._attachedRef=this._attachedPortal=null}attachComponentPortal(A){A.setAttachedHost(this);let i=A.viewContainerRef!=null?A.viewContainerRef:this._viewContainerRef,n=i.createComponent(A.component,{index:i.length,injector:A.injector||i.injector,projectableNodes:A.projectableNodes||void 0,ngModuleRef:this._moduleRef||void 0});return i!==this._viewContainerRef&&this._getRootNode().appendChild(n.hostView.rootNodes[0]),super.setDisposeFn(()=>n.destroy()),this._attachedPortal=A,this._attachedRef=n,this.attached.emit(n),n}attachTemplatePortal(A){A.setAttachedHost(this);let i=this._viewContainerRef.createEmbeddedView(A.templateRef,A.context,{injector:A.injector});return super.setDisposeFn(()=>this._viewContainerRef.clear()),this._attachedPortal=A,this._attachedRef=i,this.attached.emit(i),i}attachDomPortal=A=>{let i=A.element;i.parentNode;let n=this._document.createComment("dom-portal");A.setAttachedHost(this),i.parentNode.insertBefore(n,i),this._getRootNode().appendChild(i),this._attachedPortal=A,super.setDisposeFn(()=>{n.parentNode&&n.parentNode.replaceChild(i,n)})};_getRootNode(){let A=this._viewContainerRef.element.nativeElement;return A.nodeType===A.ELEMENT_NODE?A:A.parentNode}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkPortalOutlet",""]],inputs:{portal:[0,"cdkPortalOutlet","portal"]},outputs:{attached:"attached"},exportAs:["cdkPortalOutlet"],features:[It]})}return t})(),d0=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();var WH=Up();function gE(t){return new W6(t.get(Ls),t.get(Xt))}var W6=class{_viewportRuler;_previousHTMLStyles={top:"",left:""};_previousScrollPosition;_isEnabled=!1;_document;constructor(e,A){this._viewportRuler=e,this._document=A}attach(){}enable(){if(this._canBeEnabled()){let e=this._document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=e.style.left||"",this._previousHTMLStyles.top=e.style.top||"",e.style.left=Va(-this._previousScrollPosition.left),e.style.top=Va(-this._previousScrollPosition.top),e.classList.add("cdk-global-scrollblock"),this._isEnabled=!0}}disable(){if(this._isEnabled){let e=this._document.documentElement,A=this._document.body,i=e.style,n=A.style,o=i.scrollBehavior||"",a=n.scrollBehavior||"";this._isEnabled=!1,i.left=this._previousHTMLStyles.left,i.top=this._previousHTMLStyles.top,e.classList.remove("cdk-global-scrollblock"),WH&&(i.scrollBehavior=n.scrollBehavior="auto"),window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),WH&&(i.scrollBehavior=o,n.scrollBehavior=a)}}_canBeEnabled(){if(this._document.documentElement.classList.contains("cdk-global-scrollblock")||this._isEnabled)return!1;let A=this._document.documentElement,i=this._viewportRuler.getViewportSize();return A.scrollHeight>i.height||A.scrollWidth>i.width}};function iz(t,e){return new Z6(t.get(I0),t.get(Oe),t.get(Ls),e)}var Z6=class{_scrollDispatcher;_ngZone;_viewportRuler;_config;_scrollSubscription=null;_overlayRef;_initialScrollPosition;constructor(e,A,i,n){this._scrollDispatcher=e,this._ngZone=A,this._viewportRuler=i,this._config=n}attach(e){this._overlayRef,this._overlayRef=e}enable(){if(this._scrollSubscription)return;let e=this._scrollDispatcher.scrolled(0).pipe(Ze(A=>!A||!this._overlayRef.overlayElement.contains(A.getElementRef().nativeElement)));this._config&&this._config.threshold&&this._config.threshold>1?(this._initialScrollPosition=this._viewportRuler.getViewportScrollPosition().top,this._scrollSubscription=e.subscribe(()=>{let A=this._viewportRuler.getViewportScrollPosition().top;Math.abs(A-this._initialScrollPosition)>this._config.threshold?this._detach():this._overlayRef.updatePosition()})):this._scrollSubscription=e.subscribe(this._detach)}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}_detach=()=>{this.disable(),this._overlayRef.hasAttached()&&this._ngZone.run(()=>this._overlayRef.detach())}};var f4=class{enable(){}disable(){}attach(){}};function Ak(t,e){return e.some(A=>{let i=t.bottomA.bottom,o=t.rightA.right;return i||n||o||a})}function ZH(t,e){return e.some(A=>{let i=t.topA.bottom,o=t.leftA.right;return i||n||o||a})}function EC(t,e){return new X6(t.get(I0),t.get(Ls),t.get(Oe),e)}var X6=class{_scrollDispatcher;_viewportRuler;_ngZone;_config;_scrollSubscription=null;_overlayRef;constructor(e,A,i,n){this._scrollDispatcher=e,this._viewportRuler=A,this._ngZone=i,this._config=n}attach(e){this._overlayRef,this._overlayRef=e}enable(){if(!this._scrollSubscription){let e=this._config?this._config.scrollThrottle:0;this._scrollSubscription=this._scrollDispatcher.scrolled(e).subscribe(()=>{if(this._overlayRef.updatePosition(),this._config&&this._config.autoClose){let A=this._overlayRef.overlayElement.getBoundingClientRect(),{width:i,height:n}=this._viewportRuler.getViewportSize();Ak(A,[{width:i,height:n,bottom:n,right:i,top:0,left:0}])&&(this.disable(),this._ngZone.run(()=>this._overlayRef.detach()))}})}}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}},nz=(()=>{class t{_injector=h(ft);constructor(){}noop=()=>new f4;close=A=>iz(this._injector,A);block=()=>gE(this._injector);reposition=A=>EC(this._injector,A);static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),sc=class{positionStrategy;scrollStrategy=new f4;panelClass="";hasBackdrop=!1;backdropClass="cdk-overlay-dark-backdrop";disableAnimations;width;height;minWidth;minHeight;maxWidth;maxHeight;direction;disposeOnNavigation=!1;usePopover;constructor(e){if(e){let A=Object.keys(e);for(let i of A)e[i]!==void 0&&(this[i]=e[i])}}};var $6=class{connectionPair;scrollableViewProperties;constructor(e,A){this.connectionPair=e,this.scrollableViewProperties=A}};var oz=(()=>{class t{_attachedOverlays=[];_document=h(Xt);_isAttached=!1;constructor(){}ngOnDestroy(){this.detach()}add(A){this.remove(A),this._attachedOverlays.push(A)}remove(A){let i=this._attachedOverlays.indexOf(A);i>-1&&this._attachedOverlays.splice(i,1),this._attachedOverlays.length===0&&this.detach()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),az=(()=>{class t extends oz{_ngZone=h(Oe);_renderer=h(Kr).createRenderer(null,null);_cleanupKeydown;add(A){super.add(A),this._isAttached||(this._ngZone.runOutsideAngular(()=>{this._cleanupKeydown=this._renderer.listen("body","keydown",this._keydownListener)}),this._isAttached=!0)}detach(){this._isAttached&&(this._cleanupKeydown?.(),this._isAttached=!1)}_keydownListener=A=>{let i=this._attachedOverlays;for(let n=i.length-1;n>-1;n--)if(i[n]._keydownEvents.observers.length>0){this._ngZone.run(()=>i[n]._keydownEvents.next(A));break}};static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),rz=(()=>{class t extends oz{_platform=h(Ii);_ngZone=h(Oe);_renderer=h(Kr).createRenderer(null,null);_cursorOriginalValue;_cursorStyleIsSet=!1;_pointerDownEventTarget=null;_cleanups;add(A){if(super.add(A),!this._isAttached){let i=this._document.body,n={capture:!0},o=this._renderer;this._cleanups=this._ngZone.runOutsideAngular(()=>[o.listen(i,"pointerdown",this._pointerDownListener,n),o.listen(i,"click",this._clickListener,n),o.listen(i,"auxclick",this._clickListener,n),o.listen(i,"contextmenu",this._clickListener,n)]),this._platform.IOS&&!this._cursorStyleIsSet&&(this._cursorOriginalValue=i.style.cursor,i.style.cursor="pointer",this._cursorStyleIsSet=!0),this._isAttached=!0}}detach(){this._isAttached&&(this._cleanups?.forEach(A=>A()),this._cleanups=void 0,this._platform.IOS&&this._cursorStyleIsSet&&(this._document.body.style.cursor=this._cursorOriginalValue,this._cursorStyleIsSet=!1),this._isAttached=!1)}_pointerDownListener=A=>{this._pointerDownEventTarget=Jr(A)};_clickListener=A=>{let i=Jr(A),n=A.type==="click"&&this._pointerDownEventTarget?this._pointerDownEventTarget:i;this._pointerDownEventTarget=null;let o=this._attachedOverlays.slice();for(let a=o.length-1;a>-1;a--){let r=o[a];if(r._outsidePointerEvents.observers.length<1||!r.hasAttached())continue;if(XH(r.overlayElement,i)||XH(r.overlayElement,n))break;let s=r._outsidePointerEvents;this._ngZone?this._ngZone.run(()=>s.next(A)):s.next(A)}};static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function XH(t,e){let A=typeof ShadowRoot<"u"&&ShadowRoot,i=e;for(;i;){if(i===t)return!0;i=A&&i instanceof ShadowRoot?i.host:i.parentNode}return!1}var sz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["ng-component"]],hostAttrs:["cdk-overlay-style-loader",""],decls:0,vars:0,template:function(i,n){},styles:[`.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed}@layer cdk-overlay{.cdk-overlay-container{z-index:1000}}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute}@layer cdk-overlay{.cdk-global-overlay-wrapper{z-index:1000}}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;display:flex;max-width:100%;max-height:100%}@layer cdk-overlay{.cdk-overlay-pane{z-index:1000}}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);opacity:0;touch-action:manipulation}@layer cdk-overlay{.cdk-overlay-backdrop{z-index:1000;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}}@media(prefers-reduced-motion){.cdk-overlay-backdrop{transition-duration:1ms}}.cdk-overlay-backdrop-showing{opacity:1}@media(forced-colors: active){.cdk-overlay-backdrop-showing{opacity:.6}}@layer cdk-overlay{.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing,.cdk-high-contrast-active .cdk-overlay-transparent-backdrop{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;display:flex;flex-direction:column;min-width:1px;min-height:1px}@layer cdk-overlay{.cdk-overlay-connected-position-bounding-box{z-index:1000}}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cdk-overlay-popover{background:none;border:none;padding:0;outline:0;overflow:visible;position:fixed;pointer-events:none;white-space:normal;color:inherit;text-decoration:none;width:100%;height:100%;inset:auto;top:0;left:0}.cdk-overlay-popover::backdrop{display:none}.cdk-overlay-popover .cdk-overlay-backdrop{position:fixed;z-index:auto} -`],encapsulation:2,changeDetection:0})}return t})(),t8=(()=>{class t{_platform=h(Ii);_containerElement;_document=h(Xt);_styleLoader=h(Xn);constructor(){}ngOnDestroy(){this._containerElement?.remove()}getContainerElement(){return this._loadStyles(),this._containerElement||this._createContainer(),this._containerElement}_createContainer(){let A="cdk-overlay-container";if(this._platform.isBrowser||f9()){let n=this._document.querySelectorAll(`.${A}[platform="server"], .${A}[platform="test"]`);for(let o=0;o{let e=this.element;clearTimeout(this._fallbackTimeout),this._cleanupTransitionEnd?.(),this._cleanupTransitionEnd=this._renderer.listen(e,"transitionend",this.dispose),this._fallbackTimeout=setTimeout(this.dispose,500),e.style.pointerEvents="none",e.classList.remove("cdk-overlay-backdrop-showing")})}dispose=()=>{clearTimeout(this._fallbackTimeout),this._cleanupClick?.(),this._cleanupTransitionEnd?.(),this._cleanupClick=this._cleanupTransitionEnd=this._fallbackTimeout=void 0,this.element.remove()}};function tk(t){return t&&t.nodeType===1}var rE=class{_portalOutlet;_host;_pane;_config;_ngZone;_keyboardDispatcher;_document;_location;_outsideClickDispatcher;_animationsDisabled;_injector;_renderer;_backdropClick=new XA;_attachments=new XA;_detachments=new XA;_positionStrategy;_scrollStrategy;_locationChanges=Jn.EMPTY;_backdropRef=null;_detachContentMutationObserver;_detachContentAfterRenderRef;_disposed=!1;_previousHostParent;_keydownEvents=new XA;_outsidePointerEvents=new XA;_afterNextRenderRef;constructor(e,A,i,n,o,a,r,s,g,l=!1,C,I){this._portalOutlet=e,this._host=A,this._pane=i,this._config=n,this._ngZone=o,this._keyboardDispatcher=a,this._document=r,this._location=s,this._outsideClickDispatcher=g,this._animationsDisabled=l,this._injector=C,this._renderer=I,n.scrollStrategy&&(this._scrollStrategy=n.scrollStrategy,this._scrollStrategy.attach(this)),this._positionStrategy=n.positionStrategy}get overlayElement(){return this._pane}get backdropElement(){return this._backdropRef?.element||null}get hostElement(){return this._host}attach(e){if(this._disposed)return null;this._attachHost();let A=this._portalOutlet.attach(e);return this._positionStrategy?.attach(this),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._scrollStrategy&&this._scrollStrategy.enable(),this._afterNextRenderRef?.destroy(),this._afterNextRenderRef=Yn(()=>{this.hasAttached()&&this.updatePosition()},{injector:this._injector}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!0),this._attachments.next(),this._completeDetachContent(),this._keyboardDispatcher.add(this),this._config.disposeOnNavigation&&(this._locationChanges=this._location.subscribe(()=>this.dispose())),this._outsideClickDispatcher.add(this),typeof A?.onDestroy=="function"&&A.onDestroy(()=>{this.hasAttached()&&this._ngZone.runOutsideAngular(()=>Promise.resolve().then(()=>this.detach()))}),A}detach(){if(!this.hasAttached())return;this.detachBackdrop(),this._togglePointerEvents(!1),this._positionStrategy&&this._positionStrategy.detach&&this._positionStrategy.detach(),this._scrollStrategy&&this._scrollStrategy.disable();let e=this._portalOutlet.detach();return this._detachments.next(),this._completeDetachContent(),this._keyboardDispatcher.remove(this),this._detachContentWhenEmpty(),this._locationChanges.unsubscribe(),this._outsideClickDispatcher.remove(this),e}dispose(){if(this._disposed)return;let e=this.hasAttached();this._positionStrategy&&this._positionStrategy.dispose(),this._disposeScrollStrategy(),this._backdropRef?.dispose(),this._locationChanges.unsubscribe(),this._keyboardDispatcher.remove(this),this._portalOutlet.dispose(),this._attachments.complete(),this._backdropClick.complete(),this._keydownEvents.complete(),this._outsidePointerEvents.complete(),this._outsideClickDispatcher.remove(this),this._host?.remove(),this._afterNextRenderRef?.destroy(),this._previousHostParent=this._pane=this._host=this._backdropRef=null,e&&this._detachments.next(),this._detachments.complete(),this._completeDetachContent(),this._disposed=!0}hasAttached(){return this._portalOutlet.hasAttached()}backdropClick(){return this._backdropClick}attachments(){return this._attachments}detachments(){return this._detachments}keydownEvents(){return this._keydownEvents}outsidePointerEvents(){return this._outsidePointerEvents}getConfig(){return this._config}updatePosition(){this._positionStrategy&&this._positionStrategy.apply()}updatePositionStrategy(e){e!==this._positionStrategy&&(this._positionStrategy&&this._positionStrategy.dispose(),this._positionStrategy=e,this.hasAttached()&&(e.attach(this),this.updatePosition()))}updateSize(e){this._config=cA(cA({},this._config),e),this._updateElementSize()}setDirection(e){this._config=Ge(cA({},this._config),{direction:e}),this._updateElementDirection()}addPanelClass(e){this._pane&&this._toggleClasses(this._pane,e,!0)}removePanelClass(e){this._pane&&this._toggleClasses(this._pane,e,!1)}getDirection(){let e=this._config.direction;return e?typeof e=="string"?e:e.value:"ltr"}updateScrollStrategy(e){e!==this._scrollStrategy&&(this._disposeScrollStrategy(),this._scrollStrategy=e,this.hasAttached()&&(e.attach(this),e.enable()))}_updateElementDirection(){this._host.setAttribute("dir",this.getDirection())}_updateElementSize(){if(!this._pane)return;let e=this._pane.style;e.width=Va(this._config.width),e.height=Va(this._config.height),e.minWidth=Va(this._config.minWidth),e.minHeight=Va(this._config.minHeight),e.maxWidth=Va(this._config.maxWidth),e.maxHeight=Va(this._config.maxHeight)}_togglePointerEvents(e){this._pane.style.pointerEvents=e?"":"none"}_attachHost(){if(!this._host.parentElement){let e=this._config.usePopover?this._positionStrategy?.getPopoverInsertionPoint?.():null;tk(e)?e.after(this._host):e?.type==="parent"?e.element.appendChild(this._host):this._previousHostParent?.appendChild(this._host)}if(this._config.usePopover)try{this._host.showPopover()}catch{}}_attachBackdrop(){let e="cdk-overlay-backdrop-showing";this._backdropRef?.dispose(),this._backdropRef=new ek(this._document,this._renderer,this._ngZone,A=>{this._backdropClick.next(A)}),this._animationsDisabled&&this._backdropRef.element.classList.add("cdk-overlay-backdrop-noop-animation"),this._config.backdropClass&&this._toggleClasses(this._backdropRef.element,this._config.backdropClass,!0),this._config.usePopover?this._host.prepend(this._backdropRef.element):this._host.parentElement.insertBefore(this._backdropRef.element,this._host),!this._animationsDisabled&&typeof requestAnimationFrame<"u"?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>this._backdropRef?.element.classList.add(e))}):this._backdropRef.element.classList.add(e)}_updateStackingOrder(){!this._config.usePopover&&this._host.nextSibling&&this._host.parentNode.appendChild(this._host)}detachBackdrop(){this._animationsDisabled?(this._backdropRef?.dispose(),this._backdropRef=null):this._backdropRef?.detach()}_toggleClasses(e,A,i){let n=xB(A||[]).filter(o=>!!o);n.length&&(i?e.classList.add(...n):e.classList.remove(...n))}_detachContentWhenEmpty(){let e=!1;try{this._detachContentAfterRenderRef=Yn(()=>{e=!0,this._detachContent()},{injector:this._injector})}catch(A){if(e)throw A;this._detachContent()}globalThis.MutationObserver&&this._pane&&(this._detachContentMutationObserver||=new globalThis.MutationObserver(()=>{this._detachContent()}),this._detachContentMutationObserver.observe(this._pane,{childList:!0}))}_detachContent(){(!this._pane||!this._host||this._pane.children.length===0)&&(this._pane&&this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!1),this._host&&this._host.parentElement&&(this._previousHostParent=this._host.parentElement,this._host.remove()),this._completeDetachContent())}_completeDetachContent(){this._detachContentAfterRenderRef?.destroy(),this._detachContentAfterRenderRef=void 0,this._detachContentMutationObserver?.disconnect()}_disposeScrollStrategy(){let e=this._scrollStrategy;e?.disable(),e?.detach?.()}},$H="cdk-overlay-connected-position-bounding-box",z1A=/([A-Za-z%]+)$/;function q1(t,e){return new A8(e,t.get(Ls),t.get(Xt),t.get(Ii),t.get(t8))}var A8=class{_viewportRuler;_document;_platform;_overlayContainer;_overlayRef;_isInitialRender=!1;_lastBoundingBoxSize={width:0,height:0};_isPushed=!1;_canPush=!0;_growAfterOpen=!1;_hasFlexibleDimensions=!0;_positionLocked=!1;_originRect;_overlayRect;_viewportRect;_containerRect;_viewportMargin=0;_scrollables=[];_preferredPositions=[];_origin;_pane;_isDisposed=!1;_boundingBox=null;_lastPosition=null;_lastScrollVisibility=null;_positionChanges=new XA;_resizeSubscription=Jn.EMPTY;_offsetX=0;_offsetY=0;_transformOriginSelector;_appliedPanelClasses=[];_previousPushAmount=null;_popoverLocation="global";positionChanges=this._positionChanges;get positions(){return this._preferredPositions}constructor(e,A,i,n,o){this._viewportRuler=A,this._document=i,this._platform=n,this._overlayContainer=o,this.setOrigin(e)}attach(e){this._overlayRef&&this._overlayRef,this._validatePositions(),e.hostElement.classList.add($H),this._overlayRef=e,this._boundingBox=e.hostElement,this._pane=e.overlayElement,this._isDisposed=!1,this._isInitialRender=!0,this._lastPosition=null,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(()=>{this._isInitialRender=!0,this.apply()})}apply(){if(this._isDisposed||!this._platform.isBrowser)return;if(!this._isInitialRender&&this._positionLocked&&this._lastPosition){this.reapplyLastPosition();return}this._clearPanelClasses(),this._resetOverlayElementStyles(),this._resetBoundingBoxStyles(),this._viewportRect=this._getNarrowedViewportRect(),this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._containerRect=this._getContainerRect();let e=this._originRect,A=this._overlayRect,i=this._viewportRect,n=this._containerRect,o=[],a;for(let r of this._preferredPositions){let s=this._getOriginPoint(e,n,r),g=this._getOverlayPoint(s,A,r),l=this._getOverlayFit(g,A,i,r);if(l.isCompletelyWithinViewport){this._isPushed=!1,this._applyPosition(r,s);return}if(this._canFitWithFlexibleDimensions(l,g,i)){o.push({position:r,origin:s,overlayRect:A,boundingBoxRect:this._calculateBoundingBoxRect(s,r)});continue}(!a||a.overlayFit.visibleAreas&&(s=l,r=g)}this._isPushed=!1,this._applyPosition(r.position,r.origin);return}if(this._canPush){this._isPushed=!0,this._applyPosition(a.position,a.originPoint);return}this._applyPosition(a.position,a.originPoint)}detach(){this._clearPanelClasses(),this._lastPosition=null,this._previousPushAmount=null,this._resizeSubscription.unsubscribe()}dispose(){this._isDisposed||(this._boundingBox&&j1(this._boundingBox.style,{top:"",left:"",right:"",bottom:"",height:"",width:"",alignItems:"",justifyContent:""}),this._pane&&this._resetOverlayElementStyles(),this._overlayRef&&this._overlayRef.hostElement.classList.remove($H),this.detach(),this._positionChanges.complete(),this._overlayRef=this._boundingBox=null,this._isDisposed=!0)}reapplyLastPosition(){if(this._isDisposed||!this._platform.isBrowser)return;let e=this._lastPosition;e?(this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._viewportRect=this._getNarrowedViewportRect(),this._containerRect=this._getContainerRect(),this._applyPosition(e,this._getOriginPoint(this._originRect,this._containerRect,e))):this.apply()}withScrollableContainers(e){return this._scrollables=e,this}withPositions(e){return this._preferredPositions=e,e.indexOf(this._lastPosition)===-1&&(this._lastPosition=null),this._validatePositions(),this}withViewportMargin(e){return this._viewportMargin=e,this}withFlexibleDimensions(e=!0){return this._hasFlexibleDimensions=e,this}withGrowAfterOpen(e=!0){return this._growAfterOpen=e,this}withPush(e=!0){return this._canPush=e,this}withLockedPosition(e=!0){return this._positionLocked=e,this}setOrigin(e){return this._origin=e,this}withDefaultOffsetX(e){return this._offsetX=e,this}withDefaultOffsetY(e){return this._offsetY=e,this}withTransformOriginOn(e){return this._transformOriginSelector=e,this}withPopoverLocation(e){return this._popoverLocation=e,this}getPopoverInsertionPoint(){return this._popoverLocation==="global"?null:this._popoverLocation!=="inline"?this._popoverLocation:this._origin instanceof ge?this._origin.nativeElement:tk(this._origin)?this._origin:null}_getOriginPoint(e,A,i){let n;if(i.originX=="center")n=e.left+e.width/2;else{let a=this._isRtl()?e.right:e.left,r=this._isRtl()?e.left:e.right;n=i.originX=="start"?a:r}A.left<0&&(n-=A.left);let o;return i.originY=="center"?o=e.top+e.height/2:o=i.originY=="top"?e.top:e.bottom,A.top<0&&(o-=A.top),{x:n,y:o}}_getOverlayPoint(e,A,i){let n;i.overlayX=="center"?n=-A.width/2:i.overlayX==="start"?n=this._isRtl()?-A.width:0:n=this._isRtl()?0:-A.width;let o;return i.overlayY=="center"?o=-A.height/2:o=i.overlayY=="top"?0:-A.height,{x:e.x+n,y:e.y+o}}_getOverlayFit(e,A,i,n){let o=ez(A),{x:a,y:r}=e,s=this._getOffset(n,"x"),g=this._getOffset(n,"y");s&&(a+=s),g&&(r+=g);let l=0-a,C=a+o.width-i.width,I=0-r,d=r+o.height-i.height,B=this._subtractOverflows(o.width,l,C),E=this._subtractOverflows(o.height,I,d),Q=B*E;return{visibleArea:Q,isCompletelyWithinViewport:o.width*o.height===Q,fitsInViewportVertically:E===o.height,fitsInViewportHorizontally:B==o.width}}_canFitWithFlexibleDimensions(e,A,i){if(this._hasFlexibleDimensions){let n=i.bottom-A.y,o=i.right-A.x,a=Az(this._overlayRef.getConfig().minHeight),r=Az(this._overlayRef.getConfig().minWidth),s=e.fitsInViewportVertically||a!=null&&a<=n,g=e.fitsInViewportHorizontally||r!=null&&r<=o;return s&&g}return!1}_pushOverlayOnScreen(e,A,i){if(this._previousPushAmount&&this._positionLocked)return{x:e.x+this._previousPushAmount.x,y:e.y+this._previousPushAmount.y};let n=ez(A),o=this._viewportRect,a=Math.max(e.x+n.width-o.width,0),r=Math.max(e.y+n.height-o.height,0),s=Math.max(o.top-i.top-e.y,0),g=Math.max(o.left-i.left-e.x,0),l=0,C=0;return n.width<=o.width?l=g||-a:l=e.xB&&!this._isInitialRender&&!this._growAfterOpen&&(a=e.y-B/2)}let s=A.overlayX==="start"&&!n||A.overlayX==="end"&&n,g=A.overlayX==="end"&&!n||A.overlayX==="start"&&n,l,C,I;if(g)I=i.width-e.x+this._getViewportMarginStart()+this._getViewportMarginEnd(),l=e.x-this._getViewportMarginStart();else if(s)C=e.x,l=i.right-e.x-this._getViewportMarginEnd();else{let d=Math.min(i.right-e.x+i.left,e.x),B=this._lastBoundingBoxSize.width;l=d*2,C=e.x-d,l>B&&!this._isInitialRender&&!this._growAfterOpen&&(C=e.x-B/2)}return{top:a,left:C,bottom:r,right:I,width:l,height:o}}_setBoundingBoxStyles(e,A){let i=this._calculateBoundingBoxRect(e,A);!this._isInitialRender&&!this._growAfterOpen&&(i.height=Math.min(i.height,this._lastBoundingBoxSize.height),i.width=Math.min(i.width,this._lastBoundingBoxSize.width));let n={};if(this._hasExactPosition())n.top=n.left="0",n.bottom=n.right="auto",n.maxHeight=n.maxWidth="",n.width=n.height="100%";else{let o=this._overlayRef.getConfig().maxHeight,a=this._overlayRef.getConfig().maxWidth;n.width=Va(i.width),n.height=Va(i.height),n.top=Va(i.top)||"auto",n.bottom=Va(i.bottom)||"auto",n.left=Va(i.left)||"auto",n.right=Va(i.right)||"auto",A.overlayX==="center"?n.alignItems="center":n.alignItems=A.overlayX==="end"?"flex-end":"flex-start",A.overlayY==="center"?n.justifyContent="center":n.justifyContent=A.overlayY==="bottom"?"flex-end":"flex-start",o&&(n.maxHeight=Va(o)),a&&(n.maxWidth=Va(a))}this._lastBoundingBoxSize=i,j1(this._boundingBox.style,n)}_resetBoundingBoxStyles(){j1(this._boundingBox.style,{top:"0",left:"0",right:"0",bottom:"0",height:"",width:"",alignItems:"",justifyContent:""})}_resetOverlayElementStyles(){j1(this._pane.style,{top:"",left:"",bottom:"",right:"",position:"",transform:""})}_setOverlayElementStyles(e,A){let i={},n=this._hasExactPosition(),o=this._hasFlexibleDimensions,a=this._overlayRef.getConfig();if(n){let l=this._viewportRuler.getViewportScrollPosition();j1(i,this._getExactOverlayY(A,e,l)),j1(i,this._getExactOverlayX(A,e,l))}else i.position="static";let r="",s=this._getOffset(A,"x"),g=this._getOffset(A,"y");s&&(r+=`translateX(${s}px) `),g&&(r+=`translateY(${g}px)`),i.transform=r.trim(),a.maxHeight&&(n?i.maxHeight=Va(a.maxHeight):o&&(i.maxHeight="")),a.maxWidth&&(n?i.maxWidth=Va(a.maxWidth):o&&(i.maxWidth="")),j1(this._pane.style,i)}_getExactOverlayY(e,A,i){let n={top:"",bottom:""},o=this._getOverlayPoint(A,this._overlayRect,e);if(this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i)),e.overlayY==="bottom"){let a=this._document.documentElement.clientHeight;n.bottom=`${a-(o.y+this._overlayRect.height)}px`}else n.top=Va(o.y);return n}_getExactOverlayX(e,A,i){let n={left:"",right:""},o=this._getOverlayPoint(A,this._overlayRect,e);this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i));let a;if(this._isRtl()?a=e.overlayX==="end"?"left":"right":a=e.overlayX==="end"?"right":"left",a==="right"){let r=this._document.documentElement.clientWidth;n.right=`${r-(o.x+this._overlayRect.width)}px`}else n.left=Va(o.x);return n}_getScrollVisibility(){let e=this._getOriginRect(),A=this._pane.getBoundingClientRect(),i=this._scrollables.map(n=>n.getElementRef().nativeElement.getBoundingClientRect());return{isOriginClipped:ZH(e,i),isOriginOutsideView:Ak(e,i),isOverlayClipped:ZH(A,i),isOverlayOutsideView:Ak(A,i)}}_subtractOverflows(e,...A){return A.reduce((i,n)=>i-Math.max(n,0),e)}_getNarrowedViewportRect(){let e=this._document.documentElement.clientWidth,A=this._document.documentElement.clientHeight,i=this._viewportRuler.getViewportScrollPosition();return{top:i.top+this._getViewportMarginTop(),left:i.left+this._getViewportMarginStart(),right:i.left+e-this._getViewportMarginEnd(),bottom:i.top+A-this._getViewportMarginBottom(),width:e-this._getViewportMarginStart()-this._getViewportMarginEnd(),height:A-this._getViewportMarginTop()-this._getViewportMarginBottom()}}_isRtl(){return this._overlayRef.getDirection()==="rtl"}_hasExactPosition(){return!this._hasFlexibleDimensions||this._isPushed}_getOffset(e,A){return A==="x"?e.offsetX==null?this._offsetX:e.offsetX:e.offsetY==null?this._offsetY:e.offsetY}_validatePositions(){}_addPanelClasses(e){this._pane&&xB(e).forEach(A=>{A!==""&&this._appliedPanelClasses.indexOf(A)===-1&&(this._appliedPanelClasses.push(A),this._pane.classList.add(A))})}_clearPanelClasses(){this._pane&&(this._appliedPanelClasses.forEach(e=>{this._pane.classList.remove(e)}),this._appliedPanelClasses=[])}_getViewportMarginStart(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.start??0}_getViewportMarginEnd(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.end??0}_getViewportMarginTop(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.top??0}_getViewportMarginBottom(){return typeof this._viewportMargin=="number"?this._viewportMargin:this._viewportMargin?.bottom??0}_getOriginRect(){let e=this._origin;if(e instanceof ge)return e.nativeElement.getBoundingClientRect();if(e instanceof Element)return e.getBoundingClientRect();let A=e.width||0,i=e.height||0;return{top:e.y,bottom:e.y+i,left:e.x,right:e.x+A,height:i,width:A}}_getContainerRect(){let e=this._overlayRef.getConfig().usePopover&&this._popoverLocation!=="global",A=this._overlayContainer.getContainerElement();e&&(A.style.display="block");let i=A.getBoundingClientRect();return e&&(A.style.display=""),i}};function j1(t,e){for(let A in e)e.hasOwnProperty(A)&&(t[A]=e[A]);return t}function Az(t){if(typeof t!="number"&&t!=null){let[e,A]=t.split(z1A);return!A||A==="px"?parseFloat(e):null}return t||null}function ez(t){return{top:Math.floor(t.top),right:Math.floor(t.right),bottom:Math.floor(t.bottom),left:Math.floor(t.left),width:Math.floor(t.width),height:Math.floor(t.height)}}function O1A(t,e){return t===e?!0:t.isOriginClipped===e.isOriginClipped&&t.isOriginOutsideView===e.isOriginOutsideView&&t.isOverlayClipped===e.isOverlayClipped&&t.isOverlayOutsideView===e.isOverlayOutsideView}var tz="cdk-global-overlay-wrapper";function G2(t){return new e8}var e8=class{_overlayRef;_cssPosition="static";_topOffset="";_bottomOffset="";_alignItems="";_xPosition="";_xOffset="";_width="";_height="";_isDisposed=!1;attach(e){let A=e.getConfig();this._overlayRef=e,this._width&&!A.width&&e.updateSize({width:this._width}),this._height&&!A.height&&e.updateSize({height:this._height}),e.hostElement.classList.add(tz),this._isDisposed=!1}top(e=""){return this._bottomOffset="",this._topOffset=e,this._alignItems="flex-start",this}left(e=""){return this._xOffset=e,this._xPosition="left",this}bottom(e=""){return this._topOffset="",this._bottomOffset=e,this._alignItems="flex-end",this}right(e=""){return this._xOffset=e,this._xPosition="right",this}start(e=""){return this._xOffset=e,this._xPosition="start",this}end(e=""){return this._xOffset=e,this._xPosition="end",this}width(e=""){return this._overlayRef?this._overlayRef.updateSize({width:e}):this._width=e,this}height(e=""){return this._overlayRef?this._overlayRef.updateSize({height:e}):this._height=e,this}centerHorizontally(e=""){return this.left(e),this._xPosition="center",this}centerVertically(e=""){return this.top(e),this._alignItems="center",this}apply(){if(!this._overlayRef||!this._overlayRef.hasAttached())return;let e=this._overlayRef.overlayElement.style,A=this._overlayRef.hostElement.style,i=this._overlayRef.getConfig(),{width:n,height:o,maxWidth:a,maxHeight:r}=i,s=(n==="100%"||n==="100vw")&&(!a||a==="100%"||a==="100vw"),g=(o==="100%"||o==="100vh")&&(!r||r==="100%"||r==="100vh"),l=this._xPosition,C=this._xOffset,I=this._overlayRef.getConfig().direction==="rtl",d="",B="",E="";s?E="flex-start":l==="center"?(E="center",I?B=C:d=C):I?l==="left"||l==="end"?(E="flex-end",d=C):(l==="right"||l==="start")&&(E="flex-start",B=C):l==="left"||l==="start"?(E="flex-start",d=C):(l==="right"||l==="end")&&(E="flex-end",B=C),e.position=this._cssPosition,e.marginLeft=s?"0":d,e.marginTop=g?"0":this._topOffset,e.marginBottom=this._bottomOffset,e.marginRight=s?"0":B,A.justifyContent=E,A.alignItems=g?"flex-start":this._alignItems}dispose(){if(this._isDisposed||!this._overlayRef)return;let e=this._overlayRef.overlayElement.style,A=this._overlayRef.hostElement,i=A.style;A.classList.remove(tz),i.justifyContent=i.alignItems=e.marginTop=e.marginBottom=e.marginLeft=e.marginRight=e.position="",this._overlayRef=null,this._isDisposed=!0}},gz=(()=>{class t{_injector=h(ft);constructor(){}global(){return G2()}flexibleConnectedTo(A){return q1(this._injector,A)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),m4=new yA("OVERLAY_DEFAULT_CONFIG");function lc(t,e){t.get(Xn).load(sz);let A=t.get(t8),i=t.get(Xt),n=t.get(an),o=t.get(oC),a=t.get(Ro),r=t.get(_i,null,{optional:!0})||t.get(Kr).createRenderer(null,null),s=new sc(e),g=t.get(m4,null,{optional:!0})?.usePopover??!0;s.direction=s.direction||a.value,"showPopover"in i.body?s.usePopover=e?.usePopover??g:s.usePopover=!1;let l=i.createElement("div"),C=i.createElement("div");l.id=n.getId("cdk-overlay-"),l.classList.add("cdk-overlay-pane"),C.appendChild(l),s.usePopover&&(C.setAttribute("popover","manual"),C.classList.add("cdk-overlay-popover"));let I=s.usePopover?s.positionStrategy?.getPopoverInsertionPoint?.():null;return tk(I)?I.after(C):I?.type==="parent"?I.element.appendChild(C):A.getContainerElement().appendChild(C),new rE(new u4(l,o,t),C,l,s,t.get(Oe),t.get(az),i,t.get(o0),t.get(rz),e?.disableAnimations??t.get(p1,null,{optional:!0})==="NoopAnimations",t.get(Gr),r)}var i8=(()=>{class t{scrollStrategies=h(nz);_positionBuilder=h(gz);_injector=h(ft);constructor(){}create(A){return lc(this._injector,A)}position(){return this._positionBuilder}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),P1A=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom"},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"}],j1A=new yA("cdk-connected-overlay-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>EC(t)}}),sE=(()=>{class t{elementRef=h(ge);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdk-overlay-origin",""],["","overlay-origin",""],["","cdkOverlayOrigin",""]],exportAs:["cdkOverlayOrigin"]})}return t})(),lz=new yA("cdk-connected-overlay-default-config"),n8=(()=>{class t{_dir=h(Ro,{optional:!0});_injector=h(ft);_overlayRef;_templatePortal;_backdropSubscription=Jn.EMPTY;_attachSubscription=Jn.EMPTY;_detachSubscription=Jn.EMPTY;_positionSubscription=Jn.EMPTY;_offsetX;_offsetY;_position;_scrollStrategyFactory=h(j1A);_ngZone=h(Oe);origin;positions;positionStrategy;get offsetX(){return this._offsetX}set offsetX(A){this._offsetX=A,this._position&&this._updatePositionStrategy(this._position)}get offsetY(){return this._offsetY}set offsetY(A){this._offsetY=A,this._position&&this._updatePositionStrategy(this._position)}width;height;minWidth;minHeight;backdropClass;panelClass;viewportMargin=0;scrollStrategy;open=!1;disableClose=!1;transformOriginSelector;hasBackdrop=!1;lockPosition=!1;flexibleDimensions=!1;growAfterOpen=!1;push=!1;disposeOnNavigation=!1;usePopover;matchWidth=!1;set _config(A){typeof A!="string"&&this._assignConfig(A)}backdropClick=new $A;positionChange=new $A;attach=new $A;detach=new $A;overlayKeydown=new $A;overlayOutsideClick=new $A;constructor(){let A=h(Tn),i=h(Oo),n=h(lz,{optional:!0}),o=h(m4,{optional:!0});this.usePopover=o?.usePopover===!1?null:"global",this._templatePortal=new Is(A,i),this.scrollStrategy=this._scrollStrategyFactory(),n&&this._assignConfig(n)}get overlayRef(){return this._overlayRef}get dir(){return this._dir?this._dir.value:"ltr"}ngOnDestroy(){this._attachSubscription.unsubscribe(),this._detachSubscription.unsubscribe(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this._overlayRef?.dispose()}ngOnChanges(A){this._position&&(this._updatePositionStrategy(this._position),this._overlayRef?.updateSize({width:this._getWidth(),minWidth:this.minWidth,height:this.height,minHeight:this.minHeight}),A.origin&&this.open&&this._position.apply()),A.open&&(this.open?this.attachOverlay():this.detachOverlay())}_createOverlay(){(!this.positions||!this.positions.length)&&(this.positions=P1A);let A=this._overlayRef=lc(this._injector,this._buildConfig());this._attachSubscription=A.attachments().subscribe(()=>this.attach.emit()),this._detachSubscription=A.detachments().subscribe(()=>this.detach.emit()),A.keydownEvents().subscribe(i=>{this.overlayKeydown.next(i),i.keyCode===27&&!this.disableClose&&!pa(i)&&(i.preventDefault(),this.detachOverlay())}),this._overlayRef.outsidePointerEvents().subscribe(i=>{let n=this._getOriginElement(),o=Jr(i);(!n||n!==o&&!n.contains(o))&&this.overlayOutsideClick.next(i)})}_buildConfig(){let A=this._position=this.positionStrategy||this._createPositionStrategy(),i=new sc({direction:this._dir||"ltr",positionStrategy:A,scrollStrategy:this.scrollStrategy,hasBackdrop:this.hasBackdrop,disposeOnNavigation:this.disposeOnNavigation,usePopover:!!this.usePopover});return(this.height||this.height===0)&&(i.height=this.height),(this.minWidth||this.minWidth===0)&&(i.minWidth=this.minWidth),(this.minHeight||this.minHeight===0)&&(i.minHeight=this.minHeight),this.backdropClass&&(i.backdropClass=this.backdropClass),this.panelClass&&(i.panelClass=this.panelClass),i}_updatePositionStrategy(A){let i=this.positions.map(n=>({originX:n.originX,originY:n.originY,overlayX:n.overlayX,overlayY:n.overlayY,offsetX:n.offsetX||this.offsetX,offsetY:n.offsetY||this.offsetY,panelClass:n.panelClass||void 0}));return A.setOrigin(this._getOrigin()).withPositions(i).withFlexibleDimensions(this.flexibleDimensions).withPush(this.push).withGrowAfterOpen(this.growAfterOpen).withViewportMargin(this.viewportMargin).withLockedPosition(this.lockPosition).withTransformOriginOn(this.transformOriginSelector).withPopoverLocation(this.usePopover===null?"global":this.usePopover)}_createPositionStrategy(){let A=q1(this._injector,this._getOrigin());return this._updatePositionStrategy(A),A}_getOrigin(){return this.origin instanceof sE?this.origin.elementRef:this.origin}_getOriginElement(){return this.origin instanceof sE?this.origin.elementRef.nativeElement:this.origin instanceof ge?this.origin.nativeElement:typeof Element<"u"&&this.origin instanceof Element?this.origin:null}_getWidth(){return this.width?this.width:this.matchWidth?this._getOriginElement()?.getBoundingClientRect?.().width:void 0}attachOverlay(){this._overlayRef||this._createOverlay();let A=this._overlayRef;A.getConfig().hasBackdrop=this.hasBackdrop,A.updateSize({width:this._getWidth()}),A.hasAttached()||A.attach(this._templatePortal),this.hasBackdrop?this._backdropSubscription=A.backdropClick().subscribe(i=>this.backdropClick.emit(i)):this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this.positionChange.observers.length>0&&(this._positionSubscription=this._position.positionChanges.pipe(cU(()=>this.positionChange.observers.length>0)).subscribe(i=>{this._ngZone.run(()=>this.positionChange.emit(i)),this.positionChange.observers.length===0&&this._positionSubscription.unsubscribe()})),this.open=!0}detachOverlay(){this._overlayRef?.detach(),this._backdropSubscription.unsubscribe(),this._positionSubscription.unsubscribe(),this.open=!1}_assignConfig(A){this.origin=A.origin??this.origin,this.positions=A.positions??this.positions,this.positionStrategy=A.positionStrategy??this.positionStrategy,this.offsetX=A.offsetX??this.offsetX,this.offsetY=A.offsetY??this.offsetY,this.width=A.width??this.width,this.height=A.height??this.height,this.minWidth=A.minWidth??this.minWidth,this.minHeight=A.minHeight??this.minHeight,this.backdropClass=A.backdropClass??this.backdropClass,this.panelClass=A.panelClass??this.panelClass,this.viewportMargin=A.viewportMargin??this.viewportMargin,this.scrollStrategy=A.scrollStrategy??this.scrollStrategy,this.disableClose=A.disableClose??this.disableClose,this.transformOriginSelector=A.transformOriginSelector??this.transformOriginSelector,this.hasBackdrop=A.hasBackdrop??this.hasBackdrop,this.lockPosition=A.lockPosition??this.lockPosition,this.flexibleDimensions=A.flexibleDimensions??this.flexibleDimensions,this.growAfterOpen=A.growAfterOpen??this.growAfterOpen,this.push=A.push??this.push,this.disposeOnNavigation=A.disposeOnNavigation??this.disposeOnNavigation,this.usePopover=A.usePopover??this.usePopover,this.matchWidth=A.matchWidth??this.matchWidth}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdk-connected-overlay",""],["","connected-overlay",""],["","cdkConnectedOverlay",""]],inputs:{origin:[0,"cdkConnectedOverlayOrigin","origin"],positions:[0,"cdkConnectedOverlayPositions","positions"],positionStrategy:[0,"cdkConnectedOverlayPositionStrategy","positionStrategy"],offsetX:[0,"cdkConnectedOverlayOffsetX","offsetX"],offsetY:[0,"cdkConnectedOverlayOffsetY","offsetY"],width:[0,"cdkConnectedOverlayWidth","width"],height:[0,"cdkConnectedOverlayHeight","height"],minWidth:[0,"cdkConnectedOverlayMinWidth","minWidth"],minHeight:[0,"cdkConnectedOverlayMinHeight","minHeight"],backdropClass:[0,"cdkConnectedOverlayBackdropClass","backdropClass"],panelClass:[0,"cdkConnectedOverlayPanelClass","panelClass"],viewportMargin:[0,"cdkConnectedOverlayViewportMargin","viewportMargin"],scrollStrategy:[0,"cdkConnectedOverlayScrollStrategy","scrollStrategy"],open:[0,"cdkConnectedOverlayOpen","open"],disableClose:[0,"cdkConnectedOverlayDisableClose","disableClose"],transformOriginSelector:[0,"cdkConnectedOverlayTransformOriginOn","transformOriginSelector"],hasBackdrop:[2,"cdkConnectedOverlayHasBackdrop","hasBackdrop",he],lockPosition:[2,"cdkConnectedOverlayLockPosition","lockPosition",he],flexibleDimensions:[2,"cdkConnectedOverlayFlexibleDimensions","flexibleDimensions",he],growAfterOpen:[2,"cdkConnectedOverlayGrowAfterOpen","growAfterOpen",he],push:[2,"cdkConnectedOverlayPush","push",he],disposeOnNavigation:[2,"cdkConnectedOverlayDisposeOnNavigation","disposeOnNavigation",he],usePopover:[0,"cdkConnectedOverlayUsePopover","usePopover"],matchWidth:[2,"cdkConnectedOverlayMatchWidth","matchWidth",he],_config:[0,"cdkConnectedOverlay","_config"]},outputs:{backdropClick:"backdropClick",positionChange:"positionChange",attach:"attach",detach:"detach",overlayKeydown:"overlayKeydown",overlayOutsideClick:"overlayOutsideClick"},exportAs:["cdkConnectedOverlay"],features:[ti]})}return t})(),Cl=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[i8],imports:[Gi,d0,V6,V6]})}return t})();function q1A(t,e){}var K2=class{viewContainerRef;injector;id;role="dialog";panelClass="";hasBackdrop=!0;backdropClass="";disableClose=!1;closePredicate;width="";height="";minWidth;minHeight;maxWidth;maxHeight;positionStrategy;data=null;direction;ariaDescribedBy=null;ariaLabelledBy=null;ariaLabel=null;ariaModal=!1;autoFocus="first-tabbable";restoreFocus=!0;scrollStrategy;closeOnNavigation=!0;closeOnDestroy=!0;closeOnOverlayDetachments=!0;disableAnimations=!1;providers;container;templateContext};var nk=(()=>{class t extends L2{_elementRef=h(ge);_focusTrapFactory=h(yu);_config;_interactivityChecker=h(NB);_ngZone=h(Oe);_focusMonitor=h(ar);_renderer=h(_i);_changeDetectorRef=h(Dt);_injector=h(ft);_platform=h(Ii);_document=h(Xt);_portalOutlet;_focusTrapped=new XA;_focusTrap=null;_elementFocusedBeforeDialogWasOpened=null;_closeInteractionType=null;_ariaLabelledByQueue=[];_isDestroyed=!1;constructor(){super(),this._config=h(K2,{optional:!0})||new K2,this._config.ariaLabelledBy&&this._ariaLabelledByQueue.push(this._config.ariaLabelledBy)}_addAriaLabelledBy(A){this._ariaLabelledByQueue.push(A),this._changeDetectorRef.markForCheck()}_removeAriaLabelledBy(A){let i=this._ariaLabelledByQueue.indexOf(A);i>-1&&(this._ariaLabelledByQueue.splice(i,1),this._changeDetectorRef.markForCheck())}_contentAttached(){this._initializeFocusTrap(),this._captureInitialFocus()}_captureInitialFocus(){this._trapFocus()}ngOnDestroy(){this._focusTrapped.complete(),this._isDestroyed=!0,this._restoreFocus()}attachComponentPortal(A){this._portalOutlet.hasAttached();let i=this._portalOutlet.attachComponentPortal(A);return this._contentAttached(),i}attachTemplatePortal(A){this._portalOutlet.hasAttached();let i=this._portalOutlet.attachTemplatePortal(A);return this._contentAttached(),i}attachDomPortal=A=>{this._portalOutlet.hasAttached();let i=this._portalOutlet.attachDomPortal(A);return this._contentAttached(),i};_recaptureFocus(){this._containsFocus()||this._trapFocus()}_forceFocus(A,i){this._interactivityChecker.isFocusable(A)||(A.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let n=()=>{o(),a(),A.removeAttribute("tabindex")},o=this._renderer.listen(A,"blur",n),a=this._renderer.listen(A,"mousedown",n)})),A.focus(i)}_focusByCssSelector(A,i){let n=this._elementRef.nativeElement.querySelector(A);n&&this._forceFocus(n,i)}_trapFocus(A){this._isDestroyed||Yn(()=>{let i=this._elementRef.nativeElement;switch(this._config.autoFocus){case!1:case"dialog":this._containsFocus()||i.focus(A);break;case!0:case"first-tabbable":this._focusTrap?.focusInitialElement(A)||this._focusDialogContainer(A);break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]',A);break;default:this._focusByCssSelector(this._config.autoFocus,A);break}this._focusTrapped.next()},{injector:this._injector})}_restoreFocus(){let A=this._config.restoreFocus,i=null;if(typeof A=="string"?i=this._document.querySelector(A):typeof A=="boolean"?i=A?this._elementFocusedBeforeDialogWasOpened:null:A&&(i=A),this._config.restoreFocus&&i&&typeof i.focus=="function"){let n=mu(),o=this._elementRef.nativeElement;(!n||n===this._document.body||n===o||o.contains(n))&&(this._focusMonitor?(this._focusMonitor.focusVia(i,this._closeInteractionType),this._closeInteractionType=null):i.focus())}this._focusTrap&&this._focusTrap.destroy()}_focusDialogContainer(A){this._elementRef.nativeElement.focus?.(A)}_containsFocus(){let A=this._elementRef.nativeElement,i=mu();return A===i||A.contains(i)}_initializeFocusTrap(){this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._document&&(this._elementFocusedBeforeDialogWasOpened=mu()))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-dialog-container"]],viewQuery:function(i,n){if(i&1&&ai(Yg,7),i&2){let o;ce(o=Ce())&&(n._portalOutlet=o.first)}},hostAttrs:["tabindex","-1",1,"cdk-dialog-container"],hostVars:6,hostBindings:function(i,n){i&2&&ie("id",n._config.id||null)("role",n._config.role)("aria-modal",n._config.ariaModal)("aria-labelledby",n._config.ariaLabel?null:n._ariaLabelledByQueue[0])("aria-label",n._config.ariaLabel)("aria-describedby",n._config.ariaDescribedBy||null)},features:[It],decls:1,vars:0,consts:[["cdkPortalOutlet",""]],template:function(i,n){i&1&&pt(0,q1A,0,0,"ng-template",0)},dependencies:[Yg],styles:[`.cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit} -`],encapsulation:2})}return t})(),p4=class{overlayRef;config;componentInstance=null;componentRef=null;containerInstance;disableClose;closed=new XA;backdropClick;keydownEvents;outsidePointerEvents;id;_detachSubscription;constructor(e,A){this.overlayRef=e,this.config=A,this.disableClose=A.disableClose,this.backdropClick=e.backdropClick(),this.keydownEvents=e.keydownEvents(),this.outsidePointerEvents=e.outsidePointerEvents(),this.id=A.id,this.keydownEvents.subscribe(i=>{i.keyCode===27&&!this.disableClose&&!pa(i)&&(i.preventDefault(),this.close(void 0,{focusOrigin:"keyboard"}))}),this.backdropClick.subscribe(()=>{!this.disableClose&&this._canClose()?this.close(void 0,{focusOrigin:"mouse"}):this.containerInstance._recaptureFocus?.()}),this._detachSubscription=e.detachments().subscribe(()=>{A.closeOnOverlayDetachments!==!1&&this.close()})}close(e,A){if(this._canClose(e)){let i=this.closed;this.containerInstance._closeInteractionType=A?.focusOrigin||"program",this._detachSubscription.unsubscribe(),this.overlayRef.dispose(),i.next(e),i.complete(),this.componentInstance=this.containerInstance=null}}updatePosition(){return this.overlayRef.updatePosition(),this}updateSize(e="",A=""){return this.overlayRef.updateSize({width:e,height:A}),this}addPanelClass(e){return this.overlayRef.addPanelClass(e),this}removePanelClass(e){return this.overlayRef.removePanelClass(e),this}_canClose(e){let A=this.config;return!!this.containerInstance&&(!A.closePredicate||A.closePredicate(e,A,this.componentInstance))}},V1A=new yA("DialogScrollStrategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>gE(t)}}),W1A=new yA("DialogData"),Z1A=new yA("DefaultDialogConfig");function X1A(t){let e=jA(t),A=new $A;return{valueSignal:e,get value(){return e()},change:A,ngOnDestroy(){A.complete()}}}var ok=(()=>{class t{_injector=h(ft);_defaultOptions=h(Z1A,{optional:!0});_parentDialog=h(t,{optional:!0,skipSelf:!0});_overlayContainer=h(t8);_idGenerator=h(an);_openDialogsAtThisLevel=[];_afterAllClosedAtThisLevel=new XA;_afterOpenedAtThisLevel=new XA;_ariaHiddenElements=new Map;_scrollStrategy=h(V1A);get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}afterAllClosed=i0(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(cn(void 0)));constructor(){}open(A,i){let n=this._defaultOptions||new K2;i=cA(cA({},n),i),i.id=i.id||this._idGenerator.getId("cdk-dialog-"),i.id&&this.getDialogById(i.id);let o=this._getOverlayConfig(i),a=lc(this._injector,o),r=new p4(a,i),s=this._attachContainer(a,r,i);if(r.containerInstance=s,!this.openDialogs.length){let g=this._overlayContainer.getContainerElement();s._focusTrapped?s._focusTrapped.pipe(oo(1)).subscribe(()=>{this._hideNonDialogContentFromAssistiveTechnology(g)}):this._hideNonDialogContentFromAssistiveTechnology(g)}return this._attachDialogContent(A,r,s,i),this.openDialogs.push(r),r.closed.subscribe(()=>this._removeOpenDialog(r,!0)),this.afterOpened.next(r),r}closeAll(){ik(this.openDialogs,A=>A.close())}getDialogById(A){return this.openDialogs.find(i=>i.id===A)}ngOnDestroy(){ik(this._openDialogsAtThisLevel,A=>{A.config.closeOnDestroy===!1&&this._removeOpenDialog(A,!1)}),ik(this._openDialogsAtThisLevel,A=>A.close()),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete(),this._openDialogsAtThisLevel=[]}_getOverlayConfig(A){let i=new sc({positionStrategy:A.positionStrategy||G2().centerHorizontally().centerVertically(),scrollStrategy:A.scrollStrategy||this._scrollStrategy(),panelClass:A.panelClass,hasBackdrop:A.hasBackdrop,direction:A.direction,minWidth:A.minWidth,minHeight:A.minHeight,maxWidth:A.maxWidth,maxHeight:A.maxHeight,width:A.width,height:A.height,disposeOnNavigation:A.closeOnNavigation,disableAnimations:A.disableAnimations});return A.backdropClass&&(i.backdropClass=A.backdropClass),i}_attachContainer(A,i,n){let o=n.injector||n.viewContainerRef?.injector,a=[{provide:K2,useValue:n},{provide:p4,useValue:i},{provide:rE,useValue:A}],r;n.container?typeof n.container=="function"?r=n.container:(r=n.container.type,a.push(...n.container.providers(n))):r=nk;let s=new Jg(r,n.viewContainerRef,ft.create({parent:o||this._injector,providers:a}));return A.attach(s).instance}_attachDialogContent(A,i,n,o){if(A instanceof Tn){let a=this._createInjector(o,i,n,void 0),r={$implicit:o.data,dialogRef:i};o.templateContext&&(r=cA(cA({},r),typeof o.templateContext=="function"?o.templateContext():o.templateContext)),n.attachTemplatePortal(new Is(A,null,r,a))}else{let a=this._createInjector(o,i,n,this._injector),r=n.attachComponentPortal(new Jg(A,o.viewContainerRef,a));i.componentRef=r,i.componentInstance=r.instance}}_createInjector(A,i,n,o){let a=A.injector||A.viewContainerRef?.injector,r=[{provide:W1A,useValue:A.data},{provide:p4,useValue:i}];return A.providers&&(typeof A.providers=="function"?r.push(...A.providers(i,A,n)):r.push(...A.providers)),A.direction&&(!a||!a.get(Ro,null,{optional:!0}))&&r.push({provide:Ro,useValue:X1A(A.direction)}),ft.create({parent:a||o,providers:r})}_removeOpenDialog(A,i){let n=this.openDialogs.indexOf(A);n>-1&&(this.openDialogs.splice(n,1),this.openDialogs.length||(this._ariaHiddenElements.forEach((o,a)=>{o?a.setAttribute("aria-hidden",o):a.removeAttribute("aria-hidden")}),this._ariaHiddenElements.clear(),i&&this._getAfterAllClosed().next()))}_hideNonDialogContentFromAssistiveTechnology(A){if(A.parentElement){let i=A.parentElement.children;for(let n=i.length-1;n>-1;n--){let o=i[n];o!==A&&o.nodeName!=="SCRIPT"&&o.nodeName!=="STYLE"&&!o.hasAttribute("aria-live")&&!o.hasAttribute("popover")&&(this._ariaHiddenElements.set(o,o.getAttribute("aria-hidden")),o.setAttribute("aria-hidden","true"))}}}_getAfterAllClosed(){let A=this._parentDialog;return A?A._getAfterAllClosed():this._afterAllClosedAtThisLevel}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function ik(t,e){let A=t.length;for(;A--;)e(t[A])}var cz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[ok],imports:[Cl,d0,bu,d0]})}return t})();function $1A(t,e){}var a8=class{viewContainerRef;injector;id;role="dialog";panelClass="";hasBackdrop=!0;backdropClass="";disableClose=!1;closePredicate;width="";height="";minWidth;minHeight;maxWidth;maxHeight;position;data=null;direction;ariaDescribedBy=null;ariaLabelledBy=null;ariaLabel=null;ariaModal=!1;autoFocus="first-tabbable";restoreFocus=!0;delayFocusTrap=!0;scrollStrategy;closeOnNavigation=!0;enterAnimationDuration;exitAnimationDuration},ak="mdc-dialog--open",Cz="mdc-dialog--opening",Iz="mdc-dialog--closing",AdA=150,edA=75,tdA=(()=>{class t extends nk{_animationStateChanged=new $A;_animationsEnabled=!ji();_actionSectionCount=0;_hostElement=this._elementRef.nativeElement;_enterAnimationDuration=this._animationsEnabled?Bz(this._config.enterAnimationDuration)??AdA:0;_exitAnimationDuration=this._animationsEnabled?Bz(this._config.exitAnimationDuration)??edA:0;_animationTimer=null;_contentAttached(){super._contentAttached(),this._startOpenAnimation()}_startOpenAnimation(){this._animationStateChanged.emit({state:"opening",totalTime:this._enterAnimationDuration}),this._animationsEnabled?(this._hostElement.style.setProperty(dz,`${this._enterAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(Cz,ak)),this._waitForAnimationToComplete(this._enterAnimationDuration,this._finishDialogOpen)):(this._hostElement.classList.add(ak),Promise.resolve().then(()=>this._finishDialogOpen()))}_startExitAnimation(){this._animationStateChanged.emit({state:"closing",totalTime:this._exitAnimationDuration}),this._hostElement.classList.remove(ak),this._animationsEnabled?(this._hostElement.style.setProperty(dz,`${this._exitAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(Iz)),this._waitForAnimationToComplete(this._exitAnimationDuration,this._finishDialogClose)):Promise.resolve().then(()=>this._finishDialogClose())}_updateActionSectionCount(A){this._actionSectionCount+=A,this._changeDetectorRef.markForCheck()}_finishDialogOpen=()=>{this._clearAnimationClasses(),this._openAnimationDone(this._enterAnimationDuration)};_finishDialogClose=()=>{this._clearAnimationClasses(),this._animationStateChanged.emit({state:"closed",totalTime:this._exitAnimationDuration})};_clearAnimationClasses(){this._hostElement.classList.remove(Cz,Iz)}_waitForAnimationToComplete(A,i){this._animationTimer!==null&&clearTimeout(this._animationTimer),this._animationTimer=setTimeout(i,A)}_requestAnimationFrame(A){this._ngZone.runOutsideAngular(()=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(A):A()})}_captureInitialFocus(){this._config.delayFocusTrap||this._trapFocus()}_openAnimationDone(A){this._config.delayFocusTrap&&this._trapFocus(),this._animationStateChanged.next({state:"opened",totalTime:A})}ngOnDestroy(){super.ngOnDestroy(),this._animationTimer!==null&&clearTimeout(this._animationTimer)}attachComponentPortal(A){let i=super.attachComponentPortal(A);return i.location.nativeElement.classList.add("mat-mdc-dialog-component-host"),i}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-dialog-container"]],hostAttrs:["tabindex","-1",1,"mat-mdc-dialog-container","mdc-dialog"],hostVars:10,hostBindings:function(i,n){i&2&&(vo("id",n._config.id),ie("aria-modal",n._config.ariaModal)("role",n._config.role)("aria-labelledby",n._config.ariaLabel?null:n._ariaLabelledByQueue[0])("aria-label",n._config.ariaLabel)("aria-describedby",n._config.ariaDescribedBy||null),ne("_mat-animation-noopable",!n._animationsEnabled)("mat-mdc-dialog-container-with-actions",n._actionSectionCount>0))},features:[It],decls:3,vars:0,consts:[[1,"mat-mdc-dialog-inner-container","mdc-dialog__container"],[1,"mat-mdc-dialog-surface","mdc-dialog__surface"],["cdkPortalOutlet",""]],template:function(i,n){i&1&&(m(0,"div",0)(1,"div",1),pt(2,$1A,0,0,"ng-template",2),w()())},dependencies:[Yg],styles:[`.mat-mdc-dialog-container{width:100%;height:100%;display:block;box-sizing:border-box;max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;outline:0}.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-max-width, 560px);min-width:var(--mat-dialog-container-min-width, 280px)}@media(max-width: 599px){.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-small-max-width, calc(100vw - 32px))}}.mat-mdc-dialog-inner-container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;opacity:0;transition:opacity linear var(--mat-dialog-transition-duration, 0ms);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mdc-dialog--closing .mat-mdc-dialog-inner-container{transition:opacity 75ms linear;transform:none}.mdc-dialog--open .mat-mdc-dialog-inner-container{opacity:1}._mat-animation-noopable .mat-mdc-dialog-inner-container{transition:none}.mat-mdc-dialog-surface{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;width:100%;height:100%;position:relative;overflow-y:auto;outline:0;transform:scale(0.8);transition:transform var(--mat-dialog-transition-duration, 0ms) cubic-bezier(0, 0, 0.2, 1);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;box-shadow:var(--mat-dialog-container-elevation-shadow, none);border-radius:var(--mat-dialog-container-shape, var(--mat-sys-corner-extra-large, 4px));background-color:var(--mat-dialog-container-color, var(--mat-sys-surface, white))}[dir=rtl] .mat-mdc-dialog-surface{text-align:right}.mdc-dialog--open .mat-mdc-dialog-surface,.mdc-dialog--closing .mat-mdc-dialog-surface{transform:none}._mat-animation-noopable .mat-mdc-dialog-surface{transition:none}.mat-mdc-dialog-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mat-mdc-dialog-title{display:block;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:var(--mat-dialog-headline-padding, 6px 24px 13px)}.mat-mdc-dialog-title::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}[dir=rtl] .mat-mdc-dialog-title{text-align:right}.mat-mdc-dialog-container .mat-mdc-dialog-title{color:var(--mat-dialog-subhead-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-dialog-subhead-font, var(--mat-sys-headline-small-font, inherit));line-height:var(--mat-dialog-subhead-line-height, var(--mat-sys-headline-small-line-height, 1.5rem));font-size:var(--mat-dialog-subhead-size, var(--mat-sys-headline-small-size, 1rem));font-weight:var(--mat-dialog-subhead-weight, var(--mat-sys-headline-small-weight, 400));letter-spacing:var(--mat-dialog-subhead-tracking, var(--mat-sys-headline-small-tracking, 0.03125em))}.mat-mdc-dialog-content{display:block;flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;max-height:65vh}.mat-mdc-dialog-content>:first-child{margin-top:0}.mat-mdc-dialog-content>:last-child{margin-bottom:0}.mat-mdc-dialog-container .mat-mdc-dialog-content{color:var(--mat-dialog-supporting-text-color, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, 0.6)));font-family:var(--mat-dialog-supporting-text-font, var(--mat-sys-body-medium-font, inherit));line-height:var(--mat-dialog-supporting-text-line-height, var(--mat-sys-body-medium-line-height, 1.5rem));font-size:var(--mat-dialog-supporting-text-size, var(--mat-sys-body-medium-size, 1rem));font-weight:var(--mat-dialog-supporting-text-weight, var(--mat-sys-body-medium-weight, 400));letter-spacing:var(--mat-dialog-supporting-text-tracking, var(--mat-sys-body-medium-tracking, 0.03125em))}.mat-mdc-dialog-container .mat-mdc-dialog-content{padding:var(--mat-dialog-content-padding, 20px 24px)}.mat-mdc-dialog-container-with-actions .mat-mdc-dialog-content{padding:var(--mat-dialog-with-actions-content-padding, 20px 24px 0)}.mat-mdc-dialog-container .mat-mdc-dialog-title+.mat-mdc-dialog-content{padding-top:0}.mat-mdc-dialog-actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;box-sizing:border-box;min-height:52px;margin:0;border-top:1px solid rgba(0,0,0,0);padding:var(--mat-dialog-actions-padding, 16px 24px);justify-content:var(--mat-dialog-actions-alignment, flex-end)}@media(forced-colors: active){.mat-mdc-dialog-actions{border-top-color:CanvasText}}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-start,.mat-mdc-dialog-actions[align=start]{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}.mat-mdc-dialog-component-host{display:contents} -`],encapsulation:2})}return t})(),dz="--mat-dialog-transition-duration";function Bz(t){return t==null?null:typeof t=="number"?t:t.endsWith("ms")?tg(t.substring(0,t.length-2)):t.endsWith("s")?tg(t.substring(0,t.length-1))*1e3:t==="0"?0:null}var o8=(function(t){return t[t.OPEN=0]="OPEN",t[t.CLOSING=1]="CLOSING",t[t.CLOSED=2]="CLOSED",t})(o8||{}),bo=class{_ref;_config;_containerInstance;componentInstance;componentRef=null;disableClose;id;_afterOpened=new ql(1);_beforeClosed=new ql(1);_result;_closeFallbackTimeout;_state=o8.OPEN;_closeInteractionType;constructor(e,A,i){this._ref=e,this._config=A,this._containerInstance=i,this.disableClose=A.disableClose,this.id=e.id,e.addPanelClass("mat-mdc-dialog-panel"),i._animationStateChanged.pipe(Ze(n=>n.state==="opened"),oo(1)).subscribe(()=>{this._afterOpened.next(),this._afterOpened.complete()}),i._animationStateChanged.pipe(Ze(n=>n.state==="closed"),oo(1)).subscribe(()=>{clearTimeout(this._closeFallbackTimeout),this._finishDialogClose()}),e.overlayRef.detachments().subscribe(()=>{this._beforeClosed.next(this._result),this._beforeClosed.complete(),this._finishDialogClose()}),fi(this.backdropClick(),this.keydownEvents().pipe(Ze(n=>n.keyCode===27&&!this.disableClose&&!pa(n)))).subscribe(n=>{this.disableClose||(n.preventDefault(),Ez(this,n.type==="keydown"?"keyboard":"mouse"))})}close(e){let A=this._config.closePredicate;A&&!A(e,this._config,this.componentInstance)||(this._result=e,this._containerInstance._animationStateChanged.pipe(Ze(i=>i.state==="closing"),oo(1)).subscribe(i=>{this._beforeClosed.next(e),this._beforeClosed.complete(),this._ref.overlayRef.detachBackdrop(),this._closeFallbackTimeout=setTimeout(()=>this._finishDialogClose(),i.totalTime+100)}),this._state=o8.CLOSING,this._containerInstance._startExitAnimation())}afterOpened(){return this._afterOpened}afterClosed(){return this._ref.closed}beforeClosed(){return this._beforeClosed}backdropClick(){return this._ref.backdropClick}keydownEvents(){return this._ref.keydownEvents}updatePosition(e){let A=this._ref.config.positionStrategy;return e&&(e.left||e.right)?e.left?A.left(e.left):A.right(e.right):A.centerHorizontally(),e&&(e.top||e.bottom)?e.top?A.top(e.top):A.bottom(e.bottom):A.centerVertically(),this._ref.updatePosition(),this}updateSize(e="",A=""){return this._ref.updateSize(e,A),this}addPanelClass(e){return this._ref.addPanelClass(e),this}removePanelClass(e){return this._ref.removePanelClass(e),this}getState(){return this._state}_finishDialogClose(){this._state=o8.CLOSED,this._ref.close(this._result,{focusOrigin:this._closeInteractionType}),this.componentInstance=null}};function Ez(t,e,A){return t._closeInteractionType=e,t.close(A)}var Ca=new yA("MatMdcDialogData"),idA=new yA("mat-mdc-dialog-default-options"),ndA=new yA("mat-mdc-dialog-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>gE(t)}}),Gs=(()=>{class t{_defaultOptions=h(idA,{optional:!0});_scrollStrategy=h(ndA);_parentDialog=h(t,{optional:!0,skipSelf:!0});_idGenerator=h(an);_injector=h(ft);_dialog=h(ok);_animationsDisabled=ji();_openDialogsAtThisLevel=[];_afterAllClosedAtThisLevel=new XA;_afterOpenedAtThisLevel=new XA;dialogConfigClass=a8;_dialogRefConstructor;_dialogContainerType;_dialogDataToken;get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}_getAfterAllClosed(){let A=this._parentDialog;return A?A._getAfterAllClosed():this._afterAllClosedAtThisLevel}afterAllClosed=i0(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(cn(void 0)));constructor(){this._dialogRefConstructor=bo,this._dialogContainerType=tdA,this._dialogDataToken=Ca}open(A,i){let n;i=cA(cA({},this._defaultOptions||new a8),i),i.id=i.id||this._idGenerator.getId("mat-mdc-dialog-"),i.scrollStrategy=i.scrollStrategy||this._scrollStrategy();let o=this._dialog.open(A,Ge(cA({},i),{positionStrategy:G2(this._injector).centerHorizontally().centerVertically(),disableClose:!0,closePredicate:void 0,closeOnDestroy:!1,closeOnOverlayDetachments:!1,disableAnimations:this._animationsDisabled||i.enterAnimationDuration?.toLocaleString()==="0"||i.exitAnimationDuration?.toString()==="0",container:{type:this._dialogContainerType,providers:()=>[{provide:this.dialogConfigClass,useValue:i},{provide:K2,useValue:i}]},templateContext:()=>({dialogRef:n}),providers:(a,r,s)=>(n=new this._dialogRefConstructor(a,i,s),n.updatePosition(i?.position),[{provide:this._dialogContainerType,useValue:s},{provide:this._dialogDataToken,useValue:r.data},{provide:this._dialogRefConstructor,useValue:n}])}));return n.componentRef=o.componentRef,n.componentInstance=o.componentInstance,this.openDialogs.push(n),this.afterOpened.next(n),n.afterClosed().subscribe(()=>{let a=this.openDialogs.indexOf(n);a>-1&&(this.openDialogs.splice(a,1),this.openDialogs.length||this._getAfterAllClosed().next())}),n}closeAll(){this._closeDialogs(this.openDialogs)}getDialogById(A){return this.openDialogs.find(i=>i.id===A)}ngOnDestroy(){this._closeDialogs(this._openDialogsAtThisLevel),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete()}_closeDialogs(A){let i=A.length;for(;i--;)A[i].close()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),B0=(()=>{class t{dialogRef=h(bo,{optional:!0});_elementRef=h(ge);_dialog=h(Gs);ariaLabel;type="button";dialogResult;_matDialogClose;constructor(){}ngOnInit(){this.dialogRef||(this.dialogRef=hz(this._elementRef,this._dialog.openDialogs))}ngOnChanges(A){let i=A._matDialogClose||A._matDialogCloseResult;i&&(this.dialogResult=i.currentValue)}_onButtonClick(A){Ez(this.dialogRef,A.screenX===0&&A.screenY===0?"keyboard":"mouse",this.dialogResult)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","mat-dialog-close",""],["","matDialogClose",""]],hostVars:2,hostBindings:function(i,n){i&1&&tA("click",function(a){return n._onButtonClick(a)}),i&2&&ie("aria-label",n.ariaLabel||null)("type",n.type)},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],type:"type",dialogResult:[0,"mat-dialog-close","dialogResult"],_matDialogClose:[0,"matDialogClose","_matDialogClose"]},exportAs:["matDialogClose"],features:[ti]})}return t})(),Qz=(()=>{class t{_dialogRef=h(bo,{optional:!0});_elementRef=h(ge);_dialog=h(Gs);constructor(){}ngOnInit(){this._dialogRef||(this._dialogRef=hz(this._elementRef,this._dialog.openDialogs)),this._dialogRef&&Promise.resolve().then(()=>{this._onAdd()})}ngOnDestroy(){this._dialogRef?._containerInstance&&Promise.resolve().then(()=>{this._onRemove()})}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t})}return t})(),Da=(()=>{class t extends Qz{id=h(an).getId("mat-mdc-dialog-title-");_onAdd(){this._dialogRef._containerInstance?._addAriaLabelledBy?.(this.id)}_onRemove(){this._dialogRef?._containerInstance?._removeAriaLabelledBy?.(this.id)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","mat-dialog-title",""],["","matDialogTitle",""]],hostAttrs:[1,"mat-mdc-dialog-title","mdc-dialog__title"],hostVars:1,hostBindings:function(i,n){i&2&&vo("id",n.id)},inputs:{id:"id"},exportAs:["matDialogTitle"],features:[It]})}return t})(),rr=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","mat-dialog-content",""],["mat-dialog-content"],["","matDialogContent",""]],hostAttrs:[1,"mat-mdc-dialog-content","mdc-dialog__content"],features:[sp([BC])]})}return t})(),Ua=(()=>{class t extends Qz{align;_onAdd(){this._dialogRef._containerInstance?._updateActionSectionCount?.(1)}_onRemove(){this._dialogRef._containerInstance?._updateActionSectionCount?.(-1)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","mat-dialog-actions",""],["mat-dialog-actions"],["","matDialogActions",""]],hostAttrs:[1,"mat-mdc-dialog-actions","mdc-dialog__actions"],hostVars:6,hostBindings:function(i,n){i&2&&ne("mat-mdc-dialog-actions-align-start",n.align==="start")("mat-mdc-dialog-actions-align-center",n.align==="center")("mat-mdc-dialog-actions-align-end",n.align==="end")},inputs:{align:"align"},features:[It]})}return t})();function hz(t,e){let A=t.nativeElement.parentElement;for(;A&&!A.classList.contains("mat-mdc-dialog-container");)A=A.parentElement;return A?e.find(i=>i.id===A.id):null}var uz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[Gs],imports:[cz,Cl,d0,Gi]})}return t})();var r8=(()=>{class t{get vertical(){return this._vertical}set vertical(A){this._vertical=yr(A)}_vertical=!1;get inset(){return this._inset}set inset(A){this._inset=yr(A)}_inset=!1;static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-divider"]],hostAttrs:["role","separator",1,"mat-divider"],hostVars:7,hostBindings:function(i,n){i&2&&(ie("aria-orientation",n.vertical?"vertical":"horizontal"),ne("mat-divider-vertical",n.vertical)("mat-divider-horizontal",!n.vertical)("mat-divider-inset",n.inset))},inputs:{vertical:"vertical",inset:"inset"},decls:0,vars:0,template:function(i,n){},styles:[`.mat-divider{display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color, var(--mat-sys-outline-variant));border-top-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color, var(--mat-sys-outline-variant));border-right-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px} -`],encapsulation:2,changeDetection:0})}return t})(),fz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();function mz(t){return Error(`Unable to find icon with the name "${t}"`)}function adA(){return Error("Could not find HttpClient for use with Angular Material icons. Please add provideHttpClient() to your providers.")}function pz(t){return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was "${t}".`)}function wz(t){return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by Angular's DomSanitizer. Attempted literal was "${t}".`)}var hC=class{url;svgText;options;svgElement=null;constructor(e,A,i){this.url=e,this.svgText=A,this.options=i}},yz=(()=>{class t{_httpClient;_sanitizer;_errorHandler;_document;_svgIconConfigs=new Map;_iconSetConfigs=new Map;_cachedIconsByUrl=new Map;_inProgressUrlFetches=new Map;_fontCssClassesByAlias=new Map;_resolvers=[];_defaultFontSetClass=["material-icons","mat-ligature-font"];constructor(A,i,n,o){this._httpClient=A,this._sanitizer=i,this._errorHandler=o,this._document=n}addSvgIcon(A,i,n){return this.addSvgIconInNamespace("",A,i,n)}addSvgIconLiteral(A,i,n){return this.addSvgIconLiteralInNamespace("",A,i,n)}addSvgIconInNamespace(A,i,n,o){return this._addSvgIconConfig(A,i,new hC(n,null,o))}addSvgIconResolver(A){return this._resolvers.push(A),this}addSvgIconLiteralInNamespace(A,i,n,o){let a=this._sanitizer.sanitize(Wl.HTML,n);if(!a)throw wz(n);let r=k1(a);return this._addSvgIconConfig(A,i,new hC("",r,o))}addSvgIconSet(A,i){return this.addSvgIconSetInNamespace("",A,i)}addSvgIconSetLiteral(A,i){return this.addSvgIconSetLiteralInNamespace("",A,i)}addSvgIconSetInNamespace(A,i,n){return this._addSvgIconSetConfig(A,new hC(i,null,n))}addSvgIconSetLiteralInNamespace(A,i,n){let o=this._sanitizer.sanitize(Wl.HTML,i);if(!o)throw wz(i);let a=k1(o);return this._addSvgIconSetConfig(A,new hC("",a,n))}registerFontClassAlias(A,i=A){return this._fontCssClassesByAlias.set(A,i),this}classNameForFontAlias(A){return this._fontCssClassesByAlias.get(A)||A}setDefaultFontSetClass(...A){return this._defaultFontSetClass=A,this}getDefaultFontSetClass(){return this._defaultFontSetClass}getSvgIconFromUrl(A){let i=this._sanitizer.sanitize(Wl.RESOURCE_URL,A);if(!i)throw pz(A);let n=this._cachedIconsByUrl.get(i);return n?se(s8(n)):this._loadSvgIconFromConfig(new hC(A,null)).pipe(oi(o=>this._cachedIconsByUrl.set(i,o)),fe(o=>s8(o)))}getNamedSvgIcon(A,i=""){let n=Dz(i,A),o=this._svgIconConfigs.get(n);if(o)return this._getSvgFromConfig(o);if(o=this._getIconConfigFromResolvers(i,A),o)return this._svgIconConfigs.set(n,o),this._getSvgFromConfig(o);let a=this._iconSetConfigs.get(i);return a?this._getSvgFromIconSetConfigs(A,a):Zm(mz(n))}ngOnDestroy(){this._resolvers=[],this._svgIconConfigs.clear(),this._iconSetConfigs.clear(),this._cachedIconsByUrl.clear()}_getSvgFromConfig(A){return A.svgText?se(s8(this._svgElementFromConfig(A))):this._loadSvgIconFromConfig(A).pipe(fe(i=>s8(i)))}_getSvgFromIconSetConfigs(A,i){let n=this._extractIconWithNameFromAnySet(A,i);if(n)return se(n);let o=i.filter(a=>!a.svgText).map(a=>this._loadSvgIconSetFromConfig(a).pipe(ta(r=>{let g=`Loading icon set URL: ${this._sanitizer.sanitize(Wl.RESOURCE_URL,a.url)} failed: ${r.message}`;return this._errorHandler.handleError(new Error(g)),se(null)})));return $m(o).pipe(fe(()=>{let a=this._extractIconWithNameFromAnySet(A,i);if(!a)throw mz(A);return a}))}_extractIconWithNameFromAnySet(A,i){for(let n=i.length-1;n>=0;n--){let o=i[n];if(o.svgText&&o.svgText.toString().indexOf(A)>-1){let a=this._svgElementFromConfig(o),r=this._extractSvgIconFromSet(a,A,o.options);if(r)return r}}return null}_loadSvgIconFromConfig(A){return this._fetchIcon(A).pipe(oi(i=>A.svgText=i),fe(()=>this._svgElementFromConfig(A)))}_loadSvgIconSetFromConfig(A){return A.svgText?se(null):this._fetchIcon(A).pipe(oi(i=>A.svgText=i))}_extractSvgIconFromSet(A,i,n){let o=A.querySelector(`[id="${i}"]`);if(!o)return null;let a=o.cloneNode(!0);if(a.removeAttribute("id"),a.nodeName.toLowerCase()==="svg")return this._setSvgAttributes(a,n);if(a.nodeName.toLowerCase()==="symbol")return this._setSvgAttributes(this._toSvgElement(a),n);let r=this._svgElementFromString(k1(""));return r.appendChild(a),this._setSvgAttributes(r,n)}_svgElementFromString(A){let i=this._document.createElement("DIV");i.innerHTML=A;let n=i.querySelector("svg");if(!n)throw Error(" tag not found");return n}_toSvgElement(A){let i=this._svgElementFromString(k1("")),n=A.attributes;for(let o=0;ok1(g)),ep(()=>this._inProgressUrlFetches.delete(a)),u2());return this._inProgressUrlFetches.set(a,s),s}_addSvgIconConfig(A,i,n){return this._svgIconConfigs.set(Dz(A,i),n),this}_addSvgIconSetConfig(A,i){let n=this._iconSetConfigs.get(A);return n?n.push(i):this._iconSetConfigs.set(A,[i]),this}_svgElementFromConfig(A){if(!A.svgElement){let i=this._svgElementFromString(A.svgText);this._setSvgAttributes(i,A.options),A.svgElement=i}return A.svgElement}_getIconConfigFromResolvers(A,i){for(let n=0;n{let t=h(Xt),e=t?t.location:null;return{getPathname:()=>e?e.pathname+e.search:""}}}),vz=["clip-path","color-profile","src","cursor","fill","filter","marker","marker-start","marker-mid","marker-end","mask","stroke"],cdA=vz.map(t=>`[${t}]`).join(", "),CdA=/^url\(['"]?#(.*?)['"]?\)$/,Fn=(()=>{class t{_elementRef=h(ge);_iconRegistry=h(yz);_location=h(ldA);_errorHandler=h(tp);_defaultColor;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;inline=!1;get svgIcon(){return this._svgIcon}set svgIcon(A){A!==this._svgIcon&&(A?this._updateSvgIcon(A):this._svgIcon&&this._clearSvgElement(),this._svgIcon=A)}_svgIcon;get fontSet(){return this._fontSet}set fontSet(A){let i=this._cleanupFontValue(A);i!==this._fontSet&&(this._fontSet=i,this._updateFontIconClasses())}_fontSet;get fontIcon(){return this._fontIcon}set fontIcon(A){let i=this._cleanupFontValue(A);i!==this._fontIcon&&(this._fontIcon=i,this._updateFontIconClasses())}_fontIcon;_previousFontSetClass=[];_previousFontIconClass;_svgName=null;_svgNamespace=null;_previousPath;_elementsWithExternalReferences;_currentIconFetch=Jn.EMPTY;constructor(){let A=h(new Ws("aria-hidden"),{optional:!0}),i=h(gdA,{optional:!0});i&&(i.color&&(this.color=this._defaultColor=i.color),i.fontSet&&(this.fontSet=i.fontSet)),A||this._elementRef.nativeElement.setAttribute("aria-hidden","true")}_splitIconName(A){if(!A)return["",""];let i=A.split(":");switch(i.length){case 1:return["",i[0]];case 2:return i;default:throw Error(`Invalid icon name: "${A}"`)}}ngOnInit(){this._updateFontIconClasses()}ngAfterViewChecked(){let A=this._elementsWithExternalReferences;if(A&&A.size){let i=this._location.getPathname();i!==this._previousPath&&(this._previousPath=i,this._prependPathToReferences(i))}}ngOnDestroy(){this._currentIconFetch.unsubscribe(),this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear()}_usingFontIcon(){return!this.svgIcon}_setSvgElement(A){this._clearSvgElement();let i=this._location.getPathname();this._previousPath=i,this._cacheChildrenWithExternalReferences(A),this._prependPathToReferences(i),this._elementRef.nativeElement.appendChild(A)}_clearSvgElement(){let A=this._elementRef.nativeElement,i=A.childNodes.length;for(this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear();i--;){let n=A.childNodes[i];(n.nodeType!==1||n.nodeName.toLowerCase()==="svg")&&n.remove()}}_updateFontIconClasses(){if(!this._usingFontIcon())return;let A=this._elementRef.nativeElement,i=(this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet).split(/ +/):this._iconRegistry.getDefaultFontSetClass()).filter(n=>n.length>0);this._previousFontSetClass.forEach(n=>A.classList.remove(n)),i.forEach(n=>A.classList.add(n)),this._previousFontSetClass=i,this.fontIcon!==this._previousFontIconClass&&!i.includes("mat-ligature-font")&&(this._previousFontIconClass&&A.classList.remove(this._previousFontIconClass),this.fontIcon&&A.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}_cleanupFontValue(A){return typeof A=="string"?A.trim().split(" ")[0]:A}_prependPathToReferences(A){let i=this._elementsWithExternalReferences;i&&i.forEach((n,o)=>{n.forEach(a=>{o.setAttribute(a.name,`url('${A}#${a.value}')`)})})}_cacheChildrenWithExternalReferences(A){let i=A.querySelectorAll(cdA),n=this._elementsWithExternalReferences=this._elementsWithExternalReferences||new Map;for(let o=0;o{let r=i[o],s=r.getAttribute(a),g=s?s.match(CdA):null;if(g){let l=n.get(r);l||(l=[],n.set(r,l)),l.push({name:a,value:g[1]})}})}_updateSvgIcon(A){if(this._svgNamespace=null,this._svgName=null,this._currentIconFetch.unsubscribe(),A){let[i,n]=this._splitIconName(A);i&&(this._svgNamespace=i),n&&(this._svgName=n),this._currentIconFetch=this._iconRegistry.getNamedSvgIcon(n,i).pipe(oo(1)).subscribe(o=>this._setSvgElement(o),o=>{let a=`Error retrieving icon ${i}:${n}! ${o.message}`;this._errorHandler.handleError(new Error(a))})}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-icon"]],hostAttrs:["role","img",1,"mat-icon","notranslate"],hostVars:10,hostBindings:function(i,n){i&2&&(ie("data-mat-icon-type",n._usingFontIcon()?"font":"svg")("data-mat-icon-name",n._svgName||n.fontIcon)("data-mat-icon-namespace",n._svgNamespace||n.fontSet)("fontIcon",n._usingFontIcon()?n.fontIcon:null),Po(n.color?"mat-"+n.color:""),ne("mat-icon-inline",n.inline)("mat-icon-no-color",n.color!=="primary"&&n.color!=="accent"&&n.color!=="warn"))},inputs:{color:"color",inline:[2,"inline","inline",he],svgIcon:"svgIcon",fontSet:"fontSet",fontIcon:"fontIcon"},exportAs:["matIcon"],ngContentSelectors:sdA,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),Ke(0))},styles:[`mat-icon,mat-icon.mat-primary,mat-icon.mat-accent,mat-icon.mat-warn{color:var(--mat-icon-color, inherit)}.mat-icon{-webkit-user-select:none;user-select:none;background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px;overflow:hidden}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.mat-icon.mat-ligature-font[fontIcon]::before{content:attr(fontIcon)}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto} -`],encapsulation:2,changeDetection:0})}return t})(),Il=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var bz=(()=>{class t{_animationsDisabled=ji();state="unchecked";disabled=!1;appearance="full";constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-pseudo-checkbox"]],hostAttrs:[1,"mat-pseudo-checkbox"],hostVars:12,hostBindings:function(i,n){i&2&&ne("mat-pseudo-checkbox-indeterminate",n.state==="indeterminate")("mat-pseudo-checkbox-checked",n.state==="checked")("mat-pseudo-checkbox-disabled",n.disabled)("mat-pseudo-checkbox-minimal",n.appearance==="minimal")("mat-pseudo-checkbox-full",n.appearance==="full")("_mat-animation-noopable",n._animationsDisabled)},inputs:{state:"state",disabled:"disabled",appearance:"appearance"},decls:0,vars:0,template:function(i,n){},styles:[`.mat-pseudo-checkbox{border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1),background-color 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:"";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox._mat-animation-noopable{transition:none !important;animation:none !important}.mat-pseudo-checkbox._mat-animation-noopable::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{left:1px;opacity:1;border-radius:2px}.mat-pseudo-checkbox-checked::after{left:1px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-minimal-selected-checkmark-color, var(--mat-sys-primary))}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full{border-color:var(--mat-pseudo-checkbox-full-unselected-icon-color, var(--mat-sys-on-surface-variant));border-width:2px;border-style:solid}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-disabled{border-color:var(--mat-pseudo-checkbox-full-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate{background-color:var(--mat-pseudo-checkbox-full-selected-icon-color, var(--mat-sys-primary));border-color:rgba(0,0,0,0)}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{color:var(--mat-pseudo-checkbox-full-selected-checkmark-color, var(--mat-sys-on-primary))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background-color:var(--mat-pseudo-checkbox-full-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled::after,.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled::after{color:var(--mat-pseudo-checkbox-full-disabled-selected-checkmark-color, var(--mat-sys-surface))}.mat-pseudo-checkbox{width:18px;height:18px}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-checked::after{width:14px;height:6px;transform-origin:center;top:-4.2426406871px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-minimal.mat-pseudo-checkbox-indeterminate::after{top:8px;width:16px}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-checked::after{width:10px;height:4px;transform-origin:center;top:-2.8284271247px;left:0;bottom:0;right:0;margin:auto}.mat-pseudo-checkbox-full.mat-pseudo-checkbox-indeterminate::after{top:6px;width:12px} -`],encapsulation:2,changeDetection:0})}return t})();var IdA=["text"],ddA=[[["mat-icon"]],"*"],BdA=["mat-icon","*"];function EdA(t,e){if(t&1&&GA(0,"mat-pseudo-checkbox",1),t&2){let A=v();$("disabled",A.disabled)("state",A.selected?"checked":"unchecked")}}function QdA(t,e){if(t&1&&GA(0,"mat-pseudo-checkbox",3),t&2){let A=v();$("disabled",A.disabled)}}function hdA(t,e){if(t&1&&(m(0,"span",4),K(1),w()),t&2){let A=v();p(),Se("(",A.group.label,")")}}var c8=new yA("MAT_OPTION_PARENT_COMPONENT"),C8=new yA("MatOptgroup");var l8=class{source;isUserInput;constructor(e,A=!1){this.source=e,this.isUserInput=A}},Hr=(()=>{class t{_element=h(ge);_changeDetectorRef=h(Dt);_parent=h(c8,{optional:!0});group=h(C8,{optional:!0});_signalDisableRipple=!1;_selected=!1;_active=!1;_mostRecentViewValue="";get multiple(){return this._parent&&this._parent.multiple}get selected(){return this._selected}value;id=h(an).getId("mat-option-");get disabled(){return this.group&&this.group.disabled||this._disabled()}set disabled(A){this._disabled.set(A)}_disabled=jA(!1);get disableRipple(){return this._signalDisableRipple?this._parent.disableRipple():!!this._parent?.disableRipple}get hideSingleSelectionIndicator(){return!!(this._parent&&this._parent.hideSingleSelectionIndicator)}onSelectionChange=new $A;_text;_stateChanges=new XA;constructor(){let A=h(Xn);A.load(dr),A.load(M2),this._signalDisableRipple=!!this._parent&&w1(this._parent.disableRipple)}get active(){return this._active}get viewValue(){return(this._text?.nativeElement.textContent||"").trim()}select(A=!0){this._selected||(this._selected=!0,this._changeDetectorRef.markForCheck(),A&&this._emitSelectionChangeEvent())}deselect(A=!0){this._selected&&(this._selected=!1,this._changeDetectorRef.markForCheck(),A&&this._emitSelectionChangeEvent())}focus(A,i){let n=this._getHostElement();typeof n.focus=="function"&&n.focus(i)}setActiveStyles(){this._active||(this._active=!0,this._changeDetectorRef.markForCheck())}setInactiveStyles(){this._active&&(this._active=!1,this._changeDetectorRef.markForCheck())}getLabel(){return this.viewValue}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!pa(A)&&(this._selectViaInteraction(),A.preventDefault())}_selectViaInteraction(){this.disabled||(this._selected=this.multiple?!this._selected:!0,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent(!0))}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._element.nativeElement}ngAfterViewChecked(){if(this._selected){let A=this.viewValue;A!==this._mostRecentViewValue&&(this._mostRecentViewValue&&this._stateChanges.next(),this._mostRecentViewValue=A)}}ngOnDestroy(){this._stateChanges.complete()}_emitSelectionChangeEvent(A=!1){this.onSelectionChange.emit(new l8(this,A))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-option"]],viewQuery:function(i,n){if(i&1&&ai(IdA,7),i&2){let o;ce(o=Ce())&&(n._text=o.first)}},hostAttrs:["role","option",1,"mat-mdc-option","mdc-list-item"],hostVars:11,hostBindings:function(i,n){i&1&&tA("click",function(){return n._selectViaInteraction()})("keydown",function(a){return n._handleKeydown(a)}),i&2&&(vo("id",n.id),ie("aria-selected",n.selected)("aria-disabled",n.disabled.toString()),ne("mdc-list-item--selected",n.selected)("mat-mdc-option-multiple",n.multiple)("mat-mdc-option-active",n.active)("mdc-list-item--disabled",n.disabled))},inputs:{value:"value",id:"id",disabled:[2,"disabled","disabled",he]},outputs:{onSelectionChange:"onSelectionChange"},exportAs:["matOption"],ngContentSelectors:BdA,decls:8,vars:5,consts:[["text",""],["aria-hidden","true",1,"mat-mdc-option-pseudo-checkbox",3,"disabled","state"],[1,"mdc-list-item__primary-text"],["state","checked","aria-hidden","true","appearance","minimal",1,"mat-mdc-option-pseudo-checkbox",3,"disabled"],[1,"cdk-visually-hidden"],["aria-hidden","true","mat-ripple","",1,"mat-mdc-option-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled"]],template:function(i,n){i&1&&(Yt(ddA),V(0,EdA,1,2,"mat-pseudo-checkbox",1),Ke(1),m(2,"span",2,0),Ke(4,1),w(),V(5,QdA,1,1,"mat-pseudo-checkbox",3),V(6,hdA,2,1,"span",4),GA(7,"div",5)),i&2&&(W(n.multiple?0:-1),p(5),W(!n.multiple&&n.selected&&!n.hideSingleSelectionIndicator?5:-1),p(),W(n.group&&n.group._inert?6:-1),p(),$("matRippleTrigger",n._getHostElement())("matRippleDisabled",n.disabled||n.disableRipple))},dependencies:[bz,ig],styles:[`.mat-mdc-option{-webkit-user-select:none;user-select:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;min-height:48px;padding:0 16px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);color:var(--mat-option-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-option-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-option-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-option-label-text-size, var(--mat-sys-body-large-size));letter-spacing:var(--mat-option-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-option-label-text-weight, var(--mat-sys-body-large-weight))}.mat-mdc-option:hover:not(.mdc-list-item--disabled){background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:var(--mat-option-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));outline:0}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-active,.mat-mdc-option-multiple,:focus,:hover){background-color:var(--mat-option-selected-state-layer-color, var(--mat-sys-secondary-container))}.mat-mdc-option.mdc-list-item--selected:not(.mdc-list-item--disabled):not(.mat-mdc-option-active,.mat-mdc-option-multiple,:focus,:hover) .mdc-list-item__primary-text{color:var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option .mat-pseudo-checkbox{--mat-pseudo-checkbox-minimal-selected-checkmark-color: var(--mat-option-selected-state-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-option.mdc-list-item{align-items:center;background:rgba(0,0,0,0)}.mat-mdc-option.mdc-list-item--disabled{cursor:default;pointer-events:none}.mat-mdc-option.mdc-list-item--disabled .mat-mdc-option-pseudo-checkbox,.mat-mdc-option.mdc-list-item--disabled .mdc-list-item__primary-text,.mat-mdc-option.mdc-list-item--disabled>mat-icon{opacity:.38}.mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:32px}[dir=rtl] .mat-mdc-optgroup .mat-mdc-option:not(.mat-mdc-option-multiple){padding-left:16px;padding-right:32px}.mat-mdc-option .mat-icon,.mat-mdc-option .mat-pseudo-checkbox-full{margin-right:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-icon,[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-full{margin-right:0;margin-left:16px}.mat-mdc-option .mat-pseudo-checkbox-minimal{margin-left:16px;flex-shrink:0}[dir=rtl] .mat-mdc-option .mat-pseudo-checkbox-minimal{margin-right:16px;margin-left:0}.mat-mdc-option .mat-mdc-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-option .mdc-list-item__primary-text{white-space:normal;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;font-family:inherit;text-decoration:inherit;text-transform:inherit;margin-right:auto}[dir=rtl] .mat-mdc-option .mdc-list-item__primary-text{margin-right:0;margin-left:auto}@media(forced-colors: active){.mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{content:"";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}[dir=rtl] .mat-mdc-option.mdc-list-item--selected:not(:has(.mat-mdc-option-pseudo-checkbox))::after{right:auto;left:16px}}.mat-mdc-option-multiple{--mat-list-list-item-selected-container-color: var(--mat-list-list-item-container-color, transparent)}.mat-mdc-option-active .mat-focus-indicator::before{content:""} -`],encapsulation:2,changeDetection:0})}return t})();function rk(t,e,A){if(A.length){let i=e.toArray(),n=A.toArray(),o=0;for(let a=0;aA+i?Math.max(0,t-i+e):A}var D4=(()=>{class t{_listeners=[];notify(A,i){for(let n of this._listeners)n(A,i)}listen(A){return this._listeners.push(A),()=>{this._listeners=this._listeners.filter(i=>A!==i)}}ngOnDestroy(){this._listeners=[]}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var I8=class{applyChanges(e,A,i,n,o){e.forEachOperation((a,r,s)=>{let g,l;if(a.previousIndex==null){let C=i(a,r,s);g=A.createEmbeddedView(C.templateRef,C.context,C.index),l=rc.INSERTED}else s==null?(A.remove(r),l=rc.REMOVED):(g=A.get(r),A.move(g,s),l=rc.MOVED);o&&o({context:g?.context,operation:l,record:a})})}detach(){}};var V1=class{_multiple;_emitChanges;compareWith;_selection=new Set;_deselectedToEmit=[];_selectedToEmit=[];_selected=null;get selected(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected}changed=new XA;constructor(e=!1,A,i=!0,n){this._multiple=e,this._emitChanges=i,this.compareWith=n,A&&A.length&&(e?A.forEach(o=>this._markSelected(o)):this._markSelected(A[0]),this._selectedToEmit.length=0)}select(...e){this._verifyValueAssignment(e),e.forEach(i=>this._markSelected(i));let A=this._hasQueuedChanges();return this._emitChangeEvent(),A}deselect(...e){this._verifyValueAssignment(e),e.forEach(i=>this._unmarkSelected(i));let A=this._hasQueuedChanges();return this._emitChangeEvent(),A}setSelection(...e){this._verifyValueAssignment(e);let A=this.selected,i=new Set(e.map(o=>this._getConcreteValue(o)));e.forEach(o=>this._markSelected(o)),A.filter(o=>!i.has(this._getConcreteValue(o,i))).forEach(o=>this._unmarkSelected(o));let n=this._hasQueuedChanges();return this._emitChangeEvent(),n}toggle(e){return this.isSelected(e)?this.deselect(e):this.select(e)}clear(e=!0){this._unmarkAll();let A=this._hasQueuedChanges();return e&&this._emitChangeEvent(),A}isSelected(e){return this._selection.has(this._getConcreteValue(e))}isEmpty(){return this._selection.size===0}hasValue(){return!this.isEmpty()}sort(e){this._multiple&&this.selected&&this._selected.sort(e)}isMultipleSelection(){return this._multiple}_emitChangeEvent(){this._selected=null,(this._selectedToEmit.length||this._deselectedToEmit.length)&&(this.changed.next({source:this,added:this._selectedToEmit,removed:this._deselectedToEmit}),this._deselectedToEmit=[],this._selectedToEmit=[])}_markSelected(e){e=this._getConcreteValue(e),this.isSelected(e)||(this._multiple||this._unmarkAll(),this.isSelected(e)||this._selection.add(e),this._emitChanges&&this._selectedToEmit.push(e))}_unmarkSelected(e){e=this._getConcreteValue(e),this.isSelected(e)&&(this._selection.delete(e),this._emitChanges&&this._deselectedToEmit.push(e))}_unmarkAll(){this.isEmpty()||this._selection.forEach(e=>this._unmarkSelected(e))}_verifyValueAssignment(e){e.length>1&&this._multiple}_hasQueuedChanges(){return!!(this._deselectedToEmit.length||this._selectedToEmit.length)}_getConcreteValue(e,A){if(this.compareWith){A=A??this._selection;for(let i of A)if(this.compareWith(e,i))return i;return e}else return e}};var Mz=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var gk=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[x2,Mz,Hr,Gi]})}return t})();var udA=["trigger"],fdA=["panel"],mdA=[[["mat-select-trigger"]],"*"],pdA=["mat-select-trigger","*"];function wdA(t,e){if(t&1&&(m(0,"span",4),K(1),w()),t&2){let A=v();p(),qA(A.placeholder)}}function DdA(t,e){t&1&&Ke(0)}function ydA(t,e){if(t&1&&(m(0,"span",11),K(1),w()),t&2){let A=v(2);p(),qA(A.triggerValue)}}function vdA(t,e){if(t&1&&(m(0,"span",5),V(1,DdA,1,0)(2,ydA,2,1,"span",11),w()),t&2){let A=v();p(),W(A.customTrigger?1:2)}}function bdA(t,e){if(t&1){let A=JA();m(0,"div",12,1),tA("keydown",function(n){Z(A);let o=v();return X(o._handleKeydown(n))}),Ke(2,1),w()}if(t&2){let A=v();Po(DU("mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open ",A._getPanelTheme())),ne("mat-select-panel-animations-enabled",!A._animationsDisabled),$("ngClass",A.panelClass),ie("id",A.id+"-panel")("aria-multiselectable",A.multiple)("aria-label",A.ariaLabel||null)("aria-labelledby",A._getPanelAriaLabelledby())}}var MdA=new yA("mat-select-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>EC(t)}}),kdA=new yA("MAT_SELECT_CONFIG"),SdA=new yA("MatSelectTrigger"),lk=class{source;value;constructor(e,A){this.source=e,this.value=A}},Bl=(()=>{class t{_viewportRuler=h(Ls);_changeDetectorRef=h(Dt);_elementRef=h(ge);_dir=h(Ro,{optional:!0});_idGenerator=h(an);_renderer=h(_i);_parentFormField=h(Uu,{optional:!0});ngControl=h(eg,{self:!0,optional:!0});_liveAnnouncer=h(vu);_defaultOptions=h(kdA,{optional:!0});_animationsDisabled=ji();_popoverLocation;_initialized=new XA;_cleanupDetach;options;optionGroups;customTrigger;_positions=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom",panelClass:"mat-mdc-select-panel-above"},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom",panelClass:"mat-mdc-select-panel-above"}];_scrollOptionIntoView(A){let i=this.options.toArray()[A];if(i){let n=this.panel.nativeElement,o=rk(A,this.options,this.optionGroups),a=i._getHostElement();A===0&&o===1?n.scrollTop=0:n.scrollTop=sk(a.offsetTop,a.offsetHeight,n.scrollTop,n.offsetHeight)}}_positioningSettled(){this._scrollOptionIntoView(this._keyManager.activeItemIndex||0)}_getChangeEvent(A){return new lk(this,A)}_scrollStrategyFactory=h(MdA);_panelOpen=!1;_compareWith=(A,i)=>A===i;_uid=this._idGenerator.getId("mat-select-");_triggerAriaLabelledBy=null;_previousControl;_destroy=new XA;_errorStateTracker;stateChanges=new XA;disableAutomaticLabeling=!0;userAriaDescribedBy;_selectionModel;_keyManager;_preferredOverlayOrigin;_overlayWidth;_onChange=()=>{};_onTouched=()=>{};_valueId=this._idGenerator.getId("mat-select-value-");_scrollStrategy;_overlayPanelClass=this._defaultOptions?.overlayPanelClass||"";get focused(){return this._focused||this._panelOpen}_focused=!1;controlType="mat-select";trigger;panel;_overlayDir;panelClass;disabled=!1;get disableRipple(){return this._disableRipple()}set disableRipple(A){this._disableRipple.set(A)}_disableRipple=jA(!1);tabIndex=0;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(A){this._hideSingleSelectionIndicator=A,this._syncParentProperties()}_hideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get placeholder(){return this._placeholder}set placeholder(A){this._placeholder=A,this.stateChanges.next()}_placeholder;get required(){return this._required??this.ngControl?.control?.hasValidator(Ag.required)??!1}set required(A){this._required=A,this.stateChanges.next()}_required;get multiple(){return this._multiple}set multiple(A){this._selectionModel,this._multiple=A}_multiple=!1;disableOptionCentering=this._defaultOptions?.disableOptionCentering??!1;get compareWith(){return this._compareWith}set compareWith(A){this._compareWith=A,this._selectionModel&&this._initializeSelection()}get value(){return this._value}set value(A){this._assignValue(A)&&this._onChange(A)}_value;ariaLabel="";ariaLabelledby;get errorStateMatcher(){return this._errorStateTracker.matcher}set errorStateMatcher(A){this._errorStateTracker.matcher=A}typeaheadDebounceInterval;sortComparator;get id(){return this._id}set id(A){this._id=A||this._uid,this.stateChanges.next()}_id;get errorState(){return this._errorStateTracker.errorState}set errorState(A){this._errorStateTracker.errorState=A}panelWidth=this._defaultOptions&&typeof this._defaultOptions.panelWidth<"u"?this._defaultOptions.panelWidth:"auto";canSelectNullableOptions=this._defaultOptions?.canSelectNullableOptions??!1;optionSelectionChanges=i0(()=>{let A=this.options;return A?A.changes.pipe(cn(A),Si(()=>fi(...A.map(i=>i.onSelectionChange)))):this._initialized.pipe(Si(()=>this.optionSelectionChanges))});openedChange=new $A;_openedStream=this.openedChange.pipe(Ze(A=>A),fe(()=>{}));_closedStream=this.openedChange.pipe(Ze(A=>!A),fe(()=>{}));selectionChange=new $A;valueChange=new $A;constructor(){let A=h(UB),i=h(SB,{optional:!0}),n=h(v2,{optional:!0}),o=h(new Ws("tabindex"),{optional:!0}),a=h(m4,{optional:!0});this.ngControl&&(this.ngControl.valueAccessor=this),this._defaultOptions?.typeaheadDebounceInterval!=null&&(this.typeaheadDebounceInterval=this._defaultOptions.typeaheadDebounceInterval),this._errorStateTracker=new JB(A,this.ngControl,n,i,this.stateChanges),this._scrollStrategy=this._scrollStrategyFactory(),this.tabIndex=o==null?0:parseInt(o)||0,this._popoverLocation=a?.usePopover===!1?null:"inline",this.id=this.id}ngOnInit(){this._selectionModel=new V1(this.multiple),this.stateChanges.next(),this._viewportRuler.change().pipe(Bt(this._destroy)).subscribe(()=>{this.panelOpen&&(this._overlayWidth=this._getOverlayWidth(this._preferredOverlayOrigin),this._changeDetectorRef.detectChanges())})}ngAfterContentInit(){this._initialized.next(),this._initialized.complete(),this._initKeyManager(),this._selectionModel.changed.pipe(Bt(this._destroy)).subscribe(A=>{A.added.forEach(i=>i.select()),A.removed.forEach(i=>i.deselect())}),this.options.changes.pipe(cn(null),Bt(this._destroy)).subscribe(()=>{this._resetOptions(),this._initializeSelection()})}ngDoCheck(){let A=this._getTriggerAriaLabelledby(),i=this.ngControl;if(A!==this._triggerAriaLabelledBy){let n=this._elementRef.nativeElement;this._triggerAriaLabelledBy=A,A?n.setAttribute("aria-labelledby",A):n.removeAttribute("aria-labelledby")}i&&(this._previousControl!==i.control&&(this._previousControl!==void 0&&i.disabled!==null&&i.disabled!==this.disabled&&(this.disabled=i.disabled),this._previousControl=i.control),this.updateErrorState())}ngOnChanges(A){(A.disabled||A.userAriaDescribedBy)&&this.stateChanges.next(),A.typeaheadDebounceInterval&&this._keyManager&&this._keyManager.withTypeAhead(this.typeaheadDebounceInterval)}ngOnDestroy(){this._cleanupDetach?.(),this._keyManager?.destroy(),this._destroy.next(),this._destroy.complete(),this.stateChanges.complete(),this._clearFromModal()}toggle(){this.panelOpen?this.close():this.open()}open(){this._canOpen()&&(this._parentFormField&&(this._preferredOverlayOrigin=this._parentFormField.getConnectedOverlayOrigin()),this._cleanupDetach?.(),this._overlayWidth=this._getOverlayWidth(this._preferredOverlayOrigin),this._applyModalPanelOwnership(),this._panelOpen=!0,this._overlayDir.positionChange.pipe(oo(1)).subscribe(()=>{this._changeDetectorRef.detectChanges(),this._positioningSettled()}),this._overlayDir.attachOverlay(),this._keyManager.withHorizontalOrientation(null),this._highlightCorrectOption(),this._changeDetectorRef.markForCheck(),this.stateChanges.next(),Promise.resolve().then(()=>this.openedChange.emit(!0)))}_trackedModal=null;_applyModalPanelOwnership(){let A=this._elementRef.nativeElement.closest('body > .cdk-overlay-container [aria-modal="true"]');if(!A)return;let i=`${this.id}-panel`;this._trackedModal&&Gp(this._trackedModal,"aria-owns",i),u9(A,"aria-owns",i),this._trackedModal=A}_clearFromModal(){if(!this._trackedModal)return;let A=`${this.id}-panel`;Gp(this._trackedModal,"aria-owns",A),this._trackedModal=null}close(){this._panelOpen&&(this._panelOpen=!1,this._exitAndDetach(),this._keyManager.withHorizontalOrientation(this._isRtl()?"rtl":"ltr"),this._changeDetectorRef.markForCheck(),this._onTouched(),this.stateChanges.next(),Promise.resolve().then(()=>this.openedChange.emit(!1)))}_exitAndDetach(){if(this._animationsDisabled||!this.panel){this._detachOverlay();return}this._cleanupDetach?.(),this._cleanupDetach=()=>{i(),clearTimeout(n),this._cleanupDetach=void 0};let A=this.panel.nativeElement,i=this._renderer.listen(A,"animationend",o=>{o.animationName==="_mat-select-exit"&&(this._cleanupDetach?.(),this._detachOverlay())}),n=setTimeout(()=>{this._cleanupDetach?.(),this._detachOverlay()},200);A.classList.add("mat-select-panel-exit")}_detachOverlay(){this._overlayDir.detachOverlay(),this._changeDetectorRef.markForCheck()}writeValue(A){this._assignValue(A)}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A,this._changeDetectorRef.markForCheck(),this.stateChanges.next()}get panelOpen(){return this._panelOpen}get selected(){return this.multiple?this._selectionModel?.selected||[]:this._selectionModel?.selected[0]}get triggerValue(){if(this.empty)return"";if(this._multiple){let A=this._selectionModel.selected.map(i=>i.viewValue);return this._isRtl()&&A.reverse(),A.join(", ")}return this._selectionModel.selected[0].viewValue}updateErrorState(){this._errorStateTracker.updateErrorState()}_isRtl(){return this._dir?this._dir.value==="rtl":!1}_handleKeydown(A){this.disabled||(this.panelOpen?this._handleOpenKeydown(A):this._handleClosedKeydown(A))}_handleClosedKeydown(A){let i=A.keyCode,n=i===40||i===38||i===37||i===39,o=i===13||i===32,a=this._keyManager;if(!a.isTyping()&&o&&!pa(A)||(this.multiple||A.altKey)&&n)A.preventDefault(),this.open();else if(!this.multiple){let r=this.selected;a.onKeydown(A);let s=this.selected;s&&r!==s&&this._liveAnnouncer.announce(s.viewValue,1e4)}}_handleOpenKeydown(A){let i=this._keyManager,n=A.keyCode,o=n===40||n===38,a=i.isTyping();if(o&&A.altKey)A.preventDefault(),this.close();else if(!a&&(n===13||n===32)&&i.activeItem&&!pa(A))A.preventDefault(),i.activeItem._selectViaInteraction();else if(!a&&this._multiple&&n===65&&A.ctrlKey){A.preventDefault();let r=this.options.some(s=>!s.disabled&&!s.selected);this.options.forEach(s=>{s.disabled||(r?s.select():s.deselect())})}else{let r=i.activeItemIndex;i.onKeydown(A),this._multiple&&o&&A.shiftKey&&i.activeItem&&i.activeItemIndex!==r&&i.activeItem._selectViaInteraction()}}_handleOverlayKeydown(A){A.keyCode===27&&!pa(A)&&(A.preventDefault(),this.close())}_onFocus(){this.disabled||(this._focused=!0,this.stateChanges.next())}_onBlur(){this._focused=!1,this._keyManager?.cancelTypeahead(),!this.disabled&&!this.panelOpen&&(this._onTouched(),this._changeDetectorRef.markForCheck(),this.stateChanges.next())}_getPanelTheme(){return this._parentFormField?`mat-${this._parentFormField.color}`:""}get empty(){return!this._selectionModel||this._selectionModel.isEmpty()}_initializeSelection(){Promise.resolve().then(()=>{this.ngControl&&(this._value=this.ngControl.value),this._setSelectionByValue(this._value),this.stateChanges.next()})}_setSelectionByValue(A){if(this.options.forEach(i=>i.setInactiveStyles()),this._selectionModel.clear(),this.multiple&&A)Array.isArray(A),A.forEach(i=>this._selectOptionByValue(i)),this._sortValues();else{let i=this._selectOptionByValue(A);i?this._keyManager.updateActiveItem(i):this.panelOpen||this._keyManager.updateActiveItem(-1)}this._changeDetectorRef.markForCheck()}_selectOptionByValue(A){let i=this.options.find(n=>{if(this._selectionModel.isSelected(n))return!1;try{return(n.value!=null||this.canSelectNullableOptions)&&this._compareWith(n.value,A)}catch{return!1}});return i&&this._selectionModel.select(i),i}_assignValue(A){return A!==this._value||this._multiple&&Array.isArray(A)?(this.options&&this._setSelectionByValue(A),this._value=A,!0):!1}_skipPredicate=A=>this.panelOpen?!1:A.disabled;_getOverlayWidth(A){return this.panelWidth==="auto"?(A instanceof sE?A.elementRef:A||this._elementRef).nativeElement.getBoundingClientRect().width:this.panelWidth===null?"":this.panelWidth}_syncParentProperties(){if(this.options)for(let A of this.options)A._changeDetectorRef.markForCheck()}_initKeyManager(){this._keyManager=new Ru(this.options).withTypeAhead(this.typeaheadDebounceInterval).withVerticalOrientation().withHorizontalOrientation(this._isRtl()?"rtl":"ltr").withHomeAndEnd().withPageUpDown().withAllowedModifierKeys(["shiftKey"]).skipPredicate(this._skipPredicate),this._keyManager.tabOut.subscribe(()=>{this.panelOpen&&(!this.multiple&&this._keyManager.activeItem&&this._keyManager.activeItem._selectViaInteraction(),this.focus(),this.close())}),this._keyManager.change.subscribe(()=>{this._panelOpen&&this.panel?this._scrollOptionIntoView(this._keyManager.activeItemIndex||0):!this._panelOpen&&!this.multiple&&this._keyManager.activeItem&&this._keyManager.activeItem._selectViaInteraction()})}_resetOptions(){let A=fi(this.options.changes,this._destroy);this.optionSelectionChanges.pipe(Bt(A)).subscribe(i=>{this._onSelect(i.source,i.isUserInput),i.isUserInput&&!this.multiple&&this._panelOpen&&(this.close(),this.focus())}),fi(...this.options.map(i=>i._stateChanges)).pipe(Bt(A)).subscribe(()=>{this._changeDetectorRef.detectChanges(),this.stateChanges.next()})}_onSelect(A,i){let n=this._selectionModel.isSelected(A);!this.canSelectNullableOptions&&A.value==null&&!this._multiple?(A.deselect(),this._selectionModel.clear(),this.value!=null&&this._propagateChanges(A.value)):(n!==A.selected&&(A.selected?this._selectionModel.select(A):this._selectionModel.deselect(A)),i&&this._keyManager.setActiveItem(A),this.multiple&&(this._sortValues(),i&&this.focus())),n!==this._selectionModel.isSelected(A)&&this._propagateChanges(),this.stateChanges.next()}_sortValues(){if(this.multiple){let A=this.options.toArray();this._selectionModel.sort((i,n)=>this.sortComparator?this.sortComparator(i,n,A):A.indexOf(i)-A.indexOf(n)),this.stateChanges.next()}}_propagateChanges(A){let i;this.multiple?i=this.selected.map(n=>n.value):i=this.selected?this.selected.value:A,this._value=i,this.valueChange.emit(i),this._onChange(i),this.selectionChange.emit(this._getChangeEvent(i)),this._changeDetectorRef.markForCheck()}_highlightCorrectOption(){if(this._keyManager)if(this.empty){let A=-1;for(let i=0;i0&&!!this._overlayDir}focus(A){this._elementRef.nativeElement.focus(A)}_getPanelAriaLabelledby(){if(this.ariaLabel)return null;let A=this._parentFormField?.getLabelId()||null,i=A?A+" ":"";return this.ariaLabelledby?i+this.ariaLabelledby:A}_getAriaActiveDescendant(){return this.panelOpen&&this._keyManager&&this._keyManager.activeItem?this._keyManager.activeItem.id:null}_getTriggerAriaLabelledby(){if(this.ariaLabel)return null;let A=this._parentFormField?.getLabelId()||"";return this.ariaLabelledby&&(A+=" "+this.ariaLabelledby),A||(A=this._valueId),A}get describedByIds(){return this._elementRef.nativeElement.getAttribute("aria-describedby")?.split(" ")||[]}setDescribedByIds(A){let i=this._elementRef.nativeElement;A.length?i.setAttribute("aria-describedby",A.join(" ")):i.removeAttribute("aria-describedby")}onContainerClick(A){let i=Jr(A);i&&(i.tagName==="MAT-OPTION"||i.classList.contains("cdk-overlay-backdrop")||i.closest(".mat-mdc-select-panel"))||(this.focus(),this.open())}get shouldLabelFloat(){return this.panelOpen||!this.empty||this.focused&&!!this.placeholder}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-select"]],contentQueries:function(i,n,o){if(i&1&&fa(o,SdA,5)(o,Hr,5)(o,C8,5),i&2){let a;ce(a=Ce())&&(n.customTrigger=a.first),ce(a=Ce())&&(n.options=a),ce(a=Ce())&&(n.optionGroups=a)}},viewQuery:function(i,n){if(i&1&&ai(udA,5)(fdA,5)(n8,5),i&2){let o;ce(o=Ce())&&(n.trigger=o.first),ce(o=Ce())&&(n.panel=o.first),ce(o=Ce())&&(n._overlayDir=o.first)}},hostAttrs:["role","combobox","aria-haspopup","listbox",1,"mat-mdc-select"],hostVars:21,hostBindings:function(i,n){i&1&&tA("keydown",function(a){return n._handleKeydown(a)})("focus",function(){return n._onFocus()})("blur",function(){return n._onBlur()}),i&2&&(ie("id",n.id)("tabindex",n.disabled?-1:n.tabIndex)("aria-controls",n.panelOpen?n.id+"-panel":null)("aria-expanded",n.panelOpen)("aria-label",n.ariaLabel||null)("aria-required",n.required.toString())("aria-disabled",n.disabled.toString())("aria-invalid",n.errorState)("aria-activedescendant",n._getAriaActiveDescendant()),ne("mat-mdc-select-disabled",n.disabled)("mat-mdc-select-invalid",n.errorState)("mat-mdc-select-required",n.required)("mat-mdc-select-empty",n.empty)("mat-mdc-select-multiple",n.multiple)("mat-select-open",n.panelOpen))},inputs:{userAriaDescribedBy:[0,"aria-describedby","userAriaDescribedBy"],panelClass:"panelClass",disabled:[2,"disabled","disabled",he],disableRipple:[2,"disableRipple","disableRipple",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",he],placeholder:"placeholder",required:[2,"required","required",he],multiple:[2,"multiple","multiple",he],disableOptionCentering:[2,"disableOptionCentering","disableOptionCentering",he],compareWith:"compareWith",value:"value",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],errorStateMatcher:"errorStateMatcher",typeaheadDebounceInterval:[2,"typeaheadDebounceInterval","typeaheadDebounceInterval",en],sortComparator:"sortComparator",id:"id",panelWidth:"panelWidth",canSelectNullableOptions:[2,"canSelectNullableOptions","canSelectNullableOptions",he]},outputs:{openedChange:"openedChange",_openedStream:"opened",_closedStream:"closed",selectionChange:"selectionChange",valueChange:"valueChange"},exportAs:["matSelect"],features:[dt([{provide:Ku,useExisting:t},{provide:c8,useExisting:t}]),ti],ngContentSelectors:pdA,decls:11,vars:10,consts:[["fallbackOverlayOrigin","cdkOverlayOrigin","trigger",""],["panel",""],["cdk-overlay-origin","",1,"mat-mdc-select-trigger",3,"click"],[1,"mat-mdc-select-value"],[1,"mat-mdc-select-placeholder","mat-mdc-select-min-line"],[1,"mat-mdc-select-value-text"],[1,"mat-mdc-select-arrow-wrapper"],[1,"mat-mdc-select-arrow"],["viewBox","0 0 24 24","width","24px","height","24px","focusable","false","aria-hidden","true"],["d","M7 10l5 5 5-5z"],["cdk-connected-overlay","","cdkConnectedOverlayLockPosition","","cdkConnectedOverlayHasBackdrop","","cdkConnectedOverlayBackdropClass","cdk-overlay-transparent-backdrop",3,"detach","backdropClick","overlayKeydown","cdkConnectedOverlayDisableClose","cdkConnectedOverlayPanelClass","cdkConnectedOverlayScrollStrategy","cdkConnectedOverlayOrigin","cdkConnectedOverlayPositions","cdkConnectedOverlayWidth","cdkConnectedOverlayFlexibleDimensions","cdkConnectedOverlayUsePopover"],[1,"mat-mdc-select-min-line"],["role","listbox","tabindex","-1",3,"keydown","ngClass"]],template:function(i,n){if(i&1){let o=JA();Yt(mdA),m(0,"div",2,0),tA("click",function(){return Z(o),X(n.open())}),m(3,"div",3),V(4,wdA,2,1,"span",4)(5,vdA,3,1,"span",5),w(),m(6,"div",6)(7,"div",7),Qt(),m(8,"svg",8),GA(9,"path",9),w()()()(),pt(10,bdA,3,10,"ng-template",10),tA("detach",function(){return Z(o),X(n.close())})("backdropClick",function(){return Z(o),X(n.close())})("overlayKeydown",function(r){return Z(o),X(n._handleOverlayKeydown(r))})}if(i&2){let o=An(1);p(3),ie("id",n._valueId),p(),W(n.empty?4:5),p(6),$("cdkConnectedOverlayDisableClose",!0)("cdkConnectedOverlayPanelClass",n._overlayPanelClass)("cdkConnectedOverlayScrollStrategy",n._scrollStrategy)("cdkConnectedOverlayOrigin",n._preferredOverlayOrigin||o)("cdkConnectedOverlayPositions",n._positions)("cdkConnectedOverlayWidth",n._overlayWidth)("cdkConnectedOverlayFlexibleDimensions",!0)("cdkConnectedOverlayUsePopover",n._popoverLocation)}},dependencies:[sE,n8,gs],styles:[`@keyframes _mat-select-enter{from{opacity:0;transform:scaleY(0.8)}to{opacity:1;transform:none}}@keyframes _mat-select-exit{from{opacity:1}to{opacity:0}}.mat-mdc-select{display:inline-block;width:100%;outline:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-select-enabled-trigger-text-color, var(--mat-sys-on-surface));font-family:var(--mat-select-trigger-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-select-trigger-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-select-trigger-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-select-trigger-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-select-trigger-text-tracking, var(--mat-sys-body-large-tracking))}div.mat-mdc-select-panel{box-shadow:var(--mat-select-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-select-disabled{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-disabled .mat-mdc-select-placeholder{color:var(--mat-select-disabled-trigger-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-invalid .mat-mdc-select-arrow,.mat-form-field-invalid:not(.mat-form-field-disabled) .mat-mdc-form-field-infix::after{color:var(--mat-select-invalid-arrow-color, var(--mat-sys-error))}.mat-mdc-select-arrow{width:10px;height:5px;position:relative;color:var(--mat-select-enabled-arrow-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field.mat-focused .mat-mdc-select-arrow{color:var(--mat-select-focused-arrow-color, var(--mat-sys-primary))}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-disabled .mat-mdc-select-arrow{color:var(--mat-select-disabled-arrow-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-select-open .mat-mdc-select-arrow{transform:rotate(180deg)}.mat-form-field-animations-enabled .mat-mdc-select-arrow{transition:transform 80ms linear}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}@media(forced-colors: active){.mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .mat-mdc-select-arrow svg{fill:GrayText}}div.mat-mdc-select-panel{width:100%;max-height:275px;outline:0;overflow:auto;padding:8px 0;border-radius:4px;box-sizing:border-box;position:relative;background-color:var(--mat-select-panel-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){div.mat-mdc-select-panel{outline:solid 1px}}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) div.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above div.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-select-panel-animations-enabled{animation:_mat-select-enter 120ms cubic-bezier(0, 0, 0.2, 1)}.mat-select-panel-animations-enabled.mat-select-panel-exit{animation:_mat-select-exit 100ms linear}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);color:var(--mat-select-placeholder-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-form-field:not(.mat-form-field-animations-enabled) .mat-mdc-select-placeholder,._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{cursor:pointer}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:" ";white-space:pre;width:1px;display:inline-block;visibility:hidden}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:var(--mat-select-arrow-transform, translateY(-8px))} -`],encapsulation:2,changeDetection:0})}return t})();var ck=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Cl,gk,Gi,C0,Yr,gk]})}return t})();var RdA=["tooltip"],NdA=20;var FdA=new yA("mat-tooltip-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>EC(t,{scrollThrottle:NdA})}}),_dA=new yA("mat-tooltip-default-options",{providedIn:"root",factory:()=>({showDelay:0,hideDelay:0,touchendHideDelay:1500})});var kz="tooltip-panel",Sz=b2({passive:!0}),LdA=8,GdA=8,KdA=24,UdA=200,xa=(()=>{class t{_elementRef=h(ge);_ngZone=h(Oe);_platform=h(Ii);_ariaDescriber=h(PJ);_focusMonitor=h(ar);_dir=h(Ro);_injector=h(ft);_viewContainerRef=h(Oo);_mediaMatcher=h(RB);_animationsDisabled=ji();_defaultOptions=h(_dA,{optional:!0});_overlayRef=null;_tooltipInstance=null;_overlayPanelClass;_portal;_position="below";_positionAtOrigin=!1;_disabled=!1;_tooltipClass;_viewInitialized=!1;_pointerExitEventsInitialized=!1;_tooltipComponent=xz;_viewportMargin=8;_currentPosition;_cssClassPrefix="mat-mdc";_ariaDescriptionPending=!1;_dirSubscribed=!1;get position(){return this._position}set position(A){A!==this._position&&(this._position=A,this._overlayRef&&(this._updatePosition(this._overlayRef),this._tooltipInstance?.show(0),this._overlayRef.updatePosition()))}get positionAtOrigin(){return this._positionAtOrigin}set positionAtOrigin(A){this._positionAtOrigin=yr(A),this._detach(),this._overlayRef=null}get disabled(){return this._disabled}set disabled(A){let i=yr(A);this._disabled!==i&&(this._disabled=i,i?this.hide(0):this._setupPointerEnterEventsIfNeeded(),this._syncAriaDescription(this.message))}get showDelay(){return this._showDelay}set showDelay(A){this._showDelay=tg(A)}_showDelay;get hideDelay(){return this._hideDelay}set hideDelay(A){this._hideDelay=tg(A),this._tooltipInstance&&(this._tooltipInstance._mouseLeaveHideDelay=this._hideDelay)}_hideDelay;touchGestures="auto";get message(){return this._message}set message(A){let i=this._message;this._message=A!=null?String(A).trim():"",!this._message&&this._isTooltipVisible()?this.hide(0):(this._setupPointerEnterEventsIfNeeded(),this._updateTooltipMessage()),this._syncAriaDescription(i)}_message="";get tooltipClass(){return this._tooltipClass}set tooltipClass(A){this._tooltipClass=A,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass)}_passiveListeners=[];_touchstartTimeout=null;_destroyed=new XA;_isDestroyed=!1;constructor(){let A=this._defaultOptions;A&&(this._showDelay=A.showDelay,this._hideDelay=A.hideDelay,A.position&&(this.position=A.position),A.positionAtOrigin&&(this.positionAtOrigin=A.positionAtOrigin),A.touchGestures&&(this.touchGestures=A.touchGestures),A.tooltipClass&&(this.tooltipClass=A.tooltipClass)),this._viewportMargin=LdA}ngAfterViewInit(){this._viewInitialized=!0,this._setupPointerEnterEventsIfNeeded(),this._focusMonitor.monitor(this._elementRef).pipe(Bt(this._destroyed)).subscribe(A=>{A?A==="keyboard"&&this._ngZone.run(()=>this.show()):this._ngZone.run(()=>this.hide(0))})}ngOnDestroy(){let A=this._elementRef.nativeElement;this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),this._passiveListeners.forEach(([i,n])=>{A.removeEventListener(i,n,Sz)}),this._passiveListeners.length=0,this._destroyed.next(),this._destroyed.complete(),this._isDestroyed=!0,this._ariaDescriber.removeDescription(A,this.message,"tooltip"),this._focusMonitor.stopMonitoring(A)}show(A=this.showDelay,i){if(this.disabled||!this.message||this._isTooltipVisible()){this._tooltipInstance?._cancelPendingAnimations();return}let n=this._createOverlay(i);this._detach(),this._portal=this._portal||new Jg(this._tooltipComponent,this._viewContainerRef);let o=this._tooltipInstance=n.attach(this._portal).instance;o._triggerElement=this._elementRef.nativeElement,o._mouseLeaveHideDelay=this._hideDelay,o.afterHidden().pipe(Bt(this._destroyed)).subscribe(()=>this._detach()),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),o.show(A)}hide(A=this.hideDelay){let i=this._tooltipInstance;i&&(i.isVisible()?i.hide(A):(i._cancelPendingAnimations(),this._detach()))}toggle(A){this._isTooltipVisible()?this.hide():this.show(void 0,A)}_isTooltipVisible(){return!!this._tooltipInstance&&this._tooltipInstance.isVisible()}_createOverlay(A){if(this._overlayRef){let a=this._overlayRef.getConfig().positionStrategy;if((!this.positionAtOrigin||!A)&&a._origin instanceof ge)return this._overlayRef;this._detach()}let i=this._injector.get(I0).getAncestorScrollContainers(this._elementRef),n=`${this._cssClassPrefix}-${kz}`,o=q1(this._injector,this.positionAtOrigin?A||this._elementRef:this._elementRef).withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`).withFlexibleDimensions(!1).withViewportMargin(this._viewportMargin).withScrollableContainers(i).withPopoverLocation("global");return o.positionChanges.pipe(Bt(this._destroyed)).subscribe(a=>{this._updateCurrentPositionClass(a.connectionPair),this._tooltipInstance&&a.scrollableViewProperties.isOverlayClipped&&this._tooltipInstance.isVisible()&&this._ngZone.run(()=>this.hide(0))}),this._overlayRef=lc(this._injector,{direction:this._dir,positionStrategy:o,panelClass:this._overlayPanelClass?[...this._overlayPanelClass,n]:n,scrollStrategy:this._injector.get(FdA)(),disableAnimations:this._animationsDisabled}),this._updatePosition(this._overlayRef),this._overlayRef.detachments().pipe(Bt(this._destroyed)).subscribe(()=>this._detach()),this._overlayRef.outsidePointerEvents().pipe(Bt(this._destroyed)).subscribe(()=>this._tooltipInstance?._handleBodyInteraction()),this._overlayRef.keydownEvents().pipe(Bt(this._destroyed)).subscribe(a=>{this._isTooltipVisible()&&a.keyCode===27&&!pa(a)&&(a.preventDefault(),a.stopPropagation(),this._ngZone.run(()=>this.hide(0)))}),this._defaultOptions?.disableTooltipInteractivity&&this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`),this._dirSubscribed||(this._dirSubscribed=!0,this._dir.change.pipe(Bt(this._destroyed)).subscribe(()=>{this._overlayRef&&this._updatePosition(this._overlayRef)})),this._overlayRef}_detach(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null}_updatePosition(A){let i=A.getConfig().positionStrategy,n=this._getOrigin(),o=this._getOverlayPosition();i.withPositions([this._addOffset(cA(cA({},n.main),o.main)),this._addOffset(cA(cA({},n.fallback),o.fallback))])}_addOffset(A){let i=GdA,n=!this._dir||this._dir.value=="ltr";return A.originY==="top"?A.offsetY=-i:A.originY==="bottom"?A.offsetY=i:A.originX==="start"?A.offsetX=n?-i:i:A.originX==="end"&&(A.offsetX=n?i:-i),A}_getOrigin(){let A=!this._dir||this._dir.value=="ltr",i=this.position,n;i=="above"||i=="below"?n={originX:"center",originY:i=="above"?"top":"bottom"}:i=="before"||i=="left"&&A||i=="right"&&!A?n={originX:"start",originY:"center"}:(i=="after"||i=="right"&&A||i=="left"&&!A)&&(n={originX:"end",originY:"center"});let{x:o,y:a}=this._invertPosition(n.originX,n.originY);return{main:n,fallback:{originX:o,originY:a}}}_getOverlayPosition(){let A=!this._dir||this._dir.value=="ltr",i=this.position,n;i=="above"?n={overlayX:"center",overlayY:"bottom"}:i=="below"?n={overlayX:"center",overlayY:"top"}:i=="before"||i=="left"&&A||i=="right"&&!A?n={overlayX:"end",overlayY:"center"}:(i=="after"||i=="right"&&A||i=="left"&&!A)&&(n={overlayX:"start",overlayY:"center"});let{x:o,y:a}=this._invertPosition(n.overlayX,n.overlayY);return{main:n,fallback:{overlayX:o,overlayY:a}}}_updateTooltipMessage(){this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),Yn(()=>{this._tooltipInstance&&this._overlayRef.updatePosition()},{injector:this._injector}))}_setTooltipClass(A){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=A,this._tooltipInstance._markForCheck())}_invertPosition(A,i){return this.position==="above"||this.position==="below"?i==="top"?i="bottom":i==="bottom"&&(i="top"):A==="end"?A="start":A==="start"&&(A="end"),{x:A,y:i}}_updateCurrentPositionClass(A){let{overlayY:i,originX:n,originY:o}=A,a;if(i==="center"?this._dir&&this._dir.value==="rtl"?a=n==="end"?"left":"right":a=n==="start"?"left":"right":a=i==="bottom"&&o==="top"?"above":"below",a!==this._currentPosition){let r=this._overlayRef;if(r){let s=`${this._cssClassPrefix}-${kz}-`;r.removePanelClass(s+this._currentPosition),r.addPanelClass(s+a)}this._currentPosition=a}}_setupPointerEnterEventsIfNeeded(){this._disabled||!this.message||!this._viewInitialized||this._passiveListeners.length||(this._isTouchPlatform()?this.touchGestures!=="off"&&(this._disableNativeGesturesIfNecessary(),this._passiveListeners.push(["touchstart",A=>{let i=A.targetTouches?.[0],n=i?{x:i.clientX,y:i.clientY}:void 0;this._setupPointerExitEventsIfNeeded(),this._touchstartTimeout&&clearTimeout(this._touchstartTimeout);let o=500;this._touchstartTimeout=setTimeout(()=>{this._touchstartTimeout=null,this.show(void 0,n)},this._defaultOptions?.touchLongPressShowDelay??o)}])):this._passiveListeners.push(["mouseenter",A=>{this._setupPointerExitEventsIfNeeded();let i;A.x!==void 0&&A.y!==void 0&&(i=A),this.show(void 0,i)}]),this._addListeners(this._passiveListeners))}_setupPointerExitEventsIfNeeded(){if(this._pointerExitEventsInitialized)return;this._pointerExitEventsInitialized=!0;let A=[];if(!this._isTouchPlatform())A.push(["mouseleave",i=>{let n=i.relatedTarget;(!n||!this._overlayRef?.overlayElement.contains(n))&&this.hide()}],["wheel",i=>this._wheelListener(i)]);else if(this.touchGestures!=="off"){this._disableNativeGesturesIfNecessary();let i=()=>{this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this.hide(this._defaultOptions?.touchendHideDelay)};A.push(["touchend",i],["touchcancel",i])}this._addListeners(A),this._passiveListeners.push(...A)}_addListeners(A){A.forEach(([i,n])=>{this._elementRef.nativeElement.addEventListener(i,n,Sz)})}_isTouchPlatform(){return this._platform.IOS||this._platform.ANDROID?!0:this._platform.isBrowser?!!this._defaultOptions?.detectHoverCapability&&this._mediaMatcher.matchMedia("(any-hover: none)").matches:!1}_wheelListener(A){if(this._isTooltipVisible()){let i=this._injector.get(Xt).elementFromPoint(A.clientX,A.clientY),n=this._elementRef.nativeElement;i!==n&&!n.contains(i)&&this.hide()}}_disableNativeGesturesIfNecessary(){let A=this.touchGestures;if(A!=="off"){let i=this._elementRef.nativeElement,n=i.style;(A==="on"||i.nodeName!=="INPUT"&&i.nodeName!=="TEXTAREA")&&(n.userSelect=n.msUserSelect=n.webkitUserSelect=n.MozUserSelect="none"),(A==="on"||!i.draggable)&&(n.webkitUserDrag="none"),n.touchAction="none",n.webkitTapHighlightColor="transparent"}}_syncAriaDescription(A){this._ariaDescriptionPending||(this._ariaDescriptionPending=!0,this._ariaDescriber.removeDescription(this._elementRef.nativeElement,A,"tooltip"),this._isDestroyed||Yn({write:()=>{this._ariaDescriptionPending=!1,this.message&&!this.disabled&&this._ariaDescriber.describe(this._elementRef.nativeElement,this.message,"tooltip")}},{injector:this._injector}))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matTooltip",""]],hostAttrs:[1,"mat-mdc-tooltip-trigger"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mat-mdc-tooltip-disabled",n.disabled)},inputs:{position:[0,"matTooltipPosition","position"],positionAtOrigin:[0,"matTooltipPositionAtOrigin","positionAtOrigin"],disabled:[0,"matTooltipDisabled","disabled"],showDelay:[0,"matTooltipShowDelay","showDelay"],hideDelay:[0,"matTooltipHideDelay","hideDelay"],touchGestures:[0,"matTooltipTouchGestures","touchGestures"],message:[0,"matTooltip","message"],tooltipClass:[0,"matTooltipClass","tooltipClass"]},exportAs:["matTooltip"]})}return t})(),xz=(()=>{class t{_changeDetectorRef=h(Dt);_elementRef=h(ge);_isMultiline=!1;message;tooltipClass;_showTimeoutId;_hideTimeoutId;_triggerElement;_mouseLeaveHideDelay;_animationsDisabled=ji();_tooltip;_closeOnInteraction=!1;_isVisible=!1;_onHide=new XA;_showAnimation="mat-mdc-tooltip-show";_hideAnimation="mat-mdc-tooltip-hide";constructor(){}show(A){this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=setTimeout(()=>{this._toggleVisibility(!0),this._showTimeoutId=void 0},A)}hide(A){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(()=>{this._toggleVisibility(!1),this._hideTimeoutId=void 0},A)}afterHidden(){return this._onHide}isVisible(){return this._isVisible}ngOnDestroy(){this._cancelPendingAnimations(),this._onHide.complete(),this._triggerElement=null}_handleBodyInteraction(){this._closeOnInteraction&&this.hide(0)}_markForCheck(){this._changeDetectorRef.markForCheck()}_handleMouseLeave({relatedTarget:A}){(!A||!this._triggerElement.contains(A))&&(this.isVisible()?this.hide(this._mouseLeaveHideDelay):this._finalizeAnimation(!1))}_onShow(){this._isMultiline=this._isTooltipMultiline(),this._markForCheck()}_isTooltipMultiline(){let A=this._elementRef.nativeElement.getBoundingClientRect();return A.height>KdA&&A.width>=UdA}_handleAnimationEnd({animationName:A}){(A===this._showAnimation||A===this._hideAnimation)&&this._finalizeAnimation(A===this._showAnimation)}_cancelPendingAnimations(){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=this._hideTimeoutId=void 0}_finalizeAnimation(A){A?this._closeOnInteraction=!0:this.isVisible()||this._onHide.next()}_toggleVisibility(A){let i=this._tooltip.nativeElement,n=this._showAnimation,o=this._hideAnimation;if(i.classList.remove(A?o:n),i.classList.add(A?n:o),this._isVisible!==A&&(this._isVisible=A,this._changeDetectorRef.markForCheck()),A&&!this._animationsDisabled&&typeof getComputedStyle=="function"){let a=getComputedStyle(i);(a.getPropertyValue("animation-duration")==="0s"||a.getPropertyValue("animation-name")==="none")&&(this._animationsDisabled=!0)}A&&this._onShow(),this._animationsDisabled&&(i.classList.add("_mat-animation-noopable"),this._finalizeAnimation(A))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tooltip-component"]],viewQuery:function(i,n){if(i&1&&ai(RdA,7),i&2){let o;ce(o=Ce())&&(n._tooltip=o.first)}},hostAttrs:["aria-hidden","true"],hostBindings:function(i,n){i&1&&tA("mouseleave",function(a){return n._handleMouseLeave(a)})},decls:4,vars:4,consts:[["tooltip",""],[1,"mdc-tooltip","mat-mdc-tooltip",3,"animationend","ngClass"],[1,"mat-mdc-tooltip-surface","mdc-tooltip__surface"]],template:function(i,n){if(i&1){let o=JA();m(0,"div",1,0),tA("animationend",function(r){return Z(o),X(n._handleAnimationEnd(r))}),m(2,"div",2),K(3),w()()}i&2&&(ne("mdc-tooltip--multiline",n._isMultiline),$("ngClass",n.tooltipClass),p(3),qA(n.message))},dependencies:[gs],styles:[`.mat-mdc-tooltip{position:relative;transform:scale(0);display:inline-flex}.mat-mdc-tooltip::before{content:"";top:0;right:0;bottom:0;left:0;z-index:-1;position:absolute}.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before{top:-8px}.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before{bottom:-8px}.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before{left:-8px}.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before{right:-8px}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-surface{word-break:normal;overflow-wrap:anywhere;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center;will-change:transform,opacity;background-color:var(--mat-tooltip-container-color, var(--mat-sys-inverse-surface));color:var(--mat-tooltip-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-tooltip-container-shape, var(--mat-sys-corner-extra-small));font-family:var(--mat-tooltip-supporting-text-font, var(--mat-sys-body-small-font));font-size:var(--mat-tooltip-supporting-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-tooltip-supporting-text-weight, var(--mat-sys-body-small-weight));line-height:var(--mat-tooltip-supporting-text-line-height, var(--mat-sys-body-small-line-height));letter-spacing:var(--mat-tooltip-supporting-text-tracking, var(--mat-sys-body-small-tracking))}.mat-mdc-tooltip-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:right}.mat-mdc-tooltip-panel{line-height:normal}.mat-mdc-tooltip-panel.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards} -`],encapsulation:2,changeDetection:0})}return t})();var U2=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[bu,Cl,Gi,C0]})}return t})();function JdA(t,e){if(t&1&&(m(0,"mat-option",17),K(1),w()),t&2){let A=e.$implicit;$("value",A),p(),Se(" ",A," ")}}function YdA(t,e){if(t&1){let A=JA();m(0,"mat-form-field",14)(1,"mat-select",16,0),tA("selectionChange",function(n){Z(A);let o=v(2);return X(o._changePageSize(n.value))}),Ut(3,JdA,2,2,"mat-option",17,Li),w(),m(5,"div",18),tA("click",function(){Z(A);let n=An(2);return X(n.open())}),w()()}if(t&2){let A=v(2);$("appearance",A._formFieldAppearance)("color",A.color),p(),$("value",A.pageSize)("disabled",A.disabled),cp("aria-labelledby",A._pageSizeLabelId),$("panelClass",A.selectConfig.panelClass||"")("disableOptionCentering",A.selectConfig.disableOptionCentering),p(2),Jt(A._displayedPageSizeOptions)}}function TdA(t,e){if(t&1&&(m(0,"div",15),K(1),w()),t&2){let A=v(2);p(),qA(A.pageSize)}}function HdA(t,e){if(t&1&&(m(0,"div",3)(1,"div",13),K(2),w(),V(3,YdA,6,7,"mat-form-field",14),V(4,TdA,2,1,"div",15),w()),t&2){let A=v();p(),ie("id",A._pageSizeLabelId),p(),Se(" ",A._intl.itemsPerPageLabel," "),p(),W(A._displayedPageSizeOptions.length>1?3:-1),p(),W(A._displayedPageSizeOptions.length<=1?4:-1)}}function zdA(t,e){if(t&1){let A=JA();m(0,"button",19),tA("click",function(){Z(A);let n=v();return X(n._buttonClicked(0,n._previousButtonsDisabled()))}),Qt(),m(1,"svg",8),GA(2,"path",20),w()()}if(t&2){let A=v();$("matTooltip",A._intl.firstPageLabel)("matTooltipDisabled",A._previousButtonsDisabled())("disabled",A._previousButtonsDisabled())("tabindex",A._previousButtonsDisabled()?-1:null),ie("aria-label",A._intl.firstPageLabel)}}function OdA(t,e){if(t&1){let A=JA();m(0,"button",21),tA("click",function(){Z(A);let n=v();return X(n._buttonClicked(n.getNumberOfPages()-1,n._nextButtonsDisabled()))}),Qt(),m(1,"svg",8),GA(2,"path",22),w()()}if(t&2){let A=v();$("matTooltip",A._intl.lastPageLabel)("matTooltipDisabled",A._nextButtonsDisabled())("disabled",A._nextButtonsDisabled())("tabindex",A._nextButtonsDisabled()?-1:null),ie("aria-label",A._intl.lastPageLabel)}}var B8=(()=>{class t{changes=new XA;itemsPerPageLabel="Items per page:";nextPageLabel="Next page";previousPageLabel="Previous page";firstPageLabel="First page";lastPageLabel="Last page";getRangeLabel=(A,i,n)=>{if(n==0||i==0)return`0 of ${n}`;n=Math.max(n,0);let o=A*i,a=o{class t{_intl=h(B8);_changeDetectorRef=h(Dt);_formFieldAppearance;_pageSizeLabelId=h(an).getId("mat-paginator-page-size-label-");_intlChanges;_isInitialized=!1;_initializedStream=new ql(1);color;get pageIndex(){return this._pageIndex}set pageIndex(A){this._pageIndex=Math.max(A||0,0),this._changeDetectorRef.markForCheck()}_pageIndex=0;get length(){return this._length}set length(A){this._length=A||0,this._changeDetectorRef.markForCheck()}_length=0;get pageSize(){return this._pageSize}set pageSize(A){this._pageSize=Math.max(A||0,0),this._updateDisplayedPageSizeOptions()}_pageSize;get pageSizeOptions(){return this._pageSizeOptions}set pageSizeOptions(A){this._pageSizeOptions=(A||[]).map(i=>en(i,0)),this._updateDisplayedPageSizeOptions()}_pageSizeOptions=[];hidePageSize=!1;showFirstLastButtons=!1;selectConfig={};disabled=!1;page=new $A;_displayedPageSizeOptions;initialized=this._initializedStream;constructor(){let A=this._intl,i=h(jdA,{optional:!0});if(this._intlChanges=A.changes.subscribe(()=>this._changeDetectorRef.markForCheck()),i){let{pageSize:n,pageSizeOptions:o,hidePageSize:a,showFirstLastButtons:r}=i;n!=null&&(this._pageSize=n),o!=null&&(this._pageSizeOptions=o),a!=null&&(this.hidePageSize=a),r!=null&&(this.showFirstLastButtons=r)}this._formFieldAppearance=i?.formFieldAppearance||"outline"}ngOnInit(){this._isInitialized=!0,this._updateDisplayedPageSizeOptions(),this._initializedStream.next()}ngOnDestroy(){this._initializedStream.complete(),this._intlChanges.unsubscribe()}nextPage(){this.hasNextPage()&&this._navigate(this.pageIndex+1)}previousPage(){this.hasPreviousPage()&&this._navigate(this.pageIndex-1)}firstPage(){this.hasPreviousPage()&&this._navigate(0)}lastPage(){this.hasNextPage()&&this._navigate(this.getNumberOfPages()-1)}hasPreviousPage(){return this.pageIndex>=1&&this.pageSize!=0}hasNextPage(){let A=this.getNumberOfPages()-1;return this.pageIndexA-i),this._changeDetectorRef.markForCheck())}_emitPageEvent(A){this.page.emit({previousPageIndex:A,pageIndex:this.pageIndex,pageSize:this.pageSize,length:this.length})}_navigate(A){let i=this.pageIndex;A!==i&&(this.pageIndex=A,this._emitPageEvent(i))}_buttonClicked(A,i){i||this._navigate(A)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-paginator"]],hostAttrs:["role","group",1,"mat-mdc-paginator"],inputs:{color:"color",pageIndex:[2,"pageIndex","pageIndex",en],length:[2,"length","length",en],pageSize:[2,"pageSize","pageSize",en],pageSizeOptions:"pageSizeOptions",hidePageSize:[2,"hidePageSize","hidePageSize",he],showFirstLastButtons:[2,"showFirstLastButtons","showFirstLastButtons",he],selectConfig:"selectConfig",disabled:[2,"disabled","disabled",he]},outputs:{page:"page"},exportAs:["matPaginator"],decls:14,vars:14,consts:[["selectRef",""],[1,"mat-mdc-paginator-outer-container"],[1,"mat-mdc-paginator-container"],[1,"mat-mdc-paginator-page-size"],[1,"mat-mdc-paginator-range-actions"],["aria-atomic","true","aria-live","polite","role","status",1,"mat-mdc-paginator-range-label"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-previous",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["viewBox","0 0 24 24","focusable","false","aria-hidden","true",1,"mat-mdc-paginator-icon"],["d","M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-next",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"matTooltip","matTooltipDisabled","disabled","tabindex"],["aria-hidden","true",1,"mat-mdc-paginator-page-size-label"],[1,"mat-mdc-paginator-page-size-select",3,"appearance","color"],[1,"mat-mdc-paginator-page-size-value"],["hideSingleSelectionIndicator","",3,"selectionChange","value","disabled","aria-labelledby","panelClass","disableOptionCentering"],[3,"value"],[1,"mat-mdc-paginator-touch-target",3,"click"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-first",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z"],["matIconButton","","type","button","matTooltipPosition","above","disabledInteractive","",1,"mat-mdc-paginator-navigation-last",3,"click","matTooltip","matTooltipDisabled","disabled","tabindex"],["d","M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z"]],template:function(i,n){i&1&&(m(0,"div",1)(1,"div",2),V(2,HdA,5,4,"div",3),m(3,"div",4)(4,"div",5),K(5),w(),V(6,zdA,3,5,"button",6),m(7,"button",7),tA("click",function(){return n._buttonClicked(n.pageIndex-1,n._previousButtonsDisabled())}),Qt(),m(8,"svg",8),GA(9,"path",9),w()(),as(),m(10,"button",10),tA("click",function(){return n._buttonClicked(n.pageIndex+1,n._nextButtonsDisabled())}),Qt(),m(11,"svg",8),GA(12,"path",11),w()(),V(13,OdA,3,5,"button",12),w()()()),i&2&&(p(2),W(n.hidePageSize?-1:2),p(3),Se(" ",n._intl.getRangeLabel(n.pageIndex,n.pageSize,n.length)," "),p(),W(n.showFirstLastButtons?6:-1),p(),$("matTooltip",n._intl.previousPageLabel)("matTooltipDisabled",n._previousButtonsDisabled())("disabled",n._previousButtonsDisabled())("tabindex",n._previousButtonsDisabled()?-1:null),ie("aria-label",n._intl.previousPageLabel),p(3),$("matTooltip",n._intl.nextPageLabel)("matTooltipDisabled",n._nextButtonsDisabled())("disabled",n._nextButtonsDisabled())("tabindex",n._nextButtonsDisabled()?-1:null),ie("aria-label",n._intl.nextPageLabel),p(3),W(n.showFirstLastButtons?13:-1))},dependencies:[No,Bl,Hr,Wa,xa],styles:[`.mat-mdc-paginator{display:block;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-paginator-container-text-color, var(--mat-sys-on-surface));background-color:var(--mat-paginator-container-background-color, var(--mat-sys-surface));font-family:var(--mat-paginator-container-text-font, var(--mat-sys-body-small-font));line-height:var(--mat-paginator-container-text-line-height, var(--mat-sys-body-small-line-height));font-size:var(--mat-paginator-container-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-paginator-container-text-weight, var(--mat-sys-body-small-weight));letter-spacing:var(--mat-paginator-container-text-tracking, var(--mat-sys-body-small-tracking));--mat-form-field-container-height: var(--mat-paginator-form-field-container-height, 40px);--mat-form-field-container-vertical-padding: var(--mat-paginator-form-field-container-vertical-padding, 8px)}.mat-mdc-paginator .mat-mdc-select-value{font-size:var(--mat-paginator-select-trigger-text-size, var(--mat-sys-body-small-size))}.mat-mdc-paginator .mat-mdc-form-field-subscript-wrapper{display:none}.mat-mdc-paginator .mat-mdc-select{line-height:1.5}.mat-mdc-paginator-outer-container{display:flex}.mat-mdc-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap;width:100%;min-height:var(--mat-paginator-container-size, 56px)}.mat-mdc-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-mdc-paginator-page-size{margin-right:0;margin-left:8px}.mat-mdc-paginator-page-size-label{margin:0 4px}.mat-mdc-paginator-page-size-select{margin:0 4px;width:var(--mat-paginator-page-size-select-width, 84px)}.mat-mdc-paginator-range-label{margin:0 32px 0 24px}.mat-mdc-paginator-range-actions{display:flex;align-items:center}.mat-mdc-paginator-icon{display:inline-block;width:28px;fill:var(--mat-paginator-enabled-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon{fill:var(--mat-paginator-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}[dir=rtl] .mat-mdc-paginator-icon{transform:rotate(180deg)}@media(forced-colors: active){.mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon,.mat-mdc-paginator-icon{fill:currentColor}.mat-mdc-paginator-range-actions .mat-mdc-icon-button{outline:solid 1px}.mat-mdc-paginator-range-actions .mat-mdc-icon-button[aria-disabled]{color:GrayText}}.mat-mdc-paginator-touch-target{display:var(--mat-paginator-touch-target-display, block);position:absolute;top:50%;left:50%;width:var(--mat-paginator-page-size-select-width, 84px);height:var(--mat-paginator-page-size-select-touch-target-height, 48px);background-color:rgba(0,0,0,0);transform:translate(-50%, -50%);cursor:pointer} -`],encapsulation:2,changeDetection:0})}return t})();var Nz=["*"],qdA=["content"],VdA=[[["mat-drawer"]],[["mat-drawer-content"]],"*"],WdA=["mat-drawer","mat-drawer-content","*"];function ZdA(t,e){if(t&1){let A=JA();m(0,"div",1),tA("click",function(){Z(A);let n=v();return X(n._onBackdropClicked())}),w()}if(t&2){let A=v();ne("mat-drawer-shown",A._isShowingBackdrop())}}function XdA(t,e){t&1&&(m(0,"mat-drawer-content"),Ke(1,2),w())}var $dA=new yA("MAT_DRAWER_DEFAULT_AUTOSIZE",{providedIn:"root",factory:()=>!1}),Fz=new yA("MAT_DRAWER_CONTAINER"),Ck=(()=>{class t extends BC{_platform=h(Ii);_changeDetectorRef=h(Dt);_container=h(dk);constructor(){let A=h(ge),i=h(I0),n=h(Oe);super(A,i,n)}ngAfterContentInit(){this._container._contentMarginChanges.subscribe(()=>{this._changeDetectorRef.markForCheck()})}_shouldBeHidden(){if(this._platform.isBrowser)return!1;let{start:A,end:i}=this._container;return A!=null&&A.mode!=="over"&&A.opened||i!=null&&i.mode!=="over"&&i.opened}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-drawer-content"]],hostAttrs:[1,"mat-drawer-content"],hostVars:6,hostBindings:function(i,n){i&2&&(wn("margin-left",n._container._contentMargins.left,"px")("margin-right",n._container._contentMargins.right,"px"),ne("mat-drawer-content-hidden",n._shouldBeHidden()))},features:[dt([{provide:BC,useExisting:t}]),It],ngContentSelectors:Nz,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),Ke(0))},encapsulation:2,changeDetection:0})}return t})(),Ik=(()=>{class t{_elementRef=h(ge);_focusTrapFactory=h(yu);_focusMonitor=h(ar);_platform=h(Ii);_ngZone=h(Oe);_renderer=h(_i);_interactivityChecker=h(NB);_doc=h(Xt);_container=h(Fz,{optional:!0});_focusTrap=null;_elementFocusedBeforeDrawerWasOpened=null;_eventCleanups;_isAttached=!1;_anchor=null;get position(){return this._position}set position(A){A=A==="end"?"end":"start",A!==this._position&&(this._isAttached&&this._updatePositionInParent(A),this._position=A,this.onPositionChanged.emit())}_position="start";get mode(){return this._mode}set mode(A){this._mode=A,this._updateFocusTrapState(),this._modeChanged.next()}_mode="over";get disableClose(){return this._disableClose}set disableClose(A){this._disableClose=yr(A)}_disableClose=!1;get autoFocus(){let A=this._autoFocus;return A??(this.mode==="side"?"dialog":"first-tabbable")}set autoFocus(A){(A==="true"||A==="false"||A==null)&&(A=yr(A)),this._autoFocus=A}_autoFocus;get opened(){return this._opened()}set opened(A){this.toggle(yr(A))}_opened=jA(!1);_openedVia=null;_animationStarted=new XA;_animationEnd=new XA;openedChange=new $A(!0);_openedStream=this.openedChange.pipe(Ze(A=>A),fe(()=>{}));openedStart=this._animationStarted.pipe(Ze(()=>this.opened),cu(void 0));_closedStream=this.openedChange.pipe(Ze(A=>!A),fe(()=>{}));closedStart=this._animationStarted.pipe(Ze(()=>!this.opened),cu(void 0));_destroyed=new XA;onPositionChanged=new $A;_content;_modeChanged=new XA;_injector=h(ft);_changeDetectorRef=h(Dt);constructor(){this.openedChange.pipe(Bt(this._destroyed)).subscribe(A=>{A?(this._elementFocusedBeforeDrawerWasOpened=this._doc.activeElement,this._takeFocus()):this._isFocusWithinDrawer()&&this._restoreFocus(this._openedVia||"program")}),this._ngZone.runOutsideAngular(()=>{let A=this._elementRef.nativeElement;nl(A,"keydown").pipe(Ze(i=>i.keyCode===27&&!this.disableClose&&!pa(i)),Bt(this._destroyed)).subscribe(i=>this._ngZone.run(()=>{this.close(),i.stopPropagation(),i.preventDefault()})),this._eventCleanups=[this._renderer.listen(A,"transitionrun",this._handleTransitionEvent),this._renderer.listen(A,"transitionend",this._handleTransitionEvent),this._renderer.listen(A,"transitioncancel",this._handleTransitionEvent)]}),this._animationEnd.subscribe(()=>{this.openedChange.emit(this.opened)})}_forceFocus(A,i){this._interactivityChecker.isFocusable(A)||(A.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let n=()=>{o(),a(),A.removeAttribute("tabindex")},o=this._renderer.listen(A,"blur",n),a=this._renderer.listen(A,"mousedown",n)})),A.focus(i)}_focusByCssSelector(A,i){let n=this._elementRef.nativeElement.querySelector(A);n&&this._forceFocus(n,i)}_takeFocus(){if(!this._focusTrap)return;let A=this._elementRef.nativeElement;switch(this.autoFocus){case!1:case"dialog":return;case!0:case"first-tabbable":Yn(()=>{!this._focusTrap.focusInitialElement()&&typeof A.focus=="function"&&A.focus()},{injector:this._injector});break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]');break;default:this._focusByCssSelector(this.autoFocus);break}}_restoreFocus(A){this.autoFocus!=="dialog"&&(this._elementFocusedBeforeDrawerWasOpened?this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened,A):this._elementRef.nativeElement.blur(),this._elementFocusedBeforeDrawerWasOpened=null)}_isFocusWithinDrawer(){let A=this._doc.activeElement;return!!A&&this._elementRef.nativeElement.contains(A)}ngAfterViewInit(){this._isAttached=!0,this._position==="end"&&this._updatePositionInParent("end"),this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._updateFocusTrapState())}ngOnDestroy(){this._eventCleanups.forEach(A=>A()),this._focusTrap?.destroy(),this._anchor?.remove(),this._anchor=null,this._animationStarted.complete(),this._animationEnd.complete(),this._modeChanged.complete(),this._destroyed.next(),this._destroyed.complete()}open(A){return this.toggle(!0,A)}close(){return this.toggle(!1)}_closeViaBackdropClick(){return this._setOpen(!1,!0,"mouse")}toggle(A=!this.opened,i){A&&i&&(this._openedVia=i);let n=this._setOpen(A,!A&&this._isFocusWithinDrawer(),this._openedVia||"program");return A||(this._openedVia=null),n}_setOpen(A,i,n){return A===this.opened?Promise.resolve(A?"open":"close"):(this._opened.set(A),this._container?._transitionsEnabled?this._setIsAnimating(!0):setTimeout(()=>{this._animationStarted.next(),this._animationEnd.next()}),this._elementRef.nativeElement.classList.toggle("mat-drawer-opened",A),!A&&i&&this._restoreFocus(n),this._changeDetectorRef.markForCheck(),this._updateFocusTrapState(),new Promise(o=>{this.openedChange.pipe(oo(1)).subscribe(a=>o(a?"open":"close"))}))}_setIsAnimating(A){this._elementRef.nativeElement.classList.toggle("mat-drawer-animating",A)}_getWidth(){return this._elementRef.nativeElement.offsetWidth||0}_updateFocusTrapState(){this._focusTrap&&(this._focusTrap.enabled=!!this._container?.hasBackdrop&&this.opened)}_updatePositionInParent(A){if(!this._platform.isBrowser)return;let i=this._elementRef.nativeElement,n=i.parentNode;A==="end"?(this._anchor||(this._anchor=this._doc.createComment("mat-drawer-anchor"),n.insertBefore(this._anchor,i)),n.appendChild(i)):this._anchor&&this._anchor.parentNode.insertBefore(i,this._anchor)}_handleTransitionEvent=A=>{let i=this._elementRef.nativeElement;A.target===i&&this._ngZone.run(()=>{A.type==="transitionrun"?this._animationStarted.next(A):(A.type==="transitionend"&&this._setIsAnimating(!1),this._animationEnd.next(A))})};static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-drawer"]],viewQuery:function(i,n){if(i&1&&ai(qdA,5),i&2){let o;ce(o=Ce())&&(n._content=o.first)}},hostAttrs:[1,"mat-drawer"],hostVars:12,hostBindings:function(i,n){i&2&&(ie("align",null)("tabIndex",n.mode!=="side"?"-1":null),wn("visibility",!n._container&&!n.opened?"hidden":null),ne("mat-drawer-end",n.position==="end")("mat-drawer-over",n.mode==="over")("mat-drawer-push",n.mode==="push")("mat-drawer-side",n.mode==="side"))},inputs:{position:"position",mode:"mode",disableClose:"disableClose",autoFocus:"autoFocus",opened:"opened"},outputs:{openedChange:"openedChange",_openedStream:"opened",openedStart:"openedStart",_closedStream:"closed",closedStart:"closedStart",onPositionChanged:"positionChanged"},exportAs:["matDrawer"],ngContentSelectors:Nz,decls:3,vars:0,consts:[["content",""],["cdkScrollable","",1,"mat-drawer-inner-container"]],template:function(i,n){i&1&&(Yt(),m(0,"div",1,0),Ke(2),w())},dependencies:[BC],encapsulation:2,changeDetection:0})}return t})(),dk=(()=>{class t{_dir=h(Ro,{optional:!0});_element=h(ge);_ngZone=h(Oe);_changeDetectorRef=h(Dt);_animationDisabled=ji();_transitionsEnabled=!1;_allDrawers;_drawers=new ol;_content;_userContent;get start(){return this._start}get end(){return this._end}get autosize(){return this._autosize}set autosize(A){this._autosize=yr(A)}_autosize=h($dA);get hasBackdrop(){return this._drawerHasBackdrop(this._start)||this._drawerHasBackdrop(this._end)}set hasBackdrop(A){this._backdropOverride=A==null?null:yr(A)}_backdropOverride=null;backdropClick=new $A;_start=null;_end=null;_left=null;_right=null;_destroyed=new XA;_doCheckSubject=new XA;_contentMargins={left:null,right:null};_contentMarginChanges=new XA;get scrollable(){return this._userContent||this._content}_injector=h(ft);constructor(){let A=h(Ii),i=h(Ls);this._dir?.change.pipe(Bt(this._destroyed)).subscribe(()=>{this._validateDrawers(),this.updateContentMargins()}),i.change().pipe(Bt(this._destroyed)).subscribe(()=>this.updateContentMargins()),!this._animationDisabled&&A.isBrowser&&this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{this._element.nativeElement.classList.add("mat-drawer-transition"),this._transitionsEnabled=!0},200)})}ngAfterContentInit(){this._allDrawers.changes.pipe(cn(this._allDrawers),Bt(this._destroyed)).subscribe(A=>{this._drawers.reset(A.filter(i=>!i._container||i._container===this)),this._drawers.notifyOnChanges()}),this._drawers.changes.pipe(cn(null)).subscribe(()=>{this._validateDrawers(),this._drawers.forEach(A=>{this._watchDrawerToggle(A),this._watchDrawerPosition(A),this._watchDrawerMode(A)}),(!this._drawers.length||this._isDrawerOpen(this._start)||this._isDrawerOpen(this._end))&&this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),this._ngZone.runOutsideAngular(()=>{this._doCheckSubject.pipe(Os(10),Bt(this._destroyed)).subscribe(()=>this.updateContentMargins())})}ngOnDestroy(){this._contentMarginChanges.complete(),this._doCheckSubject.complete(),this._drawers.destroy(),this._destroyed.next(),this._destroyed.complete()}open(){this._drawers.forEach(A=>A.open())}close(){this._drawers.forEach(A=>A.close())}updateContentMargins(){let A=0,i=0;if(this._left&&this._left.opened){if(this._left.mode=="side")A+=this._left._getWidth();else if(this._left.mode=="push"){let n=this._left._getWidth();A+=n,i-=n}}if(this._right&&this._right.opened){if(this._right.mode=="side")i+=this._right._getWidth();else if(this._right.mode=="push"){let n=this._right._getWidth();i+=n,A-=n}}A=A||null,i=i||null,(A!==this._contentMargins.left||i!==this._contentMargins.right)&&(this._contentMargins={left:A,right:i},this._ngZone.run(()=>this._contentMarginChanges.next(this._contentMargins)))}ngDoCheck(){this._autosize&&this._isPushed()&&this._ngZone.runOutsideAngular(()=>this._doCheckSubject.next())}_watchDrawerToggle(A){A._animationStarted.pipe(Bt(this._drawers.changes)).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),A.mode!=="side"&&A.openedChange.pipe(Bt(this._drawers.changes)).subscribe(()=>this._setContainerClass(A.opened))}_watchDrawerPosition(A){A.onPositionChanged.pipe(Bt(this._drawers.changes)).subscribe(()=>{Yn({read:()=>this._validateDrawers()},{injector:this._injector})})}_watchDrawerMode(A){A._modeChanged.pipe(Bt(fi(this._drawers.changes,this._destroyed))).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()})}_setContainerClass(A){let i=this._element.nativeElement.classList,n="mat-drawer-container-has-open";A?i.add(n):i.remove(n)}_validateDrawers(){this._start=this._end=null,this._drawers.forEach(A=>{A.position=="end"?(this._end!=null,this._end=A):(this._start!=null,this._start=A)}),this._right=this._left=null,this._dir&&this._dir.value==="rtl"?(this._left=this._end,this._right=this._start):(this._left=this._start,this._right=this._end)}_isPushed(){return this._isDrawerOpen(this._start)&&this._start.mode!="over"||this._isDrawerOpen(this._end)&&this._end.mode!="over"}_onBackdropClicked(){this.backdropClick.emit(),this._closeModalDrawersViaBackdrop()}_closeModalDrawersViaBackdrop(){[this._start,this._end].filter(A=>A&&!A.disableClose&&this._drawerHasBackdrop(A)).forEach(A=>A._closeViaBackdropClick())}_isShowingBackdrop(){return this._isDrawerOpen(this._start)&&this._drawerHasBackdrop(this._start)||this._isDrawerOpen(this._end)&&this._drawerHasBackdrop(this._end)}_isDrawerOpen(A){return A!=null&&A.opened}_drawerHasBackdrop(A){return this._backdropOverride==null?!!A&&A.mode!=="side":this._backdropOverride}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-drawer-container"]],contentQueries:function(i,n,o){if(i&1&&fa(o,Ck,5)(o,Ik,5),i&2){let a;ce(a=Ce())&&(n._content=a.first),ce(a=Ce())&&(n._allDrawers=a)}},viewQuery:function(i,n){if(i&1&&ai(Ck,5),i&2){let o;ce(o=Ce())&&(n._userContent=o.first)}},hostAttrs:[1,"mat-drawer-container"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mat-drawer-container-explicit-backdrop",n._backdropOverride)},inputs:{autosize:"autosize",hasBackdrop:"hasBackdrop"},outputs:{backdropClick:"backdropClick"},exportAs:["matDrawerContainer"],features:[dt([{provide:Fz,useExisting:t}])],ngContentSelectors:WdA,decls:4,vars:2,consts:[[1,"mat-drawer-backdrop",3,"mat-drawer-shown"],[1,"mat-drawer-backdrop",3,"click"]],template:function(i,n){i&1&&(Yt(VdA),V(0,ZdA,1,2,"div",0),Ke(1),Ke(2,1),V(3,XdA,2,0,"mat-drawer-content")),i&2&&(W(n.hasBackdrop?0:-1),p(3),W(n._content?-1:3))},dependencies:[Ck],styles:[`.mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-sys-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-sys-background));box-sizing:border-box;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color, color-mix(in srgb, var(--mat-sys-neutral-variant20) 40%, transparent))}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}@media(forced-colors: active){.mat-drawer-backdrop{opacity:.5}}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-content.mat-drawer-content-hidden{opacity:0}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-sys-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow, none);background-color:var(--mat-sidenav-container-background-color, var(--mat-sys-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));width:var(--mat-sidenav-container-width, 360px);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}@media(forced-colors: active){.mat-drawer,[dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}}@media(forced-colors: active){[dir=rtl] .mat-drawer,.mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-transition .mat-drawer{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating){visibility:hidden;box-shadow:none}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating) .mat-drawer-inner-container{display:none}.mat-drawer.mat-drawer-opened.mat-drawer-opened{transform:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto}.mat-sidenav-fixed{position:fixed} -`],encapsulation:2,changeDetection:0})}return t})();var ABA=["mat-internal-form-field",""],eBA=["*"],E8=(()=>{class t{labelPosition="after";static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["div","mat-internal-form-field",""]],hostAttrs:[1,"mdc-form-field","mat-internal-form-field"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mdc-form-field--align-end",n.labelPosition==="before")},inputs:{labelPosition:"labelPosition"},attrs:ABA,ngContentSelectors:eBA,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),Ke(0))},styles:[`.mat-internal-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-flex;align-items:center;vertical-align:middle}.mat-internal-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mat-internal-form-field>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end .mdc-form-field--align-end label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0} -`],encapsulation:2,changeDetection:0})}return t})();var tBA=["switch"],iBA=["*"];function nBA(t,e){t&1&&(m(0,"span",11),Qt(),m(1,"svg",13),GA(2,"path",14),w(),m(3,"svg",15),GA(4,"path",16),w()())}var oBA=new yA("mat-slide-toggle-default-options",{providedIn:"root",factory:()=>({disableToggleValue:!1,hideIcon:!1,disabledInteractive:!1})}),Q8=class{source;checked;constructor(e,A){this.source=e,this.checked=A}},_z=(()=>{class t{_elementRef=h(ge);_focusMonitor=h(ar);_changeDetectorRef=h(Dt);defaults=h(oBA);_onChange=A=>{};_onTouched=()=>{};_validatorOnChange=()=>{};_uniqueId;_checked=!1;_createChangeEvent(A){return new Q8(this,A)}_labelId;get buttonId(){return`${this.id||this._uniqueId}-button`}_switchElement;focus(){this._switchElement.nativeElement.focus()}_noopAnimations=ji();_focused=!1;name=null;id;labelPosition="after";ariaLabel=null;ariaLabelledby=null;ariaDescribedby;required=!1;color;disabled=!1;disableRipple=!1;tabIndex=0;get checked(){return this._checked}set checked(A){this._checked=A,this._changeDetectorRef.markForCheck()}hideIcon;disabledInteractive;change=new $A;toggleChange=new $A;get inputId(){return`${this.id||this._uniqueId}-input`}constructor(){h(Xn).load(dr);let A=h(new Ws("tabindex"),{optional:!0}),i=this.defaults;this.tabIndex=A==null?0:parseInt(A)||0,this.color=i.color||"accent",this.id=this._uniqueId=h(an).getId("mat-mdc-slide-toggle-"),this.hideIcon=i.hideIcon??!1,this.disabledInteractive=i.disabledInteractive??!1,this._labelId=this._uniqueId+"-label"}ngAfterContentInit(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(A=>{A==="keyboard"||A==="program"?(this._focused=!0,this._changeDetectorRef.markForCheck()):A||Promise.resolve().then(()=>{this._focused=!1,this._onTouched(),this._changeDetectorRef.markForCheck()})})}ngOnChanges(A){A.required&&this._validatorOnChange()}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef)}writeValue(A){this.checked=!!A}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}validate(A){return this.required&&A.value!==!0?{required:!0}:null}registerOnValidatorChange(A){this._validatorOnChange=A}setDisabledState(A){this.disabled=A,this._changeDetectorRef.markForCheck()}toggle(){this.checked=!this.checked,this._onChange(this.checked)}_emitChangeEvent(){this._onChange(this.checked),this.change.emit(this._createChangeEvent(this.checked))}_handleClick(){this.disabled||(this.toggleChange.emit(),this.defaults.disableToggleValue||(this.checked=!this.checked,this._onChange(this.checked),this.change.emit(new Q8(this,this.checked))))}_getAriaLabelledBy(){return this.ariaLabelledby?this.ariaLabelledby:this.ariaLabel?null:this._labelId}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-slide-toggle"]],viewQuery:function(i,n){if(i&1&&ai(tBA,5),i&2){let o;ce(o=Ce())&&(n._switchElement=o.first)}},hostAttrs:[1,"mat-mdc-slide-toggle"],hostVars:13,hostBindings:function(i,n){i&2&&(vo("id",n.id),ie("tabindex",null)("aria-label",null)("name",null)("aria-labelledby",null),Po(n.color?"mat-"+n.color:""),ne("mat-mdc-slide-toggle-focused",n._focused)("mat-mdc-slide-toggle-checked",n.checked)("_mat-animation-noopable",n._noopAnimations))},inputs:{name:"name",id:"id",labelPosition:"labelPosition",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],required:[2,"required","required",he],color:"color",disabled:[2,"disabled","disabled",he],disableRipple:[2,"disableRipple","disableRipple",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)],checked:[2,"checked","checked",he],hideIcon:[2,"hideIcon","hideIcon",he],disabledInteractive:[2,"disabledInteractive","disabledInteractive",he]},outputs:{change:"change",toggleChange:"toggleChange"},exportAs:["matSlideToggle"],features:[dt([{provide:Lg,useExisting:wr(()=>t),multi:!0},{provide:a0,useExisting:t,multi:!0}]),ti],ngContentSelectors:iBA,decls:14,vars:27,consts:[["switch",""],["mat-internal-form-field","",3,"labelPosition"],["role","switch","type","button",1,"mdc-switch",3,"click","tabIndex","disabled"],[1,"mat-mdc-slide-toggle-touch-target"],[1,"mdc-switch__track"],[1,"mdc-switch__handle-track"],[1,"mdc-switch__handle"],[1,"mdc-switch__shadow"],[1,"mdc-elevation-overlay"],[1,"mdc-switch__ripple"],["mat-ripple","",1,"mat-mdc-slide-toggle-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-switch__icons"],[1,"mdc-label",3,"click","for"],["viewBox","0 0 24 24","aria-hidden","true",1,"mdc-switch__icon","mdc-switch__icon--on"],["d","M19.69,5.23L8.96,15.96l-4.23-4.23L2.96,13.5l6,6L21.46,7L19.69,5.23z"],["viewBox","0 0 24 24","aria-hidden","true",1,"mdc-switch__icon","mdc-switch__icon--off"],["d","M20 13H4v-2h16v2z"]],template:function(i,n){if(i&1){let o=JA();Yt(),m(0,"div",1)(1,"button",2,0),tA("click",function(){return Z(o),X(n._handleClick())}),GA(3,"div",3)(4,"span",4),m(5,"span",5)(6,"span",6)(7,"span",7),GA(8,"span",8),w(),m(9,"span",9),GA(10,"span",10),w(),V(11,nBA,5,0,"span",11),w()()(),m(12,"label",12),tA("click",function(r){return Z(o),X(r.stopPropagation())}),Ke(13),w()()}if(i&2){let o=An(2);$("labelPosition",n.labelPosition),p(),ne("mdc-switch--selected",n.checked)("mdc-switch--unselected",!n.checked)("mdc-switch--checked",n.checked)("mdc-switch--disabled",n.disabled)("mat-mdc-slide-toggle-disabled-interactive",n.disabledInteractive),$("tabIndex",n.disabled&&!n.disabledInteractive?-1:n.tabIndex)("disabled",n.disabled&&!n.disabledInteractive),ie("id",n.buttonId)("name",n.name)("aria-label",n.ariaLabel)("aria-labelledby",n._getAriaLabelledBy())("aria-describedby",n.ariaDescribedby)("aria-required",n.required||null)("aria-checked",n.checked)("aria-disabled",n.disabled&&n.disabledInteractive?"true":null),p(9),$("matRippleTrigger",o)("matRippleDisabled",n.disableRipple||n.disabled)("matRippleCentered",!0),p(),W(n.hideIcon?-1:11),p(),$("for",n.buttonId),ie("id",n._labelId)}},dependencies:[ig,E8],styles:[`.mdc-switch{align-items:center;background:none;border:none;cursor:pointer;display:inline-flex;flex-shrink:0;margin:0;outline:none;overflow:visible;padding:0;position:relative;width:var(--mat-slide-toggle-track-width, 52px)}.mdc-switch.mdc-switch--disabled{cursor:default;pointer-events:none}.mdc-switch.mat-mdc-slide-toggle-disabled-interactive{pointer-events:auto}label:empty{display:none}.mdc-switch__track{overflow:hidden;position:relative;width:100%;height:var(--mat-slide-toggle-track-height, 32px);border-radius:var(--mat-slide-toggle-track-shape, var(--mat-sys-corner-full))}.mdc-switch--disabled.mdc-switch .mdc-switch__track{opacity:var(--mat-slide-toggle-disabled-track-opacity, 0.12)}.mdc-switch__track::before,.mdc-switch__track::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:"";height:100%;left:0;position:absolute;width:100%;border-width:var(--mat-slide-toggle-track-outline-width, 2px);border-color:var(--mat-slide-toggle-track-outline-color, var(--mat-sys-outline))}.mdc-switch--selected .mdc-switch__track::before,.mdc-switch--selected .mdc-switch__track::after{border-width:var(--mat-slide-toggle-selected-track-outline-width, 2px);border-color:var(--mat-slide-toggle-selected-track-outline-color, transparent)}.mdc-switch--disabled .mdc-switch__track::before,.mdc-switch--disabled .mdc-switch__track::after{border-width:var(--mat-slide-toggle-disabled-unselected-track-outline-width, 2px);border-color:var(--mat-slide-toggle-disabled-unselected-track-outline-color, var(--mat-sys-on-surface))}@media(forced-colors: active){.mdc-switch__track{border-color:currentColor}}.mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1);transform:translateX(0);background:var(--mat-slide-toggle-unselected-track-color, var(--mat-sys-surface-variant))}.mdc-switch--selected .mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch--selected .mdc-switch__track::before{transform:translateX(-100%)}.mdc-switch--selected .mdc-switch__track::before{opacity:var(--mat-slide-toggle-hidden-track-opacity, 0);transition:var(--mat-slide-toggle-hidden-track-transition, opacity 75ms)}.mdc-switch--unselected .mdc-switch__track::before{opacity:var(--mat-slide-toggle-visible-track-opacity, 1);transition:var(--mat-slide-toggle-visible-track-transition, opacity 75ms)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-hover-track-color, var(--mat-sys-surface-variant))}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-focus-track-color, var(--mat-sys-surface-variant))}.mdc-switch:enabled:active .mdc-switch__track::before{background:var(--mat-slide-toggle-unselected-pressed-track-color, var(--mat-sys-surface-variant))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::before,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::before,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::before,.mdc-switch.mdc-switch--disabled .mdc-switch__track::before{background:var(--mat-slide-toggle-disabled-unselected-track-color, var(--mat-sys-surface-variant))}.mdc-switch__track::after{transform:translateX(-100%);background:var(--mat-slide-toggle-selected-track-color, var(--mat-sys-primary))}[dir=rtl] .mdc-switch__track::after{transform:translateX(100%)}.mdc-switch--selected .mdc-switch__track::after{transform:translateX(0)}.mdc-switch--selected .mdc-switch__track::after{opacity:var(--mat-slide-toggle-visible-track-opacity, 1);transition:var(--mat-slide-toggle-visible-track-transition, opacity 75ms)}.mdc-switch--unselected .mdc-switch__track::after{opacity:var(--mat-slide-toggle-hidden-track-opacity, 0);transition:var(--mat-slide-toggle-hidden-track-transition, opacity 75ms)}.mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-hover-track-color, var(--mat-sys-primary))}.mdc-switch:enabled:focus:not(:active) .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-focus-track-color, var(--mat-sys-primary))}.mdc-switch:enabled:active .mdc-switch__track::after{background:var(--mat-slide-toggle-selected-pressed-track-color, var(--mat-sys-primary))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__track::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__track::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__track::after,.mdc-switch.mdc-switch--disabled .mdc-switch__track::after{background:var(--mat-slide-toggle-disabled-selected-track-color, var(--mat-sys-on-surface))}.mdc-switch__handle-track{height:100%;pointer-events:none;position:absolute;top:0;transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);left:0;right:auto;transform:translateX(0);width:calc(100% - var(--mat-slide-toggle-handle-width))}[dir=rtl] .mdc-switch__handle-track{left:auto;right:0}.mdc-switch--selected .mdc-switch__handle-track{transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch__handle-track{transform:translateX(-100%)}.mdc-switch__handle{display:flex;pointer-events:auto;position:absolute;top:50%;transform:translateY(-50%);left:0;right:auto;transition:width 75ms cubic-bezier(0.4, 0, 0.2, 1),height 75ms cubic-bezier(0.4, 0, 0.2, 1),margin 75ms cubic-bezier(0.4, 0, 0.2, 1);width:var(--mat-slide-toggle-handle-width);height:var(--mat-slide-toggle-handle-height);border-radius:var(--mat-slide-toggle-handle-shape, var(--mat-sys-corner-full))}[dir=rtl] .mdc-switch__handle{left:auto;right:0}.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle{width:var(--mat-slide-toggle-unselected-handle-size, 16px);height:var(--mat-slide-toggle-unselected-handle-size, 16px);margin:var(--mat-slide-toggle-unselected-handle-horizontal-margin, 0 8px)}.mat-mdc-slide-toggle .mdc-switch--unselected .mdc-switch__handle:has(.mdc-switch__icons){margin:var(--mat-slide-toggle-unselected-with-icon-handle-horizontal-margin, 0 4px)}.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle{width:var(--mat-slide-toggle-selected-handle-size, 24px);height:var(--mat-slide-toggle-selected-handle-size, 24px);margin:var(--mat-slide-toggle-selected-handle-horizontal-margin, 0 24px)}.mat-mdc-slide-toggle .mdc-switch--selected .mdc-switch__handle:has(.mdc-switch__icons){margin:var(--mat-slide-toggle-selected-with-icon-handle-horizontal-margin, 0 24px)}.mat-mdc-slide-toggle .mdc-switch__handle:has(.mdc-switch__icons){width:var(--mat-slide-toggle-with-icon-handle-size, 24px);height:var(--mat-slide-toggle-with-icon-handle-size, 24px)}.mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) .mdc-switch__handle{width:var(--mat-slide-toggle-pressed-handle-size, 28px);height:var(--mat-slide-toggle-pressed-handle-size, 28px)}.mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) .mdc-switch__handle{margin:var(--mat-slide-toggle-selected-pressed-handle-horizontal-margin, 0 22px)}.mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) .mdc-switch__handle{margin:var(--mat-slide-toggle-unselected-pressed-handle-horizontal-margin, 0 2px)}.mdc-switch--disabled.mdc-switch--selected .mdc-switch__handle::after{opacity:var(--mat-slide-toggle-disabled-selected-handle-opacity, 1)}.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__handle::after{opacity:var(--mat-slide-toggle-disabled-unselected-handle-opacity, 0.38)}.mdc-switch__handle::before,.mdc-switch__handle::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:"";width:100%;height:100%;left:0;position:absolute;top:0;transition:background-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1),border-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);z-index:-1}@media(forced-colors: active){.mdc-switch__handle::before,.mdc-switch__handle::after{border-color:currentColor}}.mdc-switch--selected:enabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-handle-color, var(--mat-sys-on-primary))}.mdc-switch--selected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-hover-handle-color, var(--mat-sys-primary-container))}.mdc-switch--selected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-focus-handle-color, var(--mat-sys-primary-container))}.mdc-switch--selected:enabled:active .mdc-switch__handle::after{background:var(--mat-slide-toggle-selected-pressed-handle-color, var(--mat-sys-primary-container))}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:hover:not(:focus):not(:active) .mdc-switch__handle::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:focus:not(:active) .mdc-switch__handle::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled.mdc-switch--selected:active .mdc-switch__handle::after,.mdc-switch--selected.mdc-switch--disabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-disabled-selected-handle-color, var(--mat-sys-surface))}.mdc-switch--unselected:enabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-handle-color, var(--mat-sys-outline))}.mdc-switch--unselected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-hover-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-focus-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected:enabled:active .mdc-switch__handle::after{background:var(--mat-slide-toggle-unselected-pressed-handle-color, var(--mat-sys-on-surface-variant))}.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__handle::after{background:var(--mat-slide-toggle-disabled-unselected-handle-color, var(--mat-sys-on-surface))}.mdc-switch__handle::before{background:var(--mat-slide-toggle-handle-surface-color)}.mdc-switch__shadow{border-radius:inherit;bottom:0;left:0;position:absolute;right:0;top:0}.mdc-switch:enabled .mdc-switch__shadow{box-shadow:var(--mat-slide-toggle-handle-elevation-shadow)}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:hover:not(:focus):not(:active) .mdc-switch__shadow,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:focus:not(:active) .mdc-switch__shadow,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:active .mdc-switch__shadow,.mdc-switch.mdc-switch--disabled .mdc-switch__shadow{box-shadow:var(--mat-slide-toggle-disabled-handle-elevation-shadow)}.mdc-switch__ripple{left:50%;position:absolute;top:50%;transform:translate(-50%, -50%);z-index:-1;width:var(--mat-slide-toggle-state-layer-size, 40px);height:var(--mat-slide-toggle-state-layer-size, 40px)}.mdc-switch__ripple::after{content:"";opacity:0}.mdc-switch--disabled .mdc-switch__ripple::after{display:none}.mat-mdc-slide-toggle-disabled-interactive .mdc-switch__ripple::after{display:block}.mdc-switch:hover .mdc-switch__ripple::after{transition:75ms opacity cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:focus .mdc-switch__ripple::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:active .mdc-switch__ripple::after,.mat-mdc-slide-toggle-disabled-interactive.mdc-switch--disabled:enabled:hover:not(:focus) .mdc-switch__ripple::after,.mdc-switch--unselected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-switch--unselected:enabled:focus .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-switch--unselected:enabled:active .mdc-switch__ripple::after{background:var(--mat-slide-toggle-unselected-pressed-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-slide-toggle-unselected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));transition:opacity 75ms linear}.mdc-switch--selected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-hover-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-switch--selected:enabled:focus .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-focus-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-switch--selected:enabled:active .mdc-switch__ripple::after{background:var(--mat-slide-toggle-selected-pressed-state-layer-color, var(--mat-sys-primary));opacity:var(--mat-slide-toggle-selected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));transition:opacity 75ms linear}.mdc-switch__icons{position:relative;height:100%;width:100%;z-index:1;transform:translateZ(0)}.mdc-switch--disabled.mdc-switch--unselected .mdc-switch__icons{opacity:var(--mat-slide-toggle-disabled-unselected-icon-opacity, 0.38)}.mdc-switch--disabled.mdc-switch--selected .mdc-switch__icons{opacity:var(--mat-slide-toggle-disabled-selected-icon-opacity, 0.38)}.mdc-switch__icon{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;opacity:0;transition:opacity 30ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-switch--unselected .mdc-switch__icon{width:var(--mat-slide-toggle-unselected-icon-size, 16px);height:var(--mat-slide-toggle-unselected-icon-size, 16px);fill:var(--mat-slide-toggle-unselected-icon-color, var(--mat-sys-surface-variant))}.mdc-switch--unselected.mdc-switch--disabled .mdc-switch__icon{fill:var(--mat-slide-toggle-disabled-unselected-icon-color, var(--mat-sys-surface-variant))}.mdc-switch--selected .mdc-switch__icon{width:var(--mat-slide-toggle-selected-icon-size, 16px);height:var(--mat-slide-toggle-selected-icon-size, 16px);fill:var(--mat-slide-toggle-selected-icon-color, var(--mat-sys-on-primary-container))}.mdc-switch--selected.mdc-switch--disabled .mdc-switch__icon{fill:var(--mat-slide-toggle-disabled-selected-icon-color, var(--mat-sys-on-surface))}.mdc-switch--selected .mdc-switch__icon--on,.mdc-switch--unselected .mdc-switch__icon--off{opacity:1;transition:opacity 45ms 30ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle{-webkit-user-select:none;user-select:none;display:inline-block;-webkit-tap-highlight-color:rgba(0,0,0,0);outline:0}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple,.mat-mdc-slide-toggle .mdc-switch__ripple::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple:not(:empty),.mat-mdc-slide-toggle .mdc-switch__ripple::after:not(:empty){transform:translateZ(0)}.mat-mdc-slide-toggle.mat-mdc-slide-toggle-focused .mat-focus-indicator::before{content:""}.mat-mdc-slide-toggle .mat-internal-form-field{color:var(--mat-slide-toggle-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-slide-toggle-label-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-slide-toggle-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-slide-toggle-label-text-size, var(--mat-sys-body-medium-size));letter-spacing:var(--mat-slide-toggle-label-text-tracking, var(--mat-sys-body-medium-tracking));font-weight:var(--mat-slide-toggle-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-slide-toggle .mat-ripple-element{opacity:.12}.mat-mdc-slide-toggle .mat-focus-indicator::before{border-radius:50%}.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle-track,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__icon,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::after,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::after{transition:none}.mat-mdc-slide-toggle .mdc-switch:enabled+.mdc-label{cursor:pointer}.mat-mdc-slide-toggle .mdc-switch--disabled+label{color:var(--mat-slide-toggle-disabled-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-slide-toggle-touch-target{position:absolute;top:50%;left:50%;height:var(--mat-slide-toggle-touch-target-size, 48px);width:100%;transform:translate(-50%, -50%);display:var(--mat-slide-toggle-touch-target-display, block)}[dir=rtl] .mat-mdc-slide-toggle-touch-target{left:auto;right:50%;transform:translate(50%, -50%)} -`],encapsulation:2,changeDetection:0})}return t})();function aBA(t,e){if(t&1){let A=JA();m(0,"div",1)(1,"button",2),tA("click",function(){Z(A);let n=v();return X(n.action())}),K(2),w()()}if(t&2){let A=v();p(2),Se(" ",A.data.action," ")}}var rBA=["label"];function sBA(t,e){}var gBA=Math.pow(2,31)-1,y4=class{_overlayRef;instance;containerInstance;_afterDismissed=new XA;_afterOpened=new XA;_onAction=new XA;_durationTimeoutId;_dismissedByAction=!1;constructor(e,A){this._overlayRef=A,this.containerInstance=e,e._onExit.subscribe(()=>this._finishDismiss())}dismiss(){this._afterDismissed.closed||this.containerInstance.exit(),clearTimeout(this._durationTimeoutId)}dismissWithAction(){this._onAction.closed||(this._dismissedByAction=!0,this._onAction.next(),this._onAction.complete(),this.dismiss()),clearTimeout(this._durationTimeoutId)}closeWithAction(){this.dismissWithAction()}_dismissAfter(e){this._durationTimeoutId=setTimeout(()=>this.dismiss(),Math.min(e,gBA))}_open(){this._afterOpened.closed||(this._afterOpened.next(),this._afterOpened.complete())}_finishDismiss(){this._overlayRef.dispose(),this._onAction.closed||this._onAction.complete(),this._afterDismissed.next({dismissedByAction:this._dismissedByAction}),this._afterDismissed.complete(),this._dismissedByAction=!1}afterDismissed(){return this._afterDismissed}afterOpened(){return this.containerInstance._onEnter}onAction(){return this._onAction}},Lz=new yA("MatSnackBarData"),lE=class{politeness="polite";announcementMessage="";viewContainerRef;duration=0;panelClass;direction;data=null;horizontalPosition="center";verticalPosition="bottom"},lBA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matSnackBarLabel",""]],hostAttrs:[1,"mat-mdc-snack-bar-label","mdc-snackbar__label"]})}return t})(),cBA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matSnackBarActions",""]],hostAttrs:[1,"mat-mdc-snack-bar-actions","mdc-snackbar__actions"]})}return t})(),CBA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matSnackBarAction",""]],hostAttrs:[1,"mat-mdc-snack-bar-action","mdc-snackbar__action"]})}return t})(),IBA=(()=>{class t{snackBarRef=h(y4);data=h(Lz);constructor(){}action(){this.snackBarRef.dismissWithAction()}get hasAction(){return!!this.data.action}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["simple-snack-bar"]],hostAttrs:[1,"mat-mdc-simple-snack-bar"],exportAs:["matSnackBar"],decls:3,vars:2,consts:[["matSnackBarLabel",""],["matSnackBarActions",""],["matButton","","matSnackBarAction","",3,"click"]],template:function(i,n){i&1&&(m(0,"div",0),K(1),w(),V(2,aBA,3,1,"div",1)),i&2&&(p(),Se(" ",n.data.message,` -`),p(),W(n.hasAction?2:-1))},dependencies:[fn,lBA,cBA,CBA],styles:[`.mat-mdc-simple-snack-bar{display:flex}.mat-mdc-simple-snack-bar .mat-mdc-snack-bar-label{max-height:50vh;overflow:auto} -`],encapsulation:2,changeDetection:0})}return t})(),Bk="_mat-snack-bar-enter",Ek="_mat-snack-bar-exit",dBA=(()=>{class t extends L2{_ngZone=h(Oe);_elementRef=h(ge);_changeDetectorRef=h(Dt);_platform=h(Ii);_animationsDisabled=ji();snackBarConfig=h(lE);_document=h(Xt);_trackedModals=new Set;_enterFallback;_exitFallback;_injector=h(ft);_announceDelay=150;_announceTimeoutId;_destroyed=!1;_portalOutlet;_onAnnounce=new XA;_onExit=new XA;_onEnter=new XA;_animationState="void";_live;_label;_role;_liveElementId=h(an).getId("mat-snack-bar-container-live-");constructor(){super();let A=this.snackBarConfig;A.politeness==="assertive"&&!A.announcementMessage?this._live="assertive":A.politeness==="off"?this._live="off":this._live="polite",this._platform.FIREFOX&&(this._live==="polite"&&(this._role="status"),this._live==="assertive"&&(this._role="alert"))}attachComponentPortal(A){this._assertNotAttached();let i=this._portalOutlet.attachComponentPortal(A);return this._afterPortalAttached(),i}attachTemplatePortal(A){this._assertNotAttached();let i=this._portalOutlet.attachTemplatePortal(A);return this._afterPortalAttached(),i}attachDomPortal=A=>{this._assertNotAttached();let i=this._portalOutlet.attachDomPortal(A);return this._afterPortalAttached(),i};onAnimationEnd(A){A===Ek?this._completeExit():A===Bk&&(clearTimeout(this._enterFallback),this._ngZone.run(()=>{this._onEnter.next(),this._onEnter.complete()}))}enter(){this._destroyed||(this._animationState="visible",this._changeDetectorRef.markForCheck(),this._changeDetectorRef.detectChanges(),this._screenReaderAnnounce(),this._animationsDisabled?Yn(()=>{this._ngZone.run(()=>queueMicrotask(()=>this.onAnimationEnd(Bk)))},{injector:this._injector}):(clearTimeout(this._enterFallback),this._enterFallback=setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-snack-bar-fallback-visible"),this.onAnimationEnd(Bk)},200)))}exit(){return this._destroyed?se(void 0):(this._ngZone.run(()=>{this._animationState="hidden",this._changeDetectorRef.markForCheck(),this._elementRef.nativeElement.setAttribute("mat-exit",""),clearTimeout(this._announceTimeoutId),this._animationsDisabled?Yn(()=>{this._ngZone.run(()=>queueMicrotask(()=>this.onAnimationEnd(Ek)))},{injector:this._injector}):(clearTimeout(this._exitFallback),this._exitFallback=setTimeout(()=>this.onAnimationEnd(Ek),200))}),this._onExit)}ngOnDestroy(){this._destroyed=!0,this._clearFromModals(),this._completeExit()}_completeExit(){clearTimeout(this._exitFallback),queueMicrotask(()=>{this._onExit.next(),this._onExit.complete()})}_afterPortalAttached(){let A=this._elementRef.nativeElement,i=this.snackBarConfig.panelClass;i&&(Array.isArray(i)?i.forEach(a=>A.classList.add(a)):A.classList.add(i)),this._exposeToModals();let n=this._label.nativeElement,o="mdc-snackbar__label";n.classList.toggle(o,!n.querySelector(`.${o}`))}_exposeToModals(){let A=this._liveElementId,i=this._document.querySelectorAll('body > .cdk-overlay-container [aria-modal="true"]');for(let n=0;n{let i=A.getAttribute("aria-owns");if(i){let n=i.replace(this._liveElementId,"").trim();n.length>0?A.setAttribute("aria-owns",n):A.removeAttribute("aria-owns")}}),this._trackedModals.clear()}_assertNotAttached(){this._portalOutlet.hasAttached()}_screenReaderAnnounce(){this._announceTimeoutId||this._ngZone.runOutsideAngular(()=>{this._announceTimeoutId=setTimeout(()=>{if(this._destroyed)return;let A=this._elementRef.nativeElement,i=A.querySelector("[aria-hidden]"),n=A.querySelector("[aria-live]");if(i&&n){let o=null;this._platform.isBrowser&&document.activeElement instanceof HTMLElement&&i.contains(document.activeElement)&&(o=document.activeElement),i.removeAttribute("aria-hidden"),n.appendChild(i),o?.focus(),this._onAnnounce.next(),this._onAnnounce.complete()}},this._announceDelay)})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-snack-bar-container"]],viewQuery:function(i,n){if(i&1&&ai(Yg,7)(rBA,7),i&2){let o;ce(o=Ce())&&(n._portalOutlet=o.first),ce(o=Ce())&&(n._label=o.first)}},hostAttrs:[1,"mdc-snackbar","mat-mdc-snack-bar-container"],hostVars:6,hostBindings:function(i,n){i&1&&tA("animationend",function(a){return n.onAnimationEnd(a.animationName)})("animationcancel",function(a){return n.onAnimationEnd(a.animationName)}),i&2&&ne("mat-snack-bar-container-enter",n._animationState==="visible")("mat-snack-bar-container-exit",n._animationState==="hidden")("mat-snack-bar-container-animations-enabled",!n._animationsDisabled)},features:[It],decls:6,vars:3,consts:[["label",""],[1,"mdc-snackbar__surface","mat-mdc-snackbar-surface"],[1,"mat-mdc-snack-bar-label"],["aria-hidden","true"],["cdkPortalOutlet",""]],template:function(i,n){i&1&&(m(0,"div",1)(1,"div",2,0)(3,"div",3),pt(4,sBA,0,0,"ng-template",4),w(),GA(5,"div"),w()()),i&2&&(p(5),ie("aria-live",n._live)("role",n._role)("id",n._liveElementId))},dependencies:[Yg],styles:[`@keyframes _mat-snack-bar-enter{from{transform:scale(0.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes _mat-snack-bar-exit{from{opacity:1}to{opacity:0}}.mat-mdc-snack-bar-container{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);margin:8px}.mat-mdc-snack-bar-handset .mat-mdc-snack-bar-container{width:100vw}.mat-snack-bar-container-animations-enabled{opacity:0}.mat-snack-bar-container-animations-enabled.mat-snack-bar-fallback-visible{opacity:1}.mat-snack-bar-container-animations-enabled.mat-snack-bar-container-enter{animation:_mat-snack-bar-enter 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-snack-bar-container-animations-enabled.mat-snack-bar-container-exit{animation:_mat-snack-bar-exit 75ms cubic-bezier(0.4, 0, 1, 1) forwards}.mat-mdc-snackbar-surface{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box;padding-left:0;padding-right:8px}[dir=rtl] .mat-mdc-snackbar-surface{padding-right:0;padding-left:8px}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{min-width:344px;max-width:672px}.mat-mdc-snack-bar-handset .mat-mdc-snackbar-surface{width:100%;min-width:0}@media(forced-colors: active){.mat-mdc-snackbar-surface{outline:solid 1px}}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{color:var(--mat-snack-bar-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-snack-bar-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-snack-bar-container-color, var(--mat-sys-inverse-surface))}.mdc-snackbar__label{width:100%;flex-grow:1;box-sizing:border-box;margin:0;padding:14px 8px 14px 16px}[dir=rtl] .mdc-snackbar__label{padding-left:8px;padding-right:16px}.mat-mdc-snack-bar-container .mdc-snackbar__label{font-family:var(--mat-snack-bar-supporting-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-snack-bar-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-snack-bar-supporting-text-weight, var(--mat-sys-body-medium-weight));line-height:var(--mat-snack-bar-supporting-text-line-height, var(--mat-sys-body-medium-line-height))}.mat-mdc-snack-bar-actions{display:flex;flex-shrink:0;align-items:center;box-sizing:border-box}.mat-mdc-snack-bar-handset,.mat-mdc-snack-bar-container,.mat-mdc-snack-bar-label{flex:1 1 auto}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled){--mat-button-text-state-layer-color: currentColor;--mat-button-text-ripple-color: currentColor}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled).mat-unthemed{color:var(--mat-snack-bar-button-color, var(--mat-sys-inverse-primary))}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled) .mat-ripple-element{opacity:.1} -`],encapsulation:2})}return t})(),BBA=new yA("mat-snack-bar-default-options",{providedIn:"root",factory:()=>new lE}),J2=(()=>{class t{_live=h(vu);_injector=h(ft);_breakpointObserver=h(Du);_parentSnackBar=h(t,{optional:!0,skipSelf:!0});_defaultConfig=h(BBA);_animationsDisabled=ji();_snackBarRefAtThisLevel=null;simpleSnackBarComponent=IBA;snackBarContainerComponent=dBA;handsetCssClass="mat-mdc-snack-bar-handset";get _openedSnackBarRef(){let A=this._parentSnackBar;return A?A._openedSnackBarRef:this._snackBarRefAtThisLevel}set _openedSnackBarRef(A){this._parentSnackBar?this._parentSnackBar._openedSnackBarRef=A:this._snackBarRefAtThisLevel=A}constructor(){}openFromComponent(A,i){return this._attach(A,i)}openFromTemplate(A,i){return this._attach(A,i)}open(A,i="",n){let o=cA(cA({},this._defaultConfig),n);return o.data={message:A,action:i},o.announcementMessage===A&&(o.announcementMessage=void 0),this.openFromComponent(this.simpleSnackBarComponent,o)}dismiss(){this._openedSnackBarRef&&this._openedSnackBarRef.dismiss()}ngOnDestroy(){this._snackBarRefAtThisLevel&&this._snackBarRefAtThisLevel.dismiss()}_attachSnackBarContainer(A,i){let n=i&&i.viewContainerRef&&i.viewContainerRef.injector,o=ft.create({parent:n||this._injector,providers:[{provide:lE,useValue:i}]}),a=new Jg(this.snackBarContainerComponent,i.viewContainerRef,o),r=A.attach(a);return r.instance.snackBarConfig=i,r.instance}_attach(A,i){let n=cA(cA(cA({},new lE),this._defaultConfig),i),o=this._createOverlay(n),a=this._attachSnackBarContainer(o,n),r=new y4(a,o);if(A instanceof Tn){let s=new Is(A,null,{$implicit:n.data,snackBarRef:r});r.instance=a.attachTemplatePortal(s)}else{let s=this._createInjector(n,r),g=new Jg(A,void 0,s),l=a.attachComponentPortal(g);r.instance=l.instance}return this._breakpointObserver.observe(qJ.HandsetPortrait).pipe(Bt(o.detachments())).subscribe(s=>{o.overlayElement.classList.toggle(this.handsetCssClass,s.matches)}),n.announcementMessage&&a._onAnnounce.subscribe(()=>{this._live.announce(n.announcementMessage,n.politeness)}),this._animateSnackBar(r,n),this._openedSnackBarRef=r,this._openedSnackBarRef}_animateSnackBar(A,i){A.afterDismissed().subscribe(()=>{this._openedSnackBarRef==A&&(this._openedSnackBarRef=null),i.announcementMessage&&this._live.clear()}),i.duration&&i.duration>0&&A.afterOpened().subscribe(()=>A._dismissAfter(i.duration)),this._openedSnackBarRef?(this._openedSnackBarRef.afterDismissed().subscribe(()=>{A.containerInstance.enter()}),this._openedSnackBarRef.dismiss()):A.containerInstance.enter()}_createOverlay(A){let i=new sc;i.direction=A.direction;let n=G2(this._injector),o=A.direction==="rtl",a=A.horizontalPosition==="left"||A.horizontalPosition==="start"&&!o||A.horizontalPosition==="end"&&o,r=!a&&A.horizontalPosition!=="center";return a?n.left("0"):r?n.right("0"):n.centerHorizontally(),A.verticalPosition==="top"?n.top("0"):n.bottom("0"),i.positionStrategy=n,i.disableAnimations=this._animationsDisabled,lc(this._injector,i)}_createInjector(A,i){let n=A&&A.viewContainerRef&&A.viewContainerRef.injector;return ft.create({parent:n||this._injector,providers:[{provide:y4,useValue:i},{provide:Lz,useValue:A.data}]})}static \u0275fac=function(i){return new(i||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var EBA=t=>["segment",t],QBA=(t,e)=>({"segment-main":!0,expandable:t,expanded:e});function hBA(t,e){t&1&&GA(0,"div",9)}function uBA(t,e){if(t&1&&(m(0,"span",10),K(1),w()),t&2){let A=v().$implicit;p(),qA(A.description)}}function fBA(t,e){if(t&1&&(m(0,"section",11),GA(1,"ngx-json-viewer",12),w()),t&2){let A=v().$implicit,i=v();p(),$("json",A.value)("expanded",i.expanded)("depth",i.depth)("_currentDepth",i._currentDepth+1)}}function mBA(t,e){if(t&1){let A=JA();m(0,"section",2)(1,"section",3),tA("click",function(){let n=Z(A).$implicit,o=v();return X(o.toggle(n))}),pt(2,hBA,1,0,"div",4),m(3,"span",5),K(4),w(),m(5,"span",6),K(6,": "),w(),pt(7,uBA,2,1,"span",7),w(),pt(8,fBA,2,4,"section",8),w()}if(t&2){let A=e.$implicit,i=v();$("ngClass",ss(6,EBA,"segment-type-"+A.type)),p(),$("ngClass",Zl(8,QBA,i.isExpandable(A),A.expanded)),p(),$("ngIf",i.isExpandable(A)),p(2),qA(A.key),p(3),$("ngIf",!A.expanded||!i.isExpandable(A)),p(),$("ngIf",A.expanded&&i.isExpandable(A))}}var Y2=(()=>{class t{constructor(){this.expanded=!0,this.depth=-1,this._currentDepth=0,this.segments=[]}ngOnChanges(){this.segments=[],this.json=this.decycle(this.json),typeof this.json=="object"?Object.keys(this.json).forEach(A=>{this.segments.push(this.parseKeyValue(A,this.json[A]))}):this.segments.push(this.parseKeyValue(`(${typeof this.json})`,this.json))}isExpandable(A){return A.type==="object"||A.type==="array"}toggle(A){this.isExpandable(A)&&(A.expanded=!A.expanded)}parseKeyValue(A,i){let n={key:A,value:i,type:void 0,description:""+i,expanded:this.isExpanded()};switch(typeof n.value){case"number":{n.type="number";break}case"boolean":{n.type="boolean";break}case"function":{n.type="function";break}case"string":{n.type="string",n.description='"'+n.value+'"';break}case"undefined":{n.type="undefined",n.description="undefined";break}case"object":{n.value===null?(n.type="null",n.description="null"):Array.isArray(n.value)?(n.type="array",n.description="Array["+n.value.length+"] "+JSON.stringify(n.value)):n.value instanceof Date?n.type="date":(n.type="object",n.description="Object "+JSON.stringify(n.value));break}}return n}isExpanded(){return this.expanded&&!(this.depth>-1&&this._currentDepth>=this.depth)}decycle(A){let i=new WeakMap;return(function n(o,a){let r,s;return typeof o=="object"&&o!==null&&!(o instanceof Boolean)&&!(o instanceof Date)&&!(o instanceof Number)&&!(o instanceof RegExp)&&!(o instanceof String)?(r=i.get(o),r!==void 0?{$ref:r}:(i.set(o,a),Array.isArray(o)?(s=[],o.forEach(function(g,l){s[l]=n(g,a+"["+l+"]")})):(s={},Object.keys(o).forEach(function(g){s[g]=n(o[g],a+"["+JSON.stringify(g)+"]")})),s)):o})(A,"$")}}return t.\u0275fac=function(A){return new(A||t)},t.\u0275cmp=kA({type:t,selectors:[["ngx-json-viewer"]],inputs:{json:"json",expanded:"expanded",depth:"depth",_currentDepth:"_currentDepth"},standalone:!1,features:[ti],decls:2,vars:1,consts:[[1,"ngx-json-viewer"],[3,"ngClass",4,"ngFor","ngForOf"],[3,"ngClass"],[3,"click","ngClass"],["class","toggler",4,"ngIf"],[1,"segment-key"],[1,"segment-separator"],["class","segment-value",4,"ngIf"],["class","children",4,"ngIf"],[1,"toggler"],[1,"segment-value"],[1,"children"],[3,"json","expanded","depth","_currentDepth"]],template:function(A,i){A&1&&(m(0,"section",0),pt(1,mBA,9,11,"section",1),w()),A&2&&(p(),$("ngForOf",i.segments))},dependencies:[gs,DB,rl,t],styles:['@charset "UTF-8";.ngx-json-viewer[_ngcontent-%COMP%]{font-family:var(--ngx-json-font-family, monospace);font-size:var(--ngx-json-font-size, 1em);width:100%;height:100%;overflow:hidden;position:relative}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%]{padding:2px;margin:1px 1px 1px 12px}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%]{word-wrap:break-word}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .toggler[_ngcontent-%COMP%]{position:absolute;margin-left:-14px;margin-top:3px;font-size:.8em;line-height:1.2em;vertical-align:middle;color:var(--ngx-json-toggler, #787878)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .toggler[_ngcontent-%COMP%]:after{display:inline-block;content:"\\25ba";transition:transform .1s ease-in}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-key[_ngcontent-%COMP%]{color:var(--ngx-json-key, #4E187C)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-separator[_ngcontent-%COMP%]{color:var(--ngx-json-separator, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .segment-main[_ngcontent-%COMP%] .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-value, #000)}.ngx-json-viewer[_ngcontent-%COMP%] .segment[_ngcontent-%COMP%] .children[_ngcontent-%COMP%]{margin-left:12px}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-string[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-string, #FF6B6B)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-number[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-number, #009688)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-boolean[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-boolean, #B938A4)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-date[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-date, #05668D)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-array[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-array, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-object[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-object, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-function[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-function, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-null[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-null, #fff)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{color:var(--ngx-json-undefined, #fff)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-null[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{background-color:var(--ngx-json-null-bg, red)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-key[_ngcontent-%COMP%]{color:var(--ngx-json-undefined-key, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-undefined[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%] > .segment-value[_ngcontent-%COMP%]{background-color:var(--ngx-json-undefined-key, #999)}.ngx-json-viewer[_ngcontent-%COMP%] .segment-type-object[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%], .ngx-json-viewer[_ngcontent-%COMP%] .segment-type-array[_ngcontent-%COMP%] > .segment-main[_ngcontent-%COMP%]{white-space:nowrap}.ngx-json-viewer[_ngcontent-%COMP%] .expanded[_ngcontent-%COMP%] > .toggler[_ngcontent-%COMP%]:after{transform:rotate(90deg)}.ngx-json-viewer[_ngcontent-%COMP%] .expandable[_ngcontent-%COMP%], .ngx-json-viewer[_ngcontent-%COMP%] .expandable[_ngcontent-%COMP%] > .toggler[_ngcontent-%COMP%]{cursor:pointer}']}),t})(),E0=(()=>{class t{}return t.\u0275fac=function(A){return new(A||t)},t.\u0275mod=$e({type:t}),t.\u0275inj=Xe({imports:[ma]}),t})();var zr=class t{static getBaseUrlWithoutPath(){let e=window.location.href;return new URL(e).origin+"/dev-ui/"}static getApiServerBaseUrl(){return window.runtimeConfig?.backendUrl||""}static getWSServerUrl(){let e=t.getApiServerBaseUrl();return!e||e==""?window.location.host:e.startsWith("http://")?e.slice(7):e.startsWith("https://")?e.slice(8):e}};var sg=new yA("AgentService");var Q0=new yA("AgentBuilderService");var u8=new yA("ArtifactService");var cE=new yA("DownloadService");var h0=new yA("EvalService");var CE=new yA("EventService");var Gz="import_session",Kz="edit_function_args";var Uz="a2a_card",vr=new yA("FeatureFlagService");var IE=new yA("GraphService");var f8=new yA("LocalFileService");var u0=new yA("SafeValuesService"),m8=class{openBase64InNewTab(e,A){try{if(!e)return;let i=e;if(e.startsWith("data:")&&e.includes(";base64,")&&(i=i.substring(i.indexOf(";base64,")+8)),!A||!i)return;let n=atob(i),o=new Array(n.length);for(let g=0;gthis.onResizeHandleMouseDown(e)),document.documentElement.style.setProperty("--bottom-panel-height","310px"),this.renderer.setStyle(this.el.nativeElement,"height","var(--bottom-panel-height)")}onResizeHandleMouseDown(e){this.resizingEvent={isResizing:!0,startingCursorY:e.clientY,startingHeight:this.bottomPanelHeight},e.preventDefault()}onMouseMove(e){if(!this.resizingEvent.isResizing)return;let A=this.resizingEvent.startingCursorY-e.clientY,i=this.resizingEvent.startingHeight+A;this.bottomPanelHeight=i,this.renderer.addClass(document.body,"resizing")}onMouseUp(){this.resizingEvent.isResizing=!1,this.renderer.removeClass(document.body,"resizing")}onResize(){this.bottomMaxHeight=window.innerHeight/2,this.bottomPanelHeight=this.bottomPanelHeight}set bottomPanelHeight(e){let A=Math.min(Math.max(e,this.bottomMinHeight),this.bottomMaxHeight);document.body.style.setProperty("--bottom-panel-height",`${A}px`)}get bottomPanelHeight(){let e=getComputedStyle(document.body).getPropertyValue("--bottom-panel-height"),A=parseInt(e,10);return isNaN(A)?500:A}static \u0275fac=function(A){return new(A||t)(at(ge),at(_i))};static \u0275dir=OA({type:t,selectors:[["","appResizableBottomPanel",""]],hostBindings:function(A,i){A&1&&tA("mousemove",function(o){return i.onMouseMove(o)},nC)("mouseup",function(){return i.onMouseUp()},nC)("resize",function(){return i.onResize()},m2)}})};var y8=class t{constructor(e,A){this.el=e;this.renderer=A}sideDrawerMinWidth=310;sideDrawerMaxWidth=window.innerWidth/2;resizeHandle=null;resizingEvent={isResizing:!1,startingCursorX:0,startingWidth:0};ngAfterViewInit(){this.sideDrawerMaxWidth=window.innerWidth/2,this.resizeHandle=document.getElementsByClassName("resize-handler")[0],this.resizeHandle&&this.renderer.listen(this.resizeHandle,"mousedown",e=>this.onResizeHandleMouseDown(e)),document.documentElement.style.setProperty("--side-drawer-width","570px"),this.renderer.setStyle(this.el.nativeElement,"width","var(--side-drawer-width)")}onResizeHandleMouseDown(e){this.resizingEvent={isResizing:!0,startingCursorX:e.clientX,startingWidth:this.sideDrawerWidth},e.preventDefault()}onMouseMove(e){if(!this.resizingEvent.isResizing)return;let A=e.clientX-this.resizingEvent.startingCursorX,i=this.resizingEvent.startingWidth+A;this.sideDrawerWidth=i,this.renderer.addClass(document.body,"resizing")}onMouseUp(){this.resizingEvent.isResizing=!1,this.renderer.removeClass(document.body,"resizing")}onResize(){this.sideDrawerMaxWidth=window.innerWidth/2,this.sideDrawerWidth=this.sideDrawerWidth}set sideDrawerWidth(e){let A=Math.min(Math.max(e,this.sideDrawerMinWidth),this.sideDrawerMaxWidth);document.documentElement.style.setProperty("--side-drawer-width",`${A}px`)}get sideDrawerWidth(){let e=getComputedStyle(document.documentElement).getPropertyValue("--side-drawer-width"),A=parseFloat(e);return isNaN(A)?500:A}static \u0275fac=function(A){return new(A||t)(at(ge),at(_i))};static \u0275dir=OA({type:t,selectors:[["","appResizableDrawer",""]],hostBindings:function(A,i){A&1&&tA("mousemove",function(o){return i.onMouseMove(o)},nC)("mouseup",function(){return i.onMouseUp()},nC)("resize",function(){return i.onResize()},m2)}})};var v8=Symbol.for("yaml.alias"),b8=Symbol.for("yaml.document"),cc=Symbol.for("yaml.map"),Qk=Symbol.for("yaml.pair"),Tg=Symbol.for("yaml.scalar"),fC=Symbol.for("yaml.seq"),Ks=Symbol.for("yaml.node.type"),hl=t=>!!t&&typeof t=="object"&&t[Ks]===v8,Cc=t=>!!t&&typeof t=="object"&&t[Ks]===b8,Ic=t=>!!t&&typeof t=="object"&&t[Ks]===cc,mn=t=>!!t&&typeof t=="object"&&t[Ks]===Qk,Yi=t=>!!t&&typeof t=="object"&&t[Ks]===Tg,dc=t=>!!t&&typeof t=="object"&&t[Ks]===fC;function so(t){if(t&&typeof t=="object")switch(t[Ks]){case cc:case fC:return!0}return!1}function yn(t){if(t&&typeof t=="object")switch(t[Ks]){case v8:case cc:case Tg:case fC:return!0}return!1}var M8=t=>(Yi(t)||so(t))&&!!t.anchor;var gg=Symbol("break visit"),Jz=Symbol("skip children"),f0=Symbol("remove node");function m0(t,e){let A=Yz(e);Cc(t)?BE(null,t.contents,A,Object.freeze([t]))===f0&&(t.contents=null):BE(null,t,A,Object.freeze([]))}m0.BREAK=gg;m0.SKIP=Jz;m0.REMOVE=f0;function BE(t,e,A,i){let n=Tz(t,e,A,i);if(yn(n)||mn(n))return Hz(t,i,n),BE(t,n,A,i);if(typeof n!="symbol"){if(so(e)){i=Object.freeze(i.concat(e));for(let o=0;ot.replace(/[!,[\]{}]/g,e=>pBA[e]),QE=(()=>{class t{constructor(A,i){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},t.defaultYaml,A),this.tags=Object.assign({},t.defaultTags,i)}clone(){let A=new t(this.yaml,this.tags);return A.docStart=this.docStart,A}atDocument(){let A=new t(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:t.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},t.defaultTags);break}return A}add(A,i){this.atNextDocument&&(this.yaml={explicit:t.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},t.defaultTags),this.atNextDocument=!1);let n=A.trim().split(/[ \t]+/),o=n.shift();switch(o){case"%TAG":{if(n.length!==2&&(i(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;let[a,r]=n;return this.tags[a]=r,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return i(0,"%YAML directive should contain exactly one part"),!1;let[a]=n;if(a==="1.1"||a==="1.2")return this.yaml.version=a,!0;{let r=/^\d+\.\d+$/.test(a);return i(6,`Unsupported YAML version ${a}`,r),!1}}default:return i(0,`Unknown directive ${o}`,!0),!1}}tagName(A,i){if(A==="!")return"!";if(A[0]!=="!")return i(`Not a valid tag: ${A}`),null;if(A[1]==="<"){let r=A.slice(2,-1);return r==="!"||r==="!!"?(i(`Verbatim tags aren't resolved, so ${A} is invalid.`),null):(A[A.length-1]!==">"&&i("Verbatim tags must end with a >"),r)}let[,n,o]=A.match(/^(.*!)([^!]*)$/s);o||i(`The ${A} tag has no suffix`);let a=this.tags[n];if(a)try{return a+decodeURIComponent(o)}catch(r){return i(String(r)),null}return n==="!"?A:(i(`Could not resolve tag: ${A}`),null)}tagString(A){for(let[i,n]of Object.entries(this.tags))if(A.startsWith(n))return i+wBA(A.substring(n.length));return A[0]==="!"?A:`!<${A}>`}toString(A){let i=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags),o;if(A&&n.length>0&&yn(A.contents)){let a={};m0(A.contents,(r,s)=>{yn(s)&&s.tag&&(a[s.tag]=!0)}),o=Object.keys(a)}else o=[];for(let[a,r]of n)a==="!!"&&r==="tag:yaml.org,2002:"||(!A||o.some(s=>s.startsWith(r)))&&i.push(`%TAG ${a} ${r}`);return i.join(` -`)}}return t.defaultYaml={explicit:!1,version:"1.2"},t.defaultTags={"!!":"tag:yaml.org,2002:"},t})();function S8(t){if(/[\x00-\x19\s,[\]{}]/.test(t)){let A=`Anchor must not contain whitespace or control characters: ${JSON.stringify(t)}`;throw new Error(A)}return!0}function hk(t){let e=new Set;return m0(t,{Value(A,i){i.anchor&&e.add(i.anchor)}}),e}function uk(t,e){for(let A=1;;++A){let i=`${t}${A}`;if(!e.has(i))return i}}function zz(t,e){let A=[],i=new Map,n=null;return{onAnchor:o=>{A.push(o),n??(n=hk(t));let a=uk(e,n);return n.add(a),a},setAnchors:()=>{for(let o of A){let a=i.get(o);if(typeof a=="object"&&a.anchor&&(Yi(a.node)||so(a.node)))a.node.anchor=a.anchor;else{let r=new Error("Failed to resolve repeated object (this should not happen)");throw r.source=o,r}}},sourceObjects:i}}function H2(t,e,A,i){if(i&&typeof i=="object")if(Array.isArray(i))for(let n=0,o=i.length;nEr(i,String(n),A));if(t&&typeof t.toJSON=="function"){if(!A||!M8(t))return t.toJSON(e,A);let i={aliasCount:0,count:1,res:void 0};A.anchors.set(t,i),A.onCreate=o=>{i.res=o,delete A.onCreate};let n=t.toJSON(e,A);return A.onCreate&&A.onCreate(n),n}return typeof t=="bigint"&&!A?.keep?Number(t):t}var z2=class{constructor(e){Object.defineProperty(this,Ks,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:A,maxAliasCount:i,onAnchor:n,reviver:o}={}){if(!Cc(e))throw new TypeError("A document argument is required");let a={anchors:new Map,doc:e,keep:!0,mapAsMap:A===!0,mapKeyWarned:!1,maxAliasCount:typeof i=="number"?i:100},r=Er(this,"",a);if(typeof n=="function")for(let{count:s,res:g}of a.anchors.values())n(g,s);return typeof o=="function"?H2(o,{"":r},"",r):r}};var mC=class extends z2{constructor(e){super(v8),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,A){let i;A?.aliasResolveCache?i=A.aliasResolveCache:(i=[],m0(e,{Node:(o,a)=>{(hl(a)||M8(a))&&i.push(a)}}),A&&(A.aliasResolveCache=i));let n;for(let o of i){if(o===this)break;o.anchor===this.source&&(n=o)}return n}toJSON(e,A){if(!A)return{source:this.source};let{anchors:i,doc:n,maxAliasCount:o}=A,a=this.resolve(n,A);if(!a){let s=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(s)}let r=i.get(a);if(r||(Er(a,null,A),r=i.get(a)),r?.res===void 0){let s="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(s)}if(o>=0&&(r.count+=1,r.aliasCount===0&&(r.aliasCount=x8(n,a,i)),r.count*r.aliasCount>o)){let s="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(s)}return r.res}toString(e,A,i){let n=`*${this.source}`;if(e){if(S8(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let o=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(o)}if(e.implicitKey)return`${n} `}return n}};function x8(t,e,A){if(hl(e)){let i=e.resolve(t),n=A&&i&&A.get(i);return n?n.count*n.aliasCount:0}else if(so(e)){let i=0;for(let n of e.items){let o=x8(t,n,A);o>i&&(i=o)}return i}else if(mn(e)){let i=x8(t,e.key,A),n=x8(t,e.value,A);return Math.max(i,n)}return 1}var R8=t=>!t||typeof t!="function"&&typeof t!="object",zt=(()=>{class t extends z2{constructor(A){super(Tg),this.value=A}toJSON(A,i){return i?.keep?this.value:Er(this.value,A,i)}toString(){return String(this.value)}}return t.BLOCK_FOLDED="BLOCK_FOLDED",t.BLOCK_LITERAL="BLOCK_LITERAL",t.PLAIN="PLAIN",t.QUOTE_DOUBLE="QUOTE_DOUBLE",t.QUOTE_SINGLE="QUOTE_SINGLE",t})();var DBA="tag:yaml.org,2002:";function yBA(t,e,A){if(e){let i=A.filter(o=>o.tag===e),n=i.find(o=>!o.format)??i[0];if(!n)throw new Error(`Tag ${e} not found`);return n}return A.find(i=>i.identify?.(t)&&!i.format)}function pC(t,e,A){if(Cc(t)&&(t=t.contents),yn(t))return t;if(mn(t)){let C=A.schema[cc].createNode?.(A.schema,null,A);return C.items.push(t),C}(t instanceof String||t instanceof Number||t instanceof Boolean||typeof BigInt<"u"&&t instanceof BigInt)&&(t=t.valueOf());let{aliasDuplicateObjects:i,onAnchor:n,onTagObj:o,schema:a,sourceObjects:r}=A,s;if(i&&t&&typeof t=="object"){if(s=r.get(t),s)return s.anchor??(s.anchor=n(t)),new mC(s.anchor);s={anchor:null,node:null},r.set(t,s)}e?.startsWith("!!")&&(e=DBA+e.slice(2));let g=yBA(t,e,a.tags);if(!g){if(t&&typeof t.toJSON=="function"&&(t=t.toJSON()),!t||typeof t!="object"){let C=new zt(t);return s&&(s.node=C),C}g=t instanceof Map?a[cc]:Symbol.iterator in Object(t)?a[fC]:a[cc]}o&&(o(g),delete A.onTagObj);let l=g?.createNode?g.createNode(A.schema,t,A):typeof g?.nodeClass?.from=="function"?g.nodeClass.from(A.schema,t,A):new zt(t);return e?l.tag=e:g.default||(l.tag=g.tag),s&&(s.node=l),l}function v4(t,e,A){let i=A;for(let n=e.length-1;n>=0;--n){let o=e[n];if(typeof o=="number"&&Number.isInteger(o)&&o>=0){let a=[];a[o]=i,i=a}else i=new Map([[o,i]])}return pC(i,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:t,sourceObjects:new Map})}var uE=t=>t==null||typeof t=="object"&&!!t[Symbol.iterator]().next().done,hE=class extends z2{constructor(e,A){super(e),Object.defineProperty(this,"schema",{value:A,configurable:!0,enumerable:!1,writable:!0})}clone(e){let A=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(A.schema=e),A.items=A.items.map(i=>yn(i)||mn(i)?i.clone(e):i),this.range&&(A.range=this.range.slice()),A}addIn(e,A){if(uE(e))this.add(A);else{let[i,...n]=e,o=this.get(i,!0);if(so(o))o.addIn(n,A);else if(o===void 0&&this.schema)this.set(i,v4(this.schema,n,A));else throw new Error(`Expected YAML collection at ${i}. Remaining path: ${n}`)}}deleteIn(e){let[A,...i]=e;if(i.length===0)return this.delete(A);let n=this.get(A,!0);if(so(n))return n.deleteIn(i);throw new Error(`Expected YAML collection at ${A}. Remaining path: ${i}`)}getIn(e,A){let[i,...n]=e,o=this.get(i,!0);return n.length===0?!A&&Yi(o)?o.value:o:so(o)?o.getIn(n,A):void 0}hasAllNullValues(e){return this.items.every(A=>{if(!mn(A))return!1;let i=A.value;return i==null||e&&Yi(i)&&i.value==null&&!i.commentBefore&&!i.comment&&!i.tag})}hasIn(e){let[A,...i]=e;if(i.length===0)return this.has(A);let n=this.get(A,!0);return so(n)?n.hasIn(i):!1}setIn(e,A){let[i,...n]=e;if(n.length===0)this.set(i,A);else{let o=this.get(i,!0);if(so(o))o.setIn(n,A);else if(o===void 0&&this.schema)this.set(i,v4(this.schema,n,A));else throw new Error(`Expected YAML collection at ${i}. Remaining path: ${n}`)}}};var Oz=t=>t.replace(/^(?!$)(?: $)?/gm,"#");function ul(t,e){return/^\n+$/.test(t)?t.substring(1):e?t.replace(/^(?! *$)/gm,e):t}var p0=(t,e,A)=>t.endsWith(` -`)?ul(A,e):A.includes(` -`)?` -`+ul(A,e):(t.endsWith(" ")?"":" ")+A;var fk="flow",N8="block",b4="quoted";function M4(t,e,A="flow",{indentAtStart:i,lineWidth:n=80,minContentWidth:o=20,onFold:a,onOverflow:r}={}){if(!n||n<0)return t;nn-Math.max(2,o)?g.push(0):C=n-i);let I,d,B=!1,E=-1,Q=-1,f=-1;A===N8&&(E=Pz(t,E,e.length),E!==-1&&(C=E+s));for(let S;S=t[E+=1];){if(A===b4&&S==="\\"){switch(Q=E,t[E+1]){case"x":E+=3;break;case"u":E+=5;break;case"U":E+=9;break;default:E+=1}f=E}if(S===` -`)A===N8&&(E=Pz(t,E,e.length)),C=E+e.length+s,I=void 0;else{if(S===" "&&d&&d!==" "&&d!==` -`&&d!==" "){let M=t[E+1];M&&M!==" "&&M!==` -`&&M!==" "&&(I=E)}if(E>=C)if(I)g.push(I),C=I+s,I=void 0;else if(A===b4){for(;d===" "||d===" ";)d=S,S=t[E+=1],B=!0;let M=E>f+1?E-2:Q-1;if(l[M])return t;g.push(M),l[M]=!0,C=M+s,I=void 0}else B=!0}d=S}if(B&&r&&r(),g.length===0)return t;a&&a();let b=t.slice(0,g[0]);for(let S=0;S({indentAtStart:e?t.indent.length:t.indentAtStart,lineWidth:t.options.lineWidth,minContentWidth:t.options.minContentWidth}),L8=t=>/^(%|---|\.\.\.)/m.test(t);function vBA(t,e,A){if(!e||e<0)return!1;let i=e-A,n=t.length;if(n<=i)return!1;for(let o=0,a=0;oi)return!0;if(a=o+1,n-a<=i)return!1}return!0}function k4(t,e){let A=JSON.stringify(t);if(e.options.doubleQuotedAsJSON)return A;let{implicitKey:i}=e,n=e.options.doubleQuotedMinMultiLineLength,o=e.indent||(L8(t)?" ":""),a="",r=0;for(let s=0,g=A[s];g;g=A[++s])if(g===" "&&A[s+1]==="\\"&&A[s+2]==="n"&&(a+=A.slice(r,s)+"\\ ",s+=1,r=s,g="\\"),g==="\\")switch(A[s+1]){case"u":{a+=A.slice(r,s);let l=A.substr(s+2,4);switch(l){case"0000":a+="\\0";break;case"0007":a+="\\a";break;case"000b":a+="\\v";break;case"001b":a+="\\e";break;case"0085":a+="\\N";break;case"00a0":a+="\\_";break;case"2028":a+="\\L";break;case"2029":a+="\\P";break;default:l.substr(0,2)==="00"?a+="\\x"+l.substr(2):a+=A.substr(s,6)}s+=5,r=s+1}break;case"n":if(i||A[s+2]==='"'||A.length -`;let C,I;for(I=A.length;I>0;--I){let D=A[I-1];if(D!==` -`&&D!==" "&&D!==" ")break}let d=A.substring(I),B=d.indexOf(` -`);B===-1?C="-":A===d||B!==d.length-1?(C="+",o&&o()):C="",d&&(A=A.slice(0,-d.length),d[d.length-1]===` -`&&(d=d.slice(0,-1)),d=d.replace(pk,`$&${g}`));let E=!1,Q,f=-1;for(Q=0;Q{F=!0});let U=M4(`${b}${D}${d}`,g,N8,_);if(!F)return`>${M} -${g}${U}`}return A=A.replace(/\n+/g,`$&${g}`),`|${M} -${g}${b}${A}${d}`}function bBA(t,e,A,i){let{type:n,value:o}=t,{actualString:a,implicitKey:r,indent:s,indentStep:g,inFlow:l}=e;if(r&&o.includes(` -`)||l&&/[[\]{},]/.test(o))return fE(o,e);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(o))return r||l||!o.includes(` -`)?fE(o,e):F8(t,e,A,i);if(!r&&!l&&n!==zt.PLAIN&&o.includes(` -`))return F8(t,e,A,i);if(L8(o)){if(s==="")return e.forceBlockIndent=!0,F8(t,e,A,i);if(r&&s===g)return fE(o,e)}let C=o.replace(/\n+/g,`$& -${s}`);if(a){let I=E=>E.default&&E.tag!=="tag:yaml.org,2002:str"&&E.test?.test(C),{compat:d,tags:B}=e.doc.schema;if(B.some(I)||d?.some(I))return fE(o,e)}return r?C:M4(C,s,fk,_8(e,!1))}function W1(t,e,A,i){let{implicitKey:n,inFlow:o}=e,a=typeof t.value=="string"?t:Object.assign({},t,{value:String(t.value)}),{type:r}=t;r!==zt.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(a.value)&&(r=zt.QUOTE_DOUBLE);let s=l=>{switch(l){case zt.BLOCK_FOLDED:case zt.BLOCK_LITERAL:return n||o?fE(a.value,e):F8(a,e,A,i);case zt.QUOTE_DOUBLE:return k4(a.value,e);case zt.QUOTE_SINGLE:return mk(a.value,e);case zt.PLAIN:return bBA(a,e,A,i);default:return null}},g=s(r);if(g===null){let{defaultKeyType:l,defaultStringType:C}=e.options,I=n&&l||C;if(g=s(I),g===null)throw new Error(`Unsupported default string type ${I}`)}return g}function G8(t,e){let A=Object.assign({blockQuote:!0,commentString:Oz,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trueStr:"true",verifyAliasOrder:!0},t.schema.toStringOptions,e),i;switch(A.collectionStyle){case"block":i=!1;break;case"flow":i=!0;break;default:i=null}return{anchors:new Set,doc:t,flowCollectionPadding:A.flowCollectionPadding?" ":"",indent:"",indentStep:typeof A.indent=="number"?" ".repeat(A.indent):" ",inFlow:i,options:A}}function MBA(t,e){if(e.tag){let n=t.filter(o=>o.tag===e.tag);if(n.length>0)return n.find(o=>o.format===e.format)??n[0]}let A,i;if(Yi(e)){i=e.value;let n=t.filter(o=>o.identify?.(i));if(n.length>1){let o=n.filter(a=>a.test);o.length>0&&(n=o)}A=n.find(o=>o.format===e.format)??n.find(o=>!o.format)}else i=e,A=t.find(n=>n.nodeClass&&i instanceof n.nodeClass);if(!A){let n=i?.constructor?.name??(i===null?"null":typeof i);throw new Error(`Tag not resolved for ${n} value`)}return A}function kBA(t,e,{anchors:A,doc:i}){if(!i.directives)return"";let n=[],o=(Yi(t)||so(t))&&t.anchor;o&&S8(o)&&(A.add(o),n.push(`&${o}`));let a=t.tag??(e.default?null:e.tag);return a&&n.push(i.directives.tagString(a)),n.join(" ")}function wC(t,e,A,i){if(mn(t))return t.toString(e,A,i);if(hl(t)){if(e.doc.directives)return t.toString(e);if(e.resolvedAliases?.has(t))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(t):e.resolvedAliases=new Set([t]),t=t.resolve(e.doc)}let n,o=yn(t)?t:e.doc.createNode(t,{onTagObj:s=>n=s});n??(n=MBA(e.doc.schema.tags,o));let a=kBA(o,n,e);a.length>0&&(e.indentAtStart=(e.indentAtStart??0)+a.length+1);let r=typeof n.stringify=="function"?n.stringify(o,e,A,i):Yi(o)?W1(o,e,A,i):o.toString(e,A,i);return a?Yi(o)||r[0]==="{"||r[0]==="["?`${a} ${r}`:`${a} -${e.indent}${r}`:r}function jz({key:t,value:e},A,i,n){let{allNullValues:o,doc:a,indent:r,indentStep:s,options:{commentString:g,indentSeq:l,simpleKeys:C}}=A,I=yn(t)&&t.comment||null;if(C){if(I)throw new Error("With simple keys, key nodes cannot have comments");if(so(t)||!yn(t)&&typeof t=="object"){let _="With simple keys, collection cannot be used as a key value";throw new Error(_)}}let d=!C&&(!t||I&&e==null&&!A.inFlow||so(t)||(Yi(t)?t.type===zt.BLOCK_FOLDED||t.type===zt.BLOCK_LITERAL:typeof t=="object"));A=Object.assign({},A,{allNullValues:!1,implicitKey:!d&&(C||!o),indent:r+s});let B=!1,E=!1,Q=wC(t,A,()=>B=!0,()=>E=!0);if(!d&&!A.inFlow&&Q.length>1024){if(C)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");d=!0}if(A.inFlow){if(o||e==null)return B&&i&&i(),Q===""?"?":d?`? ${Q}`:Q}else if(o&&!C||e==null&&d)return Q=`? ${Q}`,I&&!B?Q+=p0(Q,A.indent,g(I)):E&&n&&n(),Q;B&&(I=null),d?(I&&(Q+=p0(Q,A.indent,g(I))),Q=`? ${Q} -${r}:`):(Q=`${Q}:`,I&&(Q+=p0(Q,A.indent,g(I))));let f,b,S;yn(e)?(f=!!e.spaceBefore,b=e.commentBefore,S=e.comment):(f=!1,b=null,S=null,e&&typeof e=="object"&&(e=a.createNode(e))),A.implicitKey=!1,!d&&!I&&Yi(e)&&(A.indentAtStart=Q.length+1),E=!1,!l&&s.length>=2&&!A.inFlow&&!d&&dc(e)&&!e.flow&&!e.tag&&!e.anchor&&(A.indent=A.indent.substring(2));let M=!1,D=wC(e,A,()=>M=!0,()=>E=!0),F=" ";if(I||f||b){if(F=f?` -`:"",b){let _=g(b);F+=` -${ul(_,A.indent)}`}D===""&&!A.inFlow?F===` -`&&S&&(F=` - -`):F+=` -${A.indent}`}else if(!d&&so(e)){let _=D[0],U=D.indexOf(` -`),J=U!==-1,j=A.inFlow??e.flow??e.items.length===0;if(J||!j){let AA=!1;if(J&&(_==="&"||_==="!")){let O=D.indexOf(" ");_==="&"&&O!==-1&&Ot===U8||typeof t=="symbol"&&t.description===U8,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new zt(Symbol(U8)),{addToJSMap:Dk}),stringify:()=>U8},qz=(t,e)=>(Bc.identify(e)||Yi(e)&&(!e.type||e.type===zt.PLAIN)&&Bc.identify(e.value))&&t?.doc.schema.tags.some(A=>A.tag===Bc.tag&&A.default);function Dk(t,e,A){if(A=t&&hl(A)?A.resolve(t.doc):A,dc(A))for(let i of A.items)wk(t,e,i);else if(Array.isArray(A))for(let i of A)wk(t,e,i);else wk(t,e,A)}function wk(t,e,A){let i=t&&hl(A)?A.resolve(t.doc):A;if(!Ic(i))throw new Error("Merge sources must be maps or map aliases");let n=i.toJSON(null,t,Map);for(let[o,a]of n)e instanceof Map?e.has(o)||e.set(o,a):e instanceof Set?e.add(o):Object.prototype.hasOwnProperty.call(e,o)||Object.defineProperty(e,o,{value:a,writable:!0,enumerable:!0,configurable:!0});return e}function J8(t,e,{key:A,value:i}){if(yn(A)&&A.addToJSMap)A.addToJSMap(t,e,i);else if(qz(t,A))Dk(t,e,i);else{let n=Er(A,"",t);if(e instanceof Map)e.set(n,Er(i,n,t));else if(e instanceof Set)e.add(n);else{let o=SBA(A,n,t),a=Er(i,o,t);o in e?Object.defineProperty(e,o,{value:a,writable:!0,enumerable:!0,configurable:!0}):e[o]=a}}return e}function SBA(t,e,A){if(e===null)return"";if(typeof e!="object")return String(e);if(yn(t)&&A?.doc){let i=G8(A.doc,{});i.anchors=new Set;for(let o of A.anchors.keys())i.anchors.add(o.anchor);i.inFlow=!0,i.inStringifyKey=!0;let n=t.toString(i);if(!A.mapKeyWarned){let o=JSON.stringify(n);o.length>40&&(o=o.substring(0,36)+'..."'),K8(A.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${o}. Set mapAsMap: true to use object keys.`),A.mapKeyWarned=!0}return n}return JSON.stringify(e)}function mE(t,e,A){let i=pC(t,void 0,A),n=pC(e,void 0,A);return new Ja(i,n)}var Ja=class t{constructor(e,A=null){Object.defineProperty(this,Ks,{value:Qk}),this.key=e,this.value=A}clone(e){let{key:A,value:i}=this;return yn(A)&&(A=A.clone(e)),yn(i)&&(i=i.clone(e)),new t(A,i)}toJSON(e,A){let i=A?.mapAsMap?new Map:{};return J8(A,i,this)}toString(e,A,i){return e?.doc?jz(this,e,A,i):JSON.stringify(this)}};function T8(t,e,A){return(e.inFlow??t.flow?RBA:xBA)(t,e,A)}function xBA({comment:t,items:e},A,{blockItemPrefix:i,flowChars:n,itemIndent:o,onChompKeep:a,onComment:r}){let{indent:s,options:{commentString:g}}=A,l=Object.assign({},A,{indent:o,type:null}),C=!1,I=[];for(let B=0;BQ=null,()=>C=!0);Q&&(f+=p0(f,o,g(Q))),C&&Q&&(C=!1),I.push(i+f)}let d;if(I.length===0)d=n.start+n.end;else{d=I[0];for(let B=1;BQ=null);Bl||f.includes(` -`))&&(g=!0),C.push(f),l=C.length}let{start:I,end:d}=A;if(C.length===0)return I+d;if(!g){let B=C.reduce((E,Q)=>E+Q.length+2,2);g=e.options.lineWidth>0&&B>e.options.lineWidth}if(g){let B=I;for(let E of C)B+=E?` -${o}${n}${E}`:` -`;return`${B} -${n}${d}`}else return`${I}${a}${C.join(" ")}${a}${d}`}function Y8({indent:t,options:{commentString:e}},A,i,n){if(i&&n&&(i=i.replace(/^\n+/,"")),i){let o=ul(e(i),t);A.push(o.trimStart())}}function O2(t,e){let A=Yi(e)?e.value:e;for(let i of t)if(mn(i)&&(i.key===e||i.key===A||Yi(i.key)&&i.key.value===A))return i}var Za=class extends hE{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(cc,e),this.items=[]}static from(e,A,i){let{keepUndefined:n,replacer:o}=i,a=new this(e),r=(s,g)=>{if(typeof o=="function")g=o.call(A,s,g);else if(Array.isArray(o)&&!o.includes(s))return;(g!==void 0||n)&&a.items.push(mE(s,g,i))};if(A instanceof Map)for(let[s,g]of A)r(s,g);else if(A&&typeof A=="object")for(let s of Object.keys(A))r(s,A[s]);return typeof e.sortMapEntries=="function"&&a.items.sort(e.sortMapEntries),a}add(e,A){let i;mn(e)?i=e:!e||typeof e!="object"||!("key"in e)?i=new Ja(e,e?.value):i=new Ja(e.key,e.value);let n=O2(this.items,i.key),o=this.schema?.sortMapEntries;if(n){if(!A)throw new Error(`Key ${i.key} already set`);Yi(n.value)&&R8(i.value)?n.value.value=i.value:n.value=i.value}else if(o){let a=this.items.findIndex(r=>o(i,r)<0);a===-1?this.items.push(i):this.items.splice(a,0,i)}else this.items.push(i)}delete(e){let A=O2(this.items,e);return A?this.items.splice(this.items.indexOf(A),1).length>0:!1}get(e,A){let n=O2(this.items,e)?.value;return(!A&&Yi(n)?n.value:n)??void 0}has(e){return!!O2(this.items,e)}set(e,A){this.add(new Ja(e,A),!0)}toJSON(e,A,i){let n=i?new i:A?.mapAsMap?new Map:{};A?.onCreate&&A.onCreate(n);for(let o of this.items)J8(A,n,o);return n}toString(e,A,i){if(!e)return JSON.stringify(this);for(let n of this.items)if(!mn(n))throw new Error(`Map items must all be pairs; found ${JSON.stringify(n)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),T8(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:i,onComment:A})}};var Ec={collection:"map",default:!0,nodeClass:Za,tag:"tag:yaml.org,2002:map",resolve(t,e){return Ic(t)||e("Expected a mapping for this tag"),t},createNode:(t,e,A)=>Za.from(t,e,A)};var ds=class extends hE{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(fC,e),this.items=[]}add(e){this.items.push(e)}delete(e){let A=H8(e);return typeof A!="number"?!1:this.items.splice(A,1).length>0}get(e,A){let i=H8(e);if(typeof i!="number")return;let n=this.items[i];return!A&&Yi(n)?n.value:n}has(e){let A=H8(e);return typeof A=="number"&&A=0?e:null}var Qc={collection:"seq",default:!0,nodeClass:ds,tag:"tag:yaml.org,2002:seq",resolve(t,e){return dc(t)||e("Expected a sequence for this tag"),t},createNode:(t,e,A)=>ds.from(t,e,A)};var P2={identify:t=>typeof t=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:t=>t,stringify(t,e,A,i){return e=Object.assign({actualString:!0},e),W1(t,e,A,i)}};var Z1={identify:t=>t==null,createNode:()=>new zt(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new zt(null),stringify:({source:t},e)=>typeof t=="string"&&Z1.test.test(t)?t:e.options.nullStr};var S4={identify:t=>typeof t=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:t=>new zt(t[0]==="t"||t[0]==="T"),stringify({source:t,value:e},A){if(t&&S4.test.test(t)){let i=t[0]==="t"||t[0]==="T";if(e===i)return t}return e?A.options.trueStr:A.options.falseStr}};function Bs({format:t,minFractionDigits:e,tag:A,value:i}){if(typeof i=="bigint")return String(i);let n=typeof i=="number"?i:Number(i);if(!isFinite(n))return isNaN(n)?".nan":n<0?"-.inf":".inf";let o=Object.is(i,-0)?"-0":JSON.stringify(i);if(!t&&e&&(!A||A==="tag:yaml.org,2002:float")&&/^\d/.test(o)){let a=o.indexOf(".");a<0&&(a=o.length,o+=".");let r=e-(o.length-a-1);for(;r-- >0;)o+="0"}return o}var z8={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:t=>t.slice(-3).toLowerCase()==="nan"?NaN:t[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Bs},O8={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:t=>parseFloat(t),stringify(t){let e=Number(t.value);return isFinite(e)?e.toExponential():Bs(t)}},P8={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(t){let e=new zt(parseFloat(t)),A=t.indexOf(".");return A!==-1&&t[t.length-1]==="0"&&(e.minFractionDigits=t.length-A-1),e},stringify:Bs};var j8=t=>typeof t=="bigint"||Number.isInteger(t),yk=(t,e,A,{intAsBigInt:i})=>i?BigInt(t):parseInt(t.substring(e),A);function Vz(t,e,A){let{value:i}=t;return j8(i)&&i>=0?A+i.toString(e):Bs(t)}var q8={identify:t=>j8(t)&&t>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(t,e,A)=>yk(t,2,8,A),stringify:t=>Vz(t,8,"0o")},V8={identify:j8,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(t,e,A)=>yk(t,0,10,A),stringify:Bs},W8={identify:t=>j8(t)&&t>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(t,e,A)=>yk(t,2,16,A),stringify:t=>Vz(t,16,"0x")};var Wz=[Ec,Qc,P2,Z1,S4,q8,V8,W8,z8,O8,P8];function Zz(t){return typeof t=="bigint"||Number.isInteger(t)}var Z8=({value:t})=>JSON.stringify(t),NBA=[{identify:t=>typeof t=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:t=>t,stringify:Z8},{identify:t=>t==null,createNode:()=>new zt(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Z8},{identify:t=>typeof t=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:t=>t==="true",stringify:Z8},{identify:Zz,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(t,e,{intAsBigInt:A})=>A?BigInt(t):parseInt(t,10),stringify:({value:t})=>Zz(t)?t.toString():JSON.stringify(t)},{identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:t=>parseFloat(t),stringify:Z8}],FBA={default:!0,tag:"",test:/^/,resolve(t,e){return e(`Unresolved plain scalar ${JSON.stringify(t)}`),t}},Xz=[Ec,Qc].concat(NBA,FBA);var x4={identify:t=>t instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(t,e){if(typeof atob=="function"){let A=atob(t.replace(/[\n\r]/g,"")),i=new Uint8Array(A.length);for(let n=0;n1&&e("Each pair must have its own sequence indicator");let n=i.items[0]||new Ja(new zt(null));if(i.commentBefore&&(n.key.commentBefore=n.key.commentBefore?`${i.commentBefore} -${n.key.commentBefore}`:i.commentBefore),i.comment){let o=n.value??n.key;o.comment=o.comment?`${i.comment} -${o.comment}`:i.comment}i=n}t.items[A]=mn(i)?i:new Ja(i)}}else e("Expected a sequence for this tag");return t}function bk(t,e,A){let{replacer:i}=A,n=new ds(t);n.tag="tag:yaml.org,2002:pairs";let o=0;if(e&&Symbol.iterator in Object(e))for(let a of e){typeof i=="function"&&(a=i.call(e,String(o++),a));let r,s;if(Array.isArray(a))if(a.length===2)r=a[0],s=a[1];else throw new TypeError(`Expected [key, value] tuple: ${a}`);else if(a&&a instanceof Object){let g=Object.keys(a);if(g.length===1)r=g[0],s=a[r];else throw new TypeError(`Expected tuple with one key, not ${g.length} keys`)}else r=a;n.items.push(mE(r,s,A))}return n}var R4={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:vk,createNode:bk};var Mk=(()=>{class t extends ds{constructor(){super(),this.add=Za.prototype.add.bind(this),this.delete=Za.prototype.delete.bind(this),this.get=Za.prototype.get.bind(this),this.has=Za.prototype.has.bind(this),this.set=Za.prototype.set.bind(this),this.tag=t.tag}toJSON(A,i){if(!i)return super.toJSON(A);let n=new Map;i?.onCreate&&i.onCreate(n);for(let o of this.items){let a,r;if(mn(o)?(a=Er(o.key,"",i),r=Er(o.value,a,i)):a=Er(o,"",i),n.has(a))throw new Error("Ordered maps must not include duplicate keys");n.set(a,r)}return n}static from(A,i,n){let o=bk(A,i,n),a=new this;return a.items=o.items,a}}return t.tag="tag:yaml.org,2002:omap",t})(),N4={collection:"seq",identify:t=>t instanceof Map,nodeClass:Mk,default:!1,tag:"tag:yaml.org,2002:omap",resolve(t,e){let A=vk(t,e),i=[];for(let{key:n}of A.items)Yi(n)&&(i.includes(n.value)?e(`Ordered maps must not include duplicate keys: ${n.value}`):i.push(n.value));return Object.assign(new Mk,A)},createNode:(t,e,A)=>Mk.from(t,e,A)};function $z({value:t,source:e},A){return e&&(t?kk:Sk).test.test(e)?e:t?A.options.trueStr:A.options.falseStr}var kk={identify:t=>t===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new zt(!0),stringify:$z},Sk={identify:t=>t===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new zt(!1),stringify:$z};var AO={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:t=>t.slice(-3).toLowerCase()==="nan"?NaN:t[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Bs},eO={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:t=>parseFloat(t.replace(/_/g,"")),stringify(t){let e=Number(t.value);return isFinite(e)?e.toExponential():Bs(t)}},tO={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(t){let e=new zt(parseFloat(t.replace(/_/g,""))),A=t.indexOf(".");if(A!==-1){let i=t.substring(A+1).replace(/_/g,"");i[i.length-1]==="0"&&(e.minFractionDigits=i.length)}return e},stringify:Bs};var F4=t=>typeof t=="bigint"||Number.isInteger(t);function X8(t,e,A,{intAsBigInt:i}){let n=t[0];if((n==="-"||n==="+")&&(e+=1),t=t.substring(e).replace(/_/g,""),i){switch(A){case 2:t=`0b${t}`;break;case 8:t=`0o${t}`;break;case 16:t=`0x${t}`;break}let a=BigInt(t);return n==="-"?BigInt(-1)*a:a}let o=parseInt(t,A);return n==="-"?-1*o:o}function xk(t,e,A){let{value:i}=t;if(F4(i)){let n=i.toString(e);return i<0?"-"+A+n.substr(1):A+n}return Bs(t)}var iO={identify:F4,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(t,e,A)=>X8(t,2,2,A),stringify:t=>xk(t,2,"0b")},nO={identify:F4,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(t,e,A)=>X8(t,1,8,A),stringify:t=>xk(t,8,"0")},oO={identify:F4,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(t,e,A)=>X8(t,0,10,A),stringify:Bs},aO={identify:F4,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(t,e,A)=>X8(t,2,16,A),stringify:t=>xk(t,16,"0x")};var Rk=(()=>{class t extends Za{constructor(A){super(A),this.tag=t.tag}add(A){let i;mn(A)?i=A:A&&typeof A=="object"&&"key"in A&&"value"in A&&A.value===null?i=new Ja(A.key,null):i=new Ja(A,null),O2(this.items,i.key)||this.items.push(i)}get(A,i){let n=O2(this.items,A);return!i&&mn(n)?Yi(n.key)?n.key.value:n.key:n}set(A,i){if(typeof i!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof i}`);let n=O2(this.items,A);n&&!i?this.items.splice(this.items.indexOf(n),1):!n&&i&&this.items.push(new Ja(A))}toJSON(A,i){return super.toJSON(A,i,Set)}toString(A,i,n){if(!A)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},A,{allNullValues:!0}),i,n);throw new Error("Set items must all have null values")}static from(A,i,n){let{replacer:o}=n,a=new this(A);if(i&&Symbol.iterator in Object(i))for(let r of i)typeof o=="function"&&(r=o.call(i,r,r)),a.items.push(mE(r,null,n));return a}}return t.tag="tag:yaml.org,2002:set",t})(),_4={collection:"map",identify:t=>t instanceof Set,nodeClass:Rk,default:!1,tag:"tag:yaml.org,2002:set",createNode:(t,e,A)=>Rk.from(t,e,A),resolve(t,e){if(Ic(t)){if(t.hasAllNullValues(!0))return Object.assign(new Rk,t);e("Set items must all have null values")}else e("Expected a mapping for this tag");return t}};function Nk(t,e){let A=t[0],i=A==="-"||A==="+"?t.substring(1):t,n=a=>e?BigInt(a):Number(a),o=i.replace(/_/g,"").split(":").reduce((a,r)=>a*n(60)+n(r),n(0));return A==="-"?n(-1)*o:o}function rO(t){let{value:e}=t,A=a=>a;if(typeof e=="bigint")A=a=>BigInt(a);else if(isNaN(e)||!isFinite(e))return Bs(t);let i="";e<0&&(i="-",e*=A(-1));let n=A(60),o=[e%n];return e<60?o.unshift(0):(e=(e-o[0])/n,o.unshift(e%n),e>=60&&(e=(e-o[0])/n,o.unshift(e))),i+o.map(a=>String(a).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var $8={identify:t=>typeof t=="bigint"||Number.isInteger(t),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(t,e,{intAsBigInt:A})=>Nk(t,A),stringify:rO},Aw={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:t=>Nk(t,!1),stringify:rO},pE={identify:t=>t instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(t){let e=t.match(pE.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,A,i,n,o,a,r]=e.map(Number),s=e[7]?Number((e[7]+"00").substr(1,3)):0,g=Date.UTC(A,i-1,n,o||0,a||0,r||0,s),l=e[8];if(l&&l!=="Z"){let C=Nk(l,!1);Math.abs(C)<30&&(C*=60),g-=6e4*C}return new Date(g)},stringify:({value:t})=>t?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};var Fk=[Ec,Qc,P2,Z1,kk,Sk,iO,nO,oO,aO,AO,eO,tO,x4,Bc,N4,R4,_4,$8,Aw,pE];var sO=new Map([["core",Wz],["failsafe",[Ec,Qc,P2]],["json",Xz],["yaml11",Fk],["yaml-1.1",Fk]]),gO={binary:x4,bool:S4,float:P8,floatExp:O8,floatNaN:z8,floatTime:Aw,int:V8,intHex:W8,intOct:q8,intTime:$8,map:Ec,merge:Bc,null:Z1,omap:N4,pairs:R4,seq:Qc,set:_4,timestamp:pE},lO={"tag:yaml.org,2002:binary":x4,"tag:yaml.org,2002:merge":Bc,"tag:yaml.org,2002:omap":N4,"tag:yaml.org,2002:pairs":R4,"tag:yaml.org,2002:set":_4,"tag:yaml.org,2002:timestamp":pE};function ew(t,e,A){let i=sO.get(e);if(i&&!t)return A&&!i.includes(Bc)?i.concat(Bc):i.slice();let n=i;if(!n)if(Array.isArray(t))n=[];else{let o=Array.from(sO.keys()).filter(a=>a!=="yaml11").map(a=>JSON.stringify(a)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${o} or define customTags array`)}if(Array.isArray(t))for(let o of t)n=n.concat(o);else typeof t=="function"&&(n=t(n.slice()));return A&&(n=n.concat(Bc)),n.reduce((o,a)=>{let r=typeof a=="string"?gO[a]:a;if(!r){let s=JSON.stringify(a),g=Object.keys(gO).map(l=>JSON.stringify(l)).join(", ");throw new Error(`Unknown custom tag ${s}; use one of ${g}`)}return o.includes(r)||o.push(r),o},[])}var _BA=(t,e)=>t.keye.key?1:0,L4=class t{constructor({compat:e,customTags:A,merge:i,resolveKnownTags:n,schema:o,sortMapEntries:a,toStringDefaults:r}){this.compat=Array.isArray(e)?ew(e,"compat"):e?ew(null,e):null,this.name=typeof o=="string"&&o||"core",this.knownTags=n?lO:{},this.tags=ew(A,this.name,i),this.toStringOptions=r??null,Object.defineProperty(this,cc,{value:Ec}),Object.defineProperty(this,Tg,{value:P2}),Object.defineProperty(this,fC,{value:Qc}),this.sortMapEntries=typeof a=="function"?a:a===!0?_BA:null}clone(){let e=Object.create(t.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};function cO(t,e){let A=[],i=e.directives===!0;if(e.directives!==!1&&t.directives){let s=t.directives.toString(t);s?(A.push(s),i=!0):t.directives.docStart&&(i=!0)}i&&A.push("---");let n=G8(t,e),{commentString:o}=n.options;if(t.commentBefore){A.length!==1&&A.unshift("");let s=o(t.commentBefore);A.unshift(ul(s,""))}let a=!1,r=null;if(t.contents){if(yn(t.contents)){if(t.contents.spaceBefore&&i&&A.push(""),t.contents.commentBefore){let l=o(t.contents.commentBefore);A.push(ul(l,""))}n.forceBlockIndent=!!t.comment,r=t.contents.comment}let s=r?void 0:()=>a=!0,g=wC(t.contents,n,()=>r=null,s);r&&(g+=p0(g,"",o(r))),(g[0]==="|"||g[0]===">")&&A[A.length-1]==="---"?A[A.length-1]=`--- ${g}`:A.push(g)}else A.push(wC(t.contents,n));if(t.directives?.docEnd)if(t.comment){let s=o(t.comment);s.includes(` -`)?(A.push("..."),A.push(ul(s,""))):A.push(`... ${s}`)}else A.push("...");else{let s=t.comment;s&&a&&(s=s.replace(/^\n+/,"")),s&&((!a||r)&&A[A.length-1]!==""&&A.push(""),A.push(ul(o(s),"")))}return A.join(` -`)+` -`}var DC=class t{constructor(e,A,i){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,Ks,{value:b8});let n=null;typeof A=="function"||Array.isArray(A)?n=A:i===void 0&&A&&(i=A,A=void 0);let o=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},i);this.options=o;let{version:a}=o;i?._directives?(this.directives=i._directives.atDocument(),this.directives.yaml.explicit&&(a=this.directives.yaml.version)):this.directives=new QE({version:a}),this.setSchema(a,i),this.contents=e===void 0?null:this.createNode(e,n,i)}clone(){let e=Object.create(t.prototype,{[Ks]:{value:b8}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=yn(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){wE(this.contents)&&this.contents.add(e)}addIn(e,A){wE(this.contents)&&this.contents.addIn(e,A)}createAlias(e,A){if(!e.anchor){let i=hk(this);e.anchor=!A||i.has(A)?uk(A||"a",i):A}return new mC(e.anchor)}createNode(e,A,i){let n;if(typeof A=="function")e=A.call({"":e},"",e),n=A;else if(Array.isArray(A)){let Q=b=>typeof b=="number"||b instanceof String||b instanceof Number,f=A.filter(Q).map(String);f.length>0&&(A=A.concat(f)),n=A}else i===void 0&&A&&(i=A,A=void 0);let{aliasDuplicateObjects:o,anchorPrefix:a,flow:r,keepUndefined:s,onTagObj:g,tag:l}=i??{},{onAnchor:C,setAnchors:I,sourceObjects:d}=zz(this,a||"a"),B={aliasDuplicateObjects:o??!0,keepUndefined:s??!1,onAnchor:C,onTagObj:g,replacer:n,schema:this.schema,sourceObjects:d},E=pC(e,l,B);return r&&so(E)&&(E.flow=!0),I(),E}createPair(e,A,i={}){let n=this.createNode(e,null,i),o=this.createNode(A,null,i);return new Ja(n,o)}delete(e){return wE(this.contents)?this.contents.delete(e):!1}deleteIn(e){return uE(e)?this.contents==null?!1:(this.contents=null,!0):wE(this.contents)?this.contents.deleteIn(e):!1}get(e,A){return so(this.contents)?this.contents.get(e,A):void 0}getIn(e,A){return uE(e)?!A&&Yi(this.contents)?this.contents.value:this.contents:so(this.contents)?this.contents.getIn(e,A):void 0}has(e){return so(this.contents)?this.contents.has(e):!1}hasIn(e){return uE(e)?this.contents!==void 0:so(this.contents)?this.contents.hasIn(e):!1}set(e,A){this.contents==null?this.contents=v4(this.schema,[e],A):wE(this.contents)&&this.contents.set(e,A)}setIn(e,A){uE(e)?this.contents=A:this.contents==null?this.contents=v4(this.schema,Array.from(e),A):wE(this.contents)&&this.contents.setIn(e,A)}setSchema(e,A={}){typeof e=="number"&&(e=String(e));let i;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new QE({version:"1.1"}),i={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new QE({version:e}),i={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,i=null;break;default:{let n=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${n}`)}}if(A.schema instanceof Object)this.schema=A.schema;else if(i)this.schema=new L4(Object.assign(i,A));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:A,mapAsMap:i,maxAliasCount:n,onAnchor:o,reviver:a}={}){let r={anchors:new Map,doc:this,keep:!e,mapAsMap:i===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},s=Er(this.contents,A??"",r);if(typeof o=="function")for(let{count:g,res:l}of r.anchors.values())o(l,g);return typeof a=="function"?H2(a,{"":s},"",s):s}toJSON(e,A){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:A})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let A=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${A}`)}return cO(this,e)}};function wE(t){if(so(t))return!0;throw new Error("Expected a YAML collection as document contents")}var G4=class extends Error{constructor(e,A,i,n){super(),this.name=e,this.code=i,this.message=n,this.pos=A}},hc=class extends G4{constructor(e,A,i){super("YAMLParseError",e,A,i)}},K4=class extends G4{constructor(e,A,i){super("YAMLWarning",e,A,i)}},_k=(t,e)=>A=>{if(A.pos[0]===-1)return;A.linePos=A.pos.map(r=>e.linePos(r));let{line:i,col:n}=A.linePos[0];A.message+=` at line ${i}, column ${n}`;let o=n-1,a=t.substring(e.lineStarts[i-1],e.lineStarts[i]).replace(/[\n\r]+$/,"");if(o>=60&&a.length>80){let r=Math.min(o-39,a.length-79);a="\u2026"+a.substring(r),o-=r-1}if(a.length>80&&(a=a.substring(0,79)+"\u2026"),i>1&&/^ *$/.test(a.substring(0,o))){let r=t.substring(e.lineStarts[i-2],e.lineStarts[i-1]);r.length>80&&(r=r.substring(0,79)+`\u2026 -`),a=r+a}if(/[^ ]/.test(a)){let r=1,s=A.linePos[1];s?.line===i&&s.col>n&&(r=Math.max(1,Math.min(s.col-n,80-o)));let g=" ".repeat(o)+"^".repeat(r);A.message+=`: - -${a} -${g} -`}};function w0(t,{flow:e,indicator:A,next:i,offset:n,onError:o,parentIndent:a,startOnNewline:r}){let s=!1,g=r,l=r,C="",I="",d=!1,B=!1,E=null,Q=null,f=null,b=null,S=null,M=null,D=null;for(let U of t)switch(B&&(U.type!=="space"&&U.type!=="newline"&&U.type!=="comma"&&o(U.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),B=!1),E&&(g&&U.type!=="comment"&&U.type!=="newline"&&o(E,"TAB_AS_INDENT","Tabs are not allowed as indentation"),E=null),U.type){case"space":!e&&(A!=="doc-start"||i?.type!=="flow-collection")&&U.source.includes(" ")&&(E=U),l=!0;break;case"comment":{l||o(U,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let J=U.source.substring(1)||" ";C?C+=I+J:C=J,I="",g=!1;break}case"newline":g?C?C+=U.source:(!M||A!=="seq-item-ind")&&(s=!0):I+=U.source,g=!0,d=!0,(Q||f)&&(b=U),l=!0;break;case"anchor":Q&&o(U,"MULTIPLE_ANCHORS","A node can have at most one anchor"),U.source.endsWith(":")&&o(U.offset+U.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),Q=U,D??(D=U.offset),g=!1,l=!1,B=!0;break;case"tag":{f&&o(U,"MULTIPLE_TAGS","A node can have at most one tag"),f=U,D??(D=U.offset),g=!1,l=!1,B=!0;break}case A:(Q||f)&&o(U,"BAD_PROP_ORDER",`Anchors and tags must be after the ${U.source} indicator`),M&&o(U,"UNEXPECTED_TOKEN",`Unexpected ${U.source} in ${e??"collection"}`),M=U,g=A==="seq-item-ind"||A==="explicit-key-ind",l=!1;break;case"comma":if(e){S&&o(U,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),S=U,g=!1,l=!1;break}default:o(U,"UNEXPECTED_TOKEN",`Unexpected ${U.type} token`),g=!1,l=!1}let F=t[t.length-1],_=F?F.offset+F.source.length:n;return B&&i&&i.type!=="space"&&i.type!=="newline"&&i.type!=="comma"&&(i.type!=="scalar"||i.source!=="")&&o(i.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),E&&(g&&E.indent<=a||i?.type==="block-map"||i?.type==="block-seq")&&o(E,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:S,found:M,spaceBefore:s,comment:C,hasNewline:d,anchor:Q,tag:f,newlineAfterProp:b,end:_,start:D??_}}function j2(t){if(!t)return null;switch(t.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(t.source.includes(` -`))return!0;if(t.end){for(let e of t.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of t.items){for(let A of e.start)if(A.type==="newline")return!0;if(e.sep){for(let A of e.sep)if(A.type==="newline")return!0}if(j2(e.key)||j2(e.value))return!0}return!1;default:return!0}}function U4(t,e,A){if(e?.type==="flow-collection"){let i=e.end[0];i.indent===t&&(i.source==="]"||i.source==="}")&&j2(e)&&A(i,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}function tw(t,e,A){let{uniqueKeys:i}=t.options;if(i===!1)return!1;let n=typeof i=="function"?i:(o,a)=>o===a||Yi(o)&&Yi(a)&&o.value===a.value;return e.some(o=>n(o.key,A))}var CO="All mapping items must start at the same column";function IO({composeNode:t,composeEmptyNode:e},A,i,n,o){let a=o?.nodeClass??Za,r=new a(A.schema);A.atRoot&&(A.atRoot=!1);let s=i.offset,g=null;for(let l of i.items){let{start:C,key:I,sep:d,value:B}=l,E=w0(C,{indicator:"explicit-key-ind",next:I??d?.[0],offset:s,onError:n,parentIndent:i.indent,startOnNewline:!0}),Q=!E.found;if(Q){if(I&&(I.type==="block-seq"?n(s,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in I&&I.indent!==i.indent&&n(s,"BAD_INDENT",CO)),!E.anchor&&!E.tag&&!d){g=E.end,E.comment&&(r.comment?r.comment+=` -`+E.comment:r.comment=E.comment);continue}(E.newlineAfterProp||j2(I))&&n(I??C[C.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else E.found?.indent!==i.indent&&n(s,"BAD_INDENT",CO);A.atKey=!0;let f=E.end,b=I?t(A,I,E,n):e(A,f,C,null,E,n);A.schema.compat&&U4(i.indent,I,n),A.atKey=!1,tw(A,r.items,b)&&n(f,"DUPLICATE_KEY","Map keys must be unique");let S=w0(d??[],{indicator:"map-value-ind",next:B,offset:b.range[2],onError:n,parentIndent:i.indent,startOnNewline:!I||I.type==="block-scalar"});if(s=S.end,S.found){Q&&(B?.type==="block-map"&&!S.hasNewline&&n(s,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),A.options.strict&&E.startt&&(t.type==="block-map"||t.type==="block-seq");function BO({composeNode:t,composeEmptyNode:e},A,i,n,o){let a=i.start.source==="{",r=a?"flow map":"flow sequence",s=o?.nodeClass??(a?Za:ds),g=new s(A.schema);g.flow=!0;let l=A.atRoot;l&&(A.atRoot=!1),A.atKey&&(A.atKey=!1);let C=i.offset+i.start.source.length;for(let Q=0;Q0){let Q=D0(B,E,A.options.strict,n);Q.comment&&(g.comment?g.comment+=` -`+Q.comment:g.comment=Q.comment),g.range=[i.offset,E,Q.offset]}else g.range=[i.offset,E,E];return g}function Kk(t,e,A,i,n,o){let a=A.type==="block-map"?IO(t,e,A,i,o):A.type==="block-seq"?dO(t,e,A,i,o):BO(t,e,A,i,o),r=a.constructor;return n==="!"||n===r.tagName?(a.tag=r.tagName,a):(n&&(a.tag=n),a)}function EO(t,e,A,i,n){let o=i.tag,a=o?e.directives.tagName(o.source,I=>n(o,"TAG_RESOLVE_FAILED",I)):null;if(A.type==="block-seq"){let{anchor:I,newlineAfterProp:d}=i,B=I&&o?I.offset>o.offset?I:o:I??o;B&&(!d||d.offsetI.tag===a&&I.collection===r);if(!s){let I=e.schema.knownTags[a];if(I?.collection===r)e.schema.tags.push(Object.assign({},I,{default:!1})),s=I;else return I?n(o,"BAD_COLLECTION_TYPE",`${I.tag} used for ${r} collection, but expects ${I.collection??"scalar"}`,!0):n(o,"TAG_RESOLVE_FAILED",`Unresolved tag: ${a}`,!0),Kk(t,e,A,n,a)}let g=Kk(t,e,A,n,a,s),l=s.resolve?.(g,I=>n(o,"TAG_RESOLVE_FAILED",I),e.options)??g,C=yn(l)?l:new zt(l);return C.range=g.range,C.tag=a,s?.format&&(C.format=s.format),C}function Uk(t,e,A){let i=e.offset,n=LBA(e,t.options.strict,A);if(!n)return{value:"",type:null,comment:"",range:[i,i,i]};let o=n.mode===">"?zt.BLOCK_FOLDED:zt.BLOCK_LITERAL,a=e.source?GBA(e.source):[],r=a.length;for(let E=a.length-1;E>=0;--E){let Q=a[E][1];if(Q===""||Q==="\r")r=E;else break}if(r===0){let E=n.chomp==="+"&&a.length>0?` -`.repeat(Math.max(1,a.length-1)):"",Q=i+n.length;return e.source&&(Q+=e.source.length),{value:E,type:o,comment:n.comment,range:[i,Q,Q]}}let s=e.indent+n.indent,g=e.offset+n.length,l=0;for(let E=0;Es&&(s=Q.length);else{Q.length=r;--E)a[E][0].length>s&&(r=E+1);let C="",I="",d=!1;for(let E=0;Es||f[0]===" "?(I===" "?I=` -`:!d&&I===` -`&&(I=` - -`),C+=I+Q.slice(s)+f,I=` -`,d=!0):f===""?I===` -`?C+=` -`:I=` -`:(C+=I+f,I=" ",d=!1)}switch(n.chomp){case"-":break;case"+":for(let E=r;EA(i+I,d,B);switch(n){case"scalar":r=zt.PLAIN,s=KBA(o,g);break;case"single-quoted-scalar":r=zt.QUOTE_SINGLE,s=UBA(o,g);break;case"double-quoted-scalar":r=zt.QUOTE_DOUBLE,s=JBA(o,g);break;default:return A(t,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${n}`),{value:"",type:null,comment:"",range:[i,i+o.length,i+o.length]}}let l=i+o.length,C=D0(a,l,e,A);return{value:s,type:r,comment:C.comment,range:[i,l,C.offset]}}function KBA(t,e){let A="";switch(t[0]){case" ":A="a tab character";break;case",":A="flow indicator character ,";break;case"%":A="directive indicator character %";break;case"|":case">":{A=`block scalar indicator ${t[0]}`;break}case"@":case"`":{A=`reserved character ${t[0]}`;break}}return A&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${A}`),QO(t)}function UBA(t,e){return(t[t.length-1]!=="'"||t.length===1)&&e(t.length,"MISSING_CHAR","Missing closing 'quote"),QO(t.slice(1,-1)).replace(/''/g,"'")}function QO(t){let e,A;try{e=new RegExp(`(.*?)(?o?t.slice(o,i+1):n)}else A+=n}return(t[t.length-1]!=='"'||t.length===1)&&e(t.length,"MISSING_CHAR",'Missing closing "quote'),A}function YBA(t,e){let A="",i=t[e+1];for(;(i===" "||i===" "||i===` -`||i==="\r")&&!(i==="\r"&&t[e+2]!==` -`);)i===` -`&&(A+=` -`),e+=1,i=t[e+1];return A||(A=" "),{fold:A,offset:e}}var TBA={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:` -`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function HBA(t,e,A,i){let n=t.substr(e,A),a=n.length===A&&/^[0-9a-fA-F]+$/.test(n)?parseInt(n,16):NaN;if(isNaN(a)){let r=t.substr(e-2,A+2);return i(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${r}`),r}return String.fromCodePoint(a)}function Yk(t,e,A,i){let{value:n,type:o,comment:a,range:r}=e.type==="block-scalar"?Uk(t,e,i):Jk(e,t.options.strict,i),s=A?t.directives.tagName(A.source,C=>i(A,"TAG_RESOLVE_FAILED",C)):null,g;t.options.stringKeys&&t.atKey?g=t.schema[Tg]:s?g=zBA(t.schema,n,s,A,i):e.type==="scalar"?g=OBA(t,n,e,i):g=t.schema[Tg];let l;try{let C=g.resolve(n,I=>i(A??e,"TAG_RESOLVE_FAILED",I),t.options);l=Yi(C)?C:new zt(C)}catch(C){let I=C instanceof Error?C.message:String(C);i(A??e,"TAG_RESOLVE_FAILED",I),l=new zt(n)}return l.range=r,l.source=n,o&&(l.type=o),s&&(l.tag=s),g.format&&(l.format=g.format),a&&(l.comment=a),l}function zBA(t,e,A,i,n){if(A==="!")return t[Tg];let o=[];for(let r of t.tags)if(!r.collection&&r.tag===A)if(r.default&&r.test)o.push(r);else return r;for(let r of o)if(r.test?.test(e))return r;let a=t.knownTags[A];return a&&!a.collection?(t.tags.push(Object.assign({},a,{default:!1,test:void 0})),a):(n(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${A}`,A!=="tag:yaml.org,2002:str"),t[Tg])}function OBA({atKey:t,directives:e,schema:A},i,n,o){let a=A.tags.find(r=>(r.default===!0||t&&r.default==="key")&&r.test?.test(i))||A[Tg];if(A.compat){let r=A.compat.find(s=>s.default&&s.test?.test(i))??A[Tg];if(a.tag!==r.tag){let s=e.tagString(a.tag),g=e.tagString(r.tag),l=`Value may be parsed as either ${s} or ${g}`;o(n,"TAG_RESOLVE_FAILED",l,!0)}}return a}function hO(t,e,A){if(e){A??(A=e.length);for(let i=A-1;i>=0;--i){let n=e[i];switch(n.type){case"space":case"comment":case"newline":t-=n.source.length;continue}for(n=e[++i];n?.type==="space";)t+=n.source.length,n=e[++i];break}}return t}var PBA={composeNode:Tk,composeEmptyNode:iw};function Tk(t,e,A,i){let n=t.atKey,{spaceBefore:o,comment:a,anchor:r,tag:s}=A,g,l=!0;switch(e.type){case"alias":g=jBA(t,e,i),(r||s)&&i(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":g=Yk(t,e,s,i),r&&(g.anchor=r.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":g=EO(PBA,t,e,A,i),r&&(g.anchor=r.source.substring(1));break;default:{let C=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;i(e,"UNEXPECTED_TOKEN",C),g=iw(t,e.offset,void 0,null,A,i),l=!1}}return r&&g.anchor===""&&i(r,"BAD_ALIAS","Anchor cannot be an empty string"),n&&t.options.stringKeys&&(!Yi(g)||typeof g.value!="string"||g.tag&&g.tag!=="tag:yaml.org,2002:str")&&i(s??e,"NON_STRING_KEY","With stringKeys, all keys must be strings"),o&&(g.spaceBefore=!0),a&&(e.type==="scalar"&&e.source===""?g.comment=a:g.commentBefore=a),t.options.keepSourceTokens&&l&&(g.srcToken=e),g}function iw(t,e,A,i,{spaceBefore:n,comment:o,anchor:a,tag:r,end:s},g){let l={type:"scalar",offset:hO(e,A,i),indent:-1,source:""},C=Yk(t,l,r,g);return a&&(C.anchor=a.source.substring(1),C.anchor===""&&g(a,"BAD_ALIAS","Anchor cannot be an empty string")),n&&(C.spaceBefore=!0),o&&(C.comment=o,C.range[2]=s),C}function jBA({options:t},{offset:e,source:A,end:i},n){let o=new mC(A.substring(1));o.source===""&&n(e,"BAD_ALIAS","Alias cannot be an empty string"),o.source.endsWith(":")&&n(e+A.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let a=e+A.length,r=D0(i,a,t.strict,n);return o.range=[e,a,r.offset],r.comment&&(o.comment=r.comment),o}function uO(t,e,{offset:A,start:i,value:n,end:o},a){let r=Object.assign({_directives:e},t),s=new DC(void 0,r),g={atKey:!1,atRoot:!0,directives:s.directives,options:s.options,schema:s.schema},l=w0(i,{indicator:"doc-start",next:n??o?.[0],offset:A,onError:a,parentIndent:0,startOnNewline:!0});l.found&&(s.directives.docStart=!0,n&&(n.type==="block-map"||n.type==="block-seq")&&!l.hasNewline&&a(l.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),s.contents=n?Tk(g,n,l,a):iw(g,l.end,i,null,l,a);let C=s.contents.range[2],I=D0(o,C,!1,a);return I.comment&&(s.comment=I.comment),s.range=[A,C,I.offset],s}function J4(t){if(typeof t=="number")return[t,t+1];if(Array.isArray(t))return t.length===2?t:[t[0],t[1]];let{offset:e,source:A}=t;return[e,e+(typeof A=="string"?A.length:1)]}function fO(t){let e="",A=!1,i=!1;for(let n=0;n{let a=J4(A);o?this.warnings.push(new K4(a,i,n)):this.errors.push(new hc(a,i,n))},this.directives=new QE({version:e.version||"1.2"}),this.options=e}decorate(e,A){let{comment:i,afterEmptyLine:n}=fO(this.prelude);if(i){let o=e.contents;if(A)e.comment=e.comment?`${e.comment} -${i}`:i;else if(n||e.directives.docStart||!o)e.commentBefore=i;else if(so(o)&&!o.flow&&o.items.length>0){let a=o.items[0];mn(a)&&(a=a.key);let r=a.commentBefore;a.commentBefore=r?`${i} -${r}`:i}else{let a=o.commentBefore;o.commentBefore=a?`${i} -${a}`:i}}A?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:fO(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,A=!1,i=-1){for(let n of e)yield*le(this.next(n));yield*le(this.end(A,i))}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(A,i,n)=>{let o=J4(e);o[0]+=A,this.onError(o,"BAD_DIRECTIVE",i,n)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let A=uO(this.options,this.directives,e,this.onError);this.atDirectives&&!A.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(A,!1),this.doc&&(yield this.doc),this.doc=A,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let A=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,i=new hc(J4(e),"UNEXPECTED_TOKEN",A);this.atDirectives||!this.doc?this.errors.push(i):this.doc.errors.push(i);break}case"doc-end":{if(!this.doc){let i="Unexpected doc-end without preceding document";this.errors.push(new hc(J4(e),"UNEXPECTED_TOKEN",i));break}this.doc.directives.docEnd=!0;let A=D0(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),A.comment){let i=this.doc.comment;this.doc.comment=i?`${i} -${A.comment}`:A.comment}this.doc.range[2]=A.offset;break}default:this.errors.push(new hc(J4(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,A=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let i=Object.assign({_directives:this.directives},this.options),n=new DC(void 0,i);this.atDirectives&&this.onError(A,"MISSING_CHAR","Missing directives-end indicator line"),n.range=[0,A,A],this.decorate(n,!1),yield n}}};var Hk=Symbol("break visit"),qBA=Symbol("skip children"),mO=Symbol("remove item");function X1(t,e){"type"in t&&t.type==="document"&&(t={start:t.start,value:t.value}),pO(Object.freeze([]),t,e)}X1.BREAK=Hk;X1.SKIP=qBA;X1.REMOVE=mO;X1.itemAtPath=(t,e)=>{let A=t;for(let[i,n]of e){let o=A?.[i];if(o&&"items"in o)A=o.items[n];else return}return A};X1.parentCollection=(t,e)=>{let A=X1.itemAtPath(t,e.slice(0,-1)),i=e[e.length-1][0],n=A?.[i];if(n&&"items"in n)return n;throw new Error("Parent collection not found")};function pO(t,e,A){let i=A(e,t);if(typeof i=="symbol")return i;for(let n of["key","value"]){let o=e[n];if(o&&"items"in o){for(let a=0;a":return"block-scalar-header"}return null}function uc(t){switch(t){case void 0:case" ":case` -`:case"\r":case" ":return!0;default:return!1}}var DO=new Set("0123456789ABCDEFabcdef"),WBA=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),ow=new Set(",[]{}"),ZBA=new Set(` ,[]{} -\r `),jk=t=>!t||ZBA.has(t),T4=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,A=!1){if(e){if(typeof e!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!A;let i=this.next??"stream";for(;i&&(A||this.hasChars(1));)i=yield*le(this.parseNext(i))}atLineEnd(){let e=this.pos,A=this.buffer[e];for(;A===" "||A===" ";)A=this.buffer[++e];return!A||A==="#"||A===` -`?!0:A==="\r"?this.buffer[e+1]===` -`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let A=this.buffer[e];if(this.indentNext>0){let i=0;for(;A===" ";)A=this.buffer[++i+e];if(A==="\r"){let n=this.buffer[i+e+1];if(n===` -`||!n&&!this.atEnd)return e+i+1}return A===` -`||i>=this.indentNext||!A&&!this.atEnd?e+i:-1}if(A==="-"||A==="."){let i=this.buffer.substr(e,3);if((i==="---"||i==="...")&&uc(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return(typeof e!="number"||e!==-1&&ethis.indentValue&&!uc(this.charAt(1))&&(this.indentNext=this.indentValue),yield*le(this.parseBlockStart())}*parseBlockStart(){let[e,A]=this.peek(2);if(!A&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&uc(A)){let i=(yield*le(this.pushCount(1)))+(yield*le(this.pushSpaces(!0)));return this.indentNext=this.indentValue+1,this.indentValue+=i,yield*le(this.parseBlockStart())}return"doc"}*parseDocument(){yield*le(this.pushSpaces(!0));let e=this.getLine();if(e===null)return this.setNext("doc");let A=yield*le(this.pushIndicators());switch(e[A]){case"#":yield*le(this.pushCount(e.length-A));case void 0:return yield*le(this.pushNewline()),yield*le(this.parseLineStart());case"{":case"[":return yield*le(this.pushCount(1)),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*le(this.pushCount(1)),"doc";case"*":return yield*le(this.pushUntil(jk)),"doc";case'"':case"'":return yield*le(this.parseQuotedScalar());case"|":case">":return A+=yield*le(this.parseBlockScalarHeader()),A+=yield*le(this.pushSpaces(!0)),yield*le(this.pushCount(e.length-A)),yield*le(this.pushNewline()),yield*le(this.parseBlockScalar());default:return yield*le(this.parsePlainScalar())}}*parseFlowCollection(){let e,A,i=-1;do e=yield*le(this.pushNewline()),e>0?(A=yield*le(this.pushSpaces(!1)),this.indentValue=i=A):A=0,A+=yield*le(this.pushSpaces(!0));while(e+A>0);let n=this.getLine();if(n===null)return this.setNext("flow");if((i!==-1&&i"0"&&A<="9")this.blockScalarIndent=Number(A)-1;else if(A!=="-")break}return yield*le(this.pushUntil(A=>uc(A)||A==="#"))}*parseBlockScalar(){let e=this.pos-1,A=0,i;A:for(let o=this.pos;i=this.buffer[o];++o)switch(i){case" ":A+=1;break;case` -`:e=o,A=0;break;case"\r":{let a=this.buffer[o+1];if(!a&&!this.atEnd)return this.setNext("block-scalar");if(a===` -`)break}default:break A}if(!i&&!this.atEnd)return this.setNext("block-scalar");if(A>=this.indentNext){this.blockScalarIndent===-1?this.indentNext=A:this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let o=this.continueScalar(e+1);if(o===-1)break;e=this.buffer.indexOf(` -`,o)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let n=e+1;for(i=this.buffer[n];i===" ";)i=this.buffer[++n];if(i===" "){for(;i===" "||i===" "||i==="\r"||i===` -`;)i=this.buffer[++n];e=n-1}else if(!this.blockScalarKeep)do{let o=e-1,a=this.buffer[o];a==="\r"&&(a=this.buffer[--o]);let r=o;for(;a===" ";)a=this.buffer[--o];if(a===` -`&&o>=this.pos&&o+1+A>r)e=o;else break}while(!0);return yield nw,yield*le(this.pushToIndex(e+1,!0)),yield*le(this.parseLineStart())}*parsePlainScalar(){let e=this.flowLevel>0,A=this.pos-1,i=this.pos-1,n;for(;n=this.buffer[++i];)if(n===":"){let o=this.buffer[i+1];if(uc(o)||e&&ow.has(o))break;A=i}else if(uc(n)){let o=this.buffer[i+1];if(n==="\r"&&(o===` -`?(i+=1,n=` -`,o=this.buffer[i+1]):A=i),o==="#"||e&&ow.has(o))break;if(n===` -`){let a=this.continueScalar(i+1);if(a===-1)break;i=Math.max(i,a-2)}}else{if(e&&ow.has(n))break;A=i}return!n&&!this.atEnd?this.setNext("plain-scalar"):(yield nw,yield*le(this.pushToIndex(A+1,!0)),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,A){let i=this.buffer.slice(this.pos,e);return i?(yield i,this.pos+=i.length,i.length):(A&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*le(this.pushTag()))+(yield*le(this.pushSpaces(!0)))+(yield*le(this.pushIndicators()));case"&":return(yield*le(this.pushUntil(jk)))+(yield*le(this.pushSpaces(!0)))+(yield*le(this.pushIndicators()));case"-":case"?":case":":{let e=this.flowLevel>0,A=this.charAt(1);if(uc(A)||e&&ow.has(A))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*le(this.pushCount(1)))+(yield*le(this.pushSpaces(!0)))+(yield*le(this.pushIndicators()))}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,A=this.buffer[e];for(;!uc(A)&&A!==">";)A=this.buffer[++e];return yield*le(this.pushToIndex(A===">"?e+1:e,!1))}else{let e=this.pos+1,A=this.buffer[e];for(;A;)if(WBA.has(A))A=this.buffer[++e];else if(A==="%"&&DO.has(this.buffer[e+1])&&DO.has(this.buffer[e+2]))A=this.buffer[e+=3];else break;return yield*le(this.pushToIndex(e,!1))}}*pushNewline(){let e=this.buffer[this.pos];return e===` -`?yield*le(this.pushCount(1)):e==="\r"&&this.charAt(1)===` -`?yield*le(this.pushCount(2)):0}*pushSpaces(e){let A=this.pos-1,i;do i=this.buffer[++A];while(i===" "||e&&i===" ");let n=A-this.pos;return n>0&&(yield this.buffer.substr(this.pos,n),this.pos=A),n}*pushUntil(e){let A=this.pos,i=this.buffer[A];for(;!e(i);)i=this.buffer[++A];return yield*le(this.pushToIndex(A,!1))}};var H4=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let A=0,i=this.lineStarts.length;for(;A>1;this.lineStarts[o]=0;)switch(t[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break A}for(;t[++e]?.type==="space";);return t.splice(e,t.length)}function vO(t){if(t.start.type==="flow-seq-start")for(let e of t.items)e.sep&&!e.value&&!q2(e.start,"explicit-key-ind")&&!q2(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,bO(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}var z4=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new T4,this.onNewLine=e}*parse(e,A=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let i of this.lexer.lex(e,A))yield*le(this.next(i));A||(yield*le(this.end()))}*next(e){if(this.source=e,this.atScalar){this.atScalar=!1,yield*le(this.step()),this.offset+=e.length;return}let A=wO(e);if(A)if(A==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=A,yield*le(this.step()),A){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let i=`Not a YAML token: ${e}`;yield*le(this.pop({type:"error",offset:this.offset,message:i,source:e})),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*le(this.pop())}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&e?.type!=="doc-end"){for(;this.stack.length>0;)yield*le(this.pop());this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*le(this.stream());switch(e.type){case"document":return yield*le(this.document(e));case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*le(this.scalar(e));case"block-scalar":return yield*le(this.blockScalar(e));case"block-map":return yield*le(this.blockMap(e));case"block-seq":return yield*le(this.blockSequence(e));case"flow-collection":return yield*le(this.flowCollection(e));case"doc-end":return yield*le(this.documentEnd(e))}yield*le(this.pop())}peek(e){return this.stack[this.stack.length-e]}*pop(e){let A=e??this.stack.pop();if(!A)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield A;else{let i=this.peek(1);switch(A.type==="block-scalar"?A.indent="indent"in i?i.indent:0:A.type==="flow-collection"&&i.type==="document"&&(A.indent=0),A.type==="flow-collection"&&vO(A),i.type){case"document":i.value=A;break;case"block-scalar":i.props.push(A);break;case"block-map":{let n=i.items[i.items.length-1];if(n.value){i.items.push({start:[],key:A,sep:[]}),this.onKeyLine=!0;return}else if(n.sep)n.value=A;else{Object.assign(n,{key:A,sep:[]}),this.onKeyLine=!n.explicitKey;return}break}case"block-seq":{let n=i.items[i.items.length-1];n.value?i.items.push({start:[],value:A}):n.value=A;break}case"flow-collection":{let n=i.items[i.items.length-1];!n||n.value?i.items.push({start:[],key:A,sep:[]}):n.sep?n.value=A:Object.assign(n,{key:A,sep:[]});return}default:yield*le(this.pop()),yield*le(this.pop(A))}if((i.type==="document"||i.type==="block-map"||i.type==="block-seq")&&(A.type==="block-map"||A.type==="block-seq")){let n=A.items[A.items.length-1];n&&!n.sep&&!n.value&&n.start.length>0&&yO(n.start)===-1&&(A.indent===0||n.start.every(o=>o.type!=="comment"||o.indent=e.indent){let i=!this.onKeyLine&&this.indent===e.indent,n=i&&(A.sep||A.explicitKey)&&this.type!=="seq-item-ind",o=[];if(n&&A.sep&&!A.value){let a=[];for(let r=0;re.indent&&(a.length=0);break;default:a.length=0}}a.length>=2&&(o=A.sep.splice(a[1]))}switch(this.type){case"anchor":case"tag":n||A.value?(o.push(this.sourceToken),e.items.push({start:o}),this.onKeyLine=!0):A.sep?A.sep.push(this.sourceToken):A.start.push(this.sourceToken);return;case"explicit-key-ind":!A.sep&&!A.explicitKey?(A.start.push(this.sourceToken),A.explicitKey=!0):n||A.value?(o.push(this.sourceToken),e.items.push({start:o,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(A.explicitKey)if(A.sep)if(A.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(q2(A.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]});else if(bO(A.key)&&!q2(A.sep,"newline")){let a=DE(A.start),r=A.key,s=A.sep;s.push(this.sourceToken),delete A.key,delete A.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:r,sep:s}]})}else o.length>0?A.sep=A.sep.concat(o,this.sourceToken):A.sep.push(this.sourceToken);else if(q2(A.start,"newline"))Object.assign(A,{key:null,sep:[this.sourceToken]});else{let a=DE(A.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:null,sep:[this.sourceToken]}]})}else A.sep?A.value||n?e.items.push({start:o,key:null,sep:[this.sourceToken]}):q2(A.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):A.sep.push(this.sourceToken):Object.assign(A,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);n||A.value?(e.items.push({start:o,key:a,sep:[]}),this.onKeyLine=!0):A.sep?this.stack.push(a):(Object.assign(A,{key:a,sep:[]}),this.onKeyLine=!0);return}default:{let a=this.startBlockValue(e);if(a){if(a.type==="block-seq"){if(!A.explicitKey&&A.sep&&!q2(A.sep,"newline")){yield*le(this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source}));return}}else i&&e.items.push({start:o});this.stack.push(a);return}}}}yield*le(this.pop()),yield*le(this.step())}*blockSequence(e){let A=e.items[e.items.length-1];switch(this.type){case"newline":if(A.value){let i="end"in A.value?A.value.end:void 0;(Array.isArray(i)?i[i.length-1]:void 0)?.type==="comment"?i?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else A.start.push(this.sourceToken);return;case"space":case"comment":if(A.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(A.start,e.indent)){let n=e.items[e.items.length-2]?.value?.end;if(Array.isArray(n)){Array.prototype.push.apply(n,A.start),n.push(this.sourceToken),e.items.pop();return}}A.start.push(this.sourceToken)}return;case"anchor":case"tag":if(A.value||this.indent<=e.indent)break;A.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;A.value||q2(A.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):A.start.push(this.sourceToken);return}if(this.indent>e.indent){let i=this.startBlockValue(e);if(i){this.stack.push(i);return}}yield*le(this.pop()),yield*le(this.step())}*flowCollection(e){let A=e.items[e.items.length-1];if(this.type==="flow-error-end"){let i;do yield*le(this.pop()),i=this.peek(1);while(i?.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!A||A.sep?e.items.push({start:[this.sourceToken]}):A.start.push(this.sourceToken);return;case"map-value-ind":!A||A.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):A.sep?A.sep.push(this.sourceToken):Object.assign(A,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!A||A.value?e.items.push({start:[this.sourceToken]}):A.sep?A.sep.push(this.sourceToken):A.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let n=this.flowScalar(this.type);!A||A.value?e.items.push({start:[],key:n,sep:[]}):A.sep?this.stack.push(n):Object.assign(A,{key:n,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let i=this.startBlockValue(e);i?this.stack.push(i):(yield*le(this.pop()),yield*le(this.step()))}else{let i=this.peek(2);if(i.type==="block-map"&&(this.type==="map-value-ind"&&i.indent===e.indent||this.type==="newline"&&!i.items[i.items.length-1].sep))yield*le(this.pop()),yield*le(this.step());else if(this.type==="map-value-ind"&&i.type!=="flow-collection"){let n=aw(i),o=DE(n);vO(e);let a=e.end.splice(1,e.end.length);a.push(this.sourceToken);let r={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:o,key:e,sep:a}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=r}else yield*le(this.lineEnd(e))}}flowScalar(e){if(this.onNewLine){let A=this.source.indexOf(` -`)+1;for(;A!==0;)this.onNewLine(this.offset+A),A=this.source.indexOf(` -`,A)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let A=aw(e),i=DE(A);return i.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let A=aw(e),i=DE(A);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,A){return this.type!=="comment"||this.indent<=A?!1:e.every(i=>i.type==="newline"||i.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*le(this.pop())))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*le(this.pop()),yield*le(this.step());break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*le(this.pop()))}}};function XBA(t){let e=t.prettyErrors!==!1;return{lineCounter:t.lineCounter||e&&new H4||null,prettyErrors:e}}function MO(t,e={}){let{lineCounter:A,prettyErrors:i}=XBA(e),n=new z4(A?.addNewLine),o=new Y4(e),a=null;for(let r of o.compose(n.parse(t),!0,t.length))if(!a)a=r;else if(a.options.logLevel!=="silent"){a.errors.push(new hc(r.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return i&&A&&(a.errors.forEach(_k(t,A)),a.warnings.forEach(_k(t,A))),a}function yE(t,e,A){let i;typeof e=="function"?i=e:A===void 0&&e&&typeof e=="object"&&(A=e);let n=MO(t,A);if(!n)return null;if(n.warnings.forEach(o=>K8(n.options.logLevel,o)),n.errors.length>0){if(n.options.logLevel!=="silent")throw n.errors[0];n.errors=[]}return n.toJS(Object.assign({reviver:i},A))}function qk(t,e,A){let i=null;if(typeof e=="function"||Array.isArray(e)?i=e:A===void 0&&e&&(A=e),typeof A=="string"&&(A=A.length),typeof A=="number"){let n=Math.round(A);A=n<1?void 0:n>8?{indent:8}:{indent:n}}if(t===void 0){let{keepUndefined:n}=A??e??{};if(!n)return}return Cc(t)&&!i?t.toString(A):new DC(t,i,A).toString(A)}var y0=class t{static generateYamlFile(e,A,i,n,o=new Set){if(o.has(e.name))return;o.add(e.name);let a=e.isRoot?"root_agent.yaml":`${e.name}.yaml`,r=`${i}/${a}`,s=e.sub_agents?e.sub_agents.map(B=>({config_path:`./${B.name}.yaml`})):[],g={name:e.name,model:e.model,agent_class:e.agent_class,description:e.description||"",instruction:e.instruction,sub_agents:s,tools:t.buildToolsConfig(e.tools,n)};(!e.description||e.description.trim()==="")&&delete g.description,e.agent_class!="LlmAgent"&&(delete g.model,delete g.instruction,delete g.tools),e.agent_class==="LoopAgent"&&e.max_iterations&&(g.max_iterations=e.max_iterations);let l=t.buildCallbacksConfig(e.callbacks);Object.keys(l).length>0&&Object.assign(g,l);let C=qk(g),I=new Blob([C],{type:"application/x-yaml"}),d=new File([I],r,{type:"application/x-yaml"});A.append("files",d);for(let B of e.sub_agents??[])t.generateYamlFile(B,A,i,n,o);if(e.tools){for(let B of e.tools)if(B.toolType==="Agent Tool"){let E=B.toolAgentName||B.name;if(!E||E==="undefined"||E.trim()==="")continue;let Q=n.get(E);Q&&t.generateYamlFile(Q,A,i,n,o)}}}static buildToolsConfig(e,A){return!e||e.length===0?[]:e.map(i=>{let n={name:i.name};if(i.toolType==="Agent Tool"){n.name="AgentTool";let o=i.toolAgentName||i.name;if(!o||o==="undefined"||o.trim()==="")return null;let a=A.get(o);return n.args={agent:{config_path:`./${o}.yaml`},skip_summarization:a?.skip_summarization||!1},n}return i.args&&Object.keys(i.args).some(a=>{let r=i.args[a];return r!=null&&r!==""})&&(n.args=i.args),n}).filter(i=>i!==null)}static buildCallbacksConfig(e){if(!e||e.length===0)return{};let A={};return e.forEach(i=>{let n=`${i.type}_callbacks`;A[n]||(A[n]=[]),A[n].push({name:i.name})}),A}};function AEA(t,e){t&1&&(m(0,"mat-hint",3),K(1," Start with a letter or underscore, and contain only letters, digits, and underscores. "),w())}var rw=class t{constructor(e,A){this.data=e;this.dialogRef=A}newAppName="";agentService=h(sg);_snackBar=h(J2);router=h(Cs);isNameValid(){let e=this.newAppName.trim();return!(!e||!/^[a-zA-Z_]/.test(e)||!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}createNewApp(){let e=this.newAppName.trim();if(!this.isNameValid()){this._snackBar.open("App name must start with a letter or underscore and can only contain letters, digits, and underscores.","OK");return}if(this.data.existingAppNames.includes(e)){this._snackBar.open("App name already exists. Please choose a different name.","OK");return}let A={agent_class:"LlmAgent",instruction:"You are the root agent that coordinates other agents.",isRoot:!0,model:"gemini-2.5-flash",name:e,sub_agents:[],tools:[]},i=new FormData,n=new Map;y0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{o?(this.router.navigate(["/"],{queryParams:{app:e,mode:"builder"}}).then(()=>{window.location.reload()}),this.dialogRef.close(!0)):this._snackBar.open("Something went wrong, please try again","OK")})}static \u0275fac=function(A){return new(A||t)(at(Ca),at(bo))};static \u0275cmp=kA({type:t,selectors:[["app-add-item-dialog"]],decls:10,vars:3,consts:[["mat-dialog-title","",1,"new-app-title"],[2,"padding-left","20px","padding-right","24px"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"],[1,"validation-hint"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click","disabled"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1,"Create a new app"),w(),m(2,"mat-form-field",1)(3,"input",2),ho("ngModelChange",function(o){return ao(i.newAppName,o)||(i.newAppName=o),o}),tA("keydown.enter",function(){return i.createNewApp()}),w(),V(4,AEA,2,0,"mat-hint",3),w(),m(5,"mat-dialog-actions",4)(6,"button",5),K(7,"Cancel"),w(),m(8,"button",6),tA("click",function(){return i.createNewApp()}),K(9," Create "),w()()),A&2&&(p(3),Qo("ngModel",i.newAppName),p(),W(i.isNameValid()?-1:4),p(4),$("disabled",!i.isNameValid()))},dependencies:[Da,No,wa,Nn,uo,fo,Sa,Ua,fn,B0,R1],styles:[".new-app-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-subhead-color)!important;font-family:Google Sans;font-size:24px}.validation-hint[_ngcontent-%COMP%]{font-size:12px;color:var(--mdc-dialog-supporting-text-color)}"]})};var eEA=["audioPlayer"],vE=class t{base64data=rt("");audioPlayerRef=ca("audioPlayer");audioSrc="";constructor(){}ngOnChanges(e){e.base64data&&this.base64data()&&this.setAudioSource(this.base64data())}setAudioSource(e){e.startsWith("data:")?this.audioSrc=e:this.audioSrc=`data:audio/mpeg;base64,${e}`,this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.load()}play(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.play()}pause(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&this.audioPlayerRef().nativeElement.pause()}stop(){this.audioPlayerRef()&&this.audioPlayerRef().nativeElement&&(this.audioPlayerRef().nativeElement.pause(),this.audioPlayerRef().nativeElement.currentTime=0)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-audio-player"]],viewQuery:function(A,i){A&1&&rs(i.audioPlayerRef,eEA,5),A&2&&Dr()},inputs:{base64data:[1,"base64data"]},features:[ti],decls:3,vars:1,consts:[["audioPlayer",""],["controls","",3,"src"]],template:function(A,i){A&1&&(li(0,"div"),Di(1,"audio",1,0),Ei()),A&2&&(p(),vo("src",i.audioSrc))},styles:[".audio-player-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;padding:15px;background-color:var(--audio-player-container-background-color);border-radius:8px;box-shadow:0 2px 5px var(--audio-player-container-box-shadow-color);margin:20px auto;max-width:350px}audio[_ngcontent-%COMP%]{outline:none;border-radius:5px;width:350px}.custom-controls[_ngcontent-%COMP%]{margin-top:10px;display:flex;gap:10px}.custom-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:8px 15px;border:none;border-radius:5px;background-color:var(--audio-player-custom-controls-button-background-color);color:var(--audio-player-custom-controls-button-color);cursor:pointer;font-size:14px;transition:background-color .2s ease}.custom-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background-color:var(--audio-player-custom-controls-button-hover-background-color)}"]})};function tEA(t,e){if(t&1&&Di(0,"img",5),t&2){let A=v(2);vo("src",A.displayContent,Ka)}}function iEA(t,e){t&1&&(li(0,"div",6),K(1," No image data provided. "),Ei())}function nEA(t,e){if(t&1&&(li(0,"div",3),V(1,tEA,1,1,"img",5),V(2,iEA,2,0,"div",6),Ei()),t&2){let A=v();p(),W(A.displayContent?1:-1),p(),W(A.displayContent?-1:2)}}function oEA(t,e){if(t&1&&Di(0,"div",4),t&2){let A=v();vo("innerHTML",A.displayContent,al)}}var V2=class t{displayContent=null;isSvgContent=!1;dialogRef=h(bo);data=h(Ca);safeValuesService=h(u0);ngOnInit(){this.processImageData()}processImageData(){let e=this.data.imageData;if(!e){this.displayContent=null,this.isSvgContent=!1;return}if(e.trim().includes("0?1:-1),p(3),Se(" ",o.getArtifactName(i)," "),p(5),Qo("ngModel",o.selectedArtifacts[n]),p(),Jt(o.getSortedArtifactsFromId(i)),p(7),W((A=o.selectedArtifacts[n].mediaType)===o.MediaType.IMAGE?17:A===o.MediaType.AUDIO?18:-1)}}var cEA="default_artifact_name",$1=(n=>(n.IMAGE="image",n.AUDIO="audio",n.TEXT="text",n.UNSPECIFIED="unspecified",n))($1||{});function O4(t){let e=t.toLowerCase();for(let A of Object.values($1))if(A!=="unspecified"&&e.startsWith(A+"/"))return A;return"unspecified"}function CEA(t){return t?t.startsWith("image/"):!1}function IEA(t){return t?t.startsWith("audio/"):!1}var sw=class t{artifacts=rt([]);selectedArtifacts=[];isArtifactAudio=IEA;isArtifactImage=CEA;MediaType=$1;downloadService=h(cE);dialog=h(Gs);safeValuesService=h(u0);ngOnChanges(e){if(e.artifacts){this.selectedArtifacts=[];for(let A of this.getDistinctArtifactIds())this.selectedArtifacts.push(this.getSortedArtifactsFromId(A)[0])}}downloadArtifact(e){this.downloadService.downloadBase64Data(e.data,e.mimeType,e.id)}getArtifactName(e){return e??cEA}getDistinctArtifactIds(){return[...new Set(this.artifacts().map(e=>e.id))]}getSortedArtifactsFromId(e){return this.artifacts().filter(A=>A.id===e).sort((A,i)=>i.versionId-A.versionId)}onArtifactVersionChange(e,A){this.selectedArtifacts[A]=e.value}openViewImageDialog(e){if(!e||!e.startsWith("data:")||e.indexOf(";base64,")===-1)return;let A=this.dialog.open(V2,{maxWidth:"90vw",maxHeight:"90vh",data:{imageData:e}})}openArtifact(e,A){if(this.isArtifactImage(A)){this.openViewImageDialog(e);return}this.openBase64InNewTab(e,A)}openBase64InNewTab(e,A){}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-artifact-tab"]],inputs:{artifacts:[1,"artifacts"]},features:[ti],decls:3,vars:0,consts:[[1,"artifact-container"],[1,"artifact-box"],[1,"white-separator"],[1,"artifact-metadata"],[1,"link-style-button",3,"click"],[1,"version-select-container"],[3,"ngModelChange","selectionChange","ngModel"],[3,"value"],["mat-flat-button","",1,"download-button",3,"click"],["alt","artifact.id",1,"generated-image",3,"click","src"],[3,"base64data"]],template:function(A,i){A&1&&(m(0,"div",0),Ut(1,lEA,19,4,"div",1,Li),w()),A&2&&(p(),Jt(i.getDistinctArtifactIds()))},dependencies:[Bl,Nn,fo,Sa,Hr,fn,Fn,vE],styles:[".artifact-container[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap}.artifact-box[_ngcontent-%COMP%]{padding:10px;max-width:100%;margin-left:26px;display:flex;flex-direction:column}.artifact-metadata[_ngcontent-%COMP%]{display:flex;align-items:center;margin-bottom:15px;flex-wrap:wrap;gap:5px}.download-button[_ngcontent-%COMP%]{background-color:var(--artifact-tab-download-button-background-color)!important;margin-left:35px;width:130px;height:28px;font-size:14px}.generated-image[_ngcontent-%COMP%]{max-width:60%;border-radius:8px;cursor:pointer}hr.white-separator[_ngcontent-%COMP%]{border:none;border-top:1px solid var(--artifact-tab-white-separator-border-top-color);margin-bottom:1.2em;margin-right:15px}.version-select-container[_ngcontent-%COMP%]{background-color:var(--artifact-tab-version-select-container-background-color);width:80px;margin-left:15px}.link-style-button[_ngcontent-%COMP%]{background:none;border:none;padding:0;font:inherit;color:var(--artifact-tab-link-style-button-color)!important;text-decoration:underline;cursor:pointer;outline:none}.link-style-button[_ngcontent-%COMP%]:hover{color:var(--artifact-tab-link-style-button-hover-color);text-decoration:underline}.link-style-button[_ngcontent-%COMP%]:focus{outline:1px dotted var(--artifact-tab-link-style-button-focus-outline-color)}.link-style-button[_ngcontent-%COMP%]:active{color:var(--artifact-tab-link-style-button-active-color)}.link-style-button[_ngcontent-%COMP%]:disabled{color:var(--artifact-tab-link-style-button-disabled-color);text-decoration:none;cursor:not-allowed}"]})};var dEA=["input"],BEA=["label"],EEA=["*"],Vk={color:"accent",clickAction:"check-indeterminate",disabledInteractive:!1},QEA=new yA("mat-checkbox-default-options",{providedIn:"root",factory:()=>Vk}),Es=(function(t){return t[t.Init=0]="Init",t[t.Checked=1]="Checked",t[t.Unchecked=2]="Unchecked",t[t.Indeterminate=3]="Indeterminate",t})(Es||{}),Wk=class{source;checked},bE=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_ngZone=h(Oe);_animationsDisabled=ji();_options=h(QEA,{optional:!0});focus(){this._inputElement.nativeElement.focus()}_createChangeEvent(A){let i=new Wk;return i.source=this,i.checked=A,i}_getAnimationTargetElement(){return this._inputElement?.nativeElement}_animationClasses={uncheckedToChecked:"mdc-checkbox--anim-unchecked-checked",uncheckedToIndeterminate:"mdc-checkbox--anim-unchecked-indeterminate",checkedToUnchecked:"mdc-checkbox--anim-checked-unchecked",checkedToIndeterminate:"mdc-checkbox--anim-checked-indeterminate",indeterminateToChecked:"mdc-checkbox--anim-indeterminate-checked",indeterminateToUnchecked:"mdc-checkbox--anim-indeterminate-unchecked"};ariaLabel="";ariaLabelledby=null;ariaDescribedby;ariaExpanded;ariaControls;ariaOwns;_uniqueId;id;get inputId(){return`${this.id||this._uniqueId}-input`}required=!1;labelPosition="after";name=null;change=new $A;indeterminateChange=new $A;value;disableRipple=!1;_inputElement;_labelElement;tabIndex;color;disabledInteractive;_onTouched=()=>{};_currentAnimationClass="";_currentCheckState=Es.Init;_controlValueAccessorChangeFn=()=>{};_validatorChangeFn=()=>{};constructor(){h(Xn).load(dr);let A=h(new Ws("tabindex"),{optional:!0});this._options=this._options||Vk,this.color=this._options.color||Vk.color,this.tabIndex=A==null?0:parseInt(A)||0,this.id=this._uniqueId=h(an).getId("mat-mdc-checkbox-"),this.disabledInteractive=this._options?.disabledInteractive??!1}ngOnChanges(A){A.required&&this._validatorChangeFn()}ngAfterViewInit(){this._syncIndeterminate(this.indeterminate)}get checked(){return this._checked}set checked(A){A!=this.checked&&(this._checked=A,this._changeDetectorRef.markForCheck())}_checked=!1;get disabled(){return this._disabled}set disabled(A){A!==this.disabled&&(this._disabled=A,this._changeDetectorRef.markForCheck())}_disabled=!1;get indeterminate(){return this._indeterminate()}set indeterminate(A){let i=A!=this._indeterminate();this._indeterminate.set(A),i&&(A?this._transitionCheckState(Es.Indeterminate):this._transitionCheckState(this.checked?Es.Checked:Es.Unchecked),this.indeterminateChange.emit(A)),this._syncIndeterminate(A)}_indeterminate=jA(!1);_isRippleDisabled(){return this.disableRipple||this.disabled}_onLabelTextChange(){this._changeDetectorRef.detectChanges()}writeValue(A){this.checked=!!A}registerOnChange(A){this._controlValueAccessorChangeFn=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A}validate(A){return this.required&&A.value!==!0?{required:!0}:null}registerOnValidatorChange(A){this._validatorChangeFn=A}_transitionCheckState(A){let i=this._currentCheckState,n=this._getAnimationTargetElement();if(!(i===A||!n)&&(this._currentAnimationClass&&n.classList.remove(this._currentAnimationClass),this._currentAnimationClass=this._getAnimationClassForCheckStateTransition(i,A),this._currentCheckState=A,this._currentAnimationClass.length>0)){n.classList.add(this._currentAnimationClass);let o=this._currentAnimationClass;this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{n.classList.remove(o)},1e3)})}}_emitChangeEvent(){this._controlValueAccessorChangeFn(this.checked),this.change.emit(this._createChangeEvent(this.checked)),this._inputElement&&(this._inputElement.nativeElement.checked=this.checked)}toggle(){this.checked=!this.checked,this._controlValueAccessorChangeFn(this.checked)}_handleInputClick(){let A=this._options?.clickAction;!this.disabled&&A!=="noop"?(this.indeterminate&&A!=="check"&&Promise.resolve().then(()=>{this._indeterminate.set(!1),this.indeterminateChange.emit(!1)}),this._checked=!this._checked,this._transitionCheckState(this._checked?Es.Checked:Es.Unchecked),this._emitChangeEvent()):(this.disabled&&this.disabledInteractive||!this.disabled&&A==="noop")&&(this._inputElement.nativeElement.checked=this.checked,this._inputElement.nativeElement.indeterminate=this.indeterminate)}_onInteractionEvent(A){A.stopPropagation()}_onBlur(){Promise.resolve().then(()=>{this._onTouched(),this._changeDetectorRef.markForCheck()})}_getAnimationClassForCheckStateTransition(A,i){if(this._animationsDisabled)return"";switch(A){case Es.Init:if(i===Es.Checked)return this._animationClasses.uncheckedToChecked;if(i==Es.Indeterminate)return this._checked?this._animationClasses.checkedToIndeterminate:this._animationClasses.uncheckedToIndeterminate;break;case Es.Unchecked:return i===Es.Checked?this._animationClasses.uncheckedToChecked:this._animationClasses.uncheckedToIndeterminate;case Es.Checked:return i===Es.Unchecked?this._animationClasses.checkedToUnchecked:this._animationClasses.checkedToIndeterminate;case Es.Indeterminate:return i===Es.Checked?this._animationClasses.indeterminateToChecked:this._animationClasses.indeterminateToUnchecked}return""}_syncIndeterminate(A){let i=this._inputElement;i&&(i.nativeElement.indeterminate=A)}_onInputClick(){this._handleInputClick()}_onTouchTargetClick(){this._handleInputClick(),this.disabled||this._inputElement.nativeElement.focus()}_preventBubblingFromLabel(A){A.target&&this._labelElement.nativeElement.contains(A.target)&&A.stopPropagation()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-checkbox"]],viewQuery:function(i,n){if(i&1&&ai(dEA,5)(BEA,5),i&2){let o;ce(o=Ce())&&(n._inputElement=o.first),ce(o=Ce())&&(n._labelElement=o.first)}},hostAttrs:[1,"mat-mdc-checkbox"],hostVars:16,hostBindings:function(i,n){i&2&&(vo("id",n.id),ie("tabindex",null)("aria-label",null)("aria-labelledby",null),Po(n.color?"mat-"+n.color:"mat-accent"),ne("_mat-animation-noopable",n._animationsDisabled)("mdc-checkbox--disabled",n.disabled)("mat-mdc-checkbox-disabled",n.disabled)("mat-mdc-checkbox-checked",n.checked)("mat-mdc-checkbox-disabled-interactive",n.disabledInteractive))},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],ariaExpanded:[2,"aria-expanded","ariaExpanded",he],ariaControls:[0,"aria-controls","ariaControls"],ariaOwns:[0,"aria-owns","ariaOwns"],id:"id",required:[2,"required","required",he],labelPosition:"labelPosition",name:"name",value:"value",disableRipple:[2,"disableRipple","disableRipple",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?void 0:en(A)],color:"color",disabledInteractive:[2,"disabledInteractive","disabledInteractive",he],checked:[2,"checked","checked",he],disabled:[2,"disabled","disabled",he],indeterminate:[2,"indeterminate","indeterminate",he]},outputs:{change:"change",indeterminateChange:"indeterminateChange"},exportAs:["matCheckbox"],features:[dt([{provide:Lg,useExisting:wr(()=>t),multi:!0},{provide:a0,useExisting:t,multi:!0}]),ti],ngContentSelectors:EEA,decls:15,vars:23,consts:[["checkbox",""],["input",""],["label",""],["mat-internal-form-field","",3,"click","labelPosition"],[1,"mdc-checkbox"],[1,"mat-mdc-checkbox-touch-target",3,"click"],["type","checkbox",1,"mdc-checkbox__native-control",3,"blur","click","change","checked","indeterminate","disabled","id","required","tabIndex"],[1,"mdc-checkbox__ripple"],[1,"mdc-checkbox__background"],["focusable","false","viewBox","0 0 24 24","aria-hidden","true",1,"mdc-checkbox__checkmark"],["fill","none","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-checkbox__checkmark-path"],[1,"mdc-checkbox__mixedmark"],["mat-ripple","",1,"mat-mdc-checkbox-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-label",3,"for"]],template:function(i,n){if(i&1){let o=JA();Yt(),m(0,"div",3),tA("click",function(r){return Z(o),X(n._preventBubblingFromLabel(r))}),m(1,"div",4,0)(3,"div",5),tA("click",function(){return Z(o),X(n._onTouchTargetClick())}),w(),m(4,"input",6,1),tA("blur",function(){return Z(o),X(n._onBlur())})("click",function(){return Z(o),X(n._onInputClick())})("change",function(r){return Z(o),X(n._onInteractionEvent(r))}),w(),GA(6,"div",7),m(7,"div",8),Qt(),m(8,"svg",9),GA(9,"path",10),w(),as(),GA(10,"div",11),w(),GA(11,"div",12),w(),m(12,"label",13,2),Ke(14),w()()}if(i&2){let o=An(2);$("labelPosition",n.labelPosition),p(4),ne("mdc-checkbox--selected",n.checked),$("checked",n.checked)("indeterminate",n.indeterminate)("disabled",n.disabled&&!n.disabledInteractive)("id",n.inputId)("required",n.required)("tabIndex",n.disabled&&!n.disabledInteractive?-1:n.tabIndex),ie("aria-label",n.ariaLabel||null)("aria-labelledby",n.ariaLabelledby)("aria-describedby",n.ariaDescribedby)("aria-checked",n.indeterminate?"mixed":null)("aria-controls",n.ariaControls)("aria-disabled",n.disabled&&n.disabledInteractive?!0:null)("aria-expanded",n.ariaExpanded)("aria-owns",n.ariaOwns)("name",n.name)("value",n.value),p(7),$("matRippleTrigger",o)("matRippleDisabled",n.disableRipple||n.disabled)("matRippleCentered",!0),p(),$("for",n.inputId)}},dependencies:[ig,E8],styles:[`.mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);margin:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox:hover>.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:hover>.mat-mdc-checkbox-ripple>.mat-ripple-element{background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control:focus+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));background-color:var(--mat-checkbox-unselected-focus-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control:focus~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-unselected-focus-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:active>.mdc-checkbox__native-control+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-unselected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));background-color:var(--mat-checkbox-unselected-pressed-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:active>.mdc-checkbox__native-control~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-unselected-pressed-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity));background-color:var(--mat-checkbox-selected-hover-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-hover-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox .mdc-checkbox__native-control:focus:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity));background-color:var(--mat-checkbox-selected-focus-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox .mdc-checkbox__native-control:focus:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-focus-state-layer-color, var(--mat-sys-primary))}.mdc-checkbox:active>.mdc-checkbox__native-control:checked+.mdc-checkbox__ripple{opacity:var(--mat-checkbox-selected-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity));background-color:var(--mat-checkbox-selected-pressed-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox:active>.mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mat-checkbox-selected-pressed-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control~.mat-mdc-checkbox-ripple .mat-ripple-element,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control+.mdc-checkbox__ripple{background-color:var(--mat-checkbox-unselected-hover-state-layer-color, var(--mat-sys-on-surface))}.mdc-checkbox .mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1;width:var(--mat-checkbox-state-layer-size, 40px);height:var(--mat-checkbox-state-layer-size, 40px);top:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);right:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox--disabled{cursor:default;pointer-events:none}.mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:rgba(0,0,0,0);pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1);-webkit-print-color-adjust:exact;color-adjust:exact;border-color:var(--mat-checkbox-unselected-icon-color, var(--mat-sys-on-surface-variant));top:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2)}.mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary))}.mdc-checkbox--disabled .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}@media(forced-colors: active){.mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox:hover>.mdc-checkbox__native-control:not(:checked)~.mdc-checkbox__background,.mdc-checkbox:hover>.mdc-checkbox__native-control:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-hover-icon-color, var(--mat-sys-on-surface));background-color:rgba(0,0,0,0)}.mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox:hover>.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary))}.mdc-checkbox__native-control:focus:focus:not(:checked)~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-focus-icon-color, var(--mat-sys-on-surface))}.mdc-checkbox__native-control:focus:focus:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary))}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:GrayText}}.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.6, 1);color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mdc-checkbox__checkmark{color:CanvasText}}.mdc-checkbox--disabled .mdc-checkbox__checkmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__checkmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:GrayText}}.mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);border-color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mdc-checkbox__mixedmark{margin:0 1px}}.mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:GrayText}}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear;transition:none}.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear;transition:none}.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark{transition:opacity 180ms cubic-bezier(0, 0, 0.2, 1),transform 180ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mat-mdc-checkbox{display:inline-block;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-checkbox._mat-animation-noopable>.mat-internal-form-field>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark{transition:none !important;animation:none !important}.mat-mdc-checkbox label{cursor:pointer}.mat-mdc-checkbox .mat-internal-form-field{color:var(--mat-checkbox-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-checkbox-label-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-checkbox-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-checkbox-label-text-size, var(--mat-sys-body-medium-size));letter-spacing:var(--mat-checkbox-label-text-tracking, var(--mat-sys-body-medium-tracking));font-weight:var(--mat-checkbox-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-checkbox.mat-mdc-checkbox-disabled.mat-mdc-checkbox-disabled-interactive{pointer-events:auto}.mat-mdc-checkbox.mat-mdc-checkbox-disabled.mat-mdc-checkbox-disabled-interactive input{cursor:default}.mat-mdc-checkbox.mat-mdc-checkbox-disabled label{cursor:default;color:var(--mat-checkbox-disabled-label-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-mdc-checkbox.mat-mdc-checkbox-disabled label{color:GrayText}}.mat-mdc-checkbox label:empty{display:none}.mat-mdc-checkbox .mdc-checkbox__ripple{opacity:0}.mat-mdc-checkbox .mat-mdc-checkbox-ripple,.mdc-checkbox__ripple{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-checkbox .mat-mdc-checkbox-ripple:not(:empty),.mdc-checkbox__ripple:not(:empty){transform:translateZ(0)}.mat-mdc-checkbox-ripple .mat-ripple-element{opacity:.1}.mat-mdc-checkbox-touch-target{position:absolute;top:50%;left:50%;height:var(--mat-checkbox-touch-target-size, 48px);width:var(--mat-checkbox-touch-target-size, 48px);transform:translate(-50%, -50%);display:var(--mat-checkbox-touch-target-display, block)}.mat-mdc-checkbox .mat-mdc-checkbox-ripple::before{border-radius:50%}.mdc-checkbox__native-control:focus-visible~.mat-focus-indicator::before{content:""} -`],encapsulation:2,changeDetection:0})}return t})();var SO=new yA("CdkAccordion");var xO=(()=>{class t{accordion=h(SO,{optional:!0,skipSelf:!0});_changeDetectorRef=h(Dt);_expansionDispatcher=h(D4);_openCloseAllSubscription=Jn.EMPTY;closed=new $A;opened=new $A;destroyed=new $A;expandedChange=new $A;id=h(an).getId("cdk-accordion-child-");get expanded(){return this._expanded}set expanded(A){if(this._expanded!==A){if(this._expanded=A,this.expandedChange.emit(A),A){this.opened.emit();let i=this.accordion?this.accordion.id:this.id;this._expansionDispatcher.notify(this.id,i)}else this.closed.emit();this._changeDetectorRef.markForCheck()}}_expanded=!1;get disabled(){return this._disabled()}set disabled(A){this._disabled.set(A)}_disabled=jA(!1);_removeUniqueSelectionListener=()=>{};constructor(){}ngOnInit(){this._removeUniqueSelectionListener=this._expansionDispatcher.listen((A,i)=>{this.accordion&&!this.accordion.multi&&this.accordion.id===i&&this.id!==A&&(this.expanded=!1)}),this.accordion&&(this._openCloseAllSubscription=this._subscribeToOpenCloseAllActions())}ngOnDestroy(){this.opened.complete(),this.closed.complete(),this.destroyed.emit(),this.destroyed.complete(),this._removeUniqueSelectionListener(),this._openCloseAllSubscription.unsubscribe()}toggle(){this.disabled||(this.expanded=!this.expanded)}close(){this.disabled||(this.expanded=!1)}open(){this.disabled||(this.expanded=!0)}_subscribeToOpenCloseAllActions(){return this.accordion._openCloseAllActions.subscribe(A=>{this.disabled||(this.expanded=A)})}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["cdk-accordion-item"],["","cdkAccordionItem",""]],inputs:{expanded:[2,"expanded","expanded",he],disabled:[2,"disabled","disabled",he]},outputs:{closed:"closed",opened:"opened",destroyed:"destroyed",expandedChange:"expandedChange"},exportAs:["cdkAccordionItem"],features:[dt([{provide:SO,useValue:void 0}])]})}return t})(),RO=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({})}return t})();var hEA=["body"],uEA=["bodyWrapper"],fEA=[[["mat-expansion-panel-header"]],"*",[["mat-action-row"]]],mEA=["mat-expansion-panel-header","*","mat-action-row"];function pEA(t,e){}var wEA=[[["mat-panel-title"]],[["mat-panel-description"]],"*"],DEA=["mat-panel-title","mat-panel-description","*"];function yEA(t,e){t&1&&(li(0,"span",1),Qt(),li(1,"svg",2),Di(2,"path",3),Ei()())}var NO=new yA("MAT_ACCORDION"),FO=new yA("MAT_EXPANSION_PANEL"),vEA=(()=>{class t{_template=h(Tn);_expansionPanel=h(FO,{optional:!0});constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["ng-template","matExpansionPanelContent",""]]})}return t})(),_O=new yA("MAT_EXPANSION_PANEL_DEFAULT_OPTIONS"),Zk=(()=>{class t extends xO{_viewContainerRef=h(Oo);_animationsDisabled=ji();_document=h(Xt);_ngZone=h(Oe);_elementRef=h(ge);_renderer=h(_i);_cleanupTransitionEnd;get hideToggle(){return this._hideToggle||this.accordion&&this.accordion.hideToggle}set hideToggle(A){this._hideToggle=A}_hideToggle=!1;get togglePosition(){return this._togglePosition||this.accordion&&this.accordion.togglePosition}set togglePosition(A){this._togglePosition=A}_togglePosition;afterExpand=new $A;afterCollapse=new $A;_inputChanges=new XA;accordion=h(NO,{optional:!0,skipSelf:!0});_lazyContent;_body;_bodyWrapper;_portal;_headerId=h(an).getId("mat-expansion-panel-header-");constructor(){super();let A=h(_O,{optional:!0});this._expansionDispatcher=h(D4),A&&(this.hideToggle=A.hideToggle)}_hasSpacing(){return this.accordion?this.expanded&&this.accordion.displayMode==="default":!1}_getExpandedState(){return this.expanded?"expanded":"collapsed"}toggle(){this.expanded=!this.expanded}close(){this.expanded=!1}open(){this.expanded=!0}ngAfterContentInit(){this._lazyContent&&this._lazyContent._expansionPanel===this&&this.opened.pipe(cn(null),Ze(()=>this.expanded&&!this._portal),oo(1)).subscribe(()=>{this._portal=new Is(this._lazyContent._template,this._viewContainerRef)}),this._setupAnimationEvents()}ngOnChanges(A){this._inputChanges.next(A)}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTransitionEnd?.(),this._inputChanges.complete()}_containsFocus(){if(this._body){let A=this._document.activeElement,i=this._body.nativeElement;return A===i||i.contains(A)}return!1}_transitionEndListener=({target:A,propertyName:i})=>{A===this._bodyWrapper?.nativeElement&&i==="grid-template-rows"&&this._ngZone.run(()=>{this.expanded?this.afterExpand.emit():this.afterCollapse.emit()})};_setupAnimationEvents(){this._ngZone.runOutsideAngular(()=>{this._animationsDisabled?(this.opened.subscribe(()=>this._ngZone.run(()=>this.afterExpand.emit())),this.closed.subscribe(()=>this._ngZone.run(()=>this.afterCollapse.emit()))):setTimeout(()=>{let A=this._elementRef.nativeElement;this._cleanupTransitionEnd=this._renderer.listen(A,"transitionend",this._transitionEndListener),A.classList.add("mat-expansion-panel-animations-enabled")},200)})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-expansion-panel"]],contentQueries:function(i,n,o){if(i&1&&fa(o,vEA,5),i&2){let a;ce(a=Ce())&&(n._lazyContent=a.first)}},viewQuery:function(i,n){if(i&1&&ai(hEA,5)(uEA,5),i&2){let o;ce(o=Ce())&&(n._body=o.first),ce(o=Ce())&&(n._bodyWrapper=o.first)}},hostAttrs:[1,"mat-expansion-panel"],hostVars:4,hostBindings:function(i,n){i&2&&ne("mat-expanded",n.expanded)("mat-expansion-panel-spacing",n._hasSpacing())},inputs:{hideToggle:[2,"hideToggle","hideToggle",he],togglePosition:"togglePosition"},outputs:{afterExpand:"afterExpand",afterCollapse:"afterCollapse"},exportAs:["matExpansionPanel"],features:[dt([{provide:NO,useValue:void 0},{provide:FO,useExisting:t}]),It,ti],ngContentSelectors:mEA,decls:9,vars:4,consts:[["bodyWrapper",""],["body",""],[1,"mat-expansion-panel-content-wrapper"],["role","region",1,"mat-expansion-panel-content",3,"id"],[1,"mat-expansion-panel-body"],[3,"cdkPortalOutlet"]],template:function(i,n){i&1&&(Yt(fEA),Ke(0),m(1,"div",2,0)(3,"div",3,1)(5,"div",4),Ke(6,1),pt(7,pEA,0,0,"ng-template",5),w(),Ke(8,2),w()()),i&2&&(p(),ie("inert",n.expanded?null:""),p(2),$("id",n.id),ie("aria-labelledby",n._headerId),p(4),$("cdkPortalOutlet",n._portal))},dependencies:[Yg],styles:[`.mat-expansion-panel{box-sizing:content-box;display:block;margin:0;overflow:hidden;position:relative;background:var(--mat-expansion-container-background-color, var(--mat-sys-surface));color:var(--mat-expansion-container-text-color, var(--mat-sys-on-surface));border-radius:var(--mat-expansion-container-shape, 12px)}.mat-expansion-panel.mat-expansion-panel-animations-enabled{transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:var(--mat-expansion-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:var(--mat-expansion-container-shape, 12px);border-top-left-radius:var(--mat-expansion-container-shape, 12px)}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:var(--mat-expansion-container-shape, 12px);border-bottom-left-radius:var(--mat-expansion-container-shape, 12px)}@media(forced-colors: active){.mat-expansion-panel{outline:solid 1px}}.mat-expansion-panel-content-wrapper{display:grid;grid-template-rows:0fr;grid-template-columns:100%}.mat-expansion-panel-animations-enabled .mat-expansion-panel-content-wrapper{transition:grid-template-rows 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper{grid-template-rows:1fr}@supports not (grid-template-rows: 0fr){.mat-expansion-panel-content-wrapper{height:0}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper{height:auto}}@media print{.mat-expansion-panel-content-wrapper{height:0}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper{height:auto}}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible;min-height:0;visibility:hidden;font-family:var(--mat-expansion-container-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-expansion-container-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-expansion-container-text-weight, var(--mat-sys-body-large-weight));line-height:var(--mat-expansion-container-text-line-height, var(--mat-sys-body-large-line-height));letter-spacing:var(--mat-expansion-container-text-tracking, var(--mat-sys-body-large-tracking))}.mat-expansion-panel-animations-enabled .mat-expansion-panel-content{transition:visibility 190ms linear}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper>.mat-expansion-panel-content{visibility:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px;border-top-color:var(--mat-expansion-actions-divider-color, var(--mat-sys-outline))}.mat-action-row .mat-button-base,.mat-action-row .mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row .mat-button-base,[dir=rtl] .mat-action-row .mat-mdc-button-base{margin-left:0;margin-right:8px} -`],encapsulation:2,changeDetection:0})}return t})();var LO=(()=>{class t{panel=h(Zk,{host:!0});_element=h(ge);_focusMonitor=h(ar);_changeDetectorRef=h(Dt);_parentChangeSubscription=Jn.EMPTY;constructor(){h(Xn).load(dr);let A=this.panel,i=h(_O,{optional:!0}),n=h(new Ws("tabindex"),{optional:!0}),o=A.accordion?A.accordion._stateChanges.pipe(Ze(a=>!!(a.hideToggle||a.togglePosition))):ja;this.tabIndex=parseInt(n||"")||0,this._parentChangeSubscription=fi(A.opened,A.closed,o,A._inputChanges.pipe(Ze(a=>!!(a.hideToggle||a.disabled||a.togglePosition)))).subscribe(()=>this._changeDetectorRef.markForCheck()),A.closed.pipe(Ze(()=>A._containsFocus())).subscribe(()=>this._focusMonitor.focusVia(this._element,"program")),i&&(this.expandedHeight=i.expandedHeight,this.collapsedHeight=i.collapsedHeight)}expandedHeight;collapsedHeight;tabIndex=0;get disabled(){return this.panel.disabled}_toggle(){this.disabled||this.panel.toggle()}_isExpanded(){return this.panel.expanded}_getExpandedState(){return this.panel._getExpandedState()}_getPanelId(){return this.panel.id}_getTogglePosition(){return this.panel.togglePosition}_showToggle(){return!this.panel.hideToggle&&!this.panel.disabled}_getHeaderHeight(){let A=this._isExpanded();return A&&this.expandedHeight?this.expandedHeight:!A&&this.collapsedHeight?this.collapsedHeight:null}_keydown(A){switch(A.keyCode){case 32:case 13:pa(A)||(A.preventDefault(),this._toggle());break;default:this.panel.accordion&&this.panel.accordion._handleHeaderKeydown(A);return}}focus(A,i){A?this._focusMonitor.focusVia(this._element,A,i):this._element.nativeElement.focus(i)}ngAfterViewInit(){this._focusMonitor.monitor(this._element).subscribe(A=>{A&&this.panel.accordion&&this.panel.accordion._handleHeaderFocus(this)})}ngOnDestroy(){this._parentChangeSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._element)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-expansion-panel-header"]],hostAttrs:["role","button",1,"mat-expansion-panel-header","mat-focus-indicator"],hostVars:13,hostBindings:function(i,n){i&1&&tA("click",function(){return n._toggle()})("keydown",function(a){return n._keydown(a)}),i&2&&(ie("id",n.panel._headerId)("tabindex",n.disabled?-1:n.tabIndex)("aria-controls",n._getPanelId())("aria-expanded",n._isExpanded())("aria-disabled",n.panel.disabled),wn("height",n._getHeaderHeight()),ne("mat-expanded",n._isExpanded())("mat-expansion-toggle-indicator-after",n._getTogglePosition()==="after")("mat-expansion-toggle-indicator-before",n._getTogglePosition()==="before"))},inputs:{expandedHeight:"expandedHeight",collapsedHeight:"collapsedHeight",tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)]},ngContentSelectors:DEA,decls:5,vars:3,consts:[[1,"mat-content"],[1,"mat-expansion-indicator"],["xmlns","http://www.w3.org/2000/svg","viewBox","0 -960 960 960","aria-hidden","true","focusable","false"],["d","M480-345 240-585l56-56 184 184 184-184 56 56-240 240Z"]],template:function(i,n){i&1&&(Yt(wEA),li(0,"span",0),Ke(1),Ke(2,1),Ke(3,2),Ei(),V(4,yEA,3,0,"span",1)),i&2&&(ne("mat-content-hide-toggle",!n._showToggle()),p(4),W(n._showToggle()?4:-1))},styles:[`.mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;height:var(--mat-expansion-header-collapsed-state-height, 48px);font-family:var(--mat-expansion-header-text-font, var(--mat-sys-title-medium-font));font-size:var(--mat-expansion-header-text-size, var(--mat-sys-title-medium-size));font-weight:var(--mat-expansion-header-text-weight, var(--mat-sys-title-medium-weight));line-height:var(--mat-expansion-header-text-line-height, var(--mat-sys-title-medium-line-height));letter-spacing:var(--mat-expansion-header-text-tracking, var(--mat-sys-title-medium-tracking))}.mat-expansion-panel-animations-enabled .mat-expansion-panel-header{transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header::before{border-radius:inherit}.mat-expansion-panel-header.mat-expanded{height:var(--mat-expansion-header-expanded-state-height, 64px)}.mat-expansion-panel-header[aria-disabled=true]{color:var(--mat-expansion-header-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-header-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}@media(hover: none){.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-container-background-color, var(--mat-sys-surface))}}.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused{background:var(--mat-expansion-header-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-content.mat-content-hide-toggle{margin-right:8px}[dir=rtl] .mat-content.mat-content-hide-toggle{margin-right:0;margin-left:8px}.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-left:24px;margin-right:0}[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-right:24px;margin-left:0}.mat-expansion-panel-header-title{color:var(--mat-expansion-header-text-color, var(--mat-sys-on-surface))}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;flex-basis:0;margin-right:16px;align-items:center}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit}.mat-expansion-panel-header-description{flex-grow:2;color:var(--mat-expansion-header-description-color, var(--mat-sys-on-surface-variant))}.mat-expansion-panel-animations-enabled .mat-expansion-indicator{transition:transform 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header.mat-expanded .mat-expansion-indicator{transform:rotate(180deg)}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:"";padding:3px;transform:rotate(45deg);vertical-align:middle;color:var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));display:var(--mat-expansion-legacy-header-indicator-display, none)}.mat-expansion-indicator svg{width:24px;height:24px;margin:0 -8px;vertical-align:middle;fill:var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));display:var(--mat-expansion-header-indicator-display, inline-block)}@media(forced-colors: active){.mat-expansion-panel-content{border-top:1px solid;border-top-left-radius:0;border-top-right-radius:0}} -`],encapsulation:2,changeDetection:0})}return t})();var GO=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-panel-title"]],hostAttrs:[1,"mat-expansion-panel-header-title"]})}return t})();var KO=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[RO,d0,Gi]})}return t})();var bEA={google_search:"search",EnterpriseWebSearchTool:"web",VertexAiSearchTool:"search",FilesRetrieval:"find_in_page",load_memory:"memory",preload_memory:"memory",url_context:"link",VertexAiRagRetrieval:"find_in_page",exit_loop:"sync",get_user_choice:"how_to_reg",load_artifacts:"image",LongRunningFunctionTool:"data_object"};function ME(t,e){return e==="Agent Tool"?"smart_toy":e==="Built-in tool"?bEA[t]||"build":e==="Function tool"?"data_object":"build"}var fc=class t{static toolMenuTooltips=new Map([["Function tool","Build custom tools for your specific ADK agent needs."],["Built-in tool","Ready-to-use functionality such as Google Search or code executors that provide agents with common capabilities. "],["Agent tool","A sub-agent that can be invoked as a tool by another agent."]]);static toolDetailedInfo=new Map([["Function tool",{shortDescription:"Build custom tools for your specific ADK agent needs.",detailedDescription:"The ADK framework automatically inspects your Python function's signature\u2014including its name, docstring, parameters, type hints, and default values\u2014to generate a schema. This schema is what the LLM uses to understand the tool's purpose, when to use it, and what arguments it requires.",docLink:"https://google.github.io/adk-docs/tools/function-tools/"}],["Agent tool",{shortDescription:"Wraps a sub-agent as a callable tool, enabling modular and hierarchical agent architectures.",detailedDescription:"Agent tools allow you to use one agent as a tool within another agent, creating powerful multi-agent workflows.",docLink:"https://google.github.io/adk-docs/agents/multi-agents/#c-explicit-invocation-agenttool"}]]);static callbackMenuTooltips=new Map([["before_agent","Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed."],["after_agent","Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes."],["before_model","Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow."],["after_model","Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent."],["before_tool","Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it."],["after_tool","Called just after the tool's run_async method completes successfully."]]);static callbackDialogTooltips=new Map([["before_agent","Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed."],["after_agent","Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes."],["before_model","Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow."],["after_model","Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent."],["before_tool","Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it."],["after_tool","Called just after the tool's run_async method completes successfully."]]);static callbackDetailedInfo=new Map([["before_agent",{shortDescription:"Called immediately before the agent's _run_async_impl (or _run_live_impl) method is executed. It runs after the agent's InvocationContext is created but before its core logic begins.",detailedDescription:" Ideal for setting up resources or state needed only for this specific agent's run, performing validation checks on the session state (callback_context.state) before execution starts, logging the entry point of the agent's activity, or potentially modifying the invocation context before the core logic uses it.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-agent-callback"}],["after_agent",{shortDescription:"Called immediately after the agent's _run_async_impl (or _run_live_impl) method successfully completes.",detailedDescription:"Useful for cleanup tasks, post-execution validation, logging the completion of an agent's activity, modifying final state, or augmenting/replacing the agent's final output.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-agent-callback"}],["before_model",{shortDescription:"Called just before the generate_content_async (or equivalent) request is sent to the LLM within an LlmAgent's flow.",detailedDescription:"Allows inspection and modification of the request going to the LLM. Use cases include adding dynamic instructions, injecting few-shot examples based on state, modifying model config, implementing guardrails (like profanity filters), or implementing request-level caching.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-model-callback"}],["after_model",{shortDescription:"Called just after a response (LlmResponse) is received from the LLM, before it's processed further by the invoking agent.",detailedDescription:"Allows inspection or modification of the raw LLM response.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-model-callback"}],["before_tool",{shortDescription:"Called just before a specific tool's run_async method is invoked, after the LLM has generated a function call for it.",detailedDescription:"Allows inspection and modification of tool arguments, performing authorization checks before execution, logging tool usage attempts, or implementing tool-level caching.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#before-tool-callback"}],["after_tool",{shortDescription:"Called just after the tool's run_async method completes successfully.",detailedDescription:"Allows inspection and modification of the tool's result before it's sent back to the LLM (potentially after summarization). Useful for logging tool results, post-processing or formatting results, or saving specific parts of the result to the session state.",docLink:"https://google.github.io/adk-docs/callbacks/types-of-callbacks/#after-tool-callback"}]]);static getToolMenuTooltips(e){return t.toolMenuTooltips.get(e)}static getToolDetailedInfo(e){return t.toolDetailedInfo.get(e)}static getCallbackMenuTooltips(e){return t.callbackMenuTooltips.get(e)}static getCallbackDialogTooltips(e){return t.callbackDialogTooltips.get(e)}static getCallbackDetailedInfo(e){return t.callbackDetailedInfo.get(e)}};var MEA=["callbackNameInput"];function kEA(t,e){if(t&1){let A=JA();js(0),m(1,"div",8)(2,"div",9),tA("click",function(){Z(A);let n=v();return X(n.toggleCallbackInfo())}),m(3,"mat-icon",10),K(4,"info"),w(),m(5,"div",11)(6,"span"),K(7,"Callback Information"),w()(),m(8,"button",12)(9,"mat-icon"),K(10),w()()(),m(11,"div",13)(12,"div",14)(13,"div",15),K(14),w(),m(15,"div",16),K(16),w()(),m(17,"div",17)(18,"a",18)(19,"mat-icon"),K(20,"open_in_new"),w(),m(21,"span"),K(22,"View Official Documentation"),w()()()()(),qs()}if(t&2){let A,i,n,o=v();p(10),qA(o.isCallbackInfoExpanded?"expand_less":"expand_more"),p(),ne("expanded",o.isCallbackInfoExpanded),p(3),qA((A=o.getCallbackInfo())==null?null:A.shortDescription),p(2),qA((i=o.getCallbackInfo())==null?null:i.detailedDescription),p(2),$("href",(n=o.getCallbackInfo())==null?null:n.docLink,Ka)}}function SEA(t,e){if(t&1&&(m(0,"mat-option",21),K(1),w()),t&2){let A=e.$implicit;$("value",A),p(),qA(A)}}function xEA(t,e){if(t&1){let A=JA();js(0),m(1,"mat-form-field",3)(2,"mat-label"),K(3,"Callback Type"),w(),m(4,"mat-select",19),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.callbackType,n)||(o.callbackType=n),X(n)}),pt(5,SEA,2,2,"mat-option",20),w()(),qs()}if(t&2){let A=v();p(4),Qo("ngModel",A.callbackType),p(),$("ngForOf",A.availableCallbackTypes)}}function REA(t,e){t&1&&(m(0,"mat-error"),K(1,"Same callback name has been used"),w())}function NEA(t,e){t&1&&(m(0,"mat-error"),K(1,"Cannot have callback consist of two words"),w())}function FEA(t,e){t&1&&(m(0,"mat-error"),K(1,"Callback function names cannot have spaces"),w())}var Xk=class{isErrorState(e){return!!(e&&e.invalid)}},P4=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.callbackType=A?.callbackType??"",this.existingCallbackNames=A?.existingCallbackNames??[],this.isEditMode=!!A?.isEditMode,this.availableCallbackTypes=A?.availableCallbackTypes??[],this.isEditMode&&A?.callback&&(this.callbackName=A.callback.name,this.callbackType=A.callback.type,this.originalCallbackName=A.callback.name,this.existingCallbackNames=this.existingCallbackNames.filter(i=>i!==this.originalCallbackName))}callbackNameInput;callbackName="";callbackType="";existingCallbackNames=[];matcher=new Xk;isEditMode=!1;availableCallbackTypes=[];originalCallbackName="";isCallbackInfoExpanded=!1;addCallback(){if(!this.callbackName.trim()||this.hasSpaces()||this.isDuplicateName())return;let e={name:this.callbackName.trim(),type:this.callbackType,isEditMode:this.isEditMode,originalName:this.originalCallbackName||this.callbackName.trim()};this.dialogRef.close(e)}cancel(){this.dialogRef.close()}isDuplicateName(){if(!Array.isArray(this.existingCallbackNames))return!1;let e=(this.callbackName||"").trim();return this.existingCallbackNames.includes(e)}hasSpaces(){return/\s/.test(this.callbackName||"")}createDisabled(){return!this.callbackName.trim()||this.isDuplicateName()||this.hasSpaces()}validate(){this.hasSpaces()?this.callbackNameInput.control.setErrors({hasSpaces:!0}):this.isDuplicateName()?this.callbackNameInput.control.setErrors({duplicateName:!0}):this.callbackNameInput.control.setErrors(null)}getCallbackInfo(){return fc.getCallbackDetailedInfo(this.callbackType)}toggleCallbackInfo(){this.isCallbackInfoExpanded=!this.isCallbackInfoExpanded}static \u0275fac=function(A){return new(A||t)(at(bo),at(Ca))};static \u0275cmp=kA({type:t,selectors:[["app-add-callback-dialog"]],viewQuery:function(A,i){if(A&1&&ai(MEA,5),A&2){let n;ce(n=Ce())&&(i.callbackNameInput=n.first)}},decls:18,vars:10,consts:[["callbackNameInput","ngModel"],["mat-dialog-title",""],[4,"ngIf"],[2,"width","100%"],["matInput","",3,"ngModelChange","keydown.enter","ngModel","errorStateMatcher"],["align","end"],["mat-button","",3,"click"],["mat-raised-button","","color","secondary",3,"click","disabled"],[1,"callback-info-container"],[1,"callback-info-header",3,"click"],[1,"callback-info-icon"],[1,"callback-info-title"],["mat-icon-button","","type","button","aria-label","Toggle callback information",1,"callback-info-toggle"],[1,"callback-info-body"],[1,"callback-info-content"],[1,"callback-info-short"],[1,"callback-info-detailed"],[1,"callback-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"callback-info-link",3,"href"],[3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]],template:function(A,i){if(A&1){let n=JA();m(0,"h2",1),K(1),w(),m(2,"mat-dialog-content"),pt(3,kEA,23,6,"ng-container",2)(4,xEA,6,2,"ng-container",2),m(5,"mat-form-field",3)(6,"mat-label"),K(7,"Callback Name"),w(),m(8,"input",4,0),ho("ngModelChange",function(a){return Z(n),ao(i.callbackName,a)||(i.callbackName=a),X(a)}),tA("ngModelChange",function(){return Z(n),X(i.validate())})("keydown.enter",function(){return Z(n),X(i.addCallback())}),w(),pt(10,REA,2,0,"mat-error",2)(11,NEA,2,0,"mat-error",2)(12,FEA,2,0,"mat-error",2),w()(),m(13,"mat-dialog-actions",5)(14,"button",6),tA("click",function(){return Z(n),X(i.cancel())}),K(15,"Cancel"),w(),m(16,"button",7),tA("click",function(){return Z(n),X(i.addCallback())}),K(17),w()()}if(A&2){let n=An(9);p(),qA(i.isEditMode?"Edit Callback":"Add "+i.callbackType+" Callback"),p(2),$("ngIf",i.getCallbackInfo()),p(),$("ngIf",i.isEditMode),p(4),Qo("ngModel",i.callbackName),$("errorStateMatcher",i.matcher),p(2),$("ngIf",n.hasError("duplicateName")),p(),$("ngIf",n.hasError("hasSpaces")),p(),$("ngIf",n.hasError("hasSpaces")),p(4),$("disabled",i.createDisabled()),p(),Se(" ",i.isEditMode?"Save":"Add"," ")}},dependencies:[ma,DB,rl,Nn,uo,fo,Sa,uz,Da,Ua,rr,Ns,fn,Wa,Yr,No,Gg,k9,gl,wa,ck,Bl,Hr,Il,Fn],styles:[".callback-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;min-width:400px;max-width:600px}.full-width[_ngcontent-%COMP%]{width:100%}mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px}mat-dialog-actions[_ngcontent-%COMP%]{padding:16px 24px;margin:0}mat-form-field[_ngcontent-%COMP%]{margin-top:8px!important}.mat-mdc-raised-button.mat-secondary[_ngcontent-%COMP%]:not([disabled]){background-color:#8ab4f8}.callback-info-container[_ngcontent-%COMP%]{background-color:#8ab4f814;border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.callback-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.callback-info-header[_ngcontent-%COMP%]:hover .callback-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.callback-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.callback-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.callback-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.callback-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.callback-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.callback-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.callback-info-content[_ngcontent-%COMP%]{flex:1}.callback-info-short[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-dialog-content-text-color);margin-bottom:8px;line-height:1.4}.callback-info-detailed[_ngcontent-%COMP%]{color:var(--mat-dialog-content-text-color);font-size:14px;line-height:1.5;opacity:.8}.callback-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.callback-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.callback-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.callback-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};function _EA(t,e){if(t&1){let A=JA();js(0),m(1,"div",6)(2,"div",7),tA("click",function(){Z(A);let n=v();return X(n.toggleToolInfo())}),m(3,"mat-icon",8),K(4,"info"),w(),m(5,"div",9)(6,"span"),K(7,"Tool Information"),w()(),m(8,"button",10)(9,"mat-icon"),K(10),w()()(),m(11,"div",11)(12,"div",12)(13,"div",13),K(14),w(),m(15,"div",14),K(16),w()(),m(17,"div",15)(18,"a",16)(19,"mat-icon"),K(20,"open_in_new"),w(),m(21,"span"),K(22,"View Official Documentation"),w()()()()(),qs()}if(t&2){let A,i,n,o=v();p(10),qA(o.isToolInfoExpanded?"expand_less":"expand_more"),p(),ne("expanded",o.isToolInfoExpanded),p(3),qA((A=o.getToolInfo())==null?null:A.shortDescription),p(2),qA((i=o.getToolInfo())==null?null:i.detailedDescription),p(2),$("href",(n=o.getToolInfo())==null?null:n.docLink,Ka)}}function LEA(t,e){if(t&1){let A=JA();m(0,"mat-form-field",2)(1,"input",17),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.toolName,n)||(o.toolName=n),X(n)}),tA("keydown.enter",function(){Z(A);let n=v();return X(n.addTool())}),w()()}if(t&2){let A=v();p(),Qo("ngModel",A.toolName)}}function GEA(t,e){if(t&1&&(m(0,"mat-option",20),K(1),w()),t&2){let A=e.$implicit;$("value",A),p(),Se(" ",A," ")}}function KEA(t,e){if(t&1){let A=JA();m(0,"mat-form-field",2)(1,"mat-select",18),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.selectedBuiltInTool,n)||(o.selectedBuiltInTool=n),X(n)}),pt(2,GEA,2,2,"mat-option",19),w()()}if(t&2){let A=v();p(),Qo("ngModel",A.selectedBuiltInTool),p(),$("ngForOf",A.builtInTools)}}var W2=class t{constructor(e,A){this.data=e;this.dialogRef=A}toolName="";toolType="Function tool";selectedBuiltInTool="google_search";builtInTools=["EnterpriseWebSearchTool","exit_loop","FilesRetrieval","get_user_choice","google_search","load_artifacts","load_memory","LongRunningFunctionTool","preload_memory","url_context","VertexAiRagRetrieval","VertexAiSearchTool"];isEditMode=!1;isToolInfoExpanded=!1;ngOnInit(){this.toolType=this.data.toolType,this.isEditMode=this.data.isEditMode||!1,this.isEditMode&&this.data.toolName&&(this.toolType==="Function tool"?this.toolName=this.data.toolName:this.toolType==="Built-in tool"&&(this.selectedBuiltInTool=this.data.toolName))}addTool(){if(this.toolType==="Function tool"&&!this.toolName.trim())return;let e={toolType:this.toolType,isEditMode:this.isEditMode};this.toolType==="Function tool"?e.name=this.toolName.trim():this.toolType==="Built-in tool"&&(e.name=this.selectedBuiltInTool),this.dialogRef.close(e)}cancel(){this.dialogRef.close()}createDisabled(){return this.toolType==="Function tool"&&!this.toolName.trim()}getToolInfo(){return fc.getToolDetailedInfo(this.toolType)}toggleToolInfo(){this.isToolInfoExpanded=!this.isToolInfoExpanded}static \u0275fac=function(A){return new(A||t)(at(Ca),at(bo))};static \u0275cmp=kA({type:t,selectors:[["app-add-tool-dialog"]],decls:11,vars:6,consts:[["mat-dialog-title","",1,"dialog-title"],[4,"ngIf"],[2,"width","100%"],["align","end"],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click","disabled"],[1,"tool-info-container"],[1,"tool-info-header",3,"click"],[1,"tool-info-icon"],[1,"tool-info-title"],["mat-icon-button","","type","button","aria-label","Toggle tool information",1,"tool-info-toggle"],[1,"tool-info-body"],[1,"tool-info-content"],[1,"tool-info-short"],[1,"tool-info-detailed"],[1,"tool-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"tool-info-link",3,"href"],["matInput","","placeholder","Enter full function name",3,"ngModelChange","keydown.enter","ngModel"],["placeholder","Select built-in tool",3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1),w(),m(2,"mat-dialog-content"),pt(3,_EA,23,6,"ng-container",1),V(4,LEA,2,1,"mat-form-field",2),V(5,KEA,3,2,"mat-form-field",2),w(),m(6,"mat-dialog-actions",3)(7,"button",4),tA("click",function(){return i.cancel()}),K(8,"Cancel"),w(),m(9,"button",5),tA("click",function(){return i.addTool()}),K(10),w()()),A&2&&(p(),qA(i.isEditMode?"Editing Tool":"Add New Tool"),p(2),$("ngIf",i.getToolInfo()),p(),W(i.toolType==="Function tool"?4:-1),p(),W(i.toolType==="Built-in tool"?5:-1),p(4),$("disabled",i.createDisabled()),p(),Se(" ",i.isEditMode?"Save":"Create"," "))},dependencies:[ma,DB,rl,Nn,uo,fo,Sa,Da,rr,No,wa,Bl,Hr,Ua,fn,Wa,Fn],styles:[".dialog-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;font-family:Google Sans;font-size:24px}mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px}.tool-info-container[_ngcontent-%COMP%]{background-color:#8ab4f814;border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.tool-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.tool-info-header[_ngcontent-%COMP%]:hover .tool-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.tool-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.tool-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.tool-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.tool-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.tool-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.tool-info-content[_ngcontent-%COMP%]{flex:1}.tool-info-short[_ngcontent-%COMP%]{font-weight:500;color:#e3e3e3;margin-bottom:8px;line-height:1.4}.tool-info-detailed[_ngcontent-%COMP%]{color:#c4c7ca;font-size:14px;line-height:1.5}.tool-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.tool-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.tool-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.tool-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};function qo(t){return Array.isArray(t)}function ia(t){return t!==null&&typeof t=="object"&&(t.constructor===void 0||t.constructor.name==="Object")}function $k(t){return t&&typeof t=="object"?t.op==="add":!1}function AS(t){return t&&typeof t=="object"?t.op==="remove":!1}function gw(t){return t&&typeof t=="object"?t.op==="replace":!1}function lw(t){return t&&typeof t=="object"?t.op==="copy":!1}function Z2(t){return t&&typeof t=="object"?t.op==="move":!1}function UO(t,e){return JSON.stringify(t)===JSON.stringify(e)}function UEA(t,e){return t===e}function eS(t){return t.slice(0,t.length-1)}function JO(t){return t[t.length-1]}function YO(t,e){let A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:UEA;if(t.length{e[A]=t[A]}),e}if(ia(t)){let e=cA({},t);return Object.getOwnPropertySymbols(t).forEach(A=>{e[A]=t[A]}),e}return t}function nS(t,e,A){if(t[e]===A)return t;let i=iS(t);return i[e]=A,i}function je(t,e){let A=t,i=0;for(;i3&&arguments[3]!==void 0?arguments[3]:!1;if(e.length===0)return A;let n=e[0],o=Or(t?t[n]:void 0,e.slice(1),A,i);if(ia(t)||qo(t))return nS(t,n,o);if(i){let a=JEA.test(n)?[]:{};return a[n]=o,a}throw new Error("Path does not exist")}var JEA=/^\d+$/;function j4(t,e,A){if(e.length===0)return A(t);if(!tS(t))throw new Error("Path doesn't exist");let i=e[0],n=j4(t[i],e.slice(1),A);return nS(t,i,n)}function Ad(t,e){if(e.length===0)return t;if(!tS(t))throw new Error("Path does not exist");if(e.length===1){let n=e[0];if(!(n in t))return t;let o=iS(t);return qo(o)&&o.splice(Number.parseInt(n),1),ia(o)&&delete o[n],o}let A=e[0],i=Ad(t[A],e.slice(1));return nS(t,A,i)}function q4(t,e,A){let i=e.slice(0,e.length-1),n=e[e.length-1];return j4(t,i,o=>{if(!Array.isArray(o))throw new TypeError(`Array expected at path ${JSON.stringify(i)}`);let a=iS(o);return a.splice(Number.parseInt(n),0,A),a})}function br(t,e){return t===void 0?!1:e.length===0?!0:t===null?!1:br(t[e[0]],e.slice(1))}function Qs(t){let e=t.split("/");return e.shift(),e.map(A=>A.replace(/~1/g,"/").replace(/~0/g,"~"))}function wt(t){return t.map(TO).join("")}function TO(t){return`/${String(t).replace(/~/g,"~0").replace(/\//g,"~1")}`}function V4(t,e){return t+TO(e)}function lg(t,e,A){let i=t;for(let n=0;n{let r,s=cg(o,a.path);if(a.op==="add")r=OO(o,s);else if(a.op==="remove")r=zO(o,s);else if(a.op==="replace")r=HO(o,s);else if(a.op==="copy")r=VEA(o,s);else if(a.op==="move")r=WEA(o,s,W4(a.from));else if(a.op==="test")r=[];else throw new Error(`Unknown JSONPatch operation ${JSON.stringify(a)}`);let g;if(A?.before){let l=A.before(o,a,r);if(l?.revertOperations&&(r=l.revertOperations),l?.document&&(g=l.document),l?.json)throw new Error('Deprecation warning: returned object property ".json" has been renamed to ".document"')}if(i=r.concat(i),g!==void 0)return{document:g}}}),i}function HO(t,e){return br(t,e)?[{op:"replace",path:wt(e),value:je(t,e)}]:[]}function zO(t,e){return[{op:"add",path:wt(e),value:je(t,e)}]}function OO(t,e){return kE(t,e)||!br(t,e)?[{op:"remove",path:wt(e)}]:HO(t,e)}function VEA(t,e){return OO(t,e)}function WEA(t,e,A){if(e.length="0"&&t<="9"}function VO(t){return t>=" "}function Z4(t){return`,:[]/{}() -+`.includes(t)}function rS(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"||t==="_"||t==="$"}function sS(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"||t==="_"||t==="$"||t>="0"&&t<="9"}var gS=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,lS=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;function cS(t){return`,[]/{} -+`.includes(t)}function CS(t){return X4(t)||rQA.test(t)}var rQA=/^[[{\w-]$/;function WO(t){return t===` -`||t==="\r"||t===" "||t==="\b"||t==="\f"}function X2(t,e){let A=t.charCodeAt(e);return A===32||A===10||A===9||A===13}function ZO(t,e){let A=t.charCodeAt(e);return A===32||A===9||A===13}function XO(t,e){let A=t.charCodeAt(e);return A===160||A>=8192&&A<=8202||A===8239||A===8287||A===12288}function X4(t){return IS(t)||dw(t)}function IS(t){return t==='"'||t==="\u201C"||t==="\u201D"}function dS(t){return t==='"'}function dw(t){return t==="'"||t==="\u2018"||t==="\u2019"||t==="`"||t==="\xB4"}function BS(t){return t==="'"}function SE(t,e){let A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=t.lastIndexOf(e);return i!==-1?t.substring(0,i)+(A?"":t.substring(i+1)):t}function fl(t,e){let A=t.length;if(!X2(t,A-1))return t+e;for(;X2(t,A-1);)A--;return t.substring(0,A)+e+t.substring(A)}function $O(t,e,A){return t.substring(0,e)+t.substring(e+A)}function AP(t){return/[,\n][ \t\r]*$/.test(t)}var sQA={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},gQA={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:` -`,r:"\r",t:" "};function ml(t){let e=0,A="";g(["```","[```","{```"]),o()||P(),g(["```","```]","```}"]);let n=C(",");for(n&&a(),CS(t[e])&&AP(A)?(n||(A=fl(A,",")),f()):n&&(A=SE(A,","));t[e]==="}"||t[e]==="]";)e++,a();if(e>=t.length)return A;DA();function o(){a();let oA=E()||Q()||b()||M()||D()||_(!1)||U();return a(),oA}function a(){let oA=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,sA=e,hA=r(oA);do hA=s(),hA&&(hA=r(oA));while(hA);return e>sA}function r(oA){let sA=oA?X2:ZO,hA="";for(;;)if(sA(t,e))hA+=t[e],e++;else if(XO(t,e))hA+=" ",e++;else break;return hA.length>0?(A+=hA,!0):!1}function s(){if(t[e]==="/"&&t[e+1]==="*"){for(;e=t.length;YA||(CS(t[e])||ee?A=fl(A,":"):iA()),o()||(YA||ee?A+="null":iA())}return t[e]==="}"?(A+="}",e++):A=fl(A,"}"),!0}return!1}function Q(){if(t[e]==="["){A+="[",e++,a(),I(",")&&a();let oA=!0;for(;e0&&arguments[0]!==void 0?arguments[0]:!1,sA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,hA=t[e]==="\\";if(hA&&(e++,hA=!0),X4(t[e])){let YA=dS(t[e])?dS:BS(t[e])?BS:dw(t[e])?dw:IS,ee=e,UA=A.length,mA='"';for(e++;;){if(e>=t.length){let KA=J(e-1);return!oA&&Z4(t.charAt(KA))?(e=ee,A=A.substring(0,UA),b(!0)):(mA=fl(mA,'"'),A+=mA,!0)}if(e===sA)return mA=fl(mA,'"'),A+=mA,!0;if(YA(t[e])){let KA=e,Pe=mA.length;if(mA+='"',e++,A+=mA,a(!1),oA||e>=t.length||Z4(t[e])||X4(t[e])||$2(t[e]))return S(),!0;let Je=J(KA-1),HA=t.charAt(Je);if(HA===",")return e=ee,A=A.substring(0,UA),b(!1,Je);if(Z4(HA))return e=ee,A=A.substring(0,UA),b(!0);A=A.substring(0,UA),e=KA+1,mA=`${mA.substring(0,Pe)}\\${mA.substring(Pe)}`}else if(oA&&cS(t[e])){if(t[e-1]===":"&&gS.test(t.substring(ee+1,e+2)))for(;e=t.length?e=t.length:BA()}else mA+=KA,e+=2}else{let KA=t.charAt(e);KA==='"'&&t[e-1]!=="\\"?(mA+=`\\${KA}`,e++):WO(KA)?(mA+=sQA[KA],e++):(VO(KA)||O(KA),mA+=KA,e++)}hA&&d()}}return!1}function S(){let oA=!1;for(a();t[e]==="+";){oA=!0,e++,a(),A=SE(A,'"',!0);let sA=A.length;b()?A=$O(A,sA,1):A=fl(A,'"')}return oA}function M(){let oA=e;if(t[e]==="-"){if(e++,j())return AA(oA),!0;if(!$2(t[e]))return e=oA,!1}for(;$2(t[e]);)e++;if(t[e]==="."){if(e++,j())return AA(oA),!0;if(!$2(t[e]))return e=oA,!1;for(;$2(t[e]);)e++}if(t[e]==="e"||t[e]==="E"){if(e++,(t[e]==="-"||t[e]==="+")&&e++,j())return AA(oA),!0;if(!$2(t[e]))return e=oA,!1;for(;$2(t[e]);)e++}if(!j())return e=oA,!1;if(e>oA){let sA=t.slice(oA,e),hA=/^0\d/.test(sA);return A+=hA?`"${sA}"`:sA,!0}return!1}function D(){return F("true","true")||F("false","false")||F("null","null")||F("True","true")||F("False","false")||F("None","null")}function F(oA,sA){return t.slice(e,e+oA.length)===oA?(A+=sA,e+=oA.length,!0):!1}function _(oA){let sA=e;if(rS(t[e])){for(;esA){for(;X2(t,e-1)&&e>0;)e--;let hA=t.slice(sA,e);return A+=hA==="undefined"?"null":JSON.stringify(hA),t[e]==='"'&&e++,!0}}function U(){if(t[e]==="/"){let oA=e;for(e++;e0&&X2(t,sA);)sA--;return sA}function j(){return e>=t.length||Z4(t[e])||X2(t,e)}function AA(oA){A+=`${t.slice(oA,e)}0`}function O(oA){throw new yC(`Invalid character ${JSON.stringify(oA)}`,e)}function DA(){throw new yC(`Unexpected character ${JSON.stringify(t[e])}`,e)}function P(){throw new yC("Unexpected end of json string",t.length)}function aA(){throw new yC("Object key expected",e)}function iA(){throw new yC("Colon expected",e)}function BA(){let oA=t.slice(e,e+6);throw new yC(`Invalid unicode character "${oA}"`,e)}}function lQA(t,e){return t[e]==="*"&&t[e+1]==="/"}var cQA=typeof global=="object"&&global&&global.Object===Object&&global,Bw=cQA;var CQA=typeof self=="object"&&self&&self.Object===Object&&self,IQA=Bw||CQA||Function("return this")(),Ya=IQA;var dQA=Ya.Symbol,Mr=dQA;var eP=Object.prototype,BQA=eP.hasOwnProperty,EQA=eP.toString,$4=Mr?Mr.toStringTag:void 0;function QQA(t){var e=BQA.call(t,$4),A=t[$4];try{t[$4]=void 0;var i=!0}catch{}var n=EQA.call(t);return i&&(e?t[$4]=A:delete t[$4]),n}var tP=QQA;var hQA=Object.prototype,uQA=hQA.toString;function fQA(t){return uQA.call(t)}var iP=fQA;var mQA="[object Null]",pQA="[object Undefined]",nP=Mr?Mr.toStringTag:void 0;function wQA(t){return t==null?t===void 0?pQA:mQA:nP&&nP in Object(t)?tP(t):iP(t)}var mc=wQA;function DQA(t){return t!=null&&typeof t=="object"}var Us=DQA;var yQA="[object Symbol]";function vQA(t){return typeof t=="symbol"||Us(t)&&mc(t)==yQA}var Hg=vQA;function bQA(t,e){for(var A=-1,i=t==null?0:t.length,n=Array(i);++A0){if(++e>=BhA)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var pP=hhA;function uhA(t){return function(){return t}}var wP=uhA;var fhA=(function(){try{var t=Cg(Object,"defineProperty");return t({},"",{}),t}catch{}})(),RE=fhA;var mhA=RE?function(t,e){return RE(t,"toString",{configurable:!0,enumerable:!1,value:wP(e),writable:!0})}:v0,DP=mhA;var phA=pP(DP),yP=phA;function whA(t,e){for(var A=-1,i=t==null?0:t.length;++A-1&&t%1==0&&t-1&&t%1==0&&t<=_hA}var FE=LhA;function GhA(t){return t!=null&&FE(t.length)&&!Ew(t)}var pl=GhA;function KhA(t,e,A){if(!Qr(A))return!1;var i=typeof e;return(i=="number"?pl(A)&&NE(e,A.length):i=="string"&&e in A)?tI(A[e],t):!1}var e3=KhA;var UhA=Object.prototype;function JhA(t){var e=t&&t.constructor,A=typeof e=="function"&&e.prototype||UhA;return t===A}var nI=JhA;function YhA(t,e){for(var A=-1,i=Array(t);++A-1}var VP=r4A;function s4A(t,e){var A=this.__data__,i=rI(A,t);return i<0?(++this.size,A.push([t,e])):A[i][1]=e,this}var WP=s4A;function UE(t){var e=-1,A=t==null?0:t.length;for(this.clear();++e0&&A(r)?e>1?gj(r,e-1,A,i,n):TE(n,r):i||(n[n.length]=r)}return n}var lj=gj;var x4A=pw(Object.getPrototypeOf,Object),vw=x4A;function R4A(t,e,A){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),A=A>n?n:A,A<0&&(A+=n),n=e>A?0:A-e>>>0,e>>>=0;for(var o=Array(n);++ir))return!1;var g=o.get(t),l=o.get(e);if(g&&l)return g==e&&l==t;var C=-1,I=!0,d=A&xfA?new Aq:void 0;for(o.set(t,e),o.set(e,t);++C=e||_<0||C&&U>=o}function f(){var F=Ow();if(Q(F))return b(F);r=setTimeout(f,E(F))}function b(F){return r=void 0,I&&i?d(F):(i=n=void 0,a)}function S(){r!==void 0&&clearTimeout(r),g=0,i=s=n=r=void 0}function M(){return r===void 0?a:b(Ow())}function D(){var F=Ow(),_=Q(F);if(i=arguments,n=this,s=F,_){if(r===void 0)return B(s);if(C)return clearTimeout(r),r=setTimeout(f,e),d(s)}return r===void 0&&(r=setTimeout(f,e)),a}return D.cancel=S,D.flush=M,D}var qE=xmA;function RmA(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var mi=RmA;function NmA(t){return typeof t=="function"?t:v0}var Pw=NmA;function FmA(t,e){for(var A=t==null?0:t.length;A--&&e(t[A],A,t)!==!1;);return t}var vq=FmA;var _mA=Jw(!0),bq=_mA;function LmA(t,e){return t&&bq(t,e,wl)}var Mq=LmA;var GmA=Tw(Mq,!0),kq=GmA;function KmA(t,e){var A=go(t)?vq:kq;return A(t,Pw(e))}var pS=KmA;function UmA(t){return t&&t.length?t[0]:void 0}var Dl=UmA;function JmA(t,e){var A=-1,i=pl(t)?Array(t.length):[];return Hw(t,function(n,o,a){i[++A]=e(n,o,a)}),i}var jw=JmA;function YmA(t,e){var A=go(t)?AI:jw;return A(t,b0(e,3))}var wS=YmA;var TmA=Object.prototype,HmA=TmA.hasOwnProperty,zmA=zw(function(t,e,A){HmA.call(t,A)?t[A].push(e):eI(t,A,[e])}),DS=zmA;function OmA(t){var e=t==null?0:t.length;return e?cj(t,0,-1):[]}var Ki=OmA;var PmA="[object Map]",jmA="[object Set]",qmA=Object.prototype,VmA=qmA.hasOwnProperty;function WmA(t){if(t==null)return!0;if(pl(t)&&(go(t)||typeof t=="string"||typeof t.splice=="function"||bC(t)||_E(t)||oI(t)))return!t.length;var e=pc(t);if(e==PmA||e==jmA)return!t.size;if(nI(t))return!ww(t).length;for(var A in t)if(VmA.call(t,A))return!1;return!0}var qi=WmA;function ZmA(t,e){return jE(t,e)}var Qi=ZmA;function XmA(t,e){return te||o&&a&&s&&!r&&!g||i&&a&&s||!A&&s||!n)return 1;if(!i&&!o&&!g&&t=r)return s;var g=A[i];return s*(g=="desc"?-1:1)}}return t.index-e.index}var Fq=npA;function opA(t,e,A){e.length?e=AI(e,function(o){return go(o)?function(a){return YE(a,o.length===1?o[0]:o)}:o}):e=[v0];var i=-1;e=AI(e,aI(b0));var n=jw(t,function(o,a,r){var s=AI(e,function(g){return g(o)});return{criteria:s,index:++i,value:o}});return Rq(n,function(o,a){return Fq(o,a,A)})}var _q=opA;var apA=zw(function(t,e,A){t[A?0:1].push(e)},function(){return[[],[]]}),vS=apA;var rpA=Math.ceil,spA=Math.max;function gpA(t,e,A,i){for(var n=-1,o=spA(rpA((e-t)/(A||1)),0),a=Array(o);o--;)a[i?o:++n]=t,t+=A;return a}var Lq=gpA;function lpA(t){return function(e,A,i){return i&&typeof i!="number"&&e3(e,A,i)&&(A=i=void 0),e=xE(e),A===void 0?(A=e,e=0):A=xE(A),i=i===void 0?e1&&e3(t,e[0],e[1])?e=[]:A>2&&e3(e[0],e[1],e[2])&&(e=[e[0]]),_q(t,lj(e,1),[])}),bS=CpA;var IpA=9007199254740991,MS=4294967295,dpA=Math.min;function BpA(t,e){if(t=IP(t),t<1||t>IpA)return[];var A=MS,i=dpA(t,MS);e=Pw(e),t-=MS;for(var n=fw(i,e);++AArray.isArray(t),hpA=t=>t!==null&&typeof t=="object"&&!dI(t),upA=t=>typeof t=="string",id=(t,e)=>t===e?!0:t!==null&&e!==null&&typeof t=="object"&&typeof e=="object"&&Object.keys(t).length===Object.keys(e).length&&Object.entries(t).every(([A,i])=>id(i,e[A])),Kq=(t,e)=>{let A=t?.[e];if(A!==void 0){if(!Object.hasOwn(t,e)||Array.isArray(t)&&!/^\d+$/.test(e)||typeof t!="object")throw new TypeError(`Unsupported property "${e}"`);return A}};function Xa(t){return(...e)=>{let A=e.map(o=>$a(o)),i=A[0],n=A[1];return A.length===1?o=>t(i(o)):A.length===2?o=>t(i(o),n(o)):o=>t(...A.map(a=>a(o)))}}var r3={boolean:0,number:1,string:2},Uq=3,Tq=(t,e)=>typeof t==typeof e&&typeof t in r3?t>e:!1,fpA=(t,e)=>id(t,e)||Tq(t,e),Hq=(t,e)=>typeof t==typeof e&&typeof t in r3?tid(t,e)||Hq(t,e),a3={pipe:(...t)=>{let e=t.map(A=>$a(A));return A=>e.reduce((i,n)=>n(i),A)},object:t=>{let e=Object.keys(t).map(A=>[A,$a(t[A])]);return A=>{let i={};for(let[n,o]of e)i[n]=o(A);return i}},array:(...t)=>{let e=t.map(A=>$a(A));return A=>e.map(i=>i(A))},get:(...t)=>{if(t.length===0)return e=>e??null;if(t.length===1){let e=t[0];return A=>Kq(A,e)??null}return e=>{let A=e;for(let i of t)A=Kq(A,i);return A??null}},map:t=>{let e=$a(t);return A=>A.map(e)},mapObject:t=>{let e=$a(t);return A=>{let i={};for(let n of Object.keys(A)){let o=e({key:n,value:A[n]});i[o.key]=o.value}return i}},mapKeys:t=>{let e=$a(t);return A=>{let i={};for(let n of Object.keys(A)){let o=e(n);i[o]=A[n]}return i}},mapValues:t=>{let e=$a(t);return A=>{let i={};for(let n of Object.keys(A))i[n]=e(A[n]);return i}},filter:t=>{let e=$a(t);return A=>A.filter(i=>Jq(e(i)))},sort:(t=["get"],e)=>{let A=$a(t),i=e==="desc"?-1:1;function n(o,a){let r=A(o),s=A(a);if(typeof r!=typeof s){let g=r3[typeof r]??Uq,l=r3[typeof s]??Uq;return g>l?i:gs?i:ro.slice().sort(n)},reverse:()=>t=>t.toReversed(),pick:(...t)=>{let e=t.map(([i,...n])=>[n[n.length-1],a3.get(...n)]),A=(i,n)=>{let o={};for(let[a,r]of n)o[a]=r(i);return o};return i=>dI(i)?i.map(n=>A(n,e)):A(i,e)},groupBy:t=>{let e=$a(t);return A=>{let i={};for(let n of A){let o=e(n);i[o]?i[o].push(n):i[o]=[n]}return i}},keyBy:t=>{let e=$a(t);return A=>{let i={};for(let n of A){let o=e(n);o in i||(i[o]=n)}return i}},flatten:()=>t=>t.flat(),join:(t="")=>e=>e.join(t),split:Xa((t,e)=>e!==void 0?t.split(e):t.trim().split(/\s+/)),substring:Xa((t,e,A)=>t.slice(Math.max(e,0),A)),uniq:()=>t=>{let e=[];for(let A of t)e.findIndex(i=>id(i,A))===-1&&e.push(A);return e},uniqBy:t=>e=>Object.values(a3.keyBy(t)(e)),limit:t=>e=>e.slice(0,Math.max(t,0)),size:()=>t=>t.length,keys:()=>Object.keys,values:()=>Object.values,prod:()=>t=>o3(t,(e,A)=>e*A),sum:()=>t=>dI(t)?t.reduce((e,A)=>e+A,0):SS(),average:()=>t=>dI(t)?t.length>0?t.reduce((e,A)=>e+A)/t.length:null:SS(),min:()=>t=>o3(t,(e,A)=>Math.min(e,A)),max:()=>t=>o3(t,(e,A)=>Math.max(e,A)),and:Xa((...t)=>o3(t,(e,A)=>!!(e&&A))),or:Xa((...t)=>o3(t,(e,A)=>!!(e||A))),not:Xa(t=>!t),exists:t=>{let e=t.slice(1),A=e.pop(),i=a3.get(...e);return n=>{let o=i(n);return!!o&&Object.hasOwnProperty.call(o,A)}},if:(t,e,A)=>{let i=$a(t),n=$a(e),o=$a(A);return a=>Jq(i(a))?n(a):o(a)},in:(t,e)=>{let A=$a(t),i=$a(e);return n=>{let o=A(n);return i(n).findIndex(a=>id(a,o))!==-1}},"not in":(t,e)=>{let A=a3.in(t,e);return i=>!A(i)},regex:(t,e,A)=>{let i=new RegExp(e,A),n=$a(t);return o=>i.test(n(o))},match:(t,e,A)=>{let i=new RegExp(e,A),n=$a(t);return o=>{let a=n(o).match(i);return a?Yq(a):null}},matchAll:(t,e,A)=>{let i=new RegExp(e,`${A??""}g`),n=$a(t);return o=>Array.from(n(o).matchAll(i)).map(Yq)},eq:Xa(id),gt:Xa(Tq),gte:Xa(fpA),lt:Xa(Hq),lte:Xa(mpA),ne:Xa((t,e)=>!id(t,e)),add:Xa((t,e)=>t+e),subtract:Xa((t,e)=>t-e),multiply:Xa((t,e)=>t*e),divide:Xa((t,e)=>t/e),mod:Xa((t,e)=>t%e),pow:Xa((t,e)=>t**e),abs:Xa(Math.abs),round:Xa((t,e=0)=>+`${Math.round(+`${t}e${e}`)}e${-e}`),number:Xa(t=>{let e=Number(t);return Number.isNaN(Number(t))?null:e}),string:Xa(String)},Jq=t=>t!==null&&t!==0&&t!==!1,o3=(t,e)=>(dI(t)||SS(),t.length===0?null:t.reduce(e)),Yq=t=>{let[e,...A]=t,i=t.groups;return A.length?i?{value:e,groups:A,namedGroups:i}:{value:e,groups:A}:{value:e}},SS=()=>{xS("Array expected")},xS=t=>{throw new TypeError(t)},Vw=[];function $a(t,e){Vw.unshift(cA(cA(cA({},a3),Vw[0]),e?.functions));try{let A=dI(t)?ppA(t,Vw[0]):hpA(t)?xS(`Function notation ["object", {...}] expected but got ${JSON.stringify(t)}`):()=>t;return i=>{try{return A(i)}catch(n){throw n.jsonquery=[{data:i,query:t},...n.jsonquery??[]],n}}}finally{Vw.shift()}}function ppA(t,e){let[A,...i]=t,n=e[A];return n||xS(`Unknown function '${A}'`),n(...i)}var zq=[{pow:"^"},{multiply:"*",divide:"/",mod:"%"},{add:"+",subtract:"-"},{gt:">",gte:">=",lt:"<",lte:"<=",in:"in","not in":"not in"},{eq:"==",ne:"!="},{and:"and"},{or:"or"},{pipe:"|"}],wpA=["|","and","or"],Oq=["|","and","or","*","/","%","+","-"];function Pq(t,e){if(!dI(e))throw new Error("Invalid custom operators");return e.reduce(DpA,t)}function DpA(t,{name:e,op:A,at:i,after:n,before:o}){if(i)return t.map(s=>Object.values(s).includes(i)?Ge(cA({},s),{[e]:A}):s);let a=n??o,r=t.findIndex(s=>Object.values(s).includes(a));if(r!==-1)return t.toSpliced(r+(n?1:0),0,{[e]:A});throw new Error("Invalid custom operator")}var ypA=/^[a-zA-Z_$][a-zA-Z\d_$]*$/,vpA=/^[a-zA-Z_$][a-zA-Z\d_$]*/,bpA=/^"(?:[^"\\]|\\.)*"/,MpA=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/,kpA=/^(0|[1-9][0-9]*)/,SpA=/^(true|false|null)/,xpA=/^[ \n\t\r]+/;function RS(t,e){let A=e?.operators??[],i=Pq(zq,A),n=Object.assign({},...i),o=wpA.concat(A.filter(j=>j.vararg).map(j=>j.op)),a=Oq.concat(A.filter(j=>j.leftAssociative).map(j=>j.op)),r=(j=i.length-1)=>{let AA=i[j];if(!AA)return g();let O=t[U]==="(",DA=r(j-1);for(;;){if(D(),t[U]==="."&&"pipe"in AA){let sA=l();DA=DA[0]==="pipe"?[...DA,sA]:["pipe",DA,sA];continue}let P=U,aA=s(AA);if(!aA)break;let iA=r(j-1),BA=DA[0],oA=aA===BA&&!O;if(oA&&!a.includes(n[aA])){U=P;break}DA=oA&&o.includes(n[aA])?[...DA,iA]:[aA,DA,iA]}return DA},s=j=>{let AA=Object.keys(j).sort((O,DA)=>DA.length-O.length);for(let O of AA){let DA=j[O];if(t.substring(U,U+DA.length)===DA)return U+=DA.length,D(),O}},g=()=>{if(D(),t[U]==="("){U++;let j=r();return F(")"),j}return l()},l=()=>{if(t[U]==="."){let j=[];for(;t[U]===".";)U++,j.push(B()??E()??f()??_("Property expected")),D();return["get",...j]}return C()},C=()=>{let j=U,AA=E();if(D(),!AA||t[U]!=="(")return U=j,I();U++,D();let O=t[U]!==")"?[r()]:[];for(;U{if(t[U]==="{"){U++,D();let j={},AA=!0;for(;U{if(t[U]==="["){U++,D();let j=[],AA=!0;for(;UM(bpA,JSON.parse),E=()=>M(vpA,j=>j),Q=()=>M(MpA,JSON.parse),f=()=>M(kpA,JSON.parse),b=()=>{let j=M(SpA,JSON.parse);if(j!==void 0)return j;_("Value expected")},S=()=>{D(),U{let O=t.substring(U).match(j);if(O)return U+=O[0].length,AA(O[0])},D=()=>M(xpA,j=>j),F=j=>{t[U]!==j&&_(`Character '${j}' expected`),U++},_=(j,AA=U)=>{throw new SyntaxError(`${j} (pos: ${AA})`)},U=0,J=r();return S(),J}var RpA=40,NpA=" ",jq=(t,e)=>{let A=e?.indentation??NpA,i=e?.operators??[],n=Pq(zq,i),o=Object.assign({},...n),a=Oq.concat(i.filter(d=>d.leftAssociative).map(d=>d.op)),r=(d,B,E=!1)=>dI(d)?s(d,B,E):JSON.stringify(d),s=(d,B,E)=>{let[Q,...f]=d;if(Q==="get"&&f.length>0)return l(f);if(Q==="object")return g(f[0],B);if(Q==="array"){let D=f.map(F=>r(F,B));return I(D,["[",", ","]"],[`[ -${B+A}`,`, -${B+A}`,` -${B}]`])}let b=o[Q];if(b){let D=E?"(":"",F=E?")":"",_=f.map((U,J)=>{let j=U?.[0],AA=n.findIndex(P=>Q in P),O=n.findIndex(P=>j in P),DA=AA0||Q===j&&!a.includes(b);return r(U,B+A,DA)});return I(_,[D,` ${b} `,F],[D,` -${B+A}${b} `,F])}let S=f.length===1?B:B+A,M=f.map(D=>r(D,S));return I(M,[`${Q}(`,", ",")"],f.length===1?[`${Q}(`,`, -${B}`,")"]:[`${Q}( -${S}`,`, -${S}`,` -${B})`])},g=(d,B)=>{let E=B+A,Q=Object.entries(d).map(([f,b])=>`${C(f)}: ${r(b,E)}`);return I(Q,["{ ",", "," }"],[`{ -${E}`,`, -${E}`,` -${B}}`])},l=d=>d.map(B=>`.${C(B)}`).join(""),C=d=>ypA.test(d)?d:JSON.stringify(d),I=(d,[B,E,Q],[f,b,S])=>B.length+d.reduce((M,D)=>M+D.length+E.length,0)-E.length+Q.length<=(e?.maxLineLength??RpA)?B+d.join(E)+Q:f+d.join(b)+S;return r(t,"")};function qq(t,e,A){return $a(upA(e)?RS(e,A):e,A)(t)}var Vq={prefix:"far",iconName:"clock",icon:[512,512,[128339,"clock-four"],"f017","M464 256a208 208 0 1 1 -416 0 208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0 256 256 0 1 0 -512 0zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"]};var FpA={prefix:"far",iconName:"square-check",icon:[448,512,[9745,9989,61510,"check-square"],"f14a","M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zm230.7 89.9c7.8-10.7 22.8-13.1 33.5-5.3 10.7 7.8 13.1 22.8 5.3 33.5L211.4 366.1c-4.1 5.7-10.5 9.3-17.5 9.8-7 .5-13.9-2-18.8-6.9l-55.9-55.9c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l36 36 105.6-145.2z"]},NS=FpA;var Wq={prefix:"far",iconName:"lightbulb",icon:[384,512,[128161],"f0eb","M296.5 291.1C321 265.2 336 230.4 336 192 336 112.5 271.5 48 192 48S48 112.5 48 192c0 38.4 15 73.2 39.5 99.1 21.3 22.4 44.9 54 53.3 92.9l102.4 0c8.4-39 32-70.5 53.3-92.9zm34.8 33C307.7 349 288 379.4 288 413.7l0 18.3c0 44.2-35.8 80-80 80l-32 0c-44.2 0-80-35.8-80-80l0-18.3C96 379.4 76.3 349 52.7 324.1 20 289.7 0 243.2 0 192 0 86 86 0 192 0S384 86 384 192c0 51.2-20 97.7-52.7 132.1zM144 184c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-48.6 39.4-88 88-88 13.3 0 24 10.7 24 24s-10.7 24-24 24c-22.1 0-40 17.9-40 40z"]};var FS={prefix:"far",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M384 80c8.8 0 16 7.2 16 16l0 320c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l320 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z"]};var Zq={prefix:"fas",iconName:"rotate",icon:[512,512,[128260,"sync-alt"],"f2f1","M480.1 192l7.9 0c13.3 0 24-10.7 24-24l0-144c0-9.7-5.8-18.5-14.8-22.2S477.9 .2 471 7L419.3 58.8C375 22.1 318 0 256 0 127 0 20.3 95.4 2.6 219.5 .1 237 12.2 253.2 29.7 255.7s33.7-9.7 36.2-27.1C79.2 135.5 159.3 64 256 64 300.4 64 341.2 79 373.7 104.3L327 151c-6.9 6.9-8.9 17.2-5.2 26.2S334.3 192 344 192l136.1 0zm29.4 100.5c2.5-17.5-9.7-33.7-27.1-36.2s-33.7 9.7-36.2 27.1c-13.3 93-93.4 164.5-190.1 164.5-44.4 0-85.2-15-117.7-40.3L185 361c6.9-6.9 8.9-17.2 5.2-26.2S177.7 320 168 320L24 320c-13.3 0-24 10.7-24 24L0 488c0 9.7 5.8 18.5 14.8 22.2S34.1 511.8 41 505l51.8-51.8C137 489.9 194 512 256 512 385 512 491.7 416.6 509.4 292.5z"]};var _S={prefix:"fas",iconName:"paste",icon:[512,512,["file-clipboard"],"f0ea","M64 0C28.7 0 0 28.7 0 64L0 384c0 35.3 28.7 64 64 64l112 0 0-224c0-61.9 50.1-112 112-112l64 0 0-48c0-35.3-28.7-64-64-64L64 0zM248 112l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24zm40 48c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64l0-165.5c0-17-6.7-33.3-18.7-45.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7L288 160z"]};var _pA={prefix:"fas",iconName:"crop-simple",icon:[512,512,["crop-alt"],"f565","M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32-32 0C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l208 0 0-64-208 0 0-352zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-256c0-35.3-28.7-64-64-64l-208 0 0 64 208 0 0 352z"]},Xq=_pA;var s3={prefix:"fas",iconName:"filter",icon:[512,512,[],"f0b0","M32 64C19.1 64 7.4 71.8 2.4 83.8S.2 109.5 9.4 118.6L192 301.3 192 416c0 8.5 3.4 16.6 9.4 22.6l64 64c9.2 9.2 22.9 11.9 34.9 6.9S320 492.9 320 480l0-178.7 182.6-182.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64z"]};var LpA={prefix:"fas",iconName:"square-caret-down",icon:[448,512,["caret-square-down"],"f150","M384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9S110.5 192 120 192l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z"]},$q=LpA;var WE={prefix:"fas",iconName:"caret-right",icon:[256,512,[],"f0da","M249.3 235.8c10.2 12.6 9.5 31.1-2.2 42.8l-128 128c-9.2 9.2-22.9 11.9-34.9 6.9S64.5 396.9 64.5 384l0-256c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l128 128 2.2 2.4z"]};var GpA={prefix:"fas",iconName:"magnifying-glass",icon:[512,512,[128269,"search"],"f002","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"]},g3=GpA;var AV={prefix:"fas",iconName:"eye",icon:[576,512,[128065],"f06e","M288 32c-80.8 0-145.5 36.8-192.6 80.6-46.8 43.5-78.1 95.4-93 131.1-3.3 7.9-3.3 16.7 0 24.6 14.9 35.7 46.2 87.7 93 131.1 47.1 43.7 111.8 80.6 192.6 80.6s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1 3.3-7.9 3.3-16.7 0-24.6-14.9-35.7-46.2-87.7-93-131.1-47.1-43.7-111.8-80.6-192.6-80.6zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64-11.5 0-22.3-3-31.7-8.4-1 10.9-.1 22.1 2.9 33.2 13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-12.2-45.7-55.5-74.8-101.1-70.8 5.3 9.3 8.4 20.1 8.4 31.7z"]},eV={prefix:"fas",iconName:"caret-left",icon:[256,512,[],"f0d9","M7.7 235.8c-10.3 12.6-9.5 31.1 2.2 42.8l128 128c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-256c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-128 128-2.2 2.4z"]};var tV={prefix:"fas",iconName:"chevron-up",icon:[448,512,[],"f077","M201.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 173.3 54.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"]};var iV={prefix:"fas",iconName:"circle-notch",icon:[512,512,[],"f1ce","M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8-79.3 23.6-137.1 97.1-137.1 184.1 0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256 512 397.4 397.4 512 256 512S0 397.4 0 256c0-116 77.1-213.9 182.9-245.4 16.9-5 34.8 4.6 39.8 21.5z"]};var KpA={prefix:"fas",iconName:"ellipsis-vertical",icon:[128,512,["ellipsis-v"],"f142","M64 144a56 56 0 1 1 0-112 56 56 0 1 1 0 112zm0 224c30.9 0 56 25.1 56 56s-25.1 56-56 56-56-25.1-56-56 25.1-56 56-56zm56-112c0 30.9-25.1 56-56 56s-56-25.1-56-56 25.1-56 56-56 56 25.1 56 56z"]},LS=KpA;var UpA={prefix:"fas",iconName:"pen-to-square",icon:[512,512,["edit"],"f044","M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L368 46.1 465.9 144 490.3 119.6c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L432 177.9 334.1 80 172.4 241.7zM96 64C43 64 0 107 0 160L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 64z"]},nV=UpA;var GS={prefix:"fas",iconName:"clone",icon:[512,512,[],"f24d","M288 448l-224 0 0-224 48 0 0-64-48 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-48-64 0 0 48zm-64-96l224 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L224 0c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64z"]};var JpA={prefix:"fas",iconName:"square-check",icon:[448,512,[9745,9989,61510,"check-square"],"f14a","M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM342 145.7c-10.7-7.8-25.7-5.4-33.5 5.3L189.1 315.2 137 263.1c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72c5 5 11.9 7.5 18.8 7s13.4-4.1 17.5-9.8L347.3 179.2c7.8-10.7 5.4-25.7-5.3-33.5z"]},KS=JpA;var YpA={prefix:"fas",iconName:"square-caret-up",icon:[448,512,["caret-square-up"],"f151","M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 160c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9S337.5 320 328 320l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z"]},oV=YpA;var l3={prefix:"fas",iconName:"code",icon:[576,512,[],"f121","M360.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm64.6 136.1c-12.5 12.5-12.5 32.8 0 45.3l73.4 73.4-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0zm-274.7 0c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 150.6 182.6c12.5-12.5 12.5-32.8 0-45.3z"]};var US={prefix:"fas",iconName:"angle-right",icon:[256,512,[8250],"f105","M247.1 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L179.2 256 41.9 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"]};var TpA={prefix:"fas",iconName:"gear",icon:[512,512,[9881,"cog"],"f013","M195.1 9.5C198.1-5.3 211.2-16 226.4-16l59.8 0c15.2 0 28.3 10.7 31.3 25.5L332 79.5c14.1 6 27.3 13.7 39.3 22.8l67.8-22.5c14.4-4.8 30.2 1.2 37.8 14.4l29.9 51.8c7.6 13.2 4.9 29.8-6.5 39.9L447 233.3c.9 7.4 1.3 15 1.3 22.7s-.5 15.3-1.3 22.7l53.4 47.5c11.4 10.1 14 26.8 6.5 39.9l-29.9 51.8c-7.6 13.1-23.4 19.2-37.8 14.4l-67.8-22.5c-12.1 9.1-25.3 16.7-39.3 22.8l-14.4 69.9c-3.1 14.9-16.2 25.5-31.3 25.5l-59.8 0c-15.2 0-28.3-10.7-31.3-25.5l-14.4-69.9c-14.1-6-27.2-13.7-39.3-22.8L73.5 432.3c-14.4 4.8-30.2-1.2-37.8-14.4L5.8 366.1c-7.6-13.2-4.9-29.8 6.5-39.9l53.4-47.5c-.9-7.4-1.3-15-1.3-22.7s.5-15.3 1.3-22.7L12.3 185.8c-11.4-10.1-14-26.8-6.5-39.9L35.7 94.1c7.6-13.2 23.4-19.2 37.8-14.4l67.8 22.5c12.1-9.1 25.3-16.7 39.3-22.8L195.1 9.5zM256.3 336a80 80 0 1 0 -.6-160 80 80 0 1 0 .6 160z"]},aV=TpA;var rV={prefix:"fas",iconName:"up-right-and-down-left-from-center",icon:[512,512,["expand-alt"],"f424","M344 0L488 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512L24 512c-13.3 0-24-10.7-24-24L0 344c0-9.7 5.8-18.5 14.8-22.2S34.1 320.2 41 327l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S177.7 512 168 512z"]};var SC={prefix:"fas",iconName:"wrench",icon:[576,512,[128295],"f0ad","M509.4 98.6c7.6-7.6 20.3-5.7 24.1 4.3 6.8 17.7 10.5 37 10.5 57.1 0 88.4-71.6 160-160 160-17.5 0-34.4-2.8-50.2-8L146.9 498.9c-28.1 28.1-73.7 28.1-101.8 0s-28.1-73.7 0-101.8L232 210.2c-5.2-15.8-8-32.6-8-50.2 0-88.4 71.6-160 160-160 20.1 0 39.4 3.7 57.1 10.5 10 3.8 11.8 16.5 4.3 24.1l-88.7 88.7c-3 3-4.7 7.1-4.7 11.3l0 41.4c0 8.8 7.2 16 16 16l41.4 0c4.2 0 8.3-1.7 11.3-4.7l88.7-88.7z"]},Ww={prefix:"fas",iconName:"trash-can",icon:[448,512,[61460,"trash-alt"],"f2ed","M136.7 5.9C141.1-7.2 153.3-16 167.1-16l113.9 0c13.8 0 26 8.8 30.4 21.9L320 32 416 32c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 8.7-26.1zM32 144l384 0 0 304c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-304zm88 64c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24z"]};var Zw={prefix:"fas",iconName:"check",icon:[448,512,[10003,10004],"f00c","M434.8 70.1c14.3 10.4 17.5 30.4 7.1 44.7l-256 352c-5.5 7.6-14 12.3-23.4 13.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l101.5 101.5 234-321.7c10.4-14.3 30.4-17.5 44.7-7.1z"]};var sV={prefix:"fas",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"]},gV=sV;var c3=sV;var nd={prefix:"fas",iconName:"pen",icon:[512,512,[128394],"f304","M352.9 21.2L308 66.1 445.9 204 490.8 159.1C504.4 145.6 512 127.2 512 108s-7.6-37.6-21.2-51.1L455.1 21.2C441.6 7.6 423.2 0 404 0s-37.6 7.6-51.1 21.2zM274.1 100L58.9 315.1c-10.7 10.7-18.5 24.1-22.6 38.7L.9 481.6c-2.3 8.3 0 17.3 6.2 23.4s15.1 8.5 23.4 6.2l127.8-35.5c14.6-4.1 27.9-11.8 38.7-22.6L412 237.9 274.1 100z"]};var lV={prefix:"fas",iconName:"chevron-down",icon:[448,512,[],"f078","M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"]};var cV={prefix:"fas",iconName:"angle-down",icon:[384,512,[8964],"f107","M169.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 306.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"]};var HpA={prefix:"fas",iconName:"arrow-down-short-wide",icon:[576,512,["sort-amount-desc","sort-amount-down-alt"],"f884","M246.6 374.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L96 370.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 306.7 41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM320 32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z"]};var C3=HpA;var zpA={prefix:"fas",iconName:"triangle-exclamation",icon:[512,512,[9888,"exclamation-triangle","warning"],"f071","M256 0c14.7 0 28.2 8.1 35.2 21l216 400c6.7 12.4 6.4 27.4-.8 39.5S486.1 480 472 480L40 480c-14.1 0-27.2-7.4-34.4-19.5s-7.5-27.1-.8-39.5l216-400c7-12.9 20.5-21 35.2-21zm0 352a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.5 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z"]},BI=zpA;var OpA={prefix:"fas",iconName:"scissors",icon:[512,512,[9984,9986,9988,"cut"],"f0c4","M192 256l-39.5 39.5c-12.6-4.9-26.2-7.5-40.5-7.5-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112c0-14.3-2.7-27.9-7.5-40.5L499.2 76.8c7.1-7.1 7.1-18.5 0-25.6-28.3-28.3-74.1-28.3-102.4 0L256 192 216.5 152.5c4.9-12.6 7.5-26.2 7.5-40.5 0-61.9-50.1-112-112-112S0 50.1 0 112 50.1 224 112 224c14.3 0 27.9-2.7 40.5-7.5L192 256zm97.9 97.9L396.8 460.8c28.3 28.3 74.1 28.3 102.4 0 7.1-7.1 7.1-18.5 0-25.6l-145.3-145.3-64 64zM64 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm48 240a48 48 0 1 1 0 96 48 48 0 1 1 0-96z"]},od=OpA;var I3={prefix:"fas",iconName:"arrow-right-arrow-left",icon:[512,512,[8644,"exchange"],"f0ec","M502.6 150.6l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L402.7 160 32 160c-17.7 0-32-14.3-32-32S14.3 96 32 96l370.7 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3zm-397.3 352l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L109.3 352 480 352c17.7 0 32 14.3 32 32s-14.3 32-32 32l-370.7 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0z"]};var JS={prefix:"fas",iconName:"caret-up",icon:[320,512,[],"f0d8","M140.3 135.2c12.6-10.3 31.1-9.5 42.8 2.2l128 128c9.2 9.2 11.9 22.9 6.9 34.9S301.4 320 288.5 320l-256 0c-12.9 0-24.6-7.8-29.6-19.8S.7 274.5 9.9 265.4l128-128 2.4-2.2z"]};var CV={prefix:"fas",iconName:"down-left-and-up-right-to-center",icon:[512,512,["compress-alt"],"f422","M439.5 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S450.2 240 440.5 240l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87zM72.5 272l144 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S62.8 272 72.5 272z"]};var ad={prefix:"fas",iconName:"plus",icon:[448,512,[10133,61543,"add"],"2b","M256 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 160-160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-160z"]};var xC={prefix:"fas",iconName:"copy",icon:[448,512,[],"f0c5","M192 0c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-200.6c0-17.4-7.1-34.1-19.7-46.2L370.6 17.8C358.7 6.4 342.8 0 326.3 0L192 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-16-64 0 0 16-192 0 0-256 16 0 0-64-16 0z"]};var PpA={prefix:"fas",iconName:"arrow-rotate-right",icon:[512,512,[8635,"arrow-right-rotate","arrow-rotate-forward","redo"],"f01e","M436.7 74.7L448 85.4 448 32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l47.9 0-7.6-7.2c-.2-.2-.4-.4-.6-.6-75-75-196.5-75-271.5 0s-75 196.5 0 271.5 196.5 75 271.5 0c8.2-8.2 15.5-16.9 21.9-26.1 10.1-14.5 30.1-18 44.6-7.9s18 30.1 7.9 44.6c-8.5 12.2-18.2 23.8-29.1 34.7-100 100-262.1 100-362 0S-25 175 75 75c99.9-99.9 261.7-100 361.7-.3z"]};var Xw=PpA;var M0={prefix:"fas",iconName:"caret-down",icon:[320,512,[],"f0d7","M140.3 376.8c12.6 10.2 31.1 9.5 42.8-2.2l128-128c9.2-9.2 11.9-22.9 6.9-34.9S301.4 192 288.5 192l-256 0c-12.9 0-24.6 7.8-29.6 19.8S.7 237.5 9.9 246.6l128 128 2.4 2.2z"]};var jpA={prefix:"fas",iconName:"arrow-rotate-left",icon:[512,512,[8634,"arrow-left-rotate","arrow-rotate-back","arrow-rotate-backward","undo"],"f0e2","M256 64c-56.8 0-107.9 24.7-143.1 64l47.1 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 192c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0S64 14.3 64 32l0 54.7C110.9 33.6 179.5 0 256 0 397.4 0 512 114.6 512 256S397.4 512 256 512c-87 0-163.9-43.4-210.1-109.7-10.1-14.5-6.6-34.4 7.9-44.6s34.4-6.6 44.6 7.9c34.8 49.8 92.4 82.3 157.6 82.3 106 0 192-86 192-192S362 64 256 64z"]};var $w=jpA;var YS={prefix:"fas",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32z"]};var TS={prefix:"fas",iconName:"arrow-down",icon:[384,512,[8595],"f063","M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7-105.4-105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"]};var inA=su(BV(),1);var EV=Number.isNaN||function(e){return typeof e=="number"&&e!==e};function qpA(t,e){return!!(t===e||EV(t)&&EV(e))}function VpA(t,e){if(t.length!==e.length)return!1;for(var A=0;A{if(typeof n!="object"||!n.name||!n.init)throw new Error("Invalid JSEP plugin format");this.registered[n.name]||(n.init(this.jsep),this.registered[n.name]=n)})}},Qg=class t{static get version(){return"1.4.0"}static toString(){return"JavaScript Expression Parser (JSEP) v"+t.version}static addUnaryOp(e){return t.max_unop_len=Math.max(e.length,t.max_unop_len),t.unary_ops[e]=1,t}static addBinaryOp(e,A,i){return t.max_binop_len=Math.max(e.length,t.max_binop_len),t.binary_ops[e]=A,i?t.right_associative.add(e):t.right_associative.delete(e),t}static addIdentifierChar(e){return t.additional_identifier_chars.add(e),t}static addLiteral(e,A){return t.literals[e]=A,t}static removeUnaryOp(e){return delete t.unary_ops[e],e.length===t.max_unop_len&&(t.max_unop_len=t.getMaxKeyLen(t.unary_ops)),t}static removeAllUnaryOps(){return t.unary_ops={},t.max_unop_len=0,t}static removeIdentifierChar(e){return t.additional_identifier_chars.delete(e),t}static removeBinaryOp(e){return delete t.binary_ops[e],e.length===t.max_binop_len&&(t.max_binop_len=t.getMaxKeyLen(t.binary_ops)),t.right_associative.delete(e),t}static removeAllBinaryOps(){return t.binary_ops={},t.max_binop_len=0,t}static removeLiteral(e){return delete t.literals[e],t}static removeAllLiterals(){return t.literals={},t}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(e){this.expr=e,this.index=0}static parse(e){return new t(e).parse()}static getMaxKeyLen(e){return Math.max(0,...Object.keys(e).map(A=>A.length))}static isDecimalDigit(e){return e>=48&&e<=57}static binaryPrecedence(e){return t.binary_ops[e]||0}static isIdentifierStart(e){return e>=65&&e<=90||e>=97&&e<=122||e>=128&&!t.binary_ops[String.fromCharCode(e)]||t.additional_identifier_chars.has(String.fromCharCode(e))}static isIdentifierPart(e){return t.isIdentifierStart(e)||t.isDecimalDigit(e)}throwError(e){let A=new Error(e+" at character "+this.index);throw A.index=this.index,A.description=e,A}runHook(e,A){if(t.hooks[e]){let i={context:this,node:A};return t.hooks.run(e,i),i.node}return A}searchHook(e){if(t.hooks[e]){let A={context:this};return t.hooks[e].find(function(i){return i.call(A.context,A),A.node}),A.node}}gobbleSpaces(){let e=this.code;for(;e===t.SPACE_CODE||e===t.TAB_CODE||e===t.LF_CODE||e===t.CR_CODE;)e=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let e=this.gobbleExpressions(),A=e.length===1?e[0]:{type:t.COMPOUND,body:e};return this.runHook("after-all",A)}gobbleExpressions(e){let A=[],i,n;for(;this.index0;){if(t.binary_ops.hasOwnProperty(e)&&(!t.isIdentifierStart(this.code)||this.index+e.lengtho.right_a&&C.right_a?i>C.prec:i<=C.prec;for(;n.length>2&&l(n[n.length-2]);)r=n.pop(),A=n.pop().value,a=n.pop(),e={type:t.BINARY_EXP,operator:A,left:a,right:r},n.push(e);e=this.gobbleToken(),e||this.throwError("Expected expression after "+g),n.push(o,e)}for(s=n.length-1,e=n[s];s>1;)e={type:t.BINARY_EXP,operator:n[s-1].value,left:n[s-2],right:e},s-=2;return e}gobbleToken(){let e,A,i,n;if(this.gobbleSpaces(),n=this.searchHook("gobble-token"),n)return this.runHook("after-token",n);if(e=this.code,t.isDecimalDigit(e)||e===t.PERIOD_CODE)return this.gobbleNumericLiteral();if(e===t.SQUOTE_CODE||e===t.DQUOTE_CODE)n=this.gobbleStringLiteral();else if(e===t.OBRACK_CODE)n=this.gobbleArray();else{for(A=this.expr.substr(this.index,t.max_unop_len),i=A.length;i>0;){if(t.unary_ops.hasOwnProperty(A)&&(!t.isIdentifierStart(this.code)||this.index+A.length=A.length&&this.throwError("Unexpected token "+String.fromCharCode(e));break}else if(o===t.COMMA_CODE){if(this.index++,n++,n!==A.length){if(e===t.CPAREN_CODE)this.throwError("Unexpected token ,");else if(e===t.CBRACK_CODE)for(let a=A.length;a":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10,"**":11},right_associative:new Set(["**"]),additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"});Qg.max_unop_len=Qg.getMaxKeyLen(Qg.unary_ops);Qg.max_binop_len=Qg.getMaxKeyLen(Qg.binary_ops);var GC=t=>new Qg(t).parse(),pyA=Object.getOwnPropertyNames(class{});Object.getOwnPropertyNames(Qg).filter(t=>!pyA.includes(t)&&GC[t]===void 0).forEach(t=>{GC[t]=Qg[t]});GC.Jsep=Qg;var wyA="ConditionalExpression",DyA={name:"ternary",init(t){t.hooks.add("after-expression",function(A){if(A.node&&this.code===t.QUMARK_CODE){this.index++;let i=A.node,n=this.gobbleExpression();if(n||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===t.COLON_CODE){this.index++;let o=this.gobbleExpression();if(o||this.throwError("Expected expression"),A.node={type:wyA,test:i,consequent:n,alternate:o},i.operator&&t.binary_ops[i.operator]<=.9){let a=i;for(;a.right.operator&&t.binary_ops[a.right.operator]<=.9;)a=a.right;A.node.test=a.right,a.right=A.node,A.node=i}}else this.throwError("Expected :")}})}};GC.plugins.register(DyA);var VZ=47,yyA=92,vyA={name:"regex",init(t){t.hooks.add("gobble-token",function(A){if(this.code===VZ){let i=++this.index,n=!1;for(;this.index=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57)a+=this.char;else break}let r;try{r=new RegExp(o,a)}catch(s){this.throwError(s.message)}return A.node={type:t.LITERAL,value:r,raw:this.expr.slice(i-1,this.index)},A.node=this.gobbleTokenProperty(A.node),A.node}this.code===t.OBRACK_CODE?n=!0:n&&this.code===t.CBRACK_CODE&&(n=!1),this.index+=this.code===yyA?2:1}this.throwError("Unclosed Regex")}})}},MR=43,byA=45,cQ={name:"assignment",assignmentOperators:new Set(["=","*=","**=","/=","%=","+=","-=","<<=",">>=",">>>=","&=","^=","|=","||=","&&=","??="]),updateOperators:[MR,byA],assignmentPrecedence:.9,init(t){let e=[t.IDENTIFIER,t.MEMBER_EXP];cQ.assignmentOperators.forEach(i=>t.addBinaryOp(i,cQ.assignmentPrecedence,!0)),t.hooks.add("gobble-token",function(n){let o=this.code;cQ.updateOperators.some(a=>a===o&&a===this.expr.charCodeAt(this.index+1))&&(this.index+=2,n.node={type:"UpdateExpression",operator:o===MR?"++":"--",argument:this.gobbleTokenProperty(this.gobbleIdentifier()),prefix:!0},(!n.node.argument||!e.includes(n.node.argument.type))&&this.throwError(`Unexpected ${n.node.operator}`))}),t.hooks.add("after-token",function(n){if(n.node){let o=this.code;cQ.updateOperators.some(a=>a===o&&a===this.expr.charCodeAt(this.index+1))&&(e.includes(n.node.type)||this.throwError(`Unexpected ${n.node.operator}`),this.index+=2,n.node={type:"UpdateExpression",operator:o===MR?"++":"--",argument:n.node,prefix:!1})}}),t.hooks.add("after-expression",function(n){n.node&&A(n.node)});function A(i){cQ.assignmentOperators.has(i.operator)?(i.type="AssignmentExpression",A(i.left),A(i.right)):i.operator||Object.values(i).forEach(n=>{n&&typeof n=="object"&&A(n)})}}};GC.plugins.register(vyA,cQ);GC.addUnaryOp("typeof");GC.addLiteral("null",null);GC.addLiteral("undefined",void 0);var MyA=new Set(["constructor","__proto__","__defineGetter__","__defineSetter__"]),_o={evalAst(t,e){switch(t.type){case"BinaryExpression":case"LogicalExpression":return _o.evalBinaryExpression(t,e);case"Compound":return _o.evalCompound(t,e);case"ConditionalExpression":return _o.evalConditionalExpression(t,e);case"Identifier":return _o.evalIdentifier(t,e);case"Literal":return _o.evalLiteral(t,e);case"MemberExpression":return _o.evalMemberExpression(t,e);case"UnaryExpression":return _o.evalUnaryExpression(t,e);case"ArrayExpression":return _o.evalArrayExpression(t,e);case"CallExpression":return _o.evalCallExpression(t,e);case"AssignmentExpression":return _o.evalAssignmentExpression(t,e);default:throw SyntaxError("Unexpected expression",t)}},evalBinaryExpression(t,e){return{"||":(i,n)=>i||n(),"&&":(i,n)=>i&&n(),"|":(i,n)=>i|n(),"^":(i,n)=>i^n(),"&":(i,n)=>i&n(),"==":(i,n)=>i==n(),"!=":(i,n)=>i!=n(),"===":(i,n)=>i===n(),"!==":(i,n)=>i!==n(),"<":(i,n)=>i":(i,n)=>i>n(),"<=":(i,n)=>i<=n(),">=":(i,n)=>i>=n(),"<<":(i,n)=>i<>":(i,n)=>i>>n(),">>>":(i,n)=>i>>>n(),"+":(i,n)=>i+n(),"-":(i,n)=>i-n(),"*":(i,n)=>i*n(),"/":(i,n)=>i/n(),"%":(i,n)=>i%n()}[t.operator](_o.evalAst(t.left,e),()=>_o.evalAst(t.right,e))},evalCompound(t,e){let A;for(let i=0;i-_o.evalAst(i,e),"!":i=>!_o.evalAst(i,e),"~":i=>~_o.evalAst(i,e),"+":i=>+_o.evalAst(i,e),typeof:i=>typeof _o.evalAst(i,e)}[t.operator](t.argument)},evalArrayExpression(t,e){return t.elements.map(A=>_o.evalAst(A,e))},evalCallExpression(t,e){let A=t.arguments.map(n=>_o.evalAst(n,e));return _o.evalAst(t.callee,e)(...A)},evalAssignmentExpression(t,e){if(t.left.type!=="Identifier")throw SyntaxError("Invalid left-hand side in assignment");let A=t.left.name,i=_o.evalAst(t.right,e);return e[A]=i,e[A]}},xR=class{constructor(e){this.code=e,this.ast=GC(this.code)}runInNewContext(e){let A=Object.assign(Object.create(null),e);return _o.evalAst(this.ast,A)}};function wI(t,e){return t=t.slice(),t.push(e),t}function RR(t,e){return e=e.slice(),e.unshift(t),e}var NR=class extends Error{constructor(e){super('JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)'),this.avoidNew=!0,this.value=e,this.name="NewError"}};function eo(t,e,A,i,n){if(!(this instanceof eo))try{return new eo(t,e,A,i,n)}catch(a){if(!a.avoidNew)throw a;return a.value}typeof t=="string"&&(n=i,i=A,A=e,e=t,t=null);let o=t&&typeof t=="object";if(t=t||{},this.json=t.json||A,this.path=t.path||e,this.resultType=t.resultType||"value",this.flatten=t.flatten||!1,this.wrap=Object.hasOwn(t,"wrap")?t.wrap:!0,this.sandbox=t.sandbox||{},this.eval=t.eval===void 0?"safe":t.eval,this.ignoreEvalErrors=typeof t.ignoreEvalErrors>"u"?!1:t.ignoreEvalErrors,this.parent=t.parent||null,this.parentProperty=t.parentProperty||null,this.callback=t.callback||i||null,this.otherTypeCallback=t.otherTypeCallback||n||function(){throw new TypeError("You must supply an otherTypeCallback callback option with the @other() operator.")},t.autostart!==!1){let a={path:o?t.path:e};o?"json"in t&&(a.json=t.json):a.json=A;let r=this.evaluate(a);if(!r||typeof r!="object")throw new NR(r);return r}}eo.prototype.evaluate=function(t,e,A,i){let n=this.parent,o=this.parentProperty,{flatten:a,wrap:r}=this;if(this.currResultType=this.resultType,this.currEval=this.eval,this.currSandbox=this.sandbox,A=A||this.callback,this.currOtherTypeCallback=i||this.otherTypeCallback,e=e||this.json,t=t||this.path,t&&typeof t=="object"&&!Array.isArray(t)){if(!t.path&&t.path!=="")throw new TypeError('You must supply a "path" property when providing an object argument to JSONPath.evaluate().');if(!Object.hasOwn(t,"json"))throw new TypeError('You must supply a "json" property when providing an object argument to JSONPath.evaluate().');({json:e}=t),a=Object.hasOwn(t,"flatten")?t.flatten:a,this.currResultType=Object.hasOwn(t,"resultType")?t.resultType:this.currResultType,this.currSandbox=Object.hasOwn(t,"sandbox")?t.sandbox:this.currSandbox,r=Object.hasOwn(t,"wrap")?t.wrap:r,this.currEval=Object.hasOwn(t,"eval")?t.eval:this.currEval,A=Object.hasOwn(t,"callback")?t.callback:A,this.currOtherTypeCallback=Object.hasOwn(t,"otherTypeCallback")?t.otherTypeCallback:this.currOtherTypeCallback,n=Object.hasOwn(t,"parent")?t.parent:n,o=Object.hasOwn(t,"parentProperty")?t.parentProperty:o,t=t.path}if(n=n||null,o=o||null,Array.isArray(t)&&(t=eo.toPathString(t)),!t&&t!==""||!e)return;let s=eo.toPathArray(t);s[0]==="$"&&s.length>1&&s.shift(),this._hasParentSelector=null;let g=this._trace(s,e,["$"],n,o,A).filter(function(l){return l&&!l.isParentSelector});return g.length?!r&&g.length===1&&!g[0].hasArrExpr?this._getPreferredOutput(g[0]):g.reduce((l,C)=>{let I=this._getPreferredOutput(C);return a&&Array.isArray(I)?l=l.concat(I):l.push(I),l},[]):r?[]:void 0};eo.prototype._getPreferredOutput=function(t){let e=this.currResultType;switch(e){case"all":{let A=Array.isArray(t.path)?t.path:eo.toPathArray(t.path);return t.pointer=eo.toPointer(A),t.path=typeof t.path=="string"?t.path:eo.toPathString(t.path),t}case"value":case"parent":case"parentProperty":return t[e];case"path":return eo.toPathString(t[e]);case"pointer":return eo.toPointer(t.path);default:throw new TypeError("Unknown result type")}};eo.prototype._handleCallback=function(t,e,A){if(e){let i=this._getPreferredOutput(t);t.path=typeof t.path=="string"?t.path:eo.toPathString(t.path),e(i,A,t)}};eo.prototype._trace=function(t,e,A,i,n,o,a,r){let s;if(!t.length)return s={path:A,value:e,parent:i,parentProperty:n,hasArrExpr:a},this._handleCallback(s,o,"value"),s;let g=t[0],l=t.slice(1),C=[];function I(d){Array.isArray(d)?d.forEach(B=>{C.push(B)}):C.push(d)}if((typeof g!="string"||r)&&e&&Object.hasOwn(e,g))I(this._trace(l,e[g],wI(A,g),e,g,o,a));else if(g==="*")this._walk(e,d=>{I(this._trace(l,e[d],wI(A,d),e,d,o,!0,!0))});else if(g==="..")I(this._trace(l,e,A,i,n,o,a)),this._walk(e,d=>{typeof e[d]=="object"&&I(this._trace(t.slice(),e[d],wI(A,d),e,d,o,!0))});else{if(g==="^")return this._hasParentSelector=!0,{path:A.slice(0,-1),expr:l,isParentSelector:!0};if(g==="~")return s={path:wI(A,g),value:n,parent:i,parentProperty:null},this._handleCallback(s,o,"property"),s;if(g==="$")I(this._trace(l,e,A,null,null,o,a));else if(/^(-?\d*):(-?\d*):?(\d*)$/u.test(g))I(this._slice(g,l,e,A,i,n,o));else if(g.indexOf("?(")===0){if(this.currEval===!1)throw new Error("Eval [?(expr)] prevented in JSONPath expression.");let d=g.replace(/^\?\((.*?)\)$/u,"$1"),B=/@.?([^?]*)[['](\??\(.*?\))(?!.\)\])[\]']/gu.exec(d);B?this._walk(e,E=>{let Q=[B[2]],f=B[1]?e[E][B[1]]:e[E];this._trace(Q,f,A,i,n,o,!0).length>0&&I(this._trace(l,e[E],wI(A,E),e,E,o,!0))}):this._walk(e,E=>{this._eval(d,e[E],E,A,i,n)&&I(this._trace(l,e[E],wI(A,E),e,E,o,!0))})}else if(g[0]==="("){if(this.currEval===!1)throw new Error("Eval [(expr)] prevented in JSONPath expression.");I(this._trace(RR(this._eval(g,e,A.at(-1),A.slice(0,-1),i,n),l),e,A,i,n,o,a))}else if(g[0]==="@"){let d=!1,B=g.slice(1,-2);switch(B){case"scalar":(!e||!["object","function"].includes(typeof e))&&(d=!0);break;case"boolean":case"string":case"undefined":case"function":typeof e===B&&(d=!0);break;case"integer":Number.isFinite(e)&&!(e%1)&&(d=!0);break;case"number":Number.isFinite(e)&&(d=!0);break;case"nonFinite":typeof e=="number"&&!Number.isFinite(e)&&(d=!0);break;case"object":e&&typeof e===B&&(d=!0);break;case"array":Array.isArray(e)&&(d=!0);break;case"other":d=this.currOtherTypeCallback(e,A,i,n);break;case"null":e===null&&(d=!0);break;default:throw new TypeError("Unknown value type "+B)}if(d)return s={path:A,value:e,parent:i,parentProperty:n},this._handleCallback(s,o,"value"),s}else if(g[0]==="`"&&e&&Object.hasOwn(e,g.slice(1))){let d=g.slice(1);I(this._trace(l,e[d],wI(A,d),e,d,o,a,!0))}else if(g.includes(",")){let d=g.split(",");for(let B of d)I(this._trace(RR(B,l),e,A,i,n,o,!0))}else!r&&e&&Object.hasOwn(e,g)&&I(this._trace(l,e[g],wI(A,g),e,g,o,a,!0))}if(this._hasParentSelector)for(let d=0;d{e(A)})};eo.prototype._slice=function(t,e,A,i,n,o,a){if(!Array.isArray(A))return;let r=A.length,s=t.split(":"),g=s[2]&&Number.parseInt(s[2])||1,l=s[0]&&Number.parseInt(s[0])||0,C=s[1]&&Number.parseInt(s[1])||r;l=l<0?Math.max(0,l+r):Math.min(r,l),C=C<0?Math.max(0,C+r):Math.min(r,C);let I=[];for(let d=l;d{I.push(E)});return I};eo.prototype._eval=function(t,e,A,i,n,o){this.currSandbox._$_parentProperty=o,this.currSandbox._$_parent=n,this.currSandbox._$_property=A,this.currSandbox._$_root=this.json,this.currSandbox._$_v=e;let a=t.includes("@path");a&&(this.currSandbox._$_path=eo.toPathString(i.concat([A])));let r=this.currEval+"Script:"+t;if(!eo.cache[r]){let s=t.replaceAll("@parentProperty","_$_parentProperty").replaceAll("@parent","_$_parent").replaceAll("@property","_$_property").replaceAll("@root","_$_root").replaceAll(/@([.\s)[])/gu,"_$_v$1");if(a&&(s=s.replaceAll("@path","_$_path")),this.currEval==="safe"||this.currEval===!0||this.currEval===void 0)eo.cache[r]=new this.safeVm.Script(s);else if(this.currEval==="native")eo.cache[r]=new this.vm.Script(s);else if(typeof this.currEval=="function"&&this.currEval.prototype&&Object.hasOwn(this.currEval.prototype,"runInNewContext")){let g=this.currEval;eo.cache[r]=new g(s)}else if(typeof this.currEval=="function")eo.cache[r]={runInNewContext:g=>this.currEval(s,g)};else throw new TypeError(`Unknown "eval" property "${this.currEval}"`)}try{return eo.cache[r].runInNewContext(this.currSandbox)}catch(s){if(this.ignoreEvalErrors)return!1;throw new Error("jsonPath: "+s.message+": "+t)}};eo.cache={};eo.toPathString=function(t){let e=t,A=e.length,i="$";for(let n=1;ntypeof e[g]=="function");let o=i.map(g=>e[g]);A=n.reduce((g,l)=>{let C=e[l].toString();return/function/u.test(C)||(C="function "+C),"var "+l+"="+C+";"+g},"")+A,!/(['"])use strict\1/u.test(A)&&!i.includes("arguments")&&(A="var arguments = undefined;"+A),A=A.replace(/;\s*$/u,"");let r=A.lastIndexOf(";"),s=r!==-1?A.slice(0,r+1)+" return "+A.slice(r+1):" return "+A;return new Function(...i,s)(...o)}};eo.prototype.vm={Script:FR};var LR=[],$Z=[];(()=>{let t="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,A=0;e>1;if(t=$Z[i])e=i+1;else return!0;if(e==A)return!1}}function WZ(t){return t>=127462&&t<=127487}var ZZ=8205;function AX(t,e,A=!0,i=!0){return(A?eX:xyA)(t,e,i)}function eX(t,e,A){if(e==t.length)return e;e&&tX(t.charCodeAt(e))&&iX(t.charCodeAt(e-1))&&e--;let i=_R(t,e);for(e+=XZ(i);e=0&&WZ(_R(t,a));)o++,a-=2;if(o%2==0)break;e+=2}else break}return e}function xyA(t,e,A){for(;e>0;){let i=eX(t,e-2,A);if(i=56320&&t<57344}function iX(t){return t>=55296&&t<56320}function XZ(t){return t<65536?1:2}var bn=class t{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,A,i){[e,A]=EQ(this,e,A);let n=[];return this.decompose(0,e,n,2),i.length&&i.decompose(0,i.length,n,3),this.decompose(A,this.length,n,1),IQ.from(n,this.length-(A-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,A=this.length){[e,A]=EQ(this,e,A);let i=[];return this.decompose(e,A,i,0),IQ.from(i,A-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let A=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),n=new Qd(this),o=new Qd(e);for(let a=A,r=A;;){if(n.next(a),o.next(a),a=0,n.lineBreak!=o.lineBreak||n.done!=o.done||n.value!=o.value)return!1;if(r+=n.value.length,n.done||r>=i)return!0}}iter(e=1){return new Qd(this,e)}iterRange(e,A=this.length){return new T5(this,e,A)}iterLines(e,A){let i;if(e==null)i=this.iter();else{A==null&&(A=this.lines+1);let n=this.line(e).from;i=this.iterRange(n,Math.max(n,A==this.lines+1?this.length:A<=1?0:this.line(A-1).to))}return new H5(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?t.empty:e.length<=32?new zg(e):IQ.from(zg.split(e,[]))}},zg=class t extends bn{constructor(e,A=RyA(e)){super(),this.text=e,this.length=A}get lines(){return this.text.length}get children(){return null}lineInner(e,A,i,n){for(let o=0;;o++){let a=this.text[o],r=n+a.length;if((A?i:r)>=e)return new UR(n,r,i,a);n=r+1,i++}}decompose(e,A,i,n){let o=e<=0&&A>=this.length?this:new t(nX(this.text,e,A),Math.min(A,this.length)-Math.max(0,e));if(n&1){let a=i.pop(),r=Y5(o.text,a.text.slice(),0,o.length);if(r.length<=32)i.push(new t(r,a.length+o.length));else{let s=r.length>>1;i.push(new t(r.slice(0,s)),new t(r.slice(s)))}}else i.push(o)}replace(e,A,i){if(!(i instanceof t))return super.replace(e,A,i);[e,A]=EQ(this,e,A);let n=Y5(this.text,Y5(i.text,nX(this.text,0,e)),A),o=this.length+i.length-(A-e);return n.length<=32?new t(n,o):IQ.from(t.split(n,[]),o)}sliceString(e,A=this.length,i=` -`){[e,A]=EQ(this,e,A);let n="";for(let o=0,a=0;o<=A&&ae&&a&&(n+=i),eo&&(n+=r.slice(Math.max(0,e-o),A-o)),o=s+1}return n}flatten(e){for(let A of this.text)e.push(A)}scanIdentical(){return 0}static split(e,A){let i=[],n=-1;for(let o of e)i.push(o),n+=o.length+1,i.length==32&&(A.push(new t(i,n)),i=[],n=-1);return n>-1&&A.push(new t(i,n)),A}},IQ=class t extends bn{constructor(e,A){super(),this.children=e,this.length=A,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,A,i,n){for(let o=0;;o++){let a=this.children[o],r=n+a.length,s=i+a.lines-1;if((A?s:r)>=e)return a.lineInner(e,A,i,n);n=r+1,i=s+1}}decompose(e,A,i,n){for(let o=0,a=0;a<=A&&o=a){let g=n&((a<=e?1:0)|(s>=A?2:0));a>=e&&s<=A&&!g?i.push(r):r.decompose(e-a,A-a,i,g)}a=s+1}}replace(e,A,i){if([e,A]=EQ(this,e,A),i.lines=o&&A<=r){let s=a.replace(e-o,A-o,i),g=this.lines-a.lines+s.lines;if(s.lines>4&&s.lines>g>>6){let l=this.children.slice();return l[n]=s,new t(l,this.length-(A-e)+i.length)}return super.replace(o,r,s)}o=r+1}return super.replace(e,A,i)}sliceString(e,A=this.length,i=` -`){[e,A]=EQ(this,e,A);let n="";for(let o=0,a=0;oe&&o&&(n+=i),ea&&(n+=r.sliceString(e-a,A-a,i)),a=s+1}return n}flatten(e){for(let A of this.children)A.flatten(e)}scanIdentical(e,A){if(!(e instanceof t))return 0;let i=0,[n,o,a,r]=A>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;n+=A,o+=A){if(n==a||o==r)return i;let s=this.children[n],g=e.children[o];if(s!=g)return i+s.scanIdentical(g,A);i+=s.length+1}}static from(e,A=e.reduce((i,n)=>i+n.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let B of e)B.flatten(d);return new zg(d,A)}let n=Math.max(32,i>>5),o=n<<1,a=n>>1,r=[],s=0,g=-1,l=[];function C(d){let B;if(d.lines>o&&d instanceof t)for(let E of d.children)C(E);else d.lines>a&&(s>a||!s)?(I(),r.push(d)):d instanceof zg&&s&&(B=l[l.length-1])instanceof zg&&d.lines+B.lines<=32?(s+=d.lines,g+=d.length+1,l[l.length-1]=new zg(B.text.concat(d.text),B.length+1+d.length)):(s+d.lines>n&&I(),s+=d.lines,g+=d.length+1,l.push(d))}function I(){s!=0&&(r.push(l.length==1?l[0]:t.from(l,g)),g=-1,s=l.length=0)}for(let d of e)C(d);return I(),r.length==1?r[0]:new t(r,A)}};bn.empty=new zg([""],0);function RyA(t){let e=-1;for(let A of t)e+=A.length+1;return e}function Y5(t,e,A=0,i=1e9){for(let n=0,o=0,a=!0;o=A&&(s>i&&(r=r.slice(0,i-n)),n0?1:(e instanceof zg?e.text.length:e.children.length)<<1]}nextInner(e,A){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,n=this.nodes[i],o=this.offsets[i],a=o>>1,r=n instanceof zg?n.text.length:n.children.length;if(a==(A>0?r:0)){if(i==0)return this.done=!0,this.value="",this;A>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((o&1)==(A>0?0:1)){if(this.offsets[i]+=A,e==0)return this.lineBreak=!0,this.value=` -`,this;e--}else if(n instanceof zg){let s=n.text[a+(A<0?-1:0)];if(this.offsets[i]+=A,s.length>Math.max(0,e))return this.value=e==0?s:A>0?s.slice(e):s.slice(0,s.length-e),this;e-=s.length}else{let s=n.children[a+(A<0?-1:0)];e>s.length?(e-=s.length,this.offsets[i]+=A):(A<0&&this.offsets[i]--,this.nodes.push(s),this.offsets.push(A>0?1:(s instanceof zg?s.text.length:s.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},T5=class{constructor(e,A,i){this.value="",this.done=!1,this.cursor=new Qd(e,A>i?-1:1),this.pos=A>i?e.length:0,this.from=Math.min(A,i),this.to=Math.max(A,i)}nextInner(e,A){if(A<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,A<0?this.pos-this.to:this.from-this.pos);let i=A<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:n}=this.cursor.next(e);return this.pos+=(n.length+e)*A,this.value=n.length<=i?n:A<0?n.slice(n.length-i):n.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},H5=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:A,lineBreak:i,value:n}=this.inner.next(e);return A&&this.afterBreak?(this.value="",this.afterBreak=!1):A?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=n,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(bn.prototype[Symbol.iterator]=function(){return this.iter()},Qd.prototype[Symbol.iterator]=T5.prototype[Symbol.iterator]=H5.prototype[Symbol.iterator]=function(){return this});var UR=class{constructor(e,A,i,n){this.from=e,this.to=A,this.number=i,this.text=n}get length(){return this.to-this.from}};function EQ(t,e,A){return e=Math.max(0,Math.min(t.length,e)),[e,Math.max(e,Math.min(t.length,A))]}function Ta(t,e,A=!0,i=!0){return AX(t,e,A,i)}function NyA(t){return t>=56320&&t<57344}function FyA(t){return t>=55296&&t<56320}function Zr(t,e){let A=t.charCodeAt(e);if(!FyA(A)||e+1==t.length)return A;let i=t.charCodeAt(e+1);return NyA(i)?(A-55296<<10)+(i-56320)+65536:A}function H3(t){return t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode((t>>10)+55296,(t&1023)+56320))}function Og(t){return t<65536?1:2}var JR=/\r\n?|\n/,qr=(function(t){return t[t.Simple=0]="Simple",t[t.TrackDel=1]="TrackDel",t[t.TrackBefore=2]="TrackBefore",t[t.TrackAfter=3]="TrackAfter",t})(qr||(qr={})),yI=class t{constructor(e){this.sections=e}get length(){let e=0;for(let A=0;Ae)return o+(e-n);o+=r}else{if(i!=qr.Simple&&g>=e&&(i==qr.TrackDel&&ne||i==qr.TrackBefore&&ne))return null;if(g>e||g==e&&A<0&&!r)return e==n||A<0?o:o+s;o+=s}n=g}if(e>n)throw new RangeError(`Position ${e} is out of range for changeset of length ${n}`);return o}touchesRange(e,A=e){for(let i=0,n=0;i=0&&n<=A&&r>=e)return nA?"cover":!0;n=r}return!1}toString(){let e="";for(let A=0;A=0?":"+n:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(A=>typeof A!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new t(e)}static create(e){return new t(e)}},Vr=class t extends yI{constructor(e,A){super(e),this.inserted=A}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return YR(this,(A,i,n,o,a)=>e=e.replace(n,n+(i-A),a),!1),e}mapDesc(e,A=!1){return TR(this,e,A,!0)}invert(e){let A=this.sections.slice(),i=[];for(let n=0,o=0;n=0){A[n]=r,A[n+1]=a;let s=n>>1;for(;i.length0&&DI(i,A,o.text),o.forward(l),r+=l}let g=e[a++];for(;r>1].toJSON()))}return e}static of(e,A,i){let n=[],o=[],a=0,r=null;function s(l=!1){if(!l&&!n.length)return;aI||C<0||I>A)throw new RangeError(`Invalid change range ${C} to ${I} (in doc of length ${A})`);let B=d?typeof d=="string"?bn.of(d.split(i||JR)):d:bn.empty,E=B.length;if(C==I&&E==0)return;Ca&&ms(n,C-a,-1),ms(n,I-C,E),DI(o,n,B),a=I}}return g(e),s(!r),r}static empty(e){return new t(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let A=[],i=[];for(let n=0;nr&&typeof a!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(o.length==1)A.push(o[0],0);else{for(;i.length=0&&A<=0&&A==t[n+1]?t[n]+=e:n>=0&&e==0&&t[n]==0?t[n+1]+=A:i?(t[n]+=e,t[n+1]+=A):t.push(e,A)}function DI(t,e,A){if(A.length==0)return;let i=e.length-2>>1;if(i>1])),!(A||a==t.sections.length||t.sections[a+1]<0);)r=t.sections[a++],s=t.sections[a++];e(n,g,o,l,C),n=g,o=l}}}function TR(t,e,A,i=!1){let n=[],o=i?[]:null,a=new hd(t),r=new hd(e);for(let s=-1;;){if(a.done&&r.len||r.done&&a.len)throw new Error("Mismatched change set lengths");if(a.ins==-1&&r.ins==-1){let g=Math.min(a.len,r.len);ms(n,g,-1),a.forward(g),r.forward(g)}else if(r.ins>=0&&(a.ins<0||s==a.i||a.off==0&&(r.len=0&&s=0){let g=0,l=a.len;for(;l;)if(r.ins==-1){let C=Math.min(l,r.len);g+=C,l-=C,r.forward(C)}else if(r.ins==0&&r.lens||a.ins>=0&&a.len>s)&&(r||i.length>g),o.forward2(s),a.forward(s)}}}}var hd=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return A>=e.length?bn.empty:e[A]}textBit(e){let{inserted:A}=this.set,i=this.i-2>>1;return i>=A.length&&!e?bn.empty:A[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},CQ=class t{constructor(e,A,i){this.from=e,this.to=A,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,A=-1){let i,n;return this.empty?i=n=e.mapPos(this.from,A):(i=e.mapPos(this.from,1),n=e.mapPos(this.to,-1)),i==this.from&&n==this.to?this:new t(i,n,this.flags)}extend(e,A=e){if(e<=this.anchor&&A>=this.anchor)return de.range(e,A);let i=Math.abs(e-this.anchor)>Math.abs(A-this.anchor)?e:A;return de.range(this.anchor,i)}eq(e,A=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!A||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return de.range(e.anchor,e.head)}static create(e,A,i){return new t(e,A,i)}},de=class t{constructor(e,A){this.ranges=e,this.mainIndex=A}map(e,A=-1){return e.empty?this:t.create(this.ranges.map(i=>i.map(e,A)),this.mainIndex)}eq(e,A=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new t(e.ranges.map(A=>CQ.fromJSON(A)),e.main)}static single(e,A=e){return new t([t.range(e,A)],0)}static create(e,A=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,n=0;ne?8:0)|o)}static normalized(e,A=0){let i=e[A];e.sort((n,o)=>n.from-o.from),A=e.indexOf(i);for(let n=1;no.head?t.range(s,r):t.range(r,s))}}return new t(e,A)}};function CX(t,e){for(let A of t.ranges)if(A.to>e)throw new RangeError("Selection points outside of document")}var ZR=0,We=class t{constructor(e,A,i,n,o){this.combine=e,this.compareInput=A,this.compare=i,this.isStatic=n,this.id=ZR++,this.default=e([]),this.extensions=typeof o=="function"?o(this):o}get reader(){return this}static define(e={}){return new t(e.combine||(A=>A),e.compareInput||((A,i)=>A===i),e.compare||(e.combine?(A,i)=>A===i:XR),!!e.static,e.enables)}of(e){return new dQ([],this,0,e)}compute(e,A){if(this.isStatic)throw new Error("Can't compute a static facet");return new dQ(e,this,1,A)}computeN(e,A){if(this.isStatic)throw new Error("Can't compute a static facet");return new dQ(e,this,2,A)}from(e,A){return A||(A=i=>i),this.compute([e],i=>A(i.field(e)))}};function XR(t,e){return t==e||t.length==e.length&&t.every((A,i)=>A===e[i])}var dQ=class{constructor(e,A,i,n){this.dependencies=e,this.facet=A,this.type=i,this.value=n,this.id=ZR++}dynamicSlot(e){var A;let i=this.value,n=this.facet.compareInput,o=this.id,a=e[o]>>1,r=this.type==2,s=!1,g=!1,l=[];for(let C of this.dependencies)C=="doc"?s=!0:C=="selection"?g=!0:(((A=e[C.id])!==null&&A!==void 0?A:1)&1)==0&&l.push(e[C.id]);return{create(C){return C.values[a]=i(C),1},update(C,I){if(s&&I.docChanged||g&&(I.docChanged||I.selection)||HR(C,l)){let d=i(C);if(r?!oX(d,C.values[a],n):!n(d,C.values[a]))return C.values[a]=d,1}return 0},reconfigure:(C,I)=>{let d,B=I.config.address[o];if(B!=null){let E=P5(I,B);if(this.dependencies.every(Q=>Q instanceof We?I.facet(Q)===C.facet(Q):Q instanceof va?I.field(Q,!1)==C.field(Q,!1):!0)||(r?oX(d=i(C),E,n):n(d=i(C),E)))return C.values[a]=E,0}else d=i(C);return C.values[a]=d,1}}}};function oX(t,e,A){if(t.length!=e.length)return!1;for(let i=0;it[s.id]),n=A.map(s=>s.type),o=i.filter(s=>!(s&1)),a=t[e.id]>>1;function r(s){let g=[];for(let l=0;li===n),e);return e.provide&&(A.provides=e.provide(A)),A}create(e){let A=e.facet(K5).find(i=>i.field==this);return(A?.create||this.createF)(e)}slot(e){let A=e[this.id]>>1;return{create:i=>(i.values[A]=this.create(i),1),update:(i,n)=>{let o=i.values[A],a=this.updateF(o,n);return this.compareF(o,a)?0:(i.values[A]=a,1)},reconfigure:(i,n)=>{let o=i.facet(K5),a=n.facet(K5),r;return(r=o.find(s=>s.field==this))&&r!=a.find(s=>s.field==this)?(i.values[A]=r.create(i),1):n.config.address[this.id]!=null?(i.values[A]=n.field(this),0):(i.values[A]=this.create(i),1)}}}init(e){return[this,K5.of({field:this,create:e})]}get extension(){return this}},Bd={lowest:4,low:3,default:2,high:1,highest:0};function K3(t){return e=>new z5(e,t)}var bc={highest:K3(Bd.highest),high:K3(Bd.high),default:K3(Bd.default),low:K3(Bd.low),lowest:K3(Bd.lowest)},z5=class{constructor(e,A){this.inner=e,this.prec=A}},F0=class t{of(e){return new J3(this,e)}reconfigure(e){return t.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},J3=class{constructor(e,A){this.compartment=e,this.inner=A}},O5=class t{constructor(e,A,i,n,o,a){for(this.base=e,this.compartments=A,this.dynamicSlots=i,this.address=n,this.staticValues=o,this.facets=a,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,A,i){let n=[],o=Object.create(null),a=new Map;for(let I of LyA(e,A,a))I instanceof va?n.push(I):(o[I.facet.id]||(o[I.facet.id]=[])).push(I);let r=Object.create(null),s=[],g=[];for(let I of n)r[I.id]=g.length<<1,g.push(d=>I.slot(d));let l=i?.config.facets;for(let I in o){let d=o[I],B=d[0].facet,E=l&&l[I]||[];if(d.every(Q=>Q.type==0))if(r[B.id]=s.length<<1|1,XR(E,d))s.push(i.facet(B));else{let Q=B.combine(d.map(f=>f.value));s.push(i&&B.compare(Q,i.facet(B))?i.facet(B):Q)}else{for(let Q of d)Q.type==0?(r[Q.id]=s.length<<1|1,s.push(Q.value)):(r[Q.id]=g.length<<1,g.push(f=>Q.dynamicSlot(f)));r[B.id]=g.length<<1,g.push(Q=>_yA(Q,B,d))}}let C=g.map(I=>I(r));return new t(e,a,C,r,s,o)}};function LyA(t,e,A){let i=[[],[],[],[],[]],n=new Map;function o(a,r){let s=n.get(a);if(s!=null){if(s<=r)return;let g=i[s].indexOf(a);g>-1&&i[s].splice(g,1),a instanceof J3&&A.delete(a.compartment)}if(n.set(a,r),Array.isArray(a))for(let g of a)o(g,r);else if(a instanceof J3){if(A.has(a.compartment))throw new RangeError("Duplicate use of compartment in extensions");let g=e.get(a.compartment)||a.inner;A.set(a.compartment,g),o(g,r)}else if(a instanceof z5)o(a.inner,a.prec);else if(a instanceof va)i[r].push(a),a.provides&&o(a.provides,r);else if(a instanceof dQ)i[r].push(a),a.facet.extensions&&o(a.facet.extensions,Bd.default);else{let g=a.extension;if(!g)throw new Error(`Unrecognized extension value in extension set (${a}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);o(g,r)}}return o(t,Bd.default),i.reduce((a,r)=>a.concat(r))}function U3(t,e){if(e&1)return 2;let A=e>>1,i=t.status[A];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;t.status[A]=4;let n=t.computeSlot(t,t.config.dynamicSlots[A]);return t.status[A]=2|n}function P5(t,e){return e&1?t.config.staticValues[e>>1]:t.values[e>>1]}var aX=We.define(),GR=We.define({combine:t=>t.some(e=>e),static:!0}),IX=We.define({combine:t=>t.length?t[0]:void 0,static:!0}),dX=We.define(),BX=We.define(),EX=We.define(),rX=We.define({combine:t=>t.length?t[0]:!1}),hg=class{constructor(e,A){this.type=e,this.value=A}static define(){return new zR}},zR=class{of(e){return new hg(this,e)}},OR=class{constructor(e){this.map=e}of(e){return new Hi(this,e)}},Hi=(()=>{class t{constructor(A,i){this.type=A,this.value=i}map(A){let i=this.type.map(this.value,A);return i===void 0?void 0:i==this.value?this:new t(this.type,i)}is(A){return this.type==A}static define(A={}){return new OR(A.map||(i=>i))}static mapEffects(A,i){if(!A.length)return A;let n=[];for(let o of A){let a=o.map(i);a&&n.push(a)}return n}}return t.reconfigure=t.define(),t.appendConfig=t.define(),t})(),N0=(()=>{class t{constructor(A,i,n,o,a,r){this.startState=A,this.changes=i,this.selection=n,this.effects=o,this.annotations=a,this.scrollIntoView=r,this._doc=null,this._state=null,n&&CX(n,i.newLength),a.some(s=>s.type==t.time)||(this.annotations=a.concat(t.time.of(Date.now())))}static create(A,i,n,o,a,r){return new t(A,i,n,o,a,r)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(A){for(let i of this.annotations)if(i.type==A)return i.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(A){let i=this.annotation(t.userEvent);return!!(i&&(i==A||i.length>A.length&&i.slice(0,A.length)==A&&i[A.length]=="."))}}return t.time=hg.define(),t.userEvent=hg.define(),t.addToHistory=hg.define(),t.remote=hg.define(),t})();function GyA(t,e){let A=[];for(let i=0,n=0;;){let o,a;if(i=t[i]))o=t[i++],a=t[i++];else if(n=0;n--){let o=i[n](t);o instanceof N0?t=o:Array.isArray(o)&&o.length==1&&o[0]instanceof N0?t=o[0]:t=hX(e,BQ(o),!1)}return t}function UyA(t){let e=t.startState,A=e.facet(EX),i=t;for(let n=A.length-1;n>=0;n--){let o=A[n](t);o&&Object.keys(o).length&&(i=QX(i,PR(e,o,t.changes.newLength),!0))}return i==t?t:N0.create(e,t.changes,t.selection,i.effects,i.annotations,i.scrollIntoView)}var JyA=[];function BQ(t){return t==null?JyA:Array.isArray(t)?t:[t]}var Lo=(function(t){return t[t.Word=0]="Word",t[t.Space=1]="Space",t[t.Other=2]="Other",t})(Lo||(Lo={})),YyA=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,jR;try{jR=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function TyA(t){if(jR)return jR.test(t);for(let e=0;e"\x80"&&(A.toUpperCase()!=A.toLowerCase()||YyA.test(A)))return!0}return!1}function HyA(t){return e=>{if(!/\S/.test(e))return Lo.Space;if(TyA(e))return Lo.Word;for(let A=0;A-1)return Lo.Word;return Lo.Other}}var er=(()=>{class t{constructor(A,i,n,o,a,r){this.config=A,this.doc=i,this.selection=n,this.values=o,this.status=A.statusTemplate.slice(),this.computeSlot=a,r&&(r._state=this);for(let s=0;so.set(l,g)),i=null),o.set(s.value.compartment,s.value.extension)):s.is(Hi.reconfigure)?(i=null,n=s.value):s.is(Hi.appendConfig)&&(i=null,n=BQ(n).concat(s.value));let a;i?a=A.startState.values.slice():(i=O5.resolve(n,o,this),a=new t(i,this.doc,this.selection,i.dynamicSlots.map(()=>null),(g,l)=>l.reconfigure(g,this),null).values);let r=A.startState.facet(GR)?A.newSelection:A.newSelection.asSingle();new t(i,A.newDoc,r,a,(s,g)=>g.update(s,A),A)}replaceSelection(A){return typeof A=="string"&&(A=this.toText(A)),this.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:A},range:de.cursor(i.from+A.length)}))}changeByRange(A){let i=this.selection,n=A(i.ranges[0]),o=this.changes(n.changes),a=[n.range],r=BQ(n.effects);for(let s=1;sr.spec.fromJSON(s,g)))}}return t.create({doc:A.doc,selection:de.fromJSON(A.selection),extensions:i.extensions?o.concat([i.extensions]):o})}static create(A={}){let i=O5.resolve(A.extensions||[],new Map),n=A.doc instanceof bn?A.doc:bn.of((A.doc||"").split(i.staticFacet(t.lineSeparator)||JR)),o=A.selection?A.selection instanceof de?A.selection:de.single(A.selection.anchor,A.selection.head):de.single(0);return CX(o,n.length),i.staticFacet(GR)||(o=o.asSingle()),new t(i,n,o,i.dynamicSlots.map(()=>null),(a,r)=>r.create(a),null)}get tabSize(){return this.facet(t.tabSize)}get lineBreak(){return this.facet(t.lineSeparator)||` -`}get readOnly(){return this.facet(rX)}phrase(A,...i){for(let n of this.facet(t.phrases))if(Object.prototype.hasOwnProperty.call(n,A)){A=n[A];break}return i.length&&(A=A.replace(/\$(\$|\d*)/g,(n,o)=>{if(o=="$")return"$";let a=+(o||1);return!a||a>i.length?n:i[a-1]})),A}languageDataAt(A,i,n=-1){let o=[];for(let a of this.facet(aX))for(let r of a(this,i,n))Object.prototype.hasOwnProperty.call(r,A)&&o.push(r[A]);return o}charCategorizer(A){let i=this.languageDataAt("wordChars",A);return HyA(i.length?i[0]:"")}wordAt(A){let{text:i,from:n,length:o}=this.doc.lineAt(A),a=this.charCategorizer(A),r=A-n,s=A-n;for(;r>0;){let g=Ta(i,r,!1);if(a(i.slice(g,r))!=Lo.Word)break;r=g}for(;se.length?e[0]:4}),t.lineSeparator=IX,t.readOnly=rX,t.phrases=We.define({compare(e,A){let i=Object.keys(e),n=Object.keys(A);return i.length==n.length&&i.every(o=>e[o]==A[o])}}),t.languageData=aX,t.changeFilter=dX,t.transactionFilter=BX,t.transactionExtender=EX,t})();F0.reconfigure=Hi.define();function kr(t,e,A={}){let i={};for(let n of t)for(let o of Object.keys(n)){let a=n[o],r=i[o];if(r===void 0)i[o]=a;else if(!(r===a||a===void 0))if(Object.hasOwnProperty.call(A,o))i[o]=A[o](r,a);else throw new Error("Config merge conflict for field "+o)}for(let n in e)i[n]===void 0&&(i[n]=e[n]);return i}var kl=class{eq(e){return this==e}range(e,A=e){return Y3.create(e,A,this)}};kl.prototype.startSide=kl.prototype.endSide=0;kl.prototype.point=!1;kl.prototype.mapMode=qr.TrackDel;function $R(t,e){return t==e||t.constructor==e.constructor&&t.eq(e)}var Y3=class t{constructor(e,A,i){this.from=e,this.to=A,this.value=i}static create(e,A,i){return new t(e,A,i)}};function qR(t,e){return t.from-e.from||t.value.startSide-e.value.startSide}var VR=class t{constructor(e,A,i,n){this.from=e,this.to=A,this.value=i,this.maxPoint=n}get length(){return this.to[this.to.length-1]}findIndex(e,A,i,n=0){let o=i?this.to:this.from;for(let a=n,r=o.length;;){if(a==r)return a;let s=a+r>>1,g=o[s]-e||(i?this.value[s].endSide:this.value[s].startSide)-A;if(s==a)return g>=0?a:r;g>=0?r=s:a=s+1}}between(e,A,i,n){for(let o=this.findIndex(A,-1e9,!0),a=this.findIndex(i,1e9,!1,o);od||I==d&&g.startSide>0&&g.endSide<=0)continue;(d-I||g.endSide-g.startSide)<0||(a<0&&(a=I),g.point&&(r=Math.max(r,d-I)),i.push(g),n.push(I-a),o.push(d-a))}return{mapped:i.length?new t(n,o,i,r):null,pos:a}}},to=(()=>{class t{constructor(A,i,n,o){this.chunkPos=A,this.chunk=i,this.nextLayer=n,this.maxPoint=o}static create(A,i,n,o){return new t(A,i,n,o)}get length(){let A=this.chunk.length-1;return A<0?0:Math.max(this.chunkEnd(A),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let A=this.nextLayer.size;for(let i of this.chunk)A+=i.value.length;return A}chunkEnd(A){return this.chunkPos[A]+this.chunk[A].length}update(A){let{add:i=[],sort:n=!1,filterFrom:o=0,filterTo:a=this.length}=A,r=A.filter;if(i.length==0&&!r)return this;if(n&&(i=i.slice().sort(qR)),this.isEmpty)return i.length?t.of(i):this;let s=new j5(this,null,-1).goto(0),g=0,l=[],C=new Wr;for(;s.value||g=0){let I=i[g++];C.addInner(I.from,I.to,I.value)||l.push(I)}else s.rangeIndex==1&&s.chunkIndexthis.chunkEnd(s.chunkIndex)||as.to||a=a&&A<=a+r.length&&r.between(a,A-a,i-a,n)===!1)return}this.nextLayer.between(A,i,n)}}iter(A=0){return T3.from([this]).goto(A)}get isEmpty(){return this.nextLayer==this}static iter(A,i=0){return T3.from(A).goto(i)}static compare(A,i,n,o,a=-1){let r=A.filter(I=>I.maxPoint>0||!I.isEmpty&&I.maxPoint>=a),s=i.filter(I=>I.maxPoint>0||!I.isEmpty&&I.maxPoint>=a),g=sX(r,s,n),l=new Ed(r,g,a),C=new Ed(s,g,a);n.iterGaps((I,d,B)=>gX(l,I,C,d,B,o)),n.empty&&n.length==0&&gX(l,0,C,0,0,o)}static eq(A,i,n=0,o){o==null&&(o=999999999);let a=A.filter(C=>!C.isEmpty&&i.indexOf(C)<0),r=i.filter(C=>!C.isEmpty&&A.indexOf(C)<0);if(a.length!=r.length)return!1;if(!a.length)return!0;let s=sX(a,r),g=new Ed(a,s,0).goto(n),l=new Ed(r,s,0).goto(n);for(;;){if(g.to!=l.to||!WR(g.active,l.active)||g.point&&(!l.point||!$R(g.point,l.point)))return!1;if(g.to>o)return!0;g.next(),l.next()}}static spans(A,i,n,o,a=-1){let r=new Ed(A,null,a).goto(i),s=i,g=r.openStart;for(;;){let l=Math.min(r.to,n);if(r.point){let C=r.activeForPoint(r.to),I=r.pointFroms&&(o.span(s,l,r.active,g),g=r.openEnd(l));if(r.to>n)return g+(r.point&&r.to>n?1:0);s=r.to,r.next()}}static of(A,i=!1){let n=new Wr;for(let o of A instanceof Y3?[A]:i?zyA(A):A)n.add(o.from,o.to,o.value);return n.finish()}static join(A){if(!A.length)return t.empty;let i=A[A.length-1];for(let n=A.length-2;n>=0;n--)for(let o=A[n];o!=t.empty;o=o.nextLayer)i=new t(o.chunkPos,o.chunk,i,Math.max(o.maxPoint,i.maxPoint));return i}}return t.empty=new t([],[],null,-1),t})();function zyA(t){if(t.length>1)for(let e=t[0],A=1;A0)return t.slice().sort(qR);e=i}return t}to.empty.nextLayer=to.empty;var Wr=class t{finishChunk(e){this.chunks.push(new VR(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,A,i){this.addInner(e,A,i)||(this.nextLayer||(this.nextLayer=new t)).add(e,A,i)}addInner(e,A,i){let n=e-this.lastTo||i.startSide-this.last.endSide;if(n<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return n<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(A-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=A,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,A-e)),!0)}addChunk(e,A){if((e-this.lastTo||A.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,A.maxPoint),this.chunks.push(A),this.chunkPos.push(e);let i=A.value.length-1;return this.last=A.value[i],this.lastFrom=A.from[i]+e,this.lastTo=A.to[i]+e,!0}finish(){return this.finishInner(to.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let A=to.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,A}};function sX(t,e,A){let i=new Map;for(let o of t)for(let a=0;a=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&n.push(new j5(a,A,i,o));return n.length==1?n[0]:new t(n)}get startSide(){return this.value?this.value.startSide:0}goto(e,A=-1e9){for(let i of this.heap)i.goto(e,A);for(let i=this.heap.length>>1;i>=0;i--)KR(this.heap,i);return this.next(),this}forward(e,A){for(let i of this.heap)i.forward(e,A);for(let i=this.heap.length>>1;i>=0;i--)KR(this.heap,i);(this.to-e||this.value.endSide-A)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),KR(this.heap,0)}}};function KR(t,e){for(let A=t[e];;){let i=(e<<1)+1;if(i>=t.length)break;let n=t[i];if(i+1=0&&(n=t[i+1],i++),A.compare(n)<0)break;t[i]=A,t[e]=n,e=i}}var Ed=class{constructor(e,A,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=T3.from(e,A,i)}goto(e,A=-1e9){return this.cursor.goto(e,A),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=A,this.openStart=-1,this.next(),this}forward(e,A){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-A)<0;)this.removeActive(this.minActive);this.cursor.forward(e,A)}removeActive(e){U5(this.active,e),U5(this.activeTo,e),U5(this.activeRank,e),this.minActive=lX(this.active,this.activeTo)}addActive(e){let A=0,{value:i,to:n,rank:o}=this.cursor;for(;A0;)A++;J5(this.active,A,i),J5(this.activeTo,A,n),J5(this.activeRank,A,o),e&&J5(e,A,this.cursor.from),this.minActive=lX(this.active,this.activeTo)}next(){let e=this.to,A=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let n=this.minActive;if(n>-1&&(this.activeTo[n]-this.cursor.from||this.active[n].endSide-this.cursor.startSide)<0){if(this.activeTo[n]>e){this.to=this.activeTo[n],this.endSide=this.active[n].endSide;break}this.removeActive(n),i&&U5(i,n)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let o=this.cursor.value;if(!o.point)this.addActive(i),this.cursor.next();else if(A&&this.cursor.to==this.to&&this.cursor.from=0&&i[n]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&A.push(this.active[i]);return A.reverse()}openEnd(e){let A=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)A++;return A}};function gX(t,e,A,i,n,o){t.goto(e),A.goto(i);let a=i+n,r=i,s=i-e,g=!!o.boundChange;for(let l=!1;;){let C=t.to+s-A.to,I=C||t.endSide-A.endSide,d=I<0?t.to+s:A.to,B=Math.min(d,a);if(t.point||A.point?(t.point&&A.point&&$R(t.point,A.point)&&WR(t.activeForPoint(t.to),A.activeForPoint(A.to))||o.comparePoint(r,B,t.point,A.point),l=!1):(l&&o.boundChange(r),B>r&&!WR(t.active,A.active)&&o.compareRange(r,B,t.active,A.active),g&&Ba)break;r=d,I<=0&&t.next(),I>=0&&A.next()}}function WR(t,e){if(t.length!=e.length)return!1;for(let A=0;A=e;i--)t[i+1]=t[i];t[e]=A}function lX(t,e){let A=-1,i=1e9;for(let n=0;n=e)return n;if(n==t.length)break;o+=t.charCodeAt(n)==9?A-o%A:1,n=Ta(t,n)}return i===!0?-1:t.length}var uX=typeof Symbol>"u"?"__\u037C":Symbol.for("\u037C"),AN=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),fX=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},Sl=class{constructor(e,A){this.rules=[];let{finish:i}=A||{};function n(a){return/^@/.test(a)?[a]:a.split(/,\s*/)}function o(a,r,s,g){let l=[],C=/^@(\w+)\b/.exec(a[0]),I=C&&C[1]=="keyframes";if(C&&r==null)return s.push(a[0]+";");for(let d in r){let B=r[d];if(/&/.test(d))o(d.split(/,\s*/).map(E=>a.map(Q=>E.replace(/&/,Q))).reduce((E,Q)=>E.concat(Q)),B,s);else if(B&&typeof B=="object"){if(!C)throw new RangeError("The value of a property ("+d+") should be a primitive value.");o(n(d),B,l,I)}else B!=null&&l.push(d.replace(/_.*/,"").replace(/[A-Z]/g,E=>"-"+E.toLowerCase())+": "+B+";")}(l.length||I)&&s.push((i&&!C&&!g?a.map(i):a).join(", ")+" {"+l.join(" ")+"}")}for(let a in e)o(n(a),e[a],this.rules)}getRules(){return this.rules.join(` -`)}static newName(){let e=fX[uX]||1;return fX[uX]=e+1,"\u037C"+e.toString(36)}static mount(e,A,i){let n=e[AN],o=i&&i.nonce;n?o&&n.setNonce(o):n=new eN(e,o),n.mount(Array.isArray(A)?A:[A],e)}},mX=new Map,eN=class{constructor(e,A){let i=e.ownerDocument||e,n=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&n.CSSStyleSheet){let o=mX.get(i);if(o)return e[AN]=o;this.sheet=new n.CSSStyleSheet,mX.set(i,this)}else this.styleTag=i.createElement("style"),A&&this.styleTag.setAttribute("nonce",A);this.modules=[],e[AN]=this}mount(e,A){let i=this.sheet,n=0,o=0;for(let a=0;a-1&&(this.modules.splice(s,1),o--,s=-1),s==-1){if(this.modules.splice(o++,0,r),i)for(let g=0;g",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},OyA=typeof navigator<"u"&&/Mac/.test(navigator.platform),PyA=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(sr=0;sr<10;sr++)UC[48+sr]=UC[96+sr]=String(sr);var sr;for(sr=1;sr<=24;sr++)UC[sr+111]="F"+sr;var sr;for(sr=65;sr<=90;sr++)UC[sr]=String.fromCharCode(sr+32),QQ[sr]=String.fromCharCode(sr);var sr;for(V5 in UC)QQ.hasOwnProperty(V5)||(QQ[V5]=UC[V5]);var V5;function pX(t){var e=OyA&&t.metaKey&&t.shiftKey&&!t.ctrlKey&&!t.altKey||PyA&&t.shiftKey&&t.key&&t.key.length==1||t.key=="Unidentified",A=!e&&t.key||(t.shiftKey?QQ:UC)[t.keyCode]||t.key||"Unidentified";return A=="Esc"&&(A="Escape"),A=="Del"&&(A="Delete"),A=="Left"&&(A="ArrowLeft"),A=="Up"&&(A="ArrowUp"),A=="Right"&&(A="ArrowRight"),A=="Down"&&(A="ArrowDown"),A}function io(){var t=arguments[0];typeof t=="string"&&(t=document.createElement(t));var e=1,A=arguments[1];if(A&&typeof A=="object"&&A.nodeType==null&&!Array.isArray(A)){for(var i in A)if(Object.prototype.hasOwnProperty.call(A,i)){var n=A[i];typeof n=="string"?t.setAttribute(i,n):n!=null&&(t[i]=n)}e++}for(;e2),lt={mac:vX||/Mac/.test(Ts.platform),windows:/Win/.test(Ts.platform),linux:/Linux|X11/.test(Ts.platform),ie:MD,ie_version:C$?IN.documentMode||6:BN?+BN[1]:dN?+dN[1]:0,gecko:DX,gecko_version:DX?+(/Firefox\/(\d+)/.exec(Ts.userAgent)||[0,0])[1]:0,chrome:!!tN,chrome_version:tN?+tN[1]:0,ios:vX,android:/Android\b/.test(Ts.userAgent),webkit:yX,webkit_version:yX?+(/\bAppleWebKit\/(\d+)/.exec(Ts.userAgent)||[0,0])[1]:0,safari:EN,safari_version:EN?+(/\bVersion\/(\d+(\.\d+)?)/.exec(Ts.userAgent)||[0,0])[1]:0,tabSize:IN.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function aF(t,e){for(let A in t)A=="class"&&e.class?e.class+=" "+t.class:A=="style"&&e.style?e.style+=";"+t.style:e[A]=t[A];return e}var lD=Object.create(null);function rF(t,e,A){if(t==e)return!0;t||(t=lD),e||(e=lD);let i=Object.keys(t),n=Object.keys(e);if(i.length-(A&&i.indexOf(A)>-1?1:0)!=n.length-(A&&n.indexOf(A)>-1?1:0))return!1;for(let o of i)if(o!=A&&(n.indexOf(o)==-1||t[o]!==e[o]))return!1;return!0}function jyA(t,e){for(let A=t.attributes.length-1;A>=0;A--){let i=t.attributes[A].name;e[i]==null&&t.removeAttribute(i)}for(let A in e){let i=e[A];A=="style"?t.style.cssText=i:t.getAttribute(A)!=i&&t.setAttribute(A,i)}}function bX(t,e,A){let i=!1;if(e)for(let n in e)A&&n in A||(i=!0,n=="style"?t.style.cssText="":t.removeAttribute(n));if(A)for(let n in A)e&&e[n]==A[n]||(i=!0,n=="style"?t.style.cssText=A[n]:t.setAttribute(n,A[n]));return i}function qyA(t){let e=Object.create(null);for(let A=0;A0?3e8:-4e8:A>0?1e8:-1e8,new md(e,A,A,i,e.widget||null,!1)}static replace(e){let A=!!e.block,i,n;if(e.isBlockGap)i=-5e8,n=4e8;else{let{start:o,end:a}=I$(e,A);i=(o?A?-3e8:-1:5e8)-1,n=(a?A?2e8:1:-6e8)+1}return new md(e,i,n,A,e.widget||null,!0)}static line(e){return new of(e)}static set(e,A=!1){return to.of(e,A)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};yt.none=to.empty;var nf=class t extends yt{constructor(e){let{start:A,end:i}=I$(e);super(A?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?aF(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||lD}eq(e){return this==e||e instanceof t&&this.tagName==e.tagName&&rF(this.attrs,e.attrs)}range(e,A=e){if(e>=A)throw new RangeError("Mark decorations may not be empty");return super.range(e,A)}};nf.prototype.point=!1;var of=class t extends yt{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof t&&this.spec.class==e.spec.class&&rF(this.spec.attributes,e.spec.attributes)}range(e,A=e){if(A!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,A)}};of.prototype.mapMode=qr.TrackBefore;of.prototype.point=!0;var md=class t extends yt{constructor(e,A,i,n,o,a){super(A,i,o,e),this.block=n,this.isReplace=a,this.mapMode=n?A<=0?qr.TrackBefore:qr.TrackAfter:qr.TrackDel}get type(){return this.startSide!=this.endSide?Xr.WidgetRange:this.startSide<=0?Xr.WidgetBefore:Xr.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof t&&VyA(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,A=e){if(this.isReplace&&(e>A||e==A&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&A!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,A)}};md.prototype.point=!0;function I$(t,e=!1){let{inclusiveStart:A,inclusiveEnd:i}=t;return A==null&&(A=t.inclusive),i==null&&(i=t.inclusive),{start:A??e,end:i??e}}function VyA(t,e){return t==e||!!(t&&e&&t.compare(e))}function pQ(t,e,A,i=0){let n=A.length-1;n>=0&&A[n]+i>=t?A[n]=Math.max(A[n],e):A.push(t,e)}var cD=class t extends kl{constructor(e,A){super(),this.tagName=e,this.attributes=A}eq(e){return e==this||e instanceof t&&this.tagName==e.tagName&&rF(this.attributes,e.attributes)}static create(e){return new t(e.tagName,e.attributes||lD)}static set(e,A=!1){return to.of(e,A)}};cD.prototype.startSide=cD.prototype.endSide=-1;function DQ(t){let e;return t.nodeType==11?e=t.getSelection?t:t.ownerDocument:e=t,e.getSelection()}function QN(t,e){return e?t==e||t.contains(e.nodeType!=1?e.parentNode:e):!1}function q3(t,e){if(!e.anchorNode)return!1;try{return QN(t,e.anchorNode)}catch{return!1}}function oD(t){return t.nodeType==3?af(t,0,t.nodeValue.length).getClientRects():t.nodeType==1?t.getClientRects():[]}function V3(t,e,A,i){return A?MX(t,e,A,i,-1)||MX(t,e,A,i,1):!1}function kI(t){for(var e=0;;e++)if(t=t.previousSibling,!t)return e}function CD(t){return t.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(t.nodeName)}function MX(t,e,A,i,n){for(;;){if(t==A&&e==i)return!0;if(e==(n<0?0:YC(t))){if(t.nodeName=="DIV")return!1;let o=t.parentNode;if(!o||o.nodeType!=1)return!1;e=kI(t)+(n<0?0:1),t=o}else if(t.nodeType==1){if(t=t.childNodes[e+(n<0?-1:0)],t.nodeType==1&&t.contentEditable=="false")return!1;e=n<0?YC(t):0}else return!1}}function YC(t){return t.nodeType==3?t.nodeValue.length:t.childNodes.length}function ID(t,e){let A=e?t.left:t.right;return{left:A,right:A,top:t.top,bottom:t.bottom}}function WyA(t){let e=t.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:t.innerWidth,top:0,bottom:t.innerHeight}}function d$(t,e){let A=e.width/t.offsetWidth,i=e.height/t.offsetHeight;return(A>.995&&A<1.005||!isFinite(A)||Math.abs(e.width-t.offsetWidth)<1)&&(A=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-t.offsetHeight)<1)&&(i=1),{scaleX:A,scaleY:i}}function ZyA(t,e,A,i,n,o,a,r){let s=t.ownerDocument,g=s.defaultView||window;for(let l=t,C=!1;l&&!C;)if(l.nodeType==1){let I,d=l==s.body,B=1,E=1;if(d)I=WyA(g);else{if(/^(fixed|sticky)$/.test(getComputedStyle(l).position)&&(C=!0),l.scrollHeight<=l.clientHeight&&l.scrollWidth<=l.clientWidth){l=l.assignedSlot||l.parentNode;continue}let b=l.getBoundingClientRect();({scaleX:B,scaleY:E}=d$(l,b)),I={left:b.left,right:b.left+l.clientWidth*B,top:b.top,bottom:b.top+l.clientHeight*E}}let Q=0,f=0;if(n=="nearest")e.top0&&e.bottom>I.bottom+f&&(f=e.bottom-I.bottom+a)):e.bottom>I.bottom&&(f=e.bottom-I.bottom+a,A<0&&e.top-f0&&e.right>I.right+Q&&(Q=e.right-I.right+o)):e.right>I.right&&(Q=e.right-I.right+o,A<0&&e.leftI.bottom||e.leftI.right)&&(e={left:Math.max(e.left,I.left),right:Math.min(e.right,I.right),top:Math.max(e.top,I.top),bottom:Math.min(e.bottom,I.bottom)}),l=l.assignedSlot||l.parentNode}else if(l.nodeType==11)l=l.host;else break}function XyA(t){let e=t.ownerDocument,A,i;for(let n=t.parentNode;n&&!(n==e.body||A&&i);)if(n.nodeType==1)!i&&n.scrollHeight>n.clientHeight&&(i=n),!A&&n.scrollWidth>n.clientWidth&&(A=n),n=n.assignedSlot||n.parentNode;else if(n.nodeType==11)n=n.host;else break;return{x:A,y:i}}var hN=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:A,focusNode:i}=e;this.set(A,Math.min(e.anchorOffset,A?YC(A):0),i,Math.min(e.focusOffset,i?YC(i):0))}set(e,A,i,n){this.anchorNode=e,this.anchorOffset=A,this.focusNode=i,this.focusOffset=n}},ud=null;lt.safari&<.safari_version>=26&&(ud=!1);function B$(t){if(t.setActive)return t.setActive();if(ud)return t.focus(ud);let e=[];for(let A=t;A&&(e.push(A,A.scrollTop,A.scrollLeft),A!=A.ownerDocument);A=A.parentNode);if(t.focus(ud==null?{get preventScroll(){return ud={preventScroll:!0},!0}}:void 0),!ud){ud=!1;for(let A=0;AMath.max(1,t.scrollHeight-t.clientHeight-4)}function Q$(t,e){for(let A=t,i=e;;){if(A.nodeType==3&&i>0)return{node:A,offset:i};if(A.nodeType==1&&i>0){if(A.contentEditable=="false")return null;A=A.childNodes[i-1],i=YC(A)}else if(A.parentNode&&!CD(A))i=kI(A),A=A.parentNode;else return null}}function h$(t,e){for(let A=t,i=e;;){if(A.nodeType==3&&i=A){if(r.level==i)return a;(o<0||(n!=0?n<0?r.fromA:e[o].level>r.level))&&(o=a)}}if(o<0)throw new RangeError("Index out of range");return o}};function m$(t,e){if(t.length!=e.length)return!1;for(let A=0;A=0;E-=3)if(_0[E+1]==-d){let Q=_0[E+2],f=Q&2?n:Q&4?Q&1?o:n:0;f&&(Wo[C]=Wo[_0[E]]=f),r=E;break}}else{if(_0.length==189)break;_0[r++]=C,_0[r++]=I,_0[r++]=s}else if((B=Wo[C])==2||B==1){let E=B==n;s=E?0:1;for(let Q=r-3;Q>=0;Q-=3){let f=_0[Q+2];if(f&2)break;if(E)_0[Q+2]|=2;else{if(f&4)break;_0[Q+2]|=4}}}}}function avA(t,e,A,i){for(let n=0,o=i;n<=A.length;n++){let a=n?A[n-1].to:t,r=ns;)B==Q&&(B=A[--E].from,Q=E?A[E-1].to:t),Wo[--B]=d;s=l}else o=g,s++}}}function fN(t,e,A,i,n,o,a){let r=i%2?2:1;if(i%2==n%2)for(let s=e,g=0;ss&&a.push(new kc(s,E.from,d));let Q=E.direction==pd!=!(d%2);mN(t,Q?i+1:i,n,E.inner,E.from,E.to,a),s=E.to}B=E.to}else{if(B==A||(l?Wo[B]!=r:Wo[B]==r))break;B++}I?fN(t,s,B,i+1,n,I,a):se;){let l=!0,C=!1;if(!g||s>o[g-1].to){let E=Wo[s-1];E!=r&&(l=!1,C=E==16)}let I=!l&&r==1?[]:null,d=l?i:i+1,B=s;A:for(;;)if(g&&B==o[g-1].to){if(C)break A;let E=o[--g];if(!l)for(let Q=E.from,f=g;;){if(Q==e)break A;if(f&&o[f-1].to==Q)Q=o[--f].from;else{if(Wo[Q-1]==r)break A;break}}if(I)I.push(E);else{E.toWo.length;)Wo[Wo.length]=256;let i=[],n=e==pd?0:1;return mN(t,n,n,A,0,t.length,i),i}function p$(t){return[new kc(0,t,0)]}var w$="";function svA(t,e,A,i,n){var o;let a=i.head-t.from,r=kc.find(e,a,(o=i.bidiLevel)!==null&&o!==void 0?o:-1,i.assoc),s=e[r],g=s.side(n,A);if(a==g){let I=r+=n?1:-1;if(I<0||I>=e.length)return null;s=e[r=I],a=s.side(!n,A),g=s.side(n,A)}let l=Ta(t.text,a,s.forward(n,A));(ls.to)&&(l=g),w$=t.text.slice(Math.min(a,l),Math.max(a,l));let C=r==(n?e.length-1:0)?null:e[r+(n?1:-1)];return C&&l==g&&C.level+(n?0:1)t.some(e=>e)}),S$=We.define({combine:t=>t.some(e=>e)}),x$=We.define(),W3=class t{constructor(e,A="nearest",i="nearest",n=5,o=5,a=!1){this.range=e,this.y=A,this.x=i,this.yMargin=n,this.xMargin=o,this.isSnapshot=a}map(e){return e.empty?this:new t(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new t(de.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}},W5=Hi.define({map:(t,e)=>t.map(e)}),R$=Hi.define();function Sr(t,e,A){let i=t.facet(b$);i.length?i[0](e):window.onerror&&window.onerror(String(e),A,void 0,void 0,e)||(A?console.error(A+":",e):console.error(e))}var JC=We.define({combine:t=>t.length?t[0]:!0}),lvA=0,hQ=We.define({combine(t){return t.filter((e,A)=>{for(let i=0;i{let s=[];return a&&s.push(kD.of(g=>{let l=g.plugin(r);return l?a(l):yt.none})),o&&s.push(o(r)),s})}static fromClass(e,A){return t.define((i,n)=>new e(i,n),A)}},Z3=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let A=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(A)}catch(i){if(Sr(A.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(A){Sr(e.state,A,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var A;if(!((A=this.value)===null||A===void 0)&&A.destroy)try{this.value.destroy()}catch(i){Sr(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},xX=We.define(),pN=We.define(),kD=We.define(),N$=We.define(),cF=We.define(),gf=We.define(),F$=We.define();function RX(t,e){let A=t.state.facet(F$);if(!A.length)return A;let i=A.map(o=>o instanceof Function?o(t):o),n=[];return to.spans(i,e.from,e.to,{point(){},span(o,a,r,s){let g=o-e.from,l=a-e.from,C=n;for(let I=r.length-1;I>=0;I--,s--){let d=r[I].spec.bidiIsolate,B;if(d==null&&(d=gvA(e.text,g,l)),s>0&&C.length&&(B=C[C.length-1]).to==g&&B.direction==d)B.to=l,C=B.inner;else{let E={from:g,to:l,direction:d,inner:[]};C.push(E),C=E.inner}}}}),n}var _$=We.define();function CF(t){let e=0,A=0,i=0,n=0;for(let o of t.state.facet(_$)){let a=o(t);a&&(a.left!=null&&(e=Math.max(e,a.left)),a.right!=null&&(A=Math.max(A,a.right)),a.top!=null&&(i=Math.max(i,a.top)),a.bottom!=null&&(n=Math.max(n,a.bottom)))}return{left:e,right:A,top:i,bottom:n}}var z3=We.define(),Sc=class t{constructor(e,A,i,n){this.fromA=e,this.toA=A,this.fromB=i,this.toB=n}join(e){return new t(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let A=e.length,i=this;for(;A>0;A--){let n=e[A-1];if(!(n.fromA>i.toA)){if(n.toAn.push(new Sc(o,a,r,s))),this.changedRanges=n}static create(e,A,i){return new t(e,A,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},cvA=[],Ha=class{constructor(e,A,i=0){this.dom=e,this.length=A,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return cvA}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let A=this.domAttrs;A&&jyA(this.dom,A)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,A=this.posAtStart){let i=A;for(let n of this.children){if(n==e)return i;i+=n.length+n.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,A){return null}domPosFor(e,A){let i=kI(this.dom),n=this.length?e>0:A>0;return new L0(this.parent.dom,i+(n?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof vQ)return e;return null}static get(e){return e.cmTile}},yQ=class extends Ha{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let A=this.dom,i=null,n,o=e?.node==A?e:null,a=0;for(let r of this.children){if(r.sync(e),a+=r.length+r.breakAfter,n=i?i.nextSibling:A.firstChild,o&&n!=r.dom&&(o.written=!0),r.dom.parentNode==A)for(;n&&n!=r.dom;)n=NX(n);else A.insertBefore(r.dom,n);i=r.dom}for(n=i?i.nextSibling:A.firstChild,o&&n&&(o.written=!0);n;)n=NX(n);this.length=a}};function NX(t){let e=t.nextSibling;return t.parentNode.removeChild(t),e}var vQ=class extends yQ{constructor(e,A){super(A),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let A=Ha.get(e);if(A&&this.owns(A))return A;e=e.parentNode}}blockTiles(e){for(let A=[],i=this,n=0,o=0;;)if(n==i.children.length){if(!A.length)return;i=i.parent,i.breakAfter&&o++,n=A.pop()}else{let a=i.children[n++];if(a instanceof bI)A.push(n),i=a,n=0;else{let r=o+a.length,s=e(a,o);if(s!==void 0)return s;o=r+a.breakAfter}}}resolveBlock(e,A){let i,n=-1,o,a=-1;if(this.blockTiles((r,s)=>{let g=s+r.length;if(e>=s&&e<=g){if(r.isWidget()&&A>=-1&&A<=1){if(r.flags&32)return!0;r.flags&16&&(i=void 0)}(se||e==s&&(A>1?r.length:r.covers(-1)))&&(!o||!r.isWidget()&&o.isWidget())&&(o=r,a=e-s)}}),!i&&!o)throw new Error("No tile at position "+e);return i&&A<0||!o?{tile:i,offset:n}:{tile:o,offset:a}}},bI=class t extends yQ{constructor(e,A){super(e),this.wrapper=A}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,A){let i=new t(A||document.createElement(e.tagName),e);return A||(i.flags|=4),i}},bQ=class t extends yQ{constructor(e,A){super(e),this.attrs=A}isLine(){return!0}static start(e,A,i){let n=new t(A||document.createElement("div"),e);return(!A||!i)&&(n.flags|=4),n}get domAttrs(){return this.attrs}resolveInline(e,A,i){let n=null,o=-1,a=null,r=-1;function s(l,C){for(let I=0,d=0;I=C&&(B.isComposite()?s(B,C-d):(!a||a.isHidden&&(A>0||i&&IvA(a,B)))&&(E>C||B.flags&32)?(a=B,r=C-d):(di&&(e=i);let n=e,o=e,a=0;e==0&&A<0||e==i&&A>=0?lt.chrome||lt.gecko||(e?(n--,a=1):o=0)?0:r.length-1];return lt.safari&&!a&&s.width==0&&(s=Array.prototype.find.call(r,g=>g.width)||s),a?ID(s,a<0):s||null}static of(e,A){let i=new t(A||document.createTextNode(e),e);return A||(i.flags|=2),i}},wd=class t extends Ha{constructor(e,A,i,n){super(e,A,n),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,A){return this.coordsInWidget(e,A,!1)}coordsInWidget(e,A,i){let n=this.widget.coordsAt(this.dom,e,A);if(n)return n;if(i)return ID(this.dom.getBoundingClientRect(),this.length?e==0:A<=0);{let o=this.dom.getClientRects(),a=null;if(!o.length)return null;let r=this.flags&16?!0:this.flags&32?!1:e>0;for(let s=r?o.length-1:0;a=o[s],!(e>0?s==0:s==o.length-1||a.top0;)if(n.isComposite())if(a){if(!e)break;i&&i.break(),e--,a=!1}else if(o==n.children.length){if(!e&&!r.length)break;i&&i.leave(n),a=!!n.breakAfter,{tile:n,index:o}=r.pop(),o++}else{let s=n.children[o],g=s.breakAfter;(A>0?s.length<=e:s.length=0;r--){let s=A.marks[r],g=n.lastChild;if(g instanceof ug&&g.mark.eq(s.mark))g.dom!=s.dom&&g.setDOM(nN(s.dom)),n=g;else{if(this.cache.reused.get(s)){let C=Ha.get(s.dom);C&&C.setDOM(nN(s.dom))}let l=ug.of(s.mark,s.dom);n.append(l),n=l}this.cache.reused.set(s,2)}let o=Ha.get(e.text);o&&this.cache.reused.set(o,2);let a=new fd(e.text,e.text.nodeValue);a.flags|=8,n.append(a)}addInlineWidget(e,A,i){let n=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);n||this.flushBuffer();let o=this.ensureMarks(A,i);!n&&!(e.flags&16)&&o.append(this.getBuffer(1)),o.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,A,i){this.flushBuffer(),this.ensureMarks(A,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let A=this.afterWidget||this.lastBlock;A.length+=e,this.pos+=e}addLineStart(e,A){var i;e||(e=L$);let n=bQ.start(e,A||((i=this.cache.find(bQ))===null||i===void 0?void 0:i.dom),!!A);this.getBlockPos().append(this.lastBlock=this.curLine=n)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,A){var i;let n=this.curLine;for(let o=e.length-1;o>=0;o--){let a=e[o],r;if(A>0&&(r=n.lastChild)&&r instanceof ug&&r.mark.eq(a))n=r,A--;else{let s=ug.of(a,(i=this.cache.find(ug,g=>g.mark.eq(a)))===null||i===void 0?void 0:i.dom);n.append(s),n=s,A=0}}return n}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!FX(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(lt.ios&&FX(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(oN,0,32)||new wd(oN.toDOM(),0,oN,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let A=new DN(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-A.rank||this.wrappers[i-1].to-A.to)<0;)i--;this.wrappers.splice(i,0,A)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let A=this.root;for(let i of this.wrappers){let n=A.lastChild;if(i.froma.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);A.append(o),A=o}}return A}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let A=2|(e<0?16:32),i=this.cache.find(MQ,void 0,1);return i&&(i.flags=A),i||new MQ(A)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}},vN=class{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:n,lineBreak:o,done:a}=this.cursor.next(this.skipCount);if(this.skipCount=0,a)throw new Error("Ran out of text content when drawing inline views");this.text=n;let r=this.textOff=Math.min(e,n.length);return o?null:n.slice(0,r)}let A=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,A);return this.textOff=A,i}},BD=[wd,bQ,fd,ug,MQ,bI,vQ];for(let t=0;t[]),this.index=BD.map(()=>0),this.reused=new Map}add(e){let A=e.constructor.bucket,i=this.buckets[A];i.length<6?i.push(e):i[this.index[A]=(this.index[A]+1)%6]=e}find(e,A,i=2){let n=e.bucket,o=this.buckets[n],a=this.index[n];for(let r=o.length-1;r>=0;r--){let s=(r+a)%o.length,g=o[s];if((!A||A(g))&&!this.reused.has(g))return o.splice(s,1),s{if(this.cache.add(a),a.isComposite())return!1},enter:a=>this.cache.add(a),leave:()=>{},break:()=>{}}}run(e,A){let i=A&&this.getCompositionContext(A.text);for(let n=0,o=0,a=0;;){let r=an){let g=s-n;this.preserve(g,!a,!r),n=s,o+=g}if(!r)break;A&&r.fromA<=A.range.fromA&&r.toA>=A.range.toA?(this.forward(r.fromA,A.range.fromA,A.range.fromA{if(a.isWidget())if(this.openWidget)this.builder.continueWidget(s-r);else{let g=s>0||r{a.isLine()?this.builder.addLineStart(a.attrs,this.cache.maybeReuse(a)):(this.cache.add(a),a instanceof ug&&n.unshift(a.mark)),this.openWidget=!1},leave:a=>{a.isLine()?n.length&&(n.length=o=0):a instanceof ug&&(n.shift(),o=Math.min(o,n.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,A){let i=null,n=this.builder,o=0,a=to.spans(this.decorations,e,A,{point:(r,s,g,l,C,I)=>{if(g instanceof md){if(this.disallowBlockEffectsFor[I]){if(g.block)throw new RangeError("Block decorations may not be specified via plugins");if(s>this.view.state.doc.lineAt(r).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(o=l.length,C>l.length)n.continueWidget(s-r);else{let d=g.widget||(g.block?_X.block:_X.inline),B=dvA(g),E=this.cache.findWidget(d,s-r,B)||wd.of(d,this.view,s-r,B);g.block?(g.startSide>0&&n.addLineStartIfNotCovered(i),n.addBlockWidget(E)):(n.ensureLine(i),n.addInlineWidget(E,l,C))}i=null}else i=BvA(i,g);s>r&&this.text.skip(s-r)},span:(r,s,g,l)=>{for(let C=r;Co,this.openMarks=a}forward(e,A,i=1){A-e<=10?this.old.advance(A-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(A-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let A=[],i=null;for(let n=e.parentNode;;n=n.parentNode){let o=Ha.get(n);if(n==this.view.contentDOM)break;o instanceof ug?A.push(o):o?.isLine()?i=o:n.nodeName=="DIV"&&!i&&n!=this.view.contentDOM?i=new bQ(n,L$):A.push(ug.of(new nf({tagName:n.nodeName.toLowerCase(),attributes:qyA(n)}),n))}return{line:i,marks:A}}};function FX(t,e){let A=i=>{for(let n of i.children)if((e?n.isText():n.length)||A(n))return!0;return!1};return A(t)}function dvA(t){let e=t.isReplace?(t.startSide<0?64:0)|(t.endSide>0?128:0):t.startSide>0?32:16;return t.block&&(e|=256),e}var L$={class:"cm-line"};function BvA(t,e){let A=e.spec.attributes,i=e.spec.class;return!A&&!i||(t||(t={class:"cm-line"}),A&&aF(A,t),i&&(t.class+=" "+i)),t}function EvA(t){let e=[];for(let A=t.parents.length;A>1;A--){let i=A==t.parents.length?t.tile:t.parents[A].tile;i instanceof ug&&e.push(i.mark)}return e}function nN(t){let e=Ha.get(t);return e&&e.setDOM(t.cloneNode()),t}var _X=(()=>{class t extends fg{constructor(A){super(),this.tag=A}eq(A){return A.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(A){return A.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}return t.inline=new t("span"),t.block=new t("div"),t})(),oN=new class extends fg{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}},ED=class{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=yt.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new vQ(e,e.contentDOM),this.updateInner([new Sc(0,0,0,e.state.doc.length)],null)}update(e){var A;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:l,toA:C})=>Cthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let n=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((A=this.domChanged)===null||A===void 0)&&A.newSel?n=this.domChanged.newSel.head:!DvA(e.changes,this.hasComposition)&&!e.selectionSet&&(n=e.state.selection.main.head));let o=n>-1?hvA(this.view,e.changes,n):null;if(this.domChanged=null,this.hasComposition){let{from:l,to:C}=this.hasComposition;i=new Sc(l,C,e.changes.mapPos(l,-1),e.changes.mapPos(C,1)).addToSet(i.slice())}this.hasComposition=o?{from:o.range.fromB,to:o.range.toB}:null,(lt.ie||lt.chrome)&&!o&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let a=this.decorations,r=this.blockWrappers;this.updateDeco();let s=mvA(a,this.decorations,e.changes);s.length&&(i=Sc.extendWithRanges(i,s));let g=pvA(r,this.blockWrappers,e.changes);return g.length&&(i=Sc.extendWithRanges(i,g)),o&&!i.some(l=>l.fromA<=o.range.fromA&&l.toA>=o.range.toA)&&(i=o.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,o),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,A){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(A||e.length){let a=this.tile,r=new MN(this.view,a,this.blockWrappers,this.decorations,this.dynamicDecorationMap);this.tile=r.run(e,A),kN(a,r.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let o=lt.chrome||lt.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(o),o&&(o.written||i.selectionRange.focusNode!=o.node||!this.tile.dom.contains(o.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let n=[];if(this.view.viewport.from||this.view.viewport.to-1)&&q3(i,this.view.observer.selectionRange)&&!(n&&i.contains(n));if(!(o||A||a))return;let r=this.forceSelection;this.forceSelection=!1;let s=this.view.state.selection.main,g,l;if(s.empty?l=g=this.inlineDOMNearPos(s.anchor,s.assoc||1):(l=this.inlineDOMNearPos(s.head,s.head==s.from?1:-1),g=this.inlineDOMNearPos(s.anchor,s.anchor==s.from?1:-1)),lt.gecko&&s.empty&&!this.hasComposition&&QvA(g)){let I=document.createTextNode("");this.view.observer.ignore(()=>g.node.insertBefore(I,g.node.childNodes[g.offset]||null)),g=l=new L0(I,0),r=!0}let C=this.view.observer.selectionRange;(r||!C.focusNode||(!V3(g.node,g.offset,C.anchorNode,C.anchorOffset)||!V3(l.node,l.offset,C.focusNode,C.focusOffset))&&!this.suppressWidgetCursorChange(C,s))&&(this.view.observer.ignore(()=>{lt.android&<.chrome&&i.contains(C.focusNode)&&wvA(C.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let I=DQ(this.view.root);if(I)if(s.empty){if(lt.gecko){let d=uvA(g.node,g.offset);if(d&&d!=3){let B=(d==1?Q$:h$)(g.node,g.offset);B&&(g=new L0(B.node,B.offset))}}I.collapse(g.node,g.offset),s.bidiLevel!=null&&I.caretBidiLevel!==void 0&&(I.caretBidiLevel=s.bidiLevel)}else if(I.extend){I.collapse(g.node,g.offset);try{I.extend(l.node,l.offset)}catch{}}else{let d=document.createRange();s.anchor>s.head&&([g,l]=[l,g]),d.setEnd(l.node,l.offset),d.setStart(g.node,g.offset),I.removeAllRanges(),I.addRange(d)}a&&this.view.root.activeElement==i&&(i.blur(),n&&n.focus())}),this.view.observer.setSelectionRange(g,l)),this.impreciseAnchor=g.precise?null:new L0(C.anchorNode,C.anchorOffset),this.impreciseHead=l.precise?null:new L0(C.focusNode,C.focusOffset)}suppressWidgetCursorChange(e,A){return this.hasComposition&&A.empty&&V3(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==A.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,A=e.state.selection.main,i=DQ(e.root),{anchorNode:n,anchorOffset:o}=e.observer.selectionRange;if(!i||!A.empty||!A.assoc||!i.modify)return;let a=this.lineAt(A.head,A.assoc);if(!a)return;let r=a.posAtStart;if(A.head==r||A.head==r+a.length)return;let s=this.coordsAt(A.head,-1),g=this.coordsAt(A.head,1);if(!s||!g||s.bottom>g.top)return;let l=this.domAtPos(A.head+A.assoc,A.assoc);i.collapse(l.node,l.offset),i.modify("move",A.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let C=e.observer.selectionRange;e.docView.posFromDOM(C.anchorNode,C.anchorOffset)!=A.from&&i.collapse(n,o)}posFromDOM(e,A){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let n=i.posAtStart;if(i.isComposite()){let o;if(e==i.dom)o=i.dom.childNodes[A];else{let a=YC(e)==0?0:A==0?-1:1;for(;;){let r=e.parentNode;if(r==i.dom)break;a==0&&r.firstChild!=r.lastChild&&(e==r.firstChild?a=-1:a=1),e=r}a<0?o=e:o=e.nextSibling}if(o==i.dom.firstChild)return n;for(;o&&!Ha.get(o);)o=o.nextSibling;if(!o)return n+i.length;for(let a=0,r=n;;a++){let s=i.children[a];if(s.dom==o)return r;r+=s.length+s.breakAfter}}else return i.isText()?e==i.dom?n+A:n+(A?i.length:0):n}domAtPos(e,A){let{tile:i,offset:n}=this.tile.resolveBlock(e,A);return i.isWidget()?i.domPosFor(e,A):i.domIn(n,A)}inlineDOMNearPos(e,A){let i,n=-1,o=!1,a,r=-1,s=!1;return this.tile.blockTiles((g,l)=>{if(g.isWidget()){if(g.flags&32&&l>=e)return!0;g.flags&16&&(o=!0)}else{let C=l+g.length;if(l<=e&&(i=g,n=e-l,o=C=e&&!a&&(a=g,r=e-l,s=l>e),l>e&&a)return!0}}),!i&&!a?this.domAtPos(e,A):(o&&a?i=null:s&&i&&(a=null),i&&A<0||!a?i.domIn(n,A):a.domIn(r,A))}coordsAt(e,A){let{tile:i,offset:n}=this.tile.resolveBlock(e,A);return i.isWidget()?i.widget instanceof X3?null:i.coordsInWidget(n,A,!0):i.coordsIn(n,A)}lineAt(e,A){let{tile:i}=this.tile.resolveBlock(e,A);return i.isLine()?i:null}coordsForChar(e){let{tile:A,offset:i}=this.tile.resolveBlock(e,1);if(!A.isLine())return null;function n(o,a){if(o.isComposite())for(let r of o.children){if(r.length>=a){let s=n(r,a);if(s)return s}if(a-=r.length,a<0)break}else if(o.isText()&&aMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,r=-1,s=this.view.textDirection==mo.LTR,g=0,l=(C,I,d)=>{for(let B=0;Bn);B++){let E=C.children[B],Q=I+E.length,f=E.dom.getBoundingClientRect(),{height:b}=f;if(d&&!B&&(g+=f.top-d.top),E instanceof bI)Q>i&&l(E,I,f);else if(I>=i&&(g>0&&A.push(-g),A.push(b+g),g=0,a)){let S=E.dom.lastChild,M=S?oD(S):[];if(M.length){let D=M[M.length-1],F=s?D.right-f.left:f.right-D.left;F>r&&(r=F,this.minWidth=o,this.minWidthFrom=I,this.minWidthTo=Q)}}d&&B==C.children.length-1&&(g+=d.bottom-f.bottom),I=Q+E.breakAfter}};return l(this.tile,0,null),A}textDirectionAt(e){let{tile:A}=this.tile.resolveBlock(e,1);return getComputedStyle(A.dom).direction=="rtl"?mo.RTL:mo.LTR}measureTextSize(){let e=this.tile.blockTiles(a=>{if(a.isLine()&&a.children.length&&a.length<=20){let r=0,s;for(let g of a.children){if(!g.isText()||/[^ -~]/.test(g.text))return;let l=oD(g.dom);if(l.length!=1)return;r+=l[0].width,s=l[0].height}if(r)return{lineHeight:a.dom.getBoundingClientRect().height,charWidth:r/a.length,textHeight:s}}});if(e)return e;let A=document.createElement("div"),i,n,o;return A.className="cm-line",A.style.width="99999px",A.style.position="absolute",A.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(A);let a=oD(A.firstChild)[0];i=A.getBoundingClientRect().height,n=a&&a.width?a.width/27:7,o=a&&a.height?a.height:i,A.remove()}),{lineHeight:i,charWidth:n,textHeight:o}}computeBlockGapDeco(){let e=[],A=this.view.viewState;for(let i=0,n=0;;n++){let o=n==A.viewports.length?null:A.viewports[n],a=o?o.from-1:this.view.state.doc.length;if(a>i){let r=(A.lineBlockAt(a).bottom-A.lineBlockAt(i).top)/this.view.scaleY;e.push(yt.replace({widget:new X3(r),block:!0,inclusive:!0,isBlockGap:!0}).range(i,a))}if(!o)break;i=o.to+1}return yt.set(e)}updateDeco(){let e=1,A=this.view.state.facet(kD).map(o=>(this.dynamicDecorationMap[e++]=typeof o=="function")?o(this.view):o),i=!1,n=this.view.state.facet(cF).map((o,a)=>{let r=typeof o=="function";return r&&(i=!0),r?o(this.view):o});for(n.length&&(this.dynamicDecorationMap[e++]=i,A.push(to.join(n))),this.decorations=[this.editContextFormatting,...A,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof o=="function"?o(this.view):o)}scrollIntoView(e){if(e.isSnapshot){let g=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=g.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let g of this.view.state.facet(x$))try{if(g(this.view,e.range,e))return!0}catch(l){Sr(this.view.state,l,"scroll handler")}let{range:A}=e,i=this.coordsAt(A.head,A.empty?A.assoc:A.head>A.anchor?-1:1),n;if(!i)return;!A.empty&&(n=this.coordsAt(A.anchor,A.anchor>A.head?-1:1))&&(i={left:Math.min(i.left,n.left),top:Math.min(i.top,n.top),right:Math.max(i.right,n.right),bottom:Math.max(i.bottom,n.bottom)});let o=CF(this.view),a={left:i.left-o.left,top:i.top-o.top,right:i.right+o.right,bottom:i.bottom+o.bottom},{offsetWidth:r,offsetHeight:s}=this.view.scrollDOM;ZyA(this.view.scrollDOM,a,A.headi.isWidget()||i.children.some(A);return A(this.tile.resolveBlock(e,1).tile)}destroy(){kN(this.tile)}};function kN(t,e){let A=e?.get(t);if(A!=1){A==null&&t.destroy();for(let i of t.children)kN(i,e)}}function QvA(t){return t.node.nodeType==1&&t.node.firstChild&&(t.offset==0||t.node.childNodes[t.offset-1].contentEditable=="false")&&(t.offset==t.node.childNodes.length||t.node.childNodes[t.offset].contentEditable=="false")}function G$(t,e){let A=t.observer.selectionRange;if(!A.focusNode)return null;let i=Q$(A.focusNode,A.focusOffset),n=h$(A.focusNode,A.focusOffset),o=i||n;if(n&&i&&n.node!=i.node){let r=Ha.get(n.node);if(!r||r.isText()&&r.text!=n.node.nodeValue)o=n;else if(t.docView.lastCompositionAfterCursor){let s=Ha.get(i.node);!s||s.isText()&&s.text!=i.node.nodeValue||(o=n)}}if(t.docView.lastCompositionAfterCursor=o!=i,!o)return null;let a=e-o.offset;return{from:a,to:a+o.node.nodeValue.length,node:o.node}}function hvA(t,e,A){let i=G$(t,A);if(!i)return null;let{node:n,from:o,to:a}=i,r=n.nodeValue;if(/[\n\r]/.test(r)||t.state.doc.sliceString(i.from,i.to)!=r)return null;let s=e.invertedDesc;return{range:new Sc(s.mapPos(o),s.mapPos(a),o,a),text:n}}function uvA(t,e){return t.nodeType!=1?0:(e&&t.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(A=!0)}),A}var X3=class extends fg{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}};function yvA(t,e,A=1){let i=t.charCategorizer(e),n=t.doc.lineAt(e),o=e-n.from;if(n.length==0)return de.cursor(e);o==0?A=1:o==n.length&&(A=-1);let a=o,r=o;A<0?a=Ta(n.text,o,!1):r=Ta(n.text,o);let s=i(n.text.slice(a,r));for(;a>0;){let g=Ta(n.text,a,!1);if(i(n.text.slice(g,a))!=s)break;a=g}for(;rt.defaultLineHeight*1.5){let r=t.viewState.heightOracle.textHeight,s=Math.floor((n-A.top-(t.defaultLineHeight-r)*.5)/r);o+=s*t.viewState.heightOracle.lineLength}let a=t.state.sliceDoc(A.from,A.to);return A.from+q5(a,o,t.state.tabSize)}function xN(t,e,A){let i=t.lineBlockAt(e);if(Array.isArray(i.type)){let n;for(let o of i.type){if(o.from>e)break;if(!(o.toe)return o;(!n||o.type==Xr.Text&&(n.type!=o.type||(A<0?o.frome)))&&(n=o)}}return n||i}return i}function bvA(t,e,A,i){let n=xN(t,e.head,e.assoc||-1),o=!i||n.type!=Xr.Text||!(t.lineWrapping||n.widgetLineBreaks)?null:t.coordsAtPos(e.assoc<0&&e.head>n.from?e.head-1:e.head);if(o){let a=t.dom.getBoundingClientRect(),r=t.textDirectionAt(n.from),s=t.posAtCoords({x:A==(r==mo.LTR)?a.right-1:a.left+1,y:(o.top+o.bottom)/2});if(s!=null)return de.cursor(s,A?-1:1)}return de.cursor(A?n.to:n.from,A?-1:1)}function LX(t,e,A,i){let n=t.state.doc.lineAt(e.head),o=t.bidiSpans(n),a=t.textDirectionAt(n.from);for(let r=e,s=null;;){let g=svA(n,o,a,r,A),l=w$;if(!g){if(n.number==(A?t.state.doc.lines:1))return r;l=` -`,n=t.state.doc.line(n.number+(A?1:-1)),o=t.bidiSpans(n),g=t.visualLineSide(n,!A)}if(s){if(!s(l))return r}else{if(!i)return g;s=i(l)}r=g}}function MvA(t,e,A){let i=t.state.charCategorizer(e),n=i(A);return o=>{let a=i(o);return n==Lo.Space&&(n=a),n==a}}function kvA(t,e,A,i){let n=e.head,o=A?1:-1;if(n==(A?t.state.doc.length:0))return de.cursor(n,e.assoc);let a=e.goalColumn,r,s=t.contentDOM.getBoundingClientRect(),g=t.coordsAtPos(n,e.assoc||-1),l=t.documentTop;if(g)a==null&&(a=g.left-s.left),r=o<0?g.top:g.bottom;else{let B=t.viewState.lineBlockAt(n);a==null&&(a=Math.min(s.right-s.left,t.defaultCharacterWidth*(n-B.from))),r=(o<0?B.top:B.bottom)+l}let C=s.left+a,I=i??t.viewState.heightOracle.textHeight>>1,d=RN(t,{x:C,y:r+I*o},!1,o);return de.cursor(d.pos,d.assoc,void 0,a)}function $3(t,e,A){for(;;){let i=0;for(let n of t)n.between(e-1,e+1,(o,a,r)=>{if(e>o&&en(t)),A.from,e.head>A.from?-1:1);return i==A.from?A:de.cursor(i,it.viewState.docHeight)return new Rl(t.state.doc.length,-1);if(g=t.elementAtHeight(s),i==null)break;if(g.type==Xr.Text){let I=t.docView.coordsAt(i<0?g.from:g.to,i);if(I&&(i<0?I.top<=s+o:I.bottom>=s+o))break}let C=t.viewState.heightOracle.textHeight/2;s=i>0?g.bottom+C:g.top-C}if(t.viewport.from>=g.to||t.viewport.to<=g.from){if(A)return null;if(g.type==Xr.Text){let C=vvA(t,n,g,a,r);return new Rl(C,C==g.from?1:-1)}}if(g.type!=Xr.Text)return s<(g.top+g.bottom)/2?new Rl(g.from,1):new Rl(g.to,-1);let l=t.docView.lineAt(g.from,2);return(!l||l.length!=g.length)&&(l=t.docView.lineAt(g.from,-2)),U$(t,l,g.from,a,r)}function U$(t,e,A,i,n){let o=-1,a=null,r=1e9,s=1e9,g=n,l=n,C=(I,d)=>{for(let B=0;Bi?E.left-i:E.rightn?E.top-n:E.bottom=g&&(g=Math.min(E.top,g),l=Math.max(E.bottom,l),f=0),(o<0||(f-s||Q-r)<0)&&(o>=0&&s&&r=g+2?s=0:(o=d,r=Q,s=f,a=E))}};if(e.isText()){for(let d=0;d(a.left+a.right)/2==(GX(t,o+A)==mo.LTR)?new Rl(A+Ta(e.text,o),-1):new Rl(A+o,1)}else{if(!e.length)return new Rl(A,1);for(let E=0;E(a.left+a.right)/2==(GX(t,o+A)==mo.LTR)?new Rl(d+I.length,-1):new Rl(d,1)}}function GX(t,e){let A=t.state.doc.lineAt(e);return t.bidiSpans(A)[kc.find(t.bidiSpans(A),e-A.from,-1,1)].dir}var O3="\uFFFF",NN=class{constructor(e,A){this.points=e,this.view=A,this.text="",this.lineSeparator=A.state.facet(er.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=O3}readRange(e,A){if(!e)return this;let i=e.parentNode;for(let n=e;;){this.findPointBefore(i,n);let o=this.text.length;this.readNode(n);let a=Ha.get(n),r=n.nextSibling;if(r==A){a?.breakAfter&&!r&&i!=this.view.contentDOM&&this.lineBreak();break}let s=Ha.get(r);(a&&s?a.breakAfter:(a?a.breakAfter:CD(n))||CD(r)&&(n.nodeName!="BR"||a?.isWidget())&&this.text.length>o)&&!xvA(r,A)&&this.lineBreak(),n=r}return this.findPointBefore(i,A),this}readTextNode(e){let A=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,A.length));for(let i=0,n=this.lineSeparator?null:/\r\n?|\n/g;;){let o=-1,a=1,r;if(this.lineSeparator?(o=A.indexOf(this.lineSeparator,i),a=this.lineSeparator.length):(r=n.exec(A))&&(o=r.index,a=r[0].length),this.append(A.slice(i,o<0?A.length:o)),o<0)break;if(this.lineBreak(),a>1)for(let s of this.points)s.node==e&&s.pos>this.text.length&&(s.pos-=a-1);i=o+a}}readNode(e){let A=Ha.get(e),i=A&&A.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let n=i.iter();!n.next().done;)n.lineBreak?this.lineBreak():this.append(n.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,A){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==A&&(i.pos=this.text.length)}findPointInside(e,A){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(SvA(e,i.node,i.offset)?A:0))}};function SvA(t,e,A){for(;;){if(!e||A-1;let{impreciseHead:o,impreciseAnchor:a}=e.docView;if(e.state.readOnly&&A>-1)this.newSel=null;else if(A>-1&&(this.bounds=J$(e.docView.tile,A,i,0))){let r=o||a?[]:NvA(e),s=new NN(r,e);s.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=s.text,this.newSel=FvA(r,this.bounds.from)}else{let r=e.observer.selectionRange,s=o&&o.node==r.focusNode&&o.offset==r.focusOffset||!QN(e.contentDOM,r.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(r.focusNode,r.focusOffset),g=a&&a.node==r.anchorNode&&a.offset==r.anchorOffset||!QN(e.contentDOM,r.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(r.anchorNode,r.anchorOffset),l=e.viewport;if((lt.ios||lt.chrome)&&e.state.selection.main.empty&&s!=g&&(l.from>0||l.to-1&&e.state.selection.ranges.length>1?this.newSel=e.state.selection.replaceRange(de.range(g,s)):this.newSel=de.single(g,s)}}};function J$(t,e,A,i){if(t.isComposite()){let n=-1,o=-1,a=-1,r=-1;for(let s=0,g=i,l=i;sA)return J$(C,e,A,g);if(I>=e&&n==-1&&(n=s,o=g),g>A&&C.dom.parentNode==t.dom){a=s,r=l;break}l=I,g=I+C.breakAfter}return{from:o,to:r<0?i+t.length:r,startDOM:(n?t.children[n-1].dom.nextSibling:null)||t.dom.firstChild,endDOM:a=0?t.children[a].dom:null}}else return t.isText()?{from:i,to:i+t.length,startDOM:t.dom,endDOM:t.dom.nextSibling}:null}function Y$(t,e){let A,{newSel:i}=e,n=t.state.selection.main,o=t.inputState.lastKeyTime>Date.now()-100?t.inputState.lastKeyCode:-1;if(e.bounds){let{from:a,to:r}=e.bounds,s=n.from,g=null;(o===8||lt.android&&e.text.length=n.from&&A.to<=n.to&&(A.from!=n.from||A.to!=n.to)&&n.to-n.from-(A.to-A.from)<=4?A={from:n.from,to:n.to,insert:t.state.doc.slice(n.from,A.from).append(A.insert).append(t.state.doc.slice(A.to,n.to))}:t.state.doc.lineAt(n.from).toDate.now()-50?A={from:n.from,to:n.to,insert:t.state.toText(t.inputState.insertingText)}:lt.chrome&&A&&A.from==A.to&&A.from==n.head&&A.insert.toString()==` - `&&t.lineWrapping&&(i&&(i=de.single(i.main.anchor-1,i.main.head-1)),A={from:n.from,to:n.to,insert:bn.of([" "])}),A)return IF(t,A,i,o);if(i&&!hD(i,n)){let a=!1,r="select";return t.inputState.lastSelectionTime>Date.now()-50&&(t.inputState.lastSelectionOrigin=="select"&&(a=!0),r=t.inputState.lastSelectionOrigin,r=="select.pointer"&&(i=K$(t.state.facet(gf).map(s=>s(t)),i))),t.dispatch({selection:i,scrollIntoView:a,userEvent:r}),!0}else return!1}function IF(t,e,A,i=-1){if(lt.ios&&t.inputState.flushIOSKey(e))return!0;let n=t.state.selection.main;if(lt.android&&(e.to==n.to&&(e.from==n.from||e.from==n.from-1&&t.state.sliceDoc(e.from,n.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&wQ(t.contentDOM,"Enter",13)||(e.from==n.from-1&&e.to==n.to&&e.insert.length==0||i==8&&e.insert.lengthn.head)&&wQ(t.contentDOM,"Backspace",8)||e.from==n.from&&e.to==n.to+1&&e.insert.length==0&&wQ(t.contentDOM,"Delete",46)))return!0;let o=e.insert.toString();t.inputState.composing>=0&&t.inputState.composing++;let a,r=()=>a||(a=RvA(t,e,A));return t.state.facet(M$).some(s=>s(t,e.from,e.to,o,r))||t.dispatch(r()),!0}function RvA(t,e,A){let i,n=t.state,o=n.selection.main,a=-1;if(e.from==e.to&&e.fromo.to){let s=e.fromC(t)),g,s);e.from==l&&(a=l)}if(a>-1)i={changes:e,selection:de.cursor(e.from+e.insert.length,-1)};else if(e.from>=o.from&&e.to<=o.to&&e.to-e.from>=(o.to-o.from)/3&&(!A||A.main.empty&&A.main.from==e.from+e.insert.length)&&t.inputState.composing<0){let s=o.frome.to?n.sliceDoc(e.to,o.to):"";i=n.replaceSelection(t.state.toText(s+e.insert.sliceString(0,void 0,t.state.lineBreak)+g))}else{let s=n.changes(e),g=A&&A.main.to<=s.newLength?A.main:void 0;if(n.selection.ranges.length>1&&(t.inputState.composing>=0||t.inputState.compositionPendingChange)&&e.to<=o.to+10&&e.to>=o.to-10){let l=t.state.sliceDoc(e.from,e.to),C,I=A&&G$(t,A.main.head);if(I){let B=e.insert.length-(e.to-e.from);C={from:I.from,to:I.to-B}}else C=t.state.doc.lineAt(o.head);let d=o.to-e.to;i=n.changeByRange(B=>{if(B.from==o.from&&B.to==o.to)return{changes:s,range:g||B.map(s)};let E=B.to-d,Q=E-l.length;if(t.state.sliceDoc(Q,E)!=l||E>=C.from&&Q<=C.to)return{range:B};let f=n.changes({from:Q,to:E,insert:e.insert}),b=B.to-o.to;return{changes:f,range:g?de.range(Math.max(0,g.anchor+b),Math.max(0,g.head+b)):B.map(f)}})}else i={changes:s,selection:g&&n.selection.replaceRange(g)}}let r="input.type";return(t.composing||t.inputState.compositionPendingChange&&t.inputState.compositionEndedAt>Date.now()-50)&&(t.inputState.compositionPendingChange=!1,r+=".compose",t.inputState.compositionFirstChange&&(r+=".start",t.inputState.compositionFirstChange=!1)),n.update(i,{userEvent:r,scrollIntoView:!0})}function T$(t,e,A,i){let n=Math.min(t.length,e.length),o=0;for(;o0&&r>0&&t.charCodeAt(a-1)==e.charCodeAt(r-1);)a--,r--;if(i=="end"){let s=Math.max(0,o-Math.min(a,r));A-=a+s-o}if(a=a?o-A:0;o-=s,r=o+(r-a),a=o}else if(r=r?o-A:0;o-=s,a=o+(a-r),r=o}return{from:o,toA:a,toB:r}}function NvA(t){let e=[];if(t.root.activeElement!=t.contentDOM)return e;let{anchorNode:A,anchorOffset:i,focusNode:n,focusOffset:o}=t.observer.selectionRange;return A&&(e.push(new QD(A,i)),(n!=A||o!=i)&&e.push(new QD(n,o))),e}function FvA(t,e){if(t.length==0)return null;let A=t[0].pos,i=t.length==2?t[1].pos:A;return A>-1&&i>-1?de.single(A+e,i+e):null}function hD(t,e){return e.head==t.main.head&&e.anchor==t.main.anchor}var _N=class{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,lt.safari&&e.contentDOM.addEventListener("input",()=>null),lt.gecko&&qvA(e.contentDOM.ownerDocument)}handleEvent(e){!YvA(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,A){let i=this.handlers[e];if(i){for(let n of i.observers)n(this.view,A);for(let n of i.handlers){if(A.defaultPrevented)break;if(n(this.view,A)){A.preventDefault();break}}}}ensureHandlers(e){let A=_vA(e),i=this.handlers,n=this.view.contentDOM;for(let o in A)if(o!="scroll"){let a=!A[o].handlers.length,r=i[o];r&&a!=!r.handlers.length&&(n.removeEventListener(o,this.handleEvent),r=null),r||n.addEventListener(o,this.handleEvent,{passive:a})}for(let o in i)o!="scroll"&&!A[o]&&n.removeEventListener(o,this.handleEvent);this.handlers=A}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&z$.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),lt.android&<.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let A;return lt.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&((A=H$.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||LvA.indexOf(e.key)>-1&&e.ctrlKey&&!e.shiftKey)?(this.pendingIOSKey=A||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let A=this.pendingIOSKey;return!A||A.key=="Enter"&&e&&e.from0?!0:lt.safari&&!lt.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}};function KX(t,e){return(A,i)=>{try{return e.call(t,i,A)}catch(n){Sr(A.state,n)}}}function _vA(t){let e=Object.create(null);function A(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of t){let n=i.spec,o=n&&n.plugin.domEventHandlers,a=n&&n.plugin.domEventObservers;if(o)for(let r in o){let s=o[r];s&&A(r).handlers.push(KX(i.value,s))}if(a)for(let r in a){let s=a[r];s&&A(r).observers.push(KX(i.value,s))}}for(let i in xc)A(i).handlers.push(xc[i]);for(let i in Nl)A(i).observers.push(Nl[i]);return e}var H$=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],LvA="dthko",z$=[16,17,18,20,91,92,224,225],Z5=6;function X5(t){return Math.max(0,t)*.7+8}function GvA(t,e){return Math.max(Math.abs(t.clientX-e.clientX),Math.abs(t.clientY-e.clientY))}var LN=class{constructor(e,A,i,n){this.view=e,this.startEvent=A,this.style=i,this.mustSelect=n,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=A,this.scrollParents=XyA(e.contentDOM),this.atoms=e.state.facet(gf).map(a=>a(e));let o=e.contentDOM.ownerDocument;o.addEventListener("mousemove",this.move=this.move.bind(this)),o.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=A.shiftKey,this.multiple=e.state.facet(er.allowMultipleSelections)&&KvA(e,A),this.dragging=JvA(e,A)&&j$(A)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&GvA(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let A=0,i=0,n=0,o=0,a=this.view.win.innerWidth,r=this.view.win.innerHeight;this.scrollParents.x&&({left:n,right:a}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:o,bottom:r}=this.scrollParents.y.getBoundingClientRect());let s=CF(this.view);e.clientX-s.left<=n+Z5?A=-X5(n-e.clientX):e.clientX+s.right>=a-Z5&&(A=X5(e.clientX-a)),e.clientY-s.top<=o+Z5?i=-X5(o-e.clientY):e.clientY+s.bottom>=r-Z5&&(i=X5(e.clientY-r)),this.setScrollSpeed(A,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,A){this.scrollSpeed={x:e,y:A},e||A?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:A}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),A&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=A,A=0),(e||A)&&this.view.win.scrollBy(e,A),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:A}=this,i=K$(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(A.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(A=>A.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function KvA(t,e){let A=t.state.facet(D$);return A.length?A[0](e):lt.mac?e.metaKey:e.ctrlKey}function UvA(t,e){let A=t.state.facet(y$);return A.length?A[0](e):lt.mac?!e.altKey:!e.ctrlKey}function JvA(t,e){let{main:A}=t.state.selection;if(A.empty)return!1;let i=DQ(t.root);if(!i||i.rangeCount==0)return!0;let n=i.getRangeAt(0).getClientRects();for(let o=0;o=e.clientX&&a.top<=e.clientY&&a.bottom>=e.clientY)return!0}return!1}function YvA(t,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let A=e.target,i;A!=t.contentDOM;A=A.parentNode)if(!A||A.nodeType==11||(i=Ha.get(A))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}var xc=Object.create(null),Nl=Object.create(null),O$=lt.ie&<.ie_version<15||lt.ios&<.webkit_version<604;function TvA(t){let e=t.dom.parentNode;if(!e)return;let A=e.appendChild(document.createElement("textarea"));A.style.cssText="position: fixed; left: -10000px; top: 10px",A.focus(),setTimeout(()=>{t.focus(),A.remove(),P$(t,A.value)},50)}function SD(t,e,A){for(let i of t.facet(e))A=i(A,t);return A}function P$(t,e){e=SD(t.state,gF,e);let{state:A}=t,i,n=1,o=A.toText(e),a=o.lines==A.selection.ranges.length;if(GN!=null&&A.selection.ranges.every(s=>s.empty)&&GN==o.toString()){let s=-1;i=A.changeByRange(g=>{let l=A.doc.lineAt(g.from);if(l.from==s)return{range:g};s=l.from;let C=A.toText((a?o.line(n++).text:e)+A.lineBreak);return{changes:{from:l.from,insert:C},range:de.cursor(g.from+C.length)}})}else a?i=A.changeByRange(s=>{let g=o.line(n++);return{changes:{from:s.from,to:s.to,insert:g.text},range:de.cursor(s.from+g.length)}}):i=A.replaceSelection(o);t.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}Nl.scroll=t=>{t.inputState.lastScrollTop=t.scrollDOM.scrollTop,t.inputState.lastScrollLeft=t.scrollDOM.scrollLeft};xc.keydown=(t,e)=>(t.inputState.setSelectionOrigin("select"),e.keyCode==27&&t.inputState.tabFocusMode!=0&&(t.inputState.tabFocusMode=Date.now()+2e3),!1);Nl.touchstart=(t,e)=>{t.inputState.lastTouchTime=Date.now(),t.inputState.setSelectionOrigin("select.pointer")};Nl.touchmove=t=>{t.inputState.setSelectionOrigin("select.pointer")};xc.mousedown=(t,e)=>{if(t.observer.flush(),t.inputState.lastTouchTime>Date.now()-2e3)return!1;let A=null;for(let i of t.state.facet(v$))if(A=i(t,e),A)break;if(!A&&e.button==0&&(A=zvA(t,e)),A){let i=!t.hasFocus;t.inputState.startMouseSelection(new LN(t,e,A,i)),i&&t.observer.ignore(()=>{B$(t.contentDOM);let o=t.root.activeElement;o&&!o.contains(t.contentDOM)&&o.blur()});let n=t.inputState.mouseSelection;if(n)return n.start(e),n.dragging===!1}else t.inputState.setSelectionOrigin("select.pointer");return!1};function UX(t,e,A,i){if(i==1)return de.cursor(e,A);if(i==2)return yvA(t.state,e,A);{let n=t.docView.lineAt(e,A),o=t.state.doc.lineAt(n?n.posAtEnd:e),a=n?n.posAtStart:o.from,r=n?n.posAtEnd:o.to;return rDate.now()-400&&Math.abs(e.clientX-t.clientX)<2&&Math.abs(e.clientY-t.clientY)<2?(YX+1)%3:1}function zvA(t,e){let A=t.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=j$(e),n=t.state.selection;return{update(o){o.docChanged&&(A.pos=o.changes.mapPos(A.pos),n=n.map(o.changes))},get(o,a,r){let s=t.posAndSideAtCoords({x:o.clientX,y:o.clientY},!1),g,l=UX(t,s.pos,s.assoc,i);if(A.pos!=s.pos&&!a){let C=UX(t,A.pos,A.assoc,i),I=Math.min(C.from,l.from),d=Math.max(C.to,l.to);l=I1&&(g=OvA(n,s.pos))?g:r?n.addRange(l):de.create([l])}}}function OvA(t,e){for(let A=0;A=e)return de.create(t.ranges.slice(0,A).concat(t.ranges.slice(A+1)),t.mainIndex==A?0:t.mainIndex-(t.mainIndex>A?1:0))}return null}xc.dragstart=(t,e)=>{let{selection:{main:A}}=t.state;if(e.target.draggable){let n=t.docView.tile.nearest(e.target);if(n&&n.isWidget()){let o=n.posAtStart,a=o+n.length;(o>=A.to||a<=A.from)&&(A=de.range(o,a))}}let{inputState:i}=t;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=A,e.dataTransfer&&(e.dataTransfer.setData("Text",SD(t.state,lF,t.state.sliceDoc(A.from,A.to))),e.dataTransfer.effectAllowed="copyMove"),!1};xc.dragend=t=>(t.inputState.draggedContent=null,!1);function HX(t,e,A,i){if(A=SD(t.state,gF,A),!A)return;let n=t.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:o}=t.inputState,a=i&&o&&UvA(t,e)?{from:o.from,to:o.to}:null,r={from:n,insert:A},s=t.state.changes(a?[a,r]:r);t.focus(),t.dispatch({changes:s,selection:{anchor:s.mapPos(n,-1),head:s.mapPos(n,1)},userEvent:a?"move.drop":"input.drop"}),t.inputState.draggedContent=null}xc.drop=(t,e)=>{if(!e.dataTransfer)return!1;if(t.state.readOnly)return!0;let A=e.dataTransfer.files;if(A&&A.length){let i=Array(A.length),n=0,o=()=>{++n==A.length&&HX(t,e,i.filter(a=>a!=null).join(t.state.lineBreak),!1)};for(let a=0;a{/[\x00-\x08\x0e-\x1f]{2}/.test(r.result)||(i[a]=r.result),o()},r.readAsText(A[a])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return HX(t,e,i,!0),!0}return!1};xc.paste=(t,e)=>{if(t.state.readOnly)return!0;t.observer.flush();let A=O$?null:e.clipboardData;return A?(P$(t,A.getData("text/plain")||A.getData("text/uri-list")),!0):(TvA(t),!1)};function PvA(t,e){let A=t.dom.parentNode;if(!A)return;let i=A.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),t.focus()},50)}function jvA(t){let e=[],A=[],i=!1;for(let n of t.selection.ranges)n.empty||(e.push(t.sliceDoc(n.from,n.to)),A.push(n));if(!e.length){let n=-1;for(let{from:o}of t.selection.ranges){let a=t.doc.lineAt(o);a.number>n&&(e.push(a.text),A.push({from:a.from,to:Math.min(t.doc.length,a.to+1)})),n=a.number}i=!0}return{text:SD(t,lF,e.join(t.lineBreak)),ranges:A,linewise:i}}var GN=null;xc.copy=xc.cut=(t,e)=>{let A=DQ(t.root);if(A&&!q3(t.contentDOM,A))return!1;let{text:i,ranges:n,linewise:o}=jvA(t.state);if(!i&&!o)return!1;GN=o?i:null,e.type=="cut"&&!t.state.readOnly&&t.dispatch({changes:n,scrollIntoView:!0,userEvent:"delete.cut"});let a=O$?null:e.clipboardData;return a?(a.clearData(),a.setData("text/plain",i),!0):(PvA(t,i),!1)};var q$=hg.define();function V$(t,e){let A=[];for(let i of t.facet(k$)){let n=i(t,e);n&&A.push(n)}return A.length?t.update({effects:A,annotations:q$.of(!0)}):null}function W$(t){setTimeout(()=>{let e=t.hasFocus;if(e!=t.inputState.notifiedFocused){let A=V$(t.state,e);A?t.dispatch(A):t.update([])}},10)}Nl.focus=t=>{t.inputState.lastFocusTime=Date.now(),!t.scrollDOM.scrollTop&&(t.inputState.lastScrollTop||t.inputState.lastScrollLeft)&&(t.scrollDOM.scrollTop=t.inputState.lastScrollTop,t.scrollDOM.scrollLeft=t.inputState.lastScrollLeft),W$(t)};Nl.blur=t=>{t.observer.clearSelectionRange(),W$(t)};Nl.compositionstart=Nl.compositionupdate=t=>{t.observer.editContext||(t.inputState.compositionFirstChange==null&&(t.inputState.compositionFirstChange=!0),t.inputState.composing<0&&(t.inputState.composing=0))};Nl.compositionend=t=>{t.observer.editContext||(t.inputState.composing=-1,t.inputState.compositionEndedAt=Date.now(),t.inputState.compositionPendingKey=!0,t.inputState.compositionPendingChange=t.observer.pendingRecords().length>0,t.inputState.compositionFirstChange=null,lt.chrome&<.android?t.observer.flushSoon():t.inputState.compositionPendingChange?Promise.resolve().then(()=>t.observer.flush()):setTimeout(()=>{t.inputState.composing<0&&t.docView.hasComposition&&t.update([])},50))};Nl.contextmenu=t=>{t.inputState.lastContextMenu=Date.now()};xc.beforeinput=(t,e)=>{var A,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(t.inputState.insertingText=e.data,t.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&t.observer.editContext){let o=(A=e.dataTransfer)===null||A===void 0?void 0:A.getData("text/plain"),a=e.getTargetRanges();if(o&&a.length){let r=a[0],s=t.posAtDOM(r.startContainer,r.startOffset),g=t.posAtDOM(r.endContainer,r.endOffset);return IF(t,{from:s,to:g,insert:t.state.toText(o)},null),!0}}let n;if(lt.chrome&<.android&&(n=H$.find(o=>o.inputType==e.inputType))&&(t.observer.delayAndroidKey(n.key,n.keyCode),n.key=="Backspace"||n.key=="Delete")){let o=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var a;(((a=window.visualViewport)===null||a===void 0?void 0:a.height)||0)>o+10&&t.hasFocus&&(t.contentDOM.blur(),t.focus())},100)}return lt.ios&&e.inputType=="deleteContentForward"&&t.observer.flushSoon(),lt.safari&&e.inputType=="insertText"&&t.inputState.composing>=0&&setTimeout(()=>Nl.compositionend(t,e),20),!1};var zX=new Set;function qvA(t){zX.has(t)||(zX.add(t),t.addEventListener("copy",()=>{}),t.addEventListener("cut",()=>{}))}var OX=["pre-wrap","normal","pre-line","break-spaces"],kQ=!1;function PX(){kQ=!1}var KN=class{constructor(e){this.lineWrapping=e,this.doc=bn.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,A){let i=this.doc.lineAt(A).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((A-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return OX.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let A=!1;for(let i=0;i-1,s=Math.abs(A-this.lineHeight)>.3||this.lineWrapping!=r||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=r,this.lineHeight=A,this.charWidth=i,this.textHeight=n,this.lineLength=o,s){this.heightSamples={};for(let g=0;g0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>aD&&(kQ=!0),this.height=e)}replace(e,A,i){return t.of(i)}decomposeLeft(e,A){A.push(this)}decomposeRight(e,A){A.push(this)}applyChanges(e,A,i,n){let o=this,a=i.doc;for(let r=n.length-1;r>=0;r--){let{fromA:s,toA:g,fromB:l,toB:C}=n[r],I=o.lineAt(s,oa.ByPosNoHeight,i.setDoc(A),0,0),d=I.to>=g?I:o.lineAt(g,oa.ByPosNoHeight,i,0,0);for(C+=d.to-g,g=d.to;r>0&&I.from<=n[r-1].toA;)s=n[r-1].fromA,l=n[r-1].fromB,r--,so*2){let r=e[A-1];r.break?e.splice(--A,1,r.left,null,r.right):e.splice(--A,1,r.left,r.right),i+=1+r.break,n-=r.size}else if(o>n*2){let r=e[i];r.break?e.splice(i,1,r.left,null,r.right):e.splice(i,1,r.left,r.right),i+=2+r.break,o-=r.size}else break;else if(n=o&&a(this.lineAt(0,oa.ByPos,i,n,o))}setMeasuredHeight(e){let A=e.heights[e.index++];A<0?(this.spaceAbove=-A,A=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(A)}updateHeight(e,A=0,i=!1,n){return n&&n.from<=A&&n.more&&this.setMeasuredHeight(n),this.outdated=!1,this}toString(){return`block(${this.length})`}},xl=class t extends fD{constructor(e,A,i){super(e,A,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,A){return new Mc(A,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,A,i){let n=i[0];return i.length==1&&(n instanceof t||n instanceof MI&&n.flags&4)&&Math.abs(this.length-n.length)<10?(n instanceof MI?n=new t(n.length,this.height,this.spaceAbove):n.height=this.height,this.outdated||(n.outdated=!1),n):Pg.of(i)}updateHeight(e,A=0,i=!1,n){return n&&n.from<=A&&n.more?this.setMeasuredHeight(n):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},MI=class t extends Pg{constructor(e){super(e,0)}heightMetrics(e,A){let i=e.doc.lineAt(A).number,n=e.doc.lineAt(A+this.length).number,o=n-i+1,a,r=0;if(e.lineWrapping){let s=Math.min(this.height,e.lineHeight*o);a=s/o,this.length>o+1&&(r=(this.height-s)/(this.length-o-1))}else a=this.height/o;return{firstLine:i,lastLine:n,perLine:a,perChar:r}}blockAt(e,A,i,n){let{firstLine:o,lastLine:a,perLine:r,perChar:s}=this.heightMetrics(A,n);if(A.lineWrapping){let g=n+(e0){let o=i[i.length-1];o instanceof t?i[i.length-1]=new t(o.length+n):i.push(null,new t(n-1))}if(e>0){let o=i[0];o instanceof t?i[0]=new t(e+o.length):i.unshift(new t(e-1),null)}return Pg.of(i)}decomposeLeft(e,A){A.push(new t(e-1),null)}decomposeRight(e,A){A.push(null,new t(this.length-e-1))}updateHeight(e,A=0,i=!1,n){let o=A+this.length;if(n&&n.from<=A+this.length&&n.more){let a=[],r=Math.max(A,n.from),s=-1;for(n.from>A&&a.push(new t(n.from-A-1).updateHeight(e,A));r<=o&&n.more;){let l=e.doc.lineAt(r).length;a.length&&a.push(null);let C=n.heights[n.index++],I=0;C<0&&(I=-C,C=n.heights[n.index++]),s==-1?s=C:Math.abs(C-s)>=aD&&(s=-2);let d=new xl(l,C,I);d.outdated=!1,a.push(d),r+=l+1}r<=o&&a.push(null,new t(o-r).updateHeight(e,r));let g=Pg.of(a);return(s<0||Math.abs(g.height-this.height)>=aD||Math.abs(s-this.heightMetrics(e,A).perLine)>=aD)&&(kQ=!0),uD(this,g)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(A,A+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},JN=class extends Pg{constructor(e,A,i){super(e.length+A+i.length,e.height+i.height,A|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,A,i,n){let o=i+this.left.height;return er))return g;let l=A==oa.ByPosNoHeight?oa.ByPosNoHeight:oa.ByPos;return s?g.join(this.right.lineAt(r,l,i,a,r)):this.left.lineAt(r,l,i,n,o).join(g)}forEachLine(e,A,i,n,o,a){let r=n+this.left.height,s=o+this.left.length+this.break;if(this.break)e=s&&this.right.forEachLine(e,A,i,r,s,a);else{let g=this.lineAt(s,oa.ByPos,i,n,o);e=e&&g.from<=A&&a(g),A>g.to&&this.right.forEachLine(g.to+1,A,i,r,s,a)}}replace(e,A,i){let n=this.left.length+this.break;if(Athis.left.length)return this.balanced(this.left,this.right.replace(e-n,A-n,i));let o=[];e>0&&this.decomposeLeft(e,o);let a=o.length;for(let r of i)o.push(r);if(e>0&&jX(o,a-1),A=i&&A.push(null)),e>i&&this.right.decomposeLeft(e-i,A)}decomposeRight(e,A){let i=this.left.length,n=i+this.break;if(e>=n)return this.right.decomposeRight(e-n,A);e2*A.size||A.size>2*e.size?Pg.of(this.break?[e,null,A]:[e,A]):(this.left=uD(this.left,e),this.right=uD(this.right,A),this.setHeight(e.height+A.height),this.outdated=e.outdated||A.outdated,this.size=e.size+A.size,this.length=e.length+this.break+A.length,this)}updateHeight(e,A=0,i=!1,n){let{left:o,right:a}=this,r=A+o.length+this.break,s=null;return n&&n.from<=A+o.length&&n.more?s=o=o.updateHeight(e,A,i,n):o.updateHeight(e,A,i),n&&n.from<=r+a.length&&n.more?s=a=a.updateHeight(e,r,i,n):a.updateHeight(e,r,i),s?this.balanced(o,a):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function jX(t,e){let A,i;t[e]==null&&(A=t[e-1])instanceof MI&&(i=t[e+1])instanceof MI&&t.splice(e-1,3,new MI(A.length+1+i.length))}var WvA=5,YN=class t{constructor(e,A){this.pos=e,this.oracle=A,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,A){if(this.lineStart>-1){let i=Math.min(A,this.lineEnd),n=this.nodes[this.nodes.length-1];n instanceof xl?n.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new xl(i-this.pos,-1,0)),this.writtenTo=i,A>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=A}point(e,A,i){if(e=WvA)&&this.addLineDeco(n,o,a)}else A>e&&this.span(e,A);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:A}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=A,this.writtenToe&&this.nodes.push(new xl(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,A){let i=new MI(A-e);return this.oracle.doc.lineAt(e).to==A&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof xl)return e;let A=new xl(0,-1,0);return this.nodes.push(A),A}addBlock(e){this.enterLine();let A=e.deco;A&&A.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,A&&A.endSide>0&&(this.covering=e)}addLineDeco(e,A,i){let n=this.ensureLine();n.length+=i,n.collapsed+=i,n.widgetHeight=Math.max(n.widgetHeight,e),n.breaks+=A,this.writtenTo=this.pos=this.pos+i}finish(e){let A=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(A instanceof xl)&&!this.isCovered?this.nodes.push(new xl(0,-1,0)):(this.writtenTol.clientHeight||l.scrollWidth>l.clientWidth)&&C.overflow!="visible"){let I=l.getBoundingClientRect();o=Math.max(o,I.left),a=Math.min(a,I.right),r=Math.max(r,I.top),s=Math.min(g==t.parentNode?n.innerHeight:s,I.bottom)}g=C.position=="absolute"||C.position=="fixed"?l.offsetParent:l.parentNode}else if(g.nodeType==11)g=g.host;else break;return{left:o-A.left,right:Math.max(o,a)-A.left,top:r-(A.top+e),bottom:Math.max(r,s)-(A.top+e)}}function $vA(t){let e=t.getBoundingClientRect(),A=t.ownerDocument.defaultView||window;return e.left0&&e.top0}function A7A(t,e){let A=t.getBoundingClientRect();return{left:0,right:A.right-A.left,top:e,bottom:A.bottom-(A.top+e)}}var Af=class{constructor(e,A,i,n){this.from=e,this.to=A,this.size=i,this.displaySize=n}static same(e,A){if(e.length!=A.length)return!1;for(let i=0;itypeof i!="function"&&i.class=="cm-lineWrapping");this.heightOracle=new KN(A),this.stateDeco=VX(e),this.heightMap=Pg.empty().applyChanges(this.stateDeco,bn.empty,this.heightOracle.setDoc(e.doc),[new Sc(0,0,0,e.doc.length)]);for(let i=0;i<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());i++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=yt.set(this.lineGaps.map(i=>i.draw(this,!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:A}=this.state.selection;for(let i=0;i<=1;i++){let n=i?A.head:A.anchor;if(!e.some(({from:o,to:a})=>n>=o&&n<=a)){let{from:o,to:a}=this.lineBlockAt(n);e.push(new uQ(o,a))}}return this.viewports=e.sort((i,n)=>i.from-n.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?qX:new zN(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(P3(e,this.scaler))})}update(e,A=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=VX(this.state);let n=e.changedRanges,o=Sc.extendWithRanges(n,ZvA(i,this.stateDeco,e?e.changes:Vr.empty(this.state.doc.length))),a=this.heightMap.height,r=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollTop);PX(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),o),(this.heightMap.height!=a||kQ)&&(e.flags|=2),r?(this.scrollAnchorPos=e.changes.mapPos(r.from,-1),this.scrollAnchorHeight=r.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=a);let s=o.length?this.mapViewport(this.viewport,e.changes):this.viewport;(A&&(A.range.heads.to)||!this.viewportIsAppropriate(s))&&(s=this.getViewport(0,A));let g=s.from!=this.viewport.from||s.to!=this.viewport.to;this.viewport=s,e.flags|=this.updateForViewport(),(g||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),A&&(this.scrollTarget=A),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(S$)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let A=e.contentDOM,i=window.getComputedStyle(A),n=this.heightOracle,o=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?mo.RTL:mo.LTR;let a=this.heightOracle.mustRefreshForWrapping(o)||this.mustMeasureContent,r=A.getBoundingClientRect(),s=a||this.mustMeasureContent||this.contentDOMHeight!=r.height;this.contentDOMHeight=r.height,this.mustMeasureContent=!1;let g=0,l=0;if(r.width&&r.height){let{scaleX:M,scaleY:D}=d$(A,r);(M>.005&&Math.abs(this.scaleX-M)>.005||D>.005&&Math.abs(this.scaleY-D)>.005)&&(this.scaleX=M,this.scaleY=D,g|=16,a=s=!0)}let C=(parseInt(i.paddingTop)||0)*this.scaleY,I=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=C||this.paddingBottom!=I)&&(this.paddingTop=C,this.paddingBottom=I,g|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(n.lineWrapping&&(s=!0),this.editorWidth=e.scrollDOM.clientWidth,g|=16);let d=e.scrollDOM.scrollTop*this.scaleY;this.scrollTop!=d&&(this.scrollAnchorHeight=-1,this.scrollTop=d),this.scrolledToBottom=E$(e.scrollDOM);let B=(this.printing?A7A:XvA)(A,this.paddingTop),E=B.top-this.pixelViewport.top,Q=B.bottom-this.pixelViewport.bottom;this.pixelViewport=B;let f=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(f!=this.inView&&(this.inView=f,f&&(s=!0)),!this.inView&&!this.scrollTarget&&!$vA(e.dom))return 0;let b=r.width;if((this.contentDOMWidth!=b||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=r.width,this.editorHeight=e.scrollDOM.clientHeight,g|=16),s){let M=e.docView.measureVisibleLineHeights(this.viewport);if(n.mustRefreshForHeights(M)&&(a=!0),a||n.lineWrapping&&Math.abs(b-this.contentDOMWidth)>n.charWidth){let{lineHeight:D,charWidth:F,textHeight:_}=e.docView.measureTextSize();a=D>0&&n.refresh(o,D,F,_,Math.max(5,b/F),M),a&&(e.docView.minWidth=0,g|=16)}E>0&&Q>0?l=Math.max(E,Q):E<0&&Q<0&&(l=Math.min(E,Q)),PX();for(let D of this.viewports){let F=D.from==this.viewport.from?M:e.docView.measureVisibleLineHeights(D);this.heightMap=(a?Pg.empty().applyChanges(this.stateDeco,bn.empty,this.heightOracle,[new Sc(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(n,0,a,new UN(D.from,F))}kQ&&(g|=2)}let S=!this.viewportIsAppropriate(this.viewport,l)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return S&&(g&2&&(g|=this.updateScaler()),this.viewport=this.getViewport(l,this.scrollTarget),g|=this.updateForViewport()),(g&2||S)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(a?[]:this.lineGaps,e)),g|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),g}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,A){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),n=this.heightMap,o=this.heightOracle,{visibleTop:a,visibleBottom:r}=this,s=new uQ(n.lineAt(a-i*1e3,oa.ByHeight,o,0,0).from,n.lineAt(r+(1-i)*1e3,oa.ByHeight,o,0,0).to);if(A){let{head:g}=A.range;if(gs.to){let l=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),C=n.lineAt(g,oa.ByPos,o,0,0),I;A.y=="center"?I=(C.top+C.bottom)/2-l/2:A.y=="start"||A.y=="nearest"&&g=r+Math.max(10,Math.min(i,250)))&&n>a-2*1e3&&o>1,a=n<<1;if(this.defaultTextDirection!=mo.LTR&&!i)return[];let r=[],s=(l,C,I,d)=>{if(C-ll&&ff.from>=I.from&&f.to<=I.to&&Math.abs(f.from-l)f.fromb));if(!Q){if(CS.from<=C&&S.to>=C)){let S=A.moveToLineBoundary(de.cursor(C),!1,!0).head;S>l&&(C=S)}let f=this.gapSize(I,l,C,d),b=i||f<2e6?f:2e6;Q=new Af(l,C,f,b)}r.push(Q)},g=l=>{if(l.length2e6)for(let F of e)F.from>=l.from&&F.froml.from&&s(l.from,d,l,C),BA.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let A=this.stateDeco;this.lineGaps.length&&(A=A.concat(this.lineGapDeco));let i=[];to.spans(A,this.viewport.from,this.viewport.to,{span(o,a){i.push({from:o,to:a})},point(){}},20);let n=0;if(i.length!=this.visibleRanges.length)n=12;else for(let o=0;o=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(A=>A.from<=e&&A.to>=e)||P3(this.heightMap.lineAt(e,oa.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(A=>A.top<=e&&A.bottom>=e)||P3(this.heightMap.lineAt(this.scaler.fromDOM(e),oa.ByHeight,this.heightOracle,0,0),this.scaler)}scrollAnchorAt(e){let A=this.lineBlockAtHeight(e+8);return A.from>=this.viewport.from||this.viewportLines[0].top-e>200?A:this.viewportLines[0]}elementAtHeight(e){return P3(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},uQ=class{constructor(e,A){this.from=e,this.to=A}};function e7A(t,e,A){let i=[],n=t,o=0;return to.spans(A,t,e,{span(){},point(a,r){a>n&&(i.push({from:n,to:a}),o+=a-n),n=r}},20),n=1)return e[e.length-1].to;let i=Math.floor(t*A);for(let n=0;;n++){let{from:o,to:a}=e[n],r=a-o;if(i<=r)return o+i;i-=r}}function AD(t,e){let A=0;for(let{from:i,to:n}of t.ranges){if(e<=n){A+=e-i;break}A+=n-i}return A/t.total}function t7A(t,e){for(let A of t)if(e(A))return A}var qX={toDOM(t){return t},fromDOM(t){return t},scale:1,eq(t){return t==this}};function VX(t){let e=t.facet(kD).filter(i=>typeof i!="function"),A=t.facet(cF).filter(i=>typeof i!="function");return A.length&&e.push(to.join(A)),e}var zN=class t{constructor(e,A,i){let n=0,o=0,a=0;this.viewports=i.map(({from:r,to:s})=>{let g=A.lineAt(r,oa.ByPos,e,0,0).top,l=A.lineAt(s,oa.ByPos,e,0,0).bottom;return n+=l-g,{from:r,to:s,top:g,bottom:l,domTop:0,domBottom:0}}),this.scale=(7e6-n)/(A.height-n);for(let r of this.viewports)r.domTop=a+(r.top-o)*this.scale,a=r.domBottom=r.domTop+(r.bottom-r.top),o=r.bottom}toDOM(e){for(let A=0,i=0,n=0;;A++){let o=AA.from==e.viewports[i].from&&A.to==e.viewports[i].to):!1}};function P3(t,e){if(e.scale==1)return t;let A=e.toDOM(t.top),i=e.toDOM(t.bottom);return new Mc(t.from,t.length,A,i-A,Array.isArray(t._content)?t._content.map(n=>P3(n,e)):t._content)}var eD=We.define({combine:t=>t.join(" ")}),rN=We.define({combine:t=>t.indexOf(!0)>-1}),ON=Sl.newName(),Z$=Sl.newName(),X$=Sl.newName(),$$={"&light":"."+Z$,"&dark":"."+X$};function PN(t,e,A){return new Sl(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,n=>{if(n=="&")return t;if(!A||!A[n])throw new RangeError(`Unsupported selector: ${n}`);return A[n]}):t+" "+i}})}var i7A=PN("."+ON,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},$$),n7A={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},sN=lt.ie&<.ie_version<=11,jN=class{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new hN,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(A=>{for(let i of A)this.queue.push(i);(lt.ie&<.ie_version<=11||lt.ios&&e.composing)&&A.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&<.android&&e.constructor.EDIT_CONTEXT!==!1&&!(lt.chrome&<.chrome_version<126)&&(this.editContext=new qN(e),e.state.facet(JC)&&(e.contentDOM.editContext=this.editContext.editContext)),sN&&(this.onCharData=A=>{this.queue.push({target:A.target,type:"characterData",oldValue:A.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var A;((A=this.view.docView)===null||A===void 0?void 0:A.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),A.length>0&&A[A.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(A=>{A.length>0&&A[A.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((A,i)=>A!=e[i]))){this.gapIntersection.disconnect();for(let A of e)this.gapIntersection.observe(A);this.gaps=e}}onSelectionChange(e){let A=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,n=this.selectionRange;if(i.state.facet(JC)?i.root.activeElement!=this.dom:!q3(this.dom,n))return;let o=n.anchorNode&&i.docView.tile.nearest(n.anchorNode);if(o&&o.isWidget()&&o.widget.ignoreEvent(e)){A||(this.selectionChanged=!1);return}(lt.ie&<.ie_version<=11||lt.android&<.chrome)&&!i.state.selection.main.empty&&n.focusNode&&V3(n.focusNode,n.focusOffset,n.anchorNode,n.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,A=DQ(e.root);if(!A)return!1;let i=lt.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&o7A(this.view,A)||A;if(!i||this.selectionRange.eq(i))return!1;let n=q3(this.dom,i);return n&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let o=this.delayedAndroidKey;o&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=o.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&o.force&&wQ(this.dom,o.key,o.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(n)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:A,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let A=-1,i=-1,n=!1;for(let o of e){let a=this.readMutation(o);a&&(a.typeOver&&(n=!0),A==-1?{from:A,to:i}=a:(A=Math.min(a.from,A),i=Math.max(a.to,i)))}return{from:A,to:i,typeOver:n}}readChange(){let{from:e,to:A,typeOver:i}=this.processRecords(),n=this.selectionChanged&&q3(this.dom,this.selectionRange);if(e<0&&!n)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let o=new FN(this.view,e,A,i);return this.view.docView.domChanged={newSel:o.newSel?o.newSel.main:null},o}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let A=this.readChange();if(!A)return this.view.requestMeasure(),!1;let i=this.view.state,n=Y$(this.view,A);return this.view.state==i&&(A.domChanged||A.newSel&&!hD(this.view.state.selection,A.newSel.main))&&this.view.update([]),n}readMutation(e){let A=this.view.docView.tile.nearest(e.target);if(!A||A.isWidget())return null;if(A.markDirty(e.type=="attributes"),e.type=="childList"){let i=WX(A,e.previousSibling||e.target.previousSibling,-1),n=WX(A,e.nextSibling||e.target.nextSibling,1);return{from:i?A.posAfter(i):A.posAtStart,to:n?A.posBefore(n):A.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:A.posAtStart,to:A.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(JC)!=e.state.facet(JC)&&(e.view.contentDOM.editContext=e.state.facet(JC)?this.editContext.editContext:null))}destroy(){var e,A,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(A=this.gapIntersection)===null||A===void 0||A.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let n of this.scrollTargets)n.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}};function WX(t,e,A){for(;e;){let i=Ha.get(e);if(i&&i.parent==t)return i;let n=e.parentNode;e=n!=t.dom?n:A>0?e.nextSibling:e.previousSibling}return null}function ZX(t,e){let A=e.startContainer,i=e.startOffset,n=e.endContainer,o=e.endOffset,a=t.docView.domAtPos(t.state.selection.main.anchor,1);return V3(a.node,a.offset,n,o)&&([A,i,n,o]=[n,o,A,i]),{anchorNode:A,anchorOffset:i,focusNode:n,focusOffset:o}}function o7A(t,e){if(e.getComposedRanges){let n=e.getComposedRanges(t.root)[0];if(n)return ZX(t,n)}let A=null;function i(n){n.preventDefault(),n.stopImmediatePropagation(),A=n.getTargetRanges()[0]}return t.contentDOM.addEventListener("beforeinput",i,!0),t.dom.ownerDocument.execCommand("indent"),t.contentDOM.removeEventListener("beforeinput",i,!0),A?ZX(t,A):null}var qN=class{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let A=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let n=e.state.selection.main,{anchor:o,head:a}=n,r=this.toEditorPos(i.updateRangeStart),s=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:r,drifted:!1});let g=s-r>i.text.length;r==this.from&&othis.to&&(s=o);let l=T$(e.state.sliceDoc(r,s),i.text,(g?n.from:n.to)-r,g?"end":null);if(!l){let I=de.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));hD(I,n)||e.dispatch({selection:I,userEvent:"select"});return}let C={from:l.from+r,to:l.toA+r,insert:bn.of(i.text.slice(l.from,l.toB).split(` -`))};if((lt.mac||lt.android)&&C.from==a-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(C={from:r,to:s,insert:bn.of([i.text.replace("."," ")])}),this.pendingContextChange=C,!e.state.readOnly){let I=this.to-this.from+(C.to-C.from+C.insert.length);IF(e,C,de.single(this.toEditorPos(i.selectionStart,I),this.toEditorPos(i.selectionEnd,I)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),C.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(A.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(A.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let n=[],o=null;for(let a=this.toEditorPos(i.rangeStart),r=this.toEditorPos(i.rangeEnd);a{let n=[];for(let o of i.getTextFormats()){let a=o.underlineStyle,r=o.underlineThickness;if(!/none/i.test(a)&&!/none/i.test(r)){let s=this.toEditorPos(o.rangeStart),g=this.toEditorPos(o.rangeEnd);if(s{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)A.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let n=DQ(i.root);n&&n.rangeCount&&this.editContext.updateSelectionBounds(n.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let A=0,i=!1,n=this.pendingContextChange;return e.changes.iterChanges((o,a,r,s,g)=>{if(i)return;let l=g.length-(a-o);if(n&&a>=n.to)if(n.from==o&&n.to==a&&n.insert.eq(g)){n=this.pendingContextChange=null,A+=l,this.to+=l;return}else n=null,this.revertPending(e.state);if(o+=A,a+=A,a<=this.from)this.from+=l,this.to+=l;else if(othis.to||this.to-this.from+g.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(o),this.toContextPos(a),g.toString()),this.to+=l}A+=l}),n&&!i&&this.revertPending(e.state),!i}update(e){let A=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(n=>!n.isUserEvent("input.type")&&n.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||A)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:A}=e.selection.main;this.from=Math.max(0,A-1e4),this.to=Math.min(e.doc.length,A+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let A=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(A.from),this.toContextPos(A.from+A.insert.length),e.doc.sliceString(A.from,A.to))}setSelection(e){let{main:A}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,A.anchor))),n=this.toContextPos(A.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=n)&&this.editContext.updateSelection(i,n)}rangeIsValid(e){let{head:A}=e.selection.main;return!(this.from>0&&A-this.from<500||this.to1e4*3)}toEditorPos(e,A=this.to-this.from){e=Math.min(e,A);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let A=this.composing;return A&&A.drifted?A.contextBase+(e-A.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}},ii=(()=>{class t{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(A={}){var i;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),A.parent&&A.parent.appendChild(this.dom);let{dispatch:n}=A;this.dispatchTransactions=A.dispatchTransactions||n&&(o=>o.forEach(a=>n(a,this)))||(o=>this.update(o)),this.dispatch=this.dispatch.bind(this),this._root=A.root||$yA(A.parent)||document,this.viewState=new mD(A.state||er.create(A)),A.scrollTo&&A.scrollTo.is(W5)&&(this.viewState.scrollTarget=A.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(hQ).map(o=>new Z3(o));for(let o of this.plugins)o.update(this);this.observer=new jN(this),this.inputState=new _N(this),this.inputState.ensureHandlers(this.plugins),this.docView=new ED(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((i=document.fonts)===null||i===void 0)&&i.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent=!0,this.requestMeasure()})}dispatch(...A){let i=A.length==1&&A[0]instanceof N0?A:A.length==1&&Array.isArray(A[0])?A[0]:[this.state.update(...A)];this.dispatchTransactions(i,this)}update(A){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let i=!1,n=!1,o,a=this.state;for(let d of A){if(d.startState!=a)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");a=d.state}if(this.destroyed){this.viewState.state=a;return}let r=this.hasFocus,s=0,g=null;A.some(d=>d.annotation(q$))?(this.inputState.notifiedFocused=r,s=1):r!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=r,g=V$(a,r),g||(s=1));let l=this.observer.delayedAndroidKey,C=null;if(l?(this.observer.clearDelayedAndroidKey(),C=this.observer.readChange(),(C&&!this.state.doc.eq(a.doc)||!this.state.selection.eq(a.selection))&&(C=null)):this.observer.clear(),a.facet(er.phrases)!=this.state.facet(er.phrases))return this.setState(a);o=dD.create(this,a,A),o.flags|=s;let I=this.viewState.scrollTarget;try{this.updateState=2;for(let d of A){if(I&&(I=I.map(d.changes)),d.scrollIntoView){let{main:B}=d.state.selection;I=new W3(B.empty?B:de.cursor(B.head,B.head>B.anchor?-1:1))}for(let B of d.effects)B.is(W5)&&(I=B.value.clip(this.state))}this.viewState.update(o,I),this.bidiCache=pD.update(this.bidiCache,o.changes),o.empty||(this.updatePlugins(o),this.inputState.update(o)),i=this.docView.update(o),this.state.facet(z3)!=this.styleModules&&this.mountStyles(),n=this.updateAttrs(),this.showAnnouncements(A),this.docView.updateSelection(i,A.some(d=>d.isUserEvent("select.pointer")))}finally{this.updateState=0}if(o.startState.facet(eD)!=o.state.facet(eD)&&(this.viewState.mustMeasureContent=!0),(i||n||I||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),i&&this.docViewUpdate(),!o.empty)for(let d of this.state.facet(iN))try{d(o)}catch(B){Sr(this.state,B,"update listener")}(g||C)&&Promise.resolve().then(()=>{g&&this.state==g.startState&&this.dispatch(g),C&&!Y$(this,C)&&l.force&&wQ(this.contentDOM,l.key,l.keyCode)})}setState(A){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=A;return}this.updateState=2;let i=this.hasFocus;try{for(let n of this.plugins)n.destroy(this);this.viewState=new mD(A),this.plugins=A.facet(hQ).map(n=>new Z3(n)),this.pluginMap.clear();for(let n of this.plugins)n.update(this);this.docView.destroy(),this.docView=new ED(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}i&&this.focus(),this.requestMeasure()}updatePlugins(A){let i=A.startState.facet(hQ),n=A.state.facet(hQ);if(i!=n){let o=[];for(let a of n){let r=i.indexOf(a);if(r<0)o.push(new Z3(a));else{let s=this.plugins[r];s.mustUpdate=A,o.push(s)}}for(let a of this.plugins)a.mustUpdate!=A&&a.destroy(this);this.plugins=o,this.pluginMap.clear()}else for(let o of this.plugins)o.mustUpdate=A;for(let o=0;o-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,A&&this.observer.forceFlush();let i=null,n=this.scrollDOM,o=n.scrollTop*this.scaleY,{scrollAnchorPos:a,scrollAnchorHeight:r}=this.viewState;Math.abs(o-this.viewState.scrollTop)>1&&(r=-1),this.viewState.scrollAnchorHeight=-1;try{for(let s=0;;s++){if(r<0)if(E$(n))a=-1,r=this.viewState.heightMap.height;else{let B=this.viewState.scrollAnchorAt(o);a=B.from,r=B.top}this.updateState=1;let g=this.viewState.measure(this);if(!g&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(s>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let l=[];g&4||([this.measureRequests,l]=[l,this.measureRequests]);let C=l.map(B=>{try{return B.read(this)}catch(E){return Sr(this.state,E),XX}}),I=dD.create(this,this.state,[]),d=!1;I.flags|=g,i?i.flags|=g:i=I,this.updateState=2,I.empty||(this.updatePlugins(I),this.inputState.update(I),this.updateAttrs(),d=this.docView.update(I),d&&this.docViewUpdate());for(let B=0;B1||E<-1){o=o+E,n.scrollTop=o/this.scaleY,r=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(i&&!i.empty)for(let s of this.state.facet(iN))s(i)}get themeClasses(){return ON+" "+(this.state.facet(rN)?X$:Z$)+" "+this.state.facet(eD)}updateAttrs(){let A=$X(this,xX,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),i={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(JC)?"true":"false",class:"cm-content",style:`${lt.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(i["aria-readonly"]="true"),$X(this,pN,i);let n=this.observer.ignore(()=>{let o=bX(this.contentDOM,this.contentAttrs,i),a=bX(this.dom,this.editorAttrs,A);return o||a});return this.editorAttrs=A,this.contentAttrs=i,n}showAnnouncements(A){let i=!0;for(let n of A)for(let o of n.effects)if(o.is(t.announce)){i&&(this.announceDOM.textContent=""),i=!1;let a=this.announceDOM.appendChild(document.createElement("div"));a.textContent=o.value}}mountStyles(){this.styleModules=this.state.facet(z3);let A=this.state.facet(t.cspNonce);Sl.mount(this.root,this.styleModules.concat(i7A).reverse(),A?{nonce:A}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(A){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),A){if(this.measureRequests.indexOf(A)>-1)return;if(A.key!=null){for(let i=0;in.plugin==A)||null),i&&i.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(A){return this.readMeasured(),this.viewState.elementAtHeight(A)}lineBlockAtHeight(A){return this.readMeasured(),this.viewState.lineBlockAtHeight(A)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(A){return this.viewState.lineBlockAt(A)}get contentHeight(){return this.viewState.contentHeight}moveByChar(A,i,n){return aN(this,A,LX(this,A,i,n))}moveByGroup(A,i){return aN(this,A,LX(this,A,i,n=>MvA(this,A.head,n)))}visualLineSide(A,i){let n=this.bidiSpans(A),o=this.textDirectionAt(A.from),a=n[i?n.length-1:0];return de.cursor(a.side(i,o)+A.from,a.forward(!i,o)?1:-1)}moveToLineBoundary(A,i,n=!0){return bvA(this,A,i,n)}moveVertically(A,i,n){return aN(this,A,kvA(this,A,i,n))}domAtPos(A,i=1){return this.docView.domAtPos(A,i)}posAtDOM(A,i=0){return this.docView.posFromDOM(A,i)}posAtCoords(A,i=!0){this.readMeasured();let n=RN(this,A,i);return n&&n.pos}posAndSideAtCoords(A,i=!0){return this.readMeasured(),RN(this,A,i)}coordsAtPos(A,i=1){this.readMeasured();let n=this.docView.coordsAt(A,i);if(!n||n.left==n.right)return n;let o=this.state.doc.lineAt(A),a=this.bidiSpans(o),r=a[kc.find(a,A-o.from,-1,i)];return ID(n,r.dir==mo.LTR==i>0)}coordsForChar(A){return this.readMeasured(),this.docView.coordsForChar(A)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(A){return!this.state.facet(SX)||Athis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(A))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(A){if(A.length>a7A)return p$(A.length);let i=this.textDirectionAt(A.from),n;for(let a of this.bidiCache)if(a.from==A.from&&a.dir==i&&(a.fresh||m$(a.isolates,n=RX(this,A))))return a.order;n||(n=RX(this,A));let o=rvA(A.text,i,n);return this.bidiCache.push(new pD(A.from,A.to,i,n,!0,o)),o}get hasFocus(){var A;return(this.dom.ownerDocument.hasFocus()||lt.safari&&((A=this.inputState)===null||A===void 0?void 0:A.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{B$(this.contentDOM),this.docView.updateSelection()})}setRoot(A){this._root!=A&&(this._root=A,this.observer.setWindow((A.nodeType==9?A:A.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let A of this.plugins)A.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(A,i={}){return W5.of(new W3(typeof A=="number"?de.cursor(A):A,i.y,i.x,i.yMargin,i.xMargin))}scrollSnapshot(){let{scrollTop:A,scrollLeft:i}=this.scrollDOM,n=this.viewState.scrollAnchorAt(A);return W5.of(new W3(de.cursor(n.from),"start","start",n.top-A,i,!0))}setTabFocusMode(A){A==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof A=="boolean"?this.inputState.tabFocusMode=A?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+A)}static domEventHandlers(A){return Go.define(()=>({}),{eventHandlers:A})}static domEventObservers(A){return Go.define(()=>({}),{eventObservers:A})}static theme(A,i){let n=Sl.newName(),o=[eD.of(n),z3.of(PN(`.${n}`,A))];return i&&i.dark&&o.push(rN.of(!0)),o}static baseTheme(A){return bc.lowest(z3.of(PN("."+ON,A,$$)))}static findFromDOM(A){var i;let n=A.querySelector(".cm-content"),o=n&&Ha.get(n)||Ha.get(A);return((i=o?.root)===null||i===void 0?void 0:i.view)||null}}return t.styleModule=z3,t.inputHandler=M$,t.clipboardInputFilter=gF,t.clipboardOutputFilter=lF,t.scrollHandler=x$,t.focusChangeEffect=k$,t.perLineTextDirection=SX,t.exceptionSink=b$,t.updateListener=iN,t.editable=JC,t.mouseSelectionStyle=v$,t.dragMovesSelection=y$,t.clickAddsSelectionRange=D$,t.decorations=kD,t.blockWrappers=N$,t.outerDecorations=cF,t.atomicRanges=gf,t.bidiIsolatedRanges=F$,t.scrollMargins=_$,t.darkTheme=rN,t.cspNonce=We.define({combine:e=>e.length?e[0]:""}),t.contentAttributes=pN,t.editorAttributes=xX,t.lineWrapping=t.contentAttributes.of({class:"cm-lineWrapping"}),t.announce=Hi.define(),t})(),a7A=4096,XX={},pD=class t{constructor(e,A,i,n,o,a){this.from=e,this.to=A,this.dir=i,this.isolates=n,this.fresh=o,this.order=a}static update(e,A){if(A.empty&&!e.some(o=>o.fresh))return e;let i=[],n=e.length?e[e.length-1].dir:mo.LTR;for(let o=Math.max(0,e.length-10);o=0;n--){let o=i[n],a=typeof o=="function"?o(t):o;a&&aF(a,A)}return A}var r7A=lt.mac?"mac":lt.windows?"win":lt.linux?"linux":"key";function s7A(t,e){let A=t.split(/-(?!$)/),i=A[A.length-1];i=="Space"&&(i=" ");let n,o,a,r;for(let s=0;si.concat(n),[]))),A}function eAA(t,e,A){return tAA(AAA(t.state),e,t,A)}var vI=null,l7A=4e3;function c7A(t,e=r7A){let A=Object.create(null),i=Object.create(null),n=(a,r)=>{let s=i[a];if(s==null)i[a]=r;else if(s!=r)throw new Error("Key binding "+a+" is used both as a regular binding and as a multi-stroke prefix")},o=(a,r,s,g,l)=>{var C,I;let d=A[a]||(A[a]=Object.create(null)),B=r.split(/ (?!$)/).map(f=>s7A(f,e));for(let f=1;f{let M=vI={view:S,prefix:b,scope:a};return setTimeout(()=>{vI==M&&(vI=null)},l7A),!0}]})}let E=B.join(" ");n(E,!1);let Q=d[E]||(d[E]={preventDefault:!1,stopPropagation:!1,run:((I=(C=d._any)===null||C===void 0?void 0:C.run)===null||I===void 0?void 0:I.slice())||[]});s&&Q.run.push(s),g&&(Q.preventDefault=!0),l&&(Q.stopPropagation=!0)};for(let a of t){let r=a.scope?a.scope.split(" "):["editor"];if(a.any)for(let g of r){let l=A[g]||(A[g]=Object.create(null));l._any||(l._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:C}=a;for(let I in l)l[I].run.push(d=>C(d,VN))}let s=a[e]||a.key;if(s)for(let g of r)o(g,s,a.run,a.preventDefault,a.stopPropagation),a.shift&&o(g,"Shift-"+s,a.shift,a.preventDefault,a.stopPropagation)}return A}var VN=null;function tAA(t,e,A,i){VN=e;let n=pX(e),o=Zr(n,0),a=Og(o)==n.length&&n!=" ",r="",s=!1,g=!1,l=!1;vI&&vI.view==A&&vI.scope==i&&(r=vI.prefix+" ",z$.indexOf(e.keyCode)<0&&(g=!0,vI=null));let C=new Set,I=Q=>{if(Q){for(let f of Q.run)if(!C.has(f)&&(C.add(f),f(A)))return Q.stopPropagation&&(l=!0),!0;Q.preventDefault&&(Q.stopPropagation&&(l=!0),g=!0)}return!1},d=t[i],B,E;return d&&(I(d[r+tD(n,e,!a)])?s=!0:a&&(e.altKey||e.metaKey||e.ctrlKey)&&!(lt.windows&&e.ctrlKey&&e.altKey)&&!(lt.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(B=UC[e.keyCode])&&B!=n?(I(d[r+tD(B,e,!0)])||e.shiftKey&&(E=QQ[e.keyCode])!=n&&E!=B&&I(d[r+tD(E,e,!1)]))&&(s=!0):a&&e.shiftKey&&I(d[r+tD(n,e,!0)])&&(s=!0),!s&&I(d._any)&&(s=!0)),g&&(s=!0),s&&l&&e.stopPropagation(),VN=null,s}var rf=class t{constructor(e,A,i,n,o){this.className=e,this.left=A,this.top=i,this.width=n,this.height=o}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,A){return A.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,A,i){if(i.empty){let n=e.coordsAtPos(i.head,i.assoc||1);if(!n)return[];let o=iAA(e);return[new t(A,n.left-o.left,n.top-o.top,null,n.bottom-n.top)]}else return C7A(e,A,i)}};function iAA(t){let e=t.scrollDOM.getBoundingClientRect();return{left:(t.textDirection==mo.LTR?e.left:e.right-t.scrollDOM.clientWidth*t.scaleX)-t.scrollDOM.scrollLeft*t.scaleX,top:e.top-t.scrollDOM.scrollTop*t.scaleY}}function e$(t,e,A,i){let n=t.coordsAtPos(e,A*2);if(!n)return i;let o=t.dom.getBoundingClientRect(),a=(n.top+n.bottom)/2,r=t.posAtCoords({x:o.left+1,y:a}),s=t.posAtCoords({x:o.right-1,y:a});return r==null||s==null?i:{from:Math.max(i.from,Math.min(r,s)),to:Math.min(i.to,Math.max(r,s))}}function C7A(t,e,A){if(A.to<=t.viewport.from||A.from>=t.viewport.to)return[];let i=Math.max(A.from,t.viewport.from),n=Math.min(A.to,t.viewport.to),o=t.textDirection==mo.LTR,a=t.contentDOM,r=a.getBoundingClientRect(),s=iAA(t),g=a.querySelector(".cm-line"),l=g&&window.getComputedStyle(g),C=r.left+(l?parseInt(l.paddingLeft)+Math.min(0,parseInt(l.textIndent)):0),I=r.right-(l?parseInt(l.paddingRight):0),d=xN(t,i,1),B=xN(t,n,-1),E=d.type==Xr.Text?d:null,Q=B.type==Xr.Text?B:null;if(E&&(t.lineWrapping||d.widgetLineBreaks)&&(E=e$(t,i,1,E)),Q&&(t.lineWrapping||B.widgetLineBreaks)&&(Q=e$(t,n,-1,Q)),E&&Q&&E.from==Q.from&&E.to==Q.to)return b(S(A.from,A.to,E));{let D=E?S(A.from,null,E):M(d,!1),F=Q?S(null,A.to,Q):M(B,!0),_=[];return(E||d).to<(Q||B).from-(E&&Q?1:0)||d.widgetLineBreaks>1&&D.bottom+t.defaultLineHeight/2O&&P.from=iA)break;hA>aA&&AA(Math.max(sA,aA),D==null&&sA<=O,Math.min(hA,iA),F==null&&hA>=DA,oA.dir)}if(aA=BA.to+1,aA>=iA)break}return j.length==0&&AA(O,D==null,DA,F==null,t.textDirection),{top:U,bottom:J,horizontal:j}}function M(D,F){let _=r.top+(F?D.top:D.bottom);return{top:_,bottom:_,horizontal:[]}}}function I7A(t,e){return t.constructor==e.constructor&&t.eq(e)}var WN=class{constructor(e,A){this.view=e,this.layer=A,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),A.above&&this.dom.classList.add("cm-layer-above"),A.class&&this.dom.classList.add(A.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),A.mount&&A.mount(this.dom,e)}update(e){e.startState.facet(rD)!=e.state.facet(rD)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let A=0,i=e.facet(rD);for(;A!I7A(A,this.drawn[i]))){let A=this.dom.firstChild,i=0;for(let n of e)n.update&&A&&n.constructor&&this.drawn[i].constructor&&n.update(A,this.drawn[i])?(A=A.nextSibling,i++):this.dom.insertBefore(n.draw(),A);for(;A;){let n=A.nextSibling;A.remove(),A=n}this.drawn=e,lt.safari&<.safari_version>=26&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},rD=We.define();function nAA(t){return[Go.define(e=>new WN(e,t)),rD.of(t)]}var sf=We.define({combine(t){return kr(t,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,A)=>Math.min(e,A),drawRangeCursor:(e,A)=>e||A})}});function oAA(t={}){return[sf.of(t),d7A,B7A,E7A,S$.of(!0)]}function aAA(t){return t.startState.facet(sf)!=t.state.facet(sf)}var d7A=nAA({above:!0,markers(t){let{state:e}=t,A=e.facet(sf),i=[];for(let n of e.selection.ranges){let o=n==e.selection.main;if(n.empty||A.drawRangeCursor){let a=o?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",r=n.empty?n:de.cursor(n.head,n.head>n.anchor?-1:1);for(let s of rf.forRange(t,a,r))i.push(s)}}return i},update(t,e){t.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let A=aAA(t);return A&&t$(t.state,e),t.docChanged||t.selectionSet||A},mount(t,e){t$(e.state,t)},class:"cm-cursorLayer"});function t$(t,e){e.style.animationDuration=t.facet(sf).cursorBlinkRate+"ms"}var B7A=nAA({above:!1,markers(t){return t.state.selection.ranges.map(e=>e.empty?[]:rf.forRange(t,"cm-selectionBackground",e)).reduce((e,A)=>e.concat(A))},update(t,e){return t.docChanged||t.selectionSet||t.viewportChanged||aAA(t)},class:"cm-selectionLayer"}),E7A=bc.highest(ii.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:"transparent !important"},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),rAA=Hi.define({map(t,e){return t==null?null:e.mapPos(t)}}),j3=va.define({create(){return null},update(t,e){return t!=null&&(t=e.changes.mapPos(t)),e.effects.reduce((A,i)=>i.is(rAA)?i.value:A,t)}}),Q7A=Go.fromClass(class{constructor(t){this.view=t,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(t){var e;let A=t.state.field(j3);A==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(t.startState.field(j3)!=A||t.docChanged||t.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:t}=this,e=t.state.field(j3),A=e!=null&&t.coordsAtPos(e);if(!A)return null;let i=t.scrollDOM.getBoundingClientRect();return{left:A.left-i.left+t.scrollDOM.scrollLeft*t.scaleX,top:A.top-i.top+t.scrollDOM.scrollTop*t.scaleY,height:A.bottom-A.top}}drawCursor(t){if(this.cursor){let{scaleX:e,scaleY:A}=this.view;t?(this.cursor.style.left=t.left/e+"px",this.cursor.style.top=t.top/A+"px",this.cursor.style.height=t.height/A+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(t){this.view.state.field(j3)!=t&&this.view.dispatch({effects:rAA.of(t)})}},{eventObservers:{dragover(t){this.setDropPos(this.view.posAtCoords({x:t.clientX,y:t.clientY}))},dragleave(t){(t.target==this.view.contentDOM||!this.view.contentDOM.contains(t.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function sAA(){return[j3,Q7A]}function i$(t,e,A,i,n){e.lastIndex=0;for(let o=t.iterRange(A,i),a=A,r;!o.next().done;a+=o.value.length)if(!o.lineBreak)for(;r=e.exec(o.value);)n(a+r.index,r)}function h7A(t,e){let A=t.visibleRanges;if(A.length==1&&A[0].from==t.viewport.from&&A[0].to==t.viewport.to)return A;let i=[];for(let{from:n,to:o}of A)n=Math.max(t.state.doc.lineAt(n).from,n-e),o=Math.min(t.state.doc.lineAt(o).to,o+e),i.length&&i[i.length-1].to>=n?i[i.length-1].to=o:i.push({from:n,to:o});return i}var ZN=class{constructor(e){let{regexp:A,decoration:i,decorate:n,boundary:o,maxLength:a=1e3}=e;if(!A.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=A,n)this.addMatch=(r,s,g,l)=>n(l,g,g+r[0].length,r,s);else if(typeof i=="function")this.addMatch=(r,s,g,l)=>{let C=i(r,s,g);C&&l(g,g+r[0].length,C)};else if(i)this.addMatch=(r,s,g,l)=>l(g,g+r[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=o,this.maxLength=a}createDeco(e){let A=new Wr,i=A.add.bind(A);for(let{from:n,to:o}of h7A(e,this.maxLength))i$(e.state.doc,this.regexp,n,o,(a,r)=>this.addMatch(r,e,a,i));return A.finish()}updateDeco(e,A){let i=1e9,n=-1;return e.docChanged&&e.changes.iterChanges((o,a,r,s)=>{s>=e.view.viewport.from&&r<=e.view.viewport.to&&(i=Math.min(r,i),n=Math.max(s,n))}),e.viewportMoved||n-i>1e3?this.createDeco(e.view):n>-1?this.updateRange(e.view,A.map(e.changes),i,n):A}updateRange(e,A,i,n){for(let o of e.visibleRanges){let a=Math.max(o.from,i),r=Math.min(o.to,n);if(r>=a){let s=e.state.doc.lineAt(a),g=s.tos.from;a--)if(this.boundary.test(s.text[a-1-s.from])){l=a;break}for(;rI.push(f.range(E,Q));if(s==g)for(this.regexp.lastIndex=l-s.from;(d=this.regexp.exec(s.text))&&d.indexthis.addMatch(Q,e,E,B));A=A.update({filterFrom:l,filterTo:C,filter:(E,Q)=>EC,add:I})}}return A}},XN=/x/.unicode!=null?"gu":"g",u7A=new RegExp(`[\0-\b --\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\u2066\u2067\u2069\uFEFF\uFFF9-\uFFFC]`,XN),f7A={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"},gN=null;function m7A(){var t;if(gN==null&&typeof document<"u"&&document.body){let e=document.body.style;gN=((t=e.tabSize)!==null&&t!==void 0?t:e.MozTabSize)!=null}return gN||!1}var sD=We.define({combine(t){let e=kr(t,{render:null,specialChars:u7A,addSpecialChars:null});return(e.replaceTabs=!m7A())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,XN)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,XN)),e}});function gAA(t={}){return[sD.of(t),p7A()]}var n$=null;function p7A(){return n$||(n$=Go.fromClass(class{constructor(t){this.view=t,this.decorations=yt.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(t.state.facet(sD)),this.decorations=this.decorator.createDeco(t)}makeDecorator(t){return new ZN({regexp:t.specialChars,decoration:(e,A,i)=>{let{doc:n}=A.state,o=Zr(e[0],0);if(o==9){let a=n.lineAt(i),r=A.state.tabSize,s=KC(a.text,r,i-a.from);return yt.replace({widget:new AF((r-s%r)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[o]||(this.decorationCache[o]=yt.replace({widget:new $N(t,o)}))},boundary:t.replaceTabs?void 0:/[^]/})}update(t){let e=t.state.facet(sD);t.startState.facet(sD)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(t.view)):this.decorations=this.decorator.updateDeco(t,this.decorations)}},{decorations:t=>t.decorations}))}var w7A="\u2022";function D7A(t){return t>=32?w7A:t==10?"\u2424":String.fromCharCode(9216+t)}var $N=class extends fg{constructor(e,A){super(),this.options=e,this.code=A}eq(e){return e.code==this.code}toDOM(e){let A=D7A(this.code),i=e.state.phrase("Control character")+" "+(f7A[this.code]||"0x"+this.code.toString(16)),n=this.options.render&&this.options.render(this.code,i,A);if(n)return n;let o=document.createElement("span");return o.textContent=A,o.title=i,o.setAttribute("aria-label",i),o.className="cm-specialChar",o}ignoreEvent(){return!1}},AF=class extends fg{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}};function lAA(){return v7A}var y7A=yt.line({class:"cm-activeLine"}),v7A=Go.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.docChanged||t.selectionSet)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=-1,A=[];for(let i of t.state.selection.ranges){let n=t.lineBlockAt(i.head);n.from>e&&(A.push(y7A.range(n.from)),e=n.from)}return yt.set(A)}},{decorations:t=>t.decorations});var eF=2e3;function b7A(t,e,A){let i=Math.min(e.line,A.line),n=Math.max(e.line,A.line),o=[];if(e.off>eF||A.off>eF||e.col<0||A.col<0){let a=Math.min(e.off,A.off),r=Math.max(e.off,A.off);for(let s=i;s<=n;s++){let g=t.doc.line(s);g.length<=r&&o.push(de.range(g.from+a,g.to+r))}}else{let a=Math.min(e.col,A.col),r=Math.max(e.col,A.col);for(let s=i;s<=n;s++){let g=t.doc.line(s),l=q5(g.text,a,t.tabSize,!0);if(l<0)o.push(de.cursor(g.to));else{let C=q5(g.text,r,t.tabSize);o.push(de.range(g.from+l,g.from+C))}}}return o}function M7A(t,e){let A=t.coordsAtPos(t.viewport.from);return A?Math.round(Math.abs((A.left-e)/t.defaultCharacterWidth)):-1}function o$(t,e){let A=t.posAtCoords({x:e.clientX,y:e.clientY},!1),i=t.state.doc.lineAt(A),n=A-i.from,o=n>eF?-1:n==i.length?M7A(t,e.clientX):KC(i.text,t.state.tabSize,A-i.from);return{line:i.number,col:o,off:n}}function k7A(t,e){let A=o$(t,e),i=t.state.selection;return A?{update(n){if(n.docChanged){let o=n.changes.mapPos(n.startState.doc.line(A.line).from),a=n.state.doc.lineAt(o);A={line:a.number,col:A.col,off:Math.min(A.off,a.length)},i=i.map(n.changes)}},get(n,o,a){let r=o$(t,n);if(!r)return i;let s=b7A(t.state,A,r);return s.length?a?de.create(s.concat(i.ranges)):de.create(s):i}}:null}function cAA(t){let e=t?.eventFilter||(A=>A.altKey&&A.button==0);return ii.mouseSelectionStyle.of((A,i)=>e(i)?k7A(A,i):null)}var S7A={Alt:[18,t=>!!t.altKey],Control:[17,t=>!!t.ctrlKey],Shift:[16,t=>!!t.shiftKey],Meta:[91,t=>!!t.metaKey]},x7A={style:"cursor: crosshair"};function CAA(t={}){let[e,A]=S7A[t.key||"Alt"],i=Go.fromClass(class{constructor(n){this.view=n,this.isDown=!1}set(n){this.isDown!=n&&(this.isDown=n,this.view.update([]))}},{eventObservers:{keydown(n){this.set(n.keyCode==e||A(n))},keyup(n){(n.keyCode==e||!A(n))&&this.set(!1)},mousemove(n){this.set(A(n))}}});return[i,ii.contentAttributes.of(n=>{var o;return!((o=n.plugin(i))===null||o===void 0)&&o.isDown?x7A:null})]}var iD="-10000px",wD=class{constructor(e,A,i,n){this.facet=A,this.createTooltipView=i,this.removeTooltipView=n,this.input=e.state.facet(A),this.tooltips=this.input.filter(a=>a);let o=null;this.tooltipViews=this.tooltips.map(a=>o=i(a,o))}update(e,A){var i;let n=e.state.facet(this.facet),o=n.filter(s=>s);if(n===this.input){for(let s of this.tooltipViews)s.update&&s.update(e);return!1}let a=[],r=A?[]:null;for(let s=0;sA[g]=s),A.length=r.length),this.input=n,this.tooltips=o,this.tooltipViews=a,!0}};function R7A(t){let e=t.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}var lN=We.define({combine:t=>{var e,A,i;return{position:lt.ios?"absolute":((e=t.find(n=>n.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((A=t.find(n=>n.parent))===null||A===void 0?void 0:A.parent)||null,tooltipSpace:((i=t.find(n=>n.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||R7A}}}),a$=new WeakMap,dF=Go.fromClass(class{constructor(t){this.view=t,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=t.state.facet(lN);this.position=e.position,this.parent=e.parent,this.classes=t.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new wD(t,xQ,(A,i)=>this.createTooltip(A,i),A=>{this.resizeObserver&&this.resizeObserver.unobserve(A.dom),A.dom.remove()}),this.above=this.manager.tooltips.map(A=>!!A.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(A=>{Date.now()>this.lastTransaction-50&&A.length>0&&A[A.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),t.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let t of this.manager.tooltipViews)this.intersectionObserver.observe(t.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(t){t.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(t,this.above);e&&this.observeIntersection();let A=e||t.geometryChanged,i=t.state.facet(lN);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let n of this.manager.tooltipViews)n.dom.style.position=this.position;A=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let n of this.manager.tooltipViews)this.container.appendChild(n.dom);A=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);A&&this.maybeMeasure()}createTooltip(t,e){let A=t.create(this.view),i=e?e.dom:null;if(A.dom.classList.add("cm-tooltip"),t.arrow&&!A.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let n=document.createElement("div");n.className="cm-tooltip-arrow",A.dom.appendChild(n)}return A.dom.style.position=this.position,A.dom.style.top=iD,A.dom.style.left="0px",this.container.insertBefore(A.dom,i),A.mount&&A.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(A.dom),A}destroy(){var t,e,A;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(t=i.destroy)===null||t===void 0||t.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(A=this.intersectionObserver)===null||A===void 0||A.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let t=1,e=1,A=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:o}=this.manager.tooltipViews[0];if(lt.safari){let a=o.getBoundingClientRect();A=Math.abs(a.top+1e4)>1||Math.abs(a.left)>1}else A=!!o.offsetParent&&o.offsetParent!=this.container.ownerDocument.body}if(A||this.position=="absolute")if(this.parent){let o=this.parent.getBoundingClientRect();o.width&&o.height&&(t=o.width/this.parent.offsetWidth,e=o.height/this.parent.offsetHeight)}else({scaleX:t,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),n=CF(this.view);return{visible:{left:i.left+n.left,top:i.top+n.top,right:i.right-n.right,bottom:i.bottom-n.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((o,a)=>{let r=this.manager.tooltipViews[a];return r.getCoords?r.getCoords(o.pos):this.view.coordsAtPos(o.pos)}),size:this.manager.tooltipViews.map(({dom:o})=>o.getBoundingClientRect()),space:this.view.state.facet(lN).tooltipSpace(this.view),scaleX:t,scaleY:e,makeAbsolute:A}}writeMeasure(t){var e;if(t.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let r of this.manager.tooltipViews)r.dom.style.position="absolute"}let{visible:A,space:i,scaleX:n,scaleY:o}=t,a=[];for(let r=0;r=Math.min(A.bottom,i.bottom)||C.rightMath.min(A.right,i.right)+.1)){l.style.top=iD;continue}let d=s.arrow?g.dom.querySelector(".cm-tooltip-arrow"):null,B=d?7:0,E=I.right-I.left,Q=(e=a$.get(g))!==null&&e!==void 0?e:I.bottom-I.top,f=g.offset||F7A,b=this.view.textDirection==mo.LTR,S=I.width>i.right-i.left?b?i.left:i.right-I.width:b?Math.max(i.left,Math.min(C.left-(d?14:0)+f.x,i.right-E)):Math.min(Math.max(i.left,C.left-E+(d?14:0)-f.x),i.right-E),M=this.above[r];!s.strictSide&&(M?C.top-Q-B-f.yi.bottom)&&M==i.bottom-C.bottom>C.top-i.top&&(M=this.above[r]=!M);let D=(M?C.top-i.top:i.bottom-C.bottom)-B;if(DS&&U.topF&&(F=M?U.top-Q-2-B:U.bottom+B+2);if(this.position=="absolute"?(l.style.top=(F-t.parent.top)/o+"px",r$(l,(S-t.parent.left)/n)):(l.style.top=F/o+"px",r$(l,S/n)),d){let U=C.left+(b?f.x:-f.x)-(S+14-7);d.style.left=U/n+"px"}g.overlap!==!0&&a.push({left:S,top:F,right:_,bottom:F+Q}),l.classList.toggle("cm-tooltip-above",M),l.classList.toggle("cm-tooltip-below",!M),g.positioned&&g.positioned(t.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let t of this.manager.tooltipViews)t.dom.style.top=iD}},{eventObservers:{scroll(){this.maybeMeasure()}}});function r$(t,e){let A=parseInt(t.style.left,10);(isNaN(A)||Math.abs(e-A)>1)&&(t.style.left=e+"px")}var N7A=ii.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),F7A={x:0,y:0},xQ=We.define({enables:[dF,N7A]}),DD=We.define({combine:t=>t.reduce((e,A)=>e.concat(A),[])}),yD=class t{static create(e){return new t(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new wD(e,DD,(A,i)=>this.createHostedView(A,i),A=>A.dom.remove())}createHostedView(e,A){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,A?A.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let A of this.manager.tooltipViews)A.mount&&A.mount(e);this.mounted=!0}positioned(e){for(let A of this.manager.tooltipViews)A.positioned&&A.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let A of this.manager.tooltipViews)(e=A.destroy)===null||e===void 0||e.call(A)}passProp(e){let A;for(let i of this.manager.tooltipViews){let n=i[e];if(n!==void 0){if(A===void 0)A=n;else if(A!==n)return}}return A}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}},_7A=xQ.compute([DD],t=>{let e=t.facet(DD);return e.length===0?null:{pos:Math.min(...e.map(A=>A.pos)),end:Math.max(...e.map(A=>{var i;return(i=A.end)!==null&&i!==void 0?i:A.pos})),create:yD.create,above:e[0].above,arrow:e.some(A=>A.arrow)}}),tF=class{constructor(e,A,i,n,o){this.view=e,this.source=A,this.field=i,this.setHover=n,this.hoverTime=o,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;er.bottom||A.xr.right+e.defaultCharacterWidth)return;let s=e.bidiSpans(e.state.doc.lineAt(n)).find(l=>l.from<=n&&l.to>=n),g=s&&s.dir==mo.RTL?-1:1;o=A.x{this.pending==r&&(this.pending=null,s&&!(Array.isArray(s)&&!s.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(s)?s:[s])}))},s=>Sr(e.state,s,"hover tooltip"))}else a&&!(Array.isArray(a)&&!a.length)&&e.dispatch({effects:this.setHover.of(Array.isArray(a)?a:[a])})}get tooltip(){let e=this.view.plugin(dF),A=e?e.manager.tooltips.findIndex(i=>i.create==yD.create):-1;return A>-1?e.manager.tooltipViews[A]:null}mousemove(e){var A,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:n,tooltip:o}=this;if(n.length&&o&&!L7A(o.dom,e)||this.pending){let{pos:a}=n[0]||this.pending,r=(i=(A=n[0])===null||A===void 0?void 0:A.end)!==null&&i!==void 0?i:a;(a==r?this.view.posAtCoords(this.lastMove)!=a:!G7A(this.view,a,r,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:A}=this;if(A.length){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let A=i=>{e.removeEventListener("mouseleave",A),this.active.length&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",A)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}},nD=4;function L7A(t,e){let{left:A,right:i,top:n,bottom:o}=t.getBoundingClientRect(),a;if(a=t.querySelector(".cm-tooltip-arrow")){let r=a.getBoundingClientRect();n=Math.min(r.top,n),o=Math.max(r.bottom,o)}return e.clientX>=A-nD&&e.clientX<=i+nD&&e.clientY>=n-nD&&e.clientY<=o+nD}function G7A(t,e,A,i,n,o){let a=t.scrollDOM.getBoundingClientRect(),r=t.documentTop+t.documentPadding.top+t.contentHeight;if(a.left>i||a.rightn||Math.min(a.bottom,r)=e&&s<=A}function IAA(t,e={}){let A=Hi.define(),i=va.define({create(){return[]},update(n,o){if(n.length&&(e.hideOnChange&&(o.docChanged||o.selection)?n=[]:e.hideOn&&(n=n.filter(a=>!e.hideOn(o,a))),o.docChanged)){let a=[];for(let r of n){let s=o.changes.mapPos(r.pos,-1,qr.TrackDel);if(s!=null){let g=Object.assign(Object.create(null),r);g.pos=s,g.end!=null&&(g.end=o.changes.mapPos(g.end)),a.push(g)}}n=a}for(let a of o.effects)a.is(A)&&(n=a.value),a.is(K7A)&&(n=[]);return n},provide:n=>DD.from(n)});return{active:i,extension:[i,Go.define(n=>new tF(n,t,i,A,e.hoverTime||300)),_7A]}}function BF(t,e){let A=t.plugin(dF);if(!A)return null;let i=A.manager.tooltips.indexOf(e);return i<0?null:A.manager.tooltipViews[i]}var K7A=Hi.define();var s$=We.define({combine(t){let e,A;for(let i of t)e=e||i.topContainer,A=A||i.bottomContainer;return{topContainer:e,bottomContainer:A}}});function lf(t,e){let A=t.plugin(dAA),i=A?A.specs.indexOf(e):-1;return i>-1?A.panels[i]:null}var dAA=Go.fromClass(class{constructor(t){this.input=t.state.facet(Dd),this.specs=this.input.filter(A=>A),this.panels=this.specs.map(A=>A(t));let e=t.state.facet(s$);this.top=new fQ(t,!0,e.topContainer),this.bottom=new fQ(t,!1,e.bottomContainer),this.top.sync(this.panels.filter(A=>A.top)),this.bottom.sync(this.panels.filter(A=>!A.top));for(let A of this.panels)A.dom.classList.add("cm-panel"),A.mount&&A.mount()}update(t){let e=t.state.facet(s$);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new fQ(t.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new fQ(t.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let A=t.state.facet(Dd);if(A!=this.input){let i=A.filter(s=>s),n=[],o=[],a=[],r=[];for(let s of i){let g=this.specs.indexOf(s),l;g<0?(l=s(t.view),r.push(l)):(l=this.panels[g],l.update&&l.update(t)),n.push(l),(l.top?o:a).push(l)}this.specs=i,this.panels=n,this.top.sync(o),this.bottom.sync(a);for(let s of r)s.dom.classList.add("cm-panel"),s.mount&&s.mount()}else for(let i of this.panels)i.update&&i.update(t)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:t=>ii.scrollMargins.of(e=>{let A=e.plugin(t);return A&&{top:A.top.scrollMargin(),bottom:A.bottom.scrollMargin()}})}),fQ=class{constructor(e,A,i){this.view=e,this.top=A,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let A of this.panels)A.destroy&&e.indexOf(A)<0&&A.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let A=this.container||this.view.dom;A.insertBefore(this.dom,this.top?A.firstChild:null)}let e=this.dom.firstChild;for(let A of this.panels)if(A.dom.parentNode==this.dom){for(;e!=A.dom;)e=g$(e);e=e.nextSibling}else this.dom.insertBefore(A.dom,e);for(;e;)e=g$(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}};function g$(t){let e=t.nextSibling;return t.remove(),e}var Dd=We.define({enables:dAA});function BAA(t,e){let A,i=new Promise(a=>A=a),n=a=>U7A(a,e,A);t.state.field(cN,!1)?t.dispatch({effects:EAA.of(n)}):t.dispatch({effects:Hi.appendConfig.of(cN.init(()=>[n]))});let o=QAA.of(n);return{close:o,result:i.then(a=>((t.win.queueMicrotask||(s=>t.win.setTimeout(s,10)))(()=>{t.state.field(cN).indexOf(n)>-1&&t.dispatch({effects:o})}),a))}}var cN=va.define({create(){return[]},update(t,e){for(let A of e.effects)A.is(EAA)?t=[A.value].concat(t):A.is(QAA)&&(t=t.filter(i=>i!=A.value));return t},provide:t=>Dd.computeN([t],e=>e.field(t))}),EAA=Hi.define(),QAA=Hi.define();function U7A(t,e,A){let i=e.content?e.content(t,()=>a(null)):null;if(!i){if(i=io("form"),e.input){let r=io("input",e.input);/^(text|password|number|email|tel|url)$/.test(r.type)&&r.classList.add("cm-textfield"),r.name||(r.name="input"),i.appendChild(io("label",(e.label||"")+": ",r))}else i.appendChild(document.createTextNode(e.label||""));i.appendChild(document.createTextNode(" ")),i.appendChild(io("button",{class:"cm-button",type:"submit"},e.submitLabel||"OK"))}let n=i.nodeName=="FORM"?[i]:i.querySelectorAll("form");for(let r=0;r{g.keyCode==27?(g.preventDefault(),a(null)):g.keyCode==13&&(g.preventDefault(),a(s))}),s.addEventListener("submit",g=>{g.preventDefault(),a(s)})}let o=io("div",i,io("button",{onclick:()=>a(null),"aria-label":t.state.phrase("close"),class:"cm-dialog-close",type:"button"},["\xD7"]));e.class&&(o.className=e.class),o.classList.add("cm-dialog");function a(r){o.contains(o.ownerDocument.activeElement)&&t.focus(),A(r)}return{dom:o,top:e.top,mount:()=>{if(e.focus){let r;typeof e.focus=="string"?r=i.querySelector(e.focus):r=i.querySelector("input")||i.querySelector("button"),r&&"select"in r?r.select():r&&"focus"in r&&r.focus()}}}}var mg=class extends kl{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};mg.prototype.elementClass="";mg.prototype.toDOM=void 0;mg.prototype.mapMode=qr.TrackBefore;mg.prototype.startSide=mg.prototype.endSide=-1;mg.prototype.point=!0;var gD=We.define(),J7A=We.define(),Y7A={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>to.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},ef=We.define();function xD(t){return[hAA(),ef.of(cA(cA({},Y7A),t))]}var iF=We.define({combine:t=>t.some(e=>e)});function hAA(t){let e=[T7A];return t&&t.fixed===!1&&e.push(iF.of(!0)),e}var T7A=Go.fromClass(class{constructor(t){this.view=t,this.domAfter=null,this.prevViewport=t.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=t.state.facet(ef).map(e=>new vD(t,e)),this.fixed=!t.state.facet(iF);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),t.scrollDOM.insertBefore(this.dom,t.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(t){if(this.updateGutters(t)){let e=this.prevViewport,A=t.view.viewport,i=Math.min(e.to,A.to)-Math.max(e.from,A.from);this.syncGutters(i<(A.to-A.from)*.8)}if(t.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(iF)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=t.view.viewport}syncGutters(t){let e=this.dom.nextSibling;t&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let A=to.iter(this.view.state.facet(gD),this.view.viewport.from),i=[],n=this.gutters.map(o=>new oF(o,this.view.viewport,-this.view.documentPadding.top));for(let o of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(o.type)){let a=!0;for(let r of o.type)if(r.type==Xr.Text&&a){nF(A,i,r.from);for(let s of n)s.line(this.view,r,i);a=!1}else if(r.widget)for(let s of n)s.widget(this.view,r)}else if(o.type==Xr.Text){nF(A,i,o.from);for(let a of n)a.line(this.view,o,i)}else if(o.widget)for(let a of n)a.widget(this.view,o);for(let o of n)o.finish();t&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(t){let e=t.startState.facet(ef),A=t.state.facet(ef),i=t.docChanged||t.heightChanged||t.viewportChanged||!to.eq(t.startState.facet(gD),t.state.facet(gD),t.view.viewport.from,t.view.viewport.to);if(e==A)for(let n of this.gutters)n.update(t)&&(i=!0);else{i=!0;let n=[];for(let o of A){let a=e.indexOf(o);a<0?n.push(new vD(this.view,o)):(this.gutters[a].update(t),n.push(this.gutters[a]))}for(let o of this.gutters)o.dom.remove(),n.indexOf(o)<0&&o.destroy();for(let o of n)o.config.side=="after"?this.getDOMAfter().appendChild(o.dom):this.dom.appendChild(o.dom);this.gutters=n}return i}destroy(){for(let t of this.gutters)t.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:t=>ii.scrollMargins.of(e=>{let A=e.plugin(t);if(!A||A.gutters.length==0||!A.fixed)return null;let i=A.dom.offsetWidth*e.scaleX,n=A.domAfter?A.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==mo.LTR?{left:i,right:n}:{right:i,left:n}})});function l$(t){return Array.isArray(t)?t:[t]}function nF(t,e,A){for(;t.value&&t.from<=A;)t.from==A&&e.push(t.value),t.next()}var oF=class{constructor(e,A,i){this.gutter=e,this.height=i,this.i=0,this.cursor=to.iter(e.markers,A.from)}addElement(e,A,i){let{gutter:n}=this,o=(A.top-this.height)/e.scaleY,a=A.height/e.scaleY;if(this.i==n.elements.length){let r=new bD(e,a,o,i);n.elements.push(r),n.dom.appendChild(r.dom)}else n.elements[this.i].update(e,a,o,i);this.height=A.bottom,this.i++}line(e,A,i){let n=[];nF(this.cursor,n,A.from),i.length&&(n=n.concat(i));let o=this.gutter.config.lineMarker(e,A,n);o&&n.unshift(o);let a=this.gutter;n.length==0&&!a.config.renderEmptyElements||this.addElement(e,A,n)}widget(e,A){let i=this.gutter.config.widgetMarker(e,A.widget,A),n=i?[i]:null;for(let o of e.state.facet(J7A)){let a=o(e,A.widget,A);a&&(n||(n=[])).push(a)}n&&this.addElement(e,A,n)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let A=e.elements.pop();e.dom.removeChild(A.dom),A.destroy()}}},vD=class{constructor(e,A){this.view=e,this.config=A,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in A.domEventHandlers)this.dom.addEventListener(i,n=>{let o=n.target,a;if(o!=this.dom&&this.dom.contains(o)){for(;o.parentNode!=this.dom;)o=o.parentNode;let s=o.getBoundingClientRect();a=(s.top+s.bottom)/2}else a=n.clientY;let r=e.lineBlockAtHeight(a-e.documentTop);A.domEventHandlers[i](e,r,n)&&n.preventDefault()});this.markers=l$(A.markers(e)),A.initialSpacer&&(this.spacer=new bD(e,0,0,[A.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let A=this.markers;if(this.markers=l$(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let n=this.config.updateSpacer(this.spacer.markers[0],e);n!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[n])}let i=e.view.viewport;return!to.eq(this.markers,A,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}},bD=class{constructor(e,A,i,n){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,A,i,n)}update(e,A,i,n){this.height!=A&&(this.height=A,this.dom.style.height=A+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),H7A(this.markers,n)||this.setMarkers(e,n)}setMarkers(e,A){let i="cm-gutterElement",n=this.dom.firstChild;for(let o=0,a=0;;){let r=a,s=oo(r,s,g)||a(r,s,g):a}return i}})}}),tf=class extends mg{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}};function CN(t,e){return t.state.facet(mQ).formatNumber(e,t.state)}var P7A=ef.compute([mQ],t=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(z7A)},lineMarker(e,A,i){return i.some(n=>n.toDOM)?null:new tf(CN(e,e.state.doc.lineAt(A.from).number))},widgetMarker:(e,A,i)=>{for(let n of e.state.facet(O7A)){let o=n(e,A,i);if(o)return o}return null},lineMarkerChange:e=>e.startState.facet(mQ)!=e.state.facet(mQ),initialSpacer(e){return new tf(CN(e,c$(e.state.doc.lines)))},updateSpacer(e,A){let i=CN(A.view,c$(A.view.state.doc.lines));return i==e.number?e:new tf(i)},domEventHandlers:t.facet(mQ).domEventHandlers,side:"before"}));function uAA(t={}){return[mQ.of(t),hAA(),P7A]}function c$(t){let e=9;for(;e{let e=[],A=-1;for(let i of t.selection.ranges){let n=t.doc.lineAt(i.head).from;n>A&&(A=n,e.push(j7A.range(n)))}return to.of(e)});function fAA(){return q7A}var V7A=0,cf=class{constructor(e,A){this.from=e,this.to=A}},vi=class{constructor(e={}){this.id=V7A++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=ps.match(e)),A=>{let i=e(A);return i===void 0?null:[this,i]}}};vi.closedBy=new vi({deserialize:t=>t.split(" ")});vi.openedBy=new vi({deserialize:t=>t.split(" ")});vi.group=new vi({deserialize:t=>t.split(" ")});vi.isolate=new vi({deserialize:t=>{if(t&&t!="rtl"&&t!="ltr"&&t!="auto")throw new RangeError("Invalid value for isolate: "+t);return t||"auto"}});vi.contextHash=new vi({perNode:!0});vi.lookAhead=new vi({perNode:!0});vi.mounted=new vi({perNode:!0});var yd=class{constructor(e,A,i,n=!1){this.tree=e,this.overlay=A,this.parser=i,this.bracketed=n}static get(e){return e&&e.props&&e.props[vi.mounted.id]}},W7A=Object.create(null),ps=class t{constructor(e,A,i,n=0){this.name=e,this.props=A,this.id=i,this.flags=n}static define(e){let A=e.props&&e.props.length?Object.create(null):W7A,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),n=new t(e.name||"",A,e.id,i);if(e.props){for(let o of e.props)if(Array.isArray(o)||(o=o(n)),o){if(o[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");A[o[0].id]=o[1]}}return n}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let A=this.prop(vi.group);return A?A.indexOf(e)>-1:!1}return this.id==e}static match(e){let A=Object.create(null);for(let i in e)for(let n of i.split(" "))A[n]=e[i];return i=>{for(let n=i.prop(vi.group),o=-1;o<(n?n.length:0);o++){let a=A[o<0?i.name:n[o]];if(a)return a}}}};ps.none=new ps("",Object.create(null),0,8);var Cf=class t{constructor(e){this.types=e;for(let A=0;A0;for(let s=this.cursor(a|Ra.IncludeAnonymous);;){let g=!1;if(s.from<=o&&s.to>=n&&(!r&&s.type.isAnonymous||A(s)!==!1)){if(s.firstChild())continue;g=!0}for(;g&&i&&(r||!s.type.isAnonymous)&&i(s),!s.nextSibling();){if(!s.parent())return;g=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let A in this.props)e.push([+A,this.props[A]]);return e}balance(e={}){return this.children.length<=8?this:pF(ps.none,this.children,this.positions,0,this.children.length,0,this.length,(A,i,n)=>new t(this.type,A,i,n,this.propValues),e.makeTree||((A,i,n)=>new t(ps.none,A,i,n)))}static build(e){return X7A(e)}};za.empty=new za(ps.none,[],[],0);var EF=class t{constructor(e,A){this.buffer=e,this.index=A}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new t(this.buffer,this.index)}},SI=class t{constructor(e,A,i){this.buffer=e,this.length=A,this.set=i}get type(){return ps.none}toString(){let e=[];for(let A=0;A0));s=a[s+3]);return r}slice(e,A,i){let n=this.buffer,o=new Uint16Array(A-e),a=0;for(let r=e,s=0;r=e&&Ae;case 1:return A<=e&&i>e;case 2:return i>e;case 4:return!0}}function If(t,e,A,i){for(var n;t.from==t.to||(A<1?t.from>=e:t.from>e)||(A>-1?t.to<=e:t.to0?s.length:-1;e!=l;e+=A){let C=s[e],I=g[e]+r.from;if(!(!(o&Ra.EnterBracketed&&C instanceof za&&((a=yd.get(C))===null||a===void 0?void 0:a.overlay)===null&&(I>=i||I+C.length<=i))&&!DAA(n,i,I,I+C.length))){if(C instanceof SI){if(o&Ra.ExcludeBuffers)continue;let d=C.findChild(0,C.buffer.length,A,i-I,n);if(d>-1)return new df(new hF(r,C,e,I),null,d)}else if(o&Ra.IncludeAnonymous||!C.type.isAnonymous||mF(C)){let d;if(!(o&Ra.IgnoreMounts)&&(d=yd.get(C))&&!d.overlay)return new t(d.tree,I,e,r);let B=new t(C,I,e,r);return o&Ra.IncludeAnonymous||!B.type.isAnonymous?B:B.nextChild(A<0?C.children.length-1:0,A,i,n,o)}}}if(o&Ra.IncludeAnonymous||!r.type.isAnonymous||(r.index>=0?e=r.index+A:e=A<0?-1:r._parent._tree.children.length,r=r._parent,!r))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,A,i=0){let n;if(!(i&Ra.IgnoreOverlays)&&(n=yd.get(this._tree))&&n.overlay){let o=e-this.from,a=i&Ra.EnterBracketed&&n.bracketed;for(let{from:r,to:s}of n.overlay)if((A>0||a?r<=o:r=o:s>o))return new t(n.tree,n.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,A,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}};function pAA(t,e,A,i){let n=t.cursor(),o=[];if(!n.firstChild())return o;if(A!=null){for(let a=!1;!a;)if(a=n.type.is(A),!n.nextSibling())return o}for(;;){if(i!=null&&n.type.is(i))return o;if(n.type.is(e)&&o.push(n.node),!n.nextSibling())return i==null?o:[]}}function QF(t,e,A=e.length-1){for(let i=t;A>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[A]&&e[A]!=i.name)return!1;A--}}return!0}var hF=class{constructor(e,A,i,n){this.parent=e,this.buffer=A,this.index=i,this.start=n}},df=class t extends FD{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,A,i){super(),this.context=e,this._parent=A,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,A,i){let{buffer:n}=this.context,o=n.findChild(this.index+4,n.buffer[this.index+3],e,A-this.context.start,i);return o<0?null:new t(this.context,this,o)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,A,i=0){if(i&Ra.ExcludeBuffers)return null;let{buffer:n}=this.context,o=n.findChild(this.index+4,n.buffer[this.index+3],A>0?1:-1,e-this.context.start,A);return o<0?null:new t(this.context,this,o)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,A=e.buffer[this.index+3];return A<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new t(this.context,this._parent,A):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,A=this._parent?this._parent.index+4:0;return this.index==A?this.externalSibling(-1):new t(this.context,this._parent,e.findChild(A,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],A=[],{buffer:i}=this.context,n=this.index+4,o=i.buffer[this.index+3];if(o>n){let a=i.buffer[this.index+1];e.push(i.slice(n,o,a)),A.push(0)}return new za(this.type,e,A,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}};function yAA(t){if(!t.length)return null;let e=0,A=t[0];for(let o=1;oA.from||a.to=e){let r=new G0(a.tree,a.overlay[0].from+o.from,-1,o);(n||(n=[i])).push(If(r,e,A,!1))}}return n?yAA(n):i}var Bf=class{get name(){return this.type.name}constructor(e,A=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=A&~Ra.EnterBracketed,e instanceof G0)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,A){this.index=e;let{start:i,buffer:n}=this.buffer;return this.type=A||n.set.types[n.buffer[e]],this.from=i+n.buffer[e+1],this.to=i+n.buffer[e+2],!0}yield(e){return e?e instanceof G0?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,A,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,A,i,this.mode));let{buffer:n}=this.buffer,o=n.findChild(this.index+4,n.buffer[this.index+3],e,A-this.buffer.start,i);return o<0?!1:(this.stack.push(this.index),this.yieldBuf(o))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,A,i=this.mode){return this.buffer?i&Ra.ExcludeBuffers?!1:this.enterChild(1,e,A):this.yield(this._tree.enter(e,A,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&Ra.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&Ra.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:A}=this.buffer,i=this.stack.length-1;if(e<0){let n=i<0?0:this.stack[i]+4;if(this.index!=n)return this.yieldBuf(A.findChild(n,this.index,-1,0,4))}else{let n=A.buffer[this.index+3];if(n<(i<0?A.buffer.length:A.buffer[this.stack[i]+3]))return this.yieldBuf(n)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let A,i,{buffer:n}=this;if(n){if(e>0){if(this.index-1)for(let o=A+e,a=e<0?-1:i._tree.children.length;o!=a;o+=e){let r=i._tree.children[o];if(this.mode&Ra.IncludeAnonymous||r instanceof SI||!r.type.isAnonymous||mF(r))return!1}return!0}move(e,A){if(A&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,A=0){for(;(this.from==this.to||(A<1?this.from>=e:this.from>e)||(A>-1?this.to<=e:this.to=0;){for(let a=e;a;a=a._parent)if(a.index==n){if(n==this.index)return a;A=a,i=o+1;break A}n=this.stack[--o]}for(let n=i;n=0;o--){if(o<0)return QF(this._tree,e,n);let a=i[A.buffer[this.stack[o]]];if(!a.isAnonymous){if(e[n]&&e[n]!=a.name)return!1;n--}}return!0}};function mF(t){return t.children.some(e=>e instanceof SI||!e.type.isAnonymous||mF(e))}function X7A(t){var e;let{buffer:A,nodeSet:i,maxBufferLength:n=1024,reused:o=[],minRepeatType:a=i.types.length}=t,r=Array.isArray(A)?new EF(A,A.length):A,s=i.types,g=0,l=0;function C(D,F,_,U,J,j){let{id:AA,start:O,end:DA,size:P}=r,aA=l,iA=g;if(P<0)if(r.next(),P==-1){let YA=o[AA];_.push(YA),U.push(O-D);return}else if(P==-3){g=AA;return}else if(P==-4){l=AA;return}else throw new RangeError(`Unrecognized record size: ${P}`);let BA=s[AA],oA,sA,hA=O-D;if(DA-O<=n&&(sA=Q(r.pos-F,J))){let YA=new Uint16Array(sA.size-sA.skip),ee=r.pos-sA.size,UA=YA.length;for(;r.pos>ee;)UA=f(sA.start,YA,UA);oA=new SI(YA,DA-sA.start,i),hA=sA.start-D}else{let YA=r.pos-P;r.next();let ee=[],UA=[],mA=AA>=a?AA:-1,KA=0,Pe=DA;for(;r.pos>YA;)mA>=0&&r.id==mA&&r.size>=0?(r.end<=Pe-n&&(B(ee,UA,O,KA,r.end,Pe,mA,aA,iA),KA=ee.length,Pe=r.end),r.next()):j>2500?I(O,YA,ee,UA):C(O,YA,ee,UA,mA,j+1);if(mA>=0&&KA>0&&KA-1&&KA>0){let Je=d(BA,iA);oA=pF(BA,ee,UA,0,ee.length,0,DA-O,Je,Je)}else oA=E(BA,ee,UA,DA-O,aA-DA,iA)}_.push(oA),U.push(hA)}function I(D,F,_,U){let J=[],j=0,AA=-1;for(;r.pos>F;){let{id:O,start:DA,end:P,size:aA}=r;if(aA>4)r.next();else{if(AA>-1&&DA=0;P-=3)O[aA++]=J[P],O[aA++]=J[P+1]-DA,O[aA++]=J[P+2]-DA,O[aA++]=aA;_.push(new SI(O,J[2]-DA,i)),U.push(DA-D)}}function d(D,F){return(_,U,J)=>{let j=0,AA=_.length-1,O,DA;if(AA>=0&&(O=_[AA])instanceof za){if(!AA&&O.type==D&&O.length==J)return O;(DA=O.prop(vi.lookAhead))&&(j=U[AA]+O.length+DA)}return E(D,_,U,J,j,F)}}function B(D,F,_,U,J,j,AA,O,DA){let P=[],aA=[];for(;D.length>U;)P.push(D.pop()),aA.push(F.pop()+_-J);D.push(E(i.types[AA],P,aA,j-J,O-j,DA)),F.push(J-_)}function E(D,F,_,U,J,j,AA){if(j){let O=[vi.contextHash,j];AA=AA?[O].concat(AA):[O]}if(J>25){let O=[vi.lookAhead,J];AA=AA?[O].concat(AA):[O]}return new za(D,F,_,U,AA)}function Q(D,F){let _=r.fork(),U=0,J=0,j=0,AA=_.end-n,O={size:0,start:0,skip:0};A:for(let DA=_.pos-D;_.pos>DA;){let P=_.size;if(_.id==F&&P>=0){O.size=U,O.start=J,O.skip=j,j+=4,U+=4,_.next();continue}let aA=_.pos-P;if(P<0||aA=a?4:0,BA=_.start;for(_.next();_.pos>aA;){if(_.size<0)if(_.size==-3||_.size==-4)iA+=4;else break A;else _.id>=a&&(iA+=4);_.next()}J=BA,U+=P,j+=iA}return(F<0||U==D)&&(O.size=U,O.start=J,O.skip=j),O.size>4?O:void 0}function f(D,F,_){let{id:U,start:J,end:j,size:AA}=r;if(r.next(),AA>=0&&U4){let DA=r.pos-(AA-4);for(;r.pos>DA;)_=f(D,F,_)}F[--_]=O,F[--_]=j-D,F[--_]=J-D,F[--_]=U}else AA==-3?g=U:AA==-4&&(l=U);return _}let b=[],S=[];for(;r.pos>0;)C(t.start||0,t.bufferStart||0,b,S,-1,0);let M=(e=t.length)!==null&&e!==void 0?e:b.length?S[0]+b[0].length:0;return new za(s[t.topID],b.reverse(),S.reverse(),M)}var wAA=new WeakMap;function ND(t,e){if(!t.isAnonymous||e instanceof SI||e.type!=t)return 1;let A=wAA.get(e);if(A==null){A=1;for(let i of e.children){if(i.type!=t||!(i instanceof za)){A=1;break}A+=ND(t,i)}wAA.set(e,A)}return A}function pF(t,e,A,i,n,o,a,r,s){let g=0;for(let B=i;B=l)break;F+=_}if(S==M+1){if(F>l){let _=B[M];d(_.children,_.positions,0,_.children.length,E[M]+b);continue}C.push(B[M])}else{let _=E[S-1]+B[S-1].length-D;C.push(pF(t,B,E,M,S,D,_,null,s))}I.push(D+b-o)}}return d(e,A,i,n,0),(r||s)(C,I,a)}var vd=class t{constructor(e,A,i,n,o=!1,a=!1){this.from=e,this.to=A,this.tree=i,this.offset=n,this.open=(o?1:0)|(a?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,A=[],i=!1){let n=[new t(0,e.length,e,0,!1,i)];for(let o of A)o.to>e.length&&n.push(o);return n}static applyChanges(e,A,i=128){if(!A.length)return e;let n=[],o=1,a=e.length?e[0]:null;for(let r=0,s=0,g=0;;r++){let l=r=i)for(;a&&a.from=I.from||C<=I.to||g){let d=Math.max(I.from,s)-g,B=Math.min(I.to,C)-g;I=d>=B?null:new t(d,B,I.tree,I.offset+g,r>0,!!l)}if(I&&n.push(I),a.to>C)break;a=onew cf(n.from,n.to)):[new cf(0,0)]:[new cf(0,e.length)],this.createParse(e,A||[],i)}parse(e,A,i){let n=this.startParse(e,A,i);for(;;){let o=n.advance();if(o)return o}}},fF=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,A){return this.string.slice(e,A)}};var z8e=new vi({perNode:!0});var $7A=0,Rc=class t{constructor(e,A,i,n){this.name=e,this.set=A,this.base=i,this.modified=n,this.id=$7A++}toString(){let{name:e}=this;for(let A of this.modified)A.name&&(e=`${A.name}(${e})`);return e}static define(e,A){let i=typeof e=="string"?e:"?";if(e instanceof t&&(A=e),A?.base)throw new Error("Can not derive from a modified tag");let n=new t(i,[],null,[]);if(n.set.push(n),A)for(let o of A.set)n.set.push(o);return n}static defineModifier(e){let A=new KD(e);return i=>i.modified.indexOf(A)>-1?i:KD.get(i.base||i,i.modified.concat(A).sort((n,o)=>n.id-o.id))}},AbA=0,KD=class t{constructor(e){this.name=e,this.instances=[],this.id=AbA++}static get(e,A){if(!A.length)return e;let i=A[0].instances.find(r=>r.base==e&&ebA(A,r.modified));if(i)return i;let n=[],o=new Rc(e.name,n,e,A);for(let r of A)r.instances.push(o);let a=tbA(A);for(let r of e.set)if(!r.modified.length)for(let s of a)n.push(t.get(r,s));return o}};function ebA(t,e){return t.length==e.length&&t.every((A,i)=>A==e[i])}function tbA(t){let e=[[]];for(let A=0;Ai.length-A.length)}function UD(t){let e=Object.create(null);for(let A in t){let i=t[A];Array.isArray(i)||(i=[i]);for(let n of A.split(" "))if(n){let o=[],a=2,r=n;for(let C=0;;){if(r=="..."&&C>0&&C+3==n.length){a=1;break}let I=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(r);if(!I)throw new RangeError("Invalid path: "+n);if(o.push(I[0]=="*"?"":I[0][0]=='"'?JSON.parse(I[0]):I[0]),C+=I[0].length,C==n.length)break;let d=n[C++];if(C==n.length&&d=="!"){a=0;break}if(d!="/")throw new RangeError("Invalid path: "+n);r=n.slice(C)}let s=o.length-1,g=o[s];if(!g)throw new RangeError("Invalid path: "+n);let l=new Md(i,a,s>0?o.slice(0,s):null);e[g]=l.sort(e[g])}}return MAA.add(e)}var MAA=new vi({combine(t,e){let A,i,n;for(;t||e;){if(!t||e&&t.depth>=e.depth?(n=e,e=e.next):(n=t,t=t.next),A&&A.mode==n.mode&&!n.context&&!A.context)continue;let o=new Md(n.tags,n.mode,n.context);A?A.next=o:i=o,A=o}return i}}),Md=class{constructor(e,A,i,n){this.tags=e,this.mode=A,this.context=i,this.next=n}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let a=n;for(let r of o)for(let s of r.set){let g=A[s.id];if(g){a=a?a+" "+g:g;break}}return a},scope:i}}function ibA(t,e){let A=null;for(let i of t){let n=i.style(e);n&&(A=A?A+" "+n:n)}return A}function kAA(t,e,A,i=0,n=t.length){let o=new DF(i,Array.isArray(e)?e:[e],A);o.highlightRange(t.cursor(),i,n,"",o.highlighters),o.flush(n)}var DF=class{constructor(e,A,i){this.at=e,this.highlighters=A,this.span=i,this.class=""}startSpan(e,A){A!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=A)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,A,i,n,o){let{type:a,from:r,to:s}=e;if(r>=i||s<=A)return;a.isTop&&(o=this.highlighters.filter(d=>!d.scope||d.scope(a)));let g=n,l=nbA(e)||Md.empty,C=ibA(o,l.tags);if(C&&(g&&(g+=" "),g+=C,l.mode==1&&(n+=(n?" ":"")+C)),this.startSpan(Math.max(A,r),g),l.opaque)return;let I=e.tree&&e.tree.prop(vi.mounted);if(I&&I.overlay){let d=e.node.enter(I.overlay[0].from+r,1),B=this.highlighters.filter(Q=>!Q.scope||Q.scope(I.tree.type)),E=e.firstChild();for(let Q=0,f=r;;Q++){let b=Q=S||!e.nextSibling())););if(!b||S>i)break;f=b.to+r,f>A&&(this.highlightRange(d.cursor(),Math.max(A,b.from+r),Math.min(i,f),"",B),this.startSpan(Math.min(i,f),g))}E&&e.parent()}else if(e.firstChild()){I&&(n="");do if(!(e.to<=A)){if(e.from>=i)break;this.highlightRange(e,A,i,n,o),this.startSpan(Math.min(i,e.to),g)}while(e.nextSibling());e.parent()}}};function nbA(t){let e=t.type.prop(MAA);for(;e&&e.context&&!t.matchContext(e.context);)e=e.next;return e||null}var Ve=Rc.define,_D=Ve(),xI=Ve(),vAA=Ve(xI),bAA=Ve(xI),RI=Ve(),LD=Ve(RI),wF=Ve(RI),J0=Ve(),bd=Ve(J0),K0=Ve(),U0=Ve(),yF=Ve(),Ef=Ve(yF),GD=Ve(),Re={comment:_D,lineComment:Ve(_D),blockComment:Ve(_D),docComment:Ve(_D),name:xI,variableName:Ve(xI),typeName:vAA,tagName:Ve(vAA),propertyName:bAA,attributeName:Ve(bAA),className:Ve(xI),labelName:Ve(xI),namespace:Ve(xI),macroName:Ve(xI),literal:RI,string:LD,docString:Ve(LD),character:Ve(LD),attributeValue:Ve(LD),number:wF,integer:Ve(wF),float:Ve(wF),bool:Ve(RI),regexp:Ve(RI),escape:Ve(RI),color:Ve(RI),url:Ve(RI),keyword:K0,self:Ve(K0),null:Ve(K0),atom:Ve(K0),unit:Ve(K0),modifier:Ve(K0),operatorKeyword:Ve(K0),controlKeyword:Ve(K0),definitionKeyword:Ve(K0),moduleKeyword:Ve(K0),operator:U0,derefOperator:Ve(U0),arithmeticOperator:Ve(U0),logicOperator:Ve(U0),bitwiseOperator:Ve(U0),compareOperator:Ve(U0),updateOperator:Ve(U0),definitionOperator:Ve(U0),typeOperator:Ve(U0),controlOperator:Ve(U0),punctuation:yF,separator:Ve(yF),bracket:Ef,angleBracket:Ve(Ef),squareBracket:Ve(Ef),paren:Ve(Ef),brace:Ve(Ef),content:J0,heading:bd,heading1:Ve(bd),heading2:Ve(bd),heading3:Ve(bd),heading4:Ve(bd),heading5:Ve(bd),heading6:Ve(bd),contentSeparator:Ve(J0),list:Ve(J0),quote:Ve(J0),emphasis:Ve(J0),strong:Ve(J0),link:Ve(J0),monospace:Ve(J0),strikethrough:Ve(J0),inserted:Ve(),deleted:Ve(),changed:Ve(),invalid:Ve(),meta:GD,documentMeta:Ve(GD),annotation:Ve(GD),processingInstruction:Ve(GD),definition:Rc.defineModifier("definition"),constant:Rc.defineModifier("constant"),function:Rc.defineModifier("function"),standard:Rc.defineModifier("standard"),local:Rc.defineModifier("local"),special:Rc.defineModifier("special")};for(let t in Re){let e=Re[t];e instanceof Rc&&(e.name=t)}var j8e=vF([{tag:Re.link,class:"tok-link"},{tag:Re.heading,class:"tok-heading"},{tag:Re.emphasis,class:"tok-emphasis"},{tag:Re.strong,class:"tok-strong"},{tag:Re.keyword,class:"tok-keyword"},{tag:Re.atom,class:"tok-atom"},{tag:Re.bool,class:"tok-bool"},{tag:Re.url,class:"tok-url"},{tag:Re.labelName,class:"tok-labelName"},{tag:Re.inserted,class:"tok-inserted"},{tag:Re.deleted,class:"tok-deleted"},{tag:Re.literal,class:"tok-literal"},{tag:Re.string,class:"tok-string"},{tag:Re.number,class:"tok-number"},{tag:[Re.regexp,Re.escape,Re.special(Re.string)],class:"tok-string2"},{tag:Re.variableName,class:"tok-variableName"},{tag:Re.local(Re.variableName),class:"tok-variableName tok-local"},{tag:Re.definition(Re.variableName),class:"tok-variableName tok-definition"},{tag:Re.special(Re.variableName),class:"tok-variableName2"},{tag:Re.definition(Re.propertyName),class:"tok-propertyName tok-definition"},{tag:Re.typeName,class:"tok-typeName"},{tag:Re.namespace,class:"tok-namespace"},{tag:Re.className,class:"tok-className"},{tag:Re.macroName,class:"tok-macroName"},{tag:Re.propertyName,class:"tok-propertyName"},{tag:Re.operator,class:"tok-operator"},{tag:Re.comment,class:"tok-comment"},{tag:Re.meta,class:"tok-meta"},{tag:Re.invalid,class:"tok-invalid"},{tag:Re.punctuation,class:"tok-punctuation"}]);var bF,NQ=new vi;function obA(t){return We.define({combine:t?e=>e.concat(t):void 0})}var abA=new vi,Nc=(()=>{class t{constructor(A,i,n=[],o=""){this.data=A,this.name=o,er.prototype.hasOwnProperty("tree")||Object.defineProperty(er.prototype,"tree",{get(){return xr(this)}}),this.parser=i,this.extension=[NI.of(this),er.languageData.of((a,r,s)=>{let g=SAA(a,r,s),l=g.type.prop(NQ);if(!l)return[];let C=a.facet(l),I=g.type.prop(abA);if(I){let d=g.resolve(r-g.from,s);for(let B of I)if(B.test(d,a)){let E=a.facet(B.facet);return B.type=="replace"?E:E.concat(C)}}return C})].concat(n)}isActiveAt(A,i,n=-1){return SAA(A,i,n).type.prop(NQ)==this.data}findRegions(A){let i=A.facet(NI);if(i?.data==this.data)return[{from:0,to:A.doc.length}];if(!i||!i.allowsNesting)return[];let n=[],o=(a,r)=>{if(a.prop(NQ)==this.data){n.push({from:r,to:r+a.length});return}let s=a.prop(vi.mounted);if(s){if(s.tree.prop(NQ)==this.data){if(s.overlay)for(let g of s.overlay)n.push({from:g.from+r,to:g.to+r});else n.push({from:r,to:r+a.length});return}else if(s.overlay){let g=n.length;if(o(s.tree,s.overlay[0].from+r),n.length>g)return}}for(let g=0;gi.isTop?A:void 0)]}),e.name)}configure(e,A){return new t(this.data,this.parser.configure(e),A||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function xr(t){let e=t.field(Nc.state,!1);return e?e.tree:za.empty}function UF(t,e,A=50){var i;let n=(i=t.field(Nc.state,!1))===null||i===void 0?void 0:i.context;if(!n)return null;let o=n.viewport;n.updateViewport({from:0,to:e});let a=n.isDone(e)||n.work(A,e)?n.tree:null;return n.updateViewport(o),a}var xF=class{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,A){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,A):this.string.slice(e-i,A-i)}},Qf=null,RF=class t{constructor(e,A,i=[],n,o,a,r,s){this.parser=e,this.state=A,this.fragments=i,this.tree=n,this.treeLen=o,this.viewport=a,this.skipped=r,this.scheduleOn=s,this.parse=null,this.tempSkipped=[]}static create(e,A,i){return new t(e,A,[],za.empty,0,i,[],null)}startParse(){return this.parser.startParse(new xF(this.state.doc),this.fragments)}work(e,A){return A!=null&&A>=this.state.doc.length&&(A=void 0),this.tree!=za.empty&&this.isDone(A??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let n=Date.now()+e;e=()=>Date.now()>n}for(this.parse||(this.parse=this.startParse()),A!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>A)&&A=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(A=this.parse.advance()););}),this.treeLen=e,this.tree=A,this.fragments=this.withoutTempSkipped(vd.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let A=Qf;Qf=this;try{return e()}finally{Qf=A}}withoutTempSkipped(e){for(let A;A=this.tempSkipped.pop();)e=xAA(e,A.from,A.to);return e}changes(e,A){let{fragments:i,tree:n,treeLen:o,viewport:a,skipped:r}=this;if(this.takeTree(),!e.empty){let s=[];if(e.iterChangedRanges((g,l,C,I)=>s.push({fromA:g,toA:l,fromB:C,toB:I})),i=vd.applyChanges(i,s),n=za.empty,o=0,a={from:e.mapPos(a.from,-1),to:e.mapPos(a.to,1)},this.skipped.length){r=[];for(let g of this.skipped){let l=e.mapPos(g.from,1),C=e.mapPos(g.to,-1);le.from&&(this.fragments=xAA(this.fragments,n,o),this.skipped.splice(i--,1))}return this.skipped.length>=A?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,A){this.skipped.push({from:e,to:A})}static getSkippingParser(e){return new class extends RQ{createParse(A,i,n){let o=n[0].from,a=n[n.length-1].to;return{parsedPos:o,advance(){let s=Qf;if(s){for(let g of n)s.tempSkipped.push(g);e&&(s.scheduleOn=s.scheduleOn?Promise.all([s.scheduleOn,e]):e)}return this.parsedPos=a,new za(ps.none,[],[],a-o)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let A=this.fragments;return this.treeLen>=e&&A.length&&A[0].from==0&&A[0].to>=e}static get(){return Qf}};function xAA(t,e,A){return vd.applyChanges(t,[{fromA:e,toA:A,fromB:e,toB:A}])}var uf=class t{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let A=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),A.viewport.to);return A.work(20,i)||A.takeTree(),new t(A)}static init(e){let A=Math.min(3e3,e.doc.length),i=RF.create(e.facet(NI).parser,e,{from:0,to:A});return i.work(20,A)||i.takeTree(),new t(i)}};Nc.state=va.define({create:uf.init,update(t,e){for(let A of e.effects)if(A.is(Nc.setState))return A.value;return e.startState.facet(NI)!=e.state.facet(NI)?uf.init(e.state):t.apply(e)}});var GAA=t=>{let e=setTimeout(()=>t(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(GAA=t=>{let e=-1,A=setTimeout(()=>{e=requestIdleCallback(t,{timeout:400})},100);return()=>e<0?clearTimeout(A):cancelIdleCallback(e)});var MF=typeof navigator<"u"&&(!((bF=navigator.scheduling)===null||bF===void 0)&&bF.isInputPending)?()=>navigator.scheduling.isInputPending():null,rbA=Go.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let A=this.view.state.field(Nc.state).context;(A.updateViewport(e.view.viewport)||this.view.viewport.to>A.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(A)}scheduleWork(){if(this.working)return;let{state:e}=this.view,A=e.field(Nc.state);(A.tree!=A.context.tree||!A.context.isDone(e.doc.length))&&(this.working=GAA(this.work))}work(e){this.working=null;let A=Date.now();if(this.chunkEndn+1e3,s=o.context.work(()=>MF&&MF()||Date.now()>a,n+(r?0:1e5));this.chunkBudget-=Date.now()-A,(s||this.chunkBudget<=0)&&(o.context.takeTree(),this.view.dispatch({effects:Nc.setState.of(new uf(o.context))})),this.chunkBudget>0&&!(s&&!r)&&this.scheduleWork(),this.checkAsyncSchedule(o.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(A=>Sr(this.view.state,A)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),NI=We.define({combine(t){return t.length?t[0]:null},enables:t=>[Nc.state,rbA,ii.contentAttributes.compute([t],e=>{let A=e.facet(t);return A&&A.name?{"data-language":A.name}:{}})]}),YD=class{constructor(e,A=[]){this.language=e,this.support=A,this.extension=[e,A]}};var sbA=We.define(),xd=We.define({combine:t=>{if(!t.length)return" ";let e=t[0];if(!e||/\S/.test(e)||Array.from(e).some(A=>A!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(t[0]));return e}});function _c(t){let e=t.facet(xd);return e.charCodeAt(0)==9?t.tabSize*e.length:e.length}function LQ(t,e){let A="",i=t.tabSize,n=t.facet(xd)[0];if(n==" "){for(;e>=i;)A+=" ",e-=i;n=" "}for(let o=0;o=e?gbA(t,A,e):null}var kd=class{constructor(e,A={}){this.state=e,this.options=A,this.unit=_c(e)}lineAt(e,A=1){let i=this.state.doc.lineAt(e),{simulateBreak:n,simulateDoubleBreak:o}=this.options;return n!=null&&n>=i.from&&n<=i.to?o&&n==e?{text:"",from:e}:(A<0?n-1&&(o+=a-this.countColumn(i,i.search(/\S|$/))),o}countColumn(e,A=e.length){return KC(e,this.state.tabSize,A)}lineIndent(e,A=1){let{text:i,from:n}=this.lineAt(e,A),o=this.options.overrideIndentation;if(o){let a=o(n);if(a>-1)return a}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},JF=new vi;function gbA(t,e,A){let i=e.resolveStack(A),n=e.resolveInner(A,-1).resolve(A,0).enterUnfinishedNodesBefore(A);if(n!=i.node){let o=[];for(let a=n;a&&!(a.fromi.node.to||a.from==i.node.from&&a.type==i.node.type);a=a.parent)o.push(a);for(let a=o.length-1;a>=0;a--)i={node:o[a],next:i}}return KAA(i,t,A)}function KAA(t,e,A){for(let i=t;i;i=i.next){let n=cbA(i.node);if(n)return n(NF.create(e,A,i))}return 0}function lbA(t){return t.pos==t.options.simulateBreak&&t.options.simulateDoubleBreak}function cbA(t){let e=t.type.prop(JF);if(e)return e;let A=t.firstChild,i;if(A&&(i=A.type.prop(vi.closedBy))){let n=t.lastChild,o=n&&i.indexOf(n.name)>-1;return a=>BbA(a,!0,1,void 0,o&&!lbA(a)?n.from:void 0)}return t.parent==null?CbA:null}function CbA(){return 0}var NF=class t extends kd{constructor(e,A,i){super(e.state,e.options),this.base=e,this.pos=A,this.context=i}get node(){return this.context.node}static create(e,A,i){return new t(e,A,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let A=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(A.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(IbA(i,e))break;A=this.state.doc.lineAt(i.from)}return this.lineIndent(A.from)}continue(){return KAA(this.context.next,this.base,this.pos)}};function IbA(t,e){for(let A=e;A;A=A.parent)if(t==A)return!0;return!1}function dbA(t){let e=t.node,A=e.childAfter(e.from),i=e.lastChild;if(!A)return null;let n=t.options.simulateBreak,o=t.state.doc.lineAt(A.from),a=n==null||n<=o.from?o.to:Math.min(o.to,n);for(let r=A.to;;){let s=e.childAfter(r);if(!s||s==i)return null;if(!s.type.isSkipped){if(s.from>=a)return null;let g=/^ */.exec(o.text.slice(A.to-o.from))[0].length;return{from:A.from,to:A.to+g}}r=s.to}}function BbA(t,e,A,i,n){let o=t.textAfter,a=o.match(/^\s*/)[0].length,r=i&&o.slice(a,a+i.length)==i||n==t.pos+a,s=e?dbA(t):null;return s?r?t.column(s.from):t.column(s.to):t.baseIndent+(r?0:t.unit*A)}function YF({except:t,units:e=1}={}){return A=>{let i=t&&t.test(A.textAfter);return A.baseIndent+(i?0:e*A.unit)}}var EbA=200;function UAA(){return er.transactionFilter.of(t=>{if(!t.docChanged||!t.isUserEvent("input.type")&&!t.isUserEvent("input.complete"))return t;let e=t.startState.languageDataAt("indentOnInput",t.startState.selection.main.head);if(!e.length)return t;let A=t.newDoc,{head:i}=t.newSelection.main,n=A.lineAt(i);if(i>n.from+EbA)return t;let o=A.sliceString(n.from,i);if(!e.some(g=>g.test(o)))return t;let{state:a}=t,r=-1,s=[];for(let{head:g}of a.selection.ranges){let l=a.doc.lineAt(g);if(l.from==r)continue;r=l.from;let C=HD(a,l.from);if(C==null)continue;let I=/^\s*/.exec(l.text)[0],d=LQ(a,C);I!=d&&s.push({from:l.from,to:l.from+I.length,insert:d})}return s.length?[t,{changes:s,sequential:!0}]:t})}var TF=We.define(),ff=new vi;function JAA(t){let e=t.firstChild,A=t.lastChild;return e&&e.toA)continue;if(o&&r.from=e&&g.to>A&&(o=g)}}return o}function hbA(t){let e=t.lastChild;return e&&e.to==t.to&&e.type.isError}function FQ(t,e,A){for(let i of t.facet(TF)){let n=i(t,e,A);if(n)return n}return QbA(t,e,A)}function YAA(t,e){let A=e.mapPos(t.from,1),i=e.mapPos(t.to,-1);return A>=i?void 0:{from:A,to:i}}var GQ=Hi.define({map:YAA}),mf=Hi.define({map:YAA});function TAA(t){let e=[];for(let{head:A}of t.state.selection.ranges)e.some(i=>i.from<=A&&i.to>=A)||e.push(t.lineBlockAt(A));return e}var Sd=va.define({create(){return yt.none},update(t,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((A,i)=>t=RAA(t,A,i)),t=t.map(e.changes);for(let A of e.effects)if(A.is(GQ)&&!ubA(t,A.value.from,A.value.to)){let{preparePlaceholder:i}=e.state.facet(OF),n=i?yt.replace({widget:new FF(i(e.state,A.value))}):NAA;t=t.update({add:[n.range(A.value.from,A.value.to)]})}else A.is(mf)&&(t=t.update({filter:(i,n)=>A.value.from!=i||A.value.to!=n,filterFrom:A.value.from,filterTo:A.value.to}));return e.selection&&(t=RAA(t,e.selection.main.head)),t},provide:t=>ii.decorations.from(t),toJSON(t,e){let A=[];return t.between(0,e.doc.length,(i,n)=>{A.push(i,n)}),A},fromJSON(t){if(!Array.isArray(t)||t.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let A=0;A{ne&&(i=!0)}),i?t.update({filterFrom:e,filterTo:A,filter:(n,o)=>n>=A||o<=e}):t}function TD(t,e,A){var i;let n=null;return(i=t.field(Sd,!1))===null||i===void 0||i.between(e,A,(o,a)=>{(!n||n.from>o)&&(n={from:o,to:a})}),n}function ubA(t,e,A){let i=!1;return t.between(e,e,(n,o)=>{n==e&&o==A&&(i=!0)}),i}function HAA(t,e){return t.field(Sd,!1)?e:e.concat(Hi.appendConfig.of(PAA()))}var fbA=t=>{for(let e of TAA(t)){let A=FQ(t.state,e.from,e.to);if(A)return t.dispatch({effects:HAA(t.state,[GQ.of(A),zAA(t,A)])}),!0}return!1},HF=t=>{if(!t.state.field(Sd,!1))return!1;let e=[];for(let A of TAA(t)){let i=TD(t.state,A.from,A.to);i&&e.push(mf.of(i),zAA(t,i,!1))}return e.length&&t.dispatch({effects:e}),e.length>0};function zAA(t,e,A=!0){let i=t.state.doc.lineAt(e.from).number,n=t.state.doc.lineAt(e.to).number;return ii.announce.of(`${t.state.phrase(A?"Folded lines":"Unfolded lines")} ${i} ${t.state.phrase("to")} ${n}.`)}var mbA=t=>{let{state:e}=t,A=[];for(let i=0;i{let e=t.state.field(Sd,!1);if(!e||!e.size)return!1;let A=[];return e.between(0,t.state.doc.length,(i,n)=>{A.push(mf.of({from:i,to:n}))}),t.dispatch({effects:A}),!0};var OAA=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:fbA},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:HF},{key:"Ctrl-Alt-[",run:mbA},{key:"Ctrl-Alt-]",run:zF}],pbA={placeholderDOM:null,preparePlaceholder:null,placeholderText:"\u2026"},OF=We.define({combine(t){return kr(t,pbA)}});function PAA(t){let e=[Sd,DbA];return t&&e.push(OF.of(t)),e}function jAA(t,e){let{state:A}=t,i=A.facet(OF),n=a=>{let r=t.lineBlockAt(t.posAtDOM(a.target)),s=TD(t.state,r.from,r.to);s&&t.dispatch({effects:mf.of(s)}),a.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(t,n,e);let o=document.createElement("span");return o.textContent=i.placeholderText,o.setAttribute("aria-label",A.phrase("folded code")),o.title=A.phrase("unfold"),o.className="cm-foldPlaceholder",o.onclick=n,o}var NAA=yt.replace({widget:new class extends fg{toDOM(t){return jAA(t,null)}}}),FF=class extends fg{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return jAA(e,this.value)}},wbA={openText:"\u2304",closedText:"\u203A",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1},hf=class extends mg{constructor(e,A){super(),this.config=e,this.open=A}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let A=document.createElement("span");return A.textContent=this.open?this.config.openText:this.config.closedText,A.title=e.state.phrase(this.open?"Fold line":"Unfold line"),A}};function qAA(t={}){let e=cA(cA({},wbA),t),A=new hf(e,!0),i=new hf(e,!1),n=Go.fromClass(class{constructor(a){this.from=a.viewport.from,this.markers=this.buildMarkers(a)}update(a){(a.docChanged||a.viewportChanged||a.startState.facet(NI)!=a.state.facet(NI)||a.startState.field(Sd,!1)!=a.state.field(Sd,!1)||xr(a.startState)!=xr(a.state)||e.foldingChanged(a))&&(this.markers=this.buildMarkers(a.view))}buildMarkers(a){let r=new Wr;for(let s of a.viewportLineBlocks){let g=TD(a.state,s.from,s.to)?i:FQ(a.state,s.from,s.to)?A:null;g&&r.add(s.from,s.from,g)}return r.finish()}}),{domEventHandlers:o}=e;return[n,xD({class:"cm-foldGutter",markers(a){var r;return((r=a.plugin(n))===null||r===void 0?void 0:r.markers)||to.empty},initialSpacer(){return new hf(e,!1)},domEventHandlers:Ge(cA({},o),{click:(a,r,s)=>{if(o.click&&o.click(a,r,s))return!0;let g=TD(a.state,r.from,r.to);if(g)return a.dispatch({effects:mf.of(g)}),!0;let l=FQ(a.state,r.from,r.to);return l?(a.dispatch({effects:GQ.of(l)}),!0):!1}})}),PAA()]}var DbA=ii.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}}),_Q=class t{constructor(e,A){this.specs=e;let i;function n(r){let s=Sl.newName();return(i||(i=Object.create(null)))["."+s]=r,s}let o=typeof A.all=="string"?A.all:A.all?n(A.all):void 0,a=A.scope;this.scope=a instanceof Nc?r=>r.prop(NQ)==a.data:a?r=>r==a:void 0,this.style=vF(e.map(r=>({tag:r.tag,class:r.class||n(Object.assign({},r,{tag:null}))})),{all:o}).style,this.module=i?new Sl(i):null,this.themeType=A.themeType}static define(e,A){return new t(e,A||{})}},_F=We.define(),VAA=We.define({combine(t){return t.length?[t[0]]:null}});function kF(t){let e=t.facet(_F);return e.length?e:t.facet(VAA)}function PF(t,e){let A=[ybA],i;return t instanceof _Q&&(t.module&&A.push(ii.styleModule.of(t.module)),i=t.themeType),e?.fallback?A.push(VAA.of(t)):i?A.push(_F.computeN([ii.darkTheme],n=>n.facet(ii.darkTheme)==(i=="dark")?[t]:[])):A.push(_F.of(t)),A}var LF=class{constructor(e){this.markCache=Object.create(null),this.tree=xr(e.state),this.decorations=this.buildDeco(e,kF(e.state)),this.decoratedTo=e.viewport.to}update(e){let A=xr(e.state),i=kF(e.state),n=i!=kF(e.startState),{viewport:o}=e.view,a=e.changes.mapPos(this.decoratedTo,1);A.length=o.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=a):(A!=this.tree||e.viewportChanged||n)&&(this.tree=A,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=o.to)}buildDeco(e,A){if(!A||!this.tree.length)return yt.none;let i=new Wr;for(let{from:n,to:o}of e.visibleRanges)kAA(this.tree,A,(a,r,s)=>{i.add(a,r,this.markCache[s]||(this.markCache[s]=yt.mark({class:s})))},n,o);return i.finish()}},ybA=bc.high(Go.fromClass(LF,{decorations:t=>t.decorations})),WAA=_Q.define([{tag:Re.meta,color:"#404740"},{tag:Re.link,textDecoration:"underline"},{tag:Re.heading,textDecoration:"underline",fontWeight:"bold"},{tag:Re.emphasis,fontStyle:"italic"},{tag:Re.strong,fontWeight:"bold"},{tag:Re.strikethrough,textDecoration:"line-through"},{tag:Re.keyword,color:"#708"},{tag:[Re.atom,Re.bool,Re.url,Re.contentSeparator,Re.labelName],color:"#219"},{tag:[Re.literal,Re.inserted],color:"#164"},{tag:[Re.string,Re.deleted],color:"#a11"},{tag:[Re.regexp,Re.escape,Re.special(Re.string)],color:"#e40"},{tag:Re.definition(Re.variableName),color:"#00f"},{tag:Re.local(Re.variableName),color:"#30a"},{tag:[Re.typeName,Re.namespace],color:"#085"},{tag:Re.className,color:"#167"},{tag:[Re.special(Re.variableName),Re.macroName],color:"#256"},{tag:Re.definition(Re.propertyName),color:"#00c"},{tag:Re.comment,color:"#940"},{tag:Re.invalid,color:"#f00"}]),vbA=ii.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),ZAA=1e4,XAA="()[]{}",$AA=We.define({combine(t){return kr(t,{afterCursor:!0,brackets:XAA,maxScanDistance:ZAA,renderMatch:kbA})}}),bbA=yt.mark({class:"cm-matchingBracket"}),MbA=yt.mark({class:"cm-nonmatchingBracket"});function kbA(t){let e=[],A=t.matched?bbA:MbA;return e.push(A.range(t.start.from,t.start.to)),t.end&&e.push(A.range(t.end.from,t.end.to)),e}var SbA=va.define({create(){return yt.none},update(t,e){if(!e.docChanged&&!e.selection)return t;let A=[],i=e.state.facet($AA);for(let n of e.state.selection.ranges){if(!n.empty)continue;let o=Fc(e.state,n.head,-1,i)||n.head>0&&Fc(e.state,n.head-1,1,i)||i.afterCursor&&(Fc(e.state,n.head,1,i)||n.headii.decorations.from(t)}),xbA=[SbA,vbA];function AeA(t={}){return[$AA.of(t),xbA]}var RbA=new vi;function GF(t,e,A){let i=t.prop(e<0?vi.openedBy:vi.closedBy);if(i)return i;if(t.name.length==1){let n=A.indexOf(t.name);if(n>-1&&n%2==(e<0?1:0))return[A[n+e]]}return null}function KF(t){let e=t.type.prop(RbA);return e?e(t.node):t}function Fc(t,e,A,i={}){let n=i.maxScanDistance||ZAA,o=i.brackets||XAA,a=xr(t),r=a.resolveInner(e,A);for(let s=r;s;s=s.parent){let g=GF(s.type,A,o);if(g&&s.from0?e>=l.from&&el.from&&e<=l.to))return NbA(t,e,A,s,l,g,o)}}return FbA(t,e,A,a,r.type,n,o)}function NbA(t,e,A,i,n,o,a){let r=i.parent,s={from:n.from,to:n.to},g=0,l=r?.cursor();if(l&&(A<0?l.childBefore(i.from):l.childAfter(i.to)))do if(A<0?l.to<=i.from:l.from>=i.to){if(g==0&&o.indexOf(l.type.name)>-1&&l.from0)return null;let g={from:A<0?e-1:e,to:A>0?e+1:e},l=t.doc.iterRange(e,A>0?t.doc.length:0),C=0;for(let I=0;!l.next().done&&I<=o;){let d=l.value;A<0&&(I+=d.length);let B=e+I*A;for(let E=A>0?0:d.length-1,Q=A>0?d.length:-1;E!=Q;E+=A){let f=a.indexOf(d[E]);if(!(f<0||i.resolveInner(B+E,1).type!=n))if(f%2==0==A>0)C++;else{if(C==1)return{start:g,end:{from:B+E,to:B+E+1},matched:f>>1==s>>1};C--}}A>0&&(I+=d.length)}return l.done?{start:g,matched:!1}:null}var _bA=Object.create(null),FAA=[ps.none];var _AA=[],LAA=Object.create(null),LbA=Object.create(null);for(let[t,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])LbA[t]=GbA(_bA,e);function SF(t,e){_AA.indexOf(t)>-1||(_AA.push(t),console.warn(e))}function GbA(t,e){let A=[];for(let r of e.split(" ")){let s=[];for(let g of r.split(".")){let l=t[g]||Re[g];l?typeof l=="function"?s.length?s=s.map(l):SF(g,`Modifier ${g} used at start of tag`):s.length?SF(g,`Tag ${g} used as modifier`):s=Array.isArray(l)?l:[l]:SF(g,`Unknown highlighting tag ${g}`)}for(let g of s)A.push(g)}if(!A.length)return 0;let i=e.replace(/ /g,"_"),n=i+" "+A.map(r=>r.id),o=LAA[n];if(o)return o.id;let a=LAA[n]=ps.define({id:FAA.length,name:i,props:[UD({[i]:A})]});return FAA.push(a),a.id}var ewe={rtl:yt.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"rtl"},bidiIsolate:mo.RTL}),ltr:yt.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"ltr"},bidiIsolate:mo.LTR}),auto:yt.mark({class:"cm-iso",inclusive:!0,attributes:{dir:"auto"},bidiIsolate:null})};var KbA=t=>{let{state:e}=t,A=e.doc.lineAt(e.selection.main.from),i=WF(t.state,A.from);return i.line?UbA(t):i.block?YbA(t):!1};function VF(t,e){return({state:A,dispatch:i})=>{if(A.readOnly)return!1;let n=t(e,A);return n?(i(A.update(n)),!0):!1}}var UbA=VF(zbA,0);var JbA=VF(geA,0);var YbA=VF((t,e)=>geA(t,e,HbA(e)),0);function WF(t,e){let A=t.languageDataAt("commentTokens",e,1);return A.length?A[0]:{}}var pf=50;function TbA(t,{open:e,close:A},i,n){let o=t.sliceDoc(i-pf,i),a=t.sliceDoc(n,n+pf),r=/\s*$/.exec(o)[0].length,s=/^\s*/.exec(a)[0].length,g=o.length-r;if(o.slice(g-e.length,g)==e&&a.slice(s,s+A.length)==A)return{open:{pos:i-r,margin:r&&1},close:{pos:n+s,margin:s&&1}};let l,C;n-i<=2*pf?l=C=t.sliceDoc(i,n):(l=t.sliceDoc(i,i+pf),C=t.sliceDoc(n-pf,n));let I=/^\s*/.exec(l)[0].length,d=/\s*$/.exec(C)[0].length,B=C.length-d-A.length;return l.slice(I,I+e.length)==e&&C.slice(B,B+A.length)==A?{open:{pos:i+I+e.length,margin:/\s/.test(l.charAt(I+e.length))?1:0},close:{pos:n-d-A.length,margin:/\s/.test(C.charAt(B-1))?1:0}}:null}function HbA(t){let e=[];for(let A of t.selection.ranges){let i=t.doc.lineAt(A.from),n=A.to<=i.to?i:t.doc.lineAt(A.to);n.from>i.from&&n.from==A.to&&(n=A.to==i.to+1?i:t.doc.lineAt(A.to-1));let o=e.length-1;o>=0&&e[o].to>i.from?e[o].to=n.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:n.to})}return e}function geA(t,e,A=e.selection.ranges){let i=A.map(o=>WF(e,o.from).block);if(!i.every(o=>o))return null;let n=A.map((o,a)=>TbA(e,i[a],o.from,o.to));if(t!=2&&!n.every(o=>o))return{changes:e.changes(A.map((o,a)=>n[a]?[]:[{from:o.from,insert:i[a].open+" "},{from:o.to,insert:" "+i[a].close}]))};if(t!=1&&n.some(o=>o)){let o=[];for(let a=0,r;an&&(o==a||a>C.from)){n=C.from;let I=/^\s*/.exec(C.text)[0].length,d=I==C.length,B=C.text.slice(I,I+g.length)==g?I:-1;Io.comment<0&&(!o.empty||o.single))){let o=[];for(let{line:r,token:s,indent:g,empty:l,single:C}of i)(C||!l)&&o.push({from:r.from+g,insert:s+" "});let a=e.changes(o);return{changes:a,selection:e.selection.map(a,1)}}else if(t!=1&&i.some(o=>o.comment>=0)){let o=[];for(let{line:a,comment:r,token:s}of i)if(r>=0){let g=a.from+r,l=g+s.length;a.text[l-a.from]==" "&&l++,o.push({from:g,to:l})}return{changes:o}}return null}function KQ(t,e){return de.create(t.ranges.map(e),t.mainIndex)}function Lc(t,e){return t.update({selection:e,scrollIntoView:!0,userEvent:"select"})}function Gc({state:t,dispatch:e},A){let i=KQ(t.selection,A);return i.eq(t.selection,!0)?!1:(e(Lc(t,i)),!0)}function OD(t,e){return de.cursor(e?t.to:t.from)}function leA(t,e){return Gc(t,A=>A.empty?t.moveByChar(A,e):OD(A,e))}function ws(t){return t.textDirectionAt(t.state.selection.main.head)==mo.LTR}var ceA=t=>leA(t,!ws(t)),CeA=t=>leA(t,ws(t));function IeA(t,e){return Gc(t,A=>A.empty?t.moveByGroup(A,e):OD(A,e))}var ObA=t=>IeA(t,!ws(t)),PbA=t=>IeA(t,ws(t));var cwe=typeof Intl<"u"&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function jbA(t,e,A){if(e.type.prop(A))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(t.sliceDoc(e.from,e.to)))||e.firstChild}function PD(t,e,A){let i=xr(t).resolveInner(e.head),n=A?vi.closedBy:vi.openedBy;for(let s=e.head;;){let g=A?i.childAfter(s):i.childBefore(s);if(!g)break;jbA(t,g,n)?i=g:s=A?g.to:g.from}let o=i.type.prop(n),a,r;return o&&(a=A?Fc(t,i.from,1):Fc(t,i.to,-1))&&a.matched?r=A?a.end.to:a.end.from:r=A?i.to:i.from,de.cursor(r,A?-1:1)}var qbA=t=>Gc(t,e=>PD(t.state,e,!ws(t))),VbA=t=>Gc(t,e=>PD(t.state,e,ws(t)));function deA(t,e){return Gc(t,A=>{if(!A.empty)return OD(A,e);let i=t.moveVertically(A,e);return i.head!=A.head?i:t.moveToLineBoundary(A,e)})}var BeA=t=>deA(t,!1),EeA=t=>deA(t,!0);function QeA(t){let e=t.scrollDOM.clientHeighta.empty?t.moveVertically(a,e,A.height):OD(a,e));if(n.eq(i.selection))return!1;let o;if(A.selfScroll){let a=t.coordsAtPos(i.selection.main.head),r=t.scrollDOM.getBoundingClientRect(),s=r.top+A.marginTop,g=r.bottom-A.marginBottom;a&&a.top>s&&a.bottomheA(t,!1),jF=t=>heA(t,!0);function FI(t,e,A){let i=t.lineBlockAt(e.head),n=t.moveToLineBoundary(e,A);if(n.head==e.head&&n.head!=(A?i.to:i.from)&&(n=t.moveToLineBoundary(e,A,!1)),!A&&n.head==i.from&&i.length){let o=/^\s*/.exec(t.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;o&&e.head!=i.from+o&&(n=de.cursor(i.from+o))}return n}var WbA=t=>Gc(t,e=>FI(t,e,!0)),ZbA=t=>Gc(t,e=>FI(t,e,!1)),XbA=t=>Gc(t,e=>FI(t,e,!ws(t))),$bA=t=>Gc(t,e=>FI(t,e,ws(t))),A9A=t=>Gc(t,e=>de.cursor(t.lineBlockAt(e.head).from,1)),e9A=t=>Gc(t,e=>de.cursor(t.lineBlockAt(e.head).to,-1));function t9A(t,e,A){let i=!1,n=KQ(t.selection,o=>{let a=Fc(t,o.head,-1)||Fc(t,o.head,1)||o.head>0&&Fc(t,o.head-1,1)||o.headt9A(t,e,!1);function Fl(t,e){let A=KQ(t.state.selection,i=>{let n=e(i);return de.range(i.anchor,n.head,n.goalColumn,n.bidiLevel||void 0)});return A.eq(t.state.selection)?!1:(t.dispatch(Lc(t.state,A)),!0)}function ueA(t,e){return Fl(t,A=>t.moveByChar(A,e))}var feA=t=>ueA(t,!ws(t)),meA=t=>ueA(t,ws(t));function peA(t,e){return Fl(t,A=>t.moveByGroup(A,e))}var n9A=t=>peA(t,!ws(t)),o9A=t=>peA(t,ws(t));var a9A=t=>Fl(t,e=>PD(t.state,e,!ws(t))),r9A=t=>Fl(t,e=>PD(t.state,e,ws(t)));function weA(t,e){return Fl(t,A=>t.moveVertically(A,e))}var DeA=t=>weA(t,!1),yeA=t=>weA(t,!0);function veA(t,e){return Fl(t,A=>t.moveVertically(A,e,QeA(t).height))}var teA=t=>veA(t,!1),ieA=t=>veA(t,!0),s9A=t=>Fl(t,e=>FI(t,e,!0)),g9A=t=>Fl(t,e=>FI(t,e,!1)),l9A=t=>Fl(t,e=>FI(t,e,!ws(t))),c9A=t=>Fl(t,e=>FI(t,e,ws(t))),C9A=t=>Fl(t,e=>de.cursor(t.lineBlockAt(e.head).from)),I9A=t=>Fl(t,e=>de.cursor(t.lineBlockAt(e.head).to)),neA=({state:t,dispatch:e})=>(e(Lc(t,{anchor:0})),!0),oeA=({state:t,dispatch:e})=>(e(Lc(t,{anchor:t.doc.length})),!0),aeA=({state:t,dispatch:e})=>(e(Lc(t,{anchor:t.selection.main.anchor,head:0})),!0),reA=({state:t,dispatch:e})=>(e(Lc(t,{anchor:t.selection.main.anchor,head:t.doc.length})),!0),d9A=({state:t,dispatch:e})=>(e(t.update({selection:{anchor:0,head:t.doc.length},userEvent:"select"})),!0),B9A=({state:t,dispatch:e})=>{let A=jD(t).map(({from:i,to:n})=>de.range(i,Math.min(n+1,t.doc.length)));return e(t.update({selection:de.create(A),userEvent:"select"})),!0},E9A=({state:t,dispatch:e})=>{let A=KQ(t.selection,i=>{let n=xr(t),o=n.resolveStack(i.from,1);if(i.empty){let a=n.resolveStack(i.from,-1);a.node.from>=o.node.from&&a.node.to<=o.node.to&&(o=a)}for(let a=o;a;a=a.next){let{node:r}=a;if((r.from=i.to||r.to>i.to&&r.from<=i.from)&&a.next)return de.range(r.to,r.from)}return i});return A.eq(t.selection)?!1:(e(Lc(t,A)),!0)};function beA(t,e){let{state:A}=t,i=A.selection,n=A.selection.ranges.slice();for(let o of A.selection.ranges){let a=A.doc.lineAt(o.head);if(e?a.to0)for(let r=o;;){let s=t.moveVertically(r,e);if(s.heada.to){n.some(g=>g.head==s.head)||n.push(s);break}else{if(s.head==r.head)break;r=s}}}return n.length==i.ranges.length?!1:(t.dispatch(Lc(A,de.create(n,n.length-1))),!0)}var Q9A=t=>beA(t,!1),h9A=t=>beA(t,!0),u9A=({state:t,dispatch:e})=>{let A=t.selection,i=null;return A.ranges.length>1?i=de.create([A.main]):A.main.empty||(i=de.create([de.cursor(A.main.head)])),i?(e(Lc(t,i)),!0):!1};function wf(t,e){if(t.state.readOnly)return!1;let A="delete.selection",{state:i}=t,n=i.changeByRange(o=>{let{from:a,to:r}=o;if(a==r){let s=e(o);sa&&(A="delete.forward",s=zD(t,s,!0)),a=Math.min(a,s),r=Math.max(r,s)}else a=zD(t,a,!1),r=zD(t,r,!0);return a==r?{range:o}:{changes:{from:a,to:r},range:de.cursor(a,an(t)))i.between(e,e,(n,o)=>{ne&&(e=A?o:n)});return e}var MeA=(t,e,A)=>wf(t,i=>{let n=i.from,{state:o}=t,a=o.doc.lineAt(n),r,s;if(A&&!e&&n>a.from&&nMeA(t,!1,!0);var keA=t=>MeA(t,!0,!1),SeA=(t,e)=>wf(t,A=>{let i=A.head,{state:n}=t,o=n.doc.lineAt(i),a=n.charCategorizer(i);for(let r=null;;){if(i==(e?o.to:o.from)){i==A.head&&o.number!=(e?n.doc.lines:1)&&(i+=e?1:-1);break}let s=Ta(o.text,i-o.from,e)+o.from,g=o.text.slice(Math.min(i,s)-o.from,Math.max(i,s)-o.from),l=a(g);if(r!=null&&l!=r)break;(g!=" "||i!=A.head)&&(r=l),i=s}return i}),xeA=t=>SeA(t,!1),f9A=t=>SeA(t,!0);var m9A=t=>wf(t,e=>{let A=t.lineBlockAt(e.head).to;return e.headwf(t,e=>{let A=t.moveToLineBoundary(e,!1).head;return e.head>A?A:Math.max(0,e.head-1)}),w9A=t=>wf(t,e=>{let A=t.moveToLineBoundary(e,!0).head;return e.head{if(t.readOnly)return!1;let A=t.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:bn.of(["",""])},range:de.cursor(i.from)}));return e(t.update(A,{scrollIntoView:!0,userEvent:"input"})),!0},y9A=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let A=t.changeByRange(i=>{if(!i.empty||i.from==0||i.from==t.doc.length)return{range:i};let n=i.from,o=t.doc.lineAt(n),a=n==o.from?n-1:Ta(o.text,n-o.from,!1)+o.from,r=n==o.to?n+1:Ta(o.text,n-o.from,!0)+o.from;return{changes:{from:a,to:r,insert:t.doc.slice(n,r).append(t.doc.slice(a,n))},range:de.cursor(r)}});return A.changes.empty?!1:(e(t.update(A,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function jD(t){let e=[],A=-1;for(let i of t.selection.ranges){let n=t.doc.lineAt(i.from),o=t.doc.lineAt(i.to);if(!i.empty&&i.to==o.from&&(o=t.doc.lineAt(i.to-1)),A>=n.number){let a=e[e.length-1];a.to=o.to,a.ranges.push(i)}else e.push({from:n.from,to:o.to,ranges:[i]});A=o.number+1}return e}function ReA(t,e,A){if(t.readOnly)return!1;let i=[],n=[];for(let o of jD(t)){if(A?o.to==t.doc.length:o.from==0)continue;let a=t.doc.lineAt(A?o.to+1:o.from-1),r=a.length+1;if(A){i.push({from:o.to,to:a.to},{from:o.from,insert:a.text+t.lineBreak});for(let s of o.ranges)n.push(de.range(Math.min(t.doc.length,s.anchor+r),Math.min(t.doc.length,s.head+r)))}else{i.push({from:a.from,to:o.from},{from:o.to,insert:t.lineBreak+a.text});for(let s of o.ranges)n.push(de.range(s.anchor-r,s.head-r))}}return i.length?(e(t.update({changes:i,scrollIntoView:!0,selection:de.create(n,t.selection.mainIndex),userEvent:"move.line"})),!0):!1}var v9A=({state:t,dispatch:e})=>ReA(t,e,!1),b9A=({state:t,dispatch:e})=>ReA(t,e,!0);function NeA(t,e,A){if(t.readOnly)return!1;let i=[];for(let o of jD(t))A?i.push({from:o.from,insert:t.doc.slice(o.from,o.to)+t.lineBreak}):i.push({from:o.to,insert:t.lineBreak+t.doc.slice(o.from,o.to)});let n=t.changes(i);return e(t.update({changes:n,selection:t.selection.map(n,A?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}var M9A=({state:t,dispatch:e})=>NeA(t,e,!1),k9A=({state:t,dispatch:e})=>NeA(t,e,!0),S9A=t=>{if(t.state.readOnly)return!1;let{state:e}=t,A=e.changes(jD(e).map(({from:n,to:o})=>(n>0?n--:o{let o;if(t.lineWrapping){let a=t.lineBlockAt(n.head),r=t.coordsAtPos(n.head,n.assoc||1);r&&(o=a.bottom+t.documentTop-r.bottom+t.defaultLineHeight/2)}return t.moveVertically(n,!0,o)}).map(A);return t.dispatch({changes:A,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function x9A(t,e){if(/\(\)|\[\]|\{\}/.test(t.sliceDoc(e-1,e+1)))return{from:e,to:e};let A=xr(t).resolveInner(e),i=A.childBefore(e),n=A.childAfter(e),o;return i&&n&&i.to<=e&&n.from>=e&&(o=i.type.prop(vi.closedBy))&&o.indexOf(n.name)>-1&&t.doc.lineAt(i.to).from==t.doc.lineAt(n.from).from&&!/\S/.test(t.sliceDoc(i.to,n.from))?{from:i.to,to:n.from}:null}var seA=FeA(!1),R9A=FeA(!0);function FeA(t){return({state:e,dispatch:A})=>{if(e.readOnly)return!1;let i=e.changeByRange(n=>{let{from:o,to:a}=n,r=e.doc.lineAt(o),s=!t&&o==a&&x9A(e,o);t&&(o=a=(a<=r.to?r:e.doc.lineAt(a)).to);let g=new kd(e,{simulateBreak:o,simulateDoubleBreak:!!s}),l=HD(g,o);for(l==null&&(l=KC(/^\s*/.exec(e.doc.lineAt(o).text)[0],e.tabSize));ar.from&&o{let n=[];for(let a=i.from;a<=i.to;){let r=t.doc.lineAt(a);r.number>A&&(i.empty||i.to>r.from)&&(e(r,n,i),A=r.number),a=r.to+1}let o=t.changes(n);return{changes:n,range:de.range(o.mapPos(i.anchor,1),o.mapPos(i.head,1))}})}var N9A=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let A=Object.create(null),i=new kd(t,{overrideIndentation:o=>{let a=A[o];return a??-1}}),n=ZF(t,(o,a,r)=>{let s=HD(i,o.from);if(s==null)return;/\S/.test(o.text)||(s=0);let g=/^\s*/.exec(o.text)[0],l=LQ(t,s);(g!=l||r.fromt.readOnly?!1:(e(t.update(ZF(t,(A,i)=>{i.push({from:A.from,insert:t.facet(xd)})}),{userEvent:"input.indent"})),!0),LeA=({state:t,dispatch:e})=>t.readOnly?!1:(e(t.update(ZF(t,(A,i)=>{let n=/^\s*/.exec(A.text)[0];if(!n)return;let o=KC(n,t.tabSize),a=0,r=LQ(t,Math.max(0,o-_c(t)));for(;a(t.setTabFocusMode(),!0);var _9A=[{key:"Ctrl-b",run:ceA,shift:feA,preventDefault:!0},{key:"Ctrl-f",run:CeA,shift:meA},{key:"Ctrl-p",run:BeA,shift:DeA},{key:"Ctrl-n",run:EeA,shift:yeA},{key:"Ctrl-a",run:A9A,shift:C9A},{key:"Ctrl-e",run:e9A,shift:I9A},{key:"Ctrl-d",run:keA},{key:"Ctrl-h",run:qF},{key:"Ctrl-k",run:m9A},{key:"Ctrl-Alt-h",run:xeA},{key:"Ctrl-o",run:D9A},{key:"Ctrl-t",run:y9A},{key:"Ctrl-v",run:jF}],L9A=[{key:"ArrowLeft",run:ceA,shift:feA,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:ObA,shift:n9A,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:XbA,shift:l9A,preventDefault:!0},{key:"ArrowRight",run:CeA,shift:meA,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:PbA,shift:o9A,preventDefault:!0},{mac:"Cmd-ArrowRight",run:$bA,shift:c9A,preventDefault:!0},{key:"ArrowUp",run:BeA,shift:DeA,preventDefault:!0},{mac:"Cmd-ArrowUp",run:neA,shift:aeA},{mac:"Ctrl-ArrowUp",run:eeA,shift:teA},{key:"ArrowDown",run:EeA,shift:yeA,preventDefault:!0},{mac:"Cmd-ArrowDown",run:oeA,shift:reA},{mac:"Ctrl-ArrowDown",run:jF,shift:ieA},{key:"PageUp",run:eeA,shift:teA},{key:"PageDown",run:jF,shift:ieA},{key:"Home",run:ZbA,shift:g9A,preventDefault:!0},{key:"Mod-Home",run:neA,shift:aeA},{key:"End",run:WbA,shift:s9A,preventDefault:!0},{key:"Mod-End",run:oeA,shift:reA},{key:"Enter",run:seA,shift:seA},{key:"Mod-a",run:d9A},{key:"Backspace",run:qF,shift:qF,preventDefault:!0},{key:"Delete",run:keA,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:xeA,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:f9A,preventDefault:!0},{mac:"Mod-Backspace",run:p9A,preventDefault:!0},{mac:"Mod-Delete",run:w9A,preventDefault:!0}].concat(_9A.map(t=>({mac:t.key,run:t.run,shift:t.shift}))),GeA=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:qbA,shift:a9A},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:VbA,shift:r9A},{key:"Alt-ArrowUp",run:v9A},{key:"Shift-Alt-ArrowUp",run:M9A},{key:"Alt-ArrowDown",run:b9A},{key:"Shift-Alt-ArrowDown",run:k9A},{key:"Mod-Alt-ArrowUp",run:Q9A},{key:"Mod-Alt-ArrowDown",run:h9A},{key:"Escape",run:u9A},{key:"Mod-Enter",run:R9A},{key:"Alt-l",mac:"Ctrl-l",run:B9A},{key:"Mod-i",run:E9A,preventDefault:!0},{key:"Mod-[",run:LeA},{key:"Mod-]",run:_eA},{key:"Mod-Alt-\\",run:N9A},{key:"Shift-Mod-k",run:S9A},{key:"Shift-Mod-\\",run:i9A},{key:"Mod-/",run:KbA},{key:"Alt-A",run:JbA},{key:"Ctrl-m",mac:"Shift-Alt-m",run:F9A}].concat(L9A),KeA={key:"Tab",run:_eA,shift:LeA};var WD=class{constructor(e,A,i){this.from=e,this.to=A,this.diagnostic=i}},Rd=class t{constructor(e,A,i){this.diagnostics=e,this.panel=A,this.selected=i}static init(e,A,i){let n=i.facet(Y0).markerFilter;n&&(e=n(e,i));let o=e.slice().sort((d,B)=>d.from-B.from||d.to-B.to),a=new Wr,r=[],s=0,g=i.doc.iter(),l=0,C=i.doc.length;for(let d=0;;){let B=d==o.length?null:o[d];if(!B&&!r.length)break;let E,Q;if(r.length)E=s,Q=r.reduce((S,M)=>Math.min(S,M.to),B&&B.from>E?B.from:1e8);else{if(E=B.from,E>C)break;Q=B.to,r.push(B),d++}for(;dS.from||S.to==E))r.push(S),d++,Q=Math.min(S.to,Q);else{Q=Math.min(S.from,Q);break}}Q=Math.min(Q,C);let f=!1;if(r.some(S=>S.from==E&&(S.to==Q||Q==C))&&(f=E==Q,!f&&Q-E<10)){let S=E-(l+g.value.length);S>0&&(g.next(S),l=E);for(let M=E;;){if(M>=Q){f=!0;break}if(!g.lineBreak&&l+g.value.length>M)break;M=l+g.value.length,l+=g.value.length,g.next()}}let b=VeA(r);if(f)a.add(E,E,yt.widget({widget:new XF(b),diagnostics:r.slice()}));else{let S=r.reduce((M,D)=>D.markClass?M+" "+D.markClass:M,"");a.add(E,Q,yt.mark({class:"cm-lintRange cm-lintRange-"+b+S,diagnostics:r.slice(),inclusiveEnd:r.some(M=>M.to>Q)}))}if(s=Q,s==C)break;for(let S=0;S{if(!(e&&a.diagnostics.indexOf(e)<0))if(!i)i=new WD(n,o,e||a.diagnostics[0]);else{if(a.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new WD(i.from,o,i.diagnostic)}}),i}function YeA(t,e){let A=e.pos,i=e.end||A,n=t.state.facet(Y0).hideOn(t,A,i);if(n!=null)return n;let o=t.startState.doc.lineAt(e.pos);return!!(t.effects.some(a=>a.is($D))||t.changes.touchesRange(o.from,Math.max(o.to,i)))}function TeA(t,e){return t.field(jg,!1)?e:e.concat(Hi.appendConfig.of(ZeA))}function G9A(t,e){return{effects:TeA(t,[$D.of(e)])}}var $D=Hi.define(),A_=Hi.define(),HeA=Hi.define(),jg=va.define({create(){return new Rd(yt.none,null,null)},update(t,e){if(e.docChanged&&t.diagnostics.size){let A=t.diagnostics.map(e.changes),i=null,n=t.panel;if(t.selected){let o=e.changes.mapPos(t.selected.from,1);i=UQ(A,t.selected.diagnostic,o)||UQ(A,null,o)}!A.size&&n&&e.state.facet(Y0).autoPanel&&(n=null),t=new Rd(A,n,i)}for(let A of e.effects)if(A.is($D)){let i=e.state.facet(Y0).autoPanel?A.value.length?Df.open:null:t.panel;t=Rd.init(A.value,i,e.state)}else A.is(A_)?t=new Rd(t.diagnostics,A.value?Df.open:null,t.selected):A.is(HeA)&&(t=new Rd(t.diagnostics,t.panel,A.value));return t},provide:t=>[Dd.from(t,e=>e.panel),ii.decorations.from(t,e=>e.diagnostics)]});var K9A=yt.mark({class:"cm-lintRange cm-lintRange-active"});function U9A(t,e,A){let{diagnostics:i}=t.state.field(jg),n,o=-1,a=-1;i.between(e-(A<0?1:0),e+(A>0?1:0),(s,g,{spec:l})=>{if(e>=s&&e<=g&&(s==g||(e>s||A>0)&&(eqeA(t,A,!1)))}var J9A=t=>{let e=t.state.field(jg,!1);(!e||!e.panel)&&t.dispatch({effects:TeA(t.state,[A_.of(!0)])});let A=lf(t,Df.open);return A&&A.dom.querySelector(".cm-panel-lint ul").focus(),!0},UeA=t=>{let e=t.state.field(jg,!1);return!e||!e.panel?!1:(t.dispatch({effects:A_.of(!1)}),!0)},Y9A=t=>{let e=t.state.field(jg,!1);if(!e)return!1;let A=t.state.selection.main,i=e.diagnostics.iter(A.to+1);return!i.value&&(i=e.diagnostics.iter(0),!i.value||i.from==A.from&&i.to==A.to)?!1:(t.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0}),!0)};var OeA=[{key:"Mod-Shift-m",run:J9A,preventDefault:!0},{key:"F8",run:Y9A}],T9A=Go.fromClass(class{constructor(t){this.view=t,this.timeout=-1,this.set=!0;let{delay:e}=t.state.facet(Y0);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let t=Date.now();if(tPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(G9A(this.view.state,i.reduce((n,o)=>n.concat(o))))},i=>{Sr(this.view.state,i)})}}update(t){let e=t.state.facet(Y0);(t.docChanged||e!=t.startState.facet(Y0)||e.needsRefresh&&e.needsRefresh(t))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function H9A(t,e,A){let i=[],n=-1;for(let o of t)o.then(a=>{i.push(a),clearTimeout(n),i.length==t.length?e(i):n=setTimeout(()=>e(i),200)},A)}var Y0=We.define({combine(t){return cA({sources:t.map(e=>e.source).filter(e=>e!=null)},kr(t.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:JeA,tooltipFilter:JeA,needsRefresh:(e,A)=>e?A?i=>e(i)||A(i):e:A,hideOn:(e,A)=>e?A?(i,n,o)=>e(i,n,o)||A(i,n,o):e:A,autoPanel:(e,A)=>e||A}))}});function JeA(t,e){return t?e?(A,i)=>e(t(A,i),i):t:e}function PeA(t,e={}){return[Y0.of({source:t,config:e}),T9A,ZeA]}function jeA(t){let e=[];if(t)A:for(let{name:A}of t){for(let i=0;io.toLowerCase()==n.toLowerCase())){e.push(n);continue A}}e.push("")}return e}function qeA(t,e,A){var i;let n=A?jeA(e.actions):[];return io("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},io("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(t):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((o,a)=>{let r=!1,s=d=>{if(d.preventDefault(),r)return;r=!0;let B=UQ(t.state.field(jg).diagnostics,e);B&&o.apply(t,B.from,B.to)},{name:g}=o,l=n[a]?g.indexOf(n[a]):-1,C=l<0?g:[g.slice(0,l),io("u",g.slice(l,l+1)),g.slice(l+1)],I=o.markClass?" "+o.markClass:"";return io("button",{type:"button",class:"cm-diagnosticAction"+I,onclick:s,onmousedown:s,"aria-label":` Action: ${g}${l<0?"":` (access key "${n[a]})"`}.`},C)}),e.source&&io("div",{class:"cm-diagnosticSource"},e.source))}var XF=class extends fg{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return io("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}},ZD=class{constructor(e,A){this.diagnostic=A,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=qeA(e,A,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}},Df=class t{constructor(e){this.view=e,this.items=[];let A=n=>{if(n.keyCode==27)UeA(this.view),this.view.focus();else if(n.keyCode==38||n.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(n.keyCode==40||n.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(n.keyCode==36)this.moveSelection(0);else if(n.keyCode==35)this.moveSelection(this.items.length-1);else if(n.keyCode==13)this.view.focus();else if(n.keyCode>=65&&n.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:o}=this.items[this.selectedIndex],a=jeA(o.actions);for(let r=0;r{for(let o=0;oUeA(this.view)},"\xD7")),this.update()}get selectedIndex(){let e=this.view.state.field(jg).selected;if(!e)return-1;for(let A=0;A{for(let l of g.diagnostics){if(a.has(l))continue;a.add(l);let C=-1,I;for(let d=i;di&&(this.items.splice(i,C-i),n=!0)),A&&I.diagnostic==A.diagnostic?I.dom.hasAttribute("aria-selected")||(I.dom.setAttribute("aria-selected","true"),o=I):I.dom.hasAttribute("aria-selected")&&I.dom.removeAttribute("aria-selected"),i++}});i({sel:o.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:r,panel:s})=>{let g=s.height/this.list.offsetHeight;r.tops.bottom&&(this.list.scrollTop+=(r.bottom-s.bottom)/g)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),n&&this.sync()}sync(){let e=this.list.firstChild;function A(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)A();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)A()}moveSelection(e){if(this.selectedIndex<0)return;let A=this.view.state.field(jg),i=UQ(A.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:HeA.of(i)})}static open(e){return new t(e)}};function VD(t,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(t)}')`}function qD(t){return VD(``,'width="6" height="3"')}var z9A=ii.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:qD("#d11")},".cm-lintRange-warning":{backgroundImage:qD("orange")},".cm-lintRange-info":{backgroundImage:qD("#999")},".cm-lintRange-hint":{backgroundImage:qD("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}}});function O9A(t){return t=="error"?4:t=="warning"?3:t=="info"?2:1}function VeA(t){let e="hint",A=1;for(let i of t){let n=O9A(i.severity);n>A&&(A=n,e=i.severity)}return e}var XD=class extends mg{constructor(e){super(),this.diagnostics=e,this.severity=VeA(e)}toDOM(e){let A=document.createElement("div");A.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,n=e.state.facet(Ay).tooltipFilter;return n&&(i=n(i,e.state)),i.length&&(A.onmouseover=()=>j9A(e,A,i)),A}};function P9A(t,e){let A=i=>{let n=e.getBoundingClientRect();if(!(i.clientX>n.left-10&&i.clientXn.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,P9A(t,e)}let{hoverTime:n}=t.state.facet(Ay),o=setTimeout(i,n);e.onmouseout=()=>{clearTimeout(o),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(o),o=setTimeout(i,n)}}function q9A(t,e){let A=Object.create(null);for(let n of e){let o=t.lineAt(n.from);(A[o.from]||(A[o.from]=[])).push(n)}let i=[];for(let n in A)i.push(new XD(A[n]).range(+n));return to.of(i,!0)}var V9A=xD({class:"cm-gutter-lint",markers:t=>t.state.field($F),widgetMarker:(t,e,A)=>{let i=[];return t.state.field($F).between(A.from,A.to,(n,o,a)=>{n>A.from&&ni.is(e_)?i.value:A,t)},provide:t=>xQ.from(t)}),W9A=ii.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:VD('')},".cm-lint-marker-warning":{content:VD('')},".cm-lint-marker-error":{content:VD('')}}),ZeA=[jg,ii.decorations.compute([jg],t=>{let{selected:e,panel:A}=t.field(jg);return!e||!A||e.from==e.to?yt.none:yt.set([K9A.range(e.from,e.to)])}),IAA(U9A,{hideOn:YeA}),z9A],Ay=We.define({combine(t){return kr(t,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function XeA(t={}){return[Ay.of(t),$F,V9A,W9A,WeA]}var i_=class t{constructor(e,A,i,n,o,a,r,s,g,l=0,C){this.p=e,this.stack=A,this.state=i,this.reducePos=n,this.pos=o,this.score=a,this.buffer=r,this.bufferBase=s,this.curContext=g,this.lookAhead=l,this.parent=C}toString(){return`[${this.stack.filter((e,A)=>A%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,A,i=0){let n=e.parser.context;return new t(e,[],A,i,i,0,[],0,n?new ey(n,n.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,A){this.stack.push(this.state,A,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var A;let i=e>>19,n=e&65535,{parser:o}=this.p,a=this.reducePos=2e3&&!(!((A=this.p.parser.nodeSet.types[n])===null||A===void 0)&&A.isAnonymous)&&(g==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=l):this.p.lastBigReductionSizes;)this.stack.pop();this.reduceContext(n,g)}storeNode(e,A,i,n=4,o=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&a.buffer[r-4]==0&&a.buffer[r-1]>-1){if(A==i)return;if(a.buffer[r-2]>=A){a.buffer[r-2]=i;return}}}if(!o||this.pos==i)this.buffer.push(e,A,i,n);else{let a=this.buffer.length;if(a>0&&(this.buffer[a-4]!=0||this.buffer[a-1]<0)){let r=!1;for(let s=a;s>0&&this.buffer[s-2]>i;s-=4)if(this.buffer[s-1]>=0){r=!0;break}if(r)for(;a>0&&this.buffer[a-2]>i;)this.buffer[a]=this.buffer[a-4],this.buffer[a+1]=this.buffer[a-3],this.buffer[a+2]=this.buffer[a-2],this.buffer[a+3]=this.buffer[a-1],a-=4,n>4&&(n-=4)}this.buffer[a]=e,this.buffer[a+1]=A,this.buffer[a+2]=i,this.buffer[a+3]=n}}shift(e,A,i,n){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let o=e,{parser:a}=this.p;this.pos=n,!a.stateFlag(o,1)&&(n>i||A<=a.maxNode)&&(this.reducePos=n),this.pushState(o,Math.min(i,this.reducePos)),this.shiftContext(A,i),A<=a.maxNode&&this.buffer.push(A,i,n,4)}else this.pos=n,this.shiftContext(A,i),A<=this.p.parser.maxNode&&this.buffer.push(A,i,n,4)}apply(e,A,i,n){e&65536?this.reduce(e):this.shift(e,A,i,n)}useNode(e,A){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let n=this.pos;this.reducePos=this.pos=n+e.length,this.pushState(A,n),this.buffer.push(i,n,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,A=e.buffer.length;for(;A>0&&e.buffer[A-2]>e.reducePos;)A-=4;let i=e.buffer.slice(A),n=e.bufferBase+A;for(;e&&n==e.bufferBase;)e=e.parent;return new t(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,n,this.curContext,this.lookAhead,e)}recoverByDelete(e,A){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,A,4),this.storeNode(0,this.pos,A,i?8:4),this.pos=this.reducePos=A,this.score-=190}canShift(e){for(let A=new n_(this);;){let i=this.p.parser.stateSlot(A.state,4)||this.p.parser.hasAction(A.state,e);if(i==0)return!1;if((i&65536)==0)return!0;A.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let A=this.p.parser.nextStates(this.state);if(A.length>8||this.stack.length>=120){let n=[];for(let o=0,a;os&1&&r==a)||n.push(A[o],a)}A=n}let i=[];for(let n=0;n>19,n=A&65535,o=this.stack.length-i*3;if(o<0||e.getGoto(this.stack[o],n,!1)<0){let a=this.findForcedReduction();if(a==null)return!1;A=a}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(A),!0}findForcedReduction(){let{parser:e}=this.p,A=[],i=(n,o)=>{if(!A.includes(n))return A.push(n),e.allActions(n,a=>{if(!(a&393216))if(a&65536){let r=(a>>19)-o;if(r>1){let s=a&65535,g=this.stack.length-r*3;if(g>=0&&e.getGoto(this.stack[g],s,!1)>=0)return r<<19|65536|s}}else{let r=i(a,o+1);if(r!=null)return r}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let A=0;A0&&this.emitLookAhead()}},ey=class{constructor(e,A){this.tracker=e,this.context=A,this.hash=e.strict?e.hash(A):0}},n_=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let A=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let n=this.start.p.parser.getGoto(this.stack[this.base-3],A,!0);this.state=n}},o_=class t{constructor(e,A,i){this.stack=e,this.pos=A,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,A=e.bufferBase+e.buffer.length){return new t(e,A,A-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new t(this.stack,this.pos,this.index)}};function yf(t,e=Uint16Array){if(typeof t!="string")return t;let A=null;for(let i=0,n=0;i=92&&a--,a>=34&&a--;let s=a-32;if(s>=46&&(s-=46,r=!0),o+=s,r)break;o*=46}A?A[n++]=o:A=new e(o)}return A}var JQ=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},$eA=new JQ,a_=class{constructor(e,A){this.input=e,this.ranges=A,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=$eA,this.rangeIndex=0,this.pos=this.chunkPos=A[0].from,this.range=A[0],this.end=A[A.length-1].to,this.readNext()}resolveOffset(e,A){let i=this.range,n=this.rangeIndex,o=this.pos+e;for(;oi.to:o>=i.to;){if(n==this.ranges.length-1)return null;let a=this.ranges[++n];o+=a.from-i.to,i=a}return o}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,A.from);return this.end}peek(e){let A=this.chunkOff+e,i,n;if(A>=0&&A=this.chunk2Pos&&ir.to&&(this.chunk2=this.chunk2.slice(0,r.to-i)),n=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),n}acceptToken(e,A=0){let i=A?this.resolveOffset(A,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,A){if(A?(this.token=A,A.start=e,A.lookAhead=e+1,A.value=A.extended=-1):this.token=$eA,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&A<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,A-this.chunkPos);if(e>=this.chunk2Pos&&A<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,A-this.chunk2Pos);if(e>=this.range.from&&A<=this.range.to)return this.input.read(e,A);let i="";for(let n of this.ranges){if(n.from>=A)break;n.to>e&&(i+=this.input.read(Math.max(n.from,e),Math.min(n.to,A)))}return i}},_I=class{constructor(e,A){this.data=e,this.id=A}token(e,A){let{parser:i}=A.p;ntA(this.data,e,A,this.id,i.data,i.tokenPrecTable)}};_I.prototype.contextual=_I.prototype.fallback=_I.prototype.extend=!1;var r_=class{constructor(e,A,i){this.precTable=A,this.elseToken=i,this.data=typeof e=="string"?yf(e):e}token(e,A){let i=e.pos,n=0;for(;;){let o=e.next<0,a=e.resolveOffset(1,1);if(ntA(this.data,e,A,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(o||n++,a==null)break;e.reset(a,e.token)}n&&(e.reset(i,e.token),e.acceptToken(this.elseToken,n))}};r_.prototype.contextual=_I.prototype.fallback=_I.prototype.extend=!1;function ntA(t,e,A,i,n,o){let a=0,r=1<0){let B=t[d];if(s.allows(B)&&(e.token.value==-1||e.token.value==B||X9A(B,e.token.value,n,o))){e.acceptToken(B);break}}let l=e.next,C=0,I=t[a+2];if(e.next<0&&I>C&&t[g+I*3-3]==65535){a=t[g+I*3-1];continue A}for(;C>1,B=g+d+(d<<1),E=t[B],Q=t[B+1]||65536;if(l=Q)C=d+1;else{a=t[B+2],e.advance();continue A}}break}}function AtA(t,e,A){for(let i=e,n;(n=t[i])!=65535;i++)if(n==A)return i-e;return-1}function X9A(t,e,A,i){let n=AtA(A,i,e);return n<0||AtA(A,i,t)e)&&!i.type.isError)return A<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(t.length,Math.max(i.from+1,e+25));if(A<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return A<0?0:t.length}}var s_=class{constructor(e,A){this.fragments=e,this.nodeSet=A,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?etA(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?etA(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=a,null;if(o instanceof za){if(a==e){if(a=Math.max(this.safeFrom,e)&&(this.trees.push(o),this.start.push(a),this.index.push(0))}else this.index[A]++,this.nextStart=a+o.length}}},g_=class{constructor(e,A){this.stream=A,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new JQ)}getActions(e){let A=0,i=null,{parser:n}=e.p,{tokenizers:o}=n,a=n.stateSlot(e.state,3),r=e.curContext?e.curContext.hash:0,s=0;for(let g=0;gC.end+25&&(s=Math.max(C.lookAhead,s)),C.value!=0)){let I=A;if(C.extended>-1&&(A=this.addActions(e,C.extended,C.end,A)),A=this.addActions(e,C.value,C.end,A),!l.extend&&(i=C,A>I))break}}for(;this.actions.length>A;)this.actions.pop();return s&&e.setLookAhead(s),!i&&e.pos==this.stream.end&&(i=new JQ,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,A=this.addActions(e,i.value,i.end,A)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let A=new JQ,{pos:i,p:n}=e;return A.start=i,A.end=Math.min(i+1,n.stream.end),A.value=i==n.stream.end?n.parser.eofTerm:0,A}updateCachedToken(e,A,i){let n=this.stream.clipPos(i.pos);if(A.token(this.stream.reset(n,e),i),e.value>-1){let{parser:o}=i.p;for(let a=0;a=0&&i.p.parser.dialect.allows(r>>1)){(r&1)==0?e.value=r>>1:e.extended=r>>1;break}}}else e.value=0,e.end=this.stream.clipPos(n+1)}putAction(e,A,i,n){for(let o=0;oe.bufferLength*4?new s_(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,A=this.minStackPos,i=this.stacks=[],n,o;if(this.bigReductionCount>300&&e.length==1){let[a]=e;for(;a.forceReduce()&&a.stack.length&&a.stack[a.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let a=0;aA)i.push(r);else{if(this.advanceStack(r,i,e))continue;{n||(n=[],o=[]),n.push(r);let s=this.tokens.getMainToken(r);o.push(s.value,s.end)}}break}}if(!i.length){let a=n&&$9A(n);if(a)return qg&&console.log("Finish with "+this.stackID(a)),this.stackToTree(a);if(this.parser.strict)throw qg&&n&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+A);this.recovering||(this.recovering=5)}if(this.recovering&&n){let a=this.stoppedAt!=null&&n[0].pos>this.stoppedAt?n[0]:this.runRecovery(n,o,i);if(a)return qg&&console.log("Force-finish "+this.stackID(a)),this.stackToTree(a.forceAll())}if(this.recovering){let a=this.recovering==1?1:this.recovering*3;if(i.length>a)for(i.sort((r,s)=>s.score-r.score);i.length>a;)i.pop();i.some(r=>r.reducePos>A)&&this.recovering--}else if(i.length>1){A:for(let a=0;a500&&g.buffer.length>500)if((r.score-g.score||r.buffer.length-g.buffer.length)>0)i.splice(s--,1);else{i.splice(a--,1);continue A}}}i.length>12&&(i.sort((a,r)=>r.score-a.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let a=1;a ":"";if(this.stoppedAt!=null&&n>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let g=e.curContext&&e.curContext.tracker.strict,l=g?e.curContext.hash:0;for(let C=this.fragments.nodeAt(n);C;){let I=this.parser.nodeSet.types[C.type.id]==C.type?o.getGoto(e.state,C.type.id):-1;if(I>-1&&C.length&&(!g||(C.prop(vi.contextHash)||0)==l))return e.useNode(C,I),qg&&console.log(a+this.stackID(e)+` (via reuse of ${o.getName(C.type.id)})`),!0;if(!(C instanceof za)||C.children.length==0||C.positions[0]>0)break;let d=C.children[0];if(d instanceof za&&C.positions[0]==0)C=d;else break}}let r=o.stateSlot(e.state,4);if(r>0)return e.reduce(r),qg&&console.log(a+this.stackID(e)+` (via always-reduce ${o.getName(r&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let s=this.tokens.getActions(e);for(let g=0;gn?A.push(B):i.push(B)}return!1}advanceFully(e,A){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return ttA(e,A),!0}}runRecovery(e,A,i){let n=null,o=!1;for(let a=0;a ":"";if(r.deadEnd&&(o||(o=!0,r.restart(),qg&&console.log(l+this.stackID(r)+" (restarted)"),this.advanceFully(r,i))))continue;let C=r.split(),I=l;for(let d=0;d<10&&C.forceReduce()&&(qg&&console.log(I+this.stackID(C)+" (via force-reduce)"),!this.advanceFully(C,i));d++)qg&&(I=this.stackID(C)+" -> ");for(let d of r.recoverByInsert(s))qg&&console.log(l+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>r.pos?(g==r.pos&&(g++,s=0),r.recoverByDelete(s,g),qg&&console.log(l+this.stackID(r)+` (via recover-delete ${this.parser.getName(s)})`),ttA(r,i)):(!n||n.scoree.topRules[r][1]),n=[];for(let r=0;r=0)o(l,s,r[g++]);else{let C=r[g+-l];for(let I=-l;I>0;I--)o(r[g++],s,C);g++}}}this.nodeSet=new Cf(A.map((r,s)=>ps.define({name:s>=this.minRepeatTerm?void 0:r,id:s,props:n[s],top:i.indexOf(s)>-1,error:s==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(s)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let a=yf(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let r=0;rtypeof r=="number"?new _I(a,r):r),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,A,i){let n=new l_(this,e,A,i);for(let o of this.wrappers)n=o(n,e,A,i);return n}getGoto(e,A,i=!1){let n=this.goto;if(A>=n[0])return-1;for(let o=n[A+1];;){let a=n[o++],r=a&1,s=n[o++];if(r&&i)return s;for(let g=o+(a>>1);o0}validAction(e,A){return!!this.allActions(e,i=>i==A?!0:null)}allActions(e,A){let i=this.stateSlot(e,4),n=i?A(i):void 0;for(let o=this.stateSlot(e,1);n==null;o+=3){if(this.data[o]==65535)if(this.data[o+1]==1)o=TC(this.data,o+2);else break;n=A(TC(this.data,o+1))}return n}nextStates(e){let A=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=TC(this.data,i+2);else break;if((this.data[i+2]&1)==0){let n=this.data[i+1];A.some((o,a)=>a&1&&o==n)||A.push(this.data[i],n)}}return A}configure(e){let A=Object.assign(Object.create(t.prototype),this);if(e.props&&(A.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);A.top=i}return e.tokenizers&&(A.tokenizers=this.tokenizers.map(i=>{let n=e.tokenizers.find(o=>o.from==i);return n?n.to:i})),e.specializers&&(A.specializers=this.specializers.slice(),A.specializerSpecs=this.specializerSpecs.map((i,n)=>{let o=e.specializers.find(r=>r.from==i.external);if(!o)return i;let a=Object.assign(Object.assign({},i),{external:o.to});return A.specializers[n]=itA(a),a})),e.contextTracker&&(A.context=e.contextTracker),e.dialect&&(A.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(A.strict=e.strict),e.wrap&&(A.wrappers=A.wrappers.concat(e.wrap)),e.bufferLength!=null&&(A.bufferLength=e.bufferLength),A}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let A=this.dynamicPrecedences;return A==null?0:A[e]||0}parseDialect(e){let A=Object.keys(this.dialects),i=A.map(()=>!1);if(e)for(let o of e.split(" ")){let a=A.indexOf(o);a>=0&&(i[a]=!0)}let n=null;for(let o=0;oi)&&A.p.parser.stateFlag(A.state,2)&&(!e||e.scoret.external(A,i)<<1|e}return t.get}var AMA=UD({String:Re.string,Number:Re.number,"True False":Re.bool,PropertyName:Re.propertyName,Null:Re.null,", :":Re.separator,"[ ]":Re.squareBracket,"{ }":Re.brace}),otA=ty.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O",goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"\u26A0 JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array",maxTerm:25,nodeProps:[["isolate",-2,6,11,""],["openedBy",7,"{",14,"["],["closedBy",8,"}",15,"]"]],propSources:[AMA],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0});var eMA=JD.define({name:"json",parser:otA.configure({props:[JF.add({Object:YF({except:/^\s*\}/}),Array:YF({except:/^\s*\]/})}),ff.add({"Object Array":JAA})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function atA(){return new YD(eMA)}var rtA=typeof String.prototype.normalize=="function"?t=>t.normalize("NFKD"):t=>t,GI=class{constructor(e,A,i=0,n=e.length,o,a){this.test=a,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,n),this.bufferStart=i,this.normalize=o?r=>o(rtA(r)):rtA,this.query=this.normalize(A)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Zr(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let A=H3(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Og(e);let n=this.normalize(A);if(n.length)for(let o=0,a=i;;o++){let r=n.charCodeAt(o),s=this.match(r,a,this.bufferPos+this.bufferStart);if(o==n.length-1){if(s)return this.value=s,this;break}a==i&&othis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let A=this.matchPos<=this.to&&this.re.exec(this.curLine);if(A){let i=this.curLineStart+A.index,n=i+A[0].length;if(this.matchPos=sy(this.text,n+(i==n?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,n,A)))return this.value={from:i,to:n,match:A},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||n.to<=A){let r=new t(A,e.sliceString(A,i));return C_.set(e,r),r}if(n.from==A&&n.to==i)return n;let{text:o,from:a}=n;return a>A&&(o=e.sliceString(A,a)+o,a=A),n.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,A=this.re.exec(this.flat.text);if(A&&!A[0]&&A.index==e&&(this.re.lastIndex=e+1,A=this.re.exec(this.flat.text)),A){let i=this.flat.from+A.index,n=i+A[0].length;if((this.flat.to>=this.to||A.index+A[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,n,A)))return this.value={from:i,to:n,match:A},this.matchPos=sy(this.text,n+(i==n?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=ay.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}};typeof Symbol<"u"&&(oy.prototype[Symbol.iterator]=ry.prototype[Symbol.iterator]=function(){return this});function tMA(t){try{return new RegExp(t,h_),!0}catch{return!1}}function sy(t,e){if(e>=t.length)return e;let A=t.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}var iMA=t=>{let{state:e}=t,A=String(e.doc.lineAt(t.state.selection.main.head).number),{close:i,result:n}=BAA(t,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:A},focus:!0,submitLabel:e.phrase("go")});return n.then(o=>{let a=o&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(o.elements.line.value);if(!a){t.dispatch({effects:i});return}let r=e.doc.lineAt(e.selection.main.head),[,s,g,l,C]=a,I=l?+l.slice(1):0,d=g?+g:r.number;if(g&&C){let Q=d/100;s&&(Q=Q*(s=="-"?-1:1)+r.number/e.doc.lines),d=Math.round(e.doc.lines*Q)}else g&&s&&(d=d*(s=="-"?-1:1)+r.number);let B=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),E=de.cursor(B.from+Math.max(0,Math.min(I,B.length)));t.dispatch({effects:[i,ii.scrollIntoView(E.from,{y:"center"})],selection:E})}),!0},nMA={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},ctA=We.define({combine(t){return kr(t,nMA,{highlightWordAroundCursor:(e,A)=>e||A,minSelectionLength:Math.min,maxMatches:Math.min})}});function CtA(t){let e=[gMA,sMA];return t&&e.push(ctA.of(t)),e}var oMA=yt.mark({class:"cm-selectionMatch"}),aMA=yt.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function stA(t,e,A,i){return(A==0||t(e.sliceDoc(A-1,A))!=Lo.Word)&&(i==e.doc.length||t(e.sliceDoc(i,i+1))!=Lo.Word)}function rMA(t,e,A,i){return t(e.sliceDoc(A,A+1))==Lo.Word&&t(e.sliceDoc(i-1,i))==Lo.Word}var sMA=Go.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.selectionSet||t.docChanged||t.viewportChanged)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=t.state.facet(ctA),{state:A}=t,i=A.selection;if(i.ranges.length>1)return yt.none;let n=i.main,o,a=null;if(n.empty){if(!e.highlightWordAroundCursor)return yt.none;let s=A.wordAt(n.head);if(!s)return yt.none;a=A.charCategorizer(n.head),o=A.sliceDoc(s.from,s.to)}else{let s=n.to-n.from;if(s200)return yt.none;if(e.wholeWords){if(o=A.sliceDoc(n.from,n.to),a=A.charCategorizer(n.head),!(stA(a,A,n.from,n.to)&&rMA(a,A,n.from,n.to)))return yt.none}else if(o=A.sliceDoc(n.from,n.to),!o)return yt.none}let r=[];for(let s of t.visibleRanges){let g=new GI(A.doc,o,s.from,s.to);for(;!g.next().done;){let{from:l,to:C}=g.value;if((!a||stA(a,A,l,C))&&(n.empty&&l<=n.from&&C>=n.to?r.push(aMA.range(l,C)):(l>=n.to||C<=n.from)&&r.push(oMA.range(l,C)),r.length>e.maxMatches))return yt.none}}return yt.set(r)}},{decorations:t=>t.decorations}),gMA=ii.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),lMA=({state:t,dispatch:e})=>{let{selection:A}=t,i=de.create(A.ranges.map(n=>t.wordAt(n.head)||de.cursor(n.head)),A.mainIndex);return i.eq(A)?!1:(e(t.update({selection:i})),!0)};function cMA(t,e){let{main:A,ranges:i}=t.selection,n=t.wordAt(A.head),o=n&&n.from==A.from&&n.to==A.to;for(let a=!1,r=new GI(t.doc,e,i[i.length-1].to);;)if(r.next(),r.done){if(a)return null;r=new GI(t.doc,e,0,Math.max(0,i[i.length-1].from-1)),a=!0}else{if(a&&i.some(s=>s.from==r.value.from))continue;if(o){let s=t.wordAt(r.value.from);if(!s||s.from!=r.value.from||s.to!=r.value.to)continue}return r.value}}var CMA=({state:t,dispatch:e})=>{let{ranges:A}=t.selection;if(A.some(o=>o.from===o.to))return lMA({state:t,dispatch:e});let i=t.sliceDoc(A[0].from,A[0].to);if(t.selection.ranges.some(o=>t.sliceDoc(o.from,o.to)!=i))return!1;let n=cMA(t,i);return n?(e(t.update({selection:t.selection.addRange(de.range(n.from,n.to),!1),effects:ii.scrollIntoView(n.to)})),!0):!1},Nd=We.define({combine(t){return kr(t,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new E_(e),scrollToMatch:e=>ii.scrollIntoView(e)})}});function ItA(t){return t?[Nd.of(t),Q_]:Q_}var gy=class{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||tMA(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(A,i)=>i=="n"?` -`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new d_(this):new I_(this)}getCursor(e,A=0,i){let n=e.doc?e:er.create({doc:e});return i==null&&(i=n.doc.length),this.regexp?TQ(this,n,A,i):YQ(this,n,A,i)}},ly=class{constructor(e){this.spec=e}};function IMA(t,e,A){return(i,n,o,a)=>{if(A&&!A(i,n,o,a))return!1;let r=i>=a&&n<=a+o.length?o.slice(i-a,n-a):e.doc.sliceString(i,n);return t(r,e,i,n)}}function YQ(t,e,A,i){let n;return t.wholeWord&&(n=dMA(e.doc,e.charCategorizer(e.selection.main.head))),t.test&&(n=IMA(t.test,e,n)),new GI(e.doc,t.unquoted,A,i,t.caseSensitive?void 0:o=>o.toLowerCase(),n)}function dMA(t,e){return(A,i,n,o)=>((o>A||o+n.length=A)return null;n.push(i.value)}return n}highlight(e,A,i,n){let o=YQ(this.spec,e,Math.max(0,A-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!o.next().done;)n(o.value.from,o.value.to)}};function BMA(t,e,A){return(i,n,o)=>(!A||A(i,n,o))&&t(o[0],e,i,n)}function TQ(t,e,A,i){let n;return t.wholeWord&&(n=EMA(e.charCategorizer(e.selection.main.head))),t.test&&(n=BMA(t.test,e,n)),new oy(e.doc,t.search,{ignoreCase:!t.caseSensitive,test:n},A,i)}function cy(t,e){return t.slice(Ta(t,e,!1),e)}function Cy(t,e){return t.slice(e,Ta(t,e))}function EMA(t){return(e,A,i)=>!i[0].length||(t(cy(i.input,i.index))!=Lo.Word||t(Cy(i.input,i.index))!=Lo.Word)&&(t(Cy(i.input,i.index+i[0].length))!=Lo.Word||t(cy(i.input,i.index+i[0].length))!=Lo.Word)}var d_=class extends ly{nextMatch(e,A,i){let n=TQ(this.spec,e,i,e.doc.length).next();return n.done&&(n=TQ(this.spec,e,0,A).next()),n.done?null:n.value}prevMatchInRange(e,A,i){for(let n=1;;n++){let o=Math.max(A,i-n*1e4),a=TQ(this.spec,e,o,i),r=null;for(;!a.next().done;)r=a.value;if(r&&(o==A||r.from>o+10))return r;if(o==A)return null}}prevMatch(e,A,i){return this.prevMatchInRange(e,0,A)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(A,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let n=i.length;n>0;n--){let o=+i.slice(0,n);if(o>0&&o=A)return null;n.push(i.value)}return n}highlight(e,A,i,n){let o=TQ(this.spec,e,Math.max(0,A-250),Math.min(i+250,e.doc.length));for(;!o.next().done;)n(o.value.from,o.value.to)}},bf=Hi.define(),u_=Hi.define(),LI=va.define({create(t){return new vf(B_(t).create(),null)},update(t,e){for(let A of e.effects)A.is(bf)?t=new vf(A.value.create(),t.panel):A.is(u_)&&(t=new vf(t.query,A.value?f_:null));return t},provide:t=>Dd.from(t,e=>e.panel)});var vf=class{constructor(e,A){this.query=e,this.panel=A}},QMA=yt.mark({class:"cm-searchMatch"}),hMA=yt.mark({class:"cm-searchMatch cm-searchMatch-selected"}),uMA=Go.fromClass(class{constructor(t){this.view=t,this.decorations=this.highlight(t.state.field(LI))}update(t){let e=t.state.field(LI);(e!=t.startState.field(LI)||t.docChanged||t.selectionSet||t.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:t,panel:e}){if(!e||!t.spec.valid)return yt.none;let{view:A}=this,i=new Wr;for(let n=0,o=A.visibleRanges,a=o.length;no[n+1].from-500;)s=o[++n].to;t.highlight(A.state,r,s,(g,l)=>{let C=A.state.selection.ranges.some(I=>I.from==g&&I.to==l);i.add(g,l,C?hMA:QMA)})}return i.finish()}},{decorations:t=>t.decorations});function Mf(t){return e=>{let A=e.state.field(LI,!1);return A&&A.query.spec.valid?t(e,A):By(e)}}var Iy=Mf((t,{query:e})=>{let{to:A}=t.state.selection.main,i=e.nextMatch(t.state,A,A);if(!i)return!1;let n=de.single(i.from,i.to),o=t.state.facet(Nd);return t.dispatch({selection:n,effects:[m_(t,i),o.scrollToMatch(n.main,t)],userEvent:"select.search"}),BtA(t),!0}),dy=Mf((t,{query:e})=>{let{state:A}=t,{from:i}=A.selection.main,n=e.prevMatch(A,i,i);if(!n)return!1;let o=de.single(n.from,n.to),a=t.state.facet(Nd);return t.dispatch({selection:o,effects:[m_(t,n),a.scrollToMatch(o.main,t)],userEvent:"select.search"}),BtA(t),!0}),fMA=Mf((t,{query:e})=>{let A=e.matchAll(t.state,1e3);return!A||!A.length?!1:(t.dispatch({selection:de.create(A.map(i=>de.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),mMA=({state:t,dispatch:e})=>{let A=t.selection;if(A.ranges.length>1||A.main.empty)return!1;let{from:i,to:n}=A.main,o=[],a=0;for(let r=new GI(t.doc,t.sliceDoc(i,n));!r.next().done;){if(o.length>1e3)return!1;r.value.from==i&&(a=o.length),o.push(de.range(r.value.from,r.value.to))}return e(t.update({selection:de.create(o,a),userEvent:"select.search.matches"})),!0},gtA=Mf((t,{query:e})=>{let{state:A}=t,{from:i,to:n}=A.selection.main;if(A.readOnly)return!1;let o=e.nextMatch(A,i,i);if(!o)return!1;let a=o,r=[],s,g,l=[];a.from==i&&a.to==n&&(g=A.toText(e.getReplacement(a)),r.push({from:a.from,to:a.to,insert:g}),a=e.nextMatch(A,a.from,a.to),l.push(ii.announce.of(A.phrase("replaced match on line $",A.doc.lineAt(i).number)+".")));let C=t.state.changes(r);return a&&(s=de.single(a.from,a.to).map(C),l.push(m_(t,a)),l.push(A.facet(Nd).scrollToMatch(s.main,t))),t.dispatch({changes:C,selection:s,effects:l,userEvent:"input.replace"}),!0}),pMA=Mf((t,{query:e})=>{if(t.state.readOnly)return!1;let A=e.matchAll(t.state,1e9).map(n=>{let{from:o,to:a}=n;return{from:o,to:a,insert:e.getReplacement(n)}});if(!A.length)return!1;let i=t.state.phrase("replaced $ matches",A.length)+".";return t.dispatch({changes:A,effects:ii.announce.of(i),userEvent:"input.replace.all"}),!0});function f_(t){return t.state.facet(Nd).createPanel(t)}function B_(t,e){var A,i,n,o,a;let r=t.selection.main,s=r.empty||r.to>r.from+100?"":t.sliceDoc(r.from,r.to);if(e&&!s)return e;let g=t.facet(Nd);return new gy({search:((A=e?.literal)!==null&&A!==void 0?A:g.literal)?s:s.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:g.caseSensitive,literal:(n=e?.literal)!==null&&n!==void 0?n:g.literal,regexp:(o=e?.regexp)!==null&&o!==void 0?o:g.regexp,wholeWord:(a=e?.wholeWord)!==null&&a!==void 0?a:g.wholeWord})}function dtA(t){let e=lf(t,f_);return e&&e.dom.querySelector("[main-field]")}function BtA(t){let e=dtA(t);e&&e==t.root.activeElement&&e.select()}var By=t=>{let e=t.state.field(LI,!1);if(e&&e.panel){let A=dtA(t);if(A&&A!=t.root.activeElement){let i=B_(t.state,e.query.spec);i.valid&&t.dispatch({effects:bf.of(i)}),A.focus(),A.select()}}else t.dispatch({effects:[u_.of(!0),e?bf.of(B_(t.state,e.query.spec)):Hi.appendConfig.of(Q_)]});return!0},Ey=t=>{let e=t.state.field(LI,!1);if(!e||!e.panel)return!1;let A=lf(t,f_);return A&&A.dom.contains(t.root.activeElement)&&t.focus(),t.dispatch({effects:u_.of(!1)}),!0},EtA=[{key:"Mod-f",run:By,scope:"editor search-panel"},{key:"F3",run:Iy,shift:dy,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:Iy,shift:dy,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Ey,scope:"editor search-panel"},{key:"Mod-Shift-l",run:mMA},{key:"Mod-Alt-g",run:iMA},{key:"Mod-d",run:CMA,preventDefault:!0}],E_=class{constructor(e){this.view=e;let A=this.query=e.state.field(LI).query.spec;this.commit=this.commit.bind(this),this.searchField=io("input",{value:A.search,placeholder:Vg(e,"Find"),"aria-label":Vg(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=io("input",{value:A.replace,placeholder:Vg(e,"Replace"),"aria-label":Vg(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=io("input",{type:"checkbox",name:"case",form:"",checked:A.caseSensitive,onchange:this.commit}),this.reField=io("input",{type:"checkbox",name:"re",form:"",checked:A.regexp,onchange:this.commit}),this.wordField=io("input",{type:"checkbox",name:"word",form:"",checked:A.wholeWord,onchange:this.commit});function i(n,o,a){return io("button",{class:"cm-button",name:n,onclick:o,type:"button"},a)}this.dom=io("div",{onkeydown:n=>this.keydown(n),class:"cm-search"},[this.searchField,i("next",()=>Iy(e),[Vg(e,"next")]),i("prev",()=>dy(e),[Vg(e,"previous")]),i("select",()=>fMA(e),[Vg(e,"all")]),io("label",null,[this.caseField,Vg(e,"match case")]),io("label",null,[this.reField,Vg(e,"regexp")]),io("label",null,[this.wordField,Vg(e,"by word")]),...e.state.readOnly?[]:[io("br"),this.replaceField,i("replace",()=>gtA(e),[Vg(e,"replace")]),i("replaceAll",()=>pMA(e),[Vg(e,"replace all")])],io("button",{name:"close",onclick:()=>Ey(e),"aria-label":Vg(e,"close"),type:"button"},["\xD7"])])}commit(){let e=new gy({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:bf.of(e)}))}keydown(e){eAA(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?dy:Iy)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),gtA(this.view))}update(e){for(let A of e.transactions)for(let i of A.effects)i.is(bf)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(Nd).top}};function Vg(t,e){return t.state.phrase(e)}var iy=30,ny=/[\s\.,:;?!]/;function m_(t,{from:e,to:A}){let i=t.state.doc.lineAt(e),n=t.state.doc.lineAt(A).to,o=Math.max(i.from,e-iy),a=Math.min(n,A+iy),r=t.state.sliceDoc(o,a);if(o!=i.from){for(let s=0;sr.length-iy;s--)if(!ny.test(r[s-1])&&ny.test(r[s])){r=r.slice(0,s);break}}return ii.announce.of(`${t.state.phrase("current match")}. ${r} ${t.state.phrase("on line")} ${i.number}.`)}var wMA=ii.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Q_=[LI,bc.low(uMA),wMA];var hy=class{constructor(e,A,i,n){this.state=e,this.pos=A,this.explicit=i,this.view=n,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let A=xr(this.state).resolveInner(this.pos,-1);for(;A&&e.indexOf(A.name)<0;)A=A.parent;return A?{from:A.from,to:this.pos,text:this.state.sliceDoc(A.from,this.pos),type:A.type}:null}matchBefore(e){let A=this.state.doc.lineAt(this.pos),i=Math.max(A.from,this.pos-250),n=A.text.slice(i-A.from,this.pos-A.from),o=n.search(DtA(e,!1));return o<0?null:{from:i+o,to:this.pos,text:n.slice(o)}}get aborted(){return this.abortListeners==null}addEventListener(e,A,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(A),i&&i.onDocChange&&(this.abortOnDocChange=!0))}};function QtA(t){let e=Object.keys(t).join(""),A=/\w/.test(e);return A&&(e=e.replace(/\w/g,"")),`[${A?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function DMA(t){let e=Object.create(null),A=Object.create(null);for(let{label:n}of t){e[n[0]]=!0;for(let o=1;otypeof n=="string"?{label:n}:n),[A,i]=e.every(n=>/^\w+$/.test(n.label))?[/\w*$/,/\w+$/]:DMA(e);return n=>{let o=n.matchBefore(i);return o||n.explicit?{from:o?o.from:n.pos,options:e,validFor:A}:null}}var uy=class{constructor(e,A,i,n){this.completion=e,this.source=A,this.match=i,this.score=n}};function _d(t){return t.selection.main.from}function DtA(t,e){var A;let{source:i}=t,n=e&&i[0]!="^",o=i[i.length-1]!="$";return!n&&!o?t:new RegExp(`${n?"^":""}(?:${i})${o?"$":""}`,(A=t.flags)!==null&&A!==void 0?A:t.ignoreCase?"i":"")}var ytA=hg.define();function vMA(t,e,A,i){let{main:n}=t.selection,o=A-n.from,a=i-n.from;return Ge(cA({},t.changeByRange(r=>{if(r!=n&&A!=i&&t.sliceDoc(r.from+o,r.from+a)!=t.sliceDoc(A,i))return{range:r};let s=t.toText(e);return{changes:{from:r.from+o,to:i==n.from?r.to:r.from+a,insert:s},range:de.cursor(r.from+o+s.length)}})),{scrollIntoView:!0,userEvent:"input.complete"})}var htA=new WeakMap;function bMA(t){if(!Array.isArray(t))return t;let e=htA.get(t);return e||htA.set(t,e=yMA(t)),e}var fy=Hi.define(),kf=Hi.define(),y_=class{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let A=0;A=48&&D<=57||D>=97&&D<=122?2:D>=65&&D<=90?1:0:(F=H3(D))!=F.toLowerCase()?1:F!=F.toUpperCase()?2:0;(!b||_==1&&Q||M==0&&_!=0)&&(A[C]==D||i[C]==D&&(I=!0)?a[C++]=b:a.length&&(f=!1)),M=_,b+=Og(D)}return C==s&&a[0]==0&&f?this.result(-100+(I?-200:0),a,e):d==s&&B==0?this.ret(-200-e.length+(E==e.length?0:-100),[0,E]):r>-1?this.ret(-700-e.length,[r,r+this.pattern.length]):d==s?this.ret(-900-e.length,[B,E]):C==s?this.result(-100+(I?-200:0)+-700+(f?0:-1100),a,e):A.length==2?null:this.result((n[0]?-700:0)+-200+-1100,n,e)}result(e,A,i){let n=[],o=0;for(let a of A){let r=a+(this.astral?Og(Zr(i,a)):1);o&&n[o-1]==a?n[o-1]=r:(n[o++]=a,n[o++]=r)}return this.ret(e-i.length,n)}},v_=class{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:MMA,filterStrict:!1,compareCompletions:(e,A)=>(e.sortText||e.label).localeCompare(A.sortText||A.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,A)=>e&&A,closeOnBlur:(e,A)=>e&&A,icons:(e,A)=>e&&A,tooltipClass:(e,A)=>i=>utA(e(i),A(i)),optionClass:(e,A)=>i=>utA(e(i),A(i)),addToOptions:(e,A)=>e.concat(A),filterStrict:(e,A)=>e||A})}});function utA(t,e){return t?e?t+" "+e:t:e}function MMA(t,e,A,i,n,o){let a=t.textDirection==mo.RTL,r=a,s=!1,g="top",l,C,I=e.left-n.left,d=n.right-e.right,B=i.right-i.left,E=i.bottom-i.top;if(r&&I=E||b>e.top?l=A.bottom-e.top:(g="bottom",l=e.bottom-A.top)}let Q=(e.bottom-e.top)/o.offsetHeight,f=(e.right-e.left)/o.offsetWidth;return{style:`${g}: ${l/Q}px; max-width: ${C/f}px`,class:"cm-completionInfo-"+(s?a?"left-narrow":"right-narrow":r?"left":"right")}}function kMA(t){let e=t.addToOptions.slice();return t.icons&&e.push({render(A){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),A.type&&i.classList.add(...A.type.split(/\s+/g).map(n=>"cm-completionIcon-"+n)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(A,i,n,o){let a=document.createElement("span");a.className="cm-completionLabel";let r=A.displayLabel||A.label,s=0;for(let g=0;gs&&a.appendChild(document.createTextNode(r.slice(s,l)));let I=a.appendChild(document.createElement("span"));I.appendChild(document.createTextNode(r.slice(l,C))),I.className="cm-completionMatchedText",s=C}return sA.position-i.position).map(A=>A.render)}function p_(t,e,A){if(t<=A)return{from:0,to:t};if(e<0&&(e=0),e<=t>>1){let n=Math.floor(e/A);return{from:n*A,to:(n+1)*A}}let i=Math.floor((t-e)/A);return{from:t-(i+1)*A,to:t-i*A}}var b_=class{constructor(e,A,i){this.view=e,this.stateField=A,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:s=>this.placeInfo(s),key:this},this.space=null,this.currentClass="";let n=e.state.field(A),{options:o,selected:a}=n.open,r=e.state.facet(Rr);this.optionContent=kMA(r),this.optionClass=r.optionClass,this.tooltipClass=r.tooltipClass,this.range=p_(o.length,a,r.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",s=>{let{options:g}=e.state.field(A).open;for(let l=s.target,C;l&&l!=this.dom;l=l.parentNode)if(l.nodeName=="LI"&&(C=/-(\d+)$/.exec(l.id))&&+C[1]{let g=e.state.field(this.stateField,!1);g&&g.tooltip&&e.state.facet(Rr).closeOnBlur&&s.relatedTarget!=e.contentDOM&&e.dispatch({effects:kf.of(null)})}),this.showOptions(o,n.id)}mount(){this.updateSel()}showOptions(e,A){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,A,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var A;let i=e.state.field(this.stateField),n=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=n){let{options:o,selected:a,disabled:r}=i.open;(!n.open||n.open.options!=o)&&(this.range=p_(o.length,a,e.state.facet(Rr).maxRenderedOptions),this.showOptions(o,i.id)),this.updateSel(),r!=((A=n.open)===null||A===void 0?void 0:A.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!r)}}updateTooltipClass(e){let A=this.tooltipClass(e);if(A!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of A.split(" "))i&&this.dom.classList.add(i);this.currentClass=A}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),A=e.open;(A.selected>-1&&A.selected=this.range.to)&&(this.range=p_(A.options.length,A.selected,this.view.state.facet(Rr).maxRenderedOptions),this.showOptions(A.options,e.id));let i=this.updateSelectedOption(A.selected);if(i){this.destroyInfo();let{completion:n}=A.options[A.selected],{info:o}=n;if(!o)return;let a=typeof o=="string"?document.createTextNode(o):o(n);if(!a)return;"then"in a?a.then(r=>{r&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(r,n)}).catch(r=>Sr(this.view.state,r,"completion info")):(this.addInfoPane(a,n),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,A){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:n,destroy:o}=e;i.appendChild(n),this.infoDestroy=o||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let A=null;for(let i=this.list.firstChild,n=this.range.from;i;i=i.nextSibling,n++)i.nodeName!="LI"||!i.id?n--:n==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),A=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return A&&xMA(this.list,A),A}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let A=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),n=e.getBoundingClientRect(),o=this.space;if(!o){let a=this.dom.ownerDocument.documentElement;o={left:0,top:0,right:a.clientWidth,bottom:a.clientHeight}}return n.top>Math.min(o.bottom,A.bottom)-10||n.bottom{a.target==n&&a.preventDefault()});let o=null;for(let a=i.from;ai.from||i.from==0))if(o=I,typeof g!="string"&&g.header)n.appendChild(g.header(g));else{let d=n.appendChild(document.createElement("completion-section"));d.textContent=I}}let l=n.appendChild(document.createElement("li"));l.id=A+"-"+a,l.setAttribute("role","option");let C=this.optionClass(r);C&&(l.className=C);for(let I of this.optionContent){let d=I(r,this.view.state,this.view,s);d&&l.appendChild(d)}}return i.from&&n.classList.add("cm-completionListIncompleteTop"),i.tonew b_(A,t,e)}function xMA(t,e){let A=t.getBoundingClientRect(),i=e.getBoundingClientRect(),n=A.height/t.offsetHeight;i.topA.bottom&&(t.scrollTop+=(i.bottom-A.bottom)/n)}function ftA(t){return(t.boost||0)*100+(t.apply?10:0)+(t.info?5:0)+(t.type?1:0)}function RMA(t,e){let A=[],i=null,n=null,o=l=>{A.push(l);let{section:C}=l.completion;if(C){i||(i=[]);let I=typeof C=="string"?C:C.name;i.some(d=>d.name==I)||i.push(typeof C=="string"?{name:I}:C)}},a=e.facet(Rr);for(let l of t)if(l.hasResult()){let C=l.result.getMatch;if(l.result.filter===!1)for(let I of l.result.options)o(new uy(I,l.source,C?C(I):[],1e9-A.length));else{let I=e.sliceDoc(l.from,l.to),d,B=a.filterStrict?new v_(I):new y_(I);for(let E of l.result.options)if(d=B.match(E.label)){let Q=E.displayLabel?C?C(E,d.matched):[]:d.matched,f=d.score+(E.boost||0);if(o(new uy(E,l.source,Q,f)),typeof E.section=="object"&&E.section.rank==="dynamic"){let{name:b}=E.section;n||(n=Object.create(null)),n[b]=Math.max(f,n[b]||-1e9)}}}}if(i){let l=Object.create(null),C=0,I=(d,B)=>(d.rank==="dynamic"&&B.rank==="dynamic"?n[B.name]-n[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof B.rank=="number"?B.rank:1e9)||(d.nameI.score-C.score||g(C.completion,I.completion))){let C=l.completion;!s||s.label!=C.label||s.detail!=C.detail||s.type!=null&&C.type!=null&&s.type!=C.type||s.apply!=C.apply||s.boost!=C.boost?r.push(l):ftA(l.completion)>ftA(s)&&(r[r.length-1]=l),s=l.completion}return r}var M_=class t{constructor(e,A,i,n,o,a){this.options=e,this.attrs=A,this.tooltip=i,this.timestamp=n,this.selected=o,this.disabled=a}setSelected(e,A){return e==this.selected||e>=this.options.length?this:new t(this.options,mtA(A,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,A,i,n,o,a){if(n&&!a&&e.some(g=>g.isPending))return n.setDisabled();let r=RMA(e,A);if(!r.length)return n&&e.some(g=>g.isPending)?n.setDisabled():null;let s=A.facet(Rr).selectOnOpen?0:-1;if(n&&n.selected!=s&&n.selected!=-1){let g=n.options[n.selected].completion;for(let l=0;ll.hasResult()?Math.min(g,l.from):g,1e8),create:KMA,above:o.aboveCursor},n?n.timestamp:Date.now(),s,!1)}map(e){return new t(this.options,this.attrs,Ge(cA({},this.tooltip),{pos:e.mapPos(this.tooltip.pos)}),this.timestamp,this.selected,this.disabled)}setDisabled(){return new t(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}},k_=class t{constructor(e,A,i){this.active=e,this.id=A,this.open=i}static start(){return new t(LMA,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:A}=e,i=A.facet(Rr),o=(i.override||A.languageDataAt("autocomplete",_d(A)).map(bMA)).map(s=>(this.active.find(l=>l.source==s)||new HC(s,this.active.some(l=>l.state!=0)?1:0)).update(e,i));o.length==this.active.length&&o.every((s,g)=>s==this.active[g])&&(o=this.active);let a=this.open,r=e.effects.some(s=>s.is(x_));a&&e.docChanged&&(a=a.map(e.changes)),e.selection||o.some(s=>s.hasResult()&&e.changes.touchesRange(s.from,s.to))||!NMA(o,this.active)||r?a=M_.build(o,A,this.id,a,i,r):a&&a.disabled&&!o.some(s=>s.isPending)&&(a=null),!a&&o.every(s=>!s.isPending)&&o.some(s=>s.hasResult())&&(o=o.map(s=>s.hasResult()?new HC(s.source,0):s));for(let s of e.effects)s.is(btA)&&(a=a&&a.setSelected(s.value,this.id));return o==this.active&&a==this.open?this:new t(o,this.id,a)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?FMA:_MA}};function NMA(t,e){if(t==e)return!0;for(let A=0,i=0;;){for(;A-1&&(A["aria-activedescendant"]=t+"-"+e),A}var LMA=[];function vtA(t,e){if(t.isUserEvent("input.complete")){let i=t.annotation(ytA);if(i&&e.activateOnCompletion(i))return 12}let A=t.isUserEvent("input.type");return A&&e.activateOnTyping?5:A?1:t.isUserEvent("delete.backward")?2:t.selection?8:t.docChanged?16:0}var HC=class t{constructor(e,A,i=!1){this.source=e,this.state=A,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,A){let i=vtA(e,A),n=this;(i&8||i&16&&this.touches(e))&&(n=new t(n.source,0)),i&4&&n.state==0&&(n=new t(this.source,1)),n=n.updateFor(e,i);for(let o of e.effects)if(o.is(fy))n=new t(n.source,1,o.value);else if(o.is(kf))n=new t(n.source,0);else if(o.is(x_))for(let a of o.value)a.source==n.source&&(n=a);return n}updateFor(e,A){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(_d(e.state))}},my=class t extends HC{constructor(e,A,i,n,o,a){super(e,3,A),this.limit=i,this.result=n,this.from=o,this.to=a}hasResult(){return!0}updateFor(e,A){var i;if(!(A&3))return this.map(e.changes);let n=this.result;n.map&&!e.changes.empty&&(n=n.map(n,e.changes));let o=e.changes.mapPos(this.from),a=e.changes.mapPos(this.to,1),r=_d(e.state);if(r>a||!n||A&2&&(_d(e.startState)==this.from||rA.map(e))}}),btA=Hi.define(),pg=va.define({create(){return k_.start()},update(t,e){return t.update(e)},provide:t=>[xQ.from(t,e=>e.tooltip),ii.contentAttributes.from(t,e=>e.attrs)]});function R_(t,e){let A=e.completion.apply||e.completion.label,i=t.state.field(pg).active.find(n=>n.source==e.source);return i instanceof my?(typeof A=="string"?t.dispatch(Ge(cA({},vMA(t.state,A,i.from,i.to)),{annotations:ytA.of(e.completion)})):A(t,e.completion,i.from,i.to),!0):!1}var KMA=SMA(pg,R_);function Qy(t,e="option"){return A=>{let i=A.state.field(pg,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+n*(t?1:-1):t?0:a-1;return r<0?r=e=="page"?0:a-1:r>=a&&(r=e=="page"?a-1:0),A.dispatch({effects:btA.of(r)}),!0}}var UMA=t=>{let e=t.state.field(pg,!1);return t.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampt.state.field(pg,!1)?(t.dispatch({effects:fy.of(!0)}),!0):!1,JMA=t=>{let e=t.state.field(pg,!1);return!e||!e.active.some(A=>A.state!=0)?!1:(t.dispatch({effects:kf.of(null)}),!0)},S_=class{constructor(e,A){this.active=e,this.context=A,this.time=Date.now(),this.updates=[],this.done=void 0}},YMA=50,TMA=1e3,HMA=Go.fromClass(class{constructor(t){this.view=t,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of t.state.field(pg).active)e.isPending&&this.startQuery(e)}update(t){let e=t.state.field(pg),A=t.state.facet(Rr);if(!t.selectionSet&&!t.docChanged&&t.startState.field(pg)==e)return;let i=t.transactions.some(o=>{let a=vtA(o,A);return a&8||(o.selection||o.docChanged)&&!(a&3)});for(let o=0;oYMA&&Date.now()-a.time>TMA){for(let r of a.context.abortListeners)try{r()}catch(s){Sr(this.view.state,s)}a.context.abortListeners=null,this.running.splice(o--,1)}else a.updates.push(...t.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),t.transactions.some(o=>o.effects.some(a=>a.is(fy)))&&(this.pendingStart=!0);let n=this.pendingStart?50:A.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(o=>o.isPending&&!this.running.some(a=>a.active.source==o.source))?setTimeout(()=>this.startUpdate(),n):-1,this.composing!=0)for(let o of t.transactions)o.isUserEvent("input.type")?this.composing=2:this.composing==2&&o.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:t}=this.view,e=t.field(pg);for(let A of e.active)A.isPending&&!this.running.some(i=>i.active.source==A.source)&&this.startQuery(A);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Rr).updateSyncTime))}startQuery(t){let{state:e}=this.view,A=_d(e),i=new hy(e,A,t.explicit,this.view),n=new S_(t,i);this.running.push(n),Promise.resolve(t.source(i)).then(o=>{n.context.aborted||(n.done=o||null,this.scheduleAccept())},o=>{this.view.dispatch({effects:kf.of(null)}),Sr(this.view.state,o)})}scheduleAccept(){this.running.every(t=>t.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Rr).updateSyncTime))}accept(){var t;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],A=this.view.state.facet(Rr),i=this.view.state.field(pg);for(let n=0;nr.source==o.active.source);if(a&&a.isPending)if(o.done==null){let r=new HC(o.active.source,0);for(let s of o.updates)r=r.update(s,A);r.isPending||e.push(r)}else this.startQuery(a)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:x_.of(e)})}},{eventHandlers:{blur(t){let e=this.view.state.field(pg,!1);if(e&&e.tooltip&&this.view.state.facet(Rr).closeOnBlur){let A=e.open&&BF(this.view,e.open.tooltip);(!A||!A.dom.contains(t.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:kf.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:fy.of(!1)}),20),this.composing=0}}}),zMA=typeof navigator=="object"&&/Win/.test(navigator.platform),OMA=bc.highest(ii.domEventHandlers({keydown(t,e){let A=e.state.field(pg,!1);if(!A||!A.open||A.open.disabled||A.open.selected<0||t.key.length>1||t.ctrlKey&&!(zMA&&t.altKey)||t.metaKey)return!1;let i=A.open.options[A.open.selected],n=A.active.find(a=>a.source==i.source),o=i.completion.commitCharacters||n.result.commitCharacters;return o&&o.indexOf(t.key)>-1&&R_(e,i),!1}})),PMA=ii.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"\xB7\xB7\xB7"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'\u0192'"}},".cm-completionIcon-class":{"&:after":{content:"'\u25CB'"}},".cm-completionIcon-interface":{"&:after":{content:"'\u25CC'"}},".cm-completionIcon-variable":{"&:after":{content:"'\u{1D465}'"}},".cm-completionIcon-constant":{"&:after":{content:"'\u{1D436}'"}},".cm-completionIcon-type":{"&:after":{content:"'\u{1D461}'"}},".cm-completionIcon-enum":{"&:after":{content:"'\u222A'"}},".cm-completionIcon-property":{"&:after":{content:"'\u25A1'"}},".cm-completionIcon-keyword":{"&:after":{content:"'\u{1F511}\uFE0E'"}},".cm-completionIcon-namespace":{"&:after":{content:"'\u25A2'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});var Sf={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Fd=Hi.define({map(t,e){let A=e.mapPos(t,-1,qr.TrackAfter);return A??void 0}}),N_=new class extends kl{};N_.startSide=1;N_.endSide=-1;var MtA=va.define({create(){return to.empty},update(t,e){if(t=t.map(e.changes),e.selection){let A=e.state.doc.lineAt(e.selection.main.head);t=t.update({filter:i=>i>=A.from&&i<=A.to})}for(let A of e.effects)A.is(Fd)&&(t=t.update({add:[N_.range(A.value,A.value+1)]}));return t}});function ktA(){return[qMA,MtA]}var D_="()[]{}<>\xAB\xBB\xBB\xAB\uFF3B\uFF3D\uFF5B\uFF5D";function StA(t){for(let e=0;e{if((jMA?t.composing:t.compositionStarted)||t.state.readOnly)return!1;let n=t.state.selection.main;if(i.length>2||i.length==2&&Og(Zr(i,0))==1||e!=n.from||A!=n.to)return!1;let o=WMA(t.state,i);return o?(t.dispatch(o),!0):!1}),VMA=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=xtA(t,t.selection.main.head).brackets||Sf.brackets,n=null,o=t.changeByRange(a=>{if(a.empty){let r=ZMA(t.doc,a.head);for(let s of i)if(s==r&&py(t.doc,a.head)==StA(Zr(s,0)))return{changes:{from:a.head-s.length,to:a.head+s.length},range:de.cursor(a.head-s.length)}}return{range:n=a}});return n||e(t.update(o,{scrollIntoView:!0,userEvent:"delete.backward"})),!n},RtA=[{key:"Backspace",run:VMA}];function WMA(t,e){let A=xtA(t,t.selection.main.head),i=A.brackets||Sf.brackets;for(let n of i){let o=StA(Zr(n,0));if(e==n)return o==n?AkA(t,n,i.indexOf(n+n+n)>-1,A):XMA(t,n,o,A.before||Sf.before);if(e==o&&NtA(t,t.selection.main.from))return $MA(t,n,o)}return null}function NtA(t,e){let A=!1;return t.field(MtA).between(0,t.doc.length,i=>{i==e&&(A=!0)}),A}function py(t,e){let A=t.sliceString(e,e+2);return A.slice(0,Og(Zr(A,0)))}function ZMA(t,e){let A=t.sliceString(e-2,e);return Og(Zr(A,0))==A.length?A:A.slice(1)}function XMA(t,e,A,i){let n=null,o=t.changeByRange(a=>{if(!a.empty)return{changes:[{insert:e,from:a.from},{insert:A,from:a.to}],effects:Fd.of(a.to+e.length),range:de.range(a.anchor+e.length,a.head+e.length)};let r=py(t.doc,a.head);return!r||/\s/.test(r)||i.indexOf(r)>-1?{changes:{insert:e+A,from:a.head},effects:Fd.of(a.head+e.length),range:de.cursor(a.head+e.length)}:{range:n=a}});return n?null:t.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function $MA(t,e,A){let i=null,n=t.changeByRange(o=>o.empty&&py(t.doc,o.head)==A?{changes:{from:o.head,to:o.head+A.length,insert:A},range:de.cursor(o.head+A.length)}:i={range:o});return i?null:t.update(n,{scrollIntoView:!0,userEvent:"input.type"})}function AkA(t,e,A,i){let n=i.stringPrefixes||Sf.stringPrefixes,o=null,a=t.changeByRange(r=>{if(!r.empty)return{changes:[{insert:e,from:r.from},{insert:e,from:r.to}],effects:Fd.of(r.to+e.length),range:de.range(r.anchor+e.length,r.head+e.length)};let s=r.head,g=py(t.doc,s),l;if(g==e){if(ptA(t,s))return{changes:{insert:e+e,from:s},effects:Fd.of(s+e.length),range:de.cursor(s+e.length)};if(NtA(t,s)){let I=A&&t.sliceDoc(s,s+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:s,to:s+I.length,insert:I},range:de.cursor(s+I.length)}}}else{if(A&&t.sliceDoc(s-2*e.length,s)==e+e&&(l=wtA(t,s-2*e.length,n))>-1&&ptA(t,l))return{changes:{insert:e+e+e+e,from:s},effects:Fd.of(s+e.length),range:de.cursor(s+e.length)};if(t.charCategorizer(s)(g)!=Lo.Word&&wtA(t,s,n)>-1&&!ekA(t,s,e,n))return{changes:{insert:e+e,from:s},effects:Fd.of(s+e.length),range:de.cursor(s+e.length)}}return{range:o=r}});return o?null:t.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function ptA(t,e){let A=xr(t).resolveInner(e+1);return A.parent&&A.from==e}function ekA(t,e,A,i){let n=xr(t).resolveInner(e,-1),o=i.reduce((a,r)=>Math.max(a,r.length),0);for(let a=0;a<5;a++){let r=t.sliceDoc(n.from,Math.min(n.to,n.from+A.length+o)),s=r.indexOf(A);if(!s||s>-1&&i.indexOf(r.slice(0,s))>-1){let l=n.firstChild;for(;l&&l.from==n.from&&l.to-l.from>A.length+s;){if(t.sliceDoc(l.to-A.length,l.to)==A)return!1;l=l.firstChild}return!0}let g=n.to==e&&n.parent;if(!g)break;n=g}return!1}function wtA(t,e,A){let i=t.charCategorizer(e);if(i(t.sliceDoc(e-1,e))!=Lo.Word)return e;for(let n of A){let o=e-n.length;if(t.sliceDoc(o,e)==n&&i(t.sliceDoc(o-1,o))!=Lo.Word)return o}return-1}function FtA(t={}){return[OMA,pg,Rr.of(t),HMA,tkA,PMA]}var F_=[{key:"Ctrl-Space",run:w_},{mac:"Alt-`",run:w_},{mac:"Alt-i",run:w_},{key:"Escape",run:JMA},{key:"ArrowDown",run:Qy(!0)},{key:"ArrowUp",run:Qy(!1)},{key:"PageDown",run:Qy(!0,"page")},{key:"PageUp",run:Qy(!1,"page")},{key:"Enter",run:UMA}],tkA=bc.highest(SQ.computeN([Rr],t=>t.facet(Rr).defaultKeymap?[F_]:[]));function ikA(t,e=t.state){let A=new Set;for(let{from:i,to:n}of t.visibleRanges){let o=i;for(;o<=n;){let a=e.doc.lineAt(o);A.has(a)||A.add(a),o=a.to+1}}return A}function __(t){let e=t.selection.main.head;return t.doc.lineAt(e)}function _tA(t,e){let A=0;A:for(let i=0;i=o.level&&this.markerType!=="codeOnly"?this.set(e,0,n.level):n.empty&&n.level===0&&o.level!==0?this.set(e,0,0):o.level>n.level?this.set(e,0,n.level+1):this.set(e,0,o.level)}let A=_tA(e.text,this.state.tabSize),i=Math.floor(A/this.unitWidth);return this.set(e,A,i)}closestNonEmpty(e,A){let i=e.number+A;for(;A===-1?i>=1:i<=this.state.doc.lines;){if(this.has(i)){let a=this.get(i);if(!a.empty)return a}let o=this.state.doc.line(i);if(o.text.trim().length){let a=_tA(o.text,this.state.tabSize),r=Math.floor(a/this.unitWidth);return this.set(o,a,r)}i+=A}let n=this.state.doc.line(A===-1?1:this.state.doc.lines);return this.set(n,0,0)}findAndSetActiveLines(){let e=__(this.state);if(!this.has(e))return;let A=this.get(e);if(this.has(A.line.number+1)){let o=this.get(A.line.number+1);o.level>A.level&&(A=o)}if(this.has(A.line.number-1)){let o=this.get(A.line.number-1);o.level>A.level&&(A=o)}if(A.level===0)return;A.active=A.level;let i,n;for(i=A.line.number;i>1;i--){if(!this.has(i-1))continue;let o=this.get(i-1);if(o.level0&&s.push(wy("--indent-marker-bg-color",i,e,r,g)),s.push(wy("--indent-marker-active-bg-color",n,e,a-1,1)),a!==o&&s.push(wy("--indent-marker-bg-color",i,e,a,o-a))}else s.push(wy("--indent-marker-bg-color",i,e,r,o-r));return s.join(",")}var G_=class{constructor(e){this.view=e,this.unitWidth=_c(e.state),this.currentLineNumber=__(e.state).number,this.generate(e.state)}update(e){let A=_c(e.state),i=A!==this.unitWidth;i&&(this.unitWidth=A);let n=__(e.state).number,o=n!==this.currentLineNumber;this.currentLineNumber=n;let a=e.state.facet(Dy).highlightActiveBlock&&o;(e.docChanged||e.viewportChanged||i||a)&&this.generate(e.state)}generate(e){let A=new Wr,i=ikA(this.view,e),{hideFirstIndent:n,markerType:o,thickness:a,activeThickness:r}=e.facet(Dy),s=new L_(i,e,this.unitWidth,o);for(let g of i){let l=s.get(g.number);if(!l?.level)continue;let C=okA(l,this.unitWidth,n,a,r);A.add(g.from,g.from,yt.line({class:"cm-indent-markers",attributes:{style:`--indent-markers: ${C}`}}))}this.decorations=A.finish()}};function LtA(t={}){return[Dy.of(t),nkA(t.colors),Go.fromClass(G_,{decorations:e=>e.decorations})]}var akA=["mainAxis","crossAxis","fallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment"],rkA=["mainAxis","crossAxis","limiter"];function AnA(t,e){if(t==null)return{};var A,i,n=(function(a,r){if(a==null)return{};var s={};for(var g in a)if({}.hasOwnProperty.call(a,g)){if(r.indexOf(g)!==-1)continue;s[g]=a[g]}return s})(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i{};function EkA(t){return t()}function CL(t){for(var e=0;e{t=A,e=i}),resolve:t,reject:e}}var QkA=1<<24,vh=16,uv=32,anA=64,jL=128,zc=512,As=1024,Oc=2048,r2=4096,j0=8192,bh=16384,qL=32768,Vd=65536,hkA=1<<17,rnA=1<<18,snA=1<<19,PC=1<<25,Xy=32768,IL=1<<21,XI=1<<23,q0=Symbol("$state"),gnA=Symbol("legacy props"),ukA=Symbol(""),Ah=new class extends Error{constructor(){super(...arguments),H0(this,"name","StaleReactionError"),H0(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};function om(t){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function lnA(t){return t===this.v}function cnA(t,e){return t!=t?e==e:t!==e||t!==null&&typeof t=="object"||typeof t=="function"}function CnA(t){return!cnA(t,this.v)}var co=null;function Ih(t){co=t}function r1(t){return InA().get(t)}function St(t){co={p:co,i:!1,c:null,e:null,s:t,x:null,l:yh&&!(arguments.length>1&&arguments[1]!==void 0&&arguments[1])?{s:null,u:null,$:[]}:null}}function xt(t){var e=co,A=e.e;if(A!==null)for(var i of(e.e=null,A))SnA(i);return t!==void 0&&(e.x=t),e.i=!0,co=e.p,t??{}}function Mh(){return!yh||co!==null&&co.l===null}function InA(t){var e,A;return co===null&&om(),(A=(e=co).c)!==null&&A!==void 0?A:e.c=new Map((function(i){for(var n=i.p;n!==null;){var o=n.c;if(o!==null)return o;n=n.p}return null})(co)||void 0)}var Hd=[];function dnA(){var t=Hd;Hd=[],CL(t)}function Wd(t){if(Hd.length===0&&!Tf){var e=Hd;queueMicrotask(()=>{e===Hd&&dnA()})}Hd.push(t)}function fkA(){for(;Hd.length>0;)dnA()}function BnA(t){var e=jn;if(e===null)return Pn.f|=XI,t;if((e.f&qL)===0){if((e.f&jL)===0)throw t;e.b.error(t)}else dh(t,e)}function dh(t,e){for(;e!==null;){if((e.f&jL)!==0)try{return void e.b.error(t)}catch(A){t=A}e=e.parent}throw t}var zy=new Set,Uo=null,Yf=null,Jl=null,Ul=[],fv=null,dL=!1,Tf=!1,$y=new WeakMap,yy=new WeakMap,Ud=new WeakMap,Jd=new WeakMap,vy=new WeakMap,Oy=new WeakMap,Py=new WeakMap,Zg=new WeakSet,Zd=class t{constructor(){enA(this,Zg),H0(this,"committed",!1),H0(this,"current",new Map),H0(this,"previous",new Map),po(this,$y,new Set),po(this,yy,new Set),po(this,Ud,0),po(this,Jd,0),po(this,vy,null),po(this,Oy,[]),po(this,Py,[]),H0(this,"skipped_effects",new Set),H0(this,"is_fork",!1)}is_deferred(){return this.is_fork||we(Jd,this)>0}process(e){Ul=[],Yf=null,this.apply();var A,i={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(var n of e)ir(Zg,this,EnA).call(this,n,i);this.is_fork||ir(Zg,this,mkA).call(this),this.is_deferred()?(ir(Zg,this,ah).call(this,i.effects),ir(Zg,this,ah).call(this,i.render_effects),ir(Zg,this,ah).call(this,i.block_effects)):(Yf=this,Uo=null,TtA(i.render_effects),TtA(i.effects),Yf=null,(A=we(vy,this))===null||A===void 0||A.resolve()),Jl=null}capture(e,A){var i;this.previous.has(e)||this.previous.set(e,A),(e.f&XI)===0&&(this.current.set(e,e.v),(i=Jl)===null||i===void 0||i.set(e,e.v))}activate(){Uo=this,this.apply()}deactivate(){Uo===this&&(Uo=null,Jl=null)}flush(){if(this.activate(),Ul.length>0){if(hnA(),Uo!==null&&Uo!==this)return}else we(Ud,this)===0&&this.process([]);this.deactivate()}discard(){for(var e of we(yy,this))e(this);we(yy,this).clear()}increment(e){Cn(Ud,this,we(Ud,this)+1),e&&Cn(Jd,this,we(Jd,this)+1)}decrement(e){Cn(Ud,this,we(Ud,this)-1),e&&Cn(Jd,this,we(Jd,this)-1),this.revive()}revive(){for(var e of we(Oy,this))ts(e,Oc),Xd(e);for(var A of we(Py,this))ts(A,r2),Xd(A);Cn(Oy,this,[]),Cn(Py,this,[]),this.flush()}oncommit(e){we($y,this).add(e)}ondiscard(e){we(yy,this).add(e)}settled(){var e;return((e=we(vy,this))!==null&&e!==void 0?e:Cn(vy,this,onA())).promise}static ensure(){if(Uo===null){var e=Uo=new t;zy.add(Uo),Tf||t.enqueue(()=>{Uo===e&&e.flush()})}return Uo}static enqueue(e){Wd(e)}apply(){}};function EnA(t,e){t.f^=As;for(var A=t.first;A!==null;){var i,n=A.f,o=!!(96&n),a=o&&(n&As)!==0||(n&j0)!==0||this.skipped_effects.has(A);if((A.f&jL)!==0&&(i=A.b)!==null&&i!==void 0&&i.is_pending()&&(e={parent:e,effect:A,effects:[],render_effects:[],block_effects:[]}),!a&&A.fn!==null){o?A.f^=As:4&n?e.effects.push(A):xh(A)&&((A.f&vh)!==0&&e.block_effects.push(A),Qh(A));var r=A.first;if(r!==null){A=r;continue}}var s=A.parent;for(A=A.next;A===null&&s!==null;)s===e.effect&&(ir(Zg,this,ah).call(this,e.effects),ir(Zg,this,ah).call(this,e.render_effects),ir(Zg,this,ah).call(this,e.block_effects),e=e.parent),A=s.next,s=s.parent}}function ah(t){for(var e of t)((e.f&Oc)!==0?we(Oy,this):we(Py,this)).push(e),ir(Zg,this,QnA).call(this,e.deps),ts(e,As)}function QnA(t){if(t!==null)for(var e of t)2&e.f&&(e.f&Xy)!==0&&(e.f^=Xy,ir(Zg,this,QnA).call(this,e.deps))}function mkA(){if(we(Jd,this)===0){for(var t of we($y,this))t();we($y,this).clear()}we(Ud,this)===0&&ir(Zg,this,pkA).call(this)}function pkA(){if(zy.size>1){this.previous.clear();var t=Jl,e=!0,A={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(var i of zy)if(i!==this){var n=[];for(var[o,a]of this.current){if(i.current.has(o)){if(!e||a===i.current.get(o))continue;i.current.set(o,a)}n.push(o)}if(n.length!==0){var r=[...i.current.keys()].filter(d=>!this.current.has(d));if(r.length>0){var s=Ul;Ul=[];var g=new Set,l=new Map;for(var C of n)unA(C,r,g,l);if(Ul.length>0){for(var I of(Uo=i,i.apply(),Ul))ir(Zg,i,EnA).call(i,I,A);i.deactivate()}Ul=s}}}else e=!1;Uo=null,Jl=t}this.committed=!0,zy.delete(this)}function Mo(t){var e=Tf;Tf=!0;try{for(;;){var A;if(fkA(),Ul.length===0&&((A=Uo)===null||A===void 0||A.flush(),Ul.length===0))return void(fv=null);hnA()}}finally{Tf=e}}function hnA(){var t=Od;dL=!0;try{var e=0;for(Av(!0);Ul.length>0;){var A=Zd.ensure();e++>1e3&&wkA(),A.process(Ul),$I.clear()}}finally{dL=!1,Av(t),fv=null}}function wkA(){try{(function(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")})()}catch(t){dh(t,fv)}}var qC=null;function TtA(t){var e=t.length;if(e!==0){for(var A=0;A0)){for(var o of($I.clear(),qC))if(!(24576&o.f)){for(var a=[o],r=o.parent;r!==null;)qC.has(r)&&(qC.delete(r),a.push(r)),r=r.parent;for(var s=a.length-1;s>=0;s--){var g=a[s];24576&g.f||Qh(g)}}qC.clear()}}qC=null}}function unA(t,e,A,i){if(!A.has(t)&&(A.add(t),t.reactions!==null))for(var n of t.reactions){var o=n.f;2&o?unA(n,e,A,i):4194320&o&&(o&Oc)===0&&fnA(n,e,i)&&(ts(n,Oc),Xd(n))}}function fnA(t,e,A){var i=A.get(t);if(i!==void 0)return i;if(t.deps!==null)for(var n of t.deps){if(e.includes(n))return!0;if(2&n.f&&fnA(n,e,A))return A.set(n,!0),!0}return A.set(t,!1),!1}function Xd(t){for(var e=fv=t;e.parent!==null;){var A=(e=e.parent).f;if(dL&&e===jn&&(A&vh)!==0&&(A&rnA)===0)return;if(96&A){if((A&As)===0)return;e.f^=As}}Ul.push(e)}var HI=new WeakMap,qI=new WeakMap,DkA=new WeakMap,Yd=new WeakMap,J_=new WeakMap,jI=new WeakMap,zI=new WeakMap,ZC=new WeakMap,KI=new WeakMap,zd=new WeakMap,rh=new WeakMap,HQ=new WeakMap,sh=new WeakMap,Rf=new WeakMap,zQ=new WeakMap,HtA=new WeakMap,JI=new WeakSet,BL=class{constructor(e,A,i){var n,o,a,r;enA(this,JI),H0(this,"parent",void 0),po(this,HI,!1),po(this,qI,void 0),po(this,DkA,null),po(this,Yd,void 0),po(this,J_,void 0),po(this,jI,void 0),po(this,zI,null),po(this,ZC,null),po(this,KI,null),po(this,zd,null),po(this,rh,null),po(this,HQ,0),po(this,sh,0),po(this,Rf,!1),po(this,zQ,null),po(this,HtA,(n=()=>(Cn(zQ,this,s2(we(HQ,this))),()=>{Cn(zQ,this,null)}),a=0,r=s2(0),()=>{zf()&&(c(r),kh(()=>(a===0&&(o=EA(()=>n(()=>Hf(r)))),a+=1,()=>{Wd(()=>{var s;(a-=1)==0&&((s=o)===null||s===void 0||s(),o=void 0,Hf(r))})})))})),Cn(qI,this,e),Cn(Yd,this,A),Cn(J_,this,i),this.parent=jn.b,Cn(HI,this,!!we(Yd,this).pending),Cn(jI,this,Sh(()=>{jn.b=this;var s=ir(JI,this,ykA).call(this);try{Cn(zI,this,V0(()=>i(s)))}catch(g){this.error(g)}return we(sh,this)>0?ir(JI,this,OtA).call(this):Cn(HI,this,!1),()=>{var g;(g=we(rh,this))===null||g===void 0||g.remove()}},589952))}is_pending(){return we(HI,this)||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!we(Yd,this).pending}update_pending_count(e){ir(JI,this,mnA).call(this,e),Cn(HQ,this,we(HQ,this)+e),we(zQ,this)&&Bh(we(zQ,this),we(HQ,this))}get_effect_pending(){return we(HtA,this).call(this),c(we(zQ,this))}error(e){var A=we(Yd,this).onerror,i=we(Yd,this).failed;if(we(Rf,this)||!A&&!i)throw e;we(zI,this)&&(es(we(zI,this)),Cn(zI,this,null)),we(ZC,this)&&(es(we(ZC,this)),Cn(ZC,this,null)),we(KI,this)&&(es(we(KI,this)),Cn(KI,this,null));var n=!1,o=!1,a=()=>{n?console.warn("https://svelte.dev/e/svelte_boundary_reset_noop"):(n=!0,o&&(function(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")})(),Zd.ensure(),Cn(HQ,this,0),we(KI,this)!==null&&Eh(we(KI,this),()=>{Cn(KI,this,null)}),Cn(HI,this,this.has_pending_snippet()),Cn(zI,this,ir(JI,this,ztA).call(this,()=>(Cn(Rf,this,!1),V0(()=>we(J_,this).call(this,we(qI,this)))))),we(sh,this)>0?ir(JI,this,OtA).call(this):Cn(HI,this,!1))},r=Pn;try{bg(null),o=!0,A?.(e,a),o=!1}catch(s){dh(s,we(jI,this)&&we(jI,this).parent)}finally{bg(r)}i&&Wd(()=>{Cn(KI,this,ir(JI,this,ztA).call(this,()=>{Zd.ensure(),Cn(Rf,this,!0);try{return V0(()=>{i(we(qI,this),()=>e,()=>a)})}catch(s){return dh(s,we(jI,this).parent),null}finally{Cn(Rf,this,!1)}}))})}};function ykA(){var t=we(qI,this);return we(HI,this)&&(Cn(rh,this,A1()),we(qI,this).before(we(rh,this)),t=we(rh,this)),t}function ztA(t){var e=jn,A=Pn,i=co;Tl(we(jI,this)),bg(we(jI,this)),Ih(we(jI,this).ctx);try{return t()}catch(n){return BnA(n),null}finally{Tl(e),bg(A),Ih(i)}}function OtA(){var t=we(Yd,this).pending;we(zI,this)!==null&&(Cn(zd,this,document.createDocumentFragment()),we(zd,this).append(we(rh,this)),KnA(we(zI,this),we(zd,this))),we(ZC,this)===null&&Cn(ZC,this,V0(()=>t(we(qI,this))))}function mnA(t){var e;this.has_pending_snippet()?(Cn(sh,this,we(sh,this)+t),we(sh,this)===0&&(Cn(HI,this,!1),we(ZC,this)&&Eh(we(ZC,this),()=>{Cn(ZC,this,null)}),we(zd,this)&&(we(qI,this).before(we(zd,this)),Cn(zd,this,null)))):this.parent&&ir(JI,e=this.parent,mnA).call(e,t)}function pnA(t,e,A,i){var n=Mh()?am:tt;if(A.length!==0||t.length!==0){var o=Uo,a=jn,r=(function(){var g=jn,l=Pn,C=co,I=Uo;return function(){var d=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];Tl(g),bg(l),Ih(C),d&&I?.activate()}})();t.length>0?Promise.all(t).then(()=>{r();try{return s()}finally{o?.deactivate(),by()}}):s()}else i(e.map(n));function s(){Promise.all(A.map(g=>(function(l){var C=jn;C===null&&(function(){throw new Error("https://svelte.dev/e/async_derived_orphan")})();var I=C.b,d=void 0,B=s2($r),E=!Pn,Q=new Map;return(function(f){jc(4718592,f,!0)})(()=>{var f=onA();d=f.promise;try{Promise.resolve(l()).then(f.resolve,f.reject).then(()=>{b===Uo&&b.committed&&b.deactivate(),by()})}catch(F){f.reject(F),by()}var b=Uo;if(E){var S,M=!I.is_pending();I.update_pending_count(1),b.increment(M),(S=Q.get(b))===null||S===void 0||S.reject(Ah),Q.delete(b),Q.set(b,f)}var D=function(F){var _=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0;if(b.activate(),_)_!==Ah&&(B.f|=XI,Bh(B,_));else for(var[U,J]of((B.f&XI)!==0&&(B.f^=XI),Bh(B,F),Q)){if(Q.delete(U),U===b)break;J.reject(Ah)}E&&(I.update_pending_count(-1),b.decrement(M))};f.promise.then(D,F=>D(null,F||"unknown"))}),pv(()=>{for(var f of Q.values())f.reject(Ah)}),new Promise(f=>{function b(S){function M(){S===d?f(B):b(d)}S.then(M,M)}b(d)})})(g))).then(g=>{r();try{i([...e.map(n),...g])}catch(l){(a.f&bh)===0&&dh(l,a)}o?.deactivate(),by()}).catch(g=>{dh(g,a)})}}function by(){Tl(null),bg(null),Ih(null)}function am(t){var e=Pn!==null&&2&Pn.f?Pn:null;return jn!==null&&(jn.f|=snA),{ctx:co,deps:null,effects:null,equals:lnA,f:2050,fn:t,reactions:null,rv:0,v:$r,wv:0,parent:e??jn,ac:null}}function Dg(t){var e=am(t);return UnA(e),e}function tt(t){var e=am(t);return e.equals=CnA,e}function wnA(t){var e=t.effects;if(e!==null){t.effects=null;for(var A=0;A1&&arguments[1]!==void 0&&arguments[1],n=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],o=s2(t);return i||(o.equals=CnA),yh&&n&&co!==null&&co.l!==null&&((A=(e=co.l).s)!==null&&A!==void 0?A:e.s=[]).push(o),o}function $g(t,e){return R(t,EA(()=>c(t))),e}function R(t,e){var A,i=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return Pn===null||O0&&(Pn.f&hkA)===0||!Mh()||!(4325394&Pn.f)||(A=n2)!==null&&A!==void 0&&A.includes(t)||(function(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")})(),Bh(t,i?eh(e):e)}function Bh(t,e){if(!t.equals(e)){var A=t.v;oB?$I.set(t,e):$I.set(t,A),t.v=e;var i=Zd.ensure();i.capture(t,A),2&t.f&&((t.f&Oc)!==0&&VL(t),ts(t,(t.f&zc)!==0?As:r2)),t.wv=YnA(),MnA(t,Oc),!Mh()||jn===null||(jn.f&As)===0||96&jn.f||(_l===null?(function(n){_l=n})([t]):_l.push(t)),!i.is_fork&&Y_.size>0&&!PtA&&(function(){PtA=!1;var n=Od;Av(!0);var o=Array.from(Y_);try{for(var a of o)(a.f&As)!==0&&ts(a,r2),xh(a)&&Qh(a)}finally{Av(n)}Y_.clear()})()}return e}function jtA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,A=c(t),i=e===1?A++:A--;return R(t,A),i}function Hf(t){R(t,t.v+1)}function MnA(t,e){var A=t.reactions;if(A!==null)for(var i=Mh(),n=A.length,o=0;o{if(Pd===o)return r();var s=Pn,g=Pd;bg(null),ZtA(o);var l=r();return bg(s),ZtA(g),l};return i&&A.set("length",jC(t.length)),new Proxy(t,{defineProperty(r,s,g){"value"in g&&g.configurable!==!1&&g.enumerable!==!1&&g.writable!==!1||(function(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")})();var l=A.get(s);return l===void 0?l=a(()=>{var C=jC(g.value);return A.set(s,C),C}):R(l,g.value,!0),!0},deleteProperty(r,s){var g=A.get(s);if(g===void 0){if(s in r){var l=a(()=>jC($r));A.set(s,l),Hf(n)}}else R(g,$r),Hf(n);return!0},get(r,s,g){var l;if(s===q0)return t;var C=A.get(s),I=s in r;if(C===void 0&&(!I||(l=t2(r,s))!==null&&l!==void 0&&l.writable)&&(C=a(()=>jC(eh(I?r[s]:$r))),A.set(s,C)),C!==void 0){var d=c(C);return d===$r?void 0:d}return Reflect.get(r,s,g)},getOwnPropertyDescriptor(r,s){var g=Reflect.getOwnPropertyDescriptor(r,s);if(g&&"value"in g){var l=A.get(s);l&&(g.value=c(l))}else if(g===void 0){var C=A.get(s),I=C?.v;if(C!==void 0&&I!==$r)return{enumerable:!0,configurable:!0,value:I,writable:!0}}return g},has(r,s){var g;if(s===q0)return!0;var l=A.get(s),C=l!==void 0&&l.v!==$r||Reflect.has(r,s);return(l!==void 0||jn!==null&&(!C||(g=t2(r,s))!==null&&g!==void 0&&g.writable))&&(l===void 0&&(l=a(()=>jC(C?eh(r[s]):$r)),A.set(s,l)),c(l)===$r)?!1:C},set(r,s,g,l){var C,I=A.get(s),d=s in r;if(i&&s==="length")for(var B=g;BjC($r)),A.set(B+"",E))}I===void 0?(!d||(C=t2(r,s))!==null&&C!==void 0&&C.writable)&&(R(I=a(()=>jC(void 0)),eh(g)),A.set(s,I)):(d=I.v!==$r,R(I,a(()=>eh(g))));var Q=Reflect.getOwnPropertyDescriptor(r,s);if(Q!=null&&Q.set&&Q.set.call(l,g),!d){if(i&&typeof s=="string"){var f=A.get("length"),b=Number(s);Number.isInteger(b)&&b>=f.v&&R(f,b+1)}Hf(n)}return!0},ownKeys(r){c(n);var s=Reflect.ownKeys(r).filter(C=>{var I=A.get(C);return I===void 0||I.v!==$r});for(var[g,l]of A)l.v===$r||g in r||s.push(g);return s},setPrototypeOf(){(function(){throw new Error("https://svelte.dev/e/state_prototype_fixed")})()}})}function qtA(t){try{if(t!==null&&typeof t=="object"&&q0 in t)return t[q0]}catch{}return t}function vkA(t,e){return Object.is(qtA(t),qtA(e))}function A1(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return document.createTextNode(t)}function Al(t){return vnA.call(t)}function rm(t){return bnA.call(t)}function CA(t,e){return Al(t)}function At(t){var e=Al(t);return e instanceof Comment&&e.data===""?rm(e):e}function bA(t){for(var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,A=t;e--;)A=rm(A);return A}var VtA=!1;function mv(t){var e=Pn,A=jn;bg(null),Tl(null);try{return t()}finally{bg(e),Tl(A)}}function bkA(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:A;t.addEventListener(e,()=>mv(A));var n=t.__on_r;t.__on_r=n?()=>{n(),i(!0)}:()=>i(!0),VtA||(VtA=!0,document.addEventListener("reset",o=>{Promise.resolve().then(()=>{if(!o.defaultPrevented)for(var a of o.target.elements){var r;(r=a.__on_r)===null||r===void 0||r.call(a)}})},{capture:!0}))}function knA(t){jn===null&&(Pn===null&&(function(){throw new Error("https://svelte.dev/e/effect_orphan")})(),(function(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")})()),oB&&(function(){throw new Error("https://svelte.dev/e/effect_in_teardown")})()}function jc(t,e,A){var i=jn;i!==null&&(i.f&j0)!==0&&(t|=j0);var n={ctx:co,deps:null,nodes:null,f:t|Oc|zc,first:null,fn:e,last:null,next:null,parent:i,b:i&&i.b,prev:null,teardown:null,wv:0,ac:null};if(A)try{Qh(n),n.f|=qL}catch(s){throw es(n),s}else e!==null&&Xd(n);var o=n;if(A&&o.deps===null&&o.teardown===null&&o.nodes===null&&o.first===o.last&&(o.f&snA)===0&&(o=o.first,(t&vh)!==0&&(t&Vd)!==0&&o!==null&&(o.f|=Vd)),o!==null&&(o.parent=i,i!==null&&(function(s,g){var l=g.last;l===null?g.last=g.first=s:(l.next=s,s.prev=l,g.last=s)})(o,i),Pn!==null&&2&Pn.f&&(t&anA)===0)){var a,r=Pn;((a=r.effects)!==null&&a!==void 0?a:r.effects=[]).push(o)}return n}function zf(){return Pn!==null&&!O0}function pv(t){var e=jc(8,null,!1);return ts(e,As),e.teardown=t,e}function EL(t){knA();var e=jn.f;if(!(!Pn&&(e&uv)!==0&&(e&qL)===0))return SnA(t);var A,i=co;((A=i.e)!==null&&A!==void 0?A:i.e=[]).push(t)}function SnA(t){return jc(1048580,t,!1)}function Nr(t){return jc(4,t,!1)}function RA(t,e){var A={effect:null,ran:!1,deps:t};co.l.$.push(A),A.effect=kh(()=>{t(),A.ran||(A.ran=!0,EA(e))})}function kn(){var t=co;kh(()=>{for(var e of t.l.$){e.deps();var A=e.effect;(A.f&As)!==0&&ts(A,r2),xh(A)&&Qh(A),e.ran=!1}})}function kh(t){return jc(8|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function ve(t){pnA(arguments.length>3&&arguments[3]!==void 0?arguments[3]:[],arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],e=>{jc(8,()=>t(...e.map(c)),!0)})}function Sh(t){return jc(vh|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function xnA(t){return jc(QkA|(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0),t,!0)}function V0(t){return jc(524320,t,!0)}function RnA(t){var e=t.teardown;if(e!==null){var A=oB,i=Pn;WtA(!0),bg(null);try{e.call(null)}finally{WtA(A),bg(i)}}}function NnA(t){var e=arguments.length>1&&arguments[1]!==void 0&&arguments[1],A=t.first;t.first=t.last=null;for(var i,n=function(){var o=A.ac;o!==null&&mv(()=>{o.abort(Ah)}),i=A.next,(A.f&anA)!==0?A.parent=null:es(A,e),A=i};A!==null;)n()}function es(t){var e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],A=!1;!e&&(t.f&rnA)===0||t.nodes===null||t.nodes.end===null||(FnA(t.nodes.start,t.nodes.end),A=!0),NnA(t,e&&!A),ev(t,0),ts(t,bh);var i=t.nodes&&t.nodes.t;if(i!==null)for(var n of i)n.stop();RnA(t);var o=t.parent;o!==null&&o.first!==null&&_nA(t),t.next=t.prev=t.teardown=t.ctx=t.deps=t.fn=t.nodes=t.ac=null}function FnA(t,e){for(;t!==null;){var A=t===e?null:rm(t);t.remove(),t=A}}function _nA(t){var e=t.parent,A=t.prev,i=t.next;A!==null&&(A.next=i),i!==null&&(i.prev=A),e!==null&&(e.first===t&&(e.first=i),e.last===t&&(e.last=A))}function Eh(t,e){var A=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],i=[];LnA(t,i,!0);var n=()=>{A&&es(t),e&&e()},o=i.length;if(o>0){var a=()=>--o||n();for(var r of i)r.out(a)}else n()}function LnA(t,e,A){if((t.f&j0)===0){t.f^=j0;var i=t.nodes&&t.nodes.t;if(i!==null)for(var n of i)(n.is_global||A)&&e.push(n);for(var o=t.first;o!==null;){var a=o.next;LnA(o,e,((o.f&Vd)!==0||(o.f&uv)!==0&&(t.f&vh)!==0)&&A),o=a}}}function QL(t){GnA(t,!0)}function GnA(t,e){if((t.f&j0)!==0){t.f^=j0,(t.f&As)===0&&(ts(t,Oc),Xd(t));for(var A=t.first;A!==null;){var i=A.next;GnA(A,((A.f&Vd)!==0||(A.f&uv)!==0)&&e),A=i}var n=t.nodes&&t.nodes.t;if(n!==null)for(var o of n)(o.is_global||e)&&o.in()}}function KnA(t,e){if(t.nodes)for(var A=t.nodes.start,i=t.nodes.end;A!==null;){var n=A===i?null:rm(A);e.append(A),A=n}}var MkA=null;var Od=!1;function Av(t){Od=t}var oB=!1;function WtA(t){oB=t}var Pn=null,O0=!1;function bg(t){Pn=t}var jn=null;function Tl(t){jn=t}var n2=null;function UnA(t){Pn!==null&&(n2===null?n2=[t]:n2.push(t))}var Hs=null,Wg=0,_l=null,JnA=1,Of=0,Pd=Of;function ZtA(t){Pd=t}function YnA(){return++JnA}function xh(t){var e=t.f;if((e&Oc)!==0)return!0;if(2&e&&(t.f&=-32769),(e&r2)!==0){var A=t.deps;if(A!==null)for(var i=A.length,n=0;nt.wv)return!0}(e&zc)!==0&&Jl===null&&ts(t,As)}return!1}function TnA(t,e){var A,i=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],n=t.reactions;if(n!==null&&((A=n2)===null||A===void 0||!A.includes(t)))for(var o=0;o{t.ac.abort(Ah)}),t.ac=null);try{t.f|=IL;var l=(0,t.fn)(),C=t.deps;if(Hs!==null){var I;if(ev(t,Wg),C!==null&&Wg>0)for(C.length=Wg+Hs.length,I=0;I1&&arguments[1]!==void 0?arguments[1]:new Set;if(!(typeof t!="object"||t===null||t instanceof EventTarget||e.has(t))){for(var A in e.add(t),t instanceof Date&&t.getTime(),t)try{hL(t[A],e)}catch{}var i=PL(t);if(i!==Object.prototype&&i!==Array.prototype&&i!==Map.prototype&&i!==Set.prototype&&i!==Date.prototype){var n=nnA(i);for(var o in n){var a=n[o].get;if(a)try{a.call(t)}catch{}}}}}var qnA=new Set,uL=new Set;function VnA(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};function n(o){if(i.capture||Gf.call(e,o),!o.cancelBubble)return mv(()=>A?.call(this,o))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?Wd(()=>{e.addEventListener(t,n,i)}):e.addEventListener(t,n,i),n}function ue(t,e,A,i,n){var o={capture:i,passive:n},a=VnA(t,e,A,o);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&pv(()=>{e.removeEventListener(t,a,o)})}function sm(t){for(var e=0;ea||i});var C=Pn,I=jn;bg(null),Tl(null);try{for(var d,B=[];a!==null;){var E=a.assignedSlot||a.parentNode||a.host||null;try{var Q=a["__"+n];Q==null||a.disabled&&t.target!==a||Q.call(a,t)}catch(S){d?B.push(S):d=S}if(t.cancelBubble||E===A||E===null)break;a=E}if(d){var f=function(S){queueMicrotask(()=>{throw S})};for(var b of B)f(b);throw d}}finally{t.__root=A,delete t.currentTarget,bg(C),Tl(I)}}}function WL(t){var e=document.createElement("template");return e.innerHTML=t.replaceAll("",""),e.content}function $d(t,e){var A=jn;A.nodes===null&&(A.nodes={start:t,end:e,a:null,t:null})}function FA(t,e){var A,i=!!(1&e),n=!!(2&e),o=!t.startsWith("");return()=>{A===void 0&&(A=WL(o?t:""+t),i||(A=Al(A)));var a=n||ynA?document.importNode(A,!0):A.cloneNode(!0);return i?$d(Al(a),a.lastChild):$d(a,a),a}}function s1(t,e){return(function(A,i){var n,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"svg",a=!A.startsWith(""),r=!!(1&i),s="<".concat(o,">").concat(a?A:""+A,"");return()=>{if(!n){var g=Al(WL(s));if(r)for(n=document.createDocumentFragment();Al(g);)n.appendChild(Al(g));else n=Al(g)}var l=n.cloneNode(!0);return r?$d(Al(l),l.lastChild):$d(l,l),l}})(t,e,"svg")}function ur(){var t=A1((arguments.length>0&&arguments[0]!==void 0?arguments[0]:"")+"");return $d(t,t),t}function bi(){var t=document.createDocumentFragment(),e=document.createComment(""),A=A1();return t.append(e,A),$d(e,A),t}function lA(t,e){t!==null&&t.before(e)}var xkA=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"],RkA={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"},NkA=["touchstart","touchmove"];function FkA(t){return NkA.includes(t)}function Rt(t,e){var A,i=e==null?"":typeof e=="object"?e+"":e;i!==((A=t.__t)!==null&&A!==void 0?A:t.__t=t.nodeValue)&&(t.__t=i,t.nodeValue=i+"")}function _kA(t,e){return(function(A,i){var{target:n,anchor:o,props:a={},events:r,context:s,intro:g=!0}=i;(function(){if(i2===void 0){i2=window,ynA=/Firefox/.test(navigator.userAgent);var B=Element.prototype,E=Node.prototype,Q=Text.prototype;vnA=t2(E,"firstChild").get,bnA=t2(E,"nextSibling").get,YtA(B)&&(B.__click=void 0,B.__className=void 0,B.__attributes=null,B.__style=void 0,B.__e=void 0),YtA(Q)&&(Q.__t=void 0)}})();var l=new Set,C=B=>{for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};return new Promise(f=>{Q.outro?Eh(E,()=>{es(E),f(void 0)}):(es(E),f(void 0))})}})(()=>{var B=o??n.appendChild(A1());return(function(E,Q,f){new BL(E,Q,f)})(B,{pending:()=>{}},E=>{s&&(St({}),co.c=s),r&&(a.$$events=r),I=A(E,a)||{},s&&xt()}),()=>{for(var E of l){n.removeEventListener(E,Gf);var Q=OQ.get(E);--Q===0?(document.removeEventListener(E,Gf),OQ.delete(E)):OQ.set(E,Q)}var f;uL.delete(C),B!==o&&((f=B.parentNode)===null||f===void 0||f.removeChild(B))}});return fL.set(I,d),I})(t,e)}var OQ=new Map,fL=new WeakMap,PQ,zC=new WeakMap,Ld=new WeakMap,OC=new WeakMap,Nf=new WeakMap,T_=new WeakMap,XtA=new WeakMap,LkA=new WeakMap,hh=class{constructor(e){var A=this,i=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];H0(this,"anchor",void 0),po(this,zC,new Map),po(this,Ld,new Map),po(this,OC,new Map),po(this,Nf,new Set),po(this,T_,!0),po(this,XtA,()=>{var n=Uo;if(we(zC,this).has(n)){var o=we(zC,this).get(n),a=we(Ld,this).get(o);if(a)QL(a),we(Nf,this).delete(o);else{var r=we(OC,this).get(o);r&&(we(Ld,this).set(o,r.effect),we(OC,this).delete(o),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),a=r.effect)}for(var[s,g]of we(zC,this)){if(we(zC,this).delete(s),s===n)break;var l=we(OC,this).get(g);l&&(es(l.effect),we(OC,this).delete(g))}var C=function(B,E){if(B===o||we(Nf,A).has(B))return 1;var Q=()=>{if(Array.from(we(zC,A).values()).includes(B)){var f=document.createDocumentFragment();KnA(E,f),f.append(A1()),we(OC,A).set(B,{effect:E,fragment:f})}else es(E);we(Nf,A).delete(B),we(Ld,A).delete(B)};we(T_,A)||!a?(we(Nf,A).add(B),Eh(E,Q,!1)):Q()};for(var[I,d]of we(Ld,this))C(I,d)}}),po(this,LkA,n=>{we(zC,this).delete(n);var o=Array.from(we(zC,this).values());for(var[a,r]of we(OC,this))o.includes(a)||(es(r.effect),we(OC,this).delete(a))}),this.anchor=e,Cn(T_,this,i)}ensure(e,A){var i=Uo;!A||we(Ld,this).has(e)||we(OC,this).has(e)||we(Ld,this).set(e,V0(()=>A(this.anchor))),we(zC,this).set(i,e),we(XtA,this).call(this)}};function is(t){co===null&&om(),yh&&co.l!==null?WnA(co).m.push(t):EL(()=>{var e=EA(t);if(typeof e=="function")return e})}function Hl(t){co===null&&om(),is(()=>()=>EA(t))}function GkA(){var t=co;return t===null&&om(),(e,A,i)=>{var n,o=(n=t.s.$$events)===null||n===void 0?void 0:n[e];if(o){var a=nm(o)?o.slice():[o],r=(function(g,l){var{bubbles:C=!1,cancelable:I=!1}=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return new CustomEvent(g,{detail:l,bubbles:C,cancelable:I})})(e,A,i);for(var s of a)s.call(t.x,r);return!r.defaultPrevented}return!0}}function KkA(t){co===null&&om(),co.l===null&&(function(){throw new Error("https://svelte.dev/e/lifecycle_legacy_only")})(),WnA(co).b.push(t)}function WnA(t){var e,A=t.l;return(e=A.u)!==null&&e!==void 0?e:A.u={a:[],b:[],m:[]}}function TA(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=new hh(t);function n(o,a){i.ensure(o,a)}Sh(()=>{var o=!1;e(function(a){o=!0,n(!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],a)}),o||n(!1,null)},A?Vd:0)}function ZnA(t,e,A){var i=new hh(t),n=!Mh();Sh(()=>{var o=e();n&&o!==null&&typeof o=="object"&&(o={}),i.ensure(o,A)})}function Na(t,e){return e}function H_(t){for(var e=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],A=0;A5&&arguments[5]!==void 0?arguments[5]:null,a=t,r=new Map;!(4&e)||(a=t.appendChild(A1()));var s,g=null,l=tt(()=>{var E=A();return nm(E)?E:E==null?[]:Hy(E)}),C=!0;function I(){B.fallback=g,(function(E,Q,f,b,S){var M,D,F,_,U,J=!!(8&b),j=Q.length,AA=E.items,O=E.effect.first,DA=null,P=[],aA=[];if(J)for(U=0;U0){var HA=4&b&&j===0?f:null;if(J){for(U=0;U{if(be){if(be.pending.delete(ut),be.done.add(ut),be.pending.size===0){var Me=QA.outrogroups;H_(Hy(be.done)),Me.delete(be),Me.size===0&&(QA.outrogroups=null)}}else pA-=1},!1)},ht=0;ht{if(D!==void 0)for(_ of D){var QA;(QA=_.nodes)===null||QA===void 0||(QA=QA.a)===null||QA===void 0||QA.apply()}})})(B,s,a,e,i),g!==null&&(s.length===0?(g.f&PC)===0?QL(g):(g.f^=PC,Ff(g,null,a)):Eh(g,()=>{g=null}))}var d=Sh(()=>{for(var E=(s=c(l)).length,Q=new Set,f=0;fo(a)):(g=V0(()=>o(PQ??(PQ=A1())))).f|=PC),C||I(),c(l)}),B={effect:d,items:r,outrogroups:null,fallback:g};C=!1}function UkA(t,e,A,i,n,o,a,r){var s=1&a?16&a?s2(A):IA(A,!1,!1):null,g=2&a?s2(n):null;return{v:s,i:g,e:V0(()=>(o(e,s??A,g??n,r),()=>{t.delete(i)}))}}function Ff(t,e,A){if(t.nodes)for(var i=t.nodes.start,n=t.nodes.end,o=e&&(e.f&PC)===0?e.nodes.start:A;i!==null;){var a=rm(i);if(o.before(i),i===n)return;i=a}}function UI(t,e,A){e===null?t.effect.first=A:e.next=A,A===null?t.effect.last=e:A.prev=e}function XnA(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=arguments.length>3&&arguments[3]!==void 0&&arguments[3],n=t,o="";ve(()=>{var a,r=jn;if(o!==(o=(a=e())!==null&&a!==void 0?a:"")&&(r.nodes!==null&&(FnA(r.nodes.start,r.nodes.end),r.nodes=null),o!=="")){var s=o+"";A?s="".concat(s,""):i&&(s="".concat(s,""));var g=WL(s);if((A||i)&&(g=Al(g)),$d(Al(g),g.lastChild),A||i)for(;Al(g);)n.before(Al(g));else n.before(g)}})}function Ea(t,e,A,i,n){var o,a=(o=e.$$slots)===null||o===void 0?void 0:o[A],r=!1;a===!0&&(a=e[A==="default"?"children":A],r=!0),a===void 0?n!==null&&n(t):a(t,r?()=>i:i)}function $nA(t,e,A){var i=new hh(t);Sh(()=>{var n,o=(n=e())!==null&&n!==void 0?n:null;i.ensure(o,o&&(a=>A(a,o)))},Vd)}function vs(t,e,A){Nr(()=>{var i=EA(()=>e(t,A?.())||{});if(A&&i!=null&&i.update){var n=!1,o={};kh(()=>{var a=A();G(a),n&&cnA(o,a)&&(o=a,i.update(a))}),n=!0}if(i!=null&&i.destroy)return()=>i.destroy()})}function JkA(t,e){var A,i=void 0;xnA(()=>{i!==(i=e())&&(A&&(es(A),A=null),i&&(A=V0(()=>{Nr(()=>i(t))})))})}function AoA(t){var e,A,i="";if(typeof t=="string"||typeof t=="number")i+=t;else if(typeof t=="object")if(Array.isArray(t)){var n=t.length;for(e=0;e1&&arguments[1]!==void 0&&arguments[1]?" !important;":";",A="";for(var i in t){var n=t[i];n!=null&&n!==""&&(A+=" "+i+": "+n+e)}return A}function z_(t){return t[0]!=="-"||t[1]!=="-"?t.toLowerCase():t}function $t(t,e,A,i,n,o){var a=t.__className;if(a!==A||a===void 0){var r=(function(l,C,I){var d=l==null?"":""+l;if(C&&(d=d?d+" "+C:C),I){for(var B in I)if(I[B])d=d?d+" "+B:B;else if(d.length)for(var E=B.length,Q=0;(Q=d.indexOf(B,Q))>=0;){var f=Q+E;Q!==0&&!$tA.includes(d[Q-1])||f!==d.length&&!$tA.includes(d[f])?Q=f:d=(Q===0?"":d.substring(0,Q))+d.substring(f+1)}}return d===""?null:d})(A,i,o);r==null?t.removeAttribute("class"):e?t.className=r:t.setAttribute("class",r),t.__className=A}else if(o&&n!==o)for(var s in o){var g=!!o[s];n!=null&&g===!!n[s]||t.classList.toggle(s,g)}return o}function O_(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},A=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;for(var n in A){var o=A[n];e[n]!==o&&(A[n]==null?t.style.removeProperty(n):t.style.setProperty(n,o,i))}}function Yl(t,e,A,i){if(t.__style!==e){var n=(function(o,a){if(a){var r,s,g="";if(Array.isArray(a)?(r=a[0],s=a[1]):r=a,o){o=String(o).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var l=!1,C=0,I=!1,d=[];r&&d.push(...Object.keys(r).map(z_)),s&&d.push(...Object.keys(s).map(z_));for(var B=0,E=-1,Q=o.length,f=0;f2&&arguments[2]!==void 0&&arguments[2];if(t.multiple){if(e==null)return;if(!nm(e))return void console.warn("https://svelte.dev/e/select_multiple_invalid_value");for(var i of t.options)i.selected=e.includes(eiA(i))}else{for(i of t.options)if(vkA(eiA(i),e))return void(i.selected=!0);A&&e===void 0||(t.selectedIndex=-1)}}function YkA(t){var e=new MutationObserver(()=>{mL(t,t.__value)});e.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),pv(()=>{e.disconnect()})}function eiA(t){return"__value"in t?t.__value:t.value}var XQ=Symbol("class"),_f=Symbol("style"),eoA=Symbol("is custom element"),toA=Symbol("is html");function AB(t,e){var A=ZL(t);A.value!==(A.value=e??void 0)&&(t.value!==e||e===0&&t.nodeName==="PROGRESS")&&(t.value=e??"")}function Mn(t,e,A,i){var n=ZL(t);n[e]!==(n[e]=A)&&(e==="loading"&&(t[ukA]=A),A==null?t.removeAttribute(e):typeof A!="string"&&ioA(t).includes(e)?t[e]=A:t.setAttribute(e,A))}function TkA(t,e,A,i){var n,o=ZL(t),a=o[eoA],r=!o[toA],s=e||{},g=t.tagName==="OPTION";for(var l in e)l in A||(A[l]=null);A.class?A.class=n1(A.class):(i||A[XQ])&&(A.class=null),A[_f]&&((n=A.style)!==null&&n!==void 0||(A.style=null));var C,I,d,B,E,Q,f=ioA(t),b=function(M){var D=A[M];if(g&&M==="value"&&D==null)return t.value=t.__value="",s[M]=D,0;if(M==="class")return C=t.namespaceURI==="http://www.w3.org/1999/xhtml",$t(t,C,D,i,e?.[XQ],A[XQ]),s[M]=D,s[XQ]=A[XQ],0;if(M==="style")return Yl(t,D,e?.[_f],A[_f]),s[M]=D,s[_f]=A[_f],0;if(D===(I=s[M])&&(D!==void 0||!t.hasAttribute(M))||(s[M]=D,(d=M[0]+M[1])==="$$"))return 0;if(d==="on"){var F={},_="$$"+M,U=M.slice(2);if(B=(function(P){return xkA.includes(P)})(U),(function(P){return P.endsWith("capture")&&P!=="gotpointercapture"&&P!=="lostpointercapture"})(U)&&(U=U.slice(0,-7),F.capture=!0),!B&&I){if(D!=null)return 0;t.removeEventListener(U,s[_],F),s[_]=null}if(D!=null)if(B)t["__".concat(U)]=D,sm([U]);else{let P=function(aA){s[M].call(this,aA)};var DA=P;s[_]=VnA(U,t,P,F)}else B&&(t["__".concat(U)]=void 0)}else if(M==="style")Mn(t,M,D);else if(M==="autofocus")(function(P,aA){if(aA){var iA=document.body;P.autofocus=!0,Wd(()=>{document.activeElement===iA&&P.focus()})}})(t,!!D);else if(a||M!=="__value"&&(M!=="value"||D==null))if(M==="selected"&&g)(function(P,aA){aA?P.hasAttribute("selected")||P.setAttribute("selected",""):P.removeAttribute("selected")})(t,D);else if(E=M,r||(E=(function(P){var aA;return P=P.toLowerCase(),(aA=RkA[P])!==null&&aA!==void 0?aA:P})(E)),Q=E==="defaultValue"||E==="defaultChecked",D!=null||a||Q)Q||f.includes(E)&&(a||typeof D!="string")?(t[E]=D,E in o&&(o[E]=$r)):typeof D!="function"&&Mn(t,E,D);else if(o[M]=null,E==="value"||E==="checked"){var J=t,j=e===void 0;if(E==="value"){var AA=J.defaultValue;J.removeAttribute(E),J.defaultValue=AA,J.value=J.__value=j?AA:null}else{var O=J.defaultChecked;J.removeAttribute(E),J.defaultChecked=O,J.checked=!!j&&O}}else t.removeAttribute(M);else t.value=t.__value=D};for(var S in A)b(S);return s}function jy(t,e){var A=arguments.length>5?arguments[5]:void 0,i=arguments.length>6&&arguments[6]!==void 0&&arguments[6],n=arguments.length>7&&arguments[7]!==void 0&&arguments[7];pnA(arguments.length>4&&arguments[4]!==void 0?arguments[4]:[],arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],arguments.length>3&&arguments[3]!==void 0?arguments[3]:[],o=>{var a=void 0,r={},s=t.nodeName==="SELECT",g=!1;if(xnA(()=>{var C=e(...o.map(c)),I=TkA(t,a,C,A,i,n);for(var d of(g&&s&&"value"in C&&mL(t,C.value),Object.getOwnPropertySymbols(r)))C[d]||es(r[d]);for(var B of Object.getOwnPropertySymbols(C)){var E=C[B];B.description!=="@attach"||a&&E===a[B]||(r[B]&&es(r[B]),r[B]=V0(()=>JkA(t,()=>E))),I[B]=E}a=I}),s){var l=t;Nr(()=>{mL(l,a.value,!0),YkA(l)})}g=!0})}function ZL(t){var e;return(e=t.__attributes)!==null&&e!==void 0?e:t.__attributes={[eoA]:t.nodeName.includes("-"),[toA]:t.namespaceURI==="http://www.w3.org/1999/xhtml"}}var tiA=new Map;function ioA(t){var e,A=t.getAttribute("is")||t.nodeName,i=tiA.get(A);if(i)return i;tiA.set(A,i=[]);for(var n=t,o=Element.prototype;o!==n;){for(var a in e=nnA(n))e[a].set&&i.push(a);n=PL(n)}return i}function tv(t,e){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e,i=new WeakSet;bkA(t,"input",(function(){var n=Tt(function*(o){var a=o?t.defaultValue:t.value;if(a=P_(t)?j_(a):a,A(a),Uo!==null&&i.add(Uo),yield znA(),a!==(a=e())){var r=t.selectionStart,s=t.selectionEnd,g=t.value.length;if(t.value=a??"",s!==null){var l=t.value.length;r===s&&s===g&&l>g?(t.selectionStart=l,t.selectionEnd=l):(t.selectionStart=r,t.selectionEnd=Math.min(s,l))}}});return function(o){return n.apply(this,arguments)}})()),EA(e)==null&&t.value&&(A(P_(t)?j_(t.value):t.value),Uo!==null&&i.add(Uo)),kh(()=>{var n=e();if(t===document.activeElement){var o=Yf??Uo;if(i.has(o))return}P_(t)&&n===j_(t.value)||(t.type!=="date"||n||t.value)&&n!==t.value&&(t.value=n??"")})}function P_(t){var e=t.type;return e==="number"||e==="range"}function j_(t){return t===""?null:+t}function Ot(t,e,A){var i=t2(t,e);i&&i.set&&(t[e]=A,pv(()=>{t[e]=null}))}function iiA(t,e){return t===e||t?.[q0]===e}function Jo(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,A=arguments.length>2?arguments[2]:void 0;return Nr(()=>{var i,n;return kh(()=>{i=n,n=[],EA(()=>{t!==A(...n)&&(e(t,...n),i&&iiA(A(...i),t)&&e(null,...i))})}),()=>{Wd(()=>{n&&iiA(A(...n),t)&&e(null,...n)})}}),t}function VC(t){return function(){for(var e=arguments.length,A=new Array(e),i=0;i0&&arguments[0]!==void 0&&arguments[0],e=co,A=e.l.u;if(A){var i,n=()=>G(e.s);if(t){var o=0,a={},r=am(()=>{var s=!1,g=e.s;for(var l in g)g[l]!==a[l]&&(a[l]=g[l],s=!0);return s&&o++,o});n=()=>c(r)}A.b.length&&(i=()=>{niA(e,n),CL(A.b)},knA(),jc(1048584,i,!0)),EL(()=>{var s=EA(()=>A.m.map(EkA));return()=>{for(var g of s)typeof g=="function"&&g()}}),A.a.length&&EL(()=>{niA(e,n),CL(A.a)})}}function niA(t,e){if(t.l.s)for(var A of t.l.s)c(A);e()}function wv(t){var e=s2(0);return function(){return arguments.length===1?(R(e,c(e)+1),arguments[0]):(c(e),t())}}function Kf(t,e){var A,i=(A=t.$$events)===null||A===void 0?void 0:A[e.type],n=nm(i)?i.slice():i==null?[]:[i];for(var o of n)o.call(this,e)}var My=!1,HkA={get(t,e){if(!t.exclude.includes(e))return c(t.version),e in t.special?t.special[e]():t.props[e]},set(t,e,A){if(!(e in t.special)){var i=jn;try{Tl(t.parent_effect),t.special[e]=N({get[e](){return t.props[e]}},e,4)}finally{Tl(i)}}return t.special[e](A),jtA(t.version),!0},getOwnPropertyDescriptor(t,e){if(!t.exclude.includes(e))return e in t.props?{enumerable:!0,configurable:!0,value:t.props[e]}:void 0},deleteProperty:(t,e)=>(t.exclude.includes(e)||(t.exclude.push(e),jtA(t.version)),!0),has:(t,e)=>!t.exclude.includes(e)&&e in t.props,ownKeys:t=>Reflect.ownKeys(t.props).filter(e=>!t.exclude.includes(e))};function ky(t,e){return new Proxy({props:t,exclude:e,special:{},version:s2(0),parent_effect:jn},HkA)}var zkA={get(t,e){for(var A=t.props.length;A--;){var i=t.props[A];if(xf(i)&&(i=i()),typeof i=="object"&&i!==null&&e in i)return i[e]}},set(t,e,A){for(var i=t.props.length;i--;){var n=t.props[i];xf(n)&&(n=n());var o=t2(n,e);if(o&&o.set)return o.set(A),!0}return!1},getOwnPropertyDescriptor(t,e){for(var A=t.props.length;A--;){var i=t.props[A];if(xf(i)&&(i=i()),typeof i=="object"&&i!==null&&e in i){var n=t2(i,e);return n&&!n.configurable&&(n.configurable=!0),n}}},has(t,e){if(e===q0||e===gnA)return!1;for(var A of t.props)if(xf(A)&&(A=A()),A!=null&&e in A)return!0;return!1},ownKeys(t){var e=[];for(var A of t.props)if(xf(A)&&(A=A()),A){for(var i in A)e.includes(i)||e.push(i);for(var n of Object.getOwnPropertySymbols(A))e.includes(n)||e.push(n)}return e}};function e1(){for(var t=arguments.length,e=new Array(t),A=0;A(l&&(l=!1,g=s?EA(i):i),g);if(r){var I,d,B=q0 in t||gnA in t;n=(I=(d=t2(t,e))===null||d===void 0?void 0:d.set)!==null&&I!==void 0?I:B&&e in t?D=>t[e]=D:void 0}var E,Q=!1;if(r?[o,Q]=(function(D){var F=My;try{return My=!1,[D(),My]}finally{My=F}})(()=>t[e]):o=t[e],o===void 0&&i!==void 0&&(o=C(),n&&(a&&(function(){throw new Error("https://svelte.dev/e/props_invalid_value")})(),n(o))),E=a?()=>{var D=t[e];return D===void 0?C():(l=!0,D)}:()=>{var D=t[e];return D!==void 0&&(g=void 0),D===void 0?g:D},a&&!(4&A))return E;if(n){var f=t.$$legacy;return function(D,F){return arguments.length>0?(a&&F&&!f&&!Q||n(F?E():D),D):E()}}var b=!1,S=(1&A?am:tt)(()=>(b=!1,E()));r&&c(S);var M=jn;return function(D,F){if(arguments.length>0){var _=F?c(S):a&&r?eh(D):D;return R(S,_),b=!0,g!==void 0&&(g=_),D}return oB&&b||(M.f&bh)!==0?S.v:c(S)}}function Cr(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:(function(i){var n=(function(o){try{if(typeof window<"u"&&window.localStorage!==void 0)return window.localStorage[o]}catch{}})("debug");return n!=null&&n.endsWith("*")?i.startsWith(n.slice(0,-1)):i===n})(t);if(!e)return OkA;var A=(function(i){for(var n=0,o=0;o9466848e5&&isFinite(t)&&Math.floor(t)===t&&!isNaN(new Date(t).valueOf());if(typeof t=="bigint")return pL(Number(t));try{var e=t&&t.valueOf();if(e!==t)return pL(e)}catch{return!1}return!1}function noA(t){(Sy=Sy||window.document.createElement("div")).style.color="",Sy.style.color=t;var e=Sy.style.color;return e!==""?e.replace(/\s+/g,"").toLowerCase():void 0}var Sy=void 0;function VkA(t){return typeof t=="string"&&t.length<99&&!!noA(t)}function $L(t,e){if(typeof t=="number"||typeof t=="string"||typeof t=="boolean"||t===void 0)return typeof t;if(typeof t=="bigint")return"number";if(t===null)return"null";if(Array.isArray(t))return"array";if(pn(t))return"object";var A=e.stringify(t);return A&&XL(A)?"number":A==="true"||A==="false"?"boolean":A==="null"?"null":"unknown"}var WkA=/^https?:\/\/\S+$/;function Dv(t){return typeof t=="string"&&WkA.test(t)}function Rh(t,e){if(t==="")return"";var A=t.trim();return A==="null"?null:A==="true"||A!=="false"&&(XL(A)?e.parse(A):t)}var ZkA=[];function aiA(t,e){if(t.length!==e.length)return!1;for(var A=0;A1&&arguments[1]!==void 0&&arguments[1],A={};if(!Array.isArray(t))throw new TypeError("Array expected");function i(a,r){(!Array.isArray(a)&&!pn(a)||e&&r.length>0)&&(A[wt(r)]=!0),pn(a)&&Object.keys(a).forEach(s=>{i(a[s],r.concat(s))})}for(var n=Math.min(t.length,1e4),o=0;oe?t.slice(0,e):t}function riA(t){return ye({},t)}function siA(t){return Object.values(t)}function giA(t,e,A,i){var n=t.slice(0),o=n.splice(e,A);return n.splice.apply(n,[e+i,0,...o]),n}function XkA(t,e,A){return t.slice(0,e).concat(A).concat(t.slice(e))}function gm(t,e){try{return e.parse(t)}catch{return e.parse(ml(t))}}function aoA(t,e){try{return gm(t,e)}catch{return}}function lm(t,e){t=t.replace(soA,"");try{return e(t)}catch{}try{return e("{"+t+"}")}catch{}try{return e("["+t+"]")}catch{}throw new Error("Failed to parse partial JSON")}function roA(t){t=t.replace(soA,"");try{return ml(t)}catch{}try{var e=ml("["+t+"]");return e.substring(1,e.length-1)}catch{}try{var A=ml("{"+t+"}");return A.substring(1,A.length-1)}catch{}throw new Error("Failed to repair partial JSON")}var soA=/,\s*$/;function uh(t,e){var A=ciA.exec(e);if(A){var i=Fr(A[2]),n=(function(d,B){for(var E=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:d.length,f=0,b=E;b"line ".concat(n+1," column ").concat(o+1))}}var a=tSA.exec(e),r=a?Fr(a[1]):void 0,s=r!==void 0?r-1:void 0,g=iSA.exec(e),l=g?Fr(g[1]):void 0,C=l!==void 0?l-1:void 0,I=s!==void 0&&C!==void 0?(function(d,B,E){for(var Q=d.indexOf(` -`),f=1;f1&&arguments[1]!==void 0?arguments[1]:void 0,A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:JSON;return Pf(t)?t:{text:A.stringify(t.json,null,e)}}function liA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:JSON;return jf(t)?t:{json:e.parse(t.text)}}function DL(t,e,A){return $kA(t,e,A).text}function ASA(t,e){return eSA(t,e)>e}function eSA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1/0;if(Pf(t))return t.text.length;var A=t.json,i=0;return(function n(o){if(Array.isArray(o)){if((i+=o.length-1+2)>e)return;for(var a=0;ae)return}else if(pn(o)){var r=Object.keys(o);i+=2+r.length+(r.length-1);for(var s=0;sloA(IoA(String(t))),unescapeValue:t=>doA(coA(t))},aSA={escapeValue:t=>IoA(String(t)),unescapeValue:t=>doA(t)},rSA={escapeValue:t=>loA(String(t)),unescapeValue:t=>coA(t)},sSA={escapeValue:t=>String(t),unescapeValue:t=>t};function loA(t){return t.replace(/[^\x20-\x7F]/g,e=>{var A;return e==="\b"||e==="\f"||e===` -`||e==="\r"||e===" "?e:"\\u"+("000"+((A=e.codePointAt(0))===null||A===void 0?void 0:A.toString(16))).slice(-4)})}function coA(t){return t.replace(/\\u[a-fA-F0-9]{4}/g,e=>{try{var A=JSON.parse('"'+e+'"');return CoA[A]||A}catch{return e}})}var CoA={'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},gSA={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":` -`,"\\r":"\r","\\t":" "};function IoA(t){return t.replace(/["\b\f\n\r\t\\]/g,e=>CoA[e]||e)}function doA(t){return t.replace(/\\["bfnrt\\]/g,e=>gSA[e]||e)}function fh(t){return typeof t!="string"?String(t):t.endsWith(` -`)?t+` -`:t}function BoA(t,e){return Nh(t,A=>A.nodeName.toUpperCase()===e.toUpperCase())}function VI(t,e,A){return Nh(t,i=>(function(n,o,a){return typeof n.getAttribute=="function"&&n.getAttribute(o)===a})(i,e,A))}function Nh(t,e){return!!eG(t,e)}function eG(t,e){for(var A=t;A&&!e(A);)A=A.parentNode;return A}function cm(t){var e,A;return(e=t==null||(A=t.ownerDocument)===null||A===void 0?void 0:A.defaultView)!==null&&e!==void 0?e:void 0}function tG(t){var e=cm(t),A=e?.document.activeElement;return!!A&&Nh(A,i=>i===t)}function EoA(t,e){return eG(t,A=>A.nodeName===e)}function W_(t){return VI(t,"data-type","selectable-key")?no.key:VI(t,"data-type","selectable-value")?no.value:VI(t,"data-type","insert-selection-area-inside")?no.inside:VI(t,"data-type","insert-selection-area-after")?no.after:no.multi}function qy(t){return encodeURIComponent(wt(t))}function QoA(t){var e,A=eG(t,n=>!(n==null||!n.hasAttribute)&&n.hasAttribute("data-path")),i=(e=A?.getAttribute("data-path"))!==null&&e!==void 0?e:void 0;return i?Qs(decodeURIComponent(i)):void 0}function lSA(t){var{allElements:e,currentElement:A,direction:i,hasPrio:n=()=>!0,margin:o=10}=t,a=wS(e.filter(function(f){var b=f.getBoundingClientRect();return b.width>0&&b.height>0}),s),r=s(A);function s(f){var b=f.getBoundingClientRect();return{x:b.left+b.width/2,y:b.top+b.height/2,rect:b,element:f}}function g(f,b){var S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,M=f.x-b.x,D=(f.y-b.y)*S;return Math.sqrt(M*M+D*D)}var l=f=>g(f,r);if(i==="Left"||i==="Right"){var C=i==="Left"?a.filter(f=>{return b=r,f.rect.left+o{return b=r,f.rect.right>b.rect.right+o;var b}),I=C.filter(f=>{return b=f,S=r,Math.abs(b.y-S.y)g(f,r,10));return d?.element}if(i==="Up"||i==="Down"){var B=i==="Up"?a.filter(f=>{return b=r,f.y+o{return b=r,f.y>b.y+o;var b}),E=B.filter(f=>n(f.element)),Q=VE(E,l)||VE(B,l);return Q?.element}}function iG(){var t,e,A,i;return typeof navigator<"u"&&(t=(e=(A=navigator)===null||A===void 0||(A=A.platform)===null||A===void 0?void 0:A.toUpperCase().includes("MAC"))!==null&&e!==void 0?e:(i=navigator)===null||i===void 0||(i=i.userAgentData)===null||i===void 0||(i=i.platform)===null||i===void 0?void 0:i.toUpperCase().includes("MAC"))!==null&&t!==void 0&&t}function g2(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"+",A=[];nG(t,arguments.length>2&&arguments[2]!==void 0?arguments[2]:iG)&&A.push("Ctrl"),t.altKey&&A.push("Alt"),t.shiftKey&&A.push("Shift");var i=t.key.length===1?t.key.toUpperCase():t.key;return i in cSA||A.push(i),A.join(e)}function nG(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:iG;return t.ctrlKey||t.metaKey&&e()}var cSA={Ctrl:!0,Command:!0,Control:!0,Alt:!0,Option:!0,Shift:!0};function qt(t,e){e===void 0&&(e={});var A=e.insertAt;if(t&&typeof document<"u"){var i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",A==="top"&&i.firstChild?i.insertBefore(n,i.firstChild):i.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.appendChild(document.createTextNode(t))}}qt(`.jse-absolute-popup.svelte-enkkpn { - position: relative; - left: 0; - top: 0; - width: 0; - height: 0; - z-index: 1001; -} -.jse-absolute-popup.svelte-enkkpn .jse-hidden-input:where(.svelte-enkkpn) { - position: fixed; - left: 0; - top: 0; - width: 0; - height: 0; - padding: 0; - margin: 0; - border: none; - outline: none; - overflow: hidden; -} -.jse-absolute-popup.svelte-enkkpn .jse-absolute-popup-content:where(.svelte-enkkpn) { - position: absolute; -}`);var CSA=FA('
      '),ISA=FA('
      ');function dSA(t,e){St(e,!1);var A=N(e,"popup",8),i=N(e,"closeAbsolutePopup",8),n=IA(),o=IA();function a(C){A().options&&A().options.closeOnOuterClick&&!Nh(C.target,I=>I===c(n))&&i()(A().id)}function r(C){g2(C)==="Escape"&&(C.preventDefault(),C.stopPropagation(),i()(A().id))}is(function(){c(o)&&c(o).focus()}),Ai();var s=ISA();ue("mousedown",i2,function(C){a(C)},!0),ue("keydown",i2,r,!0),ue("wheel",i2,function(C){a(C)},!0);var g=CA(s),l=C=>{var I=CSA(),d=CA(I);Jo(d,B=>R(o,B),()=>c(o)),$nA(bA(d,2),()=>A().component,(B,E)=>{E(B,e1(()=>A().props))}),ve(B=>Yl(I,B),[()=>(c(n),G(A()),EA(()=>(function(B,E){var Q=B.getBoundingClientRect(),{left:f,top:b,positionAbove:S,positionLeft:M}=(function(){if(E.anchor){var{anchor:D,width:F=0,height:_=0,offsetTop:U=0,offsetLeft:J=0,position:j}=E,{left:AA,top:O,bottom:DA,right:P}=D.getBoundingClientRect(),aA=j==="top"||O+_>window.innerHeight&&O>_,iA=j==="left"||AA+F>window.innerWidth&&AA>F;return{left:iA?P-J:AA+J,top:aA?O-U:DA+U,positionAbove:aA,positionLeft:iA}}if(typeof E.left=="number"&&typeof E.top=="number"){var{left:BA,top:oA,width:sA=0,height:hA=0}=E;return{left:BA,top:oA,positionAbove:oA+hA>window.innerHeight&&oA>hA,positionLeft:BA+sA>window.innerWidth&&BA>sA}}throw new Error('Invalid config: pass either "left" and "top", or pass "anchor"')})();return(S?"bottom: ".concat(Q.top-b,"px;"):"top: ".concat(b-Q.top,"px;"))+(M?"right: ".concat(Q.left-f,"px;"):"left: ".concat(f-Q.left,"px;"))})(c(n),A().options)))]),lA(C,I)};TA(g,C=>{c(n)&&C(l)}),Jo(s,C=>R(n,C),()=>c(n)),ue("mousedown",s,function(C){C.stopPropagation()}),ue("keydown",s,r),lA(t,s),xt()}var BSA=FA(" ",1);function yL(t,e){St(e,!1);var A=Cr("jsoneditor:AbsolutePopup"),i=IA([],!0);function n(r){var s=c(i).findIndex(l=>l.id===r);if(s!==-1){var g=c(i)[s];g.options.onClose&&g.options.onClose(),R(i,c(i).filter(l=>l.id!==r))}}(function(r,s){InA().set(r,s)})("absolute-popup",{openAbsolutePopup:function(r,s,g){A("open...",s,g);var l={id:th(),component:r,props:s||{},options:g||{}};return R(i,[...c(i),l]),l.id},closeAbsolutePopup:n}),RA(()=>c(i),()=>{A("popups",c(i))}),kn(),Ai(!0);var o=BSA(),a=At(o);Qa(a,1,()=>c(i),Na,(r,s)=>{dSA(r,{get popup(){return c(s)},closeAbsolutePopup:n})}),Ea(bA(a,2),e,"default",{},null),lA(t,o),xt()}function Cm(t,e){for(var A=new Set(e),i=t.replace(/ \(copy( \d+)?\)$/,""),n=t,o=1;A.has(n);){var a="copy"+(o>1?" "+o:"");n="".concat(i," (").concat(a,")"),o++}return n}function XC(t,e){var A=e-3;return t.length>e?t.substring(0,A)+"...":t}function ESA(t){if(t==="")return"";var e=t.toLowerCase();if(e==="null")return null;if(e==="true")return!0;if(e==="false")return!1;if(e!=="undefined"){var A=Number(t),i=parseFloat(t);return isNaN(A)||isNaN(i)?t:A}}var QSA={id:"jsonquery",name:"JSONQuery",description:` -

      - Enter a JSON Query function to filter, sort, or transform the data. - You can use functions like get, filter, - sort, pick, groupBy, uniq, etcetera. - Example query: filter(.age >= 18) -

      -`,createQuery:function(t,e){var{filter:A,sort:i,projection:n}=e,o=[];A&&A.path&&A.relation&&A.value&&o.push(["filter",[(a=A.relation,RS("1 ".concat(a," 1"))[0]),xy(A.path),ESA(A.value)]]);var a;return i&&i.path&&i.direction&&o.push(["sort",xy(i.path),i.direction==="desc"?"desc":"asc"]),n&&n.paths&&(n.paths.length>1?o.push(["pick",...n.paths.map(xy)]):o.push(["map",xy(n.paths[0])])),jq(["pipe",...o])},executeQuery:function(t,e,A){var i=goA(A,JSON)?t:(function(n){var o=A.stringify(n);return o!==void 0?JSON.parse(o):void 0})(t);return e.trim()!==""?qq(i,e):i}};function xy(t){return["get",...t]}var hSA=s1("");function uSA(t,e){St(e,!1);var A=870711,i=IA(""),n=N(e,"data",8);function o(r){if(!r||!r.raw)return"";var s=r.raw,g={};return s=s.replace(/\s(?:xml:)?id=["']?([^"')\s]+)/g,(l,C)=>{var I="fa-".concat((A+=1).toString(16));return g[C]=I,' id="'.concat(I,'"')}),s=s.replace(/#(?:([^'")\s]+)|xpointer\(id\((['"]?)([^')]+)\2\)\))/g,(l,C,I,d)=>{var B=C||d;return B&&g[B]?"#".concat(g[B]):l}),s}RA(()=>G(n()),()=>{R(i,o(n()))}),kn();var a=hSA();XnA(CA(a),()=>c(i),!0),lA(t,a),xt()}qt(` - .fa-icon.svelte-v67cny { - display: inline-block; - fill: currentColor; - } - .fa-flip-horizontal.svelte-v67cny { - transform: scale(-1, 1); - } - .fa-flip-vertical.svelte-v67cny { - transform: scale(1, -1); - } - .fa-spin.svelte-v67cny { - animation: svelte-v67cny-fa-spin 1s 0s infinite linear; - } - .fa-inverse.svelte-v67cny { - color: #fff; - } - .fa-pulse.svelte-v67cny { - animation: svelte-v67cny-fa-spin 1s infinite steps(8); - } - @keyframes svelte-v67cny-fa-spin { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } - } -`);var fSA=s1(""),mSA=s1(""),pSA=s1(""),wSA=s1("",1);function Vi(t,e){var A=ky(e,["children","$$slots","$$events","$$legacy"]),i=ky(A,["class","data","scale","spin","inverse","pulse","flip","label","style"]);St(e,!1);var n=N(e,"class",8,""),o=N(e,"data",8),a=IA(),r=N(e,"scale",8,1),s=N(e,"spin",8,!1),g=N(e,"inverse",8,!1),l=N(e,"pulse",8,!1),C=N(e,"flip",8,void 0),I=N(e,"label",8,""),d=N(e,"style",8,""),B=IA(10),E=IA(10),Q=IA(),f=IA();function b(){var M=1;return r()!==void 0&&(M=Number(r())),isNaN(M)||M<=0?(console.warn('Invalid prop: prop "scale" should be a number over 0.'),1):1*M}function S(){return c(a)?Math.max(c(a).width,c(a).height)/16:1}RA(()=>(G(o()),G(d()),G(r())),()=>{R(a,(function(M){var D;if(M){if(!("definition"in M)){if("iconName"in M&&"icon"in M){M.iconName;var[F,_,,,U]=M.icon;D={width:F,height:_,paths:(Array.isArray(U)?U:[U]).map(J=>({d:J}))}}else D=M[Object.keys(M)[0]];return D}console.error("`import faIconName from '@fortawesome/package-name/faIconName` not supported - Please use `import { faIconName } from '@fortawesome/package-name/faIconName'` instead")}})(o())),d(),r(),R(B,c(a)?c(a).width/S()*b():0),R(E,c(a)?c(a).height/S()*b():0),R(Q,(function(){var M="";d()!==null&&(M+=d());var D=b();return D===1?M.length===0?"":M:(M===""||M.endsWith(";")||(M+="; "),"".concat(M,"font-size: ").concat(D,"em"))})()),R(f,c(a)?"0 0 ".concat(c(a).width," ").concat(c(a).height):"0 0 ".concat(c(B)," ").concat(c(E)))}),kn(),Ai(),(function(M,D){var F=ky(D,["children","$$slots","$$events","$$legacy"]),_=ky(F,["class","width","height","box","spin","inverse","pulse","flip","style","label"]),U=N(D,"class",8,""),J=N(D,"width",8),j=N(D,"height",8),AA=N(D,"box",8,"0 0 0 0"),O=N(D,"spin",8,!1),DA=N(D,"inverse",8,!1),P=N(D,"pulse",8,!1),aA=N(D,"flip",8,"none"),iA=N(D,"style",8,""),BA=N(D,"label",8,""),oA=fSA();jy(oA,()=>{var sA;return ye(ye({version:"1.1",class:"fa-icon ".concat((sA=U())!==null&&sA!==void 0?sA:""),width:J(),height:j(),"aria-label":BA(),role:BA()?"img":"presentation",viewBox:AA(),style:iA()},_),{},{[XQ]:{"fa-spin":O(),"fa-pulse":P(),"fa-inverse":DA(),"fa-flip-horizontal":aA()==="horizontal","fa-flip-vertical":aA()==="vertical"}})},void 0,void 0,void 0,"svelte-v67cny"),Ea(CA(oA),D,"default",{},null),lA(M,oA)})(t,e1({get label(){return I()},get width(){return c(B)},get height(){return c(E)},get box(){return c(f)},get style(){return c(Q)},get spin(){return s()},get flip(){return C()},get inverse(){return g()},get pulse(){return l()},get class(){return n()}},()=>i,{children:(M,D)=>{var F=bi();Ea(At(F),e,"default",{},_=>{var U=wSA(),J=At(U);Qa(J,1,()=>(c(a),EA(()=>{var DA;return((DA=c(a))===null||DA===void 0?void 0:DA.paths)||[]})),Na,(DA,P)=>{var aA=mSA();jy(aA,()=>ye({},c(P))),lA(DA,aA)});var j=bA(J);Qa(j,1,()=>(c(a),EA(()=>{var DA;return((DA=c(a))===null||DA===void 0?void 0:DA.polygons)||[]})),Na,(DA,P)=>{var aA=pSA();jy(aA,()=>ye({},c(P))),lA(DA,aA)});var AA=bA(j),O=DA=>{uSA(DA,{get data(){return c(a)},set data(P){R(a,P)},$$legacy:!0})};TA(AA,DA=>{c(a),EA(()=>{var P;return(P=c(a))===null||P===void 0?void 0:P.raw})&&DA(O)}),lA(_,U)}),lA(M,F)},$$slots:{default:!0}})),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-boolean-toggle.svelte-eli4ob { - padding: 0; - margin: 1px 0 0; - vertical-align: top; - display: inline-flex; - color: var(--jse-value-color-boolean, #ff8c00); -} - -.jse-boolean-toggle.svelte-eli4ob:not(.jse-readonly) { - cursor: pointer; -}`);var DSA=FA('
      ');function ySA(t,e){St(e,!1);var A=N(e,"path",9),i=N(e,"value",9),n=N(e,"readOnly",9),o=N(e,"onPatch",9),a=N(e,"focus",9);Ai(!0);var r,s=DSA(),g=CA(s),l=tt(()=>i()===!0?NS:FS);Vi(g,{get data(){return c(l)}}),ve(()=>{Mn(s,"aria-checked",i()===!0),r=$t(s,1,"jse-boolean-toggle svelte-eli4ob",null,r,{"jse-readonly":n()}),Mn(s,"title",n()?"Boolean value ".concat(i()):"Click to toggle this boolean value")}),ue("mousedown",s,function(C){C.stopPropagation(),n()||(o()([{op:"replace",path:wt(A()),value:!i()}]),a()())}),lA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup, -.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup .picker_arrow::before, -.jse-color-picker-popup.svelte-v77py2 .picker_wrapper.popup .picker_arrow::after { - background: var(--jse-color-picker-background, var(--jse-panel-background, #ebebeb)); - line-height: normal; -} -.jse-color-picker-popup.svelte-v77py2 .picker_slider, -.jse-color-picker-popup.svelte-v77py2 .picker_sl, -.jse-color-picker-popup.svelte-v77py2 .picker_editor input, -.jse-color-picker-popup.svelte-v77py2 .picker_sample, -.jse-color-picker-popup.svelte-v77py2 .picker_done button { - box-shadow: var(--jse-color-picker-border-box-shadow, #cbcbcb 0 0 0 1px); -} -.jse-color-picker-popup.svelte-v77py2 .picker_editor input { - background: var(--jse-background-color, #fff); - color: var(--jse-text-color, #4d4d4d); -} -.jse-color-picker-popup.svelte-v77py2 .picker_done button { - background: var(--jse-button-background, #e0e0e0); - color: var(--jse-button-color, var(--jse-text-color, #4d4d4d)); -} -.jse-color-picker-popup.svelte-v77py2 .picker_done button:hover { - background: var(--jse-button-background-highlight, #e7e7e7); -}`);var vSA=FA('
      ');function bSA(t,e){St(e,!1);var A=N(e,"color",8),i=N(e,"onChange",8),n=N(e,"showOnTop",8),o=IA(),a=()=>{};is(Tt(function*(){var s,g=new((s=yield import("./chunk-GLGRLUIJ.js"))===null||s===void 0?void 0:s.default)({parent:c(o),color:A(),popup:n()?"top":"bottom",onDone(l){var C=l.rgba[3]===1?l.hex.substring(0,7):l.hex;i()(C)}});g.show(),a=()=>{g.destroy()}})),Hl(()=>{a()}),Ai();var r=vSA();Jo(r,s=>R(o,s),()=>c(o)),lA(t,r),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-color-picker-button.svelte-13mgyo6 { - font-size: var(--jse-font-size-mono, 14px); - width: var(--jse-color-picker-button-size, 1em); - height: var(--jse-color-picker-button-size, 1em); - box-sizing: border-box; - padding: 0; - margin: 2px 0 0 calc(0.5 * var(--jse-padding, 10px)); - display: inline-flex; - vertical-align: top; - border: 1px solid var(--jse-text-color, #4d4d4d); - border-radius: 2px; - background: inherit; - outline: none; -} - -.jse-color-picker-button.svelte-13mgyo6:not(.jse-readonly) { - cursor: pointer; -}`);var MSA=FA('');function kSA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),{openAbsolutePopup:n}=r1("absolute-popup"),o=N(e,"path",9),a=N(e,"value",9),r=N(e,"readOnly",9),s=N(e,"onPatch",9),g=N(e,"focus",9);function l(B){s()([{op:"replace",path:wt(o()),value:B}]),C()}function C(){g()()}RA(()=>G(a()),()=>{R(A,noA(a()))}),RA(()=>(G(r()),G(a())),()=>{R(i,r()?"Color ".concat(a()):"Click to open a color picker")}),kn(),Ai(!0);var I,d=MSA();ve(()=>{var B;I=$t(d,1,"jse-color-picker-button svelte-13mgyo6",null,I,{"jse-readonly":r()}),Yl(d,"background: ".concat((B=c(A))!==null&&B!==void 0?B:"")),Mn(d,"title",c(i)),Mn(d,"aria-label",c(i))}),ue("click",d,function(B){var E,Q;if(!r()){var f=B.target,b=f.getBoundingClientRect().top,S=((E=(Q=cm(f))===null||Q===void 0?void 0:Q.innerHeight)!==null&&E!==void 0?E:0)-b<300&&b>300,M={color:a(),onChange:l,showOnTop:S};n(bSA,M,{anchor:f,closeOnOuterClick:!0,onClose:C,offsetTop:18,offsetLeft:-8,height:300})}}),lA(t,d),xt()}var Z_=1e3,qf=100,Ry=100,nv=2e4,gh=[{start:0,end:qf}],SSA=1048576,xSA=1048576,X_=10485760,$_="Insert or paste contents, enter [ insert a new array, enter { to insert a new object, or start typing to insert a new value",oG="Open context menu (Click here, right click on the selection, or use the context menu button or Ctrl+Q)",Gd="hover-insert-inside",Ny="hover-insert-after",IiA="hover-collection",AL="valid",diA="repairable",$C=336,A2=260,Uf=100,BiA={[Kl.asc]:"ascending",[Kl.desc]:"descending"};function hoA(t){for(var e=bS(t,r=>r.start),A=[e[0]],i=0;i0&&arguments[0]!==void 0?arguments[0]:{expanded:!1};return{type:"array",expanded:t,visibleSections:gh,items:[]}}function sG(){var{expanded:t}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{expanded:!1};return{type:"object",expanded:t,properties:{}}}var gG={createObjectDocumentState:sG,createArrayDocumentState:rG,createValueDocumentState:function(){return{type:"value"}}};function foA(t,e,A,i){var{createObjectDocumentState:n,createArrayDocumentState:o,createValueDocumentState:a}=i;return(function r(s,g,l){if(Array.isArray(s)){var C=lr(g)?g:o();if(l.length===0)return C;var I=Fr(l[0]),d=r(s[I],C.items[I],l.slice(1));return Or(C,["items",l[0]],d)}if(pn(s)){var B=wg(g)?g:n();if(l.length===0)return B;var E=l[0],Q=r(s[E],B.properties[E],l.slice(1));return Or(B,["properties",E],Q)}return aG(g)?g:a()})(t,e,A)}function Xg(t,e){return Vf(t,e,arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],(A,i)=>{if(A!==void 0&&i!==void 0)return Array.isArray(A)?lr(i)?i:rG({expanded:!!eB(i)&&i.expanded}):pn(A)?wg(i)?i:sG({expanded:!!eB(i)&&i.expanded}):aG(i)?i:void 0},()=>!0)}function Vf(t,e,A,i,n){var o=i(t,e,A);if(Array.isArray(t)&&lr(o)&&n(o)){var a=[];return lG(t,o.visibleSections,s=>{var g=A.concat(String(s)),l=Vf(t[s],o.items[s],g,i,n);l!==void 0&&(a[s]=l)}),aiA(a,o.items)?o:ye(ye({},o),{},{items:a})}if(pn(t)&&wg(o)&&n(o)){var r={};return Object.keys(t).forEach(s=>{var g=A.concat(s),l=Vf(t[s],o.properties[s],g,i,n);l!==void 0&&(r[s]=l)}),aiA(Object.values(r),Object.values(o.properties))?o:ye(ye({},o),{},{properties:r})}return o}function lG(t,e,A){e.forEach(i=>{var{start:n,end:o}=i;ooA(n,Math.min(t.length,o),A)})}function Wf(t,e){for(var A=t,i=[],n=0;n{var C=eB(l)&&!l.expanded?ye(ye({},l),{},{expanded:!0}):l;return lr(C)?(function(I,d){if((function(Q,f){return Q.some(b=>f>=b.start&&f(function(g,l,C,I){return Vf(g,l,C,(d,B,E)=>Array.isArray(d)&&I(E)?lr(B)?B.expanded?B:ye(ye({},B),{},{expanded:!0}):rG({expanded:!0}):pn(d)&&I(E)?wg(B)?B.expanded?B:ye(ye({},B),{},{expanded:!0}):sG({expanded:!0}):B,d=>eB(d)&&d.expanded)})(r,s,[],i))}function piA(t,e,A,i){return mh(t,e,A,(n,o)=>i?(function(a,r,s){return Vf(a,r,s,(g,l)=>wiA(l),()=>!0)})(n,o,A):wiA(o))}function wiA(t){return lr(t)&&t.expanded?ye(ye({},t),{},{expanded:!1,visibleSections:gh}):wg(t)&&t.expanded?ye(ye({},t),{},{expanded:!1}):t}function moA(t,e,A){var i={json:t,documentState:e},n=A.reduce((o,a)=>({json:lg(o.json,[a]),documentState:LSA(o.json,o.documentState,a)}),i);return{json:n.json,documentState:Xg(n.json,n.documentState)}}function LSA(t,e,A){if($k(A))return DiA(t,e,A,void 0);if(AS(A))return yiA(t,e,A);if(gw(A)){var i=cg(t,A.path),n=P0(t,e,i);return n?yv(t,e,i,{type:"value",enforceString:n}):e}return lw(A)||Z2(A)?(function(o,a,r){if(Z2(r)&&r.from===r.path)return a;var s=a,g=cg(o,r.from),l=T0(o,s,g);return Z2(r)&&(s=yiA(o,s,{path:r.from})),s=DiA(o,s,{path:r.path},l),s})(t,e,A):e}function T0(t,e,A){try{return je(e,Wf(t,A))}catch{return}}function cG(t,e,A,i,n){var o=foA(t,e,A,n);return j4(o,Wf(t,A),a=>{var r=je(t,A);return i(r,a)})}function yv(t,e,A,i){return(function(n,o,a,r,s){var g=foA(n,o,a,s);return Or(g,Wf(n,a),r)})(t,e,A,i,gG)}function mh(t,e,A,i){return cG(t,e,A,i,gG)}function DiA(t,e,A,i){var n=cg(t,A.path),o=e;return o=mh(t,o,Ki(n),(a,r)=>{if(!lr(r))return r;var s=Fr(mi(n)),{items:g,visibleSections:l}=r;return ye(ye({},r),{},{items:s{if(!lr(r))return r;var s=Fr(mi(i)),{items:g,visibleSections:l}=r;return ye(ye({},r),{},{items:g.slice(0,s).concat(g.slice(s+1)),visibleSections:poA(l,s,-1)})}):(function(a,r,s){var g=Wf(a,s);return br(r,g)?Ad(r,Wf(a,s)):r})(t,e,i)}function poA(t,e,A){return(function(i){for(var n=i.slice(0),o=1;o({start:i.start>e?i.start+A:i.start,end:i.end>e?i.end+A:i.end})))}function P0(t,e,A){var i,n=je(t,A),o=T0(t,e,A),a=aG(o)?o.enforceString:void 0;return typeof a=="boolean"?a:typeof(i=n)=="string"&&typeof Rh(i,JSON)!="string"}function Im(t,e){var A=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i=t.indexOf(e);return i!==-1?A?t.slice(i):t.slice(i+1):[]}function CG(t,e){var A=[];return(function i(n,o,a){A.push(a),qo(n)&&lr(o)&&o.expanded&&lG(n,o.visibleSections,r=>{i(n[r],o.items[r],a.concat(String(r)))}),ia(n)&&wg(o)&&o.expanded&&Object.keys(n).forEach(r=>{i(n[r],o.properties[r],a.concat(r))})})(t,e,[]),A}function woA(t,e){var A=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2],i=[];return(function n(o,a){i.push({path:a,type:Uc.value});var r=T0(t,e,a);if(o&&eB(r)&&r.expanded){if(A&&i.push({path:a,type:Uc.inside}),qo(o)){var s=lr(r)?r.visibleSections:gh;lG(o,s,g=>{var l=a.concat(String(g));n(o[g],l),A&&i.push({path:l,type:Uc.after})})}ia(o)&&Object.keys(o).forEach(g=>{var l=a.concat(g);i.push({path:l,type:Uc.key}),n(o[g],l),A&&i.push({path:l,type:Uc.after})})}})(t,[]),i}function eL(t,e,A){var i=CG(t,e),n=i.map(wt).indexOf(wt(A));if(n!==-1&&n3&&arguments[3]!==void 0?arguments[3]:10240;return Kc(t,e,A,ASA({json:je(t,A)},i)?Jf:IG)}function tL(t,e,A){var i=T0(t,e,A);return eB(i)&&i.expanded?e:tB(t,e,A)}function Jf(t){return t.length===0||t.length===1&&t[0]==="0"}function kL(t){return t.length===0}function IG(){return!0}function Vy(){return!1}function yg(t){return t&&t.type===no.after||!1}function tr(t){return t&&t.type===no.inside||!1}function cr(t){return t&&t.type===no.key||!1}function In(t){return t&&t.type===no.value||!1}function lo(t){return t&&t.type===no.multi||!1}function vv(t){return lo(t)&&Qi(t.focusPath,t.anchorPath)}function Zf(t){return lo(t)||yg(t)||tr(t)||cr(t)||In(t)}function iL(t){return t&&t.type===no.text||!1}function o1(t,e){var A=[];return(function(i,n,o){if(n){var a=jd(n),r=ct(n);if(Qi(a,r))return o(a);if(i!==void 0){var s=yoA(a,r);if(a.length===s.length||r.length===s.length)return o(s);var g=Ds(a,r),l=e2(i,g),C=i1(i,g),I=a2(i,g,l),d=a2(i,g,C);if(!(I===-1||d===-1)){var B=je(i,s);if(ia(B)){for(var E=Object.keys(B),Q=I;Q<=d;Q++){var f=o(s.concat(E[Q]));if(f!==void 0)return f}return}if(qo(B)){for(var b=I;b<=d;b++){var S=o(s.concat(String(b)));if(S!==void 0)return S}return}throw new Error("Failed to create selection")}}}})(t,e,i=>{A.push(i)}),A}function DoA(t){return tr(t)?t.path:Ki(ct(t))}function e2(t,e){if(!lo(e))return e.path;var A=a2(t,e,e.anchorPath);return a2(t,e,e.focusPath)A?e.focusPath:e.anchorPath}function viA(t,e,A){var i=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(A){var n=i?ct(A):e2(t,A),o=(function(s,g,l){var C=CG(s,g),I=C.map(wt),d=wt(l),B=I.indexOf(d);if(B!==-1&&B>0)return C[B-1]})(t,e,n);if(i)return tr(A)||yg(A)?o!==void 0?Ds(n,n):void 0:o!==void 0?Ds(jd(A),o):void 0;if(yg(A)||tr(A))return Ui(n);if(cr(A)){if(o===void 0||o.length===0)return;var a=Ki(o),r=je(t,a);return Array.isArray(r)||qi(o)?Ui(o):l2(o)}return In(A),o!==void 0?Ui(o):void 0}}function biA(t,e,A,i){if(!A)return{caret:void 0,previous:void 0,next:void 0};var n=woA(t,e,i),o=n.findIndex(a=>Qi(a.path,ct(A))&&String(a.type)===String(A.type));return{caret:o!==-1?n[o]:void 0,previous:o!==-1&&o>0?n[o-1]:void 0,next:o!==-1&&oA[i].length;)i++;var n=A[i];return n===void 0||n.length===0||Array.isArray(je(t,Ki(n)))?Ui(n):l2(n)}function ph(t,e){if(e.length===1){var A=Dl(e);if(A.op==="replace")return Ui(cg(t,A.path))}if(!qi(e)&&e.every(a=>a.op==="move")){var i=Dl(e),n=e.slice(1);if((lw(i)||Z2(i))&&i.from!==i.path&&n.every(a=>(lw(a)||Z2(a))&&a.from===a.path))return l2(cg(t,i.path))}var o=e.filter(a=>a.op!=="test"&&a.op!=="remove"&&(a.op!=="move"||a.from!==a.path)&&typeof a.path=="string").map(a=>cg(t,a.path));if(!qi(o))return{type:no.multi,anchorPath:Dl(o),focusPath:mi(o)}}function yoA(t,e){for(var A=0;AA.length&&e.length>A.length;return{type:no.multi,anchorPath:i?A.concat(t[A.length]):A,focusPath:i?A.concat(e[A.length]):A}}function voA(t,e,A,i){if(cr(e))return String(mi(e.path));if(In(e)){var n=je(t,e.path);return typeof n=="string"?n:i.stringify(n,null,A)}if(lo(e)){if(qi(e.focusPath))return i.stringify(t,null,A);var o=DoA(e),a=je(t,o);if(Array.isArray(a)){if(vv(e)){var r=je(t,e.focusPath);return i.stringify(r,null,A)}return o1(t,e).map(s=>{var g=je(t,s);return"".concat(i.stringify(g,null,A),",")}).join(` -`)}return o1(t,e).map(s=>{var g=mi(s),l=je(t,s);return"".concat(i.stringify(g),": ").concat(i.stringify(l,null,A),",")}).join(` -`)}}function gr(t){return(cr(t)||In(t))&&t.edit===!0}function ih(t){return cr(t)||In(t)||lo(t)}function Fy(t){return cr(t)||In(t)||vv(t)}function SL(t){switch(t.type){case Uc.key:return l2(t.path);case Uc.value:return Ui(t.path);case Uc.after:return o2(t.path);case Uc.inside:return c2(t.path)}}function kiA(t,e){switch(t){case no.key:return l2(e);case no.value:return Ui(e);case no.after:return o2(e);case no.inside:return c2(e);case no.multi:case no.text:return Ds(e,e)}}function _y(t,e,A){if(e)return Xf(t,e,A)||W0(lo(e)?Ki(e.focusPath):e.path,A)?e:void 0}function Xf(t,e,A){if(t===void 0||!e)return!1;if(cr(e)||tr(e)||yg(e))return Qi(e.path,A);if(In(e))return W0(A,e.path);if(lo(e)){var i=e2(t,e),n=i1(t,e),o=Ki(e.focusPath);if(!W0(A,o)||A.length<=o.length)return!1;var a=a2(t,e,i),r=a2(t,e,n),s=a2(t,e,A);return s!==-1&&s>=a&&s<=r}return!1}function a2(t,e,A){var i=Ki(e.focusPath);if(!W0(A,i)||A.length<=i.length)return-1;var n=A[i.length],o=je(t,i);if(ia(o))return Object.keys(o).indexOf(n);if(qo(o)){var a=Fr(n);if(a');function MoA(t,e){St(e,!1);var A=Cr("jsoneditor:EditableDiv"),i=N(e,"value",9),n=N(e,"initialValue",9),o=N(e,"shortText",9,!1),a=N(e,"label",9),r=N(e,"onChange",9),s=N(e,"onCancel",9),g=N(e,"onFind",9),l=N(e,"onPaste",9,ya),C=N(e,"onValueClass",9,()=>""),I=IA(void 0,!0),d=IA(void 0,!0),B=!1;function E(){return c(I)?(function(b){return b.replace(/\n$/,"")})(c(I).innerText):""}function Q(b){c(I)&&$g(I,c(I).innerText=fh(b))}is(()=>{A("onMount",{value:i(),initialValue:n()}),Q(n()!==void 0?n():i()),c(I)&&(function(b){if(b.firstChild!=null){var S=document.createRange(),M=window.getSelection();S.setStart(b,1),S.collapse(!0),M?.removeAllRanges(),M?.addRange(S)}else b.focus()})(c(I))}),Hl(()=>{var b=E();A("onDestroy",{closed:B,value:i(),newValue:b}),B||b===i()||r()(b,t1.no)}),RA(()=>(G(C()),G(i())),()=>{R(d,C()(i()))}),kn(),Ai(!0);var f=GSA();Jo(f,b=>R(I,b),()=>c(I)),ve(b=>{Mn(f,"aria-label",a()),$t(f,1,b,"svelte-1r0oryi")},[()=>n1((G(Pc),c(d),G(o()),EA(()=>Pc("jse-editable-div",c(d),{"jse-short-text":o()}))))]),ue("input",f,function(){var b=E();b===""&&Q(""),R(d,C()(b))}),ue("keydown",f,function(b){b.stopPropagation();var S=g2(b);if(S==="Escape"&&(b.preventDefault(),B=!0,s()()),S==="Enter"||S==="Tab"){b.preventDefault(),B=!0;var M=E();r()(M,t1.nextInside)}S==="Ctrl+F"&&(b.preventDefault(),g()(!1)),S==="Ctrl+H"&&(b.preventDefault(),g()(!0))}),ue("paste",f,function(b){if(b.stopPropagation(),l()&&b.clipboardData){var S=b.clipboardData.getData("text/plain");l()(S)}}),ue("blur",f,function(){var b=document.hasFocus(),S=E();A("handleBlur",{hasFocus:b,closed:B,value:i(),newValue:S}),document.hasFocus()&&!B&&(B=!0,S!==i()&&r()(S,t1.self))}),lA(t,f),xt()}function KSA(t,e){St(e,!1);var A=N(e,"path",9),i=N(e,"value",9),n=N(e,"selection",9),o=N(e,"mode",9),a=N(e,"parser",9),r=N(e,"normalization",9),s=N(e,"enforceString",9),g=N(e,"onPatch",9),l=N(e,"onPasteJson",9),C=N(e,"onSelect",9),I=N(e,"onFind",9),d=N(e,"focus",9),B=N(e,"findNextInside",9);function E(S){return s()?S:Rh(S,a())}function Q(){C()(Ui(A())),d()()}Ai(!0);var f=tt(()=>(G(r()),G(i()),EA(()=>r().escapeValue(i())))),b=tt(()=>(G(gr),G(n()),EA(()=>gr(n())?n().initialValue:void 0)));MoA(t,{get value(){return c(f)},get initialValue(){return c(b)},label:"Edit value",onChange:function(S,M){g()([{op:"replace",path:wt(A()),value:E(r().unescapeValue(S))}],(D,F,_)=>{if(!_||Qi(A(),ct(_)))return{state:F,selection:M===t1.nextInside?B()(A()):Ui(A())}}),d()()},onCancel:Q,onPaste:function(S){try{var M=a().parse(S);aa(M)&&l()({path:A(),contents:M,onPasteAsJson:()=>{Q();var D=[{op:"replace",path:wt(A()),value:M}];g()(D,(F,_)=>({state:tB(F,_,A())}))}})}catch{}},get onFind(){return I()},onValueClass:function(S){return boA(E(r().unescapeValue(S)),o(),a())}}),xt()}function nh(t,e,A){var i=Ki(e),n=je(t,i);if(qo(n)){var o=Fr(mi(e));return A.map((g,l)=>({op:"add",path:wt(i.concat(String(o+l))),value:g.value}))}if(ia(n)){var a=mi(e),r=Object.keys(n),s=a!==void 0?Im(r,a,!0):[];return[...A.map(g=>{var l=Cm(g.key,r);return{op:"add",path:wt(i.concat(l)),value:g.value}}),...s.map(g=>a1(i,g))]}throw new Error("Cannot create insert operations: parent must be an Object or Array")}function xL(t,e,A){var i=je(t,e);if(Array.isArray(i)){var n=i.length;return A.map((o,a)=>({op:"add",path:wt(e.concat(String(n+a))),value:o.value}))}return A.map(o=>{var a=Cm(o.key,Object.keys(i));return{op:"add",path:wt(e.concat(a)),value:o.value}})}function dm(t,e,A,i){var n=e.filter(r=>r!==A),o=Cm(i,n),a=Im(e,A,!1);return[{op:"move",from:wt(t.concat(A)),path:wt(t.concat(o))},...a.map(r=>a1(t,r))]}function koA(t,e){var A=mi(e);if(qi(A))throw new Error("Cannot duplicate root object");var i=Ki(A),n=mi(A),o=je(t,i);if(qo(o)){var a=mi(e),r=a?Fr(mi(a))+1:0;return[...e.map((l,C)=>({op:"copy",from:wt(l),path:wt(i.concat(String(C+r)))}))]}if(ia(o)){var s=Object.keys(o),g=n!==void 0?Im(s,n,!1):[];return[...e.map(l=>{var C=Cm(mi(l),s);return{op:"copy",from:wt(l),path:wt(i.concat(C))}}),...g.map(l=>a1(i,l))]}throw new Error("Cannot create duplicate operations: parent must be an Object or Array")}function SoA(t,e){if(In(e))return[{op:"move",from:wt(e.path),path:""}];if(!lo(e))throw new Error("Cannot create extract operations: parent must be an Object or Array");var A=Ki(e.focusPath),i=je(t,A);if(qo(i)){var n=o1(t,e).map(a=>{var r=Fr(mi(a));return i[r]});return[{op:"replace",path:"",value:n}]}if(ia(i)){var o={};return o1(t,e).forEach(a=>{var r=String(mi(a));o[r]=i[r]}),[{op:"replace",path:"",value:o}]}throw new Error("Cannot extract: unsupported type of selection "+JSON.stringify(e))}function xoA(t,e,A,i){if(cr(e)){var n=aoA(A,i),o=Ki(e.path),a=je(t,o);return dm(o,Object.keys(a),mi(e.path),typeof n=="string"?n:A)}if(In(e)||lo(e)&&qi(e.focusPath))try{return[{op:"replace",path:wt(ct(e)),value:lm(A,F=>gm(F,i))}]}catch{return[{op:"replace",path:wt(ct(e)),value:A}]}if(lo(e)){var r=nL(A,i);return(function(F,_,U){var J=Dl(_),j=Ki(J),AA=je(F,j);if(qo(AA)){var O=Dl(_),DA=O?Fr(mi(O)):0;return[...gv(_),...U.map((YA,ee)=>({op:"add",path:wt(j.concat(String(ee+DA))),value:YA.value}))]}if(ia(AA)){var P=mi(_),aA=Ki(P),iA=mi(P),BA=Object.keys(AA),oA=iA!==void 0?Im(BA,iA,!1):[],sA=new Set(_.map(YA=>mi(YA))),hA=BA.filter(YA=>!sA.has(YA));return[...gv(_),...U.map(YA=>{var ee=Cm(YA.key,hA);return{op:"add",path:wt(aA.concat(ee)),value:YA.value}}),...oA.map(YA=>a1(aA,YA))]}throw new Error("Cannot create replace operations: parent must be an Object or Array")})(t,o1(t,e),r)}if(yg(e)){var s=nL(A,i),g=e.path,l=Ki(g),C=je(t,l);if(qo(C)){var I=Fr(mi(g));return nh(t,l.concat(String(I+1)),s)}if(ia(C)){var d=String(mi(g)),B=Object.keys(C);if(qi(B)||mi(B)===d)return xL(t,l,s);var E=B.indexOf(d),Q=B[E+1];return nh(t,l.concat(Q),s)}throw new Error("Cannot create insert operations: parent must be an Object or Array")}if(tr(e)){var f=nL(A,i),b=e.path,S=je(t,b);if(qo(S))return nh(t,b.concat("0"),f);if(ia(S)){var M=Object.keys(S);if(qi(M))return xL(t,b,f);var D=Dl(M);return nh(t,b.concat(D),f)}throw new Error("Cannot create insert operations: parent must be an Object or Array")}throw new Error("Cannot insert: unsupported type of selection "+JSON.stringify(e))}function gv(t){return t.map(e=>({op:"remove",path:wt(e)})).reverse()}function a1(t,e){return{op:"move",from:wt(t.concat(e)),path:wt(t.concat(e))}}function nL(t,e){var A=/^\s*{/.test(t),i=/^\s*\[/.test(t),n=aoA(t,e),o=n!==void 0?n:lm(t,a=>gm(a,e));return A&&pn(o)||i&&Array.isArray(o)?[{key:"New item",value:o}]:Array.isArray(o)?o.map((a,r)=>({key:"New item "+r,value:a})):pn(o)?Object.keys(o).map(a=>({key:a,value:o[a]})):[{key:"New item",value:o}]}function RoA(t,e){if(cr(e)){var A=Ki(e.path),i=je(t,A),n=dm(A,Object.keys(i),mi(e.path),"");return{operations:n,newSelection:ph(t,n)}}if(In(e))return{operations:[{op:"replace",path:wt(e.path),value:""}],newSelection:e};if(lo(e)){var o=o1(t,e),a=gv(o),r=mi(o);if(qi(r))return{operations:[{op:"replace",path:"",value:""}],newSelection:Ui([])};var s=Ki(r),g=je(t,s);if(qo(g)){var l=Dl(o),C=Fr(mi(l));return{operations:a,newSelection:C===0?c2(s):o2(s.concat(String(C-1)))}}if(ia(g)){var I=Object.keys(g),d=Dl(o),B=mi(d),E=I.indexOf(B),Q=I[E-1];return{operations:a,newSelection:E===0?c2(s):o2(s.concat(Q))}}throw new Error("Cannot create remove operations: parent must be an Object or Array")}throw new Error("Cannot remove: unsupported type of selection "+JSON.stringify(e))}function NoA(t,e){var A=(function(i,n){if(qi(n)||!n.every(Z2))return n;var o=[];for(var a of n){var r=SiA(Qs(a.from)),s=SiA(Qs(a.path));if(!r||!s)return n;o.push({from:r,path:s,operation:a})}var g=o[0].path.parent,l=je(i,g);if(!ia(l)||!o.every(B=>(function(E,Q){return Qi(E.from.parent,Q)&&Qi(E.path.parent,Q)})(B,g)))return n;var C=(function(B,E){var Q=Object.keys(E),f=Q.slice();for(var b of B){var S=f.indexOf(b.from.key);S!==-1&&(f.splice(S,1),f.push(b.path.key))}for(var M=0;MB.operation,d=o.filter(B=>B.operation.from!==B.operation.path);return d.some(B=>B.path.key===C)?d.map(I):[a1(g,C),...d.map(I)]})(t,e);return cw(t,A,{before:(i,n,o)=>{if(AS(n)){var a=Qs(n.path);return{revertOperations:[...o,...oL(i,a)]}}if(Z2(n)){var r=Qs(n.from);return{revertOperations:n.from===n.path?[n,...oL(i,r)]:[...o,...oL(i,r)]}}return{document:i}}})}function SiA(t){return t.length>0?{parent:Ki(t),key:mi(t)}:void 0}function oL(t,e){var A=Ki(e),i=mi(e),n=je(t,A);return ia(n)?Im(Object.keys(n),i,!1).map(o=>a1(A,o)):[]}function xiA(t){var e=t.activeIndex0?0:-1,A=t.items[e],i=t.items.map((n,o)=>ye(ye({},n),{},{active:o===e}));return ye(ye({},t),{},{items:i,activeItem:A,activeIndex:e})}function RiA(t,e){var A,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=t.toLowerCase(),o=(A=i?.maxResults)!==null&&A!==void 0?A:1/0,a=i?.columns,r=[],s=[];function g(Q){r.length>=o||r.push(Q)}function l(Q,f){if(qo(f)){var b=s.length;s.push("0");for(var S=0;S=o)return;s.pop()}else if(ia(f)){var M=Object.keys(f),D=s.length;for(var F of(s.push(""),M))if(s[D]=F,NiA(F,Q,s,Yc.key,g),l(Q,f[F]),r.length>=o)return;s.pop()}else NiA(String(f),Q,s,Yc.value,g)}if(t==="")return[];if(a){if(!Array.isArray(e))throw new Error("json must be an Array when option columns is defined");for(var C=0;CB.length+1;)s.pop();l(n,je(I,B))}if(r.length>=o)break}return r}return l(n,e),r}function NiA(t,e,A,i,n){var o=t.toLowerCase(),a=0,r=-1,s=-1;do(s=o.indexOf(e,r))!==-1&&(r=s+e.length,n({path:A.slice(0),field:i,fieldIndex:a,start:s,end:r}),a++);while(s!==-1)}function RL(t,e,A,i){return t.substring(0,A)+e+t.substring(i)}function FiA(t,e,A){var i=t;return pS(A,n=>{i=RL(i,e,n.start,n.end)}),i}function USA(t,e,A,i,n){var{field:o,path:a,start:r,end:s}=i;if(o===Yc.key){var g=Ki(a),l=je(t,g),C=mi(a),I=dm(g,Object.keys(l),C,RL(C,A,r,s));return{newSelection:ph(t,I),operations:I}}if(o===Yc.value){var d=je(t,a);if(d===void 0)throw new Error("Cannot replace: path not found ".concat(wt(a)));var B=typeof d=="string"?d:String(d),E=P0(t,e,a),Q=RL(B,A,r,s),f=[{op:"replace",path:wt(a),value:E?Q:Rh(Q,n)}];return{newSelection:ph(t,f),operations:f}}throw new Error("Cannot replace: unknown type of search result field ".concat(o))}function _iA(t){return t.path.concat(t.field,String(t.fieldIndex))}function LiA(t){var e=uoA(t)?t.searchResults.filter(A=>A.field===Yc.key):void 0;return e&&e.length>0?e:void 0}function GiA(t){var e=uoA(t)?t.searchResults.filter(A=>A.field===Yc.value):void 0;return e&&e.length>0?e:void 0}var JSA={createObjectDocumentState:()=>({type:"object",properties:{}}),createArrayDocumentState:()=>({type:"array",items:[]}),createValueDocumentState:()=>({type:"value"})};function FoA(t,e){return e.reduce((A,i)=>(function(n,o,a,r){return cG(n,o,a,r,JSA)})(t,A,i.path,(n,o)=>ye(ye({},o),{},{searchResults:o.searchResults?o.searchResults.concat(i):[i]})),void 0)}function lv(t){var e,A=(e=t?.searchResults)!==null&&e!==void 0?e:[],i=wg(t)?Object.values(t.properties).flatMap(lv):lr(t)?t.items.flatMap(lv):[];return A.concat(i)}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-highlight.svelte-19qyvy6 { - background-color: var(--jse-search-match-color, #ffe665); - outline: var(--jse-search-match-outline, none); -} -.jse-highlight.jse-active.svelte-19qyvy6 { - background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); - outline: var(--jse-search-match-outline, 2px solid #e0be00); -}`);var YSA=FA(" ");function _oA(t,e){St(e,!1);var A=IA(),i=N(e,"text",8),n=N(e,"searchResultItems",8);RA(()=>(G(i()),G(n())),()=>{R(A,(function(a,r){var s=[],g=0;for(var l of r){var C=a.slice(g,l.start);C!==""&&s.push({resultIndex:void 0,type:"normal",text:C,active:!1});var I=a.slice(l.start,l.end);s.push({resultIndex:l.resultIndex,type:"highlight",text:I,active:l.active}),g=l.end}var d=mi(r);return d&&d.endc(A),Na,(a,r)=>{var s=bi(),g=At(s),l=I=>{var d=ur();ve(()=>Rt(d,(c(r),EA(()=>c(r).text)))),lA(I,d)},C=I=>{var d,B=YSA(),E=CA(B);ve((Q,f)=>{d=$t(B,1,"jse-highlight svelte-19qyvy6",null,d,{"jse-active":c(r).active}),Mn(B,"data-search-result-index",Q),Rt(E,f)},[()=>(c(r),EA(()=>String(c(r).resultIndex))),()=>(G(fh),c(r),EA(()=>fh(c(r).text)))]),lA(I,B)};TA(g,I=>{c(r),EA(()=>c(r).type==="normal")?I(l):I(C,!1)}),lA(a,s)}),lA(t,o),xt()}function Wy(t){var e=1e3;if(t<900)return t.toFixed()+" B";var A=t/e;if(A<900)return A.toFixed(1)+" KB";var i=A/e;if(i<900)return i.toFixed(1)+" MB";var n=i/e;return n<900?n.toFixed(1)+" GB":(n/e).toFixed(1)+" TB"}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-tag.svelte-ubve9r { - border: none; - font-size: 80%; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - color: var(--jse-tag-color, var(--jse-text-color-inverse, #fff)); - background: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - border-radius: 2px; - cursor: pointer; - display: inline-block; - padding: 0 4px; - line-height: normal; - margin: 1px 0; -} -.jse-tag.svelte-ubve9r:hover { - opacity: 0.8; -} -.jse-tag.disabled.svelte-ubve9r { - opacity: 0.7; - cursor: inherit; -}`);var TSA=FA('');function Zy(t,e){St(e,!0);var A,i=Dg(()=>e.onclick?o=>{o.preventDefault(),o.stopPropagation(),e.onclick()}:void 0),n=TSA();n.__click=function(){for(var o,a=arguments.length,r=new Array(a),s=0;s2?r-2:0),g=2;g{var C,I=(C=a())!==null&&C!==void 0?C:null;l.ensure(I,I&&(d=>I(d,...s)))},Vd)})(CA(n),()=>{var o;return(o=e.children)!==null&&o!==void 0?o:BkA}),ve(()=>A=$t(n,1,"jse-tag svelte-ubve9r",null,A,{disabled:!e.onclick})),lA(t,n),xt()}sm(["click"]);qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-value.jse-string.svelte-1saqp8c { - color: var(--jse-value-color-string, #008000); -} -.jse-value.jse-object.svelte-1saqp8c, .jse-value.jse-array.svelte-1saqp8c { - min-width: 16px; - color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); -} -.jse-value.jse-number.svelte-1saqp8c { - color: var(--jse-value-color-number, #ee422e); -} -.jse-value.jse-boolean.svelte-1saqp8c { - color: var(--jse-value-color-boolean, #ff8c00); -} -.jse-value.jse-null.svelte-1saqp8c { - color: var(--jse-value-color-null, #004ed0); -} -.jse-value.jse-invalid.svelte-1saqp8c { - color: var(--jse-text-color, #4d4d4d); -} -.jse-value.jse-url.svelte-1saqp8c { - color: var(--jse-value-color-url, #008000); - text-decoration: underline; -} - -.jse-value.svelte-1saqp8c { - display: inline-block; - min-width: 2em; - padding: 0 5px; - box-sizing: border-box; - outline: none; - border-radius: 1px; - vertical-align: top; - word-break: normal; - overflow-wrap: anywhere; - white-space: pre-wrap; -} -.jse-value.jse-table-cell.svelte-1saqp8c { - overflow-wrap: normal; - white-space: nowrap; -} -.jse-value.jse-empty.svelte-1saqp8c { - min-width: 4em; - outline: 1px dotted var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - -moz-outline-radius: 2px; -} -.jse-value.jse-empty.svelte-1saqp8c::after { - pointer-events: none; - color: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - content: "value"; -}`);var HSA=FA('
      ');function zSA(t,e){St(e,!0);var A=jC(!0),i=Dg(()=>c(A)&&typeof e.value=="string"&&e.value.length>e.truncateTextSize&&(!e.searchResultItems||!e.searchResultItems.some(d=>d.active&&d.end>e.truncateTextSize))),n=Dg(()=>c(i)&&typeof e.value=="string"?e.value.substring(0,e.truncateTextSize).trim():e.value),o=Dg(()=>Dv(e.value));function a(){R(A,!1)}var r=HSA();r.__click=function(d){typeof e.value=="string"&&c(o)&&nG(d)&&(d.preventDefault(),d.stopPropagation(),window.open(e.value,"_blank"))},r.__dblclick=function(d){e.readOnly||(d.preventDefault(),e.onSelect(sv(e.path)))};var s=CA(r),g=d=>{var B=Dg(()=>e.normalization.escapeValue(c(n)));_oA(d,{get text(){return c(B)},get searchResultItems(){return e.searchResultItems}})},l=d=>{var B=ur();ve(E=>Rt(B,E),[()=>fh(e.normalization.escapeValue(c(n)))]),lA(d,B)};TA(s,d=>{e.searchResultItems?d(g):d(l,!1)});var C=bA(s,2),I=d=>{Zy(d,{onclick:a,children:(B,E)=>{var Q=ur();ve(f=>Rt(Q,"Show more (".concat(f??"",")")),[()=>Wy(e.value.length)]),lA(B,Q)},$$slots:{default:!0}})};TA(C,d=>{c(i)&&typeof e.value=="string"&&d(I)}),ve(d=>{$t(r,1,d,"svelte-1saqp8c"),Mn(r,"title",c(o)?"Ctrl+Click or Ctrl+Enter to open url in new window":void 0)},[()=>n1(boA(e.value,e.mode,e.parser))]),lA(t,r),xt()}sm(["click","dblclick"]);qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-tooltip.svelte-brt1mq { - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - line-height: normal; - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); - border-radius: 3px; - background: var(--jse-context-menu-background, #656565); - color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); - white-space: nowrap; - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); -}`);var OSA=FA('
      ');function PSA(t,e){var A=N(e,"text",8),i=OSA(),n=CA(i);ve(()=>Rt(n,A())),lA(t,i)}function wh(t,e){var A,{text:i,openAbsolutePopup:n,closeAbsolutePopup:o}=e;function a(){A=n(PSA,{text:i},{position:"top",width:10*i.length,offsetTop:3,anchor:t,closeOnOuterClick:!0})}function r(){o(A)}return t.addEventListener("mouseenter",a),t.addEventListener("mouseleave",r),{destroy(){t.removeEventListener("mouseenter",a),t.removeEventListener("mouseleave",r)}}}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-timestamp.svelte-1jcpman { - padding: 0; - margin: 0; - vertical-align: middle; - display: inline-flex; - color: var(--jse-value-color-number, #ee422e); -}`);var jSA=FA('
      ');function qSA(t,e){St(e,!1);var A=IA(void 0,!0),i=r1("absolute-popup"),n=N(e,"value",9);RA(()=>G(n()),()=>{R(A,"Time: ".concat(new Date(n()).toString()))}),kn(),Ai(!0);var o=jSA();Vi(CA(o),{get data(){return Vq}}),vs(o,(a,r)=>wh?.(a,r),()=>ye({text:c(A)},i)),lA(t,o),xt()}function VSA(t){var e=[];return!t.isEditing&&qkA(t.value)&&e.push({component:ySA,props:t}),!t.isEditing&&VkA(t.value)&&e.push({component:kSA,props:t}),t.isEditing&&e.push({component:KSA,props:t}),t.isEditing||e.push({component:zSA,props:t}),!t.isEditing&&pL(t.value)&&e.push({component:qSA,props:t}),e}function vg(t){return t.map((e,A)=>ZSA.test(e)?"["+e+"]":/[.[\]]/.test(e)||e===""?'["'+(function(i){return i.replace(/"/g,'\\"')})(e)+'"]':(A>0?".":"")+e).join("")}function WSA(t){for(var e=[],A=0;Ao==='"',!0)),n('"')):e.push(i(o=>o==="]")),n("]")):e.push(i(o=>o==="."||o==="["));function i(o){for(var a=arguments.length>1&&arguments[1]!==void 0&&arguments[1],r="";A({x:t,y:t}),AxA={left:"right",right:"left",bottom:"top",top:"bottom"},exA={start:"end",end:"start"};function KiA(t,e,A){return qd(t,cv(e,A))}function bv(t,e){return typeof t=="function"?t(e):t}function iB(t){return t.split("-")[0]}function Mv(t){return t.split("-")[1]}function LoA(t){return t==="x"?"y":"x"}function GoA(t){return t==="y"?"height":"width"}var txA=new Set(["top","bottom"]);function WI(t){return txA.has(iB(t))?"y":"x"}function KoA(t){return LoA(WI(t))}function NL(t){return t.replace(/start|end/g,e=>exA[e])}var UiA=["left","right"],JiA=["right","left"],ixA=["top","bottom"],nxA=["bottom","top"];function oxA(t,e,A,i){var n=Mv(t),o=(function(a,r,s){switch(a){case"top":case"bottom":return s?r?JiA:UiA:r?UiA:JiA;case"left":case"right":return r?ixA:nxA;default:return[]}})(iB(t),A==="start",i);return n&&(o=o.map(a=>a+"-"+n),e&&(o=o.concat(o.map(NL)))),o}function Gy(t){return t.replace(/left|right|bottom|top/g,e=>AxA[e])}function axA(t){return typeof t!="number"?(function(e){return ye({top:0,right:0,bottom:0,left:0},e)})(t):{top:t,right:t,bottom:t,left:t}}function Iv(t){var{x:e,y:A,width:i,height:n}=t;return{width:i,height:n,top:A,left:e,right:e+i,bottom:A+n,x:e,y:A}}function YiA(t,e,A){var i,{reference:n,floating:o}=t,a=WI(e),r=KoA(e),s=GoA(r),g=iB(e),l=a==="y",C=n.x+n.width/2-o.width/2,I=n.y+n.height/2-o.height/2,d=n[s]/2-o[s]/2;switch(g){case"top":i={x:C,y:n.y-o.height};break;case"bottom":i={x:C,y:n.y+n.height};break;case"right":i={x:n.x+n.width,y:I};break;case"left":i={x:n.x-o.width,y:I};break;default:i={x:n.x,y:n.y}}switch(Mv(e)){case"start":i[r]-=d*(A&&l?-1:1);break;case"end":i[r]+=d*(A&&l?-1:1)}return i}var rxA=(function(){var t=Tt(function*(e,A,i){for(var{placement:n="bottom",strategy:o="absolute",middleware:a=[],platform:r}=i,s=a.filter(Boolean),g=yield r.isRTL==null?void 0:r.isRTL(A),l=yield r.getElementRects({reference:e,floating:A,strategy:o}),{x:C,y:I}=YiA(l,n,g),d=n,B={},E=0,Q=0;Q"u")&&(t instanceof ShadowRoot||t instanceof el(t).ShadowRoot)}var gxA=new Set(["inline","contents"]);function $f(t){var{overflow:e,overflowX:A,overflowY:i,display:n}=Hc(t);return/auto|scroll|overlay|hidden|clip/.test(e+i+A)&&!gxA.has(n)}var lxA=new Set(["table","td","th"]);function cxA(t){return lxA.has(Dh(t))}var CxA=[":popover-open",":modal"];function dv(t){return CxA.some(e=>{try{return t.matches(e)}catch{return!1}})}var IxA=["transform","translate","scale","rotate","perspective"],dxA=["transform","translate","scale","rotate","perspective","filter"],BxA=["paint","layout","strict","content"];function LL(t){var e=BG(),A=Tc(t)?Hc(t):t;return IxA.some(i=>!!A[i]&&A[i]!=="none")||!!A.containerType&&A.containerType!=="normal"||!e&&!!A.backdropFilter&&A.backdropFilter!=="none"||!e&&!!A.filter&&A.filter!=="none"||dxA.some(i=>(A.willChange||"").includes(i))||BxA.some(i=>(A.contain||"").includes(i))}function BG(){return!(typeof CSS>"u"||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}var ExA=new Set(["html","body","#document"]);function lh(t){return ExA.has(Dh(t))}function Hc(t){return el(t).getComputedStyle(t)}function Sv(t){return Tc(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function ZI(t){if(Dh(t)==="html")return t;var e=t.assignedSlot||t.parentNode||TiA(t)&&t.host||X0(t);return TiA(e)?e.host:e}function YoA(t){var e=ZI(t);return lh(e)?t.ownerDocument?t.ownerDocument.body:t.body:$0(e)&&$f(e)?e:YoA(e)}function Am(t,e,A){var i;e===void 0&&(e=[]),A===void 0&&(A=!0);var n=YoA(t),o=n===((i=t.ownerDocument)==null?void 0:i.body),a=el(n);if(o){var r=GL(a);return e.concat(a,a.visualViewport||[],$f(n)?n:[],r&&A?Am(r):[])}return e.concat(n,Am(n,[],A))}function GL(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function ToA(t){var e=Hc(t),A=parseFloat(e.width)||0,i=parseFloat(e.height)||0,n=$0(t),o=n?t.offsetWidth:A,a=n?t.offsetHeight:i,r=Cv(A)!==o||Cv(i)!==a;return r&&(A=o,i=a),{width:A,height:i,$:r}}function EG(t){return Tc(t)?t:t.contextElement}function ch(t){var e=EG(t);if(!$0(e))return Z0(1);var A=e.getBoundingClientRect(),{width:i,height:n,$:o}=ToA(e),a=(o?Cv(A.width):A.width)/i,r=(o?Cv(A.height):A.height)/n;return a&&Number.isFinite(a)||(a=1),r&&Number.isFinite(r)||(r=1),{x:a,y:r}}var QxA=Z0(0);function HoA(t){var e=el(t);return BG()&&e.visualViewport?{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}:QxA}function nB(t,e,A,i){e===void 0&&(e=!1),A===void 0&&(A=!1);var n=t.getBoundingClientRect(),o=EG(t),a=Z0(1);e&&(i?Tc(i)&&(a=ch(i)):a=ch(t));var r=(function(D,F,_){return F===void 0&&(F=!1),!(!_||F&&_!==el(D))&&F})(o,A,i)?HoA(o):Z0(0),s=(n.left+r.x)/a.x,g=(n.top+r.y)/a.y,l=n.width/a.x,C=n.height/a.y;if(o)for(var I=el(o),d=i&&Tc(i)?el(i):i,B=I,E=GL(B);E&&i&&d!==B;){var Q=ch(E),f=E.getBoundingClientRect(),b=Hc(E),S=f.left+(E.clientLeft+parseFloat(b.paddingLeft))*Q.x,M=f.top+(E.clientTop+parseFloat(b.paddingTop))*Q.y;s*=Q.x,g*=Q.y,l*=Q.x,C*=Q.y,s+=S,g+=M,E=GL(B=el(E))}return Iv({width:l,height:C,x:s,y:g})}function Bv(t,e){var A=Sv(t).scrollLeft;return e?e.left+A:nB(X0(t)).left+A}function zoA(t,e){var A=t.getBoundingClientRect();return{x:A.left+e.scrollLeft-Bv(t,A),y:A.top+e.scrollTop}}var hxA=new Set(["absolute","fixed"]);function HiA(t,e,A){var i;if(e==="viewport")i=(function(o,a){var r=el(o),s=X0(o),g=r.visualViewport,l=s.clientWidth,C=s.clientHeight,I=0,d=0;if(g){l=g.width,C=g.height;var B=BG();(!B||B&&a==="fixed")&&(I=g.offsetLeft,d=g.offsetTop)}var E=Bv(s);if(E<=0){var Q=s.ownerDocument,f=Q.body,b=getComputedStyle(f),S=Q.compatMode==="CSS1Compat"&&parseFloat(b.marginLeft)+parseFloat(b.marginRight)||0,M=Math.abs(s.clientWidth-f.clientWidth-S);M<=25&&(l-=M)}else E<=25&&(l+=E);return{width:l,height:C,x:I,y:d}})(t,A);else if(e==="document")i=(function(o){var a=X0(o),r=Sv(o),s=o.ownerDocument.body,g=qd(a.scrollWidth,a.clientWidth,s.scrollWidth,s.clientWidth),l=qd(a.scrollHeight,a.clientHeight,s.scrollHeight,s.clientHeight),C=-r.scrollLeft+Bv(o),I=-r.scrollTop;return Hc(s).direction==="rtl"&&(C+=qd(a.clientWidth,s.clientWidth)-g),{width:g,height:l,x:C,y:I}})(X0(t));else if(Tc(e))i=(function(o,a){var r=nB(o,!0,a==="fixed"),s=r.top+o.clientTop,g=r.left+o.clientLeft,l=$0(o)?ch(o):Z0(1);return{width:o.clientWidth*l.x,height:o.clientHeight*l.y,x:g*l.x,y:s*l.y}})(e,A);else{var n=HoA(t);i={x:e.x-n.x,y:e.y-n.y,width:e.width,height:e.height}}return Iv(i)}function OoA(t,e){var A=ZI(t);return!(A===e||!Tc(A)||lh(A))&&(Hc(A).position==="fixed"||OoA(A,e))}function uxA(t,e,A){var i=$0(e),n=X0(e),o=A==="fixed",a=nB(t,!0,o,e),r={scrollLeft:0,scrollTop:0},s=Z0(0);function g(){s.x=Bv(n)}if(i||!i&&!o)if((Dh(e)!=="body"||$f(n))&&(r=Sv(e)),i){var l=nB(e,!0,o,e);s.x=l.x+e.clientLeft,s.y=l.y+e.clientTop}else n&&g();o&&!i&&n&&g();var C=!n||i||o?Z0(0):zoA(n,r);return{x:a.left+r.scrollLeft-s.x-C.x,y:a.top+r.scrollTop-s.y-C.y,width:a.width,height:a.height}}function aL(t){return Hc(t).position==="static"}function ziA(t,e){if(!$0(t)||Hc(t).position==="fixed")return null;if(e)return e(t);var A=t.offsetParent;return X0(t)===A&&(A=A.ownerDocument.body),A}function OiA(t,e){var A=el(t);if(dv(t))return A;if(!$0(t)){for(var i=ZI(t);i&&!lh(i);){if(Tc(i)&&!aL(i))return i;i=ZI(i)}return A}for(var n=ziA(t,e);n&&cxA(n)&&aL(n);)n=ziA(n,e);return n&&lh(n)&&aL(n)&&!LL(n)?A:n||(function(o){for(var a=ZI(o);$0(a)&&!lh(a);){if(LL(a))return a;if(dv(a))return null;a=ZI(a)}return null})(t)||A}var fxA={convertOffsetParentRelativeRectToViewportRelativeRect:function(t){var{elements:e,rect:A,offsetParent:i,strategy:n}=t,o=n==="fixed",a=X0(i),r=!!e&&dv(e.floating);if(i===a||r&&o)return A;var s={scrollLeft:0,scrollTop:0},g=Z0(1),l=Z0(0),C=$0(i);if((C||!C&&!o)&&((Dh(i)!=="body"||$f(a))&&(s=Sv(i)),$0(i))){var I=nB(i);g=ch(i),l.x=I.x+i.clientLeft,l.y=I.y+i.clientTop}var d=!a||C||o?Z0(0):zoA(a,s);return{width:A.width*g.x,height:A.height*g.y,x:A.x*g.x-s.scrollLeft*g.x+l.x+d.x,y:A.y*g.y-s.scrollTop*g.y+l.y+d.y}},getDocumentElement:X0,getClippingRect:function(t){var{element:e,boundary:A,rootBoundary:i,strategy:n}=t,o=A==="clippingAncestors"?dv(e)?[]:(function(g,l){var C=l.get(g);if(C)return C;for(var I=Am(g,[],!1).filter(b=>Tc(b)&&Dh(b)!=="body"),d=null,B=Hc(g).position==="fixed",E=B?ZI(g):g;Tc(E)&&!lh(E);){var Q=Hc(E),f=LL(E);f||Q.position!=="fixed"||(d=null),(B?!f&&!d:!f&&Q.position==="static"&&d&&hxA.has(d.position)||$f(E)&&!f&&OoA(g,E))?I=I.filter(b=>b!==E):d=Q,E=ZI(E)}return l.set(g,I),I})(e,this._c):[].concat(A),a=[...o,i],r=a[0],s=a.reduce((g,l)=>{var C=HiA(e,l,n);return g.top=qd(C.top,g.top),g.right=cv(C.right,g.right),g.bottom=cv(C.bottom,g.bottom),g.left=qd(C.left,g.left),g},HiA(e,r,n));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:OiA,getElementRects:(function(){var t=Tt(function*(e){var A=this.getOffsetParent||OiA,i=this.getDimensions,n=yield i(e.floating);return{reference:uxA(e.reference,yield A(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}});return function(e){return t.apply(this,arguments)}})(),getClientRects:function(t){return Array.from(t.getClientRects())},getDimensions:function(t){var{width:e,height:A}=ToA(t);return{width:e,height:A}},getScale:ch,isElement:Tc,isRTL:function(t){return Hc(t).direction==="rtl"}};function PiA(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function mxA(t,e,A,i){i===void 0&&(i={});var{ancestorScroll:n=!0,ancestorResize:o=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:r=typeof IntersectionObserver=="function",animationFrame:s=!1}=i,g=EG(t),l=n||o?[...g?Am(g):[],...Am(e)]:[];l.forEach(Q=>{n&&Q.addEventListener("scroll",A,{passive:!0}),o&&Q.addEventListener("resize",A)});var C,I=g&&r?(function(Q,f){var b,S=null,M=X0(Q);function D(){var F;clearTimeout(b),(F=S)==null||F.disconnect(),S=null}return(function F(_,U){_===void 0&&(_=!1),U===void 0&&(U=1),D();var J=Q.getBoundingClientRect(),{left:j,top:AA,width:O,height:DA}=J;if(_||f(),O&&DA){var P={rootMargin:-Ly(AA)+"px "+-Ly(M.clientWidth-(j+O))+"px "+-Ly(M.clientHeight-(AA+DA))+"px "+-Ly(j)+"px",threshold:qd(0,cv(1,U))||1},aA=!0;try{S=new IntersectionObserver(iA,ye(ye({},P),{},{root:M.ownerDocument}))}catch{S=new IntersectionObserver(iA,P)}S.observe(Q)}function iA(BA){var oA=BA[0].intersectionRatio;if(oA!==U){if(!aA)return F();oA?F(!1,oA):b=setTimeout(()=>{F(!1,1e-7)},1e3)}oA!==1||PiA(J,Q.getBoundingClientRect())||F(),aA=!1}})(!0),D})(g,A):null,d=-1,B=null;a&&(B=new ResizeObserver(Q=>{var[f]=Q;f&&f.target===g&&B&&(B.unobserve(e),cancelAnimationFrame(d),d=requestAnimationFrame(()=>{var b;(b=B)==null||b.observe(e)})),A()}),g&&!s&&B.observe(g),B.observe(e));var E=s?nB(t):null;return s&&(function Q(){var f=nB(t);E&&!PiA(E,f)&&A(),E=f,C=requestAnimationFrame(Q)})(),A(),()=>{var Q;l.forEach(f=>{n&&f.removeEventListener("scroll",A),o&&f.removeEventListener("resize",A)}),I?.(),(Q=B)==null||Q.disconnect(),B=null,s&&cancelAnimationFrame(C)}}var pxA=function(t){return t===void 0&&(t=0),{name:"offset",options:t,fn:e=>Tt(function*(){var A,i,{x:n,y:o,placement:a,middlewareData:r}=e,s=yield(function(g,l){return _L.apply(this,arguments)})(e,t);return a===((A=r.offset)==null?void 0:A.placement)&&(i=r.arrow)!=null&&i.alignmentOffset?{}:{x:n+s.x,y:o+s.y,data:ye(ye({},s),{},{placement:a})}})()}},wxA=function(t){return t===void 0&&(t={}),{name:"shift",options:t,fn:e=>Tt(function*(){var{x:A,y:i,placement:n}=e,o=bv(t,e),{mainAxis:a=!0,crossAxis:r=!1,limiter:s={fn:S=>{var{x:M,y:D}=S;return{x:M,y:D}}}}=o,g=AnA(o,rkA),l={x:A,y:i},C=yield UoA(e,g),I=WI(iB(n)),d=LoA(I),B=l[d],E=l[I];if(a){var Q=d==="y"?"bottom":"right";B=KiA(B+C[d==="y"?"top":"left"],B,B-C[Q])}if(r){var f=I==="y"?"bottom":"right";E=KiA(E+C[I==="y"?"top":"left"],E,E-C[f])}var b=s.fn(ye(ye({},e),{},{[d]:B,[I]:E}));return ye(ye({},b),{},{data:{x:b.x-A,y:b.y-i,enabled:{[d]:a,[I]:r}}})})()}},DxA=function(t){return t===void 0&&(t={}),{name:"flip",options:t,fn:e=>Tt(function*(){var A,i,{placement:n,middlewareData:o,rects:a,initialPlacement:r,platform:s,elements:g}=e,l=bv(t,e),{mainAxis:C=!0,crossAxis:I=!0,fallbackPlacements:d,fallbackStrategy:B="bestFit",fallbackAxisSideDirection:E="none",flipAlignment:Q=!0}=l,f=AnA(l,akA);if((A=o.arrow)!=null&&A.alignmentOffset)return{};var b=iB(n),S=WI(r),M=iB(r)===r,D=yield s.isRTL==null?void 0:s.isRTL(g.floating),F=d||(M||!Q?[Gy(r)]:(function(hA){var YA=Gy(hA);return[NL(hA),YA,NL(YA)]})(r)),_=E!=="none";!d&&_&&F.push(...oxA(r,Q,E,D));var U=[r,...F],J=yield UoA(e,f),j=[],AA=((i=o.flip)==null?void 0:i.overflows)||[];if(C&&j.push(J[b]),I){var O=(function(hA,YA,ee){ee===void 0&&(ee=!1);var UA=Mv(hA),mA=KoA(hA),KA=GoA(mA),Pe=mA==="x"?UA===(ee?"end":"start")?"right":"left":UA==="start"?"bottom":"top";return YA.reference[KA]>YA.floating[KA]&&(Pe=Gy(Pe)),[Pe,Gy(Pe)]})(n,a,D);j.push(J[O[0]],J[O[1]])}if(AA=[...AA,{placement:n,overflows:j}],!j.every(hA=>hA<=0)){var DA,P,aA=(((DA=o.flip)==null?void 0:DA.index)||0)+1,iA=U[aA];if(iA&&(!(I==="alignment"&&S!==WI(iA))||AA.every(hA=>WI(hA.placement)!==S||hA.overflows[0]>0)))return{data:{index:aA,overflows:AA},reset:{placement:iA}};var BA=(P=AA.filter(hA=>hA.overflows[0]<=0).sort((hA,YA)=>hA.overflows[1]-YA.overflows[1])[0])==null?void 0:P.placement;if(!BA)switch(B){case"bestFit":var oA,sA=(oA=AA.filter(hA=>{if(_){var YA=WI(hA.placement);return YA===S||YA==="y"}return!0}).map(hA=>[hA.placement,hA.overflows.filter(YA=>YA>0).reduce((YA,ee)=>YA+ee,0)]).sort((hA,YA)=>hA[1]-YA[1])[0])==null?void 0:oA[0];sA&&(BA=sA);break;case"initialPlacement":BA=r}if(n!==BA)return{reset:{placement:BA}}}return{}})()}};function yxA(t){var e,A,i={autoUpdate:!0},n=t,o=s=>ye(ye(ye({},i),t||{}),s||{}),a=s=>{e&&A&&(n=o(s),((g,l,C)=>{var I=new Map,d=ye({platform:fxA},C),B=ye(ye({},d.platform),{},{_c:I});return rxA(g,l,ye(ye({},d),{},{platform:B}))})(e,A,n).then(g=>{var l;Object.assign(A.style,{position:g.strategy,left:"".concat(g.x,"px"),top:"".concat(g.y,"px")}),!((l=n)===null||l===void 0)&&l.onComputed&&n.onComputed(g)}))},r=s=>{Hl(s.subscribe(g=>{e===void 0?(e=g,a()):(Object.assign(e,g),a())}))};return[s=>{if("subscribe"in s)return r(s),{};e=s,a()},(s,g)=>{var l;A=s,n=o(g),setTimeout(()=>a(g),0),a(g);var C=()=>{l&&(l(),l=void 0)},I=function(){var{autoUpdate:d}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:n||{};C(),d!==!1&&znA().then(()=>mxA(e,A,()=>a(n),d===!0?{}:d))};return l=I(),{update(d){a(d),l=I(d)},destroy(){C()}}},a]}function vxA(t){var{loadOptions:e,filterText:A,items:i,multiple:n,value:o,itemId:a,groupBy:r,filterSelectedItems:s,itemFilter:g,convertStringItemsToObjects:l,filterGroupedItems:C,label:I}=t;if(i&&e)return i;if(!i)return[];i&&i.length>0&&typeof i[0]!="object"&&(i=l(i));var d=i.filter(B=>{var E=g(B[I],A,B);return E&&n&&o!=null&&o.length&&(E=!o.some(Q=>!!s&&Q[a]===B[a])),E});return r&&(d=C(d)),d}function bxA(t){return PoA.apply(this,arguments)}function PoA(){return(PoA=Tt(function*(t){var{dispatch:e,loadOptions:A,convertStringItemsToObjects:i,filterText:n}=t,o=yield A(n).catch(a=>{console.warn("svelte-select loadOptions error :>> ",a),e("error",{type:"loadOptions",details:a})});if(o&&!o.cancelled)return o?(o&&o.length>0&&typeof o[0]!="object"&&(o=i(o)),e("loaded",{items:o})):o=[],{filteredItems:o,loading:!1,focused:!0,listOpen:!0}})).apply(this,arguments)}qt(` - svg.svelte-1kxu7be { - width: var(--chevron-icon-width, 20px); - height: var(--chevron-icon-width, 20px); - color: var(--chevron-icon-colour, currentColor); - } -`);var MxA=s1(``);qt(` - svg.svelte-1hraxrc { - width: var(--clear-icon-width, 20px); - height: var(--clear-icon-width, 20px); - color: var(--clear-icon-color, currentColor); - } -`);var kxA=s1(``);function rL(t){lA(t,kxA())}qt(` - .loading.svelte-y9fi5p { - width: var(--spinner-width, 20px); - height: var(--spinner-height, 20px); - color: var(--spinner-color, var(--icons-color)); - animation: svelte-y9fi5p-rotate 0.75s linear infinite; - transform-origin: center center; - transform: none; - } - - .circle_path.svelte-y9fi5p { - stroke-dasharray: 90; - stroke-linecap: round; - } - - @keyframes svelte-y9fi5p-rotate { - 100% { - transform: rotate(360deg); - } - } -`);var SxA=s1('');qt(` - .svelte-select.svelte-1ul7oo4 { - /* deprecating camelCase custom props in favour of kebab-case for v5 */ - --borderRadius: var(--border-radius); - --clearSelectColor: var(--clear-select-color); - --clearSelectWidth: var(--clear-select-width); - --disabledBackground: var(--disabled-background); - --disabledBorderColor: var(--disabled-border-color); - --disabledColor: var(--disabled-color); - --disabledPlaceholderColor: var(--disabled-placeholder-color); - --disabledPlaceholderOpacity: var(--disabled-placeholder-opacity); - --errorBackground: var(--error-background); - --errorBorder: var(--error-border); - --groupItemPaddingLeft: var(--group-item-padding-left); - --groupTitleColor: var(--group-title-color); - --groupTitleFontSize: var(--group-title-font-size); - --groupTitleFontWeight: var(--group-title-font-weight); - --groupTitlePadding: var(--group-title-padding); - --groupTitleTextTransform: var(--group-title-text-transform); - --groupTitleBorderColor: var(--group-title-border-color); - --groupTitleBorderWidth: var(--group-title-border-width); - --groupTitleBorderStyle: var(--group-title-border-style); - --indicatorColor: var(--chevron-color); - --indicatorHeight: var(--chevron-height); - --indicatorWidth: var(--chevron-width); - --inputColor: var(--input-color); - --inputLeft: var(--input-left); - --inputLetterSpacing: var(--input-letter-spacing); - --inputMargin: var(--input-margin); - --inputPadding: var(--input-padding); - --itemActiveBackground: var(--item-active-background); - --itemColor: var(--item-color); - --itemFirstBorderRadius: var(--item-first-border-radius); - --itemHoverBG: var(--item-hover-bg); - --itemHoverColor: var(--item-hover-color); - --itemIsActiveBG: var(--item-is-active-bg); - --itemIsActiveColor: var(--item-is-active-color); - --itemIsNotSelectableColor: var(--item-is-not-selectable-color); - --itemPadding: var(--item-padding); - --listBackground: var(--list-background); - --listBorder: var(--list-border); - --listBorderRadius: var(--list-border-radius); - --listEmptyColor: var(--list-empty-color); - --listEmptyPadding: var(--list-empty-padding); - --listEmptyTextAlign: var(--list-empty-text-align); - --listMaxHeight: var(--list-max-height); - --listPosition: var(--list-position); - --listShadow: var(--list-shadow); - --listZIndex: var(--list-z-index); - --multiItemBG: var(--multi-item-bg); - --multiItemBorderRadius: var(--multi-item-border-radius); - --multiItemDisabledHoverBg: var(--multi-item-disabled-hover-bg); - --multiItemDisabledHoverColor: var(--multi-item-disabled-hover-color); - --multiItemHeight: var(--multi-item-height); - --multiItemMargin: var(--multi-item-margin); - --multiItemPadding: var(--multi-item-padding); - --multiSelectInputMargin: var(--multi-select-input-margin); - --multiSelectInputPadding: var(--multi-select-input-padding); - --multiSelectPadding: var(--multi-select-padding); - --placeholderColor: var(--placeholder-color); - --placeholderOpacity: var(--placeholder-opacity); - --selectedItemPadding: var(--selected-item-padding); - --spinnerColor: var(--spinner-color); - --spinnerHeight: var(--spinner-height); - --spinnerWidth: var(--spinner-width); - - --internal-padding: 0 0 0 16px; - - border: var(--border, 1px solid #d8dbdf); - border-radius: var(--border-radius, 6px); - min-height: var(--height, 42px); - position: relative; - display: flex; - align-items: stretch; - padding: var(--padding, var(--internal-padding)); - background: var(--background, #fff); - margin: var(--margin, 0); - width: var(--width, 100%); - font-size: var(--font-size, 16px); - max-height: var(--max-height); - } - - .svelte-1ul7oo4 { - box-sizing: var(--box-sizing, border-box); - } - - .svelte-select.svelte-1ul7oo4:hover { - border: var(--border-hover, 1px solid #b2b8bf); - } - - .value-container.svelte-1ul7oo4 { - display: flex; - flex: 1 1 0%; - flex-wrap: wrap; - align-items: center; - gap: 5px 10px; - padding: var(--value-container-padding, 5px 0); - position: relative; - overflow: var(--value-container-overflow, hidden); - align-self: stretch; - } - - .prepend.svelte-1ul7oo4, - .indicators.svelte-1ul7oo4 { - display: flex; - flex-shrink: 0; - align-items: center; - } - - .indicators.svelte-1ul7oo4 { - position: var(--indicators-position); - top: var(--indicators-top); - right: var(--indicators-right); - bottom: var(--indicators-bottom); - } - - input.svelte-1ul7oo4 { - position: absolute; - cursor: default; - border: none; - color: var(--input-color, var(--item-color)); - padding: var(--input-padding, 0); - letter-spacing: var(--input-letter-spacing, inherit); - margin: var(--input-margin, 0); - min-width: 10px; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: transparent; - font-size: var(--font-size, 16px); - } - - .svelte-1ul7oo4:not(.multi) > .value-container:where(.svelte-1ul7oo4) > input:where(.svelte-1ul7oo4) { - width: 100%; - height: 100%; - } - - input.svelte-1ul7oo4::placeholder { - color: var(--placeholder-color, #78848f); - opacity: var(--placeholder-opacity, 1); - } - - input.svelte-1ul7oo4:focus { - outline: none; - } - - .svelte-select.focused.svelte-1ul7oo4 { - border: var(--border-focused, 1px solid #006fe8); - border-radius: var(--border-radius-focused, var(--border-radius, 6px)); - } - - .disabled.svelte-1ul7oo4 { - background: var(--disabled-background, #ebedef); - border-color: var(--disabled-border-color, #ebedef); - color: var(--disabled-color, #c1c6cc); - } - - .disabled.svelte-1ul7oo4 input:where(.svelte-1ul7oo4)::placeholder { - color: var(--disabled-placeholder-color, #c1c6cc); - opacity: var(--disabled-placeholder-opacity, 1); - } - - .selected-item.svelte-1ul7oo4 { - position: relative; - overflow: var(--selected-item-overflow, hidden); - padding: var(--selected-item-padding, 0 20px 0 0); - text-overflow: ellipsis; - white-space: nowrap; - color: var(--selected-item-color, inherit); - font-size: var(--font-size, 16px); - } - - .multi.svelte-1ul7oo4 .selected-item:where(.svelte-1ul7oo4) { - position: absolute; - line-height: var(--height, 42px); - height: var(--height, 42px); - } - - .selected-item.svelte-1ul7oo4:focus { - outline: none; - } - - .hide-selected-item.svelte-1ul7oo4 { - opacity: 0; - } - - .icon.svelte-1ul7oo4 { - display: flex; - align-items: center; - justify-content: center; - } - - .clear-select.svelte-1ul7oo4 { - all: unset; - display: flex; - align-items: center; - justify-content: center; - width: var(--clear-select-width, 40px); - height: var(--clear-select-height, 100%); - color: var(--clear-select-color, var(--icons-color)); - margin: var(--clear-select-margin, 0); - pointer-events: all; - flex-shrink: 0; - } - - .clear-select.svelte-1ul7oo4:focus { - outline: var(--clear-select-focus-outline, 1px solid #006fe8); - } - - .loading.svelte-1ul7oo4 { - width: var(--loading-width, 40px); - height: var(--loading-height); - color: var(--loading-color, var(--icons-color)); - margin: var(--loading--margin, 0); - flex-shrink: 0; - } - - .chevron.svelte-1ul7oo4 { - width: var(--chevron-width, 40px); - height: var(--chevron-height, 40px); - background: var(--chevron-background, transparent); - pointer-events: var(--chevron-pointer-events, none); - color: var(--chevron-color, var(--icons-color)); - border: var(--chevron-border, 0 0 0 1px solid #d8dbdf); - flex-shrink: 0; - } - - .multi.svelte-1ul7oo4 { - padding: var(--multi-select-padding, var(--internal-padding)); - } - - .multi.svelte-1ul7oo4 input:where(.svelte-1ul7oo4) { - padding: var(--multi-select-input-padding, 0); - position: relative; - margin: var(--multi-select-input-margin, 5px 0); - flex: 1 1 40px; - } - - .svelte-select.error.svelte-1ul7oo4 { - border: var(--error-border, 1px solid #ff2d55); - background: var(--error-background, #fff); - } - - .a11y-text.svelte-1ul7oo4 { - z-index: 9999; - border: 0px; - clip: rect(1px, 1px, 1px, 1px); - height: 1px; - width: 1px; - position: absolute; - overflow: hidden; - padding: 0px; - white-space: nowrap; - } - - .multi-item.svelte-1ul7oo4 { - background: var(--multi-item-bg, #ebedef); - margin: var(--multi-item-margin, 0); - outline: var(--multi-item-outline, 1px solid #ddd); - border-radius: var(--multi-item-border-radius, 4px); - height: var(--multi-item-height, 25px); - line-height: var(--multi-item-height, 25px); - display: flex; - cursor: default; - padding: var(--multi-item-padding, 0 5px); - overflow: hidden; - gap: var(--multi-item-gap, 4px); - outline-offset: -1px; - max-width: var(--multi-max-width, none); - color: var(--multi-item-color, var(--item-color)); - } - - .multi-item.disabled.svelte-1ul7oo4:hover { - background: var(--multi-item-disabled-hover-bg, #ebedef); - color: var(--multi-item-disabled-hover-color, #c1c6cc); - } - - .multi-item-text.svelte-1ul7oo4 { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - .multi-item-clear.svelte-1ul7oo4 { - display: flex; - align-items: center; - justify-content: center; - --clear-icon-color: var(--multi-item-clear-icon-color, #000); - } - - .multi-item.active.svelte-1ul7oo4 { - outline: var(--multi-item-active-outline, 1px solid #006fe8); - } - - .svelte-select-list.svelte-1ul7oo4 { - box-shadow: var(--list-shadow, 0 2px 3px 0 rgba(44, 62, 80, 0.24)); - border-radius: var(--list-border-radius, 4px); - max-height: var(--list-max-height, 252px); - overflow-y: auto; - background: var(--list-background, #fff); - position: var(--list-position, absolute); - z-index: var(--list-z-index, 2); - border: var(--list-border); - } - - .prefloat.svelte-1ul7oo4 { - opacity: 0; - pointer-events: none; - } - - .list-group-title.svelte-1ul7oo4 { - color: var(--group-title-color, #8f8f8f); - cursor: default; - font-size: var(--group-title-font-size, 16px); - font-weight: var(--group-title-font-weight, 600); - height: var(--height, 42px); - line-height: var(--height, 42px); - padding: var(--group-title-padding, 0 20px); - text-overflow: ellipsis; - overflow-x: hidden; - white-space: nowrap; - text-transform: var(--group-title-text-transform, uppercase); - border-width: var(--group-title-border-width, medium); - border-style: var(--group-title-border-style, none); - border-color: var(--group-title-border-color, color); - } - - .empty.svelte-1ul7oo4 { - text-align: var(--list-empty-text-align, center); - padding: var(--list-empty-padding, 20px 0); - color: var(--list-empty-color, #78848f); - } - - .item.svelte-1ul7oo4 { - cursor: default; - height: var(--item-height, var(--height, 42px)); - line-height: var(--item-line-height, var(--height, 42px)); - padding: var(--item-padding, 0 20px); - color: var(--item-color, inherit); - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - transition: var(--item-transition, all 0.2s); - align-items: center; - width: 100%; - } - - .item.group-item.svelte-1ul7oo4 { - padding-left: var(--group-item-padding-left, 40px); - } - - .item.svelte-1ul7oo4:active { - background: var(--item-active-background, #b9daff); - } - - .item.active.svelte-1ul7oo4 { - background: var(--item-is-active-bg, #007aff); - color: var(--item-is-active-color, #fff); - } - - .item.first.svelte-1ul7oo4 { - border-radius: var(--item-first-border-radius, 4px 4px 0 0); - } - - .item.hover.svelte-1ul7oo4:not(.active) { - background: var(--item-hover-bg, #e7f2ff); - color: var(--item-hover-color, inherit); - } - - .item.not-selectable.svelte-1ul7oo4, - .item.hover.item.not-selectable.svelte-1ul7oo4, - .item.active.item.not-selectable.svelte-1ul7oo4, - .item.not-selectable.svelte-1ul7oo4:active { - color: var(--item-is-not-selectable-color, #999); - background: transparent; - } - - .required.svelte-1ul7oo4 { - opacity: 0; - z-index: -1; - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - } -`);var xxA=FA('
      '),RxA=FA('
      No options
      '),NxA=FA('
      '),FxA=FA(' ',1),_xA=FA('
      '),LxA=FA('
      '),GxA=FA("
      "),KxA=FA(''),UxA=FA(''),JxA=FA(''),YxA=FA(''),TxA=FA(''),HxA=FA('
      ');function Td(t,e){var A=(function(dA){var SA={};for(var ae in dA.children&&(SA.default=!0),dA.$$slots)SA[ae]=!0;return SA})(e);St(e,!1);var i,n=IA(),o=IA(),a=IA(),r=IA(),s=IA(),g=IA(),l=IA(),C=IA(),I=IA(),d=GkA(),B=N(e,"justValue",12,null),E=N(e,"filter",8,vxA),Q=N(e,"getItems",8,bxA),f=N(e,"id",8,null),b=N(e,"name",8,null),S=N(e,"container",12,void 0),M=N(e,"input",12,void 0),D=N(e,"multiple",8,!1),F=N(e,"multiFullItemClearable",8,!1),_=N(e,"disabled",8,!1),U=N(e,"focused",12,!1),J=N(e,"value",12,null),j=N(e,"filterText",12,""),AA=N(e,"placeholder",8,"Please select"),O=N(e,"placeholderAlwaysShow",8,!1),DA=N(e,"items",12,null),P=N(e,"label",8,"label"),aA=N(e,"itemFilter",8,(dA,SA,ae)=>"".concat(dA).toLowerCase().includes(SA.toLowerCase())),iA=N(e,"groupBy",8,void 0),BA=N(e,"groupFilter",8,dA=>dA),oA=N(e,"groupHeaderSelectable",8,!1),sA=N(e,"itemId",8,"value"),hA=N(e,"loadOptions",8,void 0),YA=N(e,"containerStyles",8,""),ee=N(e,"hasError",8,!1),UA=N(e,"filterSelectedItems",8,!0),mA=N(e,"required",8,!1),KA=N(e,"closeListOnChange",8,!0),Pe=N(e,"clearFilterTextOnBlur",8,!0),Je=N(e,"createGroupHeaderItem",8,(dA,SA)=>({value:dA,[P()]:dA})),HA=()=>c(l),uA=N(e,"searchable",8,!0),ZA=N(e,"inputStyles",8,""),QA=N(e,"clearable",8,!0),WA=N(e,"loading",12,!1),MA=N(e,"listOpen",12,!1),be=N(e,"debounce",8,function(dA){var SA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;clearTimeout(i),i=setTimeout(dA,SA)}),LA=N(e,"debounceWait",8,300),pA=N(e,"hideEmptyState",8,!1),Ft=N(e,"inputAttributes",24,()=>({})),ht=N(e,"listAutoWidth",8,!0),Ee=N(e,"showChevron",8,!1),Kt=N(e,"listOffset",8,5),Ye=N(e,"hoverItemIndex",12,0),ze=N(e,"floatingConfig",24,()=>({})),ut=N(e,"class",8,""),Me=IA(),ei=IA(),Y=IA(),z=IA(),nA=IA();function rA(dA){return dA.map((SA,ae)=>({index:ae,value:SA,label:"".concat(SA)}))}function NA(dA){var SA=[],ae={};dA.forEach(it=>{var st=iA()(it);SA.includes(st)||(SA.push(st),ae[st]=[],st&&ae[st].push(Object.assign(Je()(st,it),{id:st,groupHeader:!0,selectable:oA()}))),ae[st].push(Object.assign({groupItem:!!st},it))});var xe=[];return BA()(SA).forEach(it=>{ae[it]&&xe.push(...ae[it])}),xe}function Ie(){var dA=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,SA=arguments.length>1?arguments[1]:void 0;Ye(dA<0?0:dA),!SA&&iA()&&c(l)[Ye()]&&!c(l)[Ye()].selectable&&ci(1)}function Qe(){var dA=!0;if(J()){var SA=[],ae=[];J().forEach(xe=>{SA.includes(xe[sA()])?dA=!1:(SA.push(xe[sA()]),ae.push(xe))}),dA||J(ae)}return dA}function xA(dA){var SA=dA?dA[sA()]:J()[sA()];return DA().find(ae=>ae[sA()]===SA)}function _A(dA){return Et.apply(this,arguments)}function Et(){return(Et=Tt(function*(dA){var SA=J()[dA];J().length===1?J(void 0):J(J().filter(ae=>ae!==SA)),d("clear",SA)})).apply(this,arguments)}function et(dA){if(U())switch(dA.stopPropagation(),dA.key){case"Escape":dA.preventDefault(),_e();break;case"Enter":if(dA.preventDefault(),MA()){if(c(l).length===0)break;var SA=c(l)[Ye()];if(J()&&!D()&&J()[sA()]===SA[sA()]){_e();break}L(c(l)[Ye()])}break;case"ArrowDown":dA.preventDefault(),MA()?ci(1):(MA(!0),R(Me,void 0));break;case"ArrowUp":dA.preventDefault(),MA()?ci(-1):(MA(!0),R(Me,void 0));break;case"Tab":if(MA()&&U()){if(c(l).length===0||J()&&J()[sA()]===c(l)[Ye()][sA()])return _e();dA.preventDefault(),L(c(l)[Ye()]),_e()}break;case"Backspace":if(!D()||j().length>0)return;if(D()&&J()&&J().length>0){if(_A(c(Me)!==void 0?c(Me):J().length-1),c(Me)===0||c(Me)===void 0)break;R(Me,J().length>c(Me)?c(Me)-1:void 0)}break;case"ArrowLeft":if(!J()||!D()||j().length>0)return;c(Me)===void 0?R(Me,J().length-1):J().length>c(Me)&&c(Me)!==0&&R(Me,c(Me)-1);break;case"ArrowRight":if(!J()||!D()||j().length>0||c(Me)===void 0)return;c(Me)===J().length-1?R(Me,void 0):c(Me)0?MA(!0):void MA(!MA())}function dn(){d("clear",J()),J(void 0),_e(),Te()}function _e(){Pe()&&j(""),MA(!1)}KkA(Tt(function*(){R(ei,J()),R(Y,j()),R(z,D())})),is(()=>{MA()&&U(!0),U()&&M()&&M().focus()});var Wi=N(e,"ariaValues",8,dA=>"Option ".concat(dA,", selected.")),ui=N(e,"ariaListOpen",8,(dA,SA)=>"You are currently focused on option ".concat(dA,". There are ").concat(SA," results available.")),Mi=N(e,"ariaFocused",8,()=>"Select is focused, type to refine list, press down to open the menu."),zi,vt=IA(null);function Zi(){clearTimeout(zi),zi=setTimeout(()=>{_t=!1},100)}Hl(()=>{var dA;(dA=c(vt))===null||dA===void 0||dA.remove()});var _t=!1;function L(dA){dA&&dA.selectable!==!1&&(function(SA){if(SA){j("");var ae=Object.assign({},SA);if(ae.groupHeader&&!ae.selectable)return;J(D()?J()?J().concat([ae]):[ae]:J(ae)),setTimeout(()=>{KA()&&_e(),R(Me,void 0),d("change",J()),d("select",SA)})}})(dA)}function Ct(dA){_t||Ye(dA)}function ci(dA){if(c(l).filter(ae=>!Object.hasOwn(ae,"selectable")||ae.selectable===!0).length===0)return Ye(0);dA>0&&Ye()===c(l).length-1?Ye(0):dA<0&&Ye()===0?Ye(c(l).length-1):Ye(Ye()+dA);var SA=c(l)[Ye()];SA&&SA.selectable===!1&&(dA!==1&&dA!==-1||ci(dA))}function Bn(dA,SA,ae){if(!D())return SA&&SA[ae]===dA[ae]}var En=Yo,qn=Yo;function Yo(dA){return{update(SA){SA.scroll&&(Zi(),dA.scrollIntoView({behavior:"auto",block:"nearest"}))}}}var Co=IA({strategy:"absolute",placement:"bottom-start",middleware:[pxA(Kt()),DxA(),wxA()],autoUpdate:!1}),[ko,Zo,wo]=yxA(c(Co)),ha=IA(!0);RA(()=>(G(DA()),G(J())),()=>{DA(),J()&&(function(){if(typeof J()=="string"){var dA=(DA()||[]).find(SA=>SA[sA()]===J());J(dA||{[sA()]:J(),label:J()})}else D()&&Array.isArray(J())&&J().length>0&&J(J().map(SA=>typeof SA=="string"?{value:SA,label:SA}:SA))})()}),RA(()=>(G(Ft()),G(uA())),()=>{!Ft()&&uA()||(R(nA,Object.assign({autocapitalize:"none",autocomplete:"off",autocorrect:"off",spellcheck:!1,tabindex:0,type:"text","aria-autocomplete":"list"},Ft())),f()&&$g(nA,c(nA).id=f()),uA()||$g(nA,c(nA).readonly=!0))}),RA(()=>G(D()),()=>{D()&&J()&&(Array.isArray(J())?J([...J()]):J([J()]))}),RA(()=>(c(z),G(D())),()=>{c(z)&&!D()&&J()&&J(null)}),RA(()=>(G(D()),G(J())),()=>{D()&&J()&&J().length>1&&Qe()}),RA(()=>G(J()),()=>{J()&&(D()?JSON.stringify(J())!==JSON.stringify(c(ei))&&Qe()&&d("input",J()):c(ei)&&JSON.stringify(J()[sA()])===JSON.stringify(c(ei)[sA()])||d("input",J()))}),RA(()=>(G(J()),G(D()),c(ei)),()=>{!J()&&D()&&c(ei)&&d("input",J())}),RA(()=>(G(U()),G(M())),()=>{!U()&&M()&&_e()}),RA(()=>(G(j()),c(Y)),()=>{j()!==c(Y)&&(hA()||j().length!==0)&&(hA()?be()(Tt(function*(){WA(!0);var dA=yield Q()({dispatch:d,loadOptions:hA(),convertStringItemsToObjects:rA,filterText:j()});dA?(WA(dA.loading),MA(MA()?dA.listOpen:j().length>0),U(MA()&&dA.focused),DA(iA()?NA(dA.filteredItems):dA.filteredItems)):(WA(!1),U(!0),MA(!0))}),LA()):(MA(!0),D()&&R(Me,void 0)))}),RA(()=>(G(E()),G(hA()),G(j()),G(DA()),G(D()),G(J()),G(sA()),G(iA()),G(P()),G(UA()),G(aA())),()=>{R(l,E()({loadOptions:hA(),filterText:j(),items:DA(),multiple:D(),value:J(),itemId:sA(),groupBy:iA(),label:P(),filterSelectedItems:UA(),itemFilter:aA(),convertStringItemsToObjects:rA,filterGroupedItems:NA}))}),RA(()=>(G(D()),G(MA()),G(J()),c(l)),()=>{!D()&&MA()&&J()&&c(l)&&Ie(c(l).findIndex(dA=>dA[sA()]===J()[sA()]),!0)}),RA(()=>(G(MA()),G(D())),()=>{MA()&&D()&&Ye(0)}),RA(()=>G(j()),()=>{j()&&Ye(0)}),RA(()=>G(Ye()),()=>{var dA;dA=Ye(),d("hoverItem",dA)}),RA(()=>(G(D()),G(J())),()=>{R(n,D()?J()&&J().length>0:J())}),RA(()=>(c(n),G(j())),()=>{R(o,c(n)&&j().length>0)}),RA(()=>(c(n),G(QA()),G(_()),G(WA())),()=>{R(a,c(n)&&QA()&&!_()&&!WA())}),RA(()=>(G(O()),G(D()),G(AA()),G(J())),()=>{var dA;R(r,O()&&D()||D()&&((dA=J())===null||dA===void 0?void 0:dA.length)===0?AA():J()?"":AA())}),RA(()=>(G(J()),G(D())),()=>{var dA,SA;R(s,J()?(dA=D(),SA=void 0,SA=dA&&J().length>0?J().map(ae=>ae[P()]).join(", "):J()[P()],Wi()(SA)):"")}),RA(()=>(c(l),G(Ye()),G(U()),G(MA())),()=>{R(g,(function(){if(!c(l)||c(l).length===0)return"";var dA=c(l)[Ye()];if(MA()&&dA){var SA=c(l)?c(l).length:0;return ui()(dA[P()],SA)}return Mi()()})((c(l),Ye(),U(),MA())))}),RA(()=>G(DA()),()=>{(function(dA){dA&&dA.length!==0&&!dA.some(SA=>typeof SA!="object")&&J()&&(D()?!J().some(SA=>!SA||!SA[sA()]):J()[sA()])&&(Array.isArray(J())?J(J().map(SA=>xA(SA)||SA)):J(xA()||J()))})(DA())}),RA(()=>(G(D()),G(J()),G(sA())),()=>{B((D(),J(),sA(),D()?J()?J().map(dA=>dA[sA()]):null:J()?J()[sA()]:J()))}),RA(()=>(G(D()),c(ei),G(J())),()=>{D()||!c(ei)||J()||d("input",J())}),RA(()=>(G(MA()),c(l),G(D()),G(J())),()=>{MA()&&c(l)&&!D()&&!J()&&Ie()}),RA(()=>c(l),()=>{(function(dA){MA()&&d("filter",dA)})(c(l))}),RA(()=>(G(S()),G(ze()),c(Co)),()=>{S()&&ze()&&wo(Object.assign(c(Co),ze()))}),RA(()=>c(vt),()=>{R(C,!!c(vt))}),RA(()=>(c(vt),G(MA())),()=>{(function(dA,SA){if(!dA||!SA)return R(ha,!0);setTimeout(()=>{R(ha,!1)},0)})(c(vt),MA())}),RA(()=>(G(MA()),G(S()),c(vt)),()=>{MA()&&S()&&c(vt)&&(function(){var{width:dA}=S().getBoundingClientRect();$g(vt,c(vt).style.width=ht()?dA+"px":"auto")})()}),RA(()=>G(Ye()),()=>{R(I,Ye())}),RA(()=>(G(M()),G(MA()),G(U())),()=>{M()&&MA()&&!U()&&Te()}),RA(()=>(G(S()),G(ze())),()=>{var dA;S()&&((dA=ze())===null||dA===void 0?void 0:dA.autoUpdate)===void 0&&$g(Co,c(Co).autoUpdate=!0)}),kn();var Xo={getFilteredItems:HA,handleClear:dn};Ai();var ra,Do=HxA();ue("click",i2,function(dA){var SA;MA()||U()||!S()||S().contains(dA.target)||(SA=c(vt))!==null&&SA!==void 0&&SA.contains(dA.target)||Le()}),ue("keydown",i2,et);var re=CA(Do),di=dA=>{var SA,ae=NxA(),xe=CA(ae),it=Vt=>{var Ni=bi();Ea(At(Ni),e,"list-prepend",{},null),lA(Vt,Ni)};TA(xe,Vt=>{EA(()=>A["list-prepend"])&&Vt(it)});var st=bA(xe,2),bt=Vt=>{var Ni=bi();Ea(At(Ni),e,"list",{get filteredItems(){return c(l)}},null),lA(Vt,Ni)},Kn=Vt=>{var Ni=bi(),ka=At(Ni),Lt=Fi=>{var Oi=bi();Qa(At(Oi),1,()=>c(l),Na,(Vn,hn,Mt)=>{var sa,Ho=xxA(),u=CA(Ho);Ea(CA(u),e,"item",{get item(){return c(hn)},index:Mt},y=>{var x=ur();ve(()=>Rt(x,(c(hn),G(P()),EA(()=>{var H;return(H=c(hn))===null||H===void 0?void 0:H[P()]})))),lA(y,x)}),vs(u,(y,x)=>En?.(y),()=>({scroll:Bn(c(hn),J(),sA()),listDom:c(C)})),vs(u,(y,x)=>qn?.(y),()=>({scroll:c(I)===Mt,listDom:c(C)})),ve(y=>sa=$t(u,1,"item svelte-1ul7oo4",null,sa,y),[()=>{var y,x;return{"list-group-title":c(hn).groupHeader,active:Bn(c(hn),J(),sA()),first:(x=Mt,x===0),hover:Ye()===Mt,"group-item":c(hn).groupItem,"not-selectable":((y=c(hn))===null||y===void 0?void 0:y.selectable)===!1}}]),ue("mouseover",Ho,()=>Ct(Mt)),ue("focus",Ho,()=>Ct(Mt)),ue("click",Ho,VC(()=>(function(y){var{item:x,i:H}=y;if(x?.selectable!==!1)return J()&&!D()&&J()[sA()]===x[sA()]?_e():void((function(k){return k.groupHeader&&k.selectable||k.selectable||!k.hasOwnProperty("selectable")})(x)&&(Ye(H),L(x)))})({item:c(hn),i:Mt}))),ue("keydown",Ho,YI(VC(function(y){Kf.call(this,e,y)}))),lA(Vn,Ho)}),lA(Fi,Oi)},gt=Fi=>{var Oi=bi(),Vn=At(Oi),hn=Mt=>{var sa=bi();Ea(At(sa),e,"empty",{},Ho=>{lA(Ho,RxA())}),lA(Mt,sa)};TA(Vn,Mt=>{pA()||Mt(hn)},!0),lA(Fi,Oi)};TA(ka,Fi=>{c(l),EA(()=>c(l).length>0)?Fi(Lt):Fi(gt,!1)},!0),lA(Vt,Ni)};TA(st,Vt=>{EA(()=>A.list)?Vt(bt):Vt(Kn,!1)});var Ri=bA(st,2),Ji=Vt=>{var Ni=bi();Ea(At(Ni),e,"list-append",{},null),lA(Vt,Ni)};TA(Ri,Vt=>{EA(()=>A["list-append"])&&Vt(Ji)}),vs(ae,Vt=>Zo?.(Vt)),Jo(ae,Vt=>R(vt,Vt),()=>c(vt)),Nr(()=>ue("scroll",ae,Zi)),Nr(()=>ue("pointerup",ae,YI(VC(function(Vt){Kf.call(this,e,Vt)})))),Nr(()=>ue("mousedown",ae,YI(VC(function(Vt){Kf.call(this,e,Vt)})))),ve(()=>SA=$t(ae,1,"svelte-select-list svelte-1ul7oo4",null,SA,{prefloat:c(ha)})),lA(dA,ae)};TA(re,dA=>{MA()&&dA(di)});var ln=bA(re,2),Qn=CA(ln),To=dA=>{var SA=FxA(),ae=At(SA),xe=CA(ae),it=CA(bA(ae,2));ve(()=>{Rt(xe,c(s)),Rt(it,c(g))}),lA(dA,SA)};TA(Qn,dA=>{U()&&dA(To)});var Ma=bA(ln,2);Ea(CA(Ma),e,"prepend",{},null);var wi=bA(Ma,2),Io=CA(wi),nr=dA=>{var SA=bi(),ae=At(SA),xe=st=>{var bt=bi();Qa(At(bt),1,J,Na,(Kn,Ri,Ji)=>{var Vt,Ni=LxA(),ka=CA(Ni);Ea(CA(ka),e,"selection",{get selection(){return c(Ri)},index:Ji},Fi=>{var Oi=ur();ve(()=>Rt(Oi,(c(Ri),G(P()),EA(()=>c(Ri)[P()])))),lA(Fi,Oi)});var Lt=bA(ka,2),gt=Fi=>{var Oi=_xA();Ea(CA(Oi),e,"multi-clear-icon",{},Vn=>{rL(Vn)}),ue("pointerup",Oi,YI(VC(()=>_A(Ji)))),lA(Fi,Oi)};TA(Lt,Fi=>{_()||F()||!rL||Fi(gt)}),ve(()=>Vt=$t(Ni,1,"multi-item svelte-1ul7oo4",null,Vt,{active:c(Me)===Ji,disabled:_()})),ue("click",Ni,YI(()=>F()?_A(Ji):{})),ue("keydown",Ni,YI(VC(function(Fi){Kf.call(this,e,Fi)}))),lA(Kn,Ni)}),lA(st,bt)},it=st=>{var bt,Kn=GxA();Ea(CA(Kn),e,"selection",{get selection(){return J()}},Ri=>{var Ji=ur();ve(()=>Rt(Ji,(G(J()),G(P()),EA(()=>J()[P()])))),lA(Ri,Ji)}),ve(()=>bt=$t(Kn,1,"selected-item svelte-1ul7oo4",null,bt,{"hide-selected-item":c(o)})),lA(st,Kn)};TA(ae,st=>{D()?st(xe):st(it,!1)}),lA(dA,SA)};TA(Io,dA=>{c(n)&&dA(nr)});var yo=bA(Io,2);jy(yo,()=>ye(ye({readOnly:!uA()},c(nA)),{},{placeholder:c(r),style:ZA(),disabled:_()}),void 0,void 0,void 0,"svelte-1ul7oo4",!0),Jo(yo,dA=>M(dA),()=>M());var Pa=bA(wi,2),Gn=CA(Pa),xi=dA=>{var SA=KxA();Ea(CA(SA),e,"loading-icon",{},ae=>{(function(xe){lA(xe,SxA())})(ae)}),lA(dA,SA)};TA(Gn,dA=>{WA()&&dA(xi)});var Pt=bA(Gn,2),Sn=dA=>{var SA=UxA();Ea(CA(SA),e,"clear-icon",{},ae=>{rL(ae)}),ue("click",SA,dn),lA(dA,SA)};TA(Pt,dA=>{c(a)&&dA(Sn)});var Bo=bA(Pt,2),So=dA=>{var SA=JxA();Ea(CA(SA),e,"chevron-icon",{get listOpen(){return MA()}},ae=>{(function(xe){lA(xe,MxA())})(ae)}),lA(dA,SA)};TA(Bo,dA=>{Ee()&&dA(So)});var vA=bA(Pa,2);Ea(vA,e,"input-hidden",{get value(){return J()}},dA=>{var SA=YxA();ve(ae=>{Mn(SA,"name",b()),AB(SA,ae)},[()=>(G(J()),EA(()=>J()?JSON.stringify(J()):null))]),lA(dA,SA)});var VA=bA(vA,2),me=dA=>{var SA=bi();Ea(At(SA),e,"required",{get value(){return J()}},ae=>{lA(ae,TxA())}),lA(dA,SA)};return TA(VA,dA=>{G(mA()),G(J()),EA(()=>mA()&&(!J()||J().length===0))&&dA(me)}),Nr(()=>ue("pointerup",Do,YI(gn))),Jo(Do,dA=>S(dA),()=>S()),vs(Do,dA=>ko?.(dA)),ve(()=>{var dA;ra=$t(Do,1,"svelte-select ".concat((dA=ut())!==null&&dA!==void 0?dA:""),"svelte-1ul7oo4",ra,{multi:D(),disabled:_(),focused:U(),"list-open":MA(),"show-chevron":Ee(),error:ee()}),Yl(Do,YA())}),ue("keydown",yo,et),ue("blur",yo,Le),ue("focus",yo,Te),tv(yo,j),lA(t,Do),Ot(e,"getFilteredItems",HA),Ot(e,"handleClear",dn),xt(Xo)}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -table.jse-transform-wizard.svelte-9wqi8y { - border-collapse: collapse; - border-spacing: 0; - width: 100%; -} -table.jse-transform-wizard.svelte-9wqi8y input:where(.svelte-9wqi8y) { - font-family: inherit; - font-size: inherit; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) th:where(.svelte-9wqi8y) { - font-weight: normal; - text-align: left; - width: 60px; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) { - width: 100%; - display: flex; - flex-direction: row; - margin-bottom: calc(0.5 * var(--jse-padding, 10px)); -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select .multi-item { - align-items: center; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select .value-container { - gap: 0 !important; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-filter-path { - flex: 4; - margin-right: calc(0.5 * var(--jse-padding, 10px)); -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-filter-relation { - flex: 1.5; - margin-right: calc(0.5 * var(--jse-padding, 10px)); -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-sort-path { - flex: 3; - margin-right: calc(0.5 * var(--jse-padding, 10px)); -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-sort-direction { - flex: 1; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select.jse-projection-paths { - flex: 1; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .svelte-select input { - box-sizing: border-box; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .jse-filter-value:where(.svelte-9wqi8y) { - flex: 4; - padding: 4px 8px; - border: var(--jse-input-border, 1px solid #d8dbdf); - border-radius: var(--jse-input-radius, 3px); - outline: none; - background: var(--jse-input-background, var(--jse-background-color, #fff)); - color: inherit; -} -table.jse-transform-wizard.svelte-9wqi8y tr:where(.svelte-9wqi8y) td:where(.svelte-9wqi8y) .jse-horizontal:where(.svelte-9wqi8y) .jse-filter-value:where(.svelte-9wqi8y):focus { - border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); -}`);var zxA=FA('
      Filter
      Sort
      Pick
      ');function OxA(t,e){var A,i,n,o,a;St(e,!1);var r=IA(void 0,!0),s=IA(void 0,!0),g=IA(void 0,!0),l=IA(void 0,!0),C=IA(void 0,!0),I=IA(void 0,!0),d=Cr("jsoneditor:TransformWizard"),B=N(e,"json",9),E=N(e,"queryOptions",29,()=>({})),Q=N(e,"onChange",9),f=["==","!=","<","<=",">",">="].map(UA=>({value:UA,label:UA})),b=[{value:"asc",label:"ascending"},{value:"desc",label:"descending"}],S=IA((A=E())!==null&&A!==void 0&&(A=A.filter)!==null&&A!==void 0&&A.path?PI(E().filter.path):void 0,!0),M=IA((i=f.find(UA=>{var mA;return UA.value===((mA=E().filter)===null||mA===void 0?void 0:mA.relation)}))!==null&&i!==void 0?i:f[0],!0),D=IA(((n=E())===null||n===void 0||(n=n.filter)===null||n===void 0?void 0:n.value)||"",!0),F=IA((o=E())!==null&&o!==void 0&&(o=o.sort)!==null&&o!==void 0&&o.path?PI(E().sort.path):void 0,!0),_=IA((a=b.find(UA=>{var mA;return UA.value===((mA=E().sort)===null||mA===void 0?void 0:mA.direction)}))!==null&&a!==void 0?a:b[0],!0);RA(()=>G(B()),()=>{R(r,Array.isArray(B()))}),RA(()=>(c(r),G(B())),()=>{R(s,c(r)?wL(B()):[])}),RA(()=>(c(r),G(B())),()=>{R(g,c(r)?wL(B(),!0):[])}),RA(()=>(c(s),PI),()=>{R(l,c(s).map(PI))}),RA(()=>(c(g),PI),()=>{R(C,c(g)?c(g).map(PI):[])}),RA(()=>(G(E()),c(C),Qi),()=>{var UA;R(I,(UA=E())!==null&&UA!==void 0&&(UA=UA.projection)!==null&&UA!==void 0&&UA.paths&&c(C)?E().projection.paths.map(mA=>c(C).find(KA=>Qi(KA.value,mA))).filter(mA=>!!mA):void 0)}),RA(()=>c(S),()=>{var UA,mA,KA;mA=(UA=c(S))===null||UA===void 0?void 0:UA.value,Qi((KA=E())===null||KA===void 0||(KA=KA.filter)===null||KA===void 0?void 0:KA.path,mA)||(d("changeFilterPath",mA),E(Or(E(),["filter","path"],mA,!0)),Q()(E()))}),RA(()=>c(M),()=>{var UA,mA,KA;mA=(UA=c(M))===null||UA===void 0?void 0:UA.value,Qi((KA=E())===null||KA===void 0||(KA=KA.filter)===null||KA===void 0?void 0:KA.relation,mA)||(d("changeFilterRelation",mA),E(Or(E(),["filter","relation"],mA,!0)),Q()(E()))}),RA(()=>c(D),()=>{var UA,mA;UA=c(D),Qi((mA=E())===null||mA===void 0||(mA=mA.filter)===null||mA===void 0?void 0:mA.value,UA)||(d("changeFilterValue",UA),E(Or(E(),["filter","value"],UA,!0)),Q()(E()))}),RA(()=>c(F),()=>{var UA,mA,KA;mA=(UA=c(F))===null||UA===void 0?void 0:UA.value,Qi((KA=E())===null||KA===void 0||(KA=KA.sort)===null||KA===void 0?void 0:KA.path,mA)||(d("changeSortPath",mA),E(Or(E(),["sort","path"],mA,!0)),Q()(E()))}),RA(()=>c(_),()=>{var UA,mA,KA;mA=(UA=c(_))===null||UA===void 0?void 0:UA.value,Qi((KA=E())===null||KA===void 0||(KA=KA.sort)===null||KA===void 0?void 0:KA.direction,mA)||(d("changeSortDirection",mA),E(Or(E(),["sort","direction"],mA,!0)),Q()(E()))}),RA(()=>c(I),()=>{(function(UA){var mA;Qi((mA=E())===null||mA===void 0||(mA=mA.projection)===null||mA===void 0?void 0:mA.paths,UA)||(d("changeProjectionPaths",UA),E(Or(E(),["projection","paths"],UA,!0)),Q()(E()))})(c(I)?c(I).map(UA=>UA.value):void 0)}),kn(),Ai(!0);var U=zxA(),J=CA(U),j=CA(J),AA=bA(CA(j)),O=CA(AA),DA=CA(O);Td(DA,{class:"jse-filter-path",showChevron:!0,get items(){return c(l)},get value(){return c(S)},set value(UA){R(S,UA)},$$legacy:!0});var P=bA(DA,2);Td(P,{class:"jse-filter-relation",showChevron:!0,clearable:!1,get items(){return f},get value(){return c(M)},set value(UA){R(M,UA)},$$legacy:!0});var aA=bA(P,2),iA=bA(j),BA=bA(CA(iA)),oA=CA(BA),sA=CA(oA);Td(sA,{class:"jse-sort-path",showChevron:!0,get items(){return c(l)},get value(){return c(F)},set value(UA){R(F,UA)},$$legacy:!0}),Td(bA(sA,2),{class:"jse-sort-direction",showChevron:!0,clearable:!1,get items(){return b},get value(){return c(_)},set value(UA){R(_,UA)},$$legacy:!0});var hA=bA(iA),YA=bA(CA(hA)),ee=CA(YA);Td(CA(ee),{class:"jse-projection-paths",multiple:!0,showChevron:!0,get items(){return c(C)},get value(){return c(I)},set value(UA){R(I,UA)},$$legacy:!0}),tv(aA,()=>c(D),UA=>R(D,UA)),lA(t,U),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-select-query-language.svelte-jrd4q2 { - position: relative; - width: 32px; -} -.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) { - position: absolute; - top: 0; - right: 0; - display: flex; - flex-direction: column; - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); -} -.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) .jse-query-language:where(.svelte-jrd4q2) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - text-align: left; - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - white-space: nowrap; - color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); - background: var(--jse-context-menu-background, #656565); -} -.jse-select-query-language.svelte-jrd4q2 .jse-select-query-language-container:where(.svelte-jrd4q2) .jse-query-language:where(.svelte-jrd4q2):hover { - background: var(--jse-context-menu-background-highlight, #7a7a7a); -}`);var PxA=FA(''),jxA=FA('
      ');function qxA(t,e){St(e,!1);var A=N(e,"queryLanguages",8),i=N(e,"queryLanguageId",12),n=N(e,"onChangeQueryLanguage",8);Ai();var o=jxA();Qa(CA(o),5,A,Na,(a,r)=>{var s,g=PxA(),l=CA(g),C=B=>{Vi(B,{get data(){return NS}})},I=B=>{Vi(B,{get data(){return FS}})};TA(l,B=>{c(r),G(i()),EA(()=>c(r).id===i())?B(C):B(I,!1)});var d=bA(l);ve(()=>{var B;s=$t(g,1,"jse-query-language svelte-jrd4q2",null,s,{selected:c(r).id===i()}),Mn(g,"title",(c(r),EA(()=>"Select ".concat(c(r).name," as query language")))),Rt(d," ".concat((c(r),(B=EA(()=>c(r).name))!==null&&B!==void 0?B:"")))}),ue("click",g,()=>{return B=c(r).id,i(B),void n()(B);var B}),lA(a,g)}),lA(t,o),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-header.svelte-1k211ye { - display: flex; - background: var(--jse-theme-color, #3883fa); - color: var(--jse-menu-color, var(--jse-text-color-inverse, #fff)); -} -.jse-header.svelte-1k211ye .jse-title:where(.svelte-1k211ye) { - flex: 1; - padding: 5px; - vertical-align: middle; -} -.jse-header.svelte-1k211ye button:where(.svelte-1k211ye) { - border: none; - background: transparent; - min-width: 32px; - color: inherit; - cursor: pointer; -} -.jse-header.svelte-1k211ye button:where(.svelte-1k211ye):hover { - background: rgba(255, 255, 255, 0.1); -}`);var VxA=FA(''),WxA=FA('
      ');function Ev(t,e){St(e,!1);var A=N(e,"title",9,"Modal"),i=N(e,"fullScreenButton",9,!1),n=N(e,"fullscreen",13,!1),o=N(e,"onClose",9,void 0);Ai(!0);var a=WxA(),r=CA(a),s=CA(r),g=bA(r,2);Ea(g,e,"actions",{},null);var l=bA(g,2),C=d=>{var B=VxA(),E=CA(B),Q=tt(()=>n()?CV:rV);Vi(E,{get data(){return c(Q)}}),ue("click",B,()=>n(!n())),lA(d,B)};TA(l,d=>{i()&&d(C)});var I=bA(l,2);Vi(CA(I),{get data(){return c3}}),ve(()=>Rt(s,A())),ue("click",I,()=>{var d;return(d=o())===null||d===void 0?void 0:d()}),lA(t,a),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-config.svelte-5gkegr { - border: none; - background: transparent; - min-width: 32px; - color: inherit; - cursor: pointer; -} -.jse-config.svelte-5gkegr:hover { - background: rgba(255, 255, 255, 0.1); -} -.jse-config.hide.svelte-5gkegr { - display: none; -}`);var ZxA=FA(''),sL=Cr("jsoneditor:AutoScrollHandler");function jiA(t){var e,A;function i(r){return r<20?200:r<50?400:1200}function n(){if(t){var r=.05*(e||0);t.scrollTop+=r}}function o(r){A&&r===e||(a(),sL("startAutoScroll",r),e=r,A=setInterval(n,50))}function a(){A&&(sL("stopAutoScroll"),clearInterval(A),A=void 0,e=void 0)}return sL("createAutoScrollHandler",t),{onDrag:function(r){if(t){var s=r.clientY,{top:g,bottom:l}=t.getBoundingClientRect();sl?o(i(s-l)):a()}},onDragEnd:function(){a()}}}var XxA=(t,e,A,i)=>(t/=i/2)<1?A/2*t*t+e:-A/2*(--t*(t-2)-1)+e,joA=()=>{var t,e,A,i,n,o,a,r,s,g,l,C,I;function d(Q){return Q.getBoundingClientRect().top-(t.getBoundingClientRect?t.getBoundingClientRect().top:0)+A}function B(Q){t.scrollTo?t.scrollTo(t.scrollLeft,Q):t.scrollTop=Q}function E(Q){g||(g=Q),B(o(l=Q-g,A,r,s)),I=!0,l1&&arguments[1]!==void 0?arguments[1]:{};switch(s=1e3,n=f.offset||0,C=f.callback,o=f.easing||XxA,a=f.a11y||!1,typeof f.container){case"object":t=f.container;break;case"string":t=document.querySelector(f.container);break;default:t=window.document.documentElement}switch(A=t.scrollTop,typeof Q){case"number":e=void 0,a=!1,i=A+Q;break;case"object":i=d(e=Q);break;case"string":e=document.querySelector(Q),i=d(e)}switch(r=i-A+n,typeof f.duration){case"number":s=f.duration;break;case"function":s=f.duration(r)}I?g=0:requestAnimationFrame(E)}};function oh(t,e){var A=Date.now(),i=t();return e(Date.now()-A),i}var $Q=Cr("validation"),$xA={createObjectDocumentState:()=>({type:"object",properties:{}}),createArrayDocumentState:()=>({type:"array",items:[]}),createValueDocumentState:()=>({type:"value"})};function qiA(t,e,A,i){return cG(t,e,A,i,$xA)}function qoA(t,e,A,i){if($Q("validateJSON"),!e)return[];if(A!==i){var n=A.stringify(t);return e(n!==void 0?i.parse(n):void 0)}return e(t)}function ARA(t,e,A,i){if($Q("validateText"),t.length>104857600)return{validationErrors:[{path:[],message:"Validation turned off: the document is too large",severity:Jc.info}]};if(t.length!==0)try{var n=oh(()=>A.parse(t),s=>$Q("validate: parsed json in ".concat(s," ms")));if(!e)return;var o=A===i?n:oh(()=>i.parse(t),s=>$Q("validate: parsed json with the validationParser in ".concat(s," ms"))),a=oh(()=>e(o),s=>$Q("validate: validated json in ".concat(s," ms")));return qi(a)?void 0:{validationErrors:a}}catch(s){var r=oh(()=>(function(g,l){if(g.length>SSA)return!1;try{return l.parse(ml(g)),!0}catch{return!1}})(t,A),g=>$Q("validate: checked whether repairable in ".concat(g," ms")));return{parseError:uh(t,s.message||s.toString()),isRepairable:r}}}var Ky=Cr("jsoneditor:FocusTracker");function QG(t){var e,{onMount:A,onDestroy:i,getWindow:n,hasFocus:o,onFocus:a,onBlur:r}=t,s=!1;function g(){var C=o();C&&(clearTimeout(e),s||(Ky("focus"),a(),s=C))}function l(){s&&(clearTimeout(e),e=setTimeout(()=>{o()||(Ky("blur"),s=!1,r())}))}A(()=>{Ky("mount FocusTracker");var C=n();C&&(C.addEventListener("focusin",g,!0),C.addEventListener("focusout",l,!0))}),i(()=>{Ky("destroy FocusTracker");var C=n();C&&(C.removeEventListener("focusin",g,!0),C.removeEventListener("focusout",l,!0))})}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-message.svelte-cbvd26 { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - padding: var(--jse-padding, 10px); - display: flex; - gap: var(--jse-padding, 10px); - flex-wrap: wrap; - align-items: stretch; -} -.jse-message.jse-success.svelte-cbvd26 { - background: var(--message-success-background, #9ac45d); - color: var(--jse-message-success-color, #fff); -} -.jse-message.svelte-cbvd26 .jse-text:where(.svelte-cbvd26) { - display: flex; - flex: 1; - min-width: 60%; - align-items: center; -} -.jse-message.svelte-cbvd26 .jse-text.jse-clickable:where(.svelte-cbvd26) { - cursor: pointer; -} -.jse-message.svelte-cbvd26 .jse-text.jse-clickable:where(.svelte-cbvd26):hover { - background-color: rgba(255, 255, 255, 0.1); -} -.jse-message.jse-error.svelte-cbvd26 { - background: var(--jse-message-error-background, var(--jse-error-color, #ee5341)); - color: var(--jse-message-error-color, #fff); -} -.jse-message.jse-warning.svelte-cbvd26 { - background: var(--jse-message-warning-background, #ffde5c); - color: var(--jse-message-warning-color, #4d4d4d); -} -.jse-message.jse-info.svelte-cbvd26 { - background: var(--jse-message-info-background, #4f91ff); - color: var(--jse-message-info-color, #fff); -} -.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) { - display: flex; - gap: var(--jse-padding, 10px); -} -.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) button.jse-action:where(.svelte-cbvd26) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-message-action-background, rgba(255, 255, 255, 0.2)); - color: inherit; - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); -} -.jse-message.svelte-cbvd26 .jse-actions:where(.svelte-cbvd26) button.jse-action:where(.svelte-cbvd26):hover { - background: var(--jse-message-action-background-highlight, rgba(255, 255, 255, 0.3)); -}`);var eRA=FA(''),tRA=FA('
      ');function tl(t,e){St(e,!1);var A=N(e,"type",9,"success"),i=N(e,"icon",9,void 0),n=N(e,"message",9,void 0),o=N(e,"actions",25,()=>[]),a=N(e,"onClick",9,void 0),r=N(e,"onClose",9,void 0);r()&&Hl(r()),Ai(!0);var s,g=tRA(),l=CA(g),C=CA(l),I=CA(C),d=E=>{Vi(E,{get data(){return i()}})};TA(I,E=>{i()&&E(d)});var B=bA(I);Qa(bA(l,2),5,o,Na,(E,Q)=>{var f=eRA(),b=CA(f),S=D=>{Vi(D,{get data(){return c(Q),EA(()=>c(Q).icon)}})};TA(b,D=>{c(Q),EA(()=>c(Q).icon)&&D(S)});var M=bA(b);ve(()=>{var D;Mn(f,"title",(c(Q),EA(()=>c(Q).title))),f.disabled=(c(Q),EA(()=>c(Q).disabled)),Rt(M," ".concat((c(Q),(D=EA(()=>c(Q).text))!==null&&D!==void 0?D:"")))}),ue("click",f,()=>{c(Q).onClick&&c(Q).onClick()}),ue("mousedown",f,()=>{c(Q).onMouseDown&&c(Q).onMouseDown()}),lA(E,f)}),ve(()=>{var E,Q;$t(g,1,"jse-message jse-".concat((E=A())!==null&&E!==void 0?E:""),"svelte-cbvd26"),s=$t(l,1,"jse-text svelte-cbvd26",null,s,{"jse-clickable":!!a()}),Rt(B," ".concat((Q=n())!==null&&Q!==void 0?Q:""))}),ue("click",l,function(){a()&&a()()}),lA(t,g),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-validation-errors-overview.svelte-1342rh4 { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - overflow: auto; - max-height: 25%; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) { - border-collapse: collapse; - width: 100%; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) { - cursor: pointer; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-error:where(.svelte-1342rh4) { - background: var(--jse-message-error-background, var(--jse-error-color, #ee5341)); - color: var(--jse-message-error-color, #fff); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-warning:where(.svelte-1342rh4) { - background: var(--jse-message-warning-background, #ffde5c); - color: var(--jse-message-warning-color, #4d4d4d); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-warning:where(.svelte-1342rh4):hover { - filter: brightness(105%); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr.jse-validation-info:where(.svelte-1342rh4) { - background: var(--jse-message-info-background, #4f91ff); - color: var(--jse-message-info-color, #fff); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4):hover { - filter: brightness(110%); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td:where(.svelte-1342rh4) { - padding: 4px var(--jse-padding, 10px); - vertical-align: middle; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-icon:where(.svelte-1342rh4) { - width: 36px; - box-sizing: border-box; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) { - width: 36px; - box-sizing: border-box; - padding: 0; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) button.jse-validation-errors-collapse:where(.svelte-1342rh4) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - width: 36px; - height: 26px; - cursor: pointer; -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td.jse-validation-error-action:where(.svelte-1342rh4) button.jse-validation-errors-collapse:where(.svelte-1342rh4):hover { - background-color: rgba(255, 255, 255, 0.2); -} -.jse-validation-errors-overview.svelte-1342rh4 table:where(.svelte-1342rh4) tr:where(.svelte-1342rh4) td:where(.svelte-1342rh4) div.jse-validation-errors-expand:where(.svelte-1342rh4) { - display: inline-block; - position: relative; - top: 3px; -}`);var iRA=FA(''),nRA=FA(' '),oRA=FA(' '),aRA=FA('
      '),rRA=FA('
      '),sRA=FA('
      ');function hG(t,e){St(e,!1);var A=IA(void 0,!0),i=N(e,"validationErrors",9),n=N(e,"selectError",9),o=IA(!0,!0);function a(){R(o,!1)}function r(){R(o,!0)}RA(()=>G(i()),()=>{R(A,i().length)}),kn(),Ai(!0);var s=bi(),g=At(s),l=C=>{var I=sRA(),d=CA(I),B=Q=>{var f=aRA(),b=CA(f),S=CA(b);Qa(S,1,()=>(G(iv),G(i()),G(Ry),EA(()=>iv(i(),Ry))),Na,(F,_,U)=>{var J=nRA(),j=CA(J);Vi(CA(j),{get data(){return BI}});var AA=bA(j),O=CA(AA),DA=bA(AA),P=CA(DA),aA=CA(bA(DA)),iA=BA=>{var oA=iRA();Vi(CA(oA),{get data(){return cV}}),ue("click",oA,VC(a)),lA(BA,oA)};TA(aA,BA=>{G(i()),EA(()=>U===0&&i().length>1)&&BA(iA)}),ve(BA=>{var oA;$t(J,1,"jse-validation-".concat((c(_),(oA=EA(()=>c(_).severity))!==null&&oA!==void 0?oA:"")),"svelte-1342rh4"),Rt(O,BA),Rt(P,(c(_),EA(()=>c(_).message)))},[()=>(G(vg),c(_),EA(()=>vg(c(_).path)))]),ue("click",J,()=>{setTimeout(()=>n()(c(_)))}),lA(F,J)});var M=bA(S),D=F=>{var _=oRA(),U=bA(CA(_),2),J=CA(U);ve(()=>Rt(J,"(and ".concat(c(A)-Ry," more errors)"))),lA(F,_)};TA(M,F=>{c(A)>Ry&&F(D)}),lA(Q,f)},E=Q=>{var f=rRA(),b=CA(f),S=CA(b),M=CA(S);Vi(CA(M),{get data(){return BI}});var D=CA(bA(M));Vi(CA(bA(D)),{get data(){return US}}),ve(F=>{var _;$t(S,1,"jse-validation-".concat(F??""),"svelte-1342rh4"),Rt(D,"".concat((_=c(A))!==null&&_!==void 0?_:""," validation errors "))},[()=>(G(i()),EA(()=>{return F=i(),[Jc.error,Jc.warning,Jc.info].find(_=>F.some(U=>U.severity===_));var F}))]),ue("click",S,r),lA(Q,f)};TA(d,Q=>{c(o)||c(A)===1?Q(B):Q(E,!1)}),lA(C,I)};TA(g,C=>{G(qi),G(i()),EA(()=>!qi(i()))&&C(l)}),lA(t,s),xt()}function Qv(t,e){if(t)return t.addEventListener("keydown",A),{destroy(){t.removeEventListener("keydown",A)}};function A(i){i.key==="Escape"&&(i.preventDefault(),i.stopPropagation(),e())}}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -dialog.jse-modal.svelte-2aoco4 { - border-radius: 3px; - font-size: var(--jse-padding, 10px); - border: none; - padding: 0; - display: flex; - min-width: 0; - margin: auto; - overflow: visible; - transition: width 0.1s ease-in-out, height 0.1s ease-in-out; -} -dialog.jse-modal.jse-sort-modal.svelte-2aoco4 { - width: 400px; -} -dialog.jse-modal.jse-repair-modal.svelte-2aoco4 { - width: 600px; - height: 500px; -} -dialog.jse-modal.jse-jsoneditor-modal.svelte-2aoco4 { - width: 800px; - height: 600px; -} -dialog.jse-modal.jse-transform-modal.svelte-2aoco4 { - width: 1200px; - height: 800px; -} -dialog.jse-modal.jse-fullscreen.svelte-2aoco4 { - width: 100%; - height: 100%; -} -dialog.jse-modal.svelte-2aoco4::backdrop { - background: var(--jse-overlay-background, rgba(0, 0, 0, 0.3)); -} -dialog.jse-modal[open].svelte-2aoco4 { - animation: svelte-2aoco4-zoom 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); -} -dialog.jse-modal[open].svelte-2aoco4::backdrop { - animation: svelte-2aoco4-fade 0.2s ease-out; -} -dialog.jse-modal.svelte-2aoco4 .jse-modal-inner:where(.svelte-2aoco4) { - flex: 1; - display: flex; - flex-direction: column; - min-width: 0; - min-height: 0; - padding: 0; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - line-height: normal; - background: var(--jse-modal-background, #f5f5f5); - color: var(--jse-text-color, #4d4d4d); -} -@keyframes svelte-2aoco4-zoom { - from { - transform: scale(0.95); - } - to { - transform: scale(1); - } -} -@keyframes svelte-2aoco4-fade { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -dialog.jse-modal.svelte-2aoco4 .svelte-select { - --border: var(--jse-svelte-select-border, 1px solid #d8dbdf); - --item-is-active-bg: var(--jse-item-is-active-bg, #3883fa); - --border-radius: var(--jse-svelte-select-border-radius, 3px); - --background: var(--jse-svelte-select-background, #fff); - --padding: var(--jse-svelte-select-padding, 0 10px); - --multi-select-padding: var(--jse-svelte-select-multi-select-padding, 0 10px); - --font-size: var(--jse-svelte-select-font-size, var(--jse-font-size, 16px)); - --height: 36px; - --multi-item-height: 28px; - --multi-item-margin: 2px; - --multi-item-padding: 2px 8px; - --multi-item-border-radius: 6px; - --indicator-top: 8px; -}`);var gRA=FA('
      ');function em(t,e){St(e,!1);var A=N(e,"className",8,void 0),i=N(e,"fullscreen",8,!1),n=N(e,"onClose",8),o=IA();function a(){n()()}is(()=>c(o).showModal()),Hl(()=>c(o).close()),Ai();var r,s=gRA(),g=CA(s);Ea(CA(g),e,"default",{},null),Jo(s,l=>R(o,l),()=>c(o)),Nr(()=>ue("close",s,a)),Nr(()=>{return ue("pointerdown",s,(l=a,function(){for(var C=arguments.length,I=new Array(C),d=0;due("cancel",s,YI(function(l){Kf.call(this,e,l)}))),vs(s,(l,C)=>Qv?.(l,C),()=>a),ve(l=>r=$t(s,1,l,"svelte-2aoco4",r,{"jse-fullscreen":i()}),[()=>n1((G(Pc),G(A()),EA(()=>Pc("jse-modal",A()))))]),lA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-modal-contents.svelte-10a6ob6 { - flex: 1; - display: flex; - flex-direction: column; - padding: 20px; - overflow: auto; - min-width: 0; - min-height: 0; -} -.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) { - display: flex; - flex-direction: row; - justify-content: flex-end; - padding-top: var(--jse-padding, 10px); -} -.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-modal-contents.svelte-10a6ob6 .jse-actions:where(.svelte-10a6ob6) button.jse-primary:where(.svelte-10a6ob6):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -} - -.jse-shortcuts.svelte-10a6ob6 { - display: flex; - flex-wrap: wrap; - justify-content: space-around; - margin: calc(2 * var(--jse-padding, 10px)) 0; -} -.jse-shortcuts.svelte-10a6ob6 .jse-shortcut:where(.svelte-10a6ob6) .jse-key:where(.svelte-10a6ob6) { - font-size: 200%; - color: var(--jse-theme-color, #3883fa); -}`);var lRA=FA('
      Clipboard permission is disabled by your browser. You can use:
      for copy
      for cut
      for paste
      ',1);function VoA(t,e){St(e,!1);var A=N(e,"onClose",9),i=iG()?"\u2318":"Ctrl";Ai(!0),em(t,{get onClose(){return A()},className:"jse-copy-paste",children:(n,o)=>{var a=lRA(),r=At(a);Ev(r,{title:"Copying and pasting",get onClose(){return A()}});var s=bA(r,2),g=bA(CA(s),2),l=CA(g),C=CA(l),I=CA(C),d=bA(l,2),B=CA(d),E=CA(B),Q=CA(bA(d,2)),f=CA(Q),b=CA(bA(g,2));ve(()=>{Rt(I,"".concat(i,"+C")),Rt(E,"".concat(i,"+X")),Rt(f,"".concat(i,"+V"))}),ue("click",b,function(){for(var S,M=arguments.length,D=new Array(M),F=0;F'),CRA=FA('
      '),IRA=FA(''),dRA=FA('
      ');function xv(t,e){St(e,!1);var A=N(e,"items",25,()=>[]);Ai(!0);var i=dRA(),n=CA(i);Ea(n,e,"left",{},null);var o=bA(n,2);Qa(o,1,A,Na,(a,r)=>{var s=bi(),g=At(s),l=I=>{lA(I,cRA())},C=I=>{var d=bi(),B=At(d),E=f=>{lA(f,CRA())},Q=f=>{var b=bi(),S=At(b),M=F=>{var _=IRA(),U=CA(_),J=O=>{Vi(O,{get data(){return c(r),EA(()=>c(r).icon)}})};TA(U,O=>{c(r),EA(()=>c(r).icon)&&O(J)});var j=bA(U,2),AA=O=>{var DA=ur();ve(()=>Rt(DA,(c(r),EA(()=>c(r).text)))),lA(O,DA)};TA(j,O=>{c(r),EA(()=>c(r).text)&&O(AA)}),ve(()=>{var O;$t(_,1,"jse-button ".concat((c(r),(O=EA(()=>c(r).className))!==null&&O!==void 0?O:"")),"svelte-3erbu0"),Mn(_,"title",(c(r),EA(()=>c(r).title))),_.disabled=(c(r),EA(()=>c(r).disabled||!1))}),ue("click",_,function(){for(var O,DA=arguments.length,P=new Array(DA),aA=0;aA{var _=ur();ve(U=>Rt(_,U),[()=>(c(r),EA(()=>(function(U){return console.error("Unknown type of menu item",U),"???"})(c(r))))]),lA(F,_)};TA(S,F=>{G(WC),c(r),EA(()=>WC(c(r)))?F(M):F(D,!1)},!0),lA(f,b)};TA(B,f=>{G(bL),c(r),EA(()=>bL(c(r)))?f(E):f(Q,!1)},!0),lA(I,d)};TA(g,I=>{G(OI),c(r),EA(()=>OI(c(r)))?I(l):I(C,!1)}),lA(a,s)}),Ea(bA(o,2),e,"right",{},null),lA(t,i),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-json-repair-component.svelte-16jv58j { - flex: 1; - display: flex; - flex-direction: column; - background: var(--jse-background-color, #fff); - color: var(--jse-text-color, #4d4d4d); -} -.jse-json-repair-component.svelte-16jv58j .jse-info:where(.svelte-16jv58j) { - padding: calc(0.5 * var(--jse-padding, 10px)); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - vertical-align: center; -} -.jse-json-repair-component.svelte-16jv58j .jse-json-text:where(.svelte-16jv58j) { - flex: 1; - border: none; - padding: 2px; - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - background: var(--jse-input-background, var(--jse-background-color, #fff)); - color: var(--jse-text-color, #4d4d4d); - resize: none; - outline: none; -}`);var BRA=FA('
      Repair invalid JSON, then click apply
      '),ERA=FA('
      ');function QRA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=IA(void 0,!0),a=IA(void 0,!0),r=IA(void 0,!0),s=N(e,"text",13,""),g=N(e,"readOnly",9,!1),l=N(e,"onParse",9),C=N(e,"onRepair",9),I=N(e,"onChange",9,void 0),d=N(e,"onApply",9),B=N(e,"onCancel",9),E=Cr("jsoneditor:JSONRepair"),Q=IA(void 0,!0);function f(){if(c(Q)&&c(A)){var AA=c(A).position!==void 0?c(A).position:0;c(Q).setSelectionRange(AA,AA),c(Q).focus()}}function b(){d()(s())}function S(){try{s(C()(s())),I()&&I()(s())}catch{}}var M=IA(void 0,!0);RA(()=>G(s()),()=>{R(A,(function(AA){try{return void l()(AA)}catch(O){return uh(AA,O.message)}})(s()))}),RA(()=>G(s()),()=>{R(i,(function(AA){try{return C()(AA),!0}catch{return!1}})(s()))}),RA(()=>c(A),()=>{E("error",c(A))}),RA(()=>G(B()),()=>{R(M,[{type:"space"},{type:"button",icon:c3,title:"Cancel repair",className:"jse-cancel",onClick:B()}])}),RA(()=>TS,()=>{R(n,{icon:TS,text:"Show me",title:"Scroll to the error location",onClick:f})}),RA(()=>SC,()=>{R(o,{icon:SC,text:"Auto repair",title:"Automatically repair JSON",onClick:S})}),RA(()=>(c(i),c(n),c(o)),()=>{R(a,c(i)?[c(n),c(o)]:[c(n)])}),RA(()=>G(g()),()=>{R(r,[{icon:Zw,text:"Apply",title:"Apply fixed JSON",disabled:g(),onClick:b}])}),kn(),Ai(!0);var D=ERA(),F=CA(D);xv(F,{get items(){return c(M)},$$slots:{left:(AA,O)=>{lA(AA,BRA())}}});var _=bA(F,2),U=AA=>{var O=tt(()=>(c(A),EA(()=>"Cannot parse JSON: ".concat(c(A).message))));tl(AA,{type:"error",get icon(){return BI},get message(){return c(O)},get actions(){return c(a)}})},J=AA=>{tl(AA,{type:"success",message:"JSON is valid now and can be parsed.",get actions(){return c(r)}})};TA(_,AA=>{c(A)?AA(U):AA(J,!1)});var j=bA(_,2);Jo(j,AA=>R(Q,AA),()=>c(Q)),ve(()=>{j.readOnly=g(),AB(j,s())}),ue("input",j,function(AA){E("handleChange");var O=AA.target.value;s()!==O&&(s(O),I()&&I()(s()))}),lA(t,D),xt()}function WoA(t,e){St(e,!1);var A=N(e,"text",13),i=N(e,"onParse",9),n=N(e,"onRepair",9),o=N(e,"onApply",9),a=N(e,"onClose",9);function r(g){o()(g),a()()}function s(){a()()}Ai(!0),em(t,{get onClose(){return a()},className:"jse-repair-modal",children:(g,l)=>{QRA(g,{get onParse(){return i()},get onRepair(){return n()},onApply:r,onCancel:s,get text(){return A()},set text(C){A(C)},$$legacy:!0})},$$slots:{default:!0}}),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -div.jse-collapsed-items.svelte-1v6dhm4 { - margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - color: var(--jse-collapsed-items-link-color, rgba(0, 0, 0, 0.38)); - padding: calc(0.5 * var(--jse-padding, 10px)); - border: 8px solid transparent; - border-width: 8px 0; - background-color: var(--jse-contents-background-color, transparent); - background-image: linear-gradient(var(--jse-collapsed-items-background-color, #f5f5f5), var(--jse-collapsed-items-background-color, #f5f5f5)), linear-gradient(to bottom right, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to bottom left, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to top right, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%), linear-gradient(to top left, transparent 50.5%, var(--jse-collapsed-items-background-color, #f5f5f5) 50.5%); - background-repeat: repeat, repeat-x, repeat-x, repeat-x, repeat-x; - background-position: 0 0, 8px 0, 8px 0, 8px 100%, 8px 100%; - background-size: auto auto, 16px 16px, 16px 16px, 16px 16px, 16px 16px; - background-clip: padding-box, border-box, border-box, border-box, border-box; - background-origin: padding-box, border-box, border-box, border-box, border-box; - display: flex; -} -div.jse-collapsed-items.jse-selected.svelte-1v6dhm4 { - background-color: var(--jse-selection-background-color, #d3d3d3); - --jse-collapsed-items-background-color: var(--jse-collapsed-items-selected-background-color, #c2c2c2); -} -div.jse-collapsed-items.svelte-1v6dhm4 div.jse-text:where(.svelte-1v6dhm4), -div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4) { - margin: 0 calc(0.5 * var(--jse-padding, 10px)); -} -div.jse-collapsed-items.svelte-1v6dhm4 div.jse-text:where(.svelte-1v6dhm4) { - display: inline; -} -div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4) { - font-family: inherit; - font-size: inherit; - color: var(--jse-collapsed-items-link-color, rgba(0, 0, 0, 0.38)); - background: none; - border: none; - padding: 0; - text-decoration: underline; - cursor: pointer; -} -div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4):hover, div.jse-collapsed-items.svelte-1v6dhm4 button.jse-expand-items:where(.svelte-1v6dhm4):focus { - color: var(--jse-collapsed-items-link-color-highlight, #ee5341); -}`);var hRA=FA(''),uRA=FA('
      ');function fRA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=IA(void 0,!0),a=IA(void 0,!0),r=N(e,"visibleSections",9),s=N(e,"sectionIndex",9),g=N(e,"total",9),l=N(e,"path",9),C=N(e,"selection",9),I=N(e,"onExpandSection",9),d=N(e,"context",9);RA(()=>(G(r()),G(s())),()=>{R(A,r()[s()])}),RA(()=>c(A),()=>{R(i,c(A).end)}),RA(()=>(G(r()),G(s()),G(g())),()=>{R(n,r()[s()+1]?r()[s()+1].start:g())}),RA(()=>(G(d()),G(C()),G(l()),c(i)),()=>{R(o,Xf(d().getJson(),C(),l().concat(String(c(i)))))}),RA(()=>(c(i),c(n)),()=>{R(a,(function(M,D){var F={start:M,end:Math.min(vL(M),D)},_=Math.max(ov((M+D)/2),M),U={start:_,end:Math.min(vL(_),D)},J=ov(D),j=J===D?J-qf:J,AA={start:Math.max(j,M),end:D},O=[F],DA=U.start>=F.end&&U.end<=AA.start;return DA&&O.push(U),AA.start>=(DA?U.end:F.end)&&O.push(AA),O})(c(i),c(n)))}),kn(),Ai(!0);var B,E,Q=uRA(),f=CA(Q),b=CA(f),S=CA(b);Qa(bA(b,2),1,()=>c(a),Na,(M,D)=>{var F=hRA(),_=CA(F);ve(()=>{var U,J;return Rt(_,"show ".concat((c(D),(U=EA(()=>c(D).start))!==null&&U!==void 0?U:""),"-").concat((c(D),(J=EA(()=>c(D).end))!==null&&J!==void 0?J:"")))}),ue("click",F,()=>I()(l(),c(D))),lA(M,F)}),ve(()=>{var M,D;B=$t(Q,1,"jse-collapsed-items svelte-1v6dhm4",null,B,{"jse-selected":c(o)}),E=Yl(Q,"",E,{"--level":(G(l()),EA(()=>l().length+2))}),Rt(S,"Items ".concat((M=c(i))!==null&&M!==void 0?M:"","-").concat((D=c(n))!==null&&D!==void 0?D:""))}),ue("mousemove",Q,function(M){M.stopPropagation()}),lA(t,Q),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-context-menu-pointer.svelte-10ijtzr { - position: absolute; - top: calc(-0.5 * var(--jse-context-menu-pointer-size, calc(1em + 4px))); - right: calc(-0.5 * var(--jse-context-menu-pointer-size, calc(1em + 4px))); - width: var(--jse-context-menu-pointer-size, calc(1em + 4px)); - height: var(--jse-context-menu-pointer-size, calc(1em + 4px)); - padding: 0; - margin: 0; - cursor: pointer; - background: transparent; - border-radius: 2px; - background: var(--jse-context-menu-pointer-hover-background, #b2b2b2); - color: var(--jse-context-menu-pointer-color, var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff))); - border: none; - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); -} -.jse-context-menu-pointer.jse-root.svelte-10ijtzr { - top: 0; - right: calc(-2px - var(--jse-context-menu-pointer-size, calc(1em + 4px))); -} -.jse-context-menu-pointer.jse-insert.svelte-10ijtzr { - right: -1px; -} -.jse-context-menu-pointer.svelte-10ijtzr:hover { - background: var(--jse-context-menu-pointer-background-highlight, var(--jse-context-menu-background-highlight, #7a7a7a)); -} -.jse-context-menu-pointer.jse-selected.svelte-10ijtzr { - background: var(--jse-context-menu-pointer-background, var(--jse-context-menu-background, #656565)); -} -.jse-context-menu-pointer.jse-selected.svelte-10ijtzr:hover { - background: var(--jse-context-menu-pointer-background-highlight, var(--jse-context-menu-background-highlight, #7a7a7a)); -}`);var mRA=FA('');function TI(t,e){St(e,!1);var A=N(e,"root",9,!1),i=N(e,"insert",9,!1),n=N(e,"selected",9),o=N(e,"onContextMenu",9);Ai(!0);var a,r=mRA();Vi(CA(r),{get data(){return M0}}),ve(()=>{a=$t(r,1,"jse-context-menu-pointer svelte-10ijtzr",null,a,{"jse-root":A(),"jse-insert":i(),"jse-selected":n()}),Mn(r,"title",oG)}),ue("click",r,function(s){for(var g=s.target;g&&g.nodeName!=="BUTTON";)g=g.parentNode;g&&o()({anchor:g,left:0,top:0,width:A2,height:$C,offsetTop:2,offsetLeft:0,showTip:!0})}),lA(t,r),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-key.svelte-1n4cez4 { - display: inline-block; - min-width: 2em; - padding: 0 5px; - box-sizing: border-box; - outline: none; - border-radius: 1px; - vertical-align: top; - color: var(--jse-key-color, #1a1a1a); - word-break: normal; - overflow-wrap: normal; - white-space: pre-wrap; -} -.jse-key.jse-empty.svelte-1n4cez4 { - min-width: 3em; - outline: 1px dotted var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - -moz-outline-radius: 2px; -} -.jse-key.jse-empty.svelte-1n4cez4::after { - pointer-events: none; - color: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - content: "key"; -}`);var pRA=FA('
      '),wRA=FA(" ",1),DRA=FA('
      ');function ZoA(t,e){St(e,!0);var A=Dg(()=>In(e.selection)&&gr(e.selection)),i=Dg(()=>e.context.onRenderValue({path:e.path,value:e.value,mode:e.context.mode,truncateTextSize:e.context.truncateTextSize,readOnly:e.context.readOnly,enforceString:e.enforceString,isEditing:c(A),parser:e.context.parser,normalization:e.context.normalization,selection:e.selection,searchResultItems:e.searchResultItems,onPatch:e.context.onPatch,onPasteJson:e.context.onPasteJson,onSelect:e.context.onSelect,onFind:e.context.onFind,findNextInside:e.context.findNextInside,focus:e.context.focus})),n=bi();Qa(At(n),17,()=>c(i),Na,(o,a)=>{var r=bi(),s=At(r),g=C=>{var I=Dg(()=>c(a).action),d=DRA();vs(d,(B,E)=>{var Q;return(Q=c(I))===null||Q===void 0?void 0:Q(B,E)},()=>c(a).props),lA(C,d)},l=C=>{var I=Dg(()=>c(a).component),d=bi();$nA(At(d),()=>c(I),(B,E)=>{E(B,e1(()=>c(a).props))}),lA(C,d)};TA(s,C=>{_SA(c(a))?C(g):C(l,!1)}),lA(o,r)}),lA(t,n),xt()}var yRA={selecting:!1,selectionAnchor:void 0,selectionAnchorType:void 0,selectionFocus:void 0,dragging:!1};function gL(t){var{json:e,selection:A,deltaY:i,items:n}=t;if(!A)return{operations:void 0,updatedSelection:void 0,offset:0};var o=i<0?(function(l){for(var{json:C,items:I,selection:d,deltaY:B}=l,E=e2(C,d),Q=I.findIndex(F=>Qi(F.path,E)),f=()=>{var F;return(F=I[b-1])===null||F===void 0?void 0:F.height},b=Q,S=0;f()!==void 0&&Math.abs(B)>S+f()/2;)S+=f(),b-=1;var M=I[b].path,D=b-Q;return b!==Q&&I[b]!==void 0?{beforePath:M,offset:D}:void 0})({json:e,selection:A,deltaY:i,items:n}):(function(l){for(var C,{json:I,items:d,selection:B,deltaY:E}=l,Q=i1(I,B),f=d.findIndex(j=>Qi(j.path,Q)),b=0,S=f,M=()=>{var j;return(j=d[S+1])===null||j===void 0?void 0:j.height};M()!==void 0&&Math.abs(E)>b+M()/2;)b+=M(),S+=1;var D=Ki(Q),F=je(I,D),_=Array.isArray(F)?S:S+1,U=(C=d[_])===null||C===void 0?void 0:C.path,J=S-f;return U?{beforePath:U,offset:J}:{append:!0,offset:J}})({json:e,selection:A,deltaY:i,items:n});if(!o||o.offset===0)return{operations:void 0,updatedSelection:void 0,offset:0};var a=(function(l,C,I){if(!C)return[];var d="beforePath"in I?I.beforePath:void 0,B="append"in I?I.append:void 0,E=Ki(ct(C)),Q=je(l,E);if(!(B||d&&W0(d,E)&&d.length>E.length))return[];var f=e2(l,C),b=i1(l,C),S=mi(f),M=mi(b),D=d?d[E.length]:void 0;if(!ia(Q)){if(qo(Q)){var F=Fr(S),_=Fr(M),U=D!==void 0?Fr(D):Q.length;return kS(_-F+1,U({op:"move",from:wt(E.concat(String(F+DA))),path:wt(E.concat(String(U+DA)))}):()=>({op:"move",from:wt(E.concat(String(F))),path:wt(E.concat(String(U)))}))}throw new Error("Cannot create move operations: parent must be an Object or Array")}var J=Object.keys(Q),j=J.indexOf(S),AA=J.indexOf(M),O=B?J.length:D!==void 0?J.indexOf(D):-1;return j!==-1&&AA!==-1&&O!==-1?O>j?[...J.slice(j,AA+1),...J.slice(O,J.length)].map(DA=>a1(E,DA)):[...J.slice(O,j),...J.slice(AA+1,J.length)].map(DA=>a1(E,DA)):[]})(e,A,o),r=Ki(e2(e,A)),s=je(e,r);if(Array.isArray(s)){var g=(function(l){var C,I,{items:d,json:B,selection:E,offset:Q}=l,f=e2(B,E),b=i1(B,E),S=d.findIndex(_=>Qi(_.path,f)),M=d.findIndex(_=>Qi(_.path,b)),D=(C=d[S+Q])===null||C===void 0?void 0:C.path,F=(I=d[M+Q])===null||I===void 0?void 0:I.path;return Ds(D,F)})({items:n,json:e,selection:A,offset:o.offset});return{operations:a,updatedSelection:g,offset:o.offset}}return{operations:a,updatedSelection:void 0,offset:o.offset}}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -button.jse-validation-error.svelte-q6a061 { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - padding: 0; - margin: 0; - vertical-align: top; - display: inline-flex; - color: var(--jse-error-color, #ee5341); -} - -button.jse-validation-info.svelte-q6a061 { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - padding: 0; - margin: 0; - vertical-align: top; - display: inline-flex; - color: var(--jse-info-color, #4f91ff); -} - -button.jse-validation-warning.svelte-q6a061 { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - padding: 0; - margin: 0; - vertical-align: top; - display: inline-flex; - color: var(--jse-warning-color, #fdc539); -}`);var vRA=FA('');function Ch(t,e){St(e,!1);var A=IA(),i=r1("absolute-popup"),n=N(e,"validationError",8),o=N(e,"onExpand",8);RA(()=>G(n()),()=>{R(A,FSA(n())&&n().isChildError?"Contains invalid data":n().message)}),kn(),Ai();var a=vRA();Vi(CA(a),{get data(){return BI}}),Nr(()=>ue("click",a,function(){for(var r,s=arguments.length,g=new Array(s),l=0;lwh?.(r,s),()=>ye({text:c(A)},i)),ve(()=>{var r;return $t(a,1,"jse-validation-".concat((G(n()),(r=EA(()=>n().severity))!==null&&r!==void 0?r:"")),"svelte-q6a061")}),lA(t,a),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-expand.svelte-1qi6rc1 { - width: var(--jse-indent-size, calc(1em + 4px)); - padding: 0; - margin: 0; - border: none; - cursor: pointer; - background: transparent; - color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); - font-size: var(--jse-font-size-mono, 14px); - height: var(--jse-line-height, calc(1em + 4px)); -} -.jse-expand.svelte-1qi6rc1:hover { - opacity: 0.8; -} - -.jse-meta.svelte-1qi6rc1, -.jse-separator.svelte-1qi6rc1, -.jse-index.svelte-1qi6rc1, -.jse-bracket.svelte-1qi6rc1 { - vertical-align: top; - color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); -} - -.jse-index.svelte-1qi6rc1 { - padding: 0 calc(0.5 * var(--jse-padding, 10px)); -} - -.jse-bracket.svelte-1qi6rc1 { - padding: 0 2px; -} -.jse-bracket.jse-expanded.svelte-1qi6rc1 { - padding-right: var(--jse-padding, 10px); -} - -.jse-identifier.svelte-1qi6rc1 { - vertical-align: top; - position: relative; -} - -.jse-json-node.svelte-1qi6rc1 { - position: relative; - color: var(--jse-text-color, #4d4d4d); -} -.jse-json-node.jse-root.svelte-1qi6rc1 { - min-height: 100%; - padding-bottom: 2px; - box-sizing: border-box; -} -.jse-json-node.jse-root.svelte-1qi6rc1 > .jse-contents-outer:where(.svelte-1qi6rc1) > .jse-contents:where(.svelte-1qi6rc1) { - padding-left: 0; -} -.jse-json-node.svelte-1qi6rc1 .jse-props:where(.svelte-1qi6rc1), -.jse-json-node.svelte-1qi6rc1 .jse-items:where(.svelte-1qi6rc1) { - position: relative; -} -.jse-json-node.svelte-1qi6rc1 .jse-header-outer:where(.svelte-1qi6rc1), -.jse-json-node.svelte-1qi6rc1 .jse-footer-outer:where(.svelte-1qi6rc1) { - display: flex; - margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); -} -.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1) { - position: relative; -} -.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1) .jse-meta:where(.svelte-1qi6rc1) > .jse-meta-inner:where(.svelte-1qi6rc1) { - display: flex; - justify-content: center; -} -.jse-json-node.svelte-1qi6rc1 .jse-contents-outer:where(.svelte-1qi6rc1) { - display: flex; - margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); -} -.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), -.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) { - display: flex; - flex-direction: row; - align-items: flex-start; -} -.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) { - padding-left: var(--jse-indent-size, calc(1em + 4px)); - cursor: var(--jse-contents-cursor, pointer); -} -.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1) .jse-value-outer:where(.svelte-1qi6rc1) { - display: inline-flex; -} -.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { - display: inline-flex; - padding-left: calc(var(--jse-indent-size, calc(1em + 4px)) + 5px); -} -.jse-json-node.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), -.jse-json-node.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1), -.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { - background: var(--jse-contents-background-color, transparent); -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area:where(.svelte-1qi6rc1) { - padding: 0 calc(0.5 * var(--jse-padding, 10px)); - flex: 1; -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area.jse-inside:where(.svelte-1qi6rc1) { - display: inline-flex; - align-items: center; -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-selection-area.jse-after:where(.svelte-1qi6rc1) { - display: flex; - align-items: flex-end; -} -.jse-json-node.svelte-1qi6rc1 .jse-context-menu-pointer-anchor:where(.svelte-1qi6rc1) { - position: relative; -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-area:where(.svelte-1qi6rc1) { - display: flex; - position: relative; - z-index: 1; - margin-left: calc(var(--level) * var(--jse-indent-size, calc(1em + 4px))); - max-width: 250px; - min-width: 100px; - height: 0; - margin-right: calc(0.5 * var(--jse-padding, 10px)); - outline: 1px solid; -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-area.jse-hovered:where(.svelte-1qi6rc1) { - outline-color: var(--jse-context-menu-pointer-hover-background, #b2b2b2); -} -.jse-json-node.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1) { - position: relative; -} -.jse-json-node.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1):hover, -.jse-json-node.svelte-1qi6rc1 .jse-value-outer:where(.svelte-1qi6rc1):hover, -.jse-json-node.svelte-1qi6rc1 .jse-meta:where(.svelte-1qi6rc1):hover, -.jse-json-node.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1):hover { - background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); - cursor: var(--jse-contents-cursor, pointer); -} -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer { - background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); - cursor: var(--jse-contents-cursor, pointer); -} -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-value-outer .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-meta .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-header .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-items .jse-contents .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-header .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-props .jse-contents .jse-meta, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer .jse-value-outer, -.jse-json-node.jse-hovered.svelte-1qi6rc1:not(.jse-selected):not(.jse-selected-value) .jse-footer .jse-meta { - background: none; -} -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-header:where(.svelte-1qi6rc1), -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-contents:where(.svelte-1qi6rc1), -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1) { - background: var(--jse-selection-background-color, #d3d3d3); - cursor: var(--jse-contents-selected-cursor, grab); -} -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-key-outer:where(.svelte-1qi6rc1):hover, -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-value-outer:where(.svelte-1qi6rc1):hover, -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-meta:where(.svelte-1qi6rc1):hover, -.jse-json-node.jse-selected.svelte-1qi6rc1 .jse-footer:where(.svelte-1qi6rc1):hover { - background: inherit; - cursor: inherit; -} -.jse-json-node.svelte-1qi6rc1 .jse-key-outer.jse-selected-key:where(.svelte-1qi6rc1) { - background: var(--jse-selection-background-color, #d3d3d3); - cursor: var(--jse-contents-selected-cursor, grab); -} -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-value-outer, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-meta, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-header, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-contents, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-header, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-contents, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-footer { - background: var(--jse-selection-background-color, #d3d3d3); - cursor: var(--jse-contents-selected-cursor, grab); -} -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-value-outer .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-meta .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-header .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-items .jse-contents .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-header .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-props .jse-contents .jse-key-outer:hover, -.jse-json-node.jse-selected-value.svelte-1qi6rc1 .jse-footer .jse-key-outer:hover { - background: inherit; - cursor: inherit; -} -.jse-json-node.jse-readonly.svelte-1qi6rc1 { - --jse-contents-selected-cursor: pointer; -} -.jse-json-node.svelte-1qi6rc1 .jse-insert-area.jse-selected:where(.svelte-1qi6rc1) { - outline-color: var(--jse-context-menu-pointer-background, var(--jse-context-menu-background, #656565)); -}`);var Ko=wv(()=>yRA),bRA=FA('
      :
      '),MRA=FA('
      [
       ',1),kRA=FA('
      [
      ]
      ',1),SRA=FA('
      '),xRA=FA('
      '),RRA=FA('
      '),NRA=FA('
      '),FRA=FA('
      '),_RA=FA(" ",1),LRA=FA('
      '),GRA=FA('
      ',1),KRA=FA('
      ',1),URA=FA('
      :
      '),JRA=FA('
      {
      '),YRA=FA('
      {
      }
      ',1),TRA=FA('
      '),HRA=FA('
      '),zRA=FA('
      '),ORA=FA('
      '),PRA=FA('
      '),jRA=FA('
      '),qRA=FA('
      ',1),VRA=FA('
      ',1),WRA=FA('
      :
      '),ZRA=FA('
      '),XRA=FA('
      '),$RA=FA('
      '),ANA=FA('
      '),eNA=FA('
      ');function KL(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=N(e,"pointer",9),o=N(e,"value",9),a=N(e,"state",9),r=N(e,"validationErrors",9),s=N(e,"searchResults",9),g=N(e,"selection",9),l=N(e,"context",9),C=N(e,"onDragSelectionStart",9),I=Cr("jsoneditor:JSONNode"),d=IA(void 0,!0),B=void 0,E=IA(void 0,!0),Q=IA(void 0,!0),f=IA(void 0,!0),b=IA(void 0,!0),S=IA(void 0,!0),M=IA(void 0,!0),D=IA(void 0,!0);function F(HA){HA.stopPropagation();var uA=nG(HA);l().onExpand(c(Q),!c(f),uA)}function _(){l().onExpand(c(Q),!0)}function U(HA,uA){var ZA=dm(c(Q),Object.keys(o()),HA,uA);return l().onPatch(ZA),mi(Qs(ZA[0].path))}function J(HA){l().onDrag(HA)}function j(HA){Ko().selecting&&(Ko(Ko().selecting=!1),HA.stopPropagation()),l().onDragEnd(),document.removeEventListener("mousemove",J,!0),document.removeEventListener("mouseup",j)}function AA(){var HA;return((HA=l().findElement([]))===null||HA===void 0||(HA=HA.getBoundingClientRect())===null||HA===void 0?void 0:HA.top)||0}function O(HA,uA){var ZA=AA()-HA.initialContentTop;return uA.clientY-HA.initialClientY-ZA}function DA(HA){if(!l().readOnly&&g()){var uA=Ki(ct(g()));if(Qi(c(Q),uA)){var ZA=(function(LA,pA){var Ft=[];function ht(z){var nA=c(Q).concat(z),rA=l().findElement(nA);rA!==void 0&&Ft.push({path:nA,height:rA.clientHeight})}if(Array.isArray(o())){var Ee=l().getJson();if(Ee===void 0)return;var Kt=e2(Ee,LA),Ye=i1(Ee,LA),ze=parseInt(mi(Kt),10),ut=parseInt(mi(Ye),10),Me=pA.find(z=>ze>=z.start&&ut<=z.end);if(!Me)return;var{start:ei,end:Y}=Me;ooA(ei,Math.min(o().length,Y),z=>ht(String(z)))}else Object.keys(o()).forEach(ht);return Ft})(g(),c(S)||gh);if(I("dragSelectionStart",{selection:g(),items:ZA}),ZA){var QA=l().getJson();if(QA!==void 0){var WA=e2(QA,g()),MA=ZA.findIndex(LA=>Qi(LA.path,WA)),{offset:be}=gL({json:QA,selection:l().getSelection(),deltaY:0,items:ZA});R(E,{initialTarget:HA.target,initialClientY:HA.clientY,initialContentTop:AA(),selectionStartIndex:MA,selectionItemsCount:o1(QA,g()).length,items:ZA,offset:be,didMoveItems:!1}),Ko(Ko().dragging=!0),document.addEventListener("mousemove",P,!0),document.addEventListener("mouseup",aA)}}else I("Cannot drag the current selection (probably spread over multiple sections)")}else C()(HA)}}function P(HA){if(c(E)){var uA=l().getJson();if(uA===void 0)return;var ZA=O(c(E),HA),{offset:QA}=gL({json:uA,selection:l().getSelection(),deltaY:ZA,items:c(E).items});QA!==c(E).offset&&(I("drag selection",QA,ZA),R(E,ye(ye({},c(E)),{},{offset:QA,didMoveItems:!0})))}}function aA(HA){if(c(E)){var uA=l().getJson();if(uA===void 0)return;var ZA=O(c(E),HA),{operations:QA,updatedSelection:WA}=gL({json:uA,selection:l().getSelection(),deltaY:ZA,items:c(E).items});if(QA)l().onPatch(QA,(LA,pA)=>({state:pA,selection:WA??g()}));else if(HA.target===c(E).initialTarget&&!c(E).didMoveItems){var MA=W_(HA.target),be=QoA(HA.target);be&&l().onSelect(kiA(MA,be))}R(E,void 0),Ko(Ko().dragging=!1),document.removeEventListener("mousemove",P,!0),document.removeEventListener("mouseup",aA)}}function iA(HA){HA.shiftKey||(HA.stopPropagation(),HA.preventDefault(),l().onSelect(c2(c(Q))))}function BA(HA){HA.shiftKey||(HA.stopPropagation(),HA.preventDefault(),l().onSelect(o2(c(Q))))}function oA(HA){l().onSelect(c2(c(Q))),Mo(),l().onContextMenu(HA)}function sA(HA){l().onSelect(o2(c(Q))),Mo(),l().onContextMenu(HA)}RA(()=>G(n()),()=>{R(Q,Qs(n()))}),RA(()=>G(n()),()=>{R(A,encodeURIComponent(n()))}),RA(()=>G(a()),()=>{R(f,!!eB(a())&&a().expanded)}),RA(()=>(G(o()),G(a())),()=>{R(b,P0(o(),a(),[]))}),RA(()=>G(a()),()=>{R(S,lr(a())?a().visibleSections:void 0)}),RA(()=>G(r()),()=>{var HA;R(M,(HA=r())===null||HA===void 0?void 0:HA.validationError)}),RA(()=>(G(l()),G(g()),c(Q)),()=>{R(D,Xf(l().getJson(),g(),c(Q)))}),RA(()=>c(Q),()=>{R(i,c(Q).length===0)}),kn(),Ai(!0);var hA,YA,ee=eNA(),UA=CA(ee),mA=HA=>{var uA=KRA(),ZA=At(uA),QA=CA(ZA),WA=CA(QA),MA=CA(WA),be=xA=>{Vi(xA,{get data(){return M0}})},LA=xA=>{Vi(xA,{get data(){return WE}})};TA(MA,xA=>{c(f)?xA(be):xA(LA,!1)});var pA=bA(WA,2);Ea(pA,e,"identifier",{},null);var Ft=bA(pA,2),ht=xA=>{lA(xA,bRA())};TA(Ft,xA=>{c(i)||xA(ht)});var Ee=bA(Ft,2),Kt=CA(Ee),Ye=CA(Kt),ze=xA=>{var _A=MRA();Zy(bA(At(_A),2),{children:(Et,et)=>{var Te=ur();ve(()=>{var Le,si;return Rt(Te,"".concat((G(o()),(Le=EA(()=>o().length))!==null&&Le!==void 0?Le:""),` - `).concat((G(o()),(si=EA(()=>o().length===1?"item":"items"))!==null&&si!==void 0?si:"")))}),lA(Et,Te)},$$slots:{default:!0}}),lA(xA,_A)},ut=xA=>{var _A=kRA();Zy(bA(At(_A),2),{onclick:_,children:(Et,et)=>{var Te=ur();ve(()=>{var Le,si;return Rt(Te,"".concat((G(o()),(Le=EA(()=>o().length))!==null&&Le!==void 0?Le:""),` - `).concat((G(o()),(si=EA(()=>o().length===1?"item":"items"))!==null&&si!==void 0?si:"")))}),lA(Et,Te)},$$slots:{default:!0}}),lA(xA,_A)};TA(Ye,xA=>{c(f)?xA(ze):xA(ut,!1)});var Me=bA(Ee,2),ei=xA=>{var _A=SRA();TI(CA(_A),{get root(){return c(i)},selected:!0,get onContextMenu(){return G(l()),EA(()=>l().onContextMenu)}}),lA(xA,_A)};TA(Me,xA=>{G(l()),c(D),G(g()),G(In),G(lo),G(gr),G(Qi),G(ct),c(Q),EA(()=>!l().readOnly&&c(D)&&g()&&(In(g())||lo(g()))&&!gr(g())&&Qi(ct(g()),c(Q)))&&xA(ei)});var Y=bA(QA,2),z=xA=>{Ch(xA,{get validationError(){return c(M)},onExpand:_})};TA(Y,xA=>{c(M),c(f),EA(()=>c(M)&&(!c(f)||!c(M).isChildError))&&xA(z)});var nA=bA(Y,2),rA=xA=>{var _A=xRA();ue("click",_A,iA),lA(xA,_A)},NA=xA=>{var _A=RRA();ue("click",_A,BA),lA(xA,_A)};TA(nA,xA=>{c(f)?xA(rA):xA(NA,!1)});var Ie=bA(ZA,2),Qe=xA=>{var _A=GRA(),Et=At(_A),et=CA(Et),Te=dn=>{var _e,Wi,ui=NRA(),Mi=CA(ui),zi=tt(()=>(c(D),G(tr),G(g()),EA(()=>c(D)&&tr(g()))));TI(Mi,{insert:!0,get selected(){return c(zi)},onContextMenu:oA}),ve(vt=>{_e=$t(ui,1,"jse-insert-area jse-inside svelte-1qi6rc1",null,_e,vt),Mn(ui,"title",$_),Wi=Yl(ui,"",Wi,{"--level":(c(Q),EA(()=>c(Q).length+1))})},[()=>({"jse-hovered":c(d)===Gd,"jse-selected":c(D)&&tr(g())})]),lA(dn,ui)};TA(et,dn=>{G(l()),c(d),G(Gd),c(D),G(tr),G(g()),EA(()=>!l().readOnly&&(c(d)===Gd||c(D)&&tr(g())))&&dn(Te)}),Qa(bA(et,2),1,()=>c(S)||gh,Na,(dn,_e,Wi)=>{var ui=_RA(),Mi=At(ui);Qa(Mi,1,()=>(G(o()),c(_e),c(E),EA(()=>(function(Zi,_t,L){var Ct=_t.start,ci=Math.min(_t.end,Zi.length),Bn=qw(Ct,ci);return L&&L.offset!==0?giA(Bn,L.selectionStartIndex,L.selectionItemsCount,L.offset).map((En,qn)=>({index:En,gutterIndex:qn})):Bn.map(En=>({index:En,gutterIndex:En}))})(o(),c(_e),c(E)))),Zi=>Zi.index,(Zi,_t)=>{var L=tt(()=>(G(lr),G(r()),c(_t),EA(()=>lr(r())?r().items[c(_t).index]:void 0))),Ct=tt(()=>(G(_y),G(l()),G(g()),c(Q),c(_t),EA(()=>_y(l().getJson(),g(),c(Q).concat(String(c(_t).index)))))),ci=bi(),Bn=At(ci),En=tt(()=>(G(V4),G(n()),c(_t),EA(()=>V4(n(),c(_t).index)))),qn=tt(()=>(G(lr),G(a()),c(_t),EA(()=>lr(a())?a().items[c(_t).index]:void 0))),Yo=tt(()=>(G(lr),G(s()),c(_t),EA(()=>lr(s())?s().items[c(_t).index]:void 0)));KL(Bn,{get value(){return G(o()),c(_t),EA(()=>o()[c(_t).index])},get pointer(){return c(En)},get state(){return c(qn)},get validationErrors(){return c(L)},get searchResults(){return c(Yo)},get selection(){return c(Ct)},get context(){return l()},onDragSelectionStart:DA,$$slots:{identifier:(Co,ko)=>{var Zo=FRA(),wo=CA(Zo),ha=CA(wo);ve(()=>Rt(ha,(c(_t),EA(()=>c(_t).gutterIndex)))),lA(Co,Zo)}}}),lA(Zi,ci)});var zi=bA(Mi,2),vt=Zi=>{var _t=tt(()=>c(S)||gh);fRA(Zi,{get visibleSections(){return c(_t)},sectionIndex:Wi,get total(){return G(o()),EA(()=>o().length)},get path(){return c(Q)},get onExpandSection(){return G(l()),EA(()=>l().onExpandSection)},get selection(){return g()},get context(){return l()}})};TA(zi,Zi=>{c(_e),G(o()),EA(()=>c(_e).end{var _e=LRA();ue("click",_e,BA),lA(dn,_e)};TA(si,dn=>{c(i)||dn(gn)}),lA(xA,_A)};TA(Ie,xA=>{c(f)&&xA(Qe)}),ue("click",WA,F),lA(HA,uA)},KA=HA=>{var uA=bi(),ZA=At(uA),QA=MA=>{var be=VRA(),LA=At(be),pA=CA(LA),Ft=CA(pA),ht=CA(Ft),Ee=Le=>{Vi(Le,{get data(){return M0}})},Kt=Le=>{Vi(Le,{get data(){return WE}})};TA(ht,Le=>{c(f)?Le(Ee):Le(Kt,!1)});var Ye=bA(Ft,2);Ea(Ye,e,"identifier",{},null);var ze=bA(Ye,2),ut=Le=>{lA(Le,URA())};TA(ze,Le=>{c(i)||Le(ut)});var Me=bA(ze,2),ei=CA(Me),Y=CA(ei),z=Le=>{lA(Le,JRA())},nA=Le=>{var si=YRA();Zy(bA(At(si),2),{onclick:_,children:(gn,dn)=>{var _e=ur();ve((Wi,ui)=>Rt(_e,"".concat(Wi??"",` - `).concat(ui??"")),[()=>(G(o()),EA(()=>Object.keys(o()).length)),()=>(G(o()),EA(()=>Object.keys(o()).length===1?"prop":"props"))]),lA(gn,_e)},$$slots:{default:!0}}),lA(Le,si)};TA(Y,Le=>{c(f)?Le(z):Le(nA,!1)});var rA=bA(Me,2),NA=Le=>{var si=TRA();TI(CA(si),{get root(){return c(i)},selected:!0,get onContextMenu(){return G(l()),EA(()=>l().onContextMenu)}}),lA(Le,si)};TA(rA,Le=>{G(l()),c(D),G(g()),G(In),G(lo),G(gr),G(Qi),G(ct),c(Q),EA(()=>!l().readOnly&&c(D)&&g()&&(In(g())||lo(g()))&&!gr(g())&&Qi(ct(g()),c(Q)))&&Le(NA)});var Ie=bA(pA,2),Qe=Le=>{Ch(Le,{get validationError(){return c(M)},onExpand:_})};TA(Ie,Le=>{c(M),c(f),EA(()=>c(M)&&(!c(f)||!c(M).isChildError))&&Le(Qe)});var xA=bA(Ie,2),_A=Le=>{var si=HRA();ue("click",si,iA),lA(Le,si)},Et=Le=>{var si=bi(),gn=At(si),dn=_e=>{var Wi=zRA();ue("click",Wi,BA),lA(_e,Wi)};TA(gn,_e=>{c(i)||_e(dn)},!0),lA(Le,si)};TA(xA,Le=>{c(f)?Le(_A):Le(Et,!1)});var et=bA(LA,2),Te=Le=>{var si=qRA(),gn=At(si),dn=CA(gn),_e=zi=>{var vt,Zi,_t=ORA(),L=CA(_t),Ct=tt(()=>(c(D),G(tr),G(g()),EA(()=>c(D)&&tr(g()))));TI(L,{insert:!0,get selected(){return c(Ct)},onContextMenu:oA}),ve(ci=>{vt=$t(_t,1,"jse-insert-area jse-inside svelte-1qi6rc1",null,vt,ci),Mn(_t,"title",$_),Zi=Yl(_t,"",Zi,{"--level":(c(Q),EA(()=>c(Q).length+1))})},[()=>({"jse-hovered":c(d)===Gd,"jse-selected":c(D)&&tr(g())})]),lA(zi,_t)};TA(dn,zi=>{G(l()),c(d),G(Gd),c(D),G(tr),G(g()),EA(()=>!l().readOnly&&(c(d)===Gd||c(D)&&tr(g())))&&zi(_e)}),Qa(bA(dn,2),1,()=>(G(o()),c(E),EA(()=>(function(zi,vt){var Zi=Object.keys(zi);return vt&&vt.offset!==0?giA(Zi,vt.selectionStartIndex,vt.selectionItemsCount,vt.offset):Zi})(o(),c(E)))),Na,(zi,vt)=>{var Zi=tt(()=>(G(V4),G(n()),c(vt),EA(()=>V4(n(),c(vt))))),_t=tt(()=>(G(wg),G(s()),c(vt),EA(()=>wg(s())?s().properties[c(vt)]:void 0))),L=tt(()=>(G(wg),G(r()),c(vt),EA(()=>wg(r())?r().properties[c(vt)]:void 0))),Ct=tt(()=>(c(Q),c(vt),EA(()=>c(Q).concat(c(vt))))),ci=tt(()=>(G(_y),G(l()),G(g()),G(c(Ct)),EA(()=>_y(l().getJson(),g(),c(Ct))))),Bn=bi(),En=At(Bn),qn=tt(()=>(G(wg),G(a()),c(vt),EA(()=>wg(a())?a().properties[c(vt)]:void 0)));KL(En,{get value(){return G(o()),c(vt),EA(()=>o()[c(vt)])},get pointer(){return c(Zi)},get state(){return c(qn)},get validationErrors(){return c(L)},get searchResults(){return c(_t)},get selection(){return c(ci)},get context(){return l()},onDragSelectionStart:DA,$$slots:{identifier:(Yo,Co)=>{var ko,Zo=PRA(),wo=CA(Zo),ha=tt(()=>(G(LiA),G(c(_t)),EA(()=>LiA(c(_t)))));(function(Xo,ra){St(ra,!1);var Do=IA(void 0,!0),re=IA(void 0,!0),di=N(ra,"pointer",9),ln=N(ra,"key",9),Qn=N(ra,"selection",9),To=N(ra,"searchResultItems",9),Ma=N(ra,"onUpdateKey",9),wi=N(ra,"context",9),Io=IA(void 0,!0);function nr(vA){c(re)||wi().readOnly||(vA.preventDefault(),wi().onSelect(dG(c(Io))))}function yo(vA,VA){var me=Ma()(ln(),wi().normalization.unescapeValue(vA)),dA=Ki(c(Io)).concat(me);wi().onSelect(VA===t1.nextInside?Ui(dA):l2(dA)),VA!==t1.self&&wi().focus()}function Pa(){wi().onSelect(l2(c(Io))),wi().focus()}RA(()=>G(di()),()=>{R(Io,Qs(di()))}),RA(()=>(G(Qn()),c(Io)),()=>{R(Do,cr(Qn())&&Qi(Qn().path,c(Io)))}),RA(()=>(c(Do),G(Qn())),()=>{R(re,c(Do)&&gr(Qn()))}),kn(),Ai(!0);var Gn=wRA(),xi=At(Gn),Pt=vA=>{var VA=tt(()=>(G(wi()),G(ln()),EA(()=>wi().normalization.escapeValue(ln())))),me=tt(()=>(G(gr),G(Qn()),EA(()=>gr(Qn())?Qn().initialValue:void 0)));MoA(vA,{get value(){return c(VA)},get initialValue(){return c(me)},label:"Edit key",shortText:!0,onChange:yo,onCancel:Pa,get onFind(){return G(wi()),EA(()=>wi().onFind)}})},Sn=vA=>{var VA,me=pRA(),dA=CA(me),SA=xe=>{var it=tt(()=>(G(wi()),G(ln()),EA(()=>wi().normalization.escapeValue(ln()))));_oA(xe,{get text(){return c(it)},get searchResultItems(){return To()}})},ae=xe=>{var it=ur();ve(st=>Rt(it,st),[()=>(G(fh),G(wi()),G(ln()),EA(()=>fh(wi().normalization.escapeValue(ln()))))]),lA(xe,it)};TA(dA,xe=>{To()?xe(SA):xe(ae,!1)}),ve(()=>VA=$t(me,1,"jse-key svelte-1n4cez4",null,VA,{"jse-empty":ln()===""})),ue("dblclick",me,nr),lA(vA,me)};TA(xi,vA=>{G(wi()),c(re),EA(()=>!wi().readOnly&&c(re))?vA(Pt):vA(Sn,!1)});var Bo=bA(xi,2),So=vA=>{TI(vA,{selected:!0,get onContextMenu(){return G(wi()),EA(()=>wi().onContextMenu)}})};TA(Bo,vA=>{G(wi()),c(Do),c(re),EA(()=>!wi().readOnly&&c(Do)&&!c(re))&&vA(So)}),lA(Xo,Gn),xt()})(wo,{get pointer(){return c(Zi)},get key(){return c(vt)},get selection(){return c(ci)},get searchResultItems(){return c(ha)},get context(){return l()},onUpdateKey:U}),ve(Xo=>ko=$t(Zo,1,"jse-key-outer svelte-1qi6rc1",null,ko,Xo),[()=>({"jse-selected-key":cr(c(ci))&&Qi(c(ci).path,c(Ct))})]),lA(Yo,Zo)}}}),lA(zi,Bn)});var Wi=bA(gn,2),ui=bA(CA(Wi),2),Mi=zi=>{var vt=jRA();ue("click",vt,BA),lA(zi,vt)};TA(ui,zi=>{c(i)||zi(Mi)}),lA(Le,si)};TA(et,Le=>{c(f)&&Le(Te)}),ue("click",Ft,F),lA(MA,be)},WA=MA=>{var be=$RA(),LA=CA(be),pA=CA(LA);Ea(pA,e,"identifier",{},null);var Ft=bA(pA,2),ht=rA=>{lA(rA,WRA())};TA(Ft,rA=>{c(i)||rA(ht)});var Ee=bA(Ft,2),Kt=CA(Ee),Ye=tt(()=>c(D)?g():void 0),ze=tt(()=>(G(GiA),G(s()),EA(()=>GiA(s()))));ZoA(Kt,{get path(){return c(Q)},get value(){return o()},get enforceString(){return c(b)},get selection(){return c(Ye)},get searchResultItems(){return c(ze)},get context(){return l()}});var ut=bA(Ee,2),Me=rA=>{var NA=ZRA();TI(CA(NA),{get root(){return c(i)},selected:!0,get onContextMenu(){return G(l()),EA(()=>l().onContextMenu)}}),lA(rA,NA)};TA(ut,rA=>{G(l()),c(D),G(g()),G(In),G(lo),G(gr),G(Qi),G(ct),c(Q),EA(()=>!l().readOnly&&c(D)&&g()&&(In(g())||lo(g()))&&!gr(g())&&Qi(ct(g()),c(Q)))&&rA(Me)});var ei=bA(LA,2),Y=rA=>{Ch(rA,{get validationError(){return c(M)},onExpand:_})};TA(ei,rA=>{c(M)&&rA(Y)});var z=bA(ei,2),nA=rA=>{var NA=XRA();ue("click",NA,BA),lA(rA,NA)};TA(z,rA=>{c(i)||rA(nA)}),lA(MA,be)};TA(ZA,MA=>{G(pn),G(o()),EA(()=>pn(o()))?MA(QA):MA(WA,!1)},!0),lA(HA,uA)};TA(UA,HA=>{G(o()),EA(()=>Array.isArray(o()))?HA(mA):HA(KA,!1)});var Pe=bA(UA,2),Je=HA=>{var uA,ZA=ANA(),QA=CA(ZA),WA=tt(()=>(c(D),G(yg),G(g()),EA(()=>c(D)&&yg(g()))));TI(QA,{insert:!0,get selected(){return c(WA)},onContextMenu:sA}),ve(MA=>{uA=$t(ZA,1,"jse-insert-area jse-after svelte-1qi6rc1",null,uA,MA),Mn(ZA,"title",$_)},[()=>({"jse-hovered":c(d)===Ny,"jse-selected":c(D)&&yg(g())})]),lA(HA,ZA)};TA(Pe,HA=>{G(l()),c(d),G(Ny),c(D),G(yg),G(g()),EA(()=>!l().readOnly&&(c(d)===Ny||c(D)&&yg(g())))&&HA(Je)}),ve((HA,uA)=>{hA=$t(ee,1,HA,"svelte-1qi6rc1",hA,uA),Mn(ee,"data-path",c(A)),Mn(ee,"aria-selected",c(D)),YA=Yl(ee,"",YA,{"--level":(c(Q),EA(()=>c(Q).length))})},[()=>n1((G(Pc),c(f),G(l()),c(Q),G(o()),EA(()=>Pc("jse-json-node",{"jse-expanded":c(f)},l().onClassName(c(Q),o()))))),()=>({"jse-root":c(i),"jse-selected":c(D)&&lo(g()),"jse-selected-value":c(D)&&In(g()),"jse-readonly":l().readOnly,"jse-hovered":c(d)===IiA})]),ue("mousedown",ee,function(HA){if((HA.buttons===1||HA.buttons===2)&&!((uA=HA.target).nodeName==="DIV"&&uA.contentEditable==="true"||HA.buttons===1&&BoA(HA.target,"BUTTON"))){var uA;HA.stopPropagation(),HA.preventDefault(),l().focus(),document.addEventListener("mousemove",J,!0),document.addEventListener("mouseup",j);var ZA=W_(HA.target),QA=l().getJson(),WA=l().getDocumentState();if(!g()||ZA===no.after||ZA===no.inside||g().type!==ZA&&g().type!==no.multi||!Xf(QA,g(),c(Q)))if(Ko(Ko().selecting=!0),Ko(Ko().selectionAnchor=c(Q)),Ko(Ko().selectionAnchorType=ZA),Ko(Ko().selectionFocus=c(Q)),HA.shiftKey){var MA=l().getSelection();MA&&l().onSelect(Ds(jd(MA),c(Q)))}else if(ZA===no.multi)if(c(i)&&HA.target.hasAttribute("data-path")){var be=mi(woA(o(),WA));l().onSelect(SL(be))}else l().onSelect(Ds(c(Q),c(Q)));else QA!==void 0&&l().onSelect(kiA(ZA,c(Q)));else HA.button===0&&C()(HA)}}),ue("mousemove",ee,function(HA){if(Ko().selecting){HA.preventDefault(),HA.stopPropagation(),Ko().selectionFocus===void 0&&window.getSelection&&window.getSelection().empty();var uA=W_(HA.target);Qi(c(Q),Ko().selectionFocus)&&uA===Ko().selectionAnchorType||(Ko(Ko().selectionFocus=c(Q)),Ko(Ko().selectionAnchorType=uA),l().onSelect(Ds(Ko().selectionAnchor||Ko().selectionFocus,Ko().selectionFocus)))}}),ue("mouseover",ee,function(HA){Ko().selecting||Ko().dragging||(HA.stopPropagation(),VI(HA.target,"data-type","selectable-value")?R(d,IiA):VI(HA.target,"data-type","selectable-key")?R(d,void 0):VI(HA.target,"data-type","insert-selection-area-inside")?R(d,Gd):VI(HA.target,"data-type","insert-selection-area-after")&&R(d,Ny),clearTimeout(B))}),ue("mouseout",ee,function(HA){HA.stopPropagation(),B=window.setTimeout(()=>R(d,void 0))}),lA(t,ee),xt()}var XoA={prefix:"fas",iconName:"jsoneditor-expand",icon:[512,512,[],"","M 0,448 V 512 h 512 v -64 z M 0,0 V 64 H 512 V 0 Z M 256,96 128,224 h 256 z M 256,416 384,288 H 128 Z"]},$oA={prefix:"fas",iconName:"jsoneditor-collapse",icon:[512,512,[],"","m 0,224 v 64 h 512 v -64 z M 256,192 384,64 H 128 Z M 256,320 128,448 h 256 z"]},ViA={prefix:"fas",iconName:"jsoneditor-format",icon:[512,512,[],"","M 0,32 v 64 h 416 v -64 z M 160,160 v 64 h 352 v -64 z M 160,288 v 64 h 288 v -64 z M 0,416 v 64 h 320 v -64 z"]},tNA={prefix:"fas",iconName:"jsoneditor-compact",icon:[512,512,[],"","M 0,32 v 64 h 512 v -64 z M 0,160 v 64 h 512 v -64 z M 0,288 v 64 h 352 v -64 z"]};qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-welcome.svelte-1lhnan { - flex: 1; - overflow: auto; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - display: flex; - flex-direction: column; - align-items: center; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-welcome.svelte-1lhnan:last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-welcome.svelte-1lhnan .jse-space.jse-before:where(.svelte-1lhnan) { - flex: 1; -} -.jse-welcome.svelte-1lhnan .jse-space.jse-after:where(.svelte-1lhnan) { - flex: 2; -} -.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) { - display: flex; - flex-direction: column; - max-width: 300px; - margin: 2em var(--jse-padding, 10px); - gap: var(--jse-padding, 10px); -} -.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) .jse-welcome-info:where(.svelte-1lhnan) { - color: var(--jse-panel-color-readonly, #b2b2b2); -} -.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-welcome.svelte-1lhnan .jse-contents:where(.svelte-1lhnan) button:where(.svelte-1lhnan):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -}`);var iNA=FA('
      You can paste clipboard data using Ctrl+V, or use the following options:
      ',1),nNA=FA('
      Empty document
      ');function UL(t,e){var A=typeof t=="string"?t.toLowerCase():t,i=typeof e=="string"?e.toLowerCase():e;return(0,inA.default)(A,i)}function AaA(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1,n=je(t,e);if(qo(n)){if(A===void 0)throw new Error("Cannot sort: no property selected by which to sort the array");return(function(o){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1,g=(function(C,I){var d={boolean:0,number:1,string:2,undefined:4},B=3;return function(E,Q){var f=je(E,C),b=je(Q,C);if(typeof f!=typeof b){var S,M,D=(S=d[typeof f])!==null&&S!==void 0?S:B,F=(M=d[typeof b])!==null&&M!==void 0?M:B;return D>F?I:Db?I:f1&&arguments[1]!==void 0?arguments[1]:[],r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,s=je(o,a),g=Object.keys(s).slice();g.sort((C,I)=>r*UL(C,I));var l={};return g.forEach(C=>l[C]=s[C]),[{op:"replace",path:wt(a),value:l}]})(t,e,i);throw new Error("Cannot sort: no array or object")}sm(["click"]);qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-navigation-bar-dropdown.svelte-1k47orx { - position: absolute; - top: 100%; - left: 0; - z-index: 3; - background: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); - color: var(--jse-navigation-bar-dropdown-color, #656565); - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); - display: flex; - flex-direction: column; - max-height: 300px; - overflow: auto; - min-width: 80px; -} -.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx) { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - border: none; - background: transparent; - color: inherit; - cursor: pointer; - outline: none; - text-align: left; - white-space: nowrap; - box-sizing: border-box; - padding: calc(0.5 * var(--jse-padding, 10px)) 36px; -} -.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx):focus, .jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item:where(.svelte-1k47orx):hover { - background: var(--jse-navigation-bar-background-highlight, #e5e5e5); -} -.jse-navigation-bar-dropdown.svelte-1k47orx button.jse-navigation-bar-dropdown-item.jse-selected:where(.svelte-1k47orx) { - background: var(--jse-navigation-bar-dropdown-color, #656565); - color: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); -}`);var oNA=FA(''),aNA=FA(''),rNA=FA('
      ');function sNA(t,e){St(e,!1);var A=N(e,"items",9),i=N(e,"selectedItem",9),n=N(e,"onSelect",9);Ai(!0);var o=rNA(),a=CA(o);Qa(a,1,()=>(G(iv),G(A()),EA(()=>iv(A(),100))),g=>g,(g,l)=>{var C,I=oNA(),d=CA(I);ve((B,E)=>{C=$t(I,1,"jse-navigation-bar-dropdown-item svelte-1k47orx",null,C,{"jse-selected":c(l)===i()}),Mn(I,"title",B),Rt(d,E)},[()=>(c(l),EA(()=>c(l).toString())),()=>(G(XC),c(l),EA(()=>XC(c(l).toString(),30)))]),ue("click",I,VC(()=>n()(c(l)))),lA(g,I)});var r=bA(a,2),s=g=>{var l=aNA();Mn(l,"title","Limited to 100 items"),lA(g,l)};TA(r,g=>{G(A()),EA(()=>A().length>100)&&g(s)}),lA(t,o),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-navigation-bar-item.svelte-13sijxb { - position: relative; - display: flex; -} -.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb) { - font-family: inherit; - font-size: inherit; - padding: calc(0.5 * var(--jse-padding, 10px)) 2px; - border: none; - background: transparent; - color: inherit; - cursor: pointer; - outline: none; - min-width: 2em; - white-space: nowrap; -} -.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb):focus, .jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button:where(.svelte-13sijxb):hover { - background: var(--jse-panel-button-background-highlight, #e0e0e0); - color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); -} -.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button.jse-navigation-bar-arrow:where(.svelte-13sijxb) { - padding: 2px var(--jse-padding, 10px) 0; -} -.jse-navigation-bar-item.svelte-13sijxb button.jse-navigation-bar-button.jse-navigation-bar-arrow.jse-open:where(.svelte-13sijxb) { - background: var(--jse-navigation-bar-background, var(--jse-background-color, #fff)); - color: var(--jse-navigation-bar-dropdown-color, #656565); -} -.jse-navigation-bar-item.svelte-13sijxb:last-child { - padding-right: var(--jse-padding, 10px); -}`);var gNA=FA(''),lNA=FA('
      ');function WiA(t,e){St(e,!1);var A,i=IA(void 0,!0),n=IA(void 0,!0),{openAbsolutePopup:o,closeAbsolutePopup:a}=r1("absolute-popup"),r=N(e,"path",9),s=N(e,"index",9),g=N(e,"onSelect",9),l=N(e,"getItems",9),C=IA(void 0,!0),I=IA(!1,!0);function d(S){a(A),g()(c(i).concat(S))}RA(()=>(G(r()),G(s())),()=>{R(i,r().slice(0,s()))}),RA(()=>(G(r()),G(s())),()=>{R(n,r()[s()])}),kn(),Ai(!0);var B,E=lNA(),Q=CA(E);Vi(CA(Q),{get data(){return US}});var f=bA(Q,2),b=S=>{var M=gNA(),D=CA(M);ve(()=>Rt(D,c(n))),ue("click",M,()=>d(c(n))),lA(S,M)};TA(f,S=>{c(n)!==void 0&&S(b)}),Jo(E,S=>R(C,S),()=>c(C)),ve(()=>B=$t(Q,1,"jse-navigation-bar-button jse-navigation-bar-arrow svelte-13sijxb",null,B,{"jse-open":c(I)})),ue("click",Q,function(){if(c(C)){R(I,!0);var S={items:l()(c(i)),selectedItem:c(n),onSelect:d};A=o(sNA,S,{anchor:c(C),closeOnOuterClick:!0,onClose:()=>{R(I,!1)}})}}),lA(t,E),xt()}function uG(t){var e,A;if(navigator.clipboard)return navigator.clipboard.writeText(t);if((e=(A=document).queryCommandSupported)!==null&&e!==void 0&&e.call(A,"copy")){var i=document.createElement("textarea");i.value=t,i.style.position="fixed",i.style.opacity="0",document.body.appendChild(i),i.select();try{document.execCommand("copy")}catch(n){console.error(n)}finally{document.body.removeChild(i)}return Promise.resolve()}return console.error("Copy failed."),Promise.resolve()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-navigation-bar-path-editor.svelte-uyexy4 { - flex: 1; - display: flex; - border: var(--jse-edit-outline, 2px solid #656565); - background: var(--jse-background-color, #fff); -} -.jse-navigation-bar-path-editor.svelte-uyexy4 input.jse-navigation-bar-text:where(.svelte-uyexy4) { - flex: 1; - font-family: inherit; - font-size: inherit; - padding: 0 5px 1px; - background: var(--jse-background-color, #fff); - color: var(--jse-text-color, #4d4d4d); - border: none; - outline: none; -} -.jse-navigation-bar-path-editor.svelte-uyexy4 button:where(.svelte-uyexy4) { - border: none; - background: var(--jse-background-color, #fff); - cursor: pointer; - font-family: inherit; - font-size: 80%; - color: inherit; -} -.jse-navigation-bar-path-editor.svelte-uyexy4 button.jse-navigation-bar-copy.copied:where(.svelte-uyexy4) { - color: var(--message-success-background, #9ac45d); -} -.jse-navigation-bar-path-editor.svelte-uyexy4 button.jse-navigation-bar-validation-error:where(.svelte-uyexy4) { - color: var(--jse-error-color, #ee5341); -} -.jse-navigation-bar-path-editor.error.svelte-uyexy4 { - border-color: var(--jse-error-color, #ee5341); -} -.jse-navigation-bar-path-editor.error.svelte-uyexy4 input.jse-navigation-bar-text:where(.svelte-uyexy4) { - color: var(--jse-error-color, #ee5341); -} -.jse-navigation-bar-path-editor.svelte-uyexy4 .jse-copied-text:where(.svelte-uyexy4) { - background: var(--message-success-background, #9ac45d); - color: var(--jse-message-success-color, #fff); - position: relative; - margin: 2px; - padding: 0 5px; - border-radius: 3px; -}`);var cNA=FA(''),CNA=FA('
      Copied!
      '),INA=FA('
      ');function dNA(t,e){St(e,!1);var A=IA(),i=r1("absolute-popup"),n=N(e,"path",8),o=N(e,"pathParser",8),a=N(e,"onChange",8),r=N(e,"onClose",8),s=N(e,"onError",8),g=N(e,"pathExists",8),l=IA(),C=IA(),I=IA(!1),d=void 0,B=IA(!1);function E(){c(l).focus()}function Q(j){try{var AA=o().parse(j);return(function(O){if(!g()(O))throw new Error("Path does not exist in current document")})(AA),{path:AA,error:void 0}}catch(O){return{path:void 0,error:O}}}is(()=>{E()}),Hl(()=>{clearTimeout(d)}),RA(()=>(G(o()),G(n())),()=>{R(C,o().stringify(n()))}),RA(()=>(c(I),c(C)),()=>{R(A,c(I)?Q(c(C)).error:void 0)}),kn(),Ai();var f,b=INA(),S=CA(b);Jo(S,j=>R(l,j),()=>c(l));var M=bA(S,2),D=j=>{var AA=cNA();Vi(CA(AA),{get data(){return BI}}),vs(AA,(O,DA)=>wh?.(O,DA),()=>ye({text:String(c(A)||"")},i)),lA(j,AA)};TA(M,j=>{c(A)&&j(D)});var F=bA(M,2),_=j=>{lA(j,CNA())};TA(F,j=>{c(B)&&j(_)});var U,J=bA(F,2);Vi(CA(J),{get data(){return xC}}),ve(()=>{f=$t(b,1,"jse-navigation-bar-path-editor svelte-uyexy4",null,f,{error:c(A)}),AB(S,c(C)),U=$t(J,1,"jse-navigation-bar-copy svelte-uyexy4",null,U,{copied:c(B)})}),ue("keydown",S,VC(function(j){var AA=g2(j);if(AA==="Escape"&&(j.preventDefault(),r()()),AA==="Enter"){j.preventDefault(),R(I,!0);var O=Q(c(C));O.path!==void 0?a()(O.path):s()(O.error)}})),ue("input",S,function(j){R(C,j.currentTarget.value)}),ue("click",J,function(){uG(c(C)),R(B,!0),d=window.setTimeout(()=>R(B,!1),1e3),E()}),lA(t,b),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-navigation-bar.svelte-hjhal6 { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - background: var(--jse-panel-background, #ebebeb); - color: var(--jse-panel-button-color, inherit); - padding: 0; - margin: 0; - display: flex; - overflow: auto; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6) { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); - color: var(--jse-panel-color-readonly, #b2b2b2); - background: transparent; - border: none; - display: flex; - cursor: pointer; - outline: none; - align-items: center; -} -.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit.flex:where(.svelte-hjhal6) { - flex: 1; -} -.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6):focus, .jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6):hover, .jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit.editing:where(.svelte-hjhal6) { - background: var(--jse-panel-button-background-highlight, #e0e0e0); - color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); - transition: color 0.2s ease-in, background 0.2s ease-in; -} -.jse-navigation-bar.svelte-hjhal6 .jse-navigation-bar-edit:where(.svelte-hjhal6) .jse-navigation-bar-space:where(.svelte-hjhal6) { - flex: 1; - text-align: left; -}`);var BNA=FA(" ",1),ENA=FA('
      ');function QNA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=Cr("jsoneditor:NavigationBar"),o=N(e,"json",9),a=N(e,"selection",9),r=N(e,"onSelect",9),s=N(e,"onError",9),g=N(e,"pathParser",9),l=IA(void 0,!0),C=IA(!1,!0);function I(AA){n("get items for path",AA);var O=je(o(),AA);if(Array.isArray(O))return qw(0,O.length).map(String);if(pn(O)){var DA=Object.keys(O).slice(0);return DA.sort(UL),DA}return[]}function d(AA){return br(o(),AA)}function B(AA){n("select path",JSON.stringify(AA)),r()(Ds(AA,AA))}function E(){R(C,!1)}function Q(AA){E(),B(AA)}RA(()=>(G(a()),ct),()=>{R(A,a()?ct(a()):[])}),RA(()=>(G(o()),c(A)),()=>{R(i,aa(je(o(),c(A))))}),RA(()=>c(A),()=>{c(A),setTimeout(()=>{if(c(l)&&c(l).scrollTo){var AA=c(l).scrollWidth-c(l).clientWidth;AA>0&&(n("scrollTo ",AA),c(l).scrollTo({left:AA,behavior:"smooth"}))}})}),kn(),Ai(!0);var f=ENA(),b=CA(f),S=AA=>{var O=BNA(),DA=At(O);Qa(DA,1,()=>c(A),Na,(iA,BA,oA)=>{WiA(iA,{getItems:I,get path(){return c(A)},index:oA,onSelect:B})});var P=bA(DA,2),aA=iA=>{WiA(iA,{getItems:I,get path(){return c(A)},get index(){return c(A),EA(()=>c(A).length)},onSelect:B})};TA(P,iA=>{c(i)&&iA(aA)}),lA(AA,O)},M=AA=>{dNA(AA,{get path(){return c(A)},onClose:E,onChange:Q,get onError(){return s()},pathExists:d,get pathParser(){return g()}})};TA(b,AA=>{c(C)?AA(M,!1):AA(S)});var D,F=bA(b,2),_=CA(F),U=CA(_),J=bA(_,2),j=tt(()=>c(C)?gV:nV);Vi(J,{get data(){return c(j)}}),Jo(f,AA=>R(l,AA),()=>c(l)),ve(AA=>{D=$t(F,1,"jse-navigation-bar-edit svelte-hjhal6",null,D,{flex:!c(C),editing:c(C)}),Mn(F,"title",c(C)?"Cancel editing the selected path":"Edit the selected path"),Rt(U,AA)},[()=>(G(aa),G(o()),c(C),EA(()=>aa(o())||c(C)?"\xA0":"Navigation bar"))]),ue("click",F,function(){R(C,!c(C))}),lA(t,f),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-search-box.svelte-1x1x8q0 { - border: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); - border-radius: 3px; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - background: var(--jse-panel-background, #ebebeb); - color: var(--jse-panel-color-readonly, #b2b2b2); - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); - display: inline-block; - width: 400px; - max-width: 100%; - overflow: auto; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) { - display: flex; - align-items: stretch; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0), -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) input:where(.svelte-1x1x8q0) { - font-family: inherit; - font-size: inherit; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0) { - display: block; - text-align: center; - border: none; - padding: 0 5px; - margin: 0; - cursor: pointer; - color: var(--jse-panel-button-color, inherit); - background: var(--jse-panel-button-background, transparent); -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0):hover { - color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); - background: var(--jse-panel-button-background-highlight, #e0e0e0); -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) input:where(.svelte-1x1x8q0) { - color: var(--jse-panel-color, var(--jse-text-color, #4d4d4d)); - border: var(--jse-input-border, 1px solid #d8dbdf); - border-radius: 3px; - background: var(--jse-input-background, var(--jse-background-color, #fff)); - height: 28px; - padding: 0 5px; - margin: 0; - flex: 1; - width: 0; - min-width: 50px; - outline: none; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-replace-toggle:where(.svelte-1x1x8q0) { - padding: var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)); - min-width: 20px; - background: var(--jse-panel-button-background-highlight, #e0e0e0); -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) { - flex: 1; - display: flex; - flex-direction: column; - padding: calc(0.5 * var(--jse-padding, 10px)); - gap: calc(0.5 * var(--jse-padding, 10px)); -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) { - flex: 1; - display: flex; - align-items: center; - position: relative; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-icon:where(.svelte-1x1x8q0) { - color: inherit; - cursor: inherit; - background: inherit; - width: 32px; - text-align: center; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) label.jse-search-input-label:where(.svelte-1x1x8q0) { - flex: 1; - display: flex; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-count:where(.svelte-1x1x8q0) { - color: inherit; - font-size: 80%; - visibility: hidden; - padding: 0 5px; - min-width: 36px; - text-align: center; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-search-section:where(.svelte-1x1x8q0) .jse-search-count.jse-visible:where(.svelte-1x1x8q0) { - visibility: visible; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-replace-section:where(.svelte-1x1x8q0) { - flex: 1; - display: flex; - padding-left: 32px; -} -.jse-search-box.svelte-1x1x8q0 .jse-search-form:where(.svelte-1x1x8q0) .jse-search-contents:where(.svelte-1x1x8q0) .jse-replace-section:where(.svelte-1x1x8q0) button:where(.svelte-1x1x8q0) { - width: auto; -}`);var hNA=FA(''),uNA=FA('
      '),fNA=FA('');function eaA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=Cr("jsoneditor:SearchBox"),a=N(e,"json",9),r=N(e,"documentState",9),s=N(e,"parser",9),g=N(e,"showSearch",9),l=N(e,"showReplace",13),C=N(e,"readOnly",9),I=N(e,"columns",9),d=N(e,"onSearch",9),B=N(e,"onFocus",9),E=N(e,"onPatch",9),Q=N(e,"onClose",9),f=IA("",!0),b="",S=IA("",!0),M=IA(!1,!0),D=IA(void 0,!0),F=qE(function(MA){return KA.apply(this,arguments)},300),_=qE(function(MA){return Pe.apply(this,arguments)},300);function U(){l(!l()&&!C())}function J(MA){MA.stopPropagation();var be=g2(MA);be==="Enter"&&(MA.preventDefault(),c(f)!==b?F.flush():oA()),be==="Shift+Enter"&&(MA.preventDefault(),hA()),be==="Ctrl+Enter"&&(MA.preventDefault(),l()?DA():oA()),be==="Ctrl+H"&&(MA.preventDefault(),U()),be==="Escape"&&(MA.preventDefault(),uA())}function j(MA){g2(MA)==="Enter"&&(MA.preventDefault(),MA.stopPropagation(),DA())}function AA(){return O.apply(this,arguments)}function O(){return(O=Tt(function*(){Mo(),yield F.flush()})).apply(this,arguments)}function DA(){return P.apply(this,arguments)}function P(){return(P=Tt(function*(){var MA;if(!C()){var be=(MA=c(D))===null||MA===void 0?void 0:MA.activeItem;if(o("handleReplace",{replaceText:c(S),activeItem:be}),c(D)&&be&&a()!==void 0){R(D,ye(ye({},xiA(c(D))),{},{activeIndex:c(i)}));var{operations:LA,newSelection:pA}=USA(a(),r(),c(S),be,s());E()(LA,(Ft,ht)=>({state:ht,selection:pA})),Mo(),yield _.flush(),yield ee()}}})).apply(this,arguments)}function aA(){return iA.apply(this,arguments)}function iA(){return(iA=Tt(function*(){if(!C()){o("handleReplaceAll",{text:c(f),replaceText:c(S)});var{operations:MA,newSelection:be}=(function(LA,pA,Ft,ht,Ee){for(var Kt=RiA(Ft,LA,{maxResults:1/0}),Ye=[],ze=0;zez.field!==nA.field?z.field===Yc.key?1:-1:nA.path.length-z.path.length);var ei,Y=[];return Ye.forEach(z=>{var{field:nA,path:rA,items:NA}=z;if(nA===Yc.key){var Ie=Ki(rA),Qe=je(LA,Ie),xA=mi(rA),_A=dm(Ie,Object.keys(Qe),xA,FiA(xA,ht,NA));Y=Y.concat(_A),ei=ph(LA,_A)}else{if(nA!==Yc.value)throw new Error("Cannot replace: unknown type of search result field ".concat(nA));var Et=je(LA,rA);if(Et===void 0)throw new Error("Cannot replace: path not found ".concat(wt(rA)));var et=typeof Et=="string"?Et:String(Et),Te=P0(LA,pA,rA),Le=FiA(et,ht,NA),si=[{op:"replace",path:wt(rA),value:Te?Le:Rh(Le,Ee)}];Y=Y.concat(si),ei=ph(LA,si)}}),{operations:Y,newSelection:ei}})(a(),r(),c(f),c(S),s());E()(MA,(LA,pA)=>({state:pA,selection:be})),yield ee()}})).apply(this,arguments)}function BA(MA){MA.select()}function oA(){return sA.apply(this,arguments)}function sA(){return(sA=Tt(function*(){R(D,c(D)?xiA(c(D)):void 0),yield ee()})).apply(this,arguments)}function hA(){return YA.apply(this,arguments)}function YA(){return YA=Tt(function*(){R(D,c(D)?(function(MA){var be=MA.activeIndex>0?MA.activeIndex-1:MA.items.length-1,LA=MA.items[be],pA=MA.items.map((Ft,ht)=>ye(ye({},Ft),{},{active:ht===be}));return ye(ye({},MA),{},{items:pA,activeItem:LA,activeIndex:be})})(c(D)):void 0),yield ee()}),YA.apply(this,arguments)}function ee(){return UA.apply(this,arguments)}function UA(){return(UA=Tt(function*(){var MA;o("handleFocus",c(D));var be=(MA=c(D))===null||MA===void 0?void 0:MA.activeItem;be&&a()!==void 0&&(yield B()(be.path,be.resultIndex))})).apply(this,arguments)}function mA(){return mA=Tt(function*(MA){yield Je(MA,c(f),a())}),mA.apply(this,arguments)}function KA(){return KA=Tt(function*(MA){yield Je(g(),MA,a()),yield ee()}),KA.apply(this,arguments)}function Pe(){return Pe=Tt(function*(MA){yield Je(g(),c(f),MA)}),Pe.apply(this,arguments)}function Je(MA,be,LA){return HA.apply(this,arguments)}function HA(){return HA=Tt(function*(MA,be,LA){return MA?(o("applySearch",{showSearch:MA,text:be}),be===""?(o("clearing search result"),c(D)!==void 0&&R(D,void 0),Promise.resolve()):(b=be,R(M,!0),new Promise(pA=>{setTimeout(()=>{var Ft=RiA(be,LA,{maxResults:Z_,columns:I()});R(D,(function(ht,Ee){var Kt=Ee!=null&&Ee.activeItem?_iA(Ee.activeItem):void 0,Ye=ht.findIndex(Me=>Qi(Kt,_iA(Me))),ze=Ye!==-1?Ye:Ee?.activeIndex!==void 0&&Ee?.activeIndex0?0:-1,ut=ht.map((Me,ei)=>ye(ye({resultIndex:ei},Me),{},{active:ei===ze}));return{items:ut,activeItem:ut[ze],activeIndex:ze}})(Ft,c(D))),R(M,!1),pA()})}))):(c(D)&&R(D,void 0),Promise.resolve())}),HA.apply(this,arguments)}function uA(){o("handleClose"),F.cancel(),_.cancel(),Je(!1,c(f),a()),Q()()}RA(()=>c(D),()=>{var MA;R(A,((MA=c(D))===null||MA===void 0||(MA=MA.items)===null||MA===void 0?void 0:MA.length)||0)}),RA(()=>c(D),()=>{var MA;R(i,((MA=c(D))===null||MA===void 0?void 0:MA.activeIndex)||0)}),RA(()=>(c(A),Z_),()=>{R(n,c(A)>=Z_?"".concat(999,"+"):String(c(A)))}),RA(()=>(G(d()),c(D)),()=>{d()(c(D))}),RA(()=>G(g()),()=>{(function(MA){mA.apply(this,arguments)})(g())}),RA(()=>c(f),()=>{F(c(f))}),RA(()=>G(a()),()=>{_(a())}),kn(),Ai(!0);var ZA=bi(),QA=At(ZA),WA=MA=>{var be=fNA(),LA=CA(be),pA=CA(LA),Ft=xA=>{var _A=hNA(),Et=CA(_A),et=tt(()=>l()?M0:WE);Vi(Et,{get data(){return c(et)}}),ue("click",_A,U),lA(xA,_A)};TA(pA,xA=>{C()||xA(Ft)});var ht=CA(bA(pA,2)),Ee=CA(ht),Kt=CA(Ee),Ye=xA=>{Vi(xA,{get data(){return iV},spin:!0})},ze=xA=>{Vi(xA,{get data(){return g3}})};TA(Kt,xA=>{c(M)?xA(Ye):xA(ze,!1)});var ut=bA(Ee,2),Me=CA(ut);Nr(()=>tv(Me,()=>c(f),xA=>R(f,xA))),vs(Me,xA=>BA?.(xA)),Nr(()=>ue("paste",Me,AA));var ei,Y=bA(ut,2),z=CA(Y),nA=bA(Y,2);Vi(CA(nA),{get data(){return lV}});var rA=bA(nA,2);Vi(CA(rA),{get data(){return tV}});var NA=bA(rA,2);Vi(CA(NA),{get data(){return c3}});var Ie=bA(ht,2),Qe=xA=>{var _A=uNA(),Et=CA(_A),et=bA(Et,2),Te=bA(et,2);tv(Et,()=>c(S),Le=>R(S,Le)),ue("keydown",Et,j),ue("click",et,DA),ue("click",Te,aA),lA(xA,_A)};TA(Ie,xA=>{l()&&!C()&&xA(Qe)}),ve(()=>{var xA;ei=$t(Y,1,"jse-search-count svelte-1x1x8q0",null,ei,{"jse-visible":c(f)!==""}),Rt(z,"".concat(c(i)!==-1&&c(i){g()&&MA(WA)}),lA(t,ZA),xt()}var tm=Symbol("path");function mNA(t,e){var A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1/0,i={};Array.isArray(t)&&(function(o,a,r){if(o.length1?(o.length-1)/(a-1):o.length,g=0;g{pn(o)?taA(o,i,e):i[tm]=!0});var n=[];return tm in i&&n.push([]),iaA(i,[],n,e),n}function taA(t,e,A){for(var i in t){var n=t[i],o=e[i]||(e[i]={});pn(n)&&A?taA(n,o,A):o[tm]===void 0&&(o[tm]=!0)}}function iaA(t,e,A,i){for(var n in t){var o=e.concat(n),a=t[n];a&&a[tm]===!0&&A.push(o),ia(a)&&i&&iaA(a,o,A,i)}}function pNA(t,e,A,i,n,o){for(var a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:80,r=qo(A)?A.length:0,s=(function(b,S){var M=Object.values(b);if(qi(M))return S;var D=(F,_)=>F+_;return M.reduce(D)/M.length})(i,n),g=t-a,l=e+2*a,C=b=>i[b]||n,I=0,d=o;d0&&(d-=C(--I));for(var B=I,E=0;EW0(i,o))}}function Kd(t,e){var{rowIndex:A,columnIndex:i}=t;return[String(A),...e[i]]}function wNA(t,e){var[A,i]=vS(t,a=>XL(a.path[0])),n=DS(A,DNA),o=yS(n,a=>{var r={row:[],columns:{}};return a.forEach(s=>{var g=(function(l,C){var I=Ll(l.path,C);return I.columnIndex!==-1?I.columnIndex:-1})(s,e);g!==-1?(r.columns[g]===void 0&&(r.columns[g]=[]),r.columns[g].push(s)):r.row.push(s)}),r});return{root:i,rows:o}}function VQ(t,e){if(e&&e.length!==0)return e.length===1?e[0]:{path:t,message:"Multiple validation issues: "+e.map(A=>vg(A.path)+" "+A.message).join(", "),severity:Jc.warning}}function DNA(t){return parseInt(t.path[0],10)}function yNA(t,e,A){var i=e.some(n=>(function(o,a,r){if(!o)return!1;if(a.op==="replace"){var s=Qs(a.path),{rowIndex:g,columnIndex:l}=Ll(s,r),C=r.findIndex(I=>Qi(I,o.path));if(g!==-1&&l!==-1&&l!==C)return!1}return!0})(t,n,A));return i?void 0:t}var ys=Cr("jsoneditor:actions");function naA(t){return JL.apply(this,arguments)}function JL(){return JL=Tt(function*(t){var{json:e,selection:A,indentation:i,readOnly:n,parser:o,onPatch:a}=t;if(!n&&e!==void 0&&A&&ih(A)){var r=voA(e,A,i,o);if(r!==void 0){ys("cut",{selection:A,clipboard:r,indentation:i}),yield uG(r);var{operations:s,newSelection:g}=RoA(e,A);a(s,(l,C)=>({state:C,selection:g}))}}}),JL.apply(this,arguments)}function oaA(t){return YL.apply(this,arguments)}function YL(){return YL=Tt(function*(t){var{json:e,selection:A,indentation:i,parser:n}=t,o=voA(e,A,i,n);o!==void 0&&(ys("copy",{clipboard:o,indentation:i}),yield uG(o))}),YL.apply(this,arguments)}function aaA(t){var{clipboardText:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onChangeText:r,onPasteMultilineText:s,openRepairModal:g}=t;if(!n)try{l(e)}catch{g(e,I=>{ys("repaired pasted text: ",I),l(I)})}function l(C){if(A!==void 0){var I=i||Ui([]),d=xoA(A,I,C,o),B=(function(E,Q,f){var b=arguments.length>3&&arguments[3]!==void 0?arguments[3]:xSA;if(E.length>b)return!1;var S=/\n/.test(E);if(!S)return!1;var M=Q.some(F=>F.op==="replace"&&Array.isArray(F.value)),D=Q.filter(F=>F.op==="add").length>1;if(!M&&!D)return!1;try{return lm(E,f.parse),!1}catch{return!0}})(e,d,o);ys("paste",{pastedText:C,operations:d,ensureSelection:I,pasteMultilineText:B}),a(d,(E,Q)=>{var f=Q;return d.filter(b=>($k(b)||gw(b))&&aa(b.value)).forEach(b=>{var S=cg(A,b.path);f=tB(E,f,S)}),{state:f}}),B&&s(C)}else ys("paste text",{pastedText:C}),r(e,(E,Q)=>{if(E)return{state:tB(E,Q,[])}})}}function raA(t){var{json:e,text:A,selection:i,keepSelection:n,readOnly:o,onChange:a,onPatch:r}=t;if(!o&&i){var s=e!==void 0&&(cr(i)||In(i))?Ds(i.path,i.path):i;if(qi(ct(i)))ys("remove root",{selection:i}),a&&a({text:"",json:void 0},e!==void 0?{text:void 0,json:e}:{text:A||"",json:e},{contentErrors:void 0,patchResult:void 0});else if(e!==void 0){var{operations:g,newSelection:l}=RoA(e,s);ys("remove",{operations:g,selection:i,newSelection:l}),r(g,(C,I)=>({state:I,selection:n?i:l}))}}}function hv(t){var{insertType:e,selectInside:A,initialValue:i,json:n,selection:o,readOnly:a,parser:r,onPatch:s,onReplaceJson:g}=t;if(!a){var l=(function(E,Q,f){if(f==="object")return{};if(f==="array")return[];if(f==="structure"&&E!==void 0){var b=Q?DoA(Q):[],S=je(E,b);if(Array.isArray(S)&&!qi(S)){var M=Dl(S);return aa(M)?fS(M,D=>Array.isArray(D)?[]:pn(D)?void 0:""):""}}return""})(n,o,e);if(n!==void 0){var C=r.stringify(l),I=xoA(n,o,C,r);ys("onInsert",{insertType:e,operations:I,newValue:l,data:C});var d=mi(I.filter(E=>E.op==="add"||E.op==="replace"));s(I,(E,Q,f)=>{if(d){var b=cg(E,d.path);if(aa(l))return{state:Kc(E,Q,b,IG),selection:A?c2(b):f};if(l===""){var S=qi(b)?void 0:je(E,Ki(b));return{state:Kc(E,Q,b,Vy),selection:pn(S)?dG(b,i):sv(b,i)}}}}),ys("after patch")}else{ys("onInsert",{insertType:e,newValue:l});var B=[];g(l,(E,Q)=>({state:tB(E,Q,B),selection:aa(l)?c2(B):sv(B)}))}}}function saA(t){return TL.apply(this,arguments)}function TL(){return TL=Tt(function*(t){var{char:e,selectInside:A,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s,onSelect:g}=t;o||(cr(n)?g(ye(ye({},n),{},{edit:!0,initialValue:e})):e==="{"?hv({insertType:"object",selectInside:A,initialValue:void 0,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s}):e==="["?hv({insertType:"array",selectInside:A,initialValue:void 0,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s}):In(n)&&i!==void 0?aa(je(i,n.path))||g(ye(ye({},n),{},{edit:!0,initialValue:e})):(ys("onInsertValueWithCharacter",{char:e}),yield(function(l){return HL.apply(this,arguments)})({char:e,json:i,selection:n,readOnly:o,parser:a,onPatch:r,onReplaceJson:s})))}),TL.apply(this,arguments)}function HL(){return HL=Tt(function*(t){var{char:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onReplaceJson:r}=t;n||hv({insertType:"value",selectInside:!1,initialValue:e,json:A,selection:i,readOnly:n,parser:o,onPatch:a,onReplaceJson:r})}),HL.apply(this,arguments)}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-json-preview.svelte-25xmyd { - flex: 1; - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: var(--jse-panel-color-readonly, #b2b2b2); - overflow: auto; - white-space: pre-wrap; - padding: 2px; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -}`);var vNA=FA('
      ');function gaA(t,e){St(e,!1);var A=IA(),i=IA(),n=N(e,"text",8),o=N(e,"json",8),a=N(e,"indentation",8),r=N(e,"parser",8);RA(()=>(G(o()),G(n())),()=>{R(A,o()!==void 0?{json:o()}:{text:n()||""})}),RA(()=>(c(A),G(a()),G(r()),nv),()=>{R(i,XC(DL(c(A),a(),r()),nv))}),kn(),Ai();var s=vNA(),g=CA(s);ve(()=>Rt(g,c(i))),lA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -button.jse-context-menu-button.svelte-16jz6ui { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - flex: 1; - white-space: nowrap; - padding: var(--jse-padding, 10px); - color: inherit; -} -button.jse-context-menu-button.svelte-16jz6ui:hover { - background: var(--jse-context-menu-background-highlight, #7a7a7a); -} -button.jse-context-menu-button.svelte-16jz6ui:focus { - background: var(--jse-context-menu-background-highlight, #7a7a7a); - z-index: 1; -} -button.jse-context-menu-button.svelte-16jz6ui:disabled { - color: var(--jse-context-menu-color-disabled, #9d9d9d); - background: unset; -} -button.jse-context-menu-button.left.svelte-16jz6ui { - text-align: left; -} -button.jse-context-menu-button.svelte-16jz6ui svg { - width: 16px; -}`);var bNA=FA('');function lL(t,e){St(e,!1);var A=N(e,"item",8),i=N(e,"className",8,void 0),n=N(e,"onRequestClose",8);Ai();var o=bNA(),a=CA(o),r=l=>{Vi(l,{get data(){return G(A()),EA(()=>A().icon)}})};TA(a,l=>{G(A()),EA(()=>A().icon)&&l(r)});var s=bA(a,2),g=l=>{var C=ur();ve(()=>Rt(C,(G(A()),EA(()=>A().text)))),lA(l,C)};TA(s,l=>{G(A()),EA(()=>A().text)&&l(g)}),ve(l=>{$t(o,1,l,"svelte-16jz6ui"),Mn(o,"title",(G(A()),EA(()=>A().title))),o.disabled=(G(A()),EA(()=>A().disabled||!1))},[()=>n1((G(Pc),G(i()),G(A()),EA(()=>Pc("jse-context-menu-button",i(),A().className))))]),ue("click",o,l=>{n()(),A().onClick(l)}),lA(t,o),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-dropdown-button.svelte-bov1j6 { - flex: 1; - line-height: normal; - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - position: relative; - padding: 0; - display: flex; -} -.jse-dropdown-button.svelte-bov1j6 ul:where(.svelte-bov1j6) { - margin: 0; - padding: 0; -} -.jse-dropdown-button.svelte-bov1j6 ul:where(.svelte-bov1j6) li:where(.svelte-bov1j6) { - margin: 0; - padding: 0; - list-style-type: none; -} -.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - width: 2em; - background: var(--jse-context-menu-background, #656565); - color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); - border-radius: 0; -} -.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown.jse-visible:where(.svelte-bov1j6) { - background: var(--jse-context-menu-background, #656565); -} -.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):hover { - background: var(--jse-context-menu-background-highlight, #7a7a7a); -} -.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):focus { - z-index: 1; -} -.jse-dropdown-button.svelte-bov1j6 button.jse-open-dropdown:where(.svelte-bov1j6):disabled { - color: var(--jse-context-menu-color-disabled, #9d9d9d); - background: unset; -} -.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) { - display: none; - position: absolute; - top: 100%; - left: 0; - z-index: 1; - background: var(--jse-context-menu-background, #656565); - color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); -} -.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items.jse-visible:where(.svelte-bov1j6) { - display: block; -} -.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - width: 100%; - text-align: left; - padding: var(--jse-padding, 10px); - margin: 0; -} -.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6):hover { - background: var(--jse-context-menu-background-highlight, #7a7a7a); -} -.jse-dropdown-button.svelte-bov1j6 .jse-dropdown-items:where(.svelte-bov1j6) button:where(.svelte-bov1j6):disabled { - color: var(--jse-context-menu-color-disabled, #9d9d9d); - background: unset; -}`);var MNA=FA('
    • '),kNA=FA('
        ');qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -button.jse-context-menu-button.svelte-1y5l9l1 { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - flex: 1; - white-space: nowrap; - padding: var(--jse-padding, 10px); - color: inherit; -} -button.jse-context-menu-button.svelte-1y5l9l1:hover { - background: var(--jse-context-menu-background-highlight, #7a7a7a); -} -button.jse-context-menu-button.svelte-1y5l9l1:focus { - background: var(--jse-context-menu-background-highlight, #7a7a7a); - z-index: 1; -} -button.jse-context-menu-button.svelte-1y5l9l1:disabled { - color: var(--jse-context-menu-color-disabled, #9d9d9d); - background: unset; -} -button.jse-context-menu-button.left.svelte-1y5l9l1 { - text-align: left; -} -button.jse-context-menu-button.svelte-1y5l9l1 svg { - width: 16px; -}`);var SNA=FA('');function cL(t,e){St(e,!1);var A=IA(),i=N(e,"item",8),n=N(e,"className",8,void 0),o=N(e,"onRequestClose",8);RA(()=>(G(i()),G(o())),()=>{R(A,i().items.map(a=>ye(ye({},a),{},{onClick:r=>{o()(),a.onClick(r)}})))}),kn(),Ai(),(function(a,r){St(r,!1);var s=IA(void 0,!0),g=N(r,"items",25,()=>[]),l=N(r,"title",9,void 0),C=N(r,"width",9,"120px"),I=IA(!1,!0);function d(){R(I,!1)}function B(D){g2(D)==="Escape"&&(D.preventDefault(),R(I,!1))}is(()=>{document.addEventListener("click",d),document.addEventListener("keydown",B)}),Hl(()=>{document.removeEventListener("click",d),document.removeEventListener("keydown",B)}),RA(()=>G(g()),()=>{R(s,g().every(D=>D.disabled===!0))}),kn(),Ai(!0);var E=kNA(),Q=CA(E);Ea(Q,r,"defaultItem",{},null);var f,b=bA(Q,2);Vi(CA(b),{get data(){return M0}});var S,M=bA(b,2);Qa(CA(M),5,g,Na,(D,F)=>{var _=MNA(),U=CA(_),J=CA(U),j=O=>{Vi(O,{get data(){return c(F),EA(()=>c(F).icon)}})};TA(J,O=>{c(F),EA(()=>c(F).icon)&&O(j)});var AA=bA(J);ve(()=>{var O;Mn(U,"title",(c(F),EA(()=>c(F).title))),U.disabled=(c(F),EA(()=>c(F).disabled)),$t(U,1,n1((c(F),EA(()=>c(F).className))),"svelte-bov1j6"),Rt(AA," ".concat((c(F),(O=EA(()=>c(F).text))!==null&&O!==void 0?O:"")))}),ue("click",U,O=>c(F).onClick(O)),lA(D,_)}),ve(()=>{var D;Mn(E,"title",l()),f=$t(b,1,"jse-open-dropdown svelte-bov1j6",null,f,{"jse-visible":c(I)}),b.disabled=c(s),S=$t(M,1,"jse-dropdown-items svelte-bov1j6",null,S,{"jse-visible":c(I)}),Yl(M,"width: ".concat((D=C())!==null&&D!==void 0?D:"",";"))}),ue("click",b,function(){var D=c(I);setTimeout(()=>R(I,!D))}),ue("click",E,d),lA(a,E),xt()})(t,{get width(){return G(i()),EA(()=>i().width)},get items(){return c(A)},$$slots:{defaultItem:(a,r)=>{var s=SNA(),g=CA(s),l=I=>{Vi(I,{get data(){return G(i()),EA(()=>i().main.icon)}})};TA(g,I=>{G(i()),EA(()=>i().main.icon)&&I(l)});var C=bA(g);ve(I=>{var d;$t(s,1,I,"svelte-1y5l9l1"),Mn(s,"title",(G(i()),EA(()=>i().main.title))),s.disabled=(G(i()),EA(()=>i().main.disabled||!1)),Rt(C," ".concat((G(i()),(d=EA(()=>i().main.text))!==null&&d!==void 0?d:"")))},[()=>n1((G(Pc),G(n()),G(i()),EA(()=>Pc("jse-context-menu-button",n(),i().main.className))))]),ue("click",s,I=>{o()(),i().main.onClick(I)}),lA(a,s)}}}),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-contextmenu.svelte-1shjn02 { - box-shadow: var(--jse-controls-box-shadow, 0 2px 6px 0 rgba(0, 0, 0, 0.24)); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - background: var(--jse-context-menu-background, #656565); - color: var(--jse-context-menu-color, var(--jse-text-color-inverse, #fff)); -} -.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) { - display: flex; - flex-direction: row; - align-items: flex-start; - justify-content: stretch; -} -.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-label:where(.svelte-1shjn02) { - flex: 1; - white-space: nowrap; - padding: var(--jse-padding, 10px); - color: var(--jse-context-menu-color-disabled, #9d9d9d); - line-height: normal; -} -.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-tip:where(.svelte-1shjn02) { - flex: 1; - background: var(--jse-context-menu-tip-background, rgba(255, 255, 255, 0.2)); - color: var(--context-menu-tip-color, inherit); - margin: calc(0.5 * var(--jse-padding, 10px)); - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); - font-size: 80%; - line-height: 1.3em; - display: flex; - flex-direction: row; - align-items: flex-start; - gap: var(--jse-padding, 10px); - border-radius: 3px; -} -.jse-contextmenu.svelte-1shjn02 .jse-row:where(.svelte-1shjn02) div.jse-tip:where(.svelte-1shjn02) div.jse-tip-icon:where(.svelte-1shjn02) { - padding-top: calc(0.5 * var(--jse-padding, 10px)); -} -.jse-contextmenu.svelte-1shjn02 .jse-column:where(.svelte-1shjn02) { - flex: 1; - display: flex; - flex-direction: column; - align-items: stretch; -} -.jse-contextmenu.svelte-1shjn02 .jse-column:where(.svelte-1shjn02):not(:last-child) { - border-right: 1px solid var(--jse-context-menu-separator-color, #7a7a7a); -} -.jse-contextmenu.svelte-1shjn02 .jse-separator:where(.svelte-1shjn02) { - width: 100%; - height: 1px; - background: var(--jse-context-menu-separator-color, #7a7a7a); -}`);var xNA=FA('
        '),RNA=FA('
        '),NNA=FA('
        '),FNA=FA('
        '),_NA=FA('
        '),LNA=FA('
        '),GNA=FA('
        '),KNA=FA('');function laA(t,e){St(e,!1);var A=N(e,"items",9),i=N(e,"onRequestClose",9),n=N(e,"tip",9),o=IA(void 0,!0);is(()=>{var I=Array.from(c(o).querySelectorAll("button")).find(d=>!d.disabled);I&&I.focus()});var a={ArrowUp:"Up",ArrowDown:"Down",ArrowLeft:"Left",ArrowRight:"Right"};function r(I){return console.error("Unknown type of context menu item",I),"???"}Ai(!0);var s=KNA(),g=CA(s);Qa(g,1,A,Na,(I,d)=>{var B=bi(),E=At(B),Q=b=>{lL(b,{get item(){return c(d)},get onRequestClose(){return i()}})},f=b=>{var S=bi(),M=At(S),D=_=>{cL(_,{get item(){return c(d)},get onRequestClose(){return i()}})},F=_=>{var U=bi(),J=At(U),j=O=>{var DA=_NA();Qa(DA,5,()=>(c(d),EA(()=>c(d).items)),Na,(P,aA)=>{var iA=bi(),BA=At(iA),oA=hA=>{lL(hA,{get item(){return c(aA)},get onRequestClose(){return i()}})},sA=hA=>{var YA=bi(),ee=At(YA),UA=KA=>{cL(KA,{get item(){return c(aA)},get onRequestClose(){return i()}})},mA=KA=>{var Pe=bi(),Je=At(Pe),HA=ZA=>{var QA=NNA();Qa(QA,5,()=>(c(aA),EA(()=>c(aA).items)),Na,(WA,MA)=>{var be=bi(),LA=At(be),pA=ht=>{lL(ht,{className:"left",get item(){return c(MA)},get onRequestClose(){return i()}})},Ft=ht=>{var Ee=bi(),Kt=At(Ee),Ye=ut=>{cL(ut,{className:"left",get item(){return c(MA)},get onRequestClose(){return i()}})},ze=ut=>{var Me=bi(),ei=At(Me),Y=nA=>{lA(nA,xNA())},z=nA=>{var rA=bi(),NA=At(rA),Ie=xA=>{var _A=RNA(),Et=CA(_A);ve(()=>Rt(Et,(c(MA),EA(()=>c(MA).text)))),lA(xA,_A)},Qe=xA=>{var _A=ur();ve(Et=>Rt(_A,Et),[()=>(c(MA),EA(()=>r(c(MA))))]),lA(xA,_A)};TA(NA,xA=>{G(EiA),c(MA),EA(()=>EiA(c(MA)))?xA(Ie):xA(Qe,!1)},!0),lA(nA,rA)};TA(ei,nA=>{G(OI),c(MA),EA(()=>OI(c(MA)))?nA(Y):nA(z,!1)},!0),lA(ut,Me)};TA(Kt,ut=>{G(jQ),c(MA),EA(()=>jQ(c(MA)))?ut(Ye):ut(ze,!1)},!0),lA(ht,Ee)};TA(LA,ht=>{G(WC),c(MA),EA(()=>WC(c(MA)))?ht(pA):ht(Ft,!1)}),lA(WA,be)}),lA(ZA,QA)},uA=ZA=>{var QA=bi(),WA=At(QA),MA=LA=>{lA(LA,FNA())},be=LA=>{var pA=ur();ve(Ft=>Rt(pA,Ft),[()=>(c(aA),EA(()=>r(c(aA))))]),lA(LA,pA)};TA(WA,LA=>{G(OI),c(aA),EA(()=>OI(c(aA)))?LA(MA):LA(be,!1)},!0),lA(ZA,QA)};TA(Je,ZA=>{G(hiA),c(aA),EA(()=>hiA(c(aA)))?ZA(HA):ZA(uA,!1)},!0),lA(KA,Pe)};TA(ee,KA=>{G(jQ),c(aA),EA(()=>jQ(c(aA)))?KA(UA):KA(mA,!1)},!0),lA(hA,YA)};TA(BA,hA=>{G(WC),c(aA),EA(()=>WC(c(aA)))?hA(oA):hA(sA,!1)}),lA(P,iA)}),lA(O,DA)},AA=O=>{var DA=bi(),P=At(DA),aA=BA=>{lA(BA,LNA())},iA=BA=>{var oA=ur();ve(sA=>Rt(oA,sA),[()=>(c(d),EA(()=>r(c(d))))]),lA(BA,oA)};TA(P,BA=>{G(OI),c(d),EA(()=>OI(c(d)))?BA(aA):BA(iA,!1)},!0),lA(O,DA)};TA(J,O=>{G(QiA),c(d),EA(()=>QiA(c(d)))?O(j):O(AA,!1)},!0),lA(_,U)};TA(M,_=>{G(jQ),c(d),EA(()=>jQ(c(d)))?_(D):_(F,!1)},!0),lA(b,S)};TA(E,b=>{G(WC),c(d),EA(()=>WC(c(d)))?b(Q):b(f,!1)}),lA(I,B)});var l=bA(g,2),C=I=>{var d=GNA(),B=CA(d),E=CA(B);Vi(CA(E),{get data(){return Wq}});var Q=CA(bA(E,2));ve(()=>Rt(Q,n())),lA(I,d)};TA(l,I=>{n()&&I(C)}),Jo(s,I=>R(o,I),()=>c(o)),ue("keydown",s,function(I){var d=g2(I),B=a[d];if(B&&I.target){I.preventDefault();var E=lSA({allElements:Array.from(c(o).querySelectorAll("button:not([disabled])")),currentElement:I.target,direction:B,hasPrio:Q=>Q.getAttribute("data-type")!=="jse-open-dropdown"});E&&E.focus()}}),lA(t,s),xt()}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-value.jse-string.svelte-1htmvf1 { - color: var(--jse-value-color-string, #008000); -} -.jse-value.jse-object.svelte-1htmvf1, .jse-value.jse-array.svelte-1htmvf1 { - min-width: 16px; - color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); -} -.jse-value.jse-number.svelte-1htmvf1 { - color: var(--jse-value-color-number, #ee422e); -} -.jse-value.jse-boolean.svelte-1htmvf1 { - color: var(--jse-value-color-boolean, #ff8c00); -} -.jse-value.jse-null.svelte-1htmvf1 { - color: var(--jse-value-color-null, #004ed0); -} -.jse-value.jse-invalid.svelte-1htmvf1 { - color: var(--jse-text-color, #4d4d4d); -} -.jse-value.jse-url.svelte-1htmvf1 { - color: var(--jse-value-color-url, #008000); - text-decoration: underline; -} - -.jse-enum-value.svelte-1htmvf1 { - background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); - border: none; - padding: 0; - font-family: inherit; - font-size: inherit; - cursor: pointer; - outline: none; -} -.jse-enum-value.jse-selected.svelte-1htmvf1 { - background: var(--jse-selection-background-color, #d3d3d3); - color: inherit; -} -.jse-enum-value.jse-value.svelte-1htmvf1:focus { - color: var(--jse-text-color, #4d4d4d); -}`);var s5e=FA(""),g5e=FA("");var Uy,Jy;function Yy(t,e){return Uy||(Jy=new WeakMap,Uy=new ResizeObserver(A=>{for(var i of A){var n=Jy.get(i.target);n&&n(i.target)}})),Jy.set(t,e),Uy.observe(t),{destroy:()=>{Jy.delete(t),Uy.unobserve(t)}}}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-tree-mode.svelte-10mlrw4 { - flex: 1; - display: flex; - flex-direction: column; - position: relative; - background: var(--jse-background-color, #fff); - min-width: 0; - min-height: 0; - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: var(--jse-text-color, #4d4d4d); - line-height: var(--jse-line-height, calc(1em + 4px)); -} -.jse-tree-mode.svelte-10mlrw4 .jse-hidden-input-label:where(.svelte-10mlrw4) .jse-hidden-input:where(.svelte-10mlrw4) { - position: fixed; - top: -10px; - left: -10px; - width: 1px; - height: 1px; - padding: 0; - border: 0; - outline: none; -} -.jse-tree-mode.no-main-menu.svelte-10mlrw4 { - border-top: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-tree-mode.svelte-10mlrw4 .jse-search-box-container:where(.svelte-10mlrw4) { - position: relative; - height: 0; - top: var(--jse-padding, 10px); - margin-right: calc(var(--jse-padding, 10px) + 20px); - margin-left: var(--jse-padding, 10px); - text-align: right; - z-index: 3; -} -.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) { - flex: 1; - overflow: auto; - position: relative; - padding: 2px; - display: flex; - flex-direction: column; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4):last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-loading-space:where(.svelte-10mlrw4) { - flex: 1; -} -.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-loading:where(.svelte-10mlrw4) { - flex: 2; - text-align: center; - color: var(--jse-panel-color-readonly, #b2b2b2); - box-sizing: border-box; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); -} -.jse-tree-mode.svelte-10mlrw4 .jse-contents:where(.svelte-10mlrw4) .jse-search-box-background:where(.svelte-10mlrw4) { - border: 50px solid var(--jse-modal-background, #f5f5f5); - margin: -2px; - margin-bottom: 2px; - display: inline-block; -}`);var UNA=FA(" ",1),JNA=FA('
        '),YNA=FA('
        ',1),TNA=FA(' ',1),HNA=FA('
        loading...
        '),zNA=FA('
        ',1);function zL(t,e){St(e,!1);var A=IA(void 0,!0),i=Cr("jsoneditor:TreeMode"),n=typeof window>"u";i("isSSR:",n);var o=II(),a=II(),{openAbsolutePopup:r,closeAbsolutePopup:s}=r1("absolute-popup"),g=IA(void 0,!0),l=IA(void 0,!0),C=IA(void 0,!0),I=!1,d=joA(),B=N(e,"readOnly",9),E=N(e,"externalContent",9),Q=N(e,"externalSelection",9),f=N(e,"history",9),b=N(e,"truncateTextSize",9),S=N(e,"mainMenuBar",9),M=N(e,"navigationBar",9),D=N(e,"escapeControlCharacters",9),F=N(e,"escapeUnicodeCharacters",9),_=N(e,"parser",9),U=N(e,"parseMemoizeOne",9),J=N(e,"validator",9),j=N(e,"validationParser",9),AA=N(e,"pathParser",9),O=N(e,"indentation",9),DA=N(e,"onError",9),P=N(e,"onChange",9),aA=N(e,"onChangeMode",9),iA=N(e,"onSelect",9),BA=N(e,"onUndo",9),oA=N(e,"onRedo",9),sA=N(e,"onRenderValue",9),hA=N(e,"onRenderMenu",9),YA=N(e,"onRenderContextMenu",9),ee=N(e,"onClassName",9),UA=N(e,"onFocus",9),mA=N(e,"onBlur",9),KA=N(e,"onSortModal",9),Pe=N(e,"onTransformModal",9),Je=N(e,"onJSONEditorModal",9),HA=!1,uA=IA(!1,!0),ZA=IA(void 0,!0);QG({onMount:is,onDestroy:Hl,getWindow:()=>cm(c(C)),hasFocus:()=>HA&&document.hasFocus()||tG(c(C)),onFocus:()=>{I=!0,UA()&&UA()()},onBlur:()=>{I=!1,mA()&&mA()()}});var QA=IA(void 0,!0),WA=IA(void 0,!0),MA=void 0,be=!1,LA=IA(ML({json:c(QA)}),!0),pA=IA(Zf(Q())?Q():void 0,!0);function Ft(q){R(pA,q)}is(()=>{if(c(pA)){var q=ct(c(pA));R(LA,Kc(c(QA),c(LA),q,Vy)),setTimeout(()=>So(q))}});var ht,Ee=IA(void 0,!0),Kt=IA(void 0,!0),Ye=IA(void 0,!0),ze=IA(void 0,!0),ut=IA(!1,!0),Me=IA(!1,!0);function ei(q){R(ze,(ht=q)?FoA(c(QA),ht.items):void 0)}function Y(q,fA){return z.apply(this,arguments)}function z(){return(z=Tt(function*(q,fA){R(LA,Kc(c(QA),c(LA),q,Vy));var PA=Bo(fA);yield xi(q,{element:PA})})).apply(this,arguments)}function nA(){R(ut,!1),R(Me,!1),Mt()}function rA(q){i("select validation error",q),R(pA,Ui(q.path)),xi(q.path)}function NA(q){var fA=arguments.length>1&&arguments[1]!==void 0?arguments[1]:kL;i("expand"),R(LA,Kc(c(QA),c(LA),q,fA))}function Ie(q,fA){R(LA,piA(c(QA),c(LA),q,fA)),c(pA)&&(function(PA,Fe){return W0(ct(PA),Fe)&&(ct(PA).length>Fe.length||tr(PA))})(c(pA),q)&&R(pA,void 0)}var Qe=IA(!1,!0),xA=IA([],!0),_A=IA(void 0,!0),Et=ZE(qoA);function et(q,fA,PA,Fe){oh(()=>{var pe;try{pe=Et(q,fA,PA,Fe)}catch(De){pe=[{path:[],message:"Failed to validate: "+De.message,severity:Jc.warning}]}Qi(pe,c(xA))||(i("validationErrors changed:",pe),R(xA,pe),R(_A,(function(De,ot){var jt;return ot.forEach(ki=>{jt=qiA(De,jt,ki.path,(xn,Pi)=>ye(ye({},Pi),{},{validationError:ki}))}),ot.forEach(ki=>{for(var xn=ki.path;xn.length>0;)xn=Ki(xn),jt=qiA(De,jt,xn,(Pi,Eo)=>Eo.validationError?Eo:ye(ye({},Eo),{},{validationError:{isChildError:!0,path:xn,message:"Contains invalid data",severity:Jc.warning}}))}),jt})(q,c(xA))))},pe=>i("validationErrors updated in ".concat(pe," ms")))}function Te(){return i("validate"),MA?{parseError:MA,isRepairable:!1}:(et(c(QA),J(),_(),j()),qi(c(xA))?void 0:{validationErrors:c(xA)})}function Le(){return c(QA)}function si(){return c(LA)}function gn(){return c(pA)}function dn(q){i("applyExternalContent",{updatedContent:q}),jf(q)?(function(fA){if(fA!==void 0){var PA=!Qi(c(QA),fA);if(i("update external json",{isChanged:PA,currentlyText:c(QA)===void 0}),!!PA){var Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(WA),textIsRepaired:c(Qe)};R(QA,fA),R(LA,Xg(fA,c(LA))),_e(c(QA)),R(WA,void 0),R(Qe,!1),MA=void 0,Wi(c(QA)),ui(Fe)}}})(q.json):Pf(q)&&(function(fA){if(!(fA===void 0||jf(E()))){var PA=fA!==c(WA);if(i("update external text",{isChanged:PA}),!!PA){var Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(WA),textIsRepaired:c(Qe)};try{R(QA,U()(fA)),R(LA,Xg(c(QA),c(LA))),_e(c(QA)),R(WA,fA),R(Qe,!1),MA=void 0}catch(pe){try{R(QA,U()(ml(fA))),R(LA,Xg(c(QA),c(LA))),_e(c(QA)),R(WA,fA),R(Qe,!0),MA=void 0,Wi(c(QA))}catch{R(QA,void 0),R(LA,void 0),R(WA,E().text),R(Qe,!1),MA=c(WA)!==void 0&&c(WA)!==""?uh(c(WA),pe.message||String(pe)):void 0}}Wi(c(QA)),ui(Fe)}}})(q.text)}function _e(q){be||(be=!0,R(LA,tB(q,c(LA),[])))}function Wi(q){c(pA)&&(br(q,jd(c(pA)))&&br(q,ct(c(pA)))||(i("clearing selection: path does not exist anymore",c(pA)),R(pA,qQ(q,c(LA)))))}function ui(q){if(q.json!==void 0||q.text!==void 0){var fA=c(QA)!==void 0&&q.json!==void 0;f().add({type:"tree",undo:{patch:fA?[{op:"replace",path:"",value:q.json}]:void 0,json:q.json,text:q.text,documentState:q.documentState,textIsRepaired:q.textIsRepaired,selection:z0(q.selection),sortedColumn:void 0},redo:{patch:fA?[{op:"replace",path:"",value:c(QA)}]:void 0,json:c(QA),text:c(WA),documentState:c(LA),textIsRepaired:c(Qe),selection:z0(c(pA)),sortedColumn:void 0}})}}function Mi(q,fA){var PA;if(i("patch",q,fA),c(QA)===void 0)throw new Error("Cannot apply patch: no JSON");var Fe=c(QA),pe={json:void 0,text:c(WA),documentState:c(LA),selection:z0(c(pA)),textIsRepaired:c(Qe),sortedColumn:void 0},De=NoA(c(QA),q),ot=moA(c(QA),c(LA),q),jt=(PA=ph(c(QA),q))!==null&&PA!==void 0?PA:c(pA),ki=typeof fA=="function"?fA(ot.json,ot.documentState,jt):void 0;return R(QA,ki?.json!==void 0?ki.json:ot.json),R(LA,ki?.state!==void 0?ki.state:ot.documentState),R(pA,ki?.selection!==void 0?ki.selection:jt),R(WA,void 0),R(Qe,!1),R(Kt,void 0),R(Ye,void 0),MA=void 0,Wi(c(QA)),f().add({type:"tree",undo:ye({patch:De},pe),redo:{patch:q,json:void 0,text:c(WA),documentState:c(LA),selection:z0(c(pA)),sortedColumn:void 0,textIsRepaired:c(Qe)}}),{json:c(QA),previousJson:Fe,undo:De,redo:q}}function zi(){!B()&&c(pA)&&R(pA,dG(ct(c(pA))))}function vt(){if(!B()&&c(pA)){var q=ct(c(pA)),fA=je(c(QA),q);aa(fA)?(function(PA,Fe){i("openJSONEditorModal",{path:PA,value:Fe}),HA=!0,Je()({content:{json:Fe},path:PA,onPatch:c(y).onPatch,onClose:()=>{HA=!1,setTimeout(Mt)}})})(q,fA):R(pA,sv(q))}}function Zi(){if(!B()&&In(c(pA))){var q=ct(c(pA)),fA=wt(q),PA=je(c(QA),q),Fe=!P0(c(QA),c(LA),q),pe=Fe?String(PA):Rh(String(PA),_());i("handleToggleEnforceString",{enforceString:Fe,value:PA,updatedValue:pe}),VA([{op:"replace",path:fA,value:pe}],(De,ot)=>({state:yv(c(QA),ot,q,{type:"value",enforceString:Fe})}))}}function _t(){return c(Qe)&&c(QA)!==void 0&&me(c(QA)),c(QA)!==void 0?{json:c(QA)}:{text:c(WA)||""}}function L(){return Ct.apply(this,arguments)}function Ct(){return Ct=Tt(function*(){var q=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];yield naA({json:c(QA),selection:c(pA),indentation:q?O():void 0,readOnly:B(),parser:_(),onPatch:VA})}),Ct.apply(this,arguments)}function ci(){return Bn.apply(this,arguments)}function Bn(){return Bn=Tt(function*(){var q=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];c(QA)!==void 0&&(yield oaA({json:c(QA),selection:c(pA),indentation:q?O():void 0,parser:_()}))}),Bn.apply(this,arguments)}function En(q){var fA;q.preventDefault(),Co((fA=q.clipboardData)===null||fA===void 0?void 0:fA.getData("text/plain"))}function qn(){return Yo.apply(this,arguments)}function Yo(){return(Yo=Tt(function*(){try{Co(yield navigator.clipboard.readText())}catch(q){console.error(q),R(uA,!0)}})).apply(this,arguments)}function Co(q){q!==void 0&&aaA({clipboardText:q,json:c(QA),selection:c(pA),readOnly:B(),parser:_(),onPatch:VA,onChangeText:dA,onPasteMultilineText:Kn,openRepairModal:ko})}function ko(q,fA){R(ZA,{text:q,onParse:PA=>lm(PA,Fe=>gm(Fe,_())),onRepair:roA,onApply:fA,onClose:Mt})}function Zo(){raA({json:c(QA),text:c(WA),selection:c(pA),keepSelection:!1,readOnly:B(),onChange:P(),onPatch:VA})}function wo(){!B()&&c(QA)!==void 0&&c(pA)&&ih&&!qi(ct(c(pA)))&&(i("duplicate",{selection:c(pA)}),VA(koA(c(QA),o1(c(QA),c(pA)))))}function ha(){B()||!c(pA)||!lo(c(pA))&&!In(c(pA))||qi(ct(c(pA)))||(i("extract",{selection:c(pA)}),VA(SoA(c(QA),c(pA)),(q,fA)=>{if(aa(q))return{state:tL(q,fA,[])}}))}function Xo(q){hv({insertType:q,selectInside:!0,initialValue:void 0,json:c(QA),selection:c(pA),readOnly:B(),parser:_(),onPatch:VA,onReplaceJson:me})}function ra(q){cr(c(pA))&&R(pA,Ui(c(pA).path)),c(pA)||R(pA,qQ(c(QA),c(LA))),Xo(q)}function Do(q){if(!B()&&c(pA))if(Fy(c(pA)))try{var fA=jd(c(pA)),PA=je(c(QA),fA),Fe=(function(De,ot,jt){if(ot==="array"){if(Array.isArray(De))return De;if(pn(De))return siA(De);if(typeof De=="string")try{var ki=jt.parse(De);if(Array.isArray(ki))return ki;if(pn(ki))return siA(ki)}catch{return[De]}return[De]}if(ot==="object"){if(Array.isArray(De))return riA(De);if(pn(De))return De;if(typeof De=="string")try{var xn=jt.parse(De);if(pn(xn))return xn;if(Array.isArray(xn))return riA(xn)}catch{return{value:De}}return{value:De}}if(ot==="value")return aa(De)?jt.stringify(De):De;throw new Error("Cannot convert ".concat($L(De,jt)," to ").concat(ot))})(PA,q,_());if(Fe===PA)return;var pe=[{op:"replace",path:wt(fA),value:Fe}];i("handleConvert",{selection:c(pA),path:fA,type:q,operations:pe}),VA(pe,(De,ot)=>({state:c(pA)?tB(De,ot,ct(c(pA))):c(LA)}))}catch(De){DA()(De)}else DA()(new Error("Cannot convert current selection to ".concat(q)))}function re(){if(c(pA)){var q=viA(c(QA),c(LA),c(pA),!1),fA=Ki(ct(c(pA)));q&&!qi(ct(q))&&Qi(fA,Ki(ct(q)))?R(pA,o2(ct(q))):R(pA,c2(fA)),i("insert before",{selection:c(pA),selectionBefore:q,parentPath:fA}),Mo(),Ji()}}function di(){if(c(pA)){var q=i1(c(QA),c(pA));i("insert after",q),R(pA,o2(q)),Mo(),Ji()}}function ln(q){return Qn.apply(this,arguments)}function Qn(){return(Qn=Tt(function*(q){yield saA({char:q,selectInside:!0,json:c(QA),selection:c(pA),readOnly:B(),parser:_(),onPatch:VA,onReplaceJson:me,onSelect:Ft})})).apply(this,arguments)}function To(){if(!B()&&f().canUndo){var q=f().undo();if(av(q)){var fA={json:c(QA),text:c(WA)};R(QA,q.undo.patch?lg(c(QA),q.undo.patch):q.undo.json),R(LA,q.undo.documentState),R(pA,q.undo.selection),R(WA,q.undo.text),R(Qe,q.undo.textIsRepaired),MA=void 0,i("undo",{item:q,json:c(QA),documentState:c(LA),selection:c(pA)}),vA(fA,q.undo.patch&&q.redo.patch?{json:c(QA),previousJson:fA.json,redo:q.undo.patch,undo:q.redo.patch}:void 0),Mt(),c(pA)&&xi(ct(c(pA)),{scrollToWhenVisible:!1})}else BA()(q)}}function Ma(){if(!B()&&f().canRedo){var q=f().redo();if(av(q)){var fA={json:c(QA),text:c(WA)};R(QA,q.redo.patch?lg(c(QA),q.redo.patch):q.redo.json),R(LA,q.redo.documentState),R(pA,q.redo.selection),R(WA,q.redo.text),R(Qe,q.redo.textIsRepaired),MA=void 0,i("redo",{item:q,json:c(QA),documentState:c(LA),selection:c(pA)}),vA(fA,q.undo.patch&&q.redo.patch?{json:c(QA),previousJson:fA.json,redo:q.redo.patch,undo:q.undo.patch}:void 0),Mt(),c(pA)&&xi(ct(c(pA)),{scrollToWhenVisible:!1})}else oA()(q)}}function wi(q){var fA;B()||c(QA)===void 0||(HA=!0,KA()({id:o,json:c(QA),rootPath:q,onSort:(fA=Tt(function*(PA){var{operations:Fe}=PA;i("onSort",q,Fe),VA(Fe,(pe,De)=>({state:tL(pe,De,q),selection:Ui(q)}))}),function(PA){return fA.apply(this,arguments)}),onClose:()=>{HA=!1,setTimeout(Mt)}}))}function Io(){c(pA)&&wi(MiA(c(QA),c(pA)))}function nr(){wi([])}function yo(q){if(c(QA)!==void 0){var{id:fA,onTransform:PA,onClose:Fe}=q,pe=q.rootPath||[];HA=!0,Pe()({id:fA||a,json:c(QA),rootPath:pe,onTransform:De=>{PA?PA({operations:De,json:c(QA),transformedJson:lg(c(QA),De)}):(i("onTransform",pe,De),VA(De,(ot,jt)=>({state:tL(ot,jt,pe),selection:Ui(pe)})))},onClose:()=>{HA=!1,setTimeout(Mt),Fe&&Fe()}})}}function Pa(){c(pA)&&yo({rootPath:MiA(c(QA),c(pA))})}function Gn(){yo({rootPath:[]})}function xi(q){return Pt.apply(this,arguments)}function Pt(){return Pt=Tt(function*(q){var{scrollToWhenVisible:fA=!0,element:PA}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};R(LA,Kc(c(QA),c(LA),q,Vy));var Fe=PA??Sn(q);if(i("scrollTo",{path:q,elem:Fe,refContents:c(g)}),!Fe||!c(g))return Promise.resolve();var pe=c(g).getBoundingClientRect(),De=Fe.getBoundingClientRect();if(!fA&&De.bottom>pe.top&&De.top{d(Fe,{container:c(g),offset:ot,duration:300,callback:()=>jt()})})}),Pt.apply(this,arguments)}function Sn(q){var fA,PA;return Mo(),(fA=(PA=c(g))===null||PA===void 0?void 0:PA.querySelector('div[data-path="'.concat(qy(q),'"]')))!==null&&fA!==void 0?fA:void 0}function Bo(q){var fA,PA;return Mo(),(fA=(PA=c(g))===null||PA===void 0?void 0:PA.querySelector('span[data-search-result-index="'.concat(q,'"]')))!==null&&fA!==void 0?fA:void 0}function So(q){var fA=Sn(q);if(fA&&c(g)){var PA=c(g).getBoundingClientRect(),Fe=fA.getBoundingClientRect(),pe=aa(je(c(QA),q))?20:Fe.height;Fe.topPA.bottom-20&&d(fA,{container:c(g),offset:-(PA.height-pe-20),duration:0})}}function vA(q,fA){if(q.json!==void 0||q?.text!==void 0){if(c(WA)!==void 0){var PA,Fe={text:c(WA),json:void 0};(PA=P())===null||PA===void 0||PA(Fe,q,{contentErrors:Te(),patchResult:fA})}else if(c(QA)!==void 0){var pe,De={text:void 0,json:c(QA)};(pe=P())===null||pe===void 0||pe(De,q,{contentErrors:Te(),patchResult:fA})}}}function VA(q,fA){i("handlePatch",q,fA);var PA={json:c(QA),text:c(WA)},Fe=Mi(q,fA);return vA(PA,Fe),Fe}function me(q,fA){var PA={json:c(QA),text:c(WA)},Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(WA),textIsRepaired:c(Qe)},pe=Kc(c(QA),Xg(q,c(LA)),[],Jf),De=typeof fA=="function"?fA(q,pe,c(pA)):void 0;R(QA,De?.json!==void 0?De.json:q),R(LA,De?.state!==void 0?De.state:pe),R(pA,De?.selection!==void 0?De.selection:c(pA)),R(WA,void 0),R(Qe,!1),MA=void 0,Wi(c(QA)),ui(Fe),vA(PA,void 0)}function dA(q,fA){i("handleChangeText");var PA={json:c(QA),text:c(WA)},Fe={documentState:c(LA),selection:c(pA),json:c(QA),text:c(WA),textIsRepaired:c(Qe)};try{R(QA,U()(q)),R(LA,Kc(c(QA),Xg(c(QA),c(LA)),[],Jf)),R(WA,void 0),R(Qe,!1),MA=void 0}catch(De){try{R(QA,U()(ml(q))),R(LA,Kc(c(QA),Xg(c(QA),c(LA)),[],Jf)),R(WA,q),R(Qe,!0),MA=void 0}catch{R(QA,void 0),R(LA,ML({json:c(QA),expand:Jf})),R(WA,q),R(Qe,!1),MA=c(WA)!==""?uh(c(WA),De.message||String(De)):void 0}}if(typeof fA=="function"){var pe=fA(c(QA),c(LA),c(pA));R(QA,pe?.json!==void 0?pe.json:c(QA)),R(LA,pe?.state!==void 0?pe.state:c(LA)),R(pA,pe?.selection!==void 0?pe.selection:c(pA))}Wi(c(QA)),ui(Fe),vA(PA,void 0)}function SA(q,fA){var PA=arguments.length>2&&arguments[2]!==void 0&&arguments[2];i("handleExpand",{path:q,expanded:fA,recursive:PA}),fA?NA(q,PA?IG:kL):Ie(q,PA),Mt()}function ae(){SA([],!0,!0)}function xe(){SA([],!1,!0)}function it(q){i("openFind",{findAndReplace:q}),R(ut,!1),R(Me,!1),Mo(),R(ut,!0),R(Me,q)}function st(q,fA){i("handleExpandSection",q,fA),R(LA,(function(PA,Fe,pe,De){return mh(PA,Fe,pe,(ot,jt)=>{if(!lr(jt))return jt;var ki=hoA(jt.visibleSections.concat(De));return ye(ye({},jt),{},{visibleSections:ki})})})(c(QA),c(LA),q,fA))}function bt(q){i("pasted json as text",q),R(Kt,q)}function Kn(q){i("pasted multiline text",{pastedText:q}),R(Ye,q)}function Ri(q){var fA,{anchor:PA,left:Fe,top:pe,width:De,height:ot,offsetTop:jt,offsetLeft:ki,showTip:xn}=q,Pi=(function(Wn){var{json:Aa,documentState:un,selection:Gt,readOnly:Xi,onEditKey:Zt,onEditValue:mt,onToggleEnforceString:gi,onCut:ga,onCopy:Zn,onPaste:ea,onRemove:ua,onDuplicate:mr,onExtract:tC,onInsertBefore:xg,onInsert:Pl,onConvert:A0,onInsertAfter:jl,onSort:os,onTransform:pr}=Wn,Rg=Aa!==void 0,iC=!!Gt,Ng=!!Gt&&qi(ct(Gt)),Rn=Gt?je(Aa,ct(Gt)):void 0,Fa=Array.isArray(Rn)?"Edit array":pn(Rn)?"Edit object":"Edit value",_a=Rg&&(lo(Gt)||cr(Gt)||In(Gt)),Q1=Gt&&!Ng?je(Aa,Ki(ct(Gt))):void 0,QB=!Xi&&Rg&&rv(Gt)&&!Ng&&!Array.isArray(Q1),h1=!Xi&&Rg&&Gt!==void 0&&rv(Gt),tu=h1&&!aa(Rn),hB=!Xi&&_a,iu=_a,Lb=!Xi&&iC,Gb=!Xi&&Rg&&_a&&!Ng,Kb=!Xi&&Rg&&Gt!==void 0&&(lo(Gt)||In(Gt))&&!Ng,e0=_a,u1=e0?"Convert to:":"Insert:",La=!Xi&&(tr(Gt)&&Array.isArray(Rn)||yg(Gt)&&Array.isArray(Q1)),il=!Xi&&(e0?Fy(Gt)&&!pn(Rn):iC),nu=!Xi&&(e0?Fy(Gt)&&!Array.isArray(Rn):iC),ou=!Xi&&(e0?Fy(Gt)&&aa(Rn):iC),f1=Gt!==void 0&&P0(Aa,un,ct(Gt));function Lr(au){_a?au!=="structure"&&A0(au):Pl(au)}return[{type:"row",items:[{type:"button",onClick:()=>Zt(),icon:nd,text:"Edit key",title:"Edit the key (Double-click on the key)",disabled:!QB},{type:"dropdown-button",main:{type:"button",onClick:()=>mt(),icon:nd,text:Fa,title:"Edit the value (Double-click on the value)",disabled:!h1},width:"11em",items:[{type:"button",icon:nd,text:Fa,title:"Edit the value (Double-click on the value)",onClick:()=>mt(),disabled:!h1},{type:"button",icon:f1?KS:YS,text:"Enforce string",title:"Enforce keeping the value as string when it contains a numeric value",onClick:()=>gi(),disabled:!tu}]}]},{type:"separator"},{type:"row",items:[{type:"dropdown-button",main:{type:"button",onClick:()=>ga(!0),icon:od,text:"Cut",title:"Cut selected contents, formatted with indentation (Ctrl+X)",disabled:!hB},width:"10em",items:[{type:"button",icon:od,text:"Cut formatted",title:"Cut selected contents, formatted with indentation (Ctrl+X)",onClick:()=>ga(!0),disabled:!hB},{type:"button",icon:od,text:"Cut compacted",title:"Cut selected contents, without indentation (Ctrl+Shift+X)",onClick:()=>ga(!1),disabled:!hB}]},{type:"dropdown-button",main:{type:"button",onClick:()=>Zn(!0),icon:xC,text:"Copy",title:"Copy selected contents, formatted with indentation (Ctrl+C)",disabled:!iu},width:"12em",items:[{type:"button",icon:xC,text:"Copy formatted",title:"Copy selected contents, formatted with indentation (Ctrl+C)",onClick:()=>Zn(!0),disabled:!iu},{type:"button",icon:xC,text:"Copy compacted",title:"Copy selected contents, without indentation (Ctrl+Shift+C)",onClick:()=>Zn(!1),disabled:!iu}]},{type:"button",onClick:()=>ea(),icon:_S,text:"Paste",title:"Paste clipboard contents (Ctrl+V)",disabled:!Lb}]},{type:"separator"},{type:"row",items:[{type:"column",items:[{type:"button",onClick:()=>mr(),icon:GS,text:"Duplicate",title:"Duplicate selected contents (Ctrl+D)",disabled:!Gb},{type:"button",onClick:()=>tC(),icon:Xq,text:"Extract",title:"Extract selected contents",disabled:!Kb},{type:"button",onClick:()=>os(),icon:C3,text:"Sort",title:"Sort array or object contents",disabled:Xi||!_a},{type:"button",onClick:()=>pr(),icon:s3,text:"Transform",title:"Transform array or object contents (filter, sort, project)",disabled:Xi||!_a},{type:"button",onClick:()=>ua(),icon:Ww,text:"Remove",title:"Remove selected contents (Delete)",disabled:Xi||!_a}]},{type:"column",items:[{type:"label",text:u1},{type:"button",onClick:()=>Lr("structure"),icon:e0?I3:ad,text:"Structure",title:u1+" structure like the first item in the array",disabled:!La},{type:"button",onClick:()=>Lr("object"),icon:e0?I3:ad,text:"Object",title:u1+" object",disabled:!il},{type:"button",onClick:()=>Lr("array"),icon:e0?I3:ad,text:"Array",title:u1+" array",disabled:!nu},{type:"button",onClick:()=>Lr("value"),icon:e0?I3:ad,text:"Value",title:u1+" value",disabled:!ou}]}]},{type:"separator"},{type:"row",items:[{type:"button",onClick:()=>xg(),icon:oV,text:"Insert before",title:"Select area before current entry to insert or paste contents",disabled:Xi||!_a||Ng},{type:"button",onClick:()=>jl(),icon:$q,text:"Insert after",title:"Select area after current entry to insert or paste contents",disabled:Xi||!_a||Ng}]}]})({json:c(QA),documentState:c(LA),selection:c(pA),readOnly:B(),onEditKey:zi,onEditValue:vt,onToggleEnforceString:Zi,onCut:L,onCopy:ci,onPaste:qn,onRemove:Zo,onDuplicate:wo,onExtract:ha,onInsertBefore:re,onInsert:ra,onInsertAfter:di,onConvert:Do,onSort:Io,onTransform:Pa}),Eo=(fA=YA()(Pi))!==null&&fA!==void 0?fA:Pi;if(Eo!==!1){var Wt={left:Fe,top:pe,offsetTop:jt,offsetLeft:ki,width:De,height:ot,anchor:PA,closeOnOuterClick:!0,onClose:()=>{HA=!1,Mt()}};HA=!0;var $o=r(laA,{tip:xn?"Tip: you can open this context menu via right-click or with Ctrl+Q":void 0,items:Eo,onRequestClose:()=>s($o)},Wt)}}function Ji(q){if(!gr(c(pA)))if(q&&(q.stopPropagation(),q.preventDefault()),q&&q.type==="contextmenu"&&q.target!==c(l))Ri({left:q.clientX,top:q.clientY,width:A2,height:$C,showTip:!1});else{var fA,PA=(fA=c(g))===null||fA===void 0?void 0:fA.querySelector(".jse-context-menu-pointer.jse-selected");if(PA)Ri({anchor:PA,offsetTop:2,width:A2,height:$C,showTip:!1});else{var Fe,pe=(Fe=c(g))===null||Fe===void 0?void 0:Fe.getBoundingClientRect();pe&&Ri({top:pe.top+2,left:pe.left+2,width:A2,height:$C,showTip:!1})}}}function Vt(q){Ri({anchor:EoA(q.target,"BUTTON"),offsetTop:0,width:A2,height:$C,showTip:!0})}function Ni(){return ka.apply(this,arguments)}function ka(){return(ka=Tt(function*(){if(i("apply pasted json",c(Kt)),c(Kt)){var{onPasteAsJson:q}=c(Kt);R(Kt,void 0),q(),setTimeout(Mt)}})).apply(this,arguments)}function Lt(){return gt.apply(this,arguments)}function gt(){return(gt=Tt(function*(){i("apply pasted multiline text",c(Ye)),c(Ye)&&(Co(JSON.stringify(c(Ye))),setTimeout(Mt))})).apply(this,arguments)}function Fi(){i("clear pasted json"),R(Kt,void 0),Mt()}function Oi(){i("clear pasted multiline text"),R(Ye,void 0),Mt()}function Vn(){aA()(ba.text)}function hn(q){R(pA,q),Mt(),xi(ct(q))}function Mt(){i("focus"),c(l)&&(c(l).focus(),c(l).select())}function sa(q){return(function(fA,PA,Fe){var pe=Ki(Fe),De=[mi(Fe)],ot=je(fA,pe),jt=ot?eL(ot,PA,De):void 0;return jt?Ui(pe.concat(jt)):o2(Fe)})(c(QA),c(LA),q)}function Ho(q){c(A)&&c(A).onDrag(q)}function u(){c(A)&&c(A).onDragEnd()}var y=IA(void 0,!0);RA(()=>c(pA),()=>{var q;q=c(pA),Qi(q,Q())||(i("onSelect",q),iA()(q))}),RA(()=>(G(D()),G(F())),()=>{R(Ee,AG({escapeControlCharacters:D(),escapeUnicodeCharacters:F()}))}),RA(()=>c(ut),()=>{(function(q){c(g)&&q&&c(g).scrollTop===0&&($g(g,c(g).style.overflowAnchor="none"),$g(g,c(g).scrollTop+=Uf),setTimeout(()=>{c(g)&&$g(g,c(g).style.overflowAnchor="")}))})(c(ut))}),RA(()=>G(E()),()=>{dn(E())}),RA(()=>G(Q()),()=>{(function(q){Qi(c(pA),q)||(i("applyExternalSelection",{selection:c(pA),externalSelection:q}),Zf(q)&&R(pA,q))})(Q())}),RA(()=>(c(QA),G(J()),G(_()),G(j())),()=>{et(c(QA),J(),_(),j())}),RA(()=>(c(g),jiA),()=>{R(A,c(g)?jiA(c(g)):void 0)}),RA(()=>(G(B()),G(b()),G(_()),c(Ee),G(sA()),G(ee())),()=>{R(y,{mode:ba.tree,readOnly:B(),truncateTextSize:b(),parser:_(),normalization:c(Ee),getJson:Le,getDocumentState:si,getSelection:gn,findElement:Sn,findNextInside:sa,focus:Mt,onPatch:VA,onInsert:Xo,onExpand:SA,onSelect:Ft,onFind:it,onExpandSection:st,onPasteJson:bt,onRenderValue:sA(),onContextMenu:Ri,onClassName:ee()||(()=>{}),onDrag:Ho,onDragEnd:u})}),RA(()=>c(y),()=>{i("context changed",c(y))}),kn();var x={expand:NA,collapse:Ie,validate:Te,getJson:Le,patch:Mi,acceptAutoRepair:_t,openTransformModal:yo,scrollTo:xi,findElement:Sn,findSearchResult:Bo,focus:Mt};Ai(!0);var H=zNA();ue("mousedown",i2,function(q){!Nh(q.target,fA=>fA===c(C))&&gr(c(pA))&&(i("click outside the editor, exit edit mode"),R(pA,z0(c(pA))),I&&c(l)&&(c(l).focus(),c(l).blur()),i("blur (outside editor)"),c(l)&&c(l).blur())});var k,T=At(H),eA=CA(T),gA=q=>{(function(fA,PA){St(PA,!1);var Fe=IA(void 0,!0),pe=IA(void 0,!0),De=IA(void 0,!0),ot=N(PA,"json",9),jt=N(PA,"selection",9),ki=N(PA,"readOnly",9),xn=N(PA,"showSearch",13,!1),Pi=N(PA,"history",9),Eo=N(PA,"onExpandAll",9),Wt=N(PA,"onCollapseAll",9),$o=N(PA,"onUndo",9),Wn=N(PA,"onRedo",9),Aa=N(PA,"onSort",9),un=N(PA,"onTransform",9),Gt=N(PA,"onContextMenu",9),Xi=N(PA,"onCopy",9),Zt=N(PA,"onRenderMenu",9);function mt(){xn(!xn())}var gi=IA(void 0,!0),ga=IA(void 0,!0),Zn=IA(void 0,!0),ea=IA(void 0,!0);RA(()=>G(ot()),()=>{R(Fe,ot()!==void 0)}),RA(()=>(c(Fe),G(jt()),In),()=>{R(pe,c(Fe)&&(lo(jt())||cr(jt())||In(jt())))}),RA(()=>(G(Eo()),G(ot())),()=>{R(gi,{type:"button",icon:XoA,title:"Expand all",className:"jse-expand-all",onClick:Eo(),disabled:!aa(ot())})}),RA(()=>(G(Wt()),G(ot())),()=>{R(ga,{type:"button",icon:$oA,title:"Collapse all",className:"jse-collapse-all",onClick:Wt(),disabled:!aa(ot())})}),RA(()=>G(ot()),()=>{R(Zn,{type:"button",icon:g3,title:"Search (Ctrl+F)",className:"jse-search",onClick:mt,disabled:ot()===void 0})}),RA(()=>(G(ki()),c(gi),c(ga),G(Aa()),G(ot()),G(un()),c(Zn),G(Gt()),G($o()),G(Pi()),G(Wn()),G(Xi()),c(pe)),()=>{R(ea,ki()?[c(gi),c(ga),{type:"separator"},{type:"button",icon:xC,title:"Copy (Ctrl+C)",className:"jse-copy",onClick:Xi(),disabled:!c(pe)},{type:"separator"},c(Zn),{type:"space"}]:[c(gi),c(ga),{type:"separator"},{type:"button",icon:C3,title:"Sort",className:"jse-sort",onClick:Aa(),disabled:ki()||ot()===void 0},{type:"button",icon:s3,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:un(),disabled:ki()||ot()===void 0},c(Zn),{type:"button",icon:LS,title:oG,className:"jse-contextmenu",onClick:Gt()},{type:"separator"},{type:"button",icon:$w,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:$o(),disabled:!Pi().canUndo},{type:"button",icon:Xw,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:Wn(),disabled:!Pi().canRedo},{type:"space"}])}),RA(()=>(G(Zt()),c(ea)),()=>{R(De,Zt()(c(ea))||c(ea))}),kn(),Ai(!0),xv(fA,{get items(){return c(De)}}),xt()})(q,{get json(){return c(QA)},get selection(){return c(pA)},get readOnly(){return B()},get history(){return f()},onExpandAll:ae,onCollapseAll:xe,onUndo:To,onRedo:Ma,onSort:nr,onTransform:Gn,onContextMenu:Vt,onCopy:ci,get onRenderMenu(){return hA()},get showSearch(){return c(ut)},set showSearch(fA){R(ut,fA)},$$legacy:!0})};TA(eA,q=>{S()&&q(gA)});var wA=bA(eA,2),Ae=q=>{QNA(q,{get json(){return c(QA)},get selection(){return c(pA)},onSelect:hn,get onError(){return DA()},get pathParser(){return AA()}})};TA(wA,q=>{M()&&q(Ae)});var oe=bA(wA,2),Be=q=>{var fA=TNA(),PA=At(fA),Fe=CA(PA);Fe.readOnly=!0,Jo(Fe,jt=>R(l,jt),()=>c(l));var pe=bA(PA,2),De=jt=>{var ki=bi(),xn=At(ki),Pi=Wt=>{(function($o,Wn){function Aa(gi){gi.stopPropagation(),Wn.onCreateObject()}function un(gi){gi.stopPropagation(),Wn.onCreateArray()}St(Wn,!0);var Gt=nNA();Gt.__click=()=>Wn.onClick();var Xi=bA(CA(Gt),2),Zt=bA(CA(Xi),2),mt=gi=>{var ga=iNA(),Zn=bA(At(ga),2);Mn(Zn,"title","Create an empty JSON object (press '{')"),Zn.__click=Aa;var ea=bA(Zn,2);Mn(ea,"title","Create an empty JSON array (press '[')"),ea.__click=un,lA(gi,ga)};TA(Zt,gi=>{Wn.readOnly||gi(mt)}),lA($o,Gt),xt()})(Wt,{get readOnly(){return B()},onCreateObject:()=>{Mt(),ln("{")},onCreateArray:()=>{Mt(),ln("[")},onClick:()=>{Mt()}})},Eo=Wt=>{var $o=UNA(),Wn=At($o),Aa=tt(()=>B()?[]:[{icon:l3,text:"Repair manually",title:'Open the document in "code" mode and repair it manually',onClick:Vn}]);tl(Wn,{type:"error",message:"The loaded JSON document is invalid and could not be repaired automatically.",get actions(){return c(Aa)}}),gaA(bA(Wn,2),{get text(){return c(WA)},get json(){return c(QA)},get indentation(){return O()},get parser(){return _()}}),lA(Wt,$o)};TA(xn,Wt=>{c(WA)===""||c(WA)===void 0?Wt(Pi):Wt(Eo,!1)}),lA(jt,ki)},ot=jt=>{var ki=YNA(),xn=At(ki);eaA(CA(xn),{get json(){return c(QA)},get documentState(){return c(LA)},get parser(){return _()},get showSearch(){return c(ut)},get showReplace(){return c(Me)},get readOnly(){return B()},columns:void 0,onSearch:ei,onFocus:Y,onPatch:VA,onClose:nA});var Pi=bA(xn,2);Mn(Pi,"data-jsoneditor-scrollable-contents",!0);var Eo=CA(Pi),Wt=Zt=>{lA(Zt,JNA())};TA(Eo,Zt=>{c(ut)&&Zt(Wt)}),KL(bA(Eo,2),{get value(){return c(QA)},pointer:"",get state(){return c(LA)},get validationErrors(){return c(_A)},get searchResults(){return c(ze)},get selection(){return c(pA)},get context(){return c(y)},get onDragSelectionStart(){return ya}}),Jo(Pi,Zt=>R(g,Zt),()=>c(g));var $o=bA(Pi,2),Wn=Zt=>{var mt=tt(()=>(c(Kt),EA(()=>"You pasted a JSON ".concat(Array.isArray(c(Kt).contents)?"array":"object"," as text")))),gi=tt(()=>[{icon:SC,text:"Paste as JSON instead",title:"Replace the value with the pasted JSON",onMouseDown:Ni},{text:"Leave as is",title:"Keep the JSON embedded in the value",onClick:Fi}]);tl(Zt,{type:"info",get message(){return c(mt)},get actions(){return c(gi)}})};TA($o,Zt=>{c(Kt)&&Zt(Wn)});var Aa=bA($o,2),un=Zt=>{var mt=tt(()=>[{icon:SC,text:"Paste as string instead",title:"Paste the clipboard data as a single string value instead of an array",onClick:Lt},{text:"Leave as is",title:"Keep the pasted array",onClick:Oi}]);tl(Zt,{type:"info",message:"Multiline text was pasted as array",get actions(){return c(mt)}})};TA(Aa,Zt=>{c(Ye)&&Zt(un)});var Gt=bA(Aa,2),Xi=Zt=>{var mt=tt(()=>B()?[]:[{icon:Zw,text:"Ok",title:"Accept the repaired document",onClick:_t},{icon:l3,text:"Repair manually instead",title:"Leave the document unchanged and repair it manually instead",onClick:Vn}]);tl(Zt,{type:"success",message:"The loaded JSON document was invalid but is successfully repaired.",get actions(){return c(mt)},onClose:Mt})};TA(Gt,Zt=>{c(Qe)&&Zt(Xi)}),hG(bA(Gt,2),{get validationErrors(){return c(xA)},selectError:rA}),lA(jt,ki)};TA(pe,jt=>{c(QA)===void 0?jt(De):jt(ot,!1)}),ue("paste",Fe,En),lA(q,fA)},He=q=>{lA(q,HNA())};TA(oe,q=>{n?q(He,!1):q(Be)}),Jo(T,q=>R(C,q),()=>c(C));var ke=bA(T,2),Ne=q=>{VoA(q,{onClose:()=>R(uA,!1)})};TA(ke,q=>{c(uA)&&q(Ne)});var ni=bA(ke,2),Un=q=>{WoA(q,e1(()=>c(ZA),{onClose:()=>{var fA;(fA=c(ZA))===null||fA===void 0||fA.onClose(),R(ZA,void 0)}}))};return TA(ni,q=>{c(ZA)&&q(Un)}),ve(()=>k=$t(T,1,"jse-tree-mode svelte-10mlrw4",null,k,{"no-main-menu":!S()})),ue("keydown",T,function(q){var fA=g2(q),PA=q.shiftKey;if(i("keydown",{combo:fA,key:q.key}),fA==="Ctrl+X"&&(q.preventDefault(),L(!0)),fA==="Ctrl+Shift+X"&&(q.preventDefault(),L(!1)),fA==="Ctrl+C"&&(q.preventDefault(),ci(!0)),fA==="Ctrl+Shift+C"&&(q.preventDefault(),ci(!1)),fA==="Ctrl+D"&&(q.preventDefault(),wo()),fA!=="Delete"&&fA!=="Backspace"||(q.preventDefault(),Zo()),fA==="Insert"&&(q.preventDefault(),Xo("structure")),fA==="Ctrl+A"&&(q.preventDefault(),R(pA,Ui([]))),fA==="Ctrl+Q"&&Ji(q),fA==="ArrowUp"||fA==="Shift+ArrowUp"){q.preventDefault();var Fe=c(pA)?viA(c(QA),c(LA),c(pA),PA)||c(pA):qQ(c(QA),c(LA));R(pA,Fe),So(ct(Fe))}if(fA==="ArrowDown"||fA==="Shift+ArrowDown"){q.preventDefault();var pe=c(pA)?(function(Pi,Eo,Wt){var $o=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(Wt){var Wn=$o?ct(Wt):i1(Pi,Wt),Aa=aa(je(Pi,Wn))?piA(Pi,Eo,Wn,!0):Eo,un=eL(Pi,Eo,Wn),Gt=eL(Pi,Aa,Wn);if($o)return tr(Wt)?un!==void 0?Ds(un,un):void 0:yg(Wt)?Gt!==void 0?Ds(Gt,Gt):void 0:Gt!==void 0?Ds(jd(Wt),Gt):void 0;if(yg(Wt))return Gt!==void 0?Ui(Gt):void 0;if(tr(Wt)||In(Wt))return un!==void 0?Ui(un):void 0;if(cr(Wt)){if(un===void 0||un.length===0)return;var Xi=Ki(un),Zt=je(Pi,Xi);return Array.isArray(Zt)?Ui(un):l2(un)}return lo(Wt)?Gt!==void 0?Ui(Gt):un!==void 0?Ui(un):void 0:void 0}})(c(QA),c(LA),c(pA),PA)||c(pA):qQ(c(QA),c(LA));R(pA,pe),So(ct(pe))}if(fA==="ArrowLeft"||fA==="Shift+ArrowLeft"){q.preventDefault();var De=c(pA)?(function(Pi,Eo,Wt){var $o=arguments.length>3&&arguments[3]!==void 0&&arguments[3],Wn=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4];if(Wt){var{caret:Aa,previous:un}=biA(Pi,Eo,Wt,Wn);if($o)return lo(Wt)?void 0:Ds(Wt.path,Wt.path);if(Aa&&un)return SL(un);var Gt=Ki(ct(Wt)),Xi=je(Pi,Gt);return In(Wt)&&Array.isArray(Xi)?Ds(Wt.path,Wt.path):lo(Wt)&&!Array.isArray(Xi)?l2(Wt.focusPath):void 0}})(c(QA),c(LA),c(pA),PA,!B())||c(pA):qQ(c(QA),c(LA));R(pA,De),So(ct(De))}if(fA==="ArrowRight"||fA==="Shift+ArrowRight"){q.preventDefault();var ot=c(pA)&&c(QA)!==void 0?(function(Pi,Eo,Wt){var $o=arguments.length>3&&arguments[3]!==void 0&&arguments[3],Wn=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4];if(Wt){var{caret:Aa,next:un}=biA(Pi,Eo,Wt,Wn);return $o?lo(Wt)?void 0:Ds(Wt.path,Wt.path):Aa&&un?SL(un):lo(Wt)?Ui(Wt.focusPath):void 0}})(c(QA),c(LA),c(pA),PA,!B())||c(pA):qQ(c(QA),c(LA));R(pA,ot),So(ct(ot))}if(fA==="Enter"&&c(pA)){if(vv(c(pA))){var jt=c(pA).focusPath,ki=je(c(QA),Ki(jt));Array.isArray(ki)&&(q.preventDefault(),R(pA,Ui(jt)))}cr(c(pA))&&(q.preventDefault(),R(pA,ye(ye({},c(pA)),{},{edit:!0}))),In(c(pA))&&(q.preventDefault(),aa(je(c(QA),c(pA).path))?SA(c(pA).path,!0):R(pA,ye(ye({},c(pA)),{},{edit:!0})))}if(fA.replace(/^Shift\+/,"").length===1&&c(pA))return q.preventDefault(),void ln(q.key);if(fA==="Enter"&&(yg(c(pA))||tr(c(pA))))return q.preventDefault(),void ln("");if(fA==="Ctrl+Enter"&&In(c(pA))){var xn=je(c(QA),c(pA).path);Dv(xn)&&window.open(String(xn),"_blank")}fA==="Escape"&&c(pA)&&(q.preventDefault(),R(pA,void 0)),fA==="Ctrl+F"&&(q.preventDefault(),it(!1)),fA==="Ctrl+H"&&(q.preventDefault(),it(!0)),fA==="Ctrl+Z"&&(q.preventDefault(),To()),fA==="Ctrl+Shift+Z"&&(q.preventDefault(),Ma())}),ue("mousedown",T,function(q){i("handleMouseDown",q);var fA=q.target;BoA(fA,"BUTTON")||fA.isContentEditable||(Mt(),c(pA)||c(QA)!==void 0||c(WA)!==""&&c(WA)!==void 0||(i("createDefaultSelection"),R(pA,Ui([]))))}),ue("contextmenu",T,Ji),lA(t,H),Ot(e,"expand",NA),Ot(e,"collapse",Ie),Ot(e,"validate",Te),Ot(e,"getJson",Le),Ot(e,"patch",Mi),Ot(e,"acceptAutoRepair",_t),Ot(e,"openTransformModal",yo),Ot(e,"scrollTo",xi),Ot(e,"findElement",Sn),Ot(e,"findSearchResult",Bo),Ot(e,"focus",Mt),xt(x)}function caA(t){return typeof(e=t)!="object"||e===null?t:new Proxy(t,{get:(A,i,n)=>caA(Reflect.get(A,i,n)),set:()=>!1,deleteProperty:()=>!1});var e}var Ty=Cr("jsoneditor:History");function CaA(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=t.maxItems||1e3,A=[],i=0;function n(){return i0}function a(){return{canUndo:n(),canRedo:o(),items:()=>A.slice().reverse(),add:s,undo:l,redo:C,clear:g}}function r(){t.onChange&&t.onChange(a())}function s(I){Ty("add",I),A=[I].concat(A.slice(i)).slice(0,e),i=0,r()}function g(){Ty("clear"),A=[],i=0,r()}function l(){if(n()){var I=A[i];return i+=1,Ty("undo",I),r(),I}}function C(){if(o())return Ty("redo",A[i-=1]),r(),A[i]}return{get:a}}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-transform-modal-inner.svelte-lta8xm { - flex: 1; - display: flex; - flex-direction: column; - min-width: 0; - min-height: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) { - color: inherit; - flex: 1; - display: flex; - flex-direction: column; - padding: 0; - overflow: auto; - min-width: 0; - min-height: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) { - display: flex; - flex-direction: row; - justify-content: flex-end; - padding-top: var(--jse-padding, 10px); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) button.jse-primary:where(.svelte-lta8xm):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) { - flex: 1; - display: flex; - gap: calc(2 * var(--jse-padding, 10px)); - min-height: 0; - box-sizing: border-box; - padding: 0 calc(2 * var(--jse-padding, 10px)) var(--jse-padding, 10px); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) { - flex: 1; - display: flex; - flex-direction: column; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p { - margin: var(--jse-padding, 10px) 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p:first-child { - margin-top: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) p:last-child { - margin-bottom: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .jse-description:where(.svelte-lta8xm) code { - background: var(--jse-modal-code-background, rgba(0, 0, 0, 0.05)); - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) .query-error:where(.svelte-lta8xm) { - color: var(--jse-error-color, #ee5341); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) textarea.jse-query:where(.svelte-lta8xm) { - flex: 1; - outline: none; - resize: vertical; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) { - flex: 1; - display: flex; - flex-direction: column; - gap: calc(2 * var(--jse-padding, 10px)); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data:where(.svelte-lta8xm) { - flex: 1; - display: flex; - flex-direction: column; - min-height: 0; - box-sizing: border-box; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data.jse-hide:where(.svelte-lta8xm) { - flex: none; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-preview-data:where(.svelte-lta8xm) { - flex: 1; - display: flex; - flex-direction: column; - min-height: 0; - box-sizing: border-box; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents.jse-hide-original-data:where(.svelte-lta8xm) { - flex-direction: column; - gap: 0; - margin-bottom: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-actions:where(.svelte-lta8xm) { - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)) calc(2 * var(--jse-padding, 10px)); -} -@media screen and (max-width: 1200px) { - .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) { - flex-direction: column; - overflow: auto; - } - .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-query-contents:where(.svelte-lta8xm) textarea.jse-query:where(.svelte-lta8xm) { - min-height: 150px; - flex: none; - } - .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-tree-mode { - height: 300px; - flex: none; - } - .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-original-data:where(.svelte-lta8xm), - .jse-transform-modal-inner.svelte-lta8xm .jse-modal-contents:where(.svelte-lta8xm) .jse-main-contents:where(.svelte-lta8xm) .jse-data-contents:where(.svelte-lta8xm) .jse-preview-data:where(.svelte-lta8xm) { - flex: unset; - } -} -.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) { - font-weight: bold; - display: block; - box-sizing: border-box; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) .jse-label-inner:where(.svelte-lta8xm) { - margin-top: calc(2 * var(--jse-padding, 10px)); - margin-bottom: calc(0.5 * var(--jse-padding, 10px)); - box-sizing: border-box; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-label:where(.svelte-lta8xm) .jse-label-inner:where(.svelte-lta8xm) button:where(.svelte-lta8xm) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - font-weight: bold; - padding: 0; -} -.jse-transform-modal-inner.svelte-lta8xm .jse-tree-mode { - flex: 1; - background: var(--jse-input-background-readonly, transparent); - box-shadow: none; - box-sizing: border-box; - --jse-main-border: var(--jse-input-border, 1px solid #d8dbdf); -} -.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm), -.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm) { - border: var(--jse-input-border, 1px solid #d8dbdf); - outline: none; - box-sizing: border-box; - padding: calc(0.5 * var(--jse-padding, 10px)); - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: inherit; - background: var(--jse-input-background, var(--jse-background-color, #fff)); -} -.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm):focus, -.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm):focus { - border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); -} -.jse-transform-modal-inner.svelte-lta8xm input:where(.svelte-lta8xm):read-only, -.jse-transform-modal-inner.svelte-lta8xm textarea:where(.svelte-lta8xm):read-only { - background: var(--jse-input-background-readonly, transparent); -} -.jse-transform-modal-inner.svelte-lta8xm .jse-preview.jse-error:where(.svelte-lta8xm) { - flex: 1; - background: var(--jse-input-background-readonly, transparent); - border: var(--jse-input-border, 1px solid #d8dbdf); - color: var(--jse-error-color, #ee5341); - padding: calc(0.5 * var(--jse-padding, 10px)); -} -.jse-transform-modal-inner.svelte-lta8xm a { - color: var(--jse-a-color, #156fc5); -} -.jse-transform-modal-inner.svelte-lta8xm a:hover { - color: var(--jse-a-color-highlight, #0f508d); -}`);var Lf=wv(()=>XSA),WQ=wv(()=>$SA),ONA=FA('
        '),PNA=FA(" ",1),jNA=FA('
        '),qNA=FA('
        Language
        Path
        Query
        Preview
        ',1),VNA=FA('
        ');function WNA(t,e){var A,i,n;St(e,!1);var o=Cr("jsoneditor:TransformModal"),a=N(e,"id",25,()=>"transform-modal-"+th()),r=N(e,"json",9),s=N(e,"rootPath",25,()=>[]),g=N(e,"indentation",9),l=N(e,"truncateTextSize",9),C=N(e,"escapeControlCharacters",9),I=N(e,"escapeUnicodeCharacters",9),d=N(e,"parser",9),B=N(e,"parseMemoizeOne",9),E=N(e,"validationParser",9),Q=N(e,"pathParser",9),f=N(e,"queryLanguages",9),b=N(e,"queryLanguageId",13),S=N(e,"onChangeQueryLanguage",9),M=N(e,"onRenderValue",9),D=N(e,"onRenderMenu",9),F=N(e,"onRenderContextMenu",9),_=N(e,"onClassName",9),U=N(e,"onTransform",9),J=N(e,"onClose",9),j=IA(void 0,!0),AA=IA(CaA({onChange:LA=>R(AA,LA)}).get(),!0),O=IA(void 0,!0),DA=IA(void 0,!0),P=IA(!1,!0),aA="".concat(a(),":").concat(wt(s())),iA=(A=Lf()[aA])!==null&&A!==void 0?A:{},BA=IA(WQ().showWizard!==!1,!0),oA=IA(WQ().showOriginal!==!1,!0),sA=IA((i=iA.queryOptions)!==null&&i!==void 0?i:{},!0),hA=IA(b()===iA.queryLanguageId&&iA.query?iA.query:"",!0),YA=IA((n=iA.isManual)!==null&&n!==void 0&&n,!0),ee=IA(void 0,!0),UA=IA(void 0,!0),mA=IA({text:""},!0);function KA(LA){var pA;return(pA=f().find(Ft=>Ft.id===LA))!==null&&pA!==void 0?pA:f()[0]}function Pe(LA){try{R(sA,LA),R(hA,KA(b()).createQuery(c(O),LA)),R(ee,void 0),R(YA,!1),o("updateQueryByWizard",{queryOptions:c(sA),query:c(hA),isManual:c(YA)})}catch(pA){R(ee,String(pA))}}function Je(LA){R(hA,LA.target.value),R(YA,!0),o("handleChangeQuery",{query:c(hA),isManual:c(YA)})}c(YA)||Pe(c(sA)),is(()=>{var LA;(LA=c(j))===null||LA===void 0||LA.focus()});var HA=qE(function(LA,pA){if(LA===void 0)return R(mA,{text:""}),void R(UA,"Error: No JSON");if(pA.trim()!=="")try{o("previewTransform",{query:pA});var Ft=KA(b()).executeQuery(LA,pA,d());R(mA,{json:Ft}),R(UA,void 0)}catch(ht){R(mA,{text:""}),R(UA,String(ht))}else R(mA,{json:LA})},300);function uA(){if(c(O)===void 0)return R(mA,{text:""}),void R(UA,"Error: No JSON");try{o("handleTransform",{query:c(hA)});var LA=KA(b()).executeQuery(c(O),c(hA),d());U()([{op:"replace",path:wt(s()),value:LA}]),J()()}catch(pA){console.error(pA),R(mA,{text:""}),R(UA,String(pA))}}function ZA(){R(BA,!c(BA)),WQ(WQ().showWizard=c(BA))}function QA(){R(oA,!c(oA)),WQ(WQ().showOriginal=c(oA))}function WA(LA){LA.focus()}function MA(LA){o("handleChangeQueryLanguage",LA),b(LA),S()(LA),Pe(c(sA))}function be(){c(P)?R(P,!c(P)):J()()}RA(()=>(G(r()),G(s())),()=>{R(O,caA(je(r(),s())))}),RA(()=>c(O),()=>{R(DA,c(O)?{json:c(O)}:{text:""})}),RA(()=>(c(O),c(hA)),()=>{HA(c(O),c(hA))}),RA(()=>(Lf(),c(sA),c(hA),G(b()),c(YA)),()=>{Lf(Lf()[aA]={queryOptions:c(sA),query:c(hA),queryLanguageId:b(),isManual:c(YA)}),o("store state in memory",aA,Lf()[aA])}),kn(),Ai(!0),em(t,{get onClose(){return J()},className:"jse-transform-modal",get fullscreen(){return c(P)},children:(LA,pA)=>{var Ft=VNA();yL(CA(Ft),{children:(ht,Ee)=>{var Kt=qNA(),Ye=At(Kt);(function(L,Ct){St(Ct,!1);var ci,Bn=N(Ct,"queryLanguages",9),En=N(Ct,"queryLanguageId",9),qn=N(Ct,"fullscreen",13),Yo=N(Ct,"onChangeQueryLanguage",9),Co=N(Ct,"onClose",9),ko=IA(void 0,!0),{openAbsolutePopup:Zo,closeAbsolutePopup:wo}=r1("absolute-popup");function ha(){var Xo={queryLanguages:Bn(),queryLanguageId:En(),onChangeQueryLanguage:ra=>{wo(ci),Yo()(ra)}};ci=Zo(qxA,Xo,{offsetTop:-2,offsetLeft:0,anchor:c(ko),closeOnOuterClick:!0})}Ai(!0),Ev(L,{title:"Transform",fullScreenButton:!0,get onClose(){return Co()},get fullscreen(){return qn()},set fullscreen(Xo){qn(Xo)},$$slots:{actions:(Xo,ra)=>{var Do,re=ZxA();Vi(CA(re),{get data(){return aV}}),Jo(re,di=>R(ko,di),()=>c(ko)),ve(()=>Do=$t(re,1,"jse-config svelte-5gkegr",null,Do,{hide:Bn().length<=1})),ue("click",re,ha),lA(Xo,re)}},$$legacy:!0}),xt()})(Ye,{get queryLanguages(){return f()},get queryLanguageId(){return b()},onChangeQueryLanguage:MA,get onClose(){return J()},get fullscreen(){return c(P)},set fullscreen(L){R(P,L)},$$legacy:!0});var ze=CA(bA(Ye,2)),ut=CA(ze),Me=bA(CA(ut),2);XnA(CA(Me),()=>(G(b()),EA(()=>KA(b()).description)));var ei=bA(Me,4),Y=bA(ei,2),z=CA(Y),nA=CA(z),rA=CA(nA),NA=tt(()=>c(BA)?M0:WE);Vi(rA,{get data(){return c(NA)}});var Ie=bA(Y,2),Qe=L=>{var Ct=bi(),ci=At(Ct),Bn=qn=>{var Yo=PNA(),Co=At(Yo);OxA(Co,{get queryOptions(){return c(sA)},get json(){return c(O)},onChange:Pe});var ko=bA(Co,2),Zo=wo=>{var ha=ONA(),Xo=CA(ha);ve(()=>Rt(Xo,c(ee))),lA(wo,ha)};TA(ko,wo=>{c(ee)&&wo(Zo)}),lA(qn,Yo)},En=qn=>{lA(qn,ur("(Only available for arrays, not for objects)"))};TA(ci,qn=>{c(O),EA(()=>Array.isArray(c(O)))?qn(Bn):qn(En,!1)}),lA(L,Ct)};TA(Ie,L=>{c(BA)&&L(Qe)});var xA=bA(Ie,4);Jo(xA,L=>R(j,L),()=>c(j));var _A,Et,et=bA(ut,2),Te=CA(et),Le=CA(Te),si=CA(Le),gn=CA(si),dn=CA(gn),_e=tt(()=>c(oA)?M0:WE);Vi(dn,{get data(){return c(_e)}});var Wi=bA(Le,2),ui=L=>{zL(L,{get externalContent(){return c(DA)},externalSelection:void 0,get history(){return c(AA)},readOnly:!0,get truncateTextSize(){return l()},mainMenuBar:!1,navigationBar:!1,get indentation(){return g()},get escapeControlCharacters(){return C()},get escapeUnicodeCharacters(){return I()},get parser(){return d()},get parseMemoizeOne(){return B()},get onRenderValue(){return M()},get onRenderMenu(){return D()},get onRenderContextMenu(){return F()},onError:EA(()=>console.error),get onChange(){return ya},get onChangeMode(){return ya},get onSelect(){return ya},get onUndo(){return ya},get onRedo(){return ya},get onFocus(){return ya},get onBlur(){return ya},get onSortModal(){return ya},get onTransformModal(){return ya},get onJSONEditorModal(){return ya},get onClassName(){return _()},validator:void 0,get validationParser(){return E()},get pathParser(){return Q()}})};TA(Wi,L=>{c(oA)&&L(ui)});var Mi=bA(Te,2),zi=bA(CA(Mi),2),vt=L=>{zL(L,{get externalContent(){return c(mA)},externalSelection:void 0,get history(){return c(AA)},readOnly:!0,get truncateTextSize(){return l()},mainMenuBar:!1,navigationBar:!1,get indentation(){return g()},get escapeControlCharacters(){return C()},get escapeUnicodeCharacters(){return I()},get parser(){return d()},get parseMemoizeOne(){return B()},get onRenderValue(){return M()},get onRenderMenu(){return D()},get onRenderContextMenu(){return F()},onError:EA(()=>console.error),get onChange(){return ya},get onChangeMode(){return ya},get onSelect(){return ya},get onUndo(){return ya},get onRedo(){return ya},get onFocus(){return ya},get onBlur(){return ya},get onSortModal(){return ya},get onTransformModal(){return ya},get onJSONEditorModal(){return ya},get onClassName(){return _()},validator:void 0,get validationParser(){return E()},get pathParser(){return Q()}})},Zi=L=>{var Ct=jNA(),ci=CA(Ct);ve(()=>Rt(ci,c(UA))),lA(L,Ct)};TA(zi,L=>{c(UA)?L(Zi,!1):L(vt)});var _t=CA(bA(ze,2));Nr(()=>ue("click",_t,uA)),vs(_t,L=>WA?.(L)),ve(L=>{AB(ei,L),AB(xA,c(hA)),_A=$t(et,1,"jse-data-contents svelte-lta8xm",null,_A,{"jse-hide-original-data":!c(oA)}),Et=$t(Te,1,"jse-original-data svelte-lta8xm",null,Et,{"jse-hide":!c(oA)}),_t.disabled=!!c(UA)},[()=>(G(qi),G(s()),G(vg),EA(()=>qi(s())?"(document root)":vg(s())))]),ue("click",nA,ZA),ue("input",xA,Je),ue("click",gn,QA),lA(ht,Kt)},$$slots:{default:!0}}),vs(Ft,(ht,Ee)=>Qv?.(ht,Ee),()=>be),lA(LA,Ft)},$$slots:{default:!0}}),xt()}function Gl(){}var ZNA=0,hr=class{constructor(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.id=ZNA++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=im.match(e)),A=>{var i=e(A);return i===void 0?null:[this,i]}}};hr.closedBy=new hr({deserialize:t=>t.split(" ")}),hr.openedBy=new hr({deserialize:t=>t.split(" ")}),hr.group=new hr({deserialize:t=>t.split(" ")}),hr.isolate=new hr({deserialize:t=>{if(t&&t!="rtl"&&t!="ltr"&&t!="auto")throw new RangeError("Invalid value for isolate: "+t);return t||"auto"}}),hr.contextHash=new hr({perNode:!0}),hr.lookAhead=new hr({perNode:!0}),hr.mounted=new hr({perNode:!0});var XiA,XNA=Object.create(null),im=class t{constructor(e,A,i){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;this.name=e,this.props=A,this.id=i,this.flags=n}static define(e){var A=e.props&&e.props.length?Object.create(null):XNA,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),n=new t(e.name||"",A,e.id,i);if(e.props){for(var o of e.props)if(Array.isArray(o)||(o=o(n)),o){if(o[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");A[o[0].id]=o[1]}}return n}prop(e){return this.props[e.id]}get isTop(){return(1&this.flags)>0}get isSkipped(){return(2&this.flags)>0}get isError(){return(4&this.flags)>0}get isAnonymous(){return(8&this.flags)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;var A=this.prop(hr.group);return!!A&&A.indexOf(e)>-1}return this.id==e}static match(e){var A=Object.create(null);for(var i in e)for(var n of i.split(" "))A[n]=e[i];return o=>{for(var a=o.prop(hr.group),r=-1;r<(a?a.length:0);r++){var s=A[r<0?o.name:a[r]];if(s)return s}}}};im.none=new im("",Object.create(null),0,8),(function(t){t[t.ExcludeBuffers=1]="ExcludeBuffers",t[t.IncludeAnonymous=2]="IncludeAnonymous",t[t.IgnoreMounts=4]="IgnoreMounts",t[t.IgnoreOverlays=8]="IgnoreOverlays"})(XiA||(XiA={})),new hr({perNode:!0});qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-status-bar.svelte-1pmgv9j { - background: var(--jse-panel-background, #ebebeb); - color: var(--jse-panel-color-readonly, #b2b2b2); - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - margin: 0; - border-top: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); - display: flex; - gap: var(--jse-padding, 10px); -} -.jse-status-bar.svelte-1pmgv9j:last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-status-bar.svelte-1pmgv9j .jse-status-bar-info:where(.svelte-1pmgv9j) { - padding: 2px; -}`);var $NA=FA('
        '),AFA=FA('
        '),eFA=FA('
        '),tFA=FA('
        '),fG=_Q.define([{tag:Re.propertyName,color:"var(--internal-key-color)"},{tag:Re.number,color:"var(--internal-value-color-number)"},{tag:Re.bool,color:"var(--internal-value-color-boolean)"},{tag:Re.string,color:"var(--internal-value-color-string)"},{tag:Re.keyword,color:"var(--internal-value-color-null)"}]),iFA=PF(fG),nFA=fG.style;fG.style=t=>nFA(t||[]);var oFA=[Go.fromClass(class{constructor(t){this.view=t,this.indentUnit=_c(t.state),this.initialPaddingLeft=null,this.isChrome=window?.navigator.userAgent.includes("Chrome"),this.generate(t.state)}update(t){var e=_c(t.state);(e!==this.indentUnit||t.docChanged||t.viewportChanged)&&(this.indentUnit=e,this.generate(t.state))}generate(t){var e=new Wr;this.initialPaddingLeft?this.addStyleToBuilder(e,t,this.initialPaddingLeft):this.view.requestMeasure({read:A=>{var i=A.contentDOM.querySelector(".cm-line");i&&(this.initialPaddingLeft=window.getComputedStyle(i).getPropertyValue("padding-left"),this.addStyleToBuilder(e,A.state,this.initialPaddingLeft)),this.decorations=e.finish()}}),this.decorations=e.finish()}addStyleToBuilder(t,e,A){var i=this.getVisibleLines(e);for(var n of i){var{numColumns:o,containsTab:a}=this.numColumns(n.text,e.tabSize),r="calc(".concat(o+this.indentUnit,"ch + ").concat(A,")"),s=this.isChrome?"calc(-".concat(o+this.indentUnit,"ch - ").concat(a?1:0,"px)"):"-".concat(o+this.indentUnit,"ch");t.add(n.from,n.from,yt.line({attributes:{style:"padding-left: ".concat(r,"; text-indent: ").concat(s,";")}}))}}getVisibleLines(t){var e=new Set,A=null;for(var{from:i,to:n}of this.view.visibleRanges)for(var o=i;o<=n;){var a=t.doc.lineAt(o);A!==a&&(e.add(a),A=a),o=a.to+1}return e}numColumns(t,e){var A=0,i=!1;A:for(var n=0;nt.decorations})];qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-text-mode.svelte-k2b9e6 { - --internal-key-color: var(--jse-key-color, #1a1a1a); - --internal-value-color-number: var(--jse-value-color-number, #ee422e); - --internal-value-color-boolean: var(--jse-value-color-boolean, #ff8c00); - --internal-value-color-string: var(--jse-value-color-string, #008000); - --internal-value-color-null: var(--jse-value-color-null, #004ed0); - flex: 1; - box-sizing: border-box; - display: flex; - flex-direction: column; - background: var(--jse-background-color, #fff); -} -.jse-text-mode.no-main-menu.svelte-k2b9e6 { - border-top: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) { - flex: 1; - display: flex; - position: relative; - flex-direction: column; - overflow: hidden; - min-width: 0; - min-height: 0; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6):last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents.jse-hidden:where(.svelte-k2b9e6) { - visibility: hidden; - position: absolute; - top: 0; - left: 0; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor { - flex: 1; - overflow: hidden; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-scroller { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - line-height: var(--jse-line-height, calc(1em + 4px)); - color: var(--jse-delimiter-color, rgba(0, 0, 0, 0.38)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-gutters { - background: var(--jse-panel-background, #ebebeb); - color: var(--jse-panel-color-readonly, #b2b2b2); - border-right: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-activeLine, -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-activeLineGutter { - background: var(--jse-active-line-background-color, rgba(0, 0, 0, 0.06)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-selectionBackground { - background: var(--jse-selection-background-color, #d3d3d3); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-searchMatch { - background-color: var(--jse-search-match-color, #ffe665); - outline: var(--jse-search-match-outline, none); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-searchMatch.cm-searchMatch-selected { - background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); - outline: var(--jse-search-match-outline, 2px solid #e0be00); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-selectionMatch { - background-color: var(--jse-search-match-background-color, rgba(153, 255, 119, 0.5019607843)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-foldPlaceholder { - background: var(--jse-tag-background, rgba(0, 0, 0, 0.2)); - color: var(--jse-tag-color, var(--jse-text-color-inverse, #fff)); - border: none; - padding: 0 var(--jse-padding, 10px); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-tooltip { - font-size: var(--jse-font-size, 16px); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - color: var(--jse-tooltip-color, var(--jse-text-color, #4d4d4d)); - background: var(--jse-tooltip-background, var(--jse-modal-background, #f5f5f5)); - border: var(--jse-tooltip-border, var(--jse-main-border, 1px solid #d7d7d7)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-diagnosticAction { - background: var(--jse-tooltip-action-button-color, var(--jse-text-color-inverse, #fff)); - background: var(--jse-tooltip-action-button-background, #4d4d4d); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-panels { - border-bottom: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search { - background: var(--jse-panel-background, #ebebeb); - color: var(--jse-panel-color, var(--jse-text-color, #4d4d4d)); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search input { - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size-text-mode-search, 80%); - color: var(--jse-input-color, var(--jse-text-color, #4d4d4d)); - border: var(--jse-input-border, 1px solid #d8dbdf); - background: var(--jse-input-background, var(--jse-background-color, #fff)); - margin-right: 2px; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button { - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size-text-mode-search, 80%); - color: var(--jse-panel-button-color, inherit); - background: var(--jse-panel-button-background, transparent); - border: none; - cursor: pointer; - text-transform: capitalize; - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px); - margin: 0; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button:hover { - color: var(--panel-button-color-highlight, var(--jse-text-color, #4d4d4d)); - background: var(--jse-panel-button-background-highlight, #e0e0e0); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search label { - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size-text-mode-search, 80%); - padding-left: var(--jse-padding, 10px); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search label input { - margin-right: 2px; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-search button[name='close'] { - width: 32px; - height: 32px; - font-size: 24px; - line-height: 24px; - padding: 0; - right: 0; - top: -4px; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .cm-editor .cm-cursor-primary { - border-color: var(--jse-text-color, #4d4d4d); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .jse-loading-space:where(.svelte-k2b9e6) { - flex: 1; -} -.jse-text-mode.svelte-k2b9e6 .jse-contents:where(.svelte-k2b9e6) .jse-loading:where(.svelte-k2b9e6) { - flex: 2; - text-align: center; - color: var(--jse-panel-color-readonly, #b2b2b2); - box-sizing: border-box; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); -} -.jse-text-mode.svelte-k2b9e6 .jse-contents.jse-preview:where(.svelte-k2b9e6) { - flex: 1; - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: var(--jse-panel-color-readonly, #b2b2b2); - overflow: auto; - white-space: pre-wrap; - word-break: break-word; - padding: 2px; -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) { - display: flex; - align-items: center; - gap: 8px; - padding: 8px 12px; - background: var(--jse-background-color, #fff); - border-top: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); - border-bottom: var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-tip:where(.svelte-k2b9e6) { - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size-mono, 14px); - color: var(--jse-panel-color-readonly, #b2b2b2); -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-progress-track:where(.svelte-k2b9e6) { - flex: 1; - height: 6px; - background: var(--jse-panel-background, #ebebeb); - border-radius: 3px; - overflow: hidden; - border: 1px solid var(--jse-panel-border, var(--jse-main-border, 1px solid #d7d7d7)); -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-progress-fill:where(.svelte-k2b9e6) { - height: 100%; - background: linear-gradient(90deg, var(--jse-theme-color, #3883fa), var(--jse-theme-color-highlight, #5f9dff)); - border-radius: 2px; - transition: width 0.1s ease; - min-width: 2px; -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-cancel-button:where(.svelte-k2b9e6) { - padding: 4px 12px; - font-size: 12px; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - background: var(--jse-theme-color, #3883fa); - color: #fff; - border-radius: 3px; - cursor: pointer; - transition: background-color 0.2s ease; - flex-shrink: 0; - border: 1px solid var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-text-mode.svelte-k2b9e6 .jse-fold-progress:where(.svelte-k2b9e6) .jse-fold-cancel-button:where(.svelte-k2b9e6):hover { - background: var(--jse-theme-color-highlight, #5f9dff); - color: #fff; -}`);var aFA=FA('
        Collapsing
        '),rFA=FA('
        ',1),sFA=FA(" ",1),gFA=FA("
        ",1),lFA=FA('
        loading...
        '),cFA=FA("
        ");function CFA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=N(e,"readOnly",9),o=N(e,"mainMenuBar",9),a=N(e,"statusBar",9),r=N(e,"askToFormat",9),s=N(e,"externalContent",9),g=N(e,"externalSelection",9),l=N(e,"history",9),C=N(e,"indentation",9),I=N(e,"tabSize",9),d=N(e,"escapeUnicodeCharacters",9),B=N(e,"parser",9),E=N(e,"validator",9),Q=N(e,"validationParser",9),f=N(e,"onChange",9),b=N(e,"onChangeMode",9),S=N(e,"onSelect",9),M=N(e,"onUndo",9),D=N(e,"onRedo",9),F=N(e,"onError",9),_=N(e,"onFocus",9),U=N(e,"onBlur",9),J=N(e,"onRenderMenu",9),j=N(e,"onSortModal",9),AA=N(e,"onTransformModal",9),O=Cr("jsoneditor:TextMode"),DA={key:"Mod-i",run:Qe,shift:xA,preventDefault:!0},P=typeof window>"u";O("isSSR:",P);var aA,iA=IA(void 0,!0),BA=IA(void 0,!0),oA=IA(void 0,!0),sA=IA(!1,!0),hA=IA(r(),!0),YA=IA([],!0),ee=IA(!1,!0),UA=IA(0,!0),mA=IA(0,!0),KA=null,Pe=new F0,Je=new F0,HA=new F0,uA=new F0,ZA=new F0,QA=s(),WA=IA(DL(QA,C(),B()),!0),MA=hg.define(),be=null;function LA(){if(!be||be.length===0)return!1;var vA=be[0].startState,VA=be[be.length-1].state,me=be.map(SA=>SA.changes).reduce((SA,ae)=>SA.compose(ae)),dA={type:"text",undo:{changes:me.invert(vA.doc).toJSON(),selection:ra(vA.selection)},redo:{changes:me.toJSON(),selection:ra(VA.selection)}};return O("add history item",dA),l().add(dA),be=null,!0}var pA=IA(d(),!0);is(Tt(function*(){if(!P)try{aA=(function(vA){var{target:VA,initialText:me,readOnly:dA,indentation:SA}=vA;O("Create CodeMirror editor",{readOnly:dA,indentation:SA});var ae=(function(it,st){return iL(it)?it.ranges.every(bt=>bt.anchor{R(oA,it.state),it.docChanged&&(it.transactions.some(st=>!!st.annotation(MA))||(be=[...be??[],it]),Zo()),it.selectionSet&&Xo()}),atA(),ItA({top:!0}),ii.lineWrapping,Je.of(er.readOnly.of(dA)),uA.of(er.tabSize.of(I())),HA.of(ko(SA)),ZA.of(ii.theme({},{dark:Zi()}))]});return aA=new ii({state:xe,parent:VA}),ae&&aA.dispatch(aA.state.update({selection:ae.main,scrollIntoView:!0})),aA})({target:c(iA),initialText:Do(c(WA),c(sA))?"":c(A).escapeValue(c(WA)),readOnly:n(),indentation:C()})}catch(vA){console.error(vA)}})),Hl(()=>{wo(),aA&&(O("Destroy CodeMirror editor"),aA.destroy()),ei()});var Ft=II(),ht=II();function Ee(){aA&&(O("focus"),aA.focus())}function Kt(vA,VA){if(aA)try{(function(){var me=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],dA=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],SA=aA.state,ae=SA.doc.length,xe=UF(SA,ae,1/0);if(xe){var it=[];if(me.length===0)it=ut(xe,SA,void 0,dA);else{var{from:st}=q_(c(A).escapeValue(c(WA)),me);st!==void 0&&st!==0&&(it=ut(xe,SA,st,dA))}it.length>0&&(function(bt){Me.apply(this,arguments)})(it)}})(vA,VA)}catch(me){F()(me)}}function Ye(){return TF.of((vA,VA,me)=>{var dA=UF(vA,vA.doc.length,1/0);if(!dA||dA.lengthme)){if(SA&&xe.from=VA&&st.to>me&&(SA=st)}}}return SA})}function ze(vA){var VA=vA.lastChild;return VA&&VA.to==vA.to&&VA.type.isError}function ut(vA,VA,me){var dA=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],SA=[],ae=new Set;return vA.iterate({enter(xe){if(me===void 0||xe.from>=me){var it=FQ(VA,xe.from,xe.to);if(it){var st="".concat(it.from,"-").concat(it.to);if(!ae.has(st))if(dA)SA.push({from:it.from,to:it.to}),ae.add(st);else{var bt=SA.some(Kn=>Kn.from<=it.from&&Kn.to>=it.to);bt||(SA.push({from:it.from,to:it.to}),ae.add(st))}}}}}),SA}function Me(){return Me=Tt(function*(vA){if(vA.length!==0){var VA=vA.length>5e3;VA&&(R(ee,!0),R(UA,0),R(mA,vA.length),KA=new AbortController);var me=dA=>new Promise(SA=>{var ae;VA&&(ae=KA)!==null&&ae!==void 0&&ae.signal.aborted?SA():requestAnimationFrame(()=>{var xe=Math.min(dA+100,vA.length),it=vA.slice(dA,xe);aA.dispatch({effects:it.map(st=>GQ.of({from:st.from,to:st.to}))}),VA&&R(UA,xe),xe1&&arguments[1]!==void 0?arguments[1]:kL;if(aA)try{if(vA&&vA.length>0){var{from:me}=q_(c(A).escapeValue(c(WA)),vA);me!==void 0&&(aA.dispatch({selection:{anchor:me,head:me}}),HF(aA))}else zF(aA);VA?.(vA)}catch(dA){F()(dA)}}function z(){Y([],()=>!0)}function nA(){Kt([],!0)}var rA=!1;function NA(vA){return Ie(vA,!1)}function Ie(vA,VA){O("handlePatch",vA,VA);var me=B().parse(c(WA)),dA=lg(me,vA),SA=cw(me,vA);return ci({text:B().stringify(dA,null,C())},VA,!1),{json:dA,previousJson:me,undo:SA,redo:vA}}function Qe(){if(O("format"),n())return!1;try{var vA=B().parse(c(WA));return ci({text:B().stringify(vA,null,C())},!0,!1),R(hA,r()),!0}catch(VA){F()(VA)}return!1}function xA(){if(O("compact"),n())return!1;try{var vA=B().parse(c(WA));return ci({text:B().stringify(vA)},!0,!1),R(hA,!1),!0}catch(VA){F()(VA)}return!1}function _A(){if(O("repair"),!n())try{ci({text:ml(c(WA))},!0,!1),R(re,AL),R(di,void 0)}catch(vA){F()(vA)}}function Et(){var vA;if(!n())try{var VA=B().parse(c(WA));rA=!0,j()({id:Ft,json:VA,rootPath:[],onSort:(vA=Tt(function*(me){var{operations:dA}=me;O("onSort",dA),Ie(dA,!0)}),function(me){return vA.apply(this,arguments)}),onClose:()=>{rA=!1,Ee()}})}catch(me){F()(me)}}function et(vA){var{id:VA,rootPath:me,onTransform:dA,onClose:SA}=vA;try{var ae=B().parse(c(WA));rA=!0,AA()({id:VA||ht,json:ae,rootPath:me||[],onTransform:xe=>{dA?dA({operations:xe,json:ae,transformedJson:lg(ae,xe)}):(O("onTransform",xe),Ie(xe,!0))},onClose:()=>{rA=!1,Ee(),SA&&SA()}})}catch(xe){F()(xe)}}function Te(){n()||et({rootPath:[]})}function Le(){aA&&(c(iA)&&c(iA).querySelector(".cm-search")?Ey(aA):By(aA))}function si(){if(n())return!1;wo();var vA=l().undo();return O("undo",vA),fiA(vA)?(aA.dispatch({annotations:MA.of("undo"),changes:Vr.fromJSON(vA.undo.changes),selection:de.fromJSON(vA.undo.selection),scrollIntoView:!0}),!0):(M()(vA),!1)}function gn(){if(n())return!1;wo();var vA=l().redo();return O("redo",vA),fiA(vA)?(aA.dispatch({annotations:MA.of("redo"),changes:Vr.fromJSON(vA.redo.changes),selection:de.fromJSON(vA.redo.selection),scrollIntoView:!0}),!0):(D()(vA),!1)}function dn(){R(sA,!0),ci(s(),!0,!0)}function _e(){b()(ba.tree)}function Wi(){Yo()}function ui(vA){O("select validation error",vA);var{from:VA,to:me}=_t(vA);VA!==void 0&&me!==void 0&&(Mi(VA,me),Ee())}function Mi(vA,VA){O("setSelection",{anchor:vA,head:VA}),aA&&aA.dispatch(aA.state.update({selection:{anchor:vA,head:VA},scrollIntoView:!0}))}function zi(vA,VA){if(VA.state.selection.ranges.length===1){var me=VA.state.selection.ranges[0],dA=c(WA).slice(me.from,me.to);if(dA==="{"||dA==="["){var SA=OL.default.parse(c(WA)),ae=Object.keys(SA.pointers).find(it=>{var st;return((st=SA.pointers[it].value)===null||st===void 0?void 0:st.pos)===me.from}),xe=SA.pointers[ae];ae&&xe&&xe.value&&xe.valueEnd&&(O("pointer found, selecting inner contents of path:",ae,xe),Mi(xe.value.pos+1,xe.valueEnd.pos-1))}}}function vt(){return PeA(ln,{delay:300})}function Zi(){return!!c(iA)&&getComputedStyle(c(iA)).getPropertyValue("--jse-theme").includes("dark")}function _t(vA){var{path:VA,message:me,severity:dA}=vA,{line:SA,column:ae,from:xe,to:it}=q_(c(A).escapeValue(c(WA)),VA);return{path:VA,line:SA,column:ae,from:xe,to:it,message:me,severity:dA,actions:[]}}function L(vA,VA){var{line:me,column:dA,position:SA,message:ae}=vA;return{path:[],line:me,column:dA,from:SA,to:SA,severity:Jc.error,message:ae,actions:VA&&!n()?[{name:"Auto repair",apply:()=>_A()}]:void 0}}function Ct(vA){return{from:vA.from||0,to:vA.to||0,message:vA.message||"",actions:vA.actions,severity:vA.severity}}function ci(vA,VA,me){var dA=DL(vA,C(),B()),SA=!Qi(vA,QA),ae=QA;O("setCodeMirrorContent",{isChanged:SA,emitChange:VA,forceUpdate:me}),aA&&(SA||me)&&(QA=vA,R(WA,dA),Do(c(WA),c(sA))||aA.dispatch({changes:{from:0,to:aA.state.doc.length,insert:c(A).escapeValue(c(WA))}}),LA(),SA&&VA&&ha(QA,ae))}function Bn(vA){return iL(vA)?de.fromJSON(vA):void 0}function En(){return qn.apply(this,arguments)}function qn(){return qn=Tt(function*(){O("refresh"),yield(function(){return Co.apply(this,arguments)})()}),qn.apply(this,arguments)}function Yo(){if(aA){var vA=aA?c(A).unescapeValue(aA.state.doc.toString()):"",VA=vA!==c(WA);if(O("onChangeCodeMirrorValue",{isChanged:VA}),VA){var me=QA;R(WA,vA),QA={text:c(WA)},LA(),ha(QA,me),Mo(),Xo()}}}function Co(){return(Co=Tt(function*(){if(Mo(),aA){var vA=Zi();return O("updateTheme",{dark:vA}),aA.dispatch({effects:[ZA.reconfigure(ii.theme({},{dark:vA}))]}),new Promise(VA=>setTimeout(VA))}return Promise.resolve()})).apply(this,arguments)}function ko(vA){var VA=xd.of(typeof vA=="number"?" ".repeat(vA):vA);return vA===" "?[VA]:[VA,oFA]}QG({onMount:is,onDestroy:Hl,getWindow:()=>cm(c(BA)),hasFocus:()=>rA&&document.hasFocus()||tG(c(BA)),onFocus:_(),onBlur:()=>{wo(),U()()}});var Zo=qE(Yo,300);function wo(){Zo.flush()}function ha(vA,VA){f()&&f()(vA,VA,{contentErrors:Qn(),patchResult:void 0})}function Xo(){S()(ra(c(oA).selection))}function ra(vA){return ye({type:no.text},vA.toJSON())}function Do(vA,VA){return!!vA&&vA.length>X_&&!VA}var re=IA(AL,!0),di=IA(void 0,!0);function ln(){if(Do(c(WA),c(sA)))return[];var vA=Qn();if(uiA(vA)){var{parseError:VA,isRepairable:me}=vA;return[Ct(L(VA,me))]}return RSA(vA)?vA.validationErrors.map(_t).map(Ct):[]}function Qn(){O("validate:start"),wo();var vA=To(c(A).escapeValue(c(WA)),E(),B(),Q());return uiA(vA)?(R(re,vA.isRepairable?diA:"invalid"),R(di,vA.parseError),R(YA,[])):(R(re,AL),R(di,void 0),R(YA,vA?.validationErrors||[])),O("validate:end"),vA}var To=ZE(ARA);function Ma(){c(di)&&(function(vA){O("select parse error",vA);var VA=L(vA,!1);Mi(VA.from!=null?VA.from:0,VA.to!=null?VA.to:0),Ee()})(c(di))}var wi={icon:AV,text:"Show me",title:"Move to the parse error location",onClick:Ma};RA(()=>G(d()),()=>{R(A,AG({escapeControlCharacters:!1,escapeUnicodeCharacters:d()}))}),RA(()=>G(s()),()=>{ci(s(),!1,!1)}),RA(()=>G(g()),()=>{(function(vA){if(iL(vA)){var VA=Bn(vA);!aA||!VA||c(oA)&&c(oA).selection.eq(VA)||(O("applyExternalSelection",VA),aA.dispatch({selection:VA}))}})(g())}),RA(()=>G(E()),()=>{(function(vA){O("updateLinter",vA),aA&&aA.dispatch({effects:Pe.reconfigure(vt())})})(E())}),RA(()=>G(C()),()=>{(function(vA){aA&&(O("updateIndentation",vA),aA.dispatch({effects:HA.reconfigure(ko(vA))}))})(C())}),RA(()=>G(I()),()=>{(function(vA){aA&&(O("updateTabSize",vA),aA.dispatch({effects:uA.reconfigure(er.tabSize.of(vA))}))})(I())}),RA(()=>G(n()),()=>{(function(vA){aA&&(O("updateReadOnly",vA),aA.dispatch({effects:[Je.reconfigure(er.readOnly.of(vA))]}))})(n())}),RA(()=>(c(pA),G(d())),()=>{c(pA)!==d()&&(R(pA,d()),O("forceUpdateText",{escapeUnicodeCharacters:d()}),aA&&aA.dispatch({changes:{from:0,to:aA.state.doc.length,insert:c(A).escapeValue(c(WA))}}))}),RA(()=>(c(re),G(n()),SC),()=>{R(i,c(re)!==diA||n()?[wi]:[{icon:SC,text:"Auto repair",title:"Automatically repair JSON",onClick:_A},wi])}),kn();var Io={focus:Ee,collapse:Kt,expand:Y,patch:NA,handlePatch:Ie,openTransformModal:et,refresh:En,flush:wo,validate:Qn};Ai(!0);var nr,yo=cFA(),Pa=CA(yo),Gn=vA=>{var VA=tt(()=>(c(WA),EA(()=>c(WA).length===0))),me=tt(()=>!c(VA)),dA=tt(()=>!c(VA)),SA=tt(()=>!c(VA)),ae=tt(()=>!c(VA)),xe=tt(()=>!c(VA)),it=tt(()=>!c(VA));(function(st,bt){St(bt,!1);var Kn=IA(void 0,!0),Ri=N(bt,"readOnly",9,!1),Ji=N(bt,"onExpandAll",9),Vt=N(bt,"onCollapseAll",9),Ni=N(bt,"onFormat",9),ka=N(bt,"onCompact",9),Lt=N(bt,"onSort",9),gt=N(bt,"onTransform",9),Fi=N(bt,"onToggleSearch",9),Oi=N(bt,"onUndo",9),Vn=N(bt,"onRedo",9),hn=N(bt,"canExpandAll",9),Mt=N(bt,"canCollapseAll",9),sa=N(bt,"canUndo",9),Ho=N(bt,"canRedo",9),u=N(bt,"canFormat",9),y=N(bt,"canCompact",9),x=N(bt,"canSort",9),H=N(bt,"canTransform",9),k=N(bt,"onRenderMenu",9),T=IA(void 0,!0),eA=IA(void 0,!0),gA={type:"button",icon:g3,title:"Search (Ctrl+F)",className:"jse-search",onClick:Fi()},wA=IA(void 0,!0);RA(()=>(G(Ji()),G(hn())),()=>{R(T,{type:"button",icon:XoA,title:"Expand all",className:"jse-expand-all",onClick:Ji(),disabled:!hn()})}),RA(()=>(G(Vt()),G(Mt())),()=>{R(eA,{type:"button",icon:$oA,title:"Collapse all",className:"jse-collapse-all",onClick:Vt(),disabled:!Mt()})}),RA(()=>(G(Ri()),c(T),c(eA),G(Ni()),G(u()),G(ka()),G(y()),G(Lt()),G(x()),G(gt()),G(H()),G(Oi()),G(sa()),G(Vn()),G(Ho())),()=>{R(wA,Ri()?[c(T),c(eA),{type:"separator"},gA,{type:"space"}]:[c(T),c(eA),{type:"separator"},{type:"button",icon:ViA,title:"Format JSON: add proper indentation and new lines (Ctrl+I)",className:"jse-format",onClick:Ni(),disabled:Ri()||!u()},{type:"button",icon:tNA,title:"Compact JSON: remove all white spacing and new lines (Ctrl+Shift+I)",className:"jse-compact",onClick:ka(),disabled:Ri()||!y()},{type:"separator"},{type:"button",icon:C3,title:"Sort",className:"jse-sort",onClick:Lt(),disabled:Ri()||!x()},{type:"button",icon:s3,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:gt(),disabled:Ri()||!H()},gA,{type:"separator"},{type:"button",icon:$w,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:Oi(),disabled:!sa()},{type:"button",icon:Xw,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:Vn(),disabled:!Ho()},{type:"space"}])}),RA(()=>(G(k()),c(wA)),()=>{R(Kn,k()(c(wA))||c(wA))}),kn(),Ai(!0),xv(st,{get items(){return c(Kn)}}),xt()})(vA,{get readOnly(){return n()},onExpandAll:z,onCollapseAll:nA,onFormat:Qe,onCompact:xA,onSort:Et,onTransform:Te,onToggleSearch:Le,onUndo:si,onRedo:gn,get canExpandAll(){return c(me)},get canCollapseAll(){return c(dA)},get canFormat(){return c(SA)},get canCompact(){return c(ae)},get canSort(){return c(xe)},get canTransform(){return c(it)},get canUndo(){return G(l()),EA(()=>l().canUndo)},get canRedo(){return G(l()),EA(()=>l().canRedo)},get onRenderMenu(){return J()}})};TA(Pa,vA=>{o()&&vA(Gn)});var xi=bA(Pa,2),Pt=vA=>{var VA=aFA(),me=bA(CA(VA),2),dA=CA(me),SA=bA(me,2);ve(()=>Yl(dA,"width: ".concat(c(mA)>0?c(UA)/c(mA)*100:0,"%"))),ue("click",SA,ei),lA(vA,VA)};TA(xi,vA=>{c(ee)&&vA(Pt)});var Sn=bA(xi,2),Bo=vA=>{var VA,me=tt(()=>(c(WA),c(sA),EA(()=>Do(c(WA),c(sA))))),dA=gFA(),SA=At(dA);Jo(SA,bt=>R(iA,bt),()=>c(iA));var ae=bA(SA,2),xe=bt=>{var Kn=rFA(),Ri=At(Kn),Ji=tt(()=>(G(Wy),G(X_),c(WA),EA(()=>"The JSON document is larger than ".concat(Wy(X_),", ")+"and may crash your browser when loading it in text mode. Actual size: ".concat(Wy(c(WA).length),"."))));tl(Ri,{get icon(){return BI},type:"error",get message(){return c(Ji)},actions:[{text:"Open anyway",title:"Open the document in text mode. This may freeze or crash your browser.",onClick:dn},{text:"Open in tree mode",title:"Open the document in tree mode. Tree mode can handle large documents.",onClick:_e},{text:"Cancel",title:"Cancel opening this large document.",onClick:Wi}],onClose:Ee});var Vt=CA(bA(Ri,2));ve(Ni=>Rt(Vt,Ni),[()=>(G(XC),c(WA),G(nv),EA(()=>XC(c(WA)||"",nv)))]),lA(bt,Kn)};TA(ae,bt=>{c(me)&&bt(xe)});var it=bA(ae,2),st=bt=>{var Kn=sFA(),Ri=At(Kn),Ji=gt=>{(function(Fi,Oi){St(Oi,!1);var Vn=N(Oi,"editorState",8),hn=IA(),Mt=IA(),sa=IA(),Ho=IA(),u=IA();RA(()=>G(Vn()),()=>{var wA;R(hn,(wA=Vn())===null||wA===void 0||(wA=wA.selection)===null||wA===void 0||(wA=wA.main)===null||wA===void 0?void 0:wA.head)}),RA(()=>(c(hn),G(Vn())),()=>{var wA;R(Mt,c(hn)!==void 0?(wA=Vn())===null||wA===void 0||(wA=wA.doc)===null||wA===void 0?void 0:wA.lineAt(c(hn)):void 0)}),RA(()=>c(Mt),()=>{R(sa,c(Mt)!==void 0?c(Mt).number:void 0)}),RA(()=>(c(Mt),c(hn)),()=>{R(Ho,c(Mt)!==void 0&&c(hn)!==void 0?c(hn)-c(Mt).from+1:void 0)}),RA(()=>G(Vn()),()=>{var wA;R(u,(wA=Vn())===null||wA===void 0||(wA=wA.selection)===null||wA===void 0||(wA=wA.ranges)===null||wA===void 0?void 0:wA.reduce((Ae,oe)=>Ae+oe.to-oe.from,0))}),kn(),Ai();var y=tFA(),x=CA(y),H=wA=>{var Ae=$NA(),oe=CA(Ae);ve(()=>{var Be;return Rt(oe,"Line: ".concat((Be=c(sa))!==null&&Be!==void 0?Be:""))}),lA(wA,Ae)};TA(x,wA=>{c(sa)!==void 0&&wA(H)});var k=bA(x,2),T=wA=>{var Ae=AFA(),oe=CA(Ae);ve(()=>{var Be;return Rt(oe,"Column: ".concat((Be=c(Ho))!==null&&Be!==void 0?Be:""))}),lA(wA,Ae)};TA(k,wA=>{c(Ho)!==void 0&&wA(T)});var eA=bA(k,2),gA=wA=>{var Ae=eFA(),oe=CA(Ae);ve(()=>{var Be;return Rt(oe,"Selection: ".concat((Be=c(u))!==null&&Be!==void 0?Be:""," characters"))}),lA(wA,Ae)};TA(eA,wA=>{c(u)!==void 0&&c(u)>0&&wA(gA)}),lA(Fi,y),xt()})(gt,{get editorState(){return c(oA)}})};TA(Ri,gt=>{a()&>(Ji)});var Vt=bA(Ri,2),Ni=gt=>{tl(gt,{type:"error",get icon(){return BI},get message(){return c(di),EA(()=>c(di).message)},get actions(){return c(i)},onClick:Ma,onClose:Ee})};TA(Vt,gt=>{c(di)&>(Ni)});var ka=bA(Vt,2),Lt=gt=>{var Fi=tt(()=>[{icon:ViA,text:"Format",title:"Format JSON: add proper indentation and new lines (Ctrl+I)",onClick:Qe},{icon:c3,text:"No thanks",title:"Close this message",onClick:()=>R(hA,!1)}]);tl(gt,{type:"success",message:"Do you want to format the JSON?",get actions(){return c(Fi)},onClose:Ee})};TA(ka,gt=>{c(di),c(hA),G(CiA),c(WA),EA(()=>!c(di)&&c(hA)&&CiA(c(WA)))&>(Lt)}),hG(bA(ka,2),{get validationErrors(){return c(YA)},selectError:ui}),lA(bt,Kn)};TA(it,bt=>{c(me)||bt(st)}),ve(()=>VA=$t(SA,1,"jse-contents svelte-k2b9e6",null,VA,{"jse-hidden":c(me)})),lA(vA,dA)},So=vA=>{lA(vA,lFA())};return TA(Sn,vA=>{P?vA(So,!1):vA(Bo)}),Jo(yo,vA=>R(BA,vA),()=>c(BA)),ve(()=>nr=$t(yo,1,"jse-text-mode svelte-k2b9e6",null,nr,{"no-main-menu":!o()})),lA(t,yo),Ot(e,"focus",Ee),Ot(e,"collapse",Kt),Ot(e,"expand",Y),Ot(e,"patch",NA),Ot(e,"handlePatch",Ie),Ot(e,"openTransformModal",et),Ot(e,"refresh",En),Ot(e,"flush",wo),Ot(e,"validate",Qn),xt(Io)}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-inline-value.svelte-1jv89ui { - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - line-height: var(--jse-line-height, calc(1em + 4px)); - border: none; - padding: 0 calc(0.5 * var(--jse-padding, 10px)); - background: transparent; - color: inherit; - cursor: inherit; -} -.jse-inline-value.jse-highlight.svelte-1jv89ui { - background-color: var(--jse-search-match-color, #ffe665); - outline: var(--jse-search-match-outline, none); -} -.jse-inline-value.jse-highlight.jse-active.svelte-1jv89ui { - background-color: var(--jse-search-match-active-color, var(--jse-search-match-color, #ffe665)); - outline: var(--jse-search-match-outline, 2px solid #e0be00); -}`);var IFA=FA('');qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-column-header.svelte-5pxwfq { - background: none; - border: none; - font-family: inherit; - font-size: inherit; - color: inherit; - display: flex; - gap: var(--jse-padding, 10px); - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); - width: 100%; -} -.jse-column-header.svelte-5pxwfq:hover { - background: var(--jse-table-header-background-highlight, #e8e8e8); -} -.jse-column-header.svelte-5pxwfq:not(.jse-column-header.jse-readonly) { - cursor: pointer; -} -.jse-column-header.svelte-5pxwfq span.jse-column-sort-icon:where(.svelte-5pxwfq) { - height: 1em; -}`);var dFA=FA(''),BFA=FA('');qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-table-mode-welcome.svelte-1b9gnk8 { - flex: 1; - display: flex; - flex-direction: column; - overflow: auto; - align-items: center; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-table-mode-welcome.svelte-1b9gnk8:last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-space.jse-before:where(.svelte-1b9gnk8) { - flex: 1; -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) { - display: flex; - flex-direction: column; - gap: var(--jse-padding, 10px); - max-width: 400px; - margin: 2em var(--jse-padding, 10px); - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-arrays-info:where(.svelte-1b9gnk8) { - color: var(--jse-panel-color-readonly, #b2b2b2); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) { - display: flex; - align-items: center; - gap: var(--jse-padding, 10px); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) .jse-nested-property-path:where(.svelte-1b9gnk8) { - flex: 1; -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) .jse-nested-property:where(.svelte-1b9gnk8) .jse-nested-property-path:where(.svelte-1b9gnk8) .jse-nested-property-count:where(.svelte-1b9gnk8) { - opacity: 0.5; - white-space: nowrap; -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8) { - text-align: left; - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-nested-arrays:where(.svelte-1b9gnk8) button.jse-nested-array-action:where(.svelte-1b9gnk8):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -} -.jse-table-mode-welcome.svelte-1b9gnk8 .jse-space.jse-after:where(.svelte-1b9gnk8) { - flex: 2; -}`);var EFA=FA(`An empty document cannot be opened in table mode. You can go to tree mode instead, or paste - a JSON Array using Ctrl+V.`,1),QFA=FA(''),hFA=FA('
        '),uFA=FA('
        ');function fFA(t,e){St(e,!0);var A=Dg(()=>e.json?(function(E){var Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2,f=[];return(function b(S,M){ia(S)&&M.length{b(S[D],M.concat(D))}),qo(S)&&f.push(M)})(E,[]),f})(e.json).slice(0,99).filter(E=>E.length>0):[]),i=Dg(()=>!qi(c(A))),n=Dg(()=>e.json===void 0&&(e.text===""||e.text===void 0)),o=Dg(()=>c(i)?"Object with nested arrays":c(n)?"An empty document":ia(e.json)?"An object":qo(e.json)?"An empty array":"A ".concat($L(e.json,e.parser))),a=uFA();a.__click=()=>e.onClick();var r=bA(CA(a),2),s=CA(r),g=CA(s),l=bA(s,2),C=CA(l),I=E=>{lA(E,ur(`An object cannot be opened in table mode. You can open a nested array instead, or open the - document in tree mode.`))},d=E=>{var Q=bi(),f=At(Q),b=M=>{lA(M,EFA())},S=M=>{var D=ur();ve(()=>{var F;return Rt(D,"".concat((F=c(o))!==null&&F!==void 0?F:""," cannot be opened in table mode. You can open the document in tree mode instead."))}),lA(M,D)};TA(f,M=>{c(n)&&!e.readOnly?M(b):M(S,!1)},!0),lA(E,Q)};TA(C,E=>{c(i)?E(I):E(d,!1)});var B=bA(l,2);Qa(B,17,()=>c(A),Na,(E,Q)=>{var f=Dg(()=>(function(j){return je(e.json,j).length})(c(Q))),b=hFA(),S=CA(b),M=CA(S),D=CA(bA(M)),F=bA(S,2);F.__click=()=>e.openJSONEditorModal(c(Q));var _=CA(F),U=bA(F,2),J=j=>{var AA=QFA();AA.__click=()=>e.extractPath(c(Q)),lA(j,AA)};TA(U,j=>{e.readOnly||j(J)}),ve(j=>{var AA;Rt(M,'"'.concat(j??"",'" ')),Rt(D,"(".concat((AA=c(f))!==null&&AA!==void 0?AA:""," ").concat(c(f)!==1?"items":"item",")")),Rt(_,e.readOnly?"View":"Edit")},[()=>vg(c(Q))]),lA(E,b)}),bA(B,2).__click=()=>e.onChangeMode(ba.tree),ve(()=>Rt(g,c(o))),lA(t,a),xt()}sm(["click"]);qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-column-header.svelte-1wgrwv3 { - background: none; - border: none; - font-family: inherit; - font-size: inherit; - color: inherit; - display: flex; - gap: var(--jse-padding, 10px); - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); - width: 100%; -} -.jse-column-header.svelte-1wgrwv3:hover { - background: var(--jse-table-header-background-highlight, #e8e8e8); -} -.jse-column-header.svelte-1wgrwv3:not(.jse-column-header.jse-readonly) { - cursor: pointer; -}`);var mFA=FA('');qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-table-mode.svelte-1p86y3c { - flex: 1; - display: flex; - flex-direction: column; - position: relative; - background: var(--jse-background-color, #fff); - min-width: 0; - min-height: 0; - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: var(--jse-text-color, #4d4d4d); - line-height: var(--jse-line-height, calc(1em + 4px)); -} -.jse-table-mode.no-main-menu.svelte-1p86y3c { - border-top: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-table-mode.svelte-1p86y3c .jse-search-box-container:where(.svelte-1p86y3c) { - position: relative; - height: 0; - top: calc(var(--jse-line-height, calc(1em + 4px)) + 2 * var(--jse-padding, 10px)); - margin-right: calc(var(--jse-padding, 10px) + 20px); - margin-left: var(--jse-padding, 10px); - text-align: right; - z-index: 3; -} -.jse-table-mode.svelte-1p86y3c .jse-hidden-input-label:where(.svelte-1p86y3c) { - position: fixed; - right: 0; - top: 0; - width: 0; - height: 0; -} -.jse-table-mode.svelte-1p86y3c .jse-hidden-input-label:where(.svelte-1p86y3c) .jse-hidden-input:where(.svelte-1p86y3c) { - width: 0; - height: 0; - padding: 0; - border: 0; - outline: none; -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) { - flex: 1; - align-items: flex-start; - flex-direction: column; - display: flex; - overflow: auto; - overflow-anchor: none; - scrollbar-gutter: stable; - border-left: var(--jse-main-border, 1px solid #d7d7d7); - border-right: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c):last-child { - border-bottom: var(--jse-main-border, 1px solid #d7d7d7); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) { - border-collapse: collapse; - border-spacing: 0; -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-start-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c), -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-end-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c) { - margin: 0; - padding: 0; -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-search-box-background:where(.svelte-1p86y3c) { - background: var(--jse-table-header-background, #f5f5f5); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-invisible-end-section:where(.svelte-1p86y3c) td:where(.svelte-1p86y3c) { - padding-bottom: var(--jse-padding, 10px); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c):hover { - background-color: var(--jse-table-row-odd-background, rgba(0, 0, 0, 0.05)); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) { - padding: 0 var(--jse-padding, 10px) 0 0; - vertical-align: top; - white-space: nowrap; - height: var(--jse-line-height, calc(1em + 4px)); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c), .jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-gutter:where(.svelte-1p86y3c) { - font-weight: normal; - text-align: left; - color: var(--jse-text-readonly, #8d8d8d); - background: var(--jse-table-header-background, #f5f5f5); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c) { - padding: 0; - position: sticky; - top: 0; -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-header:where(.svelte-1p86y3c) .jse-table-root-error:where(.svelte-1p86y3c) { - padding: calc(0.5 * var(--jse-padding, 10px)) var(--jse-padding, 10px) calc(0.5 * var(--jse-padding, 10px)) calc(0.5 * var(--jse-padding, 10px)); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell.jse-table-cell-gutter:where(.svelte-1p86y3c) { - padding: 0 var(--jse-padding, 10px) 0 calc(0.5 * var(--jse-padding, 10px)); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer:where(.svelte-1p86y3c) { - display: inline-block; - cursor: var(--jse-contents-cursor, pointer); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer:where(.svelte-1p86y3c):hover { - background: var(--jse-hover-background-color, rgba(0, 0, 0, 0.06)); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-value-outer.jse-selected-value:where(.svelte-1p86y3c) { - background: var(--jse-selection-background-color, #d3d3d3); -} -.jse-table-mode.svelte-1p86y3c .jse-contents:where(.svelte-1p86y3c) table.jse-table-main:where(.svelte-1p86y3c) .jse-table-row:where(.svelte-1p86y3c) .jse-table-cell:where(.svelte-1p86y3c) .jse-context-menu-anchor:where(.svelte-1p86y3c) { - display: inline-flex; - position: relative; - vertical-align: top; -} -.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) { - align-items: unset; -} -.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) .jse-loading-space:where(.svelte-1p86y3c) { - flex: 1; -} -.jse-table-mode.svelte-1p86y3c .jse-contents.jse-contents-loading:where(.svelte-1p86y3c) .jse-loading:where(.svelte-1p86y3c) { - flex: 2; - text-align: center; - color: var(--jse-panel-color-readonly, #b2b2b2); - box-sizing: border-box; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); -}`);var pFA=FA('
        '),wFA=FA(''),DFA=FA(''),yFA=FA(' '),vFA=FA('
        '),bFA=FA('
        '),MFA=FA(''),kFA=FA(''),SFA=FA('
        ',1),xFA=FA(" ",1),RFA=FA(' ',1),NFA=FA('
        loading...
        '),FFA=FA('
        ',1);function _FA(t,e){St(e,!1);var A=IA(void 0,!0),i=IA(void 0,!0),n=IA(void 0,!0),o=Cr("jsoneditor:TableMode"),{openAbsolutePopup:a,closeAbsolutePopup:r}=r1("absolute-popup"),s=joA(),g=II(),l=II(),C=typeof window>"u";o("isSSR:",C);var I=N(e,"readOnly",9),d=N(e,"externalContent",9),B=N(e,"externalSelection",9),E=N(e,"history",9),Q=N(e,"truncateTextSize",9),f=N(e,"mainMenuBar",9),b=N(e,"escapeControlCharacters",9),S=N(e,"escapeUnicodeCharacters",9),M=N(e,"flattenColumns",9),D=N(e,"parser",9),F=N(e,"parseMemoizeOne",9),_=N(e,"validator",9),U=N(e,"validationParser",9),J=N(e,"indentation",9),j=N(e,"onChange",9),AA=N(e,"onChangeMode",9),O=N(e,"onSelect",9),DA=N(e,"onUndo",9),P=N(e,"onRedo",9),aA=N(e,"onRenderValue",9),iA=N(e,"onRenderMenu",9),BA=N(e,"onRenderContextMenu",9),oA=N(e,"onFocus",9),sA=N(e,"onBlur",9),hA=N(e,"onSortModal",9),YA=N(e,"onTransformModal",9),ee=N(e,"onJSONEditorModal",9),UA=IA(void 0,!0),mA=IA(void 0,!0),KA=IA(void 0,!0),Pe=IA(void 0,!0),Je=IA(void 0,!0);QG({onMount:is,onDestroy:Hl,getWindow:()=>cm(c(mA)),hasFocus:()=>Me&&document.hasFocus()||tG(c(mA)),onFocus:()=>{ei=!0,oA()&&oA()()},onBlur:()=>{ei=!1,sA()&&sA()()}});var HA,uA=IA(void 0,!0),ZA=IA(void 0,!0),QA=IA(void 0,!0),WA=IA(void 0,!0),MA=IA(void 0,!0),be=IA(void 0,!0),LA=IA(!1,!0),pA=IA(!1,!0);function Ft(k){R(be,(HA=k)?FoA(c(uA),HA.items):void 0)}function ht(k){return Ee.apply(this,arguments)}function Ee(){return(Ee=Tt(function*(k){R(_A,void 0),yield En(k)})).apply(this,arguments)}function Kt(){R(LA,!1),R(pA,!1),L()}var Ye=IA(1e4,!0),ze=IA([],!0),ut=IA(void 0,!0),Me=!1,ei=!1,Y=IA(!1,!0),z=IA({},!0),nA=IA(600,!0),rA=IA(0,!0),NA=18;function Ie(k){R(_A,k)}function Qe(k){c(_A)&&k!==void 0&&(br(k,jd(c(_A)))&&br(k,ct(c(_A)))||(o("clearing selection: path does not exist anymore",c(_A)),R(_A,void 0)))}var xA=IA(c(uA)!==void 0?ML({json:c(uA)}):void 0,!0),_A=IA(Zf(B())?B():void 0,!0),Et=IA(void 0,!0),et=IA(!1,!0);function Te(k){if(!I()){o("onSortByHeader",k);var T=k.sortDirection===Kl.desc?-1:1;Mi(AaA(c(uA),[],k.path,T),(eA,gA)=>({state:gA,sortedColumn:k}))}}is(()=>{c(_A)&&Yo(ct(c(_A)))});var Le=IA(void 0,!0);function si(k){if(k.json!==void 0||k.text!==void 0){var T=c(uA)!==void 0&&k.json!==void 0;E().add({type:"tree",undo:{patch:T?[{op:"replace",path:"",value:k.json}]:void 0,json:k.json,text:k.text,documentState:k.documentState,textIsRepaired:k.textIsRepaired,selection:z0(k.selection),sortedColumn:k.sortedColumn},redo:{patch:T?[{op:"replace",path:"",value:c(uA)}]:void 0,json:c(uA),text:c(ZA),documentState:c(xA),textIsRepaired:c(et),selection:z0(c(_A)),sortedColumn:c(Et)}})}}var gn=IA([],!0),dn=ZE(qoA);function _e(k,T,eA,gA){oh(()=>{var wA;try{wA=dn(k,T,eA,gA)}catch(Ae){wA=[{path:[],message:"Failed to validate: "+Ae.message,severity:Jc.warning}]}Qi(wA,c(gn))||(o("validationErrors changed:",wA),R(gn,wA))},wA=>o("validationErrors updated in ".concat(wA," ms")))}function Wi(){return o("validate"),c(QA)?{parseError:c(QA),isRepairable:!1}:(_e(c(uA),_(),D(),U()),qi(c(gn))?void 0:{validationErrors:c(gn)})}function ui(k,T){if(o("patch",k,T),c(uA)===void 0)throw new Error("Cannot apply patch: no JSON");var eA=c(uA),gA={json:void 0,text:c(ZA),documentState:c(xA),selection:z0(c(_A)),sortedColumn:c(Et),textIsRepaired:c(et)},wA=NoA(c(uA),k),Ae=moA(c(uA),c(xA),k),oe=yNA(c(Et),k,c(ze)),Be=typeof T=="function"?T(Ae.json,Ae.documentState,c(_A)):void 0;return R(uA,Be?.json!==void 0?Be.json:Ae.json),R(xA,Be?.state!==void 0?Be.state:Ae.documentState),R(_A,Be?.selection!==void 0?Be.selection:c(_A)),R(Et,Be?.sortedColumn!==void 0?Be.sortedColumn:oe),R(ZA,void 0),R(et,!1),R(WA,void 0),R(MA,void 0),R(QA,void 0),E().add({type:"tree",undo:ye({patch:wA},gA),redo:{patch:k,json:void 0,text:void 0,documentState:c(xA),selection:z0(c(_A)),sortedColumn:c(Et),textIsRepaired:c(et)}}),{json:c(uA),previousJson:eA,undo:wA,redo:k}}function Mi(k,T){o("handlePatch",k,T);var eA={json:c(uA),text:c(ZA)},gA=ui(k,T);return zi(eA,gA),gA}function zi(k,T){if((k.json!==void 0||k?.text!==void 0)&&j()){if(c(ZA)!==void 0){var eA={text:c(ZA),json:void 0};j()(eA,k,{contentErrors:Wi(),patchResult:T})}else if(c(uA)!==void 0){var gA={text:void 0,json:c(uA)};j()(gA,k,{contentErrors:Wi(),patchResult:T})}}}function vt(k){o("pasted json as text",k),R(WA,k)}function Zi(k){o("pasted multiline text",{pastedText:k}),R(MA,k)}function _t(k){var T=parseInt(k[0],10),eA=[String(T+1),...k.slice(1)];return br(c(uA),eA)?Ui(eA):Ui(k)}function L(){o("focus"),c(Pe)&&(c(Pe).focus(),c(Pe).select())}function Ct(k){R(rA,k.target.scrollTop)}function ci(){c(_A)||R(_A,(function(){if(qo(c(uA))&&!qi(c(uA))&&!qi(c(ze)))return Ui(["0",...c(ze)[0]])})())}function Bn(){if(c(et)&&c(uA)!==void 0){var k={json:c(uA),text:c(ZA)},T={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(ZA),textIsRepaired:c(et)};R(ZA,void 0),R(et,!1),Qe(c(uA)),si(T),zi(k,void 0)}return{json:c(uA),text:c(ZA)}}function En(k){var{scrollToWhenVisible:T=!0}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},eA=c(LA)?Uf:0,gA=ZiA(k,c(ze),z,NA),wA=gA-c(rA)+eA+NA,Ae=Co(k);if(o("scrollTo",{path:k,top:gA,scrollTop:c(rA),elem:Ae}),!c(KA))return Promise.resolve();var oe=c(KA).getBoundingClientRect();if(Ae&&!T){var Be=Ae.getBoundingClientRect();if(Be.bottom>oe.top&&Be.top{s(Ae,{container:c(KA),offset:He,duration:300,callback:()=>{qn(k),ke()}})}:ke=>{s(wA,{container:c(KA),offset:He,duration:300,callback:()=>{Mo(),qn(k),ke()}})})}function qn(k){var T=Co(k);if(T&&c(KA)){var eA=c(KA).getBoundingClientRect(),gA=T.getBoundingClientRect();if(gA.right>eA.right){var wA=gA.right-eA.right;$g(KA,c(KA).scrollLeft+=wA)}if(gA.leftHe){var ke=wA-He;$g(KA,c(KA).scrollTop+=ke)}if(gAW0(k.slice(1),Ae)),wA=gA?k.slice(0,1).concat(gA):k;return(T=(eA=c(KA))===null||eA===void 0?void 0:eA.querySelector('td[data-path="'.concat(qy(wA),'"]')))!==null&&T!==void 0?T:void 0}function ko(k){var T,{anchor:eA,left:gA,top:wA,width:Ae,height:oe,offsetTop:Be,offsetLeft:He,showTip:ke}=k,Ne=(function(fA){var{json:PA,documentState:Fe,selection:pe,readOnly:De,onEditValue:ot,onEditRow:jt,onToggleEnforceString:ki,onCut:xn,onCopy:Pi,onPaste:Eo,onRemove:Wt,onDuplicateRow:$o,onInsertBeforeRow:Wn,onInsertAfterRow:Aa,onRemoveRow:un}=fA,Gt=PA!==void 0,Xi=!!pe,Zt=PA!==void 0&&pe?je(PA,ct(pe)):void 0,mt=Gt&&(lo(pe)||cr(pe)||In(pe)),gi=!De&&Gt&&pe!==void 0&&rv(pe),ga=gi&&!aa(Zt),Zn=!De&&mt,ea=pe!==void 0&&P0(PA,Fe,ct(pe));return[{type:"separator"},{type:"row",items:[{type:"column",items:[{type:"label",text:"Table cell:"},{type:"dropdown-button",main:{type:"button",onClick:()=>ot(),icon:nd,text:"Edit",title:"Edit the value (Double-click on the value)",disabled:!gi},width:"11em",items:[{type:"button",icon:nd,text:"Edit",title:"Edit the value (Double-click on the value)",onClick:()=>ot(),disabled:!gi},{type:"button",icon:ea?KS:YS,text:"Enforce string",title:"Enforce keeping the value as string when it contains a numeric value",onClick:()=>ki(),disabled:!ga}]},{type:"dropdown-button",main:{type:"button",onClick:()=>xn(!0),icon:od,text:"Cut",title:"Cut selected contents, formatted with indentation (Ctrl+X)",disabled:!Zn},width:"10em",items:[{type:"button",icon:od,text:"Cut formatted",title:"Cut selected contents, formatted with indentation (Ctrl+X)",onClick:()=>xn(!0),disabled:De||!mt},{type:"button",icon:od,text:"Cut compacted",title:"Cut selected contents, without indentation (Ctrl+Shift+X)",onClick:()=>xn(!1),disabled:De||!mt}]},{type:"dropdown-button",main:{type:"button",onClick:()=>Pi(!0),icon:xC,text:"Copy",title:"Copy selected contents, formatted with indentation (Ctrl+C)",disabled:!mt},width:"12em",items:[{type:"button",icon:xC,text:"Copy formatted",title:"Copy selected contents, formatted with indentation (Ctrl+C)",onClick:()=>Pi(!1),disabled:!mt},{type:"button",icon:xC,text:"Copy compacted",title:"Copy selected contents, without indentation (Ctrl+Shift+C)",onClick:()=>Pi(!1),disabled:!mt}]},{type:"button",onClick:()=>Eo(),icon:_S,text:"Paste",title:"Paste clipboard contents (Ctrl+V)",disabled:De||!Xi},{type:"button",onClick:()=>Wt(),icon:Ww,text:"Remove",title:"Remove selected contents (Delete)",disabled:De||!mt}]},{type:"column",items:[{type:"label",text:"Table row:"},{type:"button",onClick:()=>jt(),icon:nd,text:"Edit row",title:"Edit the current row",disabled:De||!Xi||!Gt},{type:"button",onClick:()=>$o(),icon:GS,text:"Duplicate row",title:"Duplicate the current row (Ctrl+D)",disabled:De||!Xi||!Gt},{type:"button",onClick:()=>Wn(),icon:ad,text:"Insert before",title:"Insert a row before the current row",disabled:De||!Xi||!Gt},{type:"button",onClick:()=>Aa(),icon:ad,text:"Insert after",title:"Insert a row after the current row",disabled:De||!Xi||!Gt},{type:"button",onClick:()=>un(),icon:Ww,text:"Remove row",title:"Remove current row",disabled:De||!Xi||!Gt}]}]}]})({json:c(uA),documentState:c(xA),selection:c(_A),readOnly:I(),onEditValue:ha,onEditRow:Xo,onToggleEnforceString:ra,onCut:nr,onCopy:Pa,onPaste:di,onRemove:xi,onDuplicateRow:Sn,onInsertBeforeRow:Bo,onInsertAfterRow:So,onRemoveRow:vA}),ni=(T=BA()(Ne))!==null&&T!==void 0?T:Ne;if(ni!==!1){var Un={left:gA,top:wA,offsetTop:Be,offsetLeft:He,width:Ae,height:oe,anchor:eA,closeOnOuterClick:!0,onClose:()=>{Me=!1,L()}};Me=!0;var q=a(laA,{tip:ke?"Tip: you can open this context menu via right-click or with Ctrl+Q":void 0,items:ni,onRequestClose(){r(q),L()}},Un)}}function Zo(k){if(!gr(c(_A)))if(k&&(k.stopPropagation(),k.preventDefault()),k&&k.type==="contextmenu"&&k.target!==c(Pe))ko({left:k.clientX,top:k.clientY,width:A2,height:$C,showTip:!1});else{var T,eA=(T=c(KA))===null||T===void 0?void 0:T.querySelector(".jse-table-cell.jse-selected-value");if(eA)ko({anchor:eA,offsetTop:2,width:A2,height:$C,showTip:!1});else{var gA,wA=(gA=c(KA))===null||gA===void 0?void 0:gA.getBoundingClientRect();wA&&ko({top:wA.top+2,left:wA.left+2,width:A2,height:$C,showTip:!1})}}}function wo(k){ko({anchor:EoA(k.target,"BUTTON"),offsetTop:0,width:A2,height:$C,showTip:!0})}function ha(){if(!I()&&c(_A)){var k=ct(c(_A));aa(je(c(uA),k))?st(k):R(_A,Ui(k))}}function Xo(){!I()&&c(_A)&&st(ct(c(_A)).slice(0,1))}function ra(){if(!I()&&In(c(_A))){var k=c(_A).path,T=wt(k),eA=je(c(uA),k),gA=!P0(c(uA),c(xA),k),wA=gA?String(eA):Rh(String(eA),D());o("handleToggleEnforceString",{enforceString:gA,value:eA,updatedValue:wA}),Mi([{op:"replace",path:T,value:wA}],(Ae,oe)=>({state:yv(c(uA),oe,k,{type:"value",enforceString:gA})}))}}function Do(){return re.apply(this,arguments)}function re(){return(re=Tt(function*(){if(o("apply pasted json",c(WA)),c(WA)){var{onPasteAsJson:k}=c(WA);k(),setTimeout(L)}})).apply(this,arguments)}function di(){return ln.apply(this,arguments)}function ln(){return(ln=Tt(function*(){try{dA(yield navigator.clipboard.readText())}catch(k){console.error(k),R(Y,!0)}})).apply(this,arguments)}function Qn(){return To.apply(this,arguments)}function To(){return(To=Tt(function*(){o("apply pasted multiline text",c(MA)),c(MA)&&(dA(JSON.stringify(c(MA))),setTimeout(L))})).apply(this,arguments)}function Ma(){o("clear pasted json"),R(WA,void 0),L()}function wi(){o("clear pasted multiline text"),R(MA,void 0),L()}function Io(){AA()(ba.text)}function nr(k){return yo.apply(this,arguments)}function yo(){return(yo=Tt(function*(k){yield naA({json:c(uA),selection:c(_A),indentation:k?J():void 0,readOnly:I(),parser:D(),onPatch:Mi})})).apply(this,arguments)}function Pa(){return Gn.apply(this,arguments)}function Gn(){return Gn=Tt(function*(){var k=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];c(uA)!==void 0&&(yield oaA({json:c(uA),selection:c(_A),indentation:k?J():void 0,parser:D()}))}),Gn.apply(this,arguments)}function xi(){raA({json:c(uA),text:c(ZA),selection:c(_A),keepSelection:!0,readOnly:I(),onChange:j(),onPatch:Mi})}function Pt(k){I()||(o("extract",{path:k}),Mi(SoA(c(uA),Ui(k))))}function Sn(){(function(k){var{json:T,selection:eA,columns:gA,readOnly:wA,onPatch:Ae}=k;if(!wA&&T!==void 0&&eA&&ih(eA)){var{rowIndex:oe,columnIndex:Be}=Ll(ct(eA),gA);ys("duplicate row",{rowIndex:oe});var He=[String(oe)];Ae(koA(T,[He]),(ke,Ne)=>({state:Ne,selection:Ui(Kd({rowIndex:oe({state:Un,selection:Ui(Kd({rowIndex:He,columnIndex:Be},gA))}))}})({json:c(uA),selection:c(_A),columns:c(ze),readOnly:I(),onPatch:Mi})}function vA(){(function(k){var{json:T,selection:eA,columns:gA,readOnly:wA,onPatch:Ae}=k;if(!wA&&T!==void 0&&eA&&ih(eA)){var{rowIndex:oe,columnIndex:Be}=Ll(ct(eA),gA);ys("remove row",{rowIndex:oe}),Ae(gv([[String(oe)]]),(He,ke)=>{var Ne=oe0?oe-1:void 0,ni=Ne!==void 0?Ui(Kd({rowIndex:Ne,columnIndex:Be},gA)):void 0;return ys("remove row new selection",{rowIndex:oe,newRowIndex:Ne,newSelection:ni}),{state:ke,selection:ni}})}})({json:c(uA),selection:c(_A),columns:c(ze),readOnly:I(),onPatch:Mi})}function VA(){return(VA=Tt(function*(k){yield saA({char:k,selectInside:!1,json:c(uA),selection:c(_A),readOnly:I(),parser:D(),onPatch:Mi,onReplaceJson:SA,onSelect:Ie})})).apply(this,arguments)}function me(k){var T;k.preventDefault(),dA((T=k.clipboardData)===null||T===void 0?void 0:T.getData("text/plain"))}function dA(k){k!==void 0&&aaA({clipboardText:k,json:c(uA),selection:c(_A),readOnly:I(),parser:D(),onPatch:Mi,onChangeText:ae,onPasteMultilineText:Zi,openRepairModal:bt})}function SA(k,T){var eA={json:c(uA),text:c(ZA)},gA={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(ZA),textIsRepaired:c(et)},wA=Xg(k,c(xA)),Ae=typeof T=="function"?T(k,wA,c(_A)):void 0;R(uA,Ae?.json!==void 0?Ae.json:k),R(xA,Ae?.state!==void 0?Ae.state:wA),R(_A,Ae?.selection!==void 0?Ae.selection:c(_A)),R(Et,void 0),R(ZA,void 0),R(et,!1),R(QA,void 0),Qe(c(uA)),si(gA),zi(eA,void 0)}function ae(k,T){o("handleChangeText");var eA={json:c(uA),text:c(ZA)},gA={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(ZA),textIsRepaired:c(et)};try{R(uA,F()(k)),R(xA,Xg(c(uA),c(xA))),R(ZA,void 0),R(et,!1),R(QA,void 0)}catch(Ae){try{R(uA,F()(ml(k))),R(xA,Xg(c(uA),c(xA))),R(ZA,k),R(et,!0),R(QA,void 0)}catch{R(uA,void 0),R(xA,void 0),R(ZA,k),R(et,!1),R(QA,c(ZA)!==""?uh(c(ZA),Ae.message||String(Ae)):void 0)}}if(typeof T=="function"){var wA=T(c(uA),c(xA),c(_A));R(uA,wA?.json!==void 0?wA.json:c(uA)),R(xA,wA?.state!==void 0?wA.state:c(xA)),R(_A,wA?.selection!==void 0?wA.selection:c(_A))}Qe(c(uA)),si(gA),zi(eA,void 0)}function xe(k){o("select validation error",k),R(_A,Ui(k.path)),En(k.path)}function it(k){if(c(uA)!==void 0){var{id:T,onTransform:eA,onClose:gA}=k,wA=k.rootPath||[];Me=!0,YA()({id:T||l,json:c(uA),rootPath:wA||[],onTransform:Ae=>{eA?eA({operations:Ae,json:c(uA),transformedJson:lg(c(uA),Ae)}):(o("onTransform",wA,Ae),Mi(Ae))},onClose:()=>{Me=!1,setTimeout(L),gA&&gA()}})}}function st(k){o("openJSONEditorModal",{path:k}),Me=!0,ee()({content:{json:je(c(uA),k)},path:k,onPatch:Mi,onClose:()=>{Me=!1,setTimeout(L)}})}function bt(k,T){R(Je,{text:k,onParse:eA=>lm(eA,gA=>gm(gA,D())),onRepair:roA,onApply:T,onClose:L})}function Kn(){(function(k){I()||c(uA)===void 0||(Me=!0,hA()({id:g,json:c(uA),rootPath:k,onSort:T=>{var{operations:eA,itemPath:gA,direction:wA}=T;o("onSort",eA,k,gA,wA),Mi(eA,(Ae,oe)=>({state:oe,sortedColumn:{path:gA,sortDirection:wA===-1?Kl.desc:Kl.asc}}))},onClose:()=>{Me=!1,setTimeout(L)}}))})([])}function Ri(){it({rootPath:[]})}function Ji(k){o("openFind",{findAndReplace:k}),R(LA,!1),R(pA,!1),Mo(),R(LA,!0),R(pA,k)}function Vt(){if(!I()&&E().canUndo){var k=E().undo();if(av(k)){var T={json:c(uA),text:c(ZA)};R(uA,k.undo.patch?lg(c(uA),k.undo.patch):k.undo.json),R(xA,k.undo.documentState),R(_A,k.undo.selection),R(Et,k.undo.sortedColumn),R(ZA,k.undo.text),R(et,k.undo.textIsRepaired),R(QA,void 0),o("undo",{item:k,json:c(uA)}),zi(T,k.undo.patch&&k.redo.patch?{json:c(uA),previousJson:T.json,redo:k.undo.patch,undo:k.redo.patch}:void 0),L(),c(_A)&&En(ct(c(_A)),{scrollToWhenVisible:!1})}else DA()(k)}}function Ni(){if(!I()&&E().canRedo){var k=E().redo();if(av(k)){var T={json:c(uA),text:c(ZA)};R(uA,k.redo.patch?lg(c(uA),k.redo.patch):k.redo.json),R(xA,k.redo.documentState),R(_A,k.redo.selection),R(Et,k.redo.sortedColumn),R(ZA,k.redo.text),R(et,k.redo.textIsRepaired),R(QA,void 0),o("redo",{item:k,json:c(uA)}),zi(T,k.undo.patch&&k.redo.patch?{json:c(uA),previousJson:T.json,redo:k.redo.patch,undo:k.undo.patch}:void 0),L(),c(_A)&&En(ct(c(_A)),{scrollToWhenVisible:!1})}else P()(k)}}function ka(k){R(nA,k.getBoundingClientRect().height)}RA(()=>(G(b()),G(S())),()=>{R(UA,AG({escapeControlCharacters:b(),escapeUnicodeCharacters:S()}))}),RA(()=>c(LA),()=>{(function(k){if(c(KA)){var T=k?Uf:-100;c(KA).scrollTo({top:$g(KA,c(KA).scrollTop+=T),left:c(KA).scrollLeft})}})(c(LA))}),RA(()=>G(d()),()=>{(function(k){var T={json:c(uA)},eA=Pf(k)?k.text!==c(ZA):!Qi(T.json,k.json);if(o("update external content",{isChanged:eA}),eA){var gA={json:c(uA),documentState:c(xA),selection:c(_A),sortedColumn:c(Et),text:c(ZA),textIsRepaired:c(et)};if(Pf(k))try{R(uA,F()(k.text)),R(xA,Xg(c(uA),c(xA))),R(ZA,k.text),R(et,!1),R(QA,void 0)}catch(wA){try{R(uA,F()(ml(k.text))),R(xA,Xg(c(uA),c(xA))),R(ZA,k.text),R(et,!0),R(QA,void 0)}catch{R(uA,void 0),R(xA,void 0),R(ZA,k.text),R(et,!1),R(QA,c(ZA)!==""?uh(c(ZA),wA.message||String(wA)):void 0)}}else R(uA,k.json),R(xA,Xg(c(uA),c(xA))),R(ZA,void 0),R(et,!1),R(QA,void 0);Qe(c(uA)),R(Et,void 0),si(gA)}})(d())}),RA(()=>G(B()),()=>{(function(k){Qi(c(_A),k)||(o("applyExternalSelection",{selection:c(_A),externalSelection:k}),Zf(k)&&R(_A,k))})(B())}),RA(()=>(c(ze),c(uA),G(M()),c(Ye)),()=>{R(ze,qo(c(uA))?(function(k,T){var eA=new Set(T.map(wt)),gA=new Set(k.map(wt));for(var wA of eA)gA.has(wA)||eA.delete(wA);for(var Ae of gA)eA.has(Ae)||eA.add(Ae);return[...eA].map(Qs)})(mNA(c(uA),M(),c(Ye)),c(ze)):[])}),RA(()=>(c(uA),c(ze)),()=>{R(ut,!(!c(uA)||qi(c(ze))))}),RA(()=>(c(uA),c(Ye)),()=>{R(A,Array.isArray(c(uA))&&c(uA).length>c(Ye))}),RA(()=>(c(rA),c(nA),c(uA),c(LA),Uf),()=>{R(i,pNA(c(rA),c(nA),c(uA),z,NA,c(LA)?Uf:0))}),RA(()=>c(uA),()=>{c(uA),c(KA)&&c(KA).scrollTo({top:c(KA).scrollTop,left:c(KA).scrollLeft})}),RA(()=>c(_A),()=>{var k;k=c(_A),Qi(k,B())||(o("onSelect",k),O()(k))}),RA(()=>(G(I()),G(Q()),G(D()),c(UA),c(uA),c(xA),G(aA())),()=>{R(Le,{mode:ba.table,readOnly:I(),truncateTextSize:Q(),parser:D(),normalization:c(UA),getJson:()=>c(uA),getDocumentState:()=>c(xA),findElement:Co,findNextInside:_t,focus:L,onPatch:(k,T)=>Mi((function(eA,gA){return eA.flatMap(wA=>{if(gw(wA)){var Ae=Qs(wA.path);if(Ae.length>0){for(var oe=[wA],Be=Ki(Ae);Be.length>0&&!br(gA,Be);)oe.unshift({op:"add",path:wt(Be),value:{}}),Be=Ki(Be);return oe}}return wA})})(k,c(uA)),T),onSelect:Ie,onFind:Ji,onPasteJson:vt,onRenderValue:aA()})}),RA(()=>(c(uA),G(_()),G(D()),G(U())),()=>{_e(c(uA),_(),D(),U())}),RA(()=>(c(gn),c(ze)),()=>{R(n,wNA(c(gn),c(ze)))}),kn();var Lt={validate:Wi,patch:ui,focus:L,acceptAutoRepair:Bn,scrollTo:En,findElement:Co,openTransformModal:it};Ai(!0);var gt=FFA();ue("mousedown",i2,function(k){!Nh(k.target,T=>T===c(mA))&&gr(c(_A))&&(o("click outside the editor, exit edit mode"),R(_A,z0(c(_A))),ei&&c(Pe)&&(c(Pe).focus(),c(Pe).blur()),o("blur (outside editor)"),c(Pe)&&c(Pe).blur())});var Fi,Oi=At(gt),Vn=CA(Oi),hn=k=>{(function(T,eA){St(eA,!1);var gA=N(eA,"containsValidArray",9),wA=N(eA,"readOnly",9),Ae=N(eA,"showSearch",13,!1),oe=N(eA,"history",9),Be=N(eA,"onSort",9),He=N(eA,"onTransform",9),ke=N(eA,"onContextMenu",9),Ne=N(eA,"onUndo",9),ni=N(eA,"onRedo",9),Un=N(eA,"onRenderMenu",9);function q(){Ae(!Ae())}var fA=IA(void 0,!0),PA=IA(void 0,!0);RA(()=>(G(wA()),G(Be()),G(gA()),G(He()),G(ke()),G(Ne()),G(oe()),G(ni())),()=>{R(fA,wA()?[{type:"space"}]:[{type:"button",icon:C3,title:"Sort",className:"jse-sort",onClick:Be(),disabled:wA()||!gA()},{type:"button",icon:s3,title:"Transform contents (filter, sort, project)",className:"jse-transform",onClick:He(),disabled:wA()||!gA()},{type:"button",icon:g3,title:"Search (Ctrl+F)",className:"jse-search",onClick:q,disabled:!gA()},{type:"button",icon:LS,title:oG,className:"jse-contextmenu",onClick:ke()},{type:"separator"},{type:"button",icon:$w,title:"Undo (Ctrl+Z)",className:"jse-undo",onClick:Ne(),disabled:!oe().canUndo},{type:"button",icon:Xw,title:"Redo (Ctrl+Shift+Z)",className:"jse-redo",onClick:ni(),disabled:!oe().canRedo},{type:"space"}])}),RA(()=>(G(Un()),c(fA)),()=>{R(PA,Un()(c(fA))||c(fA))}),kn(),Ai(!0),xv(T,{get items(){return c(PA)}}),xt()})(k,{get containsValidArray(){return c(ut)},get readOnly(){return I()},get history(){return E()},onSort:Kn,onTransform:Ri,onUndo:Vt,onRedo:Ni,onContextMenu:wo,get onRenderMenu(){return iA()},get showSearch(){return c(LA)},set showSearch(T){R(LA,T)},$$legacy:!0})};TA(Vn,k=>{f()&&k(hn)});var Mt=bA(Vn,2),sa=k=>{var T=RFA(),eA=At(T),gA=CA(eA);gA.readOnly=!0,Jo(gA,Be=>R(Pe,Be),()=>c(Pe));var wA=bA(eA,2),Ae=Be=>{var He=SFA(),ke=At(He);eaA(CA(ke),{get json(){return c(uA)},get documentState(){return c(xA)},get parser(){return D()},get showSearch(){return c(LA)},get showReplace(){return c(pA)},get readOnly(){return I()},get columns(){return c(ze)},onSearch:Ft,onFocus:ht,onPatch:Mi,onClose:Kt});var Ne=bA(ke,2),ni=CA(Ne),Un=CA(ni),q=CA(Un),fA=CA(q),PA=CA(fA),Fe=mt=>{var gi=tt(()=>(G(VQ),c(n),EA(()=>{var ua;return VQ([],(ua=c(n))===null||ua===void 0?void 0:ua.root)}))),ga=bi(),Zn=At(ga),ea=ua=>{var mr=pFA();Ch(CA(mr),{get validationError(){return c(gi)},get onExpand(){return Gl}}),lA(ua,mr)};TA(Zn,ua=>{c(gi)&&ua(ea)}),lA(mt,ga)};TA(PA,mt=>{G(qi),c(n),EA(()=>{var gi;return!qi((gi=c(n))===null||gi===void 0?void 0:gi.root)})&&mt(Fe)});var pe=bA(fA);Qa(pe,1,()=>c(ze),Na,(mt,gi)=>{var ga=wFA();(function(Zn,ea){St(ea,!1);var ua=IA(void 0,!0),mr=IA(void 0,!0),tC=IA(void 0,!0),xg=N(ea,"path",9),Pl=N(ea,"sortedColumn",9),A0=N(ea,"readOnly",9),jl=N(ea,"onSort",9);RA(()=>(G(xg()),vg),()=>{R(ua,qi(xg())?"values":vg(xg()))}),RA(()=>(G(Pl()),G(xg())),()=>{var Fa;R(mr,Pl()&&Qi(xg(),(Fa=Pl())===null||Fa===void 0?void 0:Fa.path)?Pl().sortDirection:void 0)}),RA(()=>(c(mr),BiA),()=>{R(tC,c(mr)?BiA[c(mr)]:void 0)}),kn(),Ai(!0);var os,pr=BFA(),Rg=CA(pr),iC=CA(Rg),Ng=bA(Rg,2),Rn=Fa=>{var _a=dFA(),Q1=CA(_a),QB=tt(()=>(c(mr),G(Kl),G(M0),G(JS),EA(()=>c(mr)===Kl.asc?M0:JS)));Vi(Q1,{get data(){return c(QB)}}),ve(()=>Mn(_a,"title","Currently sorted in ".concat(c(tC)," order"))),lA(Fa,_a)};TA(Ng,Fa=>{c(mr)!==void 0&&Fa(Rn)}),ve(Fa=>{os=$t(pr,1,"jse-column-header svelte-5pxwfq",null,os,{"jse-readonly":A0()}),Mn(pr,"title",A0()?c(ua):c(ua)+" (Click to sort the data by this column)"),Rt(iC,Fa)},[()=>(G(XC),c(ua),G(50),EA(()=>XC(c(ua),50)))]),ue("click",pr,function(){A0()||jl()({path:xg(),sortDirection:c(mr)===Kl.asc?Kl.desc:Kl.asc})}),lA(Zn,pr),xt()})(CA(ga),{get path(){return c(gi)},get sortedColumn(){return c(Et)},get readOnly(){return I()},onSort:Te}),lA(mt,ga)});var De=bA(pe),ot=mt=>{var gi=DFA(),ga=CA(gi),Zn=tt(()=>(c(uA),EA(()=>Array.isArray(c(uA))?c(uA).length:0)));(function(ea,ua){St(ua,!1);var mr=N(ua,"count",9),tC=N(ua,"maxSampleCount",9),xg=N(ua,"readOnly",9),Pl=N(ua,"onRefresh",9);Ai(!0);var A0,jl=mFA();Vi(CA(jl),{get data(){return Zq}}),ve(()=>{A0=$t(jl,1,"jse-column-header svelte-1wgrwv3",null,A0,{"jse-readonly":xg()}),Mn(jl,"title","The Columns are created by sampling ".concat(tC()," items out of ").concat(mr(),". ")+"If you're missing a column, click here to sample all of the items instead of a subset. This is slower.")}),ue("click",jl,()=>Pl()()),lA(ea,jl),xt()})(ga,{get count(){return c(Zn)},get maxSampleCount(){return c(Ye)},get readOnly(){return I()},onRefresh:()=>R(Ye,1/0)}),lA(mt,gi)};TA(De,mt=>{c(A)&&mt(ot)});var jt,ki,xn=bA(q),Pi=CA(xn),Eo=bA(xn);Qa(Eo,1,()=>(c(i),EA(()=>c(i).visibleItems)),Na,(mt,gi,ga)=>{var Zn=tt(()=>(c(i),EA(()=>c(i).startIndex+ga))),ea=tt(()=>(c(n),G(c(Zn)),EA(()=>c(n).rows[c(Zn)]))),ua=tt(()=>(G(VQ),G(c(Zn)),G(c(ea)),EA(()=>{var os;return VQ([String(c(Zn))],(os=c(ea))===null||os===void 0?void 0:os.row)}))),mr=tt(()=>(G(T0),c(uA),c(be),G(c(Zn)),EA(()=>T0(c(uA),c(be),[String(c(Zn))])))),tC=kFA(),xg=CA(tC);ZnA(xg,()=>c(Zn),os=>{var pr=yFA(),Rg=CA(pr),iC=bA(Rg),Ng=Rn=>{Ch(Rn,{get validationError(){return c(ua)},get onExpand(){return Gl}})};TA(iC,Rn=>{c(ua)&&Rn(Ng)}),vs(pr,(Rn,Fa)=>Yy?.(Rn,Fa),()=>Rn=>(function(Fa,_a){z[_a]=Fa.getBoundingClientRect().height})(Rn,c(Zn))),ve(()=>{var Rn;return Rt(Rg,"".concat((Rn=c(Zn))!==null&&Rn!==void 0?Rn:""," "))}),lA(os,pr)});var Pl=bA(xg);Qa(Pl,1,()=>c(ze),Na,(os,pr,Rg,iC)=>{var Ng,Rn=tt(()=>(G(c(Zn)),c(pr),EA(()=>[String(c(Zn))].concat(c(pr))))),Fa=tt(()=>(G(je),c(gi),c(pr),EA(()=>je(c(gi),c(pr))))),_a=tt(()=>(G(In),c(_A),G(W0),G(c(Rn)),EA(()=>In(c(_A))&&W0(c(_A).path,c(Rn))))),Q1=tt(()=>(G(c(ea)),EA(()=>{var La;return(La=c(ea))===null||La===void 0?void 0:La.columns[Rg]}))),QB=tt(()=>(G(VQ),G(c(Rn)),G(c(Q1)),EA(()=>VQ(c(Rn),c(Q1))))),h1=bFA(),tu=CA(h1),hB=CA(tu),iu=La=>{var il=tt(()=>(G(lv),G(T0),c(gi),G(c(mr)),c(pr),EA(()=>lv(T0(c(gi),c(mr),c(pr)))))),nu=tt(()=>(G(c(il)),EA(()=>!!c(il)&&c(il).some(f1=>f1.active)))),ou=tt(()=>(G(qi),G(c(il)),EA(()=>!qi(c(il)))));(function(f1,Lr){St(Lr,!1);var au=N(Lr,"path",9),$K=N(Lr,"value",9),AU=N(Lr,"parser",9),rcA=N(Lr,"isSelected",9),scA=N(Lr,"containsSearchResult",9),gcA=N(Lr,"containsActiveSearchResult",9),lcA=N(Lr,"onEdit",9);Ai(!0);var eU,Vm=IFA(),ccA=CA(Vm);ve(ru=>{eU=$t(Vm,1,"jse-inline-value svelte-1jv89ui",null,eU,{"jse-selected":rcA(),"jse-highlight":scA(),"jse-active":gcA()}),Rt(ccA,ru)},[()=>(G(XC),G(AU()),G($K()),G(50),EA(()=>{var ru;return XC((ru=AU().stringify($K()))!==null&&ru!==void 0?ru:"",50)}))]),ue("dblclick",Vm,()=>lcA()(au())),lA(f1,Vm),xt()})(La,{get path(){return c(Rn)},get value(){return c(Fa)},get parser(){return D()},get isSelected(){return c(_a)},get containsSearchResult(){return c(ou)},get containsActiveSearchResult(){return c(nu)},onEdit:st})},Lb=La=>{var il=tt(()=>(G(T0),c(uA),c(be),G(c(Rn)),EA(()=>{var Lr;return(Lr=T0(c(uA),c(be),c(Rn)))===null||Lr===void 0?void 0:Lr.searchResults}))),nu=tt(()=>c(Fa)!==void 0?c(Fa):""),ou=tt(()=>(G(P0),c(uA),c(xA),G(c(Rn)),EA(()=>P0(c(uA),c(xA),c(Rn))))),f1=tt(()=>c(_a)?c(_A):void 0);ZoA(La,{get path(){return c(Rn)},get value(){return c(nu)},get enforceString(){return c(ou)},get selection(){return c(f1)},get searchResultItems(){return c(il)},get context(){return c(Le)}})};TA(hB,La=>{G(aa),G(c(Fa)),EA(()=>aa(c(Fa)))?La(iu):La(Lb,!1)});var Gb=bA(hB),Kb=La=>{var il=vFA();TI(CA(il),{selected:!0,onContextMenu:ko}),lA(La,il)};TA(Gb,La=>{G(I()),G(c(_a)),G(gr),c(_A),EA(()=>!I()&&c(_a)&&!gr(c(_A)))&&La(Kb)});var e0=bA(tu,2),u1=La=>{Ch(La,{get validationError(){return c(QB)},get onExpand(){return Gl}})};TA(e0,La=>{c(QB)&&La(u1)}),ve(La=>{Mn(h1,"data-path",La),Ng=$t(tu,1,"jse-value-outer svelte-1p86y3c",null,Ng,{"jse-selected-value":c(_a)})},[()=>(G(qy),G(c(Rn)),EA(()=>qy(c(Rn))))]),lA(os,h1)});var A0=bA(Pl),jl=os=>{lA(os,MFA())};TA(A0,os=>{c(A)&&os(jl)}),lA(mt,tC)});var Wt,$o=CA(bA(Eo));Jo(Ne,mt=>R(KA,mt),()=>c(KA)),vs(Ne,(mt,gi)=>Yy?.(mt,gi),()=>ka),Nr(()=>ue("scroll",Ne,Ct));var Wn=bA(Ne,2),Aa=mt=>{var gi=tt(()=>(c(WA),EA(()=>"You pasted a JSON ".concat(Array.isArray(c(WA).contents)?"array":"object"," as text")))),ga=tt(()=>[{icon:SC,text:"Paste as JSON instead",title:"Paste the text as JSON instead of a single value",onMouseDown:Do},{text:"Leave as is",title:"Keep the pasted content as a single value",onClick:Ma}]);tl(mt,{type:"info",get message(){return c(gi)},get actions(){return c(ga)}})};TA(Wn,mt=>{c(WA)&&mt(Aa)});var un=bA(Wn,2),Gt=mt=>{var gi=tt(()=>[{icon:SC,text:"Paste as string instead",title:"Paste the clipboard data as a single string value instead of an array",onClick:Qn},{text:"Leave as is",title:"Keep the pasted array",onClick:wi}]);tl(mt,{type:"info",message:"Multiline text was pasted as array",get actions(){return c(gi)}})};TA(un,mt=>{c(MA)&&mt(Gt)});var Xi=bA(un,2),Zt=mt=>{var gi=tt(()=>I()?[]:[{icon:Zw,text:"Ok",title:"Accept the repaired document",onClick:Bn},{icon:l3,text:"Repair manually instead",title:"Leave the document unchanged and repair it manually instead",onClick:Io}]);tl(mt,{type:"success",message:"The loaded JSON document was invalid but is successfully repaired.",get actions(){return c(gi)},onClose:L})};TA(Xi,mt=>{c(et)&&mt(Zt)}),hG(bA(Xi,2),{get validationErrors(){return c(gn)},selectError:xe}),ve(()=>{jt=$t(xn,1,"jse-table-invisible-start-section svelte-1p86y3c",null,jt,{"jse-search-box-background":c(LA)}),Mn(Pi,"colspan",(c(ze),EA(()=>c(ze).length))),ki=Yl(Pi,"",ki,{height:(c(i),EA(()=>c(i).startHeight+"px"))}),Mn($o,"colspan",(c(ze),EA(()=>c(ze).length))),Wt=Yl($o,"",Wt,{height:(c(i),EA(()=>c(i).endHeight+"px"))})}),lA(Be,He)},oe=Be=>{var He=bi(),ke=At(He),Ne=Un=>{var q=xFA(),fA=At(q),PA=tt(()=>I()?[]:[{icon:l3,text:"Repair manually",title:'Open the document in "code" mode and repair it manually',onClick:Io}]);tl(fA,{type:"error",message:"The loaded JSON document is invalid and could not be repaired automatically.",get actions(){return c(PA)}}),gaA(bA(fA,2),{get text(){return c(ZA)},get json(){return c(uA)},get indentation(){return J()},get parser(){return D()}}),lA(Un,q)},ni=Un=>{fFA(Un,{get text(){return c(ZA)},get json(){return c(uA)},get readOnly(){return I()},get parser(){return D()},openJSONEditorModal:st,extractPath:Pt,get onChangeMode(){return AA()},onClick:()=>{L()}})};TA(ke,Un=>{c(QA)&&c(ZA)!==void 0&&c(ZA)!==""?Un(Ne):Un(ni,!1)},!0),lA(Be,He)};TA(wA,Be=>{c(ut)?Be(Ae):Be(oe,!1)}),ue("paste",gA,me),lA(k,T)},Ho=k=>{lA(k,NFA())};TA(Mt,k=>{C?k(Ho,!1):k(sa)}),Jo(Oi,k=>R(mA,k),()=>c(mA));var u=bA(Oi,2),y=k=>{VoA(k,{onClose:()=>R(Y,!1)})};TA(u,k=>{c(Y)&&k(y)});var x=bA(u,2),H=k=>{WoA(k,e1(()=>c(Je),{onClose:()=>{var T;(T=c(Je))===null||T===void 0||T.onClose(),R(Je,void 0)}}))};return TA(x,k=>{c(Je)&&k(H)}),ve(()=>Fi=$t(Oi,1,"jse-table-mode svelte-1p86y3c",null,Fi,{"no-main-menu":!f()})),ue("mousedown",Oi,function(k){if(k.buttons===1||k.buttons===2){var T=k.target;T.isContentEditable||L();var eA=QoA(T);if(eA){if(gr(c(_A))&&Xf(c(uA),c(_A),eA))return;R(_A,Ui(eA)),k.preventDefault()}}}),ue("keydown",Oi,function(k){var T=g2(k);if(o("keydown",{combo:T,key:k.key}),T==="Ctrl+X"&&(k.preventDefault(),nr(!0)),T==="Ctrl+Shift+X"&&(k.preventDefault(),nr(!1)),T==="Ctrl+C"&&(k.preventDefault(),Pa(!0)),T==="Ctrl+Shift+C"&&(k.preventDefault(),Pa(!1)),T==="Ctrl+D"&&(k.preventDefault(),Sn()),T!=="Delete"&&T!=="Backspace"||(k.preventDefault(),xi()),T==="Insert"&&k.preventDefault(),T==="Ctrl+A"&&k.preventDefault(),T==="Ctrl+Q"&&Zo(k),T==="ArrowLeft"&&(k.preventDefault(),ci(),c(_A))){var eA=(function(He,ke){var{rowIndex:Ne,columnIndex:ni}=Ll(ct(ke),He);return ni>0?Ui(Kd({rowIndex:Ne,columnIndex:ni-1},He)):ke})(c(ze),c(_A));R(_A,eA),Yo(ct(eA))}if(T==="ArrowRight"&&(k.preventDefault(),ci(),c(_A))){var gA=(function(He,ke){var{rowIndex:Ne,columnIndex:ni}=Ll(ct(ke),He);return ni0?Ui(Kd({rowIndex:Ne-1,columnIndex:ni},He)):ke})(c(ze),c(_A));R(_A,wA),Yo(ct(wA))}if(T==="ArrowDown"&&(k.preventDefault(),ci(),c(_A))){var Ae=(function(He,ke,Ne){var{rowIndex:ni,columnIndex:Un}=Ll(ct(Ne),ke);return niR(UA,z)}).get()),mA=IA(s());function KA(z){if(miA(z)){R(mA,z.undo.mode);var nA=c(UA).items(),rA=nA.findIndex(Ie=>Ie===z),NA=rA!==-1?nA[rA-1]:void 0;ee("handleUndo",{index:rA,item:z,items:nA,prevItem:NA}),NA&&i(NA.redo.selection),_()(c(mA))}}function Pe(z){if(miA(z)){R(mA,z.redo.mode);var nA=c(UA).items(),rA=nA.findIndex(Ie=>Ie===z),NA=rA!==-1?nA[rA+1]:void 0;ee("handleRedo",{index:rA,item:z,items:nA,nextItem:NA}),NA&&i(NA.undo.selection),_()(c(mA))}}var Je=IA(),HA={type:"separator"},uA=IA(),ZA=IA();function QA(z){if(c(sA))return c(sA).patch(z);if(c(hA))return c(hA).patch(z);if(c(YA))return c(YA).patch(z);throw new Error('Method patch is not available in mode "'.concat(c(mA),'"'))}function WA(z,nA){if(c(sA))return c(sA).expand(z,nA);if(c(YA))return c(YA).expand(z,nA);throw new Error('Method expand is not available in mode "'.concat(c(mA),'"'))}function MA(z,nA){if(c(sA))return c(sA).collapse(z,nA);if(c(YA))return c(YA).collapse(z,nA);throw new Error('Method collapse is not available in mode "'.concat(c(mA),'"'))}function be(z){if(c(YA))c(YA).openTransformModal(z);else if(c(sA))c(sA).openTransformModal(z);else{if(!c(hA))throw new Error('Method transform is not available in mode "'.concat(c(mA),'"'));c(hA).openTransformModal(z)}}function LA(){if(c(YA))return c(YA).validate();if(c(sA))return c(sA).validate();if(c(hA))return c(hA).validate();throw new Error('Method validate is not available in mode "'.concat(c(mA),'"'))}function pA(){return c(sA)?c(sA).acceptAutoRepair():A()}function Ft(z){if(c(sA))return c(sA).scrollTo(z);if(c(hA))return c(hA).scrollTo(z);throw new Error('Method scrollTo is not available in mode "'.concat(c(mA),'"'))}function ht(z){if(c(sA))return c(sA).findElement(z);if(c(hA))return c(hA).findElement(z);throw new Error('Method findElement is not available in mode "'.concat(c(mA),'"'))}function Ee(){c(YA)?c(YA).focus():c(sA)?c(sA).focus():c(hA)&&c(hA).focus()}function Kt(){return Ye.apply(this,arguments)}function Ye(){return(Ye=Tt(function*(){c(YA)&&(yield c(YA).refresh())})).apply(this,arguments)}RA(()=>G(s()),()=>{(function(z){if(z!==c(mA)){var nA={type:"mode",undo:{mode:c(mA),selection:void 0},redo:{mode:z,selection:void 0}};c(mA)==="text"&&c(YA)&&c(YA).flush(),ee("add history item",nA),c(UA).add(nA),R(mA,z)}})(s())}),RA(()=>(c(mA),G(_())),()=>{R(Je,[{type:"button",text:"text",title:"Switch to text mode (current mode: ".concat(c(mA),")"),className:"jse-group-button jse-first"+(c(mA)===ba.text?" jse-selected":""),onClick:()=>_()(ba.text)},{type:"button",text:"tree",title:"Switch to tree mode (current mode: ".concat(c(mA),")"),className:"jse-group-button "+(c(mA)===ba.tree?" jse-selected":""),onClick:()=>_()(ba.tree)},{type:"button",text:"table",title:"Switch to table mode (current mode: ".concat(c(mA),")"),className:"jse-group-button jse-last"+(c(mA)===ba.table?" jse-selected":""),onClick:()=>_()(ba.table)}])}),RA(()=>(c(Je),G(AA()),c(mA),G(D()),G(n())),()=>{R(uA,z=>{var nA=bL(z[0])?c(Je).concat(z):c(Je).concat(HA,z),rA=n3(nA);return AA()(nA,{mode:c(mA),modal:D(),readOnly:n()})||rA})}),RA(()=>(G(O()),c(mA),G(D()),G(n()),G(i())),()=>{R(ZA,z=>{var nA,rA=n3(z);return(nA=O()(z,{mode:c(mA),modal:D(),readOnly:n(),selection:i()}))!==null&&nA!==void 0?nA:!n()&&rA})}),kn();var ze={patch:QA,expand:WA,collapse:MA,transform:be,validate:LA,acceptAutoRepair:pA,scrollTo:Ft,findElement:ht,focus:Ee,refresh:Kt};Ai();var ut=bi(),Me=At(ut),ei=z=>{Jo(CFA(z,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(UA)},get readOnly(){return n()},get indentation(){return o()},get tabSize(){return a()},get mainMenuBar(){return g()},get statusBar(){return C()},get askToFormat(){return I()},get escapeUnicodeCharacters(){return B()},get parser(){return Q()},get validator(){return b()},get validationParser(){return S()},get onChange(){return F()},get onChangeMode(){return _()},get onSelect(){return U()},onUndo:KA,onRedo:Pe,get onError(){return DA()},get onFocus(){return P()},get onBlur(){return aA()},get onRenderMenu(){return c(uA)},get onSortModal(){return iA()},get onTransformModal(){return BA()},$$legacy:!0}),nA=>R(YA,nA),()=>c(YA))},Y=z=>{var nA=bi(),rA=At(nA),NA=Qe=>{Jo(_FA(Qe,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(UA)},get readOnly(){return n()},get truncateTextSize(){return r()},get mainMenuBar(){return g()},get escapeControlCharacters(){return d()},get escapeUnicodeCharacters(){return B()},get flattenColumns(){return E()},get parser(){return Q()},get parseMemoizeOne(){return f()},get validator(){return b()},get validationParser(){return S()},get indentation(){return o()},get onChange(){return F()},get onChangeMode(){return _()},get onSelect(){return U()},onUndo:KA,onRedo:Pe,get onRenderValue(){return J()},get onFocus(){return P()},get onBlur(){return aA()},get onRenderMenu(){return c(uA)},get onRenderContextMenu(){return c(ZA)},get onSortModal(){return iA()},get onTransformModal(){return BA()},get onJSONEditorModal(){return oA()},$$legacy:!0}),xA=>R(hA,xA),()=>c(hA))},Ie=Qe=>{Jo(zL(Qe,{get externalContent(){return A()},get externalSelection(){return i()},get history(){return c(UA)},get readOnly(){return n()},get indentation(){return o()},get truncateTextSize(){return r()},get mainMenuBar(){return g()},get navigationBar(){return l()},get escapeControlCharacters(){return d()},get escapeUnicodeCharacters(){return B()},get parser(){return Q()},get parseMemoizeOne(){return f()},get validator(){return b()},get validationParser(){return S()},get pathParser(){return M()},get onError(){return DA()},get onChange(){return F()},get onChangeMode(){return _()},get onSelect(){return U()},onUndo:KA,onRedo:Pe,get onRenderValue(){return J()},get onClassName(){return j()},get onFocus(){return P()},get onBlur(){return aA()},get onRenderMenu(){return c(uA)},get onRenderContextMenu(){return c(ZA)},get onSortModal(){return iA()},get onTransformModal(){return BA()},get onJSONEditorModal(){return oA()},$$legacy:!0}),xA=>R(sA,xA),()=>c(sA))};TA(rA,Qe=>{c(mA),G(ba),EA(()=>c(mA)===ba.table)?Qe(NA):Qe(Ie,!1)},!0),lA(z,nA)};return TA(Me,z=>{c(mA),G(ba),EA(()=>c(mA)===ba.text||String(c(mA))==="code")?z(ei):z(Y,!1)}),lA(t,ut),Ot(e,"patch",QA),Ot(e,"expand",WA),Ot(e,"collapse",MA),Ot(e,"transform",be),Ot(e,"validate",LA),Ot(e,"acceptAutoRepair",pA),Ot(e,"scrollTo",Ft),Ot(e,"findElement",ht),Ot(e,"focus",Ee),Ot(e,"refresh",Kt),xt(ze)}qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-modal-wrapper.svelte-t4zsk3 { - flex: 1; - display: flex; - min-width: 0; - min-height: 0; - flex-direction: column; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) { - flex: 1; - display: flex; - flex-direction: column; - padding: 20px; - overflow: auto; - min-width: 0; - min-height: 0; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) { - display: flex; - flex-direction: row; - justify-content: flex-end; - padding-top: var(--jse-padding, 10px); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-actions:where(.svelte-t4zsk3) button.jse-primary:where(.svelte-t4zsk3):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-label:where(.svelte-t4zsk3) { - font-weight: bold; - display: block; - box-sizing: border-box; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-label:where(.svelte-t4zsk3) .jse-label-inner:where(.svelte-t4zsk3) { - margin-top: calc(2 * var(--jse-padding, 10px)); - margin-bottom: calc(0.5 * var(--jse-padding, 10px)); - box-sizing: border-box; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-modal-contents:where(.svelte-t4zsk3) .jse-modal-inline-editor:where(.svelte-t4zsk3) { - flex: 1; - min-height: 150px; - min-width: 0; - max-width: 100%; - display: flex; - --jse-theme-color: var(--jse-modal-editor-theme-color, #707070); - --jse-theme-color-highlight: var(--jse-modal-editor-theme-color-highlight, #646464); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) { - gap: var(--jse-padding, 10px); - align-items: center; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) .jse-error:where(.svelte-t4zsk3) { - flex: 1; - color: var(--jse-error-color, #ee5341); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-secondary-background, #d3d3d3); - color: var(--jse-button-secondary-color, var(--jse-text-color, #4d4d4d)); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3):hover { - background: var(--jse-button-secondary-background-highlight, #e1e1e1); -} -.jse-modal-wrapper.svelte-t4zsk3 .jse-actions:where(.svelte-t4zsk3) button.jse-secondary:where(.svelte-t4zsk3):disabled { - background: var(--jse-button-secondary-background-disabled, #9d9d9d); -} -.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3) { - border: var(--jse-input-border, 1px solid #d8dbdf); - outline: none; - box-sizing: border-box; - padding: calc(0.5 * var(--jse-padding, 10px)); - font-family: var(--jse-font-family-mono, consolas, menlo, monaco, "Ubuntu Mono", "source-code-pro", monospace); - font-size: var(--jse-font-size-mono, 14px); - color: inherit; - background: var(--jse-input-background, var(--jse-background-color, #fff)); -} -.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3):focus { - border: var(--jse-input-border-focus, 1px solid var(--jse-input-border-focus, var(--jse-theme-color, #3883fa))); -} -.jse-modal-wrapper.svelte-t4zsk3 input:where(.svelte-t4zsk3):read-only { - background: var(--jse-input-background-readonly, transparent); -}`);var LFA=FA('
        '),GFA=FA(''),KFA=FA(''),UFA=FA(''),JFA=FA('
        Path
        Contents
        ',1),YFA=FA('
        '),TFA={};qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-modal-contents.svelte-lwzlls { - flex: 1; - display: flex; - flex-direction: column; - padding: 20px; - overflow: auto; - min-width: 0; - min-height: 0; -} -.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) { - display: flex; - flex-direction: row; - justify-content: flex-end; - padding-top: var(--jse-padding, 10px); -} -.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls) { - border: none; - background: transparent; - color: inherit; - cursor: pointer; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - padding: 5px; - margin: 0; - background: var(--jse-button-primary-background, var(--jse-theme-color, #3883fa)); - color: var(--jse-button-primary-color, #fff); - padding: var(--jse-padding, 10px) calc(2 * var(--jse-padding, 10px)); - border-radius: 3px; -} -.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls):hover { - background: var(--jse-button-primary-background-highlight, var(--jse-theme-color-highlight, #5f9dff)); -} -.jse-modal-contents.svelte-lwzlls .jse-actions:where(.svelte-lwzlls) button.jse-primary:where(.svelte-lwzlls):disabled { - background: var(--jse-button-primary-background-disabled, #9d9d9d); -} -.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) { - width: 100%; - border-collapse: collapse; - border-spacing: 0; -} -.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) th:where(.svelte-lwzlls), -.jse-modal-contents.svelte-lwzlls table:where(.svelte-lwzlls) td:where(.svelte-lwzlls) { - text-align: left; - vertical-align: middle; - font-weight: normal; - padding-bottom: var(--jse-padding, 10px); -} -.jse-modal-contents.svelte-lwzlls input.jse-path:where(.svelte-lwzlls) { - width: 100%; - box-sizing: border-box; - padding: 5px 10px; - border: var(--jse-input-border, 1px solid #d8dbdf); - border-radius: var(--jse-input-radius, 3px); - font-family: inherit; - font-size: inherit; - background: inherit; - background: var(--jse-input-background-readonly, transparent); - color: inherit; - outline: none; -} -.jse-modal-contents.svelte-lwzlls .svelte-select input { - box-sizing: border-box; -} -.jse-modal-contents.svelte-lwzlls .jse-space:where(.svelte-lwzlls) { - height: 200px; -} -.jse-modal-contents.svelte-lwzlls .jse-space:where(.svelte-lwzlls) .jse-error:where(.svelte-lwzlls) { - color: var(--jse-error-color, #ee5341); -}`);var ZQ=wv(()=>TFA),HFA=FA('Property'),zFA=FA('
        '),OFA=FA('
        Path
        Direction
        ',1);qt(`/* over all fonts, sizes, and colors */ -/* "consolas" for Windows, "menlo" for Mac with fallback to "monaco", 'Ubuntu Mono' for Ubuntu */ -/* (at Mac this font looks too large at 14px, but 13px is too small for the font on Windows) */ -/* main, menu, modal */ -/* jsoneditor modal */ -/* tooltip in text mode */ -/* panels: navigation bar, gutter, search box */ -/* navigation-bar */ -/* context menu */ -/* contents: json key and values */ -/* contents: selected or hovered */ -/* contents: section of collapsed items in an array */ -/* contents: highlighting of search matches */ -/* contents: inline tags inside the JSON document */ -/* contents: table */ -/* controls in modals: inputs, buttons, and \`a\` */ -/* messages */ -/* svelte-select */ -/* color picker */ -.jse-main.svelte-1l55585 { - width: 100%; - height: 100%; - min-width: 0; - min-height: 150px; - font-family: var(--jse-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); - font-size: var(--jse-font-size, 16px); - line-height: normal; - position: relative; - display: flex; - flex-direction: row; -} -.jse-main.svelte-1l55585:not(.jse-focus) { - --jse-selection-background-color: var(--jse-selection-background-inactive-color, #e8e8e8); - --jse-context-menu-pointer-background: var(--jse-context-menu-pointer-hover-background, #b2b2b2); -}`);var PFA=FA('
        ',1);function jFA(t,e){St(e,!1);var A=IA(void 0,!0),i=Cr("jsoneditor:JSONEditor"),n={text:""},o=void 0,a=!1,r=ba.tree,s=!0,g=!0,l=!0,C=!0,I=!1,d=!1,B=!0,E=JSON,Q=void 0,f=JSON,b={parse:WSA,stringify:vg},S=[QSA],M=S[0].id,D=Gl,F=void 0,_=void 0,U=VSA,J=Gl,j=Gl,AA=Gl,O=Gl,DA=re=>{console.error(re),alert(re.toString())},P=Gl,aA=Gl,iA=N(e,"content",13,n),BA=N(e,"selection",13,o),oA=N(e,"readOnly",13,a),sA=N(e,"indentation",13,2),hA=N(e,"tabSize",13,4),YA=N(e,"truncateTextSize",13,1e3),ee=N(e,"mode",13,r),UA=N(e,"mainMenuBar",13,s),mA=N(e,"navigationBar",13,g),KA=N(e,"statusBar",13,l),Pe=N(e,"askToFormat",13,C),Je=N(e,"escapeControlCharacters",13,I),HA=N(e,"escapeUnicodeCharacters",13,d),uA=N(e,"flattenColumns",13,B),ZA=N(e,"parser",13,E),QA=N(e,"validator",13,Q),WA=N(e,"validationParser",13,f),MA=N(e,"pathParser",13,b),be=N(e,"queryLanguages",13,S),LA=N(e,"queryLanguageId",13,M),pA=N(e,"onChangeQueryLanguage",13,D),Ft=N(e,"onChange",13,F),ht=N(e,"onSelect",13,_),Ee=N(e,"onRenderValue",13,U),Kt=N(e,"onClassName",13,J),Ye=N(e,"onRenderMenu",13,j),ze=N(e,"onRenderContextMenu",13,AA),ut=N(e,"onChangeMode",13,O),Me=N(e,"onError",13,DA),ei=N(e,"onFocus",13,P),Y=N(e,"onBlur",13,aA),z=IA(th(),!0),nA=IA(!1,!0),rA=IA(void 0,!0),NA=IA(void 0,!0),Ie=IA(void 0,!0),Qe=IA(void 0,!0),xA=IA(ZA(),!0);function _A(){return iA()}function Et(re){i("set");var di=V_(re);if(di)throw new Error(di);R(z,th()),iA(re),Mo()}function et(re){i("update");var di=V_(re);if(di)throw new Error(di);iA(re),Mo()}function Te(re){var di=c(rA).patch(re);return Mo(),di}function Le(re){BA(re),Mo()}function si(re,di){c(rA).expand(re,di),Mo()}function gn(re){var di=arguments.length>1&&arguments[1]!==void 0&&arguments[1];c(rA).collapse(re,di),Mo()}function dn(){var re=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};c(rA).transform(re),Mo()}function _e(){return c(rA).validate()}function Wi(){var re=c(rA).acceptAutoRepair();return Mo(),re}function ui(re){return Mi.apply(this,arguments)}function Mi(){return(Mi=Tt(function*(re){yield c(rA).scrollTo(re)})).apply(this,arguments)}function zi(re){return c(rA).findElement(re)}function vt(){c(rA).focus(),Mo()}function Zi(){return _t.apply(this,arguments)}function _t(){return(_t=Tt(function*(){yield c(rA).refresh()})).apply(this,arguments)}function L(re){var di,ln,Qn,To,Ma,wi,Io,nr,yo,Pa,Gn,xi,Pt,Sn,Bo,So,vA,VA,me,dA,SA,ae,xe,it,st,bt,Kn,Ri,Ji,Vt,Ni,ka=Object.keys(re);for(var Lt of ka)switch(Lt){case"content":iA((di=re[Lt])!==null&&di!==void 0?di:n);break;case"selection":BA((ln=re[Lt])!==null&&ln!==void 0?ln:o);break;case"readOnly":oA((Qn=re[Lt])!==null&&Qn!==void 0?Qn:a);break;case"indentation":sA((To=re[Lt])!==null&&To!==void 0?To:2);break;case"tabSize":hA((Ma=re[Lt])!==null&&Ma!==void 0?Ma:4);break;case"truncateTextSize":YA((wi=re[Lt])!==null&&wi!==void 0?wi:1e3);break;case"mode":ee((Io=re[Lt])!==null&&Io!==void 0?Io:r);break;case"mainMenuBar":UA((nr=re[Lt])!==null&&nr!==void 0?nr:s);break;case"navigationBar":mA((yo=re[Lt])!==null&&yo!==void 0?yo:g);break;case"statusBar":KA((Pa=re[Lt])!==null&&Pa!==void 0?Pa:l);break;case"askToFormat":Pe((Gn=re[Lt])!==null&&Gn!==void 0?Gn:C);break;case"escapeControlCharacters":Je((xi=re[Lt])!==null&&xi!==void 0?xi:I);break;case"escapeUnicodeCharacters":HA((Pt=re[Lt])!==null&&Pt!==void 0?Pt:d);break;case"flattenColumns":uA((Sn=re[Lt])!==null&&Sn!==void 0?Sn:B);break;case"parser":ZA((Bo=re[Lt])!==null&&Bo!==void 0?Bo:E);break;case"validator":QA((So=re[Lt])!==null&&So!==void 0?So:Q);break;case"validationParser":WA((vA=re[Lt])!==null&&vA!==void 0?vA:f);break;case"pathParser":MA((VA=re[Lt])!==null&&VA!==void 0?VA:b);break;case"queryLanguages":be((me=re[Lt])!==null&&me!==void 0?me:S);break;case"queryLanguageId":LA((dA=re[Lt])!==null&&dA!==void 0?dA:M);break;case"onChangeQueryLanguage":pA((SA=re[Lt])!==null&&SA!==void 0?SA:D);break;case"onChange":Ft((ae=re[Lt])!==null&&ae!==void 0?ae:F);break;case"onRenderValue":Ee((xe=re[Lt])!==null&&xe!==void 0?xe:U);break;case"onClassName":Kt((it=re[Lt])!==null&&it!==void 0?it:J);break;case"onRenderMenu":Ye((st=re[Lt])!==null&&st!==void 0?st:j);break;case"onRenderContextMenu":ze((bt=re[Lt])!==null&&bt!==void 0?bt:AA);break;case"onChangeMode":ut((Kn=re[Lt])!==null&&Kn!==void 0?Kn:O);break;case"onSelect":ht((Ri=re[Lt])!==null&&Ri!==void 0?Ri:_);break;case"onError":Me((Ji=re[Lt])!==null&&Ji!==void 0?Ji:DA);break;case"onFocus":ei((Vt=re[Lt])!==null&&Vt!==void 0?Vt:P);break;case"onBlur":Y((Ni=re[Lt])!==null&&Ni!==void 0?Ni:aA);break;default:gt(Lt)}function gt(Fi){i('Unknown property "'.concat(Fi,'"'))}be().some(Fi=>Fi.id===LA())||LA(be()[0].id),Mo()}function Ct(){return ci.apply(this,arguments)}function ci(){return(ci=Tt(function*(){throw new Error("class method destroy() is deprecated. It is replaced with a method destroy() in the vanilla library.")})).apply(this,arguments)}function Bn(re,di,ln){iA(re),Ft()&&Ft()(re,di,ln)}function En(re){BA(re),ht()&&ht()(n3(re))}function qn(){R(nA,!0),ei()&&ei()()}function Yo(){R(nA,!1),Y()&&Y()()}function Co(re){return ko.apply(this,arguments)}function ko(){return(ko=Tt(function*(re){ee()!==re&&(ee(re),Mo(),vt(),ut()(re))})).apply(this,arguments)}function Zo(re){i("handleChangeQueryLanguage",re),LA(re),pA()(re)}function wo(re){var{id:di,json:ln,rootPath:Qn,onTransform:To,onClose:Ma}=re;oA()||R(Qe,{id:di,json:ln,rootPath:Qn,indentation:sA(),truncateTextSize:YA(),escapeControlCharacters:Je(),escapeUnicodeCharacters:HA(),parser:ZA(),parseMemoizeOne:c(A),validationParser:WA(),pathParser:MA(),queryLanguages:be(),queryLanguageId:LA(),onChangeQueryLanguage:Zo,onRenderValue:Ee(),onRenderMenu:wi=>Ye()(wi,{mode:ee(),modal:!0,readOnly:oA()}),onRenderContextMenu:wi=>ze()(wi,{mode:ee(),modal:!0,readOnly:oA(),selection:BA()}),onClassName:Kt(),onTransform:To,onClose:Ma})}function ha(re){oA()||R(Ie,re)}function Xo(re){var{content:di,path:ln,onPatch:Qn,onClose:To}=re;i("onJSONEditorModal",{content:di,path:ln}),R(NA,{content:di,path:ln,onPatch:Qn,readOnly:oA(),indentation:sA(),tabSize:hA(),truncateTextSize:YA(),mainMenuBar:UA(),navigationBar:mA(),statusBar:KA(),askToFormat:Pe(),escapeControlCharacters:Je(),escapeUnicodeCharacters:HA(),flattenColumns:uA(),parser:ZA(),validator:void 0,validationParser:WA(),pathParser:MA(),onRenderValue:Ee(),onClassName:Kt(),onRenderMenu:Ye(),onRenderContextMenu:ze(),onSortModal:ha,onTransformModal:wo,onClose:To})}function ra(re){re.stopPropagation()}RA(()=>(G(ZA()),c(xA),G(iA()),th),()=>{if(!goA(ZA(),c(xA))){if(i("parser changed, recreate editor"),jf(iA())){var re=c(xA).stringify(iA().json);iA({json:re!==void 0?ZA().parse(re):void 0})}R(xA,ZA()),R(z,th())}}),RA(()=>G(iA()),()=>{var re=V_(iA());re&&console.error("Error: "+re)}),RA(()=>G(BA()),()=>{BA()===null&&console.warn("selection is invalid: it is null but should be undefined")}),RA(()=>G(ZA()),()=>{R(A,ZE(ZA().parse))}),RA(()=>G(ee()),()=>{i("mode changed to",ee())}),kn();var Do={get:_A,set:Et,update:et,patch:Te,select:Le,expand:si,collapse:gn,transform:dn,validate:_e,acceptAutoRepair:Wi,scrollTo:ui,findElement:zi,focus:vt,refresh:Zi,updateProps:L,destroy:Ct};return Ai(!0),yL(t,{children:(re,di)=>{var ln,Qn=PFA(),To=At(Qn);ZnA(CA(To),()=>c(z),Gn=>{Jo($iA(Gn,{get externalMode(){return ee()},get content(){return iA()},get selection(){return BA()},get readOnly(){return oA()},get indentation(){return sA()},get tabSize(){return hA()},get truncateTextSize(){return YA()},get statusBar(){return KA()},get askToFormat(){return Pe()},get mainMenuBar(){return UA()},get navigationBar(){return mA()},get escapeControlCharacters(){return Je()},get escapeUnicodeCharacters(){return HA()},get flattenColumns(){return uA()},get parser(){return ZA()},get parseMemoizeOne(){return c(A)},get validator(){return QA()},get validationParser(){return WA()},get pathParser(){return MA()},insideModal:!1,get onError(){return Me()},onChange:Bn,onChangeMode:Co,onSelect:En,get onRenderValue(){return Ee()},get onClassName(){return Kt()},onFocus:qn,onBlur:Yo,get onRenderMenu(){return Ye()},get onRenderContextMenu(){return ze()},onSortModal:ha,onTransformModal:wo,onJSONEditorModal:Xo,$$legacy:!0}),xi=>R(rA,xi),()=>c(rA))});var Ma=bA(To,2),wi=Gn=>{(function(xi,Pt){var Sn,Bo;St(Pt,!1);var So=IA(void 0,!0),vA=IA(void 0,!0),VA=IA(void 0,!0),me=IA(void 0,!0),dA=Cr("jsoneditor:SortModal"),SA=N(Pt,"id",9),ae=N(Pt,"json",9),xe=N(Pt,"rootPath",9),it=N(Pt,"onSort",9),st=N(Pt,"onClose",9),bt={value:1,label:"ascending"},Kn=[bt,{value:-1,label:"descending"}],Ri="".concat(SA(),":").concat(wt(xe())),Ji=IA((Sn=ZQ()[Ri])===null||Sn===void 0?void 0:Sn.selectedProperty,!0),Vt=IA(((Bo=ZQ()[Ri])===null||Bo===void 0?void 0:Bo.selectedDirection)||bt,!0),Ni=IA(void 0,!0);function ka(){try{var gt,Fi,Oi;R(Ni,void 0);var Vn=((gt=c(Ji))===null||gt===void 0?void 0:gt.value)||((Fi=c(me))===null||Fi===void 0||(Fi=Fi[0])===null||Fi===void 0?void 0:Fi.value)||[],hn=(Oi=c(Vt))===null||Oi===void 0?void 0:Oi.value,Mt=AaA(ae(),xe(),Vn,hn);it()!==void 0&&xe()!==void 0&&it()({operations:Mt,rootPath:xe(),itemPath:Vn,direction:hn}),st()()}catch(sa){R(Ni,String(sa))}}function Lt(gt){gt.focus()}RA(()=>(G(ae()),G(xe())),()=>{R(So,je(ae(),xe()))}),RA(()=>c(So),()=>{R(vA,Array.isArray(c(So)))}),RA(()=>(c(vA),c(So)),()=>{R(VA,c(vA)?wL(c(So)):void 0)}),RA(()=>(c(VA),PI),()=>{R(me,c(VA)?c(VA).map(PI):void 0)}),RA(()=>(ZQ(),c(Ji),c(Vt)),()=>{ZQ(ZQ()[Ri]={selectedProperty:c(Ji),selectedDirection:c(Vt)}),dA("store state in memory",Ri,ZQ()[Ri])}),kn(),Ai(!0),em(xi,{get onClose(){return st()},className:"jse-sort-modal",children:(gt,Fi)=>{var Oi=OFA(),Vn=At(Oi),hn=tt(()=>c(vA)?"Sort array items":"Sort object keys");Ev(Vn,{get title(){return c(hn)},get onClose(){return st()}});var Mt=CA(bA(Vn,2)),sa=bA(CA(Mt)),Ho=CA(sa),u=bA(CA(Ho)),y=CA(u),x=bA(Ho),H=oe=>{var Be=HFA(),He=bA(CA(Be));Td(CA(He),{showChevron:!0,get items(){return c(me)},get value(){return c(Ji)},set value(ke){R(Ji,ke)},$$legacy:!0}),lA(oe,Be)};TA(x,oe=>{c(vA),c(me),EA(()=>{var Be;return c(vA)&&c(me)&&((Be=c(me))===null||Be===void 0?void 0:Be.length)>1})&&oe(H)});var k=bA(x),T=bA(CA(k));Td(CA(T),{showChevron:!0,clearable:!1,get items(){return Kn},get value(){return c(Vt)},set value(oe){R(Vt,oe)},$$legacy:!0});var eA=bA(Mt,2),gA=CA(eA),wA=oe=>{var Be=zFA(),He=CA(Be);ve(()=>Rt(He,c(Ni))),lA(oe,Be)};TA(gA,oe=>{c(Ni)&&oe(wA)});var Ae=CA(bA(eA,2));Nr(()=>ue("click",Ae,ka)),vs(Ae,oe=>Lt?.(oe)),ve(oe=>{AB(y,oe),Ae.disabled=(c(vA),c(me),c(Ji),EA(()=>{var Be;return!!(c(vA)&&c(me)&&((Be=c(me))===null||Be===void 0?void 0:Be.length)>1)&&!c(Ji)}))},[()=>(G(xe()),G(qi),G(vg),EA(()=>xe()&&!qi(xe())?vg(xe()):"(document root)"))]),lA(gt,Oi)},$$slots:{default:!0}}),xt()})(Gn,e1(()=>c(Ie),{onClose:()=>{var xi;(xi=c(Ie))===null||xi===void 0||xi.onClose(),R(Ie,void 0)}}))};TA(Ma,Gn=>{c(Ie)&&Gn(wi)});var Io=bA(Ma,2),nr=Gn=>{WNA(Gn,e1(()=>c(Qe),{onClose:()=>{var xi;(xi=c(Qe))===null||xi===void 0||xi.onClose(),R(Qe,void 0)}}))};TA(Io,Gn=>{c(Qe)&&Gn(nr)});var yo=bA(Io,2),Pa=Gn=>{(function(xi,Pt){St(Pt,!1);var Sn=IA(void 0,!0),Bo=IA(void 0,!0),So=IA(void 0,!0),vA=IA(void 0,!0),VA=Cr("jsoneditor:JSONEditorModal"),me=N(Pt,"content",9),dA=N(Pt,"path",9),SA=N(Pt,"onPatch",9),ae=N(Pt,"readOnly",9),xe=N(Pt,"indentation",9),it=N(Pt,"tabSize",9),st=N(Pt,"truncateTextSize",9),bt=N(Pt,"mainMenuBar",9),Kn=N(Pt,"navigationBar",9),Ri=N(Pt,"statusBar",9),Ji=N(Pt,"askToFormat",9),Vt=N(Pt,"escapeControlCharacters",9),Ni=N(Pt,"escapeUnicodeCharacters",9),ka=N(Pt,"flattenColumns",9),Lt=N(Pt,"parser",9),gt=N(Pt,"validator",9),Fi=N(Pt,"validationParser",9),Oi=N(Pt,"pathParser",9),Vn=N(Pt,"onRenderValue",9),hn=N(Pt,"onClassName",9),Mt=N(Pt,"onRenderMenu",9),sa=N(Pt,"onRenderContextMenu",9),Ho=N(Pt,"onSortModal",9),u=N(Pt,"onTransformModal",9),y=N(Pt,"onClose",9),x=IA(void 0,!0),H=IA(void 0,!0),k={mode:gA(me()),content:me(),selection:void 0,relativePath:dA()},T=IA([k],!0),eA=IA(void 0,!0);function gA(fA){return jf(fA)&&qo(fA.json)?ba.table:ba.tree}function wA(){var fA,PA=(fA=mi(c(T)))===null||fA===void 0?void 0:fA.selection;Zf(PA)&&c(x).scrollTo(ct(PA))}function Ae(){if(VA("handleApply"),!ae())try{R(eA,void 0);var fA=c(Sn).relativePath,PA=c(Sn).content,Fe=[{op:"replace",path:wt(fA),value:liA(PA,Lt()).json}];if(c(T).length>1){var pe=liA(c(T)[c(T).length-2].content,Lt()).json,De={json:lg(pe,Fe)},ot=ye(ye({},c(T)[c(T).length-2]||k),{},{content:De});R(T,[...c(T).slice(0,c(T).length-2),ot]),Mo(),wA()}else SA()(Fe),y()()}catch(jt){R(eA,String(jt))}}function oe(){if(VA("handleClose"),c(H))R(H,!1);else if(c(T).length>1){var fA;R(T,Ki(c(T))),Mo(),(fA=c(x))===null||fA===void 0||fA.focus(),wA(),R(eA,void 0)}else y()()}function Be(fA){VA("handleChange",fA),Ne(PA=>ye(ye({},PA),{},{content:fA}))}function He(fA){VA("handleChangeSelection",fA),Ne(PA=>ye(ye({},PA),{},{selection:fA}))}function ke(fA){VA("handleChangeMode",fA),Ne(PA=>ye(ye({},PA),{},{mode:fA}))}function Ne(fA){var PA=fA(mi(c(T)));R(T,[...Ki(c(T)),PA])}function ni(fA){R(eA,fA.toString()),console.error(fA)}function Un(fA){var PA,{content:Fe,path:pe}=fA;VA("handleJSONEditorModal",{content:Fe,path:pe});var De={mode:gA(Fe),content:Fe,selection:void 0,relativePath:pe};R(T,[...c(T),De]),Mo(),(PA=c(x))===null||PA===void 0||PA.focus()}function q(fA){fA.focus()}is(()=>{var fA;(fA=c(x))===null||fA===void 0||fA.focus()}),RA(()=>c(T),()=>{R(Sn,mi(c(T))||k)}),RA(()=>c(T),()=>{R(Bo,c(T).flatMap(fA=>fA.relativePath))}),RA(()=>(c(Bo),vg),()=>{R(So,qi(c(Bo))?"(document root)":vg(c(Bo)))}),RA(()=>G(Lt()),()=>{R(vA,ZE(Lt().parse))}),kn(),Ai(!0),em(xi,{onClose:oe,className:"jse-jsoneditor-modal",get fullscreen(){return c(H)},children:(fA,PA)=>{var Fe=YFA();yL(CA(Fe),{children:(pe,De)=>{var ot=JFA(),jt=At(ot),ki=tt(()=>(c(T),EA(()=>c(T).length>1?" (".concat(c(T).length,")"):"")));Ev(jt,{get title(){var Zt;return"Edit nested content ".concat((Zt=c(ki))!==null&&Zt!==void 0?Zt:"")},fullScreenButton:!0,onClose:oe,get fullscreen(){return c(H)},set fullscreen(Zt){R(H,Zt)},$$legacy:!0});var xn=bA(jt,2),Pi=bA(CA(xn),2),Eo=bA(Pi,4);Jo($iA(CA(Eo),{get externalMode(){return c(Sn),EA(()=>c(Sn).mode)},get content(){return c(Sn),EA(()=>c(Sn).content)},get selection(){return c(Sn),EA(()=>c(Sn).selection)},get readOnly(){return ae()},get indentation(){return xe()},get tabSize(){return it()},get truncateTextSize(){return st()},get statusBar(){return Ri()},get askToFormat(){return Ji()},get mainMenuBar(){return bt()},get navigationBar(){return Kn()},get escapeControlCharacters(){return Vt()},get escapeUnicodeCharacters(){return Ni()},get flattenColumns(){return ka()},get parser(){return Lt()},get parseMemoizeOne(){return c(vA)},get validator(){return gt()},get validationParser(){return Fi()},get pathParser(){return Oi()},insideModal:!0,onError:ni,onChange:Be,onChangeMode:ke,onSelect:He,get onRenderValue(){return Vn()},get onClassName(){return hn()},get onFocus(){return Gl},get onBlur(){return Gl},get onRenderMenu(){return Mt()},get onRenderContextMenu(){return sa()},get onSortModal(){return Ho()},get onTransformModal(){return u()},onJSONEditorModal:Un,$$legacy:!0}),Zt=>R(x,Zt),()=>c(x));var Wt=CA(bA(Eo,2)),$o=Zt=>{var mt=LFA(),gi=CA(mt);ve(()=>Rt(gi,c(eA))),lA(Zt,mt)};TA(Wt,Zt=>{c(eA)&&Zt($o)});var Wn=bA(Wt,2),Aa=Zt=>{var mt=GFA();Vi(CA(mt),{get data(){return eV}}),ue("click",mt,oe),lA(Zt,mt)};TA(Wn,Zt=>{c(T),EA(()=>c(T).length>1)&&Zt(Aa)});var un=bA(Wn,2),Gt=Zt=>{var mt=KFA();Nr(()=>ue("click",mt,Ae)),vs(mt,gi=>q?.(gi)),lA(Zt,mt)},Xi=Zt=>{var mt=UFA();ue("click",mt,oe),lA(Zt,mt)};TA(un,Zt=>{ae()?Zt(Xi,!1):Zt(Gt)}),ve(()=>AB(Pi,c(So))),lA(pe,ot)},$$slots:{default:!0}}),lA(fA,Fe)},$$slots:{default:!0}}),xt()})(Gn,e1(()=>c(NA),{onClose:()=>{var xi;(xi=c(NA))===null||xi===void 0||xi.onClose(),R(NA,void 0)}}))};TA(yo,Gn=>{c(NA)&&Gn(Pa)}),ve(()=>ln=$t(To,1,"jse-main svelte-1l55585",null,ln,{"jse-focus":c(nA)})),ue("keydown",To,ra),lA(re,Qn)},$$slots:{default:!0}}),Ot(e,"get",_A),Ot(e,"set",Et),Ot(e,"update",et),Ot(e,"patch",Te),Ot(e,"select",Le),Ot(e,"expand",si),Ot(e,"collapse",gn),Ot(e,"transform",dn),Ot(e,"validate",_e),Ot(e,"acceptAutoRepair",Wi),Ot(e,"scrollTo",ui),Ot(e,"findElement",zi),Ot(e,"focus",vt),Ot(e,"refresh",Zi),Ot(e,"updateProps",L),Ot(e,"destroy",Ct),xt(Do)}function IaA(t){var{target:e,props:A}=t,i=_kA(jFA,{target:e,props:A});return i.destroy=Tt(function*(){return(function(n,o){var a=fL.get(n);return a?(fL.delete(n),a(o)):Promise.resolve()})(i)}),Mo(),i}var qc=class t{constructor(e){this.el=e}jsonString;editor=null;ngAfterViewInit(){let e={text:this.jsonString};setTimeout(()=>{this.editor=IaA({target:document.getElementById("json-editor"),props:{content:e,mode:ba.text,mainMenuBar:!1,statusBar:!1}})})}getJsonString(){return this.editor?.get().text}static \u0275fac=function(A){return new(A||t)(at(ge))};static \u0275cmp=kA({type:t,selectors:[["app-json-editor"]],inputs:{jsonString:"jsonString"},decls:1,vars:0,consts:[["id","json-editor",1,"json-editor-container","jse-theme-dark"]],template:function(A,i){A&1&&Di(0,"div",0)},styles:[".jse-theme-dark[_ngcontent-%COMP%]{--jse-theme: dark;--jse-theme-color: #2f6dd0;--jse-theme-color-highlight: #467cd2;--jse-background-color: #1e1e1e;--jse-text-color: #d4d4d4;--jse-text-color-inverse: #4d4d4d;--jse-main-border: 1px solid #4f4f4f;--jse-menu-color: #fff;--jse-modal-background: #2f2f2f;--jse-modal-overlay-background: rgba(0, 0, 0, .5);--jse-modal-code-background: #2f2f2f;--jse-tooltip-color: var(--jse-text-color);--jse-tooltip-background: #4b4b4b;--jse-tooltip-border: 1px solid #737373;--jse-tooltip-action-button-color: inherit;--jse-tooltip-action-button-background: #737373;--jse-panel-background: #333333;--jse-panel-background-border: 1px solid #464646;--jse-panel-color: var(--jse-text-color);--jse-panel-color-readonly: #737373;--jse-panel-border: 1px solid #3c3c3c;--jse-panel-button-color-highlight: #e5e5e5;--jse-panel-button-background-highlight: #464646;--jse-navigation-bar-background: #656565;--jse-navigation-bar-background-highlight: #7e7e7e;--jse-navigation-bar-dropdown-color: var(--jse-text-color);--jse-context-menu-background: #4b4b4b;--jse-context-menu-background-highlight: #595959;--jse-context-menu-separator-color: #595959;--jse-context-menu-color: var(--jse-text-color);--jse-context-menu-pointer-background: #737373;--jse-context-menu-pointer-background-highlight: #818181;--jse-context-menu-pointer-color: var(--jse-context-menu-color);--jse-key-color: #9cdcfe;--jse-value-color: var(--jse-text-color);--jse-value-color-number: #b5cea8;--jse-value-color-boolean: #569cd6;--jse-value-color-null: #569cd6;--jse-value-color-string: #ce9178;--jse-value-color-url: #ce9178;--jse-delimiter-color: #949494;--jse-edit-outline: 2px solid var(--jse-text-color);--jse-selection-background-color: #464646;--jse-selection-background-inactive-color: #333333;--jse-hover-background-color: #343434;--jse-active-line-background-color: rgba(255, 255, 255, .06);--jse-search-match-background-color: #343434;--jse-collapsed-items-background-color: #333333;--jse-collapsed-items-selected-background-color: #565656;--jse-collapsed-items-link-color: #b2b2b2;--jse-collapsed-items-link-color-highlight: #ec8477;--jse-search-match-color: #724c27;--jse-search-match-outline: 1px solid #966535;--jse-search-match-active-color: #9f6c39;--jse-search-match-active-outline: 1px solid #bb7f43;--jse-tag-background: #444444;--jse-tag-color: #bdbdbd;--jse-table-header-background: #333333;--jse-table-header-background-highlight: #424242;--jse-table-row-odd-background: rgba(255, 255, 255, .1);--jse-input-background: #3d3d3d;--jse-input-border: var(--jse-main-border);--jse-button-background: #808080;--jse-button-background-highlight: #7a7a7a;--jse-button-color: #e0e0e0;--jse-button-secondary-background: #494949;--jse-button-secondary-background-highlight: #5d5d5d;--jse-button-secondary-background-disabled: #9d9d9d;--jse-button-secondary-color: var(--jse-text-color);--jse-a-color: #55abff;--jse-a-color-highlight: #4387c9;--jse-svelte-select-background: #3d3d3d;--jse-svelte-select-border: 1px solid #4f4f4f;--list-background: #3d3d3d;--item-hover-bg: #505050;--multi-item-bg: #5b5b5b;--input-color: #d4d4d4;--multi-clear-bg: #8a8a8a;--multi-item-clear-icon-color: #d4d4d4;--multi-item-outline: 1px solid #696969;--list-shadow: 0 2px 8px 0 rgba(0, 0, 0, .4);--jse-color-picker-background: #656565;--jse-color-picker-border-box-shadow: #8c8c8c 0 0 0 1px}.json-editor-container[_ngcontent-%COMP%]{height:100%} .jse-message.jse-error{display:none} .cm-gutters.cm-gutters-before{display:none} .jse-text-mode{border-radius:10px} .jse-contents{border-radius:10px;border-bottom:1px solid #4f4f4f}"]})};var qFA=(t,e)=>e.name;function VFA(t,e){if(t&1&&K(0),t&2){let A=v();Se(" Configure ",A.selectedBuiltInTool," ")}}function WFA(t,e){if(t&1&&K(0),t&2){let A=v();Se(" ",A.isEditMode?"Edit Built-in Tool":"Add Built-in Tool"," ")}}function ZFA(t,e){if(t&1){let A=JA();m(0,"div",8),tA("click",function(){let n=Z(A).$implicit,o=v(3);return X(o.onToolSelected(n))}),m(1,"mat-icon",9),K(2),w(),m(3,"span",10),K(4),w()()}if(t&2){let A=e.$implicit,i=v(3);ne("selected",i.selectedBuiltInTool===A),p(2),qA(i.getToolIcon(A)),p(2),qA(A)}}function XFA(t,e){if(t&1&&(m(0,"div",4)(1,"h3",5),K(2),w(),m(3,"div",6),Ut(4,ZFA,5,4,"div",7,Li),w()()),t&2){let A=e.$implicit;p(2),qA(A.name),p(2),Jt(A.tools)}}function $FA(t,e){if(t&1&&(m(0,"div",1),Ut(1,XFA,6,1,"div",4,qFA),w()),t&2){let A=v();p(),Jt(A.toolCategories)}}function A_A(t,e){if(t&1&&(m(0,"div",2)(1,"h3",11),K(2,"Configure Tool Arguments"),w(),GA(3,"app-json-editor",12),w()),t&2){let A=v();p(3),$("jsonString",A.toolArgsString)}}function e_A(t,e){if(t&1){let A=JA();m(0,"button",14),tA("click",function(){Z(A);let n=v(2);return X(n.backToToolSelection())}),K(1,"Back"),w()}}function t_A(t,e){if(t&1){let A=JA();V(0,e_A,2,0,"button",13),m(1,"button",14),tA("click",function(){Z(A);let n=v();return X(n.saveArgs())}),K(2),w()}if(t&2){let A=v();W(A.isEditMode?-1:0),p(2),qA(A.isEditMode?"Save":"Create")}}function i_A(t,e){if(t&1){let A=JA();m(0,"button",14),tA("click",function(){Z(A);let n=v();return X(n.cancel())}),K(1,"Cancel"),w(),m(2,"button",15),tA("click",function(){Z(A);let n=v();return X(n.addTool())}),K(3),w()}if(t&2){let A=v();p(3),Se(" ",A.isEditMode?"Save":"Create"," ")}}var aB=class t{constructor(e,A){this.data=e;this.dialogRef=A}jsonEditorComponent;selectedBuiltInTool="google_search";toolCategories=[{name:"Search Tools",tools:["google_search","EnterpriseWebSearchTool","VertexAiSearchTool"]},{name:"Context Tools",tools:["FilesRetrieval","load_memory","preload_memory","url_context","VertexAiRagRetrieval"]},{name:"Agent Function Tools",tools:["exit_loop","get_user_choice","load_artifacts","LongRunningFunctionTool"]}];builtInToolArgs=new Map([["EnterpriseWebSearchTool",[]],["exit_loop",[]],["FilesRetrieval",["name","description","input_dir"]],["get_user_choice",[]],["google_search",[]],["load_artifacts",[]],["load_memory",[]],["LongRunningFunctionTool",["func"]],["preload_memory",[]],["url_context",[]],["VertexAiRagRetrieval",["name","description","rag_corpora","rag_resources","similarity_top_k","vector_distance_threshold"]],["VertexAiSearchTool",["data_store_id","data_store_specs","search_engine_id","filter","max_results"]]]);isEditMode=!1;showArgsEditor=!1;toolArgs={};toolArgsString="";ngOnInit(){if(this.isEditMode=this.data.isEditMode||!1,this.isEditMode&&this.data.toolName){this.selectedBuiltInTool=this.data.toolName;let e=this.builtInToolArgs.get(this.data.toolName);if(e&&e.length>0){if(this.data.toolArgs)this.toolArgs=cA({},this.data.toolArgs),delete this.toolArgs.skip_summarization;else{this.toolArgs={};for(let A of e)this.toolArgs[A]=""}this.toolArgsString=JSON.stringify(this.toolArgs,null,2),this.showArgsEditor=!0}}}onToolSelected(e){this.selectedBuiltInTool=e;let A=this.builtInToolArgs.get(e);A&&A.length>0&&(this.initializeToolArgs(e,A),this.showArgsEditor=!0)}initializeToolArgs(e,A){this.toolArgs={};for(let i of A)this.toolArgs[i]="";this.toolArgsString=JSON.stringify(this.toolArgs,null,2)}backToToolSelection(){this.showArgsEditor=!1,this.toolArgs={},this.toolArgsString=""}saveArgs(){if(this.jsonEditorComponent)try{this.toolArgsString=this.jsonEditorComponent.getJsonString(),this.toolArgs=JSON.parse(this.toolArgsString)}catch(e){alert("Invalid JSON: "+e);return}this.addTool()}addTool(){let e={toolType:"Built-in tool",name:this.selectedBuiltInTool,isEditMode:this.isEditMode};Object.keys(this.toolArgs).length>0&&(e.args=this.toolArgs),this.dialogRef.close(e)}cancel(){this.dialogRef.close()}getToolIcon(e){return ME(e,"Built-in tool")}static \u0275fac=function(A){return new(A||t)(at(Ca),at(bo))};static \u0275cmp=kA({type:t,selectors:[["app-built-in-tool-dialog"]],viewQuery:function(A,i){if(A&1&&ai(qc,5),A&2){let n;ce(n=Ce())&&(i.jsonEditorComponent=n.first)}},decls:9,vars:3,consts:[["mat-dialog-title","",1,"dialog-title"],[1,"tool-categories-container"],[1,"args-editor-container"],["align","end"],[1,"tool-category"],[1,"category-title"],[1,"tool-list"],[1,"tool-item",3,"selected"],[1,"tool-item",3,"click"],[1,"tool-icon"],[1,"tool-name"],[1,"args-editor-title"],[3,"jsonString"],["mat-button",""],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"h2",0),V(1,VFA,1,1)(2,WFA,1,1),w(),m(3,"mat-dialog-content"),V(4,$FA,3,0,"div",1)(5,A_A,4,1,"div",2),w(),m(6,"mat-dialog-actions",3),V(7,t_A,3,2)(8,i_A,4,1),w()),A&2&&(p(),W(i.showArgsEditor?1:2),p(3),W(i.showArgsEditor?5:4),p(3),W(i.showArgsEditor?7:8))},dependencies:[ma,Nn,Da,rr,Fn,Ua,fn,qc],styles:[".dialog-title[_ngcontent-%COMP%]{color:var(--mdc-dialog-subhead-color)!important;font-family:Google Sans;font-size:24px}.tool-categories-container[_ngcontent-%COMP%]{padding:16px 0}.tool-category[_ngcontent-%COMP%]{margin-bottom:24px}.tool-category[_ngcontent-%COMP%]:last-child{margin-bottom:0}.category-title[_ngcontent-%COMP%]{font-family:Google Sans;font-size:16px;font-weight:500;color:var(--mdc-dialog-supporting-text-color);margin:0 0 12px;padding-left:8px}.tool-list[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.tool-item[_ngcontent-%COMP%]{display:flex;align-items:center;padding:12px 16px;border-radius:8px;cursor:pointer;transition:all .2s ease;background-color:var(--builder-tool-item-background-color);border:1px solid var(--builder-tool-item-border-color);min-width:0}.tool-item[_ngcontent-%COMP%]:hover{background-color:var(--builder-tool-item-hover-background-color)}.tool-item.selected[_ngcontent-%COMP%]{background-color:#8ab4f833;border:1px solid #8ab4f8}.tool-item[_ngcontent-%COMP%] .tool-icon[_ngcontent-%COMP%]{color:#8ab4f8;margin-right:12px;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-item[_ngcontent-%COMP%] .tool-name[_ngcontent-%COMP%]{font-family:Google Sans;font-size:14px;color:var(--mdc-dialog-supporting-text-color)!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.args-editor-container[_ngcontent-%COMP%]{padding:16px 0}.args-editor-title[_ngcontent-%COMP%]{font-family:Google Sans;font-size:16px;font-weight:500;color:var(--mdc-dialog-supporting-text-color);margin:0 0 16px}"]})};function n_A(t,e){if(t&1){let A=JA();js(0),m(1,"div",6)(2,"div",7),tA("click",function(){Z(A);let n=v();return X(n.toggleToolInfo())}),m(3,"mat-icon",8),K(4,"info"),w(),m(5,"div",9)(6,"span"),K(7,"Tool Information"),w()(),m(8,"button",10)(9,"mat-icon"),K(10),w()()(),m(11,"div",11)(12,"div",12)(13,"div",13),K(14),w(),m(15,"div",14),K(16),w()(),m(17,"div",15)(18,"a",16)(19,"mat-icon"),K(20,"open_in_new"),w(),m(21,"span"),K(22,"View Official Documentation"),w()()()()(),qs()}if(t&2){let A,i,n,o=v();p(10),qA(o.isToolInfoExpanded?"expand_less":"expand_more"),p(),ne("expanded",o.isToolInfoExpanded),p(3),qA((A=o.getToolInfo())==null?null:A.shortDescription),p(2),qA((i=o.getToolInfo())==null?null:i.detailedDescription),p(2),$("href",(n=o.getToolInfo())==null?null:n.docLink,Ka)}}function o_A(t,e){t&1&&(m(0,"mat-hint",19),K(1," Start with a letter or underscore, and contain only letters, digits, and underscores. "),w())}function a_A(t,e){if(t&1){let A=JA();m(0,"mat-form-field",2)(1,"mat-label"),K(2),w(),m(3,"input",17),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.inputValue,n)||(o.inputValue=n),X(n)}),tA("keydown",function(n){Z(A);let o=v();return X(o.onKeyDown(n))}),w(),pt(4,o_A,2,0,"mat-hint",18),w()}if(t&2){let A=v();p(2),qA(A.data.inputLabel||"Input"),p(),Qo("ngModel",A.inputValue),$("placeholder",A.data.inputPlaceholder||"Enter value"),p(),$("ngIf",!A.isInputValid())}}var Vc=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.inputValue=A.inputValue||""}inputValue="";isToolInfoExpanded=!1;isInputValid(){let e=this.inputValue.trim();return!(!e||!/^[a-zA-Z_]/.test(e)||!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))}onCancel(){this.dialogRef.close()}onConfirm(){if(this.data.showInput){let e=this.inputValue.trim();if(!this.isInputValid())return;this.dialogRef.close(e)}else this.dialogRef.close("confirm")}onKeyDown(e){e.key==="Enter"&&this.data.showInput&&this.onConfirm()}getToolInfo(){if(this.data.toolType)return fc.getToolDetailedInfo(this.data.toolType)}toggleToolInfo(){this.isToolInfoExpanded=!this.isToolInfoExpanded}static \u0275fac=function(A){return new(A||t)(at(bo),at(Ca))};static \u0275cmp=kA({type:t,selectors:[["app-confirmation-dialog"]],decls:12,vars:6,consts:[["mat-dialog-title",""],[4,"ngIf"],[2,"width","100%","margin-top","16px"],["align","end"],["mat-button","",3,"click"],["mat-button","","color","primary","cdkFocusInitial","",3,"click","disabled"],[1,"tool-info-container"],[1,"tool-info-header",3,"click"],[1,"tool-info-icon"],[1,"tool-info-title"],["mat-icon-button","","type","button","aria-label","Toggle tool information",1,"tool-info-toggle"],[1,"tool-info-body"],[1,"tool-info-content"],[1,"tool-info-short"],[1,"tool-info-detailed"],[1,"tool-info-link-container"],["target","_blank","rel","noopener noreferrer",1,"tool-info-link",3,"href"],["matInput","","cdkFocusInitial","",3,"ngModelChange","keydown","ngModel","placeholder"],["style","font-size: 11px; color: #666;",4,"ngIf"],[2,"font-size","11px","color","#666"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1),w(),m(2,"mat-dialog-content"),pt(3,n_A,23,6,"ng-container",1),m(4,"p"),K(5),w(),V(6,a_A,5,4,"mat-form-field",2),w(),m(7,"mat-dialog-actions",3)(8,"button",4),tA("click",function(){return i.onCancel()}),K(9,"Cancel"),w(),m(10,"button",5),tA("click",function(){return i.onConfirm()}),K(11),w()()),A&2&&(p(),qA(i.data.title),p(2),$("ngIf",i.data.showToolInfo&&i.getToolInfo()),p(2),qA(i.data.message),p(),W(i.data.showInput?6:-1),p(4),$("disabled",i.data.showInput&&!i.isInputValid()),p(),Se(" ",i.data.confirmButtonText||"Confirm"," "))},dependencies:[ma,rl,Ns,fn,Wa,Fn,Da,rr,Ua,Yr,No,Gg,R1,gl,wa,Nn,uo,fo,Sa],styles:["mat-dialog-content[_ngcontent-%COMP%]{padding:20px 24px;display:flex;flex-direction:column;gap:16px;color:var(--mdc-dialog-supporting-text-color)}mat-dialog-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)}[_nghost-%COMP%] .mat-mdc-form-field{--mat-form-field-filled-container-color: var(--builder-form-field-background-color);--mat-form-field-filled-label-text-color: var(--mdc-dialog-supporting-text-color);--mat-form-field-filled-focus-label-text-color: var(--builder-text-link-color);--mat-form-field-filled-hover-label-text-color: var(--mdc-dialog-supporting-text-color)}[_nghost-%COMP%] .mat-mdc-input-element{color:var(--mdc-dialog-supporting-text-color)!important;caret-color:var(--mdc-dialog-supporting-text-color)!important}[_nghost-%COMP%] .mat-mdc-input-element::placeholder{color:var(--builder-text-muted-color)!important;opacity:0!important}[_nghost-%COMP%] .mat-mdc-input-element:focus::placeholder{opacity:.6!important}[_nghost-%COMP%] .mat-mdc-form-field-hint{color:var(--builder-text-muted-color)!important}.tool-info-container[_ngcontent-%COMP%]{background-color:#8ab4f814;border:1px solid rgba(138,180,248,.2);border-radius:8px;padding:16px;margin-bottom:16px}.tool-info-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0}.tool-info-header[_ngcontent-%COMP%]:hover .tool-info-title[_ngcontent-%COMP%]{color:#a7c8ff}.tool-info-icon[_ngcontent-%COMP%]{color:#8ab4f8;font-size:20px;width:20px;height:20px;flex-shrink:0}.tool-info-title[_ngcontent-%COMP%]{flex:1;font-weight:500;color:#8ab4f8;font-size:14px;transition:color .2s ease}.tool-info-toggle[_ngcontent-%COMP%]{color:#8ab4f8;margin:-8px}.tool-info-toggle[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{transition:transform .2s ease}.tool-info-body[_ngcontent-%COMP%]{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin-top .3s ease}.tool-info-body.expanded[_ngcontent-%COMP%]{max-height:500px;opacity:1;margin-top:12px}.tool-info-content[_ngcontent-%COMP%]{flex:1}.tool-info-short[_ngcontent-%COMP%]{font-weight:500;color:var(--mdc-dialog-supporting-text-color)!important;margin-bottom:8px;line-height:1.4}.tool-info-detailed[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;font-size:14px;line-height:1.5}.tool-info-link-container[_ngcontent-%COMP%]{margin-top:12px}.tool-info-link[_ngcontent-%COMP%]{color:#8ab4f8;text-decoration:none;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:color .2s ease}.tool-info-link[_ngcontent-%COMP%]:hover{color:#a7c8ff}.tool-info-link[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}"]})};var r_A=["mat-menu-item",""],s_A=[[["mat-icon"],["","matMenuItemIcon",""]],"*"],g_A=["mat-icon, [matMenuItemIcon]","*"];function l_A(t,e){t&1&&(Qt(),m(0,"svg",2),GA(1,"polygon",3),w())}var c_A=["*"];function C_A(t,e){if(t&1){let A=JA();li(0,"div",0),p2("click",function(){Z(A);let n=v();return X(n.closed.emit("click"))})("animationstart",function(n){Z(A);let o=v();return X(o._onAnimationStart(n.animationName))})("animationend",function(n){Z(A);let o=v();return X(o._onAnimationDone(n.animationName))})("animationcancel",function(n){Z(A);let o=v();return X(o._onAnimationDone(n.animationName))}),li(1,"div",1),Ke(2),Ei()()}if(t&2){let A=v();Po(A._classList),ne("mat-menu-panel-animations-disabled",A._animationsDisabled)("mat-menu-panel-exit-animation",A._panelAnimationState==="void")("mat-menu-panel-animating",A._isAnimating()),vo("id",A.panelId),ie("aria-label",A.ariaLabel||null)("aria-labelledby",A.ariaLabelledby||null)("aria-describedby",A.ariaDescribedby||null)}}var pG=new yA("MAT_MENU_PANEL"),C2=(()=>{class t{_elementRef=h(ge);_document=h(Xt);_focusMonitor=h(ar);_parentMenu=h(pG,{optional:!0});_changeDetectorRef=h(Dt);role="menuitem";disabled=!1;disableRipple=!1;_hovered=new XA;_focused=new XA;_highlighted=!1;_triggersSubmenu=!1;constructor(){h(Xn).load(dr),this._parentMenu?.addItem?.(this)}focus(A,i){this._focusMonitor&&A?this._focusMonitor.focusVia(this._getHostElement(),A,i):this._getHostElement().focus(i),this._focused.next(this)}ngAfterViewInit(){this._focusMonitor&&this._focusMonitor.monitor(this._elementRef,!1)}ngOnDestroy(){this._focusMonitor&&this._focusMonitor.stopMonitoring(this._elementRef),this._parentMenu&&this._parentMenu.removeItem&&this._parentMenu.removeItem(this),this._hovered.complete(),this._focused.complete()}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._elementRef.nativeElement}_checkDisabled(A){this.disabled&&(A.preventDefault(),A.stopPropagation())}_handleMouseEnter(){this._hovered.next(this)}getLabel(){let A=this._elementRef.nativeElement.cloneNode(!0),i=A.querySelectorAll("mat-icon, .material-icons");for(let n=0;n({overlapTrigger:!1,xPosition:"after",yPosition:"below",backdropClass:"cdk-overlay-transparent-backdrop"})}),mG="_mat-menu-enter",Rv="_mat-menu-exit",AC=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_injector=h(ft);_keyManager;_xPosition;_yPosition;_firstItemFocusRef;_exitFallbackTimeout;_animationsDisabled=ji();_allItems;_directDescendantItems=new ol;_classList={};_panelAnimationState="void";_animationDone=new XA;_isAnimating=jA(!1);parentMenu;direction;overlayPanelClass;backdropClass;ariaLabel;ariaLabelledby;ariaDescribedby;get xPosition(){return this._xPosition}set xPosition(A){this._xPosition=A,this.setPositionClasses()}get yPosition(){return this._yPosition}set yPosition(A){this._yPosition=A,this.setPositionClasses()}templateRef;items;lazyContent;overlapTrigger=!1;hasBackdrop;set panelClass(A){let i=this._previousPanelClass,n=cA({},this._classList);i&&i.length&&i.split(" ").forEach(o=>{n[o]=!1}),this._previousPanelClass=A,A&&A.length&&(A.split(" ").forEach(o=>{n[o]=!0}),this._elementRef.nativeElement.className=""),this._classList=n}_previousPanelClass;get classList(){return this.panelClass}set classList(A){this.panelClass=A}closed=new $A;close=this.closed;panelId=h(an).getId("mat-menu-panel-");constructor(){let A=h(d_A);this.overlayPanelClass=A.overlayPanelClass||"",this._xPosition=A.xPosition,this._yPosition=A.yPosition,this.backdropClass=A.backdropClass,this.overlapTrigger=A.overlapTrigger,this.hasBackdrop=A.hasBackdrop}ngOnInit(){this.setPositionClasses()}ngAfterContentInit(){this._updateDirectDescendants(),this._keyManager=new s0(this._directDescendantItems).withWrap().withTypeAhead().withHomeAndEnd(),this._keyManager.tabOut.subscribe(()=>this.closed.emit("tab")),this._directDescendantItems.changes.pipe(cn(this._directDescendantItems),Si(A=>fi(...A.map(i=>i._focused)))).subscribe(A=>this._keyManager.updateActiveItem(A)),this._directDescendantItems.changes.subscribe(A=>{let i=this._keyManager;if(this._panelAnimationState==="enter"&&i.activeItem?._hasFocus()){let n=A.toArray(),o=Math.max(0,Math.min(n.length-1,i.activeItemIndex||0));n[o]&&!n[o].disabled?i.setActiveItem(o):i.setNextItemActive()}})}ngOnDestroy(){this._keyManager?.destroy(),this._directDescendantItems.destroy(),this.closed.complete(),this._firstItemFocusRef?.destroy(),clearTimeout(this._exitFallbackTimeout)}_hovered(){return this._directDescendantItems.changes.pipe(cn(this._directDescendantItems),Si(i=>fi(...i.map(n=>n._hovered))))}addItem(A){}removeItem(A){}_handleKeydown(A){let i=A.keyCode,n=this._keyManager;switch(i){case 27:pa(A)||(A.preventDefault(),this.closed.emit("keydown"));break;case 37:this.parentMenu&&this.direction==="ltr"&&this.closed.emit("keydown");break;case 39:this.parentMenu&&this.direction==="rtl"&&this.closed.emit("keydown");break;default:(i===38||i===40)&&n.setFocusOrigin("keyboard"),n.onKeydown(A);return}}focusFirstItem(A="program"){this._firstItemFocusRef?.destroy(),this._firstItemFocusRef=Yn(()=>{let i=this._resolvePanel();if(!i||!i.contains(document.activeElement)){let n=this._keyManager;n.setFocusOrigin(A).setFirstItemActive(),!n.activeItem&&i&&i.focus()}},{injector:this._injector})}resetActiveItem(){this._keyManager.setActiveItem(-1)}setElevation(A){}setPositionClasses(A=this.xPosition,i=this.yPosition){this._classList=Ge(cA({},this._classList),{"mat-menu-before":A==="before","mat-menu-after":A==="after","mat-menu-above":i==="above","mat-menu-below":i==="below"}),this._changeDetectorRef.markForCheck()}_onAnimationDone(A){let i=A===Rv;(i||A===mG)&&(i&&(clearTimeout(this._exitFallbackTimeout),this._exitFallbackTimeout=void 0),this._animationDone.next(i?"void":"enter"),this._isAnimating.set(!1))}_onAnimationStart(A){(A===mG||A===Rv)&&this._isAnimating.set(!0)}_setIsOpen(A){if(this._panelAnimationState=A?"enter":"void",A){if(this._keyManager.activeItemIndex===0){let i=this._resolvePanel();i&&(i.scrollTop=0)}}else this._animationsDisabled||(this._exitFallbackTimeout=setTimeout(()=>this._onAnimationDone(Rv),200));this._animationsDisabled&&setTimeout(()=>{this._onAnimationDone(A?mG:Rv)}),this._changeDetectorRef.markForCheck()}_updateDirectDescendants(){this._allItems.changes.pipe(cn(this._allItems)).subscribe(A=>{this._directDescendantItems.reset(A.filter(i=>i._parentMenu===this)),this._directDescendantItems.notifyOnChanges()})}_resolvePanel(){let A=null;return this._directDescendantItems.length&&(A=this._directDescendantItems.first._getHostElement().closest('[role="menu"]')),A}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-menu"]],contentQueries:function(i,n,o){if(i&1&&fa(o,I_A,5)(o,C2,5)(o,C2,4),i&2){let a;ce(a=Ce())&&(n.lazyContent=a.first),ce(a=Ce())&&(n._allItems=a),ce(a=Ce())&&(n.items=a)}},viewQuery:function(i,n){if(i&1&&ai(Tn,5),i&2){let o;ce(o=Ce())&&(n.templateRef=o.first)}},hostVars:3,hostBindings:function(i,n){i&2&&ie("aria-label",null)("aria-labelledby",null)("aria-describedby",null)},inputs:{backdropClass:"backdropClass",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],xPosition:"xPosition",yPosition:"yPosition",overlapTrigger:[2,"overlapTrigger","overlapTrigger",he],hasBackdrop:[2,"hasBackdrop","hasBackdrop",A=>A==null?null:he(A)],panelClass:[0,"class","panelClass"],classList:"classList"},outputs:{closed:"closed",close:"close"},exportAs:["matMenu"],features:[dt([{provide:pG,useExisting:t}])],ngContentSelectors:c_A,decls:1,vars:0,consts:[["tabindex","-1","role","menu",1,"mat-mdc-menu-panel",3,"click","animationstart","animationend","animationcancel","id"],[1,"mat-mdc-menu-content"]],template:function(i,n){i&1&&(Yt(),gp(0,C_A,3,12,"ng-template"))},styles:[`mat-menu{display:none}.mat-mdc-menu-content{margin:0;padding:8px 0;outline:0}.mat-mdc-menu-content,.mat-mdc-menu-content .mat-mdc-menu-item .mat-mdc-menu-item-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;flex:1;white-space:normal;font-family:var(--mat-menu-item-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-menu-item-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-menu-item-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-menu-item-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-menu-item-label-text-weight, var(--mat-sys-label-large-weight))}@keyframes _mat-menu-enter{from{opacity:0;transform:scale(0.8)}to{opacity:1;transform:none}}@keyframes _mat-menu-exit{from{opacity:1}to{opacity:0}}.mat-mdc-menu-panel{min-width:112px;max-width:280px;overflow:auto;box-sizing:border-box;outline:0;animation:_mat-menu-enter 120ms cubic-bezier(0, 0, 0.2, 1);border-radius:var(--mat-menu-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-menu-container-color, var(--mat-sys-surface-container));box-shadow:var(--mat-menu-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));will-change:transform,opacity}.mat-mdc-menu-panel.mat-menu-panel-exit-animation{animation:_mat-menu-exit 100ms 25ms linear forwards}.mat-mdc-menu-panel.mat-menu-panel-animations-disabled{animation:none}.mat-mdc-menu-panel.mat-menu-panel-animating{pointer-events:none}.mat-mdc-menu-panel.mat-menu-panel-animating:has(.mat-mdc-menu-content:empty){display:none}@media(forced-colors: active){.mat-mdc-menu-panel{outline:solid 1px}}.mat-mdc-menu-panel .mat-divider{border-top-color:var(--mat-menu-divider-color, var(--mat-sys-surface-variant));margin-bottom:var(--mat-menu-divider-bottom-spacing, 8px);margin-top:var(--mat-menu-divider-top-spacing, 8px)}.mat-mdc-menu-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;cursor:pointer;width:100%;text-align:left;box-sizing:border-box;color:inherit;font-size:inherit;background:none;text-decoration:none;margin:0;min-height:48px;padding-left:var(--mat-menu-item-leading-spacing, 12px);padding-right:var(--mat-menu-item-trailing-spacing, 12px);-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-menu-item::-moz-focus-inner{border:0}[dir=rtl] .mat-mdc-menu-item{padding-left:var(--mat-menu-item-trailing-spacing, 12px);padding-right:var(--mat-menu-item-leading-spacing, 12px)}.mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-leading-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-trailing-spacing, 12px)}[dir=rtl] .mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-trailing-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-leading-spacing, 12px)}.mat-mdc-menu-item,.mat-mdc-menu-item:visited,.mat-mdc-menu-item:link{color:var(--mat-menu-item-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-menu-item .mat-icon-no-color,.mat-mdc-menu-item .mat-mdc-menu-submenu-icon{color:var(--mat-menu-item-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-menu-item[disabled]{cursor:default;opacity:.38}.mat-mdc-menu-item[disabled]::after{display:block;position:absolute;content:"";top:0;left:0;bottom:0;right:0}.mat-mdc-menu-item:focus{outline:0}.mat-mdc-menu-item .mat-icon{flex-shrink:0;margin-right:var(--mat-menu-item-spacing, 12px);height:var(--mat-menu-item-icon-size, 24px);width:var(--mat-menu-item-icon-size, 24px)}[dir=rtl] .mat-mdc-menu-item{text-align:right}[dir=rtl] .mat-mdc-menu-item .mat-icon{margin-right:0;margin-left:var(--mat-menu-item-spacing, 12px)}.mat-mdc-menu-item:not([disabled]):hover{background-color:var(--mat-menu-item-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-menu-item:not([disabled]).cdk-program-focused,.mat-mdc-menu-item:not([disabled]).cdk-keyboard-focused,.mat-mdc-menu-item:not([disabled]).mat-mdc-menu-item-highlighted{background-color:var(--mat-menu-item-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}@media(forced-colors: active){.mat-mdc-menu-item{margin-top:1px}}.mat-mdc-menu-submenu-icon{width:var(--mat-menu-item-icon-size, 24px);height:10px;fill:currentColor;padding-left:var(--mat-menu-item-spacing, 12px)}[dir=rtl] .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing, 12px);padding-left:0}[dir=rtl] .mat-mdc-menu-submenu-icon polygon{transform:scaleX(-1);transform-origin:center}@media(forced-colors: active){.mat-mdc-menu-submenu-icon{fill:CanvasText}}.mat-mdc-menu-item .mat-mdc-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none} -`],encapsulation:2,changeDetection:0})}return t})(),B_A=new yA("mat-menu-scroll-strategy",{providedIn:"root",factory:()=>{let t=h(ft);return()=>EC(t)}});var Fh=new WeakMap,E_A=(()=>{class t{_canHaveBackdrop;_element=h(ge);_viewContainerRef=h(Oo);_menuItemInstance=h(C2,{optional:!0,self:!0});_dir=h(Ro,{optional:!0});_focusMonitor=h(ar);_ngZone=h(Oe);_injector=h(ft);_scrollStrategy=h(B_A);_changeDetectorRef=h(Dt);_animationsDisabled=ji();_portal;_overlayRef=null;_menuOpen=!1;_closingActionsSubscription=Jn.EMPTY;_menuCloseSubscription=Jn.EMPTY;_pendingRemoval;_parentMaterialMenu;_parentInnerPadding;_openedBy=void 0;get _menu(){return this._menuInternal}set _menu(A){A!==this._menuInternal&&(this._menuInternal=A,this._menuCloseSubscription.unsubscribe(),A&&(this._parentMaterialMenu,this._menuCloseSubscription=A.close.subscribe(i=>{this._destroyMenu(i),(i==="click"||i==="tab")&&this._parentMaterialMenu&&this._parentMaterialMenu.closed.emit(i)})),this._menuItemInstance?._setTriggersSubmenu(this._triggersSubmenu()))}_menuInternal=null;constructor(A){this._canHaveBackdrop=A;let i=h(pG,{optional:!0});this._parentMaterialMenu=i instanceof AC?i:void 0}ngOnDestroy(){this._menu&&this._ownsMenu(this._menu)&&Fh.delete(this._menu),this._pendingRemoval?.unsubscribe(),this._menuCloseSubscription.unsubscribe(),this._closingActionsSubscription.unsubscribe(),this._overlayRef&&(this._overlayRef.dispose(),this._overlayRef=null)}get menuOpen(){return this._menuOpen}get dir(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_triggersSubmenu(){return!!(this._menuItemInstance&&this._parentMaterialMenu&&this._menu)}_closeMenu(){this._menu?.close.emit()}_openMenu(A){if(this._triggerIsAriaDisabled())return;let i=this._menu;if(this._menuOpen||!i)return;this._pendingRemoval?.unsubscribe();let n=Fh.get(i);Fh.set(i,this),n&&n!==this&&n._closeMenu();let o=this._createOverlay(i),a=o.getConfig(),r=a.positionStrategy;this._setPosition(i,r),this._canHaveBackdrop?a.hasBackdrop=i.hasBackdrop==null?!this._triggersSubmenu():i.hasBackdrop:a.hasBackdrop=!1,o.hasAttached()||(o.attach(this._getPortal(i)),i.lazyContent?.attach(this.menuData)),this._closingActionsSubscription=this._menuClosingActions().subscribe(()=>this._closeMenu()),i.parentMenu=this._triggersSubmenu()?this._parentMaterialMenu:void 0,i.direction=this.dir,A&&i.focusFirstItem(this._openedBy||"program"),this._setIsMenuOpen(!0),i instanceof AC&&(i._setIsOpen(!0),i._directDescendantItems.changes.pipe(Bt(i.close)).subscribe(()=>{r.withLockedPosition(!1).reapplyLastPosition(),r.withLockedPosition(!0)}))}focus(A,i){this._focusMonitor&&A?this._focusMonitor.focusVia(this._element,A,i):this._element.nativeElement.focus(i)}_destroyMenu(A){let i=this._overlayRef,n=this._menu;!i||!this.menuOpen||(this._closingActionsSubscription.unsubscribe(),this._pendingRemoval?.unsubscribe(),n instanceof AC&&this._ownsMenu(n)?(this._pendingRemoval=n._animationDone.pipe(oo(1)).subscribe(()=>{i.detach(),Fh.has(n)||n.lazyContent?.detach()}),n._setIsOpen(!1)):(i.detach(),n?.lazyContent?.detach()),n&&this._ownsMenu(n)&&Fh.delete(n),this.restoreFocus&&(A==="keydown"||!this._openedBy||!this._triggersSubmenu())&&this.focus(this._openedBy),this._openedBy=void 0,this._setIsMenuOpen(!1))}_setIsMenuOpen(A){A!==this._menuOpen&&(this._menuOpen=A,this._menuOpen?this.menuOpened.emit():this.menuClosed.emit(),this._triggersSubmenu()&&this._menuItemInstance._setHighlighted(A),this._changeDetectorRef.markForCheck())}_createOverlay(A){if(!this._overlayRef){let i=this._getOverlayConfig(A);this._subscribeToPositions(A,i.positionStrategy),this._overlayRef=lc(this._injector,i),this._overlayRef.keydownEvents().subscribe(n=>{this._menu instanceof AC&&this._menu._handleKeydown(n)})}return this._overlayRef}_getOverlayConfig(A){return new sc({positionStrategy:q1(this._injector,this._getOverlayOrigin()).withLockedPosition().withGrowAfterOpen().withTransformOriginOn(".mat-menu-panel, .mat-mdc-menu-panel"),backdropClass:A.backdropClass||"cdk-overlay-transparent-backdrop",panelClass:A.overlayPanelClass,scrollStrategy:this._scrollStrategy(),direction:this._dir||"ltr",disableAnimations:this._animationsDisabled})}_subscribeToPositions(A,i){A.setPositionClasses&&i.positionChanges.subscribe(n=>{this._ngZone.run(()=>{let o=n.connectionPair.overlayX==="start"?"after":"before",a=n.connectionPair.overlayY==="top"?"below":"above";A.setPositionClasses(o,a)})})}_setPosition(A,i){let[n,o]=A.xPosition==="before"?["end","start"]:["start","end"],[a,r]=A.yPosition==="above"?["bottom","top"]:["top","bottom"],[s,g]=[a,r],[l,C]=[n,o],I=0;if(this._triggersSubmenu()){if(C=n=A.xPosition==="before"?"start":"end",o=l=n==="end"?"start":"end",this._parentMaterialMenu){if(this._parentInnerPadding==null){let d=this._parentMaterialMenu.items.first;this._parentInnerPadding=d?d._getHostElement().offsetTop:0}I=a==="bottom"?this._parentInnerPadding:-this._parentInnerPadding}}else A.overlapTrigger||(s=a==="top"?"bottom":"top",g=r==="top"?"bottom":"top");i.withPositions([{originX:n,originY:s,overlayX:l,overlayY:a,offsetY:I},{originX:o,originY:s,overlayX:C,overlayY:a,offsetY:I},{originX:n,originY:g,overlayX:l,overlayY:r,offsetY:-I},{originX:o,originY:g,overlayX:C,overlayY:r,offsetY:-I}])}_menuClosingActions(){let A=this._getOutsideClickStream(this._overlayRef),i=this._overlayRef.detachments(),n=this._parentMaterialMenu?this._parentMaterialMenu.closed:se(),o=this._parentMaterialMenu?this._parentMaterialMenu._hovered().pipe(Ze(a=>this._menuOpen&&a!==this._menuItemInstance)):se();return fi(A,n,o,i)}_getPortal(A){return(!this._portal||this._portal.templateRef!==A.templateRef)&&(this._portal=new Is(A.templateRef,this._viewContainerRef)),this._portal}_ownsMenu(A){return Fh.get(A)===this}_triggerIsAriaDisabled(){return he(this._element.nativeElement.getAttribute("aria-disabled"))}static \u0275fac=function(i){ap()};static \u0275dir=OA({type:t})}return t})(),_h=(()=>{class t extends E_A{_cleanupTouchstart;_hoverSubscription=Jn.EMPTY;get _deprecatedMatMenuTriggerFor(){return this.menu}set _deprecatedMatMenuTriggerFor(A){this.menu=A}get menu(){return this._menu}set menu(A){this._menu=A}menuData;restoreFocus=!0;menuOpened=new $A;onMenuOpen=this.menuOpened;menuClosed=new $A;onMenuClose=this.menuClosed;constructor(){super(!0);let A=h(_i);this._cleanupTouchstart=A.listen(this._element.nativeElement,"touchstart",i=>{M1(i)||(this._openedBy="touch")},{passive:!0})}triggersSubmenu(){return super._triggersSubmenu()}toggleMenu(){return this.menuOpen?this.closeMenu():this.openMenu()}openMenu(){this._openMenu(!0)}closeMenu(){this._closeMenu()}updatePosition(){this._overlayRef?.updatePosition()}ngAfterContentInit(){this._handleHover()}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTouchstart(),this._hoverSubscription.unsubscribe()}_getOverlayOrigin(){return this._element}_getOutsideClickStream(A){return A.backdropClick()}_handleMousedown(A){b1(A)||(this._openedBy=A.button===0?"mouse":void 0,this.triggersSubmenu()&&A.preventDefault())}_handleKeydown(A){let i=A.keyCode;(i===13||i===32)&&(this._openedBy="keyboard"),this.triggersSubmenu()&&(i===39&&this.dir==="ltr"||i===37&&this.dir==="rtl")&&(this._openedBy="keyboard",this.openMenu())}_handleClick(A){this.triggersSubmenu()?(A.stopPropagation(),this.openMenu()):this.toggleMenu()}_handleHover(){this.triggersSubmenu()&&this._parentMaterialMenu&&(this._hoverSubscription=this._parentMaterialMenu._hovered().subscribe(A=>{A===this._menuItemInstance&&!A.disabled&&this._parentMaterialMenu?._panelAnimationState!=="void"&&(this._openedBy="mouse",this._openMenu(!1))}))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","mat-menu-trigger-for",""],["","matMenuTriggerFor",""]],hostAttrs:[1,"mat-mdc-menu-trigger"],hostVars:3,hostBindings:function(i,n){i&1&&tA("click",function(a){return n._handleClick(a)})("mousedown",function(a){return n._handleMousedown(a)})("keydown",function(a){return n._handleKeydown(a)}),i&2&&ie("aria-haspopup",n.menu?"menu":null)("aria-expanded",n.menuOpen)("aria-controls",n.menuOpen?n.menu==null?null:n.menu.panelId:null)},inputs:{_deprecatedMatMenuTriggerFor:[0,"mat-menu-trigger-for","_deprecatedMatMenuTriggerFor"],menu:[0,"matMenuTriggerFor","menu"],menuData:[0,"matMenuTriggerData","menuData"],restoreFocus:[0,"matMenuTriggerRestoreFocus","restoreFocus"]},outputs:{menuOpened:"menuOpened",onMenuOpen:"onMenuOpen",menuClosed:"menuClosed",onMenuClose:"onMenuClose"},exportAs:["matMenuTrigger"],features:[It]})}return t})();var daA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[x2,Cl,Gi,C0]})}return t})();var QaA=["*",[["mat-chip-avatar"],["","matChipAvatar",""]],[["mat-chip-trailing-icon"],["","matChipRemove",""],["","matChipTrailingIcon",""]]],haA=["*","mat-chip-avatar, [matChipAvatar]","mat-chip-trailing-icon,[matChipRemove],[matChipTrailingIcon]"];function h_A(t,e){t&1&&(m(0,"span",3),Ke(1,1),w())}function u_A(t,e){t&1&&(m(0,"span",6),Ke(1,2),w())}function f_A(t,e){t&1&&(m(0,"span",3),Ke(1,1),m(2,"span",7),Qt(),m(3,"svg",8),GA(4,"path",9),w()()())}function m_A(t,e){t&1&&(m(0,"span",6),Ke(1,2),w())}var p_A=`.mdc-evolution-chip,.mdc-evolution-chip__cell,.mdc-evolution-chip__action{display:inline-flex;align-items:center}.mdc-evolution-chip{position:relative;max-width:100%}.mdc-evolution-chip__cell,.mdc-evolution-chip__action{height:100%}.mdc-evolution-chip__cell--primary{flex-basis:100%;overflow-x:hidden}.mdc-evolution-chip__cell--trailing{flex:1 0 auto}.mdc-evolution-chip__action{align-items:center;background:none;border:none;box-sizing:content-box;cursor:pointer;display:inline-flex;justify-content:center;outline:none;padding:0;text-decoration:none;color:inherit}.mdc-evolution-chip__action--presentational{cursor:auto}.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{pointer-events:none}@media(forced-colors: active){.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{forced-color-adjust:none}}.mdc-evolution-chip__action--primary{font:inherit;letter-spacing:inherit;white-space:inherit;overflow-x:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-outline-width, 1px);border-radius:var(--mat-chip-container-shape-radius, 8px);box-sizing:border-box;content:"";height:100%;left:0;position:absolute;pointer-events:none;top:0;width:100%;z-index:1;border-style:solid}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-outline-color, var(--mat-sys-outline))}.mdc-evolution-chip__action--primary:not(.mdc-evolution-chip__action--presentational):not(.mdc-ripple-upgraded):focus::before{border-color:var(--mat-chip-focus-outline-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-basic-chip .mdc-evolution-chip__action--primary{font:inherit}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip__action--secondary{position:relative;overflow:visible}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip__text-label{-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__text-label{font-family:var(--mat-chip-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-chip-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-chip-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-chip-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-chip-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-label-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label,.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:var(--mat-chip-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-evolution-chip__graphic{align-items:center;display:inline-flex;justify-content:center;overflow:hidden;pointer-events:none;position:relative;flex:1 0 auto}.mat-mdc-standard-chip .mdc-evolution-chip__graphic{width:var(--mat-chip-with-avatar-avatar-size, 24px);height:var(--mat-chip-with-avatar-avatar-size, 24px);font-size:var(--mat-chip-with-avatar-avatar-size, 24px)}.mdc-evolution-chip--selecting .mdc-evolution-chip__graphic{transition:width 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--selected):not(.mdc-evolution-chip--with-primary-icon) .mdc-evolution-chip__graphic{width:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__graphic{padding-left:0}.mdc-evolution-chip__checkmark{position:absolute;opacity:0;top:50%;left:50%;height:20px;width:20px}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark{transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transform:translate(-75%, -50%)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{transform:translate(-50%, -50%);opacity:1}.mdc-evolution-chip__checkmark-svg{display:block}.mdc-evolution-chip__checkmark-path{stroke-width:2px;stroke-dasharray:29.7833385;stroke-dashoffset:29.7833385;stroke:currentColor}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark-path{transition:stroke-dashoffset 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark-path{stroke-dashoffset:0}@media(forced-colors: active){.mdc-evolution-chip__checkmark-path{stroke:CanvasText !important}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--trailing{height:18px;width:18px;font-size:18px}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove{opacity:calc(var(--mat-chip-trailing-action-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove:focus{opacity:calc(var(--mat-chip-trailing-action-focus-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mat-mdc-standard-chip{border-radius:var(--mat-chip-container-shape-radius, 8px);height:var(--mat-chip-container-height, 32px)}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-container-color, transparent)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{background-color:var(--mat-chip-elevated-disabled-container-color)}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled{background-color:var(--mat-chip-flat-disabled-selected-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}@media(forced-colors: active){.mat-mdc-standard-chip{outline:solid 1px}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--primary{border-radius:var(--mat-chip-with-avatar-avatar-shape-radius, 24px);width:var(--mat-chip-with-icon-icon-size, 18px);height:var(--mat-chip-with-icon-icon-size, 18px);font-size:var(--mat-chip-with-icon-icon-size, 18px)}.mdc-evolution-chip--selected .mdc-evolution-chip__icon--primary{opacity:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-highlighted{--mat-chip-with-icon-icon-color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));--mat-chip-elevated-container-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));--mat-chip-label-text-color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));--mat-chip-outline-width: var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-selected .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-hover-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip-focus-overlay .mat-mdc-chip-selected:hover,.mat-mdc-chip-highlighted:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-hover-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-chip-selected.cdk-focused .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-evolution-chip--disabled:not(.mdc-evolution-chip--selected) .mat-mdc-chip-avatar{opacity:var(--mat-chip-with-avatar-disabled-avatar-opacity, 0.38)}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{opacity:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38)}.mdc-evolution-chip--disabled.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{opacity:var(--mat-chip-with-icon-disabled-icon-opacity, 0.38)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{opacity:var(--mat-chip-disabled-container-opacity, 1)}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-trailing-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-edit,.mat-mdc-chip-remove{opacity:var(--mat-chip-trailing-action-opacity, 1)}.mat-mdc-chip-edit:focus,.mat-mdc-chip-remove:focus{opacity:var(--mat-chip-trailing-action-focus-opacity, 1)}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{background-color:var(--mat-chip-trailing-action-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-edit:hover::after,.mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-chip-edit:focus::after,.mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip-selected .mat-mdc-chip-remove::after,.mat-mdc-chip-highlighted .mat-mdc-chip-remove::after{background-color:var(--mat-chip-selected-trailing-action-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:focus::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:hover::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-standard-chip{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-standard-chip .mat-mdc-chip-graphic,.mat-mdc-standard-chip .mat-mdc-chip-trailing-icon{box-sizing:content-box}.mat-mdc-standard-chip._mat-animation-noopable,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__graphic,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark-path{transition-duration:1ms;animation-duration:1ms}.mat-mdc-chip-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;opacity:0;border-radius:inherit;transition:opacity 150ms linear}._mat-animation-noopable .mat-mdc-chip-focus-overlay{transition:none}.mat-mdc-basic-chip .mat-mdc-chip-focus-overlay{display:none}.mat-mdc-chip .mat-ripple.mat-mdc-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-chip-avatar{text-align:center;line-height:1;color:var(--mat-chip-with-icon-icon-color, currentColor)}.mat-mdc-chip{position:relative;z-index:0}.mat-mdc-chip-action-label{text-align:left;z-index:1}[dir=rtl] .mat-mdc-chip-action-label{text-align:right}.mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{position:relative}.mat-mdc-chip-action-label .mat-mdc-chip-primary-focus-indicator{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.mat-mdc-chip-action-label .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-chip-edit::before,.mat-mdc-chip-remove::before{margin:calc(var(--mat-focus-indicator-border-width, 3px)*-1);left:8px;right:8px}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{content:"";display:block;opacity:0;position:absolute;top:-3px;bottom:-3px;left:5px;right:5px;border-radius:50%;box-sizing:border-box;padding:12px;margin:-12px;background-clip:content-box}.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{width:18px;height:18px;font-size:18px;box-sizing:content-box}.mat-chip-edit-input{cursor:text;display:inline-block;color:inherit;outline:0}@media(forced-colors: active){.mat-mdc-chip-selected:not(.mat-mdc-chip-multiple){outline-width:3px}}.mat-mdc-chip-action:focus-visible .mat-focus-indicator::before{content:""}.mdc-evolution-chip__icon,.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{min-height:fit-content}img.mdc-evolution-chip__icon{min-height:0} -`;var uaA=["*"],w_A=`.mat-mdc-chip-set{display:flex}.mat-mdc-chip-set:focus{outline:none}.mat-mdc-chip-set .mdc-evolution-chip-set__chips{min-width:100%;margin-left:-8px;margin-right:0}.mat-mdc-chip-set .mdc-evolution-chip{margin:4px 0 4px 8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0;margin-right:-8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip{margin-left:0;margin-right:8px}.mdc-evolution-chip-set__chips{display:flex;flex-flow:wrap;min-width:0}.mat-mdc-chip-set-stacked{flex-direction:column;align-items:flex-start}.mat-mdc-chip-set-stacked .mat-mdc-chip{width:100%}.mat-mdc-chip-set-stacked .mdc-evolution-chip__graphic{flex-grow:0}.mat-mdc-chip-set-stacked .mdc-evolution-chip__action--primary{flex-basis:100%;justify-content:start}input.mat-mdc-chip-input{flex:1 0 150px;margin-left:8px}[dir=rtl] input.mat-mdc-chip-input{margin-left:0;margin-right:8px}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-moz-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-webkit-input-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input:-ms-input-placeholder{opacity:1}.mat-mdc-chip-set+input.mat-mdc-chip-input{margin-left:0;margin-right:0} -`,vG=new yA("mat-chips-default-options",{providedIn:"root",factory:()=>({separatorKeyCodes:[13]})}),wG=new yA("MatChipAvatar"),BaA=new yA("MatChipTrailingIcon"),EaA=new yA("MatChipEdit"),DG=new yA("MatChipRemove"),bG=new yA("MatChip"),faA=(()=>{class t{_elementRef=h(ge);_parentChip=h(bG);_isPrimary=!0;_isLeading=!1;get disabled(){return this._disabled||this._parentChip?.disabled||!1}set disabled(A){this._disabled=A}_disabled=!1;tabIndex=-1;_allowFocusWhenDisabled=!1;_getDisabledAttribute(){return this.disabled&&!this._allowFocusWhenDisabled?"":null}constructor(){h(Xn).load(dr),this._elementRef.nativeElement.nodeName==="BUTTON"&&this._elementRef.nativeElement.setAttribute("type","button")}focus(){this._elementRef.nativeElement.focus()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matChipContent",""]],hostAttrs:[1,"mat-mdc-chip-action","mdc-evolution-chip__action","mdc-evolution-chip__action--presentational"],hostVars:8,hostBindings:function(i,n){i&2&&(ie("disabled",n._getDisabledAttribute())("aria-disabled",n.disabled),ne("mdc-evolution-chip__action--primary",n._isPrimary)("mdc-evolution-chip__action--secondary",!n._isPrimary)("mdc-evolution-chip__action--trailing",!n._isPrimary&&!n._isLeading))},inputs:{disabled:[2,"disabled","disabled",he],tabIndex:[2,"tabIndex","tabIndex",A=>A==null?-1:en(A)],_allowFocusWhenDisabled:"_allowFocusWhenDisabled"}})}return t})(),MG=(()=>{class t extends faA{_getTabindex(){return this.disabled&&!this._allowFocusWhenDisabled?null:this.tabIndex.toString()}_handleClick(A){!this.disabled&&this._isPrimary&&(A.preventDefault(),this._parentChip._handlePrimaryActionInteraction())}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!this.disabled&&this._isPrimary&&!this._parentChip._isEditing&&(A.preventDefault(),this._parentChip._handlePrimaryActionInteraction())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matChipAction",""]],hostVars:3,hostBindings:function(i,n){i&1&&tA("click",function(a){return n._handleClick(a)})("keydown",function(a){return n._handleKeydown(a)}),i&2&&(ie("tabindex",n._getTabindex()),ne("mdc-evolution-chip__action--presentational",!1))},features:[It]})}return t})(),maA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["mat-chip-avatar"],["","matChipAvatar",""]],hostAttrs:["role","img",1,"mat-mdc-chip-avatar","mdc-evolution-chip__icon","mdc-evolution-chip__icon--primary"],features:[dt([{provide:wG,useExisting:t}])]})}return t})();var paA=(()=>{class t extends MG{_isPrimary=!1;_handleClick(A){this.disabled||(A.stopPropagation(),A.preventDefault(),this._parentChip.remove())}_handleKeydown(A){(A.keyCode===13||A.keyCode===32)&&!this.disabled&&(A.stopPropagation(),A.preventDefault(),this._parentChip.remove())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matChipRemove",""]],hostAttrs:["role","button",1,"mat-mdc-chip-remove","mat-mdc-chip-trailing-icon","mat-focus-indicator","mdc-evolution-chip__icon","mdc-evolution-chip__icon--trailing"],hostVars:1,hostBindings:function(i,n){i&2&&ie("aria-hidden",null)},features:[dt([{provide:DG,useExisting:t}]),It]})}return t})(),Bm=(()=>{class t{_changeDetectorRef=h(Dt);_elementRef=h(ge);_tagName=h(SU);_ngZone=h(Oe);_focusMonitor=h(ar);_globalRippleOptions=h(S2,{optional:!0});_document=h(Xt);_onFocus=new XA;_onBlur=new XA;_isBasicChip=!1;role=null;_hasFocusInternal=!1;_pendingFocus=!1;_actionChanges;_animationsDisabled=ji();_allLeadingIcons;_allTrailingIcons;_allEditIcons;_allRemoveIcons;_hasFocus(){return this._hasFocusInternal}id=h(an).getId("mat-mdc-chip-");ariaLabel=null;ariaDescription=null;_chipListDisabled=!1;_hadFocusOnRemove=!1;_textElement;get value(){return this._value!==void 0?this._value:this._textElement.textContent.trim()}set value(A){this._value=A}_value;color;removable=!0;highlighted=!1;disableRipple=!1;get disabled(){return this._disabled||this._chipListDisabled}set disabled(A){this._disabled=A}_disabled=!1;removed=new $A;destroyed=new $A;basicChipAttrName="mat-basic-chip";leadingIcon;editIcon;trailingIcon;removeIcon;primaryAction;_rippleLoader=h(Yp);_injector=h(ft);constructor(){let A=h(Xn);A.load(dr),A.load(M2),this._monitorFocus(),this._rippleLoader?.configureRipple(this._elementRef.nativeElement,{className:"mat-mdc-chip-ripple",disabled:this._isRippleDisabled()})}ngOnInit(){this._isBasicChip=this._elementRef.nativeElement.hasAttribute(this.basicChipAttrName)||this._tagName.toLowerCase()===this.basicChipAttrName}ngAfterViewInit(){this._textElement=this._elementRef.nativeElement.querySelector(".mat-mdc-chip-action-label"),this._pendingFocus&&(this._pendingFocus=!1,this.focus())}ngAfterContentInit(){this._actionChanges=fi(this._allLeadingIcons.changes,this._allTrailingIcons.changes,this._allEditIcons.changes,this._allRemoveIcons.changes).subscribe(()=>this._changeDetectorRef.markForCheck())}ngDoCheck(){this._rippleLoader.setDisabled(this._elementRef.nativeElement,this._isRippleDisabled())}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._rippleLoader?.destroyRipple(this._elementRef.nativeElement),this._actionChanges?.unsubscribe(),this.destroyed.emit({chip:this}),this.destroyed.complete()}remove(){this.removable&&(this._hadFocusOnRemove=this._hasFocus(),this.removed.emit({chip:this}))}_isRippleDisabled(){return this.disabled||this.disableRipple||this._animationsDisabled||this._isBasicChip||!this._hasInteractiveActions()||!!this._globalRippleOptions?.disabled}_hasTrailingIcon(){return!!(this.trailingIcon||this.removeIcon)}_handleKeydown(A){(A.keyCode===8&&!A.repeat||A.keyCode===46)&&(A.preventDefault(),this.remove())}focus(){this.disabled||(this.primaryAction?this.primaryAction.focus():this._pendingFocus=!0)}_getSourceAction(A){return this._getActions().find(i=>{let n=i._elementRef.nativeElement;return n===A||n.contains(A)})}_getActions(){let A=[];return this.editIcon&&A.push(this.editIcon),this.primaryAction&&A.push(this.primaryAction),this.removeIcon&&A.push(this.removeIcon),A}_handlePrimaryActionInteraction(){}_hasInteractiveActions(){return this._getActions().length>0}_edit(A){}_monitorFocus(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(A=>{let i=A!==null;i!==this._hasFocusInternal&&(this._hasFocusInternal=i,i?this._onFocus.next({chip:this}):(this._changeDetectorRef.markForCheck(),setTimeout(()=>this._ngZone.run(()=>this._onBlur.next({chip:this})))))})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-basic-chip"],["","mat-basic-chip",""],["mat-chip"],["","mat-chip",""]],contentQueries:function(i,n,o){if(i&1&&fa(o,wG,5)(o,EaA,5)(o,BaA,5)(o,DG,5)(o,wG,5)(o,BaA,5)(o,EaA,5)(o,DG,5),i&2){let a;ce(a=Ce())&&(n.leadingIcon=a.first),ce(a=Ce())&&(n.editIcon=a.first),ce(a=Ce())&&(n.trailingIcon=a.first),ce(a=Ce())&&(n.removeIcon=a.first),ce(a=Ce())&&(n._allLeadingIcons=a),ce(a=Ce())&&(n._allTrailingIcons=a),ce(a=Ce())&&(n._allEditIcons=a),ce(a=Ce())&&(n._allRemoveIcons=a)}},viewQuery:function(i,n){if(i&1&&ai(MG,5),i&2){let o;ce(o=Ce())&&(n.primaryAction=o.first)}},hostAttrs:[1,"mat-mdc-chip"],hostVars:31,hostBindings:function(i,n){i&1&&tA("keydown",function(a){return n._handleKeydown(a)}),i&2&&(vo("id",n.id),ie("role",n.role)("aria-label",n.ariaLabel),Po("mat-"+(n.color||"primary")),ne("mdc-evolution-chip",!n._isBasicChip)("mdc-evolution-chip--disabled",n.disabled)("mdc-evolution-chip--with-trailing-action",n._hasTrailingIcon())("mdc-evolution-chip--with-primary-graphic",n.leadingIcon)("mdc-evolution-chip--with-primary-icon",n.leadingIcon)("mdc-evolution-chip--with-avatar",n.leadingIcon)("mat-mdc-chip-with-avatar",n.leadingIcon)("mat-mdc-chip-highlighted",n.highlighted)("mat-mdc-chip-disabled",n.disabled)("mat-mdc-basic-chip",n._isBasicChip)("mat-mdc-standard-chip",!n._isBasicChip)("mat-mdc-chip-with-trailing-icon",n._hasTrailingIcon())("_mat-animation-noopable",n._animationsDisabled))},inputs:{role:"role",id:"id",ariaLabel:[0,"aria-label","ariaLabel"],ariaDescription:[0,"aria-description","ariaDescription"],value:"value",color:"color",removable:[2,"removable","removable",he],highlighted:[2,"highlighted","highlighted",he],disableRipple:[2,"disableRipple","disableRipple",he],disabled:[2,"disabled","disabled",he]},outputs:{removed:"removed",destroyed:"destroyed"},exportAs:["matChip"],features:[dt([{provide:bG,useExisting:t}])],ngContentSelectors:haA,decls:8,vars:2,consts:[[1,"mat-mdc-chip-focus-overlay"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--primary"],["matChipContent",""],[1,"mdc-evolution-chip__graphic","mat-mdc-chip-graphic"],[1,"mdc-evolution-chip__text-label","mat-mdc-chip-action-label"],[1,"mat-mdc-chip-primary-focus-indicator","mat-focus-indicator"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--trailing"]],template:function(i,n){i&1&&(Yt(QaA),GA(0,"span",0),m(1,"span",1)(2,"span",2),V(3,h_A,2,0,"span",3),m(4,"span",4),Ke(5),GA(6,"span",5),w()()(),V(7,u_A,2,0,"span",6)),i&2&&(p(3),W(n.leadingIcon?3:-1),p(4),W(n._hasTrailingIcon()?7:-1))},dependencies:[faA],styles:[`.mdc-evolution-chip,.mdc-evolution-chip__cell,.mdc-evolution-chip__action{display:inline-flex;align-items:center}.mdc-evolution-chip{position:relative;max-width:100%}.mdc-evolution-chip__cell,.mdc-evolution-chip__action{height:100%}.mdc-evolution-chip__cell--primary{flex-basis:100%;overflow-x:hidden}.mdc-evolution-chip__cell--trailing{flex:1 0 auto}.mdc-evolution-chip__action{align-items:center;background:none;border:none;box-sizing:content-box;cursor:pointer;display:inline-flex;justify-content:center;outline:none;padding:0;text-decoration:none;color:inherit}.mdc-evolution-chip__action--presentational{cursor:auto}.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{pointer-events:none}@media(forced-colors: active){.mdc-evolution-chip--disabled,.mdc-evolution-chip__action:disabled{forced-color-adjust:none}}.mdc-evolution-chip__action--primary{font:inherit;letter-spacing:inherit;white-space:inherit;overflow-x:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-outline-width, 1px);border-radius:var(--mat-chip-container-shape-radius, 8px);box-sizing:border-box;content:"";height:100%;left:0;position:absolute;pointer-events:none;top:0;width:100%;z-index:1;border-style:solid}.mat-mdc-standard-chip .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-outline-color, var(--mat-sys-outline))}.mdc-evolution-chip__action--primary:not(.mdc-evolution-chip__action--presentational):not(.mdc-ripple-upgraded):focus::before{border-color:var(--mat-chip-focus-outline-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary::before{border-color:var(--mat-chip-disabled-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__action--primary::before{border-width:var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-basic-chip .mdc-evolution-chip__action--primary{font:inherit}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}.mat-mdc-standard-chip.mdc-evolution-chip--with-leading-action.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:0;padding-right:12px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__action--primary{padding-left:12px;padding-right:0}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--primary{padding-left:0;padding-right:0}.mdc-evolution-chip__action--secondary{position:relative;overflow:visible}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-trailing-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__action--secondary{color:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-standard-chip.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__action--secondary{padding-left:8px;padding-right:8px}.mdc-evolution-chip__text-label{-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.mat-mdc-standard-chip .mdc-evolution-chip__text-label{font-family:var(--mat-chip-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-chip-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-chip-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mat-chip-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mat-chip-label-text-tracking, var(--mat-sys-label-large-tracking))}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-label-text-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__text-label{color:var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label,.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:var(--mat-chip-disabled-label-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mdc-evolution-chip__graphic{align-items:center;display:inline-flex;justify-content:center;overflow:hidden;pointer-events:none;position:relative;flex:1 0 auto}.mat-mdc-standard-chip .mdc-evolution-chip__graphic{width:var(--mat-chip-with-avatar-avatar-size, 24px);height:var(--mat-chip-with-avatar-avatar-size, 24px);font-size:var(--mat-chip-with-avatar-avatar-size, 24px)}.mdc-evolution-chip--selecting .mdc-evolution-chip__graphic{transition:width 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selectable:not(.mdc-evolution-chip--selected):not(.mdc-evolution-chip--with-primary-icon) .mdc-evolution-chip__graphic{width:0}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mat-mdc-standard-chip.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:6px;padding-right:6px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:4px;padding-right:8px}[dir=rtl] .mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-trailing-action .mdc-evolution-chip__graphic{padding-left:8px;padding-right:4px}.mdc-evolution-chip--with-avatar.mdc-evolution-chip--with-primary-graphic.mdc-evolution-chip--with-leading-action .mdc-evolution-chip__graphic{padding-left:0}.mdc-evolution-chip__checkmark{position:absolute;opacity:0;top:50%;left:50%;height:20px;width:20px}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__checkmark{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark{transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transform:translate(-75%, -50%)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{transform:translate(-50%, -50%);opacity:1}.mdc-evolution-chip__checkmark-svg{display:block}.mdc-evolution-chip__checkmark-path{stroke-width:2px;stroke-dasharray:29.7833385;stroke-dashoffset:29.7833385;stroke:currentColor}.mdc-evolution-chip--selecting .mdc-evolution-chip__checkmark-path{transition:stroke-dashoffset 150ms 45ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark-path{stroke-dashoffset:0}@media(forced-colors: active){.mdc-evolution-chip__checkmark-path{stroke:CanvasText !important}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--trailing{height:18px;width:18px;font-size:18px}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove{opacity:calc(var(--mat-chip-trailing-action-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing.mat-mdc-chip-remove:focus{opacity:calc(var(--mat-chip-trailing-action-focus-opacity, 1)*var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38))}.mat-mdc-standard-chip{border-radius:var(--mat-chip-container-shape-radius, 8px);height:var(--mat-chip-container-height, 32px)}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-container-color, transparent)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{background-color:var(--mat-chip-elevated-disabled-container-color)}.mat-mdc-standard-chip.mdc-evolution-chip--selected:not(.mdc-evolution-chip--disabled){background-color:var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled{background-color:var(--mat-chip-flat-disabled-selected-container-color, color-mix(in srgb, var(--mat-sys-on-surface) 12%, transparent))}@media(forced-colors: active){.mat-mdc-standard-chip{outline:solid 1px}}.mat-mdc-standard-chip .mdc-evolution-chip__icon--primary{border-radius:var(--mat-chip-with-avatar-avatar-shape-radius, 24px);width:var(--mat-chip-with-icon-icon-size, 18px);height:var(--mat-chip-with-icon-icon-size, 18px);font-size:var(--mat-chip-with-icon-icon-size, 18px)}.mdc-evolution-chip--selected .mdc-evolution-chip__icon--primary{opacity:0}.mat-mdc-standard-chip:not(.mdc-evolution-chip--disabled) .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-standard-chip.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--primary{color:var(--mat-chip-with-icon-disabled-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-highlighted{--mat-chip-with-icon-icon-color: var(--mat-chip-with-icon-selected-icon-color, var(--mat-sys-on-secondary-container));--mat-chip-elevated-container-color: var(--mat-chip-elevated-selected-container-color, var(--mat-sys-secondary-container));--mat-chip-label-text-color: var(--mat-chip-selected-label-text-color, var(--mat-sys-on-secondary-container));--mat-chip-outline-width: var(--mat-chip-flat-selected-outline-width, 0)}.mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-selected .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-hover-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip-focus-overlay .mat-mdc-chip-selected:hover,.mat-mdc-chip-highlighted:hover .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-hover-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-focus-state-layer-color, var(--mat-sys-on-surface-variant));opacity:var(--mat-chip-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-chip-selected.cdk-focused .mat-mdc-chip-focus-overlay,.mat-mdc-chip-highlighted.cdk-focused .mat-mdc-chip-focus-overlay{background:var(--mat-chip-selected-focus-state-layer-color, var(--mat-sys-on-secondary-container));opacity:var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-evolution-chip--disabled:not(.mdc-evolution-chip--selected) .mat-mdc-chip-avatar{opacity:var(--mat-chip-with-avatar-disabled-avatar-opacity, 0.38)}.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{opacity:var(--mat-chip-with-trailing-icon-disabled-trailing-icon-opacity, 0.38)}.mdc-evolution-chip--disabled.mdc-evolution-chip--selected .mdc-evolution-chip__checkmark{opacity:var(--mat-chip-with-icon-disabled-icon-opacity, 0.38)}.mat-mdc-standard-chip.mdc-evolution-chip--disabled{opacity:var(--mat-chip-disabled-container-opacity, 1)}.mat-mdc-standard-chip.mdc-evolution-chip--selected .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-trailing-icon-color, var(--mat-sys-on-secondary-container))}.mat-mdc-standard-chip.mdc-evolution-chip--selected.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mdc-evolution-chip--disabled .mdc-evolution-chip__icon--trailing{color:var(--mat-chip-selected-disabled-trailing-icon-color, var(--mat-sys-on-surface))}.mat-mdc-chip-edit,.mat-mdc-chip-remove{opacity:var(--mat-chip-trailing-action-opacity, 1)}.mat-mdc-chip-edit:focus,.mat-mdc-chip-remove:focus{opacity:var(--mat-chip-trailing-action-focus-opacity, 1)}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{background-color:var(--mat-chip-trailing-action-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-chip-edit:hover::after,.mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-chip-edit:focus::after,.mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip-selected .mat-mdc-chip-remove::after,.mat-mdc-chip-highlighted .mat-mdc-chip-remove::after{background-color:var(--mat-chip-selected-trailing-action-state-layer-color, var(--mat-sys-on-secondary-container))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:focus::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:focus::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)))}.mat-mdc-chip.cdk-focused .mat-mdc-chip-edit:hover::after,.mat-mdc-chip.cdk-focused .mat-mdc-chip-remove:hover::after{opacity:calc(var(--mat-chip-selected-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity)) + var(--mat-chip-trailing-action-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity)))}.mat-mdc-standard-chip{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-standard-chip .mat-mdc-chip-graphic,.mat-mdc-standard-chip .mat-mdc-chip-trailing-icon{box-sizing:content-box}.mat-mdc-standard-chip._mat-animation-noopable,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__graphic,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark,.mat-mdc-standard-chip._mat-animation-noopable .mdc-evolution-chip__checkmark-path{transition-duration:1ms;animation-duration:1ms}.mat-mdc-chip-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;opacity:0;border-radius:inherit;transition:opacity 150ms linear}._mat-animation-noopable .mat-mdc-chip-focus-overlay{transition:none}.mat-mdc-basic-chip .mat-mdc-chip-focus-overlay{display:none}.mat-mdc-chip .mat-ripple.mat-mdc-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-chip-avatar{text-align:center;line-height:1;color:var(--mat-chip-with-icon-icon-color, currentColor)}.mat-mdc-chip{position:relative;z-index:0}.mat-mdc-chip-action-label{text-align:left;z-index:1}[dir=rtl] .mat-mdc-chip-action-label{text-align:right}.mat-mdc-chip.mdc-evolution-chip--with-trailing-action .mat-mdc-chip-action-label{position:relative}.mat-mdc-chip-action-label .mat-mdc-chip-primary-focus-indicator{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.mat-mdc-chip-action-label .mat-focus-indicator::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px)*-1)}.mat-mdc-chip-edit::before,.mat-mdc-chip-remove::before{margin:calc(var(--mat-focus-indicator-border-width, 3px)*-1);left:8px;right:8px}.mat-mdc-chip-edit::after,.mat-mdc-chip-remove::after{content:"";display:block;opacity:0;position:absolute;top:-3px;bottom:-3px;left:5px;right:5px;border-radius:50%;box-sizing:border-box;padding:12px;margin:-12px;background-clip:content-box}.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{width:18px;height:18px;font-size:18px;box-sizing:content-box}.mat-chip-edit-input{cursor:text;display:inline-block;color:inherit;outline:0}@media(forced-colors: active){.mat-mdc-chip-selected:not(.mat-mdc-chip-multiple){outline-width:3px}}.mat-mdc-chip-action:focus-visible .mat-focus-indicator::before{content:""}.mdc-evolution-chip__icon,.mat-mdc-chip-edit .mat-icon,.mat-mdc-chip-remove .mat-icon{min-height:fit-content}img.mdc-evolution-chip__icon{min-height:0} -`],encapsulation:2,changeDetection:0})}return t})();var kG=(()=>{class t extends Bm{_defaultOptions=h(vG,{optional:!0});chipListSelectable=!0;_chipListMultiple=!1;_chipListHideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get selectable(){return this._selectable&&this.chipListSelectable}set selectable(A){this._selectable=A,this._changeDetectorRef.markForCheck()}_selectable=!0;get selected(){return this._selected}set selected(A){this._setSelectedState(A,!1,!0)}_selected=!1;get ariaSelected(){return this.selectable?this.selected.toString():null}basicChipAttrName="mat-basic-chip-option";selectionChange=new $A;ngOnInit(){super.ngOnInit(),this.role="presentation"}select(){this._setSelectedState(!0,!1,!0)}deselect(){this._setSelectedState(!1,!1,!0)}selectViaInteraction(){this._setSelectedState(!0,!0,!0)}toggleSelected(A=!1){return this._setSelectedState(!this.selected,A,!0),this.selected}_handlePrimaryActionInteraction(){this.disabled||(this.focus(),this.selectable&&this.toggleSelected(!0))}_hasLeadingGraphic(){return this.leadingIcon?!0:!this._chipListHideSingleSelectionIndicator||this._chipListMultiple}_setSelectedState(A,i,n){A!==this.selected&&(this._selected=A,n&&this.selectionChange.emit({source:this,isUserInput:i,selected:this.selected}),this._changeDetectorRef.markForCheck())}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-basic-chip-option"],["","mat-basic-chip-option",""],["mat-chip-option"],["","mat-chip-option",""]],hostAttrs:[1,"mat-mdc-chip","mat-mdc-chip-option"],hostVars:37,hostBindings:function(i,n){i&2&&(vo("id",n.id),ie("tabindex",null)("aria-label",null)("aria-description",null)("role",n.role),ne("mdc-evolution-chip",!n._isBasicChip)("mdc-evolution-chip--filter",!n._isBasicChip)("mdc-evolution-chip--selectable",!n._isBasicChip)("mat-mdc-chip-selected",n.selected)("mat-mdc-chip-multiple",n._chipListMultiple)("mat-mdc-chip-disabled",n.disabled)("mat-mdc-chip-with-avatar",n.leadingIcon)("mdc-evolution-chip--disabled",n.disabled)("mdc-evolution-chip--selected",n.selected)("mdc-evolution-chip--selecting",!n._animationsDisabled)("mdc-evolution-chip--with-trailing-action",n._hasTrailingIcon())("mdc-evolution-chip--with-primary-icon",n.leadingIcon)("mdc-evolution-chip--with-primary-graphic",n._hasLeadingGraphic())("mdc-evolution-chip--with-avatar",n.leadingIcon)("mat-mdc-chip-highlighted",n.highlighted)("mat-mdc-chip-with-trailing-icon",n._hasTrailingIcon()))},inputs:{selectable:[2,"selectable","selectable",he],selected:[2,"selected","selected",he]},outputs:{selectionChange:"selectionChange"},features:[dt([{provide:Bm,useExisting:t},{provide:bG,useExisting:t}]),It],ngContentSelectors:haA,decls:8,vars:6,consts:[[1,"mat-mdc-chip-focus-overlay"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--primary"],["matChipAction","","role","option",3,"_allowFocusWhenDisabled"],[1,"mdc-evolution-chip__graphic","mat-mdc-chip-graphic"],[1,"mdc-evolution-chip__text-label","mat-mdc-chip-action-label"],[1,"mat-mdc-chip-primary-focus-indicator","mat-focus-indicator"],[1,"mdc-evolution-chip__cell","mdc-evolution-chip__cell--trailing"],[1,"mdc-evolution-chip__checkmark"],["viewBox","-2 -3 30 30","focusable","false","aria-hidden","true",1,"mdc-evolution-chip__checkmark-svg"],["fill","none","stroke","currentColor","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-evolution-chip__checkmark-path"]],template:function(i,n){i&1&&(Yt(QaA),GA(0,"span",0),m(1,"span",1)(2,"button",2),V(3,f_A,5,0,"span",3),m(4,"span",4),Ke(5),GA(6,"span",5),w()()(),V(7,m_A,2,0,"span",6)),i&2&&(p(2),$("_allowFocusWhenDisabled",!0),ie("aria-description",n.ariaDescription)("aria-label",n.ariaLabel)("aria-selected",n.ariaSelected),p(),W(n._hasLeadingGraphic()?3:-1),p(4),W(n._hasTrailingIcon()?7:-1))},dependencies:[MG],styles:[p_A],encapsulation:2,changeDetection:0})}return t})();var SG=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_dir=h(Ro,{optional:!0});_lastDestroyedFocusedChipIndex=null;_keyManager;_destroyed=new XA;_defaultRole="presentation";get chipFocusChanges(){return this._getChipStream(A=>A._onFocus)}get chipDestroyedChanges(){return this._getChipStream(A=>A.destroyed)}get chipRemovedChanges(){return this._getChipStream(A=>A.removed)}get disabled(){return this._disabled}set disabled(A){this._disabled=A,this._syncChipsState()}_disabled=!1;get empty(){return!this._chips||this._chips.length===0}get role(){return this._explicitRole?this._explicitRole:this.empty?null:this._defaultRole}tabIndex=0;set role(A){this._explicitRole=A}_explicitRole=null;get focused(){return this._hasFocusedChip()}_chips;_chipActions=new ol;constructor(){}ngAfterViewInit(){this._setUpFocusManagement(),this._trackChipSetChanges(),this._trackDestroyedFocusedChip()}ngOnDestroy(){this._keyManager?.destroy(),this._chipActions.destroy(),this._destroyed.next(),this._destroyed.complete()}_hasFocusedChip(){return this._chips&&this._chips.some(A=>A._hasFocus())}_syncChipsState(){this._chips?.forEach(A=>{A._chipListDisabled=this._disabled,A._changeDetectorRef.markForCheck()})}focus(){}_handleKeydown(A){this._originatesFromChip(A)&&this._keyManager.onKeydown(A)}_isValidIndex(A){return A>=0&&Athis._elementRef.nativeElement.tabIndex=A))}_getChipStream(A){return this._chips.changes.pipe(cn(null),Si(()=>fi(...this._chips.map(A))))}_originatesFromChip(A){let i=A.target;for(;i&&i!==this._elementRef.nativeElement;){if(i.classList.contains("mat-mdc-chip"))return!0;i=i.parentElement}return!1}_setUpFocusManagement(){this._chips.changes.pipe(cn(this._chips)).subscribe(A=>{let i=[];A.forEach(n=>n._getActions().forEach(o=>i.push(o))),this._chipActions.reset(i),this._chipActions.notifyOnChanges()}),this._keyManager=new s0(this._chipActions).withVerticalOrientation().withHorizontalOrientation(this._dir?this._dir.value:"ltr").withHomeAndEnd().skipPredicate(A=>this._skipPredicate(A)),this.chipFocusChanges.pipe(Bt(this._destroyed)).subscribe(({chip:A})=>{let i=A._getSourceAction(document.activeElement);i&&this._keyManager.updateActiveItem(i)}),this._dir?.change.pipe(Bt(this._destroyed)).subscribe(A=>this._keyManager.withHorizontalOrientation(A))}_skipPredicate(A){return A.disabled}_trackChipSetChanges(){this._chips.changes.pipe(cn(null),Bt(this._destroyed)).subscribe(()=>{this.disabled&&Promise.resolve().then(()=>this._syncChipsState()),this._redirectDestroyedChipFocus()})}_trackDestroyedFocusedChip(){this.chipDestroyedChanges.pipe(Bt(this._destroyed)).subscribe(A=>{let n=this._chips.toArray().indexOf(A.chip),o=A.chip._hasFocus(),a=A.chip._hadFocusOnRemove&&this._keyManager.activeItem&&A.chip._getActions().includes(this._keyManager.activeItem),r=o||a;this._isValidIndex(n)&&r&&(this._lastDestroyedFocusedChipIndex=n)})}_redirectDestroyedChipFocus(){if(this._lastDestroyedFocusedChipIndex!=null){if(this._chips.length){let A=Math.min(this._lastDestroyedFocusedChipIndex,this._chips.length-1),i=this._chips.toArray()[A];i.disabled?this._chips.length===1?this.focus():this._keyManager.setPreviousItemActive():i.focus()}else this.focus();this._lastDestroyedFocusedChipIndex=null}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-chip-set"]],contentQueries:function(i,n,o){if(i&1&&fa(o,Bm,5),i&2){let a;ce(a=Ce())&&(n._chips=a)}},hostAttrs:[1,"mat-mdc-chip-set","mdc-evolution-chip-set"],hostVars:1,hostBindings:function(i,n){i&1&&tA("keydown",function(a){return n._handleKeydown(a)}),i&2&&ie("role",n.role)},inputs:{disabled:[2,"disabled","disabled",he],role:"role",tabIndex:[2,"tabIndex","tabIndex",A=>A==null?0:en(A)]},ngContentSelectors:uaA,decls:2,vars:0,consts:[["role","presentation",1,"mdc-evolution-chip-set__chips"]],template:function(i,n){i&1&&(Yt(),li(0,"div",0),Ke(1),Ei())},styles:[`.mat-mdc-chip-set{display:flex}.mat-mdc-chip-set:focus{outline:none}.mat-mdc-chip-set .mdc-evolution-chip-set__chips{min-width:100%;margin-left:-8px;margin-right:0}.mat-mdc-chip-set .mdc-evolution-chip{margin:4px 0 4px 8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0;margin-right:-8px}[dir=rtl] .mat-mdc-chip-set .mdc-evolution-chip{margin-left:0;margin-right:8px}.mdc-evolution-chip-set__chips{display:flex;flex-flow:wrap;min-width:0}.mat-mdc-chip-set-stacked{flex-direction:column;align-items:flex-start}.mat-mdc-chip-set-stacked .mat-mdc-chip{width:100%}.mat-mdc-chip-set-stacked .mdc-evolution-chip__graphic{flex-grow:0}.mat-mdc-chip-set-stacked .mdc-evolution-chip__action--primary{flex-basis:100%;justify-content:start}input.mat-mdc-chip-input{flex:1 0 150px;margin-left:8px}[dir=rtl] input.mat-mdc-chip-input{margin-left:0;margin-right:8px}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-moz-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input::-webkit-input-placeholder{opacity:1}.mat-mdc-form-field:not(.mat-form-field-hide-placeholder) input.mat-mdc-chip-input:-ms-input-placeholder{opacity:1}.mat-mdc-chip-set+input.mat-mdc-chip-input{margin-left:0;margin-right:0} -`],encapsulation:2,changeDetection:0})}return t})(),yG=class{source;value;constructor(e,A){this.source=e,this.value=A}},D_A={provide:Lg,useExisting:wr(()=>xG),multi:!0},xG=(()=>{class t extends SG{_onTouched=()=>{};_onChange=()=>{};_defaultRole="listbox";_defaultOptions=h(vG,{optional:!0});get multiple(){return this._multiple}set multiple(A){this._multiple=A,this._syncListboxProperties()}_multiple=!1;get selected(){let A=this._chips.toArray().filter(i=>i.selected);return this.multiple?A:A[0]}ariaOrientation="horizontal";get selectable(){return this._selectable}set selectable(A){this._selectable=A,this._syncListboxProperties()}_selectable=!0;compareWith=(A,i)=>A===i;required=!1;get hideSingleSelectionIndicator(){return this._hideSingleSelectionIndicator}set hideSingleSelectionIndicator(A){this._hideSingleSelectionIndicator=A,this._syncListboxProperties()}_hideSingleSelectionIndicator=this._defaultOptions?.hideSingleSelectionIndicator??!1;get chipSelectionChanges(){return this._getChipStream(A=>A.selectionChange)}get chipBlurChanges(){return this._getChipStream(A=>A._onBlur)}get value(){return this._value}set value(A){this._chips&&this._chips.length&&this._setSelectionByValue(A,!1),this._value=A}_value;change=new $A;_chips=void 0;ngAfterContentInit(){this._chips.changes.pipe(cn(null),Bt(this._destroyed)).subscribe(()=>{this.value!==void 0&&Promise.resolve().then(()=>{this._setSelectionByValue(this.value,!1)}),this._syncListboxProperties()}),this.chipBlurChanges.pipe(Bt(this._destroyed)).subscribe(()=>this._blur()),this.chipSelectionChanges.pipe(Bt(this._destroyed)).subscribe(A=>{this.multiple||this._chips.forEach(i=>{i!==A.source&&i._setSelectedState(!1,!1,!1)}),A.isUserInput&&this._propagateChanges()})}focus(){if(this.disabled)return;let A=this._getFirstSelectedChip();A&&!A.disabled?A.focus():this._chips.length>0?this._keyManager.setFirstItemActive():this._elementRef.nativeElement.focus()}writeValue(A){A!=null?this.value=A:this.value=void 0}registerOnChange(A){this._onChange=A}registerOnTouched(A){this._onTouched=A}setDisabledState(A){this.disabled=A}_setSelectionByValue(A,i=!0){this._clearSelection(),Array.isArray(A)?A.forEach(n=>this._selectValue(n,i)):this._selectValue(A,i)}_blur(){this.disabled||setTimeout(()=>{this.focused||this._markAsTouched()})}_keydown(A){A.keyCode===9&&super._allowFocusEscape()}_markAsTouched(){this._onTouched(),this._changeDetectorRef.markForCheck()}_propagateChanges(){let A=null;Array.isArray(this.selected)?A=this.selected.map(i=>i.value):A=this.selected?this.selected.value:void 0,this._value=A,this.change.emit(new yG(this,A)),this._onChange(A),this._changeDetectorRef.markForCheck()}_clearSelection(A){this._chips.forEach(i=>{i!==A&&i.deselect()})}_selectValue(A,i){let n=this._chips.find(o=>o.value!=null&&this.compareWith(o.value,A));return n&&(i?n.selectViaInteraction():n.select()),n}_syncListboxProperties(){this._chips&&Promise.resolve().then(()=>{this._chips.forEach(A=>{A._chipListMultiple=this.multiple,A.chipListSelectable=this._selectable,A._chipListHideSingleSelectionIndicator=this.hideSingleSelectionIndicator,A._changeDetectorRef.markForCheck()})})}_getFirstSelectedChip(){return Array.isArray(this.selected)?this.selected.length?this.selected[0]:void 0:this.selected}_skipPredicate(A){return!1}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-chip-listbox"]],contentQueries:function(i,n,o){if(i&1&&fa(o,kG,5),i&2){let a;ce(a=Ce())&&(n._chips=a)}},hostAttrs:[1,"mdc-evolution-chip-set","mat-mdc-chip-listbox"],hostVars:10,hostBindings:function(i,n){i&1&&tA("focus",function(){return n.focus()})("blur",function(){return n._blur()})("keydown",function(a){return n._keydown(a)}),i&2&&(vo("tabIndex",n.disabled||n.empty?-1:n.tabIndex),ie("role",n.role)("aria-required",n.role?n.required:null)("aria-disabled",n.disabled.toString())("aria-multiselectable",n.multiple)("aria-orientation",n.ariaOrientation),ne("mat-mdc-chip-list-disabled",n.disabled)("mat-mdc-chip-list-required",n.required))},inputs:{multiple:[2,"multiple","multiple",he],ariaOrientation:[0,"aria-orientation","ariaOrientation"],selectable:[2,"selectable","selectable",he],compareWith:"compareWith",required:[2,"required","required",he],hideSingleSelectionIndicator:[2,"hideSingleSelectionIndicator","hideSingleSelectionIndicator",he],value:"value"},outputs:{change:"change"},features:[dt([D_A]),It],ngContentSelectors:uaA,decls:2,vars:0,consts:[["role","presentation",1,"mdc-evolution-chip-set__chips"]],template:function(i,n){i&1&&(Yt(),li(0,"div",0),Ke(1),Ei())},styles:[w_A],encapsulation:2,changeDetection:0})}return t})();var Nv=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({providers:[UB,{provide:vG,useValue:{separatorKeyCodes:[13]}}],imports:[x2,Gi]})}return t})();var Fv=new yA("ThemeService");var Lh=class t{themeService=h(Fv);get currentTheme(){return this.themeService.currentTheme()}get themeIcon(){return this.currentTheme==="light"?"dark_mode":"light_mode"}get themeTooltip(){return this.currentTheme==="light"?"Switch to dark mode":"Switch to light mode"}toggleTheme(){this.themeService.toggleTheme()}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-theme-toggle"]],decls:3,vars:2,consts:[["mat-icon-button","","aria-label","Toggle theme",1,"theme-toggle-button",3,"click","matTooltip"]],template:function(A,i){A&1&&(m(0,"button",0),tA("click",function(){return i.toggleTheme()}),m(1,"mat-icon"),K(2),w()()),A&2&&($("matTooltip",i.themeTooltip),p(2),qA(i.themeIcon))},dependencies:[Il,Fn,Ns,Wa,U2,xa],styles:[".theme-toggle-button[_ngcontent-%COMP%]{color:var(--side-panel-mat-icon-color)}.theme-toggle-button[_ngcontent-%COMP%]:hover{opacity:.8}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%]{background-color:var(--builder-secondary-background-color);color:var(--builder-text-tertiary-color);border-radius:50%;transition:all .2s ease;margin-right:0!important}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-hover-background-color);color:var(--builder-text-primary-color);opacity:1}.builder-mode-action-button[_nghost-%COMP%] .theme-toggle-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px}"]})};var DaA=(t,e)=>e.name;function y_A(t,e){if(t&1&&K(0),t&2){let A=v().$implicit;Se(" AgentTool: ",A.name," ")}}function v_A(t,e){if(t&1&&K(0),t&2){let A=v().$implicit;Se(" ",A.name," ")}}function b_A(t,e){t&1&&(m(0,"mat-icon",28),K(1,"chevron_right"),w())}function M_A(t,e){if(t&1){let A=JA();m(0,"div",27),tA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.selectAgentFromBreadcrumb(n))}),V(1,y_A,1,1)(2,v_A,1,1),w(),V(3,b_A,2,0,"mat-icon",28)}if(t&2){let A=e.$implicit,i=e.$index,n=v(2);ne("current-agent",(n.currentSelectedAgent==null?null:n.currentSelectedAgent.name)===A.name),p(),W(i===0&&n.isInAgentToolContext()?1:2),p(2),W(i0?0:-1)}}function J_A(t,e){if(t&1){let A=JA();m(0,"div",15)(1,"div",16)(2,"div"),K(3," Tools "),w(),m(4,"div")(5,"button",40,2)(7,"mat-icon"),K(8,"add"),w()(),m(9,"mat-menu",null,3)(11,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addTool("Function tool"))}),m(12,"span"),K(13,"Function tool"),w()(),m(14,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addTool("Built-in tool"))}),m(15,"span"),K(16,"Built-in tool"),w()(),m(17,"button",23),tA("click",function(){Z(A);let n=v();return X(n.createAgentTool())}),m(18,"span"),K(19,"Agent tool"),w()()()()(),V(20,U_A,1,1),ri(21,"async"),w()}if(t&2){let A,i=An(10),n=v();p(5),$("matMenuTriggerFor",i),p(6),$("matTooltip",n.toolMenuTooltips("Function tool")),p(3),$("matTooltip",n.toolMenuTooltips("Built-in tool")),p(3),$("matTooltip",n.toolMenuTooltips("Agent tool")),p(3),W((A=Ci(21,5,n.toolsMap$))?20:-1,A)}}function Y_A(t,e){if(t&1){let A=JA();m(0,"mat-chip",43),tA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.selectAgent(n))}),m(1,"mat-icon",44),K(2),w(),m(3,"span",45),K(4),w(),m(5,"button",48),tA("click",function(n){let o=Z(A).$implicit;return v(2).deleteSubAgent(o.name),X(n.stopPropagation())}),m(6,"mat-icon"),K(7,"cancel"),w()()()}if(t&2){let A=e.$implicit,i=v(2);p(2),qA(i.getAgentIcon(A.agent_class)),p(2),qA(A.name)}}function T_A(t,e){if(t&1&&(m(0,"div",20)(1,"mat-chip-set",47),Ut(2,Y_A,8,2,"mat-chip",42,DaA),w()()),t&2){let A=v();p(2),Jt(A.agentConfig.sub_agents)}}function H_A(t,e){if(t&1){let A=JA();GA(0,"mat-divider"),m(1,"div",22),K(2,"Model (LLM) Interaction"),w(),m(3,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addCallback("before_model"))}),m(4,"span"),K(5,"Before Model"),w()(),m(6,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addCallback("after_model"))}),m(7,"span"),K(8,"After Model"),w()(),GA(9,"mat-divider"),m(10,"div",22),K(11,"Tool Execution"),w(),m(12,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addCallback("before_tool"))}),m(13,"span"),K(14,"Before Tool"),w()(),m(15,"button",23),tA("click",function(){Z(A);let n=v();return X(n.addCallback("after_tool"))}),m(16,"span"),K(17,"After Tool"),w()()}if(t&2){let A=v();p(3),$("matTooltip",A.callbackMenuTooltips("before_model")),p(3),$("matTooltip",A.callbackMenuTooltips("after_model")),p(6),$("matTooltip",A.callbackMenuTooltips("before_tool")),p(3),$("matTooltip",A.callbackMenuTooltips("after_tool"))}}function z_A(t,e){if(t&1){let A=JA();m(0,"div",52),tA("click",function(){let n=Z(A).$implicit,o=v(3);return X(o.editCallback(n))}),m(1,"mat-chip",53)(2,"span",54)(3,"span",55),K(4),w(),m(5,"span",56),K(6),w()()(),m(7,"button",57),tA("click",function(n){let o=Z(A).$implicit,a=v(3);return a.deleteCallback(a.agentConfig.name,o),X(n.stopPropagation())}),m(8,"mat-icon"),K(9,"remove"),w()()()}if(t&2){let A=e.$implicit;p(4),qA(A.type),p(2),qA(A.name)}}function O_A(t,e){if(t&1&&(m(0,"div",49)(1,"mat-chip-set",50),Ut(2,z_A,10,2,"div",51,Li),w()()),t&2){let A=v(),i=v();p(2),Jt(A.get(i.agentConfig.name))}}function P_A(t,e){if(t&1&&V(0,O_A,4,0,"div",49),t&2){let A=e,i=v();W(i.agentConfig&&A.get(i.agentConfig.name)&&A.get(i.agentConfig.name).length>0?0:-1)}}var _v=class t{CALLBACKS_TAB_INDEX=3;jsonEditorComponent;appNameInput="";exitBuilderMode=new $A;closePanel=new $A;featureFlagService=h(vr);isAlwaysOnSidePanelEnabledObs=this.featureFlagService.isAlwaysOnSidePanelEnabled();toolArgsString=jA("");editingToolArgs=jA(!1);editingTool=null;selectedTabIndex=0;agentConfig={isRoot:!1,name:"",agent_class:"",model:"",instruction:"",sub_agents:[],tools:[],callbacks:[]};hierarchyPath=[];currentSelectedAgent=void 0;isRootAgentEditable=!0;models=["gemini-2.5-flash","gemini-2.5-pro"];agentTypes=["LlmAgent","LoopAgent","ParallelAgent","SequentialAgent"];agentBuilderService=h(Q0);dialog=h(Gs);agentService=h(sg);snackBar=h(J2);router=h(Cs);cdr=h(Dt);selectedTool=void 0;toolAgentName="";toolTypes=["Custom tool","Function tool","Built-in tool","Agent Tool"];editingCallback=null;selectedCallback=void 0;callbackTypes=["before_agent","before_model","before_tool","after_tool","after_model","after_agent"];builtInTools=["EnterpriseWebSearchTool","exit_loop","FilesRetrieval","get_user_choice","google_search","load_artifacts","load_memory","LongRunningFunctionTool","preload_memory","url_context","VertexAiRagRetrieval","VertexAiSearchTool"];builtInToolArgs=new Map([["EnterpriseWebSearchTool",[]],["exit_loop",[]],["FilesRetrieval",["name","description","input_dir"]],["get_user_choice",[]],["google_search",[]],["load_artifacts",[]],["load_memory",[]],["LongRunningFunctionTool",["func"]],["preload_memory",[]],["url_context",[]],["VertexAiRagRetrieval",["name","description","rag_corpora","rag_resources","similarity_top_k","vector_distance_threshold"]],["VertexAiSearchTool",["data_store_id","data_store_specs","search_engine_id","filter","max_results"]]]);header="Select an agent or tool to edit";toolsMap$;callbacksMap$;getJsonStringForEditor(e){if(!e)return"{}";let A=cA({},e);return delete A.skip_summarization,JSON.stringify(A,null,2)}constructor(){this.toolsMap$=this.agentBuilderService.getAgentToolsMap(),this.callbacksMap$=this.agentBuilderService.getAgentCallbacksMap(),this.agentBuilderService.getSelectedNode().subscribe(e=>{this.agentConfig=e,this.currentSelectedAgent=e,e&&(this.editingTool=null,this.editingCallback=null,this.header="Agent configuration",this.updateBreadcrumb(e)),this.cdr.markForCheck()}),this.agentBuilderService.getSelectedTool().subscribe(e=>{this.selectedTool=e,!(e&&e.toolType==="Agent Tool")&&(e?(this.editingTool=e,this.editingToolArgs.set(!1),setTimeout(()=>{let A=e.toolType=="Function tool"?"Function tool":e.name;if(e.toolType=="Function tool"&&!e.name&&(e.name="Function tool"),e.toolType==="Custom tool")e.args||(e.args={}),this.toolArgsString.set(this.getJsonStringForEditor(e.args)),this.editingToolArgs.set(!0);else{let i=this.builtInToolArgs.get(A);if(i){e.args||(e.args={});for(let n of i)e.args&&(e.args[n]="")}this.toolArgsString.set(this.getJsonStringForEditor(e.args)),e.args&&this.getObjectKeys(e.args).length>0&&this.editingToolArgs.set(!0)}this.cdr.markForCheck()}),this.selectedTabIndex=2):this.editingTool=null,this.cdr.markForCheck())}),this.agentBuilderService.getSelectedCallback().subscribe(e=>{this.selectedCallback=e,e?(this.selectCallback(e),this.selectedTabIndex=this.CALLBACKS_TAB_INDEX):this.editingCallback=null,this.cdr.markForCheck()}),this.agentBuilderService.getAgentCallbacks().subscribe(e=>{this.agentConfig&&e&&this.agentConfig.name===e.agentName&&(this.agentConfig=Ge(cA({},this.agentConfig),{callbacks:e.callbacks}),this.cdr.markForCheck())}),this.agentBuilderService.getSideTabChangeRequest().subscribe(e=>{e==="tools"?this.selectedTabIndex=2:e==="config"&&(this.selectedTabIndex=0)})}getObjectKeys(e){return e?Object.keys(e).filter(A=>A!=="skip_summarization"):[]}getCallbacksByType(){let e=new Map;return this.callbackTypes.forEach(A=>{e.set(A,[])}),this.agentConfig?.callbacks&&this.agentConfig.callbacks.forEach(A=>{let i=e.get(A.type);i&&i.push(A)}),e}updateBreadcrumb(e){this.hierarchyPath=this.buildHierarchyPath(e)}buildHierarchyPath(e){let A=[],i=this.findContextualRoot(e);return i?e.name===i.name?[i]:this.findPathToAgent(i,e,[i])||[e]:[e]}isInAgentToolContext(){return!this.hierarchyPath||this.hierarchyPath.length===0?!1:this.hierarchyPath[0]?.isAgentTool===!0}findContextualRoot(e){if(e.isAgentTool)return e;let A=this.agentBuilderService.getNodes();for(let n of A)if(n.isAgentTool&&this.findPathToAgent(n,e,[n]))return n;let i=this.agentBuilderService.getRootNode();if(i&&this.findPathToAgent(i,e,[i]))return i;if(e.isRoot)return e;for(let n of A)if(n.isRoot&&this.findPathToAgent(n,e,[n]))return n;return i}findPathToAgent(e,A,i){if(e.name===A.name)return i;for(let n of e.sub_agents){let o=[...i,n],a=this.findPathToAgent(n,A,o);if(a)return a}return null}selectAgentFromBreadcrumb(e){this.agentBuilderService.setSelectedNode(e),this.selectedTabIndex=0}selectAgent(e){this.agentBuilderService.setSelectedNode(e),this.selectedTabIndex=0}selectTool(e){if(e.toolType==="Agent Tool"){let A=e.name;this.agentBuilderService.requestNewTab(A);return}if(e.toolType==="Function tool"||e.toolType==="Built-in tool"){this.editTool(e);return}this.agentBuilderService.setSelectedTool(e)}editTool(e){if(!this.agentConfig)return;let A;e.toolType==="Built-in tool"?A=this.dialog.open(aB,{width:"700px",maxWidth:"90vw",data:{toolName:e.name,isEditMode:!0,toolArgs:e.args}}):A=this.dialog.open(W2,{width:"500px",data:{toolType:e.toolType,toolName:e.name,isEditMode:!0}}),A.afterClosed().subscribe(i=>{if(i&&i.isEditMode){let n=this.agentConfig.tools?.findIndex(o=>o.name===e.name);n!==void 0&&n!==-1&&this.agentConfig.tools&&(this.agentConfig.tools[n].name=i.name,i.args&&(this.agentConfig.tools[n].args=i.args),this.agentBuilderService.setAgentTools(this.agentConfig.name,this.agentConfig.tools))}})}addTool(e){if(this.agentConfig){let A;e==="Built-in tool"?A=this.dialog.open(aB,{width:"700px",maxWidth:"90vw",data:{}}):A=this.dialog.open(W2,{width:"500px",data:{toolType:e}}),A.afterClosed().subscribe(i=>{if(i){let n={toolType:i.toolType,name:i.name};this.agentBuilderService.addTool(this.agentConfig.name,n),this.agentBuilderService.setSelectedTool(n)}})}}addCallback(e){if(this.agentConfig){let A=this.agentConfig?.callbacks?.map(n=>n.name)??[];this.dialog.open(P4,{width:"500px",data:{callbackType:e,existingCallbackNames:A}}).afterClosed().subscribe(n=>{if(n){let o={name:n.name,type:n.type};this.agentBuilderService.addCallback(this.agentConfig.name,o)}})}}editCallback(e){if(!this.agentConfig)return;let A=this.agentConfig.callbacks?.map(n=>n.name)??[];this.dialog.open(P4,{width:"500px",data:{callbackType:e.type,existingCallbackNames:A,isEditMode:!0,callback:e,availableCallbackTypes:this.callbackTypes}}).afterClosed().subscribe(n=>{if(n&&n.isEditMode){let o=this.agentBuilderService.updateCallback(this.agentConfig.name,e.name,Ge(cA({},e),{name:n.name,type:n.type}));o.success?this.cdr.markForCheck():console.error("Failed to update callback:",o.error)}})}deleteCallback(e,A){this.dialog.open(Vc,{data:{title:"Delete Callback",message:`Are you sure you want to delete ${A.name}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(n=>{if(n==="confirm"){let o=this.agentBuilderService.deleteCallback(e,A);o.success?this.cdr.markForCheck():console.error("Failed to delete callback:",o.error)}})}addSubAgent(e){e&&this.agentBuilderService.setAddSubAgentSubject(e)}deleteSubAgent(e){this.agentBuilderService.setDeleteSubAgentSubject(e)}deleteTool(e,A){let i=A.toolType==="Agent Tool",n=i&&A.toolAgentName||A.name;this.dialog.open(Vc,{data:{title:i?"Delete Agent Tool":"Delete Tool",message:i?`Are you sure you want to delete the agent tool "${n}"? This will also delete the corresponding board.`:`Are you sure you want to delete ${n}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(a=>{if(a==="confirm")if(A.toolType==="Agent Tool"){let r=A.toolAgentName||A.name;this.deleteAgentToolAndBoard(e,A,r)}else this.agentBuilderService.deleteTool(e,A)})}deleteAgentToolAndBoard(e,A,i){this.agentBuilderService.deleteTool(e,A),this.agentBuilderService.requestTabDeletion(i)}backToToolList(){this.editingTool=null,this.agentBuilderService.setSelectedTool(void 0)}editToolArgs(){this.editingToolArgs.set(!0)}cancelEditToolArgs(e){this.editingToolArgs.set(!1),this.toolArgsString.set(this.getJsonStringForEditor(e?.args))}saveToolArgs(e){if(this.jsonEditorComponent&&e)try{let A=JSON.parse(this.jsonEditorComponent.getJsonString()),i=e.args?e.args.skip_summarization:!1;e.args=A,e.args.skip_summarization=i,this.toolArgsString.set(JSON.stringify(e.args,null,2)),this.editingToolArgs.set(!1)}catch(A){console.error("Error parsing tool arguments JSON",A)}}onToolTypeSelectionChange(e){e?.toolType==="Built-in tool"?(e.name="google_search",this.onBuiltInToolSelectionChange(e)):e?.toolType==="Custom tool"?(e.args={},this.toolArgsString.set(this.getJsonStringForEditor(e.args)),this.editingToolArgs.set(!0)):e&&(e.name="",e.args={skip_summarization:!1},this.toolArgsString.set("{}"),this.editingToolArgs.set(!1))}onBuiltInToolSelectionChange(e){e&&(this.editingToolArgs.set(!1),setTimeout(()=>{e.args={skip_summarization:!1};let A=this.builtInToolArgs.get(e.name);if(A)for(let i of A)e.args&&(e.args[i]="");this.toolArgsString.set(this.getJsonStringForEditor(e.args)),e.args&&this.getObjectKeys(e.args).length>0&&this.editingToolArgs.set(!0),this.cdr.markForCheck()}))}selectCallback(e){this.editingCallback=e}backToCallbackList(){this.editingCallback=null}onCallbackTypeChange(e){}createAgentTool(){this.dialog.open(Vc,{width:"750px",height:"450px",data:{title:"Create Agent Tool",message:"Please enter a name for the agent tool:",confirmButtonText:"Create",showInput:!0,inputLabel:"Agent Tool Name",inputPlaceholder:"Enter agent tool name",showToolInfo:!0,toolType:"Agent tool"}}).afterClosed().subscribe(A=>{if(A&&typeof A=="string"){let i=this.agentConfig?.name||"root_agent";this.agentBuilderService.requestNewTab(A,i)}})}saveChanges(){if(!this.agentBuilderService.getRootNode()){this.snackBar.open("Please create an agent first.","OK");return}this.appNameInput?this.saveAgent(this.appNameInput):this.agentService.getApp().subscribe(A=>{A?this.saveAgent(A):this.snackBar.open("No agent selected. Please select an agent first.","OK")})}cancelChanges(){this.agentService.agentChangeCancel(this.appNameInput).subscribe(e=>{}),this.exitBuilderMode.emit()}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A){this.snackBar.open("Please create an agent first.","OK");return}let i=new FormData,n=this.agentBuilderService.getCurrentAgentToolBoards();y0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{o&&this.agentService.agentBuild(i).subscribe(a=>{a?this.router.navigate(["/"],{queryParams:{app:e}}).then(()=>{window.location.reload()}):this.snackBar.open("Something went wrong, please try again","OK")})})}getToolIcon(e){return ME(e.name,e.toolType)}getAgentIcon(e){switch(e){case"SequentialAgent":return"more_horiz";case"LoopAgent":return"sync";case"ParallelAgent":return"density_medium";default:return"psychology"}}addSubAgentWithType(e){if(!this.agentConfig?.name)return;let A=this.agentConfig.agent_class!=="LlmAgent";this.agentBuilderService.setAddSubAgentSubject(this.agentConfig.name,e,A)}callbackMenuTooltips(e){return fc.getCallbackMenuTooltips(e)}toolMenuTooltips(e){return fc.getToolMenuTooltips(e)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-builder-tabs"]],viewQuery:function(A,i){if(A&1&&ai(qc,5),A&2){let n;ce(n=Ce())&&(i.jsonEditorComponent=n.first)}},inputs:{appNameInput:"appNameInput"},outputs:{exitBuilderMode:"exitBuilderMode",closePanel:"closePanel"},decls:77,vars:12,consts:[["subAgentMenu","matMenu"],["callbacksMenu","matMenu"],["agentMenuTrigger","matMenuTrigger"],["toolsMenu","matMenu"],[2,"margin-top","20px","margin-left","20px","display","flex"],[2,"width","100%"],[1,"drawer-header"],[1,"drawer-logo"],["src","assets/ADK-512-color.svg","width","32px","height","32px"],[2,"display","flex","align-items","center","gap","8px","margin-right","15px"],["matTooltip","Collapse panel",1,"material-symbols-outlined",2,"color","#c4c7c5","cursor","pointer",3,"click"],[1,"builder-tabs-container"],[1,"builder-tab-content"],[1,"agent-breadcrumb-container"],[1,"content-wrapper"],[1,"builder-panel-wrapper"],[1,"panel-title"],[1,"config-form"],["mat-icon-button","","type","button","aria-label","Add sub agent",1,"panel-action-button",3,"matMenuTriggerFor"],["mat-menu-item","",3,"click"],[1,"tools-chips-container"],["mat-icon-button","","type","button","aria-label","Add callback",1,"panel-action-button",3,"matMenuTriggerFor"],[1,"menu-header"],["mat-menu-item","","matTooltipPosition","right",3,"click","matTooltip"],[1,"action-buttons"],["mat-raised-button","","color","secondary",1,"save-button",3,"click"],["mat-button","",1,"cancel-button",3,"click"],[1,"breadcrumb-chip",3,"click"],[1,"breadcrumb-arrow"],[1,"form-row"],[1,"agent-name-field"],["matInput","",3,"ngModelChange","ngModel","disabled"],[1,"agent-type-field"],["disabled","",3,"ngModelChange","ngModel"],[3,"value"],[3,"ngModel"],[3,"ngModelChange","ngModel"],["matInput","","rows","5",3,"ngModelChange","ngModel"],["matInput","","rows","3",3,"ngModelChange","ngModel"],["matInput","","type","number","min","1",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","aria-label","Add tool",1,"panel-action-button",3,"matMenuTriggerFor"],["aria-label","Tools"],[1,"tool-chip"],[1,"tool-chip",3,"click"],["matChipAvatar","",1,"tool-icon"],[1,"tool-chip-name"],["matChipRemove","","aria-label","Remove tool",3,"click"],["aria-label","Sub Agents"],["matChipRemove","","aria-label","Remove sub agent",3,"click"],[1,"tools-chips-container","callbacks-list"],["aria-label","Callbacks"],[1,"callback-row"],[1,"callback-row",3,"click"],[1,"callback-chip"],[1,"chip-content"],[1,"chip-type"],[1,"chip-name"],["mat-icon-button","","aria-label","Remove callback",1,"callback-remove",3,"click"]],template:function(A,i){if(A&1){let n=JA();m(0,"div",4)(1,"div",5)(2,"div",6)(3,"div",7),GA(4,"img",8),K(5," Agent Development Kit "),w(),m(6,"div",9),GA(7,"app-theme-toggle"),m(8,"span",10),tA("click",function(){return Z(n),X(i.closePanel.emit())}),K(9,"left_panel_close"),w()()()()(),m(10,"div",11)(11,"div",12),V(12,k_A,3,0,"div",13),m(13,"div",14)(14,"div",15)(15,"div",16),K(16," Configuration "),w(),m(17,"div"),V(18,L_A,16,7,"div",17),w()(),V(19,J_A,22,7,"div",15),m(20,"div",15)(21,"div",16)(22,"div"),K(23," Sub Agents "),w(),m(24,"div")(25,"button",18)(26,"mat-icon"),K(27,"add"),w()(),m(28,"mat-menu",null,0)(30,"button",19),tA("click",function(){return Z(n),X(i.addSubAgentWithType("LlmAgent"))}),m(31,"mat-icon"),K(32,"psychology"),w(),m(33,"span"),K(34,"LLM Agent"),w()(),m(35,"button",19),tA("click",function(){return Z(n),X(i.addSubAgentWithType("SequentialAgent"))}),m(36,"mat-icon"),K(37,"more_horiz"),w(),m(38,"span"),K(39,"Sequential Agent"),w()(),m(40,"button",19),tA("click",function(){return Z(n),X(i.addSubAgentWithType("LoopAgent"))}),m(41,"mat-icon"),K(42,"sync"),w(),m(43,"span"),K(44,"Loop Agent"),w()(),m(45,"button",19),tA("click",function(){return Z(n),X(i.addSubAgentWithType("ParallelAgent"))}),m(46,"mat-icon"),K(47,"density_medium"),w(),m(48,"span"),K(49,"Parallel Agent"),w()()()()(),V(50,T_A,4,0,"div",20),w(),m(51,"div",15)(52,"div",16)(53,"div"),K(54," Callbacks "),w(),m(55,"div")(56,"button",21)(57,"mat-icon"),K(58,"add"),w()(),m(59,"mat-menu",null,1)(61,"div",22),K(62,"Agent Lifecycle"),w(),m(63,"button",23),tA("click",function(){return Z(n),X(i.addCallback("before_agent"))}),m(64,"span"),K(65,"Before Agent"),w()(),m(66,"button",23),tA("click",function(){return Z(n),X(i.addCallback("after_agent"))}),m(67,"span"),K(68,"After Agent"),w()(),V(69,H_A,18,4),w()()(),V(70,P_A,1,1),ri(71,"async"),w()(),m(72,"div",24)(73,"button",25),tA("click",function(){return Z(n),X(i.saveChanges())}),K(74," Save "),w(),m(75,"button",26),tA("click",function(){return Z(n),X(i.cancelChanges())}),K(76," Cancel "),w()()()()}if(A&2){let n,o=An(29),a=An(60);p(12),W(i.hierarchyPath.length>0?12:-1),p(6),W(i.agentConfig?18:-1),p(),W((i.agentConfig==null?null:i.agentConfig.agent_class)==="LlmAgent"?19:-1),p(6),$("matMenuTriggerFor",o),p(25),W(i.agentConfig&&i.agentConfig.sub_agents&&i.agentConfig.sub_agents.length>0?50:-1),p(6),$("matMenuTriggerFor",a),p(7),$("matTooltip",i.callbackMenuTooltips("before_agent")),p(3),$("matTooltip",i.callbackMenuTooltips("after_agent")),p(3),W((i.agentConfig==null?null:i.agentConfig.agent_class)==="LlmAgent"?69:-1),p(),W((n=Ci(71,10,i.callbacksMap$))?70:-1,n)}},dependencies:[ma,Nn,uo,a9,fo,g9,Sa,fn,bE,KO,No,Fn,wa,Wa,Gg,Hr,Bl,xa,AC,_h,C2,Nv,Bm,maA,paA,SG,fz,r8,Lh,ls],styles:[".builder-tabs-container[_ngcontent-%COMP%]{width:100%;margin-top:40px;height:calc(95vh - 20px);display:flex;flex-direction:column}.agent-breadcrumb-container[_ngcontent-%COMP%]{padding:2px 20px 8px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;border-bottom:1px solid var(--builder-border-color)}.breadcrumb-chip[_ngcontent-%COMP%]{background-color:transparent;color:var(--builder-text-muted-color);font-family:Google Sans;font-size:16px;font-weight:500;border:none;cursor:pointer;transition:all .2s ease;padding:4px 8px;border-radius:4px;display:inline-block;-webkit-user-select:none;user-select:none}.breadcrumb-chip[_ngcontent-%COMP%]:hover{color:var(--builder-text-link-color)}.breadcrumb-chip.current-agent[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-weight:500}.breadcrumb-arrow[_ngcontent-%COMP%]{color:var(--builder-breadcrumb-separator-color);font-size:16px;width:16px;height:16px}.builder-tab-content[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);display:flex;flex-direction:column;flex:1;overflow:hidden}.builder-tab-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:8px 0;font-size:14px;line-height:1.5}.builder-tab-content[_ngcontent-%COMP%]{--mat-form-field-filled-container-color: var(--builder-form-field-background-color);--mat-form-field-filled-focus-active-indicator-color: var(--builder-form-field-background-color);--mat-form-field-filled-active-indicator-color: var(--builder-form-field-background-color);--mat-form-field-filled-hover-active-indicator-color: var(--builder-form-field-background-color);--mat-form-field-filled-label-text-color: var(--builder-text-secondary-color);--mat-form-field-filled-focus-label-text-color: var(--builder-text-link-color);--mat-form-field-filled-hover-label-text-color: var(--builder-text-secondary-color)}[_nghost-%COMP%] .mat-mdc-text-field-wrapper{border:none!important}.components-section[_ngcontent-%COMP%]{margin-bottom:32px}.components-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:14px;font-weight:500;margin:0 0 16px;text-transform:uppercase;letter-spacing:.5px}.config-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;margin-top:20px}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%]{display:flex;gap:16px;align-items:flex-start}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%] .agent-name-field[_ngcontent-%COMP%]{flex:1}.config-form[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%] .agent-type-field[_ngcontent-%COMP%]{width:32%}.config-form[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.config-form[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{margin-bottom:8px}.config-form[_ngcontent-%COMP%] .tool-code-section[_ngcontent-%COMP%]{margin-top:16px}.config-form[_ngcontent-%COMP%] .tool-code-section[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 8px;color:var(--builder-text-secondary-color);font-size:14px;font-weight:500}.config-form[_ngcontent-%COMP%] .tool-args-header[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:14px;font-weight:500;letter-spacing:.5px;text-transform:uppercase}.json-editor-wrapper[_ngcontent-%COMP%]{height:300px;max-height:300px}.tab-content-container[_ngcontent-%COMP%]{margin-top:20px;overflow-y:auto}.agent-list-row[_ngcontent-%COMP%]{display:flex;margin-top:10px}.sub-agent-list-row[_ngcontent-%COMP%]{display:flex;margin-top:10px;margin-left:16px}.tree-view[_ngcontent-%COMP%] mat-tree[_ngcontent-%COMP%]{background-color:inherit!important}.tree-view[_ngcontent-%COMP%] expand-button[_ngcontent-%COMP%]{background-color:transparent;border:0}.node-item[_ngcontent-%COMP%]{display:flex;align-items:center}.node-icon[_ngcontent-%COMP%]{margin-right:14px}.node-name[_ngcontent-%COMP%]{margin-top:2px;display:flex;align-items:center}.no-tools-message[_ngcontent-%COMP%]{display:block;color:var(--builder-text-secondary-color);font-size:16px;margin-top:16px;margin-bottom:16px;text-align:center}.tools-list[_ngcontent-%COMP%]{list-style:none;padding:0}.tool-name[_ngcontent-%COMP%]{cursor:pointer;padding:11px;border-radius:8px;display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;background-color:var(--builder-card-background-color);color:var(--builder-text-primary-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.tool-name[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{visibility:hidden}.tool-name[_ngcontent-%COMP%]:hover{background-color:var(--builder-hover-background-color)}.tool-name[_ngcontent-%COMP%]:hover button[_ngcontent-%COMP%]{visibility:visible}.tool-list-item-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;padding-right:8px} .tools-chips-container .mat-mdc-chip-set{width:100%} .tools-chips-container.callbacks-list .mat-mdc-chip-set{display:flex;flex-direction:column;gap:8px;width:100%} .tools-chips-container .mat-mdc-chip.tool-chip{background-color:var(--builder-tool-chip-background-color);color:var(--builder-text-primary-color);font-family:Google Sans,sans-serif;font-size:14px;font-weight:500;cursor:pointer;margin:4px} .tools-chips-container .mat-mdc-chip.tool-chip:hover{background-color:var(--builder-tool-chip-hover-color)} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-action-label{display:flex;align-items:center;gap:6px} .tools-chips-container .mat-mdc-chip.tool-chip .tool-chip-name{display:inline-flex;align-items:center} .tools-chips-container .mat-mdc-chip.tool-chip .tool-icon{font-size:18px;width:18px;height:18px} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-remove{opacity:1;color:var(--builder-text-secondary-color)} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-remove mat-icon{font-size:18px;width:18px;height:18px} .tools-chips-container .mat-mdc-chip.tool-chip .mat-mdc-chip-remove:hover{color:var(--builder-text-primary-color)} .tools-chips-container .mat-mdc-chip.callback-chip{background:var(--builder-callback-chip-background-color);background-color:var(--builder-callback-chip-background-color);color:var(--builder-callback-chip-text-color);font-family:Google Sans,sans-serif;font-size:14px;display:flex;flex-direction:row;align-items:center;gap:12px;width:auto;height:40px;border-radius:8px;border:none;box-shadow:none;outline:none;--mdc-chip-outline-width: 0;--mdc-chip-outline-color: transparent;--mdc-chip-elevated-container-color: var(--builder-callback-chip-background-color);--mdc-chip-flat-container-color: var(--builder-callback-chip-background-color);flex:1 1 auto;min-width:0} .tools-chips-container .mat-mdc-chip.callback-chip:before, .tools-chips-container .mat-mdc-chip.callback-chip:after, .tools-chips-container .mat-mdc-chip.callback-chip .mat-mdc-chip-focus-overlay{border:none;box-shadow:none} .tools-chips-container .mat-mdc-chip.callback-chip .mat-mdc-chip-action-label{display:flex;flex:1;align-items:center;width:100%;gap:12px} .tools-chips-container .mat-mdc-chip.callback-chip .chip-content{display:flex;flex-direction:row;align-items:center;gap:12px;flex:1;min-width:0} .tools-chips-container .mat-mdc-chip.callback-chip .chip-type{color:var(--builder-callback-chip-type-color);font-size:13px;font-weight:500;white-space:nowrap} .tools-chips-container .mat-mdc-chip.callback-chip .chip-name{color:var(--builder-callback-chip-name-color);font-size:15px;font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.tools-chips-container[_ngcontent-%COMP%]{margin-top:12px;padding:0 4px}.tools-chips-container.callbacks-list[_ngcontent-%COMP%]{padding-right:0;padding-left:0}.callback-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;width:100%;cursor:pointer}.callback-remove[_ngcontent-%COMP%]{color:var(--builder-icon-color);cursor:pointer;width:32px;height:32px;min-width:32px;min-height:32px;display:inline-flex;align-items:center;justify-content:center;padding:0}.callback-remove[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:1;display:flex;align-items:center;justify-content:center;transform:translateY(.5px)}.back-button[_ngcontent-%COMP%]{margin-bottom:16px}.add-tool-button[_ngcontent-%COMP%]{width:100%;background:linear-gradient(0deg,var(--builder-add-button-background-color) 0%,var(--builder-add-button-background-color) 100%),var(--builder-panel-background-color);border:none;border-radius:4px;margin-top:12px;cursor:pointer}.add-tool-button-detail[_ngcontent-%COMP%]{display:flex;padding:8px 16px 8px 12px;justify-content:center}.add-tool-button-text[_ngcontent-%COMP%]{padding-top:2px;color:var(--builder-add-button-text-color);font-family:Google Sans;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.agent-tool-section[_ngcontent-%COMP%]{margin-top:16px;padding:16px;border:1px solid var(--builder-border-color);border-radius:8px;background-color:var(--builder-secondary-background-color)}.agent-tool-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:16px;font-weight:500;margin:0 0 8px}.agent-tool-section[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;margin:0 0 16px;line-height:1.5}.agent-tool-section[_ngcontent-%COMP%] .create-agent-tool-btn[_ngcontent-%COMP%]{background-color:var(--builder-button-primary-background-color);color:var(--builder-button-primary-text-color);font-weight:500}.agent-tool-section[_ngcontent-%COMP%] .create-agent-tool-btn[_ngcontent-%COMP%]:hover{background-color:var(--builder-button-primary-hover-color)}.no-callbacks-message[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:16px;margin-top:16px;text-align:center}.callback-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;padding-right:8px}.callback-section[_ngcontent-%COMP%]{margin-top:16px}.callback-section[_ngcontent-%COMP%] .callback-section-label[_ngcontent-%COMP%]{margin:0 0 8px;color:var(--builder-text-secondary-color);font-size:14px;font-weight:500;text-transform:none}.callback-groups-wrapper[_ngcontent-%COMP%]{margin-top:16px}.callback-group[_ngcontent-%COMP%]{margin-top:5px;--mat-expansion-container-background-color: var(--builder-expansion-background-color);--mat-expansion-header-focus-state-layer-color: red;--mat-expansion-header-description-color: var(--builder-expansion-header-description-color);--mat-expansion-header-text-size: 15}.callback-list[_ngcontent-%COMP%]{padding:8px 0}.no-callbacks-in-type[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;font-style:italic;padding:12px;text-align:center}.callback-item[_ngcontent-%COMP%]{cursor:pointer;padding:8px 12px;border-radius:4px;display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;background-color:var(--builder-card-background-color);color:var(--builder-text-primary-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.callback-item[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{visibility:hidden}.callback-item[_ngcontent-%COMP%]:hover{background-color:var(--builder-expansion-hover-color)}.callback-item[_ngcontent-%COMP%]:hover button[_ngcontent-%COMP%]{visibility:visible}.add-callback-icon[_ngcontent-%COMP%]{color:var(--builder-button-primary-background-color)}.add-callback-icon[_ngcontent-%COMP%]:hover{background-color:var(--builder-add-button-background-color)} .callback-group .mat-expansion-panel-header.mat-expanded:focus{background-color:var(--builder-expansion-hover-color)!important} .callback-group .mat-expansion-panel-header.mat-expanded{background-color:var(--builder-expansion-hover-color)!important} .callback-group .mat-expansion-panel-header.mat-expanded:hover{background-color:var(--builder-expansion-hover-color)!important} .callback-group .mat-expansion-panel-header-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}mat-tab-group[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;padding:16px 20px 0;min-height:0} .mat-mdc-tab-body-wrapper{flex:1;overflow:hidden;min-height:0} .mat-mdc-tab-body-content{flex:1;overflow:hidden;display:flex;flex-direction:column;min-height:0}mat-tab-group[_ngcontent-%COMP%]{flex:1;padding-bottom:0;display:flex;flex-direction:column;overflow:hidden} .mat-mdc-tab-body-wrapper{flex:1;overflow:hidden} .mat-mdc-tab-body-content{height:100%;overflow:hidden} .mat-drawer-inner-container{overflow:hidden}.action-buttons[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;padding:16px 20px;border-top:1px solid var(--builder-border-color);flex-shrink:0;margin-top:auto;background-color:var(--builder-panel-background-color)}.action-buttons[_ngcontent-%COMP%] .save-button[_ngcontent-%COMP%]{background-color:var(--builder-button-primary-background-color);color:var(--builder-button-primary-text-color);font-weight:500}.action-buttons[_ngcontent-%COMP%] .save-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-button-primary-hover-color)}.action-buttons[_ngcontent-%COMP%] .cancel-button[_ngcontent-%COMP%]{color:var(--builder-button-secondary-text-color);border:1px solid var(--builder-button-secondary-border-color)}.action-buttons[_ngcontent-%COMP%] .cancel-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-button-secondary-hover-background-color);color:var(--builder-button-secondary-hover-text-color)}.builder-panel-wrapper[_ngcontent-%COMP%]{border-bottom:1px solid var(--builder-border-color);padding:12px 24px}.panel-title[_ngcontent-%COMP%]{color:var(--builder-text-tertiary-color);font-family:Google Sans;font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;justify-content:space-between}.panel-title[_ngcontent-%COMP%] .panel-action-button[_ngcontent-%COMP%]{color:var(--builder-icon-color);width:32px;height:32px;min-width:32px;min-height:32px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;padding:0}.panel-title[_ngcontent-%COMP%] .panel-action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:1;display:flex;align-items:center;justify-content:center}.content-wrapper[_ngcontent-%COMP%]{flex:1;overflow-y:auto}.drawer-logo[_ngcontent-%COMP%]{margin-left:9px;display:flex;align-items:center}.drawer-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:9px}.drawer-logo[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:.1px}.drawer-header[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between;align-items:center;--mat-button-filled-container-color: var(--side-panel-button-filled-container-color);--mat-button-filled-label-text-color: var(--side-panel-button-filled-label-text-color)}.drawer-header[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{width:36px;height:36px;color:var(--side-panel-mat-icon-color);cursor:pointer;display:flex;align-items:center;justify-content:center} .mat-mdc-menu-panel{background-color:var(--builder-menu-background-color)!important} .mat-mdc-menu-panel .menu-header{color:var(--builder-text-secondary-color);font-size:12px;padding:8px 16px;font-weight:500;text-transform:uppercase;pointer-events:none} .mat-mdc-menu-panel .mat-mdc-menu-item{color:var(--builder-text-primary-color)} .mat-mdc-menu-panel .mat-mdc-menu-item:hover{background-color:var(--builder-menu-item-hover-color)} .mat-mdc-menu-panel mat-divider{border-top-color:var(--builder-menu-divider-color);margin:4px 0}"],changeDetection:0})};var Gh=new yA("MARKDOWN_COMPONENT");var j_A=["chatMessages"],q_A=(t,e)=>({"user-message":t,"bot-message":e}),V_A=t=>({text:t,thought:!1});function W_A(t,e){t&1&&(m(0,"div",7)(1,"mat-icon",12),K(2,"smart_toy"),w(),m(3,"h3"),K(4,"Assistant Ready"),w(),m(5,"p"),K(6,"Your builder assistant is ready to help you build agents."),w()())}function Z_A(t,e){t&1&&(m(0,"div",15)(1,"span",16),K(2,"\u30FB\u30FB\u30FB"),w()())}function X_A(t,e){if(t&1&&(m(0,"div",18),K(1,"Assistant"),w(),on(2,19)),t&2){let A=v(2).$implicit,i=v(2);p(2),$("ngComponentOutlet",i.markdownComponent)("ngComponentOutletInputs",ss(2,V_A,A.text))}}function $_A(t,e){if(t&1&&(m(0,"div",17),K(1),w()),t&2){let A=v(2).$implicit;p(),qA(A.text)}}function ALA(t,e){if(t&1&&V(0,X_A,3,4)(1,$_A,2,1,"div",17),t&2){let A=v().$implicit;W(A.role==="bot"?0:1)}}function eLA(t,e){if(t&1&&(m(0,"div",13)(1,"mat-card",14),V(2,Z_A,3,0,"div",15)(3,ALA,2,1),w()()),t&2){let A=e.$implicit;$("ngClass",Zl(2,q_A,A.role==="user",A.role==="bot")),p(2),W(A.isLoading?2:3)}}function tLA(t,e){if(t&1&&Ut(0,eLA,4,5,"div",13,Li),t&2){let A=v();Jt(A.messages)}}var Lv=class t{isVisible=!0;appName="";closePanel=new $A;reloadCanvas=new $A;assistantAppName="__adk_agent_builder_assistant";userId="user";currentSession="";userMessage="";messages=[];shouldAutoScroll=!1;isGenerating=!1;chatMessages;markdownComponent=h(Gh);agentService=h(sg);sessionService=h(El);agentBuilderService=h(Q0);constructor(){}ngOnInit(){this.sessionService.createSession(this.userId,this.assistantAppName).subscribe(e=>{this.currentSession=e.id;let A={appName:this.assistantAppName,userId:this.userId,sessionId:e.id,newMessage:{role:"user",parts:[{text:"hello"}]},streaming:!1,stateDelta:{root_directory:`${this.appName}/tmp/${this.appName}`}};this.messages.push({role:"bot",text:"",isLoading:!0}),this.shouldAutoScroll=!0,this.isGenerating=!0,this.agentService.runSse(A).subscribe({next:i=>nt(this,null,function*(){if(i.content){let n="";for(let o of i.content.parts)o.text&&(n+=o.text);if(n){let o=this.messages[this.messages.length-1];o.role==="bot"&&o.isLoading&&(o.text=n,o.isLoading=!1,this.shouldAutoScroll=!0)}}}),error:i=>{console.error("SSE error:",i);let n=this.messages[this.messages.length-1];n.role==="bot"&&n.isLoading&&(n.text="Sorry, I encountered an error. Please try again.",n.isLoading=!1,this.shouldAutoScroll=!0),this.isGenerating=!1},complete:()=>{this.isGenerating=!1}})})}onClosePanel(){this.closePanel.emit()}sendMessage(e){if(e.trim()){this.saveAgent(this.appName),e!="____Something went wrong, please try again"&&this.messages.push({role:"user",text:e});let A=e;this.userMessage="",this.messages.push({role:"bot",text:"",isLoading:!0}),this.shouldAutoScroll=!0,this.isGenerating=!0;let i={appName:this.assistantAppName,userId:this.userId,sessionId:this.currentSession,newMessage:{role:"user",parts:[{text:A}]},streaming:!1};this.agentService.runSse(i).subscribe({next:n=>nt(this,null,function*(){if(n.errorCode&&(n.errorCode=="MALFORMED_FUNCTION_CALL"||n.errorCode=="STOP")){this.sendMessage("____Something went wrong, please try again");return}if(n.content){let o="";for(let a of n.content.parts)a.text&&(o+=a.text);if(o){let a=this.messages[this.messages.length-1];a.role==="bot"&&a.isLoading&&(a.text=o,a.isLoading=!1,this.shouldAutoScroll=!0,this.reloadCanvas.emit())}}}),error:n=>{console.error("SSE error:",n);let o=this.messages[this.messages.length-1];o.role==="bot"&&o.isLoading&&(o.text="Sorry, I encountered an error. Please try again.",o.isLoading=!1,this.shouldAutoScroll=!0),this.isGenerating=!1},complete:()=>{this.isGenerating=!1}})}}ngAfterViewChecked(){this.shouldAutoScroll&&(this.scrollToBottom(),this.shouldAutoScroll=!1)}scrollToBottom(){try{this.chatMessages&&setTimeout(()=>{this.chatMessages.nativeElement.scrollTop=this.chatMessages.nativeElement.scrollHeight},50)}catch(e){console.error("Error scrolling to bottom:",e)}}onKeyDown(e){if(e.key==="Enter"){if(e.shiftKey)return;this.userMessage?.trim()&&this.currentSession&&(e.preventDefault(),this.sendMessage(this.userMessage))}}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A)return;let i=new FormData,n=this.agentBuilderService.getCurrentAgentToolBoards();y0.generateYamlFile(A,i,e,n),this.agentService.agentBuildTmp(i).subscribe(o=>{console.log(o?"save to tmp":"something went wrong")})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-builder-assistant"]],viewQuery:function(A,i){if(A&1&&ai(j_A,5),A&2){let n;ce(n=Ce())&&(i.chatMessages=n.first)}},inputs:{isVisible:"isVisible",appName:"appName"},outputs:{closePanel:"closePanel",reloadCanvas:"reloadCanvas"},decls:21,vars:6,consts:[["chatMessages",""],[1,"builder-assistant-panel"],[1,"panel-header"],[1,"panel-title"],["mat-icon-button","","matTooltip","Close assistant panel",1,"close-btn",3,"click"],[1,"panel-content"],[1,"chat-messages"],[1,"assistant-placeholder"],[1,"chat-input-container"],[1,"input-wrapper"],["cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","5","placeholder","Ask Gemini to build your agent",1,"assistant-input-box",3,"ngModelChange","keydown","ngModel","disabled"],["mat-icon-button","","matTooltip","Send message",1,"send-button",3,"click","disabled"],[1,"large-icon"],[3,"ngClass"],[1,"message-card"],[1,"loading-message"],[1,"dots"],[1,"message-text"],[1,"bot-label"],[3,"ngComponentOutlet","ngComponentOutletInputs"]],template:function(A,i){if(A&1){let n=JA();m(0,"div",1)(1,"div",2)(2,"div",3)(3,"mat-icon"),K(4,"auto_awesome"),w(),m(5,"span"),K(6,"Assistant"),w()(),m(7,"button",4),tA("click",function(){return Z(n),X(i.onClosePanel())}),m(8,"mat-icon"),K(9,"close"),w()()(),m(10,"div",5)(11,"div",6,0),V(13,W_A,7,0,"div",7)(14,tLA,2,0),w(),m(15,"div",8)(16,"div",9)(17,"textarea",10),ho("ngModelChange",function(a){return Z(n),ao(i.userMessage,a)||(i.userMessage=a),X(a)}),tA("keydown",function(a){return Z(n),X(i.onKeyDown(a))}),w(),m(18,"button",11),tA("click",function(){return Z(n),X(i.sendMessage(i.userMessage.trim()))}),m(19,"mat-icon"),K(20,"send"),w()()()()()()}A&2&&(ne("hidden",!i.isVisible),p(13),W(i.messages.length===0?13:14),p(4),Qo("ngModel",i.userMessage),$("disabled",i.isGenerating),p(),$("disabled",!i.userMessage.trim()||i.isGenerating))},dependencies:[ma,gs,D2,Nn,uo,fo,Sa,Fn,Wa,xa,aE,KB,Op],styles:[".builder-assistant-panel[_ngcontent-%COMP%]{position:fixed;right:0;top:72px;width:400px;height:calc(100vh - 72px);background:var(--builder-assistant-panel-background-color);border-left:1px solid var(--builder-assistant-panel-border-color);box-shadow:-2px 0 10px #0006;z-index:999;display:flex;flex-direction:column;transition:transform .3s ease}.builder-assistant-panel.hidden[_ngcontent-%COMP%]{transform:translate(100%)}.panel-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--builder-assistant-panel-border-color);background:var(--builder-assistant-panel-header-background-color)}.panel-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-weight:400;font-size:16px;color:var(--builder-text-primary-color);font-family:Google Sans,Helvetica Neue,sans-serif}.panel-title[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:20px;width:20px;height:20px}.close-btn[_ngcontent-%COMP%]{color:var(--builder-text-tertiary-color)}.close-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-add-button-background-color)}.panel-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;background:var(--builder-assistant-panel-background-color);overflow:hidden}.assistant-placeholder[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;height:300px;color:var(--builder-text-secondary-color)}.assistant-placeholder[_ngcontent-%COMP%] .large-icon[_ngcontent-%COMP%]{font-size:64px;width:64px;height:64px;margin-bottom:16px;color:var(--builder-button-primary-background-color)}.assistant-placeholder[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 8px;font-size:20px;font-weight:500;color:var(--builder-text-primary-color);font-family:Google Sans,Helvetica Neue,sans-serif}.assistant-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;line-height:1.5;color:var(--builder-text-secondary-color)}.chat-messages[_ngcontent-%COMP%]{flex:1;padding:20px;overflow-y:auto;display:flex;flex-direction:column}.chat-input-container[_ngcontent-%COMP%]{padding:16px 20px 20px;border-top:none;background:var(--builder-assistant-panel-background-color)}.input-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;background-color:var(--builder-assistant-input-background-color);border-radius:50px;padding:10px 6px 10px 18px;gap:8px}.assistant-input-box[_ngcontent-%COMP%]{flex:1;color:var(--builder-assistant-input-text-color);border:none;padding:0;background:transparent;resize:none;overflow:hidden;font-family:Google Sans,Helvetica Neue,sans-serif;font-size:14px;line-height:20px;min-height:20px;max-height:120px}.assistant-input-box[_ngcontent-%COMP%]::placeholder{color:var(--builder-assistant-input-placeholder-color);font-size:14px}.assistant-input-box[_ngcontent-%COMP%]:focus{outline:none}.assistant-input-box[_ngcontent-%COMP%]::-webkit-scrollbar{width:4px}.assistant-input-box[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--builder-border-color);border-radius:4px}.send-button[_ngcontent-%COMP%]{background-color:transparent;color:var(--builder-assistant-send-button-color);width:36px;height:36px;min-width:36px;flex-shrink:0;margin:0;padding:0}.send-button[_ngcontent-%COMP%] .mat-mdc-button-touch-target{display:none}.send-button[_ngcontent-%COMP%] .mat-mdc-button-persistent-ripple{display:none}.send-button[_ngcontent-%COMP%]:disabled{background-color:transparent;color:var(--builder-assistant-send-button-disabled-color)}.send-button[_ngcontent-%COMP%]:hover:not(:disabled){background-color:var(--builder-add-button-background-color);color:var(--builder-assistant-send-button-hover-color);border-radius:50%}.send-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.message-card[_ngcontent-%COMP%]{padding:10px 16px;margin:6px 0;font-size:14px;font-weight:400;position:relative;display:block;box-shadow:none;line-height:1.5;width:100%}.user-message[_ngcontent-%COMP%]{display:block;width:100%;margin-bottom:12px}.user-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--builder-assistant-user-message-background-color);border:1px solid var(--builder-assistant-user-message-border-color);border-radius:4px;color:var(--builder-assistant-user-message-text-color);padding:8px 12px}.bot-message[_ngcontent-%COMP%]{display:block;width:100%;margin-bottom:0}.bot-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:transparent;border:none;border-radius:0;color:var(--builder-assistant-bot-message-text-color);padding:0;margin:0}.bot-label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:var(--builder-text-secondary-color);margin-bottom:8px;font-family:Google Sans,Helvetica Neue,sans-serif}.message-text[_ngcontent-%COMP%]{white-space:pre-line;word-break:break-word;overflow-wrap:break-word;font-family:Google Sans,Helvetica Neue,sans-serif}.message-text[_ngcontent-%COMP%] p{margin:0;line-height:1.4}.message-text[_ngcontent-%COMP%] p:first-child{margin-top:0}.message-text[_ngcontent-%COMP%] p:last-child{margin-bottom:0}.message-text[_ngcontent-%COMP%] ul, .message-text[_ngcontent-%COMP%] ol{margin:0;padding-left:1.5em}.message-text[_ngcontent-%COMP%] li{margin:0}.message-text[_ngcontent-%COMP%] code{background-color:#ffffff1a;padding:2px 4px;border-radius:3px;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.9em}.message-text[_ngcontent-%COMP%] pre{background-color:#ffffff0d;padding:8px 12px;border-radius:6px;overflow-x:auto;margin:.5em 0}.message-text[_ngcontent-%COMP%] pre code{background:none;padding:0}.message-text[_ngcontent-%COMP%] blockquote{border-left:3px solid var(--builder-button-primary-background-color);padding-left:12px;margin:.5em 0;font-style:italic;color:var(--builder-text-tertiary-color)}.message-text[_ngcontent-%COMP%] strong{font-weight:600}.message-text[_ngcontent-%COMP%] em{font-style:italic}.loading-message[_ngcontent-%COMP%]{display:flex;align-items:center;color:var(--builder-text-secondary-color);font-family:Google Sans,Helvetica Neue,sans-serif;padding:0;margin:0}.loading-message[_ngcontent-%COMP%] .dots[_ngcontent-%COMP%]{font-size:24px;letter-spacing:-12px;animation:_ngcontent-%COMP%_pulse 1.4s ease-in-out infinite;display:inline-block;line-height:1}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:.3}50%{opacity:1}}"]})};var Kh=class t{constructor(e,A){this.http=e;this.zone=A}apiServerDomain=zr.getApiServerBaseUrl();_currentApp=new Ht("");currentApp=this._currentApp.asObservable();isLoading=new Ht(!1);getApp(){return this.currentApp}setApp(e){this._currentApp.next(e)}getLoadingState(){return this.isLoading}runSse(e){let A=this.apiServerDomain+"/run_sse";return this.isLoading.next(!0),new $i(i=>{let n=this;fetch(A,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify(e)}).then(o=>{let a=o.body?.getReader(),r=new TextDecoder("utf-8"),s="",g=()=>{a?.read().then(({done:l,value:C})=>{if(this.isLoading.next(!0),l)return this.isLoading.next(!1),i.complete();let I=r.decode(C,{stream:!0});s+=I;try{s.split(/\r?\n/).filter(B=>B.startsWith("data:")).forEach(B=>{let E=B.replace(/^data:\s*/,""),Q=JSON.parse(E);n.zone.run(()=>i.next(Q))}),s=""}catch(d){d instanceof SyntaxError&&g()}g()}).catch(l=>{n.zone.run(()=>i.error(l))})};g()}).catch(o=>{n.zone.run(()=>i.error(o))})})}listApps(){if(this.apiServerDomain!=null){let e=this.apiServerDomain+"/list-apps?relative_path=./";return this.http.get(e)}return new $i}agentBuild(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+"/builder/save";return this.http.post(A,e)}return new $i}agentBuildTmp(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+"/builder/save?tmp=true";return this.http.post(A,e)}return new $i}getAgentBuilder(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}`;return this.http.get(A,{responseType:"text"})}return new $i}getAgentBuilderTmp(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}&tmp=true`;return this.http.get(A,{responseType:"text"})}return new $i}getSubAgentBuilder(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/builder/app/${e}?ts=${Date.now()}&file_path=${A}&tmp=true`;return this.http.get(i,{responseType:"text"})}return new $i}agentChangeCancel(e){if(this.apiServerDomain!=null){let A=this.apiServerDomain+`/builder/app/${e}/cancel`;return this.http.post(A,{})}return new $i}static \u0275fac=function(A){return new(A||t)(xo(Xs),xo(Oe))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Gv="http://www.w3.org/1999/xhtml",RG={svg:"http://www.w3.org/2000/svg",xhtml:Gv,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function I2(t){var e=t+="",A=e.indexOf(":");return A>=0&&(e=t.slice(0,A))!=="xmlns"&&(t=t.slice(A+1)),RG.hasOwnProperty(e)?{space:RG[e],local:t}:t}function nLA(t){return function(){var e=this.ownerDocument,A=this.namespaceURI;return A===Gv&&e.documentElement.namespaceURI===Gv?e.createElement(t):e.createElementNS(A,t)}}function oLA(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Kv(t){var e=I2(t);return(e.local?oLA:nLA)(e)}function aLA(){}function rB(t){return t==null?aLA:function(){return this.querySelector(t)}}function yaA(t){typeof t!="function"&&(t=rB(t));for(var e=this._groups,A=e.length,i=new Array(A),n=0;n=S&&(S=b+1);!(D=Q[S])&&++S=0;)(a=i[n])&&(o&&a.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(a,o),o=a);return this}function GaA(t){t||(t=uLA);function e(C,I){return C&&I?t(C.__data__,I.__data__):!C-!I}for(var A=this._groups,i=A.length,n=new Array(i),o=0;oe?1:t>=e?0:NaN}function KaA(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function UaA(){return Array.from(this)}function JaA(){for(var t=this._groups,e=0,A=t.length;e1?this.each((e==null?vLA:typeof e=="function"?MLA:bLA)(t,e,A??"")):g1(this.node(),t)}function g1(t,e){return t.style.getPropertyValue(e)||Yv(t).getComputedStyle(t,null).getPropertyValue(e)}function kLA(t){return function(){delete this[t]}}function SLA(t,e){return function(){this[t]=e}}function xLA(t,e){return function(){var A=e.apply(this,arguments);A==null?delete this[t]:this[t]=A}}function PaA(t,e){return arguments.length>1?this.each((e==null?kLA:typeof e=="function"?xLA:SLA)(t,e)):this.node()[t]}function jaA(t){return t.trim().split(/^|\s+/)}function FG(t){return t.classList||new qaA(t)}function qaA(t){this._node=t,this._names=jaA(t.getAttribute("class")||"")}qaA.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function VaA(t,e){for(var A=FG(t),i=-1,n=e.length;++i=0&&(A=e.slice(i+1),e=e.slice(0,i)),{type:e,name:A}})}function VLA(t){return function(){var e=this.__on;if(e){for(var A=0,i=-1,n=e.length,o;A{}};function drA(){for(var t=0,e=arguments.length,A={},i;t=0&&(i=A.slice(n+1),A=A.slice(0,n)),A&&!e.hasOwnProperty(A))throw new Error("unknown type: "+A);return{type:A,name:i}})}Tv.prototype=drA.prototype={constructor:Tv,on:function(t,e){var A=this._,i=eGA(t+"",A),n,o=-1,a=i.length;if(arguments.length<2){for(;++o0)for(var A=new Array(n),i=0,n,o;i()=>t;function pm(t,{sourceEvent:e,subject:A,target:i,identifier:n,active:o,x:a,y:r,dx:s,dy:g,dispatch:l}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},subject:{value:A,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},identifier:{value:n,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:a,enumerable:!0,configurable:!0},y:{value:r,enumerable:!0,configurable:!0},dx:{value:s,enumerable:!0,configurable:!0},dy:{value:g,enumerable:!0,configurable:!0},_:{value:l}})}pm.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};function iGA(t){return!t.ctrlKey&&!t.button}function nGA(){return this.parentNode}function oGA(t,e){return e??{x:t.x,y:t.y}}function aGA(){return navigator.maxTouchPoints||"ontouchstart"in this}function zv(){var t=iGA,e=nGA,A=oGA,i=aGA,n={},o=sB("start","drag","end"),a=0,r,s,g,l,C=0;function I(M){M.on("mousedown.drag",d).filter(i).on("touchstart.drag",Q).on("touchmove.drag",f,BrA).on("touchend.drag touchcancel.drag",b).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(M,D){if(!(l||!t.call(this,M,D))){var F=S(this,e.call(this,M,D),M,D,"mouse");F&&(_r(M.view).on("mousemove.drag",B,gB).on("mouseup.drag",E,gB),um(M.view),Hv(M),g=!1,r=M.clientX,s=M.clientY,F("start",M))}}function B(M){if(l1(M),!g){var D=M.clientX-r,F=M.clientY-s;g=D*D+F*F>C}n.mouse("drag",M)}function E(M){_r(M.view).on("mousemove.drag mouseup.drag",null),fm(M.view,g),l1(M),n.mouse("end",M)}function Q(M,D){if(t.call(this,M,D)){var F=M.changedTouches,_=e.call(this,M,D),U=F.length,J,j;for(J=0;J>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):A===8?Pv(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):A===4?Pv(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=sGA.exec(t))?new Mg(e[1],e[2],e[3],1):(e=gGA.exec(t))?new Mg(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=lGA.exec(t))?Pv(e[1],e[2],e[3],e[4]):(e=cGA.exec(t))?Pv(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=CGA.exec(t))?prA(e[1],e[2]/100,e[3]/100,1):(e=IGA.exec(t))?prA(e[1],e[2]/100,e[3]/100,e[4]):ErA.hasOwnProperty(t)?urA(ErA[t]):t==="transparent"?new Mg(NaN,NaN,NaN,0):null}function urA(t){return new Mg(t>>16&255,t>>8&255,t&255,1)}function Pv(t,e,A,i){return i<=0&&(t=e=A=NaN),new Mg(t,e,A,i)}function EGA(t){return t instanceof ym||(t=c1(t)),t?(t=t.rgb(),new Mg(t.r,t.g,t.b,t.opacity)):new Mg}function Jh(t,e,A,i){return arguments.length===1?EGA(t):new Mg(t,e,A,i??1)}function Mg(t,e,A,i){this.r=+t,this.g=+e,this.b=+A,this.opacity=+i}Ov(Mg,Jh,LG(ym,{brighter(t){return t=t==null?qv:Math.pow(qv,t),new Mg(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?wm:Math.pow(wm,t),new Mg(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Mg(cB(this.r),cB(this.g),cB(this.b),Vv(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:frA,formatHex:frA,formatHex8:QGA,formatRgb:mrA,toString:mrA}));function frA(){return`#${lB(this.r)}${lB(this.g)}${lB(this.b)}`}function QGA(){return`#${lB(this.r)}${lB(this.g)}${lB(this.b)}${lB((isNaN(this.opacity)?1:this.opacity)*255)}`}function mrA(){let t=Vv(this.opacity);return`${t===1?"rgb(":"rgba("}${cB(this.r)}, ${cB(this.g)}, ${cB(this.b)}${t===1?")":`, ${t})`}`}function Vv(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function cB(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function lB(t){return t=cB(t),(t<16?"0":"")+t.toString(16)}function prA(t,e,A,i){return i<=0?t=e=A=NaN:A<=0||A>=1?t=e=NaN:e<=0&&(t=NaN),new Wc(t,e,A,i)}function DrA(t){if(t instanceof Wc)return new Wc(t.h,t.s,t.l,t.opacity);if(t instanceof ym||(t=c1(t)),!t)return new Wc;if(t instanceof Wc)return t;t=t.rgb();var e=t.r/255,A=t.g/255,i=t.b/255,n=Math.min(e,A,i),o=Math.max(e,A,i),a=NaN,r=o-n,s=(o+n)/2;return r?(e===o?a=(A-i)/r+(A0&&s<1?0:a,new Wc(a,r,s,t.opacity)}function yrA(t,e,A,i){return arguments.length===1?DrA(t):new Wc(t,e,A,i??1)}function Wc(t,e,A,i){this.h=+t,this.s=+e,this.l=+A,this.opacity=+i}Ov(Wc,yrA,LG(ym,{brighter(t){return t=t==null?qv:Math.pow(qv,t),new Wc(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?wm:Math.pow(wm,t),new Wc(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,A=this.l,i=A+(A<.5?A:1-A)*e,n=2*A-i;return new Mg(GG(t>=240?t-240:t+120,n,i),GG(t,n,i),GG(t<120?t+240:t-120,n,i),this.opacity)},clamp(){return new Wc(wrA(this.h),jv(this.s),jv(this.l),Vv(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=Vv(this.opacity);return`${t===1?"hsl(":"hsla("}${wrA(this.h)}, ${jv(this.s)*100}%, ${jv(this.l)*100}%${t===1?")":`, ${t})`}`}}));function wrA(t){return t=(t||0)%360,t<0?t+360:t}function jv(t){return Math.max(0,Math.min(1,t||0))}function GG(t,e,A){return(t<60?e+(A-e)*t/60:t<180?A:t<240?e+(A-e)*(240-t)/60:e)*255}function KG(t,e,A,i,n){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*A+(1+3*t+3*o-3*a)*i+a*n)/6}function vrA(t){var e=t.length-1;return function(A){var i=A<=0?A=0:A>=1?(A=1,e-1):Math.floor(A*e),n=t[i],o=t[i+1],a=i>0?t[i-1]:2*n-o,r=i()=>t;function hGA(t,e){return function(A){return t+A*e}}function uGA(t,e,A){return t=Math.pow(t,A),e=Math.pow(e,A)-t,A=1/A,function(i){return Math.pow(t+i*e,A)}}function MrA(t){return(t=+t)==1?Wv:function(e,A){return A-e?uGA(e,A,t):UG(isNaN(e)?A:e)}}function Wv(t,e){var A=e-t;return A?hGA(t,A):UG(isNaN(t)?e:t)}var Zv=(function t(e){var A=MrA(e);function i(n,o){var a=A((n=Jh(n)).r,(o=Jh(o)).r),r=A(n.g,o.g),s=A(n.b,o.b),g=Wv(n.opacity,o.opacity);return function(l){return n.r=a(l),n.g=r(l),n.b=s(l),n.opacity=g(l),n+""}}return i.gamma=t,i})(1);function krA(t){return function(e){var A=e.length,i=new Array(A),n=new Array(A),o=new Array(A),a,r;for(a=0;aA&&(o=e.slice(A,o),r[a]?r[a]+=o:r[++a]=o),(i=i[0])===(n=n[0])?r[a]?r[a]+=n:r[++a]=n:(r[++a]=null,s.push({i:a,x:Ol(i,n)})),A=JG.lastIndex;return A180?l+=360:l-g>180&&(g+=360),I.push({i:C.push(n(C)+"rotate(",null,i)-2,x:Ol(g,l)})):l&&C.push(n(C)+"rotate("+l+i)}function r(g,l,C,I){g!==l?I.push({i:C.push(n(C)+"skewX(",null,i)-2,x:Ol(g,l)}):l&&C.push(n(C)+"skewX("+l+i)}function s(g,l,C,I,d,B){if(g!==C||l!==I){var E=d.push(n(d)+"scale(",null,",",null,")");B.push({i:E-4,x:Ol(g,C)},{i:E-2,x:Ol(l,I)})}else(C!==1||I!==1)&&d.push(n(d)+"scale("+C+","+I+")")}return function(g,l){var C=[],I=[];return g=t(g),l=t(l),o(g.translateX,g.translateY,l.translateX,l.translateY,C,I),a(g.rotate,l.rotate,C,I),r(g.skewX,l.skewX,C,I),s(g.scaleX,g.scaleY,l.scaleX,l.scaleY,C,I),g=l=null,function(d){for(var B=-1,E=I.length,Q;++B=0&&t._call.call(void 0,e),t=t._next;--Yh}function _rA(){CB=(e7=km.now())+t7,Yh=bm=0;try{KrA()}finally{Yh=0,kGA(),CB=0}}function MGA(){var t=km.now(),e=t-e7;e>LrA&&(t7-=e,e7=t)}function kGA(){for(var t,e=A7,A,i=1/0;e;)e._call?(i>e._time&&(i=e._time),t=e,e=e._next):(A=e._next,e._next=null,e=t?t._next=A:A7=A);Mm=t,jG(i)}function jG(t){if(!Yh){bm&&(bm=clearTimeout(bm));var e=t-CB;e>24?(t<1/0&&(bm=setTimeout(_rA,t-km.now()-t7)),vm&&(vm=clearInterval(vm))):(vm||(e7=km.now(),vm=setInterval(MGA,LrA)),Yh=1,GrA(_rA))}}function n7(t,e,A){var i=new Sm;return e=e==null?0:+e,i.restart(n=>{i.stop(),t(n+e)},e,A),i}var SGA=sB("start","end","cancel","interrupt"),xGA=[],YrA=0,UrA=1,a7=2,o7=3,JrA=4,r7=5,Rm=6;function C1(t,e,A,i,n,o){var a=t.__transition;if(!a)t.__transition={};else if(A in a)return;RGA(t,A,{name:e,index:i,group:n,on:SGA,tween:xGA,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:YrA})}function Nm(t,e){var A=fr(t,e);if(A.state>YrA)throw new Error("too late; already scheduled");return A}function ns(t,e){var A=fr(t,e);if(A.state>o7)throw new Error("too late; already running");return A}function fr(t,e){var A=t.__transition;if(!A||!(A=A[e]))throw new Error("transition not found");return A}function RGA(t,e,A){var i=t.__transition,n;i[e]=A,A.timer=i7(o,0,A.time);function o(g){A.state=UrA,A.timer.restart(a,A.delay,A.time),A.delay<=g&&a(g-A.delay)}function a(g){var l,C,I,d;if(A.state!==UrA)return s();for(l in i)if(d=i[l],d.name===A.name){if(d.state===o7)return n7(a);d.state===JrA?(d.state=Rm,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete i[l]):+la7&&i.state=0&&(e=e.slice(0,A)),!e||e==="start"})}function XGA(t,e,A){var i,n,o=ZGA(e)?Nm:ns;return function(){var a=o(this,t),r=a.on;r!==i&&(n=(i=r).copy()).on(e,A),a.on=n}}function XrA(t,e){var A=this._id;return arguments.length<2?fr(this.node(),A).on.on(t):this.each(XGA(A,t,e))}function $GA(t){return function(){var e=this.parentNode;for(var A in this.__transition)if(+A!==t)return;e&&e.removeChild(this)}}function $rA(){return this.on("end.remove",$GA(this._id))}function AsA(t){var e=this._name,A=this._id;typeof t!="function"&&(t=rB(t));for(var i=this._groups,n=i.length,o=new Array(n),a=0;a()=>t;function qG(t,{sourceEvent:e,target:A,transform:i,dispatch:n}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},target:{value:A,enumerable:!0,configurable:!0},transform:{value:i,enumerable:!0,configurable:!0},_:{value:n}})}function Zc(t,e,A){this.k=t,this.x=e,this.y=A}Zc.prototype={constructor:Zc,scale:function(t){return t===1?this:new Zc(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new Zc(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var I1=new Zc(1,0,0);VG.prototype=Zc.prototype;function VG(t){for(;!t.__zoom;)if(!(t=t.parentNode))return I1;return t.__zoom}function c7(t){t.stopImmediatePropagation()}function Hh(t){t.preventDefault(),t.stopImmediatePropagation()}function dKA(t){return(!t.ctrlKey||t.type==="wheel")&&!t.button}function BKA(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t,t.hasAttribute("viewBox")?(t=t.viewBox.baseVal,[[t.x,t.y],[t.x+t.width,t.y+t.height]]):[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]):[[0,0],[t.clientWidth,t.clientHeight]]}function CsA(){return this.__zoom||I1}function EKA(t){return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function QKA(){return navigator.maxTouchPoints||"ontouchstart"in this}function hKA(t,e,A){var i=t.invertX(e[0][0])-A[0][0],n=t.invertX(e[1][0])-A[1][0],o=t.invertY(e[0][1])-A[0][1],a=t.invertY(e[1][1])-A[1][1];return t.translate(n>i?(i+n)/2:Math.min(0,i)||Math.max(0,n),a>o?(o+a)/2:Math.min(0,o)||Math.max(0,a))}function WG(){var t=dKA,e=BKA,A=hKA,i=EKA,n=QKA,o=[0,1/0],a=[[-1/0,-1/0],[1/0,1/0]],r=250,s=PG,g=sB("start","zoom","end"),l,C,I,d=500,B=150,E=0,Q=10;function f(P){P.property("__zoom",CsA).on("wheel.zoom",U,{passive:!1}).on("mousedown.zoom",J).on("dblclick.zoom",j).filter(n).on("touchstart.zoom",AA).on("touchmove.zoom",O).on("touchend.zoom touchcancel.zoom",DA).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}f.transform=function(P,aA,iA,BA){var oA=P.selection?P.selection():P;oA.property("__zoom",CsA),P!==oA?D(P,aA,iA,BA):oA.interrupt().each(function(){F(this,arguments).event(BA).start().zoom(null,typeof aA=="function"?aA.apply(this,arguments):aA).end()})},f.scaleBy=function(P,aA,iA,BA){f.scaleTo(P,function(){var oA=this.__zoom.k,sA=typeof aA=="function"?aA.apply(this,arguments):aA;return oA*sA},iA,BA)},f.scaleTo=function(P,aA,iA,BA){f.transform(P,function(){var oA=e.apply(this,arguments),sA=this.__zoom,hA=iA==null?M(oA):typeof iA=="function"?iA.apply(this,arguments):iA,YA=sA.invert(hA),ee=typeof aA=="function"?aA.apply(this,arguments):aA;return A(S(b(sA,ee),hA,YA),oA,a)},iA,BA)},f.translateBy=function(P,aA,iA,BA){f.transform(P,function(){return A(this.__zoom.translate(typeof aA=="function"?aA.apply(this,arguments):aA,typeof iA=="function"?iA.apply(this,arguments):iA),e.apply(this,arguments),a)},null,BA)},f.translateTo=function(P,aA,iA,BA,oA){f.transform(P,function(){var sA=e.apply(this,arguments),hA=this.__zoom,YA=BA==null?M(sA):typeof BA=="function"?BA.apply(this,arguments):BA;return A(I1.translate(YA[0],YA[1]).scale(hA.k).translate(typeof aA=="function"?-aA.apply(this,arguments):-aA,typeof iA=="function"?-iA.apply(this,arguments):-iA),sA,a)},BA,oA)};function b(P,aA){return aA=Math.max(o[0],Math.min(o[1],aA)),aA===P.k?P:new Zc(aA,P.x,P.y)}function S(P,aA,iA){var BA=aA[0]-iA[0]*P.k,oA=aA[1]-iA[1]*P.k;return BA===P.x&&oA===P.y?P:new Zc(P.k,BA,oA)}function M(P){return[(+P[0][0]+ +P[1][0])/2,(+P[0][1]+ +P[1][1])/2]}function D(P,aA,iA,BA){P.on("start.zoom",function(){F(this,arguments).event(BA).start()}).on("interrupt.zoom end.zoom",function(){F(this,arguments).event(BA).end()}).tween("zoom",function(){var oA=this,sA=arguments,hA=F(oA,sA).event(BA),YA=e.apply(oA,sA),ee=iA==null?M(YA):typeof iA=="function"?iA.apply(oA,sA):iA,UA=Math.max(YA[1][0]-YA[0][0],YA[1][1]-YA[0][1]),mA=oA.__zoom,KA=typeof aA=="function"?aA.apply(oA,sA):aA,Pe=s(mA.invert(ee).concat(UA/mA.k),KA.invert(ee).concat(UA/KA.k));return function(Je){if(Je===1)Je=KA;else{var HA=Pe(Je),uA=UA/HA[2];Je=new Zc(uA,ee[0]-HA[0]*uA,ee[1]-HA[1]*uA)}hA.zoom(null,Je)}})}function F(P,aA,iA){return!iA&&P.__zooming||new _(P,aA)}function _(P,aA){this.that=P,this.args=aA,this.active=0,this.sourceEvent=null,this.extent=e.apply(P,aA),this.taps=0}_.prototype={event:function(P){return P&&(this.sourceEvent=P),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(P,aA){return this.mouse&&P!=="mouse"&&(this.mouse[1]=aA.invert(this.mouse[0])),this.touch0&&P!=="touch"&&(this.touch0[1]=aA.invert(this.touch0[0])),this.touch1&&P!=="touch"&&(this.touch1[1]=aA.invert(this.touch1[0])),this.that.__zoom=aA,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(P){var aA=_r(this.that).datum();g.call(P,this.that,new qG(P,{sourceEvent:this.sourceEvent,target:f,type:P,transform:this.that.__zoom,dispatch:g}),aA)}};function U(P,...aA){if(!t.apply(this,arguments))return;var iA=F(this,aA).event(P),BA=this.__zoom,oA=Math.max(o[0],Math.min(o[1],BA.k*Math.pow(2,i.apply(this,arguments)))),sA=zl(P);if(iA.wheel)(iA.mouse[0][0]!==sA[0]||iA.mouse[0][1]!==sA[1])&&(iA.mouse[1]=BA.invert(iA.mouse[0]=sA)),clearTimeout(iA.wheel);else{if(BA.k===oA)return;iA.mouse=[sA,BA.invert(sA)],IB(this),iA.start()}Hh(P),iA.wheel=setTimeout(hA,B),iA.zoom("mouse",A(S(b(BA,oA),iA.mouse[0],iA.mouse[1]),iA.extent,a));function hA(){iA.wheel=null,iA.end()}}function J(P,...aA){if(I||!t.apply(this,arguments))return;var iA=P.currentTarget,BA=F(this,aA,!0).event(P),oA=_r(P.view).on("mousemove.zoom",ee,!0).on("mouseup.zoom",UA,!0),sA=zl(P,iA),hA=P.clientX,YA=P.clientY;um(P.view),c7(P),BA.mouse=[sA,this.__zoom.invert(sA)],IB(this),BA.start();function ee(mA){if(Hh(mA),!BA.moved){var KA=mA.clientX-hA,Pe=mA.clientY-YA;BA.moved=KA*KA+Pe*Pe>E}BA.event(mA).zoom("mouse",A(S(BA.that.__zoom,BA.mouse[0]=zl(mA,iA),BA.mouse[1]),BA.extent,a))}function UA(mA){oA.on("mousemove.zoom mouseup.zoom",null),fm(mA.view,BA.moved),Hh(mA),BA.event(mA).end()}}function j(P,...aA){if(t.apply(this,arguments)){var iA=this.__zoom,BA=zl(P.changedTouches?P.changedTouches[0]:P,this),oA=iA.invert(BA),sA=iA.k*(P.shiftKey?.5:2),hA=A(S(b(iA,sA),BA,oA),e.apply(this,aA),a);Hh(P),r>0?_r(this).transition().duration(r).call(D,hA,BA,P):_r(this).call(f.transform,hA,BA,P)}}function AA(P,...aA){if(t.apply(this,arguments)){var iA=P.touches,BA=iA.length,oA=F(this,aA,P.changedTouches.length===BA).event(P),sA,hA,YA,ee;for(c7(P),hA=0;hA{let A=Math.max(0,Math.min(t.x+t.width,e.x+e.width)-Math.max(t.x,e.x)),i=Math.max(0,Math.min(t.y+t.height,e.y+e.height)-Math.max(t.y,e.y));return Math.ceil(A*i)};function ksA(t){if(t.length===0)return{x:0,y:0,width:0,height:0};let e={x:1/0,y:1/0,x2:-1/0,y2:-1/0};return t.forEach(A=>{let i=JUA(A);e=TUA(e,i)}),YUA(e)}function UUA(t,e,A){let i=e.find(o=>o.rawNode.id===t);if(!i)return[];let n=I7(i);return e.filter(o=>{if(o.rawNode.id===t)return!1;let a=KUA(I7(o),n);return A?.partially?a>0:a>=n.width*n.height})}function JUA(t){return{x:t.point().x,y:t.point().y,x2:t.point().x+t.size().width,y2:t.point().y+t.size().height}}function I7(t){return{x:t.globalPoint().x,y:t.globalPoint().y,width:t.width(),height:t.height()}}function YUA({x:t,y:e,x2:A,y2:i}){return{x:t,y:e,width:A-t,height:i-e}}function TUA(t,e){return{x:Math.min(t.x,e.x),y:Math.min(t.y,e.y),x2:Math.max(t.x2,e.x2),y2:Math.max(t.y2,e.y2)}}var d7=class{constructor(e){this.settings=e,this.curve=e.curve??"bezier",this.type=e.type??"default",this.mode=e.mode??"strict";let A=this.getValidators(e);this.validator=i=>A.every(n=>n(i))}getValidators(e){let A=[];return A.push(HUA),this.mode==="loose"&&A.push(zUA),e.validator&&A.push(e.validator),A}},HUA=t=>t.source!==t.target,zUA=t=>t.sourceHandle!==void 0&&t.targetHandle!==void 0;function Oh(t){return t.split("").reduce((e,A)=>(e=(e<<5)-e+A.charCodeAt(0),e&e),0)}var Sg=(()=>{class t{constructor(){this.nodes=jA([],{equal:(A,i)=>!A.length&&!i.length?!0:A===i}),this.rawNodes=Ue(()=>this.nodes().map(A=>A.rawNode)),this.edges=jA([],{equal:(A,i)=>!A.length&&!i.length?!0:A===i}),this.rawEdges=Ue(()=>this.edges().map(A=>A.edge)),this.validEdges=Ue(()=>{let A=this.nodes();return this.edges().filter(i=>A.includes(i.source())&&A.includes(i.target()))}),this.connection=jA(new d7({})),this.markers=Ue(()=>{let A=new Map;this.validEdges().forEach(n=>{if(n.edge.markers?.start){let o=Oh(JSON.stringify(n.edge.markers.start));A.set(o,n.edge.markers.start)}if(n.edge.markers?.end){let o=Oh(JSON.stringify(n.edge.markers.end));A.set(o,n.edge.markers.end)}});let i=this.connection().settings.marker;if(i){let n=Oh(JSON.stringify(i));A.set(n,i)}return A}),this.entities=Ue(()=>[...this.nodes(),...this.edges()]),this.minimap=jA(null)}getNode(A){return this.nodes().find(({rawNode:i})=>i.id===A)}getDetachedEdges(){return this.edges().filter(A=>A.detached())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function OUA(t,e,A,i,n,o){let a=e/(t.width*(1+o)),r=A/(t.height*(1+o)),s=Math.min(a,r),g=PUA(s,i,n),l=t.x+t.width/2,C=t.y+t.height/2,I=e/2-l*g,d=A/2-C*g;return{x:I,y:d,zoom:g}}function PUA(t,e=0,A=1){return Math.min(Math.max(t,e),A)}function jUA(t,e,A){let i=t.zoom;return{x:-t.x/i,y:-t.y/i,width:e/i,height:A/i}}function qUA(t,e,A,i){let n=jUA(e,A,i);return!(t.x+t.widthn.x+n.width||t.y+t.heightn.y+n.height)}var VUA={detachedGroupsLayer:!1,virtualization:!1,virtualizationZoomThreshold:.5,lazyLoadTrigger:"immediate"},bs=(()=>{class t{constructor(){this.entitiesSelectable=jA(!0),this.elevateNodesOnSelect=jA(!0),this.elevateEdgesOnSelect=jA(!0),this.view=jA([400,400]),this.computedFlowWidth=jA(0),this.computedFlowHeight=jA(0),this.minZoom=jA(.5),this.maxZoom=jA(3),this.background=jA({type:"solid",color:"#fff"}),this.snapGrid=jA([1,1]),this.optimization=jA(VUA)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),dB=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.flowSettingsService=h(bs),this.writableViewport=jA({changeType:"initial",state:t.getDefaultViewport(),duration:0}),this.readableViewport=jA(t.getDefaultViewport()),this.viewportChangeEnd$=new XA}static getDefaultViewport(){return{zoom:1,x:0,y:0}}fitView(A={padding:.1,duration:0,nodes:[]}){let i=this.getBoundsNodes(A.nodes??[]),n=OUA(ksA(i),this.flowSettingsService.computedFlowWidth(),this.flowSettingsService.computedFlowHeight(),this.flowSettingsService.minZoom(),this.flowSettingsService.maxZoom(),A.padding??.1),o=A.duration??0;this.writableViewport.set({changeType:"absolute",state:n,duration:o})}triggerViewportChangeEvent(A){A==="end"&&this.viewportChangeEnd$.next()}getBoundsNodes(A){return A?.length?A.map(i=>this.entitiesService.nodes().find(({rawNode:n})=>n.id===i)).filter(i=>!!i):this.entitiesService.nodes()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function E2(t){return t!==void 0}var w7=(()=>{class t{constructor(){this.element=h(ge).nativeElement}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","rootSvgRef",""]]})}}return t})();function IsA(){let t=window.navigator.userAgent.toLowerCase(),e=/(macintosh|macintel|macppc|mac68k|macos)/i,A=/(win32|win64|windows|wince)/i,i=/(iphone|ipad|ipod)/i,n=null;return e.test(t)?n="macos":i.test(t)?n="ios":A.test(t)?n="windows":/android/.test(t)?n="android":!n&&/linux/.test(t)&&(n="linux"),n}var AK=(()=>{class t{constructor(){this.actions=jA({multiSelection:[IsA()==="macos"?"MetaLeft":"ControlLeft",IsA()==="macos"?"MetaRight":"ControlRight"]}),this.actionsActive={multiSelection:!1},$n(this.actions).pipe(Si(()=>fi(nl(document,"keydown").pipe(oi(A=>{for(let i in this.actions())(this.actions()[i]??[]).includes(A.code)&&(this.actionsActive[i]=!0)})),nl(document,"keyup").pipe(oi(A=>{for(let i in this.actions())(this.actions()[i]??[]).includes(A.code)&&(this.actionsActive[i]=!1)})))),Tr()).subscribe()}setShortcuts(A){this.actions.update(i=>cA(cA({},i),A))}isActiveAction(A){return this.actionsActive[A]}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),Um=(()=>{class t{constructor(){this.flowEntitiesService=h(Sg),this.keyboardService=h(AK),this.viewport$=new XA,this.resetSelection=this.viewport$.pipe(oi(({start:A,end:i,target:n})=>{if(A&&i&&n){let o=t.delta,a=Math.abs(i.x-A.x),r=Math.abs(i.y-A.y),s=ai.selected.set(!1)),A&&A.selected.set(!0))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),ZG=(()=>{class t{constructor(){this.rootSvg=h(w7).element,this.host=h(ge).nativeElement,this.selectionService=h(Um),this.viewportService=h(dB),this.flowSettingsService=h(bs),this.zone=h(Oe),this.rootSvgSelection=_r(this.rootSvg),this.transform=jA(""),this.viewportForSelection={},this.manualViewportChangeEffect=Ga(()=>{let A=this.viewportService.writableViewport(),i=A.state;if(A.changeType!=="initial"){if(E2(i.zoom)&&!E2(i.x)&&!E2(i.y)){this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.scaleTo,i.zoom);return}if(E2(i.x)&&E2(i.y)&&!E2(i.zoom)){let n=la(this.viewportService.readableViewport).zoom;this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.transform,I1.translate(i.x,i.y).scale(n));return}if(E2(i.x)&&E2(i.y)&&E2(i.zoom)){this.rootSvgSelection.transition().duration(A.duration).call(this.zoomBehavior.transform,I1.translate(i.x,i.y).scale(i.zoom));return}}},{allowSignalWrites:!0}),this.handleZoom=({transform:A})=>{this.viewportService.readableViewport.set(XG(A)),this.transform.set(A.toString())},this.handleZoomStart=({transform:A})=>{this.viewportForSelection={start:XG(A)}},this.handleZoomEnd=({transform:A,sourceEvent:i})=>{this.zone.run(()=>{this.viewportForSelection=Ge(cA({},this.viewportForSelection),{end:XG(A),target:WUA(i)}),this.viewportService.triggerViewportChangeEvent("end"),this.selectionService.setViewport(this.viewportForSelection)})},this.filterCondition=A=>A.type==="mousedown"||A.type==="touchstart"?A.target.closest(".vflow-node")===null:!0}ngOnInit(){this.zone.runOutsideAngular(()=>{this.zoomBehavior=WG().scaleExtent([this.flowSettingsService.minZoom(),this.flowSettingsService.maxZoom()]).filter(this.filterCondition).on("start",this.handleZoomStart).on("zoom",this.handleZoom).on("end",this.handleZoomEnd),this.rootSvgSelection.call(this.zoomBehavior).on("dblclick.zoom",null)})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["g","mapContext",""]],hostVars:1,hostBindings:function(i,n){i&2&&ie("transform",n.transform())}})}}return t})(),XG=t=>({zoom:t.k,x:t.x,y:t.y}),WUA=t=>{if(t instanceof Event&&t.target instanceof Element)return t.target},B7=t=>Math.round(t*100)/100;function kg(t,e){return Math.ceil(t/e)*e}var d1=(()=>{class t{constructor(){this.status=jA({state:"idle",payload:null})}setIdleStatus(){this.status.set({state:"idle",payload:null})}setConnectionStartStatus(A,i){this.status.set({state:"connection-start",payload:{source:A,sourceHandle:i}})}setReconnectionStartStatus(A,i,n){this.status.set({state:"reconnection-start",payload:{source:A,sourceHandle:i,oldEdge:n}})}setConnectionValidationStatus(A,i,n,o,a){this.status.set({state:"connection-validation",payload:{source:i,target:n,sourceHandle:o,targetHandle:a,valid:A}})}setReconnectionValidationStatus(A,i,n,o,a,r){this.status.set({state:"reconnection-validation",payload:{source:i,target:n,sourceHandle:o,targetHandle:a,valid:A,oldEdge:r}})}setConnectionEndStatus(A,i,n,o){this.status.set({state:"connection-end",payload:{source:A,target:i,sourceHandle:n,targetHandle:o}})}setReconnectionEndStatus(A,i,n,o,a){this.status.set({state:"reconnection-end",payload:{source:A,target:i,sourceHandle:n,targetHandle:o,oldEdge:a}})}setNodeDragStartStatus(A){this.status.set({state:"node-drag-start",payload:{node:A}})}setNodeDragEndStatus(A){this.status.set({state:"node-drag-end",payload:{node:A}})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function dsA(t){return t.state==="node-drag-start"}function ZUA(t){return t.state==="node-drag-end"}var SsA=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.settingsService=h(bs),this.flowStatusService=h(d1)}enable(A,i){_r(A).call(this.getDragBehavior(i))}disable(A){_r(A).call(zv().on("drag",null))}destroy(A){_r(A).on(".drag",null)}getDragBehavior(A){let i=[],n=[],o=a=>A.dragHandlesCount()?!!a.target.closest(".vflow-drag-handle"):!0;return zv().filter(o).on("start",a=>{i=this.getDragNodes(A),this.flowStatusService.setNodeDragStartStatus(A),n=i.map(r=>({x:r.point().x-a.x,y:r.point().y-a.y}))}).on("drag",a=>{i.forEach((r,s)=>{let g={x:B7(a.x+n[s].x),y:B7(a.y+n[s].y)};this.moveNode(r,g)})}).on("end",()=>{this.flowStatusService.setNodeDragEndStatus(A)})}getDragNodes(A){return A.selected()?this.entitiesService.nodes().filter(i=>i.selected()&&i.draggable()):[A]}moveNode(A,i){i=this.alignToGrid(i);let n=A.parent();n&&(i.x=Math.min(n.width()-A.width(),i.x),i.x=Math.max(0,i.x),i.y=Math.min(n.height()-A.height(),i.y),i.y=Math.max(0,i.y)),A.setPoint(i)}alignToGrid(A){let[i,n]=this.settingsService.snapGrid();return i>1&&(A.x=kg(A.x,i)),n>1&&(A.y=kg(A.y,n)),A}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),BsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","edge",""]]})}}return t})(),EsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","connection",""]]})}}return t})(),QsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","edgeLabelHtml",""]]})}}return t})(),E7=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","nodeHtml",""]]})}}return t})(),hsA=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","nodeSvg",""]]})}}return t})(),Q7=(()=>{class t{constructor(){this.templateRef=h(Tn)}static ngTemplateContextGuard(A,i){return!0}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["ng-template","groupNode",""]]})}}return t})();function usA(t,e){let A=t.reduce((i,n)=>(i[n.rawNode.id]=n,i),{});e.forEach(i=>{i.source.set(A[i.edge.source]),i.target.set(A[i.edge.target])})}function Gm(t){try{return new Proxy(t,{apply:()=>{}})(),!0}catch{return!1}}var eK=(()=>{class t{constructor(){this._event$=new XA,this.event$=this._event$.asObservable()}pushEvent(A){this._event$.next(A)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),Ph=(()=>{class t{constructor(){this.model=jA(null)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),xsA=(()=>{class t{constructor(){this.eventBus=h(eK),this.nodeService=h(Ph),this.destroyRef=h(qa),this.selected=this.nodeService.model().selected,this.data=jA(void 0)}ngOnInit(){this.trackEvents().pipe(Tr(this.destroyRef)).subscribe()}trackEvents(){let A=Object.getOwnPropertyNames(this),i=new Map;for(let n of A){let o=this[n];o instanceof $A&&i.set(o,n),o instanceof bU&&i.set(XUA(o),n)}return fi(...Array.from(i.keys()).map(n=>n.pipe(oi(o=>{this.eventBus.pushEvent({nodeId:this.nodeService.model()?.rawNode.id??"",eventName:i.get(n),eventPayload:o})}))))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,standalone:!1})}}return t})();function XUA(t){return new $i(e=>{let A=t.subscribe(i=>{e.next(i)});return()=>{A.unsubscribe()}})}var $UA=(()=>{class t extends xsA{constructor(){super(...arguments),this.node=rt.required()}ngOnInit(){let A=this.node().data;A&&(this.data=A),super.ngOnInit()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})()}static{this.\u0275dir=OA({type:t,inputs:{node:[1,"node"]},standalone:!1,features:[It]})}}return t})(),AJA=(()=>{class t extends xsA{constructor(){super(...arguments),this.node=rt.required()}ngOnInit(){this.node().data&&this.data.set(this.node().data),super.ngOnInit()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})()}static{this.\u0275dir=OA({type:t,inputs:{node:[1,"node"]},standalone:!1,features:[It]})}}return t})();function RsA(t){return Object.prototype.isPrototypeOf.call(AJA,t)}function NsA(t){return Object.prototype.isPrototypeOf.call($UA,t)}function eJA(t){return typeof t.point=="function"}function tJA(t){return RsA(t.type)?!0:Gm(t.type)&&!Gm(t.point)}function iJA(t){return NsA(t.type)?!0:Gm(t.type)&&Gm(t.point)}var h7=2;function nJA(t){return eJA(t)?t:Ge(cA({},oJA(t)),{id:t.id,type:t.type})}function oJA(t){let e={};for(let A in t)Object.prototype.hasOwnProperty.call(t,A)&&(e[A]=jA(t[A]));return e}function aJA(t,e,A){!e&&BU(t);let i=e??h(ft);return A?or(i,A):i}function Km(t,e){let A=aJA(Km,e?.injector),i;return Ue(()=>(i||(i=la(()=>Fs(t,Ge(cA({},e),{injector:A})))),i()))}function rJA(t){return t.rawNode.type==="default-group"||t.rawNode.type==="template-group"}var BB=(()=>{class t{constructor(){this.flowEntitiesService=h(Sg),this.flowSettingsService=h(bs),this.viewportService=h(dB),this.nodes=Ue(()=>this.flowSettingsService.optimization().virtualization?this.viewportNodesAfterInteraction().sort((A,i)=>A.renderOrder()-i.renderOrder()):[...this.flowEntitiesService.nodes()].sort((A,i)=>A.renderOrder()-i.renderOrder())),this.groups=Ue(()=>this.nodes().filter(A=>!!A.children().length||rJA(A))),this.nonGroups=Ue(()=>this.nodes().filter(A=>!this.groups().includes(A))),this.viewportNodes=Ue(()=>{let A=this.flowEntitiesService.nodes(),i=this.viewportService.readableViewport(),n=this.flowSettingsService.computedFlowWidth(),o=this.flowSettingsService.computedFlowHeight();return A.filter(a=>{let{x:r,y:s}=a.globalPoint(),g=a.width(),l=a.height();return qUA({x:r,y:s,width:g,height:l},i,n,o)})}),this.viewportNodesAfterInteraction=Km(fi($n(this.flowEntitiesService.nodes).pipe(fB(Wm),Ze(A=>!!A.length)),this.viewportService.viewportChangeEnd$.pipe(Os(300))).pipe(fe(()=>{let A=this.viewportService.readableViewport(),i=this.flowSettingsService.optimization().virtualizationZoomThreshold;return A.zoomMath.max(...this.flowEntitiesService.nodes().map(A=>A.renderOrder())))}pullNode(A){A.renderOrder.set(this.maxOrder()+1),A.children().forEach(i=>this.pullNode(i))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function u7(t,e){e||(e={equal:Object.is});let A;return Ue(()=>A=t(A),e)}var sJA=(()=>{class t{static{this.defaultWidth=100}static{this.defaultHeight=50}static{this.defaultColor="#1b262c"}constructor(A){this.rawNode=A,this.entitiesService=h(Sg),this.settingsService=h(bs),this.nodeRenderingService=h(BB),this.isVisible=jA(!1),this.point=jA({x:0,y:0}),this.width=jA(t.defaultWidth),this.height=jA(t.defaultHeight),this.size=Ue(()=>({width:this.width(),height:this.height()})),this.styleWidth=Ue(()=>this.controlledByResizer()?`${this.width()}px`:"100%"),this.styleHeight=Ue(()=>this.controlledByResizer()?`${this.height()}px`:"100%"),this.foWidth=Ue(()=>this.width()+h7),this.foHeight=Ue(()=>this.height()+h7),this.renderOrder=jA(0),this.selected=jA(!1),this.preview=jA({style:{}}),this.globalPoint=Ue(()=>{let n=this.parent(),o=this.point().x,a=this.point().y;for(;n!==null;)o+=n.point().x,a+=n.point().y,n=n.parent();return{x:o,y:a}}),this.pointTransform=Ue(()=>`translate(${this.globalPoint().x}, ${this.globalPoint().y})`),this.handles=jA([]),this.draggable=jA(!0),this.dragHandlesCount=jA(0),this.magnetRadius=20,this.isComponentType=tJA(this.rawNode)||iJA(this.rawNode),this.shouldLoad=u7(n=>{if(n||this.settingsService.optimization().lazyLoadTrigger==="immediate")return!0;if(this.settingsService.optimization().lazyLoadTrigger==="viewport"){if(RsA(this.rawNode.type)||NsA(this.rawNode.type))return!0;if(Gm(this.rawNode.type)||this.rawNode.type==="html-template"||this.rawNode.type==="svg-template"||this.rawNode.type==="template-group")return this.nodeRenderingService.viewportNodes().includes(this)}return!0}),this.componentInstance$=$n(this.shouldLoad).pipe(Ze(Boolean),Si(()=>this.rawNode.type()),ta(()=>se(this.rawNode.type)),Ps(1)),this.text=jA(""),this.componentTypeInputs={node:this.rawNode},this.parent=Ue(()=>this.entitiesService.nodes().find(n=>n.rawNode.id===this.parentId())??null),this.children=Ue(()=>this.entitiesService.nodes().filter(n=>n.parentId()===this.rawNode.id)),this.color=jA(t.defaultColor),this.controlledByResizer=jA(!1),this.resizable=jA(!1),this.resizing=jA(!1),this.resizerTemplate=jA(null),this.context={$implicit:{}},this.parentId=jA(null);let i=nJA(A);i.point&&(this.point=i.point),i.width&&(this.width=i.width),i.height&&(this.height=i.height),i.draggable&&(this.draggable=i.draggable),i.parentId&&(this.parentId=i.parentId),i.preview&&(this.preview=i.preview),i.type==="default-group"&&i.color&&(this.color=i.color),i.type==="default-group"&&i.resizable&&(this.resizable=i.resizable),i.type==="default"&&i.text&&(this.text=i.text),i.type==="html-template"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),shouldLoad:this.shouldLoad}}),i.type==="svg-template"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),width:this.width.asReadonly(),height:this.height.asReadonly(),shouldLoad:this.shouldLoad}}),i.type==="template-group"&&(this.context={$implicit:{node:A,selected:this.selected.asReadonly(),width:this.width.asReadonly(),height:this.height.asReadonly(),shouldLoad:this.shouldLoad}}),this.point$=$n(this.point),this.width$=$n(this.width),this.height$=$n(this.height),this.size$=$n(this.size),this.selected$=$n(this.selected),this.handles$=$n(this.handles)}setPoint(A){this.point.set(A)}}return t})(),_m=class{constructor(e){this.edgeLabel=e,this.size=jA({width:0,height:0})}};function Q2(t,e,A){return{x:(1-A)*t.x+A*e.x,y:(1-A)*t.y+A*e.y}}function tK({sourcePoint:t,targetPoint:e}){return{path:`M ${t.x},${t.y}L ${e.x},${e.y}`,labelPoints:{start:Q2(t,e,.15),center:Q2(t,e,.5),end:Q2(t,e,.85)}}}function iK({sourcePoint:t,targetPoint:e,sourcePosition:A,targetPosition:i}){let n={x:t.x-e.x,y:t.y-e.y},o=fsA(t,A,n),a=fsA(e,i,n),r=`M${t.x},${t.y} C${o.x},${o.y} ${a.x},${a.y} ${e.x},${e.y}`;return gJA(r,t,e,o,a)}function fsA(t,e,A){let i={x:0,y:0};switch(e){case"top":i.y=1;break;case"bottom":i.y=-1;break;case"right":i.x=1;break;case"left":i.x=-1;break}let n={x:A.x*Math.abs(i.x),y:A.y*Math.abs(i.y)},a=.25*25*Math.sqrt(Math.abs(n.x+n.y));return{x:t.x+i.x*a,y:t.y-i.y*a}}function gJA(t,e,A,i,n){return{path:t,labelPoints:{start:$G(e,A,i,n,.1),center:$G(e,A,i,n,.5),end:$G(e,A,i,n,.9)}}}function $G(t,e,A,i,n){let o=Q2(t,A,n),a=Q2(A,i,n),r=Q2(i,e,n);return Q2(Q2(o,a,n),Q2(a,r,n),n)}var msA={left:{x:-1,y:0},right:{x:1,y:0},top:{x:0,y:-1},bottom:{x:0,y:1}};function lJA(t,e){let A=Math.abs(e.x-t.x)/2,i=e.xe==="left"||e==="right"?t.xMath.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2));function CJA({source:t,sourcePosition:e="bottom",target:A,targetPosition:i="top",offset:n}){let o=msA[e],a=msA[i],r={x:t.x+o.x*n,y:t.y+o.y*n},s={x:A.x+a.x*n,y:A.y+a.y*n},g=cJA({source:r,sourcePosition:e,target:s}),l=g.x!==0?"x":"y",C=g[l],I=[],d,B,E={x:0,y:0},Q={x:0,y:0},[f,b]=lJA(t,A);if(o[l]*a[l]===-1){d=f,B=b;let M=[{x:d,y:r.y},{x:d,y:s.y}],D=[{x:r.x,y:B},{x:s.x,y:B}];o[l]===C?I=l==="x"?M:D:I=l==="x"?D:M}else{let M=[{x:r.x,y:s.y}],D=[{x:s.x,y:r.y}];if(l==="x"?I=o.x===C?D:M:I=o.y===C?M:D,e===i){let j=Math.abs(t[l]-A[l]);if(j<=n){let AA=Math.min(n-1,n-j);o[l]===C?E[l]=(r[l]>t[l]?-1:1)*AA:Q[l]=(s[l]>A[l]?-1:1)*AA}}if(e!==i){let j=l==="x"?"y":"x",AA=o[l]===a[j],O=r[j]>s[j],DA=r[j]=J?(d=(F.x+_.x)/2,B=I[0].y):(d=I[0].x,B=(F.y+_.y)/2)}return[[t,{x:r.x+E.x,y:r.y+E.y},...I,{x:s.x+Q.x,y:s.y+Q.y},A],d,B]}function IJA(t,e,A,i){let n=Math.min(psA(t,e)/2,psA(e,A)/2,i),{x:o,y:a}=e;if(t.x===o&&o===A.x||t.y===a&&a===A.y)return`L${o} ${a}`;if(t.y===a){let g=t.x{let f="";return Q>0&&Q{let E=I*B;if(E<=0)return o[0];if(E>=I)return o[g-1];let Q=0,f=g-1;for(;Q>>1;C[_](this.source()?.shouldLoad()??!1)&&(this.target()?.shouldLoad()??!1)),this.renderOrder=jA(0),this.detached=Ue(()=>{let A=this.source(),i=this.target();if(!A||!i)return!0;let n=!1,o=!1;return this.edge.sourceHandle?n=!!A.handles().find(a=>a.rawHandle.id===this.edge.sourceHandle):n=!!A.handles().find(a=>a.rawHandle.type==="source"),this.edge.targetHandle?o=!!i.handles().find(a=>a.rawHandle.id===this.edge.targetHandle):o=!!i.handles().find(a=>a.rawHandle.type==="target"),!n||!o}),this.detached$=$n(this.detached),this.path=Ue(()=>{let A=this.sourceHandle(),i=this.targetHandle();if(!A||!i)return{path:""};let n=this.getPathFactoryParams(A,i);switch(this.curve){case"straight":return tK(n);case"bezier":return iK(n);case"smooth-step":return zh(n);case"step":return zh(n,0);default:return this.curve(n)}}),this.sourceHandle=u7(A=>{let i=null;return this.floating?i=this.closestHandles().sourceHandle:this.edge.sourceHandle?i=this.source()?.handles().find(n=>n.rawHandle.id===this.edge.sourceHandle)??null:i=this.source()?.handles().find(n=>n.rawHandle.type==="source")??null,i===null?A:i}),this.targetHandle=u7(A=>{let i=null;return this.floating?i=this.closestHandles().targetHandle:this.edge.targetHandle?i=this.target()?.handles().find(n=>n.rawHandle.id===this.edge.targetHandle)??null:i=this.target()?.handles().find(n=>n.rawHandle.type==="target")??null,i===null?A:i}),this.closestHandles=Ue(()=>{let A=this.source(),i=this.target();if(!A||!i)return{sourceHandle:null,targetHandle:null};let n=this.flowEntitiesService.connection().mode==="strict"?A.handles().filter(g=>g.rawHandle.type==="source"):A.handles(),o=this.flowEntitiesService.connection().mode==="strict"?i.handles().filter(g=>g.rawHandle.type==="target"):i.handles();if(n.length===0||o.length===0)return{sourceHandle:null,targetHandle:null};let a=1/0,r=null,s=null;for(let g of n)for(let l of o){let C=g.pointAbsolute(),I=l.pointAbsolute(),d=Math.sqrt(Math.pow(C.x-I.x,2)+Math.pow(C.y-I.y,2));d{let A=this.edge.markers?.start;return A?`url(#${Oh(JSON.stringify(A))})`:""}),this.markerEndUrl=Ue(()=>{let A=this.edge.markers?.end;return A?`url(#${Oh(JSON.stringify(A))})`:""}),this.context={$implicit:{edge:this.edge,path:Ue(()=>this.path().path),markerStart:this.markerStartUrl,markerEnd:this.markerEndUrl,selected:this.selected.asReadonly(),shouldLoad:this.shouldLoad}},this.edgeLabels={},this.type=e.type??"default",this.curve=e.curve??"bezier",this.reconnectable=e.reconnectable??!1,this.floating=e.floating??!1,e.edgeLabels?.start&&(this.edgeLabels.start=new _m(e.edgeLabels.start)),e.edgeLabels?.center&&(this.edgeLabels.center=new _m(e.edgeLabels.center)),e.edgeLabels?.end&&(this.edgeLabels.end=new _m(e.edgeLabels.end))}getPathFactoryParams(e,A){return{mode:"edge",edge:this.edge,sourcePoint:e.pointAbsolute(),targetPoint:A.pointAbsolute(),sourcePosition:e.rawHandle.position,targetPosition:A.rawHandle.position,allEdges:this.flowEntitiesService.rawEdges(),allNodes:this.flowEntitiesService.rawNodes()}}},f7=class{static nodes(e,A){let i=new Map;return A.forEach(n=>i.set(n.rawNode,n)),e.map(n=>i.get(n)??new sJA(n))}static edges(e,A){let i=new Map;return A.forEach(n=>i.set(n.edge,n)),e.map(n=>i.has(n)?i.get(n):new nK(n))}},dJA=25,oK=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.nodesPositionChange$=$n(this.entitiesService.nodes).pipe(Si(A=>fi(...A.map(i=>i.point$.pipe(Fg(1),fe(()=>i))))),fe(A=>[{type:"position",id:A.rawNode.id,point:A.point()},...this.entitiesService.nodes().filter(i=>i!==A&&i.selected()).map(i=>({type:"position",id:i.rawNode.id,point:i.point()}))])),this.nodeSizeChange$=$n(this.entitiesService.nodes).pipe(Si(A=>fi(...A.map(i=>i.size$.pipe(Fg(1),fe(()=>i))))),fe(A=>[{type:"size",id:A.rawNode.id,size:A.size()}])),this.nodeAddChange$=$n(this.entitiesService.nodes).pipe(h2(),fe(([A,i])=>i.filter(n=>!A.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(i=>({type:"add",id:i.rawNode.id})))),this.nodeRemoveChange$=$n(this.entitiesService.nodes).pipe(h2(),fe(([A,i])=>A.filter(n=>!i.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(i=>({type:"remove",id:i.rawNode.id})))),this.nodeSelectedChange$=$n(this.entitiesService.nodes).pipe(Si(A=>fi(...A.map(i=>i.selected$.pipe(Vl(),Fg(1),fe(()=>i))))),fe(A=>[{type:"select",id:A.rawNode.id,selected:A.selected()}])),this.changes$=fi(this.nodesPositionChange$,this.nodeSizeChange$,this.nodeAddChange$,this.nodeRemoveChange$,this.nodeSelectedChange$).pipe(fB(Wm,dJA))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),BJA=(t,e)=>t.length===e.length&&[...new Set([...t,...e])].every(A=>t.filter(i=>i===A).length===e.filter(i=>i===A).length),aK=(()=>{class t{constructor(){this.entitiesService=h(Sg),this.edgeDetachedChange$=fi($n(Ue(()=>{let A=this.entitiesService.nodes();return la(this.entitiesService.edges).filter(({source:n,target:o})=>!A.includes(n())||!A.includes(o()))})),$n(this.entitiesService.edges).pipe(Si(A=>lU(...A.map(i=>i.detached$.pipe(fe(()=>i))))),fe(A=>A.filter(i=>i.detached())),Fg(2))).pipe(Vl(BJA),Ze(A=>!!A.length),fe(A=>A.map(({edge:i})=>({type:"detached",id:i.id})))),this.edgeAddChange$=$n(this.entitiesService.edges).pipe(h2(),fe(([A,i])=>i.filter(n=>!A.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(({edge:i})=>({type:"add",id:i.id})))),this.edgeRemoveChange$=$n(this.entitiesService.edges).pipe(h2(),fe(([A,i])=>A.filter(n=>!i.includes(n))),Ze(A=>!!A.length),fe(A=>A.map(({edge:i})=>({type:"remove",id:i.id})))),this.edgeSelectChange$=$n(this.entitiesService.edges).pipe(Si(A=>fi(...A.map(i=>i.selected$.pipe(Vl(),Fg(1),fe(()=>i))))),fe(A=>[{type:"select",id:A.edge.id,selected:A.selected()}])),this.changes$=fi(this.edgeDetachedChange$,this.edgeAddChange$,this.edgeRemoveChange$,this.edgeSelectChange$).pipe(fB(Wm))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),EJA=(()=>{class t{constructor(){this.nodesChangeService=h(oK),this.edgesChangeService=h(aK),this.onNodesChange=Dn(this.nodesChangeService.changes$),this.onNodesChangePosition=Dn(this.nodeChangesOfType("position"),{alias:"onNodesChange.position"}),this.onNodesChangePositionSignle=Dn(this.singleChange(this.nodeChangesOfType("position")),{alias:"onNodesChange.position.single"}),this.onNodesChangePositionMany=Dn(this.manyChanges(this.nodeChangesOfType("position")),{alias:"onNodesChange.position.many"}),this.onNodesChangeSize=Dn(this.nodeChangesOfType("size"),{alias:"onNodesChange.size"}),this.onNodesChangeSizeSingle=Dn(this.singleChange(this.nodeChangesOfType("size")),{alias:"onNodesChange.size.single"}),this.onNodesChangeSizeMany=Dn(this.manyChanges(this.nodeChangesOfType("size")),{alias:"onNodesChange.size.many"}),this.onNodesChangeAdd=Dn(this.nodeChangesOfType("add"),{alias:"onNodesChange.add"}),this.onNodesChangeAddSingle=Dn(this.singleChange(this.nodeChangesOfType("add")),{alias:"onNodesChange.add.single"}),this.onNodesChangeAddMany=Dn(this.manyChanges(this.nodeChangesOfType("add")),{alias:"onNodesChange.add.many"}),this.onNodesChangeRemove=Dn(this.nodeChangesOfType("remove"),{alias:"onNodesChange.remove"}),this.onNodesChangeRemoveSingle=Dn(this.singleChange(this.nodeChangesOfType("remove")),{alias:"onNodesChange.remove.single"}),this.onNodesChangeRemoveMany=Dn(this.manyChanges(this.nodeChangesOfType("remove")),{alias:"onNodesChange.remove.many"}),this.onNodesChangeSelect=Dn(this.nodeChangesOfType("select"),{alias:"onNodesChange.select"}),this.onNodesChangeSelectSingle=Dn(this.singleChange(this.nodeChangesOfType("select")),{alias:"onNodesChange.select.single"}),this.onNodesChangeSelectMany=Dn(this.manyChanges(this.nodeChangesOfType("select")),{alias:"onNodesChange.select.many"}),this.onEdgesChange=Dn(this.edgesChangeService.changes$),this.onNodesChangeDetached=Dn(this.edgeChangesOfType("detached"),{alias:"onEdgesChange.detached"}),this.onNodesChangeDetachedSingle=Dn(this.singleChange(this.edgeChangesOfType("detached")),{alias:"onEdgesChange.detached.single"}),this.onNodesChangeDetachedMany=Dn(this.manyChanges(this.edgeChangesOfType("detached")),{alias:"onEdgesChange.detached.many"}),this.onEdgesChangeAdd=Dn(this.edgeChangesOfType("add"),{alias:"onEdgesChange.add"}),this.onEdgeChangeAddSingle=Dn(this.singleChange(this.edgeChangesOfType("add")),{alias:"onEdgesChange.add.single"}),this.onEdgeChangeAddMany=Dn(this.manyChanges(this.edgeChangesOfType("add")),{alias:"onEdgesChange.add.many"}),this.onEdgeChangeRemove=Dn(this.edgeChangesOfType("remove"),{alias:"onEdgesChange.remove"}),this.onEdgeChangeRemoveSingle=Dn(this.singleChange(this.edgeChangesOfType("remove")),{alias:"onEdgesChange.remove.single"}),this.onEdgeChangeRemoveMany=Dn(this.manyChanges(this.edgeChangesOfType("remove")),{alias:"onEdgesChange.remove.many"}),this.onEdgeChangeSelect=Dn(this.edgeChangesOfType("select"),{alias:"onEdgesChange.select"}),this.onEdgeChangeSelectSingle=Dn(this.singleChange(this.edgeChangesOfType("select")),{alias:"onEdgesChange.select.single"}),this.onEdgeChangeSelectMany=Dn(this.manyChanges(this.edgeChangesOfType("select")),{alias:"onEdgesChange.select.many"})}nodeChangesOfType(A){return this.nodesChangeService.changes$.pipe(fe(i=>i.filter(n=>n.type===A)),Ze(i=>!!i.length))}edgeChangesOfType(A){return this.edgesChangeService.changes$.pipe(fe(i=>i.filter(n=>n.type===A)),Ze(i=>!!i.length))}singleChange(A){return A.pipe(Ze(i=>i.length===1),fe(([i])=>i))}manyChanges(A){return A.pipe(Ze(i=>i.length>1))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","changesController",""]],outputs:{onNodesChange:"onNodesChange",onNodesChangePosition:"onNodesChange.position",onNodesChangePositionSignle:"onNodesChange.position.single",onNodesChangePositionMany:"onNodesChange.position.many",onNodesChangeSize:"onNodesChange.size",onNodesChangeSizeSingle:"onNodesChange.size.single",onNodesChangeSizeMany:"onNodesChange.size.many",onNodesChangeAdd:"onNodesChange.add",onNodesChangeAddSingle:"onNodesChange.add.single",onNodesChangeAddMany:"onNodesChange.add.many",onNodesChangeRemove:"onNodesChange.remove",onNodesChangeRemoveSingle:"onNodesChange.remove.single",onNodesChangeRemoveMany:"onNodesChange.remove.many",onNodesChangeSelect:"onNodesChange.select",onNodesChangeSelectSingle:"onNodesChange.select.single",onNodesChangeSelectMany:"onNodesChange.select.many",onEdgesChange:"onEdgesChange",onNodesChangeDetached:"onEdgesChange.detached",onNodesChangeDetachedSingle:"onEdgesChange.detached.single",onNodesChangeDetachedMany:"onEdgesChange.detached.many",onEdgesChangeAdd:"onEdgesChange.add",onEdgeChangeAddSingle:"onEdgesChange.add.single",onEdgeChangeAddMany:"onEdgesChange.add.many",onEdgeChangeRemove:"onEdgesChange.remove",onEdgeChangeRemoveSingle:"onEdgesChange.remove.single",onEdgeChangeRemoveMany:"onEdgesChange.remove.many",onEdgeChangeSelect:"onEdgesChange.select",onEdgeChangeSelectSingle:"onEdgesChange.select.single",onEdgeChangeSelectMany:"onEdgesChange.select.many"}})}}return t})(),D7=(()=>{class t{constructor(){this.host=h(ge).nativeElement,this.initialTouch$=new XA,this.prevTouchEvent=null,this.mouseMovement$=nl(this.host,"mousemove").pipe(fe(A=>({x:A.clientX,y:A.clientY,movementX:A.movementX,movementY:A.movementY,target:A.target,originalEvent:A})),fB(uB),u2()),this.touchMovement$=fi(this.initialTouch$,nl(this.host,"touchmove")).pipe(oi(A=>A.preventDefault()),fe(A=>{let i=A.touches[0]?.clientX??0,n=A.touches[0]?.clientY??0,o=this.prevTouchEvent?A.touches[0].pageX-this.prevTouchEvent.touches[0].pageX:0,a=this.prevTouchEvent?A.touches[0].pageY-this.prevTouchEvent.touches[0].pageY:0,r=document.elementFromPoint(i,n);return{x:i,y:n,movementX:o,movementY:a,target:r,originalEvent:A}}),oi(A=>this.prevTouchEvent=A.originalEvent),fB(uB),u2()),this.pointerMovement$=fi(this.mouseMovement$,this.touchMovement$),this.touchEnd$=nl(this.host,"touchend").pipe(fe(A=>{let i=A.changedTouches[0]?.clientX??0,n=A.changedTouches[0]?.clientY??0,o=document.elementFromPoint(i,n);return{x:i,y:n,target:o,originalEvent:A}}),oi(()=>this.prevTouchEvent=null),u2()),this.mouseUp$=nl(this.host,"mouseup").pipe(fe(A=>{let i=A.clientX,n=A.clientY,o=A.target;return{x:i,y:n,target:o,originalEvent:A}}),u2()),this.documentPointerEnd$=fi(nl(document,"mouseup"),nl(document,"touchend")).pipe(u2())}setInitialTouch(A){this.initialTouch$.next(A)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","rootPointer",""]]})}}return t})(),Lm=(()=>{class t{constructor(){this.pointerMovementDirective=h(D7),this.rootSvg=h(w7).element,this.host=h(ge).nativeElement,this.svgCurrentSpacePoint=Ue(()=>{let A=this.pointerMovement();return A?this.documentPointToFlowPoint({x:A.x,y:A.y}):{x:0,y:0}}),this.pointerMovement=Fs(this.pointerMovementDirective.pointerMovement$)}documentPointToFlowPoint(A){let i=this.rootSvg.createSVGPoint();return i.x=A.x,i.y=A.y,i.matrixTransform(this.host.getScreenCTM().inverse())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["g","spacePointContext",""]]})}}return t})();function QJA(t){return typeof t=="string"?{type:"solid",color:t}:t}function m7(t,e,A){let i=A.value;return A.value=function(...n){queueMicrotask(()=>{i?.apply(this,n)})},A}var FsA=(()=>{class t{constructor(){this.toolbars=jA([]),this.nodeToolbarsMap=Ue(()=>{let A=new Map;return this.toolbars().forEach(i=>{let n=A.get(i.node)??[];A.set(i.node,[...n,i])}),A})}addToolbar(A){this.toolbars.update(i=>[...i,A])}removeToolbar(A){this.toolbars.update(i=>i.filter(n=>n!==A))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return gu([m7],t.prototype,"addToolbar",null),gu([m7],t.prototype,"removeToolbar",null),t})();function y7(t,e){return new $i(A=>{let i=new ResizeObserver(n=>{e.run(()=>A.next(n))});return t.forEach(n=>i.observe(n)),()=>i.disconnect()})}var hJA=(()=>{class t{constructor(){this.zone=h(Oe),this.destroyRef=h(qa),this.settingsService=h(bs),this.model=rt.required(),this.edgeModel=rt.required(),this.point=rt({x:0,y:0}),this.htmlTemplate=rt(),this.edgeLabelWrapperRef=ca.required("edgeLabelWrapper"),this.edgeLabelPoint=Ue(()=>{let A=this.point(),{width:i,height:n}=this.model().size();return{x:A.x-i/2,y:A.y-n/2}}),this.edgeLabelStyle=Ue(()=>{let A=this.model().edgeLabel;if(A.type==="default"&&A.style){let i=this.settingsService.background(),n="transparent";return i.type==="dots"&&(n=i.backgroundColor??"#fff"),i.type==="solid"&&(n=i.color),A.style.backgroundColor=A.style.backgroundColor??n,A.style}return null})}ngAfterViewInit(){let A=this.edgeLabelWrapperRef().nativeElement;y7([A],this.zone).pipe(cn(null),oi(()=>{let i=A.clientWidth+h7,n=A.clientHeight+h7;this.model().size.set({width:i,height:n})}),Tr(this.destroyRef)).subscribe()}getLabelContext(){return{$implicit:{edge:this.edgeModel().edge,label:this.model().edgeLabel}}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","edgeLabel",""]],viewQuery:function(i,n){i&1&&rs(n.edgeLabelWrapperRef,uKA,5),i&2&&Dr()},inputs:{model:[1,"model"],edgeModel:[1,"edgeModel"],point:[1,"point"],htmlTemplate:[1,"htmlTemplate"]},attrs:fKA,decls:1,vars:1,consts:[["edgeLabelWrapper",""],[1,"edge-label-wrapper"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(i,n){if(i&1&&V(0,yKA,2,2),i&2){let o;W((o=n.model())?0:-1,o)}},dependencies:[sl],styles:[".edge-label-wrapper[_ngcontent-%COMP%]{width:max-content;margin-top:1px;margin-left:1px}"],changeDetection:0})}}return t})();function _sA(t){let e={};return t.sourceHandle.rawHandle.type==="source"?(e.source=t.source,e.sourceHandle=t.sourceHandle):(e.source=t.target,e.sourceHandle=t.targetHandle),t.targetHandle.rawHandle.type==="target"?(e.target=t.target,e.targetHandle=t.targetHandle):(e.target=t.source,e.targetHandle=t.sourceHandle),e}var LsA=(()=>{class t{constructor(){this.statusService=h(d1),this.flowEntitiesService=h(Sg),this.onConnect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="connection-end"),fe(A=>C7(A,this.isStrictMode())),oi(()=>this.statusService.setIdleStatus()),Ze(A=>this.flowEntitiesService.connection().validator(A)))),this.connect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="connection-end"),fe(A=>C7(A,this.isStrictMode())),oi(()=>this.statusService.setIdleStatus()),Ze(A=>this.flowEntitiesService.connection().validator(A)))),this.onReconnect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="reconnection-end"),fe(A=>{let i=C7(A,this.isStrictMode()),n=A.payload.oldEdge.edge;return{connection:i,oldEdge:n}}),oi(()=>this.statusService.setIdleStatus()),Ze(({connection:A})=>this.flowEntitiesService.connection().validator(A)))),this.reconnect=Dn($n(this.statusService.status).pipe(Ze(A=>A.state==="reconnection-end"),fe(A=>{let i=C7(A,this.isStrictMode()),n=A.payload.oldEdge.edge;return{connection:i,oldEdge:n}}),oi(()=>this.statusService.setIdleStatus()),Ze(({connection:A})=>this.flowEntitiesService.connection().validator(A)))),this.isStrictMode=Ue(()=>this.flowEntitiesService.connection().mode==="strict")}startConnection(A){this.statusService.setConnectionStartStatus(A.parentNode,A)}startReconnection(A,i){this.statusService.setReconnectionStartStatus(A.parentNode,A,i)}validateConnection(A){let i=this.statusService.status();if(i.state==="connection-start"||i.state==="reconnection-start"){let n=i.state==="reconnection-start",o=i.payload.source,a=A.parentNode,r=i.payload.sourceHandle,s=A;if(this.isStrictMode()){let l=_sA({source:i.payload.source,sourceHandle:i.payload.sourceHandle,target:A.parentNode,targetHandle:A});o=l.source,a=l.target,r=l.sourceHandle,s=l.targetHandle}let g=this.flowEntitiesService.connection().validator({source:o.rawNode.id,target:a.rawNode.id,sourceHandle:r.rawHandle.id,targetHandle:s.rawHandle.id});A.state.set(g?"valid":"invalid"),n?this.statusService.setReconnectionValidationStatus(g,i.payload.source,A.parentNode,i.payload.sourceHandle,A,i.payload.oldEdge):this.statusService.setConnectionValidationStatus(g,i.payload.source,A.parentNode,i.payload.sourceHandle,A)}}resetValidateConnection(A){A.state.set("idle");let i=this.statusService.status();(i.state==="connection-validation"||i.state==="reconnection-validation")&&(i.state==="reconnection-validation"?this.statusService.setReconnectionStartStatus(i.payload.source,i.payload.sourceHandle,i.payload.oldEdge):this.statusService.setConnectionStartStatus(i.payload.source,i.payload.sourceHandle))}endConnection(){let A=this.statusService.status();if(A.state==="connection-validation"||A.state==="reconnection-validation"){let i=A.state==="reconnection-validation",n=A.payload.source,o=A.payload.sourceHandle,a=A.payload.target,r=A.payload.targetHandle;i?this.statusService.setReconnectionEndStatus(n,a,o,r,A.payload.oldEdge):this.statusService.setConnectionEndStatus(n,a,o,r)}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","onConnect",""],["","onReconnect",""],["","connect",""],["","reconnect",""]],outputs:{onConnect:"onConnect",connect:"connect",onReconnect:"onReconnect",reconnect:"reconnect"}})}}return t})();function C7(t,e){let A=t.payload.source,i=t.payload.target,n=t.payload.sourceHandle,o=t.payload.targetHandle;if(e){let l=_sA({source:t.payload.source,sourceHandle:t.payload.sourceHandle,target:t.payload.target,targetHandle:t.payload.targetHandle});A=l.source,i=l.target,n=l.sourceHandle,o=l.targetHandle}let a=A.rawNode.id,r=i.rawNode.id,s=n.rawHandle.id,g=o.rawHandle.id;return{source:a,target:r,sourceHandle:s,targetHandle:g}}var p7=(()=>{class t{constructor(){this.flowEntitiesService=h(Sg),this.flowSettingsService=h(bs),this.edges=Ue(()=>this.flowSettingsService.optimization().virtualization?this.viewportEdges().sort((A,i)=>A.renderOrder()-i.renderOrder()):[...this.flowEntitiesService.validEdges()].sort((A,i)=>A.renderOrder()-i.renderOrder())),this.viewportEdges=Ue(()=>this.flowEntitiesService.validEdges().filter(A=>{let i=A.sourceHandle(),n=A.targetHandle();return i&&n})),this.maxOrder=Ue(()=>Math.max(...this.flowEntitiesService.validEdges().map(A=>A.renderOrder())))}pull(A){A.renderOrder()!==0&&this.maxOrder()===A.renderOrder()||A.renderOrder.set(this.maxOrder()+1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function uJA(t){return window.TouchEvent&&t instanceof TouchEvent}var lK=(()=>{class t{constructor(){this.hostElement=h(ge).nativeElement,this.pointerMovementDirective=h(D7),this.pointerOver=jo(),this.pointerOut=jo(),this.pointerStart=jo(),this.pointerEnd=jo(),this.wasPointerOver=!1,this.touchEnd=this.pointerMovementDirective.touchEnd$.pipe(Ze(({target:A})=>A===this.hostElement),oi(({originalEvent:A})=>this.pointerEnd.emit(A)),Tr()).subscribe(),this.touchOverOut=this.pointerMovementDirective.touchMovement$.pipe(oi(({target:A,originalEvent:i})=>{this.handleTouchOverAndOut(A,i)}),Tr()).subscribe()}onPointerStart(A){this.pointerStart.emit(A),uJA(A)&&this.pointerMovementDirective.setInitialTouch(A)}onPointerEnd(A){this.pointerEnd.emit(A)}onMouseOver(A){this.pointerOver.emit(A)}onMouseOut(A){this.pointerOut.emit(A)}handleTouchOverAndOut(A,i){A===this.hostElement?(this.pointerOver.emit(i),this.wasPointerOver=!0):(this.wasPointerOver&&this.pointerOut.emit(i),this.wasPointerOver=!1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","pointerStart",""],["","pointerEnd",""],["","pointerOver",""],["","pointerOut",""]],hostBindings:function(i,n){i&1&&tA("mousedown",function(a){return n.onPointerStart(a)})("touchstart",function(a){return n.onPointerStart(a)})("mouseup",function(a){return n.onPointerEnd(a)})("mouseover",function(a){return n.onMouseOver(a)})("mouseout",function(a){return n.onMouseOut(a)})},outputs:{pointerOver:"pointerOver",pointerOut:"pointerOut",pointerStart:"pointerStart",pointerEnd:"pointerEnd"}})}}return t})(),GsA=(()=>{class t{constructor(){this.injector=h(ft),this.selectionService=h(Um),this.flowSettingsService=h(bs),this.flowStatusService=h(d1),this.edgeRenderingService=h(p7),this.connectionController=h(LsA,{optional:!0}),this.model=rt.required(),this.edgeTemplate=rt(),this.edgeLabelHtmlTemplate=rt(),this.isReconnecting=Ue(()=>{let A=this.flowStatusService.status();return(A.state==="reconnection-start"||A.state==="reconnection-validation")&&A.payload.oldEdge===this.model()})}select(){this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(this.model())}pull(){this.flowSettingsService.elevateEdgesOnSelect()&&this.edgeRenderingService.pull(this.model())}startReconnection(A,i){A.stopPropagation(),this.connectionController?.startReconnection(i,this.model())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","edge",""]],hostAttrs:[1,"selectable"],hostVars:2,hostBindings:function(i,n){i&2&&wn("visibility",n.isReconnecting()?"hidden":"visible")},inputs:{model:[1,"model"],edgeTemplate:[1,"edgeTemplate"],edgeLabelHtmlTemplate:[1,"edgeLabelHtmlTemplate"]},attrs:vKA,decls:6,vars:6,consts:[[1,"edge"],[1,"interactive-edge",3,"click"],[3,"ngTemplateOutlet","ngTemplateOutletContext","ngTemplateOutletInjector"],["edgeLabel","",3,"model","point","edgeModel","htmlTemplate"],["r","10",1,"reconnect-handle"],["r","10",1,"reconnect-handle",3,"pointerStart"]],template:function(i,n){if(i&1&&(V(0,bKA,2,6),V(1,kKA,1,1),V(2,xKA,1,1),V(3,NKA,1,1),V(4,_KA,1,1),V(5,KKA,2,2)),i&2){let o,a,r;W(n.model().type==="default"?0:-1),p(),W(n.model().type==="template"&&n.edgeTemplate()?1:-1),p(),W((o=n.model().edgeLabels.start)?2:-1,o),p(),W((a=n.model().edgeLabels.center)?3:-1,a),p(),W((r=n.model().edgeLabels.end)?4:-1,r),p(),W(n.model().sourceHandle()&&n.model().targetHandle()?5:-1)}},dependencies:[sl,hJA,lK],styles:[".edge[_ngcontent-%COMP%]{fill:none;stroke-width:2;stroke:#b1b1b7}.edge_selected[_ngcontent-%COMP%]{stroke-width:2.5;stroke:#0f4c75}.interactive-edge[_ngcontent-%COMP%]{fill:none;stroke-width:20;stroke:transparent}.reconnect-handle[_ngcontent-%COMP%]{fill:transparent;cursor:move}"],changeDetection:0})}}return t})(),rK=(()=>{class t{constructor(){this.node=jA(null)}createHandle(A){let i=this.node();i&&i.handles.update(n=>[...n,A])}destroyHandle(A){let i=this.node();i&&i.handles.update(n=>n.filter(o=>o!==A))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return gu([m7],t.prototype,"createHandle",null),t})(),fJA=(()=>{class t{constructor(){this.handleModel=rt.required({alias:"handleSizeController"}),this.handleWrapper=h(ge)}ngAfterViewInit(){let A=this.handleWrapper.nativeElement,i=A.getBBox(),n=mJA(A);this.handleModel().size.set({width:i.width+n,height:i.height+n})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","handleSizeController",""]],inputs:{handleModel:[1,"handleSizeController","handleModel"]}})}}return t})();function mJA(t){let e=t.firstElementChild;if(e){let A=getComputedStyle(e).strokeWidth,i=Number(A.replace("px",""));return isNaN(i)?0:i}return 0}var pJA=(()=>{class t{constructor(){this.selected=rt(!1)}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["default-node"]],hostVars:2,hostBindings:function(i,n){i&2&&ne("selected",n.selected())},inputs:{selected:[1,"selected"]},ngContentSelectors:MsA,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),Ke(0))},styles:["[_nghost-%COMP%]{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}.selected[_nghost-%COMP%]{border-width:2px}"],changeDetection:0})}}return t})(),wJA=(()=>{class t{get model(){return this.nodeAccessor.model()}constructor(){this.nodeAccessor=h(Ph),this.rootPointer=h(D7),this.viewportService=h(dB),this.spacePointContext=h(Lm),this.settingsService=h(bs),this.hostRef=h(ge),this.resizable=rt(),this.resizerColor=rt("#2e414c"),this.gap=rt(1.5),this.resizer=ca.required("resizer"),this.lineGap=3,this.handleSize=6,this.resizeSide=null,this.zoom=Ue(()=>this.viewportService.readableViewport().zoom??0),this.minWidth=0,this.minHeight=0,this.maxWidth=1/0,this.maxHeight=1/0,this.resizeOnGlobalMouseMove=this.rootPointer.pointerMovement$.pipe(Ze(()=>this.resizeSide!==null),Ze(A=>A.movementX!==0||A.movementY!==0),oi(A=>this.resize(A)),Tr()).subscribe(),this.endResizeOnGlobalMouseUp=this.rootPointer.documentPointerEnd$.pipe(oi(()=>this.endResize()),Tr()).subscribe(),Ga(()=>{let A=this.resizable();typeof A=="boolean"?this.model.resizable.set(A):this.model.resizable.set(!0)},{allowSignalWrites:!0})}ngOnInit(){this.model.controlledByResizer.set(!0),this.model.resizerTemplate.set(this.resizer())}ngOnDestroy(){this.model.controlledByResizer.set(!1)}ngAfterViewInit(){this.minWidth=+getComputedStyle(this.hostRef.nativeElement).minWidth.replace("px","")||0,this.minHeight=+getComputedStyle(this.hostRef.nativeElement).minHeight.replace("px","")||0,this.maxWidth=+getComputedStyle(this.hostRef.nativeElement).maxWidth.replace("px","")||1/0,this.maxHeight=+getComputedStyle(this.hostRef.nativeElement).maxHeight.replace("px","")||1/0}startResize(A,i){i.stopPropagation(),this.resizeSide=A,this.model.resizing.set(!0)}resize(A){if(!this.resizeSide)return;let i=DJA(A.movementX,A.movementY,this.zoom()),n=this.applyResize(this.resizeSide,this.model,i,this.getDistanceToEdge(A)),{x:o,y:a,width:r,height:s}=yJA(n,this.model,this.resizeSide,this.minWidth,this.minHeight,this.maxWidth,this.maxHeight);this.model.setPoint({x:o,y:a}),this.model.width.set(r),this.model.height.set(s)}endResize(){this.resizeSide=null,this.model.resizing.set(!1)}getDistanceToEdge(A){let i=this.spacePointContext.documentPointToFlowPoint({x:A.x,y:A.y}),{x:n,y:o}=this.model.globalPoint();return{left:i.x-n,right:i.x-(n+this.model.width()),top:i.y-o,bottom:i.y-(o+this.model.height())}}applyResize(A,i,n,o){let{x:a,y:r}=i.point(),s=i.width(),g=i.height(),[l,C]=this.settingsService.snapGrid();switch(A){case"left":{let I=n.x+o.left,d=kg(a+I,l),B=d-a;return{x:d,y:r,width:s-B,height:g}}case"right":{let I=n.x+o.right,d=kg(s+I,l);return{x:a,y:r,width:d,height:g}}case"top":{let I=n.y+o.top,d=kg(r+I,C),B=d-r;return{x:a,y:d,width:s,height:g-B}}case"bottom":{let I=n.y+o.bottom,d=kg(g+I,C);return{x:a,y:r,width:s,height:d}}case"top-left":{let I=n.x+o.left,d=n.y+o.top,B=kg(a+I,l),E=kg(r+d,C),Q=B-a,f=E-r;return{x:B,y:E,width:s-Q,height:g-f}}case"top-right":{let I=n.x+o.right,d=n.y+o.top,B=kg(r+d,C),E=B-r;return{x:a,y:B,width:kg(s+I,l),height:g-E}}case"bottom-left":{let I=n.x+o.left,d=n.y+o.bottom,B=kg(a+I,l),E=B-a;return{x:B,y:r,width:s-E,height:kg(g+d,C)}}case"bottom-right":{let I=n.x+o.right,d=n.y+o.bottom;return{x:a,y:r,width:kg(s+I,l),height:kg(g+d,C)}}}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["","resizable",""]],viewQuery:function(i,n){i&1&&rs(n.resizer,UKA,5),i&2&&Dr()},inputs:{resizable:[1,"resizable"],resizerColor:[1,"resizerColor"],gap:[1,"gap"]},attrs:JKA,ngContentSelectors:MsA,decls:3,vars:0,consts:[["resizer",""],["stroke-width","2",1,"top",3,"pointerStart"],["stroke-width","2",1,"left",3,"pointerStart"],["stroke-width","2",1,"bottom",3,"pointerStart"],["stroke-width","2",1,"right",3,"pointerStart"],[1,"top-left",3,"pointerStart"],[1,"top-right",3,"pointerStart"],[1,"bottom-left",3,"pointerStart"],[1,"bottom-right",3,"pointerStart"]],template:function(i,n){i&1&&(Yt(),pt(0,YKA,9,40,"ng-template",null,0,w2),Ke(2))},dependencies:[lK],styles:[".top[_ngcontent-%COMP%]{cursor:n-resize}.left[_ngcontent-%COMP%]{cursor:w-resize}.right[_ngcontent-%COMP%]{cursor:e-resize}.bottom[_ngcontent-%COMP%]{cursor:s-resize}.top-left[_ngcontent-%COMP%]{cursor:nw-resize}.top-right[_ngcontent-%COMP%]{cursor:ne-resize}.bottom-left[_ngcontent-%COMP%]{cursor:sw-resize}.bottom-right[_ngcontent-%COMP%]{cursor:se-resize}"],changeDetection:0})}}return gu([m7],t.prototype,"ngAfterViewInit",null),t})();function DJA(t,e,A){return{x:B7(t/A),y:B7(e/A)}}function yJA(t,e,A,i,n,o,a){let{x:r,y:s,width:g,height:l}=t;g=Math.max(g,0),l=Math.max(l,0),g=Math.max(i,g),l=Math.max(n,l),g=Math.min(o,g),l=Math.min(a,l),r=Math.min(r,e.point().x+e.width()-i),s=Math.min(s,e.point().y+e.height()-n),r=Math.max(r,e.point().x+e.width()-o),s=Math.max(s,e.point().y+e.height()-a);let C=e.parent();if(C){let d=C.width(),B=C.height(),E=e.point().x,Q=e.point().y;r=Math.max(r,0),s=Math.max(s,0),A.includes("left")&&r===0&&(g=Math.min(g,E+e.width())),A.includes("top")&&s===0&&(l=Math.min(l,Q+e.height())),g=Math.min(g,d-r),l=Math.min(l,B-s)}let I=ksA(e.children());return I&&(A.includes("left")&&(r=Math.min(r,e.point().x+e.width()-(I.x+I.width)),g=Math.max(g,I.x+I.width)),A.includes("right")&&(g=Math.max(g,I.x+I.width)),A.includes("bottom")&&(l=Math.max(l,I.y+I.height)),A.includes("top")&&(s=Math.min(s,e.point().y+e.height()-(I.y+I.height)),l=Math.max(l,I.y+I.height))),{x:r,y:s,width:g,height:l}}var sK=class{constructor(e,A){this.rawHandle=e,this.parentNode=A,this.strokeWidth=2,this.size=jA({width:10+2*this.strokeWidth,height:10+2*this.strokeWidth}),this.pointAbsolute=Ue(()=>({x:this.parentNode.globalPoint().x+this.hostOffset().x+this.sizeOffset().x,y:this.parentNode.globalPoint().y+this.hostOffset().y+this.sizeOffset().y})),this.state=jA("idle"),this.updateHostSizeAndPosition$=new XA,this.hostSize=Fs(this.updateHostSizeAndPosition$.pipe(fe(()=>this.getHostSize())),{initialValue:{width:0,height:0}}),this.hostPosition=Fs(this.updateHostSizeAndPosition$.pipe(fe(()=>({x:this.hostReference instanceof HTMLElement?this.hostReference.offsetLeft:0,y:this.hostReference instanceof HTMLElement?this.hostReference.offsetTop:0}))),{initialValue:{x:0,y:0}}),this.hostOffset=Ue(()=>{switch(this.rawHandle.position){case"left":return{x:-this.rawHandle.userOffsetX,y:-this.rawHandle.userOffsetY+this.hostPosition().y+this.hostSize().height/2};case"right":return{x:-this.rawHandle.userOffsetX+this.parentNode.size().width,y:-this.rawHandle.userOffsetY+this.hostPosition().y+this.hostSize().height/2};case"top":return{x:-this.rawHandle.userOffsetX+this.hostPosition().x+this.hostSize().width/2,y:-this.rawHandle.userOffsetY};case"bottom":return{x:-this.rawHandle.userOffsetX+this.hostPosition().x+this.hostSize().width/2,y:-this.rawHandle.userOffsetY+this.parentNode.size().height}}}),this.sizeOffset=Ue(()=>{switch(this.rawHandle.position){case"left":return{x:-(this.size().width/2),y:0};case"right":return{x:this.size().width/2,y:0};case"top":return{x:0,y:-(this.size().height/2)};case"bottom":return{x:0,y:this.size().height/2}}}),this.hostReference=this.rawHandle.hostReference,this.template=this.rawHandle.template,this.templateContext={$implicit:{point:this.hostOffset,state:this.state,node:this.parentNode.rawNode}}}updateHost(){this.updateHostSizeAndPosition$.next()}getHostSize(){return this.hostReference instanceof HTMLElement?{width:this.hostReference.offsetWidth,height:this.hostReference.offsetHeight}:this.hostReference instanceof SVGGraphicsElement?this.hostReference.getBBox():{width:0,height:0}}},cK=(()=>{class t{constructor(){this.injector=h(ft),this.handleService=h(rK),this.element=h(ge).nativeElement,this.destroyRef=h(qa),this.position=rt.required(),this.type=rt.required(),this.id=rt(),this.template=rt(),this.offsetX=rt(0),this.offsetY=rt(0)}ngOnInit(){or(this.injector,()=>{let A=this.handleService.node();if(A){let i=new sK({position:this.position(),type:this.type(),id:this.id(),hostReference:this.element.parentElement,template:this.template(),userOffsetX:this.offsetX(),userOffsetY:this.offsetY()},A);this.handleService.createHandle(i),requestAnimationFrame(()=>i.updateHost()),this.destroyRef.onDestroy(()=>this.handleService.destroyHandle(i))}})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["handle"]],inputs:{position:[1,"position"],type:[1,"type"],id:[1,"id"],template:[1,"template"],offsetX:[1,"offsetX"],offsetY:[1,"offsetY"]},decls:0,vars:0,template:function(i,n){},encapsulation:2,changeDetection:0})}}return t})(),vJA=(()=>{class t{constructor(){this.nodeAccessor=h(Ph),this.zone=h(Oe),this.destroyRef=h(qa),this.hostElementRef=h(ge)}ngOnInit(){this.nodeAccessor.model().handles$.pipe(Si(i=>y7([...i.map(n=>n.hostReference),this.hostElementRef.nativeElement],this.zone).pipe(fe(()=>i))),oi(i=>{i.forEach(n=>n.updateHost())}),Tr(this.destroyRef)).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","nodeHandlesController",""]]})}}return t})(),bJA=(()=>{class t{constructor(){this.nodeAccessor=h(Ph),this.zone=h(Oe),this.destroyRef=h(qa),this.hostElementRef=h(ge)}ngOnInit(){let A=this.nodeAccessor.model(),i=this.hostElementRef.nativeElement;fi(y7([i],this.zone)).pipe(cn(null),Ze(()=>!A.resizing()),oi(()=>{A.width.set(i.clientWidth),A.height.set(i.clientHeight)}),Tr(this.destroyRef)).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","nodeResizeController",""]]})}}return t})(),KsA=(()=>{class t{constructor(){this.injector=h(ft),this.handleService=h(rK),this.draggableService=h(SsA),this.flowStatusService=h(d1),this.nodeRenderingService=h(BB),this.flowSettingsService=h(bs),this.selectionService=h(Um),this.hostRef=h(ge),this.nodeAccessor=h(Ph),this.overlaysService=h(FsA),this.connectionController=h(LsA,{optional:!0}),this.model=rt.required(),this.nodeTemplate=rt(),this.nodeSvgTemplate=rt(),this.groupNodeTemplate=rt(),this.showMagnet=Ue(()=>this.flowStatusService.status().state==="connection-start"||this.flowStatusService.status().state==="connection-validation"||this.flowStatusService.status().state==="reconnection-start"||this.flowStatusService.status().state==="reconnection-validation"),this.toolbars=Ue(()=>this.overlaysService.nodeToolbarsMap().get(this.model()))}ngOnInit(){this.model().isVisible.set(!0),this.nodeAccessor.model.set(this.model()),this.handleService.node.set(this.model()),Ga(()=>{this.model().draggable()?this.draggableService.enable(this.hostRef.nativeElement,this.model()):this.draggableService.disable(this.hostRef.nativeElement)},{injector:this.injector})}ngOnDestroy(){this.model().isVisible.set(!1),this.draggableService.destroy(this.hostRef.nativeElement)}startConnection(A,i){A.stopPropagation(),this.connectionController?.startConnection(i)}validateConnection(A){this.connectionController?.validateConnection(A)}resetValidateConnection(A){this.connectionController?.resetValidateConnection(A)}endConnection(){this.connectionController?.endConnection()}pullNode(){this.flowSettingsService.elevateNodesOnSelect()&&this.nodeRenderingService.pullNode(this.model())}selectNode(){this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(this.model())}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","node",""]],hostAttrs:[1,"vflow-node"],inputs:{model:[1,"model"],nodeTemplate:[1,"nodeTemplate"],nodeSvgTemplate:[1,"nodeSvgTemplate"],groupNodeTemplate:[1,"groupNodeTemplate"]},features:[dt([rK,Ph])],attrs:TKA,decls:11,vars:7,consts:[[1,"selectable"],["nodeHandlesController","",1,"selectable"],["rx","5","ry","5",1,"default-group-node",3,"resizable","gap","resizerColor","default-group-node_selected","stroke","fill"],[1,"selectable",3,"click"],["nodeHandlesController","",3,"selected"],[3,"outerHTML"],["type","source","position","right"],["type","target","position","left"],["nodeHandlesController","","nodeResizeController","",1,"wrapper"],[3,"ngTemplateOutlet","ngTemplateOutletContext","ngTemplateOutletInjector"],["nodeHandlesController","",1,"selectable",3,"click"],[3,"ngComponentOutlet","ngComponentOutletInputs","ngComponentOutletInjector"],["rx","5","ry","5",1,"default-group-node",3,"click","resizable","gap","resizerColor"],[3,"ngTemplateOutlet"],["r","5",1,"default-handle"],[3,"handleSizeController"],[1,"magnet"],["r","5",1,"default-handle",3,"pointerStart","pointerEnd"],[3,"pointerStart","pointerEnd","handleSizeController"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"magnet",3,"pointerEnd","pointerOver","pointerOut"]],template:function(i,n){if(i&1&&(V(0,HKA,5,12,":svg:foreignObject",0),V(1,zKA,3,9,":svg:foreignObject",0),V(2,OKA,2,3,":svg:g",1),V(3,jKA,2,3),V(4,qKA,1,11,":svg:rect",2),V(5,VKA,2,3,":svg:g",1),V(6,XKA,1,1),Ut(7,nUA,4,4,null,null,Li),Ut(9,oUA,2,4,":svg:foreignObject",null,Li)),i&2){let o;W(n.model().rawNode.type==="default"?0:-1),p(),W(n.model().rawNode.type==="html-template"&&n.nodeTemplate()?1:-1),p(),W(n.model().rawNode.type==="svg-template"&&n.nodeSvgTemplate()?2:-1),p(),W(n.model().isComponentType?3:-1),p(),W(n.model().rawNode.type==="default-group"?4:-1),p(),W(n.model().rawNode.type==="template-group"&&n.groupNodeTemplate()?5:-1),p(),W((o=n.model().resizerTemplate())?6:-1,o),p(),Jt(n.model().handles()),p(2),Jt(n.toolbars())}},dependencies:[lK,pJA,cK,sl,D2,wJA,fJA,vJA,bJA,ls],styles:[".magnet[_ngcontent-%COMP%]{opacity:0}.wrapper[_ngcontent-%COMP%]{display:table-cell}.default-group-node[_ngcontent-%COMP%]{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected[_ngcontent-%COMP%]{stroke-width:2px}.default-handle[_ngcontent-%COMP%]{stroke:#fff;fill:#1b262c}"],changeDetection:0})}}return t})(),MJA=(()=>{class t{constructor(){this.flowStatusService=h(d1),this.spacePointContext=h(Lm),this.flowEntitiesService=h(Sg),this.model=rt.required(),this.template=rt(),this.path=Ue(()=>{let A=this.flowStatusService.status(),i=this.model().curve;if(A.state==="connection-start"||A.state==="reconnection-start"){let n=A.payload.sourceHandle,o=n.pointAbsolute(),a=n.rawHandle.position,r=this.spacePointContext.svgCurrentSpacePoint(),s=wsA(n.rawHandle.position),g=this.getPathFactoryParams(o,r,a,s);switch(i){case"straight":return tK(g).path;case"bezier":return iK(g).path;case"smooth-step":return zh(g).path;case"step":return zh(g,0).path;default:return i(g).path}}if(A.state==="connection-validation"||A.state==="reconnection-validation"){let n=A.payload.sourceHandle,o=n.pointAbsolute(),a=n.rawHandle.position,r=A.payload.targetHandle,s=A.payload.valid?r.pointAbsolute():this.spacePointContext.svgCurrentSpacePoint(),g=A.payload.valid?r.rawHandle.position:wsA(n.rawHandle.position),l=this.getPathFactoryParams(o,s,a,g);switch(i){case"straight":return tK(l).path;case"bezier":return iK(l).path;case"smooth-step":return zh(l).path;case"step":return zh(l,0).path;default:return i(l).path}}return null}),this.markerUrl=Ue(()=>{let A=this.model().settings.marker;return A?`url(#${Oh(JSON.stringify(A))})`:""}),this.defaultColor="rgb(177, 177, 183)"}getContext(){return{$implicit:{path:this.path,marker:this.markerUrl}}}getPathFactoryParams(A,i,n,o){return{mode:"connection",sourcePoint:A,targetPoint:i,sourcePosition:n,targetPosition:o,allEdges:this.flowEntitiesService.rawEdges(),allNodes:this.flowEntitiesService.rawNodes()}}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","connection",""]],inputs:{model:[1,"model"],template:[1,"template"]},attrs:aUA,decls:2,vars:2,consts:[["fill","none","stroke-width","2"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(i,n){i&1&&(V(0,sUA,1,1),V(1,cUA,1,1)),i&2&&(W(n.model().type==="default"?0:-1),p(),W(n.model().type==="template"?1:-1))},dependencies:[sl],encapsulation:2,changeDetection:0})}}return t})();function wsA(t){switch(t){case"top":return"bottom";case"bottom":return"top";case"left":return"right";case"right":return"left"}}function kJA(){return String.fromCharCode(65+Math.floor(Math.random()*26))+Date.now()}var SJA="#fff",xJA=20,RJA=2,DsA="rgb(177, 177, 183)",ysA=.1,NJA=!0,FJA=(()=>{class t{constructor(){this.viewportService=h(dB),this.rootSvg=h(w7).element,this.settingsService=h(bs),this.backgroundSignal=this.settingsService.background,this.scaledGap=Ue(()=>{let A=this.backgroundSignal();return A.type==="dots"?this.viewportService.readableViewport().zoom*(A.gap??xJA):0}),this.x=Ue(()=>this.viewportService.readableViewport().x%this.scaledGap()),this.y=Ue(()=>this.viewportService.readableViewport().y%this.scaledGap()),this.patternColor=Ue(()=>{let A=this.backgroundSignal();return A.type==="dots"?A.color??DsA:DsA}),this.patternSize=Ue(()=>{let A=this.backgroundSignal();return A.type==="dots"?this.viewportService.readableViewport().zoom*(A.size??RJA)/2:0}),this.bgImageSrc=Ue(()=>{let A=this.backgroundSignal();return A.type==="image"?A.src:""}),this.imageSize=Km($n(this.backgroundSignal).pipe(Si(()=>_JA(this.bgImageSrc())),fe(A=>({width:A.naturalWidth,height:A.naturalHeight}))),{initialValue:{width:0,height:0}}),this.scaledImageWidth=Ue(()=>{let A=this.backgroundSignal();if(A.type==="image"){let i=A.fixed?1:this.viewportService.readableViewport().zoom;return this.imageSize().width*i*(A.scale??ysA)}return 0}),this.scaledImageHeight=Ue(()=>{let A=this.backgroundSignal();if(A.type==="image"){let i=A.fixed?1:this.viewportService.readableViewport().zoom;return this.imageSize().height*i*(A.scale??ysA)}return 0}),this.imageX=Ue(()=>{let A=this.backgroundSignal();return A.type==="image"?A.repeat?A.fixed?0:this.viewportService.readableViewport().x%this.scaledImageWidth():A.fixed?0:this.viewportService.readableViewport().x:0}),this.imageY=Ue(()=>{let A=this.backgroundSignal();return A.type==="image"?A.repeat?A.fixed?0:this.viewportService.readableViewport().y%this.scaledImageHeight():A.fixed?0:this.viewportService.readableViewport().y:0}),this.repeated=Ue(()=>{let A=this.backgroundSignal();return A.type==="image"&&(A.repeat??NJA)}),this.patternId=kJA(),this.patternUrl=`url(#${this.patternId})`,Ga(()=>{let A=this.backgroundSignal();A.type==="dots"&&(this.rootSvg.style.backgroundColor=A.backgroundColor??SJA),A.type==="solid"&&(this.rootSvg.style.backgroundColor=A.color)})}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","background",""]],attrs:CUA,decls:2,vars:2,consts:[["patternUnits","userSpaceOnUse"],["x","0","y","0","width","100%","height","100%"]],template:function(i,n){i&1&&(V(0,IUA,3,10),V(1,EUA,2,2)),i&2&&(W(n.backgroundSignal().type==="dots"?0:-1),p(),W(n.backgroundSignal().type==="image"?1:-1))},encapsulation:2,changeDetection:0})}}return t})();function _JA(t){let e=new Image;return e.src=t,new Promise(A=>{e.onload=()=>A(e)})}var LJA=(()=>{class t{constructor(){this.markers=rt.required(),this.defaultColor="rgb(177, 177, 183)"}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["defs","flowDefs",""]],inputs:{markers:[1,"markers"]},attrs:QUA,decls:3,vars:2,consts:[["viewBox","-10 -10 20 20","refX","0","refY","0"],["points","-5,-4 1,0 -5,4 -5,-4",1,"marker__arrow_closed",3,"stroke","stroke-width","fill"],["points","-5,-4 0,0 -5,4",1,"marker__arrow_default",3,"stroke","stroke-width"],["points","-5,-4 1,0 -5,4 -5,-4",1,"marker__arrow_closed"],["points","-5,-4 0,0 -5,4",1,"marker__arrow_default"]],template:function(i,n){i&1&&(Ut(0,fUA,3,7,":svg:marker",0,Li),ri(2,"keyvalue")),i&2&&Jt(Ci(2,0,n.markers()))},dependencies:[Bp],styles:[".marker__arrow_default[_ngcontent-%COMP%]{stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;fill:none}.marker__arrow_closed[_ngcontent-%COMP%]{stroke-linecap:round;stroke-linejoin:round}"],changeDetection:0})}}return t})(),GJA=(()=>{class t{constructor(){this.host=h(ge),this.flowSettingsService=h(bs),this.flowWidth=Ue(()=>{let A=this.flowSettingsService.view();return A==="auto"?"100%":A[0]}),this.flowHeight=Ue(()=>{let A=this.flowSettingsService.view();return A==="auto"?"100%":A[1]}),y7([this.host.nativeElement],h(Oe)).pipe(oi(([A])=>{this.flowSettingsService.computedFlowWidth.set(A.contentRect.width),this.flowSettingsService.computedFlowHeight.set(A.contentRect.height)}),Tr()).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","flowSizeController",""]],hostVars:2,hostBindings:function(i,n){i&2&&ie("width",n.flowWidth())("height",n.flowHeight())}})}}return t})(),KJA=(()=>{class t{constructor(){this.flowStatusService=h(d1)}resetConnection(){let A=this.flowStatusService.status();(A.state==="connection-start"||A.state==="reconnection-start")&&this.flowStatusService.setIdleStatus()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["svg","rootSvgContext",""]],hostBindings:function(i,n){i&1&&tA("mouseup",function(){return n.resetConnection()},nC)("touchend",function(){return n.resetConnection()},nC)("contextmenu",function(){return n.resetConnection()})}})}}return t})();function gK(t,e){let A=[];for(let i of e){let{x:n,y:o}=i.globalPoint();t.x>=n&&t.x<=n+i.width()&&t.y>=o&&t.y<=o+i.height()&&A.push({x:t.x-n,y:t.y-o,spaceNodeId:i.rawNode.id})}return A.reverse(),A.push({spaceNodeId:null,x:t.x,y:t.y}),A}var CK=(()=>{class t{static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})(),UJA=(()=>{class t extends CK{shouldRenderNode(A){return!A.isVisible()}static{this.\u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})()}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function JJA(t,e){if(Object.keys(e.preview().style).length){HJA(t,e);return}if(e.rawNode.type==="default"){YJA(t,e);return}if(e.rawNode.type==="default-group"){TJA(t,e);return}zJA(t,e)}function YJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();UsA(t,e,5),t.fillStyle="white",t.fill(),t.strokeStyle="#1b262c",t.lineWidth=1.5,t.stroke(),t.fillStyle="black",t.font="14px Arial",t.textAlign="center",t.textBaseline="middle";let o=A.x+i/2,a=A.y+n/2;t.fillText(e.text(),o,a)}function TJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();t.globalAlpha=.05,t.fillStyle=e.color(),t.fillRect(A.x,A.y,i,n),t.globalAlpha=1,t.strokeStyle=e.color(),t.lineWidth=1.5,t.strokeRect(A.x,A.y,i,n)}function HJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height(),o=e.preview().style;if(o.borderRadius){let a=parseFloat(o.borderRadius);UsA(t,e,a)}else t.beginPath(),t.rect(A.x,A.y,i,n),t.closePath();o.backgroundColor&&(t.fillStyle=o.backgroundColor),o.borderColor&&(t.strokeStyle=o.borderColor),o.borderWidth&&(t.lineWidth=parseFloat(o.borderWidth)),t.fill(),t.stroke()}function zJA(t,e){let A=e.globalPoint(),i=e.width(),n=e.height();t.fillStyle="rgb(0 0 0 / 10%)",t.fillRect(A.x,A.y,i,n)}function UsA(t,e,A){let i=e.globalPoint(),n=e.width(),o=e.height();t.beginPath(),t.moveTo(i.x+A,i.y),t.lineTo(i.x+n-A,i.y),t.quadraticCurveTo(i.x+n,i.y,i.x+n,i.y+A),t.lineTo(i.x+n,i.y+o-A),t.quadraticCurveTo(i.x+n,i.y+o,i.x+n-A,i.y+o),t.lineTo(i.x+A,i.y+o),t.quadraticCurveTo(i.x,i.y+o,i.x,i.y+o-A),t.lineTo(i.x,i.y+A),t.quadraticCurveTo(i.x,i.y,i.x+A,i.y),t.closePath()}var OJA=(()=>{class t{constructor(){this.viewportService=h(dB),this.renderStrategy=h(CK),this.nodeRenderingService=h(BB),this.renderer2=h(_i),this.element=h(ge).nativeElement,this.ctx=this.element.getContext("2d"),this.width=rt(0),this.height=rt(0),this.dpr=window.devicePixelRatio,Ga(()=>{this.renderer2.setProperty(this.element,"width",this.width()*this.dpr),this.renderer2.setProperty(this.element,"height",this.height()*this.dpr),this.renderer2.setStyle(this.element,"width",`${this.width()}px`),this.renderer2.setStyle(this.element,"height",`${this.height()}px`),this.ctx.scale(this.dpr,this.dpr)}),Ga(()=>{let A=this.viewportService.readableViewport();this.ctx.clearRect(0,0,this.width(),this.height()),this.ctx.save(),this.ctx.setTransform(A.zoom*this.dpr,0,0,A.zoom*this.dpr,A.x*this.dpr,A.y*this.dpr);for(let i=0;i{class t{constructor(){this.nodeRenderingService=h(BB),this.edgeRenderingService=h(p7),this.flowEntitiesService=h(Sg),this.settingsService=h(bs),this.flowInitialized=jA(!1),h(Oe).runOutsideAngular(()=>nt(this,null,function*(){yield PJA(2),this.flowInitialized.set(!0)}))}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275prov=zA({token:t,factory:t.\u0275fac})}}return t})();function PJA(t){return new Promise(e=>{let A=0;function i(){A++,A{class t{constructor(){this.nodeRenderingService=h(BB),this.flowStatus=h(d1),this.tolerance=rt(10),this.lineColor=rt("#1b262c"),this.isNodeDragging=Ue(()=>dsA(this.flowStatus.status())),this.intersections=u7(A=>{let i=this.flowStatus.status();if(dsA(i)){let n=i.payload.node,o=bsA(I7(n)),a=this.nodeRenderingService.viewportNodes().filter(I=>I!==n).filter(I=>!n.children().includes(I)).map(I=>bsA(I7(I))),r=[],s=o.x,g=o.y,l=1/0,C=1/0;return a.forEach(I=>{let d=o.left+o.width/2,B=I.left+I.width/2;for(let[f,b,S,M]of[[d,B,B-o.width/2,!0],[o.left,I.left,I.left,!1],[o.left,I.right,I.right,!1],[o.right,I.left,I.left-o.width,!1],[o.right,I.right,I.right-o.width,!1]]){let D=Math.abs(f-b);if(D<=this.tolerance()){let F=Math.min(o.top,I.top),_=Math.max(o.bottom,I.bottom);if(r.push({x:b,y:F,x2:b,y2:_,isCenter:M}),DA.payload.node),fe(A=>[A,this.intersections()]),oi(([A,i])=>{if(i){let n={x:i.snappedX,y:i.snappedY},o=A.parent()?[A.parent()]:[];A.setPoint(gK(n,o)[0])}}),Tr()).subscribe()}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["g","alignmentHelper",""]],inputs:{tolerance:[1,"tolerance"],lineColor:[1,"lineColor"]},attrs:pUA,decls:1,vars:1,template:function(i,n){i&1&&V(0,yUA,1,1),i&2&&W(n.isNodeDragging()?0:-1)},encapsulation:2,changeDetection:0})}}return t})();var JsA=(()=>{class t{constructor(){this.viewportService=h(dB),this.flowEntitiesService=h(Sg),this.nodesChangeService=h(oK),this.edgesChangeService=h(aK),this.nodeRenderingService=h(BB),this.edgeRenderingService=h(p7),this.flowSettingsService=h(bs),this.componentEventBusService=h(eK),this.keyboardService=h(AK),this.injector=h(ft),this.flowRenderingService=h(vsA),this.alignmentHelper=rt(!1),this.nodeModels=this.nodeRenderingService.nodes,this.groups=this.nodeRenderingService.groups,this.nonGroups=this.nodeRenderingService.nonGroups,this.edgeModels=this.edgeRenderingService.edges,this.onComponentNodeEvent=Dn(this.componentEventBusService.event$),this.nodeTemplateDirective=rC(E7),this.nodeSvgTemplateDirective=rC(hsA),this.groupNodeTemplateDirective=rC(Q7),this.edgeTemplateDirective=rC(BsA),this.edgeLabelHtmlDirective=rC(QsA),this.connectionTemplateDirective=rC(EsA),this.mapContext=ca(ZG),this.spacePointContext=ca.required(Lm),this.viewport=this.viewportService.readableViewport.asReadonly(),this.nodesChange=Km(this.nodesChangeService.changes$,{initialValue:[]}),this.edgesChange=Km(this.edgesChangeService.changes$,{initialValue:[]}),this.initialized=this.flowRenderingService.flowInitialized.asReadonly(),this.viewportChange$=$n(this.viewportService.readableViewport).pipe(Fg(1)),this.nodesChange$=this.nodesChangeService.changes$,this.edgesChange$=this.edgesChangeService.changes$,this.initialized$=$n(this.flowRenderingService.flowInitialized),this.markers=this.flowEntitiesService.markers,this.minimap=this.flowEntitiesService.minimap,this.flowOptimization=this.flowSettingsService.optimization,this.flowWidth=this.flowSettingsService.computedFlowWidth,this.flowHeight=this.flowSettingsService.computedFlowHeight}set view(A){this.flowSettingsService.view.set(A)}set minZoom(A){this.flowSettingsService.minZoom.set(A)}set maxZoom(A){this.flowSettingsService.maxZoom.set(A)}set background(A){this.flowSettingsService.background.set(QJA(A))}set optimization(A){this.flowSettingsService.optimization.update(i=>cA(cA({},i),A))}set entitiesSelectable(A){this.flowSettingsService.entitiesSelectable.set(A)}set keyboardShortcuts(A){this.keyboardService.setShortcuts(A)}set connection(A){this.flowEntitiesService.connection.set(A)}get connection(){return this.flowEntitiesService.connection()}set snapGrid(A){this.flowSettingsService.snapGrid.set(A)}set elevateNodesOnSelect(A){this.flowSettingsService.elevateNodesOnSelect.set(A)}set elevateEdgesOnSelect(A){this.flowSettingsService.elevateEdgesOnSelect.set(A)}set nodes(A){let i=or(this.injector,()=>f7.nodes(A,this.flowEntitiesService.nodes()));usA(i,this.flowEntitiesService.edges()),this.flowEntitiesService.nodes.set(i),i.forEach(n=>this.nodeRenderingService.pullNode(n))}set edges(A){let i=or(this.injector,()=>f7.edges(A,this.flowEntitiesService.edges()));usA(this.flowEntitiesService.nodes(),i),this.flowEntitiesService.edges.set(i)}viewportTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:A,duration:0})}zoomTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:{zoom:A},duration:0})}panTo(A){this.viewportService.writableViewport.set({changeType:"absolute",state:A,duration:0})}fitView(A){this.viewportService.fitView(A)}getNode(A){return this.flowEntitiesService.getNode(A)?.rawNode}getDetachedEdges(){return this.flowEntitiesService.getDetachedEdges().map(A=>A.edge)}documentPointToFlowPoint(A,i){let n=this.spacePointContext().documentPointToFlowPoint(A);return i?.spaces?gK(n,this.nodeRenderingService.groups()):n}getIntesectingNodes(A,i={partially:!0}){return UUA(A,this.nodeModels(),i).map(n=>n.rawNode)}toNodeSpace(A,i){let n=this.nodeModels().find(a=>a.rawNode.id===A);if(!n)return{x:1/0,y:1/0};if(i===null)return n.globalPoint();let o=this.nodeModels().find(a=>a.rawNode.id===i);return o?gK(n.globalPoint(),[o])[0]:{x:1/0,y:1/0}}trackNodes(A,{rawNode:i}){return i}trackEdges(A,{edge:i}){return i}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275cmp=kA({type:t,selectors:[["vflow"]],contentQueries:function(i,n,o){i&1&&Cp(o,n.nodeTemplateDirective,E7,5)(o,n.nodeSvgTemplateDirective,hsA,5)(o,n.groupNodeTemplateDirective,Q7,5)(o,n.edgeTemplateDirective,BsA,5)(o,n.edgeLabelHtmlDirective,QsA,5)(o,n.connectionTemplateDirective,EsA,5),i&2&&Dr(6)},viewQuery:function(i,n){i&1&&rs(n.mapContext,ZG,5)(n.spacePointContext,Lm,5),i&2&&Dr(2)},inputs:{view:"view",minZoom:"minZoom",maxZoom:"maxZoom",background:"background",optimization:"optimization",entitiesSelectable:"entitiesSelectable",keyboardShortcuts:"keyboardShortcuts",connection:[2,"connection","connection",A=>new d7(A)],snapGrid:"snapGrid",elevateNodesOnSelect:"elevateNodesOnSelect",elevateEdgesOnSelect:"elevateEdgesOnSelect",nodes:"nodes",alignmentHelper:[1,"alignmentHelper"],edges:"edges"},outputs:{onComponentNodeEvent:"onComponentNodeEvent"},features:[dt([SsA,dB,d1,Sg,oK,aK,BB,p7,Um,bs,eK,AK,FsA,{provide:CK,useClass:UJA},vsA]),sp([{directive:EJA,outputs:["onNodesChange","onNodesChange","onNodesChange.position","onNodesChange.position","onNodesChange.position.single","onNodesChange.position.single","onNodesChange.position.many","onNodesChange.position.many","onNodesChange.size","onNodesChange.size","onNodesChange.size.single","onNodesChange.size.single","onNodesChange.size.many","onNodesChange.size.many","onNodesChange.add","onNodesChange.add","onNodesChange.add.single","onNodesChange.add.single","onNodesChange.add.many","onNodesChange.add.many","onNodesChange.remove","onNodesChange.remove","onNodesChange.remove.single","onNodesChange.remove.single","onNodesChange.remove.many","onNodesChange.remove.many","onNodesChange.select","onNodesChange.select","onNodesChange.select.single","onNodesChange.select.single","onNodesChange.select.many","onNodesChange.select.many","onEdgesChange","onEdgesChange","onEdgesChange.detached","onEdgesChange.detached","onEdgesChange.detached.single","onEdgesChange.detached.single","onEdgesChange.detached.many","onEdgesChange.detached.many","onEdgesChange.add","onEdgesChange.add","onEdgesChange.add.single","onEdgesChange.add.single","onEdgesChange.add.many","onEdgesChange.add.many","onEdgesChange.remove","onEdgesChange.remove","onEdgesChange.remove.single","onEdgesChange.remove.single","onEdgesChange.remove.many","onEdgesChange.remove.many","onEdgesChange.select","onEdgesChange.select","onEdgesChange.select.single","onEdgesChange.select.single","onEdgesChange.select.many","onEdgesChange.select.many"]}])],decls:11,vars:8,consts:[["flow",""],["rootSvgRef","","rootSvgContext","","rootPointer","","flowSizeController","",1,"root-svg"],["flowDefs","",3,"markers"],["background",""],["mapContext","","spacePointContext",""],["connection","",3,"model","template"],[3,"ngTemplateOutlet"],["previewFlow","",1,"preview-flow",3,"width","height"],["alignmentHelper",""],["alignmentHelper","",3,"tolerance","lineColor"],["node","",3,"model","groupNodeTemplate"],["edge","",3,"model","edgeTemplate","edgeLabelHtmlTemplate"],["node","",3,"model","nodeTemplate","nodeSvgTemplate"],["node","",3,"model","nodeTemplate","nodeSvgTemplate","groupNodeTemplate"]],template:function(i,n){if(i&1&&(Qt(),m(0,"svg",1,0),GA(2,"defs",2)(3,"g",3),m(4,"g",4),V(5,MUA,2,1),GA(6,"g",5),V(7,RUA,6,0),V(8,_UA,4,0),w(),V(9,LUA,1,1,":svg:ng-container",6),w(),V(10,GUA,1,2,"canvas",7)),i&2){let o,a,r;p(2),$("markers",n.markers()),p(3),W((o=n.alignmentHelper())?5:-1,o),p(),$("model",n.connection)("template",(a=n.connectionTemplateDirective())==null?null:a.templateRef),p(),W(n.flowOptimization().detachedGroupsLayer?7:-1),p(),W(n.flowOptimization().detachedGroupsLayer?-1:8),p(),W((r=n.minimap())?9:-1,r),p(),W(n.flowOptimization().virtualization?10:-1)}},dependencies:[w7,KJA,D7,GJA,LJA,FJA,ZG,Lm,MJA,KsA,GsA,sl,OJA,jJA],styles:["[_nghost-%COMP%]{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}[_nghost-%COMP%] *{box-sizing:border-box}.root-svg[_ngcontent-%COMP%]{grid-row-start:1;grid-column-start:1}.preview-flow[_ngcontent-%COMP%]{pointer-events:none;grid-row-start:1;grid-column-start:1}"],changeDetection:0})}}return t})();var YsA=(()=>{class t{constructor(){this.flowSettingsService=h(bs),this.selectionService=h(Um),this.parentEdge=h(GsA,{optional:!0}),this.parentNode=h(KsA,{optional:!0}),this.host=h(ge),this.selectOnEvent=this.getEvent$().pipe(oi(()=>this.select()),Tr()).subscribe()}select(){let A=this.entity();A&&this.flowSettingsService.entitiesSelectable()&&this.selectionService.select(A)}entity(){return this.parentNode?this.parentNode.model():this.parentEdge?this.parentEdge.model():null}getEvent$(){return nl(this.host.nativeElement,"click")}static{this.\u0275fac=function(i){return new(i||t)}}static{this.\u0275dir=OA({type:t,selectors:[["","selectable",""]]})}}return t})();var VJA=["canvas"],WJA=["svgCanvas"],ZJA=()=>({type:"dots",color:"#424242",size:1,gap:12}),XJA=()=>[12,12],$JA=(t,e)=>e.name;function AYA(t,e){if(t&1){let A=JA();m(0,"div",6)(1,"div",11)(2,"button",12),tA("click",function(){Z(A);let n=v();return X(n.backToMainCanvas())}),m(3,"mat-icon"),K(4,"arrow_back"),w()(),m(5,"div",13)(6,"span",14),K(7,"smart_toy"),w(),m(8,"div",15)(9,"h3",16),K(10),w(),m(11,"p",17),K(12,"Agent Tool"),w()()()()()}if(t&2){let A=v();p(2),$("matTooltip",A.getBackButtonTooltip()),p(8),qA(A.currentAgentTool())}}function eYA(t,e){if(t&1){let A=JA();m(0,"span",18),tA("click",function(){Z(A);let n=v();return X(n.toggleSidePanelRequest.emit())}),K(1,"left_panel_open"),w()}}function tYA(t,e){if(t&1){let A=JA();Qt(),m(0,"foreignObject"),as(),m(1,"div",27),tA("click",function(n){return Z(A),X(n.stopPropagation())}),m(2,"button",28,0),tA("click",function(n){return Z(A),X(n.stopPropagation())}),m(4,"mat-icon"),K(5,"add"),w()(),m(6,"span",29),K(7,"Add sub-agent"),w(),m(8,"mat-menu",null,1)(10,"button",30),tA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LlmAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(11,"mat-icon"),K(12,"psychology"),w(),m(13,"span"),K(14,"LLM Agent"),w()(),m(15,"button",30),tA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("SequentialAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(16,"mat-icon"),K(17,"more_horiz"),w(),m(18,"span"),K(19,"Sequential Agent"),w()(),m(20,"button",30),tA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LoopAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(21,"mat-icon"),K(22,"sync"),w(),m(23,"span"),K(24,"Loop Agent"),w()(),m(25,"button",30),tA("click",function(n){let o;Z(A);let a=An(3),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("ParallelAgent",r.node.data==null||(o=r.node.data())==null?null:o.name,a,n,!0))}),m(26,"mat-icon"),K(27,"density_medium"),w(),m(28,"span"),K(29,"Parallel Agent"),w()()()()()}if(t&2){let A=An(9),i=v().$implicit;ie("width",200)("height",100)("x",i.width()/2-100)("y",i.height()/2-40),p(2),$("matMenuTriggerFor",A)}}function iYA(t,e){t&1&&(Qt(),GA(0,"handle",26))}function nYA(t,e){if(t&1){let A=JA();Qt(),m(0,"g")(1,"rect",21),tA("click",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onGroupClick(o.node,n))})("pointerdown",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onGroupPointerDown(o.node,n))}),w(),m(2,"foreignObject",22),as(),m(3,"div",23)(4,"mat-icon",24),K(5),w(),m(6,"span",25),K(7),w()()(),V(8,tYA,30,5,":svg:foreignObject"),V(9,iYA,1,0,":svg:handle",26),w()}if(t&2){let A,i,n=e.$implicit,o=v(2);p(),wn("stroke",o.isGroupSelected(n.node)?"rgba(0, 187, 234, 0.8)":"rgba(0, 187, 234, 0.3)")("fill",o.isGroupSelected(n.node)?"rgba(0, 187, 234, 0.1)":"rgba(0, 187, 234, 0.03)")("stroke-width",o.isGroupSelected(n.node)?3:2),ie("width",n.width())("height",n.height()),p(),ie("width",200)("height",32),p(3),qA(o.getAgentIcon(n.node.data==null||(A=n.node.data())==null?null:A.agent_class)),p(2),qA(n.node.data==null||(i=n.node.data())==null?null:i.agent_class),p(),W(o.isGroupEmpty(n.node.id)?8:-1),p(),W(o.shouldShowTopHandle(n.node)?9:-1)}}function oYA(t,e){t&1&&(m(0,"span",35),K(1,"Root"),w())}function aYA(t,e){if(t&1){let A=JA();m(0,"button",43),tA("click",function(n){Z(A),v();let o=Vs(0);return v(2).openDeleteSubAgentDialog(o),X(n.stopPropagation())}),m(1,"mat-icon"),K(2,"delete"),w()()}}function rYA(t,e){if(t&1){let A=JA();m(0,"div",46),tA("click",function(n){let o=Z(A).$implicit,a=v(2).$implicit;return v(2).selectTool(o,a.node),X(n.stopPropagation())}),m(1,"mat-icon",47),K(2),w(),m(3,"span",48),K(4),w()()}if(t&2){let A=e.$implicit,i=v(4);p(2),qA(i.getToolIcon(A)),p(2),qA(A.name)}}function sYA(t,e){if(t&1&&(m(0,"div",38)(1,"div",44),Ut(2,rYA,5,2,"div",45,$JA),w()()),t&2){v();let A=Vs(3);p(2),Jt(A)}}function gYA(t,e){if(t&1){let A=JA();m(0,"div",39)(1,"button",49,2),tA("click",function(n){return Z(A),X(n.stopPropagation())}),m(3,"span",50),K(4,"+"),w()(),m(5,"mat-menu",null,3)(7,"button",30),tA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LlmAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(8,"mat-icon"),K(9,"psychology"),w(),m(10,"span"),K(11,"LLM Agent"),w()(),m(12,"button",30),tA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("SequentialAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(13,"mat-icon"),K(14,"more_horiz"),w(),m(15,"span"),K(16,"Sequential Agent"),w()(),m(17,"button",30),tA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("LoopAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(18,"mat-icon"),K(19,"sync"),w(),m(20,"span"),K(21,"Loop Agent"),w()(),m(22,"button",30),tA("click",function(n){let o;Z(A);let a=An(2),r=v().$implicit,s=v(2);return X(s.handleAgentTypeSelection("ParallelAgent",(o=r.node.data())==null?null:o.name,a,n))}),m(23,"mat-icon"),K(24,"density_medium"),w(),m(25,"span"),K(26,"Parallel Agent"),w()()()()}if(t&2){let A=An(6);p(),$("matMenuTriggerFor",A)}}function lYA(t,e){t&1&&GA(0,"handle",40)}function cYA(t,e){t&1&&GA(0,"handle",26)}function CYA(t,e){t&1&&GA(0,"handle",41)}function IYA(t,e){t&1&&GA(0,"handle",42)}function dYA(t,e){if(t&1){let A=JA();Ur(0)(1),ri(2,"async"),Ur(3),m(4,"div",31),tA("click",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onCustomTemplateNodeClick(o.node,n))})("pointerdown",function(n){let o=Z(A).$implicit,a=v(2);return X(a.onNodePointerDown(o.node,n))}),m(5,"div",32)(6,"div",33)(7,"mat-icon",34),K(8),w(),K(9),V(10,oYA,2,0,"span",35),w(),m(11,"div",36),V(12,aYA,3,0,"button",37),w()(),V(13,sYA,4,0,"div",38),V(14,gYA,27,1,"div",39),V(15,lYA,1,0,"handle",40),V(16,cYA,1,0,"handle",26),V(17,CYA,1,0,"handle",41),V(18,IYA,1,0,"handle",42),w()}if(t&2){let A=e.$implicit,i=v(2),n=A.node.data==null?null:A.node.data(),o=_g((n==null?null:n.name)||"root_agent"),a=Ci(2,17,i.toolsMap$);p(3);let s=_g(i.getToolsForNode(o,a)).length>0;p(),ne("custom-node_selected",i.isNodeSelected(A.node))("custom-node_has-tools",s)("in-group",A.node.parentId&&A.node.parentId()),p(4),qA(i.getAgentIcon(n==null?null:n.agent_class)),p(),Se(" ",o," "),p(),W(i.isRootAgent(o)?10:-1),p(2),W(i.isRootAgentForCurrentTab(o)?-1:12),p(),W(s?13:-1),p(),W(i.shouldShowAddButton(A.node)?14:-1),p(),W(i.shouldShowLeftHandle(A.node)?15:-1),p(),W(i.shouldShowTopHandle(A.node)?16:-1),p(),W(i.shouldShowRightHandle(A.node)?17:-1),p(),W(i.shouldShowBottomHandle(A.node)?18:-1)}}function BYA(t,e){if(t&1&&(m(0,"vflow",8),pt(1,nYA,10,14,"ng-template",19)(2,dYA,19,20,"ng-template",20),w()),t&2){let A=v();$("nodes",A.vflowNodes())("edges",A.edges())("background",Cu(4,ZJA))("snapGrid",Cu(5,XJA))}}function EYA(t,e){t&1&&(m(0,"div",9)(1,"div",51)(2,"mat-icon",52),K(3,"touch_app"),w(),m(4,"h4"),K(5,"Start Building Your ADK"),w(),m(6,"p"),K(7,"Drag components from the left panel to create your workflow"),w(),m(8,"div",53)(9,"div",54)(10,"mat-icon"),K(11,"drag_indicator"),w(),m(12,"span"),K(13,"Drag to move nodes"),w()(),m(14,"div",54)(15,"mat-icon"),K(16,"link"),w(),m(17,"span"),K(18,"Shift + Click to connect nodes"),w()()()()())}var jh=class t{constructor(e,A,i){this.dialog=e;this.agentService=A;this.router=i;this.toolsMap$=this.agentBuilderService.getAgentToolsMap(),this.agentBuilderService.getSelectedTool().subscribe(n=>{this.selectedTool=n})}_snackBar=h(J2);canvasRef;svgCanvasRef;agentBuilderService=h(Q0);cdr=h(Dt);showSidePanel=!0;showBuilderAssistant=!1;appNameInput="";toggleSidePanelRequest=new $A;builderAssistantCloseRequest=new $A;ctx;connections=jA([]);nodeId=1;edgeId=1;callbackId=1;toolId=1;appName="";nodes=jA([]);edges=jA([]);workflowShellWidth=340;workflowGroupWidth=420;workflowGroupHeight=220;workflowGroupYOffset=180;workflowGroupXOffset=-40;workflowInnerNodePoint={x:40,y:80};groupNodes=jA([]);vflowNodes=Ue(()=>[...this.groupNodes(),...this.nodes()]);selectedAgents=[];selectedTool;selectedCallback;currentAgentTool=jA(null);agentToolBoards=jA(new Map);isAgentToolMode=!1;navigationStack=[];existingAgent=void 0;toolsMap$;nodePositions=new Map;ngOnInit(){this.agentService.getApp().subscribe(e=>{e&&(this.appName=e)}),this.appNameInput&&(this.appName=this.appNameInput),this.agentBuilderService.getNewTabRequest().subscribe(e=>{if(e){let{tabName:A,currentAgentName:i}=e;this.switchToAgentToolBoard(A,i)}}),this.agentBuilderService.getTabDeletionRequest().subscribe(e=>{e&&this.deleteAgentToolBoard(e)}),this.agentBuilderService.getSelectedCallback().subscribe(e=>{this.selectedCallback=e}),this.agentBuilderService.getAgentCallbacks().subscribe(e=>{if(e){let A=this.nodes().find(i=>i.data?i.data().name===e.agentName:void 0);if(A&&A.data){let i=A.data();i.callbacks=e.callbacks,A.data.set(i)}}}),this.agentBuilderService.getDeleteSubAgentSubject().subscribe(e=>{e&&this.openDeleteSubAgentDialog(e)}),this.agentBuilderService.getAddSubAgentSubject().subscribe(e=>{e.parentAgentName&&this.addSubAgent(e.parentAgentName,e.agentClass,e.isFromEmptyGroup)}),this.agentBuilderService.getSelectedNode().subscribe(e=>{this.selectedAgents=this.nodes().filter(A=>A.data&&A.data().name===e?.name)}),this.toolsMap$.subscribe(e=>{this.nodes().some(i=>i.parentId&&i.parentId())&&this.groupNodes().length>0&&this.updateGroupDimensions()})}ngOnChanges(e){e.appNameInput&&e.appNameInput.currentValue&&(this.appName=e.appNameInput.currentValue)}ngAfterViewInit(){}onCustomTemplateNodeClick(e,A){this.shouldIgnoreNodeInteraction(A.target)||this.selectAgentNode(e,{openConfig:!0})}onNodePointerDown(e,A){this.shouldIgnoreNodeInteraction(A.target)||this.selectAgentNode(e,{openConfig:!1})}onGroupClick(e,A){if(A.stopPropagation(),!e?.data)return;let i=e.data().name,n=this.nodes().find(o=>o.data&&o.data().name===i);n&&this.selectAgentNode(n,{openConfig:!0})}onGroupPointerDown(e,A){if(A.stopPropagation(),!e?.data)return;let i=e.data().name,n=this.nodes().find(o=>o.data&&o.data().name===i);n&&this.selectAgentNode(n,{openConfig:!1})}onCanvasClick(e){let A=e.target;if(!A)return;let i=[".custom-node",".action-button-bar",".add-subagent-btn",".open-panel-btn",".agent-tool-banner",".mat-mdc-menu-panel"];A.closest(i.join(","))||this.clearCanvasSelection()}shouldIgnoreNodeInteraction(e){return e?!!e.closest("mat-chip, .add-subagent-btn, .mat-mdc-menu-panel"):!1}selectAgentNode(e,A={}){if(!e?.data)return;let i=this.agentBuilderService.getNode(e.data().name);i&&(this.agentBuilderService.setSelectedTool(void 0),this.agentBuilderService.setSelectedNode(i),this.nodePositions.set(i.name,cA({},e.point())),A.openConfig&&this.agentBuilderService.requestSideTabChange("config"))}handleAgentTypeSelection(e,A,i,n,o=!1){n.stopPropagation(),i?.closeMenu(),this.onAgentTypeSelected(e,A,o)}clearCanvasSelection(){!this.selectedAgents.length&&!this.selectedTool&&!this.selectedCallback||(this.selectedAgents=[],this.selectedTool=void 0,this.selectedCallback=void 0,this.agentBuilderService.setSelectedNode(void 0),this.agentBuilderService.setSelectedTool(void 0),this.agentBuilderService.setSelectedCallback(void 0),this.cdr.markForCheck())}onAddResource(e){}onAgentTypeSelected(e,A,i=!1){A&&this.addSubAgent(A,e,i)}generateNodeId(){return this.nodeId+=1,this.nodeId.toString()}generateEdgeId(){return this.edgeId+=1,this.edgeId.toString()}createNode(e,A,i){let n=jA(e),a={id:this.generateNodeId(),point:jA(cA({},A)),type:"html-template",data:n};return i&&(a.parentId=jA(i)),this.nodePositions.set(e.name,cA({},a.point())),a}createWorkflowGroup(e,A,i,n,o,a){let r,s=null;if(n){let d=(o||this.groupNodes()).find(B=>B.id===n);if(d){let B=d.point(),E=d.height?d.height():this.workflowGroupHeight;if(a&&o){let Q=a.filter(f=>f.parentId&&f.parentId()===d.id);if(Q.length>0){let U=0;for(let J of Q){let j=J.data?J.data():void 0,AA=120;j&&j.tools&&j.tools.length>0&&(AA+=20+j.tools.length*36),U=Math.max(U,AA)}E=Math.max(220,80+U+40)}}r={x:B.x,y:B.y+E+60},s=null}else r={x:i.x+this.workflowGroupXOffset,y:i.y+this.workflowGroupYOffset}}else r={x:i.x+this.workflowGroupXOffset,y:i.y+this.workflowGroupYOffset};let g=this.generateNodeId(),l={id:g,point:jA(r),type:"template-group",data:jA(e),parentId:jA(s),width:jA(this.workflowGroupWidth),height:jA(this.workflowGroupHeight)},C=e.agent_class==="SequentialAgent"?{id:this.generateEdgeId(),source:A.id,sourceHandle:"source-bottom",target:g,targetHandle:"target-top"}:null;return{groupNode:l,edge:C}}calculateWorkflowChildPosition(e,A){let r=(A-20)/2;return{x:45+e*428,y:r}}createAgentNodeWithGroup(e,A,i,n,o){let a=this.createNode(e,A,i),r=null,s=null;if(this.isWorkflowAgent(e.agent_class)){let g=this.createWorkflowGroup(e,a,A,i,n,o);r=g.groupNode,s=g.edge}return{shellNode:a,groupNode:r,groupEdge:s}}createWorkflowChildEdge(e,A){return this.createWorkflowChildEdgeFromArrays(e,A,this.nodes(),this.groupNodes())}createWorkflowChildEdgeFromArrays(e,A,i,n){if(!A)return null;let o=n.find(r=>r.id===A);if(!o||!o.data)return null;let a=o.data().agent_class;if(a==="LoopAgent"||a==="ParallelAgent"){let r=i.find(s=>s.data&&s.data().name===o.data().name);if(r)return{id:this.generateEdgeId(),source:r.id,sourceHandle:"source-bottom",target:e.id,targetHandle:"target-top"}}if(a==="SequentialAgent"){let r=i.filter(l=>l.parentId&&l.parentId()===A);if(r.length===0)return null;r.sort((l,C)=>l.point().x-C.point().x);let s=r.findIndex(l=>l.id===e.id);if(s<=0)return null;let g=r[s-1];return{id:this.generateEdgeId(),source:g.id,sourceHandle:"source-right",target:e.id,targetHandle:"target-left"}}return null}isWorkflowAgent(e){return e?e==="SequentialAgent"||e==="ParallelAgent"||e==="LoopAgent":!1}addSubAgent(e,A="LlmAgent",i=!1){let n=this.nodes().find(C=>C.data&&C.data().name===e);if(!n||!n.data)return;let a={name:this.agentBuilderService.getNextSubAgentName(),agent_class:A,model:"gemini-2.5-flash",instruction:"You are a sub-agent that performs specialized tasks.",isRoot:!1,sub_agents:[],tools:[]},r=this.isWorkflowAgent(n.data().agent_class),s=n.parentId&&n.parentId()&&this.groupNodes().some(C=>C.id===n.parentId()),g,l=null;if(i&&r){let C=n.data();if(!C)return;let I=this.groupNodes().find(b=>b.data&&b.data()?.name===C.name);if(!I){console.error("Could not find group for workflow node");return}let d=this.agentBuilderService.getNode(n.data().name);if(!d){console.error("Could not find clicked agent data");return}let B=d.sub_agents.length,E=I.height?I.height():this.workflowGroupHeight,Q=this.calculateWorkflowChildPosition(B,E),f=this.createAgentNodeWithGroup(a,Q,I.id);g=f.shellNode,l=f.groupNode,d.sub_agents.push(a),l&&this.groupNodes.set([...this.groupNodes(),l]),f.groupEdge&&this.edges.set([...this.edges(),f.groupEdge])}else if(s){let C=n.parentId()??void 0,I=this.groupNodes().find(S=>S.id===C);if(!I||!I.data){console.error("Could not find parent group node");return}let d=I.data().name,B=this.agentBuilderService.getNode(d);if(!B){console.error("Could not find workflow parent agent");return}let E=B.sub_agents.length,Q=I.height?I.height():this.workflowGroupHeight,f=this.calculateWorkflowChildPosition(E,Q),b=this.createAgentNodeWithGroup(a,f,C);g=b.shellNode,l=b.groupNode,B.sub_agents.push(a),l&&this.groupNodes.set([...this.groupNodes(),l]),b.groupEdge&&this.edges.set([...this.edges(),b.groupEdge])}else{let C=n.data().sub_agents.length,I={x:n.point().x+C*400,y:n.point().y+300},d=this.createAgentNodeWithGroup(a,I);g=d.shellNode,l=d.groupNode;let B=this.agentBuilderService.getNode(n.data().name);B&&B.sub_agents.push(a),l&&this.groupNodes.set([...this.groupNodes(),l]),d.groupEdge&&this.edges.set([...this.edges(),d.groupEdge])}if(this.agentBuilderService.addNode(a),this.nodes.set([...this.nodes(),g]),this.selectedAgents=[g],(s||r)&&this.updateGroupDimensions(),r||s){let C=g.parentId?g.parentId()??void 0:void 0,I=this.createWorkflowChildEdge(g,C);I&&this.edges.set([...this.edges(),I])}else{let C={id:this.generateEdgeId(),source:n.id,sourceHandle:"source-bottom",target:g.id,targetHandle:"target-top"};this.edges.set([...this.edges(),C])}this.agentBuilderService.setSelectedNode(a),this.agentBuilderService.requestSideTabChange("config")}addTool(e){let A=this.nodes().find(o=>o.id===e);if(!A||!A.data)return;let i=A.data();if(!i)return;this.dialog.open(W2,{width:"500px"}).afterClosed().subscribe(o=>{if(o)if(o.toolType==="Agent Tool")this.createAgentTool(i.name);else{let a={toolType:o.toolType,name:o.name};this.agentBuilderService.addTool(i.name,a),this.agentBuilderService.setSelectedTool(a)}})}addCallback(e){let A=this.nodes().find(o=>o.id===e);if(!A||!A.data)return;let i={name:`callback_${this.callbackId}`,type:"before_agent",code:`def callback_function(callback_context): - # Add your callback logic here - return None`,description:"Auto-generated callback"};this.callbackId++;let n=this.agentBuilderService.addCallback(A.data().name,i);n.success||this._snackBar.open(n.error||"Failed to add callback","Close",{duration:3e3,panelClass:["error-snackbar"]})}createAgentTool(e){this.dialog.open(Vc,{width:"750px",height:"310px",data:{title:"Create Agent Tool",message:"Please enter a name for the agent tool:",confirmButtonText:"Create",showInput:!0,inputLabel:"Agent Tool Name",inputPlaceholder:"Enter agent tool name"}}).afterClosed().subscribe(i=>{i&&typeof i=="string"&&this.agentBuilderService.requestNewTab(i,e)})}deleteTool(e,A){let i=A.toolType==="Agent Tool",n=i&&A.toolAgentName||A.name;this.dialog.open(Vc,{data:{title:i?"Delete Agent Tool":"Delete Tool",message:i?`Are you sure you want to delete the agent tool "${n}"? This will also delete the corresponding board.`:`Are you sure you want to delete ${n}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(a=>{a==="confirm"&&this.deleteToolWithoutDialog(e,A)})}deleteToolWithoutDialog(e,A){if(A.toolType==="Agent Tool"){let i=A.toolAgentName||A.name;this.deleteAgentToolAndBoard(e,A,i)}else this.agentBuilderService.deleteTool(e,A)}deleteAgentToolAndBoard(e,A,i){this.agentBuilderService.deleteTool(e,A),this.agentBuilderService.requestTabDeletion(i)}deleteCallback(e,A){this.dialog.open(Vc,{data:{title:"Delete Callback",message:`Are you sure you want to delete ${A.name}?`,confirmButtonText:"Delete"}}).afterClosed().subscribe(n=>{if(n==="confirm"){let o=this.agentBuilderService.deleteCallback(e,A);o.success||this._snackBar.open(o.error||"Failed to delete callback","Close",{duration:3e3,panelClass:["error-snackbar"]}),this.cdr.detectChanges()}})}openDeleteSubAgentDialog(e){this.dialog.open(Vc,{data:{title:"Delete sub agent",message:`Are you sure you want to delete ${e}? This will also delete all the underlying sub agents and tools.`,confirmButtonText:"Delete"}}).afterClosed().subscribe(i=>{i==="confirm"&&this.deleteSubAgent(e)})}deleteSubAgent(e){let A=this.agentBuilderService.getNode(e);if(!A)return;let i=this.agentBuilderService.getParentNode(this.agentBuilderService.getRootNode(),A,void 0,this.agentToolBoards());i&&(this.deleteSubAgentHelper(A,i),this.agentBuilderService.getSelectedNode().pipe(oo(1),Ze(n=>!!n)).subscribe(n=>{this.agentBuilderService.getNodes().includes(n)||this.agentBuilderService.setSelectedNode(i)}))}isNodeInSequentialWorkflow(e){if(!e.parentId||!e.parentId())return!1;let A=e.parentId(),i=this.groupNodes().find(n=>n.id===A);return!i||!i.data?!1:i.data().agent_class==="SequentialAgent"}getSequentialSiblings(e){if(!e.parentId||!e.parentId())return{previous:void 0,next:void 0};let A=e.parentId(),i=this.nodes().filter(o=>o.parentId&&o.parentId()===A);i.sort((o,a)=>o.point().x-a.point().x);let n=i.findIndex(o=>o.id===e.id);return n===-1?{previous:void 0,next:void 0}:{previous:n>0?i[n-1]:void 0,next:nn.data&&n.data().name===e.name);if(i){let n=this.isNodeInSequentialWorkflow(i),o,a;if(n){let s=this.getSequentialSiblings(i);o=s.previous,a=s.next}this.nodes.set(this.nodes().filter(s=>s.id!==i.id));let r=this.groupNodes().find(s=>s.data&&s.data().name===e.name);if(r){this.groupNodes.set(this.groupNodes().filter(g=>g.id!==r.id));let s=this.edges().filter(g=>g.target!==i.id&&g.source!==i.id&&g.target!==r.id&&g.source!==r.id);this.edges.set(s)}else{let s=this.edges().filter(g=>g.target!==i.id&&g.source!==i.id);this.edges.set(s)}if(n&&o&&a){let s={id:this.generateEdgeId(),source:o.id,sourceHandle:"source-right",target:a.id,targetHandle:"target-left"};this.edges.set([...this.edges(),s])}}this.nodePositions.delete(e.name),A.sub_agents=A.sub_agents.filter(n=>n.name!==e.name),this.agentBuilderService.deleteNode(e),i&&i.parentId&&i.parentId()&&this.updateGroupDimensions()}selectTool(e,A){if(e.toolType==="Agent Tool"){let i=e.name;this.switchToAgentToolBoard(i);return}if(e.toolType==="Function tool"||e.toolType==="Built-in tool"){if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.editTool(e,i)}return}if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.agentBuilderService.setSelectedNode(i)}this.agentBuilderService.setSelectedTool(e)}editTool(e,A){let i;e.toolType==="Built-in tool"?i=this.dialog.open(aB,{width:"700px",maxWidth:"90vw",data:{toolName:e.name,isEditMode:!0,toolArgs:e.args}}):i=this.dialog.open(W2,{width:"500px",data:{toolType:e.toolType,toolName:e.name,isEditMode:!0}}),i.afterClosed().subscribe(n=>{if(n&&n.isEditMode){let o=A.tools?.findIndex(a=>a.name===e.name);o!==void 0&&o!==-1&&A.tools&&(A.tools[o].name=n.name,n.args&&(A.tools[o].args=n.args),this.agentBuilderService.setAgentTools(A.name,A.tools))}})}selectCallback(e,A){if(A.data){let i=this.agentBuilderService.getNode(A.data().name);i&&this.agentBuilderService.setSelectedNode(i)}this.agentBuilderService.setSelectedCallback(e)}openToolsTab(e){if(e.data){let A=this.agentBuilderService.getNode(e.data().name);A&&this.agentBuilderService.setSelectedNode(A)}this.agentBuilderService.requestSideTabChange("tools")}saveAgent(e){let A=this.agentBuilderService.getRootNode();if(!A){this._snackBar.open("Please create an agent first.","OK");return}let i=new FormData,n=this.agentToolBoards();y0.generateYamlFile(A,i,e,n),this.agentService.agentBuild(i).subscribe(o=>{o?this.router.navigate(["/"],{queryParams:{app:e}}).then(()=>{window.location.reload()}):this._snackBar.open("Something went wrong, please try again","OK")})}isRootAgent(e){let A=this.agentBuilderService.getRootNode();return A?A.name===e:!1}isRootAgentForCurrentTab(e){return this.isAgentToolMode&&this.currentAgentTool()?e===this.currentAgentTool():this.isRootAgent(e)}shouldShowHorizontalHandle(e,A){if(!e.parentId||!e.parentId())return!1;let i=e.parentId(),n=this.groupNodes().find(s=>s.id===i);if(!n||!n.data||n.data().agent_class!=="SequentialAgent")return!1;let a=this.nodes().filter(s=>s.parentId&&s.parentId()===i);if(a.length<=1)return!1;a.sort((s,g)=>s.point().x-g.point().x);let r=a.findIndex(s=>s.id===e.id);return A==="left"?r>0:r0):!1}shouldShowTopHandle(e){let A=e.data?e.data():void 0,i=A?.name,n=i?this.isRootAgent(i):!1;if(e.type==="template-group")return A?.agent_class==="SequentialAgent";if(n)return!1;if(e.parentId&&e.parentId()){let a=e.parentId(),r=this.groupNodes().find(s=>s.id===a);if(r&&r.data){let s=r.data().agent_class;if(s==="LoopAgent"||s==="ParallelAgent")return!0}return!1}return!0}getToolsForNode(e,A){return!e||!A?[]:A.get(e)??[]}loadFromYaml(e,A){try{let i=yE(e);this.agentBuilderService.clear(),this.nodePositions.clear(),this.agentToolBoards.set(new Map),this.agentBuilderService.setAgentToolBoards(new Map),this.currentAgentTool.set(null),this.isAgentToolMode=!1,this.navigationStack=[];let n=Ge(cA({name:i.name||"root_agent",agent_class:i.agent_class||"LlmAgent",model:i.model||"gemini-2.5-flash",instruction:i.instruction||"",description:i.description||""},i.max_iterations&&{max_iterations:i.max_iterations}),{isRoot:!0,sub_agents:i.sub_agents||[],tools:this.parseToolsFromYaml(i.tools||[]),callbacks:this.parseCallbacksFromYaml(i)});this.agentBuilderService.addNode(n),this.agentBuilderService.setSelectedNode(n),this.processAgentToolsFromYaml(n.tools||[],A),this.loadAgentBoard(n)}catch(i){console.error("Error parsing YAML:",i)}}parseToolsFromYaml(e){return e.map(A=>{let i={name:A.name,toolType:this.determineToolType(A),toolAgentName:A.name};if(A.name==="AgentTool"&&A.args&&A.args.agent&&A.args.agent.config_path){i.toolType="Agent Tool";let o=A.args.agent.config_path.replace("./","").replace(".yaml","");i.name=o,i.toolAgentName=o,i.args=A.args}else A.args&&(i.args=A.args);return i})}parseCallbacksFromYaml(e){let A=[];return Object.keys(e).forEach(i=>{if(i.endsWith("_callback")&&Array.isArray(e[i])){let n=i.replace("_callback","");e[i].forEach(o=>{o.name&&A.push({name:o.name,type:n})})}}),A}determineToolType(e){return e.name==="AgentTool"&&e.args&&e.args.agent?"Agent Tool":e.name&&e.name.includes(".")&&e.args?"Custom tool":e.name&&e.name.includes(".")&&!e.args?"Function tool":"Built-in tool"}processAgentToolsFromYaml(e,A){let i=e.filter(n=>n.toolType==="Agent Tool");for(let n of i)this.agentToolBoards().has(n.name)||this.loadAgentToolConfiguration(n,A)}loadAgentToolConfiguration(e,A){let i=e.name;this.agentService.getSubAgentBuilder(A,`${i}.yaml`).subscribe({next:n=>{if(n)try{let o=yE(n),a=Ge(cA({name:o.name||i,agent_class:o.agent_class||"LlmAgent",model:o.model||"gemini-2.5-flash",instruction:o.instruction||`You are the ${i} agent that can be used as a tool by other agents.`,description:o.description||""},o.max_iterations&&{max_iterations:o.max_iterations}),{isRoot:!1,sub_agents:o.sub_agents||[],tools:this.parseToolsFromYaml(o.tools||[]),callbacks:this.parseCallbacksFromYaml(o),isAgentTool:!0,skip_summarization:!!e.args?.skip_summarization}),r=this.agentToolBoards();if(r.set(i,a),this.agentToolBoards.set(r),this.agentBuilderService.setAgentToolBoards(r),this.agentBuilderService.addNode(a),this.processAgentToolsFromYaml(a.tools||[],A),a.sub_agents&&a.sub_agents.length>0)for(let s of a.sub_agents)s.config_path&&this.agentService.getSubAgentBuilder(A,s.config_path).subscribe(g=>{if(g){let l=yE(g);this.processAgentToolsFromYaml(this.parseToolsFromYaml(l.tools||[]),A)}})}catch(o){console.error(`Error parsing YAML for agent tool ${i}:`,o),this.createDefaultAgentToolConfiguration(e)}else this.createDefaultAgentToolConfiguration(e)},error:n=>{console.error(`Error loading agent tool configuration for ${i}:`,n),this.createDefaultAgentToolConfiguration(e)}})}createDefaultAgentToolConfiguration(e){let A=e.name,i={name:A,agent_class:"LlmAgent",model:"gemini-2.5-flash",instruction:`You are the ${A} agent that can be used as a tool by other agents.`,isRoot:!1,sub_agents:[],tools:[],isAgentTool:!0,skip_summarization:!!e.args?.skip_summarization},n=this.agentToolBoards();n.set(A,i),this.agentToolBoards.set(n),this.agentBuilderService.setAgentToolBoards(n),this.agentBuilderService.addNode(i)}loadAgentTools(e){e.tools?(e.tools=e.tools.filter(A=>A.name&&A.name.trim()!==""),e.tools.forEach(A=>{A.toolType!=="Agent Tool"&&(A.name.includes(".")&&A.args?A.toolType="Custom tool":A.name.includes(".")&&!A.args?A.toolType="Function tool":A.toolType="Built-in tool")})):e.tools=[]}isNodeSelected(e){return this.selectedAgents.includes(e)}isGroupSelected(e){if(!e.data)return!1;let A=e.data().name,i=this.nodes().find(n=>n.data&&n.data().name===A);return i?this.isNodeSelected(i):!1}loadSubAgents(e,A){return nt(this,null,function*(){let i=[{node:A,depth:1,index:1,parentShellId:void 0,parentAgent:void 0,parentGroupId:void 0}],n=[],o=[],a=[];for(;i.length>0;){let{node:r,depth:s,index:g,parentShellId:l,parentAgent:C,parentGroupId:I}=i.shift(),d=r;if(r.config_path)try{let M=yield sU(this.agentService.getSubAgentBuilder(e,r.config_path));d=yE(M),d.tools&&(d.tools=this.parseToolsFromYaml(d.tools||[])),this.processAgentToolsFromYaml(d.tools||[],e)}catch(M){console.error(`Failed to load agent from ${r.config_path}`,M);continue}if(C&&C.sub_agents){let M=C.sub_agents.indexOf(r);M!==-1&&(C.sub_agents[M]=d,this.agentBuilderService.addNode(C))}this.agentBuilderService.addNode(d);let B=this.nodePositions.get(d.name),E=this.isWorkflowAgent(d.agent_class),Q=C?this.isWorkflowAgent(C.agent_class):!1,f,b,S=null;if(Q&&!d.isRoot){let M=C?.sub_agents.indexOf(d)??g,D=o.find(U=>U.id===I),F=D?.height?D.height():this.workflowGroupHeight;f=B??this.calculateWorkflowChildPosition(M,F);let _=this.createAgentNodeWithGroup(d,f,I??void 0,o,n);b=_.shellNode,S=_.groupNode,n.push(b),S&&o.push(S),_.groupEdge&&a.push(_.groupEdge)}else{if(B)f=B;else if(!l)f={x:100,y:150};else{let D=n.find(F=>F.id===l);D?f={x:D.point().x+(g-1)*400,y:D.point().y+300}:f={x:100,y:s*150+50}}let M=this.createAgentNodeWithGroup(d,f,void 0,o,n);b=M.shellNode,S=M.groupNode,n.push(b),E&&!d.isRoot&&(S&&o.push(S),M.groupEdge&&a.push(M.groupEdge))}if(l)if(I){let M=this.createWorkflowChildEdgeFromArrays(b,I,n,o);M&&a.push(M)}else{let M={id:this.generateEdgeId(),source:l,sourceHandle:"source-bottom",target:b.id,targetHandle:"target-top"};a.push(M)}if(d.sub_agents&&d.sub_agents.length>0){let M=1,D=E&&S?S.id:I;for(let F of d.sub_agents)i.push({node:F,parentShellId:b.id,depth:s+1,index:M,parentAgent:d,parentGroupId:D}),M++}}this.nodes.set(n),this.groupNodes.set(o),this.edges.set(a),this.updateGroupDimensions()})}switchToAgentToolBoard(e,A){let i=this.currentAgentTool()||"main";i!==e&&this.navigationStack.push(i);let n=this.agentToolBoards(),o=n.get(e);if(!o){o={isRoot:!1,name:e,agent_class:"LlmAgent",model:"gemini-2.5-flash",instruction:`You are the ${e} agent that can be used as a tool by other agents.`,sub_agents:[],tools:[],isAgentTool:!0,skip_summarization:!1};let a=new Map(n);a.set(e,o),this.agentToolBoards.set(a),this.agentBuilderService.setAgentToolBoards(a),A?this.addAgentToolToAgent(e,A):this.addAgentToolToRoot(e)}this.currentAgentTool.set(e),this.isAgentToolMode=!0,this.loadAgentBoard(o),this.agentBuilderService.setSelectedNode(o),this.agentBuilderService.requestSideTabChange("config")}backToMainCanvas(){if(this.navigationStack.length>0){let e=this.navigationStack.pop();if(e==="main"){this.currentAgentTool.set(null),this.isAgentToolMode=!1;let A=this.agentBuilderService.getRootNode();A&&(this.loadAgentBoard(A),this.agentBuilderService.setSelectedNode(A),this.agentBuilderService.requestSideTabChange("config"))}else{let i=this.agentToolBoards().get(e);i&&(this.currentAgentTool.set(e),this.isAgentToolMode=!0,this.loadAgentBoard(i),this.agentBuilderService.setSelectedNode(i),this.agentBuilderService.requestSideTabChange("config"))}}else{this.currentAgentTool.set(null),this.isAgentToolMode=!1;let e=this.agentBuilderService.getRootNode();e&&(this.loadAgentBoard(e),this.agentBuilderService.setSelectedNode(e),this.agentBuilderService.requestSideTabChange("config"))}}loadAgentBoard(e){return nt(this,null,function*(){if(this.captureCurrentNodePositions(),this.nodes.set([]),this.groupNodes.set([]),this.edges.set([]),this.nodeId=0,this.edgeId=0,this.loadAgentTools(e),this.agentBuilderService.addNode(e),e.tools&&e.tools.length>0?this.agentBuilderService.setAgentTools(e.name,e.tools):this.agentBuilderService.setAgentTools(e.name,[]),e.sub_agents&&e.sub_agents.length>0)yield this.loadSubAgents(this.appName,e);else{let A=this.nodePositions.get(e.name)??{x:100,y:150},i=this.createNode(e,A);if(this.nodes.set([i]),this.isWorkflowAgent(e.agent_class)){let{groupNode:n,edge:o}=this.createWorkflowGroup(e,i,A);this.groupNodes.set([n]),o&&this.edges.set([o])}}this.agentBuilderService.setSelectedNode(e)})}addAgentToolToAgent(e,A){let i=this.agentBuilderService.getNode(A);if(i){if(i.tools&&i.tools.some(o=>o.name===e))return;let n={name:e,toolType:"Agent Tool",toolAgentName:e};i.tools||(i.tools=[]),i.tools.push(n),i.tools=i.tools.filter(o=>o.name&&o.name.trim()!==""),this.agentBuilderService.setAgentTools(A,i.tools)}}addAgentToolToRoot(e){let A=this.agentBuilderService.getRootNode();if(A){if(A.tools&&A.tools.some(n=>n.name===e))return;let i={name:e,toolType:"Agent Tool",toolAgentName:e};A.tools||(A.tools=[]),A.tools.push(i),this.agentBuilderService.setAgentTools("root_agent",A.tools)}}deleteAgentToolBoard(e){let A=this.agentToolBoards(),i=new Map(A);i.delete(e),this.agentToolBoards.set(i),this.agentBuilderService.setAgentToolBoards(i);let n=this.agentBuilderService.getNodes();for(let o of n)o.tools&&(o.tools=o.tools.filter(a=>!(a.toolType==="Agent Tool"&&(a.toolAgentName===e||a.name===e))),this.agentBuilderService.setAgentTools(o.name,o.tools));this.navigationStack=this.navigationStack.filter(o=>o!==e),this.currentAgentTool()===e&&this.backToMainCanvas()}getBackButtonTooltip(){if(this.navigationStack.length>0){let e=this.navigationStack[this.navigationStack.length-1];return e==="main"?"Back to Main Canvas":`Back to ${e}`}return"Back to Main Canvas"}onBuilderAssistantClose(){this.builderAssistantCloseRequest.emit()}reloadCanvasFromYaml(){this.appNameInput&&this.agentService.getAgentBuilderTmp(this.appNameInput).subscribe({next:e=>{e&&this.loadFromYaml(e,this.appNameInput)},error:e=>{console.error("Error reloading canvas:",e)}})}captureCurrentNodePositions(){for(let e of this.nodes()){if(!e?.data)continue;let A=e.data();A&&this.nodePositions.set(A.name,cA({},e.point()))}}updateGroupDimensions(){for(let s of this.groupNodes()){if(!s.data)continue;let g=s.data().name,l=this.nodes().filter(f=>f.parentId&&f.parentId()===s.id);if(l.length===0){s.width&&s.width.set(480),s.height&&s.height.set(220);continue}l.sort((f,b)=>f.point().x-b.point().x),l.forEach((f,b)=>{let _={x:45+b*428,y:80};if(f.point.set(_),f.data){let U=f.data();U&&this.nodePositions.set(U.name,_)}});let C=1/0,I=1/0,d=-1/0,B=-1/0;for(let f of l){let b=f.point(),S=f.data?f.data():void 0,M=120;S&&S.tools&&S.tools.length>0&&(M+=20+S.tools.length*36),C=Math.min(C,b.x),I=Math.min(I,b.y),d=Math.max(d,b.x+340+68),B=Math.max(B,b.y+M)}let E=d-C+80,Q=B-I+80;s.width&&s.width.set(Math.max(480,E)),s.height&&s.height.set(Math.max(220,Q))}}getToolIcon(e){return ME(e.name,e.toolType)}getAgentIcon(e){switch(e){case"SequentialAgent":return"more_horiz";case"LoopAgent":return"sync";case"ParallelAgent":return"density_medium";default:return"psychology"}}isGroupEmpty(e){return!this.nodes().some(i=>i.parentId&&i.parentId()===e)}shouldShowAddButton(e){let A=e.data?e.data():void 0;if(!A)return!1;let i=this.isWorkflowAgent(A.agent_class),n=e.parentId&&e.parentId();if(i&&!n||!this.isNodeSelected(e))return!1;if(n&&e.parentId){let o=e.parentId(),a=this.nodes().filter(s=>s.parentId&&s.parentId()===o);if(a.length===0)return!0;let r=a.reduce((s,g)=>g.point().x>s.point().x?g:s,a[0]);return e.id===r.id}return!0}static \u0275fac=function(A){return new(A||t)(at(Gs),at(Kh),at(Cs))};static \u0275cmp=kA({type:t,selectors:[["app-canvas"]],viewQuery:function(A,i){if(A&1&&ai(VJA,5)(WJA,5),A&2){let n;ce(n=Ce())&&(i.canvasRef=n.first),ce(n=Ce())&&(i.svgCanvasRef=n.first)}},inputs:{showSidePanel:"showSidePanel",showBuilderAssistant:"showBuilderAssistant",appNameInput:"appNameInput"},outputs:{toggleSidePanelRequest:"toggleSidePanelRequest",builderAssistantCloseRequest:"builderAssistantCloseRequest"},features:[ti],decls:7,vars:8,consts:[["emptyGroupMenuTrigger","matMenuTrigger"],["emptyGroupMenu","matMenu"],["agentMenuTrigger","matMenuTrigger"],["agentMenu","matMenu"],[1,"canvas-container"],[1,"canvas-workspace",3,"click"],[1,"agent-tool-banner"],["matTooltip","Open panel",1,"material-symbols-outlined","open-panel-btn"],["view","auto",3,"nodes","edges","background","snapGrid"],[1,"canvas-instructions"],[3,"closePanel","reloadCanvas","isVisible","appName"],[1,"banner-content"],["mat-icon-button","",1,"back-to-main-btn",3,"click","matTooltip"],[1,"banner-info"],[1,"material-symbols-outlined","banner-icon"],[1,"banner-text"],[1,"agent-tool-name"],[1,"banner-subtitle"],["matTooltip","Open panel",1,"material-symbols-outlined","open-panel-btn",3,"click"],["groupNode",""],["nodeHtml",""],["selectable","","rx","12","ry","12",3,"click","pointerdown"],["x","12","y","12"],[1,"workflow-group-chip"],[1,"workflow-chip-icon"],[1,"workflow-chip-label"],["type","target","position","top","id","target-top"],[1,"empty-group-placeholder",3,"click"],["mat-icon-button","","matTooltip","Add sub-agent","aria-label","Add sub-agent",3,"click","matMenuTriggerFor"],[1,"empty-group-label"],["mat-menu-item","",3,"click"],["selectable","",1,"custom-node",3,"click","pointerdown"],[1,"node-title-wrapper"],[1,"node-title"],[2,"margin-right","5px"],[1,"node-badge"],[1,"action-button-bar"],["matIconButton","","matTooltip","Delete sub-agent","aria-label","Delete sub-agent",1,"action-btn","delete-subagent-btn"],[1,"tools-container"],[1,"add-subagent-container"],["type","target","position","left","id","target-left"],["type","source","position","right","id","source-right"],["type","source","position","bottom","id","source-bottom"],["matIconButton","","matTooltip","Delete sub-agent","aria-label","Delete sub-agent",1,"action-btn","delete-subagent-btn",3,"click"],[1,"tools-list"],[1,"tool-item"],[1,"tool-item",3,"click"],[1,"tool-item-icon"],[1,"tool-item-name"],["matIconButton","","matTooltip","Add sub-agent","aria-label","Add sub-agent",1,"add-subagent-btn",3,"click","matMenuTriggerFor"],[1,"add-subagent-symbol"],[1,"instruction-content"],[1,"instruction-icon"],[1,"instruction-tips"],[1,"tip"]],template:function(A,i){A&1&&(m(0,"div",4)(1,"div",5),tA("click",function(o){return i.onCanvasClick(o)}),V(2,AYA,13,2,"div",6),V(3,eYA,2,0,"span",7),V(4,BYA,3,6,"vflow",8),V(5,EYA,19,0,"div",9),w(),m(6,"app-builder-assistant",10),tA("closePanel",function(){return i.onBuilderAssistantClose()})("reloadCanvas",function(){return i.reloadCanvasFromYaml()}),w()()),A&2&&(p(),ne("has-banner",i.currentAgentTool()),p(),W(i.currentAgentTool()?2:-1),p(),W(i.showSidePanel?-1:3),p(),W(i.vflowNodes().length>0?4:-1),p(),W(i.vflowNodes().length===0?5:-1),p(),$("isVisible",i.showBuilderAssistant)("appName",i.appName))},dependencies:[JsA,cK,YsA,E7,Q7,Fn,xa,AC,C2,_h,Lv,ls],styles:['[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;flex:1;min-height:0}.canvas-container[_ngcontent-%COMP%]{width:100%;height:100%;background:var(--builder-canvas-container-background);display:flex;flex-direction:column;border-radius:8px;overflow:hidden;box-shadow:var(--builder-canvas-shadow);flex:1;min-height:0;position:relative}.canvas-header[_ngcontent-%COMP%]{background:var(--builder-canvas-header-background);padding:16px 24px;border-bottom:2px solid var(--builder-border-color);display:flex;justify-content:space-between;align-items:center}.canvas-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;color:var(--builder-text-primary-color);font-size:18px;font-weight:600;font-family:Google Sans,Helvetica Neue,sans-serif;background:var(--builder-canvas-header-title-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.canvas-controls[_ngcontent-%COMP%]{display:flex;gap:8px}.canvas-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{background:var(--builder-button-background-color);border:1px solid var(--builder-button-border-color);color:var(--builder-button-text-color);transition:all .3s ease}.canvas-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:var(--builder-button-hover-background-color);border-color:var(--builder-button-hover-border-color);transform:translateY(-1px)}.canvas-workspace[_ngcontent-%COMP%]{flex:1;position:relative;overflow:hidden;background-color:var(--builder-canvas-workspace-background);min-height:0;width:100%;height:100%}.agent-tool-banner[_ngcontent-%COMP%]{position:absolute;top:0;left:0;right:0;z-index:1000;background:linear-gradient(135deg,#1e3a8a,#3b82f6);border-bottom:2px solid rgba(59,130,246,.3);box-shadow:0 4px 16px #0000004d}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%]{padding:12px 20px;display:flex;align-items:center;gap:16px}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%]{background:#ffffff1a;color:#fff;border:1px solid rgba(255,255,255,.2);transition:all .2s ease}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%]:hover{background:#fff3;transform:scale(1.05)}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .back-to-main-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex:1}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-icon[_ngcontent-%COMP%]{font-size:28px;width:28px;height:28px;color:#ffffffe6}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] .agent-tool-name[_ngcontent-%COMP%]{margin:0;color:#fff;font-size:18px;font-weight:600;font-family:Google Sans,Helvetica Neue,sans-serif;line-height:1.2}.agent-tool-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%] .banner-info[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] .banner-subtitle[_ngcontent-%COMP%]{margin:0;color:#fffc;font-size:12px;font-weight:400;line-height:1}.canvas-workspace[_ngcontent-%COMP%]:has(.agent-tool-banner) vflow[_ngcontent-%COMP%]{padding-top:68px}.canvas-workspace.has-banner[_ngcontent-%COMP%] vflow{padding-top:68px!important} vflow{width:100%!important;height:100%!important;display:block!important} vflow .root-svg{background-color:var(--builder-canvas-workspace-background)!important;color:var(--builder-text-primary-color)!important;width:100%!important;height:100%!important;min-width:100%!important;min-height:100%!important}.diagram-canvas[_ngcontent-%COMP%]{display:block;width:100%;height:100%;cursor:crosshair;transition:cursor .2s ease;object-fit:contain;image-rendering:pixelated}.diagram-canvas[_ngcontent-%COMP%]:active{cursor:grabbing}.canvas-instructions[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;z-index:1}.instruction-content[_ngcontent-%COMP%]{background:var(--builder-canvas-instruction-background);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:2px solid var(--builder-canvas-instruction-border);border-radius:16px;padding:32px;box-shadow:var(--builder-canvas-shadow)}.instruction-content[_ngcontent-%COMP%] .instruction-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;color:var(--builder-button-text-color);margin-bottom:16px;animation:_ngcontent-%COMP%_pulse 2s infinite}.instruction-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{color:var(--builder-text-primary-color);font-size:20px;font-weight:600;margin:0 0 12px;font-family:Google Sans,Helvetica Neue,sans-serif}.instruction-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-size:14px;margin:0 0 24px;line-height:1.5}.instruction-tips[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.tip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;color:var(--builder-accent-color);font-size:13px}.tip[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.connection-mode-indicator[_ngcontent-%COMP%]{position:absolute;top:20px;left:50%;transform:translate(-50%);z-index:10;animation:_ngcontent-%COMP%_slideDown .3s ease-out}.connection-indicator-content[_ngcontent-%COMP%]{background:linear-gradient(135deg,#1b73e8,#4285f4);color:#fff;padding:12px 20px;border-radius:24px;display:flex;align-items:center;gap:12px;box-shadow:0 4px 16px #1b73e866;border:1px solid rgba(255,255,255,.2)}.connection-indicator-content[_ngcontent-%COMP%] .connection-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px;animation:_ngcontent-%COMP%_pulse 1.5s infinite}.connection-indicator-content[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;font-weight:500;white-space:nowrap}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{background:#fff3;color:#fff;border:1px solid rgba(255,255,255,.3);width:32px;height:32px;min-width:32px}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:#ffffff4d;transform:scale(1.1)}.connection-indicator-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}@keyframes _ngcontent-%COMP%_slideDown{0%{opacity:0;transform:translate(-50%) translateY(-20px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.canvas-footer[_ngcontent-%COMP%]{background:var(--builder-canvas-header-background);padding:12px 24px;border-top:1px solid var(--builder-border-color);display:flex;justify-content:space-between;align-items:center}.node-count[_ngcontent-%COMP%], .connection-count[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;color:var(--builder-text-secondary-color);font-size:13px;font-weight:500}.node-count[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .connection-count[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px;color:var(--builder-accent-color)}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.05)}}.canvas-workspace.drag-over[_ngcontent-%COMP%]{background:radial-gradient(circle at 20% 50%,rgba(66,133,244,.1) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(52,168,83,.1) 0%,transparent 50%),radial-gradient(circle at 40% 80%,rgba(251,188,4,.1) 0%,transparent 50%),#131314}.canvas-workspace.drag-over[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;border:2px dashed #00bbea;border-radius:8px;margin:16px;animation:_ngcontent-%COMP%_dashMove 1s linear infinite}@keyframes _ngcontent-%COMP%_dashMove{0%{border-color:#8ab4f84d}50%{border-color:#8ab4f8cc}to{border-color:#8ab4f84d}}@media(max-width:768px){.canvas-header[_ngcontent-%COMP%]{padding:12px 16px}.canvas-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:16px}.instruction-content[_ngcontent-%COMP%]{padding:24px;margin:16px}.instruction-content[_ngcontent-%COMP%] .instruction-icon[_ngcontent-%COMP%]{font-size:36px;width:36px;height:36px}.instruction-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:18px}.canvas-footer[_ngcontent-%COMP%]{padding:8px 16px;flex-direction:column;gap:8px}}.custom-node[_ngcontent-%COMP%]{width:340px;background:var(--builder-canvas-node-background);border:1px solid var(--builder-canvas-node-border);border-radius:8px;align-items:center;position:relative;max-height:none;padding-bottom:0;overflow:visible}.custom-node[_ngcontent-%COMP%]:hover{border-color:var(--builder-canvas-node-hover-border)}.custom-node_selected[_ngcontent-%COMP%]{border:2px solid;border-color:var(--builder-accent-color)}.custom-node_selected[_ngcontent-%COMP%] mat-chip[_ngcontent-%COMP%]{--mdc-chip-outline-color: var(--builder-canvas-node-chip-outline)}.custom-node_selected[_ngcontent-%COMP%]:hover{border-color:var(--builder-accent-color)}[_nghost-%COMP%] .default-group-node{background-color:var(--builder-canvas-group-background)!important;border:2px solid var(--builder-canvas-group-border)!important}.node-title-wrapper[_ngcontent-%COMP%]{padding-top:12px;padding-bottom:12px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center}.node-title[_ngcontent-%COMP%]{padding-left:12px;padding-right:12px;display:flex;align-items:center;color:var(--builder-text-primary-color);font-weight:500}.node-badge[_ngcontent-%COMP%]{margin-left:8px;padding:2px 6px;border-radius:999px;background:var(--builder-canvas-node-badge-background);color:var(--builder-accent-color);font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.tools-container[_ngcontent-%COMP%]{padding:8px 12px;border-top:1px solid var(--builder-border-color)}.tools-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.tool-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:4px;cursor:pointer;transition:background-color .2s ease;color:var(--builder-text-primary-color)}.tool-item[_ngcontent-%COMP%]:hover{background-color:var(--builder-item-hover-color)}.tool-item[_ngcontent-%COMP%] .tool-item-icon[_ngcontent-%COMP%]{font-size:22px;width:22px;height:22px;color:var(--builder-text-primary-color);flex-shrink:0}.tool-item[_ngcontent-%COMP%] .tool-item-name[_ngcontent-%COMP%]{font-family:Google Sans,sans-serif;font-size:15px;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-item.more-tools[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-style:italic}.tool-item.more-tools[_ngcontent-%COMP%] .tool-item-icon[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color)}.custom-node_selected[_ngcontent-%COMP%] .node-title-wrapper[_ngcontent-%COMP%]{border-bottom-color:var(--builder-canvas-node-chip-outline)}.custom-node_selected[_ngcontent-%COMP%] .node-title-wrapper[_ngcontent-%COMP%] .node-title[_ngcontent-%COMP%]{color:var(--builder-accent-color)}.tools-header[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:space-between}.callbacks-container[_ngcontent-%COMP%]{padding:12px 6px 12px 12px}.callbacks-header[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:space-between}.callback-type[_ngcontent-%COMP%]{font-size:11px;background:var(--builder-chip-background-color);color:var(--builder-accent-color);padding:2px 6px;border-radius:4px;margin-left:4px;font-weight:500}.add-callback-btn[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;border-radius:4px;width:28px;height:28px;padding:0}.add-callback-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin:0;font-size:18px;width:18px;height:18px}.add-callback-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-item-hover-color);transform:scale(1.1)}.instruction-title[_ngcontent-%COMP%]{font-family:Google Sans;color:var(--builder-text-muted-color);margin-bottom:10px}.instructions[_ngcontent-%COMP%]{font-family:Google Sans;margin-bottom:10px}.agent-resources[_ngcontent-%COMP%]{padding:8px 12px}.empty-resource[_ngcontent-%COMP%]{margin-top:8px;color:var(--builder-text-secondary-color);margin-bottom:8px;display:flex;font-size:13px}.empty-resource[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:none}.action-button-bar[_ngcontent-%COMP%]{display:flex;gap:8px;margin-right:4px}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]{background:none;color:var(--builder-text-secondary-color);border:none;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;pointer-events:auto;border-radius:4px}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-item-hover-color);transform:scale(1.1)}.action-button-bar[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}.action-button-bar[_ngcontent-%COMP%] .delete-subagent-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color)}.add-tool-btn[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;border-radius:4px;width:28px;height:28px;padding:0}.add-tool-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{margin:0;font-size:18px;width:18px;height:18px}.add-tool-btn[_ngcontent-%COMP%]:hover{color:var(--builder-text-primary-color);background-color:var(--builder-item-hover-color);transform:scale(1.1)}.add-subagent-container[_ngcontent-%COMP%]{position:absolute;left:50%;bottom:-68px;transform:translate(-50%);display:flex;justify-content:center;pointer-events:none}.custom-node.in-group[_ngcontent-%COMP%] .add-subagent-container[_ngcontent-%COMP%]{left:auto;right:-68px;bottom:50%;transform:translateY(50%)}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:50%;border:2px solid var(--builder-accent-color);background:var(--builder-canvas-add-btn-background);color:var(--builder-accent-color);display:flex;align-items:center;justify-content:center;padding:0;box-sizing:border-box;transition:transform .2s ease,box-shadow .2s ease,background .2s ease;pointer-events:auto}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%] .add-subagent-symbol[_ngcontent-%COMP%]{font-size:28px;line-height:1;font-weight:400}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]:hover{transform:scale(1.05);box-shadow:var(--builder-canvas-add-btn-shadow);background:var(--builder-canvas-add-btn-hover-background)}.add-subagent-container[_ngcontent-%COMP%] .add-subagent-btn[_ngcontent-%COMP%]:focus-visible{outline:none;box-shadow:var(--builder-canvas-add-btn-shadow)}.open-panel-btn[_ngcontent-%COMP%]{position:absolute;width:24px;height:24px;color:var(--builder-text-tertiary-color);cursor:pointer;margin-left:20px;margin-top:20px;z-index:9999}.custom-node[_ngcontent-%COMP%]:hover .action-button-bar[_ngcontent-%COMP%], .custom-node.custom-node_selected[_ngcontent-%COMP%] .action-button-bar[_ngcontent-%COMP%]{opacity:1;pointer-events:auto}[_nghost-%COMP%] div[nodehandlescontroller][noderesizecontroller].wrapper{height:0px!important;overflow:visible!important}[_nghost-%COMP%] foreignObject.selectable, [_nghost-%COMP%] foreignObject.selectable>div{overflow:visible!important}[_nghost-%COMP%] .interactive-edge{stroke:var(--builder-accent-color)!important;stroke-width:2!important}[_nghost-%COMP%] .default-handle{stroke:var(--builder-accent-color)!important;stroke-width:1!important;fill:var(--builder-canvas-handle-fill)!important}[_nghost-%COMP%] .reconnect-handle{stroke:var(--builder-accent-color)!important;stroke-width:2!important;fill:var(--builder-canvas-reconnect-handle-fill)!important}[_nghost-%COMP%] .workflow-group-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;background:var(--builder-canvas-workflow-chip-background);border:1px solid var(--builder-canvas-workflow-chip-border);border-radius:16px;color:var(--builder-accent-color);font-family:Google Sans,sans-serif;font-size:12px;font-weight:500;height:32px;box-sizing:border-box;white-space:nowrap;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}[_nghost-%COMP%] .workflow-group-chip .workflow-chip-icon{font-size:16px;width:16px;height:16px;line-height:16px}[_nghost-%COMP%] .workflow-group-chip .workflow-chip-label{color:var(--builder-text-primary-color);font-weight:500;font-size:12px;line-height:1}[_nghost-%COMP%] .empty-group-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px;border-radius:8px;text-align:center;background:var(--builder-canvas-empty-group-background);border:2px dashed var(--builder-canvas-empty-group-border);transition:all .3s ease}[_nghost-%COMP%] .empty-group-placeholder:hover{background:var(--builder-canvas-empty-group-hover-background);border-color:var(--builder-canvas-empty-group-hover-border)}[_nghost-%COMP%] .empty-group-placeholder button{border:2px solid var(--builder-accent-color);background-color:var(--builder-canvas-empty-group-btn-background);color:var(--builder-accent-color);width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;transition:all .2s ease}[_nghost-%COMP%] .empty-group-placeholder button:hover{background-color:var(--builder-canvas-empty-group-btn-hover-background);transform:scale(1.1);box-shadow:var(--builder-canvas-add-btn-shadow)}[_nghost-%COMP%] .empty-group-placeholder button mat-icon{font-size:24px;width:24px;height:24px}[_nghost-%COMP%] .empty-group-placeholder .empty-group-label{font-size:13px;font-weight:500;color:var(--builder-text-secondary-color);font-family:Google Sans,sans-serif}']})};function QYA(t,e){t&1&&Di(0,"div",2)}var hYA=new yA("MAT_PROGRESS_BAR_DEFAULT_OPTIONS");var v7=(()=>{class t{_elementRef=h(ge);_ngZone=h(Oe);_changeDetectorRef=h(Dt);_renderer=h(_i);_cleanupTransitionEnd;constructor(){let A=Nu(),i=h(hYA,{optional:!0});this._isNoopAnimation=A==="di-disabled",A==="reduced-motion"&&this._elementRef.nativeElement.classList.add("mat-progress-bar-reduced-motion"),i&&(i.color&&(this.color=this._defaultColor=i.color),this.mode=i.mode||this.mode)}_isNoopAnimation;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;_defaultColor="primary";get value(){return this._value}set value(A){this._value=TsA(A||0),this._changeDetectorRef.markForCheck()}_value=0;get bufferValue(){return this._bufferValue||0}set bufferValue(A){this._bufferValue=TsA(A||0),this._changeDetectorRef.markForCheck()}_bufferValue=0;animationEnd=new $A;get mode(){return this._mode}set mode(A){this._mode=A,this._changeDetectorRef.markForCheck()}_mode="determinate";ngAfterViewInit(){this._ngZone.runOutsideAngular(()=>{this._cleanupTransitionEnd=this._renderer.listen(this._elementRef.nativeElement,"transitionend",this._transitionendHandler)})}ngOnDestroy(){this._cleanupTransitionEnd?.()}_getPrimaryBarTransform(){return`scaleX(${this._isIndeterminate()?1:this.value/100})`}_getBufferBarFlexBasis(){return`${this.mode==="buffer"?this.bufferValue:100}%`}_isIndeterminate(){return this.mode==="indeterminate"||this.mode==="query"}_transitionendHandler=A=>{this.animationEnd.observers.length===0||!A.target||!A.target.classList.contains("mdc-linear-progress__primary-bar")||(this.mode==="determinate"||this.mode==="buffer")&&this._ngZone.run(()=>this.animationEnd.next({value:this.value}))};static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-progress-bar"]],hostAttrs:["role","progressbar","aria-valuemin","0","aria-valuemax","100","tabindex","-1",1,"mat-mdc-progress-bar","mdc-linear-progress"],hostVars:10,hostBindings:function(i,n){i&2&&(ie("aria-valuenow",n._isIndeterminate()?null:n.value)("mode",n.mode),Po("mat-"+n.color),ne("_mat-animation-noopable",n._isNoopAnimation)("mdc-linear-progress--animation-ready",!n._isNoopAnimation)("mdc-linear-progress--indeterminate",n._isIndeterminate()))},inputs:{color:"color",value:[2,"value","value",en],bufferValue:[2,"bufferValue","bufferValue",en],mode:"mode"},outputs:{animationEnd:"animationEnd"},exportAs:["matProgressBar"],decls:7,vars:5,consts:[["aria-hidden","true",1,"mdc-linear-progress__buffer"],[1,"mdc-linear-progress__buffer-bar"],[1,"mdc-linear-progress__buffer-dots"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__primary-bar"],[1,"mdc-linear-progress__bar-inner"],["aria-hidden","true",1,"mdc-linear-progress__bar","mdc-linear-progress__secondary-bar"]],template:function(i,n){i&1&&(li(0,"div",0),Di(1,"div",1),V(2,QYA,1,0,"div",2),Ei(),li(3,"div",3),Di(4,"span",4),Ei(),li(5,"div",5),Di(6,"span",4),Ei()),i&2&&(p(),wn("flex-basis",n._getBufferBarFlexBasis()),p(),W(n.mode==="buffer"?2:-1),p(),wn("transform",n._getPrimaryBarTransform()))},styles:[`.mat-mdc-progress-bar{--mat-progress-bar-animation-multiplier: 1;display:block;text-align:start}.mat-mdc-progress-bar[mode=query]{transform:scaleX(-1)}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-dots,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__secondary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__bar-inner.mdc-linear-progress__bar-inner{animation:none}.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__primary-bar,.mat-mdc-progress-bar._mat-animation-noopable .mdc-linear-progress__buffer-bar{transition:transform 1ms}.mat-progress-bar-reduced-motion{--mat-progress-bar-animation-multiplier: 2}.mdc-linear-progress{position:relative;width:100%;transform:translateZ(0);outline:1px solid rgba(0,0,0,0);overflow-x:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:max(var(--mat-progress-bar-track-height, 4px),var(--mat-progress-bar-active-indicator-height, 4px))}@media(forced-colors: active){.mdc-linear-progress{outline-color:CanvasText}}.mdc-linear-progress__bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);height:var(--mat-progress-bar-active-indicator-height, 4px)}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}[dir=rtl] .mdc-linear-progress__bar{right:0;transform-origin:center right}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-color:var(--mat-progress-bar-active-indicator-color, var(--mat-sys-primary));border-top-width:var(--mat-progress-bar-active-indicator-height, 4px)}.mdc-linear-progress__buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:var(--mat-progress-bar-track-height, 4px);border-radius:var(--mat-progress-bar-track-shape, var(--mat-sys-corner-none))}.mdc-linear-progress__buffer-dots{background-image:radial-gradient(circle, var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant)) calc(var(--mat-progress-bar-track-height, 4px) / 2), transparent 0);background-repeat:repeat-x;background-size:calc(calc(var(--mat-progress-bar-track-height, 4px) / 2)*5);background-position:left;flex:auto;transform:rotate(180deg);animation:mdc-linear-progress-buffering calc(250ms*var(--mat-progress-bar-animation-multiplier)) infinite linear}@media(forced-colors: active){.mdc-linear-progress__buffer-dots{background-color:ButtonBorder}}[dir=rtl] .mdc-linear-progress__buffer-dots{animation:mdc-linear-progress-buffering-reverse calc(250ms*var(--mat-progress-bar-animation-multiplier)) infinite linear;transform:rotate(0)}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);background-color:var(--mat-progress-bar-track-color, var(--mat-sys-surface-variant))}.mdc-linear-progress__primary-bar{transform:scaleX(0)}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation:mdc-linear-progress-primary-indeterminate-translate calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-primary-indeterminate-scale calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation:mdc-linear-progress-secondary-indeterminate-translate calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-secondary-indeterminate-scale calc(2s*var(--mat-progress-bar-animation-multiplier)) infinite linear}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}@keyframes mdc-linear-progress-buffering{from{transform:rotate(180deg) translateX(calc(var(--mat-progress-bar-track-height, 4px) * -2.5))}}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(-83.67142%)}100%{transform:translateX(-200.611057%)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(-37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(-84.386165%)}100%{transform:translateX(-160.277782%)}}@keyframes mdc-linear-progress-buffering-reverse{from{transform:translateX(-10px)}} -`],encapsulation:2,changeDetection:0})}return t})();function TsA(t,e=0,A=100){return Math.max(e,Math.min(A,t))}var HsA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var fYA=["determinateSpinner"];function mYA(t,e){if(t&1&&(Qt(),m(0,"svg",11),GA(1,"circle",12),w()),t&2){let A=v();ie("viewBox",A._viewBox()),p(),wn("stroke-dasharray",A._strokeCircumference(),"px")("stroke-dashoffset",A._strokeCircumference()/2,"px")("stroke-width",A._circleStrokeWidth(),"%"),ie("r",A._circleRadius())}}var pYA=new yA("mat-progress-spinner-default-options",{providedIn:"root",factory:()=>({diameter:zsA})}),zsA=100,wYA=10,B1=(()=>{class t{_elementRef=h(ge);_noopAnimations;get color(){return this._color||this._defaultColor}set color(A){this._color=A}_color;_defaultColor="primary";_determinateCircle;constructor(){let A=h(pYA),i=Nu(),n=this._elementRef.nativeElement;this._noopAnimations=i==="di-disabled"&&!!A&&!A._forceAnimations,this.mode=n.nodeName.toLowerCase()==="mat-spinner"?"indeterminate":"determinate",!this._noopAnimations&&i==="reduced-motion"&&n.classList.add("mat-progress-spinner-reduced-motion"),A&&(A.color&&(this.color=this._defaultColor=A.color),A.diameter&&(this.diameter=A.diameter),A.strokeWidth&&(this.strokeWidth=A.strokeWidth))}mode;get value(){return this.mode==="determinate"?this._value:0}set value(A){this._value=Math.max(0,Math.min(100,A||0))}_value=0;get diameter(){return this._diameter}set diameter(A){this._diameter=A||0}_diameter=zsA;get strokeWidth(){return this._strokeWidth??this.diameter/10}set strokeWidth(A){this._strokeWidth=A||0}_strokeWidth;_circleRadius(){return(this.diameter-wYA)/2}_viewBox(){let A=this._circleRadius()*2+this.strokeWidth;return`0 0 ${A} ${A}`}_strokeCircumference(){return 2*Math.PI*this._circleRadius()}_strokeDashOffset(){return this.mode==="determinate"?this._strokeCircumference()*(100-this._value)/100:null}_circleStrokeWidth(){return this.strokeWidth/this.diameter*100}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-progress-spinner"],["mat-spinner"]],viewQuery:function(i,n){if(i&1&&ai(fYA,5),i&2){let o;ce(o=Ce())&&(n._determinateCircle=o.first)}},hostAttrs:["role","progressbar","tabindex","-1",1,"mat-mdc-progress-spinner","mdc-circular-progress"],hostVars:18,hostBindings:function(i,n){i&2&&(ie("aria-valuemin",0)("aria-valuemax",100)("aria-valuenow",n.mode==="determinate"?n.value:null)("mode",n.mode),Po("mat-"+n.color),wn("width",n.diameter,"px")("height",n.diameter,"px")("--mat-progress-spinner-size",n.diameter+"px")("--mat-progress-spinner-active-indicator-width",n.diameter+"px"),ne("_mat-animation-noopable",n._noopAnimations)("mdc-circular-progress--indeterminate",n.mode==="indeterminate"))},inputs:{color:"color",mode:"mode",value:[2,"value","value",en],diameter:[2,"diameter","diameter",en],strokeWidth:[2,"strokeWidth","strokeWidth",en]},exportAs:["matProgressSpinner"],decls:14,vars:11,consts:[["circle",""],["determinateSpinner",""],["aria-hidden","true",1,"mdc-circular-progress__determinate-container"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__determinate-circle-graphic"],["cx","50%","cy","50%",1,"mdc-circular-progress__determinate-circle"],["aria-hidden","true",1,"mdc-circular-progress__indeterminate-container"],[1,"mdc-circular-progress__spinner-layer"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-left"],[3,"ngTemplateOutlet"],[1,"mdc-circular-progress__gap-patch"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-right"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__indeterminate-circle-graphic"],["cx","50%","cy","50%"]],template:function(i,n){if(i&1&&(pt(0,mYA,2,8,"ng-template",null,0,w2),m(2,"div",2,1),Qt(),m(4,"svg",3),GA(5,"circle",4),w()(),as(),m(6,"div",5)(7,"div",6)(8,"div",7),on(9,8),w(),m(10,"div",9),on(11,8),w(),m(12,"div",10),on(13,8),w()()()),i&2){let o=An(1);p(4),ie("viewBox",n._viewBox()),p(),wn("stroke-dasharray",n._strokeCircumference(),"px")("stroke-dashoffset",n._strokeDashOffset(),"px")("stroke-width",n._circleStrokeWidth(),"%"),ie("r",n._circleRadius()),p(4),$("ngTemplateOutlet",o),p(2),$("ngTemplateOutlet",o),p(2),$("ngTemplateOutlet",o)}},dependencies:[sl],styles:[`.mat-mdc-progress-spinner{--mat-progress-spinner-animation-multiplier: 1;display:block;overflow:hidden;line-height:0;position:relative;direction:ltr;transition:opacity 250ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-progress-spinner circle{stroke-width:var(--mat-progress-spinner-active-indicator-width, 4px)}.mat-mdc-progress-spinner._mat-animation-noopable,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__determinate-circle{transition:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__spinner-layer,.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container{animation:none !important}.mat-mdc-progress-spinner._mat-animation-noopable .mdc-circular-progress__indeterminate-container circle{stroke-dasharray:0 !important}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic,.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle{stroke:currentColor;stroke:CanvasText}}.mat-progress-spinner-reduced-motion{--mat-progress-spinner-animation-multiplier: 1.25}.mdc-circular-progress__determinate-container,.mdc-circular-progress__indeterminate-circle-graphic,.mdc-circular-progress__indeterminate-container,.mdc-circular-progress__spinner-layer{position:absolute;width:100%;height:100%}.mdc-circular-progress__determinate-container{transform:rotate(-90deg)}.mdc-circular-progress--indeterminate .mdc-circular-progress__determinate-container{opacity:0}.mdc-circular-progress__indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{opacity:1;animation:mdc-circular-progress-container-rotate calc(1568.2352941176ms*var(--mat-progress-spinner-animation-multiplier)) linear infinite}.mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress__indeterminate-circle-graphic{fill:rgba(0,0,0,0)}.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:var(--mat-progress-spinner-active-indicator-color, var(--mat-sys-primary))}@media(forced-colors: active){.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic{stroke:CanvasText}}.mdc-circular-progress__determinate-circle{transition:stroke-dashoffset 500ms cubic-bezier(0, 0, 0.2, 1)}.mdc-circular-progress__gap-patch{position:absolute;top:0;left:47.5%;box-sizing:border-box;width:5%;height:100%;overflow:hidden}.mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.mdc-circular-progress__circle-clipper .mdc-circular-progress__indeterminate-circle-graphic{width:200%}.mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{left:-100%}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-left-spin calc(1333ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-right-spin calc(1333ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress__circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.mdc-circular-progress--indeterminate .mdc-circular-progress__spinner-layer{animation:mdc-circular-progress-spinner-layer-rotate calc(5332ms*var(--mat-progress-spinner-animation-multiplier)) cubic-bezier(0.4, 0, 0.2, 1) infinite both}@keyframes mdc-circular-progress-container-rotate{to{transform:rotate(360deg)}}@keyframes mdc-circular-progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}100%{transform:rotate(1080deg)}}@keyframes mdc-circular-progress-left-spin{from{transform:rotate(265deg)}50%{transform:rotate(130deg)}to{transform:rotate(265deg)}}@keyframes mdc-circular-progress-right-spin{from{transform:rotate(-265deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-265deg)}} -`],encapsulation:2,changeDetection:0})}return t})();var OsA=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[Gi]})}return t})();var b7=class t{constructor(e){this.sanitizer=e}set json(e){this.formattedJson=this.syntaxHighlight(e)}formattedJson="";syntaxHighlight(e){if(!e)return"";try{let A=JSON.parse(e);e=JSON.stringify(A,null,0)}catch{return this.sanitizer.bypassSecurityTrustHtml(this.escapeHtml(e))}return e=e.replace(/&/g,"&").replace(//g,">"),e=e.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,A=>{let i="json-number";return/^"/.test(A)?/:$/.test(A)?i="json-key":i="json-string":/true|false/.test(A)?i="json-boolean":/null/.test(A)&&(i="json-null"),''+A+""}),this.sanitizer.bypassSecurityTrustHtml(e)}escapeHtml(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}static \u0275fac=function(A){return new(A||t)(at($s))};static \u0275cmp=kA({type:t,selectors:[["app-json-tooltip"]],inputs:{json:"json"},decls:1,vars:1,consts:[[3,"innerHTML"]],template:function(A,i){A&1&&Di(0,"div",0),A&2&&vo("innerHTML",i.formattedJson,al)},styles:["[_nghost-%COMP%]{display:block;font-family:Courier New,monospace;font-size:12px;line-height:1.4;white-space:pre-wrap;max-width:800px}"]})};var M7=class t{json="";overlayRef=null;overlay=h(i8);elementRef=h(ge);show(){if(!this.json)return;let e=this.overlay.position().flexibleConnectedTo(this.elementRef).withPositions([{originX:"center",originY:"top",overlayX:"center",overlayY:"bottom",offsetY:-8}]);this.overlayRef=this.overlay.create({positionStrategy:e,scrollStrategy:this.overlay.scrollStrategies.close(),panelClass:"json-tooltip-panel"});let A=new Jg(b7),i=this.overlayRef.attach(A);i.instance.json=this.json}hide(){this.overlayRef&&(this.overlayRef.dispose(),this.overlayRef=null)}ngOnDestroy(){this.hide()}static \u0275fac=function(A){return new(A||t)};static \u0275dir=OA({type:t,selectors:[["","appJsonTooltip",""]],hostBindings:function(A,i){A&1&&tA("mouseenter",function(){return i.show()})("mouseleave",function(){return i.hide()})},inputs:{json:[0,"appJsonTooltip","json"]}})};function yYA(t,e){if(t&1&&GA(0,"a2ui-surface",0),t&2){let A=v();$("surfaceId",A.surfaceId())("surface",A.surface())}}var k7=class t{processor=h(HU);beginRendering=null;surfaceUpdate=null;dataModelUpdate=null;surfaceId=jA(null);activeSurface=jA(null);surface=Ue(()=>this.activeSurface());constructor(){}ngOnChanges(e){let A=[],i=null;e.beginRendering&&this.beginRendering&&Object.keys(this.beginRendering).length>0&&(A.push(this.beginRendering),i=this.beginRendering?.beginRendering?.surfaceId??i),e.surfaceUpdate&&this.surfaceUpdate&&Object.keys(this.surfaceUpdate).length>0&&(A.push(this.surfaceUpdate),i=this.surfaceUpdate?.surfaceUpdate?.surfaceId??i),e.dataModelUpdate&&this.dataModelUpdate&&Object.keys(this.dataModelUpdate).length>0&&(A.push(this.dataModelUpdate),i=this.dataModelUpdate?.dataModelUpdate?.surfaceId??i),A.length>0&&this.processor.processMessages(A),i&&this.surfaceId.set(i);let n=this.surfaceId();if(n){let o=this.processor.getSurfaces();o.has(n)&&this.activeSurface.set(o.get(n))}}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-a2ui-canvas"]],inputs:{beginRendering:"beginRendering",surfaceUpdate:"surfaceUpdate",dataModelUpdate:"dataModelUpdate"},features:[ti],decls:1,vars:1,consts:[[3,"surfaceId","surface"]],template:function(A,i){A&1&&V(0,yYA,1,2,"a2ui-surface",0),A&2&&W(i.surface()?0:-1)},dependencies:[ma,PU],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;overflow:auto}[_nghost-%COMP%] *{box-sizing:border-box}.canvas[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;padding:16px;box-sizing:border-box;min-height:100%}"],changeDetection:0})};var S7=new yA("FeedbackService");var vYA={goodResponseTooltip:"Good response",badResponseTooltip:"Bad response",feedbackAdditionalLabel:"Additional feedback (Optional)",feedbackCommentPlaceholderDown:"Share what could be improved in the response",feedbackCommentPlaceholderUp:"Share what you liked about the response",feedbackCancelButton:"Cancel",feedbackSubmitButton:"Submit",feedbackDialogTitle:"Reasons for feedback (Select all that apply)",feedbackReasonHallucination:"Hallucinated libraries / APIs etc",feedbackReasonIncomplete:"Incomplete answer",feedbackReasonFollowup:"Didn't understand followup",feedbackReasonFactual:"Factual errors",feedbackReasonLinks:"Broken/incorrect links",feedbackReasonIrrelevant:"Irrelevant information",feedbackReasonRepetitive:"Repetitive",feedbackReasonAccurate:"Accurate info",feedbackReasonHelpful:"Helpful",feedbackReasonConcise:"Concise",feedbackReasonUnderstanding:"Good understanding",feedbackReasonClear:"Clear and easy to follow"},PsA=new yA("Message Feedback Messages",{factory:()=>vYA});function bYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_up_filled"),w())}function MYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_up"),w())}function kYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_down_filled"),w())}function SYA(t,e){t&1&&(m(0,"mat-icon"),K(1,"thumb_down"),w())}function xYA(t,e){if(t&1&&(m(0,"mat-chip-option",7),K(1),w()),t&2){let A=e.$implicit;$("value",A),p(),Se(" ",A," ")}}function RYA(t,e){if(t&1){let A=JA();m(0,"div",4)(1,"div",5)(2,"h3"),K(3),w(),m(4,"mat-chip-listbox",6),Ut(5,xYA,2,2,"mat-chip-option",7,Li),w()(),m(7,"div",8)(8,"h3"),K(9),w(),m(10,"mat-form-field",9)(11,"textarea",10),K(12," "),w()()(),m(13,"div",11)(14,"button",12),tA("click",function(){Z(A);let n=v();return X(n.onDetailedFeedbackCancelled())}),K(15),w(),m(16,"button",13),tA("click",function(){Z(A);let n=v();return X(n.onDetailedFeedbackSubmitted())}),K(17),w()()()}if(t&2){let A=v();p(3),qA(A.i18n.feedbackDialogTitle),p(),$("formControl",A.selectedReasons),p(),Jt(A.reasons()),p(4),qA(A.i18n.feedbackAdditionalLabel),p(2),$("formControl",A.comment)("placeholder",A.feedbackPlaceholder()),p(4),Se(" ",A.i18n.feedbackCancelButton," "),p(2),Se(" ",A.i18n.feedbackSubmitButton," ")}}var x7=class t{sessionName=rt.required();eventId=rt.required();i18n=h(PsA);feedbackService=h(S7);existingFeedback=C6({params:()=>({sessionName:this.sessionName(),eventId:this.eventId()}),stream:({params:e})=>this.feedbackService.getFeedback(e.sessionName,e.eventId)});selectedFeedbackDirection=jA(void 0);feedbackDirection=Ue(()=>this.selectedFeedbackDirection()??this.existingFeedback.value()?.direction);isDetailedFeedbackVisible=jA(!1);feedbackPlaceholder=Ue(()=>this.feedbackDirection()==="up"?this.i18n.feedbackCommentPlaceholderUp:this.i18n.feedbackCommentPlaceholderDown);positiveReasonsResource=C6({stream:()=>this.feedbackService.getPositiveFeedbackReasons()});negativeReasonsResource=C6({stream:()=>this.feedbackService.getNegativeFeedbackReasons()});reasons=Ue(()=>this.feedbackDirection()==="up"?this.positiveReasonsResource.value():this.negativeReasonsResource.value());selectedReasons=new ks([]);comment=new ks("");isLoading=jA(!1);sendFeedback(e){this.feedbackDirection()===e?(this.isLoading.set(!0),this.feedbackService.deleteFeedback(this.sessionName(),this.eventId()).subscribe(()=>{this.isLoading.set(!1),this.selectedFeedbackDirection.set(void 0),this.resetDetailedFeedback()})):(this.selectedReasons.reset(),this.isLoading.set(!0),this.feedbackService.sendFeedback(this.sessionName(),this.eventId(),{direction:e}).subscribe(()=>{this.isLoading.set(!1),this.isDetailedFeedbackVisible.set(!0),this.selectedFeedbackDirection.set(e)}))}onDetailedFeedbackSubmitted(){let e=this.feedbackDirection();e&&(this.isLoading.set(!0),this.feedbackService.sendFeedback(this.sessionName(),this.eventId(),{direction:e,reasons:this.selectedReasons.value??[],comment:this.comment.value??void 0}).subscribe(()=>{this.isLoading.set(!1),this.resetDetailedFeedback()}))}onDetailedFeedbackCancelled(){this.selectedFeedbackDirection.set(void 0),this.resetDetailedFeedback()}resetDetailedFeedback(){this.isDetailedFeedbackVisible.set(!1),this.comment.reset(),this.selectedReasons.reset([])}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-message-feedback"]],inputs:{sessionName:[1,"sessionName"],eventId:[1,"eventId"]},decls:9,vars:7,consts:[[1,"message-feedback-container"],[1,"feedback-buttons"],["mat-icon-button","",3,"click","matTooltip","disabled"],["class","feedback-details-container",4,"ngIf"],[1,"feedback-details-container"],[1,"reasons-chips"],["multiple","",3,"formControl"],[3,"value"],[1,"additional-feedback"],["appearance","outline"],["matInput","",3,"formControl","placeholder"],[1,"actions"],["mat-stroked-button","",3,"click"],["mat-flat-button","","color","primary",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"div",1)(2,"button",2),tA("click",function(){return i.sendFeedback("up")}),V(3,bYA,2,0,"mat-icon")(4,MYA,2,0,"mat-icon"),w(),m(5,"button",2),tA("click",function(){return i.sendFeedback("down")}),V(6,kYA,2,0,"mat-icon")(7,SYA,2,0,"mat-icon"),w()(),pt(8,RYA,18,7,"div",3),w()),A&2&&(p(2),$("matTooltip",i.i18n.goodResponseTooltip)("disabled",i.isLoading()),p(),W(i.feedbackDirection()==="up"?3:4),p(2),$("matTooltip",i.i18n.badResponseTooltip)("disabled",i.isLoading()),p(),W(i.feedbackDirection()==="down"?6:7),p(2),$("ngIf",i.isDetailedFeedbackVisible()))},dependencies:[ma,rl,r0,uo,fo,v1,Ns,fn,Wa,Nv,xG,kG,Yr,No,Il,Fn,gl,wa,U2,xa],styles:[".message-feedback-container[_ngcontent-%COMP%]{display:block}.feedback-buttons[_ngcontent-%COMP%]{--mat-icon-button-touch-target-size: 32px;--button-size: 32px;--icon-size: 12px;margin-left:54px;display:flex}.feedback-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:var(--button-size);height:var(--button-size);transition:all .2s ease}.feedback-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:var(--icon-size);height:var(--icon-size);width:var(--icon-size);transition:all .2s ease}.feedback-buttons[_ngcontent-%COMP%] button.selected[_ngcontent-%COMP%]{background-color:var(--side-panel-button-filled-container-color, var(--mat-sys-primary));color:var(--side-panel-button-filled-label-text-color, white)}.feedback-buttons[_ngcontent-%COMP%] button.selected[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:inherit}.reasons-chips[_ngcontent-%COMP%]{margin-bottom:20px}.feedback-details-container[_ngcontent-%COMP%]{margin-left:54px;max-width:500px;padding:16px;background-color:var(--builder-card-background-color);border-radius:8px;margin-top:8px;border:1px solid var(--builder-border-color)}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-weight:500;margin-bottom:8px;margin-top:0;color:var(--builder-text-secondary-color)}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.feedback-details-container[_ngcontent-%COMP%] .additional-feedback[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{min-height:60px;resize:vertical}.feedback-details-container[_ngcontent-%COMP%] .actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.feedback-details-container[_ngcontent-%COMP%] .actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{border-radius:18px;padding:0 16px;height:32px;line-height:32px;font-weight:500}"]})};function R7(t){if(!t)return!1;if(t.name==="computer"){let i=t.args?.action,n=t.args?.coordinate;return["left_click","right_click","middle_click","double_click"].includes(i)&&Array.isArray(n)&&n.length===2}let e=["click_at","hover_at","type_text_at","scroll_at","drag_and_drop","mouse_move","scroll_document"].includes(t.name),A=t.args?.x!=null&&t.args?.y!=null||Array.isArray(t.args?.coordinate)&&t.args?.coordinate.length===2;return e&&A}function qh(t){return t?!!t.response?.image?.data:!1}function NYA(t,e){if(t&1&&K(0),t&2){let A=v(3);Se(" (",A.functionCall.args.action,") ")}}function FYA(t,e){if(t&1&&(m(0,"span",5),K(1),w()),t&2){v();let A=Vs(5);$("matTooltip",A.isVirtual?"Virtual (1000x1000)":"Hardware Mapping"),p(),wU(" [@ ",A.x,"",A.isVirtual?"v":"px",", ",A.y,"",A.isVirtual?"v":"px","] ")}}function _YA(t,e){if(t&1){let A=JA();m(0,"div",2),tA("click",function(){Z(A);let n=v(2);return X(n.clickEvent.emit(n.index))}),m(1,"div",3)(2,"span",4),K(3),V(4,NYA,1,1),Ur(5),V(6,FYA,2,5,"span",5),w()(),m(7,"div",6)(8,"img",7),tA("load",function(n){Z(A);let o=v(2);return X(o.onImageLoad(n))}),w(),GA(9,"div",8),w()()}if(t&2){v();let A=Vs(0),i=v();p(3),Se(" ",i.functionCall.name," "),p(),W(i.functionCall.args&&i.functionCall.args.action?4:-1),p();let n=_g(i.getActualPixelCoordinates());p(),W(n?6:-1),p(2),$("src",A,Ka),p(),$("ngStyle",i.getClickBoxStyle())}}function LYA(t,e){if(t&1&&(Ur(0),V(1,_YA,10,6,"div",1)),t&2){let A=_g(v().getPreviousComputerUseScreenshot());p(),W(A?1:-1)}}function GYA(t,e){if(t&1){let A=JA();m(0,"div",9),tA("click",function(){Z(A);let n=v();return X(n.clickEvent.emit(n.index))}),m(1,"div",3)(2,"span",4),K(3),w()(),GA(4,"img",10),m(5,"div",11)(6,"mat-icon",12),K(7,"computer"),w(),m(8,"span",13),K(9),w()()()}if(t&2){let A=v();p(3),qA(A.functionResponse.name),p(),$("src",A.getComputerUseScreenshot(),Ka),p(5),qA(A.getComputerUseUrl())}}var N7=class t{functionCall;functionResponse;allMessages=[];index=0;clickEvent=new $A;imageDimensions=new Map;VIRTUAL_WIDTH=1e3;VIRTUAL_HEIGHT=1e3;isComputerUseResponse(){return!!this.functionResponse&&qh(this.functionResponse)}isComputerUseClick(){return!!this.functionCall&&R7(this.functionCall)}getComputerUseScreenshot(){return this.getScreenshotFromPayload(this.functionResponse?.response)}getComputerUseUrl(){return this.isComputerUseResponse()&&(this.functionResponse?.response).url||""}getPreviousComputerUseScreenshot(){for(let e=this.index-1;e>=0;e--){let A=this.allMessages[e];if(this.isMsgComputerUseResponse(A)&&A.functionResponses&&A.functionResponses.length>0)for(let i=A.functionResponses.length-1;i>=0;i--){let n=A.functionResponses[i];if(qh(n)){let o=n.response;return this.getScreenshotFromPayload(o)}}}return""}getClickCoordinates(){if(!this.isComputerUseClick())return null;let e=this.functionCall.args;return e?e.coordinate?{x:Number(e.coordinate[0]),y:Number(e.coordinate[1])}:e.x!=null&&e.y!=null?{x:Number(e.x),y:Number(e.y)}:null:null}getActualPixelCoordinates(){let e=this.getClickCoordinates();if(!e)return null;let A=this.imageDimensions.get(this.index);return A?{x:Math.round(e.x/this.VIRTUAL_WIDTH*A.width),y:Math.round(e.y/this.VIRTUAL_HEIGHT*A.height),isVirtual:!1}:Ge(cA({},e),{isVirtual:!0})}getClickBoxStyle(){let e=this.getClickCoordinates();if(!e)return{display:"none"};let A=e.x/this.VIRTUAL_WIDTH*100,i=e.y/this.VIRTUAL_HEIGHT*100;return{left:`${A}%`,top:`${i}%`}}onImageLoad(e){let A=e.target;A.naturalWidth&&A.naturalHeight&&this.imageDimensions.set(this.index,{width:A.naturalWidth,height:A.naturalHeight})}isMsgComputerUseResponse(e){return e.functionResponses&&e.functionResponses.length>0?e.functionResponses.some(A=>qh(A)):!1}getScreenshotFromPayload(e){let A=e?.image;if(!A?.data)return"";let i=A.data;return i.startsWith("data:")?i:`data:${A.mimetype||"image/png"};base64,${i}`}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-computer-action"]],inputs:{functionCall:"functionCall",functionResponse:"functionResponse",allMessages:"allMessages",index:"index"},outputs:{clickEvent:"clickEvent"},decls:2,vars:1,consts:[[1,"computer-use-container"],[1,"computer-use-container","click-visualization-container"],[1,"computer-use-container","click-visualization-container",3,"click"],[1,"computer-use-header"],[1,"computer-use-tool-name"],[1,"actual-pixels",3,"matTooltip"],[1,"image-wrapper"],["alt","Computer Use Screenshot",1,"computer-use-screenshot",3,"load","src"],[1,"click-overlay-box",3,"ngStyle"],[1,"computer-use-container",3,"click"],["alt","Computer Use Screenshot",1,"computer-use-screenshot",3,"src"],[1,"computer-use-footprint"],[1,"computer-icon"],[1,"url-text"]],template:function(A,i){A&1&&V(0,LYA,2,2)(1,GYA,10,3,"div",0),A&2&&W(i.isComputerUseClick()?0:i.isComputerUseResponse()?1:-1)},dependencies:[ma,dp,Il,Fn,U2,xa],styles:['[_nghost-%COMP%]{display:block}.computer-use-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;max-width:600px;border-radius:12px;border:1px solid var(--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color);overflow:hidden;cursor:pointer;margin:5px 5px 10px;background-color:var(--chat-panel-bot-message-message-card-background-color);transition:opacity .2s}.computer-use-container[_ngcontent-%COMP%]:hover{opacity:.9}.computer-use-tool-name[_ngcontent-%COMP%]{font-size:12px;font-family:monospace;font-weight:600;color:var(--chat-panel-input-field-textarea-color);opacity:.9;padding:12px}.computer-use-tool-name[_ngcontent-%COMP%] .actual-pixels[_ngcontent-%COMP%]{opacity:.6;margin-left:8px;font-weight:400}.computer-use-screenshot[_ngcontent-%COMP%]{width:100%;height:auto;display:block;border-bottom:1px solid var(--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color)}.computer-use-footprint[_ngcontent-%COMP%]{display:flex;align-items:center;padding:8px 12px;gap:8px;background-color:var(--chat-panel-thought-chip-background-color)}.computer-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;flex-shrink:0}.url-text[_ngcontent-%COMP%]{font-size:11px;font-family:monospace;white-space:normal;word-break:break-all;color:var(--chat-panel-input-field-textarea-color);opacity:.8;min-width:0}.image-wrapper[_ngcontent-%COMP%]{position:relative;width:100%}.click-overlay-box[_ngcontent-%COMP%]{position:absolute;width:24px;height:24px;border:1px solid rgba(255,255,255,.8);border-radius:50%;transform:translate(-50%,-50%);background-color:#ff00004d;box-shadow:0 0 4px #00000080;pointer-events:none;z-index:10;display:flex;align-items:center;justify-content:center}.click-overlay-box[_ngcontent-%COMP%]:before{content:"";width:2px;height:2px;background-color:red;border-radius:50%;box-shadow:0 0 2px #fff;z-index:11}.click-overlay-box[_ngcontent-%COMP%]:after{content:"";position:absolute;width:100%;height:100%;background:linear-gradient(to right,transparent 48%,rgba(255,255,255,.6) 48%,rgba(255,255,255,.6) 52%,transparent 52%),linear-gradient(to bottom,transparent 48%,rgba(255,255,255,.6) 48%,rgba(255,255,255,.6) 52%,transparent 52%);border-radius:50%}']})};var KYA={cancelEditingTooltip:"Cancel editing",saveEvalMessageTooltip:"Save eval case message",thoughtChipLabel:"Thought",outcomeLabel:"Outcome",outputLabel:"Output",actualToolUsesLabel:"Actual tool uses:",expectedToolUsesLabel:"Expected tool uses:",actualResponseLabel:"Actual response:",expectedResponseLabel:"Expected response:",matchScoreLabel:"Match score",thresholdLabel:"Threshold",evalPassLabel:"Pass",evalFailLabel:"Fail",editEvalMessageTooltip:"Edit eval case message",deleteEvalMessageTooltip:"Delete eval case message",editFunctionArgsTooltip:"Edit function arguments",typeMessagePlaceholder:"Type a Message...",uploadFileTooltip:"Upload local file",moreOptionsTooltip:"More options",updateStateMenuLabel:"Update state",updateStateMenuTooltip:"Update the session state",turnOffMicTooltip:"Turn off microphone",useMicTooltip:"Use microphone",turnOffCamTooltip:"Turn off camera",useCamTooltip:"Use camera",updatedSessionStateChipLabel:"Updated session state"},jsA=new yA("Chat Panel Messages",{factory:()=>KYA});var UYA=["videoContainer"],JYA=["autoScroll"],YYA=["messageTextarea"],TYA=t=>({selected:t}),HYA=(t,e)=>({"user-message":t,"bot-message":e}),zYA=(t,e)=>({"eval-pass":t,"eval-fail":e}),OYA=t=>({hidden:t}),PYA=(t,e)=>({"eval-fail":t,"message-card--highlighted":e}),jYA=(t,e)=>({text:t,thought:e}),F7=t=>({"function-event-button-highlight":t}),IK=t=>({hidden:t});function qYA(t,e){t&1&&(m(0,"div",8),GA(1,"mat-progress-bar",10),w())}function VYA(t,e){if(t&1&&(m(0,"div",22),K(1),w()),t&2){let A=v(2).$index,i=v(2);p(),Se(" #",i.getOverallEventNumber(A)," ")}}function WYA(t,e){t&1&&GA(0,"div",23)}function ZYA(t,e){if(t&1&&(m(0,"div",12),V(1,VYA,2,1,"div",22)(2,WYA,1,0,"div",23),w()),t&2){let A=v().$index,i=v(2);p(),W(i.isFirstUserMessageInGroup(A)?1:2)}}function XYA(t,e){if(t&1&&(m(0,"div",22),K(1),w()),t&2){let A=v(2).$index,i=v(2);p(),Se(" #",i.getOverallEventNumber(A)," ")}}function $YA(t,e){t&1&&GA(0,"div",23)}function ATA(t,e){if(t&1&&(m(0,"div",14),V(1,XYA,2,1,"div",22)(2,$YA,1,0,"div",23),w()),t&2){let A=v().$index,i=v(2);p(),W(i.isFirstMessageInEventGroup(A)?1:2)}}function eTA(t,e){if(t&1&&(m(0,"button",24)(1,"mat-icon",25),K(2,"robot_2"),w()()),t&2){let A=v(),i=A.$implicit,n=A.$index,o=v(2);Po(o.customIconColorClass(n)),$("disabled",!i.eventId)("matTooltip",o.getAgentNameFromEvent(n))("ngClass",ss(5,OYA,!o.getAgentNameFromEvent(n)))}}function tTA(t,e){t&1&&GA(0,"mat-progress-bar",26)}function iTA(t,e){if(t&1&&GA(0,"img",32),t&2){let A=v().$implicit;$("src",A.url,Ka)}}function nTA(t,e){if(t&1&&(m(0,"a",33),K(1),w()),t&2){let A=v(2).$implicit;$("href",A.url,Ka),p(),qA(A.file.name)}}function oTA(t,e){if(t&1&&K(0),t&2){let A=v(2).$implicit;Se(" ",A.file.name," ")}}function aTA(t,e){if(t&1&&(m(0,"mat-icon"),K(1,"insert_drive_file"),w(),V(2,nTA,2,2,"a",33)(3,oTA,1,1)),t&2){let A=v().$implicit;p(2),W(A.url?2:3)}}function rTA(t,e){if(t&1&&(m(0,"div",31),V(1,iTA,1,1,"img",32),V(2,aTA,4,1),w()),t&2){let A=e.$implicit;p(),W(A.file.type.startsWith("image/")?1:-1),p(),W(A.file.type.startsWith("image/")?-1:2)}}function sTA(t,e){if(t&1&&(m(0,"div",27),Ut(1,rTA,3,2,"div",31,Li),w()),t&2){let A=v(2).$implicit;p(),Jt(A.attachments)}}function gTA(t,e){if(t&1&&(m(0,"div",28),K(1),w()),t&2){let A=v(4);p(),qA(A.i18n.thoughtChipLabel)}}function lTA(t,e){if(t&1){let A=JA();m(0,"div",34)(1,"textarea",36,2),tA("ngModelChange",function(n){Z(A);let o=v(5);return X(o.userEditEvalCaseMessageChange.emit(n))})("keydown",function(n){Z(A);let o=v(3).$implicit,a=v(2);return X(a.handleKeydown.emit({event:n,message:o}))}),w(),m(3,"div",37)(4,"span",38),tA("click",function(){Z(A);let n=v(3).$implicit,o=v(2);return X(o.cancelEditMessage.emit(n))}),K(5," close "),w(),m(6,"span",39),tA("click",function(){Z(A);let n=v(3).$implicit,o=v(2);return X(o.saveEditMessage.emit(n))}),K(7," check "),w()()()}if(t&2){let A=v(5);p(),$("ngModel",A.userEditEvalCaseMessage),p(3),$("matTooltip",A.i18n.cancelEditingTooltip),p(2),$("matTooltip",A.i18n.saveEvalMessageTooltip)}}function cTA(t,e){if(t&1&&on(0,35),t&2){let A=v(3).$implicit,i=v(2);$("ngComponentOutlet",i.markdownComponent)("ngComponentOutletInputs",Zl(2,jYA,A.text,A.thought))}}function CTA(t,e){if(t&1&&V(0,lTA,8,3,"div",34)(1,cTA,1,5,"ng-container",35),t&2){let A=v(2).$implicit;W(A.isEditing?0:1)}}function ITA(t,e){if(t&1&&(m(0,"div"),GA(1,"div",40),w()),t&2){let A=v(2).$implicit,i=v(2);p(),$("innerHTML",i.renderGooglerSearch(A.renderedContent),al)}}function dTA(t,e){if(t&1&&GA(0,"app-a2ui-canvas",29),t&2){let A=v(2).$implicit;$("beginRendering",A.a2uiData.beginRendering)("surfaceUpdate",A.a2uiData.surfaceUpdate)("dataModelUpdate",A.a2uiData.dataModelUpdate)}}function BTA(t,e){if(t&1&&(m(0,"code"),K(1),w()),t&2){let A=v(2).$implicit;p(),Se(" ",A.executableCode.code," ")}}function ETA(t,e){if(t&1&&(m(0,"div")(1,"div"),K(2),w(),m(3,"div"),K(4),w()()),t&2){let A=v(2).$implicit,i=v(2);p(2),n0("",i.i18n.outcomeLabel,": ",A.codeExecutionResult.outcome),p(2),n0("",i.i18n.outputLabel,": ",A.codeExecutionResult.output)}}function QTA(t,e){if(t&1){let A=JA();m(0,"div",41)(1,"img",42),tA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openViewImageDialog.emit(n.inlineData.data))}),w()()}if(t&2){let A=v(4).$implicit;p(),$("src",A.inlineData.data,Ka)}}function hTA(t,e){if(t&1&&(m(0,"div"),GA(1,"app-audio-player",43),w()),t&2){let A=v(4).$implicit;p(),$("base64data",A.inlineData.data)}}function uTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",44)(2,"mat-icon"),K(3,"description"),w(),m(4,"button",45),tA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openBase64InNewTab.emit({data:n.inlineData.data,mimeType:n.inlineData.mimeType}))}),K(5),w()()()}if(t&2){let A=v(4).$implicit;p(5),Se(" ",A.inlineData.name," ")}}function fTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"button",45),tA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openBase64InNewTab.emit({data:n.inlineData.data,mimeType:n.inlineData.mimeType}))}),K(2),w()()}if(t&2){let A=v(4).$implicit;p(2),Se(" ",A.inlineData.name," ")}}function mTA(t,e){if(t&1&&(m(0,"div")(1,"div"),V(2,QTA,2,1,"div",41)(3,hTA,2,1,"div")(4,uTA,6,1,"div")(5,fTA,3,1,"div"),w()()),t&2){let A,i=v(3).$implicit,n=v(2);p(2),W((A=i.inlineData.mediaType)===n.MediaType.IMAGE?2:A===n.MediaType.AUDIO?3:A===n.MediaType.TEXT?4:5)}}function pTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"img",46),tA("click",function(){Z(A);let n=v(4).$implicit,o=v(2);return X(o.openViewImageDialog.emit(n.inlineData.data))}),w()()}if(t&2){let A=v(4).$implicit;p(),$("src",A.inlineData.data,Ka)}}function wTA(t,e){if(t&1&&(m(0,"div",31)(1,"mat-icon"),K(2,"insert_drive_file"),w(),m(3,"a",33),K(4),w()()),t&2){let A=v(4).$implicit;p(3),$("href",A.inlineData.data,Ka),p(),qA(A.inlineData.displayName)}}function DTA(t,e){if(t&1&&(m(0,"div"),V(1,pTA,2,1,"div")(2,wTA,5,2,"div",31),w()),t&2){let A=v(3).$implicit;p(),W(A.inlineData.mimeType.startsWith("image/")?1:2)}}function yTA(t,e){if(t&1&&V(0,mTA,6,1,"div")(1,DTA,3,1,"div"),t&2){let A=v(2).$implicit;W(A.role==="bot"?0:1)}}function vTA(t,e){if(t&1&&(m(0,"div",49)(1,"div",50),K(2),w(),GA(3,"ngx-json-viewer",51),w(),m(4,"div",52)(5,"div",53),K(6),w(),GA(7,"ngx-json-viewer",51),w()),t&2){let A=v(3).$implicit,i=v(2);p(2),qA(i.i18n.actualToolUsesLabel),p(),$("json",A.actualInvocationToolUses),p(3),qA(i.i18n.expectedToolUsesLabel),p(),$("json",A.expectedInvocationToolUses)}}function bTA(t,e){if(t&1&&(m(0,"div",49)(1,"div",50),K(2),w(),m(3,"div"),K(4),w()(),m(5,"div",52)(6,"div",53),K(7),w(),m(8,"div"),K(9),w()()),t&2){let A=v(3).$implicit,i=v(2);p(2),qA(i.i18n.actualResponseLabel),p(2),qA(A.actualFinalResponse),p(3),qA(i.i18n.expectedResponseLabel),p(2),qA(A.expectedFinalResponse)}}function MTA(t,e){if(t&1&&(m(0,"div",48)(1,"span",54),K(2),w(),m(3,"span",55),K(4),w()()),t&2){let A=v(3).$implicit,i=v(2);p(2),n0("",i.i18n.matchScoreLabel,": ",A.evalScore),p(2),n0("",i.i18n.thresholdLabel,": ",A.evalThreshold)}}function kTA(t,e){if(t&1&&(m(0,"div",30)(1,"div",47),V(2,vTA,8,4)(3,bTA,10,4),w(),V(4,MTA,5,4,"div",48),w()),t&2){let A=v(2).$implicit;p(2),W(A.actualInvocationToolUses?2:A.actualFinalResponse?3:-1),p(2),W(A.evalScore!==void 0&&A.evalThreshold!==void 0?4:-1)}}function STA(t,e){if(t&1&&(m(0,"mat-card",16),V(1,tTA,1,0,"mat-progress-bar",26),V(2,sTA,3,0,"div",27),m(3,"div"),V(4,gTA,2,1,"div",28),m(5,"div"),V(6,CTA,2,1),w(),V(7,ITA,2,1,"div"),V(8,dTA,1,3,"app-a2ui-canvas",29),w(),V(9,BTA,2,1,"code"),V(10,ETA,5,4,"div"),V(11,yTA,2,1),V(12,kTA,5,2,"div",30),w()),t&2){let A=v(),i=A.$implicit,n=A.$index,o=v(2);$("ngClass",Zl(11,PYA,i.evalStatus===2,o.shouldMessageHighlighted(n))),p(),W(i.isLoading?1:-1),p(),W(i.attachments?2:-1),p(2),W(i.thought?4:-1),p(2),W(i.text?6:-1),p(),W(i.renderedContent?7:-1),p(),W(i.a2uiData?8:-1),p(),W(i.executableCode?9:-1),p(),W(i.codeExecutionResult?10:-1),p(),W(i.inlineData?11:-1),p(),W(i.failedMetric&&i.evalStatus===2?12:-1)}}function xTA(t,e){if(t&1){let A=JA();m(0,"app-computer-action",58),tA("clickEvent",function(n){Z(A);let o=v(5);return X(o.clickEvent.emit(n))}),w()}if(t&2){let A=v().$implicit,i=v(2).$index,n=v(2);$("functionCall",A)("allMessages",n.messages)("index",i)}}function RTA(t,e){if(t&1&&(m(0,"button",57)(1,"mat-icon"),K(2,"bolt"),w(),K(3),w()),t&2){let A=v().$implicit,i=v(2).$index,n=v(2);$("ngClass",ss(3,F7,n.shouldMessageHighlighted(i)))("appJsonTooltip",A.args?n.JSON.stringify(A.args):""),p(3),Se(" ",A.name," ")}}function NTA(t,e){if(t&1&&V(0,xTA,1,3,"app-computer-action",56)(1,RTA,4,5,"button",57),t&2){let A=e.$implicit,i=v(4);W(i.isComputerUseClick(A)?0:1)}}function FTA(t,e){if(t&1&&Ut(0,NTA,2,1,null,null,Li),t&2){let A=v().$implicit;Jt(A.functionCalls)}}function _TA(t,e){if(t&1){let A=JA();m(0,"app-computer-action",60),tA("clickEvent",function(n){Z(A);let o=v(5);return X(o.clickEvent.emit(n))}),w()}if(t&2){let A=v().$implicit,i=v(2).$index,n=v(2);$("functionResponse",A)("allMessages",n.messages)("index",i)}}function LTA(t,e){if(t&1&&(m(0,"button",57)(1,"mat-icon"),K(2,"check"),w(),K(3),w()),t&2){let A=v().$implicit,i=v(2).$index,n=v(2);$("ngClass",ss(3,F7,n.shouldMessageHighlighted(i)))("appJsonTooltip",A.response?n.JSON.stringify(A.response):""),p(3),Se(" ",A.name," ")}}function GTA(t,e){if(t&1&&V(0,_TA,1,3,"app-computer-action",59)(1,LTA,4,5,"button",57),t&2){let A=e.$implicit,i=v(4);W(i.isComputerUseResponse(A)?0:1)}}function KTA(t,e){if(t&1&&Ut(0,GTA,2,1,null,null,Li),t&2){let A=v().$implicit;Jt(A.functionResponses)}}function UTA(t,e){if(t&1&&(m(0,"button",17)(1,"mat-icon"),K(2,"data_object"),w(),K(3," State "),w()),t&2){let A=v().$index,i=v(2);$("ngClass",ss(2,F7,i.shouldMessageHighlighted(A)))("appJsonTooltip",i.getStateDeltaTooltip(A))}}function JTA(t,e){if(t&1&&(m(0,"button",18)(1,"mat-icon"),K(2,"attachment"),w(),K(3," Artifact "),w()),t&2){let A=v().$index,i=v(2);$("ngClass",ss(2,F7,i.shouldMessageHighlighted(A)))("appJsonTooltip",i.getArtifactDeltaTooltip(A))}}function YTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"span",61),tA("click",function(){Z(A);let n=v(2).$implicit,o=v(2);return X(o.editEvalCaseMessage.emit(n))}),K(2," edit "),w(),m(3,"span",61),tA("click",function(){Z(A);let n=v(2),o=n.$implicit,a=n.$index,r=v(2);return X(r.deleteEvalCaseMessage.emit({message:o,index:a}))}),K(4," delete "),w()()}if(t&2){let A=v(4);p(),$("ngClass",ss(4,IK,A.isEvalCaseEditing))("matTooltip",A.i18n.editEvalMessageTooltip),p(2),$("ngClass",ss(6,IK,A.isEvalCaseEditing))("matTooltip",A.i18n.deleteEvalMessageTooltip)}}function TTA(t,e){if(t&1){let A=JA();m(0,"div")(1,"span",61),tA("click",function(){Z(A);let n=v(2).$implicit,o=v(2);return X(o.editFunctionArgs.emit(n))}),K(2," edit "),w()()}if(t&2){let A=v(4);p(),$("ngClass",ss(2,IK,A.isEvalCaseEditing))("matTooltip",A.i18n.editFunctionArgsTooltip)}}function HTA(t,e){if(t&1&&V(0,YTA,5,8,"div")(1,TTA,3,4,"div"),t&2){let A=v().$implicit,i=v(2);W(A.text?0:i.isEditFunctionArgsEnabled&&A.functionCalls&&A.functionCalls.length>0?1:-1)}}function zTA(t,e){t&1&&(m(0,"button",20)(1,"mat-icon"),K(2,"person"),w()())}function OTA(t,e){if(t&1&&GA(0,"app-message-feedback",21),t&2){let A=v().$implicit,i=v(2);$("sessionName",i.sessionName())("eventId",A.eventId)}}function PTA(t,e){if(t&1){let A=JA();m(0,"div",11),tA("click",function(n){let o=Z(A),a=o.$implicit,r=o.$index,s=v(2);return X(s.handleRowClick(n,a,r))}),V(1,ZYA,3,1,"div",12),m(2,"div",13),V(3,ATA,3,1,"div",14),V(4,eTA,3,7,"button",15),V(5,STA,13,14,"mat-card",16),V(6,FTA,2,0),V(7,KTA,2,0),V(8,UTA,4,4,"button",17),V(9,JTA,4,4,"button",18),m(10,"div",13)(11,"span",19),K(12),w(),m(13,"span"),K(14),w()(),V(15,HTA,2,1),V(16,zTA,3,0,"button",20),w(),V(17,OTA,1,2,"app-message-feedback",21),w()}if(t&2){let A=e.$implicit,i=e.$index,n=v(2);$("ngClass",ss(16,TYA,n.isMessageEventSelected(i))),p(),W(A.role==="user"?1:-1),p(),$("ngClass",Zl(18,HYA,A.role==="user",A.role==="bot")),p(),W(A.role==="bot"&&!A.isLoading?3:-1),p(),W(A.role==="bot"?4:-1),p(),W(n.shouldShowMessageCard(A)?5:-1),p(),W(A.functionCalls&&A.functionCalls.length>0?6:-1),p(),W(A.functionResponses&&A.functionResponses.length>0?7:-1),p(),W(A.role==="bot"&&n.hasStateDelta(i)?8:-1),p(),W(A.role==="bot"&&n.hasArtifactDelta(i)?9:-1),p(),$("ngClass",Zl(21,zYA,A.evalStatus===1,A.evalStatus===2)),p(2),qA(A.evalStatus===1?"check":A.evalStatus===2?"close":""),p(2),qA(A.evalStatus===1?n.i18n.evalPassLabel:A.evalStatus===2?n.i18n.evalFailLabel:""),p(),W(n.evalCase&&A.role==="bot"&&n.isEvalEditMode?15:-1),p(),W(A.role==="user"?16:-1),p(),W(n.isUserFeedbackEnabled()&&!n.isLoadingAgentResponse()&&A.role==="bot"?17:-1)}}function jTA(t,e){if(t&1){let A=JA();m(0,"div",7,0),tA("scroll",function(n){Z(A);let o=v();return X(o.onScroll.next(n))}),V(2,qYA,2,0,"div",8),ri(3,"async"),ri(4,"async"),GA(5,"div",null,1),Ut(7,PTA,18,24,"div",9,Li),w()}if(t&2){let A=v();p(2),W(Ci(3,1,A.uiStateService.isMessagesLoading())&&Ci(4,3,A.featureFlagService.isInfinityMessageScrollingEnabled())?2:-1),p(5),Jt(A.messages)}}function qTA(t,e){if(t&1){let A=JA();m(0,"div",74),GA(1,"img",75),m(2,"button",76),tA("click",function(){Z(A);let n=v().$index,o=v(4);return X(o.removeFile.emit(n))}),m(3,"mat-icon",77),K(4,"close"),w()()()}if(t&2){let A=v().$implicit;p(),$("src",A.url,Ka)}}function VTA(t,e){if(t&1){let A=JA();m(0,"div",73)(1,"button",76),tA("click",function(){Z(A);let n=v().$index,o=v(4);return X(o.removeFile.emit(n))}),m(2,"mat-icon",77),K(3,"close"),w()(),m(4,"div",78)(5,"mat-icon"),K(6,"insert_drive_file"),w(),m(7,"span"),K(8),w()()()}if(t&2){let A=v().$implicit;p(8),qA(A.file.name)}}function WTA(t,e){if(t&1&&(m(0,"div"),V(1,qTA,5,1,"div",74)(2,VTA,9,1,"div",73),w()),t&2){let A=e.$implicit;p(),W(A.file.type.startsWith("image/")?1:A.file.type.startsWith("image/")?-1:2)}}function ZTA(t,e){if(t&1){let A=JA();m(0,"div",73)(1,"button",76),tA("click",function(){Z(A);let n=v(4);return X(n.removeStateUpdate.emit())}),m(2,"mat-icon",77),K(3,"close"),w()(),m(4,"div",78)(5,"span"),K(6),w()()()}if(t&2){let A=v(4);p(6),qA(A.i18n.updatedSessionStateChipLabel)}}function XTA(t,e){if(t&1&&(m(0,"div",65),Ut(1,WTA,3,1,"div",null,Li),V(3,ZTA,7,1,"div",73),w()),t&2){let A=v(3);p(),Jt(A.selectedFiles),p(2),W(A.updatedSessionState?3:-1)}}function $TA(t,e){if(t&1){let A=JA();m(0,"div",62)(1,"input",63,3),tA("change",function(n){Z(A);let o=v(2);return X(o.fileSelect.emit(n))}),w(),m(3,"mat-form-field",64),V(4,XTA,4,1,"div",65),m(5,"textarea",66),tA("ngModelChange",function(n){Z(A);let o=v(2);return X(o.userInputChange.emit(n))})("keydown.enter",function(n){Z(A);let o=v(2);return X(o.sendMessage.emit(n))}),w(),m(6,"div",67)(7,"div")(8,"button",68),ri(9,"async"),tA("click",function(){Z(A);let n=An(2);return X(n.click())}),m(10,"mat-icon"),K(11,"attach_file"),w()(),m(12,"button",69),ri(13,"async"),m(14,"mat-icon"),K(15,"more_vert"),w()(),m(16,"mat-menu",null,4)(18,"span",70),tA("click",function(){Z(A);let n=v(2);return X(n.updateState.emit())}),K(19),w()()(),m(20,"div")(21,"button",71),ri(22,"async"),tA("click",function(){Z(A);let n=v(2);return X(n.toggleAudioRecording.emit())}),m(23,"mat-icon"),K(24,"mic"),w()(),m(25,"button",72),ri(26,"async"),tA("click",function(){Z(A);let n=v(2);return X(n.toggleVideoRecording.emit())}),m(27,"mat-icon"),K(28,"videocam"),w()()()()()()}if(t&2){let A=An(17),i=v(2);p(4),W(i.selectedFiles.length&&i.appName!=""||i.updatedSessionState?4:-1),p(),$("ngModel",i.userInput)("placeholder",i.i18n.typeMessagePlaceholder),p(3),$("matTooltip",i.i18n.uploadFileTooltip)("disabled",!Ci(9,18,i.isMessageFileUploadEnabledObs)),p(4),$("matMenuTriggerFor",A)("matTooltip",i.i18n.moreOptionsTooltip)("disabled",!Ci(13,20,i.isManualStateUpdateEnabledObs)),p(6),$("matTooltip",i.i18n.updateStateMenuTooltip),p(),Se(" ",i.i18n.updateStateMenuLabel," "),p(2),ne("recording",i.isAudioRecording),$("matTooltip",i.isAudioRecording?i.i18n.turnOffMicTooltip:i.i18n.useMicTooltip)("disabled",!Ci(22,22,i.isBidiStreamingEnabledObs)),p(4),ne("recording",i.isVideoRecording),$("matTooltip",i.isVideoRecording?i.i18n.turnOffCamTooltip:i.i18n.useCamTooltip)("disabled",!Ci(26,24,i.isBidiStreamingEnabledObs))}}function AHA(t,e){if(t&1&&V(0,$TA,29,26,"div",62),t&2){let A=v();W(A.canEditSession()?0:-1)}}function eHA(t,e){t&1&&(m(0,"div",6),GA(1,"mat-progress-spinner",79),w())}var qsA="root_agent",Vh=class t{constructor(e){this.sanitizer=e;Ga(()=>{let A=this.sessionName();A&&(this.nextPageToken="",this.uiStateService.lazyLoadMessages(A,{pageSize:100,pageToken:this.nextPageToken}).pipe(zo()).subscribe())})}appName="";sessionName=rt("");messages=[];isChatMode=!0;evalCase=null;isEvalEditMode=!1;isEvalCaseEditing=!1;isEditFunctionArgsEnabled=!1;userInput="";userEditEvalCaseMessage="";selectedFiles=[];updatedSessionState=null;eventData=new Map;selectedEvent=void 0;isAudioRecording=!1;isVideoRecording=!1;hoveredEventMessageIndices=[];userInputChange=new $A;userEditEvalCaseMessageChange=new $A;clickEvent=new $A;handleKeydown=new $A;cancelEditMessage=new $A;saveEditMessage=new $A;openViewImageDialog=new $A;openBase64InNewTab=new $A;editEvalCaseMessage=new $A;deleteEvalCaseMessage=new $A;editFunctionArgs=new $A;fileSelect=new $A;removeFile=new $A;removeStateUpdate=new $A;sendMessage=new $A;updateState=new $A;toggleAudioRecording=new $A;toggleVideoRecording=new $A;videoContainer;scrollContainer;textarea;scrollInterrupted=!1;scrollHeight=0;lastMessageRef=null;nextPageToken="";i18n=h(jsA);uiStateService=h(Ql);stringToColorService=h(dE);markdownComponent=h(Gh);featureFlagService=h(vr);agentService=h(sg);sessionService=h(El);destroyRef=h(qa);MediaType=$1;JSON=JSON;isMessageFileUploadEnabledObs=this.featureFlagService.isMessageFileUploadEnabled();isManualStateUpdateEnabledObs=this.featureFlagService.isManualStateUpdateEnabled();isBidiStreamingEnabledObs=this.featureFlagService.isBidiStreamingEnabled();canEditSession=jA(!0);isUserFeedbackEnabled=Fs(this.featureFlagService.isFeedbackServiceEnabled());isLoadingAgentResponse=Fs(this.agentService.getLoadingState());onScroll=new XA;ngOnInit(){this.featureFlagService.isInfinityMessageScrollingEnabled().pipe(zo(),Ze(e=>e),Si(()=>fi(this.uiStateService.onNewMessagesLoaded().pipe(oi(e=>{this.nextPageToken=e.nextPageToken??"",e.isBackground||this.restoreScrollPosition()})),this.onScroll.pipe(Si(e=>{let A=e.target;return A.scrollTop!==0?ja:this.nextPageToken?(this.scrollHeight=A.scrollHeight,this.uiStateService.lazyLoadMessages(this.sessionName(),{pageSize:100,pageToken:this.nextPageToken}).pipe(zo(),ta(()=>gU))):ja})))),Tr(this.destroyRef)).subscribe()}ngAfterViewInit(){this.scrollContainer?.nativeElement&&(this.scrollContainer.nativeElement.addEventListener("wheel",()=>{this.scrollInterrupted=!0}),this.scrollContainer.nativeElement.addEventListener("touchmove",()=>{this.scrollInterrupted=!0}))}ngOnChanges(e){if(e.messages){let A=this.messages[this.messages.length-1];A!==this.lastMessageRef&&((A?.role==="user"||A?.isLoading===!0)&&(this.scrollInterrupted=!1),this.scrollToBottom()),this.lastMessageRef=A}}scrollToBottom(){this.scrollInterrupted||setTimeout(()=>{this.scrollContainer?.nativeElement.scrollTo({top:this.scrollContainer.nativeElement.scrollHeight,behavior:"auto"})},50)}getAgentNameFromEvent(e){let A=this.messages[e].eventId;return this.eventData.get(A)?.author??qsA}customIconColorClass(e){let A=this.getAgentNameFromEvent(e);return A!==qsA?`custom-icon-color-${this.stringToColorService.stc(A).replace("#","")}`:""}shouldMessageHighlighted(e){return this.hoveredEventMessageIndices.includes(e)}isMessageEventSelected(e){let A=this.messages[e];return A.eventId&&this.selectedEvent&&A.eventId===this.selectedEvent.id}shouldShowMessageCard(e){return!!(e.text||e.attachments||e.inlineData||e.executableCode||e.codeExecutionResult||e.a2uiData||e.renderedContent||e.isLoading||e.failedMetric&&e.evalStatus===2)}getBotEventNumber(e){let A=this.messages[e];if(A.role!=="bot"||!A.eventId)return-1;let i=[];for(let n=0;n<=e;n++){let o=this.messages[n];o.role==="bot"&&o.eventId&&!i.includes(o.eventId)&&i.push(o.eventId)}return i.indexOf(A.eventId)+1}getOverallEventNumber(e){let A=0,i=null,n=null;for(let o=0;o<=e;o++){let a=this.messages[o];if(a.role==="user"){if(i!=="user"&&(A++,i="user"),o===e)return A}else if(a.role==="bot"&&a.eventId&&(a.eventId!==n&&(A++,n=a.eventId,i="bot"),o===e))return A}return-1}isFirstUserMessageInGroup(e){return this.messages[e].role!=="user"?!1:e===0?!0:this.messages[e-1].role!=="user"}isFirstMessageInEventGroup(e){let A=this.messages[e];return A.role!=="bot"||!A.eventId?!1:e===0?!0:this.messages[e-1].eventId!==A.eventId}hasStateDelta(e){let A=this.messages[e];if(!A.eventId)return!1;let n=this.eventData.get(A.eventId)?.actions?.stateDelta;return n&&Object.keys(n).length>0}hasArtifactDelta(e){let A=this.messages[e];if(!A.eventId)return!1;let n=this.eventData.get(A.eventId)?.actions?.artifactDelta;return n&&Object.keys(n).length>0}renderGooglerSearch(e){return this.sanitizer.bypassSecurityTrustHtml(e)}restoreScrollPosition(){if(!this.scrollHeight){this.scrollInterrupted=!1,this.scrollToBottom();return}let e=this.scrollContainer?.nativeElement;e&&(e.scrollTop=e.scrollHeight-this.scrollHeight,this.scrollHeight=0)}isComputerUseClick(e){return R7(e)}isComputerUseResponse(e){return qh(e)}getFunctionCallArgsTooltip(e){if(!e.functionCall||!e.functionCall.args)return"";try{return JSON.stringify(e.functionCall.args)}catch{return String(e.functionCall.args)}}getFunctionResponseTooltip(e){if(!e.functionResponse||!e.functionResponse.response)return"";try{return JSON.stringify(e.functionResponse.response)}catch{return String(e.functionResponse.response)}}getStateDeltaTooltip(e){let A=this.messages[e];if(!A.eventId)return"";let n=this.eventData.get(A.eventId)?.actions?.stateDelta;if(!n)return"";try{return JSON.stringify(n)}catch{return String(n)}}getArtifactDeltaTooltip(e){let A=this.messages[e];if(!A.eventId)return"";let n=this.eventData.get(A.eventId)?.actions?.artifactDelta;if(!n)return"";try{return JSON.stringify(n)}catch{return String(n)}}handleRowClick(e,A,i){let n=window.getSelection();n&&n.toString().length>0||this.clickEvent.emit(i)}handleKeyboardNavigation(e){if(!this.selectedEvent||e.key!=="ArrowUp"&&e.key!=="ArrowDown")return;e.preventDefault();let A=new Map;for(let a=0;athis.messages[a].eventId===this.selectedEvent.id);if(n===-1)return;let o;e.key==="ArrowDown"?o=n+1>=i.length?0:n+1:o=n-1<0?i.length-1:n-1,this.clickEvent.emit(i[o]),setTimeout(()=>{if(!this.scrollContainer?.nativeElement)return;let a=this.scrollContainer.nativeElement.querySelectorAll(".message-column-container");a&&a[i[o]]&&a[i[o]].scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})},0)}static \u0275fac=function(A){return new(A||t)(at($s))};static \u0275cmp=kA({type:t,selectors:[["app-chat-panel"]],viewQuery:function(A,i){if(A&1&&ai(UYA,5,ge)(JYA,5)(YYA,5),A&2){let n;ce(n=Ce())&&(i.videoContainer=n.first),ce(n=Ce())&&(i.scrollContainer=n.first),ce(n=Ce())&&(i.textarea=n.first)}},hostBindings:function(A,i){A&1&&tA("keydown",function(o){return i.handleKeyboardNavigation(o)},m2)},inputs:{appName:"appName",sessionName:[1,"sessionName"],messages:"messages",isChatMode:"isChatMode",evalCase:"evalCase",isEvalEditMode:"isEvalEditMode",isEvalCaseEditing:"isEvalCaseEditing",isEditFunctionArgsEnabled:"isEditFunctionArgsEnabled",userInput:"userInput",userEditEvalCaseMessage:"userEditEvalCaseMessage",selectedFiles:"selectedFiles",updatedSessionState:"updatedSessionState",eventData:"eventData",selectedEvent:"selectedEvent",isAudioRecording:"isAudioRecording",isVideoRecording:"isVideoRecording",hoveredEventMessageIndices:"hoveredEventMessageIndices"},outputs:{userInputChange:"userInputChange",userEditEvalCaseMessageChange:"userEditEvalCaseMessageChange",clickEvent:"clickEvent",handleKeydown:"handleKeydown",cancelEditMessage:"cancelEditMessage",saveEditMessage:"saveEditMessage",openViewImageDialog:"openViewImageDialog",openBase64InNewTab:"openBase64InNewTab",editEvalCaseMessage:"editEvalCaseMessage",deleteEvalCaseMessage:"deleteEvalCaseMessage",editFunctionArgs:"editFunctionArgs",fileSelect:"fileSelect",removeFile:"removeFile",removeStateUpdate:"removeStateUpdate",sendMessage:"sendMessage",updateState:"updateState",toggleAudioRecording:"toggleAudioRecording",toggleVideoRecording:"toggleVideoRecording"},features:[ti],decls:5,vars:5,consts:[["autoScroll",""],["videoContainer",""],["messageTextarea",""],["fileInput",""],["moreMenu","matMenu"],[1,"chat-messages"],[1,"loading-spinner-container"],[1,"chat-messages",3,"scroll"],[1,"messages-loading-container"],[1,"message-column-container",3,"ngClass"],["mode","indeterminate"],[1,"message-column-container",3,"click","ngClass"],[1,"event-number-container","user-event-number"],[3,"ngClass"],[1,"event-number-container"],["mat-mini-fab","",3,"disabled","matTooltip","class","ngClass"],[1,"message-card",3,"ngClass"],["mat-stroked-button","",1,"function-event-button","state-delta-button",3,"ngClass","appJsonTooltip"],["mat-stroked-button","",1,"function-event-button","artifact-delta-button",3,"ngClass","appJsonTooltip"],[1,"material-symbols-outlined"],["mat-mini-fab",""],[3,"sessionName","eventId"],[1,"event-number-label"],[1,"event-number-placeholder"],["mat-mini-fab","",3,"disabled","matTooltip","ngClass"],["fontSet","material-symbols-outlined"],["mode","buffer",1,"loading-bar"],[1,"attachments"],[1,"thought-chip"],[3,"beginRendering","surfaceUpdate","dataModelUpdate"],[1,"eval-compare-container"],[1,"attachment"],["alt","attachment",1,"image-preview-chat",3,"src"],["download","",3,"href"],[1,"edit-message-container"],[3,"ngComponentOutlet","ngComponentOutletInputs"],["rows","4","cols","80",1,"message-textarea",3,"ngModelChange","keydown","ngModel"],[1,"edit-message-buttons-container"],[1,"material-symbols-outlined","cancel-edit-button",3,"click","matTooltip"],[1,"material-symbols-outlined","save-edit-button",3,"click","matTooltip"],[3,"innerHTML"],[1,"generated-image-container"],["alt","image",1,"generated-image",3,"click","src"],[3,"base64data"],[1,"html-artifact-container"],[1,"link-style-button",3,"click"],["alt","image",1,"image-preview-chat",3,"click","src"],[1,"actual-expected-compare-container"],[1,"score-threshold-container"],[1,"actual-result"],[1,"eval-response-header","header-actual"],[3,"json"],[1,"expected-result"],[1,"eval-response-header","header-expected"],[1,"header-actual"],[1,"header-expected"],[3,"functionCall","allMessages","index"],["mat-stroked-button","",1,"function-event-button",3,"ngClass","appJsonTooltip"],[3,"clickEvent","functionCall","allMessages","index"],[3,"functionResponse","allMessages","index"],[3,"clickEvent","functionResponse","allMessages","index"],[1,"material-symbols-outlined","eval-case-edit-button",3,"click","ngClass","matTooltip"],[1,"chat-input"],["type","file","multiple","","hidden","",3,"change"],["appearance","outline",1,"input-field"],[1,"file-preview"],["matInput","","cdkTextareaAutosize","","cdkAutosizeMinRows","1","cdkAutosizeMaxRows","10",1,"chat-input-box",3,"ngModelChange","keydown.enter","ngModel","placeholder"],[1,"chat-input-actions"],["mat-icon-button","",1,"function-event-button",3,"click","matTooltip","disabled"],["mat-icon-button","",1,"function-event-button",3,"matMenuTriggerFor","matTooltip","disabled"],["mat-menu-item","",3,"click","matTooltip"],["mat-icon-button","","matSuffix","",1,"audio-rec-btn",3,"click","matTooltip","disabled"],["mat-icon-button","","matSuffix","",1,"video-rec-btn",3,"click","matTooltip","disabled"],[1,"file-container"],[1,"image-container"],["alt","preview",1,"image-preview",3,"src"],["mat-icon-button","",1,"delete-button",3,"click"],["color","warn"],[1,"file-info"],["mode","indeterminate","diameter","50"]],template:function(A,i){if(A&1&&(Ur(0),ri(1,"async"),V(2,jTA,9,5,"div",5),V(3,AHA,1,1),V(4,eHA,2,0,"div",6)),A&2){let n=Ci(1,3,i.uiStateService.isSessionLoading());p(2),W(i.appName!=""&&!n?2:-1),p(),W(i.appName!=""&&i.isChatMode&&!n?3:-1),p(),W(n?4:-1)}},dependencies:[ma,gs,D2,Nn,uo,fo,Sa,Il,Fn,jH,aE,HsA,v7,Ns,fn,Tp,Wa,gl,wa,No,x9,Op,KB,Yr,daA,AC,C2,_h,OsA,B1,E0,Y2,k7,vE,x7,U2,xa,M7,N7,ls],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%}.generated-image-container[_ngcontent-%COMP%]{max-width:400px}.generated-image[_ngcontent-%COMP%]{max-width:100%;min-width:40px;border-radius:8px}.html-artifact-container[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:flex-start;align-items:center}.loading-bar[_ngcontent-%COMP%]{width:100px;margin:15px}.chat-messages[_ngcontent-%COMP%]{flex-grow:1;overflow-y:auto;padding:20px;margin-top:16px}.message-card[_ngcontent-%COMP%]{padding:5px 20px;margin:5px;border-radius:20px;max-width:80%;font-size:14px;font-weight:400;position:relative;display:inline-block}.message-card.message-card--highlighted[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-highlight-background-color)}.function-event-button[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-background-color);margin:5px 5px 10px;font-size:13px!important;padding:6px 12px!important;min-height:32px!important;height:32px!important}.function-event-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px!important;width:18px!important;height:18px!important}.state-delta-button[_ngcontent-%COMP%], .artifact-delta-button[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-background-color)!important}.function-event-button-highlight[_ngcontent-%COMP%]{background-color:var(--chat-panel-function-event-button-highlight-background-color);border-color:var(--chat-panel-function-event-button-highlight-border-color)!important;color:var(--chat-panel-function-event-button-highlight-color)!important}.message-column-container[_ngcontent-%COMP%]{display:flex;flex-direction:row;margin-left:-20px;margin-right:-20px;padding:8px 20px;border:2px solid transparent;border-radius:4px;background-color:transparent;transition:background-color .2s ease;cursor:pointer}.message-column-container[_ngcontent-%COMP%]:hover{background-color:#4285f414}.message-column-container.selected[_ngcontent-%COMP%]{background-color:#4285f433!important;border:2px solid rgba(66,133,244,.6);border-radius:4px}.user-message[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;flex-grow:1}.user-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-panel-user-message-message-card-background-color);align-self:flex-end;color:var(--chat-panel-user-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;flex-grow:1}.bot-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-panel-bot-message-message-card-background-color);align-self:flex-start;color:var(--chat-panel-bot-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]:focus-within .message-card[_ngcontent-%COMP%]{background-color:var(--chat-panel-bot-message-focus-within-message-card-background-color);border:1px solid var(--chat-panel-bot-message-focus-within-message-card-border-color)}.message-textarea[_ngcontent-%COMP%]{background-color:var(--chat-panel-message-textarea-background-color);max-width:100%;border:none;font-family:Google Sans,Helvetica Neue,sans-serif}.message-textarea[_ngcontent-%COMP%]:focus{background-color:var(--chat-panel-message-textarea-focus-background-color);outline:none}.edit-message-buttons-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%]{visibility:hidden;position:absolute;left:10px;z-index:10;background-color:var(--chat-panel-eval-compare-container-background-color);overflow:hidden;border-radius:20px;padding:5px 20px;margin-bottom:10px;font-size:16px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .actual-result[_ngcontent-%COMP%]{border-right:2px solid var(--chat-panel-actual-result-border-right-color);padding-right:8px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .expected-result[_ngcontent-%COMP%]{padding-left:12px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%]:hover .eval-compare-container[_ngcontent-%COMP%]{visibility:visible}.actual-expected-compare-container[_ngcontent-%COMP%]{display:flex}.score-threshold-container[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:10px;align-items:center;margin-top:15px;font-size:14px;font-weight:600}.eval-response-header[_ngcontent-%COMP%]{padding-bottom:5px;border-bottom:2px solid var(--chat-panel-eval-response-header-border-bottom-color);font-style:italic;font-weight:700}.header-expected[_ngcontent-%COMP%]{color:var(--chat-panel-header-expected-color)}.header-actual[_ngcontent-%COMP%]{color:var(--chat-panel-header-actual-color)}.eval-case-edit-button[_ngcontent-%COMP%]{cursor:pointer;margin-left:4px;margin-right:4px}.eval-pass[_ngcontent-%COMP%]{display:flex;color:var(--chat-panel-eval-pass-color)}.eval-fail[_ngcontent-%COMP%]{display:flex;color:var(--chat-panel-eval-fail-color)}.hidden[_ngcontent-%COMP%]{visibility:hidden}.chat-input[_ngcontent-%COMP%]{display:flex;padding:10px;width:60%;margin:0 auto;position:relative;z-index:1}.input-field[_ngcontent-%COMP%]{flex-grow:1;position:relative;z-index:1}.input-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{color:var(--chat-panel-input-field-textarea-color);border:none;padding:10px;box-sizing:content-box;caret-color:var(--chat-panel-input-field-textarea-caret-color)}.input-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]::placeholder{color:var(--chat-panel-input-field-textarea-placeholder-color)}.input-field[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{color:var(--chat-panel-input-field-button-color);background-color:var(--chat-panel-input-field-button-background-color)}.chat-input-actions[_ngcontent-%COMP%]{width:106%;margin-top:10px;display:flex;justify-content:space-between;align-items:center;max-width:100%}.chat-input-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin-left:10px;margin-right:10px}.file-preview[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px;margin-bottom:8px}.image-preview-chat[_ngcontent-%COMP%]{max-width:90%;max-height:70vh;width:auto;height:auto;border-radius:8px;cursor:pointer;transition:transform .2s ease-in-out}.attachment[_ngcontent-%COMP%]{display:flex;align-items:center}[_nghost-%COMP%] .mat-mdc-mini-fab{background-color:var(--chat-panel-mat-mdc-mini-fab-background-color, #4285f4)}[_nghost-%COMP%] .mat-mdc-mini-fab mat-icon{color:var(--chat-panel-mat-mdc-mini-fab-mat-icon-color, white)}[_nghost-%COMP%] .mat-mdc-mini-fab.mat-mdc-button-disabled{background-color:#fff3!important}[_nghost-%COMP%] .mat-mdc-mini-fab.mat-mdc-button-disabled mat-icon{color:#fff9!important}[_nghost-%COMP%] .message-text p{white-space:pre-line;word-break:break-word;overflow-wrap:break-word}[_nghost-%COMP%] .input-field .mat-mdc-text-field-wrapper{border:1px solid var(--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color);border-radius:16px}.image-container[_ngcontent-%COMP%]{position:relative;display:inline-block;border-radius:12px;overflow:hidden}.image-preview[_ngcontent-%COMP%]{display:block;width:100%;height:auto;border-radius:12px;width:80px;height:80px}.delete-button[_ngcontent-%COMP%]{position:absolute;top:1px;right:1px;background-color:var(--chat-panel-delete-button-background-color);border:none;border-radius:50%;padding:8px;cursor:pointer;color:var(--chat-panel-delete-button-color);display:flex;align-items:center;justify-content:center;margin-right:0;scale:.7}.delete-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px}.file-container[_ngcontent-%COMP%]{position:relative;display:flex;flex-direction:column;gap:8px;height:80px;background-color:var(--chat-panel-file-container-background-color);border-radius:12px}.file-info[_ngcontent-%COMP%]{margin-right:60px;padding-top:20px;padding-left:16px}.thought-chip[_ngcontent-%COMP%]{border-radius:5px;background-color:var(--chat-panel-thought-chip-background-color);width:80px;text-align:center;margin-top:5px}.event-number-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-self:center;min-width:30px}.bot-message[_ngcontent-%COMP%] .event-number-container[_ngcontent-%COMP%]{margin-right:8px}.user-event-number[_ngcontent-%COMP%]{margin-right:8px;align-self:center}.event-number-label[_ngcontent-%COMP%], .event-number-placeholder[_ngcontent-%COMP%]{font-size:14px;font-weight:600;text-align:center;display:inline-block}.event-number-label[_ngcontent-%COMP%]{color:var(--chat-panel-event-number-label-color, #5f6368)}.event-number-placeholder[_ngcontent-%COMP%]{visibility:hidden}[_nghost-%COMP%] pre{white-space:pre-wrap;word-break:break-word;overflow-x:auto;max-width:100%}.link-style-button[_ngcontent-%COMP%]{background:none;border:none;padding:0;font:inherit;color:var(--chat-panel-link-style-button-color)!important;text-decoration:underline;cursor:pointer;outline:none;font-size:14px}.cancel-edit-button[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--chat-mat-mdc-text-field-wrapper-border-color);cursor:pointer;margin-right:16px}.save-edit-button[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--mat-sys-primary);cursor:pointer;margin-right:16px}.chat-input-box[_ngcontent-%COMP%]{caret-color:#fff}button.audio-rec-btn[_ngcontent-%COMP%], button.video-rec-btn[_ngcontent-%COMP%]{background-color:var(--chat-card-background-color)}button.audio-rec-btn.recording[_ngcontent-%COMP%], button.video-rec-btn.recording[_ngcontent-%COMP%]{background-color:var(--chat-panel-eval-fail-color)}.loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:100%}.messages-loading-container[_ngcontent-%COMP%]{margin-top:1em;margin-bottom:1em}"]})};var tHA={cancelButton:"Cancel",saveButton:"Save",invalidJsonAlert:"Invalid JSON: "},VsA=new yA("Edit Json Dialog Messages",{factory:()=>tHA});var Jm=class t{constructor(e,A){this.dialogRef=e;this.data=A;this.jsonString=JSON.stringify(A.jsonContent,null,2),this.functionName=A.functionName||""}jsonEditorComponent=ca(qc);jsonString="";functionName="";i18n=h(VsA);ngOnInit(){}onSave(){try{this.jsonString=this.jsonEditorComponent().getJsonString();let e=JSON.parse(this.jsonString);this.dialogRef.close(e)}catch(e){alert(this.i18n.invalidJsonAlert+e)}}onCancel(){this.dialogRef.close(null)}static \u0275fac=function(A){return new(A||t)(at(bo),at(Ca))};static \u0275cmp=kA({type:t,selectors:[["app-edit-json-dialog"]],viewQuery:function(A,i){A&1&&rs(i.jsonEditorComponent,qc,5),A&2&&Dr()},decls:11,vars:5,consts:[[1,"dialog-container"],["mat-dialog-title",""],[1,"editor"],[3,"jsonString"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"h2",1),K(2),w(),m(3,"mat-dialog-content",2),K(4),GA(5,"app-json-editor",3),w(),m(6,"mat-dialog-actions",4)(7,"button",5),K(8),w(),m(9,"button",6),tA("click",function(){return i.onSave()}),K(10),w()()()),A&2&&(p(2),qA(i.data.dialogHeader),p(2),Se(" ",i.functionName," "),p(),$("jsonString",i.jsonString),p(3),qA(i.i18n.cancelButton),p(2),qA(i.i18n.saveButton))},dependencies:[Da,rr,qc,Ua,fn,B0],styles:[".dialog-container[_ngcontent-%COMP%]{border-radius:12px;padding:18px;width:500px;box-shadow:0 8px 16px var(--edit-json-dialog-container-box-shadow-color)}.editor[_ngcontent-%COMP%]{padding-top:12px;height:300px}"]})};var iHA=[[["caption"]],[["colgroup"],["col"]],"*"],nHA=["caption","colgroup, col","*"];function oHA(t,e){t&1&&Ke(0,2)}function aHA(t,e){t&1&&(m(0,"thead",0),on(1,1),w(),m(2,"tbody",0),on(3,2)(4,3),w(),m(5,"tfoot",0),on(6,4),w())}function rHA(t,e){t&1&&on(0,1)(1,2)(2,3)(3,4)}var Xc=new yA("CDK_TABLE");var G7=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkCellDef",""]]})}return t})(),K7=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkHeaderCellDef",""]]})}return t})(),XsA=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkFooterCellDef",""]]})}return t})(),Wh=(()=>{class t{_table=h(Xc,{optional:!0});_hasStickyChanged=!1;get name(){return this._name}set name(A){this._setNameInput(A)}_name;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;get stickyEnd(){return this._stickyEnd}set stickyEnd(A){A!==this._stickyEnd&&(this._stickyEnd=A,this._hasStickyChanged=!0)}_stickyEnd=!1;cell;headerCell;footerCell;cssClassFriendlyName;_columnCssClassName;constructor(){}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}_updateColumnCssClassName(){this._columnCssClassName=[`cdk-column-${this.cssClassFriendlyName}`]}_setNameInput(A){A&&(this._name=A,this.cssClassFriendlyName=A.replace(/[^a-z0-9_-]/gi,"-"),this._updateColumnCssClassName())}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkColumnDef",""]],contentQueries:function(i,n,o){if(i&1&&fa(o,G7,5)(o,K7,5)(o,XsA,5),i&2){let a;ce(a=Ce())&&(n.cell=a.first),ce(a=Ce())&&(n.headerCell=a.first),ce(a=Ce())&&(n.footerCell=a.first)}},inputs:{name:[0,"cdkColumnDef","name"],sticky:[2,"sticky","sticky",he],stickyEnd:[2,"stickyEnd","stickyEnd",he]},features:[dt([{provide:"MAT_SORT_HEADER_COLUMN_DEF",useExisting:t}])]})}return t})(),L7=class{constructor(e,A){A.nativeElement.classList.add(...e._columnCssClassName)}},$sA=(()=>{class t extends L7{constructor(){super(h(Wh),h(ge))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["cdk-header-cell"],["th","cdk-header-cell",""]],hostAttrs:["role","columnheader",1,"cdk-header-cell"],features:[It]})}return t})();var AgA=(()=>{class t extends L7{constructor(){let A=h(Wh),i=h(ge);super(A,i);let n=A._table?._getCellRole();n&&i.nativeElement.setAttribute("role",n)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["cdk-cell"],["td","cdk-cell",""]],hostAttrs:[1,"cdk-cell"],features:[It]})}return t})();var BK=(()=>{class t{template=h(Tn);_differs=h(y1);columns;_columnsDiffer;constructor(){}ngOnChanges(A){if(!this._columnsDiffer){let i=A.columns&&A.columns.currentValue||[];this._columnsDiffer=this._differs.find(i).create(),this._columnsDiffer.diff(i)}}getColumnsDiff(){return this._columnsDiffer.diff(this.columns)}extractCellTemplate(A){return this instanceof Tm?A.headerCell.template:this instanceof EK?A.footerCell.template:A.cell.template}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,features:[ti]})}return t})(),Tm=(()=>{class t extends BK{_table=h(Xc,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(h(Tn),h(y1))}ngOnChanges(A){super.ngOnChanges(A)}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkHeaderRowDef",""]],inputs:{columns:[0,"cdkHeaderRowDef","columns"],sticky:[2,"cdkHeaderRowDefSticky","sticky",he]},features:[It,ti]})}return t})(),EK=(()=>{class t extends BK{_table=h(Xc,{optional:!0});_hasStickyChanged=!1;get sticky(){return this._sticky}set sticky(A){A!==this._sticky&&(this._sticky=A,this._hasStickyChanged=!0)}_sticky=!1;constructor(){super(h(Tn),h(y1))}ngOnChanges(A){super.ngOnChanges(A)}hasStickyChanged(){let A=this._hasStickyChanged;return this.resetStickyChanged(),A}resetStickyChanged(){this._hasStickyChanged=!1}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkFooterRowDef",""]],inputs:{columns:[0,"cdkFooterRowDef","columns"],sticky:[2,"cdkFooterRowDefSticky","sticky",he]},features:[It,ti]})}return t})(),U7=(()=>{class t extends BK{_table=h(Xc,{optional:!0});when;constructor(){super(h(Tn),h(y1))}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkRowDef",""]],inputs:{columns:[0,"cdkRowDefColumns","columns"],when:[0,"cdkRowDefWhen","when"]},features:[It]})}return t})(),EB=(()=>{class t{_viewContainer=h(Oo);cells;context;static mostRecentCellOutlet=null;constructor(){t.mostRecentCellOutlet=this}ngOnDestroy(){t.mostRecentCellOutlet===this&&(t.mostRecentCellOutlet=null)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","cdkCellOutlet",""]]})}return t})(),QK=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-header-row"],["tr","cdk-header-row",""]],hostAttrs:["role","row",1,"cdk-header-row"],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})();var hK=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-row"],["tr","cdk-row",""]],hostAttrs:["role","row",1,"cdk-row"],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})(),egA=(()=>{class t{templateRef=h(Tn);_contentClassNames=["cdk-no-data-row","cdk-row"];_cellClassNames=["cdk-cell","cdk-no-data-cell"];_cellSelector="td, cdk-cell, [cdk-cell], .cdk-cell";constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["ng-template","cdkNoDataRow",""]]})}return t})(),WsA=["top","bottom","left","right"],dK=class{_isNativeHtmlTable;_stickCellCss;_isBrowser;_needsPositionStickyOnElement;direction;_positionListener;_tableInjector;_elemSizeCache=new WeakMap;_resizeObserver=globalThis?.ResizeObserver?new globalThis.ResizeObserver(e=>this._updateCachedSizes(e)):null;_updatedStickyColumnsParamsToReplay=[];_stickyColumnsReplayTimeout=null;_cachedCellWidths=[];_borderCellCss;_destroyed=!1;constructor(e,A,i=!0,n=!0,o,a,r){this._isNativeHtmlTable=e,this._stickCellCss=A,this._isBrowser=i,this._needsPositionStickyOnElement=n,this.direction=o,this._positionListener=a,this._tableInjector=r,this._borderCellCss={top:`${A}-border-elem-top`,bottom:`${A}-border-elem-bottom`,left:`${A}-border-elem-left`,right:`${A}-border-elem-right`}}clearStickyPositioning(e,A){(A.includes("left")||A.includes("right"))&&this._removeFromStickyColumnReplayQueue(e);let i=[];for(let n of e)n.nodeType===n.ELEMENT_NODE&&i.push(n,...Array.from(n.children));Yn({write:()=>{for(let n of i)this._removeStickyStyle(n,A)}},{injector:this._tableInjector})}updateStickyColumns(e,A,i,n=!0,o=!0){if(!e.length||!this._isBrowser||!(A.some(Q=>Q)||i.some(Q=>Q))){this._positionListener?.stickyColumnsUpdated({sizes:[]}),this._positionListener?.stickyEndColumnsUpdated({sizes:[]});return}let a=e[0],r=a.children.length,s=this.direction==="rtl",g=s?"right":"left",l=s?"left":"right",C=A.lastIndexOf(!0),I=i.indexOf(!0),d,B,E;o&&this._updateStickyColumnReplayQueue({rows:[...e],stickyStartStates:[...A],stickyEndStates:[...i]}),Yn({earlyRead:()=>{d=this._getCellWidths(a,n),B=this._getStickyStartColumnPositions(d,A),E=this._getStickyEndColumnPositions(d,i)},write:()=>{for(let Q of e)for(let f=0;f!!Q)&&(this._positionListener.stickyColumnsUpdated({sizes:C===-1?[]:d.slice(0,C+1).map((Q,f)=>A[f]?Q:null)}),this._positionListener.stickyEndColumnsUpdated({sizes:I===-1?[]:d.slice(I).map((Q,f)=>i[f+I]?Q:null).reverse()}))}},{injector:this._tableInjector})}stickRows(e,A,i){if(!this._isBrowser)return;let n=i==="bottom"?e.slice().reverse():e,o=i==="bottom"?A.slice().reverse():A,a=[],r=[],s=[];Yn({earlyRead:()=>{for(let g=0,l=0;g{let g=o.lastIndexOf(!0);for(let l=0;l{let i=e.querySelector("tfoot");i&&(A.some(n=>!n)?this._removeStickyStyle(i,["bottom"]):this._addStickyStyle(i,"bottom",0,!1))}},{injector:this._tableInjector})}destroy(){this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._resizeObserver?.disconnect(),this._destroyed=!0}_removeStickyStyle(e,A){if(!e.classList.contains(this._stickCellCss))return;for(let n of A)e.style[n]="",e.classList.remove(this._borderCellCss[n]);WsA.some(n=>A.indexOf(n)===-1&&e.style[n])?e.style.zIndex=this._getCalculatedZIndex(e):(e.style.zIndex="",this._needsPositionStickyOnElement&&(e.style.position=""),e.classList.remove(this._stickCellCss))}_addStickyStyle(e,A,i,n){e.classList.add(this._stickCellCss),n&&e.classList.add(this._borderCellCss[A]),e.style[A]=`${i}px`,e.style.zIndex=this._getCalculatedZIndex(e),this._needsPositionStickyOnElement&&(e.style.cssText+="position: -webkit-sticky; position: sticky; ")}_getCalculatedZIndex(e){let A={top:100,bottom:10,left:1,right:1},i=0;for(let n of WsA)e.style[n]&&(i+=A[n]);return i?`${i}`:""}_getCellWidths(e,A=!0){if(!A&&this._cachedCellWidths.length)return this._cachedCellWidths;let i=[],n=e.children;for(let o=0;o0;o--)A[o]&&(i[o]=n,n+=e[o]);return i}_retrieveElementSize(e){let A=this._elemSizeCache.get(e);if(A)return A;let i=e.getBoundingClientRect(),n={width:i.width,height:i.height};return this._resizeObserver&&(this._elemSizeCache.set(e,n),this._resizeObserver.observe(e,{box:"border-box"})),n}_updateStickyColumnReplayQueue(e){this._removeFromStickyColumnReplayQueue(e.rows),this._stickyColumnsReplayTimeout||this._updatedStickyColumnsParamsToReplay.push(e)}_removeFromStickyColumnReplayQueue(e){let A=new Set(e);for(let i of this._updatedStickyColumnsParamsToReplay)i.rows=i.rows.filter(n=>!A.has(n));this._updatedStickyColumnsParamsToReplay=this._updatedStickyColumnsParamsToReplay.filter(i=>!!i.rows.length)}_updateCachedSizes(e){let A=!1;for(let i of e){let n=i.borderBoxSize?.length?{width:i.borderBoxSize[0].inlineSize,height:i.borderBoxSize[0].blockSize}:{width:i.contentRect.width,height:i.contentRect.height};n.width!==this._elemSizeCache.get(i.target)?.width&&sHA(i.target)&&(A=!0),this._elemSizeCache.set(i.target,n)}A&&this._updatedStickyColumnsParamsToReplay.length&&(this._stickyColumnsReplayTimeout&&clearTimeout(this._stickyColumnsReplayTimeout),this._stickyColumnsReplayTimeout=setTimeout(()=>{if(!this._destroyed){for(let i of this._updatedStickyColumnsParamsToReplay)this.updateStickyColumns(i.rows,i.stickyStartStates,i.stickyEndStates,!0,!1);this._updatedStickyColumnsParamsToReplay=[],this._stickyColumnsReplayTimeout=null}},0))}};function sHA(t){return["cdk-cell","cdk-header-cell","cdk-footer-cell"].some(e=>t.classList.contains(e))}var Ym=new yA("STICKY_POSITIONING_LISTENER");var uK=(()=>{class t{viewContainer=h(Oo);elementRef=h(ge);constructor(){let A=h(Xc);A._rowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","rowOutlet",""]]})}return t})(),fK=(()=>{class t{viewContainer=h(Oo);elementRef=h(ge);constructor(){let A=h(Xc);A._headerRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","headerRowOutlet",""]]})}return t})(),mK=(()=>{class t{viewContainer=h(Oo);elementRef=h(ge);constructor(){let A=h(Xc);A._footerRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","footerRowOutlet",""]]})}return t})(),pK=(()=>{class t{viewContainer=h(Oo);elementRef=h(ge);constructor(){let A=h(Xc);A._noDataRowOutlet=this,A._outletAssigned()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","noDataRowOutlet",""]]})}return t})(),wK=(()=>{class t{_differs=h(y1);_changeDetectorRef=h(Dt);_elementRef=h(ge);_dir=h(Ro,{optional:!0});_platform=h(Ii);_viewRepeater;_viewportRuler=h(Ls);_injector=h(ft);_virtualScrollViewport=h(qH,{optional:!0,host:!0});_positionListener=h(Ym,{optional:!0})||h(Ym,{optional:!0,skipSelf:!0});_document=h(Xt);_data;_renderedRange;_onDestroy=new XA;_renderRows;_renderChangeSubscription=null;_columnDefsByName=new Map;_rowDefs;_headerRowDefs;_footerRowDefs;_dataDiffer;_defaultRowDef=null;_customColumnDefs=new Set;_customRowDefs=new Set;_customHeaderRowDefs=new Set;_customFooterRowDefs=new Set;_customNoDataRow=null;_headerRowDefChanged=!0;_footerRowDefChanged=!0;_stickyColumnStylesNeedReset=!0;_forceRecalculateCellWidths=!0;_cachedRenderRowsMap=new Map;_isNativeHtmlTable;_stickyStyler;stickyCssClass="cdk-table-sticky";needsPositionStickyOnElement=!0;_isServer;_isShowingNoDataRow=!1;_hasAllOutlets=!1;_hasInitialized=!1;_headerRowStickyUpdates=new XA;_footerRowStickyUpdates=new XA;_disableVirtualScrolling=!1;_getCellRole(){if(this._cellRoleInternal===void 0){let A=this._elementRef.nativeElement.getAttribute("role");return A==="grid"||A==="treegrid"?"gridcell":"cell"}return this._cellRoleInternal}_cellRoleInternal=void 0;get trackBy(){return this._trackByFn}set trackBy(A){this._trackByFn=A}_trackByFn;get dataSource(){return this._dataSource}set dataSource(A){this._dataSource!==A&&(this._switchDataSource(A),this._changeDetectorRef.markForCheck())}_dataSource;_dataSourceChanges=new XA;_dataStream=new XA;get multiTemplateDataRows(){return this._multiTemplateDataRows}set multiTemplateDataRows(A){this._multiTemplateDataRows=A,this._rowOutlet&&this._rowOutlet.viewContainer.length&&(this._forceRenderDataRows(),this.updateStickyColumnStyles())}_multiTemplateDataRows=!1;get fixedLayout(){return this._virtualScrollEnabled()?!0:this._fixedLayout}set fixedLayout(A){this._fixedLayout=A,this._forceRecalculateCellWidths=!0,this._stickyColumnStylesNeedReset=!0}_fixedLayout=!1;recycleRows=!1;contentChanged=new $A;viewChange=new Ht({start:0,end:Number.MAX_VALUE});_rowOutlet;_headerRowOutlet;_footerRowOutlet;_noDataRowOutlet;_contentColumnDefs;_contentRowDefs;_contentHeaderRowDefs;_contentFooterRowDefs;_noDataRow;constructor(){h(new Ws("role"),{optional:!0})||this._elementRef.nativeElement.setAttribute("role","table"),this._isServer=!this._platform.isBrowser,this._isNativeHtmlTable=this._elementRef.nativeElement.nodeName==="TABLE",this._dataDiffer=this._differs.find([]).create((i,n)=>this.trackBy?this.trackBy(n.dataIndex,n.data):n)}ngOnInit(){this._setupStickyStyler(),this._viewportRuler.change().pipe(Bt(this._onDestroy)).subscribe(()=>{this._forceRecalculateCellWidths=!0})}ngAfterContentInit(){this._viewRepeater=this.recycleRows||this._virtualScrollEnabled()?new q6:new I8,this._virtualScrollEnabled()&&this._setupVirtualScrolling(this._virtualScrollViewport),this._hasInitialized=!0}ngAfterContentChecked(){this._canRender()&&this._render()}ngOnDestroy(){this._stickyStyler?.destroy(),[this._rowOutlet?.viewContainer,this._headerRowOutlet?.viewContainer,this._footerRowOutlet?.viewContainer,this._cachedRenderRowsMap,this._customColumnDefs,this._customRowDefs,this._customHeaderRowDefs,this._customFooterRowDefs,this._columnDefsByName].forEach(A=>{A?.clear()}),this._headerRowDefs=[],this._footerRowDefs=[],this._defaultRowDef=null,this._headerRowStickyUpdates.complete(),this._footerRowStickyUpdates.complete(),this._onDestroy.next(),this._onDestroy.complete(),Q4(this.dataSource)&&this.dataSource.disconnect(this)}renderRows(){this._renderRows=this._getAllRenderRows();let A=this._dataDiffer.diff(this._renderRows);if(!A){this._updateNoDataRow(),this.contentChanged.next();return}let i=this._rowOutlet.viewContainer;this._viewRepeater.applyChanges(A,i,(n,o,a)=>this._getEmbeddedViewArgs(n.item,a),n=>n.item.data,n=>{n.operation===rc.INSERTED&&n.context&&this._renderCellTemplateForItem(n.record.item.rowDef,n.context)}),this._updateRowIndexContext(),A.forEachIdentityChange(n=>{let o=i.get(n.currentIndex);o.context.$implicit=n.item.data}),this._updateNoDataRow(),this.contentChanged.next(),this.updateStickyColumnStyles()}addColumnDef(A){this._customColumnDefs.add(A)}removeColumnDef(A){this._customColumnDefs.delete(A)}addRowDef(A){this._customRowDefs.add(A)}removeRowDef(A){this._customRowDefs.delete(A)}addHeaderRowDef(A){this._customHeaderRowDefs.add(A),this._headerRowDefChanged=!0}removeHeaderRowDef(A){this._customHeaderRowDefs.delete(A),this._headerRowDefChanged=!0}addFooterRowDef(A){this._customFooterRowDefs.add(A),this._footerRowDefChanged=!0}removeFooterRowDef(A){this._customFooterRowDefs.delete(A),this._footerRowDefChanged=!0}setNoDataRow(A){this._customNoDataRow=A}updateStickyHeaderRowStyles(){let A=this._getRenderedRows(this._headerRowOutlet);if(this._isNativeHtmlTable){let n=ZsA(this._headerRowOutlet,"thead");n&&(n.style.display=A.length?"":"none")}let i=this._headerRowDefs.map(n=>n.sticky);this._stickyStyler.clearStickyPositioning(A,["top"]),this._stickyStyler.stickRows(A,i,"top"),this._headerRowDefs.forEach(n=>n.resetStickyChanged())}updateStickyFooterRowStyles(){let A=this._getRenderedRows(this._footerRowOutlet);if(this._isNativeHtmlTable){let n=ZsA(this._footerRowOutlet,"tfoot");n&&(n.style.display=A.length?"":"none")}let i=this._footerRowDefs.map(n=>n.sticky);this._stickyStyler.clearStickyPositioning(A,["bottom"]),this._stickyStyler.stickRows(A,i,"bottom"),this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement,i),this._footerRowDefs.forEach(n=>n.resetStickyChanged())}updateStickyColumnStyles(){let A=this._getRenderedRows(this._headerRowOutlet),i=this._getRenderedRows(this._rowOutlet),n=this._getRenderedRows(this._footerRowOutlet);(this._isNativeHtmlTable&&!this.fixedLayout||this._stickyColumnStylesNeedReset)&&(this._stickyStyler.clearStickyPositioning([...A,...i,...n],["left","right"]),this._stickyColumnStylesNeedReset=!1),A.forEach((o,a)=>{this._addStickyColumnStyles([o],this._headerRowDefs[a])}),this._rowDefs.forEach(o=>{let a=[];for(let r=0;r{this._addStickyColumnStyles([o],this._footerRowDefs[a])}),Array.from(this._columnDefsByName.values()).forEach(o=>o.resetStickyChanged())}stickyColumnsUpdated(A){this._positionListener?.stickyColumnsUpdated(A)}stickyEndColumnsUpdated(A){this._positionListener?.stickyEndColumnsUpdated(A)}stickyHeaderRowsUpdated(A){this._headerRowStickyUpdates.next(A),this._positionListener?.stickyHeaderRowsUpdated(A)}stickyFooterRowsUpdated(A){this._footerRowStickyUpdates.next(A),this._positionListener?.stickyFooterRowsUpdated(A)}_outletAssigned(){!this._hasAllOutlets&&this._rowOutlet&&this._headerRowOutlet&&this._footerRowOutlet&&this._noDataRowOutlet&&(this._hasAllOutlets=!0,this._canRender()&&this._render())}_canRender(){return this._hasAllOutlets&&this._hasInitialized}_render(){this._cacheRowDefs(),this._cacheColumnDefs(),!this._headerRowDefs.length&&!this._footerRowDefs.length&&this._rowDefs.length;let i=this._renderUpdatedColumns()||this._headerRowDefChanged||this._footerRowDefChanged;this._stickyColumnStylesNeedReset=this._stickyColumnStylesNeedReset||i,this._forceRecalculateCellWidths=i,this._headerRowDefChanged&&(this._forceRenderHeaderRows(),this._headerRowDefChanged=!1),this._footerRowDefChanged&&(this._forceRenderFooterRows(),this._footerRowDefChanged=!1),this.dataSource&&this._rowDefs.length>0&&!this._renderChangeSubscription?this._observeRenderChanges():this._stickyColumnStylesNeedReset&&this.updateStickyColumnStyles(),this._checkStickyStates()}_getAllRenderRows(){if(!Array.isArray(this._data)||!this._renderedRange)return[];let A=[],i=Math.min(this._data.length,this._renderedRange.end),n=this._cachedRenderRowsMap;this._cachedRenderRowsMap=new Map;for(let o=this._renderedRange.start;o{let r=n&&n.has(a)?n.get(a):[];if(r.length){let s=r.shift();return s.dataIndex=i,s}else return{data:A,rowDef:a,dataIndex:i}})}_cacheColumnDefs(){this._columnDefsByName.clear(),_7(this._getOwnDefs(this._contentColumnDefs),this._customColumnDefs).forEach(i=>{this._columnDefsByName.has(i.name),this._columnDefsByName.set(i.name,i)})}_cacheRowDefs(){this._headerRowDefs=_7(this._getOwnDefs(this._contentHeaderRowDefs),this._customHeaderRowDefs),this._footerRowDefs=_7(this._getOwnDefs(this._contentFooterRowDefs),this._customFooterRowDefs),this._rowDefs=_7(this._getOwnDefs(this._contentRowDefs),this._customRowDefs);let A=this._rowDefs.filter(i=>!i.when);!this.multiTemplateDataRows&&A.length>1,this._defaultRowDef=A[0]}_renderUpdatedColumns(){let A=(a,r)=>{let s=!!r.getColumnsDiff();return a||s},i=this._rowDefs.reduce(A,!1);i&&this._forceRenderDataRows();let n=this._headerRowDefs.reduce(A,!1);n&&this._forceRenderHeaderRows();let o=this._footerRowDefs.reduce(A,!1);return o&&this._forceRenderFooterRows(),i||n||o}_switchDataSource(A){this._data=[],Q4(this.dataSource)&&this.dataSource.disconnect(this),this._renderChangeSubscription&&(this._renderChangeSubscription.unsubscribe(),this._renderChangeSubscription=null),A||(this._dataDiffer&&this._dataDiffer.diff([]),this._rowOutlet&&this._rowOutlet.viewContainer.clear()),this._dataSource=A}_observeRenderChanges(){if(!this.dataSource)return;let A;Q4(this.dataSource)?A=this.dataSource.connect(this):mB(this.dataSource)?A=this.dataSource:Array.isArray(this.dataSource)&&(A=se(this.dataSource)),this._renderChangeSubscription=Ir([A,this.viewChange]).pipe(Bt(this._onDestroy)).subscribe(([i,n])=>{this._data=i||[],this._renderedRange=n,this._dataStream.next(i),this.renderRows()})}_forceRenderHeaderRows(){this._headerRowOutlet.viewContainer.length>0&&this._headerRowOutlet.viewContainer.clear(),this._headerRowDefs.forEach((A,i)=>this._renderRow(this._headerRowOutlet,A,i)),this.updateStickyHeaderRowStyles()}_forceRenderFooterRows(){this._footerRowOutlet.viewContainer.length>0&&this._footerRowOutlet.viewContainer.clear(),this._footerRowDefs.forEach((A,i)=>this._renderRow(this._footerRowOutlet,A,i)),this.updateStickyFooterRowStyles()}_addStickyColumnStyles(A,i){let n=Array.from(i?.columns||[]).map(r=>{let s=this._columnDefsByName.get(r);return s}),o=n.map(r=>r.sticky),a=n.map(r=>r.stickyEnd);this._stickyStyler.updateStickyColumns(A,o,a,!this.fixedLayout||this._forceRecalculateCellWidths)}_getRenderedRows(A){let i=[];for(let n=0;n!o.when||o.when(i,A));else{let o=this._rowDefs.find(a=>a.when&&a.when(i,A))||this._defaultRowDef;o&&n.push(o)}return n.length,n}_getEmbeddedViewArgs(A,i){let n=A.rowDef,o={$implicit:A.data};return{templateRef:n.template,context:o,index:i}}_renderRow(A,i,n,o={}){let a=A.viewContainer.createEmbeddedView(i.template,o,n);return this._renderCellTemplateForItem(i,o),a}_renderCellTemplateForItem(A,i){for(let n of this._getCellTemplates(A))EB.mostRecentCellOutlet&&EB.mostRecentCellOutlet._viewContainer.createEmbeddedView(n,i);this._changeDetectorRef.markForCheck()}_updateRowIndexContext(){let A=this._rowOutlet.viewContainer;for(let i=0,n=A.length;i{let n=this._columnDefsByName.get(i);return A.extractCellTemplate(n)})}_forceRenderDataRows(){this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear(),this.renderRows()}_checkStickyStates(){let A=(i,n)=>i||n.hasStickyChanged();this._headerRowDefs.reduce(A,!1)&&this.updateStickyHeaderRowStyles(),this._footerRowDefs.reduce(A,!1)&&this.updateStickyFooterRowStyles(),Array.from(this._columnDefsByName.values()).reduce(A,!1)&&(this._stickyColumnStylesNeedReset=!0,this.updateStickyColumnStyles())}_setupStickyStyler(){let A=this._dir?this._dir.value:"ltr",i=this._injector;this._stickyStyler=new dK(this._isNativeHtmlTable,this.stickyCssClass,this._platform.isBrowser,this.needsPositionStickyOnElement,A,this,i),(this._dir?this._dir.change:se()).pipe(Bt(this._onDestroy)).subscribe(n=>{this._stickyStyler.direction=n,this.updateStickyColumnStyles()})}_setupVirtualScrolling(A){let i=typeof requestAnimationFrame<"u"?uB:Ub;this.viewChange.next({start:0,end:0}),A.renderedRangeStream.pipe(m1(0,i),Bt(this._onDestroy)).subscribe(this.viewChange),A.attach({dataStream:this._dataStream,measureRangeSize:(n,o)=>this._measureRangeSize(n,o)}),Ir([A.renderedContentOffset,this._headerRowStickyUpdates]).pipe(Bt(this._onDestroy)).subscribe(([n,o])=>{if(!(!o.sizes||!o.offsets||!o.elements))for(let a=0;a{if(!(!o.sizes||!o.offsets||!o.elements))for(let a=0;a!i._table||i._table===this)}_updateNoDataRow(){let A=this._customNoDataRow||this._noDataRow;if(!A)return;let i=this._rowOutlet.viewContainer.length===0;if(i===this._isShowingNoDataRow)return;let n=this._noDataRowOutlet.viewContainer;if(i){let o=n.createEmbeddedView(A.templateRef),a=o.rootNodes[0];if(o.rootNodes.length===1&&a?.nodeType===this._document.ELEMENT_NODE){a.setAttribute("role","row"),a.classList.add(...A._contentClassNames);let r=a.querySelectorAll(A._cellSelector);for(let s=0;s=A.end||i!=="vertical")return 0;let n=this.viewChange.value,o=this._rowOutlet.viewContainer;A.startn.end;let a=A.start-n.start,r=A.end-A.start,s,g;for(let I=0;I-1;I--){let d=o.get(I+a);if(d&&d.rootNodes.length){g=d.rootNodes[d.rootNodes.length-1];break}}let l=s?.getBoundingClientRect?.(),C=g?.getBoundingClientRect?.();return l&&C?C.bottom-l.top:0}_virtualScrollEnabled(){return!this._disableVirtualScrolling&&this._virtualScrollViewport!=null}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["cdk-table"],["table","cdk-table",""]],contentQueries:function(i,n,o){if(i&1&&fa(o,egA,5)(o,Wh,5)(o,U7,5)(o,Tm,5)(o,EK,5),i&2){let a;ce(a=Ce())&&(n._noDataRow=a.first),ce(a=Ce())&&(n._contentColumnDefs=a),ce(a=Ce())&&(n._contentRowDefs=a),ce(a=Ce())&&(n._contentHeaderRowDefs=a),ce(a=Ce())&&(n._contentFooterRowDefs=a)}},hostAttrs:[1,"cdk-table"],hostVars:2,hostBindings:function(i,n){i&2&&ne("cdk-table-fixed-layout",n.fixedLayout)},inputs:{trackBy:"trackBy",dataSource:"dataSource",multiTemplateDataRows:[2,"multiTemplateDataRows","multiTemplateDataRows",he],fixedLayout:[2,"fixedLayout","fixedLayout",he],recycleRows:[2,"recycleRows","recycleRows",he]},outputs:{contentChanged:"contentChanged"},exportAs:["cdkTable"],features:[dt([{provide:Xc,useExisting:t},{provide:Ym,useValue:null}])],ngContentSelectors:nHA,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(i,n){i&1&&(Yt(iHA),Ke(0),Ke(1,1),V(2,oHA,1,0),V(3,aHA,7,0)(4,rHA,4,0)),i&2&&(p(2),W(n._isServer?2:-1),p(),W(n._isNativeHtmlTable?3:4))},dependencies:[fK,uK,pK,mK],styles:[`.cdk-table-fixed-layout{table-layout:fixed} -`],encapsulation:2})}return t})();function _7(t,e){return t.concat(Array.from(e))}function ZsA(t,e){let A=e.toUpperCase(),i=t.viewContainer.element.nativeElement;for(;i;){let n=i.nodeType===1?i.nodeName:null;if(n===A)return i;if(n==="TABLE")break;i=i.parentNode}return null}var gHA=[[["caption"]],[["colgroup"],["col"]],"*"],lHA=["caption","colgroup, col","*"];function cHA(t,e){t&1&&Ke(0,2)}function CHA(t,e){t&1&&(m(0,"thead",0),on(1,1),w(),m(2,"tbody",2),on(3,3)(4,4),w(),m(5,"tfoot",0),on(6,5),w())}function IHA(t,e){t&1&&on(0,1)(1,3)(2,4)(3,5)}var tgA=(()=>{class t extends wK{stickyCssClass="mat-mdc-table-sticky";needsPositionStickyOnElement=!1;static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-table"],["table","mat-table",""]],hostAttrs:[1,"mat-mdc-table","mdc-data-table__table"],hostVars:2,hostBindings:function(i,n){i&2&&ne("mat-table-fixed-layout",n.fixedLayout)},exportAs:["matTable"],features:[dt([{provide:wK,useExisting:t},{provide:Xc,useExisting:t},{provide:Ym,useValue:null}]),It],ngContentSelectors:lHA,decls:5,vars:2,consts:[["role","rowgroup"],["headerRowOutlet",""],["role","rowgroup",1,"mdc-data-table__content"],["rowOutlet",""],["noDataRowOutlet",""],["footerRowOutlet",""]],template:function(i,n){i&1&&(Yt(gHA),Ke(0),Ke(1,1),V(2,cHA,1,0),V(3,CHA,7,0)(4,IHA,4,0)),i&2&&(p(2),W(n._isServer?2:-1),p(),W(n._isNativeHtmlTable?3:4))},dependencies:[fK,uK,pK,mK],styles:[`.mat-mdc-table-sticky{position:sticky !important}mat-table{display:block}mat-header-row{min-height:var(--mat-table-header-container-height, 56px)}mat-row{min-height:var(--mat-table-row-item-container-height, 52px)}mat-footer-row{min-height:var(--mat-table-footer-container-height, 52px)}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}.mat-mdc-table{min-width:100%;border:0;border-spacing:0;table-layout:auto;white-space:normal;background-color:var(--mat-table-background-color, var(--mat-sys-surface))}.mat-table-fixed-layout{table-layout:fixed}.mdc-data-table__cell{box-sizing:border-box;overflow:hidden;text-align:start;text-overflow:ellipsis}.mdc-data-table__cell,.mdc-data-table__header-cell{padding:0 16px}.mat-mdc-header-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-header-container-height, 56px);color:var(--mat-table-header-headline-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-header-headline-font, var(--mat-sys-title-small-font, Roboto, sans-serif));line-height:var(--mat-table-header-headline-line-height, var(--mat-sys-title-small-line-height));font-size:var(--mat-table-header-headline-size, var(--mat-sys-title-small-size, 14px));font-weight:var(--mat-table-header-headline-weight, var(--mat-sys-title-small-weight, 500))}.mat-mdc-row{height:var(--mat-table-row-item-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)))}.mat-mdc-row,.mdc-data-table__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-table-row-item-label-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-row-item-label-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-table-row-item-label-text-size, var(--mat-sys-body-medium-size, 14px));font-weight:var(--mat-table-row-item-label-text-weight, var(--mat-sys-body-medium-weight))}.mat-mdc-footer-row{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:var(--mat-table-footer-container-height, 52px);color:var(--mat-table-row-item-label-text-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mat-table-footer-supporting-text-font, var(--mat-sys-body-medium-font, Roboto, sans-serif));line-height:var(--mat-table-footer-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-table-footer-supporting-text-size, var(--mat-sys-body-medium-size, 14px));font-weight:var(--mat-table-footer-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-table-footer-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mat-mdc-header-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-header-headline-tracking, var(--mat-sys-title-small-tracking));font-weight:inherit;line-height:inherit;box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:start}.mdc-data-table__row:last-child>.mat-mdc-header-cell{border-bottom:none}.mat-mdc-cell{border-bottom-color:var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));border-bottom-width:var(--mat-table-row-item-outline-width, 1px);border-bottom-style:solid;letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking));line-height:inherit}.mdc-data-table__row:last-child>.mat-mdc-cell{border-bottom:none}.mat-mdc-footer-cell{letter-spacing:var(--mat-table-row-item-label-text-tracking, var(--mat-sys-body-medium-tracking))}mat-row.mat-mdc-row,mat-header-row.mat-mdc-header-row,mat-footer-row.mat-mdc-footer-row{border-bottom:none}.mat-mdc-table tbody,.mat-mdc-table tfoot,.mat-mdc-table thead,.mat-mdc-cell,.mat-mdc-footer-cell,.mat-mdc-header-row,.mat-mdc-row,.mat-mdc-footer-row,.mat-mdc-table .mat-mdc-header-cell{background:inherit}.mat-mdc-table mat-header-row.mat-mdc-header-row,.mat-mdc-table mat-row.mat-mdc-row,.mat-mdc-table mat-footer-row.mat-mdc-footer-cell{height:unset}mat-header-cell.mat-mdc-header-cell,mat-cell.mat-mdc-cell,mat-footer-cell.mat-mdc-footer-cell{align-self:stretch} -`],encapsulation:2})}return t})(),igA=(()=>{class t extends G7{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matCellDef",""]],features:[dt([{provide:G7,useExisting:t}]),It]})}return t})(),ngA=(()=>{class t extends K7{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matHeaderCellDef",""]],features:[dt([{provide:K7,useExisting:t}]),It]})}return t})();var ogA=(()=>{class t extends Wh{get name(){return this._name}set name(A){this._setNameInput(A)}_updateColumnCssClassName(){super._updateColumnCssClassName(),this._columnCssClassName.push(`mat-column-${this.cssClassFriendlyName}`)}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matColumnDef",""]],inputs:{name:[0,"matColumnDef","name"]},features:[dt([{provide:Wh,useExisting:t},{provide:"MAT_SORT_HEADER_COLUMN_DEF",useExisting:t}]),It]})}return t})(),agA=(()=>{class t extends $sA{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["mat-header-cell"],["th","mat-header-cell",""]],hostAttrs:["role","columnheader",1,"mat-mdc-header-cell","mdc-data-table__header-cell"],features:[It]})}return t})();var rgA=(()=>{class t extends AgA{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["mat-cell"],["td","mat-cell",""]],hostAttrs:[1,"mat-mdc-cell","mdc-data-table__cell"],features:[It]})}return t})();var sgA=(()=>{class t extends Tm{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matHeaderRowDef",""]],inputs:{columns:[0,"matHeaderRowDef","columns"],sticky:[2,"matHeaderRowDefSticky","sticky",he]},features:[dt([{provide:Tm,useExisting:t}]),It]})}return t})();var ggA=(()=>{class t extends U7{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matRowDef",""]],inputs:{columns:[0,"matRowDefColumns","columns"],when:[0,"matRowDefWhen","when"]},features:[dt([{provide:U7,useExisting:t}]),It]})}return t})(),lgA=(()=>{class t extends QK{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-header-row"],["tr","mat-header-row",""]],hostAttrs:["role","row",1,"mat-mdc-header-row","mdc-data-table__header-row"],exportAs:["matHeaderRow"],features:[dt([{provide:QK,useExisting:t}]),It],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})();var cgA=(()=>{class t extends hK{static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-row"],["tr","mat-row",""]],hostAttrs:["role","row",1,"mat-mdc-row","mdc-data-table__row"],exportAs:["matRow"],features:[dt([{provide:hK,useExisting:t}]),It],decls:1,vars:0,consts:[["cdkCellOutlet",""]],template:function(i,n){i&1&&on(0,0)},dependencies:[EB],encapsulation:2})}return t})();var dHA=9007199254740991,Hm=class extends E4{_data;_renderData=new Ht([]);_filter=new Ht("");_internalPageChanges=new XA;_renderChangesSubscription=null;filteredData;get data(){return this._data.value}set data(e){e=Array.isArray(e)?e:[],this._data.next(e),this._renderChangesSubscription||this._filterData(e)}get filter(){return this._filter.value}set filter(e){this._filter.next(e),this._renderChangesSubscription||this._filterData(this.data)}get sort(){return this._sort}set sort(e){this._sort=e,this._updateChangeSubscription()}_sort;get paginator(){return this._paginator}set paginator(e){this._paginator=e,this._updateChangeSubscription()}_paginator;sortingDataAccessor=(e,A)=>{let i=e[A];if(Mp(i)){let n=Number(i);return n{let i=A.active,n=A.direction;return!i||n==""?e:e.sort((o,a)=>{let r=this.sortingDataAccessor(o,i),s=this.sortingDataAccessor(a,i),g=typeof r,l=typeof s;g!==l&&(g==="number"&&(r+=""),l==="number"&&(s+=""));let C=0;return r!=null&&s!=null?r>s?C=1:r{let i=A.trim().toLowerCase();return Object.values(e).some(n=>`${n}`.toLowerCase().includes(i))};constructor(e=[]){super(),this._data=new Ht(e),this._updateChangeSubscription()}_updateChangeSubscription(){let e=this._sort?fi(this._sort.sortChange,this._sort.initialized):se(null),A=this._paginator?fi(this._paginator.page,this._internalPageChanges,this._paginator.initialized):se(null),i=this._data,n=Ir([i,this._filter]).pipe(fe(([r])=>this._filterData(r))),o=Ir([n,e]).pipe(fe(([r])=>this._orderData(r))),a=Ir([o,A]).pipe(fe(([r])=>this._pageData(r)));this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=a.subscribe(r=>this._renderData.next(r))}_filterData(e){return this.filteredData=this.filter==null||this.filter===""?e:e.filter(A=>this.filterPredicate(A,this.filter)),this.paginator&&this._updatePaginator(this.filteredData.length),this.filteredData}_orderData(e){return this.sort?this.sortData(e.slice(),this.sort):e}_pageData(e){if(!this.paginator)return e;let A=this.paginator.pageIndex*this.paginator.pageSize;return e.slice(A,A+this.paginator.pageSize)}_updatePaginator(e){Promise.resolve().then(()=>{let A=this.paginator;if(A&&(A.length=e,A.pageIndex>0)){let i=Math.ceil(A.length/A.pageSize)-1||0,n=Math.min(A.pageIndex,i);n!==A.pageIndex&&(A.pageIndex=n,this._internalPageChanges.next())}})}connect(){return this._renderChangesSubscription||this._updateChangeSubscription(),this._renderData}disconnect(){this._renderChangesSubscription?.unsubscribe(),this._renderChangesSubscription=null}};var CgA=[{metricName:"tool_trajectory_avg_score",threshold:1},{metricName:"response_match_score",threshold:.7}];var J7="0123456789abcdef",Y7=class t{constructor(e){this.bytes=e}static ofInner(e){if(e.length!==16)throw new TypeError("not 128-bit length");return new t(e)}static fromFieldsV7(e,A,i,n){if(!Number.isInteger(e)||!Number.isInteger(A)||!Number.isInteger(i)||!Number.isInteger(n)||e<0||A<0||i<0||n<0||e>0xffffffffffff||A>4095||i>1073741823||n>4294967295)throw new RangeError("invalid field value");let o=new Uint8Array(16);return o[0]=e/2**40,o[1]=e/2**32,o[2]=e/2**24,o[3]=e/2**16,o[4]=e/2**8,o[5]=e,o[6]=112|A>>>8,o[7]=A,o[8]=128|i>>>24,o[9]=i>>>16,o[10]=i>>>8,o[11]=i,o[12]=n>>>24,o[13]=n>>>16,o[14]=n>>>8,o[15]=n,new t(o)}static parse(e){var A,i,n,o;let a;switch(e.length){case 32:a=(A=/^[0-9a-f]{32}$/i.exec(e))===null||A===void 0?void 0:A[0];break;case 36:a=(i=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e))===null||i===void 0?void 0:i.slice(1,6).join("");break;case 38:a=(n=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(e))===null||n===void 0?void 0:n.slice(1,6).join("");break;case 45:a=(o=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e))===null||o===void 0?void 0:o.slice(1,6).join("");break;default:break}if(a){let r=new Uint8Array(16);for(let s=0;s<16;s+=4){let g=parseInt(a.substring(2*s,2*s+8),16);r[s+0]=g>>>24,r[s+1]=g>>>16,r[s+2]=g>>>8,r[s+3]=g}return new t(r)}else throw new SyntaxError("could not parse UUID string")}toString(){let e="";for(let A=0;A>>4),e+=J7.charAt(this.bytes[A]&15),(A===3||A===5||A===7||A===9)&&(e+="-");return e}toHex(){let e="";for(let A=0;A>>4),e+=J7.charAt(this.bytes[A]&15);return e}toJSON(){return this.toString()}getVariant(){let e=this.bytes[8]>>>4;if(e<0)throw new Error("unreachable");if(e<=7)return this.bytes.every(A=>A===0)?"NIL":"VAR_0";if(e<=11)return"VAR_10";if(e<=13)return"VAR_110";if(e<=15)return this.bytes.every(A=>A===255)?"MAX":"VAR_RESERVED";throw new Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new t(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(let A=0;A<16;A++){let i=this.bytes[A]-e.bytes[A];if(i!==0)return Math.sign(i)}return 0}},DK=class{constructor(e){this.timestamp_biased=0,this.counter=0,this.random=e??BHA()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(e,A){let i=this.generateOrAbortCore(e,A);return i===void 0&&(this.timestamp_biased=0,i=this.generateOrAbortCore(e,A)),i}generateOrAbortCore(e,A){if(!Number.isInteger(e)||e<0||e>0xffffffffffff)throw new RangeError("`unixTsMs` must be a 48-bit unsigned integer");if(A<0||A>0xffffffffffff)throw new RangeError("`rollbackAllowance` out of reasonable range");if(e++,e>this.timestamp_biased)this.timestamp_biased=e,this.resetCounter();else if(e+A>=this.timestamp_biased)this.counter++,this.counter>4398046511103&&(this.timestamp_biased++,this.resetCounter());else return;return Y7.fromFieldsV7(this.timestamp_biased-1,Math.trunc(this.counter/2**30),this.counter&2**30-1,this.random.nextUint32())}resetCounter(){this.counter=this.random.nextUint32()*1024+(this.random.nextUint32()&1023)}generateV4(){let e=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return e[6]=64|e[6]>>>4,e[8]=128|e[8]>>>2,Y7.ofInner(e)}},BHA=()=>{if(typeof crypto<"u"&&typeof crypto.getRandomValues<"u")return new yK;if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");return{nextUint32:()=>Math.trunc(Math.random()*65536)*65536+Math.trunc(Math.random()*65536)}},yK=class{constructor(){this.buffer=new Uint32Array(8),this.cursor=65535}nextUint32(){return this.cursor>=this.buffer.length&&(crypto.getRandomValues(this.buffer),this.cursor=0),this.buffer[this.cursor++]}},IgA;var T7=()=>EHA().toString(),EHA=()=>(IgA||(IgA=new DK)).generateV4();var H7=class t{evalService=h(h0);data=h(Ca);dialogRef=h(bo);newCaseId="case"+T7().slice(0,6);constructor(){}createNewEvalCase(){!this.newCaseId||this.newCaseId==""?alert("Cannot create eval set with empty id!"):this.evalService.addCurrentSession(this.data.appName,this.data.evalSetId,this.newCaseId,this.data.sessionId,this.data.userId).subscribe(e=>{this.dialogRef.close(!0)})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-add-eval-session-dialog"]],decls:11,vars:1,consts:[["mat-dialog-title",""],[2,"padding-left","20px","padding-right","24px"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1,"Add Current Session To Eval Set"),w(),m(2,"mat-dialog-content"),K(3,` Please enter the eval case name -`),w(),m(4,"mat-form-field",1)(5,"input",2),ho("ngModelChange",function(o){return ao(i.newCaseId,o)||(i.newCaseId=o),o}),tA("keydown.enter",function(){return i.createNewEvalCase()}),w()(),m(6,"mat-dialog-actions",3)(7,"button",4),K(8,"Cancel"),w(),m(9,"button",5),tA("click",function(){return i.createNewEvalCase()}),K(10,"Create"),w()()),A&2&&(p(5),Qo("ngModel",i.newCaseId))},dependencies:[Da,rr,No,wa,Nn,uo,fo,Sa,Ua,fn,B0],styles:["h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;caret-color:var(--mdc-dialog-supporting-text-color)!important;background-color:transparent!important}html.darkmode [_nghost-%COMP%] .mat-mdc-text-field-wrapper{background-color:#3f3f42}"]})};var QHA={allEvalSetsHeader:"All eval sets",createNewEvalSetTooltip:"Create new evaluation set",createNewEvalSetTitle:"Create New Evaluation Set",evalSetDescription:"An evaluation set is a curated collection of evaluation cases, where each case includes input-output examples for assessing agent performance.",createEvalSetButton:"Create Evaluation Set",runEvaluationButton:"Run Evaluation",viewEvalRunHistoryTooltip:"View eval run history",caseIdHeader:"Case ID",resultHeader:"Result",viewEvalRunResultTooltip:"View eval run result",passStatus:"Pass",failStatus:"Fail",passStatusCaps:"PASS",failStatusCaps:"FAIL",passedSuffix:"Passed",failedSuffix:"Failed",addSessionToSetButtonPrefix:"Add current session to"},dgA=new yA("Eval Tab Messages",{factory:()=>QHA});var z7=class t{evalService=h(h0);data=h(Ca);dialogRef=h(bo);newSetId="evalset"+T7().slice(0,6);constructor(){}createNewEvalSet(){!this.newSetId||this.newSetId==""?alert("Cannot create eval set with empty id!"):this.evalService.createNewEvalSet(this.data.appName,this.newSetId).subscribe(e=>{this.dialogRef.close(!0)})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-new-eval-set-dialog-component"]],decls:11,vars:1,consts:[["mat-dialog-title",""],[2,"padding-left","20px","padding-right","24px"],["matInput","",3,"ngModelChange","keydown.enter","ngModel"],["align","end"],["mat-button","","mat-dialog-close",""],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"h2",0),K(1,"Create New Eval Set"),w(),m(2,"mat-dialog-content"),K(3,` Please enter the eval set name -`),w(),m(4,"mat-form-field",1)(5,"input",2),ho("ngModelChange",function(o){return ao(i.newSetId,o)||(i.newSetId=o),o}),tA("keydown.enter",function(){return i.createNewEvalSet()}),w()(),m(6,"mat-dialog-actions",3)(7,"button",4),K(8,"Cancel"),w(),m(9,"button",5),tA("click",function(){return i.createNewEvalSet()}),K(10,"Create"),w()()),A&2&&(p(5),Qo("ngModel",i.newSetId))},dependencies:[Da,rr,No,wa,Nn,uo,fo,Sa,Ua,fn,B0],styles:["h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important;caret-color:var(--mdc-dialog-supporting-text-color)!important;background-color:transparent!important}[_nghost-%COMP%] .mat-mdc-text-field-wrapper{background-color:#3f3f42}"]})};var hHA=["knob"],uHA=["valueIndicatorContainer"];function fHA(t,e){if(t&1&&(m(0,"div",2,1)(2,"div",5)(3,"span",6),K(4),w()()()),t&2){let A=v();p(4),qA(A.valueIndicatorText)}}var mHA=["trackActive"],pHA=["*"];function wHA(t,e){if(t&1&&GA(0,"div"),t&2){let A=e.$implicit,i=e.$index,n=v(3);Po(A===0?"mdc-slider__tick-mark--active":"mdc-slider__tick-mark--inactive"),wn("transform",n._calcTickMarkTransform(i))}}function DHA(t,e){if(t&1&&Ut(0,wHA,1,4,"div",8,wB),t&2){let A=v(2);Jt(A._tickMarks)}}function yHA(t,e){if(t&1&&(m(0,"div",6,1),V(2,DHA,2,0),w()),t&2){let A=v();p(2),W(A._cachedWidth?2:-1)}}function vHA(t,e){if(t&1&&GA(0,"mat-slider-visual-thumb",7),t&2){let A=v();$("discrete",A.discrete)("thumbPosition",1)("valueIndicatorText",A.startValueIndicatorText)}}var pi=(function(t){return t[t.START=1]="START",t[t.END=2]="END",t})(pi||{}),Zh=(function(t){return t[t.ACTIVE=0]="ACTIVE",t[t.INACTIVE=1]="INACTIVE",t})(Zh||{}),vK=new yA("_MatSlider"),BgA=new yA("_MatSliderThumb"),bHA=new yA("_MatSliderRangeThumb"),EgA=new yA("_MatSliderVisualThumb");var MHA=(()=>{class t{_cdr=h(Dt);_ngZone=h(Oe);_slider=h(vK);_renderer=h(_i);_listenerCleanups;discrete=!1;thumbPosition;valueIndicatorText;_ripple;_knob;_valueIndicatorContainer;_sliderInput;_sliderInputEl;_hoverRippleRef;_focusRippleRef;_activeRippleRef;_isHovered=!1;_isActive=!1;_isValueIndicatorVisible=!1;_hostElement=h(ge).nativeElement;_platform=h(Ii);constructor(){}ngAfterViewInit(){let A=this._slider._getInput(this.thumbPosition);A&&(this._ripple.radius=24,this._sliderInput=A,this._sliderInputEl=this._sliderInput._hostElement,this._ngZone.runOutsideAngular(()=>{let i=this._sliderInputEl,n=this._renderer;this._listenerCleanups=[n.listen(i,"pointermove",this._onPointerMove),n.listen(i,"pointerdown",this._onDragStart),n.listen(i,"pointerup",this._onDragEnd),n.listen(i,"pointerleave",this._onMouseLeave),n.listen(i,"focus",this._onFocus),n.listen(i,"blur",this._onBlur)]}))}ngOnDestroy(){this._listenerCleanups?.forEach(A=>A())}_onPointerMove=A=>{if(this._sliderInput._isFocused)return;let i=this._hostElement.getBoundingClientRect(),n=this._slider._isCursorOnSliderThumb(A,i);this._isHovered=n,n?this._showHoverRipple():this._hideRipple(this._hoverRippleRef)};_onMouseLeave=()=>{this._isHovered=!1,this._hideRipple(this._hoverRippleRef)};_onFocus=()=>{this._hideRipple(this._hoverRippleRef),this._showFocusRipple(),this._hostElement.classList.add("mdc-slider__thumb--focused")};_onBlur=()=>{this._isActive||this._hideRipple(this._focusRippleRef),this._isHovered&&this._showHoverRipple(),this._hostElement.classList.remove("mdc-slider__thumb--focused")};_onDragStart=A=>{A.button===0&&(this._isActive=!0,this._showActiveRipple())};_onDragEnd=()=>{this._isActive=!1,this._hideRipple(this._activeRippleRef),this._sliderInput._isFocused||this._hideRipple(this._focusRippleRef),this._platform.SAFARI&&this._showHoverRipple()};_showHoverRipple(){this._isShowingRipple(this._hoverRippleRef)||(this._hoverRippleRef=this._showRipple({enterDuration:0,exitDuration:0}),this._hoverRippleRef?.element.classList.add("mat-mdc-slider-hover-ripple"))}_showFocusRipple(){this._isShowingRipple(this._focusRippleRef)||(this._focusRippleRef=this._showRipple({enterDuration:0,exitDuration:0},!0),this._focusRippleRef?.element.classList.add("mat-mdc-slider-focus-ripple"))}_showActiveRipple(){this._isShowingRipple(this._activeRippleRef)||(this._activeRippleRef=this._showRipple({enterDuration:225,exitDuration:400}),this._activeRippleRef?.element.classList.add("mat-mdc-slider-active-ripple"))}_isShowingRipple(A){return A?.state===Rs.FADING_IN||A?.state===Rs.VISIBLE}_showRipple(A,i){if(!this._slider.disabled&&(this._showValueIndicator(),this._slider._isRange&&this._slider._getThumb(this.thumbPosition===pi.START?pi.END:pi.START)._showValueIndicator(),!(this._slider._globalRippleOptions?.disabled&&!i)))return this._ripple.launch({animation:this._slider._noopAnimations?{enterDuration:0,exitDuration:0}:A,centered:!0,persistent:!0})}_hideRipple(A){if(A?.fadeOut(),this._isShowingAnyRipple())return;this._slider._isRange||this._hideValueIndicator();let i=this._getSibling();i._isShowingAnyRipple()||(this._hideValueIndicator(),i._hideValueIndicator())}_showValueIndicator(){this._hostElement.classList.add("mdc-slider__thumb--with-indicator")}_hideValueIndicator(){this._hostElement.classList.remove("mdc-slider__thumb--with-indicator")}_getSibling(){return this._slider._getThumb(this.thumbPosition===pi.START?pi.END:pi.START)}_getValueIndicatorContainer(){return this._valueIndicatorContainer?.nativeElement}_getKnob(){return this._knob.nativeElement}_isShowingAnyRipple(){return this._isShowingRipple(this._hoverRippleRef)||this._isShowingRipple(this._focusRippleRef)||this._isShowingRipple(this._activeRippleRef)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-slider-visual-thumb"]],viewQuery:function(i,n){if(i&1&&ai(ig,5)(hHA,5)(uHA,5),i&2){let o;ce(o=Ce())&&(n._ripple=o.first),ce(o=Ce())&&(n._knob=o.first),ce(o=Ce())&&(n._valueIndicatorContainer=o.first)}},hostAttrs:[1,"mdc-slider__thumb","mat-mdc-slider-visual-thumb"],inputs:{discrete:"discrete",thumbPosition:"thumbPosition",valueIndicatorText:"valueIndicatorText"},features:[dt([{provide:EgA,useExisting:t}])],decls:4,vars:2,consts:[["knob",""],["valueIndicatorContainer",""],[1,"mdc-slider__value-indicator-container"],[1,"mdc-slider__thumb-knob"],["matRipple","",1,"mat-focus-indicator",3,"matRippleDisabled"],[1,"mdc-slider__value-indicator"],[1,"mdc-slider__value-indicator-text"]],template:function(i,n){i&1&&(V(0,fHA,5,1,"div",2),GA(1,"div",3,0)(3,"div",4)),i&2&&(W(n.discrete?0:-1),p(3),$("matRippleDisabled",!0))},dependencies:[ig],styles:[`.mat-mdc-slider-visual-thumb .mat-ripple{height:100%;width:100%}.mat-mdc-slider .mdc-slider__tick-marks{justify-content:start}.mat-mdc-slider .mdc-slider__tick-marks .mdc-slider__tick-mark--active,.mat-mdc-slider .mdc-slider__tick-marks .mdc-slider__tick-mark--inactive{position:absolute;left:2px} -`],encapsulation:2,changeDetection:0})}return t})(),QgA=(()=>{class t{_ngZone=h(Oe);_cdr=h(Dt);_elementRef=h(ge);_dir=h(Ro,{optional:!0});_globalRippleOptions=h(S2,{optional:!0});_trackActive;_thumbs;_input;_inputs;get disabled(){return this._disabled}set disabled(A){this._disabled=A;let i=this._getInput(pi.END),n=this._getInput(pi.START);i&&(i.disabled=this._disabled),n&&(n.disabled=this._disabled)}_disabled=!1;get discrete(){return this._discrete}set discrete(A){this._discrete=A,this._updateValueIndicatorUIs()}_discrete=!1;get showTickMarks(){return this._showTickMarks}set showTickMarks(A){this._showTickMarks=A,this._hasViewInitialized&&(this._updateTickMarkUI(),this._updateTickMarkTrackUI())}_showTickMarks=!1;get min(){return this._min}set min(A){let i=A==null||isNaN(A)?this._min:A;this._min!==i&&this._updateMin(i)}_min=0;color;disableRipple=!1;_updateMin(A){let i=this._min;this._min=A,this._isRange?this._updateMinRange({old:i,new:A}):this._updateMinNonRange(A),this._onMinMaxOrStepChange()}_updateMinRange(A){let i=this._getInput(pi.END),n=this._getInput(pi.START),o=i.value,a=n.value;n.min=A.new,i.min=Math.max(A.new,n.value),n.max=Math.min(i.max,i.value),n._updateWidthInactive(),i._updateWidthInactive(),A.newA.old?this._onTranslateXChangeBySideEffect(n,i):this._onTranslateXChangeBySideEffect(i,n),o!==i.value&&this._onValueChange(i),a!==n.value&&this._onValueChange(n)}_updateMaxNonRange(A){let i=this._getInput(pi.END);if(i){let n=i.value;i.max=A,i._updateThumbUIByValue(),this._updateTrackUI(i),n!==i.value&&this._onValueChange(i)}}get step(){return this._step}set step(A){let i=isNaN(A)?this._step:A;this._step!==i&&this._updateStep(i)}_step=1;_updateStep(A){this._step=A,this._isRange?this._updateStepRange():this._updateStepNonRange(),this._onMinMaxOrStepChange()}_updateStepRange(){let A=this._getInput(pi.END),i=this._getInput(pi.START),n=A.value,o=i.value,a=i.value;A.min=this._min,i.max=this._max,A.step=this._step,i.step=this._step,this._platform.SAFARI&&(A.value=A.value,i.value=i.value),A.min=Math.max(this._min,i.value),i.max=Math.min(this._max,A.value),i._updateWidthInactive(),A._updateWidthInactive(),A.value`${A}`;_tickMarks;_noopAnimations=ji();_dirChangeSubscription;_resizeObserver=null;_cachedWidth;_cachedLeft;_rippleRadius=24;startValueIndicatorText="";endValueIndicatorText="";_endThumbTransform;_startThumbTransform;_isRange=!1;_isRtl=!1;_hasViewInitialized=!1;_tickMarkTrackWidth=0;_hasAnimation=!1;_resizeTimer=null;_platform=h(Ii);constructor(){h(Xn).load(dr),this._dir&&(this._dirChangeSubscription=this._dir.change.subscribe(()=>this._onDirChange()),this._isRtl=this._dir.value==="rtl")}_knobRadius=8;_inputPadding;ngAfterViewInit(){this._platform.isBrowser&&this._updateDimensions();let A=this._getInput(pi.END),i=this._getInput(pi.START);this._isRange=!!A&&!!i,this._cdr.detectChanges();let n=this._getThumb(pi.END);this._rippleRadius=n._ripple.radius,this._inputPadding=this._rippleRadius-this._knobRadius,this._isRange?this._initUIRange(A,i):this._initUINonRange(A),this._updateTrackUI(A),this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._observeHostResize(),this._cdr.detectChanges()}_initUINonRange(A){A.initProps(),A.initUI(),this._updateValueIndicatorUI(A),this._hasViewInitialized=!0,A._updateThumbUIByValue()}_initUIRange(A,i){A.initProps(),A.initUI(),i.initProps(),i.initUI(),A._updateMinMax(),i._updateMinMax(),A._updateStaticStyles(),i._updateStaticStyles(),this._updateValueIndicatorUIs(),this._hasViewInitialized=!0,A._updateThumbUIByValue(),i._updateThumbUIByValue()}ngOnDestroy(){this._dirChangeSubscription?.unsubscribe(),this._resizeObserver?.disconnect(),this._resizeObserver=null}_onDirChange(){this._isRtl=this._dir?.value==="rtl",this._isRange?this._onDirChangeRange():this._onDirChangeNonRange(),this._updateTickMarkUI()}_onDirChangeRange(){let A=this._getInput(pi.END),i=this._getInput(pi.START);A._setIsLeftThumb(),i._setIsLeftThumb(),A.translateX=A._calcTranslateXByValue(),i.translateX=i._calcTranslateXByValue(),A._updateStaticStyles(),i._updateStaticStyles(),A._updateWidthInactive(),i._updateWidthInactive(),A._updateThumbUIByValue(),i._updateThumbUIByValue()}_onDirChangeNonRange(){this._getInput(pi.END)._updateThumbUIByValue()}_observeHostResize(){typeof ResizeObserver>"u"||!ResizeObserver||this._ngZone.runOutsideAngular(()=>{this._resizeObserver=new ResizeObserver(()=>{this._isActive()||(this._resizeTimer&&clearTimeout(this._resizeTimer),this._onResize())}),this._resizeObserver.observe(this._elementRef.nativeElement)})}_isActive(){return this._getThumb(pi.START)._isActive||this._getThumb(pi.END)._isActive}_getValue(A=pi.END){let i=this._getInput(A);return i?i.value:this.min}_skipUpdate(){return!!(this._getInput(pi.START)?._skipUIUpdate||this._getInput(pi.END)?._skipUIUpdate)}_updateDimensions(){this._cachedWidth=this._elementRef.nativeElement.offsetWidth,this._cachedLeft=this._elementRef.nativeElement.getBoundingClientRect().left}_setTrackActiveStyles(A){let i=this._trackActive.nativeElement.style;i.left=A.left,i.right=A.right,i.transformOrigin=A.transformOrigin,i.transform=A.transform}_calcTickMarkTransform(A){let i=A*(this._tickMarkTrackWidth/(this._tickMarks.length-1));return`translateX(${this._isRtl?this._cachedWidth-6-i:i}px)`}_onTranslateXChange(A){this._hasViewInitialized&&(this._updateThumbUI(A),this._updateTrackUI(A),this._updateOverlappingThumbUI(A))}_onTranslateXChangeBySideEffect(A,i){this._hasViewInitialized&&(A._updateThumbUIByValue(),i._updateThumbUIByValue())}_onValueChange(A){this._hasViewInitialized&&(this._updateValueIndicatorUI(A),this._updateTickMarkUI(),this._cdr.detectChanges())}_onMinMaxOrStepChange(){this._hasViewInitialized&&(this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._cdr.markForCheck())}_onResize(){if(this._hasViewInitialized){if(this._updateDimensions(),this._isRange){let A=this._getInput(pi.END),i=this._getInput(pi.START);A._updateThumbUIByValue(),i._updateThumbUIByValue(),A._updateStaticStyles(),i._updateStaticStyles(),A._updateMinMax(),i._updateMinMax(),A._updateWidthInactive(),i._updateWidthInactive()}else{let A=this._getInput(pi.END);A&&A._updateThumbUIByValue()}this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._cdr.detectChanges()}}_thumbsOverlap=!1;_areThumbsOverlapping(){let A=this._getInput(pi.START),i=this._getInput(pi.END);return!A||!i?!1:i.translateX-A.translateX<20}_updateOverlappingThumbClassNames(A){let i=A.getSibling(),n=this._getThumb(A.thumbPosition);this._getThumb(i.thumbPosition)._hostElement.classList.remove("mdc-slider__thumb--top"),n._hostElement.classList.toggle("mdc-slider__thumb--top",this._thumbsOverlap)}_updateOverlappingThumbUI(A){!this._isRange||this._skipUpdate()||this._thumbsOverlap!==this._areThumbsOverlapping()&&(this._thumbsOverlap=!this._thumbsOverlap,this._updateOverlappingThumbClassNames(A))}_updateThumbUI(A){if(this._skipUpdate())return;let i=this._getThumb(A.thumbPosition===pi.END?pi.END:pi.START);i._hostElement.style.transform=`translateX(${A.translateX}px)`}_updateValueIndicatorUI(A){if(this._skipUpdate())return;let i=this.displayWith(A.value);if(this._hasViewInitialized?A._valuetext.set(i):A._hostElement.setAttribute("aria-valuetext",i),this.discrete){A.thumbPosition===pi.START?this.startValueIndicatorText=i:this.endValueIndicatorText=i;let n=this._getThumb(A.thumbPosition);i.length<3?n._hostElement.classList.add("mdc-slider__thumb--short-value"):n._hostElement.classList.remove("mdc-slider__thumb--short-value")}}_updateValueIndicatorUIs(){let A=this._getInput(pi.END),i=this._getInput(pi.START);A&&this._updateValueIndicatorUI(A),i&&this._updateValueIndicatorUI(i)}_updateTickMarkTrackUI(){if(!this.showTickMarks||this._skipUpdate())return;let A=this._step&&this._step>0?this._step:1,n=(Math.floor(this.max/A)*A-this.min)/(this.max-this.min);this._tickMarkTrackWidth=(this._cachedWidth-6)*n}_updateTrackUI(A){this._skipUpdate()||(this._isRange?this._updateTrackUIRange(A):this._updateTrackUINonRange(A))}_updateTrackUIRange(A){let i=A.getSibling();if(!i||!this._cachedWidth)return;let n=Math.abs(i.translateX-A.translateX)/this._cachedWidth;A._isLeftThumb&&this._cachedWidth?this._setTrackActiveStyles({left:"auto",right:`${this._cachedWidth-i.translateX}px`,transformOrigin:"right",transform:`scaleX(${n})`}):this._setTrackActiveStyles({left:`${i.translateX}px`,right:"auto",transformOrigin:"left",transform:`scaleX(${n})`})}_updateTrackUINonRange(A){this._isRtl?this._setTrackActiveStyles({left:"auto",right:"0px",transformOrigin:"right",transform:`scaleX(${1-A.fillPercentage})`}):this._setTrackActiveStyles({left:"0px",right:"auto",transformOrigin:"left",transform:`scaleX(${A.fillPercentage})`})}_updateTickMarkUI(){if(!this.showTickMarks||this.step===void 0||this.min===void 0||this.max===void 0)return;let A=this.step>0?this.step:1;this._isRange?this._updateTickMarkUIRange(A):this._updateTickMarkUINonRange(A)}_updateTickMarkUINonRange(A){let i=this._getValue(),n=Math.max(Math.round((i-this.min)/A),0)+1,o=Math.max(Math.round((this.max-i)/A),0)-1;this._isRtl?n++:o++,this._tickMarks=Array(n).fill(Zh.ACTIVE).concat(Array(o).fill(Zh.INACTIVE))}_updateTickMarkUIRange(A){let i=this._getValue(),n=this._getValue(pi.START),o=Math.max(Math.round((n-this.min)/A),0),a=Math.max(Math.round((i-n)/A)+1,0),r=Math.max(Math.round((this.max-i)/A),0);this._tickMarks=Array(o).fill(Zh.INACTIVE).concat(Array(a).fill(Zh.ACTIVE),Array(r).fill(Zh.INACTIVE))}_getInput(A){if(A===pi.END&&this._input)return this._input;if(this._inputs?.length)return A===pi.START?this._inputs.first:this._inputs.last}_getThumb(A){return A===pi.END?this._thumbs?.last:this._thumbs?.first}_setTransition(A){this._hasAnimation=!this._platform.IOS&&A&&!this._noopAnimations,this._elementRef.nativeElement.classList.toggle("mat-mdc-slider-with-animation",this._hasAnimation)}_isCursorOnSliderThumb(A,i){let n=i.width/2,o=i.x+n,a=i.y+n,r=A.clientX-o,s=A.clientY-a;return Math.pow(r,2)+Math.pow(s,2)bK),multi:!0};var bK=(()=>{class t{_ngZone=h(Oe);_elementRef=h(ge);_cdr=h(Dt);_slider=h(vK);_platform=h(Ii);_listenerCleanups;get value(){return en(this._hostElement.value,0)}set value(A){A===null&&(A=this._getDefaultValue()),A=isNaN(A)?0:A;let i=A+"";if(!this._hasSetInitialValue){this._initialValue=i;return}this._isActive||this._setValue(i)}_setValue(A){this._hostElement.value=A,this._updateThumbUIByValue(),this._slider._onValueChange(this),this._cdr.detectChanges(),this._slider._cdr.markForCheck()}valueChange=new $A;dragStart=new $A;dragEnd=new $A;get translateX(){return this._slider.min>=this._slider.max?(this._translateX=this._tickMarkOffset,this._translateX):(this._translateX===void 0&&(this._translateX=this._calcTranslateXByValue()),this._translateX)}set translateX(A){this._translateX=A}_translateX;thumbPosition=pi.END;get min(){return en(this._hostElement.min,0)}set min(A){this._hostElement.min=A+"",this._cdr.detectChanges()}get max(){return en(this._hostElement.max,0)}set max(A){this._hostElement.max=A+"",this._cdr.detectChanges()}get step(){return en(this._hostElement.step,0)}set step(A){this._hostElement.step=A+"",this._cdr.detectChanges()}get disabled(){return he(this._hostElement.disabled)}set disabled(A){this._hostElement.disabled=A,this._cdr.detectChanges(),this._slider.disabled!==this.disabled&&(this._slider.disabled=this.disabled)}get percentage(){return this._slider.min>=this._slider.max?this._slider._isRtl?1:0:(this.value-this._slider.min)/(this._slider.max-this._slider.min)}get fillPercentage(){return this._slider._cachedWidth?this._translateX===0?0:this.translateX/this._slider._cachedWidth:this._slider._isRtl?1:0}_hostElement=this._elementRef.nativeElement;_valuetext=jA("");_knobRadius=8;_tickMarkOffset=3;_isActive=!1;_isFocused=!1;_setIsFocused(A){this._isFocused=A}_hasSetInitialValue=!1;_initialValue;_formControl;_destroyed=new XA;_skipUIUpdate=!1;_onChangeFn;_onTouchedFn=()=>{};_isControlInitialized=!1;constructor(){let A=h(_i);this._ngZone.runOutsideAngular(()=>{this._listenerCleanups=[A.listen(this._hostElement,"pointerdown",this._onPointerDown.bind(this)),A.listen(this._hostElement,"pointermove",this._onPointerMove.bind(this)),A.listen(this._hostElement,"pointerup",this._onPointerUp.bind(this))]})}ngOnDestroy(){this._listenerCleanups.forEach(A=>A()),this._destroyed.next(),this._destroyed.complete(),this.dragStart.complete(),this.dragEnd.complete()}initProps(){this._updateWidthInactive(),this.disabled!==this._slider.disabled&&(this._slider.disabled=!0),this.step=this._slider.step,this.min=this._slider.min,this.max=this._slider.max,this._initValue()}initUI(){this._updateThumbUIByValue()}_initValue(){this._hasSetInitialValue=!0,this._initialValue===void 0?this.value=this._getDefaultValue():(this._hostElement.value=this._initialValue,this._updateThumbUIByValue(),this._slider._onValueChange(this),this._cdr.detectChanges())}_getDefaultValue(){return this.min}_onBlur(){this._setIsFocused(!1),this._onTouchedFn()}_onFocus(){this._slider._setTransition(!1),this._slider._updateTrackUI(this),this._setIsFocused(!0)}_onChange(){this.valueChange.emit(this.value),this._isActive&&this._updateThumbUIByValue({withAnimation:!0})}_onInput(){this._onChangeFn?.(this.value),(this._slider.step||!this._isActive)&&this._updateThumbUIByValue({withAnimation:!0}),this._slider._onValueChange(this)}_onNgControlValueChange(){(!this._isActive||!this._isFocused)&&(this._slider._onValueChange(this),this._updateThumbUIByValue()),this._slider.disabled=this._formControl.disabled}_onPointerDown(A){if(!(this.disabled||A.button!==0)){if(this._platform.IOS){let i=this._slider._isCursorOnSliderThumb(A,this._slider._getThumb(this.thumbPosition)._hostElement.getBoundingClientRect());this._isActive=i,this._updateWidthActive(),this._slider._updateDimensions();return}this._isActive=!0,this._setIsFocused(!0),this._updateWidthActive(),this._slider._updateDimensions(),this._slider.step||this._updateThumbUIByPointerEvent(A,{withAnimation:!0}),this.disabled||(this._handleValueCorrection(A),this.dragStart.emit({source:this,parent:this._slider,value:this.value}))}}_handleValueCorrection(A){this._skipUIUpdate=!0,setTimeout(()=>{this._skipUIUpdate=!1,this._fixValue(A)},0)}_fixValue(A){let i=A.clientX-this._slider._cachedLeft,n=this._slider._cachedWidth,o=this._slider.step===0?1:this._slider.step,a=Math.floor((this._slider.max-this._slider.min)/o),r=this._slider._isRtl?1-i/n:i/n,g=Math.round(r*a)/a*(this._slider.max-this._slider.min)+this._slider.min,l=Math.round(g/o)*o,C=this.value;if(l===C){this._slider._onValueChange(this),this._slider.step>0?this._updateThumbUIByValue():this._updateThumbUIByPointerEvent(A,{withAnimation:this._slider._hasAnimation});return}this.value=l,this.valueChange.emit(this.value),this._onChangeFn?.(this.value),this._slider._onValueChange(this),this._slider.step>0?this._updateThumbUIByValue():this._updateThumbUIByPointerEvent(A,{withAnimation:this._slider._hasAnimation})}_onPointerMove(A){!this._slider.step&&this._isActive&&this._updateThumbUIByPointerEvent(A)}_onPointerUp(){this._isActive&&(this._isActive=!1,this._platform.SAFARI&&this._setIsFocused(!1),this.dragEnd.emit({source:this,parent:this._slider,value:this.value}),setTimeout(()=>this._updateWidthInactive(),this._platform.IOS?10:0))}_clamp(A){let i=this._tickMarkOffset,n=this._slider._cachedWidth-this._tickMarkOffset;return Math.max(Math.min(A,n),i)}_calcTranslateXByValue(){return this._slider._isRtl?(1-this.percentage)*(this._slider._cachedWidth-this._tickMarkOffset*2)+this._tickMarkOffset:this.percentage*(this._slider._cachedWidth-this._tickMarkOffset*2)+this._tickMarkOffset}_calcTranslateXByPointerEvent(A){return A.clientX-this._slider._cachedLeft}_updateWidthActive(){}_updateWidthInactive(){this._hostElement.style.padding=`0 ${this._slider._inputPadding}px`,this._hostElement.style.width=`calc(100% + ${this._slider._inputPadding-this._tickMarkOffset*2}px)`,this._hostElement.style.left=`-${this._slider._rippleRadius-this._tickMarkOffset}px`}_updateThumbUIByValue(A){this.translateX=this._clamp(this._calcTranslateXByValue()),this._updateThumbUI(A)}_updateThumbUIByPointerEvent(A,i){this.translateX=this._clamp(this._calcTranslateXByPointerEvent(A)),this._updateThumbUI(i)}_updateThumbUI(A){this._slider._setTransition(!!A?.withAnimation),this._slider._onTranslateXChange(this)}writeValue(A){(this._isControlInitialized||A!==null)&&(this.value=A)}registerOnChange(A){this._onChangeFn=A,this._isControlInitialized=!0}registerOnTouched(A){this._onTouchedFn=A}setDisabledState(A){this.disabled=A}focus(){this._hostElement.focus()}blur(){this._hostElement.blur()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["input","matSliderThumb",""]],hostAttrs:["type","range",1,"mdc-slider__input"],hostVars:1,hostBindings:function(i,n){i&1&&tA("change",function(){return n._onChange()})("input",function(){return n._onInput()})("blur",function(){return n._onBlur()})("focus",function(){return n._onFocus()}),i&2&&ie("aria-valuetext",n._valuetext())},inputs:{value:[2,"value","value",en]},outputs:{valueChange:"valueChange",dragStart:"dragStart",dragEnd:"dragEnd"},exportAs:["matSliderThumb"],features:[dt([kHA,{provide:BgA,useExisting:t}])]})}return t})();var O7=class t{constructor(e,A,i){this.dialogRef=e;this.fb=A;this.data=i;this.evalMetrics=this.data.evalMetrics,this.evalForm=this.fb.group({tool_trajectory_avg_score_threshold:[this.getEvalMetricThresholdFromData("tool_trajectory_avg_score"),[Ag.required,Ag.min(0),Ag.max(1)]],response_match_score_threshold:[this.getEvalMetricThresholdFromData("response_match_score"),[Ag.required,Ag.min(0),Ag.max(1)]]})}evalForm;evalMetrics=[];getEvalMetricThresholdFromData(e){return this.evalMetrics.find(A=>A.metricName===e)?.threshold??0}onStart(){if(this.evalForm.valid){let{tool_trajectory_avg_score_threshold:e,response_match_score_threshold:A}=this.evalForm.value;for(let i of this.evalMetrics)i.metricName==="tool_trajectory_avg_score"?i.threshold=e:i.metricName==="response_match_score"&&(i.threshold=A);this.dialogRef.close(this.evalMetrics)}}onCancel(){this.dialogRef.close(null)}static \u0275fac=function(A){return new(A||t)(at(bo),at(mJ),at(Ca))};static \u0275cmp=kA({type:t,selectors:[["app-run-eval-config-dialog"]],decls:26,vars:3,consts:[[1,"dialog-container"],["mat-dialog-title","",1,"dialog-title"],[1,"eval-form",3,"formGroup"],[1,"metric-row"],[1,"metric-name"],[1,"flex-1","pl-4"],["min","0","max","1","step","0.1","thumbLabel","",1,"threshold-slider"],["matSliderThumb","","formControlName","tool_trajectory_avg_score_threshold"],[1,"threshold-value"],["matSliderThumb","","formControlName","response_match_score_threshold"],["align","end",1,"dialog-actions"],["mat-button","",1,"cancel-button",3,"click"],["mat-button","",1,"save-button",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"h2",1),K(2,"EVALUATION METRIC"),w(),m(3,"mat-dialog-content")(4,"form",2)(5,"div",3)(6,"div",4),K(7,"Tool trajectory avg score: "),w(),m(8,"div",5)(9,"mat-slider",6),GA(10,"input",7),w(),m(11,"span",8),K(12),w()()(),m(13,"div",3)(14,"div",4),K(15,"Response match score: "),w(),m(16,"div",5)(17,"mat-slider",6),GA(18,"input",9),w(),m(19,"span",8),K(20),w()()()()(),m(21,"mat-dialog-actions",10)(22,"button",11),tA("click",function(){return i.onCancel()}),K(23,"Cancel"),w(),m(24,"button",12),tA("click",function(){return i.onStart()}),K(25,"Start"),w()()()),A&2&&(p(4),$("formGroup",i.evalForm),p(8),Se(" ",i.evalForm.controls.tool_trajectory_avg_score_threshold.value," "),p(8),Se(" ",i.evalForm.controls.response_match_score_threshold.value," "))},dependencies:[Da,rr,Nn,uJ,uo,fo,CJ,r0,v2,s9,QgA,bK,Ua,fn],styles:["build.dialog-container[_ngcontent-%COMP%]{border-radius:12px;padding:18px;width:500px;box-shadow:0 8px 16px var(--run-eval-config-dialog-container-box-shadow-color)}.threshold-slider[_ngcontent-%COMP%]{--mdc-slider-active-track-color: var(--run-eval-config-dialog-threshold-slider-active-track-color);--mdc-slider-inactive-track-color: var(--run-eval-config-dialog-threshold-slider-inactive-track-color);--mdc-slider-handle-color: var(--run-eval-config-dialog-threshold-slider-handle-color);--mdc-slider-ripple-color: var(--run-eval-config-dialog-threshold-slider-ripple-color);width:100px}.metric-row[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center}.metric-name[_ngcontent-%COMP%]{width:250px}.threshold-value[_ngcontent-%COMP%]{margin-left:20px}.mdc-slider__thumb--with-indicator[_ngcontent-%COMP%]{background-color:var(--mdc-slider-handle-color, var(--run-eval-config-dialog-mdc-slider-thumb-background-color));border:none!important;box-shadow:none!important}h2[mat-dialog-title][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}mat-dialog-content[_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}button[mat-button][_ngcontent-%COMP%]{color:var(--mdc-dialog-supporting-text-color)!important}"]})};function SHA(t,e){if(t&1){let A=JA();m(0,"div",1)(1,"div"),K(2),w(),m(3,"mat-icon",2),tA("click",function(){Z(A);let n=v();return X(n.openNewEvalSetDialog())}),K(4,"add"),w()()}if(t&2){let A=v();p(2),qA(A.i18n.allEvalSetsHeader),p(),$("matTooltip",A.i18n.createNewEvalSetTooltip)}}function xHA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",3)(2,"div",4),K(3),w(),m(4,"div",5),K(5),w(),m(6,"div",6),tA("click",function(){Z(A);let n=v();return X(n.openNewEvalSetDialog())}),K(7),w()()()}if(t&2){let A=v();p(3),Se(" ",A.i18n.createNewEvalSetTitle," "),p(2),Se(" ",A.i18n.evalSetDescription," "),p(2),Se(" ",A.i18n.createEvalSetButton," ")}}function RHA(t,e){if(t&1){let A=JA();m(0,"div",8),tA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.selectEvalSet(n))}),m(1,"div",9)(2,"span",10),K(3,"folder"),w(),m(4,"div",11),K(5),w()(),m(6,"div")(7,"mat-icon",12),K(8,"chevron_right"),w()()()}if(t&2){let A=e.$implicit;p(5),qA(A)}}function NHA(t,e){if(t&1&&(m(0,"div"),Ut(1,RHA,9,1,"div",7,Li),w()),t&2){let A=v();p(),Jt(A.evalsets)}}function FHA(t,e){if(t&1){let A=JA();m(0,"th",29)(1,"mat-checkbox",30),tA("change",function(n){Z(A);let o=v(4);return X(n?o.toggleAllRows():null)}),w()()}if(t&2){let A=v(4);p(),$("checked",A.selection.hasValue()&&A.isAllSelected())("indeterminate",A.selection.hasValue()&&!A.isAllSelected())}}function _HA(t,e){if(t&1){let A=JA();m(0,"td",31)(1,"mat-checkbox",32),tA("click",function(n){return Z(A),X(n.stopPropagation())})("change",function(n){let o=Z(A).$implicit,a=v(4);return X(n?a.selection.toggle(o):null)}),w()()}if(t&2){let A=e.$implicit,i=v(4);p(),$("checked",i.selection.isSelected(A))}}function LHA(t,e){if(t&1&&(m(0,"th",29),K(1),w()),t&2){let A=v(4);p(),Se(" ",A.i18n.caseIdHeader," ")}}function GHA(t,e){if(t&1){let A=JA();m(0,"td",33),tA("click",function(){let n=Z(A).$implicit,o=v(4);return X(o.getEvalCase(n))}),K(1),w()}if(t&2){let A,i=e.$implicit,n=v(4);ne("selected-eval-case",i===((A=n.selectedEvalCase())==null?null:A.evalId)),p(),Se(" ",i," ")}}function KHA(t,e){if(t&1&&(m(0,"th",29),K(1),w()),t&2){let A=v(4);p(),Se(" ",A.i18n.resultHeader," ")}}function UHA(t,e){if(t&1){let A=JA();m(0,"button",35),tA("click",function(){Z(A);let n=v().$implicit,o=v(4);return X(o.getSession(n))}),m(1,"span",36),K(2),w(),m(3,"div",37),K(4),w()()}if(t&2){let A=v().$implicit,i=v(4);$("ngClass",i.getEvalResultForCase(A)==1?"result-btn pass":"result-btn fail")("matTooltip",i.i18n.viewEvalRunResultTooltip),p(2),Se(" ",i.getEvalResultForCase(A)==1?"check":"close"," "),p(2),Se("",i.getEvalResultForCase(A)==1?i.i18n.passStatus:i.i18n.failStatus," ")}}function JHA(t,e){if(t&1&&(m(0,"td",31),V(1,UHA,5,4,"button",34),w()),t&2){let A=e.$implicit,i=v(4);p(),W(i.getEvalResultForCase(A)?1:-1)}}function YHA(t,e){t&1&&GA(0,"tr",38)}function THA(t,e){t&1&&GA(0,"tr",39)}function HHA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",16)(2,"button",17),tA("click",function(){Z(A);let n=v(3);return X(n.openEvalConfigDialog())}),K(3),w(),m(4,"mat-icon",18),tA("click",function(){Z(A);let n=v(3);return X(n.toggleEvalHistoryButton())}),K(5,"history"),w()(),m(6,"div",19)(7,"table",20),js(8,21),pt(9,FHA,2,2,"th",22)(10,_HA,2,1,"td",23),qs(),js(11,24),pt(12,LHA,2,1,"th",22)(13,GHA,2,3,"td",25),qs(),js(14,26),pt(15,KHA,2,1,"th",22)(16,JHA,2,1,"td",23),qs(),pt(17,YHA,1,0,"tr",27)(18,THA,1,0,"tr",28),w()()()}if(t&2){let A=v(3);p(3),qA(A.i18n.runEvaluationButton),p(),$("matTooltip",A.i18n.viewEvalRunHistoryTooltip),p(3),$("dataSource",A.dataSource),p(10),$("matHeaderRowDef",A.displayedColumns),p(),$("matRowDefColumns",A.displayedColumns)}}function zHA(t,e){if(t&1&&(m(0,"div")(1,"span",50),K(2,"|"),w(),m(3,"span",51),K(4),w()()),t&2){let A=v().$implicit,i=v(4);p(4),n0("",i.getFailCountForCurrentResult(A.evaluationResults.evaluationResults)," ",i.i18n.failedSuffix)}}function OHA(t,e){if(t&1&&(m(0,"span",52),K(1),w()),t&2){let A=e.$implicit;p(),n0(" ",A.metricName,": ",A.threshold," ")}}function PHA(t,e){if(t&1&&(m(0,"div",46),Ut(1,OHA,2,2,"span",52,Li),w()),t&2){let A=v().$implicit,i=v(4);p(),Jt(i.getEvalMetrics(A))}}function jHA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",53)(2,"span"),K(3),w(),m(4,"button",54),tA("click",function(){let n=Z(A).$implicit,o=v(6);return X(o.getHistorySession(n))}),m(5,"span",36),K(6),w(),m(7,"div",37),K(8),w()()()()}if(t&2){let A=e.$implicit,i=v(6);p(3),Se(" ",A.evalId," "),p(),$("ngClass",A.finalEvalStatus==1?"result-btn pass":"result-btn fail"),p(2),Se(" ",A.finalEvalStatus==1?"check":"close"," "),p(2),Se("",A.finalEvalStatus==1?i.i18n.passStatusCaps:i.i18n.failStatusCaps," ")}}function qHA(t,e){if(t&1&&(m(0,"div",49),Ut(1,jHA,9,4,"div",null,Li),w()),t&2){let A=v().$implicit,i=v(4);p(),Jt(i.generateHistoryEvaluationDatasource(A.timestamp))}}function VHA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",40)(2,"div",41)(3,"div",42)(4,"div",43),K(5),w(),m(6,"div",44)(7,"span",45),K(8),w(),V(9,zHA,5,2,"div"),w(),V(10,PHA,3,0,"div",46),w(),m(11,"div",47)(12,"mat-icon",48),tA("click",function(){let n=Z(A).$implicit,o=v(4);return X(o.toggleHistoryStatusCard(n.timestamp))}),K(13),w()()(),V(14,qHA,3,0,"div",49),w()()}if(t&2){let A=e.$implicit,i=v(4);p(5),qA(i.formatTimestamp(A.timestamp)),p(3),n0("",i.getPassCountForCurrentResult(A.evaluationResults.evaluationResults)," ",i.i18n.passedSuffix),p(),W(i.getFailCountForCurrentResult(A.evaluationResults.evaluationResults)>0?9:-1),p(),W(i.getEvalMetrics(A)?10:-1),p(3),qA(i.getEvaluationStatusCardActionButtonIcon(A.timestamp)),p(),W(i.isEvaluationStatusCardToggled(A.timestamp)?14:-1)}}function WHA(t,e){if(t&1&&(m(0,"div"),Ut(1,VHA,15,7,"div",null,Li),w()),t&2){let A=v(3);p(),Jt(A.getEvalHistoryOfCurrentSetSorted())}}function ZHA(t,e){if(t&1&&(m(0,"div"),V(1,HHA,19,5,"div"),V(2,WHA,3,0,"div"),w()),t&2){let A=v(2);p(),W(A.showEvalHistory()?-1:1),p(),W(A.showEvalHistory()?2:-1)}}function XHA(t,e){if(t&1){let A=JA();m(0,"button",55),tA("click",function(){Z(A);let n=v(2);return X(n.openNewEvalCaseDialog())}),m(1,"div",56)(2,"mat-icon"),K(3,"add"),w(),m(4,"div",57),K(5),w()()()}if(t&2){let A=v(2);p(5),n0(" ",A.i18n.addSessionToSetButtonPrefix," ",A.selectedEvalSet," ")}}function $HA(t,e){t&1&&(m(0,"div"),GA(1,"mat-spinner",58),w()),t&2&&(p(),$("diameter",28)("strokeWidth",3))}function AzA(t,e){if(t&1){let A=JA();m(0,"div")(1,"div",9)(2,"mat-icon",13),tA("click",function(){Z(A);let n=v();return X(n.clearSelectedEvalSet())}),K(3,"chevron_left"),w(),m(4,"div",14),tA("click",function(){Z(A);let n=v();return X(n.clearSelectedEvalSet())}),K(5),w()(),V(6,ZHA,3,2,"div"),V(7,XHA,6,2,"button",15),V(8,$HA,2,2,"div"),w()}if(t&2){let A=v();p(5),Se(" ",A.selectedEvalSet," "),p(),W(A.evalCases.length>0&&!A.evalRunning()?6:-1),p(),W(!A.evalRunning()&&!A.showEvalHistory()?7:-1),p(),W(A.evalRunning()?8:-1)}}var P7=new yA("EVAL_TAB_COMPONENT"),$c=class t{checkboxes=xU(bE);appName=rt("");userId=rt("");sessionId=rt("");sessionSelected=jo();shouldShowTab=jo();evalNotInstalledMsg=jo();evalCaseSelected=jo();evalSetIdSelected=jo();shouldReturnToSession=jo();evalCasesSubject=new Ht([]);changeDetectorRef=h(Dt);flagService=h(vr);i18n=h(dgA);displayedColumns=["select","evalId","finalEvalStatus"];evalsets=[];selectedEvalSet="";evalCases=[];selectedEvalCase=jA(null);deletedEvalCaseIndex=-1;dataSource=new Hm(this.evalCases);selection=new V1(!0,[]);showEvalHistory=jA(!1);evalRunning=jA(!1);evalMetrics=CgA;currentEvalResultBySet=new Map;dialog=h(Gs);appEvaluationResults={};evalService=h(h0);sessionService=h(El);constructor(){this.evalCasesSubject.subscribe(e=>{!this.selectedEvalCase()&&this.deletedEvalCaseIndex>=0&&e.length>0?(this.selectNewEvalCase(e),this.deletedEvalCaseIndex=-1):e.length===0&&this.shouldReturnToSession.emit(!0)})}ngOnChanges(e){e.appName&&(this.selectedEvalSet="",this.evalCases=[],this.getEvalSet(),this.getEvaluationResult())}ngOnInit(){}selectNewEvalCase(e){let A=this.deletedEvalCaseIndex;this.deletedEvalCaseIndex===e.length&&(A=0),this.getEvalCase(e[A])}getEvalSet(){this.appName()!==""&&this.evalService.getEvalSets(this.appName()).pipe(ta(e=>e.status===404&&e.statusText==="Not Found"?(this.shouldShowTab.emit(!1),se(null)):se([]))).subscribe(e=>{e!==null&&(this.shouldShowTab.emit(!0),this.evalsets=e,this.changeDetectorRef.detectChanges())})}openNewEvalSetDialog(){this.dialog.open(z7,{width:"600px",data:{appName:this.appName()}}).afterClosed().subscribe(A=>{A&&(this.getEvalSet(),this.changeDetectorRef.detectChanges())})}openNewEvalCaseDialog(){this.dialog.open(H7,{width:"600px",data:{appName:this.appName(),userId:this.userId(),sessionId:this.sessionId(),evalSetId:this.selectedEvalSet}}).afterClosed().subscribe(A=>{A&&(this.listEvalCases(),this.changeDetectorRef.detectChanges())})}listEvalCases(){this.evalCases=[],this.evalService.listEvalCases(this.appName(),this.selectedEvalSet).subscribe(e=>{this.evalCases=e,this.dataSource=new Hm(this.evalCases),this.evalCasesSubject.next(this.evalCases),this.changeDetectorRef.detectChanges()})}runEval(){if(this.evalRunning.set(!0),this.selection.selected.length==0){alert("No case selected!"),this.evalRunning.set(!1);return}this.evalService.runEval(this.appName(),this.selectedEvalSet,this.selection.selected,this.evalMetrics).pipe(ta(e=>(e.error?.detail?.includes("not installed")&&this.evalNotInstalledMsg.emit(e.error.detail),se([])))).subscribe(e=>{this.evalRunning.set(!1),this.currentEvalResultBySet.set(this.selectedEvalSet,e),this.getEvaluationResult(),this.changeDetectorRef.detectChanges()})}selectEvalSet(e){this.selectedEvalSet=e,this.listEvalCases()}clearSelectedEvalSet(){if(this.showEvalHistory()){this.toggleEvalHistoryButton();return}this.selectedEvalSet=""}isAllSelected(){let e=this.selection.selected.length,A=this.dataSource.data.length;return e===A}toggleAllRows(){if(this.isAllSelected()){this.selection.clear();return}this.selection.select(...this.dataSource.data)}getEvalResultForCase(e){let A=this.currentEvalResultBySet.get(this.selectedEvalSet)?.filter(i=>i.evalId==e);if(!(!A||A.length==0))return A[0].finalEvalStatus}formatToolUses(e){let A=[];for(let i of e)A.push({name:i.name,args:i.args});return A}addEvalCaseResultToEvents(e,A){let i=A.evalMetricResultPerInvocation,n=-1;if(i)for(let o=0;on.evalId==e)[0],i=A.sessionId;this.sessionService.getSession(this.userId(),this.appName(),i).subscribe(n=>{this.addEvalCaseResultToEvents(n,A);let o=this.fromApiResultToSession(n);this.sessionSelected.emit(o)})}toggleEvalHistoryButton(){this.showEvalHistory.set(!this.showEvalHistory())}getEvalHistoryOfCurrentSet(){return this.appEvaluationResults[this.appName()][this.selectedEvalSet]}getEvalHistoryOfCurrentSetSorted(){let e=this.getEvalHistoryOfCurrentSet();return Object.keys(e).sort((n,o)=>o.localeCompare(n)).map(n=>({timestamp:n,evaluationResults:e[n]}))}getPassCountForCurrentResult(e){return e.filter(A=>A.finalEvalStatus==1).length}getFailCountForCurrentResult(e){return e.filter(A=>A.finalEvalStatus==2).length}formatTimestamp(e){let A=Number(e);if(isNaN(A))return"Invalid timestamp provided";let i=new Date(A*1e3);if(isNaN(i.getTime()))return"Invalid date created from timestamp";let n={month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0};return new Intl.DateTimeFormat("en-US",n).format(i)}getEvaluationStatusCardActionButtonIcon(e){return this.getEvalHistoryOfCurrentSet()[e].isToggled?"keyboard_arrow_up":"keyboard_arrow_down"}toggleHistoryStatusCard(e){this.getEvalHistoryOfCurrentSet()[e].isToggled=!this.getEvalHistoryOfCurrentSet()[e].isToggled}isEvaluationStatusCardToggled(e){return this.getEvalHistoryOfCurrentSet()[e].isToggled}generateHistoryEvaluationDatasource(e){return this.getEvalHistoryOfCurrentSet()[e].evaluationResults}getHistorySession(e){this.addEvalCaseResultToEvents(e.sessionDetails,e);let A=this.fromApiResultToSession(e.sessionDetails);this.sessionSelected.emit(A)}getEvalCase(e){this.evalService.getEvalCase(this.appName(),this.selectedEvalSet,e).subscribe(A=>{this.selectedEvalCase.set(A),this.evalCaseSelected.emit(A),this.evalSetIdSelected.emit(this.selectedEvalSet)})}resetEvalCase(){this.selectedEvalCase.set(null)}resetEvalResults(){this.currentEvalResultBySet.clear()}deleteEvalCase(e){this.evalService.deleteEvalCase(this.appName(),this.selectedEvalSet,e).subscribe(A=>{this.deletedEvalCaseIndex=this.evalCases.indexOf(e),this.selectedEvalCase.set(null),this.listEvalCases(),this.changeDetectorRef.detectChanges()})}getEvaluationResult(){this.evalService.listEvalResults(this.appName()).pipe(ta(e=>e.status===404&&e.statusText==="Not Found"?(this.shouldShowTab.emit(!1),se(null)):se([]))).subscribe(e=>{for(let A of e)this.evalService.getEvalResult(this.appName(),A).subscribe(i=>{this.appEvaluationResults[this.appName()]||(this.appEvaluationResults[this.appName()]={}),this.appEvaluationResults[this.appName()][i.evalSetId]||(this.appEvaluationResults[this.appName()][i.evalSetId]={});let n=i.creationTimestamp;this.appEvaluationResults[this.appName()][i.evalSetId][n]||(this.appEvaluationResults[this.appName()][i.evalSetId][n]={isToggled:!1,evaluationResults:[]});let o={isToggled:!1,evaluationResults:i.evalCaseResults.map(a=>({setId:a.id,evalId:a.evalId,finalEvalStatus:a.finalEvalStatus,evalMetricResults:a.evalMetricResults,evalMetricResultPerInvocation:a.evalMetricResultPerInvocation,sessionId:a.sessionId,sessionDetails:a.sessionDetails,overallEvalMetricResults:a.overallEvalMetricResults??[]}))};this.appEvaluationResults[this.appName()][i.evalSetId][n]=o,this.changeDetectorRef.detectChanges()})})}openEvalConfigDialog(){if(this.selection.selected.length==0){alert("No case selected!");return}this.dialog.open(O7,{maxWidth:"90vw",maxHeight:"90vh",data:{evalMetrics:this.evalMetrics}}).afterClosed().subscribe(A=>{A&&(this.evalMetrics=A,this.runEval())})}getEvalMetrics(e){if(!e||!e.evaluationResults||!e.evaluationResults.evaluationResults)return this.evalMetrics;let A=e.evaluationResults.evaluationResults;return A.length===0?this.evalMetrics:typeof A[0].overallEvalMetricResults>"u"||!A[0].overallEvalMetricResults||A[0].overallEvalMetricResults.length===0?this.evalMetrics:A[0].overallEvalMetricResults.map(n=>({metricName:n.metricName,threshold:n.threshold}))}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-eval-tab"]],viewQuery:function(A,i){A&1&&rs(i.checkboxes,bE,5),A&2&&Dr()},inputs:{appName:[1,"appName"],userId:[1,"userId"],sessionId:[1,"sessionId"]},outputs:{sessionSelected:"sessionSelected",shouldShowTab:"shouldShowTab",evalNotInstalledMsg:"evalNotInstalledMsg",evalCaseSelected:"evalCaseSelected",evalSetIdSelected:"evalSetIdSelected",shouldReturnToSession:"shouldReturnToSession"},features:[ti],decls:5,vars:4,consts:[[1,"eval-container"],[1,"eval-set-actions"],[2,"cursor","pointer",3,"click","matTooltip"],[1,"empty-eval-info"],[1,"info-title"],[1,"info-detail"],[1,"info-create",3,"click"],[1,"eval-set-row"],[1,"eval-set-row",3,"click"],[2,"display","flex"],[1,"material-symbols-outlined",2,"margin-right","10px","padding-top","16px"],[2,"font-family","Roboto","font-size","14px","padding","16px","padding-top","20px"],[2,"padding-top","20px","color","#9AA0A6"],[2,"color","white","cursor","pointer",3,"click"],[2,"color","#9AA0A6","padding-top","2px","cursor","pointer",3,"click"],[1,"save-session-btn"],[1,"evaluation-tab-header"],[1,"run-eval-btn",3,"click"],[1,"evaluation-history-icon",3,"click","matTooltip"],[1,"mat-table-container",2,"margin-top","16px"],["mat-table","",3,"dataSource"],["matColumnDef","select"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","evalId"],["mat-cell","","class","eval-case-id",3,"selected-eval-case","click",4,"matCellDef"],["matColumnDef","finalEvalStatus"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],[3,"change","checked","indeterminate"],["mat-cell",""],[3,"click","change","checked"],["mat-cell","",1,"eval-case-id",3,"click"],[3,"ngClass","matTooltip"],[3,"click","ngClass","matTooltip"],[1,"material-symbols-outlined"],[2,"padding-top","4px"],["mat-header-row",""],["mat-row",""],[1,"status-card"],[1,"status-card__overview"],[1,"status-card__info"],[1,"status-card__timestamp"],[1,"status-card__summary"],[1,"status-card__passed"],[1,"status-card__metrics"],[1,"status-card__action"],[3,"click"],[1,"status-card__history-cases"],[1,"status-card__separator"],[1,"status-card__failed"],[1,"status-card__metric"],[1,"status-card__history-case"],[3,"click","ngClass"],[1,"save-session-btn",3,"click"],[1,"save-session-btn-detail"],[1,"save-session-btn-text"],[1,"eval-spinner",3,"diameter","strokeWidth"]],template:function(A,i){A&1&&(m(0,"div",0),V(1,SHA,5,2,"div",1),V(2,xHA,8,3,"div"),V(3,NHA,3,0,"div"),V(4,AzA,9,4,"div"),w()),A&2&&(p(),W(i.selectedEvalSet==""?1:-1),p(),W(i.evalsets.length==0?2:-1),p(),W(i.evalsets.length>0&&i.selectedEvalSet==""?3:-1),p(),W(i.selectedEvalSet!=""?4:-1))},dependencies:[Fn,xa,tgA,ogA,ngA,agA,bE,igA,rgA,gs,sgA,lgA,ggA,cgA,B1],styles:[".eval-container[_ngcontent-%COMP%]{margin-top:20px;padding-left:25px;padding-right:25px}.eval-case-id[_ngcontent-%COMP%]{cursor:pointer}.eval-set-actions[_ngcontent-%COMP%]{display:flex;justify-content:space-between;color:var(--eval-tab-eval-set-actions-color);font-style:normal;font-weight:700;font-size:14px}.empty-eval-info[_ngcontent-%COMP%]{margin-top:12px;background-color:var(--eval-tab-empty-eval-info-background-color);border-radius:8px;box-shadow:0 2px 6px 2px var(--eval-tab-empty-eval-info-box-shadow-color1),0 1px 2px 0 var(--eval-tab-empty-eval-info-box-shadow-color2)}.info-title[_ngcontent-%COMP%]{color:var(--eval-tab-info-title-color);font-family:Roboto;font-size:14px;font-weight:500;padding-top:13px;padding-right:16px;padding-left:16px}.info-detail[_ngcontent-%COMP%]{color:var(--eval-tab-info-detail-color);font-family:Roboto;font-size:14px;font-weight:400;padding-top:13px;padding-right:16px;padding-left:16px;letter-spacing:.2px}.info-create[_ngcontent-%COMP%]{color:var(--eval-tab-info-create-color);font-size:14px;font-style:normal;font-weight:500;padding-right:16px;padding-left:16px;margin-top:19px;padding-bottom:16px;cursor:pointer}.eval-set-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;cursor:pointer}.selected-eval-case[_ngcontent-%COMP%]{font-weight:900;color:var(--eval-tab-selected-eval-case-color)}.save-session-btn[_ngcontent-%COMP%]{width:100%;background:linear-gradient(0deg,var(--eval-tab-save-session-btn-background-color1) 0%,var(--eval-tab-save-session-btn-background-color1) 100%),var(--eval-tab-save-session-btn-background-color2);border:none;border-radius:4px;margin-top:12px;cursor:pointer}.save-session-btn-detail[_ngcontent-%COMP%]{display:flex;padding:8px 16px 8px 12px;justify-content:center}.save-session-btn-text[_ngcontent-%COMP%]{padding-top:2px;color:var(--eval-tab-save-session-btn-text-color);font-family:Google Sans;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.run-eval-btn[_ngcontent-%COMP%]{border-radius:4px;border:1px solid var(--eval-tab-run-eval-btn-border-color);background-color:transparent;padding:8px 24px;margin-top:16px;color:var(--eval-tab-run-eval-btn-color);cursor:pointer}.run-eval-btn[_ngcontent-%COMP%]:hover{background-color:var(--eval-tab-run-eval-btn-hover-background-color)}.result-btn[_ngcontent-%COMP%]{display:flex;background-color:transparent;border-radius:4px;border:1px solid var(--eval-tab-result-btn-border-color);margin-top:4px;cursor:pointer}.result-btn[_ngcontent-%COMP%]:hover{background-color:var(--eval-tab-result-btn-hover-background-color)}.result-btn.pass[_ngcontent-%COMP%]{color:var(--eval-tab-result-btn-pass-color)}.result-btn.fail[_ngcontent-%COMP%]{color:var(--eval-tab-result-btn-fail-color)}.evaluation-tab-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%}.evaluation-history-icon[_ngcontent-%COMP%]{cursor:pointer;margin-top:4px}.status-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;border-radius:8px;background-color:var(--eval-tab-status-card-background-color);padding:12px 16px;margin-top:12px}.status-card__overview[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%}.status-card__info[_ngcontent-%COMP%]{display:flex;flex-direction:column}.status-card__timestamp[_ngcontent-%COMP%]{font-size:.9em;color:var(--eval-tab-status-card-timestamp-color);margin-bottom:5px}.status-card__summary[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:.95em;font-weight:500}.status-card__metrics[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:.75em;font-weight:300;margin-top:3px}.status-card__metric[_ngcontent-%COMP%]{width:180px;color:var(--eval-tab-status-card-metric-color)}.status-card__failed[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-failed-color)}.status-card__separator[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-separator-color);margin:0 8px}.status-card__passed[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-passed-color)}.status-card__action[_ngcontent-%COMP%]{display:flex;align-items:center}.status-card__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-action-mat-icon-color);cursor:pointer;transition:transform .2s ease-in-out}.status-card__action[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]:hover{opacity:.8}.status-card__action[_ngcontent-%COMP%] .status-card__icon[_ngcontent-%COMP%]{color:var(--eval-tab-status-card-icon-color);font-size:1.2em;cursor:pointer}.status-card__action[_ngcontent-%COMP%] .status-card__icon[_ngcontent-%COMP%]:hover{opacity:.8}.status-card__history-cases[_ngcontent-%COMP%]{display:flex;flex-direction:column;margin-top:3px;justify-content:flex-start;width:100%}.status-card__history-case[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;width:100%;margin-top:15px}.eval-spinner[_ngcontent-%COMP%]{margin-top:12px}"]})};var q7=new yA("PendingEventService"),j7=class{};function ezA(t,e){t&1&&(m(0,"h2",0),K(1,"Events List"),w())}function tzA(t,e){t&1&&(m(0,"h2",0),K(1,"Send Response To Pending Event"),w())}function izA(t,e){t&1&&(m(0,"h2",4),K(1,"Events List"),w())}function nzA(t,e){t&1&&(m(0,"h2",4),K(1,"Send Response To Pending Event"),w())}function ozA(t,e){if(t&1){let A=JA();m(0,"div")(1,"p"),K(2,"Name"),w(),m(3,"p"),K(4),w(),m(5,"p"),K(6,"Args"),w(),m(7,"p"),K(8),w(),m(9,"mat-form-field",5)(10,"mat-label"),K(11,"Response"),w(),m(12,"textarea",6),ho("ngModelChange",function(n){Z(A);let o=v();return ao(o.selectedEvent.response,n)||(o.selectedEvent.response=n),X(n)}),w()()()}if(t&2){let A=v();p(4),qA(A.selectedEvent.name),p(4),qA(A.argsToJson(A.selectedEvent.args)),p(4),Qo("ngModel",A.selectedEvent.response)}}function azA(t,e){if(t&1){let A=JA();m(0,"button",7),tA("click",function(){Z(A);let n=v();return X(n.sendResponse())}),K(1),w()}if(t&2){let A=v();$("disabled",A.sending),p(),Se(" ",A.sending?"Sending...":"Send"," ")}}var V7=class t{dialogRef=h(bo);data=h(Ca);agentService=h(sg);pendingEventService=h(q7);selectedEvent=this.data.event;appName=this.data.appName;userId=this.data.userId;sessionId=this.data.sessionId;functionCallEventId=this.data.functionCallEventId;sending=!1;response=[];constructor(){}argsToJson(e){return JSON.stringify(e)}sendResponse(){this.sending=!0;let e={appName:this.appName,userId:this.userId,sessionId:this.sessionId,newMessage:{role:"user",parts:[]},invocationId:this.data.invocationId};this.selectedEvent.response&&(e.functionCallEventId=this.functionCallEventId,e.newMessage.parts.push(this.pendingEventService.createFunctionResponse(this.selectedEvent.id,this.selectedEvent.name,{response:this.selectedEvent.response}))),this.agentService.runSse(e).subscribe({next:A=>nt(this,null,function*(){this.response.push(A)}),error:A=>console.error("SSE error:",A),complete:()=>{this.sending=!1,this.dialogRef.close({response:this.response,events:[this.selectedEvent]})}})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-pending-event-dialog"]],decls:10,vars:6,consts:[["mat-dialog-title",""],["mat-dialog-title","","class","dialog-title",4,"ngIf"],["mat-button","",3,"disabled"],["mat-button","","mat-dialog-close",""],["mat-dialog-title","",1,"dialog-title"],["appearance","outline",1,"response-textarea"],["matInput","",3,"ngModelChange","ngModel"],["mat-button","",3,"click","disabled"]],template:function(A,i){A&1&&(V(0,ezA,2,0,"h2",0),V(1,tzA,2,0,"h2",0),pt(2,izA,2,0,"h2",1)(3,nzA,2,0,"h2",1),m(4,"mat-dialog-content"),V(5,ozA,13,3,"div"),w(),m(6,"mat-dialog-actions"),V(7,azA,2,2,"button",2),m(8,"button",3),K(9,"Close"),w()()),A&2&&(W(i.selectedEvent?-1:0),p(),W(i.selectedEvent?1:-1),p(),$("ngIf",!i.selectedEvent),p(),$("ngIf",i.selectedEvent),p(2),W(i.selectedEvent?5:-1),p(2),W(i.selectedEvent&&i.selectedEvent.response?7:-1))},dependencies:[Da,rl,rr,No,Gg,wa,Nn,uo,fo,Sa,Ua,fn,B0],styles:[".response-textarea[_ngcontent-%COMP%]{min-width:500px;margin-top:15px}.dialog-title[_ngcontent-%COMP%]{font-weight:700;font-size:large}"]})};var zm=class t{constructor(e,A){this.dialogRef=e;this.data=A}onConfirm(){this.dialogRef.close(!0)}onCancel(){this.dialogRef.close(!1)}static \u0275fac=function(A){return new(A||t)(at(bo),at(Ca))};static \u0275cmp=kA({type:t,selectors:[["app-delete-session-dialog"]],decls:11,vars:4,consts:[[1,"confirm-delete-wrapper"],["mat-dialog-title",""],["align","end"],["mat-button","",3,"click"],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"h2",1),K(2),w(),m(3,"mat-dialog-content")(4,"p"),K(5),w()(),m(6,"mat-dialog-actions",2)(7,"button",3),tA("click",function(){return i.onCancel()}),K(8),w(),m(9,"button",4),tA("click",function(){return i.onConfirm()}),K(10),w()()()),A&2&&(p(2),qA(i.data.title),p(3),qA(i.data.message),p(3),qA(i.data.cancelButtonText),p(2),qA(i.data.confirmButtonText))},dependencies:[Da,rr,Ua,fn],encapsulation:2})};var RK=["*"];function rzA(t,e){t&1&&Ke(0)}var szA=["tabListContainer"],gzA=["tabList"],lzA=["tabListInner"],czA=["nextPaginator"],CzA=["previousPaginator"],IzA=["content"];function dzA(t,e){}var BzA=["tabBodyWrapper"],EzA=["tabHeader"];function QzA(t,e){}function hzA(t,e){if(t&1&&pt(0,QzA,0,0,"ng-template",12),t&2){let A=v().$implicit;$("cdkPortalOutlet",A.templateLabel)}}function uzA(t,e){if(t&1&&K(0),t&2){let A=v().$implicit;qA(A.textLabel)}}function fzA(t,e){if(t&1){let A=JA();m(0,"div",7,2),tA("click",function(){let n=Z(A),o=n.$implicit,a=n.$index,r=v(),s=An(1);return X(r._handleClick(o,s,a))})("cdkFocusChange",function(n){let o=Z(A).$index,a=v();return X(a._tabFocusChanged(n,o))}),GA(2,"span",8)(3,"div",9),m(4,"span",10)(5,"span",11),V(6,hzA,1,1,null,12)(7,uzA,1,1),w()()()}if(t&2){let A=e.$implicit,i=e.$index,n=An(1),o=v();Po(A.labelClass),ne("mdc-tab--active",o.selectedIndex===i),$("id",o._getTabLabelId(A,i))("disabled",A.disabled)("fitInkBarToContent",o.fitInkBarToContent),ie("tabIndex",o._getTabIndex(i))("aria-posinset",i+1)("aria-setsize",o._tabs.length)("aria-controls",o._getTabContentId(i))("aria-selected",o.selectedIndex===i)("aria-label",A.ariaLabel||null)("aria-labelledby",!A.ariaLabel&&A.ariaLabelledby?A.ariaLabelledby:null),p(3),$("matRippleTrigger",n)("matRippleDisabled",A.disabled||o.disableRipple),p(3),W(A.templateLabel?6:7)}}function mzA(t,e){t&1&&Ke(0)}function pzA(t,e){if(t&1){let A=JA();m(0,"mat-tab-body",13),tA("_onCentered",function(){Z(A);let n=v();return X(n._removeTabBodyWrapperHeight())})("_onCentering",function(n){Z(A);let o=v();return X(o._setTabBodyWrapperHeight(n))})("_beforeCentering",function(n){Z(A);let o=v();return X(o._bodyCentered(n))}),w()}if(t&2){let A=e.$implicit,i=e.$index,n=v();Po(A.bodyClass),$("id",n._getTabContentId(i))("content",A.content)("position",A.position)("animationDuration",n.animationDuration)("preserveContent",n.preserveContent),ie("tabindex",n.contentTabIndex!=null&&n.selectedIndex===i?n.contentTabIndex:null)("aria-labelledby",n._getTabLabelId(A,i))("aria-hidden",n.selectedIndex!==i)}}var wzA=new yA("MatTabContent"),DzA=(()=>{class t{template=h(Tn);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matTabContent",""]],features:[dt([{provide:wzA,useExisting:t}])]})}return t})(),yzA=new yA("MatTabLabel"),mgA=new yA("MAT_TAB"),NK=(()=>{class t extends VH{_closestTab=h(mgA,{optional:!0});static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","mat-tab-label",""],["","matTabLabel",""]],features:[dt([{provide:yzA,useExisting:t}]),It]})}return t})(),pgA=new yA("MAT_TAB_GROUP"),Om=(()=>{class t{_viewContainerRef=h(Oo);_closestTabGroup=h(pgA,{optional:!0});disabled=!1;get templateLabel(){return this._templateLabel}set templateLabel(A){this._setTemplateLabelInput(A)}_templateLabel;_explicitContent=void 0;_implicitContent;textLabel="";ariaLabel;ariaLabelledby;labelClass;bodyClass;id=null;_contentPortal=null;get content(){return this._contentPortal}_stateChanges=new XA;position=null;origin=null;isActive=!1;constructor(){h(Xn).load(dr)}ngOnChanges(A){(A.hasOwnProperty("textLabel")||A.hasOwnProperty("disabled"))&&this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete()}ngOnInit(){this._contentPortal=new Is(this._explicitContent||this._implicitContent,this._viewContainerRef)}_setTemplateLabelInput(A){A&&A._closestTab===this&&(this._templateLabel=A)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tab"]],contentQueries:function(i,n,o){if(i&1&&fa(o,NK,5)(o,DzA,7,Tn),i&2){let a;ce(a=Ce())&&(n.templateLabel=a.first),ce(a=Ce())&&(n._explicitContent=a.first)}},viewQuery:function(i,n){if(i&1&&ai(Tn,7),i&2){let o;ce(o=Ce())&&(n._implicitContent=o.first)}},hostAttrs:["hidden",""],hostVars:1,hostBindings:function(i,n){i&2&&ie("id",null)},inputs:{disabled:[2,"disabled","disabled",he],textLabel:[0,"label","textLabel"],ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],labelClass:"labelClass",bodyClass:"bodyClass",id:"id"},exportAs:["matTab"],features:[dt([{provide:mgA,useExisting:t}]),ti],ngContentSelectors:RK,decls:1,vars:0,template:function(i,n){i&1&&(Yt(),gp(0,rzA,1,0,"ng-template"))},encapsulation:2})}return t})(),MK="mdc-tab-indicator--active",hgA="mdc-tab-indicator--no-transition",kK=class{_items;_currentItem;constructor(e){this._items=e}hide(){this._items.forEach(e=>e.deactivateInkBar()),this._currentItem=void 0}alignToElement(e){let A=this._items.find(n=>n.elementRef.nativeElement===e),i=this._currentItem;if(A!==i&&(i?.deactivateInkBar(),A)){let n=i?.elementRef.nativeElement.getBoundingClientRect?.();A.activateInkBar(n),this._currentItem=A}}},vzA=(()=>{class t{_elementRef=h(ge);_inkBarElement=null;_inkBarContentElement=null;_fitToContent=!1;get fitInkBarToContent(){return this._fitToContent}set fitInkBarToContent(A){this._fitToContent!==A&&(this._fitToContent=A,this._inkBarElement&&this._appendInkBarElement())}activateInkBar(A){let i=this._elementRef.nativeElement;if(!A||!i.getBoundingClientRect||!this._inkBarContentElement){i.classList.add(MK);return}let n=i.getBoundingClientRect(),o=A.width/n.width,a=A.left-n.left;i.classList.add(hgA),this._inkBarContentElement.style.setProperty("transform",`translateX(${a}px) scaleX(${o})`),i.getBoundingClientRect(),i.classList.remove(hgA),i.classList.add(MK),this._inkBarContentElement.style.setProperty("transform","")}deactivateInkBar(){this._elementRef.nativeElement.classList.remove(MK)}ngOnInit(){this._createInkBarElement()}ngOnDestroy(){this._inkBarElement?.remove(),this._inkBarElement=this._inkBarContentElement=null}_createInkBarElement(){let A=this._elementRef.nativeElement.ownerDocument||document,i=this._inkBarElement=A.createElement("span"),n=this._inkBarContentElement=A.createElement("span");i.className="mdc-tab-indicator",n.className="mdc-tab-indicator__content mdc-tab-indicator__content--underline",i.appendChild(this._inkBarContentElement),this._appendInkBarElement()}_appendInkBarElement(){this._inkBarElement;let A=this._fitToContent?this._elementRef.nativeElement.querySelector(".mdc-tab__content"):this._elementRef.nativeElement;A.appendChild(this._inkBarElement)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,inputs:{fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",he]}})}return t})();var wgA=(()=>{class t extends vzA{elementRef=h(ge);disabled=!1;focus(){this.elementRef.nativeElement.focus()}getOffsetLeft(){return this.elementRef.nativeElement.offsetLeft}getOffsetWidth(){return this.elementRef.nativeElement.offsetWidth}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275dir=OA({type:t,selectors:[["","matTabLabelWrapper",""]],hostVars:3,hostBindings:function(i,n){i&2&&(ie("aria-disabled",!!n.disabled),ne("mat-mdc-tab-disabled",n.disabled))},inputs:{disabled:[2,"disabled","disabled",he]},features:[It]})}return t})(),ugA={passive:!0},bzA=650,MzA=100,kzA=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_viewportRuler=h(Ls);_dir=h(Ro,{optional:!0});_ngZone=h(Oe);_platform=h(Ii);_sharedResizeObserver=h(Hp);_injector=h(ft);_renderer=h(_i);_animationsDisabled=ji();_eventCleanups;_scrollDistance=0;_selectedIndexChanged=!1;_destroyed=new XA;_showPaginationControls=!1;_disableScrollAfter=!0;_disableScrollBefore=!0;_tabLabelCount;_scrollDistanceChanged=!1;_keyManager;_currentTextContent;_stopScrolling=new XA;disablePagination=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(A){let i=isNaN(A)?0:A;this._selectedIndex!=i&&(this._selectedIndexChanged=!0,this._selectedIndex=i,this._keyManager&&this._keyManager.updateActiveItem(i))}_selectedIndex=0;selectFocusedIndex=new $A;indexFocused=new $A;constructor(){this._eventCleanups=this._ngZone.runOutsideAngular(()=>[this._renderer.listen(this._elementRef.nativeElement,"mouseleave",()=>this._stopInterval())])}ngAfterViewInit(){this._eventCleanups.push(this._renderer.listen(this._previousPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("before"),ugA),this._renderer.listen(this._nextPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("after"),ugA))}ngAfterContentInit(){let A=this._dir?this._dir.change:se("ltr"),i=this._sharedResizeObserver.observe(this._elementRef.nativeElement).pipe(Os(32),Bt(this._destroyed)),n=this._viewportRuler.change(150).pipe(Bt(this._destroyed)),o=()=>{this.updatePagination(),this._alignInkBarToSelectedTab()};this._keyManager=new s0(this._items).withHorizontalOrientation(this._getLayoutDirection()).withHomeAndEnd().withWrap().skipPredicate(()=>!1),this._keyManager.updateActiveItem(Math.max(this._selectedIndex,0)),Yn(o,{injector:this._injector}),fi(A,n,i,this._items.changes,this._itemsResized()).pipe(Bt(this._destroyed)).subscribe(()=>{this._ngZone.run(()=>{Promise.resolve().then(()=>{this._scrollDistance=Math.max(0,Math.min(this._getMaxScrollDistance(),this._scrollDistance)),o()})}),this._keyManager?.withHorizontalOrientation(this._getLayoutDirection())}),this._keyManager.change.subscribe(a=>{this.indexFocused.emit(a),this._setTabFocus(a)})}_itemsResized(){return typeof ResizeObserver!="function"?ja:this._items.changes.pipe(cn(this._items),Si(A=>new $i(i=>this._ngZone.runOutsideAngular(()=>{let n=new ResizeObserver(o=>i.next(o));return A.forEach(o=>n.observe(o.elementRef.nativeElement)),()=>{n.disconnect()}}))),Fg(1),Ze(A=>A.some(i=>i.contentRect.width>0&&i.contentRect.height>0)))}ngAfterContentChecked(){this._tabLabelCount!=this._items.length&&(this.updatePagination(),this._tabLabelCount=this._items.length,this._changeDetectorRef.markForCheck()),this._selectedIndexChanged&&(this._scrollToLabel(this._selectedIndex),this._checkScrollingControls(),this._alignInkBarToSelectedTab(),this._selectedIndexChanged=!1,this._changeDetectorRef.markForCheck()),this._scrollDistanceChanged&&(this._updateTabScrollPosition(),this._scrollDistanceChanged=!1,this._changeDetectorRef.markForCheck())}ngOnDestroy(){this._eventCleanups.forEach(A=>A()),this._keyManager?.destroy(),this._destroyed.next(),this._destroyed.complete(),this._stopScrolling.complete()}_handleKeydown(A){if(!pa(A))switch(A.keyCode){case 13:case 32:if(this.focusIndex!==this.selectedIndex){let i=this._items.get(this.focusIndex);i&&!i.disabled&&(this.selectFocusedIndex.emit(this.focusIndex),this._itemSelected(A))}break;default:this._keyManager?.onKeydown(A)}}_onContentChanges(){let A=this._elementRef.nativeElement.textContent;A!==this._currentTextContent&&(this._currentTextContent=A||"",this._ngZone.run(()=>{this.updatePagination(),this._alignInkBarToSelectedTab(),this._changeDetectorRef.markForCheck()}))}updatePagination(){this._checkPaginationEnabled(),this._checkScrollingControls(),this._updateTabScrollPosition()}get focusIndex(){return this._keyManager?this._keyManager.activeItemIndex:0}set focusIndex(A){!this._isValidIndex(A)||this.focusIndex===A||!this._keyManager||this._keyManager.setActiveItem(A)}_isValidIndex(A){return this._items?!!this._items.toArray()[A]:!0}_setTabFocus(A){if(this._showPaginationControls&&this._scrollToLabel(A),this._items&&this._items.length){this._items.toArray()[A].focus();let i=this._tabListContainer.nativeElement;this._getLayoutDirection()=="ltr"?i.scrollLeft=0:i.scrollLeft=i.scrollWidth-i.offsetWidth}}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_updateTabScrollPosition(){if(this.disablePagination)return;let A=this.scrollDistance,i=this._getLayoutDirection()==="ltr"?-A:A;this._tabList.nativeElement.style.transform=`translateX(${Math.round(i)}px)`,(this._platform.TRIDENT||this._platform.EDGE)&&(this._tabListContainer.nativeElement.scrollLeft=0)}get scrollDistance(){return this._scrollDistance}set scrollDistance(A){this._scrollTo(A)}_scrollHeader(A){let i=this._tabListContainer.nativeElement.offsetWidth,n=(A=="before"?-1:1)*i/3;return this._scrollTo(this._scrollDistance+n)}_handlePaginatorClick(A){this._stopInterval(),this._scrollHeader(A)}_scrollToLabel(A){if(this.disablePagination)return;let i=this._items?this._items.toArray()[A]:null;if(!i)return;let n=this._tabListContainer.nativeElement.offsetWidth,{offsetLeft:o,offsetWidth:a}=i.elementRef.nativeElement,r,s;this._getLayoutDirection()=="ltr"?(r=o,s=r+a):(s=this._tabListInner.nativeElement.offsetWidth-o,r=s-a);let g=this.scrollDistance,l=this.scrollDistance+n;rl&&(this.scrollDistance+=Math.min(s-l,r-g))}_checkPaginationEnabled(){if(this.disablePagination)this._showPaginationControls=!1;else{let A=this._tabListInner.nativeElement.scrollWidth,i=this._elementRef.nativeElement.offsetWidth,n=A-i>=5;n||(this.scrollDistance=0),n!==this._showPaginationControls&&(this._showPaginationControls=n,this._changeDetectorRef.markForCheck())}}_checkScrollingControls(){this.disablePagination?this._disableScrollAfter=this._disableScrollBefore=!0:(this._disableScrollBefore=this.scrollDistance==0,this._disableScrollAfter=this.scrollDistance==this._getMaxScrollDistance(),this._changeDetectorRef.markForCheck())}_getMaxScrollDistance(){let A=this._tabListInner.nativeElement.scrollWidth,i=this._tabListContainer.nativeElement.offsetWidth;return A-i||0}_alignInkBarToSelectedTab(){let A=this._items&&this._items.length?this._items.toArray()[this.selectedIndex]:null,i=A?A.elementRef.nativeElement:null;i?this._inkBar.alignToElement(i):this._inkBar.hide()}_stopInterval(){this._stopScrolling.next()}_handlePaginatorPress(A,i){i&&i.button!=null&&i.button!==0||(this._stopInterval(),Ap(bzA,MzA).pipe(Bt(fi(this._stopScrolling,this._destroyed))).subscribe(()=>{let{maxScrollDistance:n,distance:o}=this._scrollHeader(A);(o===0||o>=n)&&this._stopInterval()}))}_scrollTo(A){if(this.disablePagination)return{maxScrollDistance:0,distance:0};let i=this._getMaxScrollDistance();return this._scrollDistance=Math.max(0,Math.min(i,A)),this._scrollDistanceChanged=!0,this._checkScrollingControls(),{maxScrollDistance:i,distance:this._scrollDistance}}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,inputs:{disablePagination:[2,"disablePagination","disablePagination",he],selectedIndex:[2,"selectedIndex","selectedIndex",en]},outputs:{selectFocusedIndex:"selectFocusedIndex",indexFocused:"indexFocused"}})}return t})(),SzA=(()=>{class t extends kzA{_items;_tabListContainer;_tabList;_tabListInner;_nextPaginator;_previousPaginator;_inkBar;ariaLabel;ariaLabelledby;disableRipple=!1;ngAfterContentInit(){this._inkBar=new kK(this._items),super.ngAfterContentInit()}_itemSelected(A){A.preventDefault()}static \u0275fac=(()=>{let A;return function(n){return(A||(A=Bi(t)))(n||t)}})();static \u0275cmp=kA({type:t,selectors:[["mat-tab-header"]],contentQueries:function(i,n,o){if(i&1&&fa(o,wgA,4),i&2){let a;ce(a=Ce())&&(n._items=a)}},viewQuery:function(i,n){if(i&1&&ai(szA,7)(gzA,7)(lzA,7)(czA,5)(CzA,5),i&2){let o;ce(o=Ce())&&(n._tabListContainer=o.first),ce(o=Ce())&&(n._tabList=o.first),ce(o=Ce())&&(n._tabListInner=o.first),ce(o=Ce())&&(n._nextPaginator=o.first),ce(o=Ce())&&(n._previousPaginator=o.first)}},hostAttrs:[1,"mat-mdc-tab-header"],hostVars:4,hostBindings:function(i,n){i&2&&ne("mat-mdc-tab-header-pagination-controls-enabled",n._showPaginationControls)("mat-mdc-tab-header-rtl",n._getLayoutDirection()=="rtl")},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],disableRipple:[2,"disableRipple","disableRipple",he]},features:[It],ngContentSelectors:RK,decls:13,vars:10,consts:[["previousPaginator",""],["tabListContainer",""],["tabList",""],["tabListInner",""],["nextPaginator",""],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-before",3,"click","mousedown","touchend","matRippleDisabled"],[1,"mat-mdc-tab-header-pagination-chevron"],[1,"mat-mdc-tab-label-container",3,"keydown"],["role","tablist",1,"mat-mdc-tab-list",3,"cdkObserveContent"],[1,"mat-mdc-tab-labels"],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-after",3,"mousedown","click","touchend","matRippleDisabled"]],template:function(i,n){if(i&1){let o=JA();Yt(),m(0,"div",5,0),tA("click",function(){return Z(o),X(n._handlePaginatorClick("before"))})("mousedown",function(r){return Z(o),X(n._handlePaginatorPress("before",r))})("touchend",function(){return Z(o),X(n._stopInterval())}),GA(2,"div",6),w(),m(3,"div",7,1),tA("keydown",function(r){return Z(o),X(n._handleKeydown(r))}),m(5,"div",8,2),tA("cdkObserveContent",function(){return Z(o),X(n._onContentChanges())}),m(7,"div",9,3),Ke(9),w()()(),m(10,"div",10,4),tA("mousedown",function(r){return Z(o),X(n._handlePaginatorPress("after",r))})("click",function(){return Z(o),X(n._handlePaginatorClick("after"))})("touchend",function(){return Z(o),X(n._stopInterval())}),GA(12,"div",6),w()}i&2&&(ne("mat-mdc-tab-header-pagination-disabled",n._disableScrollBefore),$("matRippleDisabled",n._disableScrollBefore||n.disableRipple),p(3),ne("_mat-animation-noopable",n._animationsDisabled),p(2),ie("aria-label",n.ariaLabel||null)("aria-labelledby",n.ariaLabelledby||null),p(5),ne("mat-mdc-tab-header-pagination-disabled",n._disableScrollAfter),$("matRippleDisabled",n._disableScrollAfter||n.disableRipple))},dependencies:[ig,FJ],styles:[`.mat-mdc-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mdc-tab-indicator .mdc-tab-indicator__content{transition-duration:var(--mat-tab-animation-duration, 250ms)}.mat-mdc-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;outline:0}.mat-mdc-tab-header-pagination::-moz-focus-inner{border:0}.mat-mdc-tab-header-pagination .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-controls-enabled .mat-mdc-tab-header-pagination{display:flex}.mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after{padding-left:4px}.mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-pagination-after{padding-right:4px}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-mdc-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px;border-color:var(--mat-tab-pagination-icon-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-disabled{box-shadow:none;cursor:default;pointer-events:none}.mat-mdc-tab-header-pagination-disabled .mat-mdc-tab-header-pagination-chevron{opacity:.4}.mat-mdc-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-mdc-tab-list{transition:none}.mat-mdc-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1;border-bottom-style:solid;border-bottom-width:var(--mat-tab-divider-height, 1px);border-bottom-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-group-inverted-header .mat-mdc-tab-label-container{border-bottom:none;border-top-style:solid;border-top-width:var(--mat-tab-divider-height, 1px);border-top-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-labels{display:flex;flex:1 0 auto}[mat-align-tabs=center]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:flex-end}.cdk-drop-list .mat-mdc-tab-labels,.mat-mdc-tab-labels.cdk-drop-list{min-height:var(--mat-tab-container-height, 48px)}.mat-mdc-tab::before{margin:5px}@media(forced-colors: active){.mat-mdc-tab[aria-disabled=true]{color:GrayText}} -`],encapsulation:2})}return t})(),xzA=new yA("MAT_TABS_CONFIG"),fgA=(()=>{class t extends Yg{_host=h(SK);_ngZone=h(Oe);_centeringSub=Jn.EMPTY;_leavingSub=Jn.EMPTY;constructor(){super()}ngOnInit(){super.ngOnInit(),this._centeringSub=this._host._beforeCentering.pipe(cn(this._host._isCenterPosition())).subscribe(A=>{this._host._content&&A&&!this.hasAttached()&&this._ngZone.run(()=>{Promise.resolve().then(),this.attach(this._host._content)})}),this._leavingSub=this._host._afterLeavingCenter.subscribe(()=>{this._host.preserveContent||this._ngZone.run(()=>this.detach())})}ngOnDestroy(){super.ngOnDestroy(),this._centeringSub.unsubscribe(),this._leavingSub.unsubscribe()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=OA({type:t,selectors:[["","matTabBodyHost",""]],features:[It]})}return t})(),SK=(()=>{class t{_elementRef=h(ge);_dir=h(Ro,{optional:!0});_ngZone=h(Oe);_injector=h(ft);_renderer=h(_i);_diAnimationsDisabled=ji();_eventCleanups;_initialized=!1;_fallbackTimer;_positionIndex;_dirChangeSubscription=Jn.EMPTY;_position;_previousPosition;_onCentering=new $A;_beforeCentering=new $A;_afterLeavingCenter=new $A;_onCentered=new $A(!0);_portalHost;_contentElement;_content;animationDuration="500ms";preserveContent=!1;set position(A){this._positionIndex=A,this._computePositionAnimationState()}constructor(){if(this._dir){let A=h(Dt);this._dirChangeSubscription=this._dir.change.subscribe(i=>{this._computePositionAnimationState(i),A.markForCheck()})}}ngOnInit(){this._bindTransitionEvents(),this._position==="center"&&(this._setActiveClass(!0),Yn(()=>this._onCentering.emit(this._elementRef.nativeElement.clientHeight),{injector:this._injector})),this._initialized=!0}ngOnDestroy(){clearTimeout(this._fallbackTimer),this._eventCleanups?.forEach(A=>A()),this._dirChangeSubscription.unsubscribe()}_bindTransitionEvents(){this._ngZone.runOutsideAngular(()=>{let A=this._elementRef.nativeElement,i=n=>{n.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.remove("mat-tab-body-animating"),n.type==="transitionend"&&this._transitionDone())};this._eventCleanups=[this._renderer.listen(A,"transitionstart",n=>{n.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.add("mat-tab-body-animating"),this._transitionStarted())}),this._renderer.listen(A,"transitionend",i),this._renderer.listen(A,"transitioncancel",i)]})}_transitionStarted(){clearTimeout(this._fallbackTimer);let A=this._position==="center";this._beforeCentering.emit(A),A&&this._onCentering.emit(this._elementRef.nativeElement.clientHeight)}_transitionDone(){this._position==="center"?this._onCentered.emit():this._previousPosition==="center"&&this._afterLeavingCenter.emit()}_setActiveClass(A){this._elementRef.nativeElement.classList.toggle("mat-mdc-tab-body-active",A)}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_isCenterPosition(){return this._positionIndex===0}_computePositionAnimationState(A=this._getLayoutDirection()){this._previousPosition=this._position,this._positionIndex<0?this._position=A=="ltr"?"left":"right":this._positionIndex>0?this._position=A=="ltr"?"right":"left":this._position="center",this._animationsDisabled()?this._simulateTransitionEvents():this._initialized&&(this._position==="center"||this._previousPosition==="center")&&(clearTimeout(this._fallbackTimer),this._fallbackTimer=this._ngZone.runOutsideAngular(()=>setTimeout(()=>this._simulateTransitionEvents(),100)))}_simulateTransitionEvents(){this._transitionStarted(),Yn(()=>this._transitionDone(),{injector:this._injector})}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0ms"||this.animationDuration==="0s"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tab-body"]],viewQuery:function(i,n){if(i&1&&ai(fgA,5)(IzA,5),i&2){let o;ce(o=Ce())&&(n._portalHost=o.first),ce(o=Ce())&&(n._contentElement=o.first)}},hostAttrs:[1,"mat-mdc-tab-body"],hostVars:1,hostBindings:function(i,n){i&2&&ie("inert",n._position==="center"?null:"")},inputs:{_content:[0,"content","_content"],animationDuration:"animationDuration",preserveContent:"preserveContent",position:"position"},outputs:{_onCentering:"_onCentering",_beforeCentering:"_beforeCentering",_onCentered:"_onCentered"},decls:3,vars:6,consts:[["content",""],["cdkScrollable","",1,"mat-mdc-tab-body-content"],["matTabBodyHost",""]],template:function(i,n){i&1&&(m(0,"div",1,0),pt(2,dzA,0,0,"ng-template",2),w()),i&2&&ne("mat-tab-body-content-left",n._position==="left")("mat-tab-body-content-right",n._position==="right")("mat-tab-body-content-can-animate",n._position==="center"||n._previousPosition==="center")},dependencies:[fgA,BC],styles:[`.mat-mdc-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-mdc-tab-body.mat-mdc-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-mdc-tab-group.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body.mat-mdc-tab-body-active{overflow-y:hidden}.mat-mdc-tab-body-content{height:100%;overflow:auto;transform:none;visibility:hidden}.mat-tab-body-animating>.mat-mdc-tab-body-content,.mat-mdc-tab-body-active>.mat-mdc-tab-body-content{visibility:visible}.mat-tab-body-animating>.mat-mdc-tab-body-content{min-height:1px}.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body-content{overflow:hidden}.mat-tab-body-content-can-animate{transition:transform var(--mat-tab-animation-duration) 1ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable .mat-tab-body-content-can-animate{transition:none}.mat-tab-body-content-left{transform:translate3d(-100%, 0, 0)}.mat-tab-body-content-right{transform:translate3d(100%, 0, 0)} -`],encapsulation:2})}return t})(),W7=(()=>{class t{_elementRef=h(ge);_changeDetectorRef=h(Dt);_ngZone=h(Oe);_tabsSubscription=Jn.EMPTY;_tabLabelSubscription=Jn.EMPTY;_tabBodySubscription=Jn.EMPTY;_diAnimationsDisabled=ji();_allTabs;_tabBodies;_tabBodyWrapper;_tabHeader;_tabs=new ol;_indexToSelect=0;_lastFocusedTabIndex=null;_tabBodyWrapperHeight=0;color;get fitInkBarToContent(){return this._fitInkBarToContent}set fitInkBarToContent(A){this._fitInkBarToContent=A,this._changeDetectorRef.markForCheck()}_fitInkBarToContent=!1;stretchTabs=!0;alignTabs=null;dynamicHeight=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(A){this._indexToSelect=isNaN(A)?null:A}_selectedIndex=null;headerPosition="above";get animationDuration(){return this._animationDuration}set animationDuration(A){let i=A+"";this._animationDuration=/^\d+$/.test(i)?A+"ms":i}_animationDuration;get contentTabIndex(){return this._contentTabIndex}set contentTabIndex(A){this._contentTabIndex=isNaN(A)?null:A}_contentTabIndex=null;disablePagination=!1;disableRipple=!1;preserveContent=!1;get backgroundColor(){return this._backgroundColor}set backgroundColor(A){let i=this._elementRef.nativeElement.classList;i.remove("mat-tabs-with-background",`mat-background-${this.backgroundColor}`),A&&i.add("mat-tabs-with-background",`mat-background-${A}`),this._backgroundColor=A}_backgroundColor;ariaLabel;ariaLabelledby;selectedIndexChange=new $A;focusChange=new $A;animationDone=new $A;selectedTabChange=new $A(!0);_groupId;_isServer=!h(Ii).isBrowser;constructor(){let A=h(xzA,{optional:!0});this._groupId=h(an).getId("mat-tab-group-"),this.animationDuration=A&&A.animationDuration?A.animationDuration:"500ms",this.disablePagination=A&&A.disablePagination!=null?A.disablePagination:!1,this.dynamicHeight=A&&A.dynamicHeight!=null?A.dynamicHeight:!1,A?.contentTabIndex!=null&&(this.contentTabIndex=A.contentTabIndex),this.preserveContent=!!A?.preserveContent,this.fitInkBarToContent=A&&A.fitInkBarToContent!=null?A.fitInkBarToContent:!1,this.stretchTabs=A&&A.stretchTabs!=null?A.stretchTabs:!0,this.alignTabs=A&&A.alignTabs!=null?A.alignTabs:null}ngAfterContentChecked(){let A=this._indexToSelect=this._clampTabIndex(this._indexToSelect);if(this._selectedIndex!=A){let i=this._selectedIndex==null;if(!i){this.selectedTabChange.emit(this._createChangeEvent(A));let n=this._tabBodyWrapper.nativeElement;n.style.minHeight=n.clientHeight+"px"}Promise.resolve().then(()=>{this._tabs.forEach((n,o)=>n.isActive=o===A),i||(this.selectedIndexChange.emit(A),this._tabBodyWrapper.nativeElement.style.minHeight="")})}this._tabs.forEach((i,n)=>{i.position=n-A,this._selectedIndex!=null&&i.position==0&&!i.origin&&(i.origin=A-this._selectedIndex)}),this._selectedIndex!==A&&(this._selectedIndex=A,this._lastFocusedTabIndex=null,this._changeDetectorRef.markForCheck())}ngAfterContentInit(){this._subscribeToAllTabChanges(),this._subscribeToTabLabels(),this._tabsSubscription=this._tabs.changes.subscribe(()=>{let A=this._clampTabIndex(this._indexToSelect);if(A===this._selectedIndex){let i=this._tabs.toArray(),n;for(let o=0;o{i[A].isActive=!0,this.selectedTabChange.emit(this._createChangeEvent(A))})}this._changeDetectorRef.markForCheck()})}ngAfterViewInit(){this._tabBodySubscription=this._tabBodies.changes.subscribe(()=>this._bodyCentered(!0))}_subscribeToAllTabChanges(){this._allTabs.changes.pipe(cn(this._allTabs)).subscribe(A=>{this._tabs.reset(A.filter(i=>i._closestTabGroup===this||!i._closestTabGroup)),this._tabs.notifyOnChanges()})}ngOnDestroy(){this._tabs.destroy(),this._tabsSubscription.unsubscribe(),this._tabLabelSubscription.unsubscribe(),this._tabBodySubscription.unsubscribe()}realignInkBar(){this._tabHeader&&this._tabHeader._alignInkBarToSelectedTab()}updatePagination(){this._tabHeader&&this._tabHeader.updatePagination()}focusTab(A){let i=this._tabHeader;i&&(i.focusIndex=A)}_focusChanged(A){this._lastFocusedTabIndex=A,this.focusChange.emit(this._createChangeEvent(A))}_createChangeEvent(A){let i=new xK;return i.index=A,this._tabs&&this._tabs.length&&(i.tab=this._tabs.toArray()[A]),i}_subscribeToTabLabels(){this._tabLabelSubscription&&this._tabLabelSubscription.unsubscribe(),this._tabLabelSubscription=fi(...this._tabs.map(A=>A._stateChanges)).subscribe(()=>this._changeDetectorRef.markForCheck())}_clampTabIndex(A){return Math.min(this._tabs.length-1,Math.max(A||0,0))}_getTabLabelId(A,i){return A.id||`${this._groupId}-label-${i}`}_getTabContentId(A){return`${this._groupId}-content-${A}`}_setTabBodyWrapperHeight(A){if(!this.dynamicHeight||!this._tabBodyWrapperHeight){this._tabBodyWrapperHeight=A;return}let i=this._tabBodyWrapper.nativeElement;i.style.height=this._tabBodyWrapperHeight+"px",this._tabBodyWrapper.nativeElement.offsetHeight&&(i.style.height=A+"px")}_removeTabBodyWrapperHeight(){let A=this._tabBodyWrapper.nativeElement;this._tabBodyWrapperHeight=A.clientHeight,A.style.height="",this._ngZone.run(()=>this.animationDone.emit())}_handleClick(A,i,n){i.focusIndex=n,A.disabled||(this.selectedIndex=n)}_getTabIndex(A){let i=this._lastFocusedTabIndex??this.selectedIndex;return A===i?0:-1}_tabFocusChanged(A,i){A&&A!=="mouse"&&A!=="touch"&&(this._tabHeader.focusIndex=i)}_bodyCentered(A){A&&this._tabBodies?.forEach((i,n)=>i._setActiveClass(n===this._selectedIndex))}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0"||this.animationDuration==="0ms"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=kA({type:t,selectors:[["mat-tab-group"]],contentQueries:function(i,n,o){if(i&1&&fa(o,Om,5),i&2){let a;ce(a=Ce())&&(n._allTabs=a)}},viewQuery:function(i,n){if(i&1&&ai(BzA,5)(EzA,5)(SK,5),i&2){let o;ce(o=Ce())&&(n._tabBodyWrapper=o.first),ce(o=Ce())&&(n._tabHeader=o.first),ce(o=Ce())&&(n._tabBodies=o)}},hostAttrs:[1,"mat-mdc-tab-group"],hostVars:11,hostBindings:function(i,n){i&2&&(ie("mat-align-tabs",n.alignTabs),Po("mat-"+(n.color||"primary")),wn("--mat-tab-animation-duration",n.animationDuration),ne("mat-mdc-tab-group-dynamic-height",n.dynamicHeight)("mat-mdc-tab-group-inverted-header",n.headerPosition==="below")("mat-mdc-tab-group-stretch-tabs",n.stretchTabs))},inputs:{color:"color",fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",he],stretchTabs:[2,"mat-stretch-tabs","stretchTabs",he],alignTabs:[0,"mat-align-tabs","alignTabs"],dynamicHeight:[2,"dynamicHeight","dynamicHeight",he],selectedIndex:[2,"selectedIndex","selectedIndex",en],headerPosition:"headerPosition",animationDuration:"animationDuration",contentTabIndex:[2,"contentTabIndex","contentTabIndex",en],disablePagination:[2,"disablePagination","disablePagination",he],disableRipple:[2,"disableRipple","disableRipple",he],preserveContent:[2,"preserveContent","preserveContent",he],backgroundColor:"backgroundColor",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"]},outputs:{selectedIndexChange:"selectedIndexChange",focusChange:"focusChange",animationDone:"animationDone",selectedTabChange:"selectedTabChange"},exportAs:["matTabGroup"],features:[dt([{provide:pgA,useExisting:t}])],ngContentSelectors:RK,decls:9,vars:8,consts:[["tabHeader",""],["tabBodyWrapper",""],["tabNode",""],[3,"indexFocused","selectFocusedIndex","selectedIndex","disableRipple","disablePagination","aria-label","aria-labelledby"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"id","mdc-tab--active","class","disabled","fitInkBarToContent"],[1,"mat-mdc-tab-body-wrapper"],["role","tabpanel",3,"id","class","content","position","animationDuration","preserveContent"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"click","cdkFocusChange","id","disabled","fitInkBarToContent"],[1,"mdc-tab__ripple"],["mat-ripple","",1,"mat-mdc-tab-ripple",3,"matRippleTrigger","matRippleDisabled"],[1,"mdc-tab__content"],[1,"mdc-tab__text-label"],[3,"cdkPortalOutlet"],["role","tabpanel",3,"_onCentered","_onCentering","_beforeCentering","id","content","position","animationDuration","preserveContent"]],template:function(i,n){if(i&1){let o=JA();Yt(),m(0,"mat-tab-header",3,0),tA("indexFocused",function(r){return Z(o),X(n._focusChanged(r))})("selectFocusedIndex",function(r){return Z(o),X(n.selectedIndex=r)}),Ut(2,fzA,8,17,"div",4,Li),w(),V(4,mzA,1,0),m(5,"div",5,1),Ut(7,pzA,1,10,"mat-tab-body",6,Li),w()}i&2&&($("selectedIndex",n.selectedIndex||0)("disableRipple",n.disableRipple)("disablePagination",n.disablePagination),cp("aria-label",n.ariaLabel)("aria-labelledby",n.ariaLabelledby),p(2),Jt(n._tabs),p(2),W(n._isServer?4:-1),p(),ne("_mat-animation-noopable",n._animationsDisabled()),p(2),Jt(n._tabs))},dependencies:[SzA,wgA,d9,ig,Yg,SK],styles:[`.mdc-tab{min-width:90px;padding:0 24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;z-index:1;touch-action:manipulation}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab--active .mdc-tab__text-label{transition-delay:100ms}._mat-animation-noopable .mdc-tab__text-label{transition:none}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transition:var(--mat-tab-animation-duration, 250ms) transform cubic-bezier(0.4, 0, 0.2, 1);transform-origin:left;opacity:0}.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}._mat-animation-noopable .mdc-tab-indicator__content,.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mat-mdc-tab-ripple.mat-mdc-tab-ripple{position:absolute;top:0;left:0;bottom:0;right:0;pointer-events:none}.mat-mdc-tab{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none;background:none;height:var(--mat-tab-container-height, 48px);font-family:var(--mat-tab-label-text-font, var(--mat-sys-title-small-font));font-size:var(--mat-tab-label-text-size, var(--mat-sys-title-small-size));letter-spacing:var(--mat-tab-label-text-tracking, var(--mat-sys-title-small-tracking));line-height:var(--mat-tab-label-text-line-height, var(--mat-sys-title-small-line-height));font-weight:var(--mat-tab-label-text-weight, var(--mat-sys-title-small-weight))}.mat-mdc-tab.mdc-tab{flex-grow:0}.mat-mdc-tab .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-indicator-color, var(--mat-sys-primary));border-top-width:var(--mat-tab-active-indicator-height, 2px);border-radius:var(--mat-tab-active-indicator-shape, 0)}.mat-mdc-tab:hover .mdc-tab__text-label{color:var(--mat-tab-inactive-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab:focus .mdc-tab__text-label{color:var(--mat-tab-inactive-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__text-label{color:var(--mat-tab-active-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__ripple::before,.mat-mdc-tab.mdc-tab--active .mat-ripple-element{background-color:var(--mat-tab-active-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab__text-label{color:var(--mat-tab-active-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-hover-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab__text-label{color:var(--mat-tab-active-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-focus-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mat-mdc-tab-disabled{opacity:.4;pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__content{pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__ripple::before,.mat-mdc-tab.mat-mdc-tab-disabled .mat-ripple-element{background-color:var(--mat-tab-disabled-ripple-color, var(--mat-sys-on-surface-variant))}.mat-mdc-tab .mdc-tab__ripple::before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-inactive-label-text-color, var(--mat-sys-on-surface));display:inline-flex;align-items:center}.mat-mdc-tab .mdc-tab__content{position:relative;pointer-events:auto}.mat-mdc-tab:hover .mdc-tab__ripple::before{opacity:.04}.mat-mdc-tab.cdk-program-focused .mdc-tab__ripple::before,.mat-mdc-tab.cdk-keyboard-focused .mdc-tab__ripple::before{opacity:.12}.mat-mdc-tab .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-group.mat-mdc-tab-group-stretch-tabs>.mat-mdc-tab-header .mat-mdc-tab{flex-grow:1}.mat-mdc-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination{background-color:var(--mat-tab-background-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-focus-indicator::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-focus-indicator::before{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mdc-tab__ripple::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mdc-tab__ripple::before{background-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header{flex-direction:column-reverse}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header .mdc-tab-indicator__content--underline{align-self:flex-start}.mat-mdc-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important} -`],encapsulation:2})}return t})(),xK=class{index;tab};var Z7=new yA("LOGO_COMPONENT");var RzA={noSessionsFound:"No sessions found",readonlyChip:"Read-only",filterSessionsLabel:"Search using session ID"},DgA=new yA("Session Tab Messages",{factory:()=>RzA});function NzA(t,e){if(t&1&&(m(0,"div",1)(1,"mat-form-field",4)(2,"mat-label"),K(3),w(),m(4,"mat-icon",5),K(5,"filter_list"),w(),GA(6,"input",6),w()()),t&2){let A=v();p(3),qA(A.i18n.filterSessionsLabel),p(3),$("formControl",A.filterControl)}}function FzA(t,e){t&1&&(m(0,"div",2),GA(1,"mat-progress-bar",7),w())}function _zA(t,e){if(t&1&&(m(0,"div",3),K(1),w()),t&2){let A=v();p(),qA(A.i18n.noSessionsFound)}}function LzA(t,e){if(t&1&&(m(0,"div",14)(1,"mat-icon"),K(2,"visibility"),w(),K(3),w()),t&2){let A=v(3);p(3),Se(" ",A.i18n.readonlyChip," ")}}function GzA(t,e){if(t&1){let A=JA();m(0,"div",10),tA("click",function(){let n=Z(A).$implicit,o=v(2);return X(o.getSession(n.id))}),m(1,"div",11)(2,"div",12),K(3),w(),m(4,"div",13),K(5),w()(),V(6,LzA,4,1,"div",14),ri(7,"async"),w()}if(t&2){let A=e.$implicit,i=v(2);$("ngClass",A.id===i.sessionId?"session-item current":"session-item"),p(3),qA(A.id),p(2),qA(i.getDate(A)),p(),W(Ci(7,4,i.sessionService.canEdit(i.userId,A))===!1?6:-1)}}function KzA(t,e){t&1&&(m(0,"div",2),GA(1,"mat-progress-bar",7),w())}function UzA(t,e){if(t&1){let A=JA();V(0,KzA,2,0,"div",2),m(1,"div",15)(2,"button",16),tA("click",function(){Z(A);let n=v(2);return X(n.loadMoreSessions())}),K(3,"Load more"),w()()}if(t&2){v(2);let A=Vs(3);W(A?0:-1)}}function JzA(t,e){if(t&1&&(m(0,"div",8),Ut(1,GzA,8,6,"div",9,Li),w(),V(3,UzA,4,1),ri(4,"async")),t&2){let A=v();p(),Jt(A.sessionList),p(2),W(Ci(4,1,A.isSessionFilteringEnabled)&&A.canLoadMoreSessions?3:-1)}}var Xh=class t{userId="";appName="";sessionId="";sessionSelected=new $A;sessionReloaded=new $A;SESSIONS_PAGE_LIMIT=100;sessionList=[];canLoadMoreSessions=!1;pageToken="";filterControl=new ks("");refreshSessionsSubject=new XA;getSessionSubject=new XA;reloadSessionSubject=new XA;route=h(ag);changeDetectorRef=h(Dt);sessionService=h(El);uiStateService=h(Ql);i18n=h(DgA);featureFlagService=h(vr);isSessionFilteringEnabled=this.featureFlagService.isSessionFilteringEnabled();isLoadingMoreInProgress=jA(!1);constructor(){this.filterControl.valueChanges.pipe(Os(300)).subscribe(()=>{this.pageToken="",this.sessionList=[],this.refreshSessionsSubject.next()}),this.refreshSessionsSubject.pipe(oi(()=>{this.uiStateService.setIsSessionListLoading(!0)}),Si(()=>{let e=this.filterControl.value||void 0;return this.isSessionFilteringEnabled?this.sessionService.listSessions(this.userId,this.appName,{filter:e,pageToken:this.pageToken,pageSize:this.SESSIONS_PAGE_LIMIT}).pipe(ta(()=>se({items:[],nextPageToken:""}))):this.sessionService.listSessions(this.userId,this.appName).pipe(ta(()=>se({items:[],nextPageToken:""})))}),oi(({items:e,nextPageToken:A})=>{this.sessionList=Array.from(new Map([...this.sessionList,...e].map(i=>[i.id,i])).values()).sort((i,n)=>Number(n.lastUpdateTime)-Number(i.lastUpdateTime)),this.pageToken=A??"",this.canLoadMoreSessions=!!A,this.changeDetectorRef.markForCheck()})).subscribe(()=>{this.isLoadingMoreInProgress.set(!1),this.uiStateService.setIsSessionListLoading(!1)},()=>{this.isLoadingMoreInProgress.set(!1),this.uiStateService.setIsSessionListLoading(!1)}),this.getSessionSubject.pipe(oi(()=>{this.uiStateService.setIsSessionLoading(!0)}),f2(this.featureFlagService.isInfinityMessageScrollingEnabled()),Si(([e,A])=>this.sessionService.getSession(this.userId,this.appName,e).pipe(fe(i=>({response:i,isInfinityScrollingEnabled:A}))).pipe(ta(()=>se(null)))),oi(e=>{if(!e)return;let A=this.fromApiResultToSession(e.response);e.isInfinityScrollingEnabled&&A.id&&this.uiStateService.lazyLoadMessages(A.id,{pageSize:100,pageToken:""}).pipe(zo()).subscribe(),this.sessionSelected.emit(A),this.changeDetectorRef.markForCheck()})).subscribe(e=>{this.uiStateService.setIsSessionLoading(!1)},e=>{this.uiStateService.setIsSessionLoading(!1)}),this.reloadSessionSubject.pipe(f2(this.featureFlagService.isInfinityMessageScrollingEnabled()),Si(([e,A])=>this.sessionService.getSession(this.userId,this.appName,e).pipe(fe(i=>({response:i,isInfinityScrollingEnabled:A}))).pipe(ta(()=>se(null)))),oi(e=>{if(!e)return;let A=this.fromApiResultToSession(e.response);e.isInfinityScrollingEnabled&&A.id&&this.uiStateService.lazyLoadMessages(A.id,{pageSize:100,pageToken:""},!0).pipe(zo()).subscribe(),this.sessionReloaded.emit(A),this.changeDetectorRef.markForCheck()})).subscribe()}ngOnInit(){this.featureFlagService.isSessionFilteringEnabled().subscribe(e=>{if(e){let A=this.route.snapshot.queryParams.session;A&&this.filterControl.setValue(A)}}),setTimeout(()=>{this.refreshSessionsSubject.next()},500)}getSession(e){this.getSessionSubject.next(e)}loadMoreSessions(){this.isLoadingMoreInProgress.set(!0),this.refreshSessionsSubject.next()}getDate(e){let A=e.lastUpdateTime;return new Date(A*1e3).toLocaleString()}fromApiResultToSession(e){return{id:e?.id??"",appName:e?.appName??"",userId:e?.userId??"",state:e?.state??[],events:e?.events??[]}}reloadSession(e){this.reloadSessionSubject.next(e)}refreshSession(e){let A=null;if(this.sessionList.length>0){let i=this.sessionList.findIndex(n=>n.id==e);i==this.sessionList.length-1&&(i=-1),A=this.sessionList[i+1]}return this.isSessionFilteringEnabled?this.filterControl.setValue(""):(this.sessionList=[],this.refreshSessionsSubject.next()),A}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-session-tab"]],inputs:{userId:"userId",appName:"appName",sessionId:"sessionId"},outputs:{sessionSelected:"sessionSelected",sessionReloaded:"sessionReloaded"},decls:8,vars:7,consts:[[1,"session-wrapper"],[1,"session-filter-container"],[1,"loading-spinner-container"],[1,"empty-state"],["appearance","outline",1,"session-filter"],["matPrefix",""],["matInput","",3,"formControl"],["mode","indeterminate"],[1,"session-tab-container",2,"margin-top","16px"],[3,"ngClass"],[3,"click","ngClass"],[1,"session-info"],[1,"session-id"],[1,"session-date"],[1,"readonly-badge"],[1,"load-more"],["mat-button","","color","primary",3,"click"]],template:function(A,i){if(A&1&&(m(0,"div",0),V(1,NzA,7,2,"div",1),ri(2,"async"),Ur(3),ri(4,"async"),V(5,FzA,2,0,"div",2)(6,_zA,2,1,"div",3)(7,JzA,5,3),w()),A&2){p(),W(Ci(2,2,i.isSessionFilteringEnabled)?1:-1),p(2);let n=_g(Ci(4,4,i.uiStateService.isSessionListLoading()));p(2),W(n&&!i.isLoadingMoreInProgress()?5:!n&&i.sessionList.length===0?6:7)}},dependencies:[gs,v7,Fn,Yr,No,Gg,S9,gl,wa,Nn,uo,fo,r0,v1,Ns,fn,Il,ls],styles:[".session-wrapper[_ngcontent-%COMP%]{padding-left:25px;padding-right:25px;font-size:14px;font-weight:700;color:var(--session-tab-session-wrapper-color);display:flex;flex-direction:column;overflow:hidden;height:100%}.session-wrapper[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{color:initial;padding-top:1em;text-align:center;font-weight:400;font-style:italic}.session-wrapper[_ngcontent-%COMP%] .session-filter-container[_ngcontent-%COMP%]{background-color:var(--session-tab-session-filter-container-background-color);border-radius:8px;padding:16px;margin-bottom:16px;margin-top:16px}.session-wrapper[_ngcontent-%COMP%] .session-filter[_ngcontent-%COMP%]{width:100%}.session-wrapper[_ngcontent-%COMP%] .session-filter[_ngcontent-%COMP%] .mdc-floating-label--float-above{background-color:var(--session-tab-session-filter-container-background-color)}.session-tab-container[_ngcontent-%COMP%]{flex:1;overflow-y:auto}.session-item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;border:none;background-color:var(--session-tab-session-item-background-color);border-radius:8px;margin-bottom:4px;cursor:pointer}.session-item[_ngcontent-%COMP%]:hover{background-color:var(--session-tab-session-item-hover-background-color)}.session-item.current[_ngcontent-%COMP%]{background-color:var(--session-tab-session-item-current-background-color)}.session-item[_ngcontent-%COMP%] mat-chip[_ngcontent-%COMP%]{margin-right:11px}.session-id[_ngcontent-%COMP%]{color:var(--session-tab-session-id-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:.25px}.session-date[_ngcontent-%COMP%]{color:var(--session-tab-session-date-color);font-family:Roboto;font-size:12px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.3px}.session-info[_ngcontent-%COMP%]{padding:11px}.loading-spinner-container[_ngcontent-%COMP%]{margin-left:auto;margin-right:auto;margin-top:2em;width:100%}.load-more[_ngcontent-%COMP%]{display:flex;justify-content:center;margin-top:1em}.readonly-badge[_ngcontent-%COMP%]{color:var(--chat-readonly-badge-color);background-color:var(--chat-readonly-badge-background-color);border-radius:4px;padding:1px 6px;display:flex;align-items:center;margin-right:8px;font-size:12px;line-height:16px;gap:4px;white-space:nowrap}.readonly-badge[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;padding-top:1px;flex-shrink:0}"]})};var YzA={stateIsEmpty:"State is empty"},ygA=new yA("State Tab Messages",{factory:()=>YzA});function TzA(t,e){if(t&1&&(m(0,"div",1),K(1),w()),t&2){let A=v();p(),qA(A.i18n.stateIsEmpty)}}function HzA(t,e){if(t&1&&(m(0,"div"),GA(1,"ngx-json-viewer",2),w()),t&2){let A=v();p(),$("json",A.sessionState)}}var X7=class t{sessionState={};i18n=h(ygA);get isEmptyState(){return!this.sessionState||Object.keys(this.sessionState).length===0}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-state-tab"]],inputs:{sessionState:"sessionState"},decls:3,vars:1,consts:[[1,"state-wrapper"],[1,"empty-state"],[3,"json"]],template:function(A,i){A&1&&(m(0,"div",0),V(1,TzA,2,1,"div",1)(2,HzA,2,1,"div"),w()),A&2&&(p(),W(i.isEmptyState?1:2))},dependencies:[E0,Y2],styles:[".state-wrapper[_ngcontent-%COMP%]{padding-left:25px;padding-right:25px;margin-top:16px}.state-wrapper[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{text-align:center;font-style:italic}"]})};function zzA(t,e){t&1&&Di(0,"div",8)}function OzA(t,e){if(t&1&&(li(0,"span",14),K(1),Ei()),t&2){let A=v().$implicit,i=v();wn("left",i.getRelativeStart(A.span)+5,"%"),p(),Se("",(i.toMs(A.span.end_time)-i.toMs(A.span.start_time)).toFixed(2),"ms")}}function PzA(t,e){if(t&1){let A=JA();li(0,"div",5),p2("click",function(){let n=Z(A).$implicit,o=v();return X(o.selectRow(n))})("mouseenter",function(){let n=Z(A).$implicit,o=v();return X(o.onHover(n))})("mouseleave",function(){Z(A);let n=v();return X(n.onHoverOut())}),li(1,"div",6)(2,"div",7),Ut(3,zzA,1,0,"div",8,wB),Ei(),li(5,"span",9),K(6),Ei(),li(7,"div",10),K(8),Ei()(),li(9,"div",11)(10,"div",12),K(11),Ei(),V(12,OzA,2,3,"span",13),Ei()()}if(t&2){let A=e.$implicit,i=v();ne("selected",i.rowSelected(A)),p(3),Jt(i.getArray(A.level)),p(2),ne("is-event-row",i.isEventRow(A)),p(),Se(" ",i.getSpanIcon(A.span.name)," "),p(),wn("width",400-A.level*20,"px"),ne("is-event-row",i.isEventRow(A)),p(),Se(" ",A.span.name," "),p(2),wn("left",i.getRelativeStart(A.span),"%")("width",i.getRelativeWidth(A.span),"%"),p(),Se(" ",(i.toMs(A.span.end_time)-i.toMs(A.span.start_time)).toFixed(2),"ms "),p(),W(i.getRelativeWidth(A.span)<10?12:-1)}}var $7=class t{spans=[];invocationId="";tree=[];eventData;baseStartTimeMs=0;totalDurationMs=1;flatTree=[];traceLabelIconMap=new Map([["Invocation","start"],["agent_run","robot"],["invoke_agent","robot_2"],["tool","build"],["execute_tool","build"],["call_llm","chat"]]);selectedRow=void 0;traceService=h(T2);constructor(){}ngOnInit(){this.tree=this.buildSpanTree(this.spans),this.flatTree=this.flattenTree(this.tree);let e=this.getGlobalTimes(this.spans);this.baseStartTimeMs=e.start,this.totalDurationMs=e.duration,this.traceService.selectedTraceRow$.subscribe(A=>this.selectedRow=A),this.traceService.eventData$.subscribe(A=>this.eventData=A)}buildSpanTree(e){let A=e.map(o=>cA({},o)),i=new Map,n=[];return A.forEach(o=>i.set(o.span_id,o)),A.forEach(o=>{if(o.parent_span_id&&i.has(o.parent_span_id)){let a=i.get(o.parent_span_id);a.children=a.children||[],a.children.push(o)}else n.push(o)}),n}getGlobalTimes(e){let A=Math.min(...e.map(n=>this.toMs(n.start_time))),i=Math.max(...e.map(n=>this.toMs(n.end_time)));return{start:A,duration:i-A}}toMs(e){return e/1e6}getRelativeStart(e){return(this.toMs(e.start_time)-this.baseStartTimeMs)/this.totalDurationMs*100}getRelativeWidth(e){return(this.toMs(e.end_time)-this.toMs(e.start_time))/this.totalDurationMs*100}flattenTree(e,A=0){return e.flatMap(n=>[{span:n,level:A},...n.children?this.flattenTree(n.children,A+1):[]])}getSpanIcon(e){for(let[A,i]of this.traceLabelIconMap.entries())if(e.startsWith(A))return i;return"start"}getArray(e){return Array.from({length:e})}selectRow(e){if(this.selectedRow&&this.selectedRow.span_id==e.span.span_id){this.traceService.selectedRow(void 0),this.traceService.setHoveredMessages(void 0,this.invocationId);return}this.traceService.selectedRow(e.span),this.traceService.setHoveredMessages(e.span,this.invocationId)}rowSelected(e){return this.selectedRow==e.span}isEventRow(e){if(!e.span.attributes)return!1;let A=e?.span.attributes["gcp.vertex.agent.event_id"];return!!(A&&this.eventData&&this.eventData.has(A))}onHover(e){this.traceService.setHoveredMessages(e.span,this.invocationId)}onHoverOut(){this.traceService.setHoveredMessages(void 0,this.invocationId),this.selectedRow&&this.traceService.setHoveredMessages(this.selectedRow,this.invocationId)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-trace-tree"]],inputs:{spans:"spans",invocationId:"invocationId"},decls:8,vars:1,consts:[[2,"margin-top","15px"],[1,"invocation-id-container"],[1,"invocation-id"],[1,"trace-container"],[1,"trace-row",3,"selected"],[1,"trace-row",3,"click","mouseenter","mouseleave"],[1,"trace-row-left"],[1,"trace-indent"],[1,"indent-connector"],[1,"material-symbols-outlined",2,"margin-right","8px"],[1,"trace-label"],[1,"trace-bar-container"],[1,"trace-bar"],[1,"short-trace-bar-duration",3,"left"],[1,"short-trace-bar-duration"]],template:function(A,i){A&1&&(li(0,"div",0)(1,"div",1),K(2,"Invocation ID: "),li(3,"div",2),K(4),Ei()(),li(5,"div",3),Ut(6,PzA,13,16,"div",4,Li),Ei()()),A&2&&(p(4),qA(i.invocationId),p(2),Jt(i.flatTree))},styles:[".trace-container[_ngcontent-%COMP%]{width:100%;white-space:nowrap;font-size:12px}.trace-label[_ngcontent-%COMP%]{width:400px;color:var(--trace-tree-trace-label-color);font-family:Google Sans Mono,monospace;font-size:13px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:0px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.trace-bar-container[_ngcontent-%COMP%]{width:100%;position:relative;height:16px}.trace-bar[_ngcontent-%COMP%]{position:absolute;height:18px;background-color:var(--trace-tree-trace-bar-background-color);border-radius:4px;padding-left:4px;overflow:hidden;font-size:11px;line-height:16px;color:var(--trace-tree-trace-bar-color);font-family:Google Sans}.short-trace-bar-duration[_ngcontent-%COMP%]{position:absolute;color:var(--trace-tree-short-trace-bar-duration-color)}.trace-duration[_ngcontent-%COMP%]{color:var(--trace-tree-trace-duration-color);font-weight:400;margin-left:4px}.trace-row[_ngcontent-%COMP%]{display:flex;align-items:stretch;position:relative;height:32px;align-items:center;cursor:pointer}.trace-row[_ngcontent-%COMP%]:hover{background-color:var(--trace-tree-trace-row-hover-background-color)}.trace-row.selected[_ngcontent-%COMP%]{background-color:var(--trace-tree-trace-row-selected-background-color)}.trace-indent[_ngcontent-%COMP%]{display:flex;flex-shrink:0;height:100%}.indent-connector[_ngcontent-%COMP%]{width:20px;position:relative;height:100%}.vertical-line[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:9px;width:1px;background-color:var(--trace-tree-vertical-line-background-color)}.horizontal-line[_ngcontent-%COMP%]{position:absolute;top:50%;left:9px;width:10px;height:1px;background-color:var(--trace-tree-horizontal-line-background-color)}.trace-row-left[_ngcontent-%COMP%]{display:flex;width:50%}.invocation-id-container[_ngcontent-%COMP%]{color:var(--trace-tree-invocation-id-container-color);font-size:14px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:0px;margin-bottom:5px}.invocation-id[_ngcontent-%COMP%]{font-family:Google Sans Mono,monospace}.trace-row-left[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .trace-row-left[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{color:var(--trace-tree-trace-row-left-span-div-color)}.trace-row-left[_ngcontent-%COMP%] .is-event-row[_ngcontent-%COMP%]{color:var(--trace-tree-trace-row-left-is-event-row-color)}"]})};var jzA={noInvocationsFound:"No invocations found",invocationsTitle:"Invocations"},vgA=new yA("Trace Tab Messages",{factory:()=>jzA});function qzA(t,e){if(t&1&&(m(0,"div",1),K(1),w()),t&2){let A=v();p(),qA(A.i18n.noInvocationsFound)}}function VzA(t,e){if(t&1&&(m(0,"div",4)(1,"mat-expansion-panel")(2,"mat-expansion-panel-header")(3,"mat-panel-title"),K(4),w()(),GA(5,"app-trace-tree",5),w()()),t&2){let A=e.$implicit,i=v(2);p(4),Se(" ",i.invocToUserMsg.get(A.key)," "),p(),$("spans",A.value)("invocationId",i.findInvocIdFromTraceId(A.key))}}function WzA(t,e){if(t&1&&(m(0,"h2",2),K(1),w(),m(2,"div",3),Ut(3,VzA,6,3,"div",4,Li),ri(5,"keyvalue"),w()),t&2){let A=v();p(),qA(A.i18n.invocationsTitle),p(2),Jt(yU(5,1,A.invocTraces,A.mapOrderPreservingSort))}}var Ab=class t{traceData=[];invocTraces=new Map;invocToUserMsg=new Map;i18n=h(vgA);constructor(){}ngOnInit(){}ngOnChanges(e){"traceData"in e&&this.rebuildTrace()}rebuildTrace(){this.invocTraces=this.traceData.reduce((e,A)=>{let i=A.trace_id,n=e.get(i);return n?(n.push(A),n.sort((o,a)=>o.start_time-a.start_time)):e.set(i,[A]),e},new Map);for(let[e,A]of this.invocTraces)this.invocToUserMsg.set(e,this.findUserMsgFromInvocGroup(A))}getArray(e){return Array.from({length:e})}findUserMsgFromInvocGroup(e){let A=e?.find(i=>i.attributes!==void 0&&"gcp.vertex.agent.invocation_id"in i.attributes&&"gcp.vertex.agent.llm_request"in i.attributes);if(!A)return"[no invocation id found]";try{return JSON.parse(A.attributes["gcp.vertex.agent.llm_request"]).contents.filter(o=>o.role=="user").at(-1)?.parts[0]?.text??"[attachment]"}catch{return"[error parsing request]"}}findInvocIdFromTraceId(e){return this.invocTraces.get(e)?.find(i=>i.attributes!==void 0&&"gcp.vertex.agent.invocation_id"in i.attributes).attributes["gcp.vertex.agent.invocation_id"]}mapOrderPreservingSort=(e,A)=>0;static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-trace-tab"]],inputs:{traceData:"traceData"},features:[ti],decls:3,vars:1,consts:[[1,"trace-wrapper"],[1,"empty-state"],["mat-dialog-title","",1,"trace-title"],[1,"trace-list-wrapper"],[1,"trace-item"],[3,"spans","invocationId"]],template:function(A,i){A&1&&(m(0,"div",0),V(1,qzA,2,1,"div",1)(2,WzA,6,4),w()),A&2&&(p(),W(i.invocTraces.size===0?1:2))},dependencies:[Da,Zk,LO,GO,$7,Bp],styles:[".trace-wrapper[_ngcontent-%COMP%]{padding-left:25px;padding-right:25px}.trace-wrapper[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%]{padding-top:1em;text-align:center;font-style:italic}.trace-container[_ngcontent-%COMP%]{width:100%;white-space:nowrap;font-size:12px}.trace-title[_ngcontent-%COMP%]{color:var(--trace-tab-trace-title-color);font-size:14px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:0px}.trace-label[_ngcontent-%COMP%]{width:400px;color:var(--trace-tab-trace-label-color);text-overflow:ellipsis;font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:0px}.trace-bar-container[_ngcontent-%COMP%]{width:50vw;position:relative;height:16px}.trace-bar[_ngcontent-%COMP%]{position:absolute;height:18px;background-color:var(--trace-tab-trace-bar-background-color);border-radius:4px;padding-left:4px;overflow:hidden;font-size:11px;line-height:16px;color:var(--trace-tab-trace-bar-color);font-family:Google Sans}.trace-duration[_ngcontent-%COMP%]{color:var(--trace-tab-trace-duration-color);font-weight:400;margin-left:4px}.trace-row[_ngcontent-%COMP%]{display:flex;align-items:stretch;position:relative;height:32px}.trace-indent[_ngcontent-%COMP%]{display:flex;flex-shrink:0;height:100%}.indent-connector[_ngcontent-%COMP%]{width:20px;position:relative;height:100%}.vertical-line[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:9px;width:1px;background-color:var(--trace-tab-vertical-line-background-color)}.horizontal-line[_ngcontent-%COMP%]{position:absolute;top:50%;left:9px;width:10px;height:1px;background-color:var(--trace-tab-horizontal-line-background-color)}.trace-item[_ngcontent-%COMP%]{margin-top:5px;--mat-expansion-container-background-color: var(--trace-tab-trace-item-container-background-color);--mat-expansion-header-focus-state-layer-color: var(--trace-tab-trace-item-header-focus-state-layer-color);--mat-expansion-header-description-color: var(--trace-tab-trace-item-header-description-color);--mat-expansion-header-text-size: 15}.trace-item[_ngcontent-%COMP%] .mat-expansion-panel-header.mat-expanded:focus{background-color:var(--trace-tab-mat-expansion-panel-header-focus-background-color)}.trace-item[_ngcontent-%COMP%] .mat-expansion-panel-header.mat-expanded{background-color:var(--trace-tab-mat-expansion-panel-header-background-color)}.trace-item[_ngcontent-%COMP%] .mat-expansion-panel-header.mat-expanded:hover{background-color:var(--trace-tab-mat-expansion-panel-header-hover-background-color)} .mat-expansion-panel-header-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden} .mat-expansion-panel-header-description{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}"]})};var ZzA={agentDevelopmentKitLabel:"Agent Development Kit",collapsePanelTooltip:"Collapse panel",traceTabLabel:"Trace",eventsTabLabel:"Events",stateTabLabel:"State",artifactsTabLabel:"Artifacts",sessionsTabLabel:"Sessions",evalTabLabel:"Eval",selectEventAriaLabel:"Select event",eventDetailsTabLabel:"Event",requestDetailsTabLabel:"Request",responseDetailsTabLabel:"Response",responseIsNotAvailable:"Response is not available",requestIsNotAvailable:"Request is not available"},bgA=new yA("Side Panel Messages",{factory:()=>ZzA});var XzA=["evalTabContainer"];function $zA(t,e){t&1&&on(0)}function AOA(t,e){if(t&1&&(m(0,"div"),pt(1,$zA,1,0,"ng-container",13),m(2,"div",14),K(3,"Powered by Agent Development Kit"),w()()),t&2){let A=v(2);p(),$("ngComponentOutlet",A.logoComponent)}}function eOA(t,e){if(t&1&&(GA(0,"img",15),K(1)),t&2){let A=v(2);p(),Se(" ",A.i18n.agentDevelopmentKitLabel," ")}}function tOA(t,e){if(t&1&&(m(0,"mat-option",21),K(1),w()),t&2){let A=e.$implicit;$("value",A),p(),qA(A)}}function iOA(t,e){t&1&&Ut(0,tOA,2,2,"mat-option",21,Li),t&2&&Jt(e)}function nOA(t,e){if(t&1&&(m(0,"mat-option",21),K(1),w()),t&2){let A=v(3);$("value",A.selectedAppControl().value),p(),qA(A.selectedAppControl().value)}}function oOA(t,e){if(t&1){let A=JA();m(0,"div",22)(1,"mat-icon",23),tA("click",function(){Z(A);let n=v(3);return X(n.openAddItemDialog.emit(!0))}),K(2,"add"),w(),m(3,"mat-icon",24),tA("click",function(){Z(A);let n=v(3);return X(!n.disableBuilderIcon()&&n.enterBuilderMode.emit(!0))}),K(4,"edit"),w()()}if(t&2){let A=v(3);p(3),wn("cursor",A.disableBuilderIcon()?"not-allowed":"pointer")("opacity",A.disableBuilderIcon()?"0.5":"1")("margin-right",32,"px"),$("matTooltip",A.disableBuilderIcon()?"This agent was not built by builder":"Edit in Builder Mode")}}function aOA(t,e){if(t&1){let A=JA();m(0,"div",12)(1,"div",16)(2,"mat-select",17),tA("selectionChange",function(n){Z(A);let o=v(2);return X(o.appSelectionChange.emit(n))})("openedChange",function(){Z(A);let n=v(2);return X(n.agentSearchControl.setValue(""))}),m(3,"mat-option",18),tA("click",function(n){return Z(A),X(n.stopPropagation())}),m(4,"mat-form-field",19),tA("click",function(n){return Z(A),X(n.stopPropagation())}),m(5,"input",20),tA("click",function(n){return Z(A),X(n.stopPropagation())})("keydown",function(n){return Z(A),X(n.stopPropagation())}),w()()(),V(6,iOA,2,0),ri(7,"async"),V(8,nOA,2,2,"mat-option",21),w()(),V(9,oOA,5,7,"div",22),w()}if(t&2){let A,i=v(2);p(2),$("placeholder",i.isLoadingApps()()?"Loading...":"Select an agent")("formControl",i.selectedAppControl()),p(),$("value",null),p(2),$("formControl",i.agentSearchControl),p(),W((A=Ci(7,7,i.filteredApps$))?6:-1,A),p(2),W(i.selectedAppControl().value&&i.isLoadingApps()()?8:-1),p(),W(i.isBuilderMode()?-1:9)}}function rOA(t,e){if(t&1){let A=JA();m(0,"div",6)(1,"div",7)(2,"div",8)(3,"div",9),V(4,AOA,4,1,"div")(5,eOA,2,1),w(),m(6,"div",10),GA(7,"app-theme-toggle"),m(8,"span",11),tA("click",function(){Z(A);let n=v();return X(n.closePanel.emit())}),K(9,"left_panel_close"),w()()()()(),V(10,aOA,10,9,"div",12),ri(11,"async")}if(t&2){let A=v();p(4),W(A.logoComponent?4:5),p(4),$("matTooltip",D1(A.i18n.collapsePanelTooltip)),p(2),W(Ci(11,4,A.isApplicationSelectorEnabledObs())?10:-1)}}function sOA(t,e){t&1&&(m(0,"div",2),GA(1,"mat-progress-spinner",25),w())}function gOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.sessionsTabLabel)}}function lOA(t,e){t&1&&on(0)}function cOA(t,e){if(t&1&&(m(0,"mat-tab",27),pt(1,gOA,2,1,"ng-template",28)(2,lOA,1,0,"ng-container",30),w()),t&2){v();let A=An(16);p(2),$("ngTemplateOutlet",A)}}function COA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.traceTabLabel)}}function IOA(t,e){if(t&1&&(m(0,"mat-tab",27),pt(1,COA,2,1,"ng-template",28),GA(2,"app-trace-tab",32),w()),t&2){let A=v(2);p(2),$("traceData",A.traceData())}}function dOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(2);p(),qA(A.i18n.stateTabLabel)}}function BOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.artifactsTabLabel)}}function EOA(t,e){if(t&1&&(m(0,"mat-tab"),pt(1,BOA,2,1,"ng-template",28),GA(2,"app-artifact-tab",33),w()),t&2){let A=v(2);p(2),$("artifacts",A.artifacts())}}function QOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.sessionsTabLabel)}}function hOA(t,e){t&1&&on(0)}function uOA(t,e){if(t&1&&(m(0,"mat-tab",27),pt(1,QOA,2,1,"ng-template",28)(2,hOA,1,0,"ng-container",30),w()),t&2){v();let A=An(16);p(2),$("ngTemplateOutlet",A)}}function fOA(t,e){if(t&1&&(m(0,"span",31),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.evalTabLabel)}}function mOA(t,e){t&1&&(m(0,"mat-tab"),pt(1,fOA,2,1,"ng-template",28),on(2,null,1),w())}function pOA(t,e){if(t&1){let A=JA();m(0,"app-session-tab",34),tA("sessionSelected",function(n){Z(A);let o=v(2);return X(o.sessionSelected.emit(n))})("sessionReloaded",function(n){Z(A);let o=v(2);return X(o.sessionReloaded.emit(n))}),w()}if(t&2){let A=v(2);$("userId",A.userId())("appName",A.appName())("sessionId",A.sessionId())}}function wOA(t,e){if(t&1){let A=JA();m(0,"div",3)(1,"mat-tab-group",26),tA("selectedTabChange",function(n){Z(A);let o=v();return X(o.tabChange.emit(n))}),Ur(2),ri(3,"async"),V(4,cOA,3,1,"mat-tab",27),V(5,IOA,3,1,"mat-tab",27),ri(6,"async"),m(7,"mat-tab"),pt(8,dOA,2,1,"ng-template",28),GA(9,"app-state-tab",29),w(),V(10,EOA,3,1,"mat-tab"),ri(11,"async"),V(12,uOA,3,1,"mat-tab",27),V(13,mOA,4,0,"mat-tab"),ri(14,"async"),w(),pt(15,pOA,1,3,"ng-template",null,0,w2),w()}if(t&2){let A=v(),i=Vs(2);$("hidden",i);let n=Ci(3,7,A.isSessionsTabReorderingEnabledObs);p(4),W(n?4:-1),p(),W(Ci(6,9,A.isTraceEnabledObs)?5:-1),p(4),$("sessionState",A.currentSessionState()),p(),W(Ci(11,11,A.isArtifactsTabEnabledObs)?10:-1),p(2),W(n?-1:12),p(),W(Ci(14,13,A.isEvalEnabledObs)?13:-1)}}function DOA(t,e){if(t&1){let A=JA();m(0,"div",47),tA("click",function(){Z(A);let n=v(3);return X(n.openImageDialog.emit(n.rawSvgString()))}),w()}if(t&2){let A=v(3);$("innerHtml",A.renderedEventGraph(),al)}}function yOA(t,e){if(t&1&&(m(0,"div",41),V(1,DOA,1,1,"div",46),w()),t&2){let A=v(2);p(),W(A.renderedEventGraph()?1:-1)}}function vOA(t,e){t&1&&(m(0,"div",48),GA(1,"mat-progress-spinner",25),w())}function bOA(t,e){if(t&1&&(m(0,"div",49),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.requestIsNotAvailable)}}function MOA(t,e){if(t&1&&(m(0,"div",42),GA(1,"ngx-json-viewer",43),w()),t&2){let A=v(3);p(),$("json",A.llmRequest())}}function kOA(t,e){if(t&1&&(m(0,"mat-tab",40),V(1,vOA,2,0,"div",48),ri(2,"async"),aC(3,bOA,2,1,"div",49)(4,MOA,2,1,"div",42),w()),t&2){let A=v(2);$("label",D1(A.i18n.requestDetailsTabLabel)),p(),W(Ci(2,3,A.uiStateService.isEventRequestResponseLoading())===!0?1:A.llmRequest()?4:3)}}function SOA(t,e){t&1&&(m(0,"div",48),GA(1,"mat-progress-spinner",25),w())}function xOA(t,e){if(t&1&&(m(0,"div",49),K(1),w()),t&2){let A=v(3);p(),qA(A.i18n.responseIsNotAvailable)}}function ROA(t,e){if(t&1&&(m(0,"div",42),GA(1,"ngx-json-viewer",43),w()),t&2){let A=v(3);p(),$("json",A.llmResponse())}}function NOA(t,e){if(t&1&&(m(0,"mat-tab",40),V(1,SOA,2,0,"div",48),ri(2,"async"),aC(3,xOA,2,1,"div",49)(4,ROA,2,1,"div",42),w()),t&2){let A=v(2);$("label",D1(A.i18n.responseDetailsTabLabel)),p(),W(Ci(2,3,A.uiStateService.isEventRequestResponseLoading())===!0?1:A.llmResponse()?4:3)}}function FOA(t,e){if(t&1&&(m(0,"mat-tab",44)(1,"div",42),GA(2,"ngx-json-viewer",43),w()()),t&2){let A,i=v(2);p(2),$("json",(A=i.selectedEvent())==null||A.actions==null?null:A.actions.stateDelta)}}function _OA(t,e){if(t&1&&(m(0,"mat-tab",45),GA(1,"app-artifact-tab",33),w()),t&2){let A=v(2);p(),$("artifacts",A.artifactDeltaArray())}}function LOA(t,e){if(t&1){let A=JA();m(0,"div",4)(1,"div",35)(2,"div",36)(3,"mat-paginator",37),tA("page",function(n){Z(A);let o=v();return X(o.page.emit(n))}),w(),m(4,"button",38)(5,"mat-icon",39),tA("click",function(){Z(A);let n=v();return X(n.closeSelectedEvent.emit())}),K(6,"close"),w()()()(),m(7,"div")(8,"mat-tab-group")(9,"mat-tab",40),V(10,yOA,2,1,"div",41),m(11,"div",42),GA(12,"ngx-json-viewer",43),w()(),V(13,kOA,5,5,"mat-tab",40),ri(14,"async"),V(15,NOA,5,5,"mat-tab",40),ri(16,"async"),V(17,FOA,3,1,"mat-tab",44),V(18,_OA,2,1,"mat-tab",45),w()()()}if(t&2){let A,i,n,o=v(),a=Vs(2);$("hidden",a),p(3),$("length",o.eventData().size)("pageSize",1)("pageIndex",o.selectedEventIndex()),ie("aria-label",o.i18n.selectEventAriaLabel),p(6),$("label",D1(o.i18n.eventDetailsTabLabel)),p(),W(((A=o.selectedEvent())==null?null:A.author)!=="user"?10:-1),p(2),$("json",o.selectedEvent()),p(),W(Ci(14,13,o.uiStateService.isEventRequestResponseLoading())===!0||o.llmRequest()&&o.Object.keys(o.llmRequest()).length>0?13:-1),p(2),W(Ci(16,15,o.uiStateService.isEventRequestResponseLoading())===!0||o.llmResponse()&&o.Object.keys(o.llmResponse()).length>0?15:-1),p(2),W(!((i=o.selectedEvent())==null||i.actions==null)&&i.actions.stateDelta&&o.Object.keys((i=o.selectedEvent())==null||i.actions==null?null:i.actions.stateDelta).length>0?17:-1),p(),W(!((n=o.selectedEvent())==null||n.actions==null)&&n.actions.artifactDelta&&o.Object.keys((n=o.selectedEvent())==null||n.actions==null?null:n.actions.artifactDelta).length>0?18:-1)}}var $h=class t{Object=Object;appName=rt("");userId=rt("");sessionId=rt("");traceData=rt([]);eventData=rt(new Map);currentSessionState=rt();artifacts=rt([]);selectedEvent=rt();selectedEventIndex=rt();renderedEventGraph=rt();rawSvgString=rt(null);llmRequest=rt();llmResponse=rt();showSidePanel=rt(!1);isApplicationSelectorEnabledObs=rt(se(!1));apps$=rt(se([]));isLoadingApps=rt(jA(!1));selectedAppControl=rt(new ks("",{nonNullable:!0}));isBuilderMode=rt(!1);disableBuilderIcon=rt(!1);closePanel=jo();appSelectionChange=jo();tabChange=jo();sessionSelected=jo();sessionReloaded=jo();evalCaseSelected=jo();evalSetIdSelected=jo();returnToSession=jo();evalNotInstalled=jo();page=jo();closeSelectedEvent=jo();openImageDialog=jo();openAddItemDialog=jo();enterBuilderMode=jo();sessionTabComponent=ca(Xh);evalTabComponent=ca($c);evalTabContainer=ca("evalTabContainer",{read:Oo});logoComponent=h(Z7,{optional:!0});i18n=h(bgA);featureFlagService=h(vr);evalTabComponentClass=h(P7,{optional:!0});environmentInjector=h(Gr);uiStateService=h(Ql);destroyRef=h(qa);isAlwaysOnSidePanelEnabledObs=this.featureFlagService.isAlwaysOnSidePanelEnabled();isTraceEnabledObs=this.featureFlagService.isTraceEnabled();isArtifactsTabEnabledObs=this.featureFlagService.isArtifactsTabEnabled();isEvalEnabledObs=this.featureFlagService.isEvalEnabled();isTokenStreamingEnabledObs=this.featureFlagService.isTokenStreamingEnabled();isMessageFileUploadEnabledObs=this.featureFlagService.isMessageFileUploadEnabled();isManualStateUpdateEnabledObs=this.featureFlagService.isManualStateUpdateEnabled();isBidiStreamingEnabledObs=this.featureFlagService.isBidiStreamingEnabled;isSessionsTabReorderingEnabledObs=this.featureFlagService.isSessionsTabReorderingEnabled();agentSearchControl=new ks("",{nonNullable:!0});filteredApps$=$n(this.apps$).pipe(Si(e=>Ir([e,this.agentSearchControl.valueChanges.pipe(cn(""))])),fe(([e,A])=>{if(!e||!A||A.trim()==="")return e;let i=A.toLowerCase().trim();return e.filter(n=>n.toLowerCase().startsWith(i))}));artifactDeltaArray=Ue(()=>{let e=this.selectedEvent()?.actions?.artifactDelta;if(!e||Object.keys(e).length===0)return[];let A=[];for(let[i,n]of Object.entries(e))A.push({id:i,versionId:1,data:n.data||"",mimeType:n.mimeType||"",mediaType:O4(n.mimeType||"")});return A});ngAfterViewInit(){setTimeout(()=>{this.initEvalTab()},500)}initEvalTab(){this.isEvalEnabledObs.pipe(zo()).subscribe(e=>{if(e){let A=this.evalTabContainer()?.createComponent(this.evalTabComponentClass??$c,{environmentInjector:this.environmentInjector});if(!A)return;or(this.environmentInjector,()=>{Ga(()=>{A.setInput("appName",this.appName()),A.setInput("userId",this.userId()),A.setInput("sessionId",this.sessionId())})}),A.instance.sessionSelected.subscribe(i=>{this.sessionSelected.emit(i)}),A.instance.evalCaseSelected.subscribe(i=>{this.evalCaseSelected.emit(i)}),A.instance.evalSetIdSelected.subscribe(i=>{this.evalSetIdSelected.emit(i)}),A.instance.shouldReturnToSession.subscribe(i=>{this.returnToSession.emit(i)}),A.instance.evalNotInstalledMsg.subscribe(i=>{this.evalNotInstalled.emit(i)})}})}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-side-panel"]],viewQuery:function(A,i){A&1&&rs(i.sessionTabComponent,Xh,5)(i.evalTabComponent,$c,5)(i.evalTabContainer,XzA,5,Oo),A&2&&Dr(3)},inputs:{appName:[1,"appName"],userId:[1,"userId"],sessionId:[1,"sessionId"],traceData:[1,"traceData"],eventData:[1,"eventData"],currentSessionState:[1,"currentSessionState"],artifacts:[1,"artifacts"],selectedEvent:[1,"selectedEvent"],selectedEventIndex:[1,"selectedEventIndex"],renderedEventGraph:[1,"renderedEventGraph"],rawSvgString:[1,"rawSvgString"],llmRequest:[1,"llmRequest"],llmResponse:[1,"llmResponse"],showSidePanel:[1,"showSidePanel"],isApplicationSelectorEnabledObs:[1,"isApplicationSelectorEnabledObs"],apps$:[1,"apps$"],isLoadingApps:[1,"isLoadingApps"],selectedAppControl:[1,"selectedAppControl"],isBuilderMode:[1,"isBuilderMode"],disableBuilderIcon:[1,"disableBuilderIcon"]},outputs:{closePanel:"closePanel",appSelectionChange:"appSelectionChange",tabChange:"tabChange",sessionSelected:"sessionSelected",sessionReloaded:"sessionReloaded",evalCaseSelected:"evalCaseSelected",evalSetIdSelected:"evalSetIdSelected",returnToSession:"returnToSession",evalNotInstalled:"evalNotInstalled",page:"page",closeSelectedEvent:"closeSelectedEvent",openImageDialog:"openImageDialog",openAddItemDialog:"openAddItemDialog",enterBuilderMode:"enterBuilderMode"},decls:8,vars:9,consts:[["sessionsTabBody",""],["evalTabContainer",""],[1,"loading-spinner-container"],[1,"tabs-container",3,"hidden"],[1,"details-panel-container",3,"hidden"],[1,"resize-handler"],[2,"margin-top","20px","margin-left","20px","display","flex"],[2,"width","100%"],[1,"drawer-header"],[1,"drawer-logo"],[2,"display","flex","align-items","center","gap","8px"],[1,"material-symbols-outlined",2,"color","#c4c7c5","cursor","pointer","margin-right","15px",3,"click","matTooltip"],[1,"app-actions"],[4,"ngComponentOutlet"],[1,"powered-by-adk"],["src","assets/ADK-512-color.svg","width","32px","height","32px"],[1,"app-select-container"],["panelClass","wide-agent-dropdown-panel",1,"app-select",3,"selectionChange","openedChange","placeholder","formControl"],[1,"search-option",3,"click","value"],["subscriptSizing","dynamic",1,"agent-search-field",3,"click"],["matInput","","placeholder","Search agents...",3,"click","keydown","formControl"],[1,"app-name-option",3,"value"],[1,"mode-toggle-container"],["matTooltip","Create new agent","matTooltipPosition","below",2,"cursor","pointer","margin-right","16px",3,"click"],[3,"click","matTooltip"],["mode","indeterminate","diameter","50"],[3,"selectedTabChange"],[1,"tabs-header"],["mat-tab-label",""],[3,"sessionState"],[4,"ngTemplateOutlet"],[1,"tab-label"],[3,"traceData"],[3,"artifacts"],[3,"sessionSelected","sessionReloaded","userId","appName","sessionId"],[1,"details-content"],[2,"display","flex","justify-content","flex-end","margin-top","10px"],[1,"event-paginator",3,"page","length","pageSize","pageIndex"],["mat-mini-fab",""],[3,"click"],[3,"label"],[1,"event-graph-container"],[1,"json-viewer-container"],[3,"json"],["label","State"],["label","Artifact"],[3,"innerHtml"],[3,"click","innerHtml"],[1,"request-response-loading-spinner-container"],[1,"request-response-empty-state"]],template:function(A,i){if(A&1&&(V(0,rOA,12,6),ri(1,"async"),Ur(2),ri(3,"async"),V(4,sOA,2,0,"div",2),V(5,wOA,17,15,"div",3),V(6,LOA,19,17,"div",4),GA(7,"div",5)),A&2){W(Ci(1,4,i.isAlwaysOnSidePanelEnabledObs)===!1?0:-1),p(2);let n=_g(Ci(3,6,i.uiStateService.isSessionLoading()));p(2),W(n?4:-1),p(),W(i.appName()!=""&&i.showSidePanel()?5:-1),p(),W(i.selectedEvent()&&i.showSidePanel()?6:-1)}},dependencies:[Nn,uo,fo,D2,sl,xa,W7,Om,NK,Lh,Ab,X7,sw,Xh,Rz,Tp,Fn,E0,Y2,Hr,Bl,r0,v1,B1,No,wa,ls],styles:[".drawer-header[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between;align-items:center;--mat-button-filled-container-color: var(--side-panel-button-filled-container-color);--mat-button-filled-label-text-color: var(--side-panel-button-filled-label-text-color)}.drawer-header[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{width:36px;height:36px;color:var(--side-panel-mat-icon-color);cursor:pointer;display:flex;align-items:center;justify-content:center}.tabs-container[_ngcontent-%COMP%]{width:100%;margin-top:20px}.tab-label[_ngcontent-%COMP%]{font-size:14px}.resize-handler[_ngcontent-%COMP%]{background:var(--side-panel-resize-handler-background-color);width:4px;border-radius:4px;position:absolute;display:block;height:20%;top:40%;right:0;z-index:9999;cursor:ew-resize}.json-viewer-container[_ngcontent-%COMP%]{margin:10px}.event-paginator[_ngcontent-%COMP%]{margin-top:-8px;margin-right:auto;background-color:inherit;display:flex;justify-content:center}[_nghost-%COMP%] .mat-mdc-paginator-page-size{display:none}.details-panel-container[_ngcontent-%COMP%]{position:absolute;width:100%;height:98%;left:0;right:0;bottom:0;background:var(--side-panel-details-panel-container-background-color);display:inline-block;justify-content:center;align-items:center;z-index:10}.details-content[_ngcontent-%COMP%]{color:var(--side-panel-details-content-color);font-size:14px}.event-graph-container[_ngcontent-%COMP%]{margin-top:16px;margin-bottom:16px;display:flex;justify-content:center;max-height:33%;cursor:pointer}.event-graph-container[_ngcontent-%COMP%] svg{width:100%;height:100%;display:block;object-fit:contain}.event-graph-container[_ngcontent-%COMP%] svg text{font-family:Google Sans Mono,monospace;font-size:11px}.drawer-logo[_ngcontent-%COMP%]{margin-left:9px;display:flex;align-items:center}.drawer-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:9px}.drawer-logo[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:.1px}.powered-by-adk[_ngcontent-%COMP%]{font-size:10px;color:var(--side-panel-powered-by-adk-color);text-align:right;margin-top:-5px}.app-select[_ngcontent-%COMP%]{width:100%}.app-select-container[_ngcontent-%COMP%]{width:60%;margin-top:12px;background-color:var(--side-panel-app-select-container-background-color);margin-left:10px;height:30px;display:flex;justify-content:space-between;padding-left:20px;padding-right:20px;border-radius:10px;padding-top:5px}.app-select-container[_ngcontent-%COMP%]{--mat-select-placeholder-text-color: var(--side-panel-select-placeholder-text-color);--mat-select-enabled-trigger-text-color: var(--side-panel-select-enabled-trigger-text-color);--mat-select-enabled-arrow-color: var(--side-panel-select-enabled-arrow-color)}.app-name-option[_ngcontent-%COMP%]{color:var(--side-panel-app-name-option-color);font-family:Google Sans Mono,monospace;font-style:normal;font-weight:400;padding-left:12px;padding-right:12px}.app-select[_ngcontent-%COMP%]{color:var(--side-panel-app-name-option-color);font-family:Google Sans Mono,monospace;font-style:normal;font-weight:400;padding-left:unset}.mode-toggle-container[_ngcontent-%COMP%]{display:flex;align-items:center;margin-right:20px}.build-mode-button[_ngcontent-%COMP%]{margin:0 4px}.build-mode-button.mat-mdc-unelevated-button[_ngcontent-%COMP%]{height:30px}.app-actions[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-top:12px;margin-left:10px}.loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;height:100%}.request-response-loading-spinner-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-top:2em}.request-response-empty-state[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-top:2em;font-style:italic}[_nghost-%COMP%] .mat-mdc-tooltip .mdc-tooltip__surface{max-width:250px;white-space:wrap;font-size:11px}[_nghost-%COMP%] .wide-agent-dropdown-panel{min-width:300px;max-width:600px;max-height:400px}[_nghost-%COMP%] .wide-agent-dropdown-panel .mat-mdc-option{white-space:normal;line-height:1.4;height:auto;min-height:48px;padding:8px 16px}[_nghost-%COMP%] .wide-agent-dropdown-panel .search-option{position:sticky!important;top:0!important;z-index:1000!important;background-color:var(--mat-select-panel-background-color, white)!important;padding:8px 16px!important;border-bottom:1px solid var(--mat-divider-color, rgba(0, 0, 0, .12));min-height:auto!important;height:auto!important;box-shadow:0 2px 4px #0000001a;opacity:1!important}[_nghost-%COMP%] .wide-agent-dropdown-panel .search-option:hover{background-color:var(--mat-select-panel-background-color, white)!important}[_nghost-%COMP%] .wide-agent-dropdown-panel .search-option.mat-mdc-option.mat-mdc-option-active{background-color:var(--mat-select-panel-background-color, white)!important}.agent-search-field[_ngcontent-%COMP%]{width:100%}.agent-search-field[_ngcontent-%COMP%] .mat-mdc-form-field-subscript-wrapper[_ngcontent-%COMP%]{display:none}"]})};function GOA(t,e){t&1&&GA(0,"mat-progress-spinner",6)}function KOA(t,e){t&1&&(m(0,"div"),K(1,"Request is not available."),w())}function UOA(t,e){if(t&1&&(m(0,"div",3),GA(1,"ngx-json-viewer",4),w()),t&2){let A=v();p(),$("json",A.llmRequest)}}function JOA(t,e){t&1&&GA(0,"mat-progress-spinner",6)}function YOA(t,e){t&1&&(m(0,"div"),K(1,"Response is not available."),w())}function TOA(t,e){if(t&1&&(m(0,"div",3),GA(1,"ngx-json-viewer",4),w()),t&2){let A=v();p(),$("json",A.llmResponse)}}function HOA(t,e){if(t&1){let A=JA();m(0,"div",12),tA("click",function(){Z(A);let n=v();return X(n.openViewImageDialog(n.rawSvgString))}),w()}if(t&2){let A=v();$("innerHtml",A.renderedEventGraph,al)}}var eb=class t{userId="";sessionId="";appName="";panelClosed=new $A;renderedEventGraph;eventData;selectedRow=void 0;rawSvgString=null;llmRequest=void 0;llmResponse=void 0;llmRequestKey="gcp.vertex.agent.llm_request";llmResponseKey="gcp.vertex.agent.llm_response";dialog=h(Gs);traceService=h(T2);eventService=h(CE);graphService=h(IE);featureFlagService=h(vr);sanitizer=h($s);uiStateService=h(Ql);isEventFilteringEnabled=Fs(this.featureFlagService.isEventFilteringEnabled());constructor(){}ngOnInit(){this.traceService.selectedTraceRow$.subscribe(e=>{this.selectedRow=e;let A=this.getEventIdFromSpan();if(A){let i;this.isEventFilteringEnabled()&&this.selectedRow?.invoc_id&&this.selectedRow?.start_time&&(i={invocationId:this.selectedRow.invoc_id,timestamp:this.selectedRow.start_time/1e6});let n=cA({id:A},i);this.eventService.getEventTrace(n).pipe(oi(()=>{this.uiStateService.setIsEventRequestResponseLoading(!0)})).subscribe(o=>{this.llmRequest=JSON.parse(o[this.llmRequestKey]),this.llmResponse=JSON.parse(o[this.llmResponseKey]),this.uiStateService.setIsEventRequestResponseLoading(!1)},()=>{this.uiStateService.setIsEventRequestResponseLoading(!1)}),this.getEventGraph(A)}}),this.traceService.eventData$.subscribe(e=>this.eventData=e)}openViewImageDialog(e){let A=this.dialog.open(V2,{maxWidth:"90vw",maxHeight:"90vh",data:{imageData:e}})}getEventDetails(){if(this.eventData&&this.selectedRow)return this.eventData.get(this.getEventIdFromSpan())}getEventIdFromSpan(){if(this.selectedRow)return this.selectedRow.attributes["gcp.vertex.agent.event_id"]}getEventGraph(e){this.eventService.getEvent(this.userId,this.appName,this.sessionId,e).subscribe(A=>nt(this,null,function*(){if(!A.dotSrc){this.renderedEventGraph=void 0;return}let i=A.dotSrc,n=yield this.graphService.render(i);this.rawSvgString=n,this.renderedEventGraph=this.sanitizer.bypassSecurityTrustHtml(n)}))}closePanel(){this.panelClosed.emit(!0)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-trace-event"]],inputs:{userId:"userId",sessionId:"sessionId",appName:"appName"},outputs:{panelClosed:"panelClosed"},decls:21,vars:8,consts:[[1,"wrapper"],["mat-stretch-tabs","false","mat-align-tabs","start"],["label","Event"],[1,"json-viewer-container"],[3,"json"],["label","Request"],["mode","indeterminate"],["label","Response"],["label","Graph"],[1,"event-graph-container"],[3,"innerHtml"],["mat-icon-button","",1,"tab-header-action",3,"click"],[3,"click","innerHtml"]],template:function(A,i){A&1&&(m(0,"div",0)(1,"mat-tab-group",1)(2,"mat-tab",2)(3,"div",3),GA(4,"ngx-json-viewer",4),w()(),m(5,"mat-tab",5),V(6,GOA,1,0,"mat-progress-spinner",6),ri(7,"async"),aC(8,KOA,2,0,"div")(9,UOA,2,1,"div",3),w(),m(10,"mat-tab",7),V(11,JOA,1,0,"mat-progress-spinner",6),ri(12,"async"),aC(13,YOA,2,0,"div")(14,TOA,2,1,"div",3),w(),m(15,"mat-tab",8)(16,"div",9),V(17,HOA,1,1,"div",10),w()()(),m(18,"button",11),tA("click",function(){return i.closePanel()}),m(19,"mat-icon"),K(20,"close"),w()()()),A&2&&(p(4),$("json",i.getEventDetails()),p(2),W(Ci(7,4,i.uiStateService.isEventRequestResponseLoading())===!0?6:i.llmRequest?9:8),p(5),W(Ci(12,6,i.uiStateService.isEventRequestResponseLoading())===!0?11:i.llmResponse?14:13),p(6),W(i.renderedEventGraph?17:-1))},dependencies:[W7,Om,E0,Y2,Wa,Fn,B1,ls],styles:[".json-viewer-container[_ngcontent-%COMP%]{padding-top:8px;padding-left:12px;padding-right:12px;background-color:var(--trace-event-json-viewer-container-background-color)}.event-graph-container[_ngcontent-%COMP%]{text-align:center;padding-top:20px}.event-graph-container[_ngcontent-%COMP%] svg text{font-family:Google Sans Mono,monospace;font-size:11px}.wrapper[_ngcontent-%COMP%]{position:relative}.tab-header-action[_ngcontent-%COMP%]{position:absolute;top:0;right:0;height:48px;z-index:2;margin-right:10px}"]})};var zOA={openPanelTooltip:"Open panel",evalCaseIdLabel:"Eval Case ID",cancelButton:"Cancel",saveButton:"Save",editEvalCaseTooltip:"Edit current eval case",deleteEvalCaseTooltip:"Delete current eval case",sessionIdLabel:"Session ID",userIdLabel:"User ID",loadingSessionLabel:"Loading session...",tokenStreamingLabel:"Token Streaming",createNewSessionTooltip:"Create a new Session",newSessionButton:"New Session",deleteSessionTooltip:"Delete current session",exportSessionTooltip:"Export current session",importSessionTooltip:"Import session",loadingAgentsLabel:"Loading agents, please wait...",welcomeMessage:"Welcome to ADK!",selectAgentMessage:"Select an agent on the left to begin with.",failedToLoadAgentsMessage:"Failed to load agents. To get started, run",errorMessageLabel:"Error message:",noAgentsFoundWarning:"Warning: No agents found in current folder.",cannotEditSessionMessage:"Chat is disabled to prevent changes to the end user's session.",readOnlyBadgeLabel:"Read-only",disclosureTooltip:"ADK Web is for development purposes. It has access to all the data and should not be used in production.",adkWebDeveloperUiMessage:"ADK Web Developer UI"},MgA=new yA("Chat Messages",{factory:()=>zOA});var OOA=["sideDrawer"],POA=["bottomPanel"],jOA=[[["","adk-web-chat-container-top",""]]],qOA=["[adk-web-chat-container-top]"],VOA=t=>({"edit-mode":t}),WOA=()=>[];function ZOA(t,e){if(t&1){let A=JA();m(0,"span",8),tA("click",function(){Z(A);let n=v();return X(n.toggleSidePanel())}),K(1,"left_panel_open"),w()}if(t&2){let A=v();$("matTooltip",A.i18n.openPanelTooltip)}}function XOA(t,e){if(t&1){let A=JA();m(0,"app-side-panel",9),tA("closePanel",function(){Z(A);let n=v();return X(n.toggleSidePanel())})("tabChange",function(n){Z(A);let o=v();return X(o.handleTabChange(n))})("sessionSelected",function(n){Z(A);let o=v();return X(o.updateWithSelectedSession(n))})("sessionReloaded",function(n){Z(A);let o=v();return X(o.updateWithSelectedSession(n))})("evalCaseSelected",function(n){Z(A);let o=v();return X(o.updateWithSelectedEvalCase(n))})("evalSetIdSelected",function(n){Z(A);let o=v();return X(o.updateSelectedEvalSetId(n))})("returnToSession",function(n){Z(A);let o=v();return X(o.handleReturnToSession(n))})("evalNotInstalled",function(n){Z(A);let o=v();return X(o.handleEvalNotInstalled(n))})("page",function(n){Z(A);let o=v();return X(o.handlePageEvent(n))})("closeSelectedEvent",function(){Z(A);let n=v();return X(n.closeSelectedEvent())})("openImageDialog",function(n){Z(A);let o=v();return X(o.openViewImageDialog(n))})("appSelectionChange",function(n){Z(A);let o=v();return X(o.onAppSelection(n))})("openAddItemDialog",function(){Z(A);let n=v();return X(n.openAddItemDialog())})("enterBuilderMode",function(){Z(A);let n=v();return X(n.enterBuilderMode())}),w()}if(t&2){let A=v();$("isApplicationSelectorEnabledObs",A.isApplicationSelectorEnabledObs)("apps$",A.apps$)("isLoadingApps",A.isLoadingApps)("selectedAppControl",A.selectedAppControl)("showSidePanel",A.showSidePanel)("appName",A.appName)("userId",A.userId)("sessionId",A.sessionId)("traceData",A.traceData)("eventData",A.eventData)("currentSessionState",A.currentSessionState)("artifacts",A.artifacts)("selectedEvent",A.selectedEvent)("selectedEventIndex",A.selectedEventIndex)("renderedEventGraph",A.renderedEventGraph)("rawSvgString",A.rawSvgString)("llmRequest",A.llmRequest)("llmResponse",A.llmResponse)("disableBuilderIcon",A.disableBuilderSwitch)}}function $OA(t,e){if(t&1){let A=JA();m(0,"app-builder-tabs",10),tA("exitBuilderMode",function(){Z(A);let n=v();return X(n.exitBuilderMode())})("closePanel",function(){Z(A);let n=v();return X(n.toggleSidePanel())}),w(),GA(1,"div",11)}if(t&2){let A=v();$("appNameInput",A.appName)}}function APA(t,e){if(t&1){let A=JA();m(0,"div",6)(1,"div",12)(2,"button",13),tA("click",function(){Z(A);let n=v();return X(n.saveAgentBuilder())}),m(3,"mat-icon"),K(4,"check"),w()(),m(5,"button",14),tA("click",function(){Z(A);let n=v();return X(n.exitBuilderMode())}),m(6,"mat-icon"),K(7,"close"),w()(),m(8,"button",15),tA("click",function(){Z(A);let n=v();return X(n.toggleBuilderAssistant())}),m(9,"mat-icon"),K(10,"assistant"),w()()(),m(11,"app-canvas",16),tA("toggleSidePanelRequest",function(){Z(A);let n=v();return X(n.toggleSidePanel())})("builderAssistantCloseRequest",function(){Z(A);let n=v();return X(n.toggleBuilderAssistant())}),w()()}if(t&2){let A=v();p(8),ne("active",A.showBuilderAssistant),p(3),$("showSidePanel",A.showSidePanel)("showBuilderAssistant",A.showBuilderAssistant)("appNameInput",A.appName)}}function ePA(t,e){if(t&1){let A=JA();m(0,"span",24),tA("click",function(){Z(A);let n=v(3);return X(n.toggleSidePanel())}),K(1,"left_panel_open"),w()}if(t&2){let A=v(3);$("matTooltip",A.i18n.openPanelTooltip)}}function tPA(t,e){if(t&1){let A=JA();m(0,"button",29),tA("click",function(){Z(A);let n=v(4);return X(n.cancelEditEvalCase())}),K(1),w(),m(2,"button",30),tA("click",function(){Z(A);let n=v(4);return X(n.saveEvalCase())}),K(3),w()}if(t&2){let A=v(4);p(),Se(" ",A.i18n.cancelButton," "),p(),$("disabled",!A.hasEvalCaseChanged()||A.isEvalCaseEditing()),p(),Se(" ",A.i18n.saveButton," ")}}function iPA(t,e){if(t&1){let A=JA();m(0,"span",31),tA("click",function(){Z(A);let n=v(4);return X(n.editEvalCase())}),K(1," edit "),w(),m(2,"span",31),tA("click",function(){Z(A);let n=v(4);return X(n.deleteEvalCase())}),K(3," delete "),w()}if(t&2){let A=v(4);$("matTooltip",A.i18n.editEvalCaseTooltip),p(2),$("matTooltip",A.i18n.deleteEvalCaseTooltip)}}function nPA(t,e){if(t&1&&(m(0,"div",25)(1,"div",26),K(2),w(),m(3,"div",27),K(4),w()(),m(5,"div",28),V(6,tPA,4,3)(7,iPA,4,2),w()),t&2){let A=v(3);p(2),qA(A.i18n.evalCaseIdLabel),p(2),qA(A.evalCase.evalId),p(2),W(A.isEvalEditMode()?6:7)}}function oPA(t,e){if(t&1&&(m(0,"div",33),K(1),w(),m(2,"div",27),K(3),w()),t&2){let A=v(5);p(),qA(A.i18n.userIdLabel),p(2),qA(A.userId)}}function aPA(t,e){if(t&1&&(m(0,"div",34)(1,"mat-icon"),K(2,"visibility"),w(),K(3),w(),m(4,"div",35),K(5),w()),t&2){let A=v(5);p(3),Se(" ",A.i18n.readOnlyBadgeLabel," "),p(2),qA(A.i18n.cannotEditSessionMessage)}}function rPA(t,e){if(t&1&&(m(0,"div",26),K(1),w(),m(2,"div",27),K(3),w(),V(4,oPA,4,2),ri(5,"async"),V(6,aPA,6,2)),t&2){let A=v(4);p(),qA(A.i18n.sessionIdLabel),p(2),qA(A.sessionId),p(),W(Ci(5,4,A.isUserIdOnToolbarEnabledObs)?4:-1),p(2),W(A.canEditSession()?-1:6)}}function sPA(t,e){if(t&1&&(m(0,"div",26),K(1),w()),t&2){let A=v(4);p(),qA(A.i18n.loadingSessionLabel)}}function gPA(t,e){if(t&1){let A=JA();m(0,"span",43),tA("click",function(){Z(A);let n=v(5);return X(n.deleteSession(n.sessionId))}),K(1," delete "),w()}if(t&2){let A=v(5);$("matTooltip",A.i18n.deleteSessionTooltip)}}function lPA(t,e){if(t&1){let A=JA();m(0,"span",44),tA("click",function(){Z(A);let n=v(5);return X(n.exportSession())}),K(1," download "),w()}if(t&2){let A=v(5);$("matTooltip",A.i18n.exportSessionTooltip)}}function cPA(t,e){if(t&1){let A=JA();m(0,"span",45),tA("click",function(){Z(A);let n=v(5);return X(n.importSession())}),K(1," upload "),w()}if(t&2){let A=v(5);$("matTooltip",A.i18n.importSessionTooltip)}}function CPA(t,e){if(t&1){let A=JA();m(0,"div",28)(1,"div",36)(2,"mat-slide-toggle",37),ri(3,"async"),tA("change",function(){Z(A);let n=v(4);return X(n.toggleSse())}),K(4),w()(),GA(5,"mat-divider",38),m(6,"div",32)(7,"div",39),tA("click",function(){Z(A);let n=v(4);return X(n.onNewSessionClick())}),m(8,"mat-icon"),K(9,"add"),w(),K(10),w(),V(11,gPA,2,1,"span",40),ri(12,"async"),V(13,lPA,2,1,"span",41),ri(14,"async"),V(15,cPA,2,1,"span",42),ri(16,"async"),w()()}if(t&2){let A=v(4);p(2),$("checked",A.enableSseIndicator())("disabled",!Ci(3,9,A.isTokenStreamingEnabledObs)),p(2),Se(" ",A.i18n.tokenStreamingLabel," "),p(),$("vertical",!0),p(2),$("matTooltip",A.i18n.createNewSessionTooltip),p(3),Se(" ",A.i18n.newSessionButton," "),p(),W(Ci(12,11,A.isDeleteSessionEnabledObs)?11:-1),p(2),W(Ci(14,13,A.isExportSessionEnabledObs)?13:-1),p(2),W(Ci(16,15,A.importSessionEnabledObs)?15:-1)}}function IPA(t,e){if(t&1&&(m(0,"div",32),Ur(1),ri(2,"async"),V(3,rPA,7,6)(4,sPA,2,1,"div",26),w(),V(5,CPA,17,17,"div",28)),t&2){let A=Ci(2,2,v(3).uiStateService.isSessionLoading());p(3),W(A===!1?3:4),p(2),W(A===!1?5:-1)}}function dPA(t,e){if(t&1&&(m(0,"div",17),V(1,ePA,2,1,"span",23),V(2,nPA,8,3)(3,IPA,6,4),w()),t&2){let A=v(2);$("ngClass",ss(3,VOA,A.isEvalEditMode())),p(),W(A.showSidePanel?-1:1),p(),W(A.evalCase?2:3)}}function BPA(t,e){if(t&1&&(m(0,"div",46)(1,"span"),K(2),w()()),t&2){let A=v(3);p(2),qA(A.i18n.loadingAgentsLabel)}}function EPA(t,e){if(t&1&&(m(0,"span"),K(1),GA(2,"br"),K(3),w()),t&2){let A=v(4);p(),qA(A.i18n.welcomeMessage),p(2),Se(" ",A.i18n.selectAgentMessage)}}function QPA(t,e){if(t&1&&(K(0),GA(1,"br"),m(2,"pre",48),K(3),w()),t&2){let A=v(5);Se(" ",A.i18n.errorMessageLabel," "),p(3),qA(A.loadingError())}}function hPA(t,e){if(t&1&&(m(0,"pre",47),K(1),w()),t&2){let A=v(5);p(),qA(A.i18n.noAgentsFoundWarning)}}function uPA(t,e){if(t&1&&(m(0,"div"),K(1),m(2,"pre"),K(3,"adk web"),w(),K(4," in the folder that contains the agents."),GA(5,"br"),V(6,QPA,4,2)(7,hPA,2,1,"pre",47),w()),t&2){let A=v(4);p(),Se(" ",A.i18n.failedToLoadAgentsMessage," "),p(5),W(A.loadingError()?6:7)}}function fPA(t,e){if(t&1&&(m(0,"div",46),V(1,EPA,4,2,"span"),ri(2,"async"),aC(3,uPA,8,2,"div"),w()),t&2){let A=v(3);p(),W((Ci(2,1,A.apps$)||Cu(3,WOA)).length>0?1:3)}}function mPA(t,e){if(t&1&&(V(0,BPA,3,1,"div",46),ri(1,"async"),aC(2,fPA,4,4,"div",46)),t&2){let A=v(2);W(A.isLoadingApps()?0:Ci(1,1,A.isApplicationSelectorEnabledObs)?2:-1)}}function pPA(t,e){if(t&1){let A=JA();m(0,"button",49),tA("click",function(){Z(A);let n=v(2);return X(n.openDialog())}),m(1,"mat-icon"),K(2,"priority_high"),w()()}}function wPA(t,e){if(t&1){let A=JA();m(0,"app-chat-panel",50),ri(1,"async"),ho("userInputChange",function(n){Z(A);let o=v(2);return ao(o.userInput,n)||(o.userInput=n),X(n)})("userEditEvalCaseMessageChange",function(n){Z(A);let o=v(2);return ao(o.userEditEvalCaseMessage,n)||(o.userEditEvalCaseMessage=n),X(n)}),tA("clickEvent",function(n){Z(A);let o=v(2);return X(o.clickEvent(n))})("handleKeydown",function(n){Z(A);let o=v(2);return X(o.handleKeydown(n.event,n.message))})("cancelEditMessage",function(n){Z(A);let o=v(2);return X(o.cancelEditMessage(n))})("saveEditMessage",function(n){Z(A);let o=v(2);return X(o.saveEditMessage(n))})("openViewImageDialog",function(n){Z(A);let o=v(2);return X(o.openViewImageDialog(n))})("openBase64InNewTab",function(n){Z(A);let o=v(2);return X(o.openBase64InNewTab(n.data,n.mimeType))})("editEvalCaseMessage",function(n){Z(A);let o=v(2);return X(o.editEvalCaseMessage(n))})("deleteEvalCaseMessage",function(n){Z(A);let o=v(2);return X(o.deleteEvalCaseMessage(n.message,n.index))})("editFunctionArgs",function(n){Z(A);let o=v(2);return X(o.editFunctionArgs(n))})("fileSelect",function(n){Z(A);let o=v(2);return X(o.onFileSelect(n))})("removeFile",function(n){Z(A);let o=v(2);return X(o.removeFile(n))})("removeStateUpdate",function(){Z(A);let n=v(2);return X(n.removeStateUpdate())})("sendMessage",function(n){Z(A);let o=v(2);return X(o.sendMessage(n))})("updateState",function(){Z(A);let n=v(2);return X(n.updateState())})("toggleAudioRecording",function(){Z(A);let n=v(2);return X(n.toggleAudioRecording())})("toggleVideoRecording",function(){Z(A);let n=v(2);return X(n.toggleVideoRecording())}),w()}if(t&2){let A=v(2);$("appName",A.appName)("messages",A.messages())("isChatMode",A.isChatMode())("evalCase",A.evalCase)("isEvalEditMode",A.isEvalEditMode())("isEvalCaseEditing",A.isEvalCaseEditing())("isEditFunctionArgsEnabled",Ci(1,17,A.isEditFunctionArgsEnabledObs)??!1),Qo("userInput",A.userInput)("userEditEvalCaseMessage",A.userEditEvalCaseMessage),$("selectedFiles",A.selectedFiles)("updatedSessionState",A.updatedSessionState())("eventData",A.eventData)("selectedEvent",A.selectedEvent)("isAudioRecording",A.isAudioRecording)("isVideoRecording",A.isVideoRecording)("hoveredEventMessageIndices",A.hoveredEventMessageIndices)("sessionName",A.sessionId)}}function DPA(t,e){if(t&1){let A=JA();m(0,"div",21,1),GA(2,"div",51),m(3,"app-trace-event",52),tA("panelClosed",function(){Z(A);let n=v(2);return X(n.closeTraceEventDetailPanel())}),w()()}if(t&2){let A=v(2);p(3),$("userId",A.userId)("appName",A.appName)("sessionId",A.sessionId)}}function yPA(t,e){if(t&1&&(m(0,"div",22),K(1),w()),t&2){let A=v(2);$("matTooltip",A.i18n.disclosureTooltip),p(),Se(" ",A.i18n.adkWebDeveloperUiMessage," ")}}function vPA(t,e){if(t&1&&(m(0,"div",7),Ke(1),V(2,dPA,4,5,"div",17),m(3,"mat-card",18),V(4,mPA,3,3),V(5,pPA,3,0,"button",19),V(6,wPA,2,19,"app-chat-panel",20),w(),V(7,DPA,4,3,"div",21),V(8,yPA,2,2,"div",22),ri(9,"async"),w()),t&2){let A=v();p(2),W(A.appName!=""?2:-1),p(2),W(A.selectedAppControl.value?-1:4),p(),W(A.longRunningEvents.length>0?5:-1),p(),W(A.appName!=""?6:-1),p(),W(A.bottomPanelVisible?7:-1),p(),W(Ci(9,6,A.isDeveloperUiDisclaimerEnabledObs)?8:-1)}}var bPA="root_agent",tb="q",MPA="hideSidePanel",FK="",_K="",LK="application/json+a2ui";function GK(t){for(t=t.replace(/-/g,"+").replace(/_/g,"/");t.length%4!==0;)t+="=";return t}var KK=class t extends B8{nextPageLabel="Next Event";previousPageLabel="Previous Event";firstPageLabel="First Event";lastPageLabel="Last Event";getRangeLabel=(e,A,i)=>i===0?`Event 0 of ${i}`:(i=Math.max(i,0),`Event ${e*A+1} of ${i}`);static \u0275fac=(()=>{let e;return function(i){return(e||(e=Bi(t)))(i||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac})},kgA="Restarting bidirectional streaming is not currently supported. Please refresh the page or start a new session.",ib=class t{i18n=h(MgA);_snackBar=h(J2);activatedRoute=h(ag);agentService=h(sg);artifactService=h(u8);changeDetectorRef=h(Dt);dialog=h(Gs);document=h(Xt);downloadService=h(cE);evalService=h(h0);eventService=h(CE);featureFlagService=h(vr);graphService=h(IE);localFileService=h(f8);location=h(w8);renderer=h(_i);router=h(Cs);safeValuesService=h(u0);sessionService=h(El);streamChatService=h(p8);stringToColorService=h(dE);traceService=h(T2);uiStateService=h(Ql);agentBuilderService=h(Q0);chatPanel=ca.required(Vh);canvasComponent=ca.required(jh);sideDrawer=ca.required("sideDrawer");sidePanel=ca.required($h);evalTab=ca($c);bottomPanelRef=ca.required("bottomPanel");enableSseIndicator=jA(!1);isChatMode=jA(!0);isEvalCaseEditing=jA(!1);hasEvalCaseChanged=jA(!1);isEvalEditMode=jA(!1);isBuilderMode=jA(!1);videoElement;currentMessage="";messages=jA([]);lastTextChunk="";streamingTextMessage=null;latestThought="";artifacts=[];userInput="";userEditEvalCaseMessage="";userId="user";appName="";sessionId="";sessionIdOfLoadedMessages="";evalCase=null;updatedEvalCase=null;evalSetId="";isAudioRecording=!1;isVideoRecording=!1;longRunningEvents=[];functionCallEventId="";redirectUri=zr.getBaseUrlWithoutPath();showSidePanel=!0;showBuilderAssistant=!0;useSse=!1;currentSessionState={};root_agent=bPA;updatedSessionState=jA(null);isModelThinkingSubject=new Ht(!1);canEditSession=jA(!0);sessionHasUsedBidi=new Set;eventData=new Map;traceData=[];renderedEventGraph;rawSvgString=null;selectedEvent=void 0;selectedEventIndex=void 0;llmRequest=void 0;llmResponse=void 0;llmRequestKey="gcp.vertex.agent.llm_request";llmResponseKey="gcp.vertex.agent.llm_response";getMediaTypeFromMimetype=O4;selectedFiles=[];MediaType=$1;selectedAppControl=new ks("",{nonNullable:!0});openBase64InNewTab(e,A){this.safeValuesService.openBase64InNewTab(e,A)}isLoadingApps=jA(!1);loadingError=jA("");apps$=se([]).pipe(oi(()=>{this.isLoadingApps.set(!0),this.selectedAppControl.disable()}),Si(()=>this.agentService.listApps().pipe(ta(e=>(this.loadingError.set(e.message),se(void 0))))),oo(1),oi(e=>{this.isLoadingApps.set(!1),this.selectedAppControl.enable(),e?.length==1&&this.router.navigate([],{relativeTo:this.activatedRoute,queryParams:{app:e[0]}})}),Ps());importSessionEnabledObs=this.featureFlagService.isImportSessionEnabled();isEditFunctionArgsEnabledObs=this.featureFlagService.isEditFunctionArgsEnabled();isSessionUrlEnabledObs=this.featureFlagService.isSessionUrlEnabled();isApplicationSelectorEnabledObs=this.featureFlagService.isApplicationSelectorEnabled();isTokenStreamingEnabledObs=this.featureFlagService.isTokenStreamingEnabled();isExportSessionEnabledObs=this.featureFlagService.isExportSessionEnabled();isEventFilteringEnabled=Fs(this.featureFlagService.isEventFilteringEnabled());isApplicationSelectorEnabled=Fs(this.featureFlagService.isApplicationSelectorEnabled());isDeleteSessionEnabledObs=this.featureFlagService.isDeleteSessionEnabled();isUserIdOnToolbarEnabledObs=this.featureFlagService.isUserIdOnToolbarEnabled();isDeveloperUiDisclaimerEnabledObs=this.featureFlagService.isDeveloperUiDisclaimerEnabled();bottomPanelVisible=!1;hoveredEventMessageIndices=[];disableBuilderSwitch=!1;constructor(){}ngOnInit(){if(this.syncSelectedAppFromUrl(),this.updateSelectedAppUrl(),this.hideSidePanelIfNeeded(),Ir([this.agentService.getApp(),this.activatedRoute.queryParams]).pipe(Ze(([i,n])=>!!i&&!!n[tb]),zo(),fe(([,i])=>i[tb])).subscribe(i=>{setTimeout(()=>{this.userInput=i})}),this.streamChatService.onStreamClose().subscribe(i=>{let n=`Please check server log for full details: -`+i;this.openSnackBar(n,"OK")}),new URL(window.location.href).searchParams.has("code")){let i=window.location.href;window.opener?.postMessage({authResponseUrl:i},window.origin),window.close()}this.agentService.getApp().subscribe(i=>{this.appName=i}),Ir([this.agentService.getLoadingState(),this.isModelThinkingSubject]).subscribe(([i,n])=>{let o=this.messages()[this.messages().length-1];i?!o?.isLoading&&!this.streamingTextMessage&&this.messages.update(a=>[...a,{role:"bot",isLoading:!0}]):o?.isLoading&&!n&&(this.messages.update(a=>a.slice(0,-1)),this.changeDetectorRef.detectChanges())}),this.traceService.selectedTraceRow$.subscribe(i=>{let n=i?.attributes["gcp.vertex.agent.event_id"];n&&this.eventData.has(n)?this.bottomPanelVisible=!0:this.bottomPanelVisible=!1}),this.traceService.hoveredMessageIndices$.subscribe(i=>this.hoveredEventMessageIndices=i),this.featureFlagService.isInfinityMessageScrollingEnabled().pipe(zo()).subscribe(i=>{i&&(this.uiStateService.onNewMessagesLoaded().subscribe(n=>{this.populateMessages(n.items,!0,!n.isBackground),this.loadTraceData()}),this.uiStateService.onNewMessagesLoadingFailed().subscribe(n=>{this.openSnackBar(n.message,"OK")}))})}get sessionTab(){return this.sidePanel().sessionTabComponent()}ngAfterViewInit(){this.showSidePanel&&this.sideDrawer()?.open(),this.isApplicationSelectorEnabled()||this.loadSessionByUrlOrReset()}selectApp(e){e!=this.appName&&(this.agentService.setApp(e),this.loadSessionByUrlOrReset())}loadSessionByUrlOrReset(){this.isSessionUrlEnabledObs.subscribe(e=>{let A=this.activatedRoute.snapshot.queryParams,i=A.session,n=A.userId;if(n&&(this.userId=n),!e||!i){this.createSessionAndReset();return}i&&this.sessionService.getSession(this.userId,this.appName,i).pipe(oo(1),ta(o=>(this.openSnackBar("Cannot find specified session. Creating a new one.","OK"),this.createSessionAndReset(),se(null)))).subscribe(o=>{o&&this.updateWithSelectedSession(o)})})}hideSidePanelIfNeeded(){this.activatedRoute.queryParams.pipe(Ze(e=>e[MPA]==="true"),oo(1)).subscribe(()=>{this.showSidePanel=!1,this.sideDrawer()?.close()})}createSessionAndReset(){this.createSession(),this.eventData=new Map,this.messages.set([]),this.artifacts=[],this.userInput="",this.longRunningEvents=[]}createSession(){this.uiStateService.setIsSessionListLoading(!0),this.sessionService.createSession(this.userId,this.appName).subscribe(e=>{this.currentSessionState=e.state,this.sessionId=e.id??"",this.sessionTab?.refreshSession(),this.sessionTab?.reloadSession(this.sessionId),this.isSessionUrlEnabledObs.subscribe(A=>{A&&this.updateSelectedSessionUrl()})},()=>{this.uiStateService.setIsSessionListLoading(!1)})}sendMessage(e){return nt(this,null,function*(){if(e.preventDefault(),!this.userInput.trim()&&this.selectedFiles.length<=0||e instanceof KeyboardEvent&&(e.isComposing||e.keyCode===229))return;let A=`user_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,i=[],n={role:"user",eventId:A};if(this.userInput.trim()&&(i.push({text:this.userInput}),n.text=this.userInput),this.selectedFiles.length>0){let s=this.selectedFiles.map(g=>({file:g.file,url:g.url}));for(let g of this.selectedFiles){let l=yield this.localFileService.createMessagePartFromFile(g.file);i.push(l)}n.attachments=s}this.messages.update(s=>[...s,n]);let o={id:A,author:"user",content:{parts:i}};this.eventData.set(A,o),this.eventData=new Map(this.eventData);let a={appName:this.appName,userId:this.userId,sessionId:this.sessionId,newMessage:{role:"user",parts:yield this.getUserMessageParts()},streaming:this.useSse,stateDelta:this.updatedSessionState()};this.selectedFiles=[],this.streamingTextMessage=null,this.agentService.runSse(a).subscribe({next:s=>nt(this,null,function*(){if(s.error){this.openSnackBar(s.error,"OK");return}if(s.content){let g=this.combineTextParts(s.content.parts);this.isEventA2aResponse(s)&&(g=this.combineA2uiDataParts(g));for(let l of g)this.processPart(s,l),this.traceService.setEventData(this.eventData)}else s.errorMessage&&this.processErrorMessage(s);s.actions&&(this.processActionArtifact(s),this.processActionStateDelta(s)),this.changeDetectorRef.detectChanges()}),error:s=>{console.error("Send message error:",s),this.openSnackBar(s,"OK")},complete:()=>{this.updatedSessionState()&&(this.currentSessionState=this.updatedSessionState(),this.updatedSessionState.set(null)),this.streamingTextMessage=null,this.featureFlagService.isSessionReloadOnNewMessageEnabled().pipe(zo()).subscribe(s=>{s&&this.sessionTab?.reloadSession(this.sessionId)}),this.eventService.getTrace(this.sessionId).pipe(zo(),ta(s=>se([]))).subscribe(s=>{this.traceData=s,this.changeDetectorRef.detectChanges()}),this.traceService.setMessages(this.messages()),this.changeDetectorRef.detectChanges()}}),this.userInput="";let r=this.router.parseUrl(this.location.path());r.queryParams[tb]&&(delete r.queryParams[tb],this.location.replaceState(r.toString())),this.changeDetectorRef.detectChanges()})}processErrorMessage(e){this.storeEvents(e,e),this.insertMessageBeforeLoadingMessage({text:e.errorMessage,role:"bot"})}processPart(e,A){let i=e.groundingMetadata?.searchEntryPoint?.renderedContent;if(A.text){this.isModelThinkingSubject.next(!1);let n=A.text;if(A.thought){if(n!==this.latestThought){this.storeEvents(A,e);let o={role:"bot",text:this.processThoughtText(n),thought:!0,eventId:e.id};this.insertMessageBeforeLoadingMessage(o)}this.latestThought=n}else if(this.streamingTextMessage){if(i&&(this.streamingTextMessage.renderedContent=e.groundingMetadata.searchEntryPoint.renderedContent),n==this.streamingTextMessage.text){this.storeEvents(A,e);let o={role:"bot",text:this.processThoughtText(n),thought:!!A.thought,eventId:e.id};this.insertMessageBeforeLoadingMessage(o),this.streamingTextMessage=null;return}this.streamingTextMessage.text+=n}else if(this.streamingTextMessage={role:"bot",text:this.processThoughtText(n),thought:!!A.thought,eventId:e.id},i&&(this.streamingTextMessage.renderedContent=e.groundingMetadata.searchEntryPoint.renderedContent),!this.useSse){this.insertMessageBeforeLoadingMessage(this.streamingTextMessage),this.storeEvents(A,e),this.streamingTextMessage=null;return}}else if(A.thought)this.isModelThinkingSubject.next(!0);else{if(this.isA2aDataPart(A)){let a=this.extractA2aDataPartJson(A),s=a&&a.kind==="data"&&a.metadata?.mimeType===LK?{a2ui:a.data}:{text:a};this.isModelThinkingSubject.next(!1),this.storeEvents(A,e),this.storeMessage(s,e,e.author==="user"?"user":"bot");return}this.isModelThinkingSubject.next(!1),this.storeEvents(A,e);let o=this.messages().findIndex(a=>a.eventId===e.id&&a.role==="bot");o!==-1?this.messages.update(a=>{let r=[...a];return this.processPartIntoMessage(A,e,r[o]),r}):this.storeMessage(A,e,e.author==="user"?"user":"bot")}}getUserMessageParts(){return nt(this,null,function*(){let e=[];if(this.userInput.trim()&&e.push({text:`${this.userInput}`}),this.selectedFiles.length>0)for(let A of this.selectedFiles)e.push(yield this.localFileService.createMessagePartFromFile(A.file));return e})}processActionArtifact(e){e.actions&&e.actions.artifactDelta&&Object.keys(e.actions.artifactDelta).length>0&&(this.storeEvents(null,e),this.storeMessage(null,e,"bot"))}processActionStateDelta(e){e.actions&&e.actions.stateDelta&&Object.keys(e.actions.stateDelta).length>0&&(this.currentSessionState=e.actions.stateDelta)}combineTextParts(e){let A=[],i;for(let n of e)n.text&&!n.thought?i?i.text+=n.text:(i={text:n.text},A.push(i)):(i=void 0,A.push(n));return A}isEventA2aResponse(e){return!!e?.customMetadata?.["a2a:response"]}isA2aDataPart(e){if(!e.inlineData||e.inlineData.mimeType!=="text/plain")return!1;let A=atob(GK(e.inlineData.data));return A.startsWith(FK)&&A.endsWith(_K)}isA2uiDataPart(e){let A=this.extractA2aDataPartJson(e);return A&&A.kind==="data"&&A.metadata?.mimeType===LK}extractA2aDataPartJson(e){if(!this.isA2aDataPart(e))return null;let A=atob(GK(e.inlineData.data)),i=A.substring(FK.length,A.length-_K.length),n;try{n=JSON.parse(i)}catch{return null}return n}combineA2uiDataParts(e){let A=[],i=[],n;for(let o of e)this.isA2uiDataPart(o)?(i.push(this.extractA2aDataPartJson(o)),n||(n={inlineData:{mimeType:"text/plain",data:o.inlineData.data}},A.push(n))):A.push(o);if(n?.inlineData){let a=FK+JSON.stringify({kind:"data",metadata:{mimeType:LK},data:i})+_K;n.inlineData.data=btoa(a)}return A}processA2uiPartIntoMessage(e){let A={};return e.a2ui.forEach(i=>{i.data.beginRendering?A.beginRendering=i.data:i.data.surfaceUpdate?A.surfaceUpdate=i.data:i.data.dataModelUpdate&&(A.dataModelUpdate=i.data)}),A}updateRedirectUri(e,A){try{let i=new URL(e);return i.searchParams.set("redirect_uri",A),i.toString()}catch(i){return console.warn("Failed to update redirect URI: ",i),e}}storeMessage(e,A,i,n,o,a=!1){if(A?.author&&this.createAgentIconColorClass(A.author),A?.longRunningToolIds&&A.longRunningToolIds.length>0){this.getAsyncFunctionsFromParts(A.longRunningToolIds,A.content.parts,A.invocationId);let s=this.longRunningEvents[0].function;if(s.args.authConfig&&s.args.authConfig.exchangedAuthCredential&&s.args.authConfig.exchangedAuthCredential.oauth2){let g=s.args.authConfig.exchangedAuthCredential.oauth2.authUri,l=this.updateRedirectUri(g,this.redirectUri);this.openOAuthPopup(l).then(C=>{this.functionCallEventId=A.id,this.sendOAuthResponse(s,C,this.redirectUri)}).catch(C=>{console.error("OAuth Error:",C)})}else this.functionCallEventId=A.id}if(A?.actions&&A.actions.artifactDelta)for(let s in A.actions.artifactDelta)A.actions.artifactDelta.hasOwnProperty(s)&&this.renderArtifact(s,A.actions.artifactDelta[s],a);A?.evalStatus&&this.isChatMode.set(!1);let r={role:i,evalStatus:A?.evalStatus,failedMetric:A?.failedMetric,evalScore:A?.evalScore,evalThreshold:A?.evalThreshold,actualInvocationToolUses:A?.actualInvocationToolUses,expectedInvocationToolUses:A?.expectedInvocationToolUses,actualFinalResponse:A?.actualFinalResponse,expectedFinalResponse:A?.expectedFinalResponse,invocationIndex:n!==void 0?n:void 0,finalResponsePartIndex:o?.finalResponsePartIndex!==void 0?o.finalResponsePartIndex:void 0,toolUseIndex:o?.toolUseIndex!==void 0?o.toolUseIndex:void 0};if(e){if(e.inlineData){let s=this.formatBase64Data(e.inlineData.data,e.inlineData.mimeType);r.inlineData={displayName:e.inlineData.displayName,data:s,mimeType:e.inlineData.mimeType}}else if(e.a2ui)r.a2uiData=this.processA2uiPartIntoMessage(e);else if(e.text)r.text=e.text,r.thought=!!e.thought,A?.groundingMetadata&&A.groundingMetadata.searchEntryPoint&&A.groundingMetadata.searchEntryPoint.renderedContent&&(r.renderedContent=A.groundingMetadata.searchEntryPoint.renderedContent),r.eventId=A?.id;else if(e.functionCall)r.functionCalls=[e.functionCall],r.eventId=A?.id;else if(e.functionResponse)r.functionResponses=[e.functionResponse],r.eventId=A?.id;else if(e.executableCode)r.executableCode=e.executableCode;else if(e.codeExecutionResult&&(r.codeExecutionResult=e.codeExecutionResult,A.actions&&A.actions.artifact_delta))for(let s in A.actions.artifact_delta)A.actions.artifact_delta.hasOwnProperty(s)&&this.renderArtifact(s,A.actions.artifact_delta[s],a)}e&&Object.keys(e).length>0&&(a?this.messages.update(s=>[r,...s]):this.insertMessageBeforeLoadingMessage(r))}insertMessageBeforeLoadingMessage(e){this.messages.update(A=>{let i=A[A.length-1];return i?.isLoading?[...A.slice(0,-1),e,i]:[...A,e]})}formatBase64Data(e,A){let i=GK(e);return`data:${A};base64,${i}`}processPartIntoMessage(e,A,i){if(e)if(e.text)i.text=e.text,i.thought=!!e.thought,A?.groundingMetadata&&A.groundingMetadata.searchEntryPoint&&A.groundingMetadata.searchEntryPoint.renderedContent&&(i.renderedContent=A.groundingMetadata.searchEntryPoint.renderedContent),A?.id&&(i.eventId=A.id);else if(e.inlineData){let n=this.formatBase64Data(e.inlineData.data,e.inlineData.mimeType);i.inlineData={displayName:e.inlineData.displayName,data:n,mimeType:e.inlineData.mimeType},i.role==="user"&&A?.id&&(i.eventId=A.id)}else e.functionCall?(i.functionCalls||(i.functionCalls=[]),i.functionCalls.push(e.functionCall),A?.id&&(i.eventId=A.id)):e.functionResponse?(i.functionResponses||(i.functionResponses=[]),i.functionResponses.push(e.functionResponse),A?.id&&(i.eventId=A.id)):e.executableCode?i.executableCode=e.executableCode:e.codeExecutionResult?i.codeExecutionResult=e.codeExecutionResult:e.a2ui&&(i.a2uiData=this.processA2uiPartIntoMessage(e))}handleArtifactFetchFailure(e,A,i){this.openSnackBar("Failed to fetch artifact data","OK"),this.messages.update(n=>n.filter(o=>o!==e)),this.artifacts=this.artifacts.filter(n=>n.id!==A||n.versionId!==i)}renderArtifact(e,A,i=!1){if(this.artifacts.some(r=>r.id===e&&r.versionId===A))return;let o={role:"bot",inlineData:{data:"",mimeType:"image/png"}};i?this.messages.update(r=>[o,...r]):this.insertMessageBeforeLoadingMessage(o);let a={id:e,versionId:A,data:"",mimeType:"image/png",mediaType:"image"};this.artifacts=[...this.artifacts,a],this.artifactService.getArtifactVersion(this.userId,this.appName,this.sessionId,e,A).subscribe({next:r=>{let{mimeType:s,data:g}=r.inlineData??{};if(!s||!g){this.handleArtifactFetchFailure(o,e,A);return}let l=this.formatBase64Data(g,s),C=O4(s),I={name:this.createDefaultArtifactName(s),data:l,mimeType:s,mediaType:C};this.messages.update(d=>d.map(B=>B===o?{role:"bot",inlineData:I}:B)),this.artifacts=this.artifacts.map(d=>d.id===e&&d.versionId===A?{id:e,versionId:A,data:l,mimeType:s,mediaType:C}:d)},error:r=>{this.handleArtifactFetchFailure(o,e,A)}})}storeEvents(e,A){let i="";e==null&&A.actions.artifactDelta?i+="eventAction: artifact":e&&(e.text?i+="text:"+e.text:e.functionCall?i+="functionCall:"+e.functionCall.name:e.functionResponse?i+="functionResponse:"+e.functionResponse.name:e.executableCode?i+="executableCode:"+e.executableCode.code.slice(0,10):e.codeExecutionResult?i+="codeExecutionResult:"+e.codeExecutionResult.outcome:e.errorMessage&&(i+="errorMessage:"+e.errorMessage)),A.title=i,this.eventData.set(A.id,A),this.eventData=new Map(this.eventData)}sendOAuthResponse(e,A,i){this.longRunningEvents.pop();let n={appName:this.appName,userId:this.userId,sessionId:this.sessionId,newMessage:{role:"user",parts:[]}};var o=structuredClone(e.args.authConfig);o.exchangedAuthCredential.oauth2.authResponseUri=A,o.exchangedAuthCredential.oauth2.redirectUri=i,n.functionCallEventId=this.functionCallEventId,n.newMessage.parts.push({function_response:{id:e.id,name:e.name,response:o}});let a=[];this.agentService.runSse(n).subscribe({next:r=>nt(this,null,function*(){a.push(r)}),error:r=>console.error("SSE error:",r),complete:()=>{this.processRunSseResponse(a)}})}processRunSseResponse(e){for(let A of e)if(A.content)for(let i of A.content.parts)this.processPart(A,i)}openDialog(){this.dialog.open(V7,{width:"600px",data:{event:this.longRunningEvents[0].function,appName:this.appName,userId:this.userId,sessionId:this.sessionId,functionCallEventId:this.functionCallEventId,invocationId:this.longRunningEvents[0].invocationId}}).afterClosed().subscribe(A=>{A&&(this.removeFinishedLongRunningEvents(A.events),this.processRunSseResponse(A.response),this.changeDetectorRef.detectChanges())})}removeFinishedLongRunningEvents(e){let A=new Set(e.map(i=>i.id));this.longRunningEvents=this.longRunningEvents.filter(i=>!A.has(i.id))}createAgentIconColorClass(e){let A=this.stringToColorService.stc(e),i=`custom-icon-color-${A.replace("#","")}`;this.injectCustomIconColorStyle(i,A)}clickEvent(e){let A=this.messages()[e],i=A.eventId;if(i){if(this.selectedEvent&&this.selectedEvent.id===i){this.selectedEvent=void 0,this.selectedEventIndex=void 0;return}if(A.role==="user"){this.selectedEvent=this.eventData.get(i),this.selectedEventIndex=this.getIndexOfKeyInMap(i),this.llmRequest=void 0,this.llmResponse=void 0,this.sideDrawer()?.open(),this.showSidePanel=!0;return}this.sideDrawer()?.open(),this.showSidePanel=!0,this.selectEvent(i)}}ngOnDestroy(){this.streamChatService.closeStream()}onAppSelection(e){this.isAudioRecording&&(this.stopAudioRecording(),this.isAudioRecording=!1),this.isVideoRecording&&(this.stopVideoRecording(),this.isVideoRecording=!1),this.evalTab()?.resetEvalResults(),this.traceData=[],this.bottomPanelVisible=!1}toggleAudioRecording(){this.isAudioRecording?this.stopAudioRecording():this.startAudioRecording()}startAudioRecording(){if(this.sessionHasUsedBidi.has(this.sessionId)){this.openSnackBar(kgA,"OK");return}this.isAudioRecording=!0,this.streamChatService.startAudioChat({appName:this.appName,userId:this.userId,sessionId:this.sessionId}),this.messages.update(e=>[...e,{role:"user",text:"Speaking..."},{role:"bot",text:"Speaking..."}]),this.sessionHasUsedBidi.add(this.sessionId)}stopAudioRecording(){this.streamChatService.stopAudioChat(),this.isAudioRecording=!1}toggleVideoRecording(){this.isVideoRecording?this.stopVideoRecording():this.startVideoRecording()}startVideoRecording(){if(this.sessionHasUsedBidi.has(this.sessionId)){this.openSnackBar(kgA,"OK");return}let e=this.chatPanel()?.videoContainer;e&&(this.isVideoRecording=!0,this.streamChatService.startVideoChat({appName:this.appName,userId:this.userId,sessionId:this.sessionId,videoContainer:e}),this.messages.update(A=>[...A,{role:"user",text:"Speaking..."}]),this.sessionHasUsedBidi.add(this.sessionId))}stopVideoRecording(){let e=this.chatPanel()?.videoContainer;e&&(this.streamChatService.stopVideoChat(e),this.isVideoRecording=!1)}getAsyncFunctionsFromParts(e,A,i){for(let n of A)n.functionCall&&e.includes(n.functionCall.id)&&this.longRunningEvents.push({function:n.functionCall,invocationId:i})}openOAuthPopup(e){return new Promise((A,i)=>{if(!this.safeValuesService.windowOpen(window,e,"oauthPopup","width=600,height=700")){i("Popup blocked!");return}let o=a=>{if(a.origin!==window.location.origin)return;let{authResponseUrl:r}=a.data;r?(A(r),window.removeEventListener("message",o)):console.log("OAuth failed",a)};window.addEventListener("message",o)})}toggleSidePanel(){this.showSidePanel?(this.sideDrawer()?.close(),this.selectedEvent=void 0,this.selectedEventIndex=void 0):this.sideDrawer()?.open(),this.showSidePanel=!this.showSidePanel}handleTabChange(e){this.isChatMode()||(this.resetEditEvalCaseVars(),this.handleReturnToSession(!0))}handleReturnToSession(e){this.sessionTab?.getSession(this.sessionId),this.evalTab()?.resetEvalCase(),this.isChatMode.set(!0)}handleEvalNotInstalled(e){e&&this.openSnackBar(e,"OK")}resetEventsAndMessages({keepMessages:e}={}){e||(this.eventData.clear(),this.messages.set([])),this.artifacts=[]}loadTraceData(){this.eventService.getTrace(this.sessionId).pipe(zo(),ta(()=>se([]))).subscribe(e=>{this.traceData=e,this.traceService.setEventData(this.eventData),this.traceService.setMessages(this.messages())}),this.bottomPanelVisible=!1,this.changeDetectorRef.detectChanges()}populateMessages(e,A=!1,i=!1){this.resetEventsAndMessages({keepMessages:i&&this.sessionIdOfLoadedMessages===this.sessionId}),e.forEach(n=>{let o=this.isEventA2aResponse(n),a=o?this.combineA2uiDataParts(n.content?.parts):n.content?.parts||[],r=A?[...a].reverse():a;if(n.author==="user"){let s={role:"user",eventId:n.id};r.forEach(g=>{this.processPartIntoMessage(g,n,s)}),A?this.messages.update(g=>[s,...g]):this.messages.update(g=>[...g,s]),this.eventData.has(n.id)||(this.eventData.set(n.id,n),this.eventData=new Map(this.eventData))}else{let s={role:"bot",eventId:n.id};r.forEach(g=>{o&&this.isA2uiDataPart(g)&&(g={a2ui:this.extractA2aDataPartJson(g).data}),this.processPartIntoMessage(g,n,s)}),A?this.messages.update(g=>[s,...g]):this.messages.update(g=>[...g,s]),this.eventData.has(n.id)||(this.eventData.set(n.id,n),this.eventData=new Map(this.eventData))}}),this.sessionIdOfLoadedMessages=this.sessionId}updateWithSelectedSession(e){!e||!e.id||!e.events||!e.state||(this.traceService.resetTraceService(),this.sessionId=e.id,this.currentSessionState=e.state,this.evalCase=null,this.isChatMode.set(!0),this.isSessionUrlEnabledObs.subscribe(A=>{A&&this.updateSelectedSessionUrl()}),this.resetEventsAndMessages(),e.events.forEach(A=>{if(A.author==="user"){let i={role:"user",eventId:A.id};A.content?.parts?.forEach(n=>{this.processPartIntoMessage(n,A,i)}),this.messages.update(n=>[...n,i]),this.eventData.has(A.id)||(this.eventData.set(A.id,A),this.eventData=new Map(this.eventData))}else{let i={role:"bot",eventId:A.id};A.content?.parts?.forEach(n=>{this.processPartIntoMessage(n,A,i)}),this.messages.update(n=>[...n,i]),this.eventData.has(A.id)||(this.eventData.set(A.id,A),this.eventData=new Map(this.eventData))}}),this.eventService.getTrace(this.sessionId).pipe(zo(),ta(()=>se([]))).subscribe(A=>{this.traceData=A,this.traceService.setEventData(this.eventData),this.traceService.setMessages(this.messages())}),this.sessionService.canEdit(this.userId,e).pipe(zo(),ta(()=>se(!0))).subscribe(A=>{this.chatPanel()?.canEditSession.set(A),this.canEditSession.set(A)}),this.featureFlagService.isInfinityMessageScrollingEnabled().pipe(zo()).subscribe(A=>{A||this.populateMessages(e.events||[]),this.loadTraceData()}))}updateWithSelectedEvalCase(e){this.evalCase=e,this.isChatMode.set(!1),this.resetEventsAndMessages();let A=0;for(let i of e.conversation){if(i.userContent?.parts)for(let n of i.userContent.parts)this.storeMessage(n,null,"user");if(i.intermediateData?.toolUses){let n=0;for(let o of i.intermediateData.toolUses){let a={functionCall:{name:o.name,args:o.args}};this.storeMessage(a,null,"bot",A,{toolUseIndex:n}),n++;let r={functionResponse:{name:o.name}};this.storeMessage(r,null,"bot")}}if(i.finalResponse?.parts){let n=0;for(let o of i.finalResponse.parts)this.storeMessage(o,null,"bot",A,{finalResponsePartIndex:n}),n++}A++}}updateSelectedEvalSetId(e){this.evalSetId=e}editEvalCaseMessage(e){this.isEvalCaseEditing.set(!0),this.userEditEvalCaseMessage=e.text,e.isEditing=!0,setTimeout(()=>{let A=this.chatPanel()?.textarea?.nativeElement;if(!A)return;A.focus();let i=A.value.length;e.text.charAt(i-1)===` -`&&i--,A.setSelectionRange(i,i)},0)}editFunctionArgs(e){this.isEvalCaseEditing.set(!0),this.dialog.open(Jm,{maxWidth:"90vw",maxHeight:"90vh",data:{dialogHeader:"Edit function arguments",functionName:e.functionCall.name,jsonContent:e.functionCall.args}}).afterClosed().subscribe(i=>{this.isEvalCaseEditing.set(!1),i&&(this.hasEvalCaseChanged.set(!0),e.functionCall.args=i,this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].intermediateData.toolUses[e.toolUseIndex].args=i)})}saveEvalCase(){this.evalService.updateEvalCase(this.appName,this.evalSetId,this.updatedEvalCase.evalId,this.updatedEvalCase).subscribe(e=>{this.openSnackBar("Eval case updated","OK"),this.resetEditEvalCaseVars()})}cancelEditEvalCase(){this.resetEditEvalCaseVars(),this.updateWithSelectedEvalCase(this.evalCase)}resetEditEvalCaseVars(){this.hasEvalCaseChanged.set(!1),this.isEvalCaseEditing.set(!1),this.isEvalEditMode.set(!1),this.updatedEvalCase=null}cancelEditMessage(e){e.isEditing=!1,this.isEvalCaseEditing.set(!1)}saveEditMessage(e){this.hasEvalCaseChanged.set(!0),this.isEvalCaseEditing.set(!1),e.isEditing=!1,e.text=this.userEditEvalCaseMessage?this.userEditEvalCaseMessage:" ",this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].finalResponse.parts[e.finalResponsePartIndex]={text:this.userEditEvalCaseMessage},this.userEditEvalCaseMessage=""}handleKeydown(e,A){e.key==="Enter"&&!e.shiftKey?(e.preventDefault(),this.saveEditMessage(A)):e.key==="Escape"&&this.cancelEditMessage(A)}deleteEvalCaseMessage(e,A){this.hasEvalCaseChanged.set(!0),this.messages.update(i=>i.filter((n,o)=>o!==A)),this.updatedEvalCase=structuredClone(this.evalCase),this.updatedEvalCase.conversation[e.invocationIndex].finalResponse.parts.splice(e.finalResponsePartIndex,1)}editEvalCase(){this.isEvalEditMode.set(!0)}deleteEvalCase(){let e={title:"Confirm delete",message:`Are you sure you want to delete ${this.evalCase.evalId}?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(zm,{width:"600px",data:e}).afterClosed().subscribe(i=>{i&&(this.evalTab()?.deleteEvalCase(this.evalCase.evalId),this.openSnackBar("Eval case deleted","OK"))})}onNewSessionClick(){this.createSession(),this.eventData.clear(),this.messages.set([]),this.artifacts=[],this.traceData=[],this.bottomPanelVisible=!1,this.selectedEvent=void 0,this.selectedEventIndex=void 0,this.evalTab()?.showEvalHistory&&this.evalTab()?.toggleEvalHistoryButton()}onFileSelect(e){let A=e.target;if(A.files)for(let i=0;i{e&&this.canvasComponent()?.loadFromYaml(e,this.appName)},error:e=>{console.error("Error loading agent configuration:",e),this._snackBar.open("Error loading agent configuration","OK")}})}exitBuilderMode(){let e=this.router.createUrlTree([],{queryParams:{mode:null},queryParamsHandling:"merge"}).toString();this.location.replaceState(e),this.isBuilderMode.set(!1),this.agentBuilderService.clear()}toggleBuilderAssistant(){this.showBuilderAssistant=!this.showBuilderAssistant}openAddItemDialog(){this.apps$.pipe(oo(1)).subscribe(e=>{let A=this.dialog.open(rw,{width:"600px",data:{existingAppNames:e??[]}})})}saveAgentBuilder(){this.canvasComponent()?.saveAgent(this.appName)}selectEvent(e){this.selectedEvent=this.eventData.get(e),this.selectedEventIndex=this.getIndexOfKeyInMap(e);let A;this.isEventFilteringEnabled()&&this.selectedEvent.invocationId&&(this.selectedEvent.timestamp||this.selectedEvent.timestampInMillis)&&(A={invocationId:this.selectedEvent.invocationId,timestamp:this.selectedEvent.timestamp??this.selectedEvent.timestampInMillis});let i=cA({id:this.selectedEvent.id},A);this.uiStateService.setIsEventRequestResponseLoading(!0),this.eventService.getEventTrace(i).subscribe(n=>{n[this.llmRequestKey]&&(this.llmRequest=JSON.parse(n[this.llmRequestKey])),n[this.llmResponseKey]&&(this.llmResponse=JSON.parse(n[this.llmResponseKey])),this.uiStateService.setIsEventRequestResponseLoading(!1)},()=>{this.uiStateService.setIsEventRequestResponseLoading(!1)}),this.eventService.getEvent(this.userId,this.appName,this.sessionId,this.selectedEvent.id).subscribe(n=>nt(this,null,function*(){if(!n.dotSrc){this.renderedEventGraph=void 0;return}let o=yield this.graphService.render(n.dotSrc);this.rawSvgString=o,this.renderedEventGraph=this.safeValuesService.bypassSecurityTrustHtml(o)}))}deleteSession(e){let A={title:"Confirm delete",message:`Are you sure you want to delete this session ${this.sessionId}?`,confirmButtonText:"Delete",cancelButtonText:"Cancel"};this.dialog.open(zm,{width:"600px",data:A}).afterClosed().subscribe(n=>{n&&this.sessionService.deleteSession(this.userId,this.appName,e).subscribe(o=>{let a=this.sessionTab?.refreshSession(e);a?this.sessionTab?.getSession(a.id):window.location.reload()})})}syncSelectedAppFromUrl(){Ir([this.activatedRoute.queryParams,this.apps$]).subscribe(([e,A])=>{let i=e.app;if(A&&A.length&&i){if(!A.includes(i)){this.openSnackBar(`Agent '${i}' not found`,"OK");return}this.selectedAppControl.setValue(i,{emitEvent:!1}),this.selectApp(i),this.agentService.getAgentBuilder(i).subscribe(n=>{!n||n==""?(this.disableBuilderSwitch=!0,this.agentBuilderService.setLoadedAgentData(void 0)):(this.disableBuilderSwitch=!1,this.agentBuilderService.setLoadedAgentData(n))}),this.isBuilderMode.set(!1)}e.mode==="builder"&&this.enterBuilderMode()})}updateSelectedAppUrl(){this.selectedAppControl.valueChanges.pipe(Vl(),Ze(Boolean)).subscribe(e=>{this.selectApp(e);let A=this.activatedRoute.snapshot.queryParams.app;e!==A&&this.router.navigate([],{queryParams:{app:e,mode:null},queryParamsHandling:"merge"})})}updateSelectedSessionUrl(){let e=this.router.createUrlTree([],{queryParams:{session:this.sessionId,userId:this.userId},queryParamsHandling:"merge"}).toString();this.location.replaceState(e)}handlePageEvent(e){if(e.pageIndex>=0){let A=this.getKeyAtIndexInMap(e.pageIndex);A&&(this.selectEvent(A),setTimeout(()=>{let i=this.messages().findIndex(n=>n.eventId===A);if(i!==-1){let n=this.chatPanel()?.scrollContainer?.nativeElement;if(!n)return;let o=n.querySelectorAll(".message-column-container");o&&o[i]&&o[i].scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}},0))}}closeSelectedEvent(){this.selectedEvent=void 0,this.selectedEventIndex=void 0}handleEscapeKey(e){e.key==="Escape"&&this.selectedEvent&&(e.preventDefault(),this.selectedEvent=void 0,this.selectedEventIndex=void 0)}getIndexOfKeyInMap(e){let A=0,i=(o,a)=>0,n=Array.from(this.eventData.keys()).sort(i);for(let o of n){if(o===e)return A;A++}}getKeyAtIndexInMap(e){let A=(n,o)=>0,i=Array.from(this.eventData.keys()).sort(A);if(e>=0&&e{console.log(e),this.downloadService.downloadObjectAsJson(e,`session-${this.sessionId}.json`)})}updateState(){this.dialog.open(Jm,{maxWidth:"90vw",maxHeight:"90vh",data:{dialogHeader:"Update state",jsonContent:this.currentSessionState}}).afterClosed().subscribe(A=>{A&&this.updatedSessionState.set(A)})}removeStateUpdate(){this.updatedSessionState.set(null)}closeTraceEventDetailPanel(){this.bottomPanelVisible=!1,this.traceService.selectedRow(void 0),this.traceService.setHoveredMessages(void 0,"")}importSession(){let e=document.createElement("input");e.type="file",e.accept="application/json",e.onchange=()=>{if(!e.files||e.files.length===0)return;let A=e.files[0],i=new FileReader;i.onload=n=>{if(n.target?.result)try{let o=JSON.parse(n.target.result);if(!o.userId||!o.appName||!o.events){this.openSnackBar("Invalid session file format","OK");return}this.sessionService.importSession(o.userId,o.appName,o.events).subscribe(a=>{this.openSnackBar("Session imported","OK"),this.sessionTab?.refreshSession()})}catch{this.openSnackBar("Error parsing session file","OK")}},i.readAsText(A)},e.click()}injectCustomIconColorStyle(e,A){if(this.document.getElementById(e))return;let i=this.renderer.createElement("style");this.renderer.setAttribute(i,"id",e),this.renderer.setAttribute(i,"type","text/css");let n=` - .${e} { - background-color: ${A} !important; - } - `;this.renderer.appendChild(i,this.renderer.createText(n)),this.renderer.appendChild(this.document.head,i)}static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-chat"]],viewQuery:function(A,i){A&1&&rs(i.chatPanel,Vh,5)(i.canvasComponent,jh,5)(i.sideDrawer,OOA,5)(i.sidePanel,$h,5)(i.evalTab,$c,5)(i.bottomPanelRef,POA,5),A&2&&Dr(6)},hostBindings:function(A,i){A&1&&tA("keydown",function(o){return i.handleEscapeKey(o)},m2)},features:[dt([{provide:B8,useClass:KK}])],ngContentSelectors:qOA,decls:8,vars:3,consts:[["sideDrawer",""],["bottomPanel",""],["autosize","",1,"drawer-container"],[1,"material-symbols-outlined",2,"position","absolute","width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","20px","z-index","9999",3,"matTooltip"],["mode","side","appResizableDrawer","",1,"side-drawer"],[3,"isApplicationSelectorEnabledObs","apps$","isLoadingApps","selectedAppControl","showSidePanel","appName","userId","sessionId","traceData","eventData","currentSessionState","artifacts","selectedEvent","selectedEventIndex","renderedEventGraph","rawSvgString","llmRequest","llmResponse","disableBuilderIcon"],[1,"builder-mode-container"],[1,"chat-container"],[1,"material-symbols-outlined",2,"position","absolute","width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","20px","z-index","9999",3,"click","matTooltip"],[3,"closePanel","tabChange","sessionSelected","sessionReloaded","evalCaseSelected","evalSetIdSelected","returnToSession","evalNotInstalled","page","closeSelectedEvent","openImageDialog","appSelectionChange","openAddItemDialog","enterBuilderMode","isApplicationSelectorEnabledObs","apps$","isLoadingApps","selectedAppControl","showSidePanel","appName","userId","sessionId","traceData","eventData","currentSessionState","artifacts","selectedEvent","selectedEventIndex","renderedEventGraph","rawSvgString","llmRequest","llmResponse","disableBuilderIcon"],[3,"exitBuilderMode","closePanel","appNameInput"],[1,"resize-handler"],[1,"builder-exit-button"],["mat-icon-button","","matTooltip","Accept",1,"builder-mode-action-button",3,"click"],["mat-icon-button","","matTooltip","Exit Builder Mode",1,"builder-mode-action-button",3,"click"],["mat-icon-button","","matTooltip","Builder Assistant",1,"builder-mode-action-button",3,"click"],[3,"toggleSidePanelRequest","builderAssistantCloseRequest","showSidePanel","showBuilderAssistant","appNameInput"],[1,"chat-toolbar",3,"ngClass"],[1,"chat-card"],["mat-fab","","color","primary",1,"fab-button"],[3,"appName","messages","isChatMode","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userInput","userEditEvalCaseMessage","selectedFiles","updatedSessionState","eventData","selectedEvent","isAudioRecording","isVideoRecording","hoveredEventMessageIndices","sessionName"],["appResizableBottomPanel","",1,"trace-detail-container"],["matTooltipPosition","left",1,"adk-web-developer-ui-disclaimer",2,"align-self","flex-end",3,"matTooltip"],[1,"material-symbols-outlined",2,"width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","-2px","z-index","9999",3,"matTooltip"],[1,"material-symbols-outlined",2,"width","24px","height","24px","color","#c4c7c5","cursor","pointer","margin-left","20px","margin-top","-2px","z-index","9999",3,"click","matTooltip"],[2,"display","flex"],[1,"toolbar-session-text"],[1,"toolbar-session-id"],[1,"toolbar-actions"],["mat-button","",2,"height","30px",3,"click"],["mat-flat-button","",2,"height","30px",3,"click","disabled"],[1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],[2,"display","flex","align-items","center"],[1,"toolbar-session-text",2,"margin-left","16px"],[1,"readonly-badge"],[1,"readonly-session-message"],[1,"toolbar-sse-toggle"],[1,"example-margin",3,"change","checked","disabled"],[2,"margin-left","8px","margin-right","8px","height","22px",3,"vertical"],["id","toolbar-new-session-button",3,"click","matTooltip"],["id","toolbar-delete-session-button",1,"material-symbols-outlined","toolbar-icon",3,"matTooltip"],["id","toolbar-export-session-button",1,"material-symbols-outlined","toolbar-icon",3,"matTooltip"],["id","toolbar-import-session-button",1,"material-symbols-outlined","toolbar-icon",3,"matTooltip"],["id","toolbar-delete-session-button",1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],["id","toolbar-export-session-button",1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],["id","toolbar-import-session-button",1,"material-symbols-outlined","toolbar-icon",3,"click","matTooltip"],[1,"empty-state-container"],[1,"warning"],[1,"error"],["mat-fab","","color","primary",1,"fab-button",3,"click"],[3,"userInputChange","userEditEvalCaseMessageChange","clickEvent","handleKeydown","cancelEditMessage","saveEditMessage","openViewImageDialog","openBase64InNewTab","editEvalCaseMessage","deleteEvalCaseMessage","editFunctionArgs","fileSelect","removeFile","removeStateUpdate","sendMessage","updateState","toggleAudioRecording","toggleVideoRecording","appName","messages","isChatMode","evalCase","isEvalEditMode","isEvalCaseEditing","isEditFunctionArgsEnabled","userInput","userEditEvalCaseMessage","selectedFiles","updatedSessionState","eventData","selectedEvent","isAudioRecording","isVideoRecording","hoveredEventMessageIndices","sessionName"],[1,"bottom-resize-handler"],[3,"panelClosed","userId","appName","sessionId"]],template:function(A,i){A&1&&(Yt(jOA),m(0,"mat-drawer-container",2),V(1,ZOA,2,1,"span",3),m(2,"mat-drawer",4,0),V(4,XOA,1,19,"app-side-panel",5)(5,$OA,2,1),w(),V(6,APA,12,5,"div",6)(7,vPA,10,8,"div",7),w()),A&2&&(p(),W(!i.showSidePanel&&i.appName===""?1:-1),p(3),W(i.isBuilderMode()?5:4),p(2),W(i.isBuilderMode()?6:7))},dependencies:[dk,xa,Ik,y8,Nn,r0,Fn,E0,gs,fn,_z,r8,aE,oY,D8,eb,Vh,$h,jh,_v,ls],styles:[".expand-side-drawer[_ngcontent-%COMP%]{position:relative;top:4%;left:1%}.drawer-container[_ngcontent-%COMP%]{height:100%;background-color:var(--chat-drawer-container-background-color)}.drawer-header[_ngcontent-%COMP%]{width:100%;display:flex;justify-content:space-between;align-items:center;--mat-button-filled-container-color: #89b4f8;--mat-button-filled-label-text-color: black}.drawer-header[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{width:36px;height:36px;color:#bdc1c6;cursor:pointer;display:flex;align-items:center;justify-content:center}.drawer-header[_ngcontent-%COMP%] .drawer-logo[_ngcontent-%COMP%]{margin-left:9px;display:flex;align-items:center}.drawer-header[_ngcontent-%COMP%] .drawer-logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:9px}.drawer-header[_ngcontent-%COMP%] .drawer-logo[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:.1px}.chat-container[_ngcontent-%COMP%]{width:100%;height:100%;max-width:100%;margin:auto;display:flex;flex-direction:column;flex:1}.event-container[_ngcontent-%COMP%]{color:var(--chat-event-container-color)}.chat-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;overflow:hidden;flex:1;min-height:12%;box-shadow:none;background-color:var(--chat-card-background-color)}.function-event-button[_ngcontent-%COMP%] .mdc-button__label[_ngcontent-%COMP%]{font-family:Google Sans Mono,monospace}.loading-bar[_ngcontent-%COMP%]{width:100px;margin:15px}.chat-messages[_ngcontent-%COMP%]{flex-grow:1;overflow-y:auto;padding:20px;margin-top:16px}.message-card[_ngcontent-%COMP%]{padding:5px 20px;margin:5px;border-radius:20px;max-width:80%;font-size:14px;font-weight:400;position:relative;display:inline-block}.function-event-button[_ngcontent-%COMP%]{background-color:var(--chat-function-event-button-background-color);margin:5px 5px 10px}.function-event-button-highlight[_ngcontent-%COMP%]{background-color:var(--chat-function-event-button-highlight-background-color);border-color:var(--chat-function-event-button-highlight-border-color)!important;color:var(--chat-function-event-button-highlight-color)!important}.user-message[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center}.user-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-user-message-message-card-background-color);align-self:flex-end;color:var(--chat-user-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]{display:flex;align-items:center}.bot-message[_ngcontent-%COMP%] .message-card[_ngcontent-%COMP%]{background-color:var(--chat-bot-message-message-card-background-color);align-self:flex-start;color:var(--chat-bot-message-message-card-color);box-shadow:none}.bot-message[_ngcontent-%COMP%]:focus-within .message-card[_ngcontent-%COMP%]{background-color:var(--chat-bot-message-focus-within-message-card-background-color);border:1px solid var(--chat-bot-message-focus-within-message-card-border-color)}.message-textarea[_ngcontent-%COMP%]{background-color:var(--chat-message-textarea-background-color);max-width:100%;border:none;font-family:Google Sans,Helvetica Neue,sans-serif}.message-textarea[_ngcontent-%COMP%]:focus{background-color:var(--chat-message-textarea-focus-background-color);outline:none}.edit-message-buttons-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%]{visibility:hidden;position:absolute;left:10px;z-index:10;background-color:var(--chat-eval-compare-container-background-color);overflow:hidden;border-radius:20px;padding:5px 20px;margin-bottom:10px;font-size:16px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .actual-result[_ngcontent-%COMP%]{border-right:2px solid var(--chat-actual-result-border-right-color);padding-right:8px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%] .eval-compare-container[_ngcontent-%COMP%] .expected-result[_ngcontent-%COMP%]{padding-left:12px;min-width:350px;max-width:350px}.message-card[_ngcontent-%COMP%]:hover .eval-compare-container[_ngcontent-%COMP%]{visibility:visible}.actual-expected-compare-container[_ngcontent-%COMP%]{display:flex}.score-threshold-container[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:10px;align-items:center;margin-top:15px;font-size:14px;font-weight:600}.eval-response-header[_ngcontent-%COMP%]{padding-bottom:5px;border-bottom:2px solid var(--chat-eval-response-header-border-bottom-color);font-style:italic;font-weight:700}.header-expected[_ngcontent-%COMP%]{color:var(--chat-header-expected-color)}.header-actual[_ngcontent-%COMP%]{color:var(--chat-header-actual-color)}.eval-case-edit-button[_ngcontent-%COMP%]{cursor:pointer;margin-left:4px;margin-right:4px}.eval-pass[_ngcontent-%COMP%]{display:flex;color:var(--chat-eval-pass-color)}.eval-fail[_ngcontent-%COMP%]{display:flex;color:var(--chat-eval-fail-color)}.navigation-button-sidepanel[_ngcontent-%COMP%]{margin-left:auto;margin-right:20px}.fab-button[_ngcontent-%COMP%]{position:fixed;bottom:200px;right:100px;z-index:1000}.sidepanel-toggle[_ngcontent-%COMP%]{position:relative;top:100px;z-index:1000}.side-drawer[_ngcontent-%COMP%]{background-color:var(--chat-side-drawer-background-color);color:var(--chat-side-drawer-color);border-radius:0}.file-preview[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px;margin-bottom:8px}.file-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:5px;background:var(--chat-file-item-background-color);padding:5px;border-radius:4px}button[_ngcontent-%COMP%]{margin-left:20px;margin-right:20px}.empty-state-container[_ngcontent-%COMP%]{color:var(--chat-empty-state-container-color);height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:Google Sans,sans-serif;font-weight:400;letter-spacing:normal;line-height:24px;font-size:18px}.empty-state-container[_ngcontent-%COMP%] pre.warning[_ngcontent-%COMP%]{color:var(--chat-warning-color)}.empty-state-container[_ngcontent-%COMP%] pre.error[_ngcontent-%COMP%]{color:var(--chat-error-color)}[_nghost-%COMP%] .mat-mdc-unelevated-button:not(:disabled){color:var(--chat-mat-mdc-unelevated-button-color);background-color:var(--chat-mat-mdc-unelevated-button-background-color)}[_nghost-%COMP%] .mdc-linear-progress__buffer-dots{background-image:radial-gradient(circle,var(--chat-mdc-linear-progress-buffer-dots-background-color, var(--mat-sys-surface-variant)) calc(var(--mat-progress-bar-track-height, 4px) / 2),transparent 0)}[_nghost-%COMP%] .mat-mdc-select-arrow-wrapper{margin-left:4px}[_nghost-%COMP%] .mat-mdc-text-field-wrapper{border:1px solid var(--chat-mat-mdc-text-field-wrapper-border-color)}[_nghost-%COMP%] .mdc-notched-outline__leading, [_nghost-%COMP%] .mdc-notched-outline__notch, [_nghost-%COMP%] .mdc-notched-outline__trailing{border:none}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{padding:0 10px 0 40px}[_nghost-%COMP%] .segment-key{color:var(--chat-segment-key-color)!important}.mat-mdc-select-placeholder[_ngcontent-%COMP%]{margin-left:20px}.bottom-resize-handler[_ngcontent-%COMP%]{background:var(--chat-bottom-resize-handler-background-color);height:5px;border-radius:4px;position:absolute;display:block;width:20%;left:40%;top:0;right:0;z-index:9999;cursor:ns-resize}.trace-detail-container[_ngcontent-%COMP%]{position:relative;background-color:var(--chat-trace-detail-container-background-color)}.trace-detail-container[_ngcontent-%COMP%] app-trace-event[_ngcontent-%COMP%]{padding-top:8px}.new-session-button[_ngcontent-%COMP%]{margin-top:0;margin-left:50px;width:130px;height:28px;font-size:14px}.app-select-container[_ngcontent-%COMP%]{width:35%;background-color:#212123;height:30px;display:flex;justify-content:space-between;padding-left:20px;padding-right:20px;border-radius:10px;padding-top:5px}.app-select-container[_ngcontent-%COMP%]{--mat-select-placeholder-text-color: #8ab4f8;--mat-select-enabled-trigger-text-color: #8ab4f8;--mat-select-enabled-arrow-color: #8ab4f8}.adk-checkbox[_ngcontent-%COMP%]{position:fixed;bottom:0;left:0;right:0;margin-bottom:20px;margin-left:20px}.chat-toolbar[_ngcontent-%COMP%]{position:sticky;top:0;height:48px;background:var(--chat-toolbar-background-color);display:flex;align-items:center;z-index:10}.chat-toolbar.edit-mode[_ngcontent-%COMP%]{background:var(--chat-toolbar-edit-mode-background-color)}.toolbar-actions[_ngcontent-%COMP%]{margin-left:auto;display:flex;align-items:center;flex-shrink:0}.toolbar-session-text[_ngcontent-%COMP%]{color:var(--chat-toolbar-session-text-color);font-family:Roboto;font-size:12px;font-style:normal;font-weight:500;line-height:12px;letter-spacing:.8px;text-transform:uppercase;margin-left:20px;padding-top:4px;flex-shrink:0}.toolbar-session-id[_ngcontent-%COMP%]{color:var(--chat-toolbar-session-id-color);font-family:Google Sans Mono,monospace;font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;margin-left:5px;flex-shrink:0}.toolbar-icon[_ngcontent-%COMP%]{width:24px;height:24px;color:var(--chat-toolbar-icon-color);cursor:pointer;margin-right:16px}#toolbar-new-session-button[_ngcontent-%COMP%]{font-size:14px;margin-right:16px;color:var(--chat-toolbar-new-session-color);cursor:pointer;display:flex;align-items:center}.toolbar-sse-toggle[_ngcontent-%COMP%]{--mat-slide-toggle-label-text-size: 14px;--mat-slide-toggle-label-text-color: var(--chat-toolbar-sse-toggle-label-text-color);--mat-slide-toggle-unselected-track-color: var(--chat-toolbar-sse-toggle-unselected-track-color);--mat-slide-toggle-unselected-focus-track-color: var(--chat-toolbar-sse-toggle-unselected-track-color);--mat-slide-toggle-unselected-hover-track-color: var(--chat-toolbar-sse-toggle-unselected-track-color);--mat-slide-toggle-unselected-handle-color: var(--chat-toolbar-sse-toggle-unselected-handle-color);--mat-slide-toggle-unselected-focus-handle-color: var(--chat-toolbar-sse-toggle-unselected-handle-color);--mat-slide-toggle-unselected-hover-handle-color: var(--chat-toolbar-sse-toggle-unselected-handle-color);--mat-slide-toggle-selected-track-color: var(--chat-toolbar-sse-toggle-selected-track-color);--mat-slide-toggle-selected-focus-track-color: var(--chat-toolbar-sse-toggle-selected-track-color);--mat-slide-toggle-selected-hover-track-color: var(--chat-toolbar-sse-toggle-selected-track-color);--mat-slide-toggle-selected-handle-color: var(--chat-toolbar-sse-toggle-selected-handle-color);--mat-slide-toggle-selected-focus-handle-color: var(--chat-toolbar-sse-toggle-selected-handle-color);--mat-slide-toggle-selected-hover-handle-color: var(--chat-toolbar-sse-toggle-selected-handle-color);--mat-slide-toggle-track-height: 24px;--mat-slide-toggle-track-width: 46px;--mat-slide-toggle-track-outline-color: var(--chat-toolbar-sse-toggle-track-outline-color);--mat-slide-toggle-with-icon-handle-size: 20px}[_nghost-%COMP%] pre{white-space:pre-wrap;word-break:break-word;overflow-x:auto;max-width:100%}.readonly-badge[_ngcontent-%COMP%]{color:var(--chat-readonly-badge-color);background-color:var(--chat-readonly-badge-background-color);border-radius:4px;padding:1px 6px;display:flex;align-items:center;margin-left:8px;font-size:12px;line-height:16px;gap:4px;white-space:nowrap}.readonly-badge[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:14px;width:14px;height:14px;padding-top:1px;flex-shrink:0}.readonly-session-message[_ngcontent-%COMP%]{display:block;color:var(--chat-toolbar-session-text-color);margin-left:1em;font-weight:400;line-height:16px;letter-spacing:.3px;flex-shrink:1} .mat-drawer-content{display:flex!important} .mat-drawer{border-right:1px solid var(--chat-mat-drawer-border-right-color)!important}.builder-mode-container[_ngcontent-%COMP%]{position:relative;width:100%;height:100vh;display:flex;flex-direction:column;background-color:var(--builder-container-background-color)}.builder-exit-button[_ngcontent-%COMP%]{position:absolute;top:20px;right:20px;z-index:1000;display:flex;gap:8px}.builder-mode-action-button[_ngcontent-%COMP%]{background-color:var(--builder-secondary-background-color)!important;color:var(--builder-text-tertiary-color)!important;border-radius:50%!important;transition:all .2s ease!important;margin:0!important;padding:0!important;width:40px!important;height:40px!important;min-width:40px!important;min-height:40px!important;border:1px solid var(--builder-tool-item-border-color)!important;box-shadow:0 2px 4px #0000001a!important;display:flex!important;align-items:center!important;justify-content:center!important}.builder-mode-action-button[_ngcontent-%COMP%]:hover{background-color:var(--builder-tool-item-hover-background-color)!important;box-shadow:0 4px 8px #00000026!important}.builder-mode-action-button.active[_ngcontent-%COMP%]{background-color:var(--builder-button-primary-background-color)!important;color:#fff!important;border-color:var(--builder-button-primary-background-color)!important}.builder-mode-action-button[_ngcontent-%COMP%] .mat-mdc-button-touch-target[_ngcontent-%COMP%]{display:none!important}.builder-mode-action-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:20px;width:20px;height:20px}app-canvas[_ngcontent-%COMP%]{width:100%!important;height:100%!important;flex:1!important;display:flex!important;flex-direction:column!important;min-height:0!important}.build-mode-container[_ngcontent-%COMP%]{display:flex;width:100%;height:100%;background-color:var(--builder-container-background-color)}.build-left-panel[_ngcontent-%COMP%], .build-right-panel[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;background-color:var(--builder-tertiary-background-color);border:1px solid var(--builder-border-color);margin:10px;border-radius:8px}.build-panel-header[_ngcontent-%COMP%]{background-color:var(--builder-secondary-background-color);padding:16px 20px;border-bottom:1px solid var(--builder-border-color);border-radius:8px 8px 0 0}.build-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;color:var(--builder-text-primary-color);font-size:16px;font-weight:500;font-family:Google Sans,Helvetica Neue,sans-serif}.build-panel-content[_ngcontent-%COMP%]{flex:1;padding:20px;color:var(--builder-text-secondary-color);overflow-y:auto}.build-panel-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;line-height:1.5}.app-name-option[_ngcontent-%COMP%], .app-select[_ngcontent-%COMP%]{color:var(--builder-text-secondary-color);font-family:Google Sans Mono,monospace;font-style:normal;font-weight:400;padding-left:unset}.adk-web-developer-ui-disclaimer[_ngcontent-%COMP%]{padding-left:4px;padding-bottom:4px;font-size:10px;color:var(--adk-web-text-color-light-gray)}"]})};var Au=class t{static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-root"]],decls:1,vars:0,template:function(A,i){A&1&&GA(0,"app-chat")},dependencies:[ib],encapsulation:2})};var kPA=[{path:"",component:Au}],nb=class t{static \u0275fac=function(A){return new(A||t)};static \u0275mod=$e({type:t});static \u0275inj=Xe({imports:[j6.forRoot(kPA),j6]})};var ob=class{static getRuntimeConfig(){return window.runtimeConfig}};function SPA(t,e){if(t&1&&(li(0,"a",0),Di(1,"img",1),K(2),Ei()),t&2){v();let A=Vs(0),i=Vs(1);p(),vo("src",D1(A),Ka),p(),Se(" ",i," ")}}function xPA(t,e){t&1&&(li(0,"div"),K(1," Invalid custom logo config. Make sure that your runtime config specifies both imgUrl and text in the logo field. "),Ei())}var ab=class t{logoConfig=ob.getRuntimeConfig().logo;static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-custom-logo"]],decls:4,vars:3,consts:[["href","/"],["width","32px","height","32px",1,"orcas-logo",3,"src"]],template:function(A,i){if(A&1&&(Ur(0)(1),V(2,SPA,3,3,"a",0)(3,xPA,2,0,"div")),A&2){let n=_g(i.logoConfig==null?null:i.logoConfig.imageUrl);p();let o=_g(i.logoConfig==null?null:i.logoConfig.text);p(),W(n&&o?2:3)}},styles:[`a[_ngcontent-%COMP%]{color:inherit;text-decoration:none;display:flex;align-items:center;gap:8px} - - - - - - - - - - - - - - - - -`]})};var RPA=(t,e)=>({"font-style":t,color:e}),rb=class t{text=rt("");thought=rt(!1);static \u0275fac=function(A){return new(A||t)};static \u0275cmp=kA({type:t,selectors:[["app-markdown"]],inputs:{text:[1,"text"],thought:[1,"thought"]},features:[dt([e4()])],decls:1,vars:5,consts:[[3,"data","ngStyle"]],template:function(A,i){A&1&&GA(0,"markdown",0),A&2&&$("data",i.text())("ngStyle",Zl(2,RPA,i.thought()?"italic":"normal",i.thought()?"#9aa0a6":"inherit"))},dependencies:[ma,dp,YT,JT],encapsulation:2})};var NPA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-as-n":!0,"layout-dis-iflx":!0,"layout-al-c":!0},FPA={"layout-w-100":!0},_PA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-mt-0":!0,"layout-mb-2":!0,"typography-sz-bm":!0,"color-c-n10":!0},LPA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-pt-3":!0,"layout-pb-3":!0,"layout-pl-5":!0,"layout-pr-5":!0,"layout-mb-1":!0,"border-br-16":!0,"border-bw-0":!0,"border-c-n70":!0,"border-bs-s":!0,"color-bgc-s30":!0,"color-c-n100":!0,"behavior-ho-80":!0},UK={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mb-2":!0,"color-c-n10":!0},GPA=Ge(cA({},UK),{"typography-sz-tl":!0}),KPA=Ge(cA({},UK),{"typography-sz-tm":!0}),UPA=Ge(cA({},UK),{"typography-sz-ts":!0}),JPA={"behavior-sw-n":!0},_gA={"typography-f-sf":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-pl-4":!0,"layout-pr-4":!0,"layout-pt-2":!0,"layout-pb-2":!0,"border-br-6":!0,"border-bw-1":!0,"color-bc-s70":!0,"border-bs-s":!0,"layout-as-n":!0,"color-c-n10":!0},YPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0,"color-c-n10":!0},TPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},HPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},zPA={"typography-f-s":!0,"typography-fs-n":!0,"typography-w-400":!0,"layout-m-0":!0,"typography-sz-bm":!0,"layout-as-n":!0},OPA={"typography-f-c":!0,"typography-fs-n":!0,"typography-w-400":!0,"typography-sz-bm":!0,"typography-ws-p":!0,"layout-as-n":!0},PPA=Ge(cA({},_gA),{"layout-r-none":!0,"layout-fs-c":!0}),jPA={"layout-el-cv":!0},SgA=Zs.merge(NPA,{"color-c-p30":!0}),qPA=Zs.merge(_gA,{"color-c-n5":!0}),VPA=Zs.merge(PPA,{"color-c-n5":!0}),WPA=Zs.merge(LPA,{"color-c-n100":!0}),xgA=Zs.merge(GPA,{"color-c-n5":!0}),RgA=Zs.merge(KPA,{"color-c-n5":!0}),NgA=Zs.merge(UPA,{"color-c-n5":!0}),ZPA=Zs.merge(_PA,{"color-c-n5":!0}),FgA=Zs.merge(YPA,{"color-c-n60":!0}),XPA=Zs.merge(OPA,{"color-c-n35":!0}),$PA=Zs.merge(TPA,{"color-c-n35":!0}),AjA=Zs.merge(HPA,{"color-c-n35":!0}),ejA=Zs.merge(zPA,{"color-c-n35":!0}),LgA={additionalStyles:{Card:{},Button:{"--n-60":"var(--n-100)"},Image:{"max-width":"120px","max-height":"120px",marginLeft:"auto",marginRight:"auto"}},components:{AudioPlayer:{},Button:{"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-5":!0,"layout-pr-5":!0,"border-br-2":!0,"border-bw-0":!0,"border-bs-s":!0,"color-bgc-p30":!0,"color-c-n100":!0,"behavior-ho-70":!0},Card:{"border-br-4":!0,"color-bgc-p100":!0,"color-bc-n90":!0,"border-bw-1":!0,"border-bs-s":!0,"layout-pt-4":!0,"layout-pb-4":!0,"layout-pl-4":!0,"layout-pr-4":!0},CheckBox:{element:{"layout-m-0":!0,"layout-mr-2":!0,"layout-p-2":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0,"color-c-p30":!0},label:{"color-c-p30":!0,"typography-f-sf":!0,"typography-v-r":!0,"typography-w-400":!0,"layout-flx-1":!0,"typography-sz-ll":!0},container:{"layout-dsp-iflex":!0,"layout-al-c":!0}},Column:{},DateTimeInput:{container:{},label:{},element:{"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-3":!0,"layout-pr-3":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0}},Divider:{"color-bgc-n90":!0,"layout-mt-6":!0,"layout-mb-6":!0},Image:{all:{"border-br-50pc":!0,"layout-el-cv":!0,"layout-w-100":!0,"layout-h-100":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0,"layout-sp-c":!0,"layout-mb-3":!0},avatar:{},header:{},icon:{},largeFeature:{},mediumFeature:{},smallFeature:{}},Icon:{"border-br-1":!0,"layout-p-2":!0,"color-bgc-n98":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0,"layout-sp-c":!0},List:{"layout-g-4":!0,"layout-p-2":!0},Modal:{backdrop:{"color-bbgc-p60_20":!0},element:{"border-br-2":!0,"color-bgc-p100":!0,"layout-p-4":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bc-p80":!0}},MultipleChoice:{container:{},label:{},element:{}},Row:{"layout-g-4":!0},Slider:{container:{},label:{},element:{}},Tabs:{container:{},controls:{all:{},selected:{}},element:{}},Text:{all:{"layout-w-100":!0,"layout-g-2":!0,"color-c-p30":!0},h1:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-2":!0,"layout-p-0":!0,"typography-sz-tl":!0},h2:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-2":!0,"layout-p-0":!0,"typography-sz-tl":!0},h3:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"typography-sz-ts":!0},h4:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"typography-sz-bl":!0},h5:{"typography-f-sf":!0,"typography-ta-c":!0,"typography-v-r":!0,"typography-w-500":!0,"layout-mt-0":!0,"layout-mr-0":!0,"layout-ml-0":!0,"layout-mb-0":!0,"layout-p-0":!0,"color-c-n30":!0,"typography-sz-bm":!0,"layout-mb-1":!0},body:{},caption:{}},TextField:{container:{"typography-sz-bm":!0,"layout-w-100":!0,"layout-g-2":!0,"layout-dsp-flexhor":!0,"layout-al-c":!0},label:{"layout-flx-0":!0},element:{"typography-sz-bm":!0,"layout-pt-2":!0,"layout-pb-2":!0,"layout-pl-3":!0,"layout-pr-3":!0,"border-br-12":!0,"border-bw-1":!0,"border-bs-s":!0,"color-bgc-p100":!0,"color-bc-p60":!0,"color-c-n30":!0,"color-c-p30":!0}},Video:{"border-br-5":!0,"layout-el-cv":!0}},elements:{a:SgA,audio:FPA,body:ZPA,button:WPA,h1:xgA,h2:RgA,h3:NgA,h4:{},h5:{},iframe:JPA,input:qPA,p:FgA,pre:XPA,textarea:VPA,video:jPA},markdown:{p:[...Object.keys(FgA)],h1:[...Object.keys(xgA)],h2:[...Object.keys(RgA)],h3:[...Object.keys(NgA)],h4:[],h5:[],ul:[...Object.keys(AjA)],ol:[...Object.keys($PA)],li:[...Object.keys(ejA)],a:[...Object.keys(SgA)],strong:[],em:[]}};var sb=class t{nodes=[];subAgentIdCounter=1;selectedToolSubject=new Ht(void 0);selectedNodeSubject=new Ht(void 0);selectedCallbackSubject=new Ht(void 0);loadedAgentDataSubject=new Ht(void 0);agentToolsMapSubject=new Ht(new Map);agentToolsSubject=new Ht(void 0);newAgentToolBoardSubject=new Ht(void 0);agentCallbacksMapSubject=new Ht(new Map);agentCallbacksSubject=new Ht(void 0);agentToolDeletionSubject=new Ht(void 0);deleteSubAgentSubject=new Ht("");addSubAgentSubject=new Ht({parentAgentName:""});tabChangeSubject=new Ht(void 0);agentToolBoardsSubject=new Ht(new Map);constructor(){}getNode(e){return this.nodes.find(i=>i.name===e)}getRootNode(){return this.nodes.find(A=>!!A.isRoot)}addNode(e){let A=this.nodes.findIndex(g=>g.name===e.name);A!==-1?this.nodes[A]=e:this.nodes.push(e);let i=/^sub_agent_(\d+)$/,n=e.name.match(i);if(n){let g=parseInt(n[1],10);g>=this.subAgentIdCounter&&(this.subAgentIdCounter=g+1)}let o=this.agentToolsMapSubject.value,a=new Map(o);a.set(e.name,e.tools||[]),this.agentToolsMapSubject.next(a);let r=this.agentCallbacksMapSubject.value,s=new Map(r);s.set(e.name,e.callbacks||[]),this.agentCallbacksMapSubject.next(s),this.setSelectedNode(this.selectedNodeSubject.value)}getNodes(){return this.nodes}clear(){this.nodes=[],this.subAgentIdCounter=1,this.setSelectedNode(void 0),this.setSelectedTool(void 0),this.agentToolsMapSubject.next(new Map),this.agentCallbacksMapSubject.next(new Map),this.setSelectedCallback(void 0),this.setAgentTools(),this.setAgentCallbacks()}getSelectedNode(){return this.selectedNodeSubject.asObservable()}setSelectedNode(e){this.selectedNodeSubject.next(e)}getSelectedTool(){return this.selectedToolSubject.asObservable()}setSelectedTool(e){this.selectedToolSubject.next(e)}getSelectedCallback(){return this.selectedCallbackSubject.asObservable()}setSelectedCallback(e){this.selectedCallbackSubject.next(e)}getNextSubAgentName(){return`sub_agent_${this.subAgentIdCounter++}`}addTool(e,A){let i=this.getNode(e);if(i){let n=i.tools||[];i.tools=[A,...n];let o=this.agentToolsMapSubject.value,a=new Map(o);a.set(e,i.tools),this.agentToolsMapSubject.next(a)}}deleteTool(e,A){let i=this.getNode(e);if(i&&i.tools){let n=i.tools.length;if(i.tools=i.tools.filter(o=>o.name!==A.name),i.tools.lengthr.name===A.name))return{success:!1,error:`Callback with name '${A.name}' already exists`};i.callbacks.push(A),this.agentCallbacksSubject.next({agentName:e,callbacks:i.callbacks});let o=this.agentCallbacksMapSubject.value,a=new Map(o);return a.set(e,i.callbacks),this.agentCallbacksMapSubject.next(a),{success:!0}}catch(i){return{success:!1,error:"Failed to add callback: "+i.message}}}updateCallback(e,A,i){try{let n=this.getNode(e);if(!n)return{success:!1,error:"Agent not found"};if(!n.callbacks)return{success:!1,error:"No callbacks found for this agent"};let o=n.callbacks.findIndex(l=>l.name===A);if(o===-1)return{success:!1,error:"Callback not found"};if(n.callbacks.some((l,C)=>C!==o&&l.name===i.name))return{success:!1,error:`Callback with name '${i.name}' already exists`};let r=cA(cA({},n.callbacks[o]),i);n.callbacks[o]=r,this.agentCallbacksSubject.next({agentName:e,callbacks:n.callbacks});let s=this.agentCallbacksMapSubject.value,g=new Map(s);return g.set(e,n.callbacks),this.agentCallbacksMapSubject.next(g),this.selectedCallbackSubject.value?.name===A&&this.setSelectedCallback(r),{success:!0}}catch(n){return{success:!1,error:"Failed to update callback: "+n.message}}}deleteCallback(e,A){try{let i=this.getNode(e);if(!i)return{success:!1,error:"Agent not found"};if(!i.callbacks)return{success:!1,error:"No callbacks found for this agent"};let n=i.callbacks.findIndex(r=>r.name===A.name);if(n===-1)return{success:!1,error:"Callback not found"};i.callbacks.splice(n,1),this.agentCallbacksSubject.next({agentName:e,callbacks:i.callbacks});let o=this.agentCallbacksMapSubject.value,a=new Map(o);return a.set(e,i.callbacks),this.agentCallbacksMapSubject.next(a),this.selectedCallbackSubject.value?.name===A.name&&this.setSelectedCallback(void 0),{success:!0}}catch(i){return{success:!1,error:"Failed to delete callback: "+i.message}}}setLoadedAgentData(e){this.loadedAgentDataSubject.next(e)}getLoadedAgentData(){return this.loadedAgentDataSubject.asObservable()}getAgentToolsMap(){return this.agentToolsMapSubject.asObservable()}getAgentCallbacksMap(){return this.agentCallbacksMapSubject.asObservable()}requestSideTabChange(e){this.tabChangeSubject.next(e)}getSideTabChangeRequest(){return this.tabChangeSubject.asObservable()}requestNewTab(e,A){this.newAgentToolBoardSubject.next({toolName:e,currentAgentName:A})}getNewTabRequest(){return this.newAgentToolBoardSubject.asObservable().pipe(fe(A=>A?{tabName:A.toolName,currentAgentName:A.currentAgentName}:void 0))}requestTabDeletion(e){this.agentToolDeletionSubject.next(e)}getTabDeletionRequest(){return this.agentToolDeletionSubject.asObservable()}setAgentToolBoards(e){this.agentToolBoardsSubject.next(e)}getAgentToolBoards(){return this.agentToolBoardsSubject.asObservable()}getCurrentAgentToolBoards(){return this.agentToolBoardsSubject.value}getAgentTools(){return this.agentToolsSubject.asObservable()}getDeleteSubAgentSubject(){return this.deleteSubAgentSubject.asObservable()}setDeleteSubAgentSubject(e){this.deleteSubAgentSubject.next(e)}getAddSubAgentSubject(){return this.addSubAgentSubject.asObservable()}setAddSubAgentSubject(e,A,i){this.addSubAgentSubject.next({parentAgentName:e,agentClass:A,isFromEmptyGroup:i})}setAgentTools(e,A){if(e&&A){this.agentToolsSubject.next({agentName:e,tools:A});let i=this.agentToolsMapSubject.value,n=new Map(i);n.set(e,A),this.agentToolsMapSubject.next(n)}else this.agentToolsSubject.next(void 0)}getAgentCallbacks(){return this.agentCallbacksSubject.asObservable()}setAgentCallbacks(e,A){e&&A?this.agentCallbacksSubject.next({agentName:e,callbacks:A}):this.agentCallbacksSubject.next(void 0)}getParentNode(e,A,i,n){if(e){if(e.name===A.name)return i;for(let o of e.sub_agents){let a=this.getParentNode(o,A,e,n);if(a)return a}if(e.tools){for(let o of e.tools)if(o.toolType==="Agent Tool"){let a=n.get(o.toolAgentName||o.name);if(a){let r=this.getParentNode(a,A,e,n);if(r)return r}}}}}deleteNode(e){this.nodes=this.nodes.filter(A=>A.name!==e.name),this.setSelectedNode(this.selectedNodeSubject.value)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var gb=class t{constructor(e){this.http=e}apiServerDomain=zr.getApiServerBaseUrl();getLatestArtifact(e,A,i,n){let o=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}/artifacts/${n}`;return this.http.get(o)}getArtifactVersion(e,A,i,n,o){let a=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}/artifacts/${n}/versions/${o}`;return this.http.get(a)}static \u0275fac=function(A){return new(A||t)(xo(Xs))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var lb=class t{audioContext=new AudioContext({sampleRate:22e3});lastAudioTime=0;scheduledAudioSources=new Set;playAudio(e){let A=this.combineAudioBuffer(e);A&&this.playPCM(A)}stopAudio(){for(let e of this.scheduledAudioSources)e.onended=null,e.stop();this.scheduledAudioSources.clear(),this.lastAudioTime=this.audioContext.currentTime}combineAudioBuffer(e){if(e.length===0)return;let A=e.reduce((o,a)=>o+a.length,0),i=new Uint8Array(A),n=0;for(let o of e)i.set(o,n),n+=o.length;return i}playPCM(e){let A=new Float32Array(e.length/2);for(let r=0;r=32768&&(s-=65536),A[r]=s/32768}let i=this.audioContext.createBuffer(1,A.length,22e3);i.copyToChannel(A,0);let n=this.audioContext.createBufferSource();n.buffer=i,n.connect(this.audioContext.destination),n.onended=()=>{this.scheduledAudioSources.delete(n)},this.scheduledAudioSources.add(n);let o=this.audioContext.currentTime,a=Math.max(this.lastAudioTime,o);n.start(a),this.lastAudioTime=a+i.duration}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var cb=new yA("AudioRecordingService"),Cb=new yA("AudioWorkletModulePath");var Ib=class t{audioWorkletModulePath=h(Cb);stream;audioContext;source;audioBuffer=[];startRecording(){return nt(this,null,function*(){try{this.stream=yield navigator.mediaDevices.getUserMedia({audio:!0}),this.audioContext=new AudioContext,yield this.audioContext.audioWorklet.addModule(this.audioWorkletModulePath),this.source=this.audioContext.createMediaStreamSource(this.stream);let e=new AudioWorkletNode(this.audioContext,"audio-processor");e.port.onmessage=A=>{let i=A.data,n=this.float32ToPCM(i);this.audioBuffer.push(n)},this.source.connect(e),e.connect(this.audioContext.destination)}catch(e){console.error("Error accessing microphone:",e)}})}stopRecording(){this.source&&this.source.disconnect(),this.audioContext&&this.audioContext.close(),this.stream&&this.stream.getTracks().forEach(e=>e.stop())}getCombinedAudioBuffer(){if(this.audioBuffer.length===0)return;let e=this.audioBuffer.reduce((n,o)=>n+o.length,0),A=new Uint8Array(e),i=0;for(let n of this.audioBuffer)A.set(n,i),i+=n.length;return A}cleanAudioBuffer(){this.audioBuffer=[]}float32ToPCM(e){let A=new ArrayBuffer(e.length*2),i=new DataView(A);for(let n=0;ne[Gz]==="true"))}isEditFunctionArgsEnabled(){return this.route.queryParams.pipe(fe(e=>e[Kz]==="true"))}isSessionUrlEnabled(){return se(!0)}isA2ACardEnabled(){return this.route.queryParams.pipe(fe(e=>e[Uz]==="true"))}isApplicationSelectorEnabled(){return se(!0)}isAlwaysOnSidePanelEnabled(){return se(!1)}isTraceEnabled(){return se(!0)}isArtifactsTabEnabled(){return se(!0)}isEvalEnabled(){return se(!0)}isTokenStreamingEnabled(){return se(!0)}isMessageFileUploadEnabled(){return se(!0)}isManualStateUpdateEnabled(){return se(!0)}isBidiStreamingEnabled(){return se(!0)}isExportSessionEnabled(){return se(!0)}isEventFilteringEnabled(){return se(!1)}isDeleteSessionEnabled(){return se(!0)}isLoadingAnimationsEnabled(){return se(!0)}isSessionsTabReorderingEnabled(){return se(!1)}isSessionFilteringEnabled(){return se(!1)}isSessionReloadOnNewMessageEnabled(){return se(!1)}isUserIdOnToolbarEnabled(){return se(!0)}isDeveloperUiDisclaimerEnabled(){return se(!0)}isFeedbackServiceEnabled(){return se(!1)}isInfinityMessageScrollingEnabled(){return se(!1)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var tjA=(()=>{var t=import.meta.url;return function(e={}){var A,i=e,n,o,a=new Promise((u,y)=>{n=u,o=y});i.agerrMessages=[],i.stderrMessages=[],B=u=>i.stderrMessages.push(u);var r=Object.assign({},i),s="./this.program",g=(u,y)=>{throw y},l="",C,I;typeof document<"u"&&document.currentScript&&(l=document.currentScript.src),t&&(l=t),l.startsWith("blob:")?l="":l=l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1),C=u=>fetch(u,{credentials:"same-origin"}).then(y=>y.ok?y.arrayBuffer():Promise.reject(new Error(y.status+" : "+y.url)));var d=console.log.bind(console),B=console.error.bind(console);Object.assign(i,r),r=null;var E;function Q(u){for(var y=atob(u),x=new Uint8Array(y.length),H=0;Hu.startsWith(Pe);function HA(){var u="data:application/octet-stream;base64,AGFzbQEAAAABmAd0YAJ/fwF/YAF/AGABfwF/YAN/f38Bf2ACf38AYAN/f38AYAR/f39/AX9gBH9/f38AYAV/f39/fwF/YAZ/f39/f38Bf2AFf39/f38AYAZ/f39/f38AYAAAYAh/f39/f39/fwF/YAABf2AHf39/f39/fwF/YAF8AXxgAn9/AXxgAX8BfGAHf39/f39/fwBgA39/fwF8YAd/f39/fHx/AGACf3wAYAR8fHx/AXxgAnx8AXxgA398fABgBX9+fn5+AGAEf39/fABgCn9/f39/f39/f38Bf2ADf35/AX5gBH9/fHwBf2ADfHx8AXxgCX9/f39/f39/fwBgA39/fgBgAAF8YAR/f39/AXxgAn9/AX5gBX9/f39+AX9gA39/fgF/YAp/f39/f39/f39/AGAEf35+fwBgBH9/fH8AYAJ/fgBgAnx/AXxgBH9/f3wBf2ABfwF+YAJ/fgF/YAJ/fAF/YAN8fH8BfGADf3x/AGAIf39/f39/f38AYAV/f39/fAF/YAt/f39/f39/f39/fwF/YAN/f3wAYAV/f35/fwBgBH9/fH8Bf2AAAX5gB39/f398f38Bf2AFf39/f3wAYAN/f3wBf2ADf35/AX9gAn19AX1gBH9/fX8AYAZ/fHx8fHwBfGADf39/AX5gDH9/f39/f39/f39/fwF/YAV/f3x/fwF/YAd/f398fH9/AGAGf39/fH9/AGAGf39/f35/AX9gD39/f39/f39/f39/f39/fwBgBH9/f38BfmAGf3x/f39/AX9gB39/f39/fn4Bf2AGf39/f35+AX9gB39/f39+f38Bf2AGf39/f39+AX9gAn5/AGAEf35/fwF/YAR/f3x8AXxgBX9/fH9/AGAJf39/f39/f39/AX9gBH9/fHwAYAR+fn5+AX9gAn99AX9gAn5/AX9gCH9/f398fHx/AGADf31/AGAGf39+fn5/AGABfAF/YAJ+fgF9YAJ/fQBgBH9/f34BfmAGf31/f39/AGADf3x8AX9gBX9/f3x/AGAFf398fH8AYAZ8fHx/f38AYAJ+fgF8YAJ8fwF/YAR/fHx8AGAGf39/f398AGAEf3x/fwBgBnx8f3x8fwBgB398fHx8fHwAYAV/fHx8fAF/YAF/AX1gA39/fwF9YAN+fn4Bf2AEf35+fgBgBH98f38Bf2AKf3x/f39/f39/fwBg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g+cDIAJBEGoQHxoQLAALFwBBAUF/IAAgASABED8iABChAiAARhsLJQEBfyAAKAIsIgBBAEGAASAAKAIAEQMAIgAEfyAAKAIQBUEACws0AQF/AkAgACABEOUBIgFFDQAgACgCLCIAIAFBCCAAKAIAEQMAIgBFDQAgACgCECECCyACC28BAX8jAEEgayIDJAAgA0IANwMYIANCADcDECADIAI2AgwCQCADQRBqIAEgAhC0CiIBQQBIBEAgA0GQhgsoAgAQswU2AgBBmP0DIAMQNwwBCyAAIANBEGoiABCOBSABEKECGiAAEFwLIANBIGokAAskAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAhDLCyADQRBqJAALMwEBfyACBEAgACEDA0AgAyABLQAAOgAAIANBAWohAyABQQFqIQEgAkEBayICDQALCyAAC6QBAQN/IwBBEGsiAiQAAkAgABAuIgMgACgCAEEDcSAAKQMIEOYJIgEEfyABKAIYBUEACyIBDQAgAygCTCIBKAIAKAIMIgMEQCABKAIIIAAoAgBBA3EgACkDCCADESYAIgENAQtBACEBIAAoAgBBA3FBAkYNACACIAApAwg3AwggAkElNgIAQZDbCiEBQZDbCkEgQY4YIAIQpgEaCyACQRBqJAAgAQsPACAAIAEgAiADQQAQ7wsLQwAgACAAIAGlIAG9Qv///////////wCDQoCAgICAgID4/wBWGyABIAC9Qv///////////wCDQoCAgICAgID4/wBYGwsVACAAEKMBBEAgACgCBA8LIAAQpQMLFAAgABAoBEAgAC0ADw8LIAAoAgQLJgAgACABEK0HIgFFBEBBAA8LIAAQ7QEoAgwgASgCEEECdGooAgALogEBAn8CQAJAIAAEQCAAKAIIIgMgACgCDCICRgRAIAAgA0EBdEEBIAMbIAEQqgIgACgCDCECCyACRQ0BIAAoAggiAyACTw0CIAAgACgCBCADaiACcCICIAEQ3gEaIAAgACgCCEEBajYCCCACDwtBvdIBQbS3AUE3Qc3CARAAAAtB2pMDQbS3AUE/Qc3CARAAAAtBpAxBtLcBQcAAQc3CARAAAAsuACAALQAPIgBBAWpB/wFxQRFPBEBBqrkDQZ38AEHcAEHKlwEQAAALIABB/wFHC0MAIAAgACABpCABvUL///////////8Ag0KA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AEEQayIDJAAgAyACNgIMIAAgASACEMkLIANBEGokAAsIAEEBIAAQGgsMACAAIAFBHGoQ2goLGQEBfyMAQRBrIgEkACAAEKcLIAFBEGokAAsbAQF/QQohASAAEKMBBH8gABD2AkEBawVBCgsL0wECA38CfgJAIAApA3AiBFBFIAQgACkDeCAAKAIEIgEgACgCLCICa6x8IgVXcUUEQCAAEL0FIgNBAE4NASAAKAIsIQIgACgCBCEBCyAAQn83A3AgACABNgJoIAAgBSACIAFrrHw3A3hBfw8LIAVCAXwhBSAAKAIEIQEgACgCCCECAkAgACkDcCIEUA0AIAQgBX0iBCACIAFrrFkNACABIASnaiECCyAAIAI2AmggACAFIAAoAiwiACABa6x8NwN4IAAgAU8EQCABQQFrIAM6AAALIAMLygECAn8BfCMAQRBrIgEkAAJAIAC9QiCIp0H/////B3EiAkH7w6T/A00EQCACQYCAwPIDSQ0BIABEAAAAAAAAAABBABCwBCEADAELIAJBgIDA/wdPBEAgACAAoSEADAELIAAgARCoByECIAErAwghACABKwMAIQMCQAJAAkACQCACQQNxQQFrDgMBAgMACyADIABBARCwBCEADAMLIAMgABCxBCEADAILIAMgAEEBELAEmiEADAELIAMgABCxBJohAAsgAUEQaiQAIAALewEDfwJAIAEQuAohAiAAEPsGIQMgABAkIQQgAiADTQRAIAAQRiIDIAEgAhCoCyMAQRBrIgEkACAAECQaIAAgAhCfAyABQQA2AgwgAyACQQJ0aiABQQxqENsBIAFBEGokAAwBCyAAIAMgAiADayAEQQAgBCACIAEQsQoLC08BA38CQCABED8hAiAAEFUhAyAAECQhBCACIANNBEAgABBGIgMgASACEKoLIAAgAyACEMUKDAELIAAgAyACIANrIARBACAEIAIgARC1CgsLEAAgABCgCyABEKALc0EBcwsQACAAEKELIAEQoQtzQQFzCxUAIAAtAA9B/wFGBEAgACgCABAYCwsLACAAIAFBOBCgCguVBQIDfwJ+IwBB4ABrIgUkAAJAAkACQAJAAkACQCAAQQIgAyAFQdgAakEAEJQDRQRAIAMNAiAEBEAgABDcBUUNBAsgBUIANwNQIAVCADcDSAwBCyAFQgA3A0ggBSAFKQNYNwNQIAVB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CCEBIARBiPIIQRgQzgFFDQJBoPIIIQEgBEGg8ghBGBDOAUUNAkEAIQBBkJ8LLQAARQRAA0AgAEECdEHgngtqIABBlYAFEJ8HNgIAIABBAWoiAEEGRw0AC0GQnwtBAToAAEH4ngtB4J4LKAIANgIAC0HgngshASACQQhqIgBB4J4LQRgQzgFFDQJB+J4LIQEgAEH4ngtBGBDOAUUNAkEYEE0iAUUNAQsgASACKQIINwIAIAEgAikCGDcCECABIAIpAhA3AggMAQtBACEBCyACQSBqJABBhKELQQE6AABBgKELIAE2AgAgAQutAQIBfwJ+AkACQCAABEAgAQRAIABBABDAAiIDKAL0Aw0CIAMpA7AEIgQgAUEIayIBKAIAQQhqrSIFVA0DIAMgBCAFfSIENwOwBCADKALABEECTwRAIANBLSAFIAQgAykDuAQgAhCSBAsgASAAKAIUEQEACw8LQZ3TAUG+vAFBiwdB254BEAAAC0Gn0QFBvrwBQZIHQdueARAAAAtBlqgBQb68AUGbB0HbngEQAAALCQAgAEEAENcGC78KAgV/D34jAEHgAGsiBSQAIARC////////P4MhDCACIASFQoCAgICAgICAgH+DIQogAkL///////8/gyINQiCIIQ4gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCgwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEKIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACEKQgAhAQwDCyAKQoCAgICAgMD//wCEIQpCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASALhEIAIQFQBEBCgICAgICA4P//ACEKDAMLIApCgICAgICAwP//AIQhCgwCCyABIAuEUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyALQv///////z9YBEAgBUHQAGogASANIAEgDSANUCIGG3kgBkEGdK18pyIGQQ9rELMBQRAgBmsh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IABBACAHELgFDAELIAUgAiADIAAgBEEQahCgBwsgAEEBRgRAIARBCGpBARC3BUEADAELIARBCGogBhC3BUEBCyEAIAQgBCgCCEEBciIGNgIIIAIgBWoiBSABSQ0ACwsgBSACIAMgBEEIaiAAQQAgBEEQahC4BQJAIABBAUcNACAEKAIIQQFHDQAgBCgCDEUNAQsDQAJ/IABBAUwEQCAEQQhqIgEgARDfCyIBELkFIAAgAWoMAQsgBEEIaiIBQQIQtwUgBCAEKAIIQQdzNgIIIAFBARC5BSAFIAlqIgggBEEQaiIHIABBAmsiBkECdGooAgBrIAIgAyABIABBAWtBASAHELgFIAFBARC3BSAEIAQoAghBAXI2AgggCCACIAMgASAGQQEgBxC4BSAGCyEAIAUgCWohBSAAQQFHDQAgBCgCCEEBRw0AIAQoAgwNAAsLIARB0AFqJAALxAEBA38CfwJAIAEoAkwiAkEATgRAIAJFDQFBnIgLKAIAIAJB/////wNxRw0BCwJAIABB/wFxIgIgASgCUEYNACABKAIUIgMgASgCEEYNACABIANBAWo2AhQgAyAAOgAAIAIMAgsgASACEKQHDAELIAFBzABqIgQQ6QsaAkACQCAAQf8BcSICIAEoAlBGDQAgASgCFCIDIAEoAhBGDQAgASADQQFqNgIUIAMgADoAAAwBCyABIAIQpAchAgsgBBDpAxogAgsLqwMCBX8BfiAAvUL///////////8Ag0KBgICAgICA+P8AVCABvUL///////////8Ag0KAgICAgICA+P8AWHFFBEAgACABoA8LIAG9IgdCIIinIgJBgIDA/wNrIAenIgVyRQRAIAAQwAUPCyACQR52QQJxIgYgAL0iB0I/iKdyIQMCQCAHQiCIp0H/////B3EiBCAHp3JFBEACQAJAIANBAmsOAgABAwtEGC1EVPshCUAPC0QYLURU+yEJwA8LIAJB/////wdxIgIgBXJFBEBEGC1EVPsh+T8gAKYPCwJAIAJBgIDA/wdGBEAgBEGAgMD/B0cNASADQQN0QYDKCGorAwAPCyAEQYCAwP8HRyACQYCAgCBqIARPcUUEQEQYLURU+yH5PyAApg8LAnwgBgRARAAAAAAAAAAAIARBgICAIGogAkkNARoLIAAgAaOZEMAFCyEAAkACQAJAIANBAWsOAwABAgQLIACaDwtEGC1EVPshCUAgAEQHXBQzJqahvKChDwsgAEQHXBQzJqahvKBEGC1EVPshCcCgDwsgA0EDdEGgyghqKwMAIQALIAALlgECAX8BfgJAIAAQOSABEDlHDQACQAJAAkAgASgCAEEDcQ4CAAECCwNAIAAgAUYiAg0DIAEoAkQiAQ0ACwwCCwJAIAAgASkDCCIDEL8DIgFBAXINAEEAIQEgACAAEDkiAkYNACACIAMQvwMiAkUNACAAIAJBARCDARogAiEBCyABQQBHDwsgACABQQAQ1gJBAEchAgsgAgtEAgJ/AXwgAEEAIABBAEobIQADQCAAIANGRQRAIAEgA0EDdCIEaisDACACIARqKwMAoiAFoCEFIANBAWohAwwBCwsgBQs7AQJ/IAAoAgQiAQRAIAEhAANAIAAiASgCACIADQALIAEPCwNAIAAgACgCCCIBKAIARyABIQANAAsgAAs6AQF/AkAgAUUNACAAEL4DKAIAIAFBARCYBCICRSACQQhqIAFHcg0AIAAgARDVAg8LIAAgAUEAEMsICwwAQYjdChDtCzYCAAuZAgEGfyAAKAIIIgVBgCBxBEAgACgCDA8LAkAgBUEBcQRAIAAoAhAiAiAAKAIUQQJ0aiEGA0AgAiAGTw0CIAIoAgAiBARAAkAgAUUEQCAEIgMhAQwBCyABIAQ2AgALA0AgASIEKAIAIgENAAsgAiAENgIAIAQhAQsgAkEEaiECDAALAAsgACgCDCIDRQRAQQAhAwwBCwNAIAMoAgQiAQRAIAMgASgCADYCBCABIAM2AgAgASEDDAELCyADIQEDQCABIgQoAgAiAQRAIAEoAgQiAkUNAQNAIAEgAigCADYCBCACIAE2AgAgAiIBKAIEIgINAAsgBCABNgIADAELCyAAKAIIIQULIAAgAzYCDCAAIAVBgCByNgIIIAMLoQEBAn8CQCAAECRFIAIgAWtBBUhyDQAgASACEJcFIAJBBGshBCAAEEYiAiAAECRqIQUCQANAAkAgAiwAACEAIAEgBE8NACAAQQBMIABB/wBOckUEQCABKAIAIAIsAABHDQMLIAFBBGohASACIAUgAmtBAUpqIQIMAQsLIABBAEwgAEH/AE5yDQEgAiwAACAEKAIAQQFrSw0BCyADQQQ2AgALC4QBAQJ/IwBBEGsiAiQAIAAQowEEQCAAKAIAIAAQ9gIaEKEFCyABECQaIAEQowEhAyAAIAEoAgg2AgggACABKQIANwIAIAFBABDTASACQQA6AA8gASACQQ9qENIBAkAgACABRiIBIANyRQ0ACyAAEKMBIAFyRQRAIAAQpQMaCyACQRBqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgLzgkCBH8EfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgCUKAgICAgIDA//8AVCAJQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAKQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiBRshBEIAIAEgBRshAwwCCyADIAlCgICAgICAwP//AIWEUA0BIAEgCoRQBEAgAyAJhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAJhFBFDQAgASEDIAIhBAwBCyADIAEgASADVCAJIApWIAkgClEbIggbIQogBCACIAgbIgxC////////P4MhCSACIAQgCBsiC0IwiKdB//8BcSEHIAxCMIinQf//AXEiBUUEQCAGQeAAaiAKIAkgCiAJIAlQIgUbeSAFQQZ0rXynIgVBD2sQswEgBikDaCEJIAYpA2AhCkEQIAVrIQULIAEgAyAIGyEDIAtC////////P4MhASAHBH4gAQUgBkHQAGogAyABIAMgASABUCIHG3kgB0EGdK18pyIHQQ9rELMBQRAgB2shByAGKQNQIQMgBikDWAtCA4YgA0I9iIRCgICAgICAgASEIQEgCUIDhiAKQj2IhCACIASFIQQCfiADQgOGIgIgBSAHRg0AGiAFIAdrIgdB/wBLBEBCACEBQgEMAQsgBkFAayACIAFBgAEgB2sQ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ABCCASIGEP4BRQ0AGiADIAYQ1gMhAQNAAkAgABCVARogAUEwayEBIAAgBUEMahBbIARBAkhyDQAgA0HAACAAEIIBIgYQ/gFFDQMgBEEBayEEIAMgBhDWAyABQQpsaiEBDAELCyAAIAVBDGoQW0UNAUECCyACKAIAcjYCAAsgBUEQaiQAIAELlQEBA38jAEEQayIEJAAgBCABNgIMIAQgAzYCCCAEQQRqIARBDGoQjgIgBCgCCCEDIwBBEGsiASQAIAEgAzYCDCABIAM2AghBfyEFAkBBAEEAIAIgAxBjIgNBAEgNACAAIANBAWoiAxBNIgA2AgAgAEUNACAAIAMgAiABKAIMEGMhBQsgAUEQaiQAEI0CIARBEGokACAFC2MAIAIoAgRBsAFxIgJBIEYEQCABDwsCQCACQRBHDQACQAJAIAAtAAAiAkEraw4DAAEAAQsgAEEBag8LIAJBMEcgASAAa0ECSHINACAALQABQSByQfgARw0AIABBAmohAAsgAAsuAAJAIAAoAgRBygBxIgAEQCAAQcAARgRAQQgPCyAAQQhHDQFBEA8LQQAPC0EKC0YBAX8gACgCACECIAEQbyEAIAJBCGoiARDFAiAASwR/IAEgABCeAygCAEEARwVBAAtFBEAQkAEACyACQQhqIAAQngMoAgALTQEBfyMAQRBrIgMkACAAIAEgAhCLByIABEAgAyAAELMFNgIIIAMgAjYCBCADIAE2AgBBqPMIKAIAQfv7AyADEB8aECwACyADQRBqJAALfQECfyMAQRBrIgQkACMAQSBrIgMkACADQRhqIAEgASACahCkBSADQRBqIAMoAhggAygCHCAAEKsLIAMgASADKAIQEKMFNgIMIAMgACADKAIUEKQDNgIIIARBCGogA0EMaiADQQhqEPwBIANBIGokACAEKAIMGiAEQRBqJAAL4wECBH4CfyMAQRBrIgYkACABvSIFQv////////8HgyECIAACfiAFQjSIQv8PgyIDUEUEQCADQv8PUgRAIAJCBIghBCADQoD4AHwhAyACQjyGDAILIAJCBIghBEL//wEhAyACQjyGDAELIAJQBEBCACEDQgAMAQsgBiACQgAgBadnQSByIAJCIIinZyACQoCAgIAQVBsiB0ExahCzAUGM+AAgB2utIQMgBikDCEKAgICAgIDAAIUhBCAGKQMACzcD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DCABNgJIIAEoAgRBAUcNACAMKAIAEBggDEH23gEQZDYCAAsgCSgCjAEgCUGQAWokAEUNAQJAAkACQCAAEJICDgMAAQIECyATIB0QITYCAEHA9QMgExB/DAMLIBMgHhAhNgIQQcn5AyATQRBqEH8MAgsgGUEwQQAgGSgCAEEDcUEDRxtqKAIoECEhACAUEIECIQEgEyAZQVBBACAZKAIAQQNxQQJHG2ooAigQITYCKCATQbbfAUHUngMgARs2AiQgEyAANgIgQfzuAyATQSBqEH8MAQsgASAAQQAQ8wghAAJ/IAVBAUYEQCAAEJsEDAELIAAgFBDRBgshASAAEBggDCABNgIAIBQoAhAoApABIAwQ9AgLIBNBMGokACAMDwtBwNUBQdH7AEEMQf47EAAACwgAIAAQmQEaC44BAQN/AkAgACgCCCIBQQxxBEAgACgCDCECDAELAkAgAUEBcQRAIAAQsAEhAiAAKAIQIgEgACgCFEECdGohAwNAIAEgA08NAiABQQA2AgAgAUEEaiEBDAALAAsgACgCECECIABBADYCEAwBCyAAKAIIIQELIABBADYCGCAAQQA2AgwgACABQf9fcTYCCCACC78CAgN/AXwjAEEwayICJAAgACgAnAEhAyAAKAKUASACIAApApwBNwMIIAIgACkClAE3AwAgAiADQQFrEBlBAnRqKAIAIQMgAiABKQMYNwMoIAIgASkDEDcDICACIAEpAwg3AxggAiABKQMANwMQIABBlAFqAkAgA0UNAAJAIAIoAhQNACADKAIEIgRFDQAgAiAENgIUCwJAIAIrAyBEAAAAAAAAAABjRQ0AIAMrAxAiBUQAAAAAAAAAAGZFDQAgAiAFOQMgCwJAIAIoAhANACADKAIAIgRFDQAgAiAENgIQCyADKAIYQf8AcSIDRQ0AIAIgAigCKCADcjYCKAsgACAAKAKsASgCiAEiAyACQRBqQQEgAygCABEDADYCqAFBBBAnIQEgACgClAEgAUECdGogACgCqAE2AgAgAkEwaiQAC28BAX8jAEEgayIDJAAgA0IANwMYIANCADcDCCADQoCAgICAgID4v383AxAgAyACNgIYIANCADcDACABBEAgACADQbCbCkEDIAFBqt4BEJAECyAAKAI8KAKIASIAIANBASAAKAIAEQMAIANBIGokAAsLACAAQeXMBBCg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CQoLDA0ODxAREhMUFRYXGBkLIAJBAWoiE0EQEBohEUEBIQMDQCACIANGBEAgESAQIAJBMGxqIgFBGGopAwA3AwggESABKQMQNwMAIBEgAkEEdGoiAyABQRBrIgJBCGopAwA3AwggAyACKQMANwMAIAAgESATIAQQSCAREBggDyACKQMINwMoIA8gAikDADcDICAPIAEpAxg3AzggDyABKQMQNwMwIA8gDysDMCAPKwMgIAErAwChoDkDQCAPIA8rAzggDysDKCABKwMIoaA5A0ggACAPQTBqQQIQPSAPIA8pA0g3AzggDyAPKQNANwMwIAAgD0EgakECED0MGgUgESADQQR0IhJqIhQgASASaiISKQMANwMAIBQgEikDCDcDCCADQQFqIQMMAQsACwALIAJBAmoiA0EQEBoiAiABKQMINwMIIAIgASkDADcDACACIBApAyA3AxAgAiAQKQMoNwMYIAIgECsDICAQKwMwIgYgECsDQKFEAAAAAAAACECjIgegOQMgIBArAyghCCAQKwNIIQkgECsDOCEFIAIgBiAHoDkDMCACIAUgBSAJoUQAAAAAAAAIQKMiBaA5AzggAiAIIAWgOQMoQQQgAyADQQRNGyERIAFBIGshE0EEIQEDQCABIBFGBEAgACACIAMgBBBIIAIQGCAPIBApAzg3AyggDyAQKQMwNwMgIA8gECkDKDcDOCAPIBApAyA3AzAgACAPQSBqQQIQPQwZBSACIAFBBHQiEmoiFCASIBNqIhIpAwA3AwAgFCASKQMINwMIIAFBAWohAQwBCwALAAsgAkEDaiIDQRAQGiICIAFBCGopAwA3AwggAiABKQMANwMAIAIgASsDACIFIAUgECsDEKEiBkQAAAAAAADQv6KgOQMQIAErAwghCCAQKwNIIQkgAiAQKwM4Igc5AzggAiAFIAZEAAAAAAAAAsCioDkDMCACIAUgBiAGoKE5AyAgAiAIIAcgCaFEAAAAAAAACECjoCIFOQMoIAIgBTkDGCAQKwMwIQUgAiAHOQNIIAIgBTkDQEEEIAMgA0EETRshESABQTBrIRNBBCEBA0AgASARRgRAIAAgAiADIAQQSCACEBgMGAUgAiABQQR0IhJqIhQgEiATaiISKQMANwMAIBQgEikDCDcDCCABQQFqIQEMAQsACwALIAJBBEcNG0EGQRAQGiICIAEp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ASkDADcDACAAIAEpAwg3AwgLCgAgAEEIahDTAwsNACAAKAIAIAFBAnRqCxkAIAAQowEEQCAAIAEQvgEPCyAAIAEQ0wELYQEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBAWsiATYCCCAAIAFPDQEgAigCDCACKAIIEPcKIAIgAigCDEEBaiIANgIMIAIoAgghAQwACwALIAJBEGokAAuxAQEDfyMAQRBrIgckAAJAAkAgAEUNACAEKAIMIQYgAiABa0ECdSIIQQBKBEAgACABIAgQ4QMgCEcNAQsgBiADIAFrQQJ1IgFrQQAgASAGSBsiAUEASgRAIAAgB0EEaiABIAUQgAsiBRBGIAEQ4QMhBiAFEHYaIAEgBkcNAQsgAyACa0ECdSIBQQBKBEAgACACIAEQ4QMgAUcNAQsgBBCDCwwBC0EAIQALIAdBEGokACAAC6gBAQN/IwBBEGsiByQAAkACQCAARQ0AIAQoAgwhBiACIAFrIghBAEoEQCAAIAEgCBDhAyAIRw0BCyAGIAMgAWsiAWtBACABIAZIGyIBQQBKBEAgACAHQQRqIAEgBRCECyIFEEYgARDhAyEGIAUQNBogASAGRw0BCyADIAJrIgFBAEoEQCAAIAIgARDhAyABRw0BCyAEEIMLDAELQQAhAAsgB0EQaiQAIAALDgAgACABKAIANgIAIAALCgAgACABIABragsLACAALQALQf8AcQsIACAAQf8BcQtQAQF+AkAgA0HAAHEEQCACIANBQGqtiCEBQgAhAgwBCyADRQ0AIAJBwAAgA2uthiABIAOtIgSIhCEBIAIgBIghAgsgACABNwMAIAAgAjcDCAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEAgACACVCABIANTIAEgA1EbBEBBfw8LIAAgAoUgASADhYRCAFIPCyAAIAJWIAEgA1UgASADURsEQEF/DwsgACAChSABIAOFhEIAUiEECyAECxYAIABFBEBBAA8LQZCGCyAANgIAQX8LCwAgACABIAIRAAAL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ACEAIAggAUEEajYCACABIAA2AgAMAQtBfyEAIAkgCUEaaiAKQQ9qEIUHIAlrIgVBF0oNAQJAAkACQCABQQhrDgMAAgABCyABIAVKDQEMAwsgAUEQRyAFQRZIcg0AIAMoAgAiASACRiABIAJrQQJKcg0CIAFBAWstAABBMEcNAkEAIQAgBEEANgIAIAMgAUEBajYCACABIAVB4K4Jai0AADoAAAwCCyADIAMoAgAiAEEBajYCACAAIAVB4K4Jai0AADoAACAEIAQoAgBBAWo2AgBBACEADAELQQAhACAEQQA2AgALIApBEGokACAACwsAIABB+KILEKkCC18BAn8jAEEQayIDJAADQAJAIAAoAgggAk0EQEF/IQIMAQsgAyAAKQIINwMIIAMgACkCADcDACABIAAgAyACEBkQlQtBBBDOAUUNACACQQFqIQIMAQsLIANBEGokACACCxQAIABB3wBxIAAgAEHhAGtBGkkbCxsBAX8gAUEBEKILIQIgACABNgIEIAAgAjYCAAskACAAQQtPBH8gAEEIakF4cSIAIABBAWsiACAAQQtGGwVBCgsLJAECfyMAQRBrIgIkACAAIAEQnwUhAyACQRBqJAAgASAAIAMbCxMAIAAgASACIAAoAgAoAjARAwALZwIBfwF+IwBBEGsiAiQAIAACfiABRQRAQgAMAQsgAiABrUIAQfAAIAFnIgFBH3NrELMBIAIpAwhCgICAgICAwACFQZ6AASABa61CMIZ8IQMgAikDAAs3AwAgACADNwMIIAJBEGokAAtSAQJ/QYzXCigCACIBIABBB2pBeHEiAmohAAJAIAJBACAAIAFNG0UEQCAAPwBBEHRNDQEgABAKDQELQZCGC0EwNgIAQX8PC0GM1wogADYCACABC38CAX4DfwJAIABCgICAgBBUBEAgACECDAELA0AgAUEBayIBIAAgAEIKgCICQgp+fadBMHI6AAAgAEL/////nwFWIAIhAA0ACwsgAlBFBEAgAqchAwNAIAFBAWsiASADIANBCm4iBEEKbGtBMHI6AAAgA0EJSyAEIQMNAAsLIAELHAAgAEGBYE8Ef0GQhgtBACAAazYCAEF/BSAACws2ACAAIAEQqwMiAEUEQEEADwsgACgCACEBIAIEQCAAIAJBCCABEQMADwsgAEEAQYABIAERAwALPAAgACgCTEEATgRA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MyADEDgFIBggCCgCACADQQR0aiIEKQM4NwMIIBggBCkDMDcDACACQbAVakEQECchBCACKAKwFSAEQQR0aiIEIBgpAwA3AwAgBCAYKQMINwMIIANBAWohAwwBCwsLIAgoAgAQGCAIEBgLIAxBAWohDCACKAKoDiEDDAALAAUgAkG4FWoiDgJ/IAMgFEsEQCACIAJBqA5qIgMpAwA3A5gEIAIgAikDoA43A5AEIAIoAqAOIAJBkARqIBQQGUHIAGxqKAIAIRYgAiADKQMANwOIBCACIAIpA6AONwOABCACKAKgDiACQYAEaiAUEBlByABsakEIagwBCyACKALAFCACKALEFEEBayIWQQR0agsiAykDCDcDACACIAMpAwA3A7AVIAJBkAhqQgA3AwAgAkGICGoiC0IANwMAIAJCADcDgAggEyAPKQMANwMIIBMgAikDgBU3AwAgAkGACGpBEBAnIQMgAigCgAggA0EEdGoiAyATKQMANwMAIAMgEykDCDcDCCAFIQQDQCAWIARBAWoiBEsEQEEAIQMgAigCwBQhCANAIAIoAqgOIANLBEAgAiACQagOaikDADcDmAMgAiACKQOgDjcDkAMgCCACKAKgDiACQZADaiADEBlByABsaigCAEEEdGohCiADQQFqIQMgAigCwBQiByEIIAcgBEEEdGoiBysDACAKKwMAoSAHKwMIIAorAwihEEpEexSuR+F6hD9jRQ0BDAMLCyATIAggBEEEdGoiAykDADcDACATIAMpAwg3AwggAkGACGpBEBAnIQMgAigCgAggA0EEdGoiAyATKQMANwMAIAMgEykDCDcDCAwBCwsgEyACKQOwFTcDACATIA4pAwA3AwggAkGACGpBEBAnIQMgAigCgAggA0EEdGoiAyATKQMANwMAIAMgEykDCDcDCCACIAspAwA3A/gDIAIgAikDgAg3A/ADQQAhAyAAIAIoAoAIIAJB8ANqQQAQGUEEdGogCygCABA9AkADQAJAIAIoAogIIANNBEAgAkGACGoiA0EQEDMgAxA4IBQgAigCqA5PDQMgAiACQagOaiIKKQMANwPoAyACIAIpA6AONwPgAyACKAKgDiACQeADaiAUEBlByABsaigCACEFA0BBACEDIAVBAWoiBSACKALEFE8NAgNAIAMgAigCqA5PDQMgAiAKKQMANwPIAyACIAIpA6AONwPAAyACKALAFCEOIAIoAqAOIQggAkHAA2ogAxAZIQQgA0EBaiEDIAIoAsAUIAVBBHRqIgcrAwAgDiAIIARByABsaigCAEEEdGoiBCsDAKEgBysDCCAEKwMIoRBKRHsUrkfheoQ/Y0UNAAsMAAsACyACIAspAwA3A7gDIAIgAikDgAg3A7ADIAJBsANqIAMQGSEEAkACQCACKAKQCCIHDgIBDgALIAIgAigCgAggBEEEdGoiBCkDCDcDqAMgAiAEKQMANwOgAyACQaADaiAHEQEACyADQQFqIQMMAQsLIAIgCikDADcD2AMgAiACKQOgDjcD0AMgDyACKAKgDiACQdADaiAUEBlByABsaiIDKQMgNwMAIAIgAykDGDcDgBULIBRBAWohFAwBCwALAAsgACACKALAFCACKALEFEEAEPEBDAILIAAgAigCwBQgAigCxBRBABDxAQtBACEDA0AgAigCqA4gA00EQCACQaAOaiIDQcgAEDMgAxA4BSACIAJBqA5qKQMANwP4ASACIAIpA6AONwPwASACQfABaiADEBkhBwJAAkAgAigCsA4iBQ4CAQgACyACQagBaiIEIAIoAqAOIAdByABsakHIABAgGiAEIAURAQALIANBAWohAwwBCwsLIAIoAsgUIgQEQCACIBUpAwg3A7gCIAIgFSkDADcDsAIgAiACKALAFCIDKQMINwOoAiACIAMpAwA3A6ACIABBAiACQbACaiACQaACaiAoICUgBBDqAgsgAigCzBQiBARAIAIgECkDCDcDmAIgAiAQKQMANwOQAiACIAIoAsAUIAIoAsQUQQR0akEQayIDKQMINwOIAiACIAMpAwA3A4ACIABBAyACQZACaiACQYACaiAoICUgBBDqAgsCQCAXRSABKAIQKAIIKAIEQQJJcg0AIAIoAsgUIAIoAswUckUNACAAIA0Q5AELIBlBAWohGQwACwALIBoQ7AIQGCAaEBggAkHoB2oQXCAAKAIQIgcoAgghCQJAIAcoAtgBRQRAIActAIwCQQFxRQ0BCyAAEJcCIAcoApwCIgtFDQAgBygCoAIiBCgCACEIQQEhBQNAIAUgC08NASAHIAQgBUECdCIBaigCADYClAIgByAHKAKkAiAIQQR0ajYCmAIgACAHKALYASAHKALsASAHKAL8ASAHKALcARDDASAAEJcCIAVBAWohBSABIAcoAqACIgRqKAIAIAhqIQggBygCnAIhCwwACwALIAdCADcClAIgACAJKAIQIgMoAggiAQR/IAcoAuQBIQMgBy8BjAIhBCACIAEoAgAiAUEQaiABKAIAIAEoAggbIgEpAwg3AyAgAiABKQMANwMYIAAgAkEYaiAEQYABcUEHdiADIARBAnFBAXYQ3gggBygC6AEhAyAHLwGMAiEEIAIgCSgCECgCCCIBKAIAIAEoAgRBMGxqIgEgAUEwaygCACABQSxrKAIAQQR0aiABQSRrKAIAG0EQayIBKQMINwMQIAIgASkDADcDCCAAIAJBCGogBEGAAnFBCHYgAyAEQQRxQQJ2EN4IIAkoAhAFIAMLKAJgQQsgBy8BjAJBA3ZBAXEgBygC4AEgBygC8AEgBygCgAIgBygC3AEgCUGQ2gooAgBB6pMBEHoQaQR/IAkoAhAoAggFQQALEN4EIAAgCSgCECgCbEELIAcvAYwCQQN2QQFxIAcoAuABIAcoAvABIAcoAoACIAcoAtwBIAlBkNoKKAIAQeqTARB6EGkEfyAJKAIQKAIIBUEACxDeBCAAIAkoAhAoAmRBByAHLwGMAkECdkEBcSAHKALoASAHKAL4ASAHKAKIAiAHKALcAUEAEN4EIAAgCSgCECgCaEEGIAcvAYwCQQF2QQFxIAcoAuQBIAcoAvQBIAcoAoQCIAcoAtwBQQAQ3gQCQCAAKAI8IgFFDQAgASgCRCIBRQ0AIAAgAREBAAsgABCNBAsgAkHgFWokAA8LQb6ABEHCAEEBQajzCCgCABA7GhA8AAvOBgECfyMAQYACayIDJAAgA0HQAWoiBEGovwhBMBAgGiABQgA3AgACQAJAAkACQCAAIAQQ4gQNACADKALYAUECSQ0AIAMgAykD2AE3A8gBIAMgAykD0AE3A8ABIAMoAtABIANBwAFqQQAQGUEYbGooAgANAQtBACEAQQAhAQNAIAEgAygC2AFPDQIgAyADKQPYATcDICADIAMpA9ABNwMYIANBGGogARAZIQICQAJAIAMoAuABIgQOAgEFAAsgAyADKALQASACQRhsaiICKQMINwMIIAMgAikDEDcDECADIAIpAwA3AwAgAyAEEQEACyABQQFqIQEMAAsACyADKALYAUEDTwRAQYWWBEEAECoLIAMgAykD2AE3A7gBIAMgAykD0AE3A7ABIAEgAygC0AEgA0GwAWpBABAZQRhsaigCABBkNgIAIAMgAykD2AE3A6gBIAMgAykD0AE3A6ABIAMoAtABIANBoAFqQQEQGUEYbGooAgAEQCADIAMpA9gBNwOYASADIAMpA9ABNwOQASABIAMoAtABIANBkAFqQQEQGUEYbGooAgAQZDYCBAsgAyADKQPYATcDiAEgAyADKQPQATcDgAEgAygC0AEhASADQYABakEAEBkhBCADKALQASEAIAICfCABIARBGGxqLQAQQQFGBEAgAyADKQPYATcDWCADIAMpA9ABNwNQIAAgA0HQAGpBABAZQRhsaisDCAwBCyADIAMpA9gBNwN4IAMgAykD0AE3A3BEAAAAAAAAAAAgACADQfAAakEBEBlBGGxqLQAQQQFHDQAaIAMgAykD2AE3A2ggAyADKQPQATcDYEQAAAAAAADwPyADKALQASADQeAAakEBEBlBGGxqKwMIoQs5AwBBACEBQQEhAANAIAEgAygC2AFPDQEgAyADKQPYATcDSCADIAMpA9ABNwNAIANBQGsgARAZIQICQAJAIAMoAuABIgQOAgEEAAsgAyADKALQASACQRhsaiICKQMINwMwIAMgAikDEDcDOCADIAIpAwA3AyggA0EoaiAEEQEACyABQQFqIQEMAAsACyADQdABaiIBQRgQMyABEDggA0GAAmokACAADwtBvoAEQcIAQQFBqPMIKAIAEDsaEDwAC68BAQF/IAAoAhAiAUUEQEG39QBBo7gBQYcBQc+RARAAAAsgASgC3AEQGCABKALYARAYIAEoAuABEBggASgC5AEQGCABKALoARAYIAEoAuwBEBggASgC8AEQGCABKAL0ARAYIAEoAvgBEBggASgC/AEQGCABKAKAAhAYIAEoAoQCEBggASgCiAIQGCABKAKYAhAYIAEoAqQCEBggASgCoAIQGCAAIAEoAgA2AhAgARAYC54BAQJ/QbgCEMYDIgEgACgCECICNgIAIAAgATYCECACBEAgAUEQaiACQRBqQSgQIBogAUE4aiACQThqQSgQIBogASACKAKYATYCmAEgASACKAKcATYCnAEgASACKwOgATkDoAEgASACKAKIATYCiAEgAUHgAGogAkHgAGpBKBAgGiABDwsgAUKAgICAgICA+D83A6ABIAFCAzcDmAEgAQvjAwIIfwJ+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KAIIIQMgBCEBDAALAAtBvdIBQbS3AUHYAUH5wwEQAAALQd6HAUG0twFB2QFB+cMBEAAACyACIAApAgg3AyggAiAAKQIANwMgIAAgAkEgaiADQQFrEBlBBBDeARogACAAKAIIQQFrNgIIIAJBMGokAAunAQEEfyMAQRBrIgUkACABED8hAiMAQRBrIgMkAAJAIAJB9////wdNBEACQCACEKAFBEAgACACENMBIAAhBAwBCyADQQhqIAIQ3wNBAWoQ3gMgAygCDBogACADKAIIIgQQ+wEgACADKAIMEPoBIAAgAhC+AQsgBCABIAIQqwIgA0EAOgAHIAIgBGogA0EHahDSASADQRBqJAAMAQsQygEACyAFQRBqJAALFwAgACADNgIQIAAgAjYCDCAAIAE2AggLDQAgACABIAJBARChBwsSACAAIAEgAkL/////DxCwBacLzAEBA38jAEEgayIDQgA3AxggA0IANwMQIANCADcDCCADQgA3AwAgAS0AACICRQRAQQAPCyABLQABRQRAIAAhAQNAIAEiA0EBaiEBIAMtAAAgAkYNAAsgAyAAaw8LA0AgAyACQQN2QRxxaiIEIAQoAgBBASACdHI2AgAgAS0AASECIAFBAWohASACDQALAkAgACIBLQAAIgJFDQADQCADIAJBA3ZBHHFqKAIAIAJ2QQFxRQ0BIAEtAAEhAiABQQFqIQEgAg0ACwsgASAAawuAAQEEfyAAIABBPRC0BSIBRgRAQQAPCwJAIAAgASAAayIEai0AAA0AQaCGCygCACIBRQ0AIAEoAgAiAkUNAANAAkAgACACIAQQ6QFFBEAgASgCACAEaiICLQAAQT1GDQELIAEoAgQhAiABQQRqIQEgAg0BDAILCyACQQFqIQMLIAMLTgEBf0EBQRwQGiIGIAU6ABQgBiAAIAEQrgE2AggCfyADBEAgACACENUCDAELIAAgAhCuAQshBSAGIAA2AhggBiAENgIQIAYgBTYCDCAGCwkAIAC9QjSIpwuZAQEDfCAAIACiIgMgAyADoqIgA0R81c9aOtnlPaJE65wriublWr6goiADIANEff6xV+Mdxz6iRNVhwRmgASq/oKJEpvgQERERgT+goCEFIAAgA6IhBCACRQRAIAQgAyAFokRJVVVVVVXFv6CiIACgDwsgACADIAFEAAAAAAAA4D+iIAQgBaKh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IAAQ9gJBAWshASAAKAIECyIDIAFGBEAgACABQQEgASABEP0GIAAQRhoMAQsgABBGGiAEDQAgACIBIANBAWoQ0wEMAQsgACgCACEBIAAgA0EBahC+AQsgASADaiIAIAJBD2oQ0gEgAkEAOgAOIABBAWogAkEOahDSASACQRBqJAALDQAgAEHI6Ak2AgAgAAsHACAAQQhqCwcAIABBAkkLOwACQCAAECgEQCAAECVBD0YNAQsgAEEAEMoDCwJAIAAQKARAIABBADoADwwBCyAAQQA2AgQLIAAQiAULBABBBAslAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAhC0ChogA0EQaiQAC6EBAQJ/AkACQCABED8iAkUNACAAEE4gABAlayACSQRAIAAgAhC9AQsgABAlIQMgABAoBEAgACADaiABIAIQIBogAkGAAk8NAiAAIAAtAA8gAmo6AA8gABAlQRBJDQFBibQDQZ38AEGXAkHd6gAQAAALIAAoAgAgA2ogASACECAaIAAgACgCBCACajYCBAsPC0GJzQFBnfwAQZUCQd3qABAAAAsdACAAQQRqEPgGQX9GBEAgACAAKAIAKAIIEQEACwsRACAAIAEgASgCACgCKBEEAAtpAQF/IwBBEGsiAiQAAkAgACgCAARAIAEoAgBFDQEgAiAAKQIANwMIIAIgASkCADcDACACQQhqIAIQ8wogAkEQaiQARQ8LQa3VAUGG+wBB2wBBhDwQAAALQZ7VAUGG+wBB3ABBhDwQAAALCABB/////wcLBQBB/wALYQEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBBGsiATYCCCAAIAFPDQEgAigCDCACKAIIEKYFIAIgAigCDEEEaiIANgIMIAIoAgghAQwACwALIAJBEGokAAvQAQECfyACQYAQcQRAIABBKzoAACAAQQFqIQALIAJBgAhxBEAgAEEjOgAAIABBAWohAAsgAkGEAnEiA0GEAkcEQCAAQa7UADsAACAAQQJqIQALIAJBgIABcSECA0AgAS0AACIEBEAgACAEOgAAIABBAWohACABQQFqIQEMAQsLIAACfwJAIANBgAJHBEAgA0EERw0BQcYAQeYAIAIbDAILQcUAQeUAIAIbDAELQcEAQeEAIAIbIANBhAJGDQAaQccAQecAIAIbCzoAACADQYQCRwvxAQEEfyMAQRBrIgQkAAJAAkACQCAABEAgACABEIwCIAAoAgwiBSAAKAIIIgJLBEAgAUUNAiAFQX8gAW5PDQMgACgCACEDAkAgASACbCICRQRAIAMQGEEAIQMMAQsgAyACEGYiA0UNBSACIAEgBWwiAU0NACABIANqQQAgAiABaxA2GgsgACADNgIAIAAgACgCCDYCDAsgBEEQaiQADwtBvdIBQbS3AUHnAkGLwwEQAAALQdGvA0HP/ABBzABB7bIBEAAAC0GgvQNBz/wAQc0AQe2yARAAAAsgBCACNgIAQajzCCgCAEGD5wMgBBAfGhAsAAuqAQEBfwJAIANBgBBxRQ0AIAJFIANBygBxIgRBCEYgBEHAAEZycg0AIABBKzoAACAAQQFqIQALIANBgARxBEAgAEEjOgAAIABBAWohAAsDQCABLQAAIgQEQCAAIAQ6AAAgAEEBaiEAIAFBAWohAQwBCwsgAAJ/Qe8AIANBygBxIgFBwABGDQAaQdgAQfgAIANBgIABcRsgAUEIRg0AGkHkAEH1ACACGws6AAALDAAgABBGIAFBAnRqC5wEAQt/IwBBgAFrIgwkACAMIAE2AnwgAiADEJQLIQggDEEKNgIQIAxBCGpBACAMQRBqIgkQfSEPAkACQAJAIAhB5QBPBEAgCBBNIglFDQEgDyAJEI8BCyAJIQcgAiEBA0AgASADRgRAQQAhCwNAIAAgDEH8AGoiARBaQQEgCBsEQCAAIAEQWgRAIAUgBSgCAEECcjYCAAsDQCACIANGDQYgCS0AAEECRg0HIAlBAWohCSACQQxqIQIMAAsACyAAEIEBIQ0gBkUEQCAEIA0QmwEhDQsgC0EBaiEQQQAhDiAJIQcgAiEBA0AgASADRgRAIBAhCyAORQ0CIAAQlAEaIAkhByACIQEgCCAKakECSQ0CA0AgASADRgRADAQFAkAgBy0AAEECRw0AIAEQJCALRg0AIAdBADoAACAKQQFrIQoLIAdBAWohByABQQxqIQEMAQsACwAFAkAgBy0AAEEBRw0AIAEgCxCbBSgCACERAkAgBgR/IBEFIAQgERCbAQsgDUYEQEEBIQ4gARAkIBBHDQIgB0ECOgAAIApBAWohCgwBCyAHQQA6AAALIAhBAWshCAsgB0EBaiEHIAFBDGohAQwBCwALAAsABSAHQQJBASABEPcBIgsbOgAAIAdBAWohByABQQxqIQEgCiALaiEKIAggC2shCAwBCwALAAsQkAEACyAFIAUoAgBBBHI2AgALIA8QfCAMQYABaiQAIAILEQAgACABIAAoAgAoAgwRAAALmwQBC38jAEGAAWsiDCQAIAwgATYCfCACIAMQlAshCCAMQQo2AhAgDEEIakEAIAxBEGoiCRB9IQ8CQAJAAkAgCEHlAE8EQCAIEE0iCUUNASAPIAkQjwELIAkhByACIQEDQCABIANGBEBBACELA0AgACAMQfwAaiIBEFtBASAIGwRAIAAgARBbBEAgBSAFKAIAQQJyNgIACwNAIAIgA0YNBiAJLQAAQQJGDQcgCUEBaiEJIAJBDGohAgwACwALIAAQggEhDSAGRQRAIAQgDRCdBSENCyALQQFqIRBBACEOIAkhByACIQEDQCABIANGBEAgECELIA5FDQIgABCVARogCSEHIAIhASAIIApqQQJJDQIDQCABIANGBEAMBAUCQCAHLQAAQQJHDQAgARAkIAtGDQAgB0EAOgAAIApBAWshCgsgB0EBaiEHIAFBDGohAQwBCwALAAUCQCAHLQAAQQFHDQAgASALEEIsAAAhEQJAIAYEfyARBSAEIBEQnQULIA1GBEBBASEOIAEQJCAQRw0CIAdBAjoAACAKQQFqIQoMAQsgB0EAOgAACyAIQQFrIQgLIAdBAWohByABQQxqIQEMAQsACwALAAUgB0ECQQEgARD3ASILGzoAACAHQQFqIQcgAUEMaiEBIAogC2ohCiAIIAtrIQgMAQsACwALEJABAAsgBSAFKAIAQQRyNgIACyAPEHwgDEGAAWokACACCw0AIAAoAgAgASgCAEkLBwAgAEELSQsJACAAQQEQpgsLFgAgACABKAIANgIAIAAgAigCADYCBAsJACAAIAEQpAMLMQEBfyMAQRBrIgMkACADIAE2AgwgAyACNgIIIAAgA0EMaiADQQhqEKIFIANBEGokAAtvAQR/IAAQLiEFAkAgACgCACICIAEoAgBzQQNxDQADQCAFIAJBA3EgAxDmAyIDRQ0BIAEgAygCCBCtByICRQ0BAkAgACADEEQiBBB1BEAgASACIAQQqgQMAQsgASACIAQQcQsgACgCACECDAALAAsLHAEBfyAAKAIAIQIgACABKAIANgIAIAEgAjYCAAsIACAAKAIARQuNAQEB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AUEsQfEjEAAACxoAIAArAwAgASsDAKEgACsDCCABKwMIoRBKC4EBAgJ/AXwgASACNgIQIAEgAyACKwMIoDkDGCAAKAIAIAAgARDfDEEobGohBANAAkAgBCIFKAIgIgRFDQAgASsDGCIGIAQrAxgiA2QNASADIAZkDQAgAisDACAEKAIQKwMAZA0BCwsgASAENgIgIAUgATYCICAAIAAoAghBAWo2AggLtQECA38CfAJAIABB5CYQJiIEBEAgBBCQAiIEQQJKDQELQRQhBAsgBBDNAiEFIAMgACgCECIAKwMoRAAAAAAAAOA/oqAhAyACIAArAyBEAAAAAAAA4D+ioCECIAS4IQhBACEAA38gACAERgR/IAEgBDYCACAFBSAFIABBBHRqIgYgALggCKNEGC1EVPshCUCiIgcgB6AiBxBXIAOiOQMIIAYgBxBLIAKiOQMAIABBAWohAAwBCwsLIgAgACABKwMAIAIrAwCgOQMAIAAgASsDCCACKwMIoDkDCAumEQIRfwh8IwBBEGsiDSQAIAAoAgggACgCBGoiB0EgEBohECAHIAUoAjAiCUEBdEEAIAlBAEobayIVQQAgFUEAShshDiABIAFDRwOAP5QgAxu7IRcDQCAGIA5HBEAgECAGQQV0aiIIIAUrAxhEAAAAAAAA4D+iIhggBSgCKCAGQQR0aiIRKwMAIBeiRAAAAAAAAOA/oiIZIAZBAnQiEiACKAIAaioCALsiGqCgOQMQIAggGiAZoSAYoTkDACAIIAUrAyBEAAAAAAAA4D+iIhggESsDCCAXokQAAAAAAADgP6IiGSACKAIEIBJqKgIAuyIaoKA5AxggCCAaIBmhIBihOQMIIAZBAWohBgwBCwsCQCAJQQBKBEAgCUEBakEEEBohEUEAIRIgBSgCMEEBakEEEBohDkEAIQIDQCAFKAIwIgYgAkoEQEEAIQYgAkECdCIKIAUoAjRqKAIAIghBACAIQQBKGyETRP///////+9/IRdE////////7/8hGCAIQQJqIgxBBBAaIQcgDEEgEBohCUT////////v/yEZRP///////+9/IRoDQCAGIBNHBEAgByAGQQJ0IgtqIAAoAhAgBSgCOCAKaigCACALaigCACIPQQJ0aigCADYCACAJIAZBBXRqIgsgECAPQQV0aiIPKwMAIhs5AwAgCyAPKwMIIhw5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QQAhBwNAIAgoAgAgB00EQCACIAIoAgBBAWs2AgAgAUGSgAUQGxogASACKAIAEEMgAUH1xwEQGxogCBCMCgwDCyAHBEAgAUHH6gQQGxoLIAgoAgghAyACIAIoAgAiBkEBajYCACABIAYQQyABQf7VAxAbGiABIAIoAgAQQwJAAkACQAJAAkACQAJAAkACQAJAAkACQCADIAdB0ABsaiIDKAIAIgYOEAoKAAABAQIDBAQGBwsFBQgJCyAEQdAAQfAAIAZBAkYbNgJQIAFB/ekEIARB0ABqEB4gASACKAIAEEMgASADQQhqELIIDAoLIARBwgBB4gAgBkEERhs2AmAgAUH96QQgBEHgAGoQHiABIAIoAgAQQyABIANBCGoQsggMCQsgAUGy6gRBABAeIAEgAigCABBDIAEgA0EIahCyCAwICyABQZrqBEEAEB4gASACKAIAEEMgAysDCCELIAQgAysDEDkDmAEgBCALOQOQASABQYXoBCAEQZABahAeIAEgAigCABBDIARB4wBB8gAgAygCGCIGQQFGG0HsACAGGzYCgAEgAUGK6gQgBEGAAWoQHiABIAIoAgAQQyAEIAMrAyA5A3AgAUHJ5wQgBEHwAGoQHiABIAIoAgAQQyABQeXJAxAbGiADKAIoIAIgARC8AiABQQoQZQwHCyAEQcMAQeMAIAZBCEYbNgKgASABQf3pBCAEQaABahAeIAEgAigCABBDIAFBsekEQQAQHiABIAIoAgAQQyABQf7JAxAbGiADKAIIIAIgARC8AiABQQoQZQwGCyAEQcMAQeMAIAZBDUYbNgKQAiABQf3pBCAEQZACahAeIAEgAigCABBDAkACQAJAIAMoAggOAgABAgsgAUGx6QRBABAeIAEgAigCABBDIAFB/skDEBsaIAMoAhAgAiABELwCIAFBChBlDAcLIAFBi+kEQQAQHiABIAIoAgAQQyABIAIoAgAQQyADKwMQIQsgBCADKwMYOQOIAiAEIAs5A4ACIAFBsegEIARBgAJqEB4gASACKAIAEEMgAysDICELIAQgAysDKDkD+AEgBCALOQPwASABQZvoBCAEQfABahAeIAEgAigCABBDIAEgAygCMCADKAI0IAIQjw8MBgsgAUGe6QRBABAeIAEgAigCABBDIAEgAigCABBDIAMrAxAhCyADKwMYIQwgBCADKwMgOQPg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CyABEBwhBwJAA0AgBwRAIAcoAhAiAiACKwMQIg4gAisDWKE5AzAgAiAOIAIrA2CgOQNAIAIgAisDGCITIAIrA1BEAAAAAAAA4D+iIg6hOQM4IAIgEyAOoDkDSCABIAcQLSEGA0AgBgRAIAYoAhAoAggiCARAIAgoAgRFDQUgA0HABGogCCgCACIEQTAQIBogA0HwA2oiAiAEQTAQIBogA0GgBGogAhDdCCADKwO4BCERIAMrA7AEIRAgAysDqAQhDyADKwOgBCESQQAhAgNAIAgoAgQgAksEQCACBEAgA0HABGogCCgCACACQTBsaiIFQTAQIBogA0HAA2oiBCAFQTAQIBogA0GgBGogBBDdCCADKwOgBCEUIAMrA6gEIRMgAysDsAQhDiARIAMrA7gEECMhESAQIA4QIyEQIA8gExApIQ8gEiAUECkhEgsgAygCyAQEQCADIAMpA9gENwO4AyADIAMpA9AENwOwAyADIAMoAsAEIgQpAwg3A6gDIAMgBCkDADcDoAMgA0GgBGogA0GwA2ogA0GgA2oQzAMgAysDoAQhFCADKwOoBCETIAMrA7AEIQ4gESADKwO4BBAjIREgECAOECMhECAPIBMQKSEPIBIgFBApIRILIAMoAswEBEAgAyADKQPoBDcDmAMgAyADKQPgBDcDkAMgAyADKALABCADKALEBEEEdGpBEGsiBCkDCDcDiAMgAyAEKQMANwOAAyADQaAEaiADQZADaiADQYADahDMAyADKwOgBCEUIAMrA6gEIRMgAysDsAQhDiARIAMrA7gEECMhESAQIA4QIyEQIA8gExApIQ8gEiAUECkhEgsgAkEBaiECDAELCyAIIBE5AyAgCCAQOQMYIAggDzkDECAIIBI5AwgLIAEgBhAwIQYMAQsLIAEgBxAdIQcMAQsLIABBADoAnQIgACABNgKgAQJAIAFB8OQAECYiAkUNACADIANBoARqNgL0AiADIANBwARqNgLwAiACQdmDASADQfACahBRIgJBAEwNACAAIAMrA8AERAAAAAAAAFJAoiIOOQPAASAAIA45A8gBIAJBAUcEQCAAIAMrA6AERAAAAAAAAFJAojkDyAELIABBAToAnQILIABBADoAnAICQCABQaOwARAmIgJFDQAgAyADQaAEajYC5AIgAyADQcAEajYC4AIgAkHZgwEgA0HgAmoQUSICQQBMDQAgACADKwPABEQAAAAAAABSQKIiDjkD0AEgACAOOQPYASACQQFHBEAgACADKwOgBEQAAAAAAABSQKI5A9gBCyAAQQE6AJwCCyAAQQA6AJ4CIAAgASgCECgCCCICKQMwNwPgASAAIAIpAzg3A+gBAkAgASgCECgCCCICKwMwRPyp8dJNYlA/ZEUNACACKwM4RPyp8dJNYlA/ZEUNACAAQQE6AJ4CCyACLQBRIQIgAEGb1gE2ArwBIABB2gBBACACGzYCmAICQCABQcg3ECYiAkUNACACLQAARQ0AIAAgAjYCvAELIAAgASgCECICKQMQNwP4ASAAIAIpAyg3A5ACIAAgAikDIDcDiAIgACACKQMYNwOAAkHg2AogAUEAQfUvQQAQIjYCAEHk2AogAUEAQd73AEEAECI2AgAgAEEAQYjZCigCAEGD6gAQjQE2ArgCQQBBhNkKKAIARAAAAAAAACxARAAAAAAAAPA/EE8hDiAAQbydCjYCyAIgACAOOQPAAiAAIAEQITYCtAEgACgCqAIQGCAAQQA2AqgCIAAoAqwCEBggAEEANgKsAiAAKAK0AhAYIABBADYCtAICQAJAIAFB2CkQJiIFBEAgACABQZbbABAmIgJByssDIAIbNgKgAiAAIAFBidsAECYiAkHYngMgAhsiBDYCpAIgACgCoAIiAiAEEPkCIAJqIgJBACACLQAAGyICBEAgAyACLAAANgLQAkGQ4QQgA0HQAmoQKiAAQZWABTYCpAILIAAgBRBkNgKoAiADQgA3A9AEIANCADcDyAQgA0IANwPABCADQcAEakEEECchAiADKALABCACQQJ0aiADKALUBDYCACAAKAKoAiECA0AgAiAAKAKgAhCxBSICBEAgAyACNgLUBCADQcAEakEEECchAiADKALABCACQQJ0aiADKALUBDYCAEEAIQIMAQsLIAMoAsgEIgJBAWsiBUEASA0CIAJBAk8EQCADQQA2AtQEIANBwARqIgRBBBAnIQIgAygCwAQgAkECdGogAygC1AQ2AgAgBCAAQawCakEAQQQQxgELQQAhAgNAIAMoAsgEIAJLBEAgAyADKQPIBDcDuAIgAyADKQPABDcDsAIgA0GwAmogAhAZIQgCQAJAAkAgAygC0AQiBA4CAgABCyADKALABCAIQQJ0aigCABAYDAELIAMoAsAE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AAsgAgvUAQEGfyAAKAIUIAAoAgxBAnRqKAIAKAIcIAAoAixqIQEgACgCJCEEIAAoAlAhAgNAIAIgBEkEQCACLQAAIgMEfyADQaCABWotAAAFQQELIQMgAUEBdEGgggVqLwEABEAgACACNgJEIAAgATYCQAsDQAJAA0AgASABQQF0IgVBgIgFai4BACADakEBdCIGQeCDBWouAQBGDQEgBUHgiQVqLgEAIgFB3QBIDQALIANBwIsFai0AACEDDAELCyACQQFqIQIgBkGAjAVqLgEAIQEMAQsLIAELvAICAX4CfyAABEAgACAAED8iBEF4cWohAyAErSECA0AgAkKV08fetfKp0kZ+IQIgACADRkUEQCACIAApAABCldPH3rXyqdJGfiICQi+IIAKFQpXTx9618qnSRn6FIQIgAEEIaiEADAELCyACQoCAgICAgICAAUIAIAEbhSECAkACQAJAAkACQAJAAkACQCAEQQdxQQFrDgcGBQQDAgEABwsgAzEABkIwhiAChSECCyADMQAFQiiGIAKFIQILIAMxAARCIIYgAoUhAgsgAzEAA0IYhiAChSECCyADMQACQhCGIAKFIQILIAMxAAFCCIYgAoUhAgsgAiADMQAAhSECCyACQpXTx9618qnSRn4iAkIviCAChUKV08fetfKp0kZ+IgJCL4ggAoWnDwtB9NIBQcG5AUGYAUGb+QAQAAALJAAgACABIAIQ4wkgACgCTCIAKAIIIAEgAiAAKAIAKAIIESEAC9EDAQF/AkAgASACRgRAIANBADYCAAwBCwJAAkAgACABIAIQ4wJBCWsiB0EXS0EBIAd0QZOAgARxRXINAANAIAAgASAAKAJAaiIBIAIQ4wJBCWsiB0EXTQRAQQEgB3RBk4CABHENAQsLIAEgAkYEQCADQQA2AgAMAwsgAyABNgIAAkACQAJAA0ACQCAAIAEgAhDjAiIHQQlrQQJJDQAgB0E9Rg0CIAdBDUYgB0EgRnINACAHQX9GDQUgASAAKAJAaiEBDAELCyAEIAE2AgADQCAAIAEgACgCQGoiASACEOMCIgRBCWsiB0EXSw0CQQEgB3RBk4CABHENAAsMAQsgBCABNgIADAELIARBPUcNAQsgASADKAIARg0AA0AgACABIAAoAkBqIgEgAhDjAiIDQQlrQQJJDQACQCADQSBrDgMBAgMACyAD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BEAgASAAKAIMTQRAQQAPCyABrSACrX5CIIhQRQRAQT0PCyAAKAIAIAEgAmwQZiIERQRAQTAPCyAEIAAoAgwiAyACbGpBACABIANrIAJsEDYaIAMgACgCBCIFIAAoAghqSQRAIAQgASADIAVrIgNrIgYgAmxqIAQgAiAFbGogAiADbBC2ARogACAGNgIECyAAIAE2AgwgACAENgIAQQAPC0G90gFBtLcBQeEAQY6JARAAAAs6AQF/IABB8JEJKAIAIgE2AgAgACABQQxrKAIAakH8kQkoAgA2AgAgAEEEahCNBxogAEE4ahDCCyAACxgAIABBhI8JNgIAIABBIGoQNBogABCVBwsdACMAQRBrIgMkACAAIAEgAhCvCyADQRBqJAAgAAuZAQECfwJAIAAQLiIEIAAoAgBBA3EgAUEAECIiAw0AAkAgBEGVgAUQywMiA0GVgAVHDQAgAxB1RQ0AIAQgACgCAEEDcSABQZWABRDoAyEDDAELIAQgACgCAEEDcSABQZWABRAiIQMLAkACQCACRQ0AIAQgAhDLAyIBIAJHDQAgARB1RQ0AIAAgAyACEKoEDAELIAAgAyACEHELC64BAQZ/IwBBEGsiAiQAIAJBCGoiAyAAEKkFGgJAIAMtAABFDQAgAkEEaiIDIAAgACgCAEEMaygCAGoQUyADELkLIQQgAxBQIAIgABC4CyEFIAAgACgCAEEMaygCAGoiBhC3CyEHIAIgBCAFKAIAIAYgByABIAQoAgAoAiARMwA2AgQgAxCnBUUNACAAIAAoAgBBDGsoAgBqQQUQqgULIAJBCGoQqAUgAkEQaiQAIAALDAAgAEEEahDCCyAACygBAn8jAEEQayICJAAgASgCACAAKAIASCEDIAJBEGokACABIAAgAxsLEAAgACABNwMIIABCADcDAAsCAAsUACAAQZSOCTYCACAAQQRqEFAgAAvzAwICfgV/IwBBIGsiBSQAIAFC////////P4MhAgJ+IAFCMIhC//8BgyIDpyIEQYH4AGtB/Q9NBEAgAkIEhiAAQjyIhCECIARBgPgAa60hAwJAIABC//////////8PgyIAQoGAgICAgICACFoEQCACQgF8IQIMAQsgAEKAgICAgICAgAhSDQAgAkIBgyACfCECC0IAIAIgAkL/////////B1YiBBshACAErSADfAwBCyAAIAKE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EGsiAyQAIAMgAToADwJAAkAgACgCECICBH8gAgUgABClBwRAQX8hAgwDCyAAKAIQCyAAKAIUIgRGDQAgAUH/AXEiAiAAKAJQRg0AIAAgBEEBajYCFCAEIAE6AAAMAQsgACADQQ9qQQEgACgCJBEDAEEBRwRAQX8hAgwBCyADLQAPIQILIANBEGokACACC1kBAX8gACAAKAJIIgFBAWsgAXI2AkggACgCACIBQQhxBEAgACABQSByNgIAQX8PCyAAQgA3AgQgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCEEEAC5QDAgN+An8CQCAAvSICQjSIp0H/D3EiBEH/D0cNACAARAAAAAAAgFZAoiIAIACjDwsgAkIBhiIBQoCAgICAgMDWgH9YBEAgAEQAAAAAAAAAAKIgACABQoCAgICAgMDWgH9RGw8LAn4gBEUEQEEAIQQgAkIMhiIBQgBZBEADQCAEQQFrIQQgAUIBhiIBQgBZDQALCyACQQEgBGuthgwBCyACQv////////8Hg0KAgICAgICACIQLIQEgBEGFCEoEQANAAkAgAUKAgICAgICgC30iA0IAUw0AIAMiAUIAUg0AIABEAAAAAAAAAACiDwsgAUIBhiEBIARBAWsiBEGFCEoNAAtBhQghBAsCQCABQoCAgICAgKALfSIDQgBTDQAgAyIBQgBSDQAgAEQAAAAAAAAAAKIPCyABQv////////8HWARAA0AgBEEBayEEIAFCgICAgICAgARUIAFCAYYhAQ0ACwsgAkKAgICAgICAgIB/gyABQoCAgICAgIAIfSAErUI0hoQgAUEBIARrrYggBEEAShuEvwviAgEFfwJAAkACQCACKAJMQQBOBEAgAUECSA0BDAILQQEhBiABQQFKDQELIAIgAigCSCICQQFrIAJyNgJIIAFBAUcNASAAQQA6AAAgAA8LIAFBAWshBCAAIQECQANAAkACQAJAIAIoAgQiAyACKAIIIgVGDQACfyADQQogBSADaxD7AiIHBEAgByACKAIEIgNrQQFqDAELIAIoAgggAigCBCIDawshBSABIAMgBSAEIAQgBUsbIgMQIBogAiACKAIEIANqIgU2AgQgASADaiEBIAcNAiAEIANrIgRFDQIgBSACKAIIRg0AIAIgBUEBajYCBCAFLQAAIQMMAQsgAhC9BSIDQQBO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AwAgA0EBaiEDDAIFIBAgNyAXIAFBA3QiGGorAwAgFCAYaisDAKKhIjc5AwAgAUEBaiEBDAELAAsACwALQcTWCigCABoCQEHnqwFB+NUKEIkBQQBIDQACQEHI1gooAgBBCkYNAEGM1gooAgAiAEGI1gooAgBGDQBBjNYKIABBAWo2AgAgAEEKOgAADAELQfjVCkEKEKQHGgsLIA0QGCAIEBhBACEBA0BBvNgKLwEAIhQgAUsEQEHQ2AorAwAhNxDVASE4IAFBA3QiACAJQaABamoiAyADKwMAIDcgOEQAAAAAAADwPyA3oSI3IDegoqCiIjc5AwAgAigCECgClAEgAGoiACA3IAArAwCgOQMAIAFBAWohAQwBCwsgBygCECIAIAAoApwBQQFqNgKcASAAKAKYASITIAtqKAIAIQ1BACEBA0AgASAURgRAQQAhAwNAIAMgFUcEQAJAIAMgDkYNAEEAIQogDSgCECgClAEgEyADQQJ0IgRqKAIAKAIQKAKUASAJQfABahDFDSE3A0AgCiAURg0BIApBA3QiASAAKAKsASIIIAtqKAIAIARqKAIAaiIRIANBA3QiEiAAKAKkASALaigCAGorAwAgCUHwAWogAWorAwAiOCA4IAAoAqABIAtqKAIAIBJqKwMAoiA3o6GiIjg5AwAgACgCqAEiEiALaigCACABaiIQIDggECsDAKA5AwAgBCAIaigCACALaigCACABaiIIKwMAITggCCARKwMAmiI5OQMAIAQgEmooAgAgAWoiASA5IDihIAErAwCgOQMAIApBAWohCgwACwALIANBAWohAwwBCwtB6NsKKAIABEBBACEBQbzYCi8BACEARAAAAAAAAAAAITgDQCAAIAFHBEAgOCAJQaABaiABQQN0aisDAJmgITggAUEBaiEBDAELCyACECEhACAJIDifOQM4IAkgADYCMCAMQdWiBCAJQTBqEDILIAUQGAwFBSAAKAKoASALaigCACABQQN0akIANwMAIAFBAWohAQwBCwALAAsgBUEBaiEFDAALAAsLQQAhAUGM2AotAAAEQEEBIAYgBkEBTBtBAWshBEG82AovAQAhBUQAAAAAAAAAACE3A0AgASAERwRAIAcoAhAiAigCmAEiCiABQQJ0IgNqKAIAIRUgAUEBaiIAIQsDQCAGIAtGBEAgACEBDAMFIAogC0EC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IDcDECAJIAIpAxg3AwgCQCACKAIIKAJYIgZFDQACQCAJKwMAIAkrAxBiDQAgCSsDCCAJKwMYYg0AIAlC/////////3c3AxggCUL/////////9/8ANwMAIAlC//////////f/ADcDCCAJQv////////93NwMQCyAGKAIIIQcDQCARIAYoAgBPDQEgC0IANwM4IAtCADcDMCALQgA3AyggC0IANwMgAkACQAJAAkACQAJAAkACQCAHKAIADhAAAAEBAgIDBAcHBQcHBwcGBwsgByAHKwMQIhwgBysDICIXoCIZOQNoIAcgBysDCCIUIAcrAxgiE6AiGjkDYCAHIBwgF6EiFzkDWCAHIBQgE6EiEzkDUCAJIAkrAwAgExApIBoQKTkDACAJIAkrAxggFxAjIBkQIzkDGCAJIAkrAwggFxApIBkQKTkDCCAJIAkrAxAgExAjIBoQIzkDEAwGCyALIAcoAgwgBygCCCAJEKQGIAcgCykDGDcDaCAHIAspAxA3A2AgByALKQMINwNYIAcgCykDADcDUAwFCyALIAcoAgwgBygCCCAJEKQGIAcgCykDGDcDaCAHIAspAxA3A2AgByALKQMINwNYIAcgCykDADcDUAwECyALIAcoAgwgBygCCCAJEKQGIAcgCykDGDcDaCAHIAspAxA3A2AgByALKQMINwNYIAcgCykDADcDUAwDCyAHQTgQxgM2AnAgBygCKBBkIQUgBygCcCICIAU2AgAgAiAHKAIYQaS/CGotAAA6ADAgCyAYOQMwIAsgEjYCICALIAsoAjhBgH9xIA5B/wBxcjYCOCANKAKIASICIAtBIGpBASACKAIAEQMAIQUgBygCcCICIAU2AgQgCyANIAIQ3wYgBysDCCETIAcoAnAiAisDKCEXIAIrAyAhFAJAAkACQAJAIAItADBB7ABrDgcAAwEDAwMCAwsgEyAUoCEWIBMhFQwCCyATIBREAAAAAAAA4D+iIhWgIRYgEyAVoSEVDAELIBMgFKEhFSATIRYLIAcrAxAhFCACKwMQIRMgByAWOQNgIAcgFTkDUCAHIBQgE6AiFDkDaCAHIBQgF6EiEzkDWCAJIAkrAxAgFRAjIBYQIzkDECAJIAkrAxggExAjIBQQIzkDGCAJIAkrAwAgFRApIBYQKTkDACAJIAkrAwggExApIBQQKTkDCCAGKAIMDQIgBkGXAjYCDAwCCyAHKAIQIRIgBysDCCEYDAELIAcoAgghDgsgEUEBaiERIAdB+ABqIQcMAAsACyALQUBrJAAgDyAEKQNwNwMoIA8gBCkDaDcDICAPIAQpA2A3AxggDyAEKQNYNwMQCwJAIAggEHINACADKAIQIgIrAxBEAAAAAAAAAABhBEAgAisDGEQAAAAAAAAAAGENAQsgAxDADAsgAxDMByECIAFFDQEgACACckEBRw0CIAMQHCECA0AgAkUNAiADIAIQLSEFA0AgBQRAIAUQmgQgBSgCECgCYBC8ASAFKAIQKAJsELwBIAUoAhAoAmQQvAEgBSgCECgCaBC8ASADIAUQMCEFDAELCyADIAIQHSECDAALAAsgBRAhIQAgBCADECE2AlQgBCAANgJQQdGHBCAEQdAAahA3QX8hCgwCC0EAIQELAkAgAUECRgRAQZjYCigCAEEDRw0BCyADQQAQygUMAQtBwNgKQQE2AgALIARBkAFqJAAgCkEATgRAIANBABDzBQwCC0HHlgRBABB/DAILIABBoZIBECYQaSEOQaDYCiAAEP8JOQMAIAAQswwCfyAAQaSfARAmIgEEQEEBIQhBASABQZWABRBiDQEaQQAhCEEAIAFBm9cBEGINARpBASEIQQEgAUGlNxBiDQEaQQQgAUH0pgEQYg0BGkECIAFBwzkQYg0BGkEDIAFBn9sAEGINARogDCAAECE2AiQgDCABNgIgQce2BCAMQSBqECoLQQEhCEEBCyEFIAAgDEE4ahDXDAJAIABBrvAAECYiAUUNACABQZWABRBiDQAgAUHgIBBiBEBBASEQDAELIAFBhiIQYgRAQQIhEAwBCyABQfv3ABBiDQAgAUHdMRBiBEAgAEECQbnmAEEAECIEQEEDIRAMAgsgDCAAECE2AgBB1IwEIAwQKkGJ3gRBABB/DAELIAwgABAhNgIUIAwgATYCEEGJtgQgDEEQahAqCyAAQQAgDEHQAGoQhAghAUHs/AogAEF/QQgQ6gUiAzYCAAJAAkACQAJAIAFFBEAgCEUgA0EATnINAUHs/ApBCDYCACAMQQI2AmAMAgsgA0EATg0BQez8CkEINgIADAELIAxBAjYCYCADQQBIDQELIAxBNGohAyMAQeAAayIGJAAgBkIANwNYIAZCADcDUAJ/IAAQOkUEQCADQQA2AgBBAAwBCyAGQgA3A0ggBkFAa0IANwMAIAZCADcDOCAGQgA3AyggBkIANwMgIAZCADcDGCAGQboDNgI0IAZBuwM2AjAgABAcIQgDQCAIBEAgCCgCEEEANgKwASAAIAgQHSEIDAELCyAAEBwhCANAIAgEQAJAIAhBfyAGKAI0EQAADQAgCCgCEC0AhwFBA0cNACANRQRAIAZB0ABqIgFBrLYBEOgFIAYgBigCQDYCECABIAZBEGoQ5wUgACABELEDQQEQkQEiDUGQJkGYAkEBEDUaIAYgDTYCTCAGQThqQQQQJyEBIAYoAjggAUECdGogBigCTDYCAEEBIQILIAAgCCANIAZBGGoQ5gUaCyAAIAgQHSEIDAELCyAAEBwhCANAIAgEQCAIQX8gBigCNBEAAEUEQCAGQdAAaiIBQay2ARDoBSAGIAYoAkA2AgAgASAGEOcFIAAgARCxA0EBEJEBIgFBkCZBmAJBARA1GiAAIAggASAGQRhqEOYFGiAGIAE2AkwgBkE4akEEECchASAGKAI4IAFBAnRqIAYoAkw2AgALIAAgCBAdIQgMAQsLIAZBGGoQgwggBkHQAGoQXCAMIAI6ADMgBkE4aiAGQRRqIANBBBDGASAGKAIUCyEBIAZB4ABqJAACQCAMKAI0IgNBAk8EQEEAIQgCQANAIAMgCE0EQCAMLQAzRQRAQQAhCAwDCwUgASAIQQJ0aigCACIDQQAQsgMaIAAgAyAFIBAgDEE4aiICEL8HIAMgAhDxAxogA0ECEIkCAkAgDgRAIAMQvgcMAQsgAxCsAwsgCEEBaiEIIAwoAjQhAwwBCwsgA0EBEBoiCEEBOgAAIAwoAjQhAwsgDCAINgJkIAxBAToAXCAMQez8CigCADYCWCADIAEgACAMQdAAahDZDRogCBAYDAELIAAgACAFIBAgDEE4aiICEL8HIAAgAhDxAxogDgRAIAAQvgcMAQsgABCsAwsgABDCAiAAEMAHQQAhAwNAIAwoAjQgA00EQCABEBggABA5EHghAwNAIANFDQQgAxDEAQRAIANBkCZBmAJBARA1GiAAIAMQsgwgAxDCAgsgAxB3IQMMAAsABSABIANBAnRqKAIAIgIQxw0gAkGQJhDhASAAIAIQtwEgA0EBaiEDDAELAAsACyAAIAAgBSAQIAxBOGoiARC/ByAAIAEQ8QMaIAAQwAcgDgRAIAAQvgcMAQsgABCsAwsgACAOQQFzEPMFC0Gg2AogGzkDAAsgDEHwAGokAAuEAgIDfwF+IwBB0ABrIgMkAAJAIABB7RwQJiIERQ0AIAQsAAAiBUUNAAJAAkAgBUFfcUHBAGtBGU0EQCAEQbaDARDDAgRAQQAhAQwECyAEQcg7EMMCBEBBASEBDAQLIARB4ewAEMMCRQ0BIARBBmohBAwCCyABQQJGIAVBMGtBCklyDQEMAgsgAUECRw0BCwJAIAQsAABBMGtBCU0EQCADIANBzABqNgIQIARBkaYBIANBEGoQUUEASg0BCyADENQBIgY+AkwgAyAGxDcDACADQSNqIgFBKUHwpQEgAxCmARogAEHtHCABEOgBCyACIAMoAkw2AgBBAiEBCyADQdAAaiQAIAELrUsEJH8EfAF9An4jAEGwAmsiDSQAIAdBAE4EQEGM2AotAAAEQBCvAQsCQAJAAn8gBkECRgRAQYzYCi0AAARAQYXwAEEYQQFBqPMIKAIAEDsaCyAAIAEQxQcMAQsCQAJAIAZBAWsOAwADAQMLIAAgARDIByIbDQNBo4wEQQAQKkHC3gRBABB/DAILQYzYCi0AAARAQZ7wAEEVQQFBqPMIKAIAEDsaCyAAIAEQxwcLIhsNAQtBjNgKLQAABEBB9i1BGkEBQajzCCgCABA7GgsgACgCCARAIAAgARDGByEbDAELIAAgARDJBSEbC0GM2AotAAAEQCANEIwBOQOQAkGo8wgoAgAiCUG3xwQgDUGQAmoQMkHUK0EZQQEgCRA7GhCvAQsgBUEDcSEjAkACQAJAAn8gBUEEcUUgAUECSHJFBEBBMiABIAFBMk8bIglBBBAaIRcgASAJbEEIEBohCEEAIQUDQCAFIAlHBEAgFyAFQQJ0aiAIIAEgBWxBA3RqNgIAIAVBAWohBQwBCwtBACEFIA1BADYCrAIgBkECRiEVIAFBMiAJQQF0IgggCEEyTRsiCCABIAhJGyILIAFsEM8BIQggARDPASEQIAAiFigCCCEUIA0gCxDPASIANgKsAiALQQAgC0EAShshEgNAIA4gEkcEQCAAIA5BAnRqIAggASAObEECdGo2AgAgDkEBaiEODAELCyAVBEAgFiABENwHCxCnASABbyEIIAAoAgAhDgJAIBUEQCAIIBYgASAOELoEDAELIAggFiABIA4Q8gMLIAFBACABQQBKGyERQQAhDgNAIA4gEUYEQEEBIAsgC0EBTBshGEEBIRIDQCASIBhHBEAgACASQQJ0aiIaKAIAIQoCQCAVBEAgCCAWIAEgChC6BAwBCyAIIBYgASAKEPIDC0EAIQ5BACEKA0AgDiARRwRAIBAgDkECdCIZaiIcIBwoAgAiHCAaKAIAIBlqKAIAIhkgGSAcShsiGTYCACAZIAogCiAZSCIZGyEKIA4gCCAZGyEIIA5BAWohDgwBCwsgEkEBaiESDAELCyAQEBggFQRAIBYgASAUENsHCwUgECAOQQJ0IhJqIAAoAgAgEmooAgAiEjYCACASIAogCiASSCISGyEKIA4gCCASGyEIIA5BAWohDgwBCwsgDSgCrAIhFUEAIQogC0EAIAtBAEobIRIgAUEAIAFBAEobIQAgAbchLQNAIAogEkcEQCAVIApBAnRqIQ5EAAAAAAAAAAAhLEEAIQgDQCAAIAhHBEAgLCAOKAIAIAhBAnRqKAIAt6AhLCAIQQFqIQgMAQsLAn8gLCAtoyIsmUQAAAAAAADgQWMEQCAsqgwBC0GAgICAeAshEEEAIQgDQCAAIAhHBEAgDigCACAIQQJ0aiIRIBEoAgAgEGs2AgAgCEEBaiEIDAELCyAKQQFqIQoMAQsLIA0oAqwCIRIgCSIAQQAgCUEAShshECAJQQQQGiEVA0AgDyAQRwRAIBUgD0ECdGogC0EIEBo2AgAgD0EBaiEPDAELC0EAIQ8gC0EAIAtBAEobIREgC0EEEBohCSALIAtsQQgQGiEOIAtBA3QhCANAIA8gEUYEQEEAIQ4gAUEAIAFBAEobIRlBASEKA0AgDiARRwRAIBIgDkECdCIIaiEUIAggCWooAgAhGEEAIQgDQCAIIApHBEAgEiAIQQJ0IhpqIRxEAAAAAAAAAAAhLEEAIQ8DQCAPIBlHBEAgLCAPQQJ0Ih4gHCgCAGooAgAgFCgCACAeaigCAGy3oCEsIA9BAWohDwwBCwsgCSAaaigCACAOQQN0aiAsOQMAIBggCEEDdGogLDkDACAIQQFqIQgMAQsLIApBAWohCiAOQQFqIQ4MAQsLIAkgCyAAIBUQgw0aQQAhCEEAIQsDQCALIBBGBEADQCAIIBBHBEAgFSAIQQJ0aigCABAYIAhBAWohCAwBCwsFIBcgC0ECdCIKaiEUIAogFWohCkEAIQ4DQEQAAAAAAAAAACEsQQAhDyAOIBlHBEADQCAPIBFHBEAgEiAPQQJ0aigCACAOQQJ0aigCALcgCigCACAPQQN0aisDAKIgLKAhLCAPQQFqIQ8MAQsLIBQoAgAgDkEDdGogLDkDACAOQQFqIQ4MAQsLIAtBAWohCwwBCwsgFRAYIAkoAgAQGCAJEBgFIAkgD0ECdGogDjYCACAPQQFqIQ8gCCAOaiEODAELCyANKAKsAigCABAYIA0oAqwCEBggAUEEEBohFQNAIAEgBUcEQCAVIAVBAnRqQX82AgAgBUEBaiEFDAELCyAWKAIIISQgBkECRgRAIBYgARDcBwtBACEFIAFBBBAaIRJBKEEEEBohGSABQShsQQQQGiEJQShBBBAaIQ8DQCAFQShHBEAgDyAFQQJ0aiAJIAEgBWxBAnRqNgIAIAVBAWohBQwBCwsgFRCnASABbyIJQQJ0akEANgIAIBkgCTYCACAPKAIAIRACQCAGQQJGBEAgCSAWIAEgEBC6BAwBCyAJIBYgASAQEPIDC0EBIQtBACEFA0AgASAFRgRAA0ACQCALQShGBEBBACEFA0AgASAFRg0CIBIgBUECdGpBfzYCACAFQQFqIQUMAAsACyAVIAlBAnRqIAs2AgAgGSALQQJ0IgVqIAk2AgAgBSAPaigCACEKAkAgBkECRgRAIAkgFiABIAoQugQMAQsgCSAWIAEgChDyAwtBACEIQQAhBQNAIAEgBUYEQCALQQFqIQsMAwUgEiAFQQJ0IgxqIg4gDigCACIOIAogDGooAgAiDCAMIA5KGyIMNgIAAkAgCCAMTgRAIAggDEcNARCnASAFQQFqbw0BCyAMIQggBSEJCyAFQQFqIQUMAQsACwALCyABQQFrIQggAUEEEBohGiABQRAQGiEOQQAhC0EAIQxBACEJA0ACfwJAIAEgCUcEQCAVIAlBAnQiFGooAgAiGEEASA0BIA4gCUEEdGoiBSAIQQQQGiIRNgIEIAhBBBAaIQogBUEBOgAMIAUgCDYCACAFIAo2AgggDyAYQQJ0aiEUQQAhBQNAIAUgCUYEQCAJIQUDQCAFIAhGBEAgCAwGBSARIAVBAnQiGGogBUEBaiIFNgIAIAogGGogFCgCACAFQQJ0aigCADYCAAwBCwALAAUgESAFQQJ0IhhqIAU2AgAgCiAYaiAUKAIAIBhqKAIANgIAIAVBAWohBQwBCwALAAsgEhAYIBoQGCAQEBggDxAYQQAhCyABQRQQGiEdIAEgE2oiBUEEEBohCCAFQQQQGiEKICNBAkchEANAIAEgC0cEQCAdIAtBFGxqIgkgCjYCCCAJIAg2AgRBASEFIAkgDiALQQR0aiIJKAIAQQFqIgw2AgBBASAMIAxBAU0bIRMgCSgCCEEEayESRAAAAAAAAAAAISwCQCAQRQRAA0AgBSATRg0CIAggBUECdCIPaiAJKAIEIA9qQQRrKAIANgIAIAogD2pDAACAvyAPIBJqKAIAsiIwIDCUlSIwOAIAIAVBAWohBSAsIDC7oSEsDAALAAsDQCAFIBNGDQEgCCAFQQJ0Ig9qIAkoAgQgD2pBBGsoAgA2AgAgCiAPakMAAIC/IA8gEmooAgCylSIwOAIAIAVBAWohBSAsIDC7oSEsDAALAAsgCCALNgIAIAogLLY4AgAgC0EBaiELIAogDEECdCIFaiEKIAUgCGohCAwBCwsgBEEEEBoiDyAAIARsQQgQGiIJNgIAQQEgBCAEQQFMGyEIQQEhBQNAIAUgCEYEQEEAIQggBEEAIARBAEobIRIDQCAIIBJHBEAgDyAIQQJ0aigCACEMQQAhBQNAIAAgBUcEQCAMIAVBA3RqQgA3AwAgBUEBaiEFDAELCyAIQQFqIQgMAQsLAkAgBEECRwRAQQAhBQNAIAUgEkYNAiAPIAVBAnRqKAIAIAVBA3RqQoCAgICAgID4PzcDACAFQQFqIQUMAAsACyAJQoCAgICAgID4PzcDACAPKAIEIiEhBSMAQRBrIgwkACAMIAU2AgwgDEEANgIEIAxBADYCACAXKAIAIQogAUECdCERQQAhBSMAQbABayIIJAAgCEHoAGpBAEEoEDYaAkAgAUEATgRAIAFBBBAaIRQgAUEEEBohGCABQQQQGiELIAFBBBAaIRMDQCABIAVGBEBB4PwKKAIAQeT8CigCAHJFBEBB5PwKIAo2AgBB4PwKQeYDNgIAIAFBAk8EQCALIAFBBEHnAxCoAQtBACEFQeT8CkEANgIAQeD8CkEANgIAA0AgASAFRgRAQQAhBSAIIAFBAWsiEEEAIAEgEE8bIgk2AqwBIAggCTYCqAEgCCAJQRAQGiIaNgKkAQJAIAFFDQADQCAFIBBGBEAgEEEBdiEFA0AgBUF/Rg0DIAhBpAFqIAUQuQwgBUEBayEFDAALAAUgCiALIAVBAnRqKAIAIhxBA3RqKwMAISwgCiALIAVBAWoiCUECdGooAgAiHkEDdGorAwAhLSAaIAVBBHRqIgUgHjYCBCAFIBw2AgAgBSAtICyhOQMIIAkhBQwBCwALAAtBASABIAFBAU0bIQlBASEFA0AgBSAJRgRAAkAgAUUNAEEAIQUDQCAFIBBGDQEgGCALIAVBAnRqKAIAQQJ0aiALIAVBAWoiBUECdGooAgA2AgAMAAsACwUgFCALIAVBAnRqIhooAgBBAnRqIBpBBGsoAgA2AgAgBUEBaiEFDAELCyARQQAgEUEAShshJSALQQRqISYgC0EEayEnIAhBgAFqIRpBACEcA0ACQCAcICVGBEAgCCgCpAEhBQwBCyAIKAKkASEFIAgoAqgBIh5FDQAgBSgCACEJIAUoAgQhESAFIAUgHkEEdGpBEGsiIikDADcDACAFKwMIISwgBSAiKQMINwMIIAggHkEBazYCqAEgCEGkAWoiKEEAELkMIAggLDkDiAEgCCARNgKEASAIIAk2AoABIAhB6ABqQRAQJyEFIAgoAmggBUEEdGoiBSAaKQMANwMAIAUgGikDCDcDCCATIBFBAnQiKWooAgAhBQJAIBMgCUECdCIqaigCACIiRQ0AIBMgGCAnICJBAnRqKAIAIh5BAnRqIisoAgBBAnRqKAIAIAVPDQAgCCARNgKUASAIIB42ApABIAggCiARQQN0aisDACAKIB5BA3RqKwMAoTkDmAEgCCAIKQOYATcDYCAIIAgpA5ABNwNYICggCEHYAGoQuAwgKyARNgIAIBQgKWogHjYCAAsCQCAFIBBPDQAgEyAUICYgBUECdGooAgAiBUECdGoiESgCAEECdGooAgAgIk0NACAIIAU2ApQBIAggCTYCkAEgCCAKIAVBA3RqKwMAIAogCUEDdGorAwChOQOYASAIIAgpA5gBNwNQIAggCCkDkAE3A0ggCEGkAWogCEHIAGoQuAwgESAJNgIAIBggKmogBTYCAAsgHEEBaiEcDAELCyAUEBggGBAYIAsQGCATEBggBRAYIAFBBBAaIQtBACEJIAgoAnAiEUEBdCABaiIQQQQQGiETIBBBBBAaIQVBACEKA0AgASAKRgRAA38gCSARRgR/QQAFIAhBQGsgCCkDcDcDACAIIAgpA2g3AzggCCgCaCAIQThqIAkQGUEEdGoiCigCBCEUIAsgCigCAEECdGoiCiAKKAIAQQFqNgIAIAsgFEECdGoiCiAKKAIAQQFqNgIAIAlBAWohCQwBCwshCQNAIAkgEEcEQCAFIAlBAnRqQYCAgPwDNgIAIAlBAWohCQwBCwsgAUEUEBohCkEAIQkCQANAIAEgCUYEQAJAIAsQGANAIAgoAnAiBQRAIAggCCkDcDcDMCAIIAgpA2g3AyggCCgCaCAIQShqIAVBAWsQGUEEdGoiCSgCBCEFIAkoAgAhCyAIIAgpA3A3AyAgCCAIKQNoNwMYIAhBGGogCCgCcEEBaxAZIQkCQAJAAkAgCCgCeCITDgICAAELQb6ABEHCAEEBQajzCCgCABA7GhA8AAsgCCAIKAJoIAlBBHRqIgkpAwg3AxAgCCAJKQMANwMIIAhBCGogExEBAAsgCEHoAGogGkEQEMcBIAtBAEgNAiAFQQBIDQUgCiALQRRsaiITKAIEIREgEygCACEQQQAhCQNAIAkgEEcEQCAJQQJ0IRQgCUEBaiEJIAUgESAUaigCAEcNAQwDCwsgEyAQQQFqNgIAIBEgEEECdGogBTYCACAKIAVBFGxqIgUgBSgCACIJQQFqNgIAIAUoAgQgCUECdGogCzYCACAKKAIIRQ0BIBMoAggiCSAJKgIAQwAAgL+SOAIAIAUoAggiBSAFKgIAQwAAgL+SOAIADAELCyAMIAo2AgggCEHoAGoiBUEQEDMgBRA4IAhBsAFqJAAMDAsFIAogCUEUbGoiECAFNgIIIBBBATYCACAQIBM2AgQgEyAJNgIAIAVBADYCACATIAsgCUECdGooAgBBAnQiEGohEyAFIBBqIQUgCUEBaiEJDAELC0HLyQFBxrcBQaUCQcX5ABAAAAtBtckBQca3AUGmAkHF+QAQAAAFIAsgCkECdGpBATYCACAKQQFqIQoMAQsACwAFIBMgCyAFQQJ0aigCAEECdGogBTYCACAFQQFqIQUMAQsACwALBSALIAVBAnRqIAU2AgAgBUEBaiEFDAELC0GrrANBn/sAQRxB8BsQAAALQdiWA0HGtwFBsQJB3/kAEAAACyAMKAIIIBcgASAAIAxBBGoQgQ0gDCgCBCETIAAgAGxBCBAaIQkgDCAAQQQQGiILNgIAQQAhBSAAQQAgAEEAShshCiAAQQN0IQgDQCAFIApGBEBBACEIIABBACAAQQBKGyEQIAFBACABQQBKGyERA0AgCCAKRwRAIAsgCEECdCIFaiEUIAUgF2ohGEEAIQkDQEQAAAAAAAAAACEsQQAhBSAJIBBHBEADQCAFIBFHBEAgGCgCACAFQQN0aisDACATIAVBAnRqKAIAIAlBAnRqKgIAu6IgLKAhLCAFQQFqIQUMAQsLIBQoAgAgCUEDdGogLDkDACAJQQFqIQkMAQsLIAhBAWohCAwBCwsFIAsgBUECdGogCTYCACAFQQFqIQUgCCAJaiEJDAELCyAMKAIEKAIAEBggDCgCBBAYIAwoAgAgAEEBIAxBDGoQgw0gDCgCACgCABAYIAwoAgAQGCAMQRBqJAANAEEAIQUDQCAAIAVHBEAgISAFQQN0akIANwMAIAVBAWohBQwBCwsgIUKAgICAgICA+D83AwgLQQAhBQNAIAUgEkcEQCAXIAEgACAPIAVBAnQiCWooAgAgAiAJaigCABD9DCAFQQFqIQUMAQsLIA1BADYCpAIgDUEANgKoAiAdIBcgASAAIA1BqAJqEIENIA0oAqgCIQogACAAbEEEEBohBSANIABBBBAaIgw2AqQCQQAhCCAAQQAgAEEAShshCwNAIAggC0YEQAJAQQAhCSAAQQAgAEEAShshEyABQQAgAUEAShshEANAIAkgC0YNASAMIAlBAnQiBWohESAFIBdqIRRBACEFA0BEAAAAAAAAAAAhLEEAIQggBSATRgRAIAlBAWohCQwCBQNAIAggEEcEQCAUKAIAIAhBA3RqKwMAIAogCEECdGooAgAgBUECdGoqAgC7oiAsoCEsIAhBAWohCAwBCwsgESgCACAFQQJ0aiAstjgCACAFQQFqIQUMAQsACwALAAsFIAwgCEECdGogBTYCACAIQQFqIQggBSAAQQJ0aiEFDAELCyANKAKoAigCABAYIA0oAqgCEBggAUEIEBohDCAAQQgQGiELIAIgDiAEIAEgIxC3DCEtQQAhBQNAAkBBACEIIB9BMUsgBXIiFEEBcQ0AA0AgCCASRwRAIAIgCEECdCIYaiETQQAhCgNAIAEgCkcEQCAMIApBA3QiGmoiCUIANwMAIA4gCkEEdGooAghBBGshHCAdIApBFGxqIhAoAgghHiAQKAIEISFBASEFRAAAAAAAAAAAISwDQCAQKAIAIAVNBEAgCSAsIBMoAgAgGmorAwCiIAkrAwCgOQMAIApBAWohCgwDBSACIAQgCiAhIAVBAnQiEWooAgAiIhDvDCIuRKDC6/5LSLQ5ZARAIAkgESAeaioCAIwgESAcaigCALKUuyAuoyIuIBMoAgAgIkEDdGorAwCiIAkrAwCgOQMAICwgLqEhLAsgBUEBaiEFDAELAAsACwsgFyAAIAEgDCALEIINIA0oAqQCIA8gGGooAgAiBSALIABE/Knx0k1iUD8gAEEAEPkMDQIgFyABIAAgBSATKAIAEP0MIAhBAWohCAwBCwtBACEFIB9BAXFFBEAgAiAOIAQgASAjELcMIiwgLaGZICxEu73X2d982z2go0Gw2AorAwBjIQUgLCEtCyAfQQFqIR8MAQsLIAsQGCAMEBggBkECRgRAIBYgASAkENsHC0EAIQUDQCABIAVHBEAgDiAFQQR0aiIALQAMQQFGBEAgACgCBBAYIAAoAggQGAsgBUEBaiEFDAELCyAOEBggHSgCBBAYIB0oAggQGCAdEBggFRAYIBkQGCAPKAIAEBggDxAYIA0oAqQCIgAEQCAAKAIAEBggDSgCpAIQGAsgFygCABAYIBcQGEEAIQ8gFEEBcUUEQEF/IR9BACEbQQAhDkEAIRZBACETQQAhF0EAIQkMCgsDQCAPIBJGBEBBAQwKBSACIA9BAnRqIQBEAAAAAAAA8D8hLEEAIQVBACEMA0AgASAMRwRAIAAoAgAgDEEDdGorAwCZIi0gLCAsIC1jGyEsIAxBAWohDAwBCwsDQCABIAVHBEAgACgCACAFQQN0aiIGIAYrAwAgLKM5AwAgBUEBaiEFDAELC0EAIQUDQCABIAVHBEAQ1QEhLCAAKAIAIAVBA3RqIgYgLEQAAAAAAADgv6BEje21oPfGsD6iIAYrAwCgOQMAIAVBAWohBQwBCwsgASAAKAIAEM8CIA9BAWohDwwBCwALAAUgDyAFQQJ0aiAJIAAgBWxBA3RqNgIAIAVBAWohBQwBCwALAAtBACEFQQAhCiAMQSdMBEBBASEKIAFBBBAaIR0gAUEEEBohCyABIQwLIA4gCUEEdGoiESALNgIIIBEgHTYCBCARIAo6AAwgEUEoNgIAA38gBUEoRgR/IAxBKGshDCALQaABaiELIB1BoAFqIR1BKAUgHSAFQQJ0IgpqIAogGWooAgA2AgAgCiALaiAKIA9qKAIAIBRqKAIANgIAIAVBAWohBQwBCwsLIAlBAWohCSATaiETDAALAAUgEiAFQQJ0IghqIAggEGooAgAiCDYCACAIIAwgCCAMSiIIGyEMIAUgCSAIGyEJIAVBAWohBQwBCwALAAsgASAEIAIgAxDJB0ULIRpBACEfQYzYCi0AAARAIA0QjAE5A4ACQajzCCgCAEHktQEgDUGAAmoQMgsgB0UgAUEBRnINAUEAIQpBjNgKLQAABEAgDRCMATkD8AFBqPMIKAIAIgBBt8cEIA1B8AFqEDJB1+IAQRpBASAAEDsaEK8BCyAEQQAgBEEAShshFSABQQAgAUEAShshEiAEQQQQGiEgIAEgBGwiF0EEEBohDwNAIAogFUcEQCAgIApBAnQiAGogDyABIApsQQJ0aiIGNgIAIAAgAmohAEEAIQUDQCAFIBJHBEAgBiAFQQJ0aiAAKAIAIAVBA3RqKwMAtjgCACAFQQFqIQUMAQsLIApBAWohCgwBCwsCQCAjQQFrQQJJBEAgAUEBaiABbEECbSERIAGyIAFBAWsiBrKUICNBAkYEQCARIBsQvAQLIBEgGxDjB0EAIQogBkEAIAZBAEobIRkgAUEQEBohDiABIQtBACEFQQAhCQNAIAkgGUYEQAJAIAEhDEEAIQUDQCAFIBJGDQEgGyAKQQJ0aiAOIAVBBHRqIgApAwAgACkDCBCrBTgCACAKIAxqIQogBUEBaiEFIAxBAWshDAwACwALBSAOIAlBBHRqIQxBASEIIAVBASALIAtBAUwbakEBayEWQgAhMUIAITIDQCAFQQFqIQAgBSAWRwRAIA1B4AFqIBsgAEECdGoqAgAQrAUgDUHQAWogMSAyIA0pA+ABIjEgDSkD6AEiMhC0ASANQcABaiAMIAhBBHRqIgUpAwAgBSkDCCAxIDIQ+AIgBSANKQPAATcDACAFIA0pA8gBNwMIIAhBAWohCCANKQPYASEyIA0pA9ABITEgACEFDAELCyANQbABaiAMKQMAIAwpAwggMSAyEPgCIAwgDSkDsAE3AwAgDCANKQO4ATcDCCALQQFrIQsgCUEBaiEJIAAhBQwBCwsgBEEEEBoiFiAXQQQQGiIANgIAQQEgBCAEQQFMGyEEQQEhBQNAIAQgBUcEQCAWIAVBAnRqIAAgASAFbEECdGo2AgAgBUEBaiEFDAELC0Go8wgoAgAhECABQQQQGiETIAFBBBAaIRcgEUEEEBohCUGM2AotAAAEQCANEIwBOQOgASAQQbfHBCANQaABahAyQfXIA0EPQQEgEBA7GhCvAQsgDkEQaiEcIAFBBHQhHkMAAAA/lLshLkT////////vfyEsICNBAkchFEEAIQADQCAAQQFxIAcgH0xyDQIgDkEAIB4QNiEYIBRFBEAgESAbIAkQ4gcLICwhLUEAIR0gBiEAQQAhCkEAIQQDQCAEIBlGBEAgASEIQQAhDANAQQAhBSAMIBJGBEBBACEMA0AgDCAVRgRAAkBEAAAAAAAAAAAhLANAIAUgFUYNASAsIAEgICAFQQJ0IgBqKAIAIAAgFmooAgAQzgKgISwgBUEBaiEFDAALAAsFIAkgASAgIAxBAnQiAGooAgAgACAWaigCABCBAyAMQQFqIQwMAQsLICwgLKAgLqAhLEEAIQUDQCAFIBVHBEAgGyABICAgBUECdGoiACgCACATEIEDIAVBAWohBSAsIAEgACgCACATEM4CoSEsDAELC0EAIQpBsNgKKwMAIi8gLSAsoZkgLaNkICwgL2NyIQACQANAIAogFUcEQCAgIApBAnQiBGoiCCgCACEFAkAgGkUEQCABIAUgExD7DEEAIQUgGyATIAQgFmooAgAgASABELsEQQBIDQQDQCAFIBJGDQIgAyAFQQJ0IgRqKAIAKAIQLQCHAUEBTQRAIAgoAgAgBGogBCATaioCADgCAAsgBUEBaiEFDAALAAsgGyAFIAQgFmooAgAgASABELsEQQBIDQMLIApBAWohCgwBCwsCQCAfQQVwDQBBjNgKLQAARQ0AIA0gLDkDICAQQf/GAyANQSBqEDIgH0EFakEycA0AQQogEBCpARoLIB9BAWohHwwFC0F/IR8MBwUgCSAdQQJ0aiAYIAxBBHRqIgApAwAgACkDCBCrBTgCACAIIB1qIR0gDEEBaiEMIAhBAWshCAwBCwALAAUgAEEAIABBAEobIQggASAEQX9zaiIMQwAAAAAgFxDzA0EAIQsDQCALIBVHBEAgICALQQJ0aiEhQQAhBQNAIAAgBUcEQCAXIAVBAnQiImoiJCAhKAIAIARBAnRqIiUqAgAgIiAlaioCBJMiMCAwlCAkKgIAkjgCACAFQQFqIQUMAQsLIAtBAWohCwwBCwsgDCAXEOEHQQAhBQNAIAUgCEcEQCAXIAVBAnRqIgwqAgAiMEP//39/YCAwQwAAAABdcgRAIAxBADYCAAsgBUEBaiEFDAELCyAKQQFqIQogHCAEQQR0IiFqIQtCACExQQAhBUIAITICQCAURQRAA0AgBSAIRgRADAMFIAkgCkECdGoiDCAXIAVBAnRqKgIAIAwqAgCUIjA4AgAgDUHgAGogMBCsBSANQdAAaiAxIDIgDSkDYCIxIA0pA2giMhC0ASANQUBrIAsgBUEEdGoiDCkDACAMKQMIIDEgMhD4AiAMIA0pA0A3AwAgDCANKQNINwMIIApBAWohCiAFQQFqIQUgDSkDWCEyIA0pA1AhMQwBCwALAAsDQCAFIAhGDQEgCSAKQQJ0aiAXIAVBAnRqKgIAIjA4AgAgDUGQAWogMBCsBSANQYABaiAxIDIgDSkDkAEiMSANKQOYASIyELQBIA1B8ABqIAsgBUEEdGoiDCkDACAMKQMIIDEgMhD4AiAMIA0pA3A3AwAgDCANKQN4NwMIIApBAWohCiAFQQFqIQUgDSkDiAEhMiANKQOAASExDAALAAsgDUEwaiAYICFqIgUpAwAgBSkDCCAxIDIQ+AIgBSANKQMwNwMAIAUgDSkDODcDCCAAQQFrIQAgBEEBaiEEDAELAAsACwALQffsAkHFuAFBqgdBwO8AEAAAC0EAIQpBjNgKLQAABEBBASABIAFBAUwbQQFrIQZEAAAAAAAAAAAhLUEAIQQDQCAGIApHBEBBASABIAFBAUwbIQNBASEIIAQhAANAIAMgCEcEQCAAQQFqIQBEAAAAAAAAAAAhLEEAIQUDQCAFIBVHBEAgLCAgIAVBAnRqKAIAIApBAnRqIgcqAgAgByAIQQJ0aioCAJMiMCAwlLugISwgBUEBaiEFDAELC0QAAAAAAADwPyAbIABBAnRqKgIAuyIunyAuICNBAkYboyAsn6EiLCAsoiAuoiAtoCEtIAhBAWohCAwBCwsgAUEBayEBIApBAWohCiADIARqIQQMAQsLIA0QjAE5AxAgDSAfNgIIIA0gLTkDACAQQb/GBCANEDILQQAhCgNAIAogFUYNASACIApBAnQiAGohASAAICBqIQBBACEFA0AgBSASRwRAIAEoAgAgBUEDdGogACgCACAFQQJ0aioCALs5AwAgBUEBaiEFDAELCyAKQQFqIQoMAAsACyAPEBggIBAYIBsQGCAWBEAgFigCABAYIBYQGAsgExAYIBcQGCAOEBgMAQsgGyEJCyAJEBgLIA1BsAJqJAAgHwtTAQF/IAAgATYCECAAQQRBACACGyIDIAAoAgAiAkF7cXI2AgAgAkECcQRAIABBUEEwIAJBA3FBA0YbaiIAIAE2AhAgACAAKAIAQXtxIANyNgIACwuQBAELfyABQQAgAUEAShshCCAAKAIIIQkDQCACIAhGRQRAIAAgAkEUbGooAgAgA2ohAyACQQFqIQIMAQsLIANBBBAaIQQgAUEEEBohBkEAIQMCfyAAKAIIRQRAA0AgAyAIRwRAIAAgA0EUbGoiBSAENgIIIAAgAyAGEN4HIAUoAgAiAkECayEKIAJBAWshC0EBIQIDQCACIAtLBEAgACADIAYQ3QcgA0EBaiEDIAQgBSgCAEECdGohBAwDBSAEIAJBAnQiB2ogCiAAIAUoAgQgB2ooAgAiB0EUbGooAgBqIAAgByAGEN8HQQF0a7M4AgAgAkEBaiECDAELAAsACwsgACABEMkFDAELA0AgAyAIRwRAIAAgAyAGEN4HIAAgA0EUbGoiBSgCACICQQJrIQsgAkEBayEHQQEhAgNAIAIgB0sEQCAAIAMgBhDdByAFIAQ2AgggA0EBaiEDIAQgBSgCAEECdGohBAwDBSAEIAJBAnQiCmogCyAAIAUoAgQgCmooAgAiDEEUbGooAgBqIAAgDCAGEN8HQQF0a7MgBSgCCCAKaioCABC8BTgCACACQQFqIQIMAQsACwALCyAAIAEQxgcLIAYQGCAAKAIIEBhBACECIABBADYCCAJAIAlFDQADQCACIAhGDQEgACACQRRsaiIDIAk2AgggAkEBaiECIAkgAygCAEECdGohCQwACwALC8kDAgx/AX0gAUEAIAFBAEobIQ0gAUEBaiABbEECbUEEEBohCyABQQQQGiEEIAEhCQNAIAogDUcEQCAKIQZBACECIwBBEGsiBSQAIAVBADYCDCABQQAgAUEAShshAwNAIAIgA0YEQCAEIAZBAnRqQQA2AgBBASAAIAZBFGxqIgwoAgAiAyADQQFNGyEHQQEhAgNAIAIgB0YEQCAFIAYgBCABEPYMA0ACQCAFIAVBDGogBBD1DEUNACAEIAUoAgwiA0ECdGoqAgAiDkP//39/Ww0AIAAgA0EUbGohB0EBIQIDQCACIAcoAgBPDQIgBSACQQJ0IgMgBygCBGooAgAgDiAHKAIIIANqKgIAkiAEEPQMIAJBAWohAgwACwALCyAFEOAHIAVBEGokAAUgBCACQQJ0IgMgDCgCBGooAgBBAnRqIAwoAgggA2oqAgA4AgAgAkEBaiECDAELCwUgBCACQQJ0akH////7BzYCACACQQFqIQIMAQsLIAggCWohAwNAIAMgCEcEQCALIAhBAnRqIAQgBkECdGoqAgA4AgAgBkEBaiEGIAhBAWohCAwBCwsgCUEBayEJIApBAWohCiADIQgMAQsLIAQQGCALC/8BAwt/AXwCfSMAQRBrIgQkAAJAIAAoAghFBEAMAQsgAUEAIAFBAEobIQogACABEMYHIQUDQCACIApHBEBBASEDQQEgACACQRRsaiIJKAIAIgYgBkEBTRshBiAFIAEgAmwgAiAIaiIIa0ECdGohCwNAIAMgBkYEQCACQQFqIQIMAwUgAiADQQJ0IgwgCSgCBGooAgAiB0wEQCALIAdBAnRqIgcqAgAhDiAHIAkoAgggDGoqAgAiDzgCACANIA4gD5OLu6AhDQsgA0EBaiEDDAELAAsACwtBjNgKLQAARQ0AIAQgDTkDAEGo8wgoAgBBq6kEIAQQMgsgBEEQaiQAIAUL3wQDC38BfAF9IAFBACABQQBKGyEFIAFBAWogAWxBAm1BBBAaIQogASABRAAAAAAAAAAAEIcDIQYgASABRAAAAAAAAAAAEIcDIQsCQCAAKAIIRQRAA0AgAiAFRg0CQQEhA0EBIAAgAkEUbGoiBygCACIEIARBAU0bIQQgBiACQQJ0aiEIA0AgAyAERkUEQCAGIAcoAgQgA0ECdGooAgAiCUECdGooAgAgAkEDdGpCgICAgICAgPi/fzcDACAIKAIAIAlBA3RqQoCAgICAgID4v383AwAgA0EBaiEDDAELCyACQQFqIQIMAAsACwNAIAIgBUYNAUEBIQNBASAAIAJBFGxqIgcoAgAiBCAEQQFNGyEEIAYgAkECdGohCANAIAMgBEYEQCACQQFqIQIMAgUgBiADQQJ0IgkgBygCBGooAgAiDEECdGooAgAgAkEDdGpEAAAAAAAA8L8gBygCCCAJaioCALujIg05AwAgCCgCACAMQQN0aiANOQMAIANBAWohAwwBCwALAAsACwJAIAEgBiALELsMBEBBACEDIAFBACABQQBKGyEHQQAhAgNAIAIgB0YNAiABIANqIQAgCyACQQJ0aiEEIAIhBQNAIAAgA0ZFBEAgCiADQQJ0aiACIAVHBH0gBCgCACIIIAJBA3RqKwMAIAVBA3QiCSALIAVBAnRqKAIAaisDAKAgCCAJaisDACINIA2gobYFQwAAAAALOAIAIAVBAWohBSADQQFqIQMMAQsLIAFBAWshASACQQFqIQIgACEDDAALAAsgChAYQQAhCgsgBhCGAyALEIYDIAoL0gICCX8BfCAAQQAgAEEAShshCyACKAIEIQYgAigCACEHIAFBA0ghCQNAIAUgC0YEQAJAQQAhBCABQQAgAUEAShshAQNAIAEgBEYNASAAIAIgBEECdGooAgAQzwIgBEEBaiEEDAALAAsFAkACQCADIAVBAnRqKAIAKAIQIgQtAIcBIgwEQCAHIAQoApQBIgQrAwA5AwAgBiAEKwMIOQMAIAkNASAEQRBqIQhBAiEEA0AgASAERg0CIAIgBEECdGooAgAgBUEDdGogCCsDADkDACAEQQFqIQQgCEEIaiEIDAALAAsgBxDVATkDACAGENUBOQMAQQIhBCAJDQEDQCABIARGDQIQ1QEhDSACIARBAnRqKAIAIAVBA3RqIA05AwAgBEEBaiEEDAALAAtBASAKIAxBAUcbIQoLIAVBAWohBSAHQQhqIQcgBkEIaiEGDAELCyAKCzIAIAAEQCAAKAIEQSFPBEAgACgCABAYCyAAQgA3AgAPC0GR1AFB7PoAQfMAQeghEAAACy8AIAAgATYCBCAAQQA2AgAgAUEhTwRAIAAgAUEDdiABQQdxQQBHakEBEBo2AgALC98JAgx/CXwCQCAAKAJIIABHDQAgACgCECIBKAIIKAJURQ0AAn8CQCABKwMQRAAAAAAAAAAAYg0AIAErAxhEAAAAAAAAAABiDQBBAAwBCyAAEMAMIAAoAhAhAUEBCyEDIAEoAnRBAXEiBARAIAErACghDiABIAErACA5AyggASAOOQMgCwJAAnwCQAJAAkAgASgCCCICKAJUQQFrDgUCAAUFAQULIAIrA0AiDUQAAAAAAAAAAGUNBCANIAErAyCjIg1EAAAAAAAA8D9jIAIrA0ggASsDKKMiDkQAAAAAAADwP2NyRQ0DIA0gDmMEQCAOIA2jIQ5EAAAAAAAA8D8hDQwECyANIA6jDAILIAIrA0AiDkQAAAAAAAAAAGUNAyAOIAErAyCjIg5EAAAAAAAA8D9kRQ0DIAIrA0ggASsDKKMiDUQAAAAAAADwP2RFDQMgDiANECkiDiENDAILIAErAyggASsDIKMiDiACKwMQIg1jBEAgDSAOoyEORAAAAAAAAPA/IQ0MAgsgDiANowshDUQAAAAAAADwPyEOCyAOIA0gBBshDyANIA4gBBshDQJAQZjYCigCAEECSA0AIA1EAAAAAAAA8L+gIRQgD0QAAAAAAADwv6AhFSAAEBwhBgNAIAZFDQEgACAGEC0hAwNAAkAgAwRAIAMoAhAiBygCCCIBRQ0BIAEoAgQiCEEBayEJQQAhBCAUIANBMEEAIAMoAgBBA3EiAkEDRxtqKAIoKAIQKAKUASIFKwMIokQAAAAAAABSQKIhECAVIAUrAwCiRAAAAAAAAFJAoiERIBQgA0FQQQAgAkECRxtqKAIoKAIQKAKUASICKwMIokQAAAAAAABSQKIhEiAVIAIrAwCiRAAAAAAAAFJAoiETIAEoAgAhAgNAIAQgCEYEQAJAIAcoAmAiAUUNACABLQBRQQFHDQAgASAPIAErAziiOQM4IAEgDSABKwNAojkDQAsCQCAHKAJkIgFFDQAgAS0AUUEBRw0AIAEgEyABKwM4oDkDOCABIBIgASsDQKA5A0ALIAcoAmgiAUUNAyABLQBRQQFHDQMgASARIAErAzigOQM4IAEgECABKwNAoDkDQAwDCyACKAIEIgpBAWshCyACKAIAIQFBACEFIAQgCUchDANAIAUgCkYEQCACKAIIBEAgAiARIAIrAxCgOQMQIAIgECACKwMYoDkDGAsgAigCDARAIAIgEyACKwMgoDkDICACIBIgAisDKKA5AygLIARBAWohBCACQTBqIQIMAgUgAQJ8IAQgBXJFBEAgASARIAErAwCgOQMAIBAgASsDCKAMAQsgASsDACEOIAwgBSALR3JFBEAgASATIA6gOQMAIBIgASsDCKAMAQsgASAPIA6iOQMAIA0gASsDCKILOQMIIAVBAWohBSABQRBqIQEMAQsACwALAAsgACAGEB0hBgwCCyAAIAMQMCEDDAALAAsACyAAEBwhAQNAIAEEQCABKAIQKAKUASICIA8gAisDAKI5AwAgAiANIAIrAwiiOQMIIAAgARAdIQEMAQsLIAAgDyANEL8MQQEhAwsgABAcIQEDQCABBEAgASgCECICIAIoApQBIgQrAwBEAAAAAAAAUkCiOQMQIAIgBCsDCEQAAAAAAABSQKI5AxggACABEB0hAQwBCwsgAwvsAgEEfyMAQYABayIHJAAgAkEAIAJBAEobIQICQANAIAIgCEYEQCAEIAMgAyAESBshBANAIAMgBEYiAg0DIAYgA0ECdGooAgAhCCAHIAApAwg3AzggByAAKQMANwMwIAcgASkDCDcDKCAHIAEpAwA3AyAgByAFIANBBHRqIgkpAwg3AxggByAJKQMANwMQIAcgBSAIQQR0aiIIKQMINwMIIAcgCCkDADcDACADQQFqIQMgB0EwaiAHQSBqIAdBEGogBxC2BEUNAAsMAgsgBiAIQQJ0aigCACEJIAcgACkDCDcDeCAHIAApAwA3A3AgByABKQMINwNoIAcgASkDADcDYCAHIAUgCEEEdGoiCikDCDcDWCAHIAopAwA3A1AgByAFIAlBBHRqIgkpAwg3A0ggByAJKQMANwNAIAhBAWohCCAHQfAAaiAHQeAAaiAHQdAAaiAHQUBrELYERQ0AC0EAIQILIAdBgAFqJAAgAgsRACAAIAEgACgCTCgCKBDODAu5EAIafwx8IwBBMGsiAiQAQaj8CigCACEFQfT7CigCACEBA0AgASAPRgRAA0AgAUEBayAKTQRAQYzYCi0AAEEBSwRAIAIgEDYCJCACIAA2AiBBqPMIKAIAQZXbAyACQSBqEB8aCyACQTBqJAAgEA8LQaj8CigCACAKQeAAbGoiFEEoaiEFIApBAWoiDyEKA0AgASAKTQRAIA8hCgwCBSACIBQpAxA3AxggAiAUKQMINwMQIAJBqPwKKAIAIApB4ABsaiIEKQMQNwMIIAIgBCkDCDcDAEEAIQNBACEMQQAhDSMAQdAEayIBJAAgASACKQMYNwPIAyABIAIpAxA3A8ADIAEgBSkDCDcDuAMgASAFKQMANwOwAyABQYAEaiABQcADaiABQbADahDSBSABIAIpAxg3A6gDIAEgAikDEDcDoAMgASAFKQMYNwOYAyABIAUpAxA3A5ADIAFB8ANqIAFBoANqIAFBkANqENIFIAEgAikDCDcDiAMgASACKQMANwOAAyABIAQpAzA3A/gCIAEgBCkDKDcD8AIgAUHgA2ogAUGAA2ogAUHwAmoQ0gUgASACKQMINwPoAiABIAIpAwA3A+ACIAEgBCkDQDcD2AIgASAEKQM4NwPQAiABQdADaiABQeACaiABQdACahDSBQJAIAErA4AEIAErA9ADZUUNACABKwPgAyABKwPwA2VFDQAgASsDiAQgASsD2ANlRQ0AIAErA+gDIAErA/gDZUUNAEEBIQMgBSgCKCIGQQFxBEAgBC0AUEEBcQ0BCwJAIAZBAnFFDQAgBC0AUEECcUUNACACKwMQIAIrAwChIhsgG6IgAisDGCACKwMIoSIbIBuioCAFKwMQIAUrAwChIAQrAzigIAQrAyihIhsgG6JEAAAAAAAA0D+iZSEDDAELIAUoAiAhAyAFKAIkIAEgAikDGDcDyAIgASACKQMQNwPAAiADIAFBwAJqEOUMIQYgBCgCSCEDIAQoAkwgASACKQMINwO4AiABIAIpAwA3A7ACIAMgAUGwAmoQ5QwhByAEKAJIIhFBAXQhFyAFKAIgIg5BAXQhGCARQQFrIRkgDkEBayEaQQAhA0EAIQgCQANAIAEgBiAIQQR0aiIJKQMINwOoAiABIAkpAwA3A6ACIAEgBiAIIBpqIA5vQQR0aiISKQMINwOYAiABIBIpAwA3A5ACIAFBwARqIAFBoAJqIAFBkAJqEOkMIAEgByAMQQR0aiILKQMINwOIAiABIAspAwA3A4ACIAEgByAMIBlqIBFvQQR0aiITKQMINwP4ASABIBMpAwA3A/ABIAFBsARqIAFBgAJqIAFB8AFqEOkMIAFCADcDmAQgAUIANwPoASABIAEpA8gENwPYASABIAEpA7gENwPIASABQgA3A5AEIAFCADcD4AEgASABKQPABDcD0AEgASABKQOwBDcDwAEgASsD6AEgASsD2AEiG6EgASsDwAEgASsD0AEiHKGiIAErA8gBIBuhIAErA+ABIByhoqEhHyABIBIpAwg3A7gBIAEgEikDADcDsAEgASAJKQMINwOoASABIAkpAwA3A6ABIAEgCykDCDcDmAEgASALKQMANwOQASABQbABaiABQaABaiABQZABahDoDCEVIAEgEykDCDcDiAEgASATKQMANwOAASABIAspAwg3A3ggASALKQMANwNwIAEgCSkDCDcDaCABIAkpAwA3A2AgAUGAAWogAUHwAGogAUHgAGoQ6AwhFiABIBIpAwg3A1ggASASKQMANwNQIAEgCSkDCDcDSCAB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AiAEKAIAEQAARQ0AIAIgAxC4ASACIAEgBCgCABEAAEUNACABIAIQuAEgASAAIAQoAgARAABFDQAgACABELgBCws7AQJ/IAAoAgAiAQRAIAEhAANAIAAiASgCBCIADQALIAEPCwNAIAAgACgCCCIBKAIARiABIQANAAsgAAtdAQR/IABBoM8KNgIAQej7CkEANgIAIABBBGoiAkEEaiEEIAIoAgAhAQNAIAEgBEcEQCABKAIQIgMEQCADEKUNGgsgAxAYIAEQrQEhAQwBCwsgAiACKAIEEOwHIAALHwAgAQRAIAAgASgCABDsByAAIAEoAgQQ7AcgARAYCws+AQF/IAFBgICAgARPBEAQwgQAC0H/////AyAAKAIIIAAoAgBrIgBBAXUiAiABIAEgAkkbIABB/P///wdPGwtXAQF/IANBADoAHEHIABCHASIEQQAQ+AcaIAEgBDYCACAAIAQgAygCACADKAIEEN8FQcgAEIcBIgFBABD4BxogAiABNgIAIAAgASADKAIEIAMoAgAQ3wULoQMCCH8CfCMAQRBrIgskACADKwMQIAMoAiArAxAgAysDGKAgAysDCKGiIQ8gAygCLCEMIAMoAighCCAFQQJGIQ0DQCAIIAxGBEACQCADKAI4IQwgAygCNCEIA0AgCCAMRg0BAkAgCCgCACIKKAIEIgcoAiAgAUcgBCAHRnINACAKLQAcQQFxRQ0AIAsgAUEAIAIgAiAHRiINGyICIAcgA0ECIAVBAUYgBnIiBkEBcSIOEO8HIAogCysDACIQOQMQIAogCSANGyEJAkAgAkUNACALKAIIIgdFDQAgDgRAIAohCSAQIAcrAxBjDQELIAchCQsgDyAQoCEPCyAIQQRqIQgMAAsACwUCQCAIKAIAIgooAgAiBygCICABRyAEIAdGcg0AIAotABxBAXFFDQAgCyABQQAgAiACIAdGIg4bIgIgByADQQEgBiANciIGQQFxEO8HIAogCysDACIQmjkDECALKAIIIgcgCiAJIA4bIgkgBxsgCSACGyEJIA8gEKAhDwsgCEEEaiEIDAELCyAAIAk2AgggACAPOQMAIAtBEGokAAupAgIEfwN8IAErAxAgASgCICsDECABKwMYoCABKwMIoaIhCCABKAI4IQcgASgCNCEEA0AgBCAHRgRAAkAgASgCLCEHIAEoAighBANAIAQg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NwO4BiAFIAIpAgA3A7AGIAVBsAZqIAMQGUHIAGxqKAIsQQFrQX1LDQAgAigCACAFIAIpAgg3A/gDIAUgAikCADcD8AMgBUHwA2ogAxAZQcgAbGooAjwgAigCACEAIAUgAikCCDcD6AMgBSACKQIANwPgAyAFQeADaiADEBkhAUEBa0F9TQRAIAIoAgAhBgJ/IAAgAUHIAGxqKAJAQQFGBEAgBSACKQIINwPIASAFIAIpAgA3A8ABIAYgBUHAAWogAxAZQcgAbGooAiwhACACKAIAIAUgAikCCDcDuAEgBSACKQIANwOwASAFQbABaiAEEBlByABsaiAANgIoIAIoAgAgBSACKQIINwOoASAFIAIpAgA3A6ABIAVBoAFqIAMQGUHIAGxqQX82AiwgAigCACAFIAIpAgg3A5gBIAUgAikCADcDkAEgBUGQAWogAxAZQcgAbGooAjwhACACKAIAIAUgAikCCDcDiAEgBSACKQIANwOAASAFQYABaiAEEBlByABsaiAANgIsIAIoAgAhACAFIAIpAgg3A3ggBSACKQIANwNwIAAgBUHwAGogAxAZQcgAbGooAighASAFIAIpAgg3A2ggBSACKQIANwNgIAAgBUHgAGogARAZQcgAbGogAzYCMCACKAIAIQAgBSACKQIINwNYIAUgAikCADcDUCAAIAVB0ABqIAQQGUHIAGxqKAIoIQEgBSACKQIINwNIIAUgAikCADcDQCAAIAVBQGsgARAZQcgAbGogBDYCMCACKAIAIQAgBSACKQIINwM4IAUgAikCADcDMCAAIAVBMGogBBAZQcgAbGpBLGoMAQsgBSACKQIINwOIAyAFIAIpAgA3A4ADIAYgBUGAA2ogBBAZQcgAbGpBfzYCLCACKAIAIAUgAikCCDcD+AIgBSACKQIANwPwAiAFQfACaiADEBlByABsaigCLCEAIAIoAgAgBSACKQIINwPoAiAFIAIpAgA3A+ACIAVB4AJqIAQQGUHIAGxqIAA2AiggAigCACAFIAIpAgg3A9gCIAUgAikCADcD0AIgBUHQAmogAxAZQcgAbGooAighACACKAIAIAUgAikCCDcDyAIgBSACKQIANwPAAiAFQcACaiADEBlByABsaiAANgIsIAIoAgAgBSACKQIINwO4AiAFIAIpAgA3A7ACIAVBsAJqIAMQGUHIAGxqKAI8IQAgAigCACAFIAIpAgg3A6gCIAUgAikCADcDoAIgBUGgAmogAxAZQcgAbGogADYCKCACKAIAIQAgBSACKQIINwOYAiAFIAIpAgA3A5ACIAAgBUGQAmogAxAZQcgAbGooAighASAFIAIpAgg3A4gCIAUgAikCADcDgAIgACAFQYACaiABEBlByABsaiADNgIwIAIoAgAhACAFIAIpAgg3A/gBIAUgAikCADcD8AEgACAFQfABaiADEBlByABsaigCLCEBIAUgAikCCDcD6AEgBSACKQIANwPgASAAIAVB4AFqIAEQGUHIAGxqIAM2AjAgAigCACEAIAUgAikCCDcD2AEgBSACKQIANwPQASAAIAVB0AFqIAQQGUHIAGxqQShqCygCACEBIAUgAikCCDcDKCAFIAIpAgA3AyAgACAFQSBqIAEQGUHIAGxqIAQ2AjAgAigCACAFIAIpAgg3AxggBSACKQIANwMQIAVBEGogAxAZQcgAbGpBADYCPCACKAIAIAUgAikCCDcDCCAFIAIpAgA3AwAgBSAEEBlByABsakEANgI8DAILIAAgAUHIAGxqKAIsIQAgAigCACAFIAIpAgg3A9gDIAUgAikCADcD0AMgBUHQA2ogBBAZQcgAbGogADYCKCACKAIAIAUgAikCCDcDyAMgBSACKQIANwPAAyAFQcADaiADEBlByABsakF/NgIsIAIoAgAgBSACKQIINwO4AyAFIAIpAgA3A7ADIAVBsANqIAQQGUHIAGxqQX82AiwgAigCACEAIAUgAikCCDcDqAMgBSACKQIANwOgAyAAIAVBoANqIAQQGUHIAGxqKAIoIQEgBSACKQIINwOYAyAFIAIpAgA3A5ADIAAgBUGQA2ogARAZQcgAbGogBDYCMAwBCyACKAIAIAUgAikCCDcDqAYgBSACKQIANwOgBiAFQaAGaiADEBlByABsaigCKCEGIAIoAgAhByAFIAIpAgg3A5gGIAUgAikCADcDkAYCQCAHIAVBkAZqIAYQGUHIAGxqKAIwIgdBAWtBfUsNACACKAIAIAUgAikCCDcDiAYgBSACKQIANwOABiAFQYAGaiAGEBlByABsaigCNEEBa0F9Sw0AIAIoAgAhBiAFIAIpAgg3A7gFIAUgAikCADcDsAUCQCAGIAVBsAVqIAcQGUHIAGxqKAIEQQBMDQAgAigCACAF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AEIANwMIAkACQAJAAkAgAkEBaw4DAgEDAAsgACABKQMANwMAIAAgASkDCDcDCA8LIAAgASsDADkDACAAIAErAwiaOQMIDwsgACABKwMAOQMIIAAgASsDCJo5AwAPCyAAIAErAwA5AwggACABKwMIOQMACzcBA38DQCABQQNHBEAgACABQQJ0aiICKAIAIgMEQCADEJkBGiACQQA2AgALIAFBAWohAQwBCwsLsQICCX8CfCMAQRBrIgUkACAAIAI6AEEgASsDCCEMIAAgASsDACINOQMQIAAgDDkDKCAAIAwgACsDCKE5AxggACANIAArAwCgOQMgIAAoAjAiBEEAIARBAEobIQdBDkEPIARBAWsiBhshCEENQQ8gBhshCQNAIAMgB0ZFBEACf0EAIAJFDQAaIAAtAEAEQCAJIANFDQEaQQdBBSADIAZGGwwBCyAIIANFDQAaQQtBCiADIAZGGwshBCADQQJ0IgogACgCOGooAgAgBSABKQMINwMIIAUgASkDADcDACAFIAIgBHEQ4AkgACgCOCAKaigCACEEAkAgAC0AQARAIAEgASsDACAEKwMAoDkDAAwBCyABIAErAwggBCsDCKE5AwgLIANBAWohAwwBCwsgBUEQaiQAC/MCAgV8A38jAEEgayIIJAAgAUEIaisDACEFIAArAwAhBCABKwMAIQYgACABKQMANwMAIAArAwghAyAAIAEpAwg3AwggBSADoSEDIAYgBKEhBAJAIAINACAAKAI0IgFFDQAgASAEIAErAyigOQMoIAEgAyABKwMwoDkDMAsCQCAAKAIwIglFDQAgBCADIAAtAEAbIAm3oyEHQQAhAQNAIAEgCU4NAQJ/IAcgAbiiIgOZRAAAAAAAAOBBYwRAIAOqDAELQYCAgIB4CyEJAn8gByABQQFqIgq4oiIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsgCWshCSAAKAI4IAFBAnRqKAIAIQECfCAALQBABEAgBSEEIAErAwAgCbegDAELIAErAwggCbegIQQgBgshAyAIIAQ5AxggCCAIKQMYNwMIIAggAzkDECAIIAgpAxA3AwAgASAIIAIQ4QkgACgCMCEJIAohAQwACwALIAhBIGokAAuMAwIEfAJ/IwBBIGsiByQAAkAgAigCNCIIBEAgCCsDGCIERAAAAAAAAAAAZCAIKwMgIgNEAAAAAAAAAABkckUNASABQfDkABAmIgEEQCAHIAdBGGo2AgQgByAHQQhqNgIAIAFB2YMBIAcQUSIBQQBKBEAgBysDCEQAAAAAAABSQKIiBSAFoCIFIASgIQQgAUEBRwRAIAcrAxhEAAAAAAAAUkCiIgUgBaAgA6AhAwwECyAFIAOgIQMMAwsgA0QAAAAAAAAgQKAhAyAERAAAAAAAADBAoCEEDAILIANEAAAAAAAAIECgIQMgBEQAAAAAAAAwQKAhBAwBC0EAIQgDQCAIIAIoAjBORQRAIAdBCGogASACKAI4IAhBAnRqKAIAEOIJIAcrAxAhBSAHKwMIIQYCfCACLQBABEAgBiAEoCEEIAMgBRAjDAELIAQgBhAjIQQgBSADoAshAyAIQQFqIQgMAQsLCyAAIAM5AwggACAEOQMAIAIgACkDADcDACACIAApAwg3AwggB0EgaiQAC2gBAn8gAEECIAEgAUEDRhsiAyACEOYJIgFFBEAPCyADQQJ0IgMgACgCTGooAiwiBCABQQIgBCgCABEDABogACgCTCADaigCOCIDIAFBAiADKAIAEQMAGiAAIAEoAhhBABCKARogARAYC0ABAX8CQANAAkACQCAAKAIAEK8CIgFBAWoODwMBAQEBAQEBAQECAgICAgALIAFBIEYNAQsLIAEgACgCABDSCwsLpwICAX8BfAJAAkACQAJAAkACQAJAIAEtAAAiAkHtAGsOBAUGBgEACyACQSJGDQEgAkHjAEYNAyACQekARw0FIAEtAAFB7gBHDQUgAS0AAg0FIABEAAAAAAAAUkCiEDEPCwJAIAEtAAFB+ABHDQAgAS0AAg0AIABEAAAAAAAAUkCiRAAAAAAAAFhAoxAxDwsCQCABLQABQeMARw0AIAEtAAINACAARAAAAAAAAFJAokQAAAAAAAAYQKMQMQ8LIAEtAAFB9ABHDQQgAS0AAkUNAQwECyABLQABDQMLIAAQMQ8LIAEtAAFB7QBHDQEgAS0AAg0BIABEfFxJYrFYPECiEDEPCyABLQABQe0ARw0AIAEtAAINACAARC99B7VarQZAohAxIQMLIAMLRwEBfyMAQSBrIgMkACAAKAJMQQIgASABQQNGG0ECdGooAjgiAAR/IAMgAjcDECAAIANBBCAAKAIAEQMABUEACyADQSBqJAALRQACQCAAECgEQCAAECVBD0YNAQsgAEEAEJYDCwJAIAAQKARAIABBADoADwwBCyAAQQA2AgQLIAAQKAR/IAAFIAAoAgALC5wCAQN/IwBBIGsiAiQAAkACQCAABEAgACgCCCIBRQ0BIAEtAABFDQICfwJAIAAoAhQiA0UEQCABEPwEIgFFBEAgAiAAKAIINgIAQfawBCACECpBAAwDCyAAIAFB074BEKEEIgM2AhQgA0UEQEGQhgsoAgAQswUhACACIAE2AhQgAiAANgIQQYb2AyACQRBqECpBAAwDC0GY3AooAgAiAUEySA0BIABBAToAEUEBDAILIAMQ5wNBASAAKAIUDQEaQc2FAUHcvAFB0AVBjSkQAAALQZjcCiABQQFqNgIAQQELIAJBIGokAA8LQdomQdy8AUG7BUGNKRAAAAtBz5gBQdy8AUG8BUGNKRAAAAtB28cBQdy8AUG9BUGNKRAAAAtXAQJ/AkAgAARAIAAtAABFDQFBlNwKKAIAIgEEfyABIABBgAQgASgCABEDAAVBAAsPC0GjmQFB3LwBQawFQbKkARAAAAtB38cBQdy8AUGtBUGypAEQAAALmQIBAn8gASgCRCEBA0AgAS0AACICBEACQAJAIAFB/9gBQQUQgAJFDQAgAUHE0AFBBxCAAkUNACABQefbAUEFEIACRQ0AIAFBwc8BQQkQgAINAQsCfwJAA0ACQAJAAkAgAkH/AXEiAkEKaw4EBAEBAgALIAJFDQMLIAEtAAEhAiABQQFqIQEMAQsLQQEgAS0AAUEKRw0BGiABQQJqIQEMBAsgAkEARwshAiABIAJqIQEMAgsCfwJAA0ACQAJAAkAgAkH/AXEiA0EKaw4EBAEBAgALIANFDQMLIAAgAsAQZSABLQABIQIgAUEBaiEBDAELC0ECQQEgAS0AAUEKRhsMAQsgA0EARwshAiAAQQoQZSABIAJqIQEMAQsLC8gCAgJ/AXwjAEGAAmsiAyQAIAIrAxAhBSADIAApAwg3A3ggAyAAKQMANwNwIAMgASkDCDcDaCADIAEpAwA3A2AgA0HgAWogA0HwAGogA0HgAGoQzAMCQCAFIAMrA+ABZkUNACADIAApAwg3A1ggAyAAKQMANwNQIAMgASkDCDcDSCADIAEpAwA3A0AgA0HAAWogA0HQAGogA0FAaxDMAyADKwPQASACKwMAZkUNACACKwMYIAMgACkDCDcDOCADIAApAwA3AzAgAyABKQMINwMoIAMgASkDADcDICADQaABaiADQTBqIANBIGoQzAMgAysDqAFmRQ0AIAMgACkDCDcDGCADIAApAwA3AxAgAyABKQMINwMIIAMgASkDADcDACADQYABaiADQRBqIAMQzAMgAysDmAEgAisDCGYhBAsgA0GAAmokACAEC2oCAnwBfwJAIAErAxAgACsAOCICIAArAxhEAAAAAAAA4D+iIgOhZkUNACABKwMAIAMgAqBlRQ0AIAErAxggACsAQCICIAArAyBEAAAAAAAA4D+iIgOhZkUNACABKwMIIAMgAqBlIQQLIAQL+gIBBn8jAEEQayIGJAACQAJAAkAgACgCACIDLQAAQSNGBEAgAy0AASICQd8BcUHYAEYEQEECIQEDQCABQQhGDQMCQCABIANqLQAAIgJBwQBrQf8BcUEGSQRAQUkhBQwBCyACQeEAa0H/AXFBBkkEQEGpfyEFDAELQVAhBSACQTBrQf8BcUEJSw0FCyACIAVqIgIgBEEEdGohBCABQQFqIQEMAAsAC0EBIQEDQCABQQhGDQIgASADai0AACICQTBrQf8BcUEJSw0DIAFBAWohASAEQQpsIAJqQTBrIQQMAAsACyAGIAM2AggDQCAGIAE2AgwgAUEIRg0DIAEgA2oiBS0AACICRQRAIAIhBAwECyACQTtGBEAgBkEIakHg4QdB/AFBCEE3EO0DIgJFDQQgBUEBaiEDIAIoAgQhBAwEBSABQQFqIQEMAQsACwALQQghAQsgAkE7RwRAQQAhBAwBCyABIANqQQFqIQMLIAAgAzYCACAGQRBqJAAgBAtjAQN/IwBBEGsiAiQAIAJBADoADyACIAA6AA4gAkEOahCbBCIEED8hACAEIQMDQCAAQQJJRQRAIAEgAywAABCYASADQQFqIQMgAEEBayEADAELCyADLQAAIAQQGCACQRBqJAALrgEBAn8gABAuIQICQAJAIAAoAhAtAIYBQQFHDQAgASAAQQEQgwEaIAAQIUE6EM0BIgBFDQFBACEBIAIgAEEBaiIDQQAQiwEiAA0AIAIgA0EBEIsBIgBBqiZBwAJBARA1GiAAKAIQQQE6AIYBA0AgAkEBIAEQ5gMiAUUNASAAIAEQRCABKAIMIgNGDQAgACABIAMQcQwACwALIAAPC0GjmQFB67gBQdUHQa/QARAAAAulAwEHfwJAAkAgAEGP3wBBABBrIgJFDQAgAigCCCIDRQ0AIABB/zBBARCRASIFQZAmQZgCQQEQNRogA0EEEBohByAAEBwhAgNAIAIEQCAAIAIQLSEBA0AgAQRAIAEoAhAtAHEEQCAHIARBAnRqIAE2AgAgBEEBaiEECyAAIAEQMCEBDAELCyAAIAIQHSECDAELCyADIARHDQEgA0EAIANBAEobIQRBACEDA0AgAyAERkUEQCAHIANBAnRqKAIAIgZBUEEAIAYoAgBBA3EiAUECRxtqKAIoIQIgBiAGQTBBACABQQNHG2ooAiggBRDvCSACIAUQ7wkQnQQoAhAiAiAGKAIQIgEoAgg2AgggAUEANgIIIAIgASgCYDYCYCABQQA2AmAgAiABKAJsNgJsIAFBADYCbCACIAEoAmQ2AmQgAUEANgJkIAIgASgCaDYCaCABQQA2AmggBhDBAiADQQFqIQMMAQsLIAcQGCAFEBwhAQNAIAEEQCAFIAEQHSABEOcCIAAgARC3ASEBDAELCyAFELkBCw8LQbkgQeu4AUGWCEHUMBAAAAuXAQEFfyMAQRBrIgQkAEEBIQIDQCACIAAoAhAiAygCtAFKRQRAAkAgASADKAK4ASACQQJ0aigCACIDECEiBUGABCABKAIAEQMABEAgBCAFNgIAQa+1BCAEECoMAQtBEBBSIgYgAzYCDCAGIAU2AgggASAGQQEgASgCABEDABoLIAMgARDxCSACQQFqIQIMAQsLIARBEGokAAtNAQJ/IAEQISIDBEACQCADQfs3QQcQ6QENACAAIAEQIUGABCAAKAIAEQMAIgBFDQAgACgCDCECCyACDwtB9NIBQej7AEEMQZv3ABAAAAsoAQF/A38gAAR/IAAoAgQQ8wkgAWpBAWohASAAKAIAIQAMAQUgAQsLCxkAIABBhPoJQbTrCSgCABCSASIAEPEJIAAL8gECA38GfCAAIAEoAiwgASgCCCIDIAEoAgQiAUEBayICQQAgASACTxtsQQR0aiICKQMANwMQIAAgAikDCDcDGCAAIAIpAwg3AwggACACKQMANwMAQQEgAyADQQFNGyEDIAArAxghBSAAKwMIIQYgACsDECEHIAArAwAhCEEBIQEDQCABIANGBEAgACAFOQMYIAAgBjkDCCAAIAc5AxAgACAIOQMABSAFIAIgAUEEdGoiBCsDCCIJIAUgCWQbIQUgByAEKwMAIgogByAKZBshByAGIAkgBiAJYxshBiAIIAogCCAKYxshCCABQQFqIQEMAQsLCyoBAX8CQCABRQ0AIAAgARBEIgBFDQAgAC0AAEUNACAAEGlBAXMhAgsgAgtRAQF/AkACQCADRQ0AIANBOhDNASIERQ0AIARBADoAACAAIAIgAyAEQQFqIgMgAREHACAEQTo6AAAMAQsgACACIANBACABEQcACyAAIAM2AiQLXAAgASgCCEUEQCAAIAEQ1AYLIAIgAEG82gooAgAgASsDAEQAAAAAAADwPxBPOQMAIAIgAEHA2gooAgAgASgCCBCNATYCCCACIABBxNoKKAIAIAEoAgwQjQE2AgwLlwQCCHwIfyMAQUBqIgwkACABKAIAIQ8gAisDCCEGIAIrAwAhByABKAIEIRBEsaEWKtPO0kchA0F/IQ1BfyECA0ACQCALIBBGBEAgDyANQTBsaiIBKAIAIAIgAiABKAIEQQFrRmsiASABQQNwa0EEdGohAkEAIQEMAQsgDyALQTBsaiIBKAIEIREgASgCACESQQAhAQNAIAEgEUYEQCALQQFqIQsMAwUgEiABQQR0aiIOKwMAIAehIgQgBKIgDisDCCAGoSIEIASioCIEIAMgAkF/RiADIARkciIOGyEDIAEgAiAOGyECIAsgDSAOGyENIAFBAWohAQwBCwALAAsLA0AgAUEERkUEQCAMIAFBBHQiC2oiDSACIAtqIgsrAwA5AwAgDSALKwMIOQMIIAFBAWohAQwBCwsgDCsDMCAHoSIDIAOiIAwrAzggBqEiAyADoqAhBCAMKwMAIAehIgMgA6IgDCsDCCAGoSIDIAOioCEIRAAAAAAAAAAAIQNEAAAAAAAA8D8hCQNAIAAgDCAJIAOgRAAAAAAAAOA/oiIKQQBBABChASAIIAShmUQAAAAAAADwP2MgCSADoZlE8WjjiLX45D5jckUEQCAIIAArAwAgB6EiBSAFoiAAKwMIIAahIgUgBaKgIgUgBCAIZCIBGyEIIAUgBCABGyEEIAMgCiABGyEDIAogCSABGyEJDAELCyAMQUBrJAALRQACQCAAECgEQCAAECVBD0YNAQsgAEEAEJgBCwJAIAAQKARAIABBADoADwwBCyAAQQA2AgQLIAAQKAR/IAAFIAAoAgALC3wBA38jAEEQayICJAADQAJAQQAhAyAARQ0AIAAoAgAiBEUNACAAKAIEIQMgAiABNgIMIAJBLzYCCCACIAQ2AgQgAiADNgIAQfTbCkGjMyACEJkDIABBCGohAEGcf0H02woQ+gkiA0EEQQAQFxDlAw0BCwsgAkEQaiQAIAML8AEBBX9BAUEIEBohBQJAIAAEQANAIAFBAUYEQEEAIQEgACECA0AgAkHn4QEQ+QIhAwNAIAJFDQUgAUECaiEEIAFBA3QgBSABQQFqIgEgBEEIEPMBIgVqIAKtIAOtQiCGhDcCACACIANqIQRBACECQQAhAyAEIAAQPyAAakYNAAsgBEHn4QEQrAQgBGohAgwACwALIAFB5+EBaiABQejhAWohAiABQQFqIQEtAAAhAwNAIAItAAAiBEUNASACQQFqIQIgAyAERw0ACwtB8LADQbX8AEE1QYvzABAAAAtBr9IBQbX8AEEtQYvzABAAAAsgBQsXACAAKAIQIgBBADoAtQEgAEIBNwLsAQsSACABBH8gACABEEQQaQUgAgsLTwEBfEGg2AorAwAiAUQAAAAAAAAAAGQEfCABBUQAAAAAAABSQCAAIABBAEGDnAFBABAiRAAAAAAAAPC/RAAAAAAAAAAAEE8iASABvVAbCwuYBAMBfwl8AX4jAEGQAWsiBiQAIAIrAwAiCEQAAAAAAAAIQKMhCiACKwMIIglEAAAAAAAA4L+iIQcgCEQAAAAAAADgv6IhCyAJRAAAAAAAAAjAoyEMAkAgBEGAAXEEQCAGQgA3A4gBIAZCADcDgAEMAQsgBiAHIAqhOQOIASAGIAsgDKE5A4ABCyABKwMIIQ0gASsDACEOAkAgBEHAAHEEQCAGQgA3A3ggBkIANwNwDAELIAYgByAKoDkDeCAGIAwgC6A5A3ALIAYgCZo5A2ggBiAGKQOIATcDKCAGIAYpA3g3AwggBiAGKQNoNwMYIAYgCJo5A2AgBiAGKQOAATcDICAGIAYpA3A3AwAgBiAGKQNgNwMQIAZBMGogBkEgaiAGQRBqIAYgAxDpAiAGKwMwIQcgASANIAkgBisDOKAiA6E5AwggASAOIAggB6AiB6E5AwAgACAJIA2gIAOhIgs5AwggACAIIA6gIAehIg85AwAgBSAAKQMINwNIIAUgACkDADcDQCAFIAApAwg3AwggACkDACEQIAUgCiAJRAAAAAAAAOA/oiANoCADoSIJoDkDGCAFIAwgDiAIRAAAAAAAAOA/oqAgB6EiCKA5AxAgBSAQNwMAIAUgASkDCDcDKCAFIAEpAwA3AyAgBSAJIAqhOQM4IAUgCCAMoTkDMCAAIAsgA6E5AwggACAPIAehOQMAIAZBkAFqJAALHgAgACABokQAAAAAAAAkQKIgAkQAAAAAAADgP6KgC+wOAwR/EnwBfiMAQdACayIHJABEzczMzMzM3D8hDSAEIANEAAAAAAAAEECiIgtkRSAFQSBxIghFckUEQCAEIAujRM3MzMzMzNw/oiENCwJ8RAAAAAAAAAAAIAREAAAAAAAA8D9kRQ0AGkQAAAAAAAAAACAIRQ0AGiAERAAAAAAAAPC/oESamZmZmZmpP6IgA6MLIQtEAAAAAAAAAAAgDSACKwMAIhCiIhQgBUGAAXEiCRshDEQAAAAAAAAAACAUmiAFQcAAcSIKGyEORAAAAAAAAAAAIA0gAisDCCISmiIDoiIVIAkbIQ9EAAAAAAAAAAAgFZogChshESASIAErAwgiGKAhGSAQIAErAwAiGqAhGyALIBCiIQ0gEkQAAAAAAADgP6IgGKAhFiAQRAAAAAAAAOA/oiAaoCEXIAsgA6IhEyAAAnwCfAJAAnwCQCAIRQRAIAcgDDkDyAIgByAPOQPAAiAHIA45A7gCIAcgETkDsAIgByACKQMINwOoAiAHIAIpAwA3A6ACRAAAAAAAAAAAIQwgEEQAAAAAAAAAAGEEQEQAAAAAAAAAACEORAAAAAAAAAAAIQtEAAAAAAAAAAAgEkQAAAAAAAAAAGENBRoLIAcrA6gCIQMgBysDoAIhCwwBCyAHIA45A8gCIAcgETkDwAIgByAMOQO4AiAHIA85A7ACIAcgAzkDqAIgByAQmiILOQOgAkQAAAAAAAAAACEMIBBEAAAAAAAAAABiDQBEAAAAAAAAAAAhDkQAAAAAAAAAACERRAAAAAAAAAAAIBJEAAAAAAAAAABhDQEaCyALIAsgAxBKIgyjIg8QsAIiDiAOmiADRAAAAAAAAAAAZBshHCADIAyjIRECfAJAIAVB4ABxQeAARwRAIAhBAEciAiAJRXINAQsgByAHKQPIAjcDuAEgByAHKQOoAjcDqAEgByAHKQO4AjcDmAEgByAHKQPAAjcDsAEgByAHKQOgAjcDoAEgByAHKQOwAjcDkAEgB0HwAWogB0GwAWogB0GgAWogB0GQAWogBBDpAiARIAcrA5ACIAuhIgsgBysDmAIgA6EiAxBKIgwgCyAMoxCwAiILIAuaIANEAAAAAAAAAABkGyAcoRBLoiIDoiEOIA8gA6IMAQsgBUGgAXFBoAFHQQAgCkUgAnIbRQRAIAcgBykDyAI3A4gBIAcgBykDqAI3A3ggByAHKQO4AjcDaCAHIAcpA8ACNwOAASAHIAcpA6ACNwNwIAcgBykDsAI3A2AgB0HwAWogB0GAAWogB0HwAGogB0HgAGogBBDpAiARIAcrA4ACIAuhIgsgBysDiAIgA6EiAxBKIgwgCyAMoxCwAiILIAuaIANEAAAAAAAAAABkGyAcoRBLoiIDoiEOIA8gA6IMAQsgByAHKQPIAjcDWCAHIAcpA6gCNwNIIAcgBykDuAI3AzggByAHKQPAAjcDUCAHIAcpA6ACNwNAIAcgBykDsAI3AzAgB0HwAWogB0HQAGogB0FAayAHQTBqIAQQ6QIgBysD+AEgA6EhDiAHKwPwASALoQshDCAIRQ0BIAREAAAAAAAA4D+iIgMgEaIhESADIA+iCyEPIAEgGCAOoTkDCCABIBogDKE5AwAgACAZIA6hIgM5AwggACAbIAyhIgQ5AwAgBiABKQMINwOIASAGIAEpAwA3A4ABIAYgASkDADcDACAGIAEpAwg3AwggBiADIA2hOQM4IAYgBCAToTkDMCAGIBYgDaE5AyggBiAXIBOhOQMgIAYgAyAUoTkDGCAGIAQgFaE5AxAgBiAAKQMANwNAIAYgACkDCDcDSCAGIBQgA6A5A3ggBiAVIASgOQNwIAYgDSAWoDkDaCAGIBMgF6A5A2AgBiANIAOgOQNYIAYgEyAEoDkDUCAAIAQgD6E5AwAgAyARoQwCCyAHIA0gFiAZoaA5A+gBIAcgEyAXIBuhoDkD4AEgB0IANwPYASAHQgA3A9ABIAcgFCASoSIDOQPIASAHIAcpA+gBNwMoIAcgBykDyAE3AxggByAHKQPgATcDICAHIBUgEKEiCzkDwAEgByAHKQPAATcDECAHQgA3AwggB0IANwMAIAdB8AFqIAdBIGogB0EQaiAHIAQQ6QIgESAHKwOAAiALoSIEIAQgBysDiAIgA6EiAxBKIgSjELACIgsgC5ogA0QAAAAAAAAAAGQbIByhEEsgBJqiIgOiIQsgDyADogshAyAAIBkgC6AiEjkDCCAAIBsgA6AiDzkDACAGIAApAwg3A4gBIAYgACkDADcDgAEgBiAAKQMINwMIIAApAwAhHSAGIBQgGCALoCIEoDkDeCAGIBUgGiADoCIQoDkDcCAGIA0gFqA5A2ggBiATIBegOQNgIAYgCyAEoCILOQNYIAYgAyAQoCIDOQNQIAYgCzkDSCAGIAM5A0AgBiALOQM4IAYgAzkDMCAGIBYgDaE5AyggBiAXIBOhOQMgIAYgBCAUoTkDGCAGIBAgFaE5AxAgBiAdNwMAIAAgDCAPoDkDACAOIBKgCzkDCCAHQdACaiQAC84JAgN/DHwjAEHwAWsiBiQARAAAAAAAAAAAIANEAAAAAAAA0D+iRGZmZmZmZtY/okRmZmZmZmbWPyADRAAAAAAAABBAZBsiCiACKwMAIg6iIhIgBEHAAHEiBxshDUQAAAAAAAAAACAKIAIrAwgiEJoiC6IiEyAHGyEPRAAAAAAAAAAAIBKaIARBgAFxIggbIQpEAAAAAAAAAAAgE5ogCBshCQJAIARBIHEiBARAIAYgAikDCDcDyAEgBiACKQMANwPAASAPIQsgDSEMDAELIAYgCzkDyAEgBiAOmjkDwAEgCSELIAohDCAPIQkgDSEKCyABKwMIIQ0gASsDACEPIAYgDDkD6AEgBiALOQPgASAGIAo5A9gBIAYgCTkD0AFEAAAAAAAAAAAhCgJ8IA5EAAAAAAAAAABhBEBEAAAAAAAAAAAhCUQAAAAAAAAAACELRAAAAAAAAAAAIBBEAAAAAAAAAABhDQEaCyAGKwPAASIJIAkgBisDyAEiChBKIgujIgwQsAIiESARmiAKRAAAAAAAAAAAZBshESAKIAujIQsCfCAHBEAgBiAGKQPoATcDiAEgBiAGKQPIATcDeCAGIAYpA9gBNwNoIAYgBikD4AE3A4ABIAYgBikDwAE3A3AgBiAGKQPQATcDYCAGQZABaiAGQYABaiAGQfAAaiAGQeAAaiADEOkCIAsgBisDoAEgCaEiCSAGKwOoASAKoSIKEEoiFCAJIBSjELACIgkgCZogCkQAAAAAAAAAAGQbIBGhEEuiIgmiIQogDCAJogwBCyAIBEAgBiAGKQPoATcDWCAGIAYpA8gBNwNIIAYgBikD2AE3AzggBiAGKQPgATcDUCAGIAYpA8ABNwNAIAYgBikD0AE3AzAgBkGQAWogBkHQAGogBkFAayAGQTBqIAMQ6QIgCyAGKwOwASAJoSIJIAYrA7gBIAqhIgoQSiIUIAkgFKMQsAIiCSAJmiAKRAAAAAAAAAAAZBsgEaEQS6IiCaIhCiAMIAmiDAELIAYgBikD6AE3AyggBiAGKQPIATcDGCAGIAYpA9gBNwMIIAYgBikD4AE3AyAgBiAGKQPAATcDECAGIAYpA9ABNwMAIAZBkAFqIAZBIGogBkEQaiAGIAMQ6QIgBisDmAEgCqEhCiAGKwOQASAJoQshCSADRAAAAAAAAOA/oiIDIAuiIQsgAyAMogshDCAQIA2gIRAgDiAPoCEOIAVBQGshAgJ8IAQEQCABIA0gC6AiAzkDCCABIA8gDKAiDTkDACAAIBAgC6AiCzkDCCAAIA4gDKAiDDkDACACIAEpAwg3AwggAiABKQMANwMAIAUgASkDCDcDCCAFIAEpAwA3AwAgBSAAKQMINwMoIAUgACkDADcDICAJIAygIQkgCiALoAwBCyABIA0gCqE5AwggASAPIAmhOQMAIAAgECAKoSIDOQMIIAAgDiAJoSINOQMAIAIgACkDCDcDCCACIAApAwA3AwAgBSAAKQMINwMIIAUgACkDADcDACAFIAEpAwg3AyggBSABKQMANwMgIA0gDKEhCSADIAuhCyEKIAUgEiADoDkDOCAFIBMgDaA5AzAgBSADIBKhOQMYIAUgDSAToTkDECAAIAo5AwggACAJOQMAIAZB8AFqJAAL9wEBBn8jAEEQayIEJAADQCABIAI2AgAgACECA0ACQCACLQAARSADIgVBA0pyRQRAIARBADYCDCACIAJB8N4HIARBDGoQ2gYiAEYEQANAIAAgAEGA3wcgBEEMaiIHENoGIgNHIAMhAA0ACyAAQbDfByAHENoGIQALIAQoAgwiAyADQQ9xRSADQQBHcXIiBg0BIAQgAjYCAEGHlQQgBBAqCyAEQRBqJAAPCyAGQQhHIgdFBEBBAyEDIAAhAiAFQQNGDQELIAUgB3JFBEBBACEDIAAhAiAALQAARQ0BCwsgBUEBaiEDIAEoAgAgBiAFQQN0dHIhAgwACwALQAEBfwJAIAFFDQAgABC+AygCACABQQEQmAQiAkUgAkEIaiABR3INACAAIAEQywMPCyAAEL4DKAIAIAFBABDrCAvBBQIHfAh/IwBBMGsiCiQAAn8gAigCECgCCCILKAIAIgwoAggEQCAMQRBqIQ0gDEEYagwBCyAMKAIAIg1BCGoLKwMAIQQCQCANKwMAIgMgDCALKAIEIg1BMGxqIgJBJGsoAgBFBEAgAkEwaygCACACQSxrKAIAQQR0aiECCyACQRBrKwMAIgehIgUgBaIgBCACQQhrKwMAIgWhIgYgBqKgRI3ttaD3xrA+YwRAIAAgBDkDCCAAIAM5AwAMAQsgASgCEC8BiAFBDnEiAUEKRiABQQRGckUEQEEAIQFEAAAAAAAAAAAhAwNAAkAgASANRgRAIANEAAAAAAAA4D+iIQNBACEBDAELIAwgAUEwbGoiAigCBCEPIAIoAgAhDkEDIQJBACELA0AgAiAPTwRAIAFBAWohAQwDBSADIA4gC0EEdGoiECsDACAOIAJBBHRqIhErAwChIgMgA6IgECsDCCARKwMIoSIDIAOioJ+gIQMgAkEDaiECIAtBA2ohCwwBCwALAAsLA0ACQAJAIAEgDUcEQCAMIAFBMGxqIgIoAgQhDyACKAIAIQ5BAyECQQAhCwNAIAIgD08NAyAOIAtBBHRqIhArAwAiByAOIAJBBHRqIhErAwAiBaEiBCAEoiAQKwMIIgYgESsDCCIIoSIEIASioJ8iBCADZg0CIAJBA2ohAiALQQNqIQsgAyAEoSEDDAALAAsgCkH9CTYCBCAKQZi5ATYCAEGo8wgoAgBB5rwEIAoQHxoQPAALIAAgCCADoiAGIAQgA6EiBqKgIASjOQMIIAAgBSADoiAHIAaioCAEozkDAAwDCyABQQFqIQEMAAsACyAKIAQgBaBEAAAAAAAA4D+iOQMoIAogCikDKDcDGCAKIAMgB6BEAAAAAAAA4D+iOQMgIAogCikDIDcDECAAIAsgCkEQahD5CQsgCkEwaiQACx4AIABFBEBBwNUBQdH7AEEMQf47EAAACyAALQAARQuTAgIFfwR8IAAoAhAiAygCwAEhAkEAIQADfCACIABBAnRqKAIAIgEEfCAAQQFqIQAgBiABQTBBACABKAIAQQNxQQNHG2ooAigoAhArAxCgIQYMAQUgAygCyAEhBEEAIQEDQCAEIAFBAnRqKAIAIgUEQCABQQFqIQEgByAFQVBBACAFKAIAQQNxQQJHG2ooAigoAhArAxCgIQcMAQsLIAMrAxgiCCACKAIAIgJBMEEAIAIoAgBBA3FBA0cbaigCKCgCECsDGKEgAysDECIJIAYgALijoRCqASAEKAIAIgBBUEEAIAAoAgBBA3FBAkcbaigCKCgCECsDGCAIoSAHIAG4oyAJoRCqAaBEAAAAAAAA4D+iCwsLYQEEfCACKwMIIAArAwgiBKEgASsDACAAKwMAIgOhIgWiIAIrAwAgA6EgASsDCCAEoSIEoqEiAyADoiIDRLu919nffNs9YwR8RAAAAAAAAAAABSADIAUgBaIgBCAEoqCjCwuTAQEBfCACBEACQAJAIAJB2gBHBEAgAkG0AUYNASACQY4CRg0CQc6PA0HmugFBhAFBooMBEAAACyAAIAErAwg5AwAgACABKwMAmjkDCA8LIAAgASsDADkDACAAIAErAwiaOQMIDwsgASsDCCEDIAAgASsDADkDCCAAIAM5AwAPCyAAIAEpAwA3AwAgACABKQMINwMIC/0HAQ1/IwBBMGsiAiQAAkACQAJAA0AgBkELRwRAIABFDQMgAC0AAEUNAyAGQZAIbEHgggdqIgUoAgAiCEUNBCAIKAIAIgNFDQRBACEJIAAQPyEKA0AgAwRAQQAhBCADED8hC0EAIQECQANAIAAgBGohBwJAAkADQCAEIApGIAEgC0ZyDQIgBywAACIMQV9xQcEAa0EZSw0BIAEgA2osAAAiDUFfcUHBAGtBGk8EQCABQQFqIQEMAQsLIAwQ/wEgDRD/AUcNAyABQQFqIQELIARBAWohBAwBCwsDQCAEIApHBEAgACAEaiAEQQFqIQQsAABBX3FBwQBrQRpPDQEMAgsLA0AgASALRg0GIAEgA2ogAUEBaiEBLAAAQV9xQcEAa0EZSw0ACwsgCCAJQQFqIglBAnRqKAIAIQMMAQsLIAZBAWohBgwBCwsgAkIANwMoIAJCADcDICACIAA2AhAgAkEgaiEAQQAhBCMAQTBrIgEkACABIAJBEGoiAzYCDCABIAM2AiwgASADNgIQAkACQAJAAkACQAJAQQBBAEG17AMgAxBjIgZBAEgNACAGQQFqIQMCQCAAEE4gABAlayIFIAZLDQAgAyAFayEFIAAQKARAQQEhBCAFQQFGDQELIAAgBRC9AUEAIQQLIAFCADcDGCABQgA3AxAgBCAGQRBPcQ0BIAFBEGohBSAGIAQEfyAFBSAAEHkLIANBtewDIAEoAiwQYyIDRyADQQBOcQ0CIANBAEwNACAAECgEQCADQYACTw0EIAQEQCAAEHkgAUEQaiADECAaCyAAIAAtAA8gA2o6AA8gABAlQRBJDQFBibQDQZ38AEHqAUGmHxAAAAsgBA0EIAAgACgCBCADajYCBAsgAUEwaiQADAQLQbykA0Gd/ABB3QFBph8QAAALQcucA0Gd/ABB4gFBph8QAAALQfDMAUGd/ABB5QFBph8QAAALQdadAUGd/ABB7AFBph8QAAALAkAgABAoBEAgABAlQQ9GDQELIAJBIGoiABAlIAAQTk8EQCAAQQEQvQELIAJBIGoiABAlIQEgABAoBEAgACABakEAOgAAIAIgAi0AL0EBajoALyAAECVBEEkNAUGJtANBnfwAQa8CQfexARAAAAsgAigCICABakEAOgAAIAIgAigCJEEBajYCJAsCQCACQSBqECgEQCACQQA6AC8MAQsgAkEANgIkCyACQSBqIgAQKCEBIAAgAigCICABGyIAEKEGBEAgAiAANgIAQcg0IAIQKgsgAi0AL0H/AUYEQCACKAIgEBgLQYUvEIsKIQULIAJBMGokACAFDwtBgaQDQZi3AUHwBUHSiQEQAAALQcrVAUGYtwFB8QVB0okBEAAAC78CAQZ/IAAoAgghBSAAKAIMIQYDQCAAKAIAIARLBEAgBSAAKAIEIARsaiEBIAYEQCABIAYRAQALAkACQAJAAkACQAJAAkACQAJAAkAgASgCAEECaw4NAAABAQIDBAQGBwgFBQkLIAEoAgwQGAwICyABKAIMEBgMBwsgASgCDBAYDAYLIAEoAigQGAwFCyABKAIIEBgMBAtBACECAkACQAJAAkAgASgCCEEBaw4CAAEDCwNAIAEoAjQhAyACIAEoAjBODQIgAyACQQR0aigCCBAYIAJBAWohAgwACwALA0AgASgCRCEDIAIgASgCQE4NASADIAJBBHRqKAIIEBggAkEBaiECDAALAAsgAxAYCwwDCyABKAIQEBgMAgsgASgCCBAYDAELIAEoAigQGAsgBEEBaiEEDAELCyAFEBggABAYC98BAQN/IAAQJSAAEE5PBEAgABBOIgJBAWoiAyACQQF0QYAIIAIbIgQgAyAESxshAyAAECUhBAJAIAAtAA9B/wFGBEAgACgCACACIANBARCGBSECDAELIANB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KAIIGiAEBEAgAiAJIAQQqwILIAYEQCACIARqIAcgBhCrAgsgAyAEIAVqIgprIQcgAyAKRwRAIAIgBGogBmogBCAJaiAFaiAHEKsCCyABQQpHBEAgCRChBQsgACACEPsBIAAgCCgCCBD6ASAAIAQgBmogB2oiABC+ASAIQQA6AAwgACACaiAIQQxqENIBIAhBEGokAA8LEMoBAAsWACAAIAEgAkKAgICAgICAgIB/ELAFCwkAIAAQZzYCAAsjAQJ/IAAhAQNAIAEiAkEEaiEBIAIoAgANAAsgAiAAa0ECdQsPACAAIAAoAgBBBGs2AgALCgAgACgCAEEEawsHACAAKAIECy0BAX8jAEEQayICJAACQCAAIAFGBEAgAEEAOgB4DAELIAEQngQLIAJBEGokAAsTACAAEIwFKAIAIAAoAgBrQQJ1CywBAX8gACgCBCECA0AgASACRwRAIAAQnQMaIAJBBGshAgwBCwsgACABNgIECwkAIABBADYCAAtJAQF/IwBBEGsiAyQAAkACQCACQR5LDQAgAS0AeEEBcQ0AIAFBAToAeAwBCyACEMcKIQELIANBEGokACAAIAI2AgQgACABNgIAC0ABAX8jAEEQayIBJAAgABCdAxogAUH/////AzYCDCABQf////8HNgIIIAFBDGogAUEIahCtCygCACABQRBqJAALCwAgAEEANgIAIAALNwEBfyMAQRBrIgMkACADIAEQ7QI2AgwgAyACEO0CNgIIIAAgA0EMaiADQQhqEKIFIANBEGokAAtOAQF/IwBBEGsiAyQAIAMgATYCCCADIAA2AgwgAyACNgIEQQAhASADQQRqIgAgA0EMahCfBUUEQCAAIANBCGoQnwUhAQsgA0EQaiQAIAELNAEBfyMAQRBrIgMkACAAECQaIAAgAhCfAyADQQA6AA8gASACaiADQQ9qENIBIANBEGokAAtnAQJ/IwBBEGsiAyQAA0ACQCABLQAAIgJB3ABHBEAgAgRAIALAIgJBAE4EQCAAIAIQZQwDCyADIAI2AgAgAEHO3wAgAxAeDAILIANBEGokAA8LIABB98cBEBsaCyABQQFqIQEMAAsACxwAIABB/////wNLBEAQkAEACyAAQQJ0QQQQogsLCQAgABD1BhAYCxUAIABBgLoJNgIAIABBEGoQNBogAAsVACAAQdi5CTYCACAAQQxq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ACABKAIEIgIgACACSSIDGxDpASIBDQBBASEBIAAgAksNAEF/QQAgAxshAQsgAQsMACAAQQFBLRCACxoLDAAgAEEBQS0QhAsaCwoAIAEgAGtBAnULHAEBfyAALQAAIQIgACABLQAAOgAAIAEgAjoAAAtlAQF/IwBBEGsiBiQAIAZBADoADyAGIAU6AA4gBiAEOgANIAZBJToADCAFBEAgBkENaiAGQQ5qEPcKCyACIAEgASACKAIAEKMLIAZBDGogAyAAKAIAEJsLIAFqNgIAIAZBEGokAAtCACABIAIgAyAEQQQQpAIhASADLQAAQQRxRQRAIAAgAUHQD2ogAUHsDmogASABQeQASRsgAUHFAEgbQewOazYCAAsLQAAgAiADIABBCGogACgCCCgCBBECACIAIABBoAJqIAUgBEEAEJwFIABrIgBBnwJMBEAgASAAQQxtQQxvNgIACwtAACACIAMgAEEIaiAAKAIIKAIAEQIAIgAgAEGoAWogBSAEQQAQnAUgAGsiAEGnAUwEQCABIABBDG1BB282AgALC0IAIAEgAiADIARBBBClAiEBIAMtAABBBHFFBEAgACABQdAPaiABQewOaiABIAFB5ABJGyABQcUASBtB7A5rNgIACwtAACACIAMgAEEIaiAAKAIIKAIEEQIAIgAgAEGgAmogBSAEQQAQngUgAGsiAEGfAkwEQCABIABBDG1BDG82AgALC0AAIAIgAyAAQQhqIAAoAggoAgARAgAiACAAQagBaiAFIARBABCeBSAAayIAQacBTARAIAEgAEEMbUEHbzYCAAsLBABBAgveAQEFfyMAQRBrIgckACMAQRBrIgMkACAAIQQCQCABQff///8DTQRAAkAgARCNBQRAIAQgARDTAQwBCyADQQhqIAEQ0ANBAWoQzwMgAygCDBogBCADKAIIIgAQ+wEgBCADKAIMEPoBIAQgARC+AQsjAEEQayIFJAAgBSACNgIMIAAhAiABIQYDQCAGBEAgAiAFKAIMNgIAIAZBAWshBiACQQRqIQIMAQsLIAVBEGokACADQQA2AgQgACABQQJ0aiADQQRqENsBIANBEGokAAwBCxDKAQALIAdBEGokACAEC8AFAQ5/IwBBEGsiCyQAIAYQywEhCiALQQRqIAYQ2QMiDhDIASAFIAM2AgACQAJAIAAiBy0AACIGQStrDgMA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aygCAGooAhg2AgAgAAsLACAAQYCgCxCpAgsJACAAEJEHEBgLPQEBfyAAKAIYIgIgACgCHEYEQCAAIAEQpgMgACgCACgCNBEAAA8LIAAgAkEBajYCGCACIAE6AAAgARCmAws0AQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBECAA8LIAAgAUEBajYCDCABLAAAEKYDCyoBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQIADwsgASwAABCmAwsPACAAIAAoAgAoAhgRAgALLAAgACABEK0HIgFFBEAPCwJAIAMEQCAAIAEgAhCqBAwBCyAAIAEgAhC2CwsLCAAgACgCEEULBABBfwsIACAAEIoHGgu+DwIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQogAkL///////8/gyELIAIgBIVCgICAgICAgICAf4MhDCAEQjCIp0H//wFxIQgCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAIQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIg1CgICAgICAwP//AFQgDUKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEMDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQwgAyEBDAILIAEgDUKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACEMDAMLIAxCgICAgICAwP//AIQhDEIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASANhFAEQEKAgICAgIDg//8AIAwgAiADhFAbIQxCACEBDAILIAIgA4RQBEAgDEKAgICAgIDA//8AhCEMQgAhAQwCCyANQv///////z9YBEAgBUHAAmogASALIAEgCyALUCIGG3kgBkEGdK18pyIGQQ9rELMBQRAgBmshBiAFKQPIAiELIAUpA8ACIQELIAJC////////P1YNACAFQbACaiADIAogAyAKIApQIgcbeSAHQQZ0rXynIgdBD2sQswEgBiAHakEQayEGIAUpA7gCIQogBSkDsAIhAwsgBUGgAmogCkKAgICAgIDAAIQiEkIPhiADQjGIhCICQgBCgICAgLDmvIL1ACACfSIEQgAQnAEgBUGQAmpCACAFKQOoAn1CACAEQgAQnAEgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQnAEgBUHwAWogBEIAQgAgBSkDiAJ9QgAQnAEgBUHgAWogBSkD+AFCAYYgBSkD8AFCP4iEIgRCACACQgAQnAEgBUHQAWogBEIAQgAgBSkD6AF9QgAQnAEgBUHAAWogBSkD2AFCAYYgBSkD0AFCP4iEIgRCACACQgAQnAEgBUGwAWogBEIAQgAgBSkDyAF9QgAQnAEgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQnAEgBUGQAWogA0IPhkIAIAJCABCcASAFQfAAaiACQgBCACAFKQOoASAFKQOgASINIAUpA5gBfCIEIA1UrXwgBEIBVq18fUIAEJwBIAVBgAFqQgEgBH1CACACQgAQnAEgBiAJIAhraiEGAn8gBSkDcCITQgGGIg4gBSkDiAEiD0IBhiAFKQOAAUI/iIR8IhBC5+wAfSIUQiCIIgIgC0KAgICAgIDAAIQiFUIBhiIWQiCIIgR+IhEgAUIBhiINQiCIIgogECAUVq0gDiAQVq0gBSkDeEIBhiATQj+IhCAPQj+IfHx8QgF9IhNCIIgiEH58Ig4gEVStIA4gDiATQv////8PgyITIAFCP4giFyALQgGGhEL/////D4MiC358Ig5WrXwgBCAQfnwgBCATfiIRIAsgEH58Ig8gEVStQiCGIA9CIIiEfCAOIA4gD0IghnwiDlatfCAOIA4gFEL/////D4MiFCALfiIRIAIgCn58Ig8gEVStIA8gDyATIA1C/v///w+DIhF+fCIPVq18fCIOVq18IA4gBCAUfiIYIBAgEX58IgQgAiALfnwiCyAKIBN+fCIQQiCIIAsgEFatIAQgGFStIAQgC1atfHxCIIaEfCIEIA5UrXwgBCAPIAIgEX4iAiAKIBR+fCIKQiCIIAIgClatQiCGhHwiAiAPVK0gAiAQQiCGfCACVK18fCICIARUrXwiBEL/////////AFgEQCAWIBeEIRUgBUHQAGogAiAEIAMgEhCcASABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQpCACABfSELIAZB/v8AagwBCyAFQeAAaiAEQj+GIAJCAYiEIgIgBEIBiCIEIAMgEhCcASABQjCGIAUpA2h9IAUpA2AiDUIAUq19IQpCACANfSELIAEhDSAGQf//AGoLIgZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgCkIBhiALQj+IhCEBIARC////////P4MgBq1CMIaEIQogC0IBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAIgBEEBIAZrEKcDIAVBMGogDSAVIAZB8ABqELMBIAVBIGogAyASIAUpA0AiAiAFKQNIIgoQnAEgBSkDOCAFKQMoQgGGIAUpAyAiAUI/iIR9IAUpAzAiBCABQgGGIg1UrX0hASAEIA19CyEEIAVBEGogAyASQgNCABCcASAFIAMgEkIFQgAQnAEgCiACIAIgAyAEIAJCAYMiBHwiA1QgASADIARUrXwiASASViABIBJRG618IgJWrXwiBCACIAIgBEKAgICAgIDA//8AVCADIAUpAxBWIAEgBSkDGCIEViABIARRG3GtfCICVq18IgQgAiAEQoCAgICAgMD//wBUIAMgBSkDAFYgASAFKQMIIgNWIAEgA1Ebca18IgEgAlStfCAMhCEMCyAAIAE3AwAgACAMNwMIIAVB0AJqJAALwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCABIAJSIAEgAlNxDQEgACABIAKFhEIAUg8LIABCAFIgASACVSABIAJRGw0AIAAgASAChYRCAFIhAwsgAwseAQF/IAAQ7QEiAQRAIAAgARDHCyAAQbWWBRDhAQsLnwMBBX9BECECAkBBECAAIABBEE0bIgMgA0EBa3FFBEAgAyEADAELA0AgAiIAQQF0IQIgACADSQ0ACwtBQCAAayABTQRAQZCGC0EwNgIAQQAPC0EQIAFBC2pBeHEgAUELSRsiAyAAakEMahBNIgJFBEBBAA8LIAJBCGshAQJAIABBAWsgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAAgAmpBAWtBACAAa3FBCGsiAiAAQQAgAiABa0EPTRtqIgAgAWsiAmshBCAGQQNxRQRAIAEo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IAMgCRCoAwRAIAEhBAwCCyAFQfAAaiABIAJCAEIAEGogBSkDeCECIAUpA3AhBAwBCyAEQjCIp0H//wFxIQcgBgR+IAEFIAVB4ABqIAEgCkIAQoCAgICAgMC7wAAQaiAFKQNoIgpCMIinQfgAayEGIAUpA2ALIQQgB0UEQCAFQdAAaiADIAlCAEKAgICAgIDAu8AAEGogBSkDWCIJQjCIp0H4AGshByAFKQNQIQMLIAlC////////P4NCgICAgICAwACEIQsgCkL///////8/g0KAgICAgIDAAIQhCiAGIAdKBEADQAJ+IAogC30gAyAEVq19IglCAFkEQCAJIAQgA30iBIRQBEAgBUEgaiABIAJCAEIAEGogBSkDKCECIAUpAyAhBAwFCyAJQgGGIARCP4iEDAELIApCAYYgBEI/iIQLIQogBEIBhiEEIAZBAWsiBiAHSg0ACyAHIQYLAkAgCiALfSADIARWrX0iCUIAUwRAIAohCQwBCyAJIAQgA30iBIRCAFINACAFQTBqIAEgAkIAQgAQaiAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ggBkEBayEGIARCAYYhBCAJQgGGhCIJQoCAgICAgMAAVA0ACwsgCEGAgAJxIQcgBkEATARAIAVBQGsgBCAJQv///////z+DIAZB+ABqIAdyrUIwhoRCAEKAgICAgIDAwz8QaiAFKQNIIQIgBSkDQCEEDAELIAlC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQaiAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABBqQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORBqIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORBqQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhBqIAAg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A0AgBQRAIAAgBSAHEKMHIAYgBRAwIQUMAQUgBiACEB0hAgwCCwALAAsACyAIQa0CNgIEIAhBurkBNgIAQajzCCgCAEHmvAQgCBAfGhA8AAsgBiAGQR4gB0EBEMgDGgsgASAHRXJFBEAgACAHIAMgBBChBwsgACAAIAcQ3gwMAQsgACABIAIQ7gshBwsgCEEwaiQAIAcPC0HA1QFB0fsAQQxB/jsQAAALTQEDf0EBIQEDQCAAKAIQIgMoArgBIQIgAygCtAEgAUgEQCACEBgFIAIgAUECdGooAgAiAigCECgCDBC8ASACEPALIAFBAWohAQwBCwsL5gMCBn8GfCMAQeAAayIDJAAgACgCECICKwMYIQkgAisDECEKQYzYCi0AAEECTwRAIAEQsQIgAyAAECE2AlBBqPMIKAIAQaHzAyADQdAAahAfGgsCQCABRQRAQajzCCgCACEGDAELQajzCCgCACEGIAAQHCECIANBQGshBQNAIAJFDQECQCACKAIQIgQoAoABIABHDQAgBCAKIAQrAxCgOQMQIAQgCSAEKwMYoDkDGEGM2AotAABBAkkNACABELECIAIQISEEIAIoAhAiBysDECEIIAUgBysDGDkDACADIAg5AzggAyAENgIwIAZBg6kEIANBMGoQMgsgACACEB0hAgwACwALIAFBAWohB0EBIQQDQCAAKAIQIgIoArQBIAROBEAgAigCuAEgBEECdGooAgAhBSABBEAgCSAFKAIQIgIrAyigIQggCiACKwMgoCELIAkgAisDGKAhDCAKIAIrAxCgIQ1BjNgKLQAAQQJPBEAgARCxAiAFECEhAiADIAg5AyAgAyALOQMYIAMgDDkDECADIA05AwggAyACNgIAIAZB8agEIAMQMiAFKAIQIQILIAIgCDkDKCACIAs5AyAgAiAMOQMYIAIgDTkDEAsgBSAHEPELIARBAWohBAwBCwsgA0HgAGokAAv0GQMNfwt8AX4jAEGwBGsiAiQAIAAoAkghBkGM2AotAABBAk8EQCABELECIAIgABAhNgKwA0Go8wgoAgBB/u0DIAJBsANqEB8aCyABQQFqIQdBASEEA0AgACgCECIFKAK0ASAESARAAkACQCAAEDogA2siCSAAKAIQIgQoArQBaiINDQAgBCgCDA0AIARCADcDECAEQoCAgICAgICZwAA3AyggBEKA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oSIQOQMgIARCADcDGEEAIQRBjNgKLQAAQQFLBEAgARCxAiAAECEhACACIA85A7ACIAIgEDkDqAIgAkIANwOgAiACQgA3A5gCIAIgADYCkAIgB0HxqAQgAkGQAmoQMgsDQCACKALgAyAETQRAIAJB2ANqIgBBIBAzIAAQOEEAIQQDQCACKALIAyAETQRAIAJBwANqIgBBBBAzIAAQOCAGEBgMCgUgAiACKQPIAzcDiAIgAiACKQPAAzcDgAIgAkGAAmogBBAZIQACQAJAAkAgAigC0AMiAQ4CAgABCyACKALAAyAAQQJ0aigCABAYDAELIAIoAsADIABBAnRqKAIAIAERAQALIARBAWohBAwBCwALAAUgAiACKQPgAzcD+AEgAiACKQPYAzcD8AEgAkHwAWogBBAZIQACQAJAAkAgAigC6AMiAQ4CAgABC0G+gARBwgBBASAHEDsaEDwACyACIAIoAtgDIABBBXRqIgApAwg3A9gBIAIgACkDEDcD4AEgAiAAKQMYNwPoASACIAApAwA3A9ABIAJB0AFqIAERAQALIARBAWohBAwBCwALAAUgACgCECgCtAEhAyACIAIpA8gDNwPIASACIAIpA8ADNwPAASACKALAAyACQcABaiAEEBlBAnRqKAIAIQUCQCADIARLBEAgBSgCECIDIAMrAyggD6EiEjkDKCADIAMrAyAgEKEiFjkDICADIAMrAxggD6EiFDkDGCADIAMrAxAgEKEiFTkDEEGM2AotAABBAkkNASABELECIAUQISEDIAIgEjkDkAEgAiAWOQOIASACIBQ5A4ABIAIgFTkDeCACIAM2AnAgB0HxqAQgAkHwAGoQMgwBCyAFRQ0AIAUoAhAiAyADKwAYIA+hOQMYIAMgAysAECAQoTkDEEGM2AotAABBAkkNACABELECIAUQISEDIAUoAhAiBSsDECESIAIgBSsDGDkDsAEgAiASOQOoASACIAM2AqABIAdBg6kEIAJBoAFqEDILIARBAWohBAwBCwALAAUgBiAEQQR0aiIDKwMIIRQgAysDACEVIAIgAikD4AM3A2ggAiACKQPYAzcDYCACKALYAyACQeAAaiAEEBlBBXRqIgMrAxghDyADKwMQIRMgAysDCCEXIAMrAwAhGCAAKAIQKAK0ASEFIAIgAikDyAM3A1ggAiACKQPAAzcDUCACKALA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ACsDECEFIAArA2AhBCAAKwNYIQYgACsDGCEHIAIgACsDUDkDGCACIAc5AxAgAiAGIASgOQMgIAIgBTkDCCACIAM2AgBBqPMIKAIAQb2oBCACEDILIAJB8ABqJAALswYCCn8FfCMAQdABayIBJAACQCAAKAJAIgRFDQAgBEEEENYEIQUgAEEwaiIHIQMDQCACIARGBEAgBSAEQQRB8AMQqAFBACECIARBCBDWBCEDA0AgAiAERgRAAn8gACsDCCIMIAArAwBhBEAgASAAKQMoNwOIASABIAApAyA3A4ABIAEgACkDGDcDeCABIAApAxA3A3AgBCADIAFB8ABqEPsLDAELIAArAyAhCyAAKwMoIQ0gASAAKwMQOQOwASABIAArAxg5A7gBIAEgCyANIAugIA0gC6EiCyALoiAMRAAAAAAAABBAoqCfoUQAAAAAAADgP6IiC6E5A8ABIAEgDSALoTkDyAEgASABKQO4ATcDmAEgASABKQPAATcDoAEgASABKQPIATcDqAEgASABKQOwATcDkAEgBCADIAFBkAFqEPsLCyEIQajzCCgCACEJQYzYCi0AAARAIAArAxAhCyAAKwMYIQ0gACsDICEMIAEgACsDKDkDaCABIAw5A2AgASANOQNYIAEgCzkDUCAJQeCoBCABQdAAahAyCyABQUBrIQpBACECA0AgAiAERgRAIAUQGCADEBggCBAYQQAhAgNAIAIgBEYNByAHKAIAIgAoAjxFBEAgABD5CwsgAkEBaiECIABBNGohBwwACwALIAUgAkECdGooAgAiBiAIIAJBBXRqIgApAwA3AxAgBiAAKQMYNwMoIAYgACkDEDcDICAGIAApAwg3AxhBjNgKLQAABEAgAyACQQN0aisDACEPIAArAwAhCyAAKwMIIQ0gACsDECEMIAEgACsDGCIOOQNIIAogDDkDACABIA05AzggASALOQMwIAEgDCAOojkDKCABIA0gDkQAAAAAAADgP6IiDqA5AyAgASALIAxEAAAAAAAA4D+iIgygOQMYIAEgDSAOoTkDECABIAsgDKE5AwggASAPOQMAIAlBivEEIAEQMgsgAkEBaiECDAALAAUgAyACQQN0aiAFIAJBAnRqKAIAKwMAOQMAIAJBAWohAgwBCwALAAUgBSACQQJ0aiADKAIAIgM2AgAgAkEBaiECIANBNGohAwwB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QTAgBygCECgCfCgCAEEBRiIIG0EAIAcoAgBBA3FBAkEDIAgbRxtqKAIoIggoAhAoAoABKAIMRQRAIAVFBEAgACACEIMMIQULIAUgCBCwBwsgBiAHRw0ACyAFRQ0BAkAgASgCECgCgAEoAgwNACAFKAIIEDpBAkgNACAFIAEQsAcLAkAgA0UNACABKAIQKAKAASgCDCAFRw0AIAIgBRCGDAwCCyACIAUQhwwMAQsgByABKAIQKAKAASIIKAIIRg0AIAggCCgCGCIHIAUgBSAHShs2AhgLIAAgBiABEHIhBgwBBQJAIANFDQAgASgCECgCgAEoAgwNACAAIAIQgwwiACABELAHIAIgABCGDAsLCwshAQF/IAEgACAAKAIAIgIbIAIgASACGzYCBCAAIAE2AgALLwEBfyABQQA2AgQCQCAAKAIEIgIEQCACIAE2AgQMAQsgACABNgIACyAAIAE2AgQLRQECfyMAQRBrIgEkAEEBQdAAEEciAkUEQCABQdAANgIAQajzCCgCAEGD5wMgARAfGhAsAAsgAiAANgIIIAFBEGokACACCwkAIABCADcCAAsrAQF/IAAQHCECA0ACQCACRQ0AIAIgARBEEGkNACAAIAIQHSECDAELCyACC94BAgN/AnwgASgCECgCgAEiAigCIAR8IAIrAzAgAisDKEQAAAAAAADgv6KgBUQAAAAAAAAAAAshBSAAIAEQbiECA0AgAgRAIAEgAkEwQQAgAigCAEEDcSIDQQNHG2ooAigiBEYEQCACQVBBACADQQJHG2ooAighBAsCQCAEKAIQKAKAASIDKAIgIAFHDQAgAykDMEKAgICAgICAksAAUg0AIAMgBSADKwMoIgZEAAAAAAAA4D+ioDkDMCAFIAagIQUgAykDEFANACAAIAQQiwwLIAAgAiABEHIhAgwBCwsLrwECA38BfCABKAIQKAKAASICKwMoIAIpAwi6oyEFIAAgARBuIQIDQCACBEAgASACQTBBACACKAIAQQNxIgNBA0cbaigCKCIERgRAIAJBUEEAIANBAkcbaigCKCEECwJAIAQoAhAoAoABIgMoAiAgAUcNACADKwMoRAAAAAAAAAAAYg0AIAMgBSADKQMIuqI5AyggAykDEFANACAAIAQQjAwLIAAgAiABEHIhAgwBCwsLkgECA38BfiABKAIQKAKAASkDAEIB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AFJAojkDEEEBIQEDQCABIAIoArQBSkUEQCACKAK4ASABQQJ0aigCABCjDCABQQFqIQEgACgCECECDAELCwvvAQIDfwJ8IAAoAhAoAowBIgIrAxAhBSACKwMIIQYCQCAAIAFGDQAgABAcIQIDQCACRQ0BIAAgAigCECIDKALoAUYEQCADKAKUASIDIAYgAysDAKA5AwAgAyAFIAMrAwigOQMICyAAIAIQHSECDAALAAtBASEDA0AgACgCECICKAK0ASADTgRAIAIoArgBIANBAnRqKAIAIQQgACABRwRAIAQoAhAoAowBIgIgBSACKwMgoDkDICACIAYgAisDGKA5AxggAiAFIAIrAxCgOQMQIAIgBiACKwMIoDkDCAsgBCABEKQMIANBAWohAwwBCwsLoUsDGH8QfAF+IwBBsAFrIggkAEGM2AotAAAEQCAIIAAQITYCcEGo8wgoAgBB/u0DIAhB8ABqEB8aCyAAEBwhAgNAIAIEQCACKAIQQQA2ArgBIAAgAhAdIQIMAQsLQYzYCi0AAEECTwRAIAEoAhAhAiAIIAAQITYCZCAIIAI2AmBBqPMIKAIAQZv2AyAIQeAAahAfGgsgASABKAIQQQFqNgIQIAhB3O0JKAIANgJcQYWnASAIQdwAakEAEOIBIgpBkCZBmAJBARA1GkE4EFIhAiAKKAIQIAI2AowBIAAQOSECIAooAhAgAigCEC8BsAE7AbABIAAgCkHz3AAQuAcgACAKQbHbABC4ByAAIApBnNcBELgHIAhBmAFqIQcgCEGQAWohBiAIQYgBaiEJQQEhDANAIAAoAhAiAigCtAEgDE4EQCACKAK4ASAMQQJ0aigCACIDEJUEIAogAxAhELcHIgQoAhAiAiALNgKIASACIAM2AugBAkACQCABKAIEIgVFBEBE////////738hG0T////////v/yEaDAELRP///////+9/IRtE////////7/8hGiADIAUQRCICLQAARQ0AIAEoAgAgA0cEQCACIAMoAkQgBRBEEExFDQELIAhBADoArAEgCCAJNgJEIAggBjYCSCAIIAc2AkwgCCAIQawBajYCUCAIIAhBgAFqNgJAIAJBl74BIAhBQGsQUUEETgRAIAgrA5gBIRogCCsDkAEhHiAIKwOIASEbIAgrA4ABIRxBoNgKKwMAIh1EAAAAAAAAAABkBEAg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IAM2AggLIAMgAS0ADDoADCADIAAgACABRhshAAsgAEUgB0EBcUVyRQRAIAYEQANAIAItAAwhAwJAIAIoAggiASgCACACRwRAIANBAXFFBEAgAkEBOgAMIAFBADoADCABEMEEIAIgACAAIAIoAgAiAUYbIQAgASgCBCECCwJAAkACQAJAIAIoAgAiAQRAIAEtAAxBAUcNAQsgAigCBCIDBEAgAy0ADEEBRw0CCyACQQA6AAwgACACKAIIIgJHBEAgAi0ADA0GCyACQQE6AAwPCyACKAIEIgNFDQELIAMtAAxBAUcNAQsgAUEBOgAMIAJBADoADCACEMAEIAIoAggiAigCBCEDCyACIAIoAggiAC0ADDoADCAAQQE6AAwgA0EBOgAMIAAQwQQPCyADQQFxRQRAIAJBAToADCABQQA6AAwgARDABCACIAAgACACKAIEIgFGGyEAIAEoAgAhAgsCQAJAAkACQCACKAIAIgMEQCADLQAMIgFBAUcNAQsCQCACKAIEIgEEQCABLQAMQQFHDQELIAJBADoADCACKAIIIgItAAxBAUYgACACR3ENBSACQQE6AAwPCyADRQ0CIAMtAAxBAXENAQwDCyABRQ0CCyACKAIEIQELIAFBAToADCACQQA6AAwgAhDBBCACKAIIIgIoAgAhAwsgAiACKAIIIgAtAAw6AAwgAEEBOgAMIANBAToADCAAEMAEDwsgAigCCCIBIAIgASgCAEZBAnRqKAIAIQIMAAsACyAFQQE6AAwLCy0BAX8gACgCACIBBEAgACABNgIEIAAoAggaIAEQGCAAQQA2AgggAEIANwIACwsZACAAQYjPCjYCACAAQSRqEIICGiAAEOsHCw0AIAAtABhBf3NBAXELgQMCCn8BfCMAQSBrIgIkACAAQQhqIQQgACgCBCEBA0AgASAERwRAIAEoAhAiAyADEK8NIgs5AyAgAyALIAMrAxijOQMQIAEQrQEhAQwBCwsgAEEANgIgIABBJGohByAAQQhqIQggAEEEaiEEIAAoAgQhAwJAA0AgAyAIRwRAIAIgAygCEBCrDSIBNgIcAkAgAUUNACABKwMQREivvJry13q+Y0UNACAAIAAoAiBBAWo2AiAgASgCACgCICEFIAJBADYCGCACQQA2AhQgASgCACgCICABKAIEKAIgRw0DIAUrAxAhCyAFIAJBGGoi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AyAAKAIQIQEoAhAtAHRBAXENACAHIAErA1igIQcgCCABKwM4oCEICyABIAc5A4ABIAEgCDkDeCAAEGAgAEcEQCAFIAAoAhAiACgC6AFByABsaiIBIAErAxgiCSAHIAcgCWMbOQMYIAUgACgC7AFByABsaiIAIAArAxAiByAIIAcgCGQbOQMQCyADC3ABAn9BASEEA0AgBCAAKAIQIgMoArQBSkUEQCADKAK4ASAEQQJ0aigCACABIAIQ7A0gBEEBaiEEDAELCyADIAEgAysDEKI5AxAgAyACIAMrAxiiOQMYIAMgASADKwMgojkDICADIAIgAysDKKI5AygL5QQCCH8EfEEBIQIDQCACIAAoAhAiAygCtAFKRQRAIAMoArgBIAJBAnRqKAIAIAEQ7Q0gAkEBaiECDAELCyAAEGAhAiAAKAIQIQMCQCAAIAJGBEAgAygC7AEhBUQAAMD////fwSEKRAAAwP///99BIQsgAygC6AEiCCEEA0AgBCAFSgRAIAMoArQBIgBBACAAQQBKG0EBaiEAQQEhAgNAIAAgAkYNBCAKIAMoArgBIAJBAnRqKAIAKAIQIgQrAyBEAAAAAAAAIECgIgwgCiAMZBshCiALIAQrAxBEAAAAAAAAIMCgIgwgCyAMYxshCyACQQFqIQIMAAsABQJAIAMoAsQBIARByABsaiIAKAIAIgZFDQBBASECIAAoAgQiBygCACIARQ0AA0AgACgCECIALQCsASIJRSACIAZOckUEQCAHIAJBAnRqKAIAIQAgAkEBaiECDAELCyAJDQAgBkECayECIAArAxAgACsDWKEhDCAHIAZBAnRqQQRrIQADQCAAKAIAKAIQIgAtAKwBBEAgByACQQJ0aiEAIAJBAWshAgwBCwsgCiAAKwMQIAArA2CgIg0gCiANZBshCiALIAwgCyAMYxshCwsgBEEBaiEEDAELAAsACyADKALoASEIIAMoAuwBIQUgAygChAIoAhAoAvQBtyEKIAMoAoACKAIQKAL0AbchCwsgASgCECgCxAEiACAFQcgAbGooAgQoAgAoAhArAxghDCAAIAhByABsaigCBCgCACgCECsDGCENIAMgCjkDICADIAs5AxAgAyANIAMrA4ABoDkDKCADIAwgAysDeKE5AxgLogECAnwBfwJAAn9B/////wcgAEGCIRAmIgNFDQAaIAAQ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KGQEQCAFIAs5AyggBSALOQMYCyALIAUrAyBkBEAgBSALOQMgIAUgCzkDEAsCQCAGKALoASIBRQ0AAkAgACABRgRARAAAAAAAAAAAIQwMAQsgAUHs2AooAgBBCEEAEGG3IQwgCigCECEGCyAGKAL0ASIDIAEoAhAiASgC6AFGBEAgASABKwOAASALIAygECM5A4ABCyADIAEoAuwBRw0AIAEgASsDeCALIAygECM5A3gLIAJBAWohAgwACwALCyAAEOsNIQcgBCAAKAIQIgIoAuwBIgFByABsaiIDKAIEKAIAKAIQIAMrAxA5AxggAigC6AEhCkQAAAAAAAAAACELA0AgASAKSgRAIAQgAUEBayIDQcgAbGoiBigCACAEIAFByABsaiIBKwMoIAYrAyCgIAIoAvwBt6AgASsDGCAGKwMQoEQAAAAAAAAgQKAQIyENQQBKBEAgBigCBCgCACgCECANIAEoAgQoAgAoAhArAxigOQMYCyALIA0QIyELIAMhAQwBCwsCQCAHRQ0AIAItAHRBAXFFDQAgAEEAEOoNIAAoAhAiAi0AlAJBAUcNACAEIAIoAuwBIgFByABsaigCBCgCACgCECsDGCEMIAIoAugBIQBEAAAAAAAAAAAhCwNAIAAgAU4NASALIAFByABsIARqQcQAaygCACgCACgCECsDGCINIAyhECMhCyABQQFrIQEgDSEMDAALAAsCQCACLQCUAkEBRw0AIAIoAugBIQggAigC7AEhAwNAIAMiACAITA0BIAQgAEEBayIDQcgAbGoiASgCAEEATA0AIAEoAgQoAgAoAhAgCyAEIABByABsaigCBCgCACgCECsDGKA5AxgMAAsACyACQcABaiEBA0AgASgCACIABEAgACgCECIAIAQgACgC9AFByABsaigCBCgCACgCECsDGDkDGCAAQbgBaiEBDAELCwv4NAMQfwh8AX4jAEEQayIPJAACQCAAKAIQKALAAUUNACAAEIcIIAAQ9Q1BrNgKLQAAQQFGBEAjAEGgAWsiCCQAAkAgACgCECIBKALsASABKALoAWtBAkgNACABKALEASEEQQEhAgNAIAQgAkEBaiIFQcgAbGooAgAEQEEAIQMDQCAEIAJByABsIglqIgYoAgAgA0wEQCAFIQIMAwUCQCAGKAIEIANBAnRqKAIAIgsQgA5FDQAgAyEBA0AC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QcD7Ci0AAEHA+wpBAToAAEEBcQ0EQZnmA0EAECogBRAhIQMgABCBAiEFIAIgCBAhNgLoBCACQbbfAUHUngMgBRs2AuQEIAIgAzYC4ARBl+8DIAJB4ARqEH8MBAsDQCADIAtGBEAgB0EBcQRAIAJB2O0JQeDtCSAAEIECGygCADYCjAVBACEDQeb8ACACQYwFakEAEOIBIgdBkCZBmAJBARA1GiAHQQBBufQAQZWABRAiGkEBQeAAEBohCSAHKAIQIgQgCTYCCCAJIAAoAhAiBigCCCIKKwMAOQMAIAkgCisDGDkDGCAEIAYtAHM6AHMgBCAGKAJ0QX9zQQFxNgJ0IAQgBigC+AE2AvgBIAQgBigC/AE2AvwBQQAhBgNAIAAQOUEBIAYQ5gMiBgRAIAYoAgwQdSAGKAIMIQQgBigCCCEJBH8gB0EBIAkgBBDoAwUgB0EBIAkgBBAiCxoMAQsLA0AgABA5QQIgAxDmAyIDBEAgAygCDBB1IAMoAgwhBCADKAIIIQYEfyAHQQIgBiAEEOgDBSAHQQIgBiAEECILGgwBCwsgB0ECQb0cQQAQIkUEQCAHQQJBvRxBlYAFECIaCyAHQQJBgRxBABAiRQRAIAdBAkGBHEGVgAUQIhoLQdzYCigCACEgQcDYCigCACEhQczZCigCACEiQZjZCigCACEXQbzZCigCACEwQbjZCigCACExQbDZCigCACEyQbTZCigCACEzQajZCigCACE0QaTZCigCACE1QazZCigCACE2QaDZCigCACE3QZTZCigCACE4QZDZCigCACE5QYzZCigCACE6QYjZCigCACE7QYTZCigCACE8QZzZCigCACE9QfjYCigCACE+QfTYCigCACE/QfDYCigCACFAQYTaCigCACFBQbjaCigCACFCQdDaCigCACFDQbzaCigCACFEQcDaCigCACFFQcTaCigCACFGQajaCigCACFHQYDaCigCACFIQbTaCigCACFJQdTaCigCACFKQfTZCigCACFLQfjZCigCACFMQfzZCigCACFNQejZCigCACFOQeTZCigCACFPQbDaCigCACFQQazaCigCACFRQYjaCigCACFSQZzaCigCACFTQZzaCkEANgIAQYjaCiAHQQJBzDdBABAiNgIAQazaCiAHQQJB0rABQQAQIjYCAEGw2gogB0ECQZfvAEEAECI2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AEGQzgBOGyISQQVsQQNqEE0iAEUNASAAIAIgDiACayIEQQFqIgUQICIAIBJBA2pBBG1BAnRqIBQgBUECdCIGECAhFCAKQdAGaiACRwRAIAIQGAsgBSASTg0DIAAgBGohDiAGIBRqQQRrIQcgACECCyANQQZGDQQCfwJAAkACQAJAIA1BsJAFai0AACIJQe4BRg0AAn8gAUF+RgRAAn8jAEEwayIMJAAgAyAKQZwIajYCXCADKAIoRQRAIANBATYCKCADKAIsRQRAIANBATYCLAsgAygCBEUEQCADQazzCCgCADYCBAsgAygCCEUEQCADQbDzCCgCADYCCAsCQCADKAIUIgAEQCAAIAMoAgxBAnRqKAIADQELIAMQvgkgAygCBCADELgJIQAgAygCFCADKAIMQQJ0aiAANgIACyADEO8ECyADQcQAaiEYIANBJGohDwNAIAMoAiQiCCADLQAYOgAAIAMoAhQgAygCDEECdGooAgAoAhwgAygCLGohACAIIQUDQCAFLQAAQaCABWotAAAhASAAQQF0QaCCBWovAQAEQCADIAU2AkQgAyAANgJACwNAIAFB/wFxIQECQANAIAAgAEEBdCIEQYCIBWouAQAgAWpBAXQiBkHggwVqLgEARg0BIARB4IkFai4BACIAQd0ASA0ACyABQcCLBWotAAAhAQwBCwsgBUEBaiEFIAZBgIwFai4BACIAQQF0QYCIBWovAQBB2wFHDQAgACEBA0AgAUEBdEGgggVqLwEAIgBFBEAgAygCRCEFIAMoAkBBAXRBoIIFai8BACEACyADIAg2AlAgAyAFIAhrNgIgIAMgBS0AADoAGCAFQQA6AAAgAyAFNgIkIADBIQACfwNAAkBBACEBAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAOKQABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQnJycnJQsgBSADLQAYOgAAIAMoAkAhASAYDC4LIAMoAiAiAEEASg0kQX8hAQwlCyADKAIgIgBBAEoEQCADKAIUIAMoAgxBAnRqKAIAIAMoAlAgAGpBAWstAABBCkY2AhwLIAMoAgAiACAAKAIU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AygCACACIAMpAgg3A+ADIAIgAykCADcD2AMgAkHYA2ogBRAZQQJ0aigCACgCMCsDCCADKAIAIAIgAykCCDcD0AMgAiADKQIANwPIAyACQcgDaiAAEBlBAnRqKAIAKAIwKwMIYgshBCADKAIAIAIgAykCCDcDwAMgAiADKQIANwO4AyACQbgDaiAFEBlBAnRqKAIAIQcgAygCACEGIAIgAykCCDcDsAMgAiADKQIANwOoAyACQagEaiIIIAcgBiACQagDaiAAEBlBAnRqKAIAQQAgBBCWDg0FIAMoAgAgAiADKQIINwOgAyACIAMpAgA3A5gDIAIoAqwEIQkgAigCqAQhBiACQZgDaiAFEBlBAnRqKAIAIQcgAygCACELIAIgAykCCDcDkAMgAiADKQIANwOIAyAIIAcgCyACQYgDaiAAEBlBAnRqKAIAQQEgBEUiBxCWDg0FIAIoAqwEIQggAigCqAQhCwJAAkACQCAJQQFqDgMAAQIDCyADKAIAIAIgAykCCDcDYCACIAMpAgA3A1ggAkHYAGogABAZQQJ0aigCACADKAIAIAIgAykCCDcDUCACIAMpAgA3A0ggAkHIAGogBRAZQQJ0aigCACAEQQAgBiABELkCIAMoAgAgAkFAayADKQIINwMAIAIgAykCADcDOCACQThqIAAQGUECdGooAgAgAygCACACIAMpAgg3AzAgAiADKQIANwMoIAJBKGogBRAZQQJ0aigCACAHQQEgCyABELkCIAhBAUcNAiADKAIAIAIgAykCCDcDICACIAMpAgA3AxggAkEYaiAFEBlBAnRqKAIAIAMoAgAgAiADKQIINwMQIAIgAykCADcDCCACQQhqIAAQGUECdGooAgAgByABEJUODAILAkACQAJAIAhBAWoOAwABAgQLIAMoAgAgAiADKQIINwOgASACIAMpAgA3A5gBIAJBmAFqIAAQGUECdGooAgAgAygCACACIAMpAgg3A5ABIAIgAykCADcDiAEgAkGIAWogBRAZQQJ0aigCACAEQQAgBiABELkCIAMoAgAgAiADKQIINwOAASACIAMpAgA3A3ggAkH4AGogABAZQQJ0aigCACADKAIAIAIgAykCCDcDcCACIAMpAgA3A2ggAkHoAGogBRAZQQJ0aigCACAHQQEgCyABELkCDAMLIAMoAgAgAiADKQIINwPgASACIAMpAgA3A9gBIAJB2AFqIAUQGUECdGooAgAgAygCACACIAMpAgg3A9ABIAIgAykCADcDyAEgAkHIAWogABAZQQJ0aigCAEEAIAQgBiABELkCIAMoAgAgAiADKQIINwPAASACIAMpAgA3A7gBIAJBuAFqIAUQGUECdGooAgAgAygCACACIAMpAgg3A7ABIAIgAykCADcDqAEgAkGoAWogABAZQQJ0aigCAEEBIAcgCyABELkCDAILIAMoAgAgAiADKQIINwOgAiACIAMpAgA3A5gCIAJBmAJqIAUQGUECdGooAgAgAygCACACIAMpAgg3A5ACIAIgAykCADcDiAIgAkGIAmogABAZQQJ0aigCAEEAIAQgBiABELkCIAMoAgAgAiADKQIINwOAAiACIAMpAgA3A/gBIAJB+AFqIAUQGUECdGooAgAgAygCACACIAMpAgg3A/ABIAIgAykCADcD6AEgAkHoAWogABAZQQJ0aigCAEEBIAcgCyABELkCDAELIAMoAgAgAiADKQIINwOAAyACIAMpAgA3A/gCIAJB+AJqIAUQGUECdGooAgAgAygCACACIAMpAgg3A/ACIAIgAykCADcD6AIgAkHoAmogABAZQQJ0aigCAEEAIAQgBiABELkCIAMoAgAgAiADKQIINwPgAiACIAMpAgA3A9gCIAJB2AJqIAUQGUECdGooAgAgAygCACACIAMpAgg3A9ACIAIgAykCADcDyAIgAkHIAmogABAZQQJ0aigCAEEBIAcgCyABELkCIAhBf0cNACADKAIAIAIgAykCCDcDwAIgAiADKQIANwO4AiACQbgCaiAFEBlBAnRqKAIAIAMoAgAgAiADKQIINwOwAiACIAMpAgA3A6gCIAJBqAJqIAAQGUECdGooAgAgByABEJUOCyAAQQFqIQAgCigAICEEDAALAAsACwsgDCgCACEMDAELCyACQbAEaiQAQX9BACAMGwurAgELfyMAQSBrIgEkACAAELABIQYDQAJAIAZFDQAgBigCEBCwASECA0AgAgRAIAIoACAiBwRAIAJBGGohAyAHQQFrIQogAigCMCEIQQAhAANAAkAgAEEBaiIJIQQgACAKRg0AA0AgBCAHRgRAIAkhAAwDCyADKAIAIAEgAykCCDcDGCABIAMpAgA3AxAgAUEQaiAAEBlBAnRqKAIAIAMoAgAgASAD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IANBoAFqEDIgAUEBaiEBDAELAAsAC0G+mANBjbwBQcwDQYCJARAAAAsgDiADKAKUAkHIABAaIg82AgggDiADKAKUAiIRNgIAQQAhAQNAIAEgEUYEQCAGEBggAysDsAIhGyADKwOoAiEcIAMrA6ACIR0gAysDmAIhH0EBQRgQGiIEQQA2AgAgBCARQQJ0IgBBAnJBKBAaNgIQQZzNCkG06wkoAgAQkgEhC0G0zQpBtOsJKAIAEJIBIQkgAEEgEBohDCAAQQQQGiEGQQAhAANAIAAgEUYEQEEAIQYDQCAGIApHBEAgA0IANwPIAiADQgA3A8ACIANCADcDuAIgAyACIAZByABsaiIBKQMwNwPYAiADIAEpAyg3A9ACIAkgA0HQAmpBgAQgCSgCABEDACEAA0ACQCAARQ0AIAArAwggASsDOGNFDQAgAyAAKAIANgLMAiADQbgCakEEECchByADKAK4AiAHQQJ0aiADKALMAjYCACAAKAIAIAE2AhggCSAAQQggCSgCABEDACEADAELCyALIANB0AJqQYAEIAsoAgARAwAhAANAAkAgASsDQCEbIABFDQAgACsDECAbY0UNACADIAAoAgA2AswCIANBuAJqQQQQJyEHIAMoArgCIAdBAnRqIAMoAswCNgIAIAAoAgAgATYCGCALIABBCCALKAIAEQMAIQAMAQsLIAMgGzkD2AIgCSADQdACakGABCAJKAIAEQMAIQADQAJAIAErAzghGyAARQ0AIAArAwggG2NFDQAgAyAAKAIANgLMAiADQbgCakEEECchByADKAK4AiAHQQJ0aiADKALMAjYCACAAKAIAIAE2AhQgCSAAQQggCSgCABEDACEADAELCyADIBs5A9ACIAMgASsDMDkD2AIgCyADQdACakGABCALKAIAEQMAIQADQAJAIABFDQAgACsDECABKwNAY0UNACADIAAoAgA2AswCIANBuAJqQQQQJyEHIAMoArgCIAdBAnRqIAMoAswCNgIAIAAoAgAgATYCFCALIABBCCALKAIAEQMAIQAMAQsLIANBuAJqIAFBJGogAUEgakEEEMYBIAEoAiAiACAQIAAgEEsbIRAgBkEBaiEGDAELCwNAIAogDUYEQCAEKAIQIAQoAgAiAEEobGoiASAANgIgIAEgAEEBajYCSEEAIQIgBCgCAEEGbCAQQQF0akEE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BiAEQdgXaiACKQIINwMAIAQgAikCADcD0BcCQCAGIARB0BdqIAwQGUHIAGxqKAIwIgZBAWtBfUsNACACKAIAIARByBdqIAIpAgg3AwAgBCACKQIANwPAFyAEQcAXaiAGEBlByABsaigCLCAFRw0AIAIoAgAgBEG4F2ogAikCCDcDACAEIAIpAgA3A7AXIARBsBdqIAYQGUHIAGxqIAw2AiwLIAIoAgAhBiAEQagXaiACKQIINwMAIAQgAikCADcDoBcCQCAGIARBoBdqIAwQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARBmBdqIAIpAgg3AwAgBCACKQIANwOQFyAEQZAXaiAGEBlByABsaigCKCAFRw0AIAIoAgAgBEGIF2ogAikCCDcDACAEIAIpAgA3A4AXIARBgBdqIAYQGUHIAGxqIAw2AigLIAIoAgAhBiAEQfgWaiACKQIINwMAIAQgAikCADcD8BYCQCAGIARB8BZqIAwQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARB6BZqIAIpAgg3AwAgBCACKQIANwPgFiAEQeAWaiAGEBlByABsaigCLCAFRw0AIAIoAgAgBEHYFmogAikCCDcDACAEIAIpAgA3A9AWIARB0BZqIAYQGUHIAGxqIAw2AiwLIAMQ8AEhCSADEPABIQcgAigCACAEQcgWaiACKQIINwMAIAQgAikCADcDwBYgBEHAFmogBRAZQcgAbGooAjghBiADKAIAIARBuBZqIAMpAgg3AwAgBCADKQIANwOwFiAEQbAWaiAGEBlBKGxqQQI2AgAgAygCACAEQagWaiADKQIINwMAIAQgAykCADcDoBYgBEGgFmogBhAZQShsaiILIAQpA9gZNwMIIAsgBEHgGWopAwA3AxAgAygCACAEQZgWaiADKQIINwMAIAQgAykCADcDkBYgBEGQFmogBhAZQShsaiAANgIEIAMoAgAgBEGIFmogAykCCDcDACAEIAMpAgA3A4AWIARBgBZqIAYQGUEobGogBzYCICADKAIAIARB+BVqIAMpAgg3AwAgBCADKQIANwPwFSAEQfAVaiAGEBlBKGxqIAk2AiQgAygCACAEQegVaiADKQIINwMAIAQgAykCADcD4BUgBEHgFWogCRAZQShsakEDNgIAIAMoAgAgBEHYFWogAykCCDcDACAEIAMpAgA3A9AVIARB0BVqIAkQGUEobGogBTYCGCADKAIAIARByBVqIAMpAgg3AwAgBCADKQIANwPAFSAEQcAVaiAJEBlBKGxqIAY2AhwgAygCACAEQbgVaiADKQIINwMAIAQgAykCADcDsBUgBEGwFWogBxAZQShsakEDNgIAIAMoAgAgBEGoFWogAykCCDcDACAEIAMpAgA3A6AVIARBoBVqIAcQGUEobGogDDYCGCADKAIAIARBmBVqIAMpAgg3AwAgBCADKQIANwOQFSAEQZAVaiAHEBlBKGxqIAY2AhwgAigCACAEQYgVaiACKQIINwMAIAQgAikCADcDgBUgBEGAFWogBRAZQcgAbGogCTYCOCACKAIAIARB+BRqIAIpAgg3AwAgBCACKQIANwPwFCAEQfAUaiAMEBlByABsaiAHNgI4CyABQTBBLCAKGyIQIAEgAEE4bGpqKAIAQThsai0AICELIAggBEHYGWogBCgCgBogASADEPIFIQkgC0UEQCACELcDIQUgAigCACEGIARB6BRqIAIpAgg3AwAgBCACKQIANwPgFCACQRhqIAYgBEHgFGogCRAZQcgAbGpByAAQICEHIARB2BRqIAIpAgg3AwAgBCACKQIANwPQFCAEQdAUaiAFEBkhBgJAAkAgAigCECIKDgIBAwALIARBiBRqIg0gAigCACAGQcgAbGpByAAQIBogDSAKEQEACyACKAIAIAZByABsaiAHQcgAECAaIAIoAgAgBEGAFGogAikCCDcDACAEIAIpAgA3A/gTIARB+BNqIAkQGUHIAGxqIgYgCCkDADcDGCAGIAgpAwg3AyAgAigCACAEQfATaiACKQIINwMAIAQgAikCADcD6BMgBEHoE2ogBRAZQcgAbGoiBiAIKQMANwMIIAYgCCkDCDcDECACKAIAIARB4BNqIAIpAgg3AwAgBCACKQIANwPYEyAEQdgTaiAJEBlByABsaiAFNgIwIAIoAgAgBEHQE2ogAikCCDcDACAEIAIpAgA3A8gTIARByBNqIAkQGUHIAGxqQQA2AjQgAigCACAEQcATaiACKQIINwMAIAQgAikCADcDuBMgBEG4E2ogBRAZQcgAbGogCTYCKCACKAIAIARBsBNqIAIpAgg3AwAgBCACKQIANwOoEyAEQagTaiAFEBlByABsakEANgIsIAIoAgAhBiAEQaATaiACKQIINwMAIAQgAikCADcDmBMCQCAGIARBmBNqIAUQGUHIAGxqKAIwIgZBAWtBfUsNACACKAIAIARBkBNqIAIpAgg3AwAgBCACKQIANwOIEyAEQYgTaiAGEBlByABsaigCKCAJRw0AIAIoAgAgBEGAE2ogAikCCDcDACAEIAIpAgA3A/gSIARB+BJqIAYQGUHIAGxqIAU2AigLIAIoAgAhBiAEQfASaiACKQIINwMAIAQgAikCADcD6BICQCAGIARB6BJqIAUQGUHIAGxqKAIwIgZBAWtBfUsNACACKAIAIARB4BJqIAIpAgg3AwAgBCACKQIANwPYEiAEQdgSaiAGEBlByABsaigCLCAJRw0AIAIoAgAgBEHQEmogAikCCDcDACAEIAIpAgA3A8gSIARByBJqIAYQGUHIAGxqIAU2AiwLIAIoAgAhBiAEQcASaiACKQIINwMAIAQgAikCADcDuBICQCAGIARBuBJqIAUQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARBsBJqIAIpAgg3AwAgBCACKQIANwOoEiAEQagSaiAGEBlByABsaigCKCAJRw0AIAIoAgAgBEGgEmogAikCCDcDACAEIAIpAgA3A5gSIARBmBJqIAYQGUHIAGxqIAU2AigLIAIoAgAhBiAEQZASaiACKQIINwMAIAQgAikCADcDiBICQCAGIARBiBJqIAUQGUHIAGxqKAI0IgZBAWtBfUsNACACKAIAIARBgBJqIAIpAgg3AwAgBCACKQIANwP4ESAEQfgRaiAGEBlByABsaigCLCAJRw0AIAIoAgAgBEHwEWogAikCCDcDACAEIAIpAgA3A+gRIARB6BFqIAYQGUHIAGxqIAU2AiwLIAMQ8AEhByADEPABIQogAigCACAEQeARaiACKQIINwMAIAQgAikCADcD2BEgBEHYEWogCRAZQcgAbGooAjghBiADKAIAIARB0BFqIAMpAgg3AwAgBCADKQIANwPIESAEQcgRaiAGEBlBKGxqQQI2AgAgAygCACAEQcARaiADKQIINwMAIAQgAykCADcDuBEgBEG4EWogBhAZQShsaiIOIAgpAwA3AwggDiAIKQMINwMQIAMoAgAgBEGwEWogAykCCDcDACAEIAMpAgA3A6gRIARBqBFqIAYQGUEobGogADYCBCADKAIAIARBoBFqIAMpAgg3AwAgBCADKQIANwOYESAEQZgRaiAGEBlBKGxqIAo2AiAgAygCACAEQZARaiADKQIINwMAIAQgAykCADcDiBEgBEGIEWogBhAZQShsaiAHNgIkIAMoAgAgBEGAEWogAykCCDcDACAEIAMpAgA3A/gQIARB+BBqIAcQGUEobGpBAzYCACADKAIAIARB8BBqIAMpAgg3AwAgBCADKQIANwPoECAEQegQaiAHEBlBKGxqIAk2AhggAygCACAEQeAQaiADKQIINwMAIAQgAykCADcD2BAgBEHYEGogBxAZQShsaiAGNgIcIAMoAgAgBEHQEGogAykCCDcDACAEIAMpAgA3A8gQIARByBBqIAoQGUEobGpBAzYCACADKAIAIARBwBBqIAMpAgg3AwAgBCADKQIANwO4ECAEQbgQaiAKEBlBKGxqIAU2AhggAygCACAEQbAQaiADKQIINwMAIAQgAykCADcDqBAgBEGoEGogChAZQShsaiAGNgIcIAIoAgAgBEGgEGogAikCCDcDACAEIAIpAgA3A5gQIARBmBBqIAkQGUHIAGxqIAc2AjggAigCACAEQZAQaiACKQIINwMAIAQgAikCADcDiBAgBEGIEGogBRAZQcgAbGogCjYCOAsgDyAQaiETIAJBGGohFEEAIRAgDCEFQQAhDgNAAkACQCAFIghBAWtBfUsNACACKAIAIQUgBEGAEGogAikCCDcDACAEIAIpAgA3A/gPIARB+A9qIAgQGSEGIAIoAgAhByAEQfAPaiACKQIINwMAIAQgAikCADcD6A8gBEHoD2ogCRAZIQoCQCAFIAZByABsaiIFKwAgIhUgByAKQcgAbGoiBisAICIWREivvJry13o+oGQNACAVIBZESK+8mvLXer6gY0UgBSsAGCIXIAYrABgiGGRxDQAgFSAWoZlESK+8mvLXej5lRSAXIBihmURIr7ya8td6PmVFcg0BCyACKAIAIARB4A9qIAIpAgg3AwAgBCACKQIANwPYDyAEQdgPaiAIEBlByABsaigCOCEFIAMQ8AEhByADEPABIQogAygCACAEQdAPaiADKQIINwMAIAQgAykCADcDyA8gBEHID2ogBRAZQShsakEBNgIAIAMoAgAgBEHAD2ogAykCCDcDACAEIAMpAgA3A7gPIARBuA9qIAUQGUEobGogADYCBCADKAIAIARBsA9qIAMpAgg3AwAgBCADKQIANwOoDyAEQagPaiAFEBlBKGxqIAc2AiAgAygCACAEQaAPaiADKQIINwMAIAQgAykCADcDmA8gBEGYD2ogBRAZQShsaiAKNgIkIAMoAgAgBEGQD2ogAykCCDcDACAEIAMpAgA3A4gPIARBiA9qIAcQGUEobGpBAzYCACADKAIAIARBgA9qIAMpAgg3AwAgBCADKQIANwP4DiAEQfgOaiAHEBlBKGxqIAg2AhggAygCACAEQfAOaiADKQIINwMAIAQgAykCADcD6A4gBEHoDmogBxAZQShsaiAFNgIcIAMoAgAgBEHgDmogAykCCDcDACAEIAMpAgA3A9gOIARB2A5qIAoQGUEobGpBAzYCACACELcDIQYgAygCACAEQdAOaiADKQIINwMAIAQgAykCADcDyA4gBEHIDmogChAZQShsaiAGNgIYIAIoAgAgBEHADmogAikCCDcDACAEIAIpAgA3A7gOIARBuA5qIAYQGUHIAGxqQQE6AEQgAygCACAEQbAOaiADKQIINwMAIAQgAykCADcDqA4gBEGoDmogChAZQShsaiAFNgIcIAIoAgAgBEGgDmogAikCCDcDACAEIAIpAgA3A5gOIARBmA5qIAgQGSACKAIAIREgBEGQDmogAikCCDcDACAEIAIpAgA3A4gOIARBiA5qIAkQGSESQcgAbGoiBSsAICEVIBEgEkHIAGxqIg0rACAhFiAFKwAYIRcgDSsAGCEYIAIoAgAhBSAEQYAOaiACKQIINwMAIAQgAikCADcD+A0gFCAFIARB+A1qIAgQGUHIAGxqQcgAECAhDSAEQfANaiACKQIINwMAIAQgAikCADcD6A0gBEHoDWogBhAZIQUCQAJAIAIoAhAiEQ4CAQUACyAEQaANaiISIAIoAgAgBUHIAGxqQcgAECAaIBIgEREBAAsgBiAQIBcgGKGZREivvJry13o+ZRsgECAVIBahmURIr7ya8td6PmUbIRAgBiAOIAggDEYbIQ4gAigCACAFQcgAbGogDUHIABAgGiACKAIAIARBmA1qIAIpAgg3AwAgBCACKQIANwOQDSAEQZANaiAIEBlByABsaiAHNgI4IAIoAgAgBEGIDWogAikCCDcDACAEIAIpAgA3A4ANIARBgA1qIAYQGUHIAGxqIAo2AjggAigCACAEQfgMaiACKQIINwMAIAQgAikCADcD8AwgBEHwDGogCBAZQcgAbGooAjBBAWtBfkkNASACKAIAIARB6AxqIAIpAgg3AwAgBCACKQIANwPgDCAEQeAMaiAIEBlByABsaigCNEEBa0F+SQ0BQdqCBEETQQFBqPMIKAIAEDsaCyAAIAwgCUEBIAIgAxCtDiAAIA4gEEECIAIgAxCtDiAPQQE6ACAgBEGQGmokAA8LIAIoAgAhBSAEQdgMaiACKQIINwMAIAQgAikCADcD0AwCfwJAIAUgBEHQDGogCBAZQcgAbGooAjBBAWtBfUsNACACKAIAIARByAxqIAIpAgg3AwAgBCACKQIANwPADCAEQcAMaiAIEBlByABsaigCNEEBa0F+SQ0AIARB2BlqIgcgASACIAggBhCNCCACKAIAIARBuAxqIAIpAgg3AwAgBCACKQIANwOwDCAEQbAMaiAIEBlByABsaisDICEVIAIoAgAhBSAEQagMaiACKQIINwMAIAQgAikCADcDoAwCQAJAIBUgBSAEQaAMaiAJEBlByABsaisDIKGZREivvJry13o+ZUUNACACKAIAIARBmAxqIAIpAgg3AwAgBCACKQIANwOQDCAEQZAMaiAIEBlByABsaisDGCACKAIAIARBiAxqIAIpAgg3AwAgBCACKQIANwOADCAEQYAMaiAJEBlByABsaisDGKGZREivvJry13o+ZUUgC0VyDQACQCATKAIAIgVBAEwNACAFIAEgBxDJBEUNACACKAIAIQUgBEG4C2ogAikCCDcDACAEIAIpAgA3A7ALIAUgBEGwC2ogCBAZQcgAbGooAjAhByAEQagLaiACKQIINwMAIAQgAikCADcDoAsgBSAEQaALaiAHEBlByABsaiAINgIoIAIoAgAgBEGYC2ogAikCCDcDACAEIAIpAgA3A5ALIARBkAtqIAYQGUHIAGxqQX82AjAgAigCACAEQYgLaiACKQIINwMAIAQgAikCADcDgAsgBEGAC2ogBhAZQcgAbGpBfzYCNAwCCyACKAIAIQUgBEH4C2ogAikCCDcDACAEIAIpAgA3A/ALIAUgBEHwC2ogBhAZQcgAbGooAjAhByAEQegLaiACKQIINwMAIAQgAikCADcD4AsgBSAEQeALaiAHEBlByABsaiAGNgIsIAIoAgAgBEHYC2ogAikCCDcDACAEIAIpAgA3A9ALIARB0AtqIAgQGUHIAGxqQX82AjAgAigCACAEQcgLaiACKQIINwMAIAQgAikCADcDwAsgBEHAC2ogCBAZQcgAbGpBfzYCNAwBCyACKAIAIQUgBEH4CmogAikCCDcDACAEIAIpAgA3A/AKIAUgBEHwCmogCBAZQcgAbGooAjAhByAEQegKaiACKQIINwMAIAQgAikCADcD4AoCQCAFIARB4ApqIAcQGUHIAGxqKAIoQQFrQX1LDQAgAigCACEFIARB2ApqIAIpAgg3AwAgBCACKQIANwPQCiAFIARB0ApqIAgQGUHIAGxqKAIwIQcgBEHICmogAikCCDcDACAEIAIpAgA3A8AKIAUgBEHACmogBxAZQcgAbGooAixBAWtBfUsNACACKAIAIQUgBEG4CmogAikCCDcDACAEIAIpAgA3A7AKIAUgBEGwCmogCBAZQcgAbGooAjAhByAEQagKaiACKQIINwMAIAQgAikCADcDoAogBSAEQaAKaiAHEBlByABsaigCKCEHIAIoAgAhBSAEQZgKaiACKQIINwMAIAQgAikCADcDkAogBSAEQZAKaiAIEBlByABsaigCMCEKIARBiApqIAIpAgg3AwAgBCACKQIANwOACiAFIARBgApqIAoQGUHIAGxqIgVBLGogBUEoaiAHIAhGIgcbKAIAIQogAigCACEFIARB+AlqIAIpAgg3AwAgBCACKQIANwPwCSAFIARB8AlqIAgQGUHIAGxqKAIwIQ0gBEHoCWogAikCCDcDACAEIAIpAgA3A+AJIAUgBEHgCWogDRAZQcgAbGogCjYCPCACKAIAIQUgBEHYCWogAikCCDcDACAEIAIpAgA3A9AJIAUgBEHQCWogCBAZQcgAbGooAjAhCiAEQcgJaiACKQIINwMAIAQgAikCADcDwAkgBSAEQcAJaiAKEBlByABsakEBQQIgBxs2AkALIAIoAgAhBSAEQbgJaiACKQIINwMAIAQgAikCADcDsAkgBSAEQbAJaiAIEBlByABsaigCMCEHIARBqAlqIAIpAgg3AwAgBCACKQIANwOgCSAFIARBoAlqIAcQGUHIAGxqIAg2AiggAigCACEFIARBmAlqIAIpAgg3AwAgBCACKQIANwOQCSAFIARBkAlqIAgQGUHIAGxqKAIwIQcgBEGICWogAikCCDcDACAEIAIpAgA3A4AJIAUgBEGACWogBxAZQcgAbGogBjYCLAsgAigCACAEQfgIaiACKQIINwMAIAQgAikCADcD8AggBEHwCGogCBAZQcgAbGpBMGoMAQsgAigCACEFIARB6AhqIAIpAgg3AwAgBCACKQIANwPgCAJAIAUgBEHgCGogCBAZQcgAbGooAjBBAWtBfkkNACACKAIAIARB2AhqIAIpAgg3AwAgBCACKQIANwPQCCAEQdAIaiAIEBlByABsaigCNEEBa0F9Sw0AIARB2BlqIgcgASACIAggBhCNCCACKAIAIARByAhqIAIpAgg3AwAgBCACKQIANwPACCAEQcAIaiAIEBlByABsaisDICEVIAIoAgAhBSAEQbgIaiACKQIINwMAIAQgAikCADcDsAgCQAJAIBUgBSAEQbAIaiAJEBlByABsaisDIKGZREivvJry13o+ZUUNACACKAIAIARBqAhqIAIpAgg3AwAgBCACKQIANwOgCCAEQaAIaiAIEBlByABsaisDGCACKAIAIARBmAhqIAIpAgg3AwAgBCACKQIANwOQCCAEQZAIaiAJEBlByABsaisDGKGZREivvJry13o+ZUUgC0VyDQACQCATKAIAIgVBAEwNACAFIAEgBxDJBEUNACACKAIAIQUgBCACKQIINwPIByAEIAIpAgA3A8AHIAUgBEHAB2ogCBAZQcgAbGooAjQhByAEIAIpAgg3A7gHIAQgAikCADcDsAcgBSAEQbAHaiAHEBlByABsaiAINgIoIAIoAgAgBCACKQIINwOoByAEIAIpAgA3A6AHIARBoAdqIAYQGUHIAGxqQX82AjAgAigCACAEIAIpAgg3A5gHIAQgAikCADcDkAcgBEGQB2ogBhAZQcgAbGpBfzYCNAwCCyACKAIAIQUgBEGICGogAikCCDcDACAEIAIpAgA3A4AIIAUgBEGACGogBhAZQcgAbGooAjQhByAEIAIpAgg3A/gHIAQgAikCADcD8AcgBSAEQfAHaiAHEBlByABsaiAGNgIsIAIoAgAgBCACKQIINwPoByAEIAIpAgA3A+AHIARB4AdqIAgQGUHIAGxqQX82AjAgAigCACAEIAIpAgg3A9gHIAQgAikCADcD0AcgBEHQB2ogCBAZQcgAbGpBfzYCNAwBCyACKAIAIQUgBCACKQIINwOIByAEIAIpAgA3A4AHIAUgBEGAB2og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IARB0AVqIBIQGUEobGpBAzYCACAEIAApAwA3A8gFIAQgBCkDoAg3A8AFIAQoAqAIIARBwAVqIBIQGUEobGogBzYCHCAFELcDIQcgBRC3AyEKIAUQtwMhDCAFELcDIQ0gBSgCACAEIAUpAgg3A7gFIAQgBSkCADcDsAUgBEGwBWogBxAZIAQgACkDADcDqAUgBCAEKQOgCDcDoAVByABsaiIIIAQoAqAIIARBoAVqIAkQGUEobGoiCykDCDcDCCAIIAspAxA3AxAgBSgCACAEIAUpAgg3A5gFIAQgBSkCADcDkAUgBEGQBWogChAZIAQgACkDADcDiAUgBCAEKQOgCDcDgAVByABsaiIIIAQoAqAIIARBgAVqIAkQGUEobGoiCykDCDcDCCAIIAspAxA3AxAgBSgCACAEIAUpAgg3A/gEIAQgBSkCADcD8AQgBEHwBGogDRAZIAQgACkDADcD6AQgBCAEKQOgCDcD4ARByABsaiIIIAQoAqAIIARB4ARqIAkQGUEobGoiCykDCDcDGCAIIAspAxA3AyAgBSgCACAEIAUpAgg3A9gEIAQgBSkCADcD0AQgBEHQBGogBxAZIAQgACkDADcDyAQgBCAEKQOgCDcDwARByABsaiIIIAQoAqAIIARBwARqIAYQGUEobGoiCykDCDcDGCAIIAspAxA3AyAgBSgCACAEIAUpAgg3A7gEIAQgBSkCADcDsAQgBEGwBGogChAZIAQgACkDADcDqAQgBCAEKQOgCDcDoARByABsaiIIIAQoAqAIIARBoARqIAYQGUEobGoiCykDCDcDGCAIIAspAxA3AyAgBSgCACAEIAUpAgg3A5gEIAQgBSkCADcDkAQgBEGQBGogDBAZIAQgACkDADcDiAQgBCAEKQOgCDcDgARByABsaiIIIAQoAqAIIARBgARqIAYQGUEobGoiBikDCDcDCCAIIAYpAxA3AxAgBSgCACAEIAUpAgg3A/gDIAQgBSkCADcD8AMgBEHwA2ogDRAZQcgAbGpC//////////f/ADcDECAFKAIAIAQgBSkCCDcD6AMgBCAFKQIANwPgAyAEQeADaiANEBlByABsakL/////////9/8ANwMIIAUoAgAgBCAFKQIINwPYAyAEIAUpAgA3A9ADIARB0ANqIAwQGUHIAGxqQv////////93NwMgIAUoAgAgBCAF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AkAgBiAFQShsaiIBKAIgRQ0AIAMgAikDGDcDmAEgAyACKQMQNwOQASADIAIpAwg3A4gBIAMgAikDADcDgAEgAyABKQMINwNoIAMgASkDEDcDcCADIAEpAxg3A3ggAyABKQMANwNgIANBgAFqIANB4ABqEIoDRQ0AIAEoAiAhASADIAIpAxg3A1ggAyACKQMQNwNQIAMgAikDCDcDSCADIAIpAwA3A0AgACABIANBQGsQuA4hByAEIgFFBEAgByEEDAELA0AgASIIKAIAIgENAAsgCCAHNgIACyAFQQFqIQUMAAsACyADQaABaiQAIAQLfQEEfyAAQShqIQICQCAAKAIEQQBKBEADQCABQcAARg0CIAIgAUEobGoiAygCACIEBEAgBBC5DiADKAIAEBggACABELoOCyABQQFqIQEMAAsACwNAIAFBwABGDQEgAiABQShsaigCAARAIAAgARC6DgsgAUEBaiEBDAALAAsLXQACQCAARSABQcAAT3JFBEAgACABQShsaiIBKAIoRQ0BIAFBCGoQuw4gACAAKAIAQQFrNgIADwtBy9sBQau9AUGtAUHK+gAQAAALQfWlAUGrvQFBrgFByvoAEAAACw4AIAAQvQ4gAEEANgIgCzoBAX8gAEKAgICAcDcDACAAQQhqIQFBACEAA0AgAEHAAEcEQCABIABBKGxqELsOIABBAWohAAwBCwsLJQEBfwNAIAFBBEcEQCAAIAFBA3RqQgA3AwAgAUEBaiEBDAELCwvyAwEDfyMAQfAAayIDJAACQAJAAkACQANAIAQgACgACE8NASAAKAIAIAMgACkCCDcDSCADIAApAgA3A0AgA0FAayAEEBlBHGxqKAIAIgVFDQMgAkUNBCAFIAIQTARAIARBAWohBAwBCwsgACgCACADIAApAgg3AzggAyAAKQIANwMwIANBMGogBBAZQRxsaiABNgIYIAAoAgAgAyAAKQIINwMoIAMgACkCADcDICADQSBqIAQQGUEcbGpBBGpBBBAnIQEgACgCACADIAApAgg3AxggAyAAKQIANwMQIANBEGogBBAZQRxsaigCGCECIAAoAgAgAyAAKQIINwMIIAMgACkCADcDACADIAQQGUEcbGooAgQgAUECdGogAjYCAAwBCyADQQA2AmggA0IANwJgIAMgATYCbCADQgA3AlggAyACNgJUIANB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ASgCsAIgAEEcbGoiACkCCDcDOCABQUBrIAApAhA3AwAgASAAKAIYNgJIIAEgACkCADcDMCABQTBqIAMRAQALIAJBAWohAgwBCwALAAUgASABKQLoAjcDKCABIAEpAuACNwMgIAFBIGogAhAZIQACQAJAIAEoAvACIgMOAgEHAAsgASABKALgAiAAQRxsaiIAKQIINwMIIAEgACkCEDcDECABIAAoAhg2AhggASAAKQIANwMAIAEgAxEBAAsgAkEBaiECDAELAAsACyAAIAUQbiECA0BBACEDAkACQAJAIAJFBEBBACECA0AgAiABKALoAiIETw0CIAEgASkC6AI3A5ABIAEgASkC4AI3A4gBIAEoAuACIAFBiAFqIAIQGUEcbGooAAxBAk8EQCABIAEpAugCNwOAASABIAEpAuACNwN4IAEgASgC4AIgAUH4AGogAhAZQRxsaiIEKQIUNwNwIAEgBCkCDDcDaCABIAQpAgQ3A2AgBSABQeAAahC/DgsgAkEBaiECDAALAAsgAkFQQQAgAigCAEEDcSIDQQJHG2ooAigiBCACIAJBMGoiBiADQQNGGygCKEYNAgJAIAQgBUcNAEGs2gooAgAiBEUNACACIAQQRCIDLQAADQIgAigCAEEDcSEDCyACIAYgA0EDRhsoAiggBUcNAkGw2gooAgAiA0UNAiACIAMQRCIDLQAARQ0CIAFBsAJqIAIgAxC+DgwCCwNAAkAgAyAETwRAIAFB4AJqQRwQM0EAIQNBACECA0AgAiABKAK4AiIETw0CIAEgASkCuAI3A/gBIAEgASkCsAI3A/ABIAEoArACIAFB8AFqIAIQGUEcbGooAAxBAk8EQCABIAEpArgCNwPoASABIAEpArACNwPgASABIAEoArACIAFB4AFqIAIQGUEcbGoiBCkCFDcD2AEgASAEKQIMNwPQASABIAQpAgQ3A8gBIAUgAUHIAWoQvw4LIAJBAWohAgwACwALIAEgASkC6AI3A8ABIAEgASkC4AI3A7gBIAFBuAFqIAMQGSECAkACQCABKALwAiIEDgIBCQALIAEgASgC4AIgAkEcbGoiAikCCDcDoAEgASACKQIQNwOoASABIAIoAhg2ArABIAEgAikCADcDmAEgAUGYAWogBBEBAAsgA0EBaiEDIAEoAugCIQQMAQsLA0AgAyAETwRAIAFBsAJqQRwQMyAAIAUQHSEFDAUFIAEgASkCuAI3A6gCIAEgASkCsAI3A6ACIAFBoAJqIAMQGSECAkACQCABKALAAiIEDgIBCQALIAEgASgCsAIgAkEcbGoiAikCCDcDiAIgASACKQIQNwOQAiABIAIoAhg2ApgCIAEgAikCADcDgAIgAUGAAmogBBEBAAsgA0EBaiEDIAEoArgCIQQMAQsACwALIAFB4AJqIAIgAxC+DgsgACACIAUQciECDAALAAsACyABQZADaiQADwtBvoAEQcIAQQFBqPMIKAIAEDsaEDwACxwBAX9BASECIAAgARDQDgR/QQEFIAAgARDPDgsLQAECfwJAIAEgACgCAE8NACACIAAoAgQiBE8NACAAKAIIIAEgBGwgAmoiAEEDdmotAAAgAEEHcXZBAXEhAwsgAwvOAgEKfwJAAkAgAARAIAAoAgAiBSABSyAAKAIEIgQgAktxRQRAIAQgAkEBaiIDIAMgBEkbIgQgBSABQQFqIgMgAyAFSRsiBWwiA0EDdiADQQdxQQBHahDGAyEHIAAoAgAhCANAIAYgCEcEQCAEIAZsIQkgACgCBCEKQQAhAwNAIAMgCkYEQCAGQQFqIQYMAwsgACAGIAMQwg4EQCAHIAMgCWoiC0EDdmoiDCAMLQAAQQEgC0EHcXRyOgAACyADQQFqIQMMAAsACwsgACgCCBAYIAAgBzYCCCAAIAQ2AgQgACAFNgIACyABIAVPDQEgAiAETw0CIAAoAgggASAEbCACaiIAQQN2aiIBIAEtAABBASAAQQdxdHI6AAAPC0Gy1AFBurgBQccAQZoiEAAAC0G6JkG6uAFB5ABBmiIQAAALQdwsQbq4AUHlAEGaIhAAAAuqAgEHfyMAQRBrIgQkACAAKAIAIgMoAhAhBSADKAIIIQYgAgRAEJ4OCyAFQRhqIgIhAANAIAAoAgAiAARAIAAoAghFBEAQng4LIABBDGohAAwBCwsgAUGCAmsiAUEDSQRAIAMgARCgCCACIQADQCAAKAIAIgAEQAJAIAAoAgBBiwJGDQACQCAAKAIEIgMtABUEQCAFKAIAIAZGDQELIAAoAggQdSAAKAIIIQMgBSgCACEHIAAoAgQoAgghCARAIAcgASAIIAMQ6AMhAwwBCyAHIAEgCCADECIhAwsgBSgCACAGRw0AIANBAToAFgsgAEEMaiEADAELCyAGIAIQugIgBEEQaiQADwsgBEH2AjYCBCAEQY0SNgIAQajzCCgCAEHmvAQgBBAfGhA8AAtMAQF/A0AgACIBKAIQKAJ4IgANAAsgAUEwQQAgASgCAEEDcSIAQQNHG2ooAigoAhAoAugBIAFBUEEAIABBAkcbaigCKCgCECgC6AFHC88EAQd/IwBBIGsiBCQAAkACQAJAAkACQCABQVBBACABKAIAQQNxIgVBAkcbaigCKCIGKAIQKALQASIHRQ0AIAFBMEEAIAVBA0cbaiEIA0AgByADQQJ0aigCACICRQ0BIANBAWohAyACQVBBACACKAIAQQNxQQJHG2ooAiggCCgCKEcNAAsgASACEI0DAkAgAigCECIALQBwQQRHDQAgACgCeA0AIAAgATYCeAsgASABQTBqIgAgASgCAEEDcUEDRhsoAigoAhAiAygC5AEiAkEBaiIFQf////8DTw0CIAJBAmoiAkGAgICABE8NAyADKALgASEDAkAgAkUEQCADEBhBACECDAELIAMgAkECdCIDEGYiAkUNBSADIAVBAnQiBU0NACACIAVqQQA2AAALIAEgACABKAIAQQNxQQNGGygCKCgCECACNgLgASABIAAgASgCAEEDcUEDRhsoAigoAhAiAiACKALkASIDQQFqNgLkASACKALgASADQQJ0aiABNgIAIAEgACABKAIAQQNxQQNGGygCKCgCECIAKALgASAAKALkAUECdGpBADYCAAwBCyAGIAFBMEEAIAVBA0cbaigCKCABEKUIIgIoAhAiA0EEQQMgASgCECIBLQBwQQRGGzoAcCADIAEoAmA2AmAgACACEPwFCyAEQSBqJAAPC0GgvQNBz/wAQc0AQe2yARAAAAsgBEEENgIEIAQgAjYCAEGo8wgoAgBBtOcDIAQQHxoQLAALIAQgAzYCEEGo8wgoAgBBg+cDIARBEGoQHxoQLAALvAEBA38gASgCECIEQQE2ArABAkAgBCgC1AFFDQADQCAEKALQASAFQQJ0aigCACIGRQ0BAkAgACAGEPkFRQ0AIAZBUEEAIAYoAgBBA3FBAkcbaigCKCIEKAIQKAKwAQ0AIAAgBCACIAMQxw4LIAVBAWohBSABKAIQIQQMAAsACyADIAQoAvQBRwRAQe47Qbq4AUGKC0HiORAAAAsgAiABNgIUIAJBBBAnIQAgAigCACAA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IAEQzQ4gBUEBaiEFIAYoAhAiBCgC7AEhBwwBCwsgBCAMOgCRAkEAIQQLIARFDQALQQAhAgNAIAIgAygCQE8NBCADIANBQGspAwA3AyAgAyADKQM4NwMYIANBGGogAhAZIQACQAJAAkAgAygCSCIBDgICAAELIAMoAjggAEECdGooAgAQGAwBCyADKAI4IABBAnRqKAIAIAERAQALIAJBAWohAgwACwALIAIoAhAgCWooAgAhAgwBCwtByPoKKAIAIQUgACgCECICKALoASEEA0AgAigC7AEgBE4EQCAEQcgAbCIBIAUoAhAoAsQBakEAOgAxAkAgAi0AdEEBcUUNACACKALEASABaiIBKAIAIgZBAEwNACAGQQFrIgZBAXZBAWohByABKAIEIQFBACECA0AgAiAHRwRAIAEgAkECdGooAgAgASAGIAJrQQJ0aigCABCVCCACQQFqIQIMAQsLIAAoAhAhAgsgBEEBaiEEDAELCwJAIAAQYCAARw0AEMsEQgBXDQAgAEEAEJQIC0EAIQRBACECA0AgAiADKAJATw0BIAMgA0FAaykDADcDECADIAMpAzg3AwggA0EIaiACEBkhAAJAAkACQCADKAJIIgEOAgIAAQsgAygCOCAAQQJ0aigCABAYDAELIAMoAjggAEECdGooAgAgAREBAAsgAkEBaiECDAALAAsgA0E4aiIAQQQQMyAAEDggA0HQAGokACAEC80IAgp/An5CfyELAkACfyAAIgIQ5g0gACgCECIAQQE2AtwBIAAoAtgBIAAoAsABNgIAIAIQ2w4CQAJAIAJBABDZDiIDDQAgAigCECIAKALoASAAKALsAUoNASACEGAhASACKAIQIgMoAugBIgRBAEoEQCABKAIQKALEASAEQcgAbGpBF2tBADoAAAsDQCADKALsASAETgRAIAEgBCADKAKMAiAEQQJ0aigCACgCECgC+AEiACAEQcgAbCIIIAMoAsQBaigCABDkDUEAIQUgACEGA0AgAigCECIDKALEASAIaiIHKAIAIAVKBEAgASgCECgCxAEgCGooAgQgBkECdGogBygCBCAFQQJ0aigCACIDNgIAIAMoAhAiByAGNgL4ASAHLQCsAUEBRgRAIAMgARA5NgIYCyAGQQFqIQYgAiADEP0FIAEgAxCkCCAFQQFqIQUMAQsLIAcgASgCECgCxAEg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A0AgAQRAAkAgASgCECgCsAENACABEN8NDQAgASABQTBqIgYgASgCAEEDcUEDRhsoAigQogEiBCABIAFBMGsiByABKAIAQQNxQQJGGygCKBCiASICRg0AAkAgBCgCECgC6AFFBEAgAigCECgC6AFFDQELIAEgByABKAIAQQNxIgRBAkYiBxsgASAGIARBA0YiBhshCkEAIQRBACECIAFBAEEwIAYbaigCKCgCECIGKALoASILBEAgBigC9AEgCygCECgCiAIoAhAoAvQBayECCygCKCAKKAIoIAFBAEFQIAcbaigCKCgCECIGKALoASIHBEAgBygCECgCiAIoAhAoAvQBIAYoAvQBayEECyABKAIQKAKsASEHIAAQuwIiBigCEEECOgCsARCiASEKEKIBIQkgBiAKRAAAAAAAAAAAQQAgByACIARqaiIEa7ggBEEASiICGyABKAIQKAKcAUEKbBCfASAGIAkgBEEAIAIbuCABKAIQKAKcARCfASgCECABNgJ4KAIQIAE2AngMAQsgBCACELkDIgYEQCABIAYQjQMMAQsgBCACIAEQ4wEaCyAAIAEQMCEBDAELCyAAIAMQHSEDDAELCyAAKAIQIgMoAuABIQECQAJAAkACQAJAIAMoAuQBIgNFBEAgAQ0BQQAhBgwFCyABRQ0BCyABEKIBIQEgACgCECICIAE2AuABIAIoAuQBIgNFDQELIAMQogEhASAAKAIQIgIgATYC5AEgAUUNACABKAIQIgItALUBQQVGIQYCQANAIAIoAsgBKAIAIgMEQCADQVBBACADKAIAQQNxQQJHG2ooAigiBBCiASAERw0CIAMQogggASgCECECDAELCyAAKAIQIQIMAgtB6KcDQbu7AUGUA0GhMBAAAAtBACEGCyACKALgASIDRQRADAELIAMoAhAiAi0AtQFBA0YhCANAIAIoAsABKAIAIgFFDQEgAUEwQQAgASgCAEEDcUEDRxtqKAIoIgQQogEgBEYEQCABEKIIIAMoAhAhAgwBCwtByKcDQbu7AUGbA0GhMBAAAAsgAEEAEKEIIAAhAUEAIQQDQCABKAIQIgAoAtwBIARLBEAgACAAKALYASAEQQJ0aigCACIANgLAASAAIQMDQCADBEAgAygCECIDQQA2ArABIAMoArgBIQMMAQsLA0AgAARAIAAQ7w4gACgCECgCuAEh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AugBCyADIQEgAgRAIAEgAiAEIAIoAhAoAvQBSBshAQsgACADEB0hAyABIQIMAQsLIAEgAjYCiAILNwAgASgCEEG0+gooAgBBAWo2ArABIAAgATYCFCAAQQQQJyEBIAAoAgAgAUECdGogACgCFDYCAAuUAQEEfyAAKAIQIgEoArABRQRAIAFBAToAtAEgAUEBNgKwAQNAIAEoAsgBIAJBAnRqKAIAIgMEQAJAIANBUEEAIAMoAgBBA3FBAkcbaigCKCIBKAIQIgQtALQBBEAgAxCiCCACQQFrIQIMAQsgBCgCsAENACABEO8OCyACQQFqIQIgACgCECEBDAELCyABQQA6ALQBCwsYAQF/QSQQUiICIAE2AgAgAiAANgIgIAILnAEBBX8gAEEwQQAgACgCAEEDcUEDRxtqKAIoKAIQIgIoAuABIQQgAigC5AEhAwJAA0AgASADRwRAIAFBAnQhBSABQQFqIQEgACAEIAVqKAIARw0BDAILCyACIAQgA0EBaiADQQJqENgBIgE2AuABIAIgAigC5AEiAkEBaiIDNgLkASABIAJBAnRqIAA2AgAgASADQQJ0akEANgIACwv/AgEHfyAAKAJQIQQgACgCJCICIAAtABg6AAACQAJAIAAoAhQgACgCDEECdGooAgAiAygCBCIBQQJqIAJLBEAgASAAKAIcakECaiEFIAEgAygCDGpBAmohBgNAIAEgBUkEQCAGQQFrIgYgBUEBayIFLQAAOgAAIAAoAhQgACgCDEECdGooAgAiAygCBCEBDAELCyAAIAMoAgwiBzYCHCADIAc2AhAgAiAGIAVrIgNqIgIgAUECakkNASADIARqIQQLIAJBAWsiAUHAADoAACAAIAQ2AlAgAS0AACECIAAgATYCJCAAIAI6ABgMAQtB3xUQnQIAC0EAIQIgACgCACgCCCIDKAJMQSxqIQUDQCACQQNHBEACQCAFIAJBAnRqIgQoAgAiAEUNACAAQQBBgAEgACgCABEDACEBA0AgASIARQ0BIAQoAgAiASAAQQggASgCABEDACEBIAAoAhgtAABBJUcNACADIAIgACkDEBDjCQwACwALIAJBAWohAgwBCwsL8AIBA38gACAAQTBqIgIgACgCAEEDcUEDRhsoAigoAhAiASgCyAEgASgCzAEiAUEBaiABQQJqENgBIQEgACACIAAoAgBBA3FBA0YbKAIoKAIQIAE2AsgBIAAgAiAAKAIAQQNxQQNGGygCKCgCECIBIAEoAswBIgNBAWo2AswBIAEoAsgBIANBAnRqIAA2AgAgACACIAAoAgBBA3FBA0YbKAIoKAIQIgIoAsgBIAIoAswBQQJ0akEANgIAIAAgAEEwayICIAAoAgBBA3FBAkYbKAIoKAIQIgEoAsABIAEoAsQBIgFBAWogAUECahDYASEBIAAgAiAAKAIAQQNxQQJGGygCKCgCECABNgLAASAAIAIgACgCAEEDcUECRhsoAigoAhAiASABKALEASIDQQFqNgLEASABKALAASADQQJ0aiAANgIAIAAgAiAAKAIAQQNxQQJGGygCKCgCECICKALAASACKALEAUECdGpBADYCACAAC0IBAn8jAEEQayICJAAgASgCECEDIAIgACgCECkC0AE3AwggAiADKQLYATcDACAAIAJBCGogASACEPUOIAJBEGokAAutAQEDfwJAAkAgASgCBCIFRQ0AIAMoAgQiBkUNACAFIAZPBEAgAygCACECQQAhAQNAIAIgAUECdGooAgAiBEUNAyABQQFqIQEgBEEwQQAgBCgCAEEDcUEDRxtqKAIoIABHDQALDAELIAEoAgAhAEEAIQEDQCAAIAFBAnRqKAIAIgRFDQIgAUEBaiEBIARBUEEAIAQoAgBBA3FBAkcbaigCKCACRw0ACwsgBA8LQQAL2QEBBH8gAEEwQQAgACgCAEEDcSIFQQNHG2ooAigiBiEDAn8CQCABIAZGBH8gAEFQQQAgBUECRxtqKAIoBSADCygCECgCsAIiAyABKAIQIgQoAqwCTgRAIAMgBCgCsAJMDQELIAAoAhAoApwBIQNBAAwBC0EAIQMgACgCECIEKAKkAUEATgR/IAQoAqABBUEACyAEKAKcAWshA0EBCyEEQQAgA2sgA0EBQX8gAkEATAR/IAEgBkYFIABBUEEAIAVBAkcbaigCKCABRgsbIgBBACAAayAEG0EASBsLkwEBBX8jAEEQayICJAAgAEEEaiEBA0AgAyAAKAAMT0UEQCACIAEpAgg3AwggAiABKQIANwMAIAIgAxAZIQQCQAJAAkAgACgCFCIFDgICAAELIAEoAgAgBEECdGooAgAQGAwBCyABKAIAIARBAnRqKAIAIAURAQALIANBAWohAwwBCwsgAUEEEDMgARA4IAJBEGokAAtWAQF/IAAoAgAiACgCECEBA0AgAQRAIAAoAgggAUEIahC6AiAAKAIIIAAoAhBBGGoQugIgACgCCCAAKAIQQRBqELoCIAAgACgCEBC0DiIBNgIQDAELCwuYAQEEf0GAgICAeCECQf////8HIQEgACgCACgCEEHAAWoiAyEAA0AgACgCACIABEAgACgCECIELQCsAUUEQCACIAQoAvQBIgAgACACSBshAiABIAAgACABShshAQsgBEG4AWohAAwBCwsDQCADKAIAIgAEQCAAKAIQIgAgACgC9AEgAWs2AvQBIABBuAFqIQMMAQsLIAIgAWsLlwEBAn8DQAJAAkAgASgCECICKAKsAkF/Rg0AIAJBfzYCrAIgAigCqAIiA0UNACACKAKwAiAAKAIQKAKwAkgNASAAIAFGDQBBss0EQQAQNwsPCyADQTBBACADKAIAQQNxIgFBA0cbaigCKCICIANBUEEAIAFBAkcbaigCKCIBIAIoAhAoArACIAEoAhAoArACShshAQwACwALtgEBA39BACACayEGIAEoAhAoArACIQUDQAJAIAUgACgCECIBKAKsAk4EQCAFIAEoArACTA0BCyABKAKoAiIBKAIQIgQgBCgCoAEgAiAGIAMgACABIAFBMGoiBCABKAIAQQNxQQNGGygCKEdzG2o2AqABIAEgBCABKAIAQQNxIgBBA0YbKAIoIgQgAUFQQQAgAEECRxtqKAIoIgAgBCgCECgCsAIgACgCECgCsAJKGyEADAELCyAAC6oIAQ5/IwBBIGsiASQAAkAgAEEwQQAgACgCAEEDcSICQQNHG2ooAigiBCgCECgCsAIgAEFQQQAgAkECRxtqKAIoIgAoAhAoArACTgRAIAAoAhAiBCgCsAIhCCAEKAKsAiEJIAFBADYCGCABQgA3AxAgAUIANwMIIAEgADYCHCABQQhqQQQQJyEAIAEoAgggAEECdGogASgCHDYCACABQRxqIQpB/////wchBANAIAEoAhAEQCABQQhqIApBBBDHAUEAIQAgASgCHCEHA0AgBygCECICKALIASAAQQJ0aigCACIDBEAgA0FQQQAgAygCAEEDcSILQQJHG2ooAigiDCgCECINKAKwAiEGAkAgAygCECIOKAKkAUEASARAIAYgCEwgBiAJTnENASANKAL0ASADQTBBACALQQNHG2ooAigoAhAoAvQBIA4oAqwBamsiAiAEIAVFIAIgBEhyIgIbIQQgAyAFIAIbIQUMAQsgBiACKAKwAk4NACABIAw2AhwgAUEIakEEECchAiABKAIIIAJBAnRqIAEoAhw2AgALIABBAWohAAwBBUEAIQAgBEEATA0DA0AgAigCmAIgAEECdGooAgAiA0UNBCADQTBBACADKAIAQQNxQQNHG2ooAigiAygCECgCsAIgAigCsAJIBEAgASADNgIcIAFBCGpBBBAnIQIgASgCCCACQQJ0aiABKAIcNgIAIAcoAhAhAgsgAEEBaiEADAALAAsACwALCwwBCyAEKAIQIgAoArACIQggACgCrAIhCSABQQA2AhggAUIANwMQIAFCADcDCCABIAQ2AhwgAUEIakEEECchACABKAIIIABBAnRqIAEoAhw2AgAgAUEcaiEKQf////8HIQQDQCABKAIQBEAgAUEIaiAKQQQQxwFBACEAIAEoAhwhBwNAIAcoAhAiAigCwAEgAEECdGooAgAiAwRAIANBMEEAIAMoAgBBA3EiC0EDRxtqKAIoIgwoAhAiDSgCsAIhBgJAIAMoAhAiDigCpAFBAEgEQCAGIAhMIAYgCU5xDQEgA0FQQQAgC0ECRxtqKAIoKAIQKAL0ASANKAL0ASAOKAKsAWprIgIgBCAFRSACIARIciICGyEEIAMgBSACGyEFDAELIAYgAigCsAJODQAgASAMNgIcIAFBCGpBBBAnIQIgASgCCCACQQJ0aiABKAIcNgIACyAAQQFqIQAMAQVBACEAIARBAEwNAwNAIAIoAqACIABBAnRqKAIAIgNFDQQgA0FQQQAgAygCAEEDcUECRxtqKAIoIgMoAhAoArACIAIoArACSARAIAEgAzYCHCABQQhqQQQQJyECIAEoAgggAkECdGogASgCHDYCACAHKAIQIQILIABBAWohAAwACwALAAsACwsLIAFBCGoiAEEEEDMgABA4IAFBIGokACAFC4JEAhB/AX4jAEHwBGsiBCQAIARB8MQILwEAOwHABCAEQejECCkDADcDuAQgBEHgxAgpAwA3A7AEIARBhARqQQBBLBA2GkGM2AotAAAEQCAAKAIQQcABaiEFA0AgBSgCACIFBEAgBSgCECIKKALIASEJQQAhBQNAIAkgBUECdGooAgAEQCAFQQFqIQUgBkEB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4AIRAAANAyAAIAEgACgC1AIRAABFDQNBAiEEDAILIAZBA0kNDSAAIAEgACgC5AIRAAANAiAAIAEgACgC2AIRAABFDQJBAyEEDAELIAZBBEkNDCAAIAEgACgC6AIRAAANASAAIAEgACgC3AIRAABFDQFBBCEECyABIARqIQEDQCACIAFrIgZBAEwEQEFsDwtBASEEQRQhBQJAAkACQAJAAkAgByABLQAAai0AAEEFaw4gAAECBAYGBgQEBAQEBAQEBAYDBAMDAwMEBAYEBgQEBAYECyAGQQFGDRAgACABIAAoAuACEQAADQMgACABIAAoAsgCEQAARQ0DQQIhBAwCCyAGQQNJDQ8gACABIAAoAuQCEQAADQIgACABIAAoAswCEQAARQ0CQQMhBAwBCyAGQQRJDQ4gACABIAAoAugCEQAADQEgACABIAAoAtACEQAARQ0BQQQhBAsgASAEaiEBDAELC0EAIQULIAMgATYCACAFDwsgAiABa0ECSA0JIAAgASAAKALgAhEAAA0IQQIhBCAAIAEgACgC1AIRAAANAiAAIAEgACgCyAIRAABFDQgMBQsgAiABa0EDSA0IIAAgASAAKALkAhEAAA0HQQMhBCAAIAEgACgC2AIRAAANASAAIAEgACgCzAIRAABFDQcMBAsgAiABa0EESA0HIAAgASAAKALoAhEAAA0GQQQhBCAAIAEgACgC3AIRAABFDQELDAMLIAAgASAAKALQAhEAAEUNBAwBC0ETIQUMAQtBEyEFCyABIARqIQQCQAJAAkACQANAIAIgBCIBayIEQQBMDQQCQAJAAkACQAJAAkACQCAHIAEtAABqLQAAQQVrDiABAgMKBAQECgoKCQoKCgoEBAAFAAAAAAoKBAoECAYEBAoLIAFBAWohBAwGCyAEQQFGDQwgACABIAAoAuACEQAADQggACABIAAoAsgCEQAARQ0IIAFBAmohBAwFCyAEQQNJDQsgACABIAAoAuQCEQAADQcgACABIAAoAswCEQAARQ0HIAFBA2ohBAwECyAEQQRJDQogACABIAAoAugCEQAADQYgACABIAAoAtACEQAARQ0GIAFBBGohBAwDCyADIAE2AgAgBQ8LIAFBAWohBCAFQSlHBEAgBUESRw0CIAIgBGsiBkEATA0LQRMhBQJAAkACQAJAAkACQAJAIAcgBC0AAGotAAAi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QQA2AggDQAJAIABBvAJqIABBuAJqEFoNACAAKAK0ASADECQgAWpGBEAgAxAkIQIgAyADECRBAXQQQCADIAMQVRBAIAAgAiADQQAQQiIBajYCtAELIABBvAJqIgIQgQFBECABIABBtAFqIABBCGpBACAGIABBEGogAEEMaiAAQdABahDYAw0AIAIQlAEaDAELCyADIAAoArQBIAFrEEAgAxBGEGcgACAFNgIAIAAQigtBAUcEQCAEQQQ2AgALIABBvAJqIABBuAJqEFoEQCAEIAQoAgBBAnI2AgALIAAoArwCIAMQNBogBhA0GiAAQcACaiQAC9ADAQF+IwBBgANrIgAkACAAIAI2AvgCIAAgATYC/AIgAEHcAWogAyAAQfABaiAAQewBaiAAQegBahCEByAAQdABahBUIgEgARBVEEAgACABQQAQQiICNgLMASAAIABBIGo2AhwgAEEANgIYIABBAToAFyAAQcUAOgAWA0ACQCAAQfwCaiAAQfgCahBaDQAgACgCzAEgARAkIAJqRgRAIAEQJCEDIAEgARAkQQF0EEAgASABEFUQQCAAIAMgAUEAEEIiAmo2AswBCyAAQfwCaiIDEIEBIABBF2ogAEEWaiACIABBzAFqIAAoAuwBIAAoAugBIABB3AFqIABBIGogAEEcaiAAQRhqIABB8AFqEIMHDQAgAxCUARoMAQsLAkAgAEHcAWoQJEUNACAALQAXQQFHDQAgACgCHCIDIABBIGprQZ8BSg0AIAAgA0EEajYCHCADIAAoAhg2AgALIAAgAiAAKALMASAEEIsLIAApAwAhBiAFIAApAwg3AwggBSAGNwMAIABB3AFqIABBIGogACgCHCAEELEBIABB/AJqIABB+AJqEFoEQCAEIAQoAgBBAnI2AgALIAAoAvwCIAEQNBogAEHcAWoQNBogAEGAA2okAAu5AwAjAEHwAmsiACQAIAAgAjYC6AIgACABNgLsAiAAQcwBaiADIABB4AFqIABB3AFqIABB2AFqEIQHIABBwAFqEFQiASABEFUQQCAAIAFBABBCIgI2ArwBIAAgAEEQajYCDCAAQQA2AgggAEEBOgAHIABBxQA6AAYDQAJAIABB7AJqIABB6AJqEFoNACAAKAK8ASABECQgAmpGBEAgARAkIQMgASABECRBAXQQQCABIAEQVRBAIAAgAyABQQAQQiICajYCvAELIABB7AJqIgMQgQEgAEEHaiAAQQZqIAIgAEG8AWogACgC3AEgACgC2AEgAEHMAWogAEEQaiAAQQxqIABBCGogAEHgAWoQgwcNACADEJQBGgwBCwsCQCAAQcwBahAkRQ0AIAAtAAdBAUcNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArwBIAQQjAs5AwAgAEHMAWogAEEQaiAAKAIMIAQQsQEgAEHsAmogAEHoAmoQWgRAIAQgBCgCAEECcjYCAAsgACgC7AIgARA0GiAAQcwBahA0GiAAQfACaiQAC7kDACMAQfACayIAJAAgACACNgLoAiAAIAE2AuwCIABBzAFqIAMgAEHgAWogAEHcAWogAEHYAWoQhAcgAEHAAWoQVCIBIAEQVRBAIAAgAUEAEEIiAjYCvAEgACAAQRBqNgIMIABBADYCCCAAQQE6AAcgAEHFADoABgNAAkAgAEHsAmogAEHoAmoQWg0AIAAoArwBIAEQJCACakYEQCABECQhAyABIAEQJEEBdBBAIAEgARBVEEAgACADIAFBABBCIgJqNgK8AQsgAEHsAmoiAxCBASAAQQdqIABBBmogAiAAQbwBaiAAKALcASAAKALYASAAQcwBaiAAQRBqIABBDGogAEEIaiAAQeABahCDBw0AIAMQlAEaDAELCwJAIABBzAFqECRFDQAgAC0AB0EBRw0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCvAEgBBCNCzgCACAAQcwBaiAAQRBqIAAoAgwgBBCxASAAQewCaiAAQegCahBaBEAgBCAEKAIAQQJyNgIACyAAKALsAiABEDQaIABBzAFqEDQaIABB8AJqJAALmgMBAn8jAEHQAmsiACQAIAAgAjYCyAIgACABNgLMAiADEKgCIQYgAyAAQdABahClBCEHIABBxAFqIAMgAEHEAmoQpAQgAEG4AWoQVCIBIAEQVRBAIAAgAUEAEEIiAjYCtAEgACAAQRBqNgIMIABBADYCCANAAkAgAEHMAmogAEHIAmoQWg0AIAAoArQBIAEQJCACakYEQCABECQhAyABIAEQJEEBdBBAIAEgARBVEEAgACADIAFBABBCIgJqNgK0AQsgAEHMAmoiAxCBASAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxDYAw0AIAMQlAEaDAELCwJAIABBxAFqECRFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK0ASAEIAYQjgs3AwAgAEHEAWogAEEQaiAAKAIMIAQQsQEgAEHMAmogAEHIAmoQWgRAIAQgBCgCAEECcjYCAAsgACgCzAIgARA0GiAAQcQBahA0GiAAQdACaiQAC5oDAQJ/IwBB0AJrIgAkACAAIAI2AsgCIAAgATYCzAIgAxCoAiEGIAMgAEHQAWoQpQQhByAAQcQBaiADIABBxAJqEKQEIABBuAFqEFQiASABEFUQQCAAIAFBABBCIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqEFoNACAAKAK0ASABECQgAmpGBEAgARAkIQMgASABECRBAXQQQCABIAEQVRBAIAAgAyABQQAQQiICajYCtAELIABBzAJqIgMQgQEgBiACIABBtAFqIABBCGogACgCxAIgAEHEAWogAEEQaiAAQQxqIAcQ2AMNACADEJQBGgwBCwsCQCAAQcQBahAkRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCtAEgBCAGEJELOwEAIABBxAFqIABBEGogACgCDCAEELEBIABBzAJqIABByAJqEFoEQCAEIAQoAgBBAnI2AgALIAAoAswCIAEQNBogAEHEAWoQNBogAEHQAmokAAuaAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQqAIhBiADIABB0AFqEKUEIQcgAEHEAWogAyAAQcQCahCkBCAAQbgBahBUIgEgARBVEEAgACABQQAQQiICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQcwCaiAAQcgCahBaDQAgACgCtAEgARAkIAJqRgRAIAEQJCEDIAEgARAkQQF0EEAgASABEFUQQCAAIAMgAUEAEEIiAmo2ArQBCyAAQcwCaiIDEIEBIAYgAiAAQbQBaiAAQQhqIAAoAsQCIABBxAFqIABBEGogAEEMaiAHENgDDQAgAxCUARoMAQsLAkAgAEHEAWoQJEUNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCSCzcDACAAQcQBaiAAQRBqIAAoAgwgBBCxASAAQcwCaiAAQcgCahBaBEAgBCAEKAIAQQJyNgIACyAAKALMAiABEDQaIABBxAFqEDQaIABB0AJqJAALmgMBAn8jAEHQAmsiACQAIAAgAjYCyAIgACABNgLMAiADEKgCIQYgAyAAQdABahClBCEHIABBxAFqIAMgAEHEAmoQpAQgAEG4AWoQVCIBIAEQVRBAIAAgAUEAEEIiAjYCtAEgACAAQRBqNgIMIABBADYCCANAAkAgAEHMAmogAEHIAmoQWg0AIAAoArQBIAEQJCACakYEQCABECQhAyABIAEQJEEBdBBAIAEgARBVEEAgACADIAFBABBCIgJqNgK0AQsgAEHMAmoiAxCBASAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxDYAw0AIAMQlAEaDAELCwJAIABBxAFqECRFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK0ASAEIAYQkws2AgAgAEHEAWogAEEQaiAAKAIMIAQQsQEgAEHMAmogAEHIAmoQWgRAIAQgBCgCAEECcjYCAAsgACgCzAIgARA0GiAAQcQBahA0GiAAQdACaiQAC+0BAQF/IwBBIGsiBiQAIAYgATYCHAJAIAMoAgRBAXFFBEAgBkF/NgIAIAAgASACIAMgBCAGIAAoAgAoAhARCQAhAQJAAkACQCAGKAIADgIAAQILIAVBADoAAAwDCyAFQQE6AAAMAgsgBUEBOgAAIARBBDYCAAwBCyAGIAMQUyAGEMsBIQEgBhBQIAYgAxBTIAYQ2QMhACAGEFAgBiAAEPkBIAZBDHIgABD4ASAFIAZBHGogAiAGIAZBGGoiAyABIARBARCcBSAGRjoAACAGKAIcIQEDQCADQQxrEHYiAyAGRw0ACwsgBkEgaiQAIAEL5wIBAX8jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASAAQcQBahBUIQYgAEEQaiICIAMQUyACEMwBQeCuCUH6rgkgAEHQAWoQ9QIgAhBQIABBuAFqEFQiAyADEFUQQCAAIANBABBCIgE2ArQBIAAgAjYCDCAAQQA2AggDQAJAIABB/AFqIABB+AFqEFsNACAAKAK0ASADECQgAWpGBEAgAxAkIQIgAyADECRBAXQQQCADIAMQVRBAIAAgAiADQQAQQiIBajYCtAELIABB/AFqIgIQggFBECABIABBtAFqIABBCGpBACAGIABBEGogAEEMaiAAQdABahDaAw0AIAIQlQEaDAELCyADIAAoArQBIAFrEEAgAxBGEGcgACAFNgIAIAAQigtBAUcEQCAEQQQ2AgALIABB/AFqIABB+AFqEFsEQCAEIAQoAgBBAnI2AgALIAAoAvwBIAMQNBogBhA0GiAAQYACaiQAC9ADAQF+IwBBkAJrIgAkACAAIAI2AogCIAAgATYCjAIgAEHQAWogAyAAQeABaiAAQd8BaiAAQd4BahCIByAAQcQBahBUIgEgARBVEEAgACABQQAQQiICNgLAASAAIABBIGo2AhwgAEEANgIYIABBAToAFyAAQcUAOgAWA0ACQCAAQYwCaiAAQYgCahBbDQAgACgCwAEgARAkIAJqRgRAIAEQJCEDIAEgARAkQQF0EEAgASABEFUQQCAAIAMgAUEAEEIiAmo2AsABCyAAQYwCaiIDEIIBIABBF2ogAEEWaiACIABBwAFqIAAsAN8BIAAsAN4BIABB0AFqIABBIGogAEEcaiAAQRhqIABB4AFqEIcHDQAgAxCVARoMAQsLAkAgAEHQAWoQJEUNACAALQAXQQFHDQAgACgCHCIDIABBIGprQZ8BSg0AIAAgA0EEajYCHCADIAAoAhg2AgALIAAgAiAAKALAASAEEIsLIAApAwAhBiAFIAApAwg3AwggBSAGNwMAIABB0AFqIABBIGogACgCHCAEELEBIABBjAJqIABBiAJqEFsEQCAEIAQoAgBBAnI2AgALIAAoAowCIAEQNBogAEHQAWoQNBogAEGQAmokAAu5AwAjAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASAAQcABaiADIABB0AFqIABBzwFqIABBzgFqEIgHIABBtAFqEFQiASABEFUQQCAAIAFBABBCIgI2ArABIAAgAEEQajYCDCAAQQA2AgggAEEBOgAHIABBxQA6AAYDQAJAIABB/AFqIABB+AFqEFsNACAAKAKwASABECQgAmpGBEAgARAkIQMgASABECRBAXQQQCABIAEQVRBAIAAgAyABQQAQ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sAEgBEG+ogQgAkGwAWoQMiACIAEoAhA2AqABIARB+b4EIAJBoAFqEB8aIAIgASgCFDYClAEgAkEtNgKQASAEQeW/BCACQZABahAfGiACIAEoAhg2AoABIAJC/NPGl93JmKg/NwN4IAJCs+bMmbPmzPE/NwNwIARBkr8EIAJB8ABqEDIgASsDICEIIAIgBkEBdkEBcTYCYCACIAg5A1ggAkLNmbPmzJmz9j83A1AgBEGqwQQgAkHQAGoQMiACIAErA0g5A0ggAkEANgJEIAIgBkECdkEBcTYCQCAEQeyhBCACQUBrEDIgASgCMCEGIAEoAjQhByABKwNAIQggAiABLQA4NgIwIAIgCDkDKCACIAc2AiQgAiAGQQJ0QeDICGooAgA2AiAgBEHpwAQgAkEgahAyIAIgASgCPEECdEGAyQhqKAIANgIQIARB3PcDIAJBEGoQHxogAiABKAJQNgIAIARBt8IEIAIQHxogAkHgAWokAAsgACADQawBahCCCCEEAkAgAygCrAFBAUYEQCADIAMpA5ACNwMQIAMgAykDiAI3AwggACADQbABaiADQQhqEI8MIAVFBEAgACADQZgCahDxAxoLIAAQrAMMAQsgAEECQQggA0GIAWoQ+gMaIANBAToAlAFBACECA0AgAygCrAEiASACTQRAIAEgBCAAIANBiAFqEOsFDAILIAQgAkECdGooAgAiAUEAELIDGiADIAMpA5ACNwMgIAMgAykDiAI3AxggASADQbABaiADQRhqEI8MIAVFBEAgASADQZgCahDxAxoLIAFBAhCJAiABEKwDIAJBAWohAgwACwALQQAhAQNAIAMoAqwBIAFLBEAgACAEIAFBAnRqKAIAELcBIAFBAWohAQwBCwsgBBAYCyAAELgDIANBsAJqJAALCQAgASACEOEBC0MBAnwCf0EBIAArAwgiAiABKwMIIgNkDQAaQX8gAiADYw0AGkEBIAArAxAiAiABKwMQIgNkDQAaQX9BACACIANjGwsLyRQCEH8IfCMAQUBqIgkkAEGg2AorAwAhFkGg2AogABD/CTkDACAAQQIQiQJBOBBSIQEgACgCECABNgKMASAAIABBAEH77ABBABAiQQJBAhBhIQEgABA5KAIQIAE7AbABQQohASAAEDkoAhAvAbABQQlNBEAgABA5KAIQLwGwASEBCyAAEDkoAhAgATsBsAFBvNgKIAE7AQAgAEEAIAAQuQdBkP0KQajrCSgCACIBKAIANgIAQZT9CiABKAIENgIAQZz9CiABKAIINgIAQaT9CiABKAIMNgIAQdD9CkIANwMAQaj9CiABKwMQOQMAQbD9CiABKwMYOQMAQaD9CiAAIABBAEGsOEEAECJB2ARBABBhNgIAQbj9CiAAIABBAEGc1wFBABAiRDMzMzMzM9M/RAAAAAAAAAAAEE8iETkDAEGo6wkoAgAiASAROQMgIAErAygiEUQAAAAAAADwv2EEQCAAIABBAEGzjgNBABAiRAAAAAAAAPC/RAAAAAAAAAAAEE8hEQtBmP0KQQE2AgBBwP0KIBE5AwBByP0KIABBAkGY/QoQwgciATYCACABRQRAQauVBEEAECpBmP0KQQI2AgALQej9CkGg/QooAgBBpP0KKAIAbEHkAG02AgACQEGQ/QooAgBFDQBB0P0KKwMARAAAAAAAAAAAZUUNAEHQ/QpBuP0KKwMARAAAAAAAAAhAojkDAAsjAEEgayIFJAAgAEEBQaomQcACQQEQtAIjAEHgAGsiAyQAIANCADcDUCADQgA3A0ggACICEPQJIQ9B7PkJQbTrCSgCABCSASELIABB/zBBARCRASIKQZAmQZgCQQEQNRogABAcIQwDQCAMBEACQCAMKAIQLQCGAQ0AIAIgDBAtIQADQCAARQ0BQQAhEAJAIABBUEEAIAAoAgBBA3EiAUECRxtqKAIoIggoAhAtAIYBDQAgDyAAQTBBACABQQNHG2ooAigiARDyCSIEIA8gCBDyCSIGckUNACAEIAZGBEAgARAhIQQgAyABECE2AgQgAyAENgIAQby0BCADECoMAQsgAyAAQTBBACAAKAIAQQNxIg5BA0cbaigCKDYCWCADIABBUEEAIA5BAkcbaigCKDYCXAJAIAsgA0HYAGpBgAQgCygCABEDACIOBEAgACAOKAIQIA4oAhQQnQQaDAELIAYEQCAEBEAgBiAEEKsBBEAgBBAhIQEgAyAGECE2AiQgAyABNgIgQbjyAyADQSBqECoMBAsgBCAGEKsBBEAgBhAhIQEgAyAEECE2AhQgAyABNgIQQZbxAyADQRBqECoMBAsgCyABIAggACABIAQgA0HIAGoiASAKEPoEIAggBiABIAoQ+gQQnQQQ0gYMAgsgBiABEKsBBEAgARAhIQEgAyAGECE2AjQgAyABNgIwQeDyAyADQTBqECoMAwsgCyABIAggACABIAggBiADQcgAaiAKEPoEEJ0EENIGDAELIAQgCBCrAQRAIAgQISEBIAMgBBAhNgJEIAMgATYCQEG+8QMgA0FAaxAqDAILIAsgASAIIAAgASAEIANByABqIAoQ+gQgCBCdBBDSBgtBASEQCyANIBBqIQ0gAiAAEDAhAAwACwALIAIgDBAdIQwMAQsLIAMtAFdB/wFGBEAgAygCSBAYCyALEJkBGiAKEBwhAANAIAAEQCAKIAAQHSACIAAQtwEhAAwBCwsgChC5ASANBEAgAkGP3wBBDEEAEDUgDTYCCAsgDxCZARogA0HgAGokACACEDpBAWpBBBAaIQAgAigCECAANgKYASACEBwhAANAIAAEQCAAEPsEIAAQLigCEC8BsAFBCBAaIQEgACgCECABNgKUASAAIAAQLigCECgCdEEBcRCZBCACKAIQKAKYASAHQQJ0aiAANgIAIAAoAhAgBzYCiAEgB0EBaiEHIAIgABAdIQAMAQsLIAJBAkG55gBBABAiIQEgAhAcIQcDQCAHBEAgAiAHEC0hAANAIAAEQCAAQZ0mQbgBQQEQNRogAEHk2QooAgBEAAAAAAAA8D9EAAAAAAAAAAAQTyERIAAoAhAgETkDgAEgACABQajrCSgCACsDIEQAAAAAAAAAABBPIREgACgCECAROQOIASAAEJgDIAIgABAwIQAMAQsLIAIgBxAdIQcMAQsLAkAgAkEBQborQQAQIiIHRQ0AQajzCCgCACEIIAJBAUHj5ABBABAiIQRBACEDA0AgAigCECgCmAEgA0ECdGooAgAiAUUNAQJAIAEgBxBEIgAtAABFDQAgBSABKAIQKAKUASIGNgIQIAVBADoAHyAFIAZBCGo2AhQgBSAFQR9qNgIYIABBn74BIAVBEGoQUUECTgRAQQAhAAJAQaDYCisDAEQAAAAAAAAAAGRFDQADQCAAQQJGDQEgBiAAQQN0aiIKIAorAwBBoNgKKwMAozkDACAAQQFqIQAMAAsACyABKAIQIgBBAToAhwEgBS0AH0EhRwR/IARFDQIgASAEEEQQaUUNAiABKAIQBSAAC0EDOgCHAQwBCyABECEhASAFIAA2AgQgBSABNgIAIAhBheIDIAUQHxoLIANBAWohAwwACwALIAVBIGokACAJIAJBAEHMMUEAECI2AhAgCSACQQBB9fcAQQAQIjYCFCACQQBBsSFBABAiIQAgCUEANgIcIAkgAjYCDCAJIAA2AhggCSACQQJBBCAJQSBqEPoDNgIwIAIgCUEMahClDEUEQCACEBwhAQNAIAEEQCABKAIQIgAtAIYBQQFGBEAgACgC6AEoAhAoAowBIgMrAxghESADKwMIIRIgACgClAEiBSADKwMgIAMrAxChIhNEAAAAAAAA4D+iIhU5AwggBSARIBKhIhFEAAAAAAAA4D+iIhQ5AwAgACATOQMoIAAgETkDICABQdzZCigCAEQAAAAAAADwP0QAAAAAAAAAABBPIRIgASgCECIAIBMgEqA5A3AgACARIBKgOQNoIAAgFEQAAAAAAABSQKIiETkDYCAAIBE5A1ggACATRAAAAAAAAFJAojkDUCAAKAIMKAIsIgAgFUQAAAAAAABSQKIiE5oiFSASRAAAAAAAAOA/oiISoSIUOQN4IAAgESASoCIXOQNwIAAgFDkDaCAAIBGaIhQgEqEiGDkDYCAAIBMgEqAiEjkDWCAAIBg5A1AgACASOQNIIAAgFzkDQCAAIBU5AzggACAROQMwIAAgFTkDKCAAIBQ5AyAgACATOQMYIAAgFDkDECAAIBM5AwggACAROQMACyACIAEQHSEBDAELCyACIAIQpAwgAhCjDCACEMwHGgJAIAIoAhAvAYgBQQ5xIgBFDQACQCAAQQlJBEAgACEBDAELQQwhAQJAIABBDEYEQCACQesDQQoQwQxFDQFBmNgKQQI2AgALIAJBj98AQQAQawRAQb3hA0EAECpBAiEBDAELIAIgABDLBSAAIQELQZjYCkEANgIAC0HA2AooAgBBAEoNACACIAEQywULIAJBABDzBUGg2AogFjkDAAsgCUFAayQAC50LAgp/BHwjAEHQAWsiAyQAIAAQHCEKA0AgCgRAIAAgChAtIQcDQAJAAkACQCAHBEAgBygCEC8BqAEhBSAHQVBBACAHKAIAQQNxIgJBAkcbaigCKCIGIApGBEAgBUUNBCAHIAAoAhAoAvgBEMYMDAQLIAVFDQMgB0EwQQAgAkEDRxtqKAIoIQQgAyAGKAIQIgkoAugBIgI2ApgBIAQoAhAiCCgC6AEhBSADQgA3A7gBIANCADcDwAEgA0IANwOwASADIAU2AswBAkAgCS0AhgFBAUcEQCACIQkgBiECDAELIAMgAigCECgCjAEoAjAiCTYCmAELAkAgCC0AhgFBAUcEQCAFIQggBCEFDAELIAMgBSgCECgCjAEoAjAiCDYCzAELAkAgCSgCECgCjAEoAiwiBiAIKAIQKAKMASgCLCIESgRAIANBsAFqIAYgAiAEIANBmAFqIAEQqAwgAygCmAEiAigCECgCjAEoAjAhCQwBCyAEIAZMDQAgA0GwAWogBCAFIAYgA0HMAWogARCoDCADKALMASIFKAIQKAKMASgCMCEICwNAIAkiBCAIIgZGRQRAIANBsAFqIgggBEEAIAIgARDIBSAIIAYgBUEAIAEQyAUgBigCECgCjAEoAjAhCCAEKAIQKAKMASgCMCEJIAQhAiAGIQUMAQsLIANBsAFqIgQgBiAFIAIgARDIBSADKAK4AUEATgRAIARBBBCMAiADIAMpA7gBNwOQASADIAMpA7ABNwOIAQJAIAMoArABIANBiAFqQQAQGUECdGogAygCuAEQzAwEQCADIAMpA7gBNwOAASADIAMpA7ABNwN4IAchAiADKAKwASADQfgAakEAEBlBAnRqIAMoArgBEM8MIgsNAUEAIQtBsOkDQQAQKkEAIQIDQCACIAMoArgBTw0FIAMgAykDuAE3A1AgAyADKQOwATcDSCADQcgAaiACEBkhBAJAAkACQCADKALAASIFDgICAAELIAMoArABIARBAnRqKAIAEBgMAQsgAygCsAEgBEECdGooAgAgBREBAAsgAkEBaiECDAALAAsCQCAMDQAgA0GYAWogABD+AiAAQQhBCBDqBSECQdLqA0EAECogASsDACINIAK3Ig5mIA4gASsDCCIPZXIEQCADQUBrIA85AwAgAyANOQM4IAMgAjYCMEHx7QQgA0EwahB/DAELIAMrA5gBIg4gDWUgAysDoAEiECAPZXJFDQAgAyAPOQMoIAMgDTkDICADIBA5AxggAyAOOQMQQaPuBCADQRBqEH8LQQAhAgNAIAIgAygCuAFPDQQgAyADKQO4ATcDCCADIAMpA7ABNwMAIAMgAhAZIQQCQAJAAkAgAygCwAEiBQ4CAgABCyADKAKwASAEQQJ0aigCABAYDAELIAMoArABIARBAnRqKAIAIAURAQALIAJBAWohAgwACwALA0AgAkUEQEEAIQIDQCACIAMoArgB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AxABAAsgASgCCCgCICIDLQAoDQEgAxCjDQwBCwsCQCAFQQRqIgIoAghFDQAgAigCBCIAKAIAIgEgAigCACgCBCIDNgIEIAMgATYCACACQQA2AggDQCAAIAJGDQEgACgCBCAAEBghAAwACwALIAVBEGokAAu6AQICfwJ8RP///////+//IQQCfET////////v/yABKAIAKAIgIgIoAiwgASgCGEoNABpE////////7/8gAiABKAIEKAIgRg0AGiABELYCCyEFAkAgACgCACgCICICKAIsIAAoAhhKDQAgAiAAKAIEKAIgRg0AIAAQtgIhBAsgBCAFYQRAIAEoAgAoAgAiAiAAKAIAKAIAIgNGBEAgASgCBCgCACAAKAIEKAIASA8LIAIgA0gPCyAEIAVkCzMAIAAQng0gACABKAIANgIAIAAgASgCBDYCBCAAIAEoAgg2AgggAUEANgIIIAFCADcCAAvKAQEHfyMAQRBrIgUkACAAQQA2AgggAEIANwIAQShBNCACGyEHIAEoAgQhCCABKAIAIQQDQCAEIAhHBEAgBCgCACAHaiIDKAIEIQkgAygCACEDA0AgAyAJRgRAIARBBGohBAwDBSAFIAMoAgAiBjYCDCAGQej7CigCADYCGAJAAkAgAgRAIAYoAgAoAiAgAUcNAQsgAg0BIAYoAgQoAiAgAUYNAQsgACAFQQxqEL8BCyADQQRqIQMMAQsACwALCyAAEK4NIAVBEGokAAs+AQJ8An9BfyAAKwMAIgIgASsDACIDYw0AGkEBIAIgA2QNABpBfyAAKwMIIgIgASsDCCIDYw0AGiACIANkCwscACAAKAIMIAEoAgxqIAAoAgQgASgCBGprQQJtCxwAIAAoAgggASgCCGogACgCACABKAIAamtBAm0LjAEBB38CQCAAKAIgIgMgASgCKCIESg0AIAEoAiAiBSAAKAIoIgZKDQBBASECIAAoAiwiByABKAIkIghIDQAgACgCECABKAIQayAHIAEoAixqIAAoAiQgCGprQQJtaiAGIAMgBWprIARqQQJtIAEoAgwiASAAKAIMIgBrIAAgAWsgACABShtqTCECCyACC4wBAQd/AkAgACgCJCIDIAEoAiwiBEoNACABKAIkIgUgACgCLCIGSg0AQQEhAiAAKAIoIgcgASgCICIISA0AIAAoAgwgASgCDGsgASgC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AAAAAADQP6I5A4gCIAMgBTkDgAIgBEG50AQgA0GAAmoQcyADIAAoAugCsrs5A/ABIANCADcD6AEgA0KAgICAgICgq8AANwPgASAEQZXQBCADQeABahBzIANB1PkKKAIANgLQASADIAYgByANoKIiBjkDwAEgAyAKIAsgDKCiIgc5A8gBIARBtNEEIANBwAFqEHMgAyABNgKwASAEQc7LAyADQbABahBzIAAgBBCABhAbGiABEBggAgRAIANBiAFqIgEgACgCEEE4akEoECAaIAFDAAAAABC8AyEBIANCADcDgAEgA0IANwN4IANCADcDcCAAQcHaBCADQfAAahAeIANCgICAgICAgPg/NwNgIAMgCDkDWCADIAU5A1AgAEG50AQgA0HQAGoQHiADQUBrIAAoAugCsrs5AwAgA0IANwM4IANCADcDMCAAQZXQBCADQTBqEB4gA0HU+QooAgA2AiAgAyAGOQMQIAMgBzkDGCAAQbTRBCADQRBqEB4gAyABNgIAIABBzssDIAMQHiABEBgLIANB4AJqEFwgA0HwAmokAAvoAwIDfwZ8IwBB0AFrIgMkACACKAIAIQQgAigCBCIFKwMQIQYgAyAFKAIANgKwASADIAY5A6gBIAMgBDYCoAEgAEGd+wMgA0GgAWoQHkHU+QpB0PkKKAIAQQlrNgIAAnwgASsDACIGIAItADAiBEHsAEYNABogBEHyAEYEQCAGIAIrAyChDAELIAYgAisDIEQAAAAAAADgv6KgCyEGIAArA/ADIQcgACsDgAQhCCABKwMIIQkgACsD6AMhCiAAKwP4AyELIANB+ABqIgEgACgCEEEQakEoECAaIAFDAAAAABC8AyEBIANCADcDyAEgA0IANwPAASACKAIEKAIAIQQgAigCACEFIANCADcDcCADQoCAgICAgIDoPzcDaCADIAU2AmQgAyAENgJgIANBwAFqIgRBpdkDIANB4ABqEHMgAyACKAIEKwMQIAArA+gDojkDUCAEQfqiBCADQdAAahBzIANBQGsgACgC6AKyuzkDACADQgA3AzggA0IANwMwIARBldAEIANBMGoQcyADQdT5CigCADYCICADIAogBiALoKI5AxAgAyAHIAkgCKCiOQMYIARBtNEEIANBEGoQcyADIAE2AgAgBEHOywMgAxBzIAAgBBCABhAbGiAEEFwgARAY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C6GgIgdEAAAgFXvL2z+iIA5ENivxEfP+WT2iIAcgDKBE1a2ayjiUuz2ioKCgoCEHCyAHCyIHmUQAAAAAAADgQWMEQCAHqgwBC0GAgICAeAshAiAHRAAAAAAAAAhAIAK3oaAFRAAAAAAAAAhACxCdASIHOQMAIAEgBzkDoAMgASAHOQOoAyAAQeSlBCABQaADahAeIAFBncIINgKQAyAAQeGSBCABQZADahAeIAFBncIINgKAAyAAQaTXBCABQYADahAeIAFBncIINgLwAiAAQdDYAyABQfACahAeIAFBncIINgLgAiAAQe/jAyABQeACahAeIAFBncIINgLQAiAAQY7aBCABQdACahAeIAFBncIINgLAAiAAQabFBCABQcACahAeIAFBncIINgKwAiAAQeDXBCABQbACahAeIAFBncIINgKgAiAAQfXXAyABQaACahAeIAFBncIINgKQAiAAQdeOBCABQZACahAeIAFBncIINgKAAiAAQc7YBCABQYACahAeIAFBncIINgLwASAAQbHkAyABQfABahAeIABB6MsEQQAQHiABQZ3CCDYC4AEgAEGRqwQgAUHgAWoQHiABQZ3CCDYC0AEgAEHpqgQgAUHQAWoQHiAAQdbUBEEAEB4gAUGdwgg2AsABIABBwukEIAFBwAFqEB4gAUGdwgg2ArABIABBgdQEIAFBsAFqEB4gAUGdwgg2AqABIABBu9MEIAFBoAFqEB4gAEGPywRBABAeIAFBncIINgKQASAAQduIBCABQZABahAeIAFBncIINgKAASAAQcSJBCABQYABahAeIAFBncIINgJwIABBgdYDIAFB8ABqEB4gAUGdwgg2AmAgAEHe3QMgAUHgAGoQHiABQZ3CCDYCUCAAQajWAyABQdAAahAeIAFBncIINgJAIABBhd0DIAFBQGsQHiAAQdmQBEEAEB4gAUGdwgg2AjAgAEGy3AMgAUEwahAeIAFBncIINgIgIABB9ocEIAFBIGoQHiABQZ3CCDYCECAAQeTFBCABQRBqEB4gASAJOQMIIAEgDTkDACAAQY+pBCABEB4gAEHRygRBABAeIABB9PQEQQAQHiABQeADaiQACycBAX8jAEEQayIBJAAgAUGYwgg2AgAgAEH3zAQgARAeIAFBEGokAAuIAQIDfwF+IwBBMGsiASQAIAAoAhAhAiAAKAIMKAIA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ZW1wdHkAbm9kZV9zZXRfaXNfZW1wdHkAcmVmZXJlbmNlIHRvIGJpbmFyeSBlbnRpdHkAYXN5bmNocm9ub3VzIGVudGl0eQBpbmNvbXBsZXRlIG1hcmt1cCBpbiBwYXJhbWV0ZXIgZW50aXR5AGVudGl0eSBkZWNsYXJlZCBpbiBwYXJhbWV0ZXIgZW50aXR5AGNhbm5vdCBzdXNwZW5kIGluIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdHkAWE1MIG9yIHRleHQgZGVjbGFyYXRpb24gbm90IGF0IHN0YXJ0IG9mIGVudGl0eQB1bmRlZmluZWQgZW50aXR5AHBhcnNlci0+bV9vcGVuSW50ZXJuYWxFbnRpdGllcyA9PSBvcGVuRW50aXR5AHBhcnNlci0+bV9vcGVuVmFsdWVFbnRpdGllcyA9PSBvcGVuRW50aXR5AHBhcnNlci0+bV9vcGVuQXR0cmlidXRlRW50aXRpZXMgPT0gb3BlbkVudGl0eQBpbmZpbml0eQBsaXN0LT5zaXplIDwgbGlzdC0+Y2FwYWNpdHkAcmV0LnNpemUgPCByZXQuY2FwYWNpdHkAZmFudGFzeQBTcGFyc2VNYXRyaXhfY29vcmRpbmF0ZV9mb3JtX2FkZF9lbnRyeQAvc3ZnL2l2b3J5AG91dCBvZiBtZW1vcnkARmVicnVhcnkASmFudWFyeQBndnBsdWdpbl9kb3RfbGF5b3V0X0xUWF9saWJyYXJ5AGd2cGx1Z2luX25lYXRvX2xheW91dF9MVFhfbGlicmFyeQBndnBsdWdpbl9jb3JlX0xUWF9saWJyYXJ5AGdhdGhlcl90aW1lX2VudHJvcHkAY29weQBhbGJhbnkASnVseQBTcGFyc2VNYXRyaXhfbXVsdGlwbHkAZXF1YWxseQBhc3NlbWJseQBzdW1tZXJza3kAc2h5AHNhdGlzZnkAYmVhdXRpZnkAbm9qdXN0aWZ5AENsYXNzaWZ5AC9zdmcvbGlnaHRncmV5AC9zdmcvZGltZ3JleQAvc3ZnL2RhcmtncmV5AC9zdmcvbGlnaHRzbGF0ZWdyZXkAL3N2Zy9kYXJrc2xhdGVncmV5AC9zdmcvc2xhdGVncmV5AHdlYmdyZXkAeDExZ3JleQAvc3ZnL2dyZXkAbW92ZSB0byBmcm9udCBsb2NrIGluY29uc2lzdGVuY3kAZXh0cmFjdF9hZGphY2VuY3kAbWVyZ2Vfb25ld2F5AGFycmF5AGFsbG9jQXJyYXkAL3N2Zy9saWdodGdyYXkAL3N2Zy9kaW1ncmF5AC9zdmcvZGFya2dyYXkAL3N2Zy9saWdodHNsYXRlZ3JheQAvc3ZnL2RhcmtzbGF0ZWdyYXkAL3N2Zy9zbGF0ZWdyYXkAd2ViZ3JheQB4MTFncmF5AC9zdmcvZ3JheQBUaHVyc2RheQBUdWVzZGF5AFdlZG5lc2RheQBTYXR1cmRheQBTdW5kYXkATW9uZGF5AEZyaWRheQBNYXkALi4vLi4vbGliL2NncmFwaC9ncmFtbWFyLnkAJW0vJWQvJXkAcG9ydGhveXgAcG9ydGhvX3l4AHh4eABib3gAdmlld0JveABjaGtCb3VuZEJveAAvTWVkaWFCb3gAZ2V0X2VkZ2VfbGFiZWxfbWF0cml4AGlkZWFsX2Rpc3RhbmNlX21hdHJpeABtdXN0IG5vdCB1bmRlY2xhcmUgcHJlZml4AHVuYm91bmQgcHJlZml4AGh0bWxsZXgAbWF4ACMlMDJ4JTAyeCUwMngAIyUyeCUyeCUyeCUyeAAjJTF4JTF4JTF4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAcmFycm93AGxhcnJvdwBIZWx2ZXRpY2EtTmFycm93AGFycm93X2xlbmd0aF9jcm93AC9zdmcvc25vdwBzcHJpbmdfZWxlY3RyaWNhbF9lbWJlZGRpbmdfc2xvdwAvc3ZnL2xpZ2h0eWVsbG93AC9zdmcvZ3JlZW55ZWxsb3cAL3N2Zy9saWdodGdvbGRlbnJvZHllbGxvdwAvc3ZnL3llbGxvdwBmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93AGZsZXggc2Nhbm5lciBwdXNoLWJhY2sgb3ZlcmZsb3cAY291cmllcm5ldwBTcHJpbmdTbW9vdGhlcl9uZXcAVHJpYW5nbGVTbW9vdGhlcl9uZXcAZGlhZ19wcmVjb25fbmV3AFF1YWRUcmVlX25ldwBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcjJfbmV3AG4gJiYgbmV3AHNrZXcAc3RydmlldwAvc3ZnL2hvbmV5ZGV3ACAtYW5jaG9yIHcAc29ydHYAcG92OnBvdgBOb3YAaW52AGVxdWl2AHBpdgBub25hbWUuZ3YAR0RfcmFuayhnKVtyXS5hdiA9PSBHRF9yYW5rKGcpW3JdLnYAY2Mlc18lenUAY2MlcyslenUAL3N2Zy9wZXJ1AG51AG11ACVjJWxsdQBUaHUAdGF1AFRhdQBOdQBNdQBfcG9ydF8lc18oJWQpXyglZClfJXUATnVtYmVyIG9mIGl0ZXJhdGlvbnMgPSAldQBOdW1iZXIgb2YgaW5jcmVhc2VzID0gJXUAcGxhaW50ZXh0AHN0cmVzc3d0AGlucHV0AHRleHRsYXlvdXQAZG90X2xheW91dABuZWF0b19sYXlvdXQAaW5pdExheW91dABjbHVzdABtYXBDbHVzdABsYWJlbGp1c3QAc2NBZGp1c3QAQXVndXN0AGVkZ2VzZmlyc3QAbm9kZXNmaXJzdABtYXhpbWFsX2luZGVwZW5kZW50X2VkZ2Vfc2V0X2hlYXZlc3RfZWRnZV9wZXJub2RlX3N1cGVybm9kZXNfZmlyc3QAZXhpc3QAcmVhbGlnbk5vZGVsaXN0AGFwcGVuZE5vZGVsaXN0AHNsb3RfZnJvbV9jb25zdF9saXN0AHNsb3RfZnJvbV9saXN0AGRlZmF1bHRkaXN0AG1pbmRpc3QAcG93ZXJfZGlzdABncmFwaF9kaXN0AGF2Z19kaXN0AGdldEVkZ2VMaXN0AGlxdWVzdABsb3dhc3QAc3ByaW5nX2VsZWN0cmljYWxfZW1iZWRkaW5nX2Zhc3QAZ3Zfc29ydAB2aWV3cG9ydAB0YWlscG9ydAB1bmV4cGVjdGVkIHBhcnNlciBzdGF0ZSAtIHBsZWFzZSBzZW5kIGEgYnVnIHJlcG9ydABoZWFkcG9ydABodG1sX3BvcnQAaW5zZXJ0AFJUcmVlSW5zZXJ0AGZpbmRTVmVydABzdGFydABwYXJ0AGVzdGltYXRlX3RleHRfd2lkdGhfMXB0AHF1b3QAf3Jvb3QAbm90AG1ha2Vfdm5fc2xvdABlbWl0X3hkb3QAeGRvdDp4ZG90AGVwczp4ZG90AHN2Zzp4ZG90AGpwZzp4ZG90AHBuZzp4ZG90AGpwZWc6eGRvdABnaWY6eGRvdABqcGU6eGRvdAB4ZG90MS40Onhkb3QAeGRvdDEuMjp4ZG90AHNkb3QAbWlkZG90AGd2OmRvdABwbGFpbi1leHQ6ZG90AGRvdDpkb3QAZXBzOmRvdABjYW5vbjpkb3QAcGxhaW46ZG90AHN2Zzpkb3QAanBnOmRvdABwbmc6ZG90AGpwZWc6ZG90AGdpZjpkb3QAanBlOmRvdAB/Ym90AGRvRG90AHNwYW4tPmZvbnQAdmFneGJwcmludABlbmRwb2ludAB4ZG90X3BvaW50AGRlY2lkZV9wb2ludABVbnNhdGlzZmllZCBjb25zdHJhaW50AHRyYW5zcGFyZW50AGNvbXBvbmVudABpbnZhbGlkIGFyZ3VtZW50AGNvbW1lbnQAanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50AGNlbnQAaSA9PSBlY250AGFyaWFsbXQAZ2V0X2hhc2hfc2VjcmV0X3NhbHQAY2lyY3VpdABwb2x5X2luaXQATXVsdGlsZXZlbF9pbml0AG5zbGltaXQAbWNsaW1pdABQb3J0cmFpdABsaWdodAB2aXJ0dWFsX3dlaWdodABsaGVpZ2h0AEtQX1JpZ2h0AEJvb2ttYW4tTGlnaHQAZ3QAS1BfTGVmdABjaGFyc2V0AGluc2V0AGJpdGFycmF5X3Jlc2V0AGd2X2FyZW5hX3Jlc2V0AHN1YnNldABiaXRhcnJheV9zZXQAbWF0cml4X3NldABzY2FybGV0AC9zdmcvZGFya3Zpb2xldAAvc3ZnL2JsdWV2aW9sZXQAL3N2Zy92aW9sZXQAVHJlYnVjaGV0AGFneGdldAB0YWlsdGFyZ2V0AGxhYmVsdGFyZ2V0AGVkZ2V0YXJnZXQAaGVhZHRhcmdldABiaXRhcnJheV9nZXQAc3R5bGVzaGVldABzdHJpY3QAYWdjb3B5ZGljdABhZ21ha2VkYXRhZGljdAByZWMtPmRpY3QgPT0gZGF0YWRpY3QAd3JpdGVfZGljdABoaW50ZXJzZWN0AGd2YmlzZWN0AGVuY29kaW5nIHNwZWNpZmllZCBpbiBYTUwgZGVjbGFyYXRpb24gaXMgaW5jb3JyZWN0AGFzcGVjdABsYXllcnNlbGVjdABLUF9TdWJ0cmFjdABRdWFkVHJlZV9yZXB1bHNpdmVfZm9yY2VfaW50ZXJhY3QAY29tcGFjdABPY3QAcmVxdWVzdGVkIGZlYXR1cmUgcmVxdWlyZXMgWE1MX0RURCBzdXBwb3J0IGluIEV4cGF0AGxhYmVsZmxvYXQAbGFiZWxfZmxvYXQAU3BhcnNlTWF0cml4X2Zyb21fY29vcmRpbmF0ZV9mb3JtYXQAL3N2Zy93aGVhdABtb25jaGFpbnNfYXQAU2F0AEFncmFwaGluZm9fdABBZ2VkZ2VpbmZvX3QAQWdub2RlaW5mb190AFx0AHJvdyA8IG1lLT5ucm93cwBtaW51cwBvcGx1cwByYWRpdXMAaGVhcnRzAHNhbXBsZXBvaW50cwBkaXJlZGdlY29uc3RyYWludHMAbGV2ZWwgYXNzaWdubWVudCBjb25zdHJhaW50cwB4eSBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwB5eCBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwB4eSBvcnRob2dvbmFsIGNvbnN0cmFpbnRzAHl4IG9ydGhvZ29uYWwgY29uc3RyYWludHMAbGluZSBzZWdtZW50cwBzZXRfY2VsbF9oZWlnaHRzAHJlY3RzAGFjY291bnRpbmdSZXBvcnRTdGF0cwBlbnRpdHlUcmFja2luZ1JlcG9ydFN0YXRzAFphcGZEaW5nYmF0cwByZW1pbmNyb3NzAGNvbXByZXNzAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAGJyYXNzAGNsYXNzAGFwcGx5YXR0cnMAYWdtYWtlYXR0cnMAYmluZGF0dHJzAHBhcnNlX2xheWVycwBta0NsdXN0ZXJzAHJvdW5kX2Nvcm5lcnMAbWFrZV9iYXJyaWVycwBjZGF0YS5udG9wbGV2ZWwgPT0gYWdubm9kZXMoZykgLSBjZGF0YS5udmFycwBjYW5ub3QgcmVhbGxvYyBvcHMAY2Fubm90IHJlYWxsb2MgcG5scHMAZXBzAGNvcmVfbG9hZGltYWdlX3BzAGVwczpwcwBwczI6cHMAKGxpYik6cHMAZ3ZfdHJpbV96ZXJvcwBhZ3hidWZfdHJpbV96ZXJvcwB0ZXhneXJlaGVyb3MAaW1hZ2Vwb3MAdGlub3MAc2V0RWRnZUxhYmVsUG9zAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMAeGxpbnRlcnNlY3Rpb25zAGNvbHVtbnMAZGVqYXZ1c2FucwBuaW1idXNzYW5zAGxpYmVyYXRpb25zYW5zAGZyZWVzYW5zAE9wZW5TYW5zAG9mZnNldCA9PSBuX3Rlcm1zAGRpdGVtcwBkaWFtcwBjb2wgPCBtZS0+bmNvbHMAY2Fubm90IHJlYWxsb2MgZHEucG5scwBjYW5ub3QgcmVhbGxvYyBwbmxzAGxldmVscwBmb3JjZWxhYmVscwBkaWFnb25hbHMAbWVyZ2VfcmFua3MAc3BsaXRCbG9ja3MAaW52aXMAY2Fubm90IHJlYWxsb2MgdHJpcwBzZXRfY2VsbF93aWR0aHMAQ2FsY3VsYXRpbmcgc2hvcnRlc3QgcGF0aHMAeWVzAHNob3dib3hlcwBiZWF1dGlmeV9sZWF2ZXMAYXR0YWNoX2VkZ2VfbGFiZWxfY29vcmRpbmF0ZXMAcG9seWxpbmVzAHNwbGluZXMAb3J0aG9nb25hbCBsaW5lcwB0ZXhneXJldGVybWVzAG90aW1lcwBUaW1lcwBmb250bmFtZXMAcHJlZml4IG11c3Qgbm90IGJlIGJvdW5kIHRvIG9uZSBvZiB0aGUgcmVzZXJ2ZWQgbmFtZXNwYWNlIG5hbWVzAFNwYXJzZU1hdHJpeF9zdW1fcmVwZWF0X2VudHJpZXMAcGVyaXBoZXJpZXMAR2V0QnJhbmNoZXMAZiA8IGdyYXBoW2pdLm5lZGdlcwBtaW5tYXhfZWRnZXMAZXhjaGFuZ2VfdHJlZV9lZGdlcwBtYWtlU3RyYWlnaHRFZGdlcwB1bmRvQ2x1c3RlckVkZ2VzAGNvbXBvdW5kRWRnZXMAbWVyZ2VfdHJlZXMAX19jbHVzdGVybm9kZXMAYWdubm9kZXMATkRfaWQobnApID09IG5fbm9kZXMATG9hZE5vZGVzAHNpZGVzAHNwYWRlcwB2ZXJ0aWNlcwBjb29yZHMAc2V0Ym91bmRzAG1kcwBjZHMAbWFrZVNlbGZBcmNzAGVtaXRfZWRnZV9ncmFwaGljcwBjbHVicwBjb25zb2xhcwAlbGYlMnMAClN0cmluZyBzdGFydGluZzo8JS44MHMAClN0cmluZyBzdGFydGluZzoiJS44MHMAICUuKnMAJXMlcwBleHBhdDogQWNjb3VudGluZyglcCk6IERpcmVjdCAlMTBsbHUsIGluZGlyZWN0ICUxMGxsdSwgYW1wbGlmaWNhdGlvbiAlOC4yZiVzACUuKnMlYyVzACAlczolcwBfXyVkOiVzAC8lcy8lcwAlcy0lcwAsJXMAIGZvbnQtZmFtaWx5PSIlcwAiIHN0cm9rZS1kYXNoYXJyYXk9IiVzACIgY2xhc3M9IiVzAHBvbHkgJXMAKCglZiwlZiksKCVmLCVmKSkgJXMgJXMAY29sb3IgJXMAcm9vdCA9ICVzACBUaXRsZTogJXMAInN0cmljdCI6ICVzAGNvdXIAdXRyAGFwcGVuZGF0dHIAYWRkYXR0cgBiZWdpbnN0cgBmc3RyAHN0cnZpZXdfc3RyAHBvdl9jb2xvcl9hc19zdHIAdnBzYyE9bnVsbHB0cgBiZW5kVG9TdHIAdWFycgBjcmFycgBsYXJyAGhhcnIAZGFycgB1QXJyAHJBcnIAbEFycgBoQXJyAGRBcnIAQXByAFNwYXJzZU1hdHJpeF9tdWx0aXBseV92ZWN0b3IAdGVybWluYXRvcgBpbnN1bGF0b3IAaW50ZXJuYWxFbnRpdHlQcm9jZXNzb3IAdGV4Z3lyZWN1cnNvcgBzeW50YXggZXJyb3IAbW9uZXlfZ2V0IGVycm9yAEVycm9yAHJmbG9vcgBsZmxvb3IAbGFiZWxmb250Y29sb3IAcGVuY29sb3IAZmlsbGNvbG9yAGJnY29sb3IAcm93IG1ham9yAGNvbHVtbiBtYWpvcgBuZWlnaGJvcgBzdHlsZV9vcgBtcgByYW5rZGlyAHBhZ2VkaXIAbGF5ZXIAdXBwZXIgPj0gbG93ZXIATm9kZUNvdmVyAC9zdmcvc2lsdmVyAGNsdXN0ZXIAZXhwYW5kQ2x1c3RlcgBycHJvbW90ZXIAbHByb21vdGVyAGNlbnRlcgBtYXhpdGVyAHBhcnRpYWwgY2hhcmFjdGVyACEgcm9vdFBhcnNlci0+bV9wYXJlbnRQYXJzZXIAZGtncmVlbmNvcHBlcgBjb29sY29wcGVyAGd2X3NvcnRfY29tcGFyX3dyYXBwZXIAdGFwZXIAb3ZlcmxhcF9iZXppZXIAZmlnX2JlemllcgBjb3VyaWVyAENvdXJpZXIAaGllcgBkYWdnZXIARGFnZ2VyAG91dHB1dG9yZGVyAHBvc3RvcmRlcgBmbGF0X3Jlb3JkZXIAY2VsbGJvcmRlcgBmaXhMYWJlbE9yZGVyAGN5bGluZGVyAC9zdmcvbGF2ZW5kZXIAcmVuZGVyAGZvbGRlcgBjbHVzdGVyX2xlYWRlcgBORF9VRl9zaXplKG4pIDw9IDEgfHwgbiA9PSBsZWFkZXIAT2N0b2JlcgByZWZlcmVuY2UgdG8gaW52YWxpZCBjaGFyYWN0ZXIgbnVtYmVyAE5vdmVtYmVyAFNlcHRlbWJlcgBEZWNlbWJlcgBtYWNyAGJyAHN0YXIAZmVsZHNwYXIAcmVndWxhcgBpb3NfYmFzZTo6Y2xlYXIAYnJ2YmFyAE1hcgBccgBORF9yYW5rKHYpID09IHIAc3RyZXEAc3Rydmlld19lcQBzdHJ2aWV3X3N0cl9lcQBzdHJ2aWV3X2Nhc2Vfc3RyX2VxAHN0cnZpZXdfY2FzZV9lcQB2cAAlJUJlZ2luUHJvbG9nCi9Eb3REaWN0IDIwMCBkaWN0IGRlZgpEb3REaWN0IGJlZ2luCgovc2V0dXBMYXRpbjEgewptYXJrCi9FbmNvZGluZ1ZlY3RvciAyNTYgYXJyYXkgZGVmCiBFbmNvZGluZ1ZlY3RvciAwCgpJU09MYXRpbjFFbmNvZGluZyAwIDI1NSBnZXRpbnRlcnZhbCBwdXRpbnRlcnZhbApFbmNvZGluZ1ZlY3RvciA0NSAvaHlwaGVuIHB1dAoKJSBTZXQgdXAgSVNPIExhdGluIDEgY2hhcmFjdGVyIGVuY29kaW5nCi9zdGFybmV0SVNPIHsKICAgICAgICBkdXAgZHVwIGZpbmRmb250IGR1cCBsZW5ndGggZGljdCBiZWdpbgogICAgICAgIHsgMSBpbmRleCAvRklEIG5lIHsgZGVmIH17IHBvcCBwb3AgfSBpZmVsc2UKICAgICAgICB9IGZvcmFsbAogICAgICAgIC9FbmNvZGluZyBFbmNvZGluZ1ZlY3RvciBkZWYKICAgICAgICBjdXJyZW50ZGljdCBlbmQgZGVmaW5lZm9udAp9IGRlZgovVGltZXMtUm9tYW4gc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUl0YWxpYyBzdGFybmV0SVNPIGRlZgovVGltZXMtQm9sZCBzdGFybmV0SVNPIGRlZgovVGltZXMtQm9sZEl0YWxpYyBzdGFybmV0SVNPIGRlZgovSGVsdmV0aWNhIHN0YXJuZXRJU08gZGVmCi9IZWx2ZXRpY2EtT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgovSGVsdmV0aWNhLUJvbGQgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYS1Cb2xkT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgovQ291cmllciBzdGFybmV0SVNPIGRlZgovQ291cmllci1PYmxpcXVlIHN0YXJuZXRJU08gZGVmCi9Db3VyaWVyLUJvbGQgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXItQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKY2xlYXJ0b21hcmsKfSBiaW5kIGRlZgoKJSVCZWdpblJlc291cmNlOiBwcm9jc2V0IGdyYXBodml6IDAgMAovY29vcmQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgovZGVmYXVsdC1mb250LWZhbWlseSAvVGltZXMtUm9tYW4gZGVmCi9jb29yZGZvbnQgY29vcmQtZm9udC1mYW1pbHkgZmluZGZvbnQgOCBzY2FsZWZvbnQgZGVmCgovSW52U2NhbGVGYWN0b3IgMS4wIGRlZgovc2V0X3NjYWxlIHsKICAgICAgIGR1cCAxIGV4Y2ggZGl2IC9JbnZTY2FsZUZhY3RvciBleGNoIGRlZgogICAgICAgc2NhbGUKfSBiaW5kIGRlZgoKJSBzdHlsZXMKL3NvbGlkIHsgW10gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2Rhc2hlZCB7IFs5IEludlNjYWxlRmFjdG9yIG11bCBkdXAgXSAwIHNldGRhc2ggfSBiaW5kIGRlZgovZG90dGVkIHsgWzEgSW52U2NhbGVGYWN0b3IgbXVsIDYgSW52U2NhbGVGYWN0b3IgbXVsXSAwIHNldGRhc2ggfSBiaW5kIGRlZgovaW52aXMgey9maWxsIHtuZXdwYXRofSBkZWYgL3N0cm9rZSB7bmV3cGF0aH0gZGVmIC9zaG93IHtwb3AgbmV3cGF0aH0gZGVmfSBiaW5kIGRlZgovYm9sZCB7IDIgc2V0bGluZXdpZHRoIH0gYmluZCBkZWYKL2ZpbGxlZCB7IH0gYmluZCBkZWYKL3VuZmlsbGVkIHsgfSBiaW5kIGRlZgovcm91bmRlZCB7IH0gYmluZCBkZWYKL2RpYWdvbmFscyB7IH0gYmluZCBkZWYKL3RhcGVyZWQgeyB9IGJpbmQgZGVmCgolIGhvb2tzIGZvciBzZXR0aW5nIGNvbG9yIAovbm9kZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgovZWRnZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgovZ3JhcGhjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL25vcGNvbG9yIHtwb3AgcG9wIHBvcH0gYmluZCBkZWYKCi9iZWdpbnBhZ2UgewklIGkgaiBucGFnZXMKCS9ucGFnZXMgZXhjaCBkZWYKCS9qIGV4Y2ggZGVmCgkvaSBleGNoIGRlZgoJL3N0ciAxMCBzdHJpbmcgZGVmCglucGFnZXMgMSBndCB7CgkJZ3NhdmUKCQkJY29vcmRmb250IHNldGZvbnQKCQkJMCAwIG1vdmV0bwoJCQkoXCgpIHNob3cgaSBzdHIgY3ZzIHNob3cgKCwpIHNob3cgaiBzdHIgY3ZzIHNob3cgKFwpKSBzaG93CgkJZ3Jlc3RvcmUKCX0gaWYKfSBiaW5kIGRlZgoKL3NldF9mb250IHsKCWZpbmRmb250IGV4Y2gKCXNjYWxlZm9udCBzZXRmb250Cn0gZGVmCgolIGRyYXcgdGV4dCBmaXR0ZWQgdG8gaXRzIGV4cGVjdGVkIHdpZHRoCi9hbGlnbmVkdGV4dCB7CQkJJSB3aWR0aCB0ZXh0CgkvdGV4dCBleGNoIGRlZgoJL3dpZHRoIGV4Y2ggZGVmCglnc2F2ZQoJCXdpZHRoIDAgZ3QgewoJCQlbXSAwIHNldGRhc2gKCQkJdGV4dCBzdHJpbmd3aWR0aCBwb3Agd2lkdGggZXhjaCBzdWIgdGV4dCBsZW5ndGggZGl2IDAgdGV4dCBhc2hvdwoJCX0gaWYKCWdyZXN0b3JlCn0gZGVmCgovYm94cHJpbSB7CQkJCSUgeGNvcm5lciB5Y29ybmVyIHhzaXplIHlzaXplCgkJNCAyIHJvbGwKCQltb3ZldG8KCQkyIGNvcHkKCQlleGNoIDAgcmxpbmV0bwoJCTAgZXhjaCBybGluZXRvCgkJcG9wIG5lZyAwIHJsaW5ldG8KCQljbG9zZXBhdGgKfSBiaW5kIGRlZgoKL2VsbGlwc2VfcGF0aCB7CgkvcnkgZXhjaCBkZWYKCS9yeCBleGNoIGRlZgoJL3kgZXhjaCBkZWYKCS94IGV4Y2ggZGVmCgltYXRyaXggY3VycmVudG1hdHJpeAoJbmV3cGF0aAoJeCB5IHRyYW5zbGF0ZQoJcnggcnkgc2NhbGUKCTAgMCAxIDAgMzYwIGFyYwoJc2V0bWF0cml4Cn0gYmluZCBkZWYKCi9lbmRwYWdlIHsgc2hvd3BhZ2UgfSBiaW5kIGRlZgovc2hvd3BhZ2UgeyB9IGRlZgoKL2xheWVyY29sb3JzZXEKCVsJJSBsYXllciBjb2xvciBzZXF1ZW5jZSAtIGRhcmtlc3QgdG8gbGlnaHRlc3QKCQlbMCAwIDBdCgkJWy4yIC44IC44XQoJCVsuNCAuOCAuOF0KCQlbLjYgLjggLjhdCgkJWy44IC44IC44XQoJXQpkZWYKCi9sYXllcmxlbiBsYXllcmNvbG9yc2VxIGxlbmd0aCBkZWYKCi9zZXRsYXllciB7L21heGxheWVyIGV4Y2ggZGVmIC9jdXJsYXllciBleGNoIGRlZgoJbGF5ZXJjb2xvcnNlcSBjdXJsYXllciAxIHN1YiBsYXllcmxlbiBtb2QgZ2V0CglhbG9hZCBwb3Agc2V0aHNiY29sb3IKCS9ub2RlY29sb3Ige25vcGNvbG9yfSBkZWYKCS9lZGdlY29sb3Ige25vcGNvbG9yfSBkZWYKCS9ncmFwaGNvbG9yIHtub3Bjb2xvcn0gZGVmCn0gYmluZCBkZWYKCi9vbmxheWVyIHsgY3VybGF5ZXIgbmUge2ludmlzfSBpZiB9IGRlZgoKL29ubGF5ZXJzIHsKCS9teXVwcGVyIGV4Y2ggZGVmCgkvbXlsb3dlciBleGNoIGRlZgoJY3VybGF5ZXIgbXlsb3dlciBsdAoJY3VybGF5ZXIgbXl1cHBlciBndAoJb3IKCXtpbnZpc30gaWYKfSBkZWYKCi9jdXJsYXllciAwIGRlZgoKJSVFbmRSZXNvdXJjZQolJUVuZFByb2xvZwolJUJlZ2luU2V0dXAKMTQgZGVmYXVsdC1mb250LWZhbWlseSBzZXRfZm9udAolIC9hcnJvd2xlbmd0aCAxMCBkZWYKJSAvYXJyb3d3aWR0aCA1IGRlZgoKJSBtYWtlIHN1cmUgcGRmbWFyayBpcyBoYXJtbGVzcyBmb3IgUFMtaW50ZXJwcmV0ZXJzIG90aGVyIHRoYW4gRGlzdGlsbGVyCi9wZGZtYXJrIHdoZXJlIHtwb3B9IHt1c2VyZGljdCAvcGRmbWFyayAvY2xlYXJ0b21hcmsgbG9hZCBwdXR9IGlmZWxzZQolIG1ha2UgJzw8JyBhbmQgJz4+JyBzYWZlIG9uIFBTIExldmVsIDEgZGV2aWNlcwovbGFuZ3VhZ2VsZXZlbCB3aGVyZSB7cG9wIGxhbmd1YWdlbGV2ZWx9ezF9IGlmZWxzZQoyIGx0IHsKICAgIHVzZXJkaWN0ICg8PCkgY3ZuIChbKSBjdm4gbG9hZCBwdXQKICAgIHVzZXJkaWN0ICg+PikgY3ZuIChbKSBjdm4gbG9hZCBwdXQKfSBpZgoKJSVFbmRTZXR1cABzdXAAZ3JvdXAAY3VwAHRoaW5zcABlbnNwAGVtc3AAbmJzcABwZXJwAHdlaWVycABnZW5lcmF0ZS1jb25zdHJhaW50cy5jcHAAYmxvY2suY3BwAGNzb2x2ZV9WUFNDLmNwcAB/dG9wAHByb3AAYWd4YnBvcABub3AAYXN5bXAAY29tcABmaW5kQ0NvbXAAYm1wAHNjYWxlX2NsYW1wAHhscABscCAhPSBjbHAAdGFpbF9scABoZWFkX2xwAHRhaWx0b29sdGlwAGxhYmVsdG9vbHRpcABlZGdldG9vbHRpcABoZWFkdG9vbHRpcABoZWxsaXAAdGFpbGNsaXAAaGVhZGNsaXAAL3N2Zy9wYXBheWF3aGlwAGhwAHRyYW5zcG9zZV9zdGVwAGNvbXB1dGVTdGVwAGxheWVybGlzdHNlcABsYXllcnNlcABpcHNlcAByYW5rc2VwAG5vZGVzZXAAc3ViZ3JhcGhzIG5lc3RlZCBtb3JlIHRoYW4gJWQgZGVlcABTZXAAc2ZkcABjcAB3ZWJwAGlkbWFwAGNsdXN0ZXJfbWFwAGNtYXB4Om1hcABlcHM6bWFwAGNtYXB4X25wOm1hcABpbWFwX25wOm1hcABpc21hcDptYXAAaW1hcDptYXAAY21hcDptYXAAc3ZnOm1hcABqcGc6bWFwAHBuZzptYXAAanBlZzptYXAAZ2lmOm1hcABqcGU6bWFwAG92ZXJsYXAAbGV2ZWxzZ2FwAGNhcABLUF9VcAAlSTolTTolUyAlcABzdGFydCA8PSBwAHJzcXVvAGxzcXVvAHJkcXVvAGxkcXVvAGJkcXVvAHNicXVvAHJzYXF1bwBsc2FxdW8AcmFxdW8AbGFxdW8AYXV0bwBOdW5pdG8AL3N2Zy90b21hdG8AbmVhdG8AZXVybwAvc3ZnL2dhaW5zYm9ybwBNZXRob2RaZXJvAG1pY3JvAG5pbWJ1c21vbm8AbGliZXJhdGlvbm1vbm8AZnJlZW1vbm8AYXJpbW8AcmF0aW8AcG9ydGhvAHJobwBSaG8AL3N2Zy9pbmRpZ28AcGluZm8AY2NncmFwaGluZm8AY2Nnbm9kZWluZm8AY2xfZWRnZV9pbmZvAGdldFBhY2tJbmZvAG1ha2VJbmZvAHBhcnNlUGFja01vZGVJbmZvAGNpcmNvAGljbwBcJTAzbwAvc3ZnL3Jvc3licm93bgAvc3ZnL3NhbmR5YnJvd24AdmVyeWRhcmticm93bgAvc3ZnL3NhZGRsZWJyb3duAC9zdmcvYnJvd24AS1BfRG93bgBjYW5ub3QgY2hhbmdlIHNldHRpbmcgb25jZSBwYXJzaW5nIGhhcyBiZWd1bgBTdW4ASnVuAHRob3JuAC9zdmcvY3JpbXNvbgB4ZG90X2pzb24AeGRvdF9qc29uOmpzb24AanNvbjA6anNvbgBvbWljcm9uAE9taWNyb24Ac2Nhcm9uAFNjYXJvbgB3ZWJtYXJvb24AeDExbWFyb29uAC9zdmcvbWFyb29uAC9zdmcvbGlnaHRzYWxtb24AL3N2Zy9kYXJrc2FsbW9uAC9zdmcvc2FsbW9uAHVwc2lsb24AZXBzaWxvbgBVcHNpbG9uAEVwc2lsb24AcmVzb2x1dGlvbgBkaXN0b3J0aW9uAHN0ZDo6ZXhjZXB0aW9uAHBhcnRpdGlvbgBkb3RfcG9zaXRpb24AU2V0dGluZyB1cCBzdHJlc3MgZnVuY3Rpb24AdW5jbG9zZWQgQ0RBVEEgc2VjdGlvbgBwb3N0YWN0aW9uAHJvdGF0aW9uAG9yaWVudGF0aW9uAGFib21pbmF0aW9uAGFjY291bnRpbmdHZXRDdXJyZW50QW1wbGlmaWNhdGlvbgB4ZG90dmVyc2lvbgBTVHNldFVuaW9uADxwb2x5Z29uAGhleGFnb24Ac2VwdGFnb24AcGVudGFnb24AdHJpcGxlb2N0YWdvbgBkb3VibGVvY3RhZ29uAC9zdmcvbGVtb25jaGlmZm9uAE1vbgBwbHVzbW4Abm90aW4AaXNpbgAvc3ZnL21vY2Nhc2luAHBpbgBtaW4Adm9yb19tYXJnaW4AaW5maW4Ab25lZF9vcHRpbWl6ZXJfdHJhaW4AcGxhaW4AbWFrZV9jaGFpbgBtZXJnZV9jaGFpbgBkZWxldGVNaW4AZmluZE1pbgB2YWxpZ24AYmFsaWduAHllbgBNdWx0aWxldmVsX2NvYXJzZW4AY3VycmVuAFBvYnNvcGVuAGd2X2ZvcGVuAGd2dXNlcnNoYXBlX29wZW4AZW50aXR5VHJhY2tpbmdPbk9wZW4AL3N2Zy9saW5lbgBkaW1lbgBtaW5sZW4Ac3R5bGVfdG9rZW4AdW5jbG9zZWQgdG9rZW4AL3N2Zy95ZWxsb3dncmVlbgBtZWRpdW1mb3Jlc3RncmVlbgAvc3ZnL2ZvcmVzdGdyZWVuAC9zdmcvbGlnaHRncmVlbgBodW50ZXJzZ3JlZW4AL3N2Zy9sYXduZ3JlZW4AL3N2Zy9kYXJrZ3JlZW4AL3N2Zy9tZWRpdW1zcHJpbmdncmVlbgAvc3ZnL3NwcmluZ2dyZWVuAC9zdmcvZGFya29saXZlZ3JlZW4AL3N2Zy9saW1lZ3JlZW4AL3N2Zy9wYWxlZ3JlZW4Ad2ViZ3JlZW4AL3N2Zy9saWdodHNlYWdyZWVuAC9zdmcvbWVkaXVtc2VhZ3JlZW4AL3N2Zy9kYXJrc2VhZ3JlZW4AL3N2Zy9zZWFncmVlbgB4MTFncmVlbgAvc3ZnL2dyZWVuAEdyZWVuAC9zdmcvbGlnaHRjeWFuAC9zdmcvZGFya2N5YW4AL3N2Zy9jeWFuAG5ld3RhbgBkYXJrdGFuAC9zdmcvdGFuAHJvd3NwYW4AY29sc3BhbgBuYW4AdGltZXNuZXdyb21hbgBuaW1idXNyb21hbgB0aW1lc3JvbWFuAFRpbWVzLVJvbWFuAFBhbGF0aW5vLVJvbWFuAE5ld0NlbnR1cnlTY2hsYmstUm9tYW4ASmFuAEdEX3JhbmsoZylbcl0ubiA8PSBHRF9yYW5rKGcpW3JdLmFuAGFneGJwdXRfbgBcbgBuX25vZGVzID09IGdyYXBoLT5uAEEtPm0gPT0gQS0+bgBqb2ItPm9iai0+dS5uAG56YyA9PSAoc2l6ZV90KW4AcywlbGYsJWxmJW4AIGUsJWxmLCVsZiVuACVkICUxWyJdJW4AdiA9PSBuAGIgPT0gbgBuY2x1c3RlciA8PSBuAHBzeW0AYWxlZnN5bQB0aGV0YXN5bQBxdWFudHVtAHN1bQAvc3ZnL3BsdW0AaW52dHJhcGV6aXVtAG1lZGl1bQA5OnByaXNtAGxybQBjdXN0b20AYXB0ci0+dGFnID09IFRfYXRvbQAvZGV2L3VyYW5kb20AZ3ZfcmFuZG9tAHJsbQBzaW0ASU1EU19naXZlbl9kaW0Ab3JkbQBwYXJhbGxlbG9ncmFtAC9zdmcvbWludGNyZWFtAEp1bAB0bABmcmFzbABTeW1ib2wAZmluZENvbAA8P3htbAB5dW1sAHV1bWwAb3VtbABpdW1sAGV1bWwAYXVtbABZdW1sAFV1bWwAT3VtbABJdW1sAEV1bWwAQXVtbABjb3JlX2xvYWRpbWFnZV92cm1sAGpwZzp2cm1sAHBuZzp2cm1sAGpwZWc6dnJtbABnaWY6dnJtbABqcGU6dnJtbABidWxsAGZpbGwAL3N2Zy9zZWFzaGVsbABmb3JhbGwAQXByaWwAcGVybWlsAHJjZWlsAGxjZWlsAGNjZWRpbABDY2VkaWwAYXJyb3d0YWlsAGx0YWlsAHNhbWV0YWlsAGxldmVsID49IDAgJiYgbGV2ZWwgPD0gbi0+bGV2ZWwAc3RyZXNzX21ham9yaXphdGlvbl9rRF9ta2VybmVsAGlzX3BhcmFsbGVsAENhbGN1bGF0aW5nIGNpcmN1aXQgbW9kZWwAQ2FsY3VsYXRpbmcgc3Vic2V0IG1vZGVsAENhbGN1bGF0aW5nIE1EUyBtb2RlbAB4bGFiZWwAdGFpbGxhYmVsAGhlYWRsYWJlbABncmFwaCBsYWJlbABpZXhjbABvYmpwLT5sYmwAb3ZhbABtZXJnZXZpcnR1YWwAL3N2Zy9saWdodGNvcmFsAC9zdmcvY29yYWwAU3BhcnNlTWF0cml4X2Zyb21fY29vcmRpbmF0ZV9hcnJheXNfaW50ZXJuYWwATXVsdGlsZXZlbF9jb2Fyc2VuX2ludGVybmFsAFF1YWRUcmVlX2FkZF9pbnRlcm5hbABhcnJvd19sZW5ndGhfbm9ybWFsAGFyaWFsAHJhZGlhbAAvc3ZnL3RlYWwAcmVhbABsb2NhbABlc3RpbWF0ZV9jaGFyYWN0ZXJfd2lkdGhfY2Fub25pY2FsAGdsb2JhbABxLT5sAC4uLy4uL2xpYi9jZ3JhcGgvc2Nhbi5sAHRrOnRrAGdpZjp0awBwYXRjaHdvcmsAdG9rAGJvb2sAQXZhbnRHYXJkZS1Cb29rAHNpbmsAb3ZlcmxhcF9zaHJpbmsAc3BpY3lwaW5rAC9zdmcvaG90cGluawAvc3ZnL2xpZ2h0cGluawAvc3ZnL2RlZXBwaW5rAG5lb25waW5rAC9zdmcvcGluawBuZXdyYW5rAGNsdXN0ZXJyYW5rAF9uZXdfcmFuawBpbnN0YWxsX2luX3JhbmsAcmVtb3ZlX2Zyb21fcmFuawAvc3ZnL2Nvcm5zaWxrAG9uZWJsb2NrAHYtPmxlZnQtPmJsb2NrID09IHYtPnJpZ2h0LT5ibG9jawAvc3ZnL2ZpcmVicmljawBQUWNoZWNrAHBhY2sAL3N2Zy9ibGFjawBCbGFjawBiYWNrAHp3agB6d25qAGpvYi0+b2JqAGdldGludHJzeGkAcHNpAFBzaQBDYWxpYnJpAEZyaQB0d29waQBkcGkAdm9yb25vaQBWb3Jvbm9pAGNoYW5pAGRlbWkAQm9va21hbi1EZW1pAEF2YW50R2FyZGUtRGVtaQAvc3ZnL2RhcmtraGFraQAvc3ZnL2toYWtpAHBoaQBjaGkAUGhpAENoaQBkaQBYaQBQaQBORF9pZChucCkgPT0gaQBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcl9zbW9vdGgAU3ByaW5nU21vb3RoZXJfc21vb3RoAGJvdGgAc3RhcnRzd2l0aABsaW5lbGVuZ3RoAGJhZF9hcnJheV9uZXdfbGVuZ3RoAGF2ZXJhZ2VfZWRnZV9sZW5ndGgAZXRoAHBlbndpZHRoAGx3aWR0aABzZXRsaW5ld2lkdGgAc2hvcnRwYXRoAGZvbnRwYXRoAFBvYnNwYXRoAGJlZ2lucGF0aABpbWFnZXBhdGgAZW5kcGF0aABzdHJhaWdodF9wYXRoAG1hcF9wYXRoADxwYXRoAGNhbm5vdCBmaW5kIHRyaWFuZ2xlIHBhdGgAL3N2Zy9sYXZlbmRlcmJsdXNoAGZsZXNoAG9zbGFzaABPc2xhc2gAZHRzdHJoYXNoAHN0cmRpY3RfaGFzaABuZGFzaABtZGFzaABkaWdyYXBoAHN1YmdyYXBoAGNvbnN0cnVjdF9ncmFwaABjaGtTZ3JhcGgAY2xvc2VzdF9wYWlyczJncmFwaABhZ2RlbGV0ZSBvbiB3cm9uZyBncmFwaABjb25uZWN0R3JhcGgAdXBzaWgAJXNsaW5lLXRocm91Z2gAY2hhblNlYXJjaABSVHJlZVNlYXJjaABNYXJjaABEaXNjb25CcmFuY2gAUGlja0JyYW5jaABBZGRCcmFuY2gALi4vLi4vbGliL3V0aWwvYml0YXJyYXkuaAAuLi8uLi9saWIvdXRpbC9zdHJ2aWV3LmgALi4vLi4vbGliL3V0aWwvc29ydC5oAC4uLy4uL2xpYi9jZ3JhcGgvbm9kZV9zZXQuaAAuLi8uLi9saWIvdXRpbC9zdHJlcS5oAC4uLy4uL2xpYi91dGlsL3N0YXJ0c3dpdGguaAAuLi8uLi9saWIvdXRpbC9ndl9tYXRoLmgALi4vLi4vbGliL3V0aWwvYWd4YnVmLmgALi4vLi4vbGliL3V0aWwvdG9rZW5pemUuaAAuLi8uLi9saWIvdXRpbC9hbGxvYy5oAGF1eGcAY29yZV9sb2FkaW1hZ2Vfc3ZnAHN2ZzpzdmcAanBnOnN2ZwBwbmc6c3ZnAGpwZWc6c3ZnAGdpZjpzdmcAanBlOnN2ZwBzdmdfaW5saW5lOnN2ZwBBdWcAZG9Qcm9sb2cAcG93ZXJfaXRlcmF0aW9uX29ydGhvZwBwbmcAaWRlYWxfZGlzdF9zY2hlbWUgdmFsdWUgd3JvbmcAeGRvdCB2ZXJzaW9uICIlcyIgdG9vIGxvbmcAY29uZwBsYmxlbmNsb3NpbmcAYmFzaWNfc3RyaW5nAGZhaWx1cmUgbWFsbG9jJ2luZyBmb3IgcmVzdWx0IHN0cmluZwBzcHJpbmcAb3JkZXJpbmcAZ2VuZXJhdGVSYW5kb21PcmRlcmluZwBhcmluZwBBcmluZwBEYW1waW5nAFdhcm5pbmcAb3ZlcmxhcF9zY2FsaW5nAHggYW5kIHkgc2NhbGluZwBvbGQgc2NhbGluZwBzbW9vdGhpbmcAdW5rbm93biBlbmNvZGluZwBtdWx0aWxldmVsX3NwcmluZ19lbGVjdHJpY2FsX2VtYmVkZGluZwBzcHJpbmdfZWxlY3RyaWNhbF9zcHJpbmdfZW1iZWRkaW5nAGNlbGxwYWRkaW5nAGNlbGxzcGFjaW5nAHJhbmcAbGFuZwBmaXZlcG92ZXJoYW5nAHRocmVlcG92ZXJoYW5nAG5vdmVyaGFuZwBlbWl0X2h0bWxfaW1nAGxnAG9yaWcAc3psaWcAb2VsaWcAYWVsaWcAT0VsaWcAQUVsaWcAY29yZV9sb2FkaW1hZ2VfZmlnAGpwZzpmaWcAcG5nOmZpZwBmaWc6ZmlnAGpwZWc6ZmlnAGdpZjpmaWcAanBlOmZpZwBlZ2cAbmV4dF9zZWcAcmVnAGpwZWcAaSA9PSBkZWcAZGcAY2cAY2xvc2VzdWJnAG1pc21hdGNoZWQgdGFnAGJlei0+c2ZsYWcAYmV6LT5lZmxhZwAhKmZsYWcAIWZsYWcAPGcAJS41ZywlLjVnLCUuNWcsJS41ZwAlLjVnICUuNWcAJWcgJWcAYm94SW50ZXJzZWN0ZgBlcHNmAGFnZWRnZXNlcWNtcGYAY2N3cm90YXRlcGYAZm5vZgBpbmYAc2VsZgBoYWxmACVsZiVsZiVsZiVsZgAlbGYsJWxmLCVsZiwlbGYsJWxmACUqZiAlKmYgJWxmICVsZgBsaWJlcmF0aW9uc2VyaWYAZnJlZXNlcmlmAHNhbnMtU2VyaWYAZ2lmAC9zdmcvcGVhY2hwdWZmAHJpZmYAYWNjb3VudGluZ1JlcG9ydERpZmYAKFhtbEJpZ0NvdW50KS0xIC0gcm9vdFBhcnNlci0+bV9hbGxvY190cmFja2VyLmJ5dGVzQWxsb2NhdGVkID49IGFic0RpZmYAdGFpbGhyZWYAbGFiZWxocmVmAGVkZ2VocmVmAGhlYWRocmVmAG9yZGYAcGRmAHNpZ21hZgBcZgAlLjBMZgAlTGYAdXMtPmYAJS4wM2YAJXMgdHJhbnNtaXQgJS4zZgByZ2I8JTkuM2YsICU5LjNmLCAlOS4zZj4gdHJhbnNtaXQgJS4zZgAlLjAyZgAlLjJmACUuMGYsJS4wZiwlLjBmLCUuMGYAICUuMGYsJS4wZgAlLjBmICUuMGYgJS4wZiAlLjBmACIgZmlsbC1vcGFjaXR5PSIlZgAiIHN0cm9rZS1vcGFjaXR5PSIlZgAKZmluYWwgZSA9ICVmAGJyb256ZQBhcnJvd3NpemUAbGFiZWxmb250c2l6ZQBzZWFyY2hzaXplAGZpeGVkc2l6ZQBub2RlX3NldF9zaXplAHRleHRzcGFuX3NpemUAc3ZnX3NpemUAaW5kZXggPCBsaXN0LT5zaXplAGNhcGFjaXR5ID4gZGljdC0+c2l6ZQBjYXBhY2l0eSA+IHNlbGYtPnNpemUAYnouc2l6ZQBwb2ludC1zaXplAFNJWkVfTUFYIC0gc2l6ZW9mKHNpemVfdCkgLSBFWFBBVF9NQUxMT0NfUEFERElORyA+PSBzaXplAG5vcm1hbGl6ZQBFTGluaXRpYWxpemUAbWtNYXplAGljdXJ2ZQB0cnlfcmVzZXJ2ZQBub2RlX3NldF9yZW1vdmUAc3RyZGljdF9yZW1vdmUAc29sdmUAIXYtPmFjdGl2ZQAtYWN0aXZlAGZvbnRfaW5fbGlzdF9wZXJtaXNzaXZlAC9zdmcvb2xpdmUAdWdyYXZlAG9ncmF2ZQBpZ3JhdmUAZWdyYXZlAGFncmF2ZQBVZ3JhdmUAT2dyYXZlAElncmF2ZQBFZ3JhdmUAQWdyYXZlAHRydWUAL3N2Zy9iaXNxdWUAb2JsaXF1ZQBBdmFudEdhcmRlLUJvb2tPYmxpcXVlAEF2YW50R2FyZGUtRGVtaU9ibGlxdWUASGVsdmV0aWNhLU5hcnJvdy1Cb2xkT2JsaXF1ZQBDb3VyaWVyLUJvbGRPYmxpcXVlAEhlbHZldGljYS1Cb2xkT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93LU9ibGlxdWUAQ291cmllci1PYmxpcXVlAEhlbHZldGljYS1PYmxpcXVlAG5hdnlibHVlAC9zdmcvbGlnaHRza3libHVlAC9zdmcvZGVlcHNreWJsdWUAL3N2Zy9za3libHVlAG5ld21pZG5pZ2h0Ymx1ZQAvc3ZnL21pZG5pZ2h0Ymx1ZQAvc3ZnL2xpZ2h0Ymx1ZQAvc3ZnL2NhZGV0Ymx1ZQAvc3ZnL2Nvcm5mbG93ZXJibHVlAC9zdmcvZG9kZ2VyYmx1ZQAvc3ZnL3Bvd2RlcmJsdWUAbmVvbmJsdWUAL3N2Zy9tZWRpdW1ibHVlAC9zdmcvbGlnaHRzdGVlbGJsdWUAL3N2Zy9zdGVlbGJsdWUAL3N2Zy9yb3lhbGJsdWUAL3N2Zy9kYXJrYmx1ZQByaWNoYmx1ZQBsaWdodHNsYXRlYmx1ZQAvc3ZnL21lZGl1bXNsYXRlYmx1ZQAvc3ZnL2RhcmtzbGF0ZWJsdWUAL3N2Zy9zbGF0ZWJsdWUAL3N2Zy9hbGljZWJsdWUAL3N2Zy9ibHVlAGNhbGxTdG9yZUVudGl0eVZhbHVlAHN0b3JlQXR0cmlidXRlVmFsdWUAQmx1ZQBuZWF0b19lbnF1ZXVlAFR1ZQB5YWN1dGUAdWFjdXRlAG9hY3V0ZQBpYWN1dGUAZWFjdXRlAGFhY3V0ZQBZYWN1dGUAVWFjdXRlAE9hY3V0ZQBJYWN1dGUARWFjdXRlAEFhY3V0ZQByZWZlcmVuY2UgdG8gZXh0ZXJuYWwgZW50aXR5IGluIGF0dHJpYnV0ZQBkdXBsaWNhdGUgYXR0cmlidXRlAG5vdGUAcHJpbWVyc2l0ZQByaWJvc2l0ZQByZXN0cmljdGlvbnNpdGUAcHJvdGVhc2VzaXRlAC9zdmcvZ2hvc3R3aGl0ZQAvc3ZnL25hdmFqb3doaXRlAC9zdmcvZmxvcmFsd2hpdGUAL3N2Zy9hbnRpcXVld2hpdGUAL3N2Zy93aGl0ZQBXaGl0ZQBwb3Bfb2JqX3N0YXRlAHBjcF9yb3RhdGUAY29uY2VudHJhdGUAZGVjb3JhdGUAUXVhZFRyZWVfcmVwdWxzaXZlX2ZvcmNlX2FjY3VtdWxhdGUAbm90cmFuc2xhdGUAL3N2Zy9jaG9jb2xhdGUAcGFyc2VyQ3JlYXRlAGdlb21VcGRhdGUAaW52aG91c2UAL3N2Zy9jaGFydHJldXNlAFhNTF9QYXJzZQA8ZWxsaXBzZQBkdXN0eXJvc2UAL3N2Zy9taXN0eXJvc2UAU3BhcnNlTWF0cml4X3RyYW5zcG9zZQBhZ2Nsb3NlAGVudGl0eVRyYWNraW5nT25DbG9zZQBTcGFyc2VNYXRyaXhfbXVsdGlwbHlfZGVuc2UAZmFsc2UAL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvcGFsZXR1cnF1b2lzZQAvc3ZnL3R1cnF1b2lzZQBwaGFzZQBTSVpFX01BWCAtIHJvb3RQYXJzZXItPm1fYWxsb2NfdHJhY2tlci5ieXRlc0FsbG9jYXRlZCA+PSBpbmNyZWFzZQAvc3ZnL2F6dXJlAHNpZ25hdHVyZQBtb3JlX2NvcmUATXNxdWFyZQBQYWxhdGlubyBMaW5vdHlwZQBBLT50eXBlID09IEItPnR5cGUAc3VwZQBlbGxpcHNlX3RhbmdlbnRfc2xvcGUAZ3ZyZW5kZXJfdXNlcnNoYXBlAG1pdGVyX3NoYXBlAGxhbmRzY2FwZQBMYW5kc2NhcGUASnVuZQBub25lAGRvY3VtZW50IGlzIG5vdCBzdGFuZGFsb25lAGNvdXNpbmUAL3N2Zy9tZWRpdW1hcXVhbWFyaW5lAC9zdmcvYXF1YW1hcmluZQA8cG9seWxpbmUAJXNvdmVybGluZQB1bmRlcmxpbmUAcmVhbGx5cm91dGVzcGxpbmUAUHJvdXRlc3BsaW5lAGxpbmVhcl9zcGxpbmUAYl9zcGxpbmUAb2xpbmUAYWd4YnVmX2lzX2lubGluZQBzdmdfaW5saW5lAHJlZmluZQBwcmltZQBQcmltZQAvc3ZnL2xpbWUAY29sb3JzY2hlbWUAbGFiZWxfc2NoZW1lAHNhbWUAbGFiZWxmb250bmFtZQBVRl9zZXRuYW1lAGZvbnRfbmFtZQBmb250LT5uYW1lAHVzLT5uYW1lAHJlc2VydmVkIHByZWZpeCAoeG1sKSBtdXN0IG5vdCBiZSB1bmRlY2xhcmVkIG9yIGJvdW5kIHRvIGFub3RoZXIgbmFtZXNwYWNlIG5hbWUAc3R5bGUAL3N2Zy90aGlzdGxlAHRpdGxlAC9zdmcvbWVkaXVtcHVycGxlAGRhcmtwdXJwbGUAd2VicHVycGxlAHJlYmVjY2FwdXJwbGUAdmVyeV9saWdodF9wdXJwbGUAbWVkX3B1cnBsZQB4MTFwdXJwbGUAL3N2Zy9wdXJwbGUAc2hhcGVmaWxlAGdyYWRpZW50YW5nbGUAcmVjdGFuZ2xlAFJlY3RhbmdsZQBsYWJlbGFuZ2xlAGludnRyaWFuZ2xlAGRlc3RpbmF0aW9uIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAc291cmNlIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAZGZzQ3ljbGUAZG91YmxlY2lyY2xlAE1jaXJjbGUAaW52aXNpYmxlAGV4cGF0X2hlYXBfaW5jcmVhc2VfdG9sZXJhYmxlAHRob3JuZGFsZQBpbnB1dHNjYWxlAG9zY2FsZQBpbWFnZXNjYWxlAC9zdmcvd2hpdGVzbW9rZQBtYW5kYXJpbm9yYW5nZQAvc3ZnL2RhcmtvcmFuZ2UAL3N2Zy9vcmFuZ2UAZXhjaGFuZ2UAL3N2Zy9iZWlnZQBuZXdlZGdlAGRlbGV0ZV9mYXN0X2VkZ2UAZGVsZXRlX2ZsYXRfZWRnZQBhZGRfdHJlZV9lZGdlAG1ha2VTdHJhaWdodEVkZ2UAbWFrZVNlbGZFZGdlAG1ha2VDb21wb3VuZEVkZ2UAIXVzZV9zdGFnZQBvc2FnZQBwYWdlAGd2bG9hZGltYWdlAHZlZQB0ZWUAUVVBRF9UUkVFX0hZQlJJRCwgc2l6ZSBsYXJnZXIgdGhhbiAlZCwgc3dpdGNoIHRvIGZhc3QgcXVhZHRyZWUAZmVhc2libGVfdHJlZQBub2RlX3NldF9mcmVlAGV4cGF0X2ZyZWUAZ3ZfYXJlbmFfZnJlZQBuZXdub2RlAGluc3RhbGxub2RlAGFnbm9kZQBkZWxldGVfZmFzdF9ub2RlAHBhY2ttb2RlAFNwbGl0Tm9kZQBvdGlsZGUAbnRpbGRlAGF0aWxkZQBPdGlsZGUATnRpbGRlAEF0aWxkZQBkaXZpZGUAdHJhZGUAZ3JhcGh2aXpfbm9kZV9pbmR1Y2UAc291cmNlAHJlcHVsc2l2ZWZvcmNlAGlsbGVnYWwgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UAZXJyb3IgaW4gcHJvY2Vzc2luZyBleHRlcm5hbCBlbnRpdHkgcmVmZXJlbmNlAHJlY3Vyc2l2ZSBlbnRpdHkgcmVmZXJlbmNlAGxhYmVsZGlzdGFuY2UAVEJfYmFsYW5jZQBUQmJhbGFuY2UAZGV2aWNlAG1vbm9zcGFjZQAvc3ZnL29sZGxhY2UAZmFjZQBzdWJlACAtYW5jaG9yIGUAczEtPmNvbW1fY29vcmQ9PXMyLT5jb21tX2Nvb3JkAE1yZWNvcmQAZm9yd2FyZABwcm9kAGxpZ2h0Z29sZGVucm9kAG1lZGl1bWdvbGRlbnJvZAAvc3ZnL2Rhcmtnb2xkZW5yb2QAL3N2Zy9wYWxlZ29sZGVucm9kAC9zdmcvZ29sZGVucm9kAC9zdmcvYnVybHl3b29kAGxpZ2h0d29vZABtZWRpdW13b29kAGRhcmt3b29kAF9iYWNrZ3JvdW5kAGNvbXBvdW5kAG5vIGVsZW1lbnQgZm91bmQAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQAL3N2Zy9ibGFuY2hlZGFsbW9uZABhcnJvd19sZW5ndGhfZGlhbW9uZABNZGlhbW9uZABub2RlX3NldF9maW5kAHN0cmRpY3RfZmluZABndnVzZXJzaGFwZV9maW5kAEVMbGVmdGJuZABleHBhbmQAY3VtYmVybGFuZABicmlnaHRnb2xkAG9sZGdvbGQAL3N2Zy9nb2xkAGJvbGQASGVsdmV0aWNhLU5hcnJvdy1Cb2xkAFRpbWVzLUJvbGQAQ291cmllci1Cb2xkAFBhbGF0aW5vLUJvbGQATmV3Q2VudHVyeVNjaGxiay1Cb2xkAEhlbHZldGljYS1Cb2xkACUwKmxsZAAlKmxsZAArJWxsZABuLT5icmFuY2hbaV0uY2hpbGQAJSsuNGxkACVzJWxkAHNvbGlkAC9zdmcvbWVkaXVtb3JjaGlkAC9zdmcvZGFya29yY2hpZAAvc3ZnL29yY2hpZABpbGxlZ2FsIGNoYXJhY3RlcihzKSBpbiBwdWJsaWMgaWQAZGlqa3N0cmFfc2dkAGZpeGVkAGN1cnZlZABkZXJpdmVkAGRvdHRlZABtZW1vcnkgZXhoYXVzdGVkAGxvY2FsZSBub3Qgc3VwcG9ydGVkAHBhcnNpbmcgYWJvcnRlZABwYXJzZXIgbm90IHN0YXJ0ZWQAYXR0cmlidXRlIG1hY3JvcyBub3QgaW1wbGVtZW50ZWQAYWNjb3VudGluZ0RpZmZUb2xlcmF0ZWQAcm9vdFBhcnNlci0+bV9hbGxvY190cmFja2VyLmJ5dGVzQWxsb2NhdGVkID49IGJ5dGVzQWxsb2NhdGVkAGZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQAY29uZGVuc2VkAC9zdmcvbWVkaXVtdmlvbGV0cmVkAC9zdmcvcGFsZXZpb2xldHJlZABJbXByb3BlciAlcyB2YWx1ZSAlcyAtIGlnbm9yZWQAJXMgdmFsdWUgJXMgPCAlZCAtIHRvbyBzbWFsbCAtIGlnbm9yZWQAJXMgdmFsdWUgJXMgPiAlZCAtIHRvbyBsYXJnZSAtIGlnbm9yZWQAL3N2Zy9pbmRpYW5yZWQAL3N2Zy9kYXJrcmVkAGEgc3VjY2Vzc2Z1bCBwcmlvciBjYWxsIHRvIGZ1bmN0aW9uIFhNTF9HZXRCdWZmZXIgaXMgcmVxdWlyZWQAdGFwZXJlZAAvc3ZnL29yYW5nZXJlZAByZXNlcnZlZCBwcmVmaXggKHhtbG5zKSBtdXN0IG5vdCBiZSBkZWNsYXJlZCBvciB1bmRlY2xhcmVkAC9zdmcvcmVkAHN0cmlwZWQAaWxsLWNvbmRpdGlvbmVkAHVuZGVmaW5lZABub3QgY29uc3RyYWluZWQAbGFiZWxhbGlnbmVkAHRleHQgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkAFhNTCBkZWNsYXJhdGlvbiBub3Qgd2VsbC1mb3JtZWQAdW5maWxsZWQAaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZAB0cmlhbmd1bGF0aW9uIGZhaWxlZABwYXJzaW5nIGZpbmlzaGVkAGRhc2hlZABsaW1pdCBvbiBpbnB1dCBhbXBsaWZpY2F0aW9uIGZhY3RvciAoZnJvbSBEVEQgYW5kIGVudGl0aWVzKSBicmVhY2hlZAB3ZWRnZWQAc2l6ZSA9PSBmcmVlZAByb3VuZGVkAHNwbGluZSBbJS4wM2YsICUuMDNmXSAtLSBbJS4wM2YsICUuMDNmXSBpcyBob3Jpem9udGFsOyB3aWxsIGJlIHRyaXZpYWxseSBib3VuZGVkAHNwbGluZSBbJS4wM2YsICUuMDNmXSAtLSBbJS4wM2YsICUuMDNmXSBpcyB2ZXJ0aWNhbDsgd2lsbCBiZSB0cml2aWFsbHkgYm91bmRlZABwYXJzZXIgbm90IHN1c3BlbmRlZABwYXJzZXIgc3VzcGVuZGVkAFdlZABSZWQAU3BhcnNlTWF0cml4X2FkZABub2RlX3NldF9hZGQAc3RyZGljdF9hZGQAZGQgIT0gcGFyZW50X2RkAEtQX0FkZABwYWQAeGxoZHhsb2FkAHhsaGR4dW5sb2FkAHJlYWQAYXJyb3doZWFkAGxoZWFkAHNhbWVoZWFkAGJveDNkACVzXyVkAF9zcGFuXyVkAF9ibG9ja18lZABfd2Vha18lZABfY2xvbmVfJWQALiVkACVZLSVtLSVkACVsZiwlZAAlcyBpbiBsaW5lICVkACUlJSVCb3VuZGluZ0JveDogJWQgJWQgJWQgJWQAIl9zdWJncmFwaF9jbnQiOiAlZAAiX2d2aWQiOiAlZAAiaGVhZCI6ICVkAGFneGJwdXRjAHZwc2MAY3AtPnNyYwB1Y2lyYwBvY2lyYwBpY2lyYwBlY2lyYwBhY2lyYwBVY2lyYwBPY2lyYwBJY2lyYwBFY2lyYwBBY2lyYwBsYWJlbGxvYwBleHBhdF9tYWxsb2MAZXhwYXRfcmVhbGxvYwBndl9yZWNhbGxvYwBzdGQ6OmJhZF9hbGxvYwBndl9hcmVuYV9hbGxvYwBiYWtlcnNjaG9jAHNlbWlTd2VldENob2MAbWMAU3BhcnNlTWF0cml4X2lzX3N5bW1ldHJpYwBBLT5pc19wYXR0ZXJuX3N5bW1ldHJpYwBwaWM6cGljAGl0YWxpYwBCb29rbWFuLUxpZ2h0SXRhbGljAFphcGZDaGFuY2VyeS1NZWRpdW1JdGFsaWMAQm9va21hbi1EZW1pSXRhbGljAFRpbWVzLUJvbGRJdGFsaWMAUGFsYXRpbm8tQm9sZEl0YWxpYwBOZXdDZW50dXJ5U2NobGJrLUJvbGRJdGFsaWMAVGltZXMtSXRhbGljAFBhbGF0aW5vLUl0YWxpYwBOZXdDZW50dXJ5U2NobGJrLUl0YWxpYwByYWRpYwAjZmNmY2ZjAHJvdXRlc3BsaW5lczogJWQgZWRnZXMsICV6dSBib3hlcyAlLjJmIHNlYwA6ICUuMmYgc2VjAGxpc3RkZWxyZWMAbGV2ZWwgZ3JhcGggcmVjAGxldmVsIGVkZ2UgcmVjAGxldmVsIG5vZGUgcmVjAERlYwBfbmVhdG9fY2MAYmMAdmlzaWJpbGl0eS5jAFNwYXJzZU1hdHJpeC5jAGh0bWxsZXguYwBpbmRleC5jAHNtYXJ0X2luaV94LmMAZ3ZyZW5kZXJfY29yZV9wb3YuYwBjdnQuYwBsYXlvdXQuYwB0ZXh0c3Bhbl9sdXQuYwBhZGp1c3QuYwBub2RlbGlzdC5jAHNob3J0ZXN0LmMAY2xvc2VzdC5jAGd2cmVuZGVyX2NvcmVfZG90LmMAY29uc3RyYWludC5jAGRvdGluaXQuYwBuZWF0b2luaXQuYwBwYXRjaHdvcmtpbml0LmMAb3NhZ2Vpbml0LmMAZW1pdC5jAGZsYXQuYwBhcnJvd3MuYwBtaW5jcm9zcy5jAHN0cmVzcy5jAHBvc3RfcHJvY2Vzcy5jAGNjb21wcy5jAG5zLmMAdXRpbHMuYwB4bGFiZWxzLmMAc2hhcGVzLmMAZG90c3BsaW5lcy5jAG5lYXRvc3BsaW5lcy5jAGNsdXN0ZXJlZGdlcy5jAGhlZGdlcy5jAGF0dHIuYwByZWZzdHIuYwBmYXN0Z3IuYwBjbHVzdGVyLmMAdGFwZXIuYwBndnJlbmRlci5jAHNwbGl0LnEuYwBjb21wLmMAZ3ZyZW5kZXJfY29yZV9tYXAuYwBoZWFwLmMAb3J0aG8uYwBndnJlbmRlcl9jb3JlX2pzb24uYwBwYXJ0aXRpb24uYwBwb3NpdGlvbi5jAGd2X2ZvcGVuLmMAdGV4dHNwYW4uYwBnZW9tLmMAcmFuZG9tLmMAcm91dGVzcGwuYwB4bWwuYwBNdWx0aWxldmVsLmMAc3ByaW5nX2VsZWN0cmljYWwuYwBndnJlbmRlcl9jb3JlX3RrLmMAcmFuay5jAHBhY2suYwBkdHN0cmhhc2guYwBncmFwaC5jAGd2cmVuZGVyX2NvcmVfc3ZnLmMAZ3ZyZW5kZXJfY29yZV9maWcuYwBzdHVmZi5jAG1hemUuYwBzcGFyc2Vfc29sdmUuYwByb3V0ZS5jAHdyaXRlLmMAY29seGxhdGUuYwB4bWxwYXJzZS5jAGd2bG9hZGltYWdlX2NvcmUuYwBndnVzZXJzaGFwZS5jAGNpcmNsZS5jAGh0bWx0YWJsZS5jAGVkZ2UuYwBndmxvYWRpbWFnZS5jAGJsb2NrdHJlZS5jAFF1YWRUcmVlLmMAbm9kZS5jAG5vZGVfaW5kdWNlLmMAZ3ZkZXZpY2UuYwBjb21wb3VuZC5jAHRyYXBlem9pZC5jAHNnZC5jAGNvbmMuYwByZWMuYwBkaWprc3RyYS5jAGFyZW5hLmMAZlBRLmMAY2xhc3MyLmMAJWxmLCVsZiwlbGYsJWxmJWMAJWxmLCVsZiwlbGYsJVteLF0lYwBcJWMAJGMAd2IAbnN1YgBzZXRoc2IAcmIAcHJvdGVjdF9yc3FiAGpvYgBjb3JlX2xvYWRpbWFnZV9wc2xpYgBGZWIAb2RiAGluaXRfc3BsaW5lc19iYgBiZXppZXJfYmIAcHJvdGVpbnN0YWIAcm5hc3RhYgAvc3ZnL29saXZlZHJhYgBcYgByd2EAL3N2Zy9hcXVhAGlvdGEASW90YQAvc3ZnL2RhcmttYWdlbnRhAC9zdmcvbWFnZW50YQBkZWx0YQBEZWx0YQB6ZXRhAHRoZXRhAFRoZXRhAGJldGEAWmV0YQBCZXRhAHByZXYgIT0gb2JqLT5kYXRhAG1ha2VHcmFwaERhdGEARXRhAG5pbWJ1c3NhbnNhAHBhcmEAa2FwcGEAS2FwcGEAL3N2Zy9zaWVubmEAVmVyZGFuYQBnYW1tYQBHYW1tYQBzaWdtYQBTaWdtYQBjb25zb2xhAG5hYmxhAC9zdmcvZnVjaHNpYQBHZW9yZ2lhAGFscGhhAEFscGhhAG9tZWdhAE9tZWdhAGFyZWEAbGFtYmRhAExhbWJkYQBoZWx2ZXRpY2EASGVsdmV0aWNhAG1pY2EAPjxhAGAAZ3ZfbGlzdF9jb3B5XwBfdGRyYXdfAF90bGRyYXdfAF9obGRyYXdfAF9sZHJhd18AX2hkcmF3XwBfZHJhd18AZ3ZfbGlzdF9zb3J0XwBndl9saXN0X2FwcGVuZF9zbG90XwBndl9saXN0X3ByZXBlbmRfc2xvdF8AZ3ZfbGlzdF9wb3BfZnJvbnRfAGd2X2xpc3Rfc2hyaW5rX3RvX2ZpdF8AYWd4c2V0XwBndl9saXN0X2dldF8AZG90X3NwbGluZXNfACVzXwBndl9saXN0X2NsZWFyXwBndl9saXN0X3BvcF9iYWNrXwBndl9saXN0X2RldGFjaF8AZ3ZfbGlzdF9yZW1vdmVfAGd2X2xpc3RfcmV2ZXJzZV8AZ3ZfbGlzdF9mcmVlXwBndl9saXN0X3RyeV9hcHBlbmRfAHBhZ2UlZCwlZF8AZ3ZfbGlzdF9zeW5jXwBfY2NfACBpZD0iYV8AXgBTdGFydGluZyBwaGFzZSAyIFtkb3RfbWluY3Jvc3NdAFN0YXJ0aW5nIHBoYXNlIDMgW2RvdF9wb3NpdGlvbl0Abl9lZGdlcyA9PSBncmFwaC0+c291cmNlc1tncmFwaC0+bl0AU3RhcnRpbmcgcGhhc2UgMSBbZG90X3JhbmtdAGpkW21hc2tbamNba11dXSA9PSBqY1trXQBqY1ttYXNrW2piW2tdXV0gPT0gamJba10AbmVlZGxlW2ldICE9IG5lZWRsZVtqXQBqYVttYXNrW2phW2pdXV0gPT0gamFbal0AcS0+cXRzW2lpXQAhcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnRha2VuW2ldAHIuYm91bmRhcnlbaV0gPD0gci5ib3VuZGFyeVtOVU1ESU1TICsgaV0AWyUuMDNmLCUuMDNmXQBbaW50ZXJuYWwgaGFyZC1jb2RlZF0AbnAtPmNlbGxzWzFdAG5wLT5jZWxsc1swXQB1cy0+bmFtZVswXQBjcC0+c3JjWzBdAFsuLl0AXFwAInBvaW50cyI6IFsAInN0b3BzIjogWwAJWwBaAGNvbXB1dGVTY2FsZVhZAHk8PVkAJWEgJWIgJWQgJUg6JU06JVMgJVkAUE9TSVgAbnogPD0gSU5UX01BWAB5ID49IElOVF9NSU4gJiYgeSA8PSBJTlRfTUFYAHggPj0gSU5UX01JTiAmJiB4IDw9IElOVF9NQVgAdyA+PSAwICYmIHcgPD0gSU5UX01BWABlX2NudCA8PSBJTlRfTUFYAHBhaXIucmlnaHQgPD0gSU5UX01BWABwYWlyLmxlZnQgPD0gSU5UX01BWAB0YXJnZXQgPD0gSU5UX01BWABuc2VncyA8PSBJTlRfTUFYAG5fZWRnZXMgPD0gSU5UX01BWABzdHAubnZlcnRpY2VzIDw9IElOVF9NQVgAb2JzW3BvbHlfaV0tPnBuIDw9IElOVF9NQVgAaW5wdXRfcm91dGUucG4gPD0gSU5UX01BWABncmFwaC0+biA8PSBJTlRfTUFYAGggPj0gMCAmJiBoIDw9IElOVF9NQVgAZV9jbnQgLSAxIDw9IElOVF9NQVgATElTVF9TSVpFKCZsaXN0KSAtIDEgPD0gSU5UX01BWABMSVNUX1NJWkUoJmxheWVySURzKSAtIDEgPD0gSU5UX01BWABzdHJsZW4oYXJncykgPD0gSU5UX01BWABMSVNUX1NJWkUoJm9iamwpIDw9IElOVF9NQVgATElTVF9TSVpFKCZjdHgtPlRyZWVfZWRnZSkgPD0gSU5UX01BWABub2RlX3NldF9zaXplKGctPm5faWQpIDw9IElOVF9NQVgAaSA8IElOVF9NQVgAcmVzdWx0IDw9IChpbnQpVUNIQVJfTUFYAHNzeiA8PSBVQ0hBUl9NQVgAY29sID49IDAgJiYgY29sIDw9IFVJTlQxNl9NQVgAeDw9WABXAFYAVQBcVABURVhUAFNUUkVTU19NQUpPUklaQVRJT05fUE9XRVJfRElTVABTVFJFU1NfTUFKT1JJWkFUSU9OX0dSQVBIX0RJU1QAU1RSRVNTX01BSk9SSVpBVElPTl9BVkdfRElTVABGQVNUAEZPTlQAYiA9PSBCX1JJR0hUAEhFSUdIVABCX0xFRlQAXyVsbHVfU1VTUEVDVABCVABUcmVidWNoZXQgTVMASU5WSVMAJUg6JU06JVMAVlIAVFIAQS0+Zm9ybWF0ID09IEItPmZvcm1hdCAmJiBBLT5mb3JtYXQgPT0gRk9STUFUX0NTUgBMUgBESVIASFIAQ0VOVEVSACUlVFJBSUxFUgBBLT50eXBlID09IE1BVFJJWF9UWVBFX1JFQUwgfHwgQS0+dHlwZSA9PSBNQVRSSVhfVFlQRV9JTlRFR0VSAENFTExCT1JERVIAQlIAKlIAUQBFWFAAQl9VUABTVVAAVE9QAE8AbWFwTgBcTgBCX0RPV04AVEhPUk4AJSVCRUdJTgBST1dTUEFOAENPTFNQQU4ATkFOAFBNAEJPVFRPTQBCTQBBTQAlSDolTQBcTAB0YWlsVVJMAGxhYmVsVVJMAGVkZ2VVUkwAaGVhZFVSTABIVE1MAHghPU5VTEwAcm9vdFBhcnNlci0+bV9wYXJlbnRQYXJzZXIgPT0gTlVMTABFRF90b192aXJ0KG9yaWcpID09IE5VTEwARURfdG9fdmlydChlKSA9PSBOVUxMAHByZWZpeCAhPSBOVUxMAGR0ZC0+c2NhZmZJbmRleCAhPSBOVUxMAHNtLT5MdyAhPSBOVUxMAGlucHV0ICE9IE5VTEwAbGlzdCAhPSBOVUxMAHJlZmVyZW50ICE9IE5VTEwAZGljdCAhPSBOVUxMAGRpY3QtPmJ1Y2tldHMgIT0gTlVMTABhdHRyICE9IE5VTEwAYWxsb2NhdG9yICE9IE5VTEwAcGFyc2VyICE9IE5VTEwAcm9vdFBhcnNlciAhPSBOVUxMAGxlYWRlciAhPSBOVUxMAGNtcCAhPSBOVUxMAGRhdGFwICE9IE5VTEwAaW50byAhPSBOVUxMAGl0ZW0gIT0gTlVMTABvcnRob2cgIT0gTlVMTABzZWxmICE9IE5VTEwAdmFsdWUgIT0gTlVMTABmaWxlbmFtZSAhPSBOVUxMAGpvYi0+b3V0cHV0X2ZpbGUgIT0gTlVMTABtb2RlICE9IE5VTEwAeGQgIT0gTlVMTABzbS0+THdkICE9IE5VTEwAam9iICE9IE5VTEwAc291cmNlLmRhdGEgIT0gTlVMTABiLmRhdGEgIT0gTlVMTABhLmRhdGEgIT0gTlVMTABhcmVuYSAhPSBOVUxMAGxpc3QgJiYgbGlzdFswXSAhPSBOVUxMAEFGICE9IE5VTEwAc20tPkQgIT0gTlVMTABFRF90b192aXJ0KG9yaWcpICE9IE5VTEwATENfQUxMAEJMAGJlc3Rjb3N0IDwgSFVHRV9WQUwATk9STUFMAFJBRElBTABBLT50eXBlID09IE1BVFJJWF9UWVBFX1JFQUwAVVJXIENoYW5jZXJ5IEwAVVJXIEJvb2ttYW4gTABDZW50dXJ5IFNjaG9vbGJvb2sgTABVUlcgR290aGljIEwAS0sASgBpIDwgTUFYX0kAUC0+ZW5kLnRoZXRhIDwgMiAqIE1fUEkAQVNDSUkAXEgARVRIAFdJRFRIAERPVEZPTlRQQVRIAEdERk9OVFBBVEgAbWtOQ29uc3RyYWludEcAXEcARVhQQVRfRU5USVRZX0RFQlVHAEVYUEFUX0VOVFJPUFlfREVCVUcARVhQQVRfQUNDT1VOVElOR19ERUJVRwBFWFBBVF9NQUxMT0NfREVCVUcAUk5HAFNQUklORwBDRUxMUEFERElORwBDRUxMU1BBQ0lORwBMQU5HAElNRwBceEYAJSVFT0YASU5GAFx4RkYAUklGRgBkZWx0YSA8PSAweEZGRkYAXHhFRgBceERGAFx4Q0YAXHhCRgBceEFGAFx4OUYAXHg4RgBceDdGAFx4MUYAXHhFAFxFAFBPSU5ULVNJWkUAVFJVRQBDTE9TRQBGQUxTRQBrZXkgIT0gVE9NQlNUT05FAHIgIT0gVE9NQlNUT05FAE5PTkUAR1JBRElFTlRBTkdMRQBUUklBTkdMRQBNSURETEUASU5WSVNJQkxFAFRBQkxFAEFHVFlQRShvYmopID09IEFHSU5FREdFIHx8IEFHVFlQRShvYmopID09IEFHT1VURURHRQBceEZFAFx4RUUAXHhERQBCX05PREUAXHhDRQBceEJFAFx4QUUAXHg5RQBceDhFAFx4MUUAVEQAQS0+Zm9ybWF0ID09IEZPUk1BVF9DT09SRABuICYmIGkgPj0gMCAmJiBpIDwgTk9ERUNBUkQAJSVFTkQASFlCUklEAFNPTElEAFx4RkQAXHhFRABET1RURUQAREFTSEVEAFJPVU5ERUQAXHhERABceENEAFx4QkQAXHhBRABceDlEAFx4OEQAXHgxRABceEMAZGVsZXRlVlBTQwBceEZDAFx4RUMAXHhEQwBceENDAFx4QkMAXHhBQwBceDlDAFx4OEMAXHgxQwBceEIAU1VCAFx4RkIAXHhFQgBceERCAFx4Q0IAXHhCQgBceEFCAFx4OUIAXHg4QgBceDFCAEEgJiYgQgBceEZBAFx4RUEAXHhEQQBceENBAFx4QkEAXHhBQQBceDlBAFx4OEEAXHgxQQBAAD8APCVzPgA8bmlsPgA8L3RzcGFuPjwvdGV4dFBhdGg+AAogICAgPCU5LjNmLCAlOS4zZiwgJTkuM2Y+AD4KPHRpdGxlPgA8Rk9OVD4APEJSPgA8SFRNTD4APC9IVE1MPgA8SU1HPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBiZWZvcmUgPFRBQkxFPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBhZnRlciA8L1RBQkxFPgA8VEQ+AC0+ACI+AAlba2V5PQA8PQA8ACYjeCV4OwAmcXVvdDsAJmx0OwAmZ3Q7ACZhbXA7ACMlZDsAJiMzOTsAJiM0NTsAJiM5MzsAJiMxMzsAJiMxNjA7ACYjMTA7ADtzdG9wLW9wYWNpdHk6ACUlQm91bmRpbmdCb3g6AGNhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzIGFuZCBzZXR0aW5nIHVwIHN0cmVzcyB0ZXJtczoAPHN0b3Agb2Zmc2V0PSIlLjAzZiIgc3R5bGU9InN0b3AtY29sb3I6ADxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6ADxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6AHNvbHZpbmcgbW9kZWw6AC9cOgBncmV5OQBncmF5OQBceEY5AFx4RTkAXHhEOQBceEM5AFx4QjkAXHhBOQBncmV5OTkAZ3JheTk5AFx4OTkAZ3JleTg5AGdyYXk4OQBceDg5ADAxMjM0NTY3ODkAZ3JleTc5AGdyYXk3OQBncmV5NjkAZ3JheTY5AGdyZXk1OQBncmF5NTkAZ3JleTQ5AGdyYXk0OQBncmV5MzkAZ3JheTM5AGdyZXkyOQBncmF5MjkAZ3JleTE5AGdyYXkxOQBceDE5AC9yZGd5OS85AC9idXB1OS85AC9yZHB1OS85AC9wdWJ1OS85AC95bGduYnU5LzkAL2duYnU5LzkAL3JkeWxidTkvOQAvcmRidTkvOQAvZ3JleXM5LzkAL2dyZWVuczkvOQAvYmx1ZXM5LzkAL3B1cnBsZXM5LzkAL29yYW5nZXM5LzkAL3JlZHM5LzkAL3B1b3I5LzkAL3lsb3JicjkvOQAvcHVidWduOS85AC9idWduOS85AC9wcmduOS85AC9yZHlsZ245LzkAL3lsZ245LzkAL3NwZWN0cmFsOS85AC9waXlnOS85AC9icmJnOS85AC9wdXJkOS85AC95bG9ycmQ5LzkAL29ycmQ5LzkAL3BhaXJlZDkvOQAvc2V0MzkvOQAvc2V0MTkvOQAvcGFzdGVsMTkvOQAvcGFpcmVkMTIvOQAvc2V0MzEyLzkAL3JkZ3kxMS85AC9yZHlsYnUxMS85AC9yZGJ1MTEvOQAvcHVvcjExLzkAL3ByZ24xMS85AC9yZHlsZ24xMS85AC9zcGVjdHJhbDExLzkAL3BpeWcxMS85AC9icmJnMTEvOQAvcGFpcmVkMTEvOQAvc2V0MzExLzkAL3JkZ3kxMC85AC9yZHlsYnUxMC85AC9yZGJ1MTAvOQAvcHVvcjEwLzkAL3ByZ24xMC85AC9yZHlsZ24xMC85AC9zcGVjdHJhbDEwLzkAL3BpeWcxMC85AC9icmJnMTAvOQAvcGFpcmVkMTAvOQAvc2V0MzEwLzkAZ3JleTgAZ3JheTgAXHg4AHV0ZjgAI2Y4ZjhmOAAjZThlOGU4AFx4RjgAR0lGOABceEU4AFx4RDgAXHhDOABceEI4AFx4QTgAZ3JleTk4AGdyYXk5OABceDk4AGdyZXk4OABncmF5ODgAXHg4OABncmV5NzgAZ3JheTc4AGdyZXk2OABncmF5NjgAZ3JleTU4AGdyYXk1OABncmV5NDgAZ3JheTQ4AGdyZXkzOABncmF5MzgAZ3JleTI4AGdyYXkyOABncmV5MTgAZ3JheTE4AFx4MTgAL3JkZ3k5LzgAL2J1cHU5LzgAL3JkcHU5LzgAL3B1YnU5LzgAL3lsZ25idTkvOAAvZ25idTkvOAAvcmR5bGJ1OS84AC9yZGJ1OS84AC9ncmV5czkvOAAvZ3JlZW5zOS84AC9ibHVlczkvOAAvcHVycGxlczkvOAAvb3JhbmdlczkvOAAvcmVkczkvOAAvcHVvcjkvOAAveWxvcmJyOS84AC9wdWJ1Z245LzgAL2J1Z245LzgAL3ByZ245LzgAL3JkeWxnbjkvOAAveWxnbjkvOAAvc3BlY3RyYWw5LzgAL3BpeWc5LzgAL2JyYmc5LzgAL3B1cmQ5LzgAL3lsb3JyZDkvOAAvb3JyZDkvOAAvcGFpcmVkOS84AC9zZXQzOS84AC9zZXQxOS84AC9wYXN0ZWwxOS84AC9yZGd5OC84AC9idXB1OC84AC9yZHB1OC84AC9wdWJ1OC84AC95bGduYnU4LzgAL2duYnU4LzgAL3JkeWxidTgvOAAvcmRidTgvOAAvYWNjZW50OC84AC9ncmV5czgvOAAvZ3JlZW5zOC84AC9ibHVlczgvOAAvcHVycGxlczgvOAAvb3JhbmdlczgvOAAvcmVkczgvOAAvcHVvcjgvOAAveWxvcmJyOC84AC9wdWJ1Z244LzgAL2J1Z244LzgAL3ByZ244LzgAL3JkeWxnbjgvOAAveWxnbjgvOAAvc3BlY3RyYWw4LzgAL3BpeWc4LzgAL2JyYmc4LzgAL3B1cmQ4LzgAL3lsb3JyZDgvOAAvb3JyZDgvOAAvcGFpcmVkOC84AC9zZXQzOC84AC9zZXQyOC84AC9wYXN0ZWwyOC84AC9kYXJrMjgvOAAvc2V0MTgvOAAvcGFzdGVsMTgvOAAvcGFpcmVkMTIvOAAvc2V0MzEyLzgAL3JkZ3kxMS84AC9yZHlsYnUxMS84AC9yZGJ1MTEvOAAvcHVvcjExLzgAL3ByZ24xMS84AC9yZHlsZ24xMS84AC9zcGVjdHJhbDExLzgAL3BpeWcxMS84AC9icmJnMTEvOAAvcGFpcmVkMTEvOAAvc2V0MzExLzgAL3JkZ3kxMC84AC9yZHlsYnUxMC84AC9yZGJ1MTAvOAAvcHVvcjEwLzgAL3ByZ24xMC84AC9yZHlsZ24xMC84AC9zcGVjdHJhbDEwLzgAL3BpeWcxMC84AC9icmJnMTAvOAAvcGFpcmVkMTAvOAAvc2V0MzEwLzgAdXRmLTgAQy5VVEYtOABncmV5NwBncmF5NwBceDcAXHhGNwBceEU3AFx4RDcAXHhDNwBceEI3AFx4QTcAZ3JleTk3AGdyYXk5NwBceDk3AGdyZXk4NwBncmF5ODcAXHg4NwBncmV5NzcAZ3JheTc3AGdyZXk2NwBncmF5NjcAZ3JleTU3AGdyYXk1NwBncmV5NDcAZ3JheTQ3AGdyZXkzNwBncmF5MzcAZ3JleTI3AGdyYXkyNwBncmV5MTcAZ3JheTE3AFx4MTcAL3JkZ3k5LzcAL2J1cHU5LzcAL3JkcHU5LzcAL3B1YnU5LzcAL3lsZ25idTkvNwAvZ25idTkvNwAvcmR5bGJ1OS83AC9yZGJ1OS83AC9ncmV5czkvNwAvZ3JlZW5zOS83AC9ibHVlczkvNwAvcHVycGxlczkvNwAvb3JhbmdlczkvNwAvcmVkczkvNwAvcHVvcjkvNwAveWxvcmJyOS83AC9wdWJ1Z245LzcAL2J1Z245LzcAL3ByZ245LzcAL3JkeWxnbjkvNwAveWxnbjkvNwAvc3BlY3RyYWw5LzcAL3BpeWc5LzcAL2JyYmc5LzcAL3B1cmQ5LzcAL3lsb3JyZDkvNwAvb3JyZDkvNwAvcGFpcmVkOS83AC9zZXQzOS83AC9zZXQxOS83AC9wYXN0ZWwxOS83AC9yZGd5OC83AC9idXB1OC83AC9yZHB1OC83AC9wdWJ1OC83AC95bGduYnU4LzcAL2duYnU4LzcAL3JkeWxidTgvNwAvcmRidTgvNwAvYWNjZW50OC83AC9ncmV5czgvNwAvZ3JlZW5zOC83AC9ibHVlczgvNwAvcHVycGxlczgvNwAvb3JhbmdlczgvNwAvcmVkczgvNwAvcHVvcjgvNwAveWxvcmJyOC83AC9wdWJ1Z244LzcAL2J1Z244LzcAL3ByZ244LzcAL3JkeWxnbjgvNwAveWxnbjgvNwAvc3BlY3RyYWw4LzcAL3BpeWc4LzcAL2JyYmc4LzcAL3B1cmQ4LzcAL3lsb3JyZDgvNwAvb3JyZDgvNwAvcGFpcmVkOC83AC9zZXQzOC83AC9zZXQyOC83AC9wYXN0ZWwyOC83AC9kYXJrMjgvNwAvc2V0MTgvNwAvcGFzdGVsMTgvNwAvcmRneTcvNwAvYnVwdTcvNwAvcmRwdTcvNwAvcHVidTcvNwAveWxnbmJ1Ny83AC9nbmJ1Ny83AC9yZHlsYnU3LzcAL3JkYnU3LzcAL2FjY2VudDcvNwAvZ3JleXM3LzcAL2dyZWVuczcvNwAvYmx1ZXM3LzcAL3B1cnBsZXM3LzcAL29yYW5nZXM3LzcAL3JlZHM3LzcAL3B1b3I3LzcAL3lsb3JicjcvNwAvcHVidWduNy83AC9idWduNy83AC9wcmduNy83AC9yZHlsZ243LzcAL3lsZ243LzcAL3NwZWN0cmFsNy83AC9waXlnNy83AC9icmJnNy83AC9wdXJkNy83AC95bG9ycmQ3LzcAL29ycmQ3LzcAL3BhaXJlZDcvNwAvc2V0MzcvNwAvc2V0MjcvNwAvcGFzdGVsMjcvNwAvZGFyazI3LzcAL3NldDE3LzcAL3Bhc3RlbDE3LzcAL3BhaXJlZDEyLzcAL3NldDMxMi83AC9yZGd5MTEvNwAvcmR5bGJ1MTEvNwAvcmRidTExLzcAL3B1b3IxMS83AC9wcmduMTEvNwAvcmR5bGduMTEvNwAvc3BlY3RyYWwxMS83AC9waXlnMTEvNwAvYnJiZzExLzcAL3BhaXJlZDExLzcAL3NldDMxMS83AC9yZGd5MTAvNwAvcmR5bGJ1MTAvNwAvcmRidTEwLzcAL3B1b3IxMC83AC9wcmduMTAvNwAvcmR5bGduMTAvNwAvc3BlY3RyYWwxMC83AC9waXlnMTAvNwAvYnJiZzEwLzcAL3BhaXJlZDEwLzcAL3NldDMxMC83ADEuNwBncmV5NgBncmF5NgBceDYAXHhGNgBceEU2AFx4RDYAXHhDNgBceEI2AFx4QTYAZ3JleTk2AGdyYXk5NgBceDk2AGdyZXk4NgBncmF5ODYAXHg4NgBncmV5NzYAZ3JheTc2AGdyZXk2NgBncmF5NjYAZ3JleTU2AGdyYXk1NgBncmV5NDYAZ3JheTQ2AGdyZXkzNgBncmF5MzYAZ3JleTI2AGdyYXkyNgBncmV5MTYAZ3JheTE2AFx4MTYAL3JkZ3k5LzYAL2J1cHU5LzYAL3JkcHU5LzYAL3B1YnU5LzYAL3lsZ25idTkvNgAvZ25idTkvNgAvcmR5bGJ1OS82AC9yZGJ1OS82AC9ncmV5czkvNgAvZ3JlZW5zOS82AC9ibHVlczkvNgAvcHVycGxlczkvNgAvb3JhbmdlczkvNgAvcmVkczkvNgAvcHVvcjkvNgAveWxvcmJyOS82AC9wdWJ1Z245LzYAL2J1Z245LzYAL3ByZ245LzYAL3JkeWxnbjkvNgAveWxnbjkvNgAvc3BlY3RyYWw5LzYAL3BpeWc5LzYAL2JyYmc5LzYAL3B1cmQ5LzYAL3lsb3JyZDkvNgAvb3JyZDkvNgAvcGFpcmVkOS82AC9zZXQzOS82AC9zZXQxOS82AC9wYXN0ZWwxOS82AC9yZGd5OC82AC9idXB1OC82AC9yZHB1OC82AC9wdWJ1OC82AC95bGduYnU4LzYAL2duYnU4LzYAL3JkeWxidTgvNgAvcmRidTgvNgAvYWNjZW50OC82AC9ncmV5czgvNgAvZ3JlZW5zOC82AC9ibHVlczgvNgAvcHVycGxlczgvNgAvb3JhbmdlczgvNgAvcmVkczgvNgAvcHVvcjgvNgAveWxvcmJyOC82AC9wdWJ1Z244LzYAL2J1Z244LzYAL3ByZ244LzYAL3JkeWxnbjgvNgAveWxnbjgvNgAvc3BlY3RyYWw4LzYAL3BpeWc4LzYAL2JyYmc4LzYAL3B1cmQ4LzYAL3lsb3JyZDgvNgAvb3JyZDgvNgAvcGFpcmVkOC82AC9zZXQzOC82AC9zZXQyOC82AC9wYXN0ZWwyOC82AC9kYXJrMjgvNgAvc2V0MTgvNgAvcGFzdGVsMTgvNgAvcmRneTcvNgAvYnVwdTcvNgAvcmRwdTcvNgAvcHVidTcvNgAveWxnbmJ1Ny82AC9nbmJ1Ny82AC9yZHlsYnU3LzYAL3JkYnU3LzYAL2FjY2VudDcvNgAvZ3JleXM3LzYAL2dyZWVuczcvNgAvYmx1ZXM3LzYAL3B1cnBsZXM3LzYAL29yYW5nZXM3LzYAL3JlZHM3LzYAL3B1b3I3LzYAL3lsb3JicjcvNgAvcHVidWduNy82AC9idWduNy82AC9wcmduNy82AC9yZHlsZ243LzYAL3lsZ243LzYAL3NwZWN0cmFsNy82AC9waXlnNy82AC9icmJnNy82AC9wdXJkNy82AC95bG9ycmQ3LzYAL29ycmQ3LzYAL3BhaXJlZDcvNgAvc2V0MzcvNgAvc2V0MjcvNgAvcGFzdGVsMjcvNgAvZGFyazI3LzYAL3NldDE3LzYAL3Bhc3RlbDE3LzYAL3JkZ3k2LzYAL2J1cHU2LzYAL3JkcHU2LzYAL3B1YnU2LzYAL3lsZ25idTYvNgAvZ25idTYvNgAvcmR5bGJ1Ni82AC9yZGJ1Ni82AC9hY2NlbnQ2LzYAL2dyZXlzNi82AC9ncmVlbnM2LzYAL2JsdWVzNi82AC9wdXJwbGVzNi82AC9vcmFuZ2VzNi82AC9yZWRzNi82AC9wdW9yNi82AC95bG9yYnI2LzYAL3B1YnVnbjYvNgAvYnVnbjYvNgAvcHJnbjYvNgAvcmR5bGduNi82AC95bGduNi82AC9zcGVjdHJhbDYvNgAvcGl5ZzYvNgAvYnJiZzYvNgAvcHVyZDYvNgAveWxvcnJkNi82AC9vcnJkNi82AC9wYWlyZWQ2LzYAL3NldDM2LzYAL3NldDI2LzYAL3Bhc3RlbDI2LzYAL2RhcmsyNi82AC9zZXQxNi82AC9wYXN0ZWwxNi82AC9wYWlyZWQxMi82AC9zZXQzMTIvNgAvcmRneTExLzYAL3JkeWxidTExLzYAL3JkYnUxMS82AC9wdW9yMTEvNgAvcHJnbjExLzYAL3JkeWxnbjExLzYAL3NwZWN0cmFsMTEvNgAvcGl5ZzExLzYAL2JyYmcxMS82AC9wYWlyZWQxMS82AC9zZXQzMTEvNgAvcmRneTEwLzYAL3JkeWxidTEwLzYAL3JkYnUxMC82AC9wdW9yMTAvNgAvcHJnbjEwLzYAL3JkeWxnbjEwLzYAL3NwZWN0cmFsMTAvNgAvcGl5ZzEwLzYAL2JyYmcxMC82AC9wYWlyZWQxMC82AC9zZXQzMTAvNgBncmV5NQBncmF5NQBceDUAYmlnNQBceEY1AFx4RTUAXHhENQBceEM1AFx4QjUAXHhBNQBncmV5OTUAZ3JheTk1AFx4OTUAZ3JleTg1AGdyYXk4NQBceDg1AGdyZXk3NQBncmF5NzUAZ3JleTY1AGdyYXk2NQBncmV5NTUAZ3JheTU1AGdyZXk0NQBncmF5NDUAZ3JleTM1AGdyYXkzNQBncmV5MjUAZ3JheTI1ADIwMjUxMjEzLjE5MjUAZ3JleTE1AGdyYXkxNQBceDE1AGdyYXkwNQAvcmRneTkvNQAvYnVwdTkvNQAvcmRwdTkvNQAvcHVidTkvNQAveWxnbmJ1OS81AC9nbmJ1OS81AC9yZHlsYnU5LzUAL3JkYnU5LzUAL2dyZXlzOS81AC9ncmVlbnM5LzUAL2JsdWVzOS81AC9wdXJwbGVzOS81AC9vcmFuZ2VzOS81AC9yZWRzOS81AC9wdW9yOS81AC95bG9yYnI5LzUAL3B1YnVnbjkvNQAvYnVnbjkvNQAvcHJnbjkvNQAvcmR5bGduOS81AC95bGduOS81AC9zcGVjdHJhbDkvNQAvcGl5ZzkvNQAvYnJiZzkvNQAvcHVyZDkvNQAveWxvcnJkOS81AC9vcnJkOS81AC9wYWlyZWQ5LzUAL3NldDM5LzUAL3NldDE5LzUAL3Bhc3RlbDE5LzUAL3JkZ3k4LzUAL2J1cHU4LzUAL3JkcHU4LzUAL3B1YnU4LzUAL3lsZ25idTgvNQAvZ25idTgvNQAvcmR5bGJ1OC81AC9yZGJ1OC81AC9hY2NlbnQ4LzUAL2dyZXlzOC81AC9ncmVlbnM4LzUAL2JsdWVzOC81AC9wdXJwbGVzOC81AC9vcmFuZ2VzOC81AC9yZWRzOC81AC9wdW9yOC81AC95bG9yYnI4LzUAL3B1YnVnbjgvNQAvYnVnbjgvNQAvcHJnbjgvNQAvcmR5bGduOC81AC95bGduOC81AC9zcGVjdHJhbDgvNQAvcGl5ZzgvNQAvYnJiZzgvNQAvcHVyZDgvNQAveWxvcnJkOC81AC9vcnJkOC81AC9wYWlyZWQ4LzUAL3NldDM4LzUAL3NldDI4LzUAL3Bhc3RlbDI4LzUAL2RhcmsyOC81AC9zZXQxOC81AC9wYXN0ZWwxOC81AC9yZGd5Ny81AC9idXB1Ny81AC9yZHB1Ny81AC9wdWJ1Ny81AC95bGduYnU3LzUAL2duYnU3LzUAL3JkeWxidTcvNQAvcmRidTcvNQAvYWNjZW50Ny81AC9ncmV5czcvNQAvZ3JlZW5zNy81AC9ibHVlczcvNQAvcHVycGxlczcvNQAvb3JhbmdlczcvNQAvcmVkczcvNQAvcHVvcjcvNQAveWxvcmJyNy81AC9wdWJ1Z243LzUAL2J1Z243LzUAL3ByZ243LzUAL3JkeWxnbjcvNQAveWxnbjcvNQAvc3BlY3RyYWw3LzUAL3BpeWc3LzUAL2JyYmc3LzUAL3B1cmQ3LzUAL3lsb3JyZDcvNQAvb3JyZDcvNQAvcGFpcmVkNy81AC9zZXQzNy81AC9zZXQyNy81AC9wYXN0ZWwyNy81AC9kYXJrMjcvNQAvc2V0MTcvNQAvcGFzdGVsMTcvNQAvcmRneTYvNQAvYnVwdTYvNQAvcmRwdTYvNQAvcHVidTYvNQAveWxnbmJ1Ni81AC9nbmJ1Ni81AC9yZHlsYnU2LzUAL3JkYnU2LzUAL2FjY2VudDYvNQAvZ3JleXM2LzUAL2dyZWVuczYvNQAvYmx1ZXM2LzUAL3B1cnBsZXM2LzUAL29yYW5nZXM2LzUAL3JlZHM2LzUAL3B1b3I2LzUAL3lsb3JicjYvNQAvcHVidWduNi81AC9idWduNi81AC9wcmduNi81AC9yZHlsZ242LzUAL3lsZ242LzUAL3NwZWN0cmFsNi81AC9waXlnNi81AC9icmJnNi81AC9wdXJkNi81AC95bG9ycmQ2LzUAL29ycmQ2LzUAL3BhaXJlZDYvNQAvc2V0MzYvNQAvc2V0MjYvNQAvcGFzdGVsMjYvNQAvZGFyazI2LzUAL3NldDE2LzUAL3Bhc3RlbDE2LzUAL3JkZ3k1LzUAL2J1cHU1LzUAL3JkcHU1LzUAL3B1YnU1LzUAL3lsZ25idTUvNQAvZ25idTUvNQAvcmR5bGJ1NS81AC9yZGJ1NS81AC9hY2NlbnQ1LzUAL2dyZXlzNS81AC9ncmVlbnM1LzUAL2JsdWVzNS81AC9wdXJwbGVzNS81AC9vcmFuZ2VzNS81AC9yZWRzNS81AC9wdW9yNS81AC95bG9yYnI1LzUAL3B1YnVnbjUvNQAvYnVnbjUvNQAvcHJnbjUvNQAvcmR5bGduNS81AC95bGduNS81AC9zcGVjdHJhbDUvNQAvcGl5ZzUvNQAvYnJiZzUvNQAvcHVyZDUvNQAveWxvcnJkNS81AC9vcnJkNS81AC9wYWlyZWQ1LzUAL3NldDM1LzUAL3NldDI1LzUAL3Bhc3RlbDI1LzUAL2RhcmsyNS81AC9zZXQxNS81AC9wYXN0ZWwxNS81AC9wYWlyZWQxMi81AC9zZXQzMTIvNQAvcmRneTExLzUAL3JkeWxidTExLzUAL3JkYnUxMS81AC9wdW9yMTEvNQAvcHJnbjExLzUAL3JkeWxnbjExLzUAL3NwZWN0cmFsMTEvNQAvcGl5ZzExLzUAL2JyYmcxMS81AC9wYWlyZWQxMS81AC9zZXQzMTEvNQAvcmRneTEwLzUAL3JkeWxidTEwLzUAL3JkYnUxMC81AC9wdW9yMTAvNQAvcHJnbjEwLzUAL3JkeWxnbjEwLzUAL3NwZWN0cmFsMTAvNQAvcGl5ZzEwLzUAL2JyYmcxMC81AC9wYWlyZWQxMC81AC9zZXQzMTAvNQBiaWctNQBCSUctNQAgLWRhc2ggNQBpdm9yeTQAZ3JleTQAZGFya3NsYXRlZ3JheTQAXHg0AHNub3c0AGxpZ2h0eWVsbG93NABob25leWRldzQAd2hlYXQ0AHRvbWF0bzQAcm9zeWJyb3duNABtYXJvb240AGxpZ2h0c2FsbW9uNABsZW1vbmNoaWZmb240AHNwcmluZ2dyZWVuNABkYXJrb2xpdmVncmVlbjQAcGFsZWdyZWVuNABkYXJrc2VhZ3JlZW40AGxpZ2h0Y3lhbjQAdGFuNABwbHVtNABzZWFzaGVsbDQAY29yYWw0AGhvdHBpbms0AGxpZ2h0cGluazQAZGVlcHBpbms0AGNvcm5zaWxrNABmaXJlYnJpY2s0AGtoYWtpNABsYXZlbmRlcmJsdXNoNABwZWFjaHB1ZmY0AGJpc3F1ZTQAbGlnaHRza3libHVlNABkZWVwc2t5Ymx1ZTQAbGlnaHRibHVlNABjYWRldGJsdWU0AGRvZGdlcmJsdWU0AGxpZ2h0c3RlZWxibHVlNAByb3lhbGJsdWU0AHNsYXRlYmx1ZTQAbmF2YWpvd2hpdGU0AGFudGlxdWV3aGl0ZTQAY2hvY29sYXRlNABjaGFydHJldXNlNABtaXN0eXJvc2U0AHBhbGV0dXJxdW9pc2U0AGF6dXJlNAB0aGVyZTQAYXF1YW1hcmluZTQAdGhpc3RsZTQAbWVkaXVtcHVycGxlNABkYXJrb3JhbmdlNABsaWdodGdvbGRlbnJvZDQAZGFya2dvbGRlbnJvZDQAYnVybHl3b29kNABnb2xkNABtZWRpdW1vcmNoaWQ0AGRhcmtvcmNoaWQ0AHBhbGV2aW9sZXRyZWQ0AGluZGlhbnJlZDQAb3JhbmdlcmVkNABvbGl2ZWRyYWI0AG1hZ2VudGE0AHNpZW5uYTQAXHhGNABceEU0AFx4RDQAXHhDNABceEI0AFx4QTQAZ3JleTk0AGdyYXk5NABceDk0AGdyZXk4NABncmF5ODQAXHg4NABncmV5NzQAZ3JheTc0AGdyZXk2NABncmF5NjQAZ3JleTU0AGdyYXk1NABncmV5NDQAZ3JheTQ0AGdyZXkzNABncmF5MzQAZnJhYzM0AGdyZXkyNABncmF5MjQAZ3JleTE0AGdyYXkxNABceDE0AGZyYWMxNAAvcmRneTkvNAAvYnVwdTkvNAAvcmRwdTkvNAAvcHVidTkvNAAveWxnbmJ1OS80AC9nbmJ1OS80AC9yZHlsYnU5LzQAL3JkYnU5LzQAL2dyZXlzOS80AC9ncmVlbnM5LzQAL2JsdWVzOS80AC9wdXJwbGVzOS80AC9vcmFuZ2VzOS80AC9yZWRzOS80AC9wdW9yOS80AC95bG9yYnI5LzQAL3B1YnVnbjkvNAAvYnVnbjkvNAAvcHJnbjkvNAAvcmR5bGduOS80AC95bGduOS80AC9zcGVjdHJhbDkvNAAvcGl5ZzkvNAAvYnJiZzkvNAAvcHVyZDkvNAAveWxvcnJkOS80AC9vcnJkOS80AC9wYWlyZWQ5LzQAL3NldDM5LzQAL3NldDE5LzQAL3Bhc3RlbDE5LzQAL3JkZ3k4LzQAL2J1cHU4LzQAL3JkcHU4LzQAL3B1YnU4LzQAL3lsZ25idTgvNAAvZ25idTgvNAAvcmR5bGJ1OC80AC9yZGJ1OC80AC9hY2NlbnQ4LzQAL2dyZXlzOC80AC9ncmVlbnM4LzQAL2JsdWVzOC80AC9wdXJwbGVzOC80AC9vcmFuZ2VzOC80AC9yZWRzOC80AC9wdW9yOC80AC95bG9yYnI4LzQAL3B1YnVnbjgvNAAvYnVnbjgvNAAvcHJnbjgvNAAvcmR5bGduOC80AC95bGduOC80AC9zcGVjdHJhbDgvNAAvcGl5ZzgvNAAvYnJiZzgvNAAvcHVyZDgvNAAveWxvcnJkOC80AC9vcnJkOC80AC9wYWlyZWQ4LzQAL3NldDM4LzQAL3NldDI4LzQAL3Bhc3RlbDI4LzQAL2RhcmsyOC80AC9zZXQxOC80AC9wYXN0ZWwxOC80AC9yZGd5Ny80AC9idXB1Ny80AC9yZHB1Ny80AC9wdWJ1Ny80AC95bGduYnU3LzQAL2duYnU3LzQAL3JkeWxidTcvNAAvcmRidTcvNAAvYWNjZW50Ny80AC9ncmV5czcvNAAvZ3JlZW5zNy80AC9ibHVlczcvNAAvcHVycGxlczcvNAAvb3JhbmdlczcvNAAvcmVkczcvNAAvcHVvcjcvNAAveWxvcmJyNy80AC9wdWJ1Z243LzQAL2J1Z243LzQAL3ByZ243LzQAL3JkeWxnbjcvNAAveWxnbjcvNAAvc3BlY3RyYWw3LzQAL3BpeWc3LzQAL2JyYmc3LzQAL3B1cmQ3LzQAL3lsb3JyZDcvNAAvb3JyZDcvNAAvcGFpcmVkNy80AC9zZXQzNy80AC9zZXQyNy80AC9wYXN0ZWwyNy80AC9kYXJrMjcvNAAvc2V0MTcvNAAvcGFzdGVsMTcvNAAvcmRneTYvNAAvYnVwdTYvNAAvcmRwdTYvNAAvcHVidTYvNAAveWxnbmJ1Ni80AC9nbmJ1Ni80AC9yZHlsYnU2LzQAL3JkYnU2LzQAL2FjY2VudDYvNAAvZ3JleXM2LzQAL2dyZWVuczYvNAAvYmx1ZXM2LzQAL3B1cnBsZXM2LzQAL29yYW5nZXM2LzQAL3JlZHM2LzQAL3B1b3I2LzQAL3lsb3JicjYvNAAvcHVidWduNi80AC9idWduNi80AC9wcmduNi80AC9yZHlsZ242LzQAL3lsZ242LzQAL3NwZWN0cmFsNi80AC9waXlnNi80AC9icmJnNi80AC9wdXJkNi80AC95bG9ycmQ2LzQAL29ycmQ2LzQAL3BhaXJlZDYvNAAvc2V0MzYvNAAvc2V0MjYvNAAvcGFzdGVsMjYvNAAvZGFyazI2LzQAL3NldDE2LzQAL3Bhc3RlbDE2LzQAL3JkZ3k1LzQAL2J1cHU1LzQAL3JkcHU1LzQAL3B1YnU1LzQAL3lsZ25idTUvNAAvZ25idTUvNAAvcmR5bGJ1NS80AC9yZGJ1NS80AC9hY2NlbnQ1LzQAL2dyZXlzNS80AC9ncmVlbnM1LzQAL2JsdWVzNS80AC9wdXJwbGVzNS80AC9vcmFuZ2VzNS80AC9yZWRzNS80AC9wdW9yNS80AC95bG9yYnI1LzQAL3B1YnVnbjUvNAAvYnVnbjUvNAAvcHJnbjUvNAAvcmR5bGduNS80AC95bGduNS80AC9zcGVjdHJhbDUvNAAvcGl5ZzUvNAAvYnJiZzUvNAAvcHVyZDUvNAAveWxvcnJkNS80AC9vcnJkNS80AC9wYWlyZWQ1LzQAL3NldDM1LzQAL3NldDI1LzQAL3Bhc3RlbDI1LzQAL2RhcmsyNS80AC9zZXQxNS80AC9wYXN0ZWwxNS80AC9yZGd5NC80AC9idXB1NC80AC9yZHB1NC80AC9wdWJ1NC80AC95bGduYnU0LzQAL2duYnU0LzQAL3JkeWxidTQvNAAvcmRidTQvNAAvYWNjZW50NC80AC9ncmV5czQvNAAvZ3JlZW5zNC80AC9ibHVlczQvNAAvcHVycGxlczQvNAAvb3JhbmdlczQvNAAvcmVkczQvNAAvcHVvcjQvNAAveWxvcmJyNC80AC9wdWJ1Z240LzQAL2J1Z240LzQAL3ByZ240LzQAL3JkeWxnbjQvNAAveWxnbjQvNAAvc3BlY3RyYWw0LzQAL3BpeWc0LzQAL2JyYmc0LzQAL3B1cmQ0LzQAL3lsb3JyZDQvNAAvb3JyZDQvNAAvcGFpcmVkNC80AC9zZXQzNC80AC9zZXQyNC80AC9wYXN0ZWwyNC80AC9kYXJrMjQvNAAvc2V0MTQvNAAvcGFzdGVsMTQvNAAvcGFpcmVkMTIvNAAvc2V0MzEyLzQAL3JkZ3kxMS80AC9yZHlsYnUxMS80AC9yZGJ1MTEvNAAvcHVvcjExLzQAL3ByZ24xMS80AC9yZHlsZ24xMS80AC9zcGVjdHJhbDExLzQAL3BpeWcxMS80AC9icmJnMTEvNAAvcGFpcmVkMTEvNAAvc2V0MzExLzQAL3JkZ3kxMC80AC9yZHlsYnUxMC80AC9yZGJ1MTAvNAAvcHVvcjEwLzQAL3ByZ24xMC80AC9yZHlsZ24xMC80AC9zcGVjdHJhbDEwLzQAL3BpeWcxMC80AC9icmJnMTAvNAAvcGFpcmVkMTAvNAAvc2V0MzEwLzQAMS40AG4gPj0gNABzaWRlcyA9PSA0AGl2b3J5MwBTcGFyc2VNYXRyaXhfbXVsdGlwbHkzAGdyZXkzAGRhcmtzbGF0ZWdyYXkzAFx4MwBzbm93MwBsaWdodHllbGxvdzMAaG9uZXlkZXczAHdoZWF0MwBzdXAzAHRvbWF0bzMAcm9zeWJyb3duMwBtYXJvb24zAGxpZ2h0c2FsbW9uMwBsZW1vbmNoaWZmb24zAHNwcmluZ2dyZWVuMwBkYXJrb2xpdmVncmVlbjMAcGFsZWdyZWVuMwBkYXJrc2VhZ3JlZW4zAGxpZ2h0Y3lhbjMAdGFuMwBwbHVtMwBzZWFzaGVsbDMAY29yYWwzAGhvdHBpbmszAGxpZ2h0cGluazMAZGVlcHBpbmszAGNvcm5zaWxrMwBmaXJlYnJpY2szAGtoYWtpMwBsYXZlbmRlcmJsdXNoMwBwZWFjaHB1ZmYzAGJpc3F1ZTMAbGlnaHRza3libHVlMwBkZWVwc2t5Ymx1ZTMAbGlnaHRibHVlMwBjYWRldGJsdWUzAGRvZGdlcmJsdWUzAGxpZ2h0c3RlZWxibHVlMwByb3lhbGJsdWUzAHNsYXRlYmx1ZTMAbmF2YWpvd2hpdGUzAGFudGlxdWV3aGl0ZTMAY2hvY29sYXRlMwBjaGFydHJldXNlMwBtaXN0eXJvc2UzAHBhbGV0dXJxdW9pc2UzAGF6dXJlMwBhcXVhbWFyaW5lMwB0aGlzdGxlMwBtZWRpdW1wdXJwbGUzAGRhcmtvcmFuZ2UzAGxpZ2h0Z29sZGVucm9kMwBkYXJrZ29sZGVucm9kMwBidXJseXdvb2QzAGdvbGQzAG1lZGl1bW9yY2hpZDMAZGFya29yY2hpZDMAcGFsZXZpb2xldHJlZDMAaW5kaWFucmVkMwBvcmFuZ2VyZWQzAG9saXZlZHJhYjMAbWFnZW50YTMAc2llbm5hMwBceEYzAFx4RTMAXHhEMwBceEMzAFx4QjMAXHhBMwBncmV5OTMAZ3JheTkzAFx4OTMAZ3JleTgzAGdyYXk4MwBceDgzAGdyZXk3MwBncmF5NzMAZ3JleTYzAGdyYXk2MwBncmV5NTMAZ3JheTUzAGdyZXk0MwBncmF5NDMAZ3JleTMzAGdyYXkzMwBncmV5MjMAZ3JheTIzAGdyZXkxMwBncmF5MTMAXHgxMwAvcmRneTkvMwAvYnVwdTkvMwAvcmRwdTkvMwAvcHVidTkvMwAveWxnbmJ1OS8zAC9nbmJ1OS8zAC9yZHlsYnU5LzMAL3JkYnU5LzMAL2dyZXlzOS8zAC9ncmVlbnM5LzMAL2JsdWVzOS8zAC9wdXJwbGVzOS8zAC9vcmFuZ2VzOS8zAC9yZWRzOS8zAC9wdW9yOS8zAC95bG9yYnI5LzMAL3B1YnVnbjkvMwAvYnVnbjkvMwAvcHJnbjkvMwAvcmR5bGduOS8zAC95bGduOS8zAC9zcGVjdHJhbDkvMwAvcGl5ZzkvMwAvYnJiZzkvMwAvcHVyZDkvMwAveWxvcnJkOS8zAC9vcnJkOS8zAC9wYWlyZWQ5LzMAL3NldDM5LzMAL3NldDE5LzMAL3Bhc3RlbDE5LzMAL3JkZ3k4LzMAL2J1cHU4LzMAL3JkcHU4LzMAL3B1YnU4LzMAL3lsZ25idTgvMwAvZ25idTgvMwAvcmR5bGJ1OC8zAC9yZGJ1OC8zAC9hY2NlbnQ4LzMAL2dyZXlzOC8zAC9ncmVlbnM4LzMAL2JsdWVzOC8zAC9wdXJwbGVzOC8zAC9vcmFuZ2VzOC8zAC9yZWRzOC8zAC9wdW9yOC8zAC95bG9yYnI4LzMAL3B1YnVnbjgvMwAvYnVnbjgvMwAvcHJnbjgvMwAvcmR5bGduOC8zAC95bGduOC8zAC9zcGVjdHJhbDgvMwAvcGl5ZzgvMwAvYnJiZzgvMwAvcHVyZDgvMwAveWxvcnJkOC8zAC9vcnJkOC8zAC9wYWlyZWQ4LzMAL3NldDM4LzMAL3NldDI4LzMAL3Bhc3RlbDI4LzMAL2RhcmsyOC8zAC9zZXQxOC8zAC9wYXN0ZWwxOC8zAC9yZGd5Ny8zAC9idXB1Ny8zAC9yZHB1Ny8zAC9wdWJ1Ny8zAC95bGduYnU3LzMAL2duYnU3LzMAL3JkeWxidTcvMwAvcmRidTcvMwAvYWNjZW50Ny8zAC9ncmV5czcvMwAvZ3JlZW5zNy8zAC9ibHVlczcvMwAvcHVycGxlczcvMwAvb3JhbmdlczcvMwAvcmVkczcvMwAvcHVvcjcvMwAveWxvcmJyNy8zAC9wdWJ1Z243LzMAL2J1Z243LzMAL3ByZ243LzMAL3JkeWxnbjcvMwAveWxnbjcvMwAvc3BlY3RyYWw3LzMAL3BpeWc3LzMAL2JyYmc3LzMAL3B1cmQ3LzMAL3lsb3JyZDcvMwAvb3JyZDcvMwAvcGFpcmVkNy8zAC9zZXQzNy8zAC9zZXQyNy8zAC9wYXN0ZWwyNy8zAC9kYXJrMjcvMwAvc2V0MTcvMwAvcGFzdGVsMTcvMwAvcmRneTYvMwAvYnVwdTYvMwAvcmRwdTYvMwAvcHVidTYvMwAveWxnbmJ1Ni8zAC9nbmJ1Ni8zAC9yZHlsYnU2LzMAL3JkYnU2LzMAL2FjY2VudDYvMwAvZ3JleXM2LzMAL2dyZWVuczYvMwAvYmx1ZXM2LzMAL3B1cnBsZXM2LzMAL29yYW5nZXM2LzMAL3JlZHM2LzMAL3B1b3I2LzMAL3lsb3JicjYvMwAvcHVidWduNi8zAC9idWduNi8zAC9wcmduNi8zAC9yZHlsZ242LzMAL3lsZ242LzMAL3NwZWN0cmFsNi8zAC9waXlnNi8zAC9icmJnNi8zAC9wdXJkNi8zAC95bG9ycmQ2LzMAL29ycmQ2LzMAL3BhaXJlZDYvMwAvc2V0MzYvMwAvc2V0MjYvMwAvcGFzdGVsMjYvMwAvZGFyazI2LzMAL3NldDE2LzMAL3Bhc3RlbDE2LzMAL3JkZ3k1LzMAL2J1cHU1LzMAL3JkcHU1LzMAL3B1YnU1LzMAL3lsZ25idTUvMwAvZ25idTUvMwAvcmR5bGJ1NS8zAC9yZGJ1NS8zAC9hY2NlbnQ1LzMAL2dyZXlzNS8zAC9ncmVlbnM1LzMAL2JsdWVzNS8zAC9wdXJwbGVzNS8zAC9vcmFuZ2VzNS8zAC9yZWRzNS8zAC9wdW9yNS8zAC95bG9yYnI1LzMAL3B1YnVnbjUvMwAvYnVnbjUvMwAvcHJnbjUvMwAvcmR5bGduNS8zAC95bGduNS8zAC9zcGVjdHJhbDUvMwAvcGl5ZzUvMwAvYnJiZzUvMwAvcHVyZDUvMwAveWxvcnJkNS8zAC9vcnJkNS8zAC9wYWlyZWQ1LzMAL3NldDM1LzMAL3NldDI1LzMAL3Bhc3RlbDI1LzMAL2RhcmsyNS8zAC9zZXQxNS8zAC9wYXN0ZWwxNS8zAC9yZGd5NC8zAC9idXB1NC8zAC9yZHB1NC8zAC9wdWJ1NC8zAC95bGduYnU0LzMAL2duYnU0LzMAL3JkeWxidTQvMwAvcmRidTQvMwAvYWNjZW50NC8zAC9ncmV5czQvMwAvZ3JlZW5zNC8zAC9ibHVlczQvMwAvcHVycGxlczQvMwAvb3JhbmdlczQvMwAvcmVkczQvMwAvcHVvcjQvMwAveWxvcmJyNC8zAC9wdWJ1Z240LzMAL2J1Z240LzMAL3ByZ240LzMAL3JkeWxnbjQvMwAveWxnbjQvMwAvc3BlY3RyYWw0LzMAL3BpeWc0LzMAL2JyYmc0LzMAL3B1cmQ0LzMAL3lsb3JyZDQvMwAvb3JyZDQvMwAvcGFpcmVkNC8zAC9zZXQzNC8zAC9zZXQyNC8zAC9wYXN0ZWwyNC8zAC9kYXJrMjQvMwAvc2V0MTQvMwAvcGFzdGVsMTQvMwAvcmRneTMvMwAvYnVwdTMvMwAvcmRwdTMvMwAvcHVidTMvMwAveWxnbmJ1My8zAC9nbmJ1My8zAC9yZHlsYnUzLzMAL3JkYnUzLzMAL2FjY2VudDMvMwAvZ3JleXMzLzMAL2dyZWVuczMvMwAvYmx1ZXMzLzMAL3B1cnBsZXMzLzMAL29yYW5nZXMzLzMAL3JlZHMzLzMAL3B1b3IzLzMAL3lsb3JicjMvMwAvcHVidWduMy8zAC9idWduMy8zAC9wcmduMy8zAC9yZHlsZ24zLzMAL3lsZ24zLzMAL3NwZWN0cmFsMy8zAC9waXlnMy8zAC9icmJnMy8zAC9wdXJkMy8zAC95bG9ycmQzLzMAL29ycmQzLzMAL3BhaXJlZDMvMwAvc2V0MzMvMwAvc2V0MjMvMwAvcGFzdGVsMjMvMwAvZGFyazIzLzMAL3NldDEzLzMAL3Bhc3RlbDEzLzMAL3BhaXJlZDEyLzMAL3NldDMxMi8zAC9yZGd5MTEvMwAvcmR5bGJ1MTEvMwAvcmRidTExLzMAL3B1b3IxMS8zAC9wcmduMTEvMwAvcmR5bGduMTEvMwAvc3BlY3RyYWwxMS8zAC9waXlnMTEvMwAvYnJiZzExLzMAL3BhaXJlZDExLzMAL3NldDMxMS8zAC9yZGd5MTAvMwAvcmR5bGJ1MTAvMwAvcmRidTEwLzMAL3B1b3IxMC8zAC9wcmduMTAvMwAvcmR5bGduMTAvMwAvc3BlY3RyYWwxMC8zAC9waXlnMTAvMwAvYnJiZzEwLzMAL3BhaXJlZDEwLzMAL3NldDMxMC8zAGl2b3J5MgBncmV5MgBkYXJrc2xhdGVncmF5MgBceDIAc25vdzIAbGlnaHR5ZWxsb3cyAGhvbmV5ZGV3MgBSVHJlZUluc2VydDIAd2hlYXQyAHN1cDIAbm9wMgB0b21hdG8yAHJvc3licm93bjIAbWFyb29uMgBsaWdodHNhbG1vbjIAbGVtb25jaGlmZm9uMgBzcHJpbmdncmVlbjIAZGFya29saXZlZ3JlZW4yAHBhbGVncmVlbjIAZGFya3NlYWdyZWVuMgBsaWdodGN5YW4yAHRhbjIAcGx1bTIAc2Vhc2hlbGwyAGNvcmFsMgBob3RwaW5rMgBsaWdodHBpbmsyAGRlZXBwaW5rMgBjb3Juc2lsazIAZmlyZWJyaWNrMgBraGFraTIAbGF2ZW5kZXJibHVzaDIAcGVhY2hwdWZmMgBicm9uemUyAGJpc3F1ZTIAbGlnaHRza3libHVlMgBkZWVwc2t5Ymx1ZTIAbGlnaHRibHVlMgBjYWRldGJsdWUyAGRvZGdlcmJsdWUyAGxpZ2h0c3RlZWxibHVlMgByb3lhbGJsdWUyAHNsYXRlYmx1ZTIAbmF2YWpvd2hpdGUyAGFudGlxdWV3aGl0ZTIAY2hvY29sYXRlMgBjaGFydHJldXNlMgBtaXN0eXJvc2UyAHBhbGV0dXJxdW9pc2UyAGF6dXJlMgBhcXVhbWFyaW5lMgB0aGlzdGxlMgBtZWRpdW1wdXJwbGUyAGRhcmtvcmFuZ2UyAGxpZ2h0Z29sZGVucm9kMgBkYXJrZ29sZGVucm9kMgBidXJseXdvb2QyAGdvbGQyAG1lZGl1bW9yY2hpZDIAZGFya29yY2hpZDIAcGFsZXZpb2xldHJlZDIAaW5kaWFucmVkMgBvcmFuZ2VyZWQyAG9saXZlZHJhYjIAbWFnZW50YTIAc2llbm5hMgBceEYyAFx4RTIAXHhEMgBceEMyAFx4QjIAXHhBMgBncmV5OTIAZ3JheTkyAFx4OTIAZ3JleTgyAGdyYXk4MgBceDgyAGdyZXk3MgBncmF5NzIAZ3JleTYyAGdyYXk2MgBncmV5NTIAZ3JheTUyAGdyZXk0MgBncmF5NDIAZ3JleTMyAGdyYXkzMgBncmV5MjIAZ3JheTIyAGdyZXkxMgBncmF5MTIAXHgxMgBmcmFjMTIAL3BhaXJlZDEyLzEyAC9zZXQzMTIvMTIAL3JkZ3k5LzIAL2J1cHU5LzIAL3JkcHU5LzIAL3B1YnU5LzIAL3lsZ25idTkvMgAvZ25idTkvMgAvcmR5bGJ1OS8yAC9yZGJ1OS8yAC9ncmV5czkvMgAvZ3JlZW5zOS8yAC9ibHVlczkvMgAvcHVycGxlczkvMgAvb3JhbmdlczkvMgAvcmVkczkvMgAvcHVvcjkvMgAveWxvcmJyOS8yAC9wdWJ1Z245LzIAL2J1Z245LzIAL3ByZ245LzIAL3JkeWxnbjkvMgAveWxnbjkvMgAvc3BlY3RyYWw5LzIAL3BpeWc5LzIAL2JyYmc5LzIAL3B1cmQ5LzIAL3lsb3JyZDkvMgAvb3JyZDkvMgAvcGFpcmVkOS8yAC9zZXQzOS8yAC9zZXQxOS8yAC9wYXN0ZWwxOS8yAC9yZGd5OC8yAC9idXB1OC8yAC9yZHB1OC8yAC9wdWJ1OC8yAC95bGduYnU4LzIAL2duYnU4LzIAL3JkeWxidTgvMgAvcmRidTgvMgAvYWNjZW50OC8yAC9ncmV5czgvMgAvZ3JlZW5zOC8yAC9ibHVlczgvMgAvcHVycGxlczgvMgAvb3JhbmdlczgvMgAvcmVkczgvMgAvcHVvcjgvMgAveWxvcmJyOC8yAC9wdWJ1Z244LzIAL2J1Z244LzIAL3ByZ244LzIAL3JkeWxnbjgvMgAveWxnbjgvMgAvc3BlY3RyYWw4LzIAL3BpeWc4LzIAL2JyYmc4LzIAL3B1cmQ4LzIAL3lsb3JyZDgvMgAvb3JyZDgvMgAvcGFpcmVkOC8yAC9zZXQzOC8yAC9zZXQyOC8yAC9wYXN0ZWwyOC8yAC9kYXJrMjgvMgAvc2V0MTgvMgAvcGFzdGVsMTgvMgAvcmRneTcvMgAvYnVwdTcvMgAvcmRwdTcvMgAvcHVidTcvMgAveWxnbmJ1Ny8yAC9nbmJ1Ny8yAC9yZHlsYnU3LzIAL3JkYnU3LzIAL2FjY2VudDcvMgAvZ3JleXM3LzIAL2dyZWVuczcvMgAvYmx1ZXM3LzIAL3B1cnBsZXM3LzIAL29yYW5nZXM3LzIAL3JlZHM3LzIAL3B1b3I3LzIAL3lsb3JicjcvMgAvcHVidWduNy8yAC9idWduNy8yAC9wcmduNy8yAC9yZHlsZ243LzIAL3lsZ243LzIAL3NwZWN0cmFsNy8yAC9waXlnNy8yAC9icmJnNy8yAC9wdXJkNy8yAC95bG9ycmQ3LzIAL29ycmQ3LzIAL3BhaXJlZDcvMgAvc2V0MzcvMgAvc2V0MjcvMgAvcGFzdGVsMjcvMgAvZGFyazI3LzIAL3NldDE3LzIAL3Bhc3RlbDE3LzIAL3JkZ3k2LzIAL2J1cHU2LzIAL3JkcHU2LzIAL3B1YnU2LzIAL3lsZ25idTYvMgAvZ25idTYvMgAvcmR5bGJ1Ni8yAC9yZGJ1Ni8yAC9hY2NlbnQ2LzIAL2dyZXlzNi8yAC9ncmVlbnM2LzIAL2JsdWVzNi8yAC9wdXJwbGVzNi8yAC9vcmFuZ2VzNi8yAC9yZWRzNi8yAC9wdW9yNi8yAC95bG9yYnI2LzIAL3B1YnVnbjYvMgAvYnVnbjYvMgAvcHJnbjYvMgAvcmR5bGduNi8yAC95bGduNi8yAC9zcGVjdHJhbDYvMgAvcGl5ZzYvMgAvYnJiZzYvMgAvcHVyZDYvMgAveWxvcnJkNi8yAC9vcnJkNi8yAC9wYWlyZWQ2LzIAL3NldDM2LzIAL3NldDI2LzIAL3Bhc3RlbDI2LzIAL2RhcmsyNi8yAC9zZXQxNi8yAC9wYXN0ZWwxNi8yAC9yZGd5NS8yAC9idXB1NS8yAC9yZHB1NS8yAC9wdWJ1NS8yAC95bGduYnU1LzIAL2duYnU1LzIAL3JkeWxidTUvMgAvcmRidTUvMgAvYWNjZW50NS8yAC9ncmV5czUvMgAvZ3JlZW5zNS8yAC9ibHVlczUvMgAvcHVycGxlczUvMgAvb3JhbmdlczUvMgAvcmVkczUvMgAvcHVvcjUvMgAveWxvcmJyNS8yAC9wdWJ1Z241LzIAL2J1Z241LzIAL3ByZ241LzIAL3JkeWxnbjUvMgAveWxnbjUvMgAvc3BlY3RyYWw1LzIAL3BpeWc1LzIAL2JyYmc1LzIAL3B1cmQ1LzIAL3lsb3JyZDUvMgAvb3JyZDUvMgAvcGFpcmVkNS8yAC9zZXQzNS8yAC9zZXQyNS8yAC9wYXN0ZWwyNS8yAC9kYXJrMjUvMgAvc2V0MTUvMgAvcGFzdGVsMTUvMgAvcmRneTQvMgAvYnVwdTQvMgAvcmRwdTQvMgAvcHVidTQvMgAveWxnbmJ1NC8yAC9nbmJ1NC8yAC9yZHlsYnU0LzIAL3JkYnU0LzIAL2FjY2VudDQvMgAvZ3JleXM0LzIAL2dyZWVuczQvMgAvYmx1ZXM0LzIAL3B1cnBsZXM0LzIAL29yYW5nZXM0LzIAL3JlZHM0LzIAL3B1b3I0LzIAL3lsb3JicjQvMgAvcHVidWduNC8yAC9idWduNC8yAC9wcmduNC8yAC9yZHlsZ240LzIAL3lsZ240LzIAL3NwZWN0cmFsNC8yAC9waXlnNC8yAC9icmJnNC8yAC9wdXJkNC8yAC95bG9ycmQ0LzIAL29ycmQ0LzIAL3BhaXJlZDQvMgAvc2V0MzQvMgAvc2V0MjQvMgAvcGFzdGVsMjQvMgAvZGFyazI0LzIAL3NldDE0LzIAL3Bhc3RlbDE0LzIAL3JkZ3kzLzIAL2J1cHUzLzIAL3JkcHUzLzIAL3B1YnUzLzIAL3lsZ25idTMvMgAvZ25idTMvMgAvcmR5bGJ1My8yAC9yZGJ1My8yAC9hY2NlbnQzLzIAL2dyZXlzMy8yAC9ncmVlbnMzLzIAL2JsdWVzMy8yAC9wdXJwbGVzMy8yAC9vcmFuZ2VzMy8yAC9yZWRzMy8yAC9wdW9yMy8yAC95bG9yYnIzLzIAL3B1YnVnbjMvMgAvYnVnbjMvMgAvcHJnbjMvMgAvcmR5bGduMy8yAC95bGduMy8yAC9zcGVjdHJhbDMvMgAvcGl5ZzMvMgAvYnJiZzMvMgAvcHVyZDMvMgAveWxvcnJkMy8yAC9vcnJkMy8yAC9wYWlyZWQzLzIAL3NldDMzLzIAL3NldDIzLzIAL3Bhc3RlbDIzLzIAL2RhcmsyMy8yAC9zZXQxMy8yAC9wYXN0ZWwxMy8yAC9wYWlyZWQxMi8yAC9zZXQzMTIvMgAvcmRneTExLzIAL3JkeWxidTExLzIAL3JkYnUxMS8yAC9wdW9yMTEvMgAvcHJnbjExLzIAL3JkeWxnbjExLzIAL3NwZWN0cmFsMTEvMgAvcGl5ZzExLzIAL2JyYmcxMS8yAC9wYWlyZWQxMS8yAC9zZXQzMTEvMgAvcmRneTEwLzIAL3JkeWxidTEwLzIAL3JkYnUxMC8yAC9wdW9yMTAvMgAvcHJnbjEwLzIAL3JkeWxnbjEwLzIAL3NwZWN0cmFsMTAvMgAvcGl5ZzEwLzIAL2JyYmcxMC8yAC9wYWlyZWQxMC8yAC9zZXQzMTAvMgAxLjIAIC1kYXNoIDIAbGVuID49IDIAZXhwID09IDEgfHwgZXhwID09IDIAZGltID09IDIATkRfb3V0KHYpLnNpemUgPT0gMgBpdm9yeTEAZ3JleTEAZGFya3NsYXRlZ3JheTEAXHgxAHNub3cxAGxpZ2h0eWVsbG93MQBob25leWRldzEAbnNsaW1pdDEAd2hlYXQxAHN1cDEAbm9wMQB0b21hdG8xAHJvc3licm93bjEAbWFyb29uMQBsaWdodHNhbG1vbjEAbGVtb25jaGlmZm9uMQBsYXRpbjEAYWdvcGVuMQBzcHJpbmdncmVlbjEAZGFya29saXZlZ3JlZW4xAHBhbGVncmVlbjEAZGFya3NlYWdyZWVuMQBsaWdodGN5YW4xAHRhbjEAcGx1bTEAc2Vhc2hlbGwxAGNvcmFsMQBob3RwaW5rMQBsaWdodHBpbmsxAGRlZXBwaW5rMQBjb3Juc2lsazEAZmlyZWJyaWNrMQBqMCA8PSBpMSAmJiBpMSA8PSBqMQBraGFraTEAbGF2ZW5kZXJibHVzaDEAcGVhY2hwdWZmMQBiaXNxdWUxAGxpZ2h0c2t5Ymx1ZTEAZGVlcHNreWJsdWUxAGxpZ2h0Ymx1ZTEAY2FkZXRibHVlMQBkb2RnZXJibHVlMQBsaWdodHN0ZWVsYmx1ZTEAcm95YWxibHVlMQBzbGF0ZWJsdWUxAG5hdmFqb3doaXRlMQBhbnRpcXVld2hpdGUxAGNob2NvbGF0ZTEAY2hhcnRyZXVzZTEAbWlzdHlyb3NlMQBwYWxldHVycXVvaXNlMQBhenVyZTEAYXF1YW1hcmluZTEAdGhpc3RsZTEAbWVkaXVtcHVycGxlMQBkYXJrb3JhbmdlMQBhcmdfZTAgJiYgYXJnX2UxAGxpZ2h0Z29sZGVucm9kMQBkYXJrZ29sZGVucm9kMQBidXJseXdvb2QxAGdvbGQxAG1lZGl1bW9yY2hpZDEAZGFya29yY2hpZDEAcGFsZXZpb2xldHJlZDEAaW5kaWFucmVkMQBvcmFuZ2VyZWQxAG9saXZlZHJhYjEAbWFnZW50YTEAc2llbm5hMQBceEYxAFx4RTEAXHhEMQBceEMxAFx4QjEAXHhBMQBncmV5OTEAZ3JheTkxAFx4OTEAZ3JleTgxAGdyYXk4MQBceDgxAGdyZXk3MQBncmF5NzEAZ3JleTYxAGdyYXk2MQBncmV5NTEAZ3JheTUxAGdyZXk0MQBncmF5NDEAZ3JleTMxAGdyYXkzMQBncmV5MjEAZ3JheTIxAGdyZXkxMQBncmF5MTEAXHgxMQAvcGFpcmVkMTIvMTEAL3NldDMxMi8xMQAvcmRneTExLzExAC9yZHlsYnUxMS8xMQAvcmRidTExLzExAC9wdW9yMTEvMTEAL3ByZ24xMS8xMQAvcmR5bGduMTEvMTEAL3NwZWN0cmFsMTEvMTEAL3BpeWcxMS8xMQAvYnJiZzExLzExAC9wYWlyZWQxMS8xMQAvc2V0MzExLzExAGNzW2ldLT5zbGFjaygpPi0wLjAwMDAwMDEAL3JkZ3k5LzEAL2J1cHU5LzEAL3JkcHU5LzEAL3B1YnU5LzEAL3lsZ25idTkvMQAvZ25idTkvMQAvcmR5bGJ1OS8xAC9yZGJ1OS8xAC9ncmV5czkvMQAvZ3JlZW5zOS8xAC9ibHVlczkvMQAvcHVycGxlczkvMQAvb3JhbmdlczkvMQAvcmVkczkvMQAvcHVvcjkvMQAveWxvcmJyOS8xAC9wdWJ1Z245LzEAL2J1Z245LzEAL3ByZ245LzEAL3JkeWxnbjkvMQAveWxnbjkvMQAvc3BlY3RyYWw5LzEAL3BpeWc5LzEAL2JyYmc5LzEAL3B1cmQ5LzEAL3lsb3JyZDkvMQAvb3JyZDkvMQAvcGFpcmVkOS8xAC9zZXQzOS8xAC9zZXQxOS8xAC9wYXN0ZWwxOS8xAC9yZGd5OC8xAC9idXB1OC8xAC9yZHB1OC8xAC9wdWJ1OC8xAC95bGduYnU4LzEAL2duYnU4LzEAL3JkeWxidTgvMQAvcmRidTgvMQAvYWNjZW50OC8xAC9ncmV5czgvMQAvZ3JlZW5zOC8xAC9ibHVlczgvMQAvcHVycGxlczgvMQAvb3JhbmdlczgvMQAvcmVkczgvMQAvcHVvcjgvMQAveWxvcmJyOC8xAC9wdWJ1Z244LzEAL2J1Z244LzEAL3ByZ244LzEAL3JkeWxnbjgvMQAveWxnbjgvMQAvc3BlY3RyYWw4LzEAL3BpeWc4LzEAL2JyYmc4LzEAL3B1cmQ4LzEAL3lsb3JyZDgvMQAvb3JyZDgvMQAvcGFpcmVkOC8xAC9zZXQzOC8xAC9zZXQyOC8xAC9wYXN0ZWwyOC8xAC9kYXJrMjgvMQAvc2V0MTgvMQAvcGFzdGVsMTgvMQAvcmRneTcvMQAvYnVwdTcvMQAvcmRwdTcvMQAvcHVidTcvMQAveWxnbmJ1Ny8xAC9nbmJ1Ny8xAC9yZHlsYnU3LzEAL3JkYnU3LzEAL2FjY2VudDcvMQAvZ3JleXM3LzEAL2dyZWVuczcvMQAvYmx1ZXM3LzEAL3B1cnBsZXM3LzEAL29yYW5nZXM3LzEAL3JlZHM3LzEAL3B1b3I3LzEAL3lsb3JicjcvMQAvcHVidWduNy8xAC9idWduNy8xAC9wcmduNy8xAC9yZHlsZ243LzEAL3lsZ243LzEAL3NwZWN0cmFsNy8xAC9waXlnNy8xAC9icmJnNy8xAC9wdXJkNy8xAC95bG9ycmQ3LzEAL29ycmQ3LzEAL3BhaXJlZDcvMQAvc2V0MzcvMQAvc2V0MjcvMQAvcGFzdGVsMjcvMQAvZGFyazI3LzEAL3NldDE3LzEAL3Bhc3RlbDE3LzEAL3JkZ3k2LzEAL2J1cHU2LzEAL3JkcHU2LzEAL3B1YnU2LzEAL3lsZ25idTYvMQAvZ25idTYvMQAvcmR5bGJ1Ni8xAC9yZGJ1Ni8xAC9hY2NlbnQ2LzEAL2dyZXlzNi8xAC9ncmVlbnM2LzEAL2JsdWVzNi8xAC9wdXJwbGVzNi8xAC9vcmFuZ2VzNi8xAC9yZWRzNi8xAC9wdW9yNi8xAC95bG9yYnI2LzEAL3B1YnVnbjYvMQAvYnVnbjYvMQAvcHJnbjYvMQAvcmR5bGduNi8xAC95bGduNi8xAC9zcGVjdHJhbDYvMQAvcGl5ZzYvMQAvYnJiZzYvMQAvcHVyZDYvMQAveWxvcnJkNi8xAC9vcnJkNi8xAC9wYWlyZWQ2LzEAL3NldDM2LzEAL3NldDI2LzEAL3Bhc3RlbDI2LzEAL2RhcmsyNi8xAC9zZXQxNi8xAC9wYXN0ZWwxNi8xAC9yZGd5NS8xAC9idXB1NS8xAC9yZHB1NS8xAC9wdWJ1NS8xAC95bGduYnU1LzEAL2duYnU1LzEAL3JkeWxidTUvMQAvcmRidTUvMQAvYWNjZW50NS8xAC9ncmV5czUvMQAvZ3JlZW5zNS8xAC9ibHVlczUvMQAvcHVycGxlczUvMQAvb3JhbmdlczUvMQAvcmVkczUvMQAvcHVvcjUvMQAveWxvcmJyNS8xAC9wdWJ1Z241LzEAL2J1Z241LzEAL3ByZ241LzEAL3JkeWxnbjUvMQAveWxnbjUvMQAvc3BlY3RyYWw1LzEAL3BpeWc1LzEAL2JyYmc1LzEAL3B1cmQ1LzEAL3lsb3JyZDUvMQAvb3JyZDUvMQAvcGFpcmVkNS8xAC9zZXQzNS8xAC9zZXQyNS8xAC9wYXN0ZWwyNS8xAC9kYXJrMjUvMQAvc2V0MTUvMQAvcGFzdGVsMTUvMQAvcmRneTQvMQAvYnVwdTQvMQAvcmRwdTQvMQAvcHVidTQvMQAveWxnbmJ1NC8xAC9nbmJ1NC8xAC9yZHlsYnU0LzEAL3JkYnU0LzEAL2FjY2VudDQvMQAvZ3JleXM0LzEAL2dyZWVuczQvMQAvYmx1ZXM0LzEAL3B1cnBsZXM0LzEAL29yYW5nZXM0LzEAL3JlZHM0LzEAL3B1b3I0LzEAL3lsb3JicjQvMQAvcHVidWduNC8xAC9idWduNC8xAC9wcmduNC8xAC9yZHlsZ240LzEAL3lsZ240LzEAL3NwZWN0cmFsNC8xAC9waXlnNC8xAC9icmJnNC8xAC9wdXJkNC8xAC95bG9ycmQ0LzEAL29ycmQ0LzEAL3BhaXJlZDQvMQAvc2V0MzQvMQAvc2V0MjQvMQAvcGFzdGVsMjQvMQAvZGFyazI0LzEAL3NldDE0LzEAL3Bhc3RlbDE0LzEAL3JkZ3kzLzEAL2J1cHUzLzEAL3JkcHUzLzEAL3B1YnUzLzEAL3lsZ25idTMvMQAvZ25idTMvMQAvcmR5bGJ1My8xAC9yZGJ1My8xAC9hY2NlbnQzLzEAL2dyZXlzMy8xAC9ncmVlbnMzLzEAL2JsdWVzMy8xAC9wdXJwbGVzMy8xAC9vcmFuZ2VzMy8xAC9yZWRzMy8xAC9wdW9yMy8xAC95bG9yYnIzLzEAL3B1YnVnbjMvMQAvYnVnbjMvMQAvcHJnbjMvMQAvcmR5bGduMy8xAC95bGduMy8xAC9zcGVjdHJhbDMvMQAvcGl5ZzMvMQAvYnJiZzMvMQAvcHVyZDMvMQAveWxvcnJkMy8xAC9vcnJkMy8xAC9wYWlyZWQzLzEAL3NldDMzLzEAL3NldDIzLzEAL3Bhc3RlbDIzLzEAL2RhcmsyMy8xAC9zZXQxMy8xAC9wYXN0ZWwxMy8xAC9wYWlyZWQxMi8xAC9zZXQzMTIvMQAvcmRneTExLzEAL3JkeWxidTExLzEAL3JkYnUxMS8xAC9wdW9yMTEvMQAvcHJnbjExLzEAL3JkeWxnbjExLzEAL3NwZWN0cmFsMTEvMQAvcGl5ZzExLzEAL2JyYmcxMS8xAC9wYWlyZWQxMS8xAC9zZXQzMTEvMQAvcmRneTEwLzEAL3JkeWxidTEwLzEAL3JkYnUxMC8xAC9wdW9yMTAvMQAvcHJnbjEwLzEAL3JkeWxnbjEwLzEAL3NwZWN0cmFsMTAvMQAvcGl5ZzEwLzEAL2JyYmcxMC8xAC9wYWlyZWQxMC8xAC9zZXQzMTAvMQAxNC4xLjEAbGF0aW4tMQBJU09fODg1OS0xAElTTzg4NTktMQBJU08tODg1OS0xAGkgPj0gMQBxLT5uID09IDEAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnBhcnRpdGlvbltpXSA9PSAwIHx8IHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5wYXJ0aXRpb25baV0gPT0gMQBiei5zaXplICUgMyA9PSAxAExJU1RfU0laRSgmY3R4LT5UcmVlX2VkZ2UpID09IGN0eC0+Tl9ub2RlcyAtIDEAbm9kZV9zZXRfc2l6ZShnLT5uX2lkKSA9PSBvc2l6ZSArIDEAbi0+Y291bnQgKyAoKm5uKS0+Y291bnQgPT0gTk9ERUNBUkQgKyAxAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSArIHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFsxXSA9PSBOT0RFQ0FSRCArIDEAZ3JleTAAZ3JheTAAanNvbjAAI2YwZjBmMAAjZTBlMGUwAHhiLT5sb2NhdGVkID4gQUdYQlVGX0lOTElORV9TSVpFXzAAXDAAVDAAXHhGMABceEUwAFx4RDAAXHhDMABceEIwAFx4QTAAZ3JleTkwAGdyYXk5MABceDkwAGdyZXk4MABncmF5ODAAXHg4MAAjODA4MDgwAGdyZXk3MABncmF5NzAAY2N3cm90ID09IDAgfHwgY2N3cm90ID09IDkwIHx8IGNjd3JvdCA9PSAxODAgfHwgY2N3cm90ID09IDI3MABjd3JvdCA9PSAwIHx8IGN3cm90ID09IDkwIHx8IGN3cm90ID09IDE4MCB8fCBjd3JvdCA9PSAyNzAAZ3JleTYwAGdyYXk2MABncmV5NTAAZ3JheTUwAGdyZXk0MABncmF5NDAAci53aWR0aCgpPDFlNDAAZ3JleTMwAGdyYXkzMAAjMzAzMDMwAGdyZXkyMABncmF5MjAAZ3JleTEwAGdyYXkxMABceDEwACMxMDEwMTAAL3BhaXJlZDEyLzEwAC9zZXQzMTIvMTAAL3JkZ3kxMS8xMAAvcmR5bGJ1MTEvMTAAL3JkYnUxMS8xMAAvcHVvcjExLzEwAC9wcmduMTEvMTAAL3JkeWxnbjExLzEwAC9zcGVjdHJhbDExLzEwAC9waXlnMTEvMTAAL2JyYmcxMS8xMAAvcGFpcmVkMTEvMTAAL3NldDMxMS8xMAAvcmRneTEwLzEwAC9yZHlsYnUxMC8xMAAvcmRidTEwLzEwAC9wdW9yMTAvMTAAL3ByZ24xMC8xMAAvcmR5bGduMTAvMTAAL3NwZWN0cmFsMTAvMTAAL3BpeWcxMC8xMAAvYnJiZzEwLzEwAC9wYWlyZWQxMC8xMAAvc2V0MzEwLzEwADEyMDAAZ3JleTEwMABncmF5MTAwAElTTy1JUi0xMDAAMTAwMDAAJSFQUy1BZG9iZS0zLjAAbnogPiAwAGxpc3QtPmNhcGFjaXR5ID4gMABkaXN0ID4gMABwYXRoY291bnQgPiAwAHdndCA+IDAAbnNpdGVzID4gMABzaWRlcyA+IDAAcnYgPT0gMCB8fCAoTkRfb3JkZXIocnYpLU5EX29yZGVyKHYpKSpkaXIgPiAwAGlucG4gPiAwAGxlbiA+IDAAcXQxLT5uID4gMCAmJiBxdDItPm4gPiAwAG0gPiAwICYmIG4gPiAwAG5ld1RvdGFsID4gMAB3aWR0aCA+IDAAbGlzdC0+c2l6ZSA+IDAAZGljdC0+c2l6ZSA+IDAAc3BsLT5zaXplID4gMABzZWxmLT5zaXplID4gMABiei5zaXplID4gMABpbmNyZWFzZSA+IDAAYm91bmQgPiAwAGdyYXBoLT53ZWlnaHRzW3hdID4gMABncmFwaC0+d2VpZ2h0c1tuX2VkZ2VzXSA+IDAAaW5kZXggPj0gMAB0ID49IDAAbm5vZGVzID49IDAAbl9vYnMgPj0gMABuID49IDAAbi0+bGV2ZWwgPj0gMABvcmlnaW5hbCA+PSAwAE1heHJhbmsgPj0gMABQYWNrID49IDAAaWkgPCAxPDxkaW0gJiYgaWkgPj0gMAB3aWR0aCA+PSAwAGpkaWFnID49IDAAaWRpYWcgPj0gMABkID49IDAAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzBdID49IDAgJiYgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID49IDAAViA+PSAwAGFnbm5vZGVzKGdyYXBoKSA+PSAwAGFnbm5vZGVzKGcpID49IDAARURfdHJlZV9pbmRleChlKSA+PSAwAEVEX2NvdW50KGUpID49IDAAb2JqcDEtPnN6LnggPT0gMCAmJiBvYmpwMS0+c3oueSA9PSAwAGNfY250ID09IDAAcmFua19yZXN1bHQgPT0gMABnZXR0aW1lb2ZkYXlfcmVzID09IDAAaiA9PSAwAE5EX2luKHJpZ2h0KS5zaXplICsgTkRfb3V0KHJpZ2h0KS5zaXplID09IDAAYS5zaGFwZSA9PSAwIHx8IGIuc2hhcGUgPT0gMABsaXN0LT5iYXNlICE9IE5VTEwgfHwgaW5kZXggPT0gMCB8fCBzdHJpZGUgPT0gMABkdHNpemUoZGVzdCkgPT0gMABkdHNpemUoZy0+bl9zZXEpID09IDAAZHRzaXplKGctPmdfc2VxKSA9PSAwAGR0c2l6ZShnLT5lX3NlcSkgPT0gMABHRF9taW5yYW5rKGcpID09IDAAZHRzaXplKGctPmdfaWQpID09IDAAZHRzaXplKGctPmVfaWQpID09IDAAY29zeCAhPSAwIHx8IHNpbnggIT0gMAByZXFfYWxpZ25tZW50ICE9IDAAbWVtY21wKCZzdHlsZSwgJihncmFwaHZpel9wb2x5Z29uX3N0eWxlX3QpezB9LCBzaXplb2Yoc3R5bGUpKSAhPSAwAHJlc3VsdCA9PSAoaW50KShzaXplIC0gMSkgfHwgcmVzdWx0IDwgMABtYXNrW2lpXSA8IDAATkRfaGVhcGluZGV4KHYpIDwgMABcLwBYMTEvAGd2UmVuZGVySm9icyAlczogJS4yZiBzZWNzLgAlLipzLgBzcGVjaWZpZWQgcm9vdCBub2RlICIlcyIgd2FzIG5vdCBmb3VuZC4AR3JhcGggJXMgaGFzIGFycmF5IHBhY2tpbmcgd2l0aCB1c2VyIHZhbHVlcyBidXQgbm8gInNvcnR2IiBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLgAxLgAtMC4AJSFQUy1BZG9iZS0AJVBERi0APCEtLQAgLAArACoAc3RyZXEoYXB0ci0+dS5uYW1lLEtleSkAIWlzX2V4YWN0bHlfZXF1YWwoUi54LCBRLngpIHx8ICFpc19leGFjdGx5X2VxdWFsKFIueSwgUS55KQBORF9vcmRlcih2KSA8IE5EX29yZGVyKHcpAHUgPT0gVUZfZmluZCh1KQAhTElTVF9JU19FTVBUWShwbGlzdCkAZ3ZfbGlzdF9pc19jb250aWd1b3VzXygqbGlzdCkAb25lIDw9IExJU1RfU0laRShsaXN0KQBucCA8IExJU1RfU0laRShsaXN0KQBpc19wb3dlcl9vZl8yKGFsaWdubWVudCkAc3RkOjppc19oZWFwKGhlYXAuYmVnaW4oKSwgaGVhcC5lbmQoKSwgZ3QpACEocS0+cXRzKQAhTElTVF9JU19FTVBUWSgmbGVhdmVzKQBvbl9oZWFwKHIpAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPT0gKHNpemVfdClkdHNpemUoZy0+bl9zZXEpAE5EX3JhbmsoZnJvbSkgPCBORF9yYW5rKHRvKQBub3Qgd2VsbC1mb3JtZWQgKGludmFsaWQgdG9rZW4pAGFnc3VicmVwKGcsbikAbiAhPSBORF9uZXh0KG4pAGZpbmRfZmFzdF9ub2RlKGcsIG4pAChudWxsKQAoIWpjbikgJiYgKCF2YWwpACEocS0+bCkAc3ltLT5pZCA+PSAwICYmIHN5bS0+aWQgPCB0b3BkaWN0c2l6ZShvYmopAG1vdmUgdG8gKCUuMGYsICUuMGYpADsgc3BsaW5lIHRvICglLjBmLCAlLjBmKQA7IGxpbmUgdG8gKCUuMGYsICUuMGYpAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMoQSwgdHJ1ZSkAdmFsdWUgJiYgc3RybGVuKHZhbHVlKQBTcGFyc2VNYXRyaXhfaXNfc3ltbWV0cmljKEEsIGZhbHNlKQAhdXNlX3N0YWdlIHx8IHNpemUgPD0gc2l6ZW9mKHN0YWdlKQBFRF9sYWJlbChmZSkAIVRSRUVfRURHRShlKQAhY29uc3RyYWluaW5nX2ZsYXRfZWRnZShnLCBlKQBub2RlX3NldF9pc19lbXB0eShnLT5uX2lkKQByXyVkKQBsXyVkKQAobGliKQAhU3BhcnNlTWF0cml4X2hhc19kaWFnb25hbChBKQAgc2Nhbm5pbmcgYSBIVE1MIHN0cmluZyAobWlzc2luZyAnPic/IGJhZCBuZXN0aW5nPyBsb25nZXIgdGhhbiAlZD8pACBzY2FubmluZyBhIHF1b3RlZCBzdHJpbmcgKG1pc3NpbmcgZW5kcXVvdGU/IGxvbmdlciB0aGFuICVkPykAIHNjYW5uaW5nIGEgLyouLi4qLyBjb21tZW50IChtaXNzaW5nICcqLz8gbG9uZ2VyIHRoYW4gJWQ/KQBmYWxsYmFjayg0KQBvbl9oZWFwKHIwKSB8fCBvbl9oZWFwKHIxKQBhZ3RhaWwoZSkgPT0gVUZfZmluZChhZ3RhaWwoZSkpAGFnaGVhZChlKSA9PSBVRl9maW5kKGFnaGVhZChlKSkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpAG91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpAHN0cmVxKG1vZGUsICJyIikgfHwgc3RyZXEobW9kZSwgInJiIikgfHwgc3RyZXEobW9kZSwgInciKSB8fCBzdHJlcShtb2RlLCAid2IiKQBwbmFtZSAhPSBOVUxMICYmICFzdHJlcShwbmFtZSwgIiIpAHNldGxpbmV3aWR0aCgAKSByb3RhdGUoJWQpIHRyYW5zbGF0ZSgAIHRyYW5zZm9ybT0ic2NhbGUoAE5PVEFUSU9OKAAgKAAgbmVhciAnJXMnACVsZiwlbGYsJWxmLCclW14nXScAaXNkaWdpdCgoaW50KWRvdHBbMV0pICYmIGlzZGlnaXQoKGludClkb3RwWzJdKSAmJiBkb3RwWzNdID09ICdcMCcAJgAlACQAdXJsKCMAPHRleHRQYXRoIHhsaW5rOmhyZWY9IiMAPGFyZWEgc2hhcGU9InBvbHkiACBmaWxsPSIjJTAyeCUwMnglMDJ4IgAoc2VxICYgU0VRX01BU0spID09IHNlcSAmJiAic2VxdWVuY2UgSUQgb3ZlcmZsb3ciAGd2X3NvcnRfY29tcGFyID09IE5VTEwgJiYgZ3Zfc29ydF9hcmcgPT0gTlVMTCAmJiAidW5zdXBwb3J0ZWQgcmVjdXJzaXZlIGNhbGwgdG8gZ3Zfc29ydCIAZ3Zfc29ydF9jb21wYXIgIT0gTlVMTCAmJiAibm8gY29tcGFyYXRvciBzZXQgaW4gZ3Zfc29ydCIAb3AtPm9wLnUucG9seWdvbi5jbnQgPD0gSU5UX01BWCAmJiAicG9seWdvbiBjb3VudCBleGNlZWRzIGd2cmVuZGVyX3BvbHlnb24gc3VwcG9ydCIAIHRleHQtYW5jaG9yPSJzdGFydCIAcC54ICE9IGEgJiYgImNhbm5vdCBoYW5kbGUgZWxsaXBzZSB0YW5nZW50IHNsb3BlIGluIGhvcml6b250YWwgZXh0cmVtZSBwb2ludCIAZnVsbF9sZW5ndGhfd2l0aG91dF9zaGFmdCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCB3aXRob3V0IHNoYWZ0IgA8YXJlYSBzaGFwZT0icmVjdCIAc2l6ZSA+IDAgJiYgImF0dGVtcHQgdG8gYWxsb2NhdGUgYXJyYXkgb2YgMC1zaXplZCBlbGVtZW50cyIAaW5kZXggPCBzZWxmLT5zaXplX2JpdHMgJiYgIm91dCBvZiBib3VuZHMgYWNjZXNzIgBpbmRleCA8IHNlbGYuc2l6ZV9iaXRzICYmICJvdXQgb2YgYm91bmRzIGFjY2VzcyIAKnMxICE9ICpzMiAmJiAiZHVwbGljYXRlIHNlcGFyYXRvciBjaGFyYWN0ZXJzIgBHRF9taW5yYW5rKHN1YmcpIDw9IEdEX21heHJhbmsoc3ViZykgJiYgImNvcnJ1cHRlZCByYW5rIGJvdW5kcyIAaW5kZXggPCBsaXN0LnNpemUgJiYgImluZGV4IG91dCBvZiBib3VuZHMiACh1aW50cHRyX3QpcyAlIDIgPT0gMCAmJiAiaGVhcCBwb2ludGVyIHdpdGggbG93IGJpdCBzZXQgd2lsbCBjb2xsaWRlIHdpdGggYW5vbnltb3VzIElEcyIAICgrJTZsZCBieXRlcyAlc3wldSwgeG1scGFyc2UuYzolZCkgJSpzIgAgZm9udC1mYW1pbHk9IiVzIgAgZm9udC13ZWlnaHQ9IiVzIgAgZmlsbD0iJXMiACBmb250LXN0cmV0Y2g9IiVzIgAgZm9udC1zdHlsZT0iJXMiAGJhZCBlZGdlIGxlbiAiJXMiACBiYXNlbGluZS1zaGlmdD0ic3VwZXIiAGFneGJsZW4oeGIpIDw9IHNpemVvZih4Yi0+c3RvcmUpICYmICJhZ3hidWYgY29ycnVwdGlvbiIAY2VsbC5yb3cgPCB0YWJsZS0+cm93X2NvdW50ICYmICJvdXQgb2YgcmFuZ2UgY2VsbCIAY2VsbC5jb2wgPCB0YWJsZS0+Y29sdW1uX2NvdW50ICYmICJvdXQgb2YgcmFuZ2UgY2VsbCIAIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiAGZ1bGxfbGVuZ3RoID4gMCAmJiAibm9uLXBvc2l0aXZlIGZ1bGwgbGVuZ3RoIgBmdWxsX2Jhc2Vfd2lkdGggPiAwICYmICJub24tcG9zaXRpdmUgZnVsbCBiYXNlIHdpZHRoIgBub21pbmFsX2Jhc2Vfd2lkdGggPiAwICYmICJub24tcG9zaXRpdmUgbm9taW5hbCBiYXNlIHdpZHRoIgAiIHdpZHRoPSIlZ3B4IiBoZWlnaHQ9IiVncHgiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIG1lZXQiIHg9IiVnIiB5PSIlZyIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB4PSIlZyIgeT0iJWciACBmb250LXNpemU9IiUuMmYiACBmaWxsLW9wYWNpdHk9IiVmIgA8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIgBpc2Zpbml0ZShtKSAmJiAiZWxsaXBzZSB0YW5nZW50IHNsb3BlIGlzIGluZmluaXRlIgAoeGItPmxvY2F0ZWQgPT0gQUdYQlVGX09OX0hFQVAgfHwgeGItPmxvY2F0ZWQgPD0gc2l6ZW9mKHhiLT5zdG9yZSkpICYmICJjb3JydXB0ZWQgYWd4YnVmIHR5cGUiACB0ZXh0LWFuY2hvcj0ibWlkZGxlIgA8YXJlYSBzaGFwZT0iY2lyY2xlIgBjZWxsLT5yb3cgKyBjZWxsLT5yb3dzcGFuIDw9IHRhYmxlLT5yb3dfY291bnQgJiYgImNlbGwgc3BhbnMgaGlnaGVyIHRoYW4gY29udGFpbmluZyB0YWJsZSIAY2VsbC5yb3cgKyBjZWxsLnJvd3NwYW4gPD0gdGFibGUtPnJvd19jb3VudCAmJiAiY2VsbCBzcGFucyBoaWdoZXIgdGhhbiBjb250YWluaW5nIHRhYmxlIgBjZWxsLT5jb2wgKyBjZWxsLT5jb2xzcGFuIDw9IHRhYmxlLT5jb2x1bW5fY291bnQgJiYgImNlbGwgc3BhbnMgd2lkZXIgdGhhbiBjb250YWluaW5nIHRhYmxlIgBjZWxsLmNvbCArIGNlbGwuY29sc3BhbiA8PSB0YWJsZS0+Y29sdW1uX2NvdW50ICYmICJjZWxsIHNwYW5zIHdpZGVyIHRoYW4gY29udGFpbmluZyB0YWJsZSIAb2xkX25tZW1iIDwgU0laRV9NQVggLyBzaXplICYmICJjbGFpbWVkIHByZXZpb3VzIGV4dGVudCBpcyB0b28gbGFyZ2UiAHRoZXRhID49IDAgJiYgdGhldGEgPD0gTV9QSSAmJiAidGhldGEgb3V0IG9mIHJhbmdlIgB0YWJsZS0+aGVpZ2h0cyA9PSBOVUxMICYmICJ0YWJsZSBoZWlnaHRzIGNvbXB1dGVkIHR3aWNlIgB0YWJsZS0+d2lkdGhzID09IE5VTEwgJiYgInRhYmxlIHdpZHRocyBjb21wdXRlZCB0d2ljZSIAIHRleHQtYW5jaG9yPSJlbmQiACBmb250LXdlaWdodD0iYm9sZCIAIGZvbnQtc3R5bGU9Iml0YWxpYyIAIGJhc2VsaW5lLXNoaWZ0PSJzdWIiAFwiAGxsZW4gPD0gSU5UX01BWCAmJiAiWE1MIHRva2VuIHRvbyBsb25nIGZvciBleHBhdCBBUEkiACIgcnk9IgBfcCIgc3RhcnRPZmZzZXQ9IjUwJSI+PHRzcGFuIHg9IjAiIGR5PSIAIiBjeT0iACIgeT0iACIgcng9IgAgY3g9IgAgeD0iACB0YXJnZXQ9IgAgcG9pbnRzPSIAIGNvb3Jkcz0iACB0ZXh0LWRlY29yYXRpb249IgAgZmlsbD0iACIgc3Ryb2tlLXdpZHRoPSIAPGltYWdlIHhsaW5rOmhyZWY9IgA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IgAiIG5hbWU9IgAgeGxpbms6dGl0bGU9IgAgdGl0bGU9IgAiIHN0cm9rZT0iADxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9IgA8ZGVmcz4KPHJhZGlhbEdyYWRpZW50IGlkPSIAPG1hcCBpZD0iADxnIGlkPSIAIGQ9IgAiIHkyPSIAIiB4Mj0iACIgeTE9IgB4MT0iACB2aWV3Qm94PSIlZC4wMCAlZC4wMCAlZC4wMCAlZC4wMCIAIHRyYW5zZm9ybT0icm90YXRlKCVkICVnICVnKSIAYWd4YmxlbigmY3R4LT5TYnVmKSA9PSAwICYmICJwZW5kaW5nIHN0cmluZyBkYXRhIHRoYXQgd2FzIG5vdCBjb25zdW1lZCAobWlzc2luZyAiICJlbmRzdHIoKS9lbmRodG1sc3RyKCk/KSIAIGFsdD0iIgBDeWNsZSBFcnJvciEAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAPCEtLSBHZW5lcmF0ZWQgYnkgACVzJXp1IC0jJTAyeCUwMnglMDJ4JTAyeCAAJXMlenUgLSMlMDJ4JTAyeCUwMnggACVjICV6dSAAdCAldSAAIGNyZWF0ZSB0ZXh0IAB4TGF5b3V0IABkZWZhdWx0IABzdHJpY3QgACVzJXp1IC0lcyAAIC1zbW9vdGggYmV6aWVyIAAgbW92ZXRvIAAgdmVyc2lvbiAAIGNyZWF0ZSBwb2x5Z29uIAAgLXRleHQgeyVzfSAtZmlsbCAAIGNyZWF0ZSBvdmFsIAAgLXdpZHRoIABuZXdwYXRoIABncmFwaCAAcywlLjVnLCUuNWcgACUuNWcsJS41ZywlLjVnLCUuNWcgAGUsJS41ZywlLjVnIAAlZyAlZyAAJS4wM2xmIAAlLjNmIAAlZCAlZCAlZCAlZCAlZCAlZCAlLjFmICUuNGYgJWQgJS4xZiAlLjFmICUuMGYgJS4wZiAAIC1vdXRsaW5lIAAgY3JlYXRlIGxpbmUgAG5vZGUgACVkIABUb3RhbCBzaXplID4gMSBpbiAiJXMiIGNvbG9yIHNwZWMgAFsgL1JlY3QgWyAAVCAAUyAAT1BFTiAASSAARiAARSAAQyAAIC0+IABSYW5rIHNlcGFyYXRpb24gPSAAVW5zYXRpc2ZpZWQgY29uc3RyYWludDogAENhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzOiAAJXM6IABTb2x2aW5nIG1vZGVsOiAAU2V0dGluZyB1cCBzcHJpbmcgbW9kZWw6IABjb252ZXJ0IGdyYXBoOiAAIFRpdGxlOiAAW0dyYXBodml6XSAlczolZDogJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiAAInRleHQiOiAAeyJmcmFjIjogJS4wM2YsICJjb2xvciI6IAAibmFtZSI6IAAic3R5bGUiOiAAImZhY2UiOiAAMiAAPCEtLSAAIC0tIAAlIABfcCIgAGxfJWQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAADSAgICAgICAgICAgICAgICBpdGVyID0gJWQsIHN0ZXAgPSAlZiBGbm9ybSA9ICVmIG56ID0gJXp1ICBLID0gJWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAogICAgADoJIAAgICAgJXN9CgB0cnlpbmcgdG8gYWRkIHRvIHJlY3QgeyVmICsvLSAlZiwgJWYgKy8tICVmfQoAI2RlZmF1bHQgeyBmaW5pc2ggeyBhbWJpZW50IDAuMSBkaWZmdXNlIDAuOSB9IH0KAHBpZ21lbnQgeyBjb2xvciAlcyB9CgBsaWdodF9zb3VyY2UgeyA8MTUwMCwzMDAwLC0yNTAwPiBjb2xvciBXaGl0ZSB9CgBnbG9iYWxfc2V0dGluZ3MgeyBhc3N1bWVkX2dhbW1hIDEuMCB9CgAgICAgdGV4dHVyZSBJbWFnZVRleHR1cmUgeyB1cmwgIiVzIiB9CgAgICAgfQoALy9za3kKcGxhbmUgeyA8MCwgMSwgMD4sIDEgaG9sbG93CiAgICB0ZXh0dXJlIHsKICAgICAgICBwaWdtZW50IHsgYm96byB0dXJidWxlbmNlIDAuOTUKICAgICAgICAgICAgY29sb3JfbWFwIHsKICAgICAgICAgICAgICAgIFswLjAwIHJnYiA8MC4wNSwgMC4yMCwgMC41MD5dCiAgICAgICAgICAgICAgICBbMC41MCByZ2IgPDAuMDUsIDAuMjAsIDAuNTA+XQogICAgICAgICAgICAgICAgWzAuNzUgcmdiIDwxLjAwLCAxLjAwLCAxLjAwPl0KICAgICAgICAgICAgICAgIFswLjc1IHJnYiA8MC4yNSwgMC4yNSwgMC4yNT5dCiAgICAgICAgICAgICAgICBbMS4wMCByZ2IgPDAuNTAsIDAuNTAsIDAuNTA+XQogICAgICAgICAgICB9CiAgICAgICAgICAgIHNjYWxlIDwxLjAwLCAxLjAwLCAxLjUwPiAqIDIuNTAKICAgICAgICAgICAgdHJhbnNsYXRlIDwwLjAwLCAwLjAwLCAwLjAwPgogICAgICAgIH0KICAgICAgICBmaW5pc2ggeyBhbWJpZW50IDEgZGlmZnVzZSAwIH0KICAgIH0KICAgIHNjYWxlIDEwMDAwCn0KLy9taXN0CmZvZyB7IGZvZ190eXBlIDIKICAgIGRpc3RhbmNlIDUwCiAgICBjb2xvciByZ2IgPDEuMDAsIDEuMDAsIDEuMDA+ICog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aWR0aCBvciBoZWlnaHQKAGZpeGVkIHRhYmxlIHNpemUgd2l0aCB1bnNwZWNpZmllZCB3aWR0aCBvciBoZWlnaHQKAHBvcyBhdHRyaWJ1dGUgZm9yIGVkZ2UgKCVzLCVzKSBkb2Vzbid0IGhhdmUgM24rMSBwb2ludHMKACAgZ2VuZXJhdGVkICVkIGNvbnN0cmFpbnRzCgBzcGxpbmVzIGFuZCBjbHVzdGVyIGVkZ2VzIG5vdCBzdXBwb3J0ZWQgLSB1c2luZyBsaW5lIHNlZ21lbnRzCgBvYmplY3RzCgBXYXJuaW5nOiBub2RlICVzLCBwb3NpdGlvbiAlcywgZXhwZWN0ZWQgdHdvIGZsb2F0cwoAZm9udCBuYW1lICVzIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBtYXkgbm90IGJlIGFjY2VwdGVkIGJ5IHNvbWUgUFMgdmlld2VycwoAZm9udCBuYW1lICVzIGlzIGxvbmdlciB0aGFuIDI5IGNoYXJhY3RlcnMgd2hpY2ggbWF5IGJlIHJlamVjdGVkIGJ5IHNvbWUgUFMgdmlld2VycwoAY2Fubm90IGFsbG9jYXRlIHBzCgBzY2FsZT0xLjAgJXMgcmVxdWlyZWQgZm9yIGNvbXBhcmlzb25zCgBTZXR0aW5nIGluaXRpYWwgcG9zaXRpb25zCgAlcyBEV0IgMiBjb21wYXRpYmlsaXR5IGRlZmluaXRpb25zCgBhcnJheSBwYWNraW5nOiAlcyAlenUgcm93cyAlenUgY29sdW1ucwoAc3ludGF4IGFtYmlndWl0eSAtIGJhZGx5IGRlbGltaXRlZCBudW1iZXIgJyVzJyBpbiBsaW5lICVkIG9mICVzIHNwbGl0cyBpbnRvIHR3byB0b2tlbnMKAGVkZ2UgbGFiZWxzIHdpdGggc3BsaW5lcz1jdXJ2ZWQgbm90IHN1cHBvcnRlZCBpbiBkb3QgLSB1c2UgeGxhYmVscwoAZmxhdCBlZGdlIGJldHdlZW4gYWRqYWNlbnQgbm9kZXMgb25lIG9mIHdoaWNoIGhhcyBhIHJlY29yZCBzaGFwZSAtIHJlcGxhY2UgcmVjb3JkcyB3aXRoIEhUTUwtbGlrZSBsYWJlbHMKAG91dCBvZiBtZW1vcnkgd2hlbiB0cnlpbmcgdG8gYWxsb2NhdGUgJXp1IGJ5dGVzCgBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gdHJ5aW5nIHRvIGFsbG9jYXRlICV6dSAqICV6dSBieXRlcwoAdXBkYXRlOiBtaXNtYXRjaGVkIGxjYSBpbiB0cmVldXBkYXRlcwoAZ3JhcGggJXMsIGNvb3JkICVzLCBleHBlY3RlZCBmb3VyIGRvdWJsZXMKAG5vZGUgJXMsIHBvc2l0aW9uICVzLCBleHBlY3RlZCB0d28gZG91YmxlcwoARm91bmQgJWQgRGlHLUNvTGEgYm91bmRhcmllcwoASW5jaGVzCgAoJTR6dSkgJTd6dSBub2RlcyAlN3p1IGVkZ2VzCgBjb21wb3VuZEVkZ2VzOiBjb3VsZCBub3QgY29uc3RydWN0IG9ic3RhY2xlcyAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgB0aGUgYm91bmRpbmcgYm94ZXMgb2Ygc29tZSBub2RlcyB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBjb21wb3VuZEVkZ2VzOiBub2RlcyB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBzb21lIG5vZGVzIHdpdGggbWFyZ2luICglLjAyZiwlLjAyZikgdG91Y2ggLSBmYWxsaW5nIGJhY2sgdG8gc3RyYWlnaHQgbGluZSBlZGdlcwoAbWVyZ2UyOiBncmFwaCAlcywgcmFuayAlZCBoYXMgb25seSAlZCA8ICVkIG5vZGVzCgBTY2FubmluZyBncmFwaCAlcywgJWQgbm9kZXMKAFdhcm5pbmc6IG5vIGhhcmQtY29kZWQgbWV0cmljcyBmb3IgJyVzJy4gIEZhbGxpbmcgYmFjayB0byAnVGltZXMnIG1ldHJpY3MKAGluIGVkZ2UgJXMlcyVzCgBVc2luZyAlczogJXM6JXMKAEZvcm1hdDogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoATGF5b3V0IHR5cGU6ICIlcyIgbm90IHJlY29nbml6ZWQuIFVzZSBvbmUgb2Y6JXMKAGxheW91dCAlcwoALmZ0ICVzCgBiYWQgbGFiZWwgZm9ybWF0ICVzCgBpbiByb3V0ZXNwbGluZXMsIGVkZ2UgaXMgYSBsb29wIGF0ICVzCgAgICAgICAgJTdkIG5vZGVzICU3ZCBlZGdlcyAlN3p1IGNvbXBvbmVudHMgJXMKAGluIGxhYmVsIG9mIGVkZ2UgJXMgJXMgJXMKACAgRWRnZSAlcyAlcyAlcwoAb3J0aG8gJXMgJXMKAHBvbHlsaW5lICVzICVzCgBzcGxpbmUgJXMgJXMKAHJlY3RhbmdsZSAoJS4wZiwlLjBmKSAoJS4wZiwlLjBmKSAlcyAlcwoAaW4gY2x1c3RlciAlcwoAJXMgd2FzIGFscmVhZHkgaW4gYSByYW5rc2V0LCBkZWxldGVkIGZyb20gY2x1c3RlciAlcwoAJXMgLT4gJXM6IHRhaWwgbm90IGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiBoZWFkIGlzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAGhlYWQgY2x1c3RlciAlcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgBoZWFkIG5vZGUgJXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAJXMgLT4gJXM6IGhlYWQgbm90IGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKACVzIC0+ICVzOiB0YWlsIGlzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAHRhaWwgY2x1c3RlciAlcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgB0YWlsIG5vZGUgJXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAVW5oYW5kbGVkIGFkanVzdCBvcHRpb24gJXMKAHJlcG9zaXRpb24gJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggeGxhYmVsICVzCgBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIHRhaWwgbGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggbGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggaGVhZCBsYWJlbCAlcwoALy8qKiogYmVnaW5fZ3JhcGggJXMKAE1heC4gaXRlcmF0aW9ucyAoJWQpIHJlYWNoZWQgb24gZ3JhcGggJXMKAENvdWxkIG5vdCBwYXJzZSAiX2JhY2tncm91bmQiIGF0dHJpYnV0ZSBpbiBncmFwaCAlcwoAaW4gbGFiZWwgb2YgZ3JhcGggJXMKAENyZWF0aW5nIGVkZ2VzIHVzaW5nICVzCgBBZGp1c3RpbmcgJXMgdXNpbmcgJXMKACVzIHdoaWxlIG9wZW5pbmcgJXMKAGRlcml2ZSBncmFwaCBfZGdfJWQgb2YgJXMKACBdICAlenUgdHJ1ZSAlcwoAXSAgJWQgdHJ1ZSAlcwoAIF0gICV6dSBmYWxzZSAlcwoAXSAgJWQgZmFsc2UgJXMKAG1ha2VQb2x5OiB1bmtub3duIHNoYXBlIHR5cGUgJXMKAG1ha2VBZGRQb2x5OiB1bmtub3duIHNoYXBlIHR5cGUgJXMKAHVzaW5nICVzIGZvciB1bmtub3duIHNoYXBlICVzCgAgIG9jdHJlZSBzY2hlbWUgJXMKAGNhbid0IG9wZW4gbGlicmFyeSBmaWxlICVzCgBjYW4ndCBmaW5kIGxpYnJhcnkgZmlsZSAlcwoAQm91bmRpbmdCb3ggbm90IGZvdW5kIGluIGVwc2YgZmlsZSAlcwoAY291bGRuJ3Qgb3BlbiBlcHNmIGZpbGUgJXMKAGNvdWxkbid0IHJlYWQgZnJvbSBlcHNmIGZpbGUgJXMKAGluIG5vZGUgJXMKAHNoYXBlZmlsZSBub3Qgc2V0IG9yIG5vdCBmb3VuZCBmb3IgZXBzZiBub2RlICVzCgBpbiBsYWJlbCBvZiBub2RlICVzCgBlbmQgJXMKAHJhbmtpbmc6IGZhaWx1cmUgdG8gY3JlYXRlIHN0cm9uZyBjb25zdHJhaW50IGVkZ2UgYmV0d2VlbiBub2RlcyAlcyBhbmQgJXMKAG9vcHMsIGludGVybmFsIGVycm9yOiB1bmhhbmRsZWQgY29sb3IgdHlwZT0lZCAlcwoAJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlZCAlZCAlZCAlZCAlZCAlZAogJWQgJXMKAC8vKioqIHRleHRzcGFuOiAlcywgZm9udHNpemUgPSAlLjNmLCBmb250bmFtZSA9ICVzCgB0cmllcyA9ICVkLCBtb2RlID0gJXMKAC8vKioqIGNvbW1lbnQ6ICVzCgBmYWlsZWQgdG8gcmVzZXJ2ZSAlenUgZWxlbWVudHMgb2Ygc2l6ZSAlenUgYnl0ZXM6ICVzCgBmb250bmFtZTogIiVzIiByZXNvbHZlZCB0bzogJXMKACUlJSVQYWdlT3JpZW50YXRpb246ICVzCgBkZWxhdW5heV90cmlhbmd1bGF0aW9uOiAlcwoAZGVsYXVuYXlfdHJpOiAlcwoAZ3ZwcmludGY6ICVzCgBuZXN0aW5nIG5vdCBhbGxvd2VkIGluIHN0eWxlOiAlcwoAdW5tYXRjaGVkICcpJyBpbiBzdHlsZTogJXMKAHVubWF0Y2hlZCAnKCcgaW4gc3R5bGU6ICVzCgAlJSUlVGl0bGU6ICVzCgAlcyBUaXRsZTogJXMKACMgVGl0bGU6ICVzCgAvLyoqKiBiZWdpbl9ub2RlOiAlcwoAbGliL3BhdGhwbGFuLyVzOiVkOiAlcwoAZ3JpZCglZCwlZCk6ICVzCgBDb3VsZCBub3Qgb3BlbiAiJXMiIGZvciB3cml0aW5nIDogJXMKAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgAgWyV6dV0gJXAgc2V0ICVkICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcwoAJSUgJXMKACMgJXMKACAgbW9kZSAgICVzCgBsaXN0IGVsZW1lbnQgdHlwZSBpcyBub3QgYSBwb2ludGVyLCBidXQgYGZyZWVgIHVzZWQgYXMgZGVzdHJ1Y3RvcgoAY29uanVnYXRlX2dyYWRpZW50OiB1bmV4cGVjdGVkIGxlbmd0aCAwIHZlY3RvcgoAJXMgdG8gY2hhbmdlIGRyYXdpbmcgc2l6ZSwgbXVsdGlwbHkgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb24gdGhlIC5QUyBsaW5lIGFib3ZlIGFuZCB0aGUgbnVtYmVyIG9uIHRoZSB0d28gbGluZXMgYmVsb3cgKHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikgYnkgYSBzY2FsZSBmYWN0b3IKAGFkZF9zZWdtZW50OiBlcnJvcgoAJS41ZyAlLjVnICUuNWcgJXNjb2xvcgoAMCAwIDAgZWRnZWNvbG9yCgAwLjggMC44IDAuOCBzZXRyZ2Jjb2xvcgoAMCAwIDEgc2V0cmdiY29sb3IKADEgMCAwIHNldHJnYmNvbG9yCgAwIDAgMCBzZXRyZ2Jjb2xvcgoAJWQgJWQgc2V0bGF5ZXIKAC8vKioqIGVuZF9sYXllcgoAVVRGLTggaW5wdXQgdXNlcyBub24tTGF0aW4xIGNoYXJhY3RlcnMgd2hpY2ggY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBQb3N0U2NyaXB0IGRyaXZlcgoATGV0dGVyCgAvLyoqKiBiZWdpbl9jbHVzdGVyCgAvLyoqKiBlbmRfY2x1c3RlcgoAcmVtb3ZpbmcgZW1wdHkgY2x1c3RlcgoAQ2VudGVyCgBXYXJuaW5nOiBubyB2YWx1ZSBmb3Igd2lkdGggb2Ygbm9uLUFTQ0lJIGNoYXJhY3RlciAldS4gRmFsbGluZyBiYWNrIHRvIHdpZHRoIG9mIHNwYWNlIGNoYXJhY3RlcgoAYmFzZSByZWZlcmVyCgAlJVBhZ2VUcmFpbGVyCgAlJVRyYWlsZXIKAC8vKioqIGJlemllcgoAIiVzIiB3YXMgbm90IGZvdW5kIGFzIGEgZmlsZSBvciBhcyBhIHNoYXBlIGxpYnJhcnkgbWVtYmVyCgBzdG9wCgAgY3VydmV0bwoAbmV3cGF0aCAlLjBmICUuMGYgbW92ZXRvCgAlLjBmICUuMGYgbGluZXRvCgAgbGF5b3V0PW5lYXRvCgBub2RlICVzIGluIGdyYXBoICVzIGhhcyBubyBwb3NpdGlvbgoAJXMgbWF4cHNodCBhbmQgbWF4cHN3aWQgaGF2ZSBubyBtZWFuaW5nIGluIERXQiAyLjAsIHNldCBwYWdlIGJvdW5kYXJpZXMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaGFzIG5vIG1lYW5pbmcgaW4gRFdCIDIsIGFycm93aGVhZCA9IDcgbWFrZXMgZmlsbGVkIGFycm93aGVhZHMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaXMgdW5kZWZpbmVkIGluIERXQiAyLCBpbml0aWFsbHkgMSBpbiBncGljLCAyIGluIDEwdGggRWRpdGlvbgoAbWFqb3JpemF0aW9uCgAvLyoqKiBwb2x5Z29uCgBvdmVyZmxvdyB3aGVuIGNvbXB1dGluZyBlZGdlIHdlaWdodCBzdW0KAHNmZHAgb25seSBzdXBwb3J0cyBzdGFydD1yYW5kb20KAG5vZGUgcG9zaXRpb25zIGFyZSBpZ25vcmVkIHVubGVzcyBzdGFydD1yYW5kb20KAGNsb3NlcGF0aCBmaWxsCgAgZWxsaXBzZV9wYXRoIGZpbGwKACAgJS4wZiAlLjBmIGNlbGwKACVmICVmICVmICVmIGNlbGwKAGdyYXBoICVzIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBncmFwaCBpcyBkaXNjb25uZWN0ZWQuIEhlbmNlLCB0aGUgY2lyY3VpdCBtb2RlbAoAZWRnZXMgaW4gZ3JhcGggJXMgaGF2ZSBubyBsZW4gYXR0cmlidXRlLiBIZW5jZSwgdGhlIG1kcyBtb2RlbAoAY2lyY3VpdCBtb2RlbCBub3QgeWV0IHN1cHBvcnRlZCBpbiBHbW9kZT1zZ2QsIHJldmVydGluZyB0byBzaG9ydHBhdGggbW9kZWwKAG1kcyBtb2RlbCBub3QgeWV0IHN1cHBvcnRlZCBpbiBHbW9kZT1zZ2QsIHJldmVydGluZyB0byBzaG9ydHBhdGggbW9kZWwKAG5vZGUgJyVzJywgZ3JhcGggJyVzJyBzaXplIHRvbyBzbWFsbCBmb3IgbGFiZWwKACVzIERXQiAyIGRvZXNuJ3QgdXNlIGZpbGwgYW5kIGRvZXNuJ3QgZGVmaW5lIGZpbGx2YWwKAFsge0NhdGFsb2d9IDw8IC9VUkkgPDwgL0Jhc2UgJXMgPj4gPj4KL1BVVCBwZGZtYXJrCgBbIC9Dcm9wQm94IFslZCAlZCAlZCAlZF0gL1BBR0VTIHBkZm1hcmsKACAgL0JvcmRlciBbIDAgMCAwIF0KICAvQWN0aW9uIDw8IC9TdWJ0eXBlIC9VUkkgL1VSSSAlcyA+PgogIC9TdWJ0eXBlIC9MaW5rCi9BTk4gcGRmbWFyawoAdHJvdWJsZSBpbiBpbml0X3JhbmsKAGxpbmV0aGljayA9IDA7IG9sZGxpbmV0aGljayA9IGxpbmV0aGljawoAIHNldGxpbmV3aWR0aAoAZ3NhdmUKJWQgJWQgJWQgJWQgYm94cHJpbSBjbGlwIG5ld3BhdGgKAGdzYXZlICVnICVnIHRyYW5zbGF0ZSBuZXdwYXRoCgAvLyoqKiBlbmRfZ3JhcGgKAGxheW91dCBhdHRyaWJ1dGUgaXMgaW52YWxpZCBleGNlcHQgb24gdGhlIHJvb3QgZ3JhcGgKAGluIGNoZWNrcGF0aCwgYm94ZXMgJXp1IGFuZCAlenUgZG9uJ3QgdG91Y2gKAG1lcmdlX29uZXdheSBnbGl0Y2gKACVzIGRvbid0IGNoYW5nZSBhbnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgaW4gdGhpcyBkcmF3aW5nCgBOb2RlIG5vdCBhZGphY2VudCB0byBjZWxsIC0tIEFib3J0aW5nCgBpbmNvbXBhcmFibGUgc2VnbWVudHMgISEgLS0gQWJvcnRpbmcKAEFsdGVybmF0aXZlbHksIGNvbnNpZGVyIHJ1bm5pbmcgbmVhdG8gdXNpbmcgLUdwYWNrPXRydWUgb3IgZGVjb21wb3NpbmcKAGxhYmVsX3NjaGVtZSA9ICVkID4gNCA6IGlnbm9yaW5nCgBndnJlbmRlcl9zZXRfc3R5bGU6IHVuc3VwcG9ydGVkIHN0eWxlICVzIC0gaWdub3JpbmcKAEFycm93IHR5cGUgIiVzIiB1bmtub3duIC0gaWdub3JpbmcKAGZkcCBkb2VzIG5vdCBzdXBwb3J0IHN0YXJ0PXNlbGYgLSBpZ25vcmluZwoAJXMgYXR0cmlidXRlIHZhbHVlIG11c3QgYmUgMSBvciAyIC0gaWdub3JpbmcKAE1vcmUgdGhhbiAyIGNvbG9ycyBzcGVjaWZpZWQgZm9yIGEgZ3JhZGllbnQgLSBpZ25vcmluZyByZW1haW5pbmcKAGFzIHJlcXVpcmVkIGJ5IHRoZSAtbiBmbGFnCgBiYlslc10gJS41ZyAlLjVnICUuNWcgJS41ZwoAL3BhdGhib3ggewogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC9YIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQogfSBkZWYKL2RiZ3N0YXJ0IHsgZ3NhdmUgJS41ZyAlLjVnIHRyYW5zbGF0ZSB9IGRlZgovYXJyb3dsZW5ndGggMTAgZGVmCi9hcnJvd3dpZHRoIGFycm93bGVuZ3RoIDIgZGl2IGRlZgovYXJyb3doZWFkIHsKICAgIGdzYXZlCiAgICByb3RhdGUKICAgIGN1cnJlbnRwb2ludAogICAgbmV3cGF0aAogICAgbW92ZXRvCiAgICBhcnJvd2xlbmd0aCBhcnJvd3dpZHRoIDIgZGl2IHJsaW5ldG8KICAgIDAgYXJyb3d3aWR0aCBuZWcgcmxpbmV0bwogICAgY2xvc2VwYXRoIGZpbGwKICAgIGdyZXN0b3JlCn0gYmluZCBkZWYKL21ha2VhcnJvdyB7CiAgICBjdXJyZW50cG9pbnQgZXhjaCBwb3Agc3ViIGV4Y2ggY3VycmVudHBvaW50IHBvcCBzdWIgYXRhbgogICAgYXJyb3doZWFkCn0gYmluZCBkZWYKL3BvaW50IHsgICAgbmV3cGF0aCAgICAyIDAgMzYwIGFyYyBmaWxsfSBkZWYvbWFrZXZlYyB7CiAgICAvWSBleGNoIGRlZgogICAgL1ggZXhjaCBkZWYKICAgIC95IGV4Y2ggZGVmCiAgICAveCBleGNoIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIFkgbGluZXRvIHN0cm9rZQogICAgWCBZIG1vdmV0bwogICAgeCB5IG1ha2VhcnJvdwp9IGRlZgoAL3BhdGhib3ggewogICAgL1ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCBuZWcgJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgAlIVBTLUFkb2JlLTIuMAovbm9kZSB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBmaWxsCn0gZGVmCi9jZWxsIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAfSBiaW5kIGRlZgoALlBTICUuNWYgJS41ZgoAb3ZlcmxhcDogJXMgdmFsdWUgJWQgc2NhbGluZyAlLjA0ZgoAICBiZWF1dGlmeV9sZWF2ZXMgJWQgbm9kZSB3ZWlnaHRzICVkIHJvdGF0aW9uICUuMDNmCgAgIHJlcHVsc2l2ZSBleHBvbmVudDogJS4wM2YKACAgSyA6ICUuMDNmIEMgOiAlLjAzZgoAJXMgJS4zZgoACmludGVyc2VjdGlvbiBhdCAlLjNmICUuM2YKACAgICBzY2FsZSAlLjNmCgB0b3J1cyB7ICUuM2YsICUuM2YKACAgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4sICUuM2YKACBpbiAlcyAtIHNldHRpbmcgdG8gJS4wMmYKAGNpcmNsZSAlcyAlLjBmLCUuMGYsJS4wZgoAcmVjdCAlcyAlLjBmLCUuMGYgJS4wZiwlLjBmCgAlZCAlZCAlZCAlLjBmICVkICVkICVkICVkICVkICUuM2YgJWQgJS40ZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYKACAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmCgAlJSUlUGFnZTogMSAxCiUlJSVQYWdlQm91bmRpbmdCb3g6ICUuMGYgJS4wZiAlLjBmICUuMGYKAHBvc1slenVdICUuMGYgJS4wZgoALm5yIFNGICUuMGYKc2NhbGV0aGlja25lc3MgPSAlLjBmCgAlcyBzYXZlIHBvaW50IHNpemUgYW5kIGZvbnQKLm5yIC5TIFxuKC5zCi5uciBERiBcbiguZgoAc2hvd3BhZ2UKJSUlJVRyYWlsZXIKJSUlJUJvdW5kaW5nQm94OiAlLmYgJS5mICUuZiAlLmYKAGFkZGluZyAlenUgaXRlbXMsIHRvdGFsIGFyZWEgPSAlZiwgdyA9ICVmLCBhcmVhL3c9JWYKAGdhcD0lZiwlZgoAICBhc3BlY3QgJWYKAGEgJWYgYiAlZiBjICVmIGQgJWYgciAlZgoAbW9kZWwgJWQgc21hcnRfaW5pdCAlZCBzdHJlc3N3dCAlZCBpdGVyYXRpb25zICVkIHRvbCAlZgoAU29sdmluZyBtb2RlbCAlZCBpdGVyYXRpb25zICVkIHRvbCAlZgoAJXMgY29vcmQgJS41ZyAlLjVnIGh0ICVmIHdpZHRoICVmCgByZWMgJWYgJWYgJWYgJWYKACVzIDogJWYgJWYgJWYgJWYKACVzIDogJWYgJWYKAG1heHBzaHQgPSAlZgptYXhwc3dpZCA9ICVmCgBtZHNNb2RlbDogZGVsdGEgPSAlZgoAIHIxICVmIHIyICVmCgBQYWNraW5nOiBjb21wdXRlIGdyaWQgc2l6ZQoAZ3NhdmUKACUlRW5kQ29tbWVudHMKc2F2ZQoAVW5yZWNvZ25pemVkIGNoYXJhY3RlciAnJWMnICglZCkgaW4gc2lkZXMgYXR0cmlidXRlCgBJbWFnZXMgdW5zdXBwb3J0ZWQgaW4gImJhY2tncm91bmQiIGF0dHJpYnV0ZQoAJXMgR05VIHBpYyB2cy4gMTB0aCBFZGl0aW9uIGRcKGUndGVudGUKAHJlc2V0ICVzIHNldCB0byBrbm93biBzdGF0ZQoAJWcgJWcgc2V0X3NjYWxlICVkIHJvdGF0ZSAlZyAlZyB0cmFuc2xhdGUKACVmICVmIHRyYW5zbGF0ZQoAJWQgJWQgdHJhbnNsYXRlCgAvLyoqKiBlbGxpcHNlCgBVbnJlY29nbml6ZWQgb3ZlcmxhcCB2YWx1ZSAiJXMiIC0gdXNpbmcgZmFsc2UKAG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKACVzOiB2c25wcmludGYgZmFpbHVyZQoAZW5kcGFnZQpzaG93cGFnZQpncmVzdG9yZQoAZW5kCnJlc3RvcmUKAGxheW91dCB3YXMgbm90IGRvbmUKAExheW91dCB3YXMgbm90IGRvbmUKAC8vKioqIHBvbHlsaW5lCgB0cnlpbmcgdG8gZGVsZXRlIGEgbm9uLWxpbmUKACMgZW5kIG9mIEZJRyBmaWxlCgBTaW5nbGUKAHJlbmRlcmVyIGZvciAlcyBpcyB1bmF2YWlsYWJsZQoAZHluYW1pYyBsb2FkaW5nIG5vdCBhdmFpbGFibGUKACUuMGYgJS4wZiBsaW5ldG8gc3Ryb2tlCgBjbG9zZXBhdGggc3Ryb2tlCgAgZWxsaXBzZV9wYXRoIHN0cm9rZQoALy8qKiogYmVnaW5fZWRnZQoALy8qKiogZW5kX2VkZ2UKAGxvc3QgJXMgJXMgZWRnZQoAb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB2aXJ0dWFsIHdlaWdodCBvZiBlZGdlCgBhZGRfdHJlZV9lZGdlOiBtaXNzaW5nIHRyZWUgZWRnZQoAaW4gcm91dGVzcGxpbmVzLCBjYW5ub3QgZmluZCBOT1JNQUwgZWRnZQoAc2hvd3BhZ2UKACVkICVkICVkIGJlZ2lucGFnZQoALy8qKiogYmVnaW5fcGFnZQoALy8qKiogZW5kX3BhZ2UKAEZpbGVuYW1lICIlcyIgaXMgdW5zYWZlCgBsYWJlbDogYXJlYSB0b28gbGFyZ2UgZm9yIHJ0cmVlCgAvLyoqKiBlbmRfbm9kZQoAVXNpbmcgZGVmYXVsdCBjYWxjdWxhdGlvbiBmb3Igcm9vdCBub2RlCgBjb250YWluX25vZGVzIGNsdXN0ICVzIHJhbmsgJWQgbWlzc2luZyBub2RlCgAlZiAlZiAlZiAlZiBub2RlCgA8PCAvUGFnZVNpemUgWyVkICVkXSA+PiBzZXRwYWdlZGV2aWNlCgBpbiBjaGVja3BhdGgsIGJveCAlenUgaGFzIExMIGNvb3JkID4gVVIgY29vcmQKAGluIGNoZWNrcGF0aCwgYm94IDAgaGFzIExMIGNvb3JkID4gVVIgY29vcmQKAGNsdXN0ZXIgbmFtZWQgJXMgbm90IGZvdW5kCgBtaW5jcm9zczogcGFzcyAlZCBpdGVyICVkIHRyeWluZyAlZCBjdXJfY3Jvc3MgJWxsZCBiZXN0X2Nyb3NzICVsbGQKAG5vZGUgJXMsIHBvcnQgJXMgdW5yZWNvZ25pemVkCgAlcyVzIHVuc3VwcG9ydGVkCgBjbHVzdGVyIGN5Y2xlICVzIC0tICVzIG5vdCBzdXBwb3J0ZWQKACVzIC0+ICVzOiBzcGxpbmUgc2l6ZSA+IDEgbm90IHN1cHBvcnRlZAoAbGF5b3V0IGFib3J0ZWQKAHBhZ2VkaXI9JXMgaWdub3JlZAoAVHdvIGNsdXN0ZXJzIG5hbWVkICVzIC0gdGhlIHNlY29uZCB3aWxsIGJlIGlnbm9yZWQKAElsbGVnYWwgYXR0cmlidXRlICVzIGluICVzIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgYXR0cmlidXRlICJtb2RlbCIgaW4gZ3JhcGggJXMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGUiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAc3RhcnQ9MCBub3Qgc3VwcG9ydGVkIHdpdGggbW9kZT1zZWxmIC0gaWdub3JlZAoAT3ZlcmxhcCB2YWx1ZSAiJXMiIHVuc3VwcG9ydGVkIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgUk9XUyAtIGlnbm9yZWQKAFVua25vd24gdmFsdWUgJXMgZm9yIENPTFVNTlMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBWQUxJR04gLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJXMgZm9yIEZJWEVEU0laRSAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJS4qcyBmb3IgU1RZTEUgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBCQUxJR04gaW4gVEQgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiBpbiBURCAtIGlnbm9yZWQKAFJPV1NQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBDT0xTUEFOIHZhbHVlIGNhbm5vdCBiZSAwIC0gaWdub3JlZAoAbm9kZSAlcywgcG9ydCAlcywgdW5yZWNvZ25pemVkIGNvbXBhc3MgcG9pbnQgJyVzJyAtIGlnbm9yZWQKAFVua25vd24gInNwbGluZXMiIHZhbHVlOiAiJXMiIC0gaWdub3JlZAoAaW4gcm91dGVzcGxpbmVzLCBQc2hvcnRlc3RwYXRoIGZhaWxlZAoAaW4gcm91dGVzcGxpbmVzLCBQcm91dGVzcGxpbmUgZmFpbGVkCgAjIHBsdWdpbiBsb2FkaW5nIG9mIGRlcGVuZGVuY3kgIiUuKnMiIGZhaWxlZAoAUGFyc2luZyBvZiAiJXMiIGZhaWxlZAoAJXM6JWQ6IGNsYWltZWQgdW5yZWFjaGFibGUgY29kZSB3YXMgcmVhY2hlZAoAIyB1bnN1Y2Nlc3NmdWwgcGx1Z2luIGxvYWQKACUuNWcgJS41ZyB0cmFuc2xhdGUgbmV3cGF0aCB1c2VyX3NoYXBlXyVkCgBuc2l6ZXNjYWxlPSVmLGl0ZXJhdGlvbnM9JWQKAGN0cmwtPm92ZXJsYXA9JWQKACVzICV6dSBub2RlcyAlenUgZWRnZXMgbWF4aXRlcj0lZCBiYWxhbmNlPSVkCgAvLyoqKiBiZWdpbl9sYXllcjogJXMsICVkLyVkCgBkZWdlbmVyYXRlIGNvbmNlbnRyYXRlZCByYW5rICVzLCVkCgAgIG1heCBsZXZlbHMgJWQKAAklcyAlZAoAICBCYXJuZXMtSHV0dCBjb25zdGFudCAlLjAzZiB0b2xlcmFuY2UgICUuMDNmIG1heGl0ZXIgJWQKAGd2d3JpdGVfbm9feiBwcm9ibGVtICVkCgAgIHF1YWR0cmVlIHNpemUgJWQgbWF4X2xldmVsICVkCgByZWJ1aWxkX3ZsaXN0czogbGVhZCBpcyBudWxsIGZvciByYW5rICVkCgByZWJ1aWxkX3ZsaXN0czogcmFuayBsZWFkICVzIG5vdCBpbiBvcmRlciAlZCBvZiByYW5rICVkCgAgIHNtb290aGluZyAlcyBvdmVybGFwICVkIGluaXRpYWxfc2NhbGluZyAlLjAzZiBkb19zaHJpbmtpbmcgJWQKACAgY29vbGluZyAlLjAzZiBzdGVwIHNpemUgICUuMDNmIGFkYXB0aXZlICVkCgBVbnN1cHBvcnRlZCBjaGFyc2V0IHZhbHVlICVkCgBpbiByb3V0ZXNwbGluZXMsIGlsbGVnYWwgdmFsdWVzIG9mIHByZXYgJWQgYW5kIG5leHQgJWQsIGxpbmUgJWQKACAgZWRnZV9sYWJlbGluZ19zY2hlbWUgJWQKAGFnZGljdG9mOiB1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bCBpcyAwLjMgaW4gMTB0aCBFZGl0aW9uIChmaWxsIDAgbWVhbnMgYmxhY2spLCAwLjUgaW4gZ3BpYyAoZmlsbCAwIG1lYW5zIHdoaXRlKSwgdW5kZWZpbmVkIGluIERXQiAyCgAlcyByZXNldCB3b3JrcyBpbiBncGljIGFuZCAxMHRoIGVkaXRpb24sIGJ1dCBpc24ndCBkZWZpbmVkIGluIERXQiAyCgBzZXR1cExhdGluMQoAXDAwMQoAJXMgICAgICAgIHRvbGVyYW5jZSAwLjAxCgAgICAgdG9sZXJhbmNlIDAuMQoAJSVQYWdlczogMQoAICAgICAgICBkaWZmdXNlQ29sb3IgMSAxIDEKADEwMC4wMAoAIEVQU0YtMy4wCgAlcyBib3hyYWQgaXMgbm93IDAuMCBpbiBncGljLCBlbHNlIGl0IHJlbWFpbnMgMi4wCgBzcGhlcmUgezwlOS4zZiwgJTkuM2YsICU5LjNmPiwgMS4wCgBXYXJuaW5nOiBubyB2YWx1ZSBmb3Igd2lkdGggb2YgQVNDSUkgY2hhcmFjdGVyICV1LiBGYWxsaW5nIGJhY2sgdG8gMAoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiAlcyAlcyByYW5rICVkIGkgPSAlZCBhbiA9IDAKAGNvbmNlbnRyYXRlPXRydWUgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4KAE5vIGxpYnogc3VwcG9ydC4KAHR3b3BpOiB1c2Ugb2Ygd2VpZ2h0PTAgY3JlYXRlcyBkaXNjb25uZWN0ZWQgY29tcG9uZW50LgoAdGhlIGdyYXBoIGludG8gY29ubmVjdGVkIGNvbXBvbmVudHMuCgBPcnRob2dvbmFsIGVkZ2VzIGRvIG5vdCBjdXJyZW50bHkgaGFuZGxlIGVkZ2UgbGFiZWxzLiBUcnkgdXNpbmcgeGxhYmVscy4KAG1pbmNyb3NzICVzOiAlbGxkIGNyb3NzaW5ncywgJS4yZiBzZWNzLgoAJXMgaXMgbm90IGEga25vd24gY29sb3IuCgBpcyBpbmFwcHJvcHJpYXRlLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBpcyB1bmRlZmluZWQuIFJldmVydGluZyB0byB0aGUgc2hvcnRlc3QgcGF0aCBtb2RlbC4KAFVuYWJsZSB0byByZWNsYWltIGJveCBzcGFjZSBpbiBzcGxpbmUgcm91dGluZyBmb3IgZWRnZSAiJXMiIC0+ICIlcyIuIFNvbWV0aGluZyBpcyBwcm9iYWJseSBzZXJpb3VzbHkgd3JvbmcuCgBFcnJvciBkdXJpbmcgY29udmVyc2lvbiB0byAiVVRGLTgiLiBRdWl0aW5nLgoAb3JkZXJpbmcgJyVzJyBub3QgcmVjb2duaXplZC4KAGdyYWRpZW50IHBlbiBjb2xvcnMgbm90IHlldCBzdXBwb3J0ZWQuCgAgIGluaXRDTWFqVlBTQyBkb25lOiAlZCBnbG9iYWwgY29uc3RyYWludHMgZ2VuZXJhdGVkLgoAVGhlIGNoYXJhY3RlciAnJWMnIGFwcGVhcnMgaW4gYm90aCB0aGUgbGF5ZXJzZXAgYW5kIGxheWVybGlzdHNlcCBhdHRyaWJ1dGVzIC0gbGF5ZXJsaXN0c2VwIGlnbm9yZWQuCgB0aGUgYXNwZWN0IGF0dHJpYnV0ZSBoYXMgYmVlbiBkaXNhYmxlZCBkdWUgdG8gaW1wbGVtZW50YXRpb24gZmxhd3MgLSBhdHRyaWJ1dGUgaWdub3JlZC4KAFRoZSBsYXllcnNlbGVjdCBhdHRyaWJ1dGUgIiVzIiBkb2VzIG5vdCBtYXRjaCBhbnkgbGF5ZXIgc3BlY2lmZWQgYnkgdGhlIGxheWVycyBhdHRyaWJ1dGUgLSBpZ25vcmVkLgoAZWRnZSAlcyAtPiAlcyA6IHNldCBtb3JlIHRoYW4gb25lIHNwbGluZS4gRmlyc3QgdXNlZCwgb3RoZXIgZHJvcHBlZC4KACV6dSBvdXQgb2YgJXp1IGxhYmVscyBwb3NpdGlvbmVkLgoAJXp1IG91dCBvZiAlenUgZXh0ZXJpb3IgbGFiZWxzIHBvc2l0aW9uZWQuCgAgIGdlbmVyYXRlIGVkZ2UgY29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgTm9uLW92ZXJsYXAgQ29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgRWRnZSBDb25zdHJhaW50cy4uLgoAR2VuZXJhdGluZyBEaUctQ29MYSBFZGdlIENvbnN0cmFpbnRzLi4uCgBSZW1vdmluZyBvdmVybGFwcyBhcyBwb3N0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ZWUgZG90KDEpKQoAZXJyb3IgaW4gY29sb3J4bGF0ZSgpCgB0cnVuY2F0aW5nIHN0eWxlICclcycKAElsbGVnYWwgdmFsdWUgaW4gIiVzIiBjb2xvciBhdHRyaWJ1dGU7IGZsb2F0IGV4cGVjdGVkIGFmdGVyICc7JwoAZGVmaW5lIGF0dHJzMCAlJSAlJTsgZGVmaW5lIHVuZmlsbGVkICUlICUlOyBkZWZpbmUgcm91bmRlZCAlJSAlJTsgZGVmaW5lIGRpYWdvbmFscyAlJSAlJQoAPHN2ZyB3aWR0aD0iJWRwdCIgaGVpZ2h0PSIlZHB0IgoAIyBkZXBlbmRlbmNpZXMgIiUuKnMiIGRpZCBub3QgbWF0Y2ggIiUuKnMiCgAjIHR5cGUgIiUuKnMiIGRpZCBub3QgbWF0Y2ggIiUuKnMiCgAkYyBjcmVhdGUgaW1hZ2UgJS4yZiAlLjJmIC1pbWFnZSAicGhvdG9fJXMiCgBObyBvciBpbXByb3BlciBpbWFnZSBmaWxlPSIlcyIKAGZpbGUgbG9hZGluZyBpcyBkaXNhYmxlZCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBjb250YWlucyBTRVJWRVJfTkFNRT0iJXMiCgBDb3VsZCBub3QgcGFyc2UgeGRvdCAiJXMiCgBObyBsb2FkaW1hZ2UgcGx1Z2luIGZvciAiJXMiCgAgWyV6dV0gKCUuMDJmLCUuMDJmKSAoJS4wMmYsJS4wMmYpICVwICIlcyIKAGZvbnRuYW1lOiB1bmFibGUgdG8gcmVzb2x2ZSAiJXMiCgBEdXBsaWNhdGUgY2x1c3RlciBuYW1lICIlcyIKAHVucmVjb2duaXplZCBhcGkgbmFtZSAiJXMiCgBpbWFnZSBjcmVhdGUgcGhvdG8gInBob3RvXyVzIiAtZmlsZSAiJXMiCgBObyBvciBpbXByb3BlciBzaGFwZWZpbGU9IiVzIiBmb3Igbm9kZSAiJXMiCgBObyBvciBpbXByb3BlciBpbWFnZT0iJXMiIGZvciBub2RlICIlcyIKAG5vZGUgIiVzIiBpcyBjb250YWluZWQgaW4gdHdvIG5vbi1jb21wYXJhYmxlIGNsdXN0ZXJzICIlcyIgYW5kICIlcyIKAEVycm9yOiBub2RlICIlcyIgYmVsb25ncyB0byB0d28gbm9uLW5lc3RlZCBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgAgICIlcyIKACNpbmNsdWRlICJjb2xvcnMuaW5jIgojaW5jbHVkZSAidGV4dHVyZXMuaW5jIgojaW5jbHVkZSAic2hhcGVzLmluYyIKAFVua25vd24gSFRNTCBlbGVtZW50IDwlcz4gb24gbGluZSAlbHUgCgAlcyBpbiBsaW5lICVsdSAKAHNjYWxlIGJ5ICVnLCVnIAoAY29tcHJlc3MgJWcgCgBMYXlvdXQgd2FzIG5vdCBkb25lLiAgTWlzc2luZyBsYXlvdXQgcGx1Z2lucz8gCgCJUE5HDQoaCgAlJSFQUy1BZG9iZS0yLjAKJSUlJUJvdW5kaW5nQm94OiAoYXRlbmQpCi9wb2ludCB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIG5ld3BhdGgKICBYIFkgMyAwIDM2MCBhcmMgZmlsbAp9IGRlZgovY2VsbCB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBzdHJva2UKfSBkZWYKL25vZGUgewogL3UgZXhjaCBkZWYKIC9yIGV4Y2ggZGVmCiAvZCBleGNoIGRlZgogL2wgZXhjaCBkZWYKIG5ld3BhdGggbCBkIG1vdmV0bwogciBkIGxpbmV0byByIHUgbGluZXRvIGwgdSBsaW5ldG8KIGNsb3NlcGF0aCBmaWxsCn0gZGVmCgoACQBBoYAFC7YDAQEBAQEBAQECAwEBAgEBAQEBAQEBAQEBAQEBAQEBAQIBBAUBAQEBAQEGAQEHCAkKCgoKCgoKCgoKAQELAQwBDQ4PEBESExQVFhMTExMXGBkTGhscHRMTExMTAR4BARMBHyAhIiMTJCUmExMTEycoKRMqKywtExMTExMBAQEBARMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTLhMTEy8TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEzATExMTExMTExMTExMTExMTAAAAAAAABAAEABwAHAAhACEAJAAiAAoAAgAWAAkAIgAiACIAFQAdAAEAFAAUABQAFAAUABQAFAAIAAQABQAcABsAFwAcACEAIAAfAB4ACQATAAAAFQASABUAAwAHABUAFQAUABQAFAAUABQAFAAUABQACAAEAAUABQAGABwAGgAYABkAIQAHABUAFAAUABQAFAAUABQACwAUAA0AFAAMABQAFAAUAA4AFAAUABQAEAAUAA8AFAARAEHigwULlQQBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAQABwADAAQABQAFAAYABgAIAAcABwARABYAEgARABIACAAIAA8ADwAXAA8AGAAPABkAGgAaAB4AFgA0AB4ABQAyAAYAIgAiADMAFwAYADUAGQAaABoAKgA2ACoANAA3ADIARQA7ADwAMwA7ADwARgA1AEcASABMADYAIgBJAEoANwBFAE4AUABiAFEAUgBUAEYARwBVAEgATABWAEkASgBYAFoATgBEAFAAUQBSAFQAOAAvACwAVQApAFYAGwAQAFgAWgBdAF0AXQBdAF0AXQBdAF4AXgBeAF4AXgBeAF4AXwBfAF8AXwBfAF8AXwBgAAkAYABgAGAAYABgAGEAYQBjAAIAYwBjAGMAYwBjAGQAAABkAAAAZABkAGQAZQAAAGUAZQBlAGUAZQBmAAAAAABmAGYAZgBmAGcAAABnAGcAZwBnAGgAAABoAGgAaABoAGgAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABBhIgFC80BrgAuAC8AMwA1ADAANwCqANsA2wDbANsAAAA9AIcANwA3ANsA2wAAACgANQAuADIALwBiAAAAAABHAAAA2wDbAFEAAADbANsA2wAAANsAhABVANsAggDbAAAAgQDbAAAAPgBCAEEASABEAFIAWwAAAAAAXgBfANsAAADbANsA2wAAAAAAewBJAFcAUgBaAFoAXQAAAF8AAABfAAAAZQBdAF8AAABdAG4AagAAAGkAAABuAAAA2wCTAJoAoQCoAKsAcACxALgAvwDGAM0A0wBB4okFC88BXAABAF0AXQBeAF4AXwBfAFwAXABcAFwAXABgAFwAXABcAGEAXABcAGIAYgBiAGIAYgBiAGIAYwBkAGUAZgBcAFwAXABnAFwAXABcAGAAXABcAGEAXABhAFwAaABhAFwAYgBiAGIAYgBiAGIAYgBiAGMAZABlAGUAXABmAFwAXABcAGcAaABhAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgAAAFwAXABcAFwAXABcAFwAXABcAFwAXABcAEHBiwULMAEBAgMBBAEFAQYHBwEGBgYGBgYGBgYGBgYGBgYGAwYGBgYGBgYGBgYGBgYGBgYGBgBBgowFC6MECgALAAwADQAOAAoADwAQABEAEgATAAoAFAAVABUAFQAWABcAFQAYABUAFQAZABUAFQAVABoAFQAVAAoAFQAVABUAFgAXABgAFQAVABkAFQAVABUAGgAVABUAFQAVABsADAAMACQAHgAeACAAIQAgACEAJAAlACYALQAyAC8ALgAqACUAJgAoACkAMwAqADQAKwA1ADYANwA8ADIARwA9ACIARQAiAD8AQABGADMANABIADUANgA3AC8ASQAqAEcASgBFAEwAXAA8AEYAXAA9AE0ASABOAE8AUgBJAEEAUABRAEoATABTAFQAMQBVAFYAVwBNAE4AWABPAFIAWQBQAFEAWgBbAFMARABUAFUAVgBXAEsARAAsAFgALABZADgALABaAFsAHQAdAB0AHQAdAB0AHQAfAB8AHwAfAB8AHwAfACMAIwAjACMAIwAjACMAJwBcACcAJwAnACcAJwAwADAAOQAcADkAOQA5ADkAOQA6AFwAOgBcADoAOgA6ADsAXAA7ADsAOwA7ADsAPgBcAFwAPgA+AD4APgBCAFwAQgBCAEIAQgBDAFwAQwBDAEMAQwBDAAkAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwADAAAAA0AAAAOAAAADgBBsJAFC9EFEe7u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APX//wBPqgAAgf/uAOXu/wBmnAAAgf/NAMXN/wC1jwAAgf+LAIaL/wBSEQAA1HPu7oLu/wCzVAAA49fQ0CCQ/wBXuQAA68H//z6W/wDeqgAA68Du7jqM/wD1nAAA68DNzTJ4/wBLkAAA68CLiyJS/wC2CAAAAACAgICA/wAhNAAAVf+AAIAA/wDrBwAAAACAgICA/wCuMAAAAP+AgAAA/wDeTAAA1P+AgACA/wD5EgAAG0T19d6z/wDvtgAAG0X//+e6/wCjqAAAG0Tu7tiu/wDHmgAAG0TNzbqW/wAbjgAAG0OLi35m/wDDSAAAAAD//////wAlTgAAAAD19fX1/wC+CAAAAAC+vr6+/wBxNAAAVf//AP8A/wDzBwAAAAC+vr6+/wC4MAAA77mwsDBg/wATTQAAxN3woCDw/wCsCgAAKv////8A/wDUtgAAKv////8A/wCEqAAAKv/u7u4A/wC1mgAAKv/Nzc0A/wAJjgAAKv+Li4sA/wBdMwAAOMDNms0y/wBB4IIHCwM0dwIAQe6CBwuFCKBA/////////////////////////////////////////////////////////////////////////////////////wACqgJEAwAEAASqBjkGcQGqAqoCAASDBAACqgIAAjkCAAQABAAEAAQABAAEAAQABAAEAAQ5AjkCgwSDBIMEjQNeB8cFVgVWBccF4wRzBMcFxwWqAh0DxwXjBB0HxwXHBXMExwVWBXME4wTHBccFjQfHBccF4wSqAjkCqgLBAwAEqgKNAwAEjQMABI0DqgIABAAEOQI5AgAEOQI5BgAEAAQABAAEqgIdAzkCAAQABMcFAAQABI0D1wOaAdcDVAT///////////////////////////////////////////////////////////////////////////////////////8AAqoCcQQABAAEAAiqBjkCqgKqAgAEjwQAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEqgKqAo8EjwSPBAAEcQfHBVYFxwXHBVYF4wQ5BjkGHQMABDkGVgWNB8cFOQbjBDkGxwVzBFYFxwXHBQAIxwXHBVYFqgI5AqoCpgQABKoCAARzBI0DcwSNA6oCAARzBDkCqgJzBDkCqgZzBAAEcwRzBI0DHQOqAnMEAATHBQAEAASNAycDwwEnAykE////////////////////////////////////////////////////////////////////////////////////////AAKqAlwDAAQABKoGOQa2AaoCqgIABGYFAAKqAgACOQIABAAEAAQABAAEAAQABAAEAAQABKoCqgJmBWYFZgUABFwH4wTjBFYFxwXjBOMExwXHBaoCjQNWBXMEqgZWBccF4wTHBeMEAARzBMcF4wSqBuMEcwRzBB0DOQIdA2ADAASqAgAEAASNAwAEjQM5AgAEAAQ5AjkCjQM5AscFAAQABAAEAAQdAx0DOQIABI0DVgWNA40DHQMzAzMCMwNUBP///////////////////////////////////////////////////////////////////////////////////////wACHQNxBAAEAASqBjkGOQKqAqoCAASPBAACqgIAAjkCAAQABAAEAAQABAAEAAQABAAEAASqAqoCjwSPBI8EAASoBlYFVgVWBccFVgVWBccFOQYdAwAEVgXjBB0HxwXHBeMExwVWBXME4wTHBVYFHQdWBeME4wSqAjkCqgKPBAAEqgIABAAEjQMABI0DqgIABHMEOQI5AgAEOQI5BnMEAAQABAAEHQMdAzkCcwSNA1YFAASNAx0DyQLDAckCjwT//1x3AgBB/ooHC4UIoED/////////////////////////////////////////////////////////////////////////////////////OQI5AtcCcwRzBB0HVgWHAaoCqgIdA6wEOQKqAjkCOQJzBHMEcwRzBHMEcwRzBHMEcwRzBDkCOQKsBKwErARzBB8IVgVWBccFxwVWBeMEOQbHBTkCAARWBXMEqgbHBTkGVgU5BscFVgXjBMcFVgWNB1YFVgXjBDkCOQI5AsEDcwSqAnMEcwQABHMEcwQ5AnMEcwTHAccBAATHAaoGcwRzBHMEcwSqAgAEOQJzBAAExwUABAAEAASsAhQCrAKsBP///////////////////////////////////////////////////////////////////////////////////////zkCqgLLA3MEcwQdB8cF5wGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwSqAqoCrASsBKwE4wTNB8cFxwXHBccFVgXjBDkGxwU5AnMExwXjBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wSqAjkCqgKsBHMEqgJzBOMEcwTjBHMEqgLjBOMEOQI5AnMEOQIdB+ME4wTjBOMEHQNzBKoC4wRzBDkGcwRzBAAEHQM9Ah0DrAT///////////////////////////////////////////////////////////////////////////////////////85AjkC1wJzBHMEHQdWBYcBqgKqAh0DrAQ5AqoCOQI5AnMEcwRzBHMEcwRzBHMEcwRzBHMEOQI5AqwErASsBHMEHwhWBVYFxwXHBVYF4wQ5BscFOQIABFYFcwSqBscFOQZWBTkGxwVWBeMExwVWBY0HVgVWBeMEOQI5AjkCwQNzBKoCcwRzBAAEcwRzBDkCcwRzBMcBxwEABMcBqgZzBHMEcwRzBKoCAAQ5AnMEAATHBQAEAAQABKwCFAKsAqwE////////////////////////////////////////////////////////////////////////////////////////OQKqAssDcwRzBB0HxwXnAaoCqgIdA6wEOQKqAjkCOQJzBHMEcwRzBHMEcwRzBHMEcwRzBKoCqgKsBKwErATjBM0HxwXHBccFxwVWBeMEOQbHBTkCcwTHBeMEqgbHBTkGVgU5BscFVgXjBMcFVgWNB1YFVgXjBKoCOQKqAqwEcwSqAnME4wRzBOMEcwSqAuME4wQ5AjkCcwQ5Ah0H4wTjBOME4wQdA3MEqgLjBHMEOQZzBHMEAAQdAz0CHQOsBP//kHcCAEGOkwcLhQigQP/////////////////////////////////////////////////////////////////////////////////////NBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0E////////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP///////////////////////////////////////////////////////////////////////////////////////80EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQT////////////////////////////////////////////////////////////////////////////////////////NBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0E//+4dwIAQZ2bBwuGCECPQAAA////////////////////////////////AgH///////////////////////////////////////////////8CAeQAiAFYAlgCogO1At0APQE9AcIBWALkAKgB5AAbAVgCWAJYAlgCWAJYAlgCWAJYAlgC5ADkAFgCWAJYArsBsgPZAqQCoQLmAkcCJALWAvkCAQFEAXECHwJXA+QC/wJ5Av8CnQJnAloC2AKxAk0EigJUAk0COwEbATsBWAL0AfQBEgJHAs8BRwIUAk0BSgI4AugA7AD0ASgBWAM4AiwCRwJHAmYB4QFeATECAwJJAw0CAgLPAWABCQFgAVgC//8AAP///////////////////////////////w8B////////////////////////////////////////////////DwH4AMABWAJYArED1gLzAGYBZgHFAVgC+ACyAfgAOQFYAlgCWAJYAlgCWAJYAlgCWAJYAvgA+ABYAlgCWALLAbYD6AKwAqgC+gJVAjIC4AIFAxoBYgGZAjICZAPsAhEDjAIRA64CdwJtAuICyQJZBKACagJdAmIBOQFiAVgC9AH0ASMCWALYAVgCHgJsAVwCSQL/AAMBGAI/AW0DSQJAAlgCWAKIAegBgAFDAg8CVQMiAg4C2gGHASABhwFYAv//AAD///////////////////////////////8CAf///////////////////////////////////////////////wIB5ACIAVgCWAKiA7UC3QA9AT0BwgFYAuQAqAHkABsBWAJYAlgCWAJYAlgCWAJYAlgCWALkAOQAWAJYAlgCuwGyA9kCpAKhAuYCRwIkAtYC+QIBAUQBcQIfAlgD4wL/AnkC/wKdAmcCWgLYArACTQSKAlQCTQI7ARsBOwFYAvQB9AESAkcCzwFHAhQCTQFKAjgC6ADsAPQBKAFYAzgCLAJHAkcCZgHhAV4BMQIDAkkDDQICAs8BYAEJAWABWAL//wAA////////////////////////////////DwH///////////////////////////////////////////////8PAfgAwAFYAlgCsQPWAvMAZgFmAcUBWAL4ALIB+AA5AVgCWAJYAlgCWAJYAlgCWAJYAlgC+AD4AFgCWAJYAssBtgPoArACqAL6AlUCMgLgAgUDGgFiAZgCMgJlA+sCEQOMAhEDrgJ3Am0C4gLJAlkEoAJqAl0CYgE5AWIBWAL0AfQBIwJYAtgBWAIeAmwBXAJJAv8AAwEYAj8BbQNJAkACWAJYAogB6AGAAUMCDwJVAyICDgLaAYcBIAGHAVgC///AdwIAQa6jBwuFCKBA/////////////////////////////////////////////////////////////////////////////////////4sCNQOuA7QGFwWaBz0GMwIfAx8DAAS0BosC4wKLArICFwUXBRcFFwUXBRcFFwUXBRcFFwWyArICtAa0BrQGPwQACHkFfQWWBSkGDgWaBDMGBAZcAlwCPwV1BOcG/AVMBtMETAaPBRQF4wTbBXkF6Qd7BeMEewUfA7ICHwO0BgAEAATnBBQFZgQUBewE0QIUBRIFOQI5AqIEOQLLBxIF5QQUBRQFSgMrBCMDEgW8BIsGvAS8BDMEFwWyAhcFtAb////////////////////////////////////////////////////////////////////////////////////////JAqYDKwS0BpEFBAj6BnMCqAOoAy8EtAYKA1IDCgPsApEFkQWRBZEFkQWRBZEFkQWRBZEFMwMzA7QGtAa0BqQEAAgxBhkG3wWkBncFdwWRBrIG+gL6AjMGGQX2B7IGzQbdBc0GKQbDBXUFfwYxBtMIKwbLBc0FqAPsAqgDtAYABAAEZgW6Bb4EugVtBXsDugWyBb4CvgJSBb4CVgiyBX8FugW6BfIDwwTTA7IFNwVkBykFNwWoBLIF7AKyBbQG////////////////////////////////////////////////////////////////////////////////////////iwI1A64DtAYXBZoHPQYzAh8DHwMABLQGiwLjAosCsgIXBRcFFwUXBRcFFwUXBRcFFwUXBbICsgK0BrQGtAY/BAAIeQV9BZYFKQYOBZoEMwYEBlwCXAI/BXUE5wb8BUwG0wRMBo8FFAXjBNsFeQXpB3sF4wR7BR8DsgIfA7QGAAQABOcEFAVmBBQF7ATRAhQFEgU5AjkCogQ5AssHEgXlBBQFFAVKAysEIwMSBbwEiwa8BLwEMwQXBbICFwW0Bv///////////////////////////////////////////////////////////////////////////////////////8kCpgMrBJEFkQUECPoGcwKoA6gDLwS0BgoDUgMKA+wCkQWRBZEFkQWRBZEFkQWRBZEFkQUzAzMDtAa0BrQGpAQACDEGGQbfBaQGdwV3BZEGsgb6AvoCMwYZBfYHsgbNBt0FzQYpBsMFdQV/BjEG0wgrBssFzQWoA+wCqAO0BgAEAARmBboFvgS6BW0FewO6BbIFvgK+AlIFvgJWCLIFfwW6BboF8gPDBNMDsgU3BWQHKQU3BagEsgXsArIFtAb//8h3AgBBvqsHC4UIoEBmBP///////////////////////////////wAA////////////////////////////////////////////////ZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBP//ZgT///////////////////////////////8AAP///////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT//2YE////////////////////////////////AAD///////////////////////////////////////////////9mBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYE////////////////////////////////////////////////////////////////////////////////////////ZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBP//1HcCAEHOswcLhQigQP////////////////////////////////////////////////////////////////////////////////////9pAvACmQIyBDIEzQSmBUcB8ALwAvACMgTwAvAC8AIyBDIEMgQyBDIEMgQyBDIEMgQyBDIE8ALwAjIEMgQyBPACKga4BIcEyQToBEkEMwRpBTwFOgLQA5sEDQStBRsFZAV2BGgFqATZA6UEMAWzBNEGdASQBGcE8ALYAvACMgQyBDIENAR1BPYDdQRdBPUCBARfBEgC7wIJBFwCpAZfBEsEdQR1BBwDPQMsA18E6wP0BQIE8gPMA/ACMgTwAjIE////////////////////////////////////////////////////////////////////////////////////////aQLwAu8CsASwBHkFpgXWAfAC8AJ1A7AE8ALwAvACHwOwBLAEsASwBLAEsASwBLAEsASwBPAC8AKwBLAEsASBAyoGEQXDBOUEJAWNBKsEXwV4BToCQwTwBGwE9gVXBaAFsgSsBeMEFwTlBGwF+QQSB84E6AR7BDcD2AI3A7AEsASwBEMEpwQYBKUEmQT1AgQEvgRjAu8CYgRcAuAGuQSHBKkErARrA3IDLAO6BDgERQZrBEUEOgR4A7AEeAOwBP///////////////////////////////////////////////////////////////////////////////////////2kC8AKZAjIE2QPNBKYFRwHwAvAC8AIyBPAC8ALwAjIEMgQyBDIEMgQyBDIEMgQyBDIEMgTwAvACMgQyBDIE8AIqBuMEhwTJBOgESQQzBGkFPAU6AtADmwQNBBcGGwVkBVkEZAWoBNkDpQQwBbME0QZ0BJAEZwTwAtgC8AIyBDIEMgQ0BHUErgN1BEwENgMEBHUEdALvAgkEkAKkBl8ESwR1BHUEVQM9A1wDdATrA/QFAgTyA8wD8AIyBPACMgT///////////////////////////////////////////////////////////////////////////////////////9pAvACIAOwBLAE3AWmBWkC8ALwAnUDsATwAvAC8AItA7AEsASwBLAEsASwBLAEsASwBLAE8ALwArAEsASwBC0DKgbpBLgE5wQPBb8ErwRpBW0FOgL9AzMFOgRKBkgFngWrBCgG/QQDBHsFSwV3BWkHQQV4BeQE4gPSA+IDsASwBLAEvgS/BPEDvwRqBEgDSAR/BJ0CGgNRBI8CpAZ/BI8EygTKBJMDrAOBA3UEawQwBpsEgwRDBOIDsATiA7AE///gdwIAQd67BwuFCKBA/////////////////////////////////////////////////////////////////////////////////////9ACJgOsA4wGFgWcCNAFJgKiA6IDFgWMBukCogPpAqIDFgUWBRYFFgUWBRYFFgUWBRYFFgWiA6IDjAaMBowGXQQACHgFfAWWBSoGDwWZBDQGAwZeA6MDiwV0BL4G/AVMBtMETAaQBXgF7gTbBXgF6Qd7BewEewWiA6IDogOMBhYFFgXOBPwEKwT8BMQE0AL8BBAFMgLBArwEMgLIBxAF2wT8BPwEagMrBCcDEAW8BIwGvAS8BDQEFAWiAxQFjAb///////////////////////////////////////////////////////////////////////////////////////+8AjgDswTwBrAFLQrmBqgCWQRZBLAF8AbkAtcD5AKEBbAFsAWwBbAFsAWwBbAFsAWwBbAFOAM4A/AG8AbwBu8Etgc2BhgGygWkBncFNAV9BrMGXgRxBCsGGQWVB8YGzQbdBc0GQgavBXQFfwYcBgcJHAblBYkFWQSEBVkE8AawBbAFWAWYBbUEmAVQBWEDmAWzBbwCOQNeBbwCdwizBX4FmAWYBfoDvwSlA7MFMwXWB1oFNQXGBLAFWQSwBfAG////////////////////////////////////////////////////////////////////////////////////////0AImA6wDjAYWBZwI0AUmAqIDogMWBYwG6QKiA+kCogMWBRYFFgUWBRYFFgUWBRYFFgUWBaIDogOMBowGjAZdBAAIdgV8BZYFIAYPBZkENAYDBl4DowOLBXQEvgb8BUwG0wRMBpAFeAXuBNsFdgXsB3sF7AR7BaIDogOiA4wGFgUWBc4E/AQrBPwExATQAvkEEAUyAsECsgQyAskHEAXbBPwE/ARqAysEJwMQBboEjAa8BLoENAQUBaIDFAWMBv///////////////////////////////////////////////////////////////////////////////////////7wCOAOzBPAGsAUtCuYGqAJZBFkEsAXwBuQC1wPkAoQFsAWwBbAFsAWwBbAFsAWwBbAFsAU4AzgD8AbwBvAG7wS2BzYGGAbKBaQGdwU0BX0GswZeBHEEKwYZBZUHxgbNBt0FzQZCBq8FdAV/BhwGBwkcBuUFiQVZBIQFWQTwBrAFsAVYBZgFtQSYBVAFYQOYBbMFvAI5A14FvAJ3CLMFfAWYBZgF+gO/BKUDswUxBdYHWgU1BcYEsAVZBLAF8Ab//+h3AgBB7sMHC4UIoED/////////////////////////////////////////////////////////////////////////////////////FAIjAjUDKwWTBJYG1wXFAV4CXgJqBJME9gGTAiEC8AKTBJMEkwSTBJMEkwSTBJMEkwSTBCECIQKTBJMEkwRvAzEHEAUvBQwF1QVzBCEE0wXnBTsCIwLpBCcEOQcIBjsG0QQ7BvIEZARtBNMFwwRoB54EewSRBKIC8AKiAlYElgOeBHME5wTPA+cEfQS2AmIE6QQGAgYCMwQGAnEH6QTVBOcE5wREA9ED0wLpBAIEOQYxBAgEvgMIA2gECAOTBP///////////////////////////////////////////////////////////////////////////////////////xQCSgLHAysFkQQ1BwAGIQK2ArYCXASRBFICkwJIAk4DkQSRBJEEkQSRBJEEkQSRBJEEkQRIAlICkQSRBJEE0QMtB4UFYAUZBewFewRkBMsFHwamAqYCUAWFBIsHgQZeBgYFXgZIBWgEogQMBjMFvAdWBf4EogSmAk4DpgJCBEoD2wTVBBAFHQQQBboEGQOFBEIFcQJxAvYEcQLbB0IF9AQQBRAFogP6A3kDQgWNBNkGoASNBOcDJwNoBCcDkQT///////////////////////////////////////////////////////////////////////////////////////8UAhICFwMrBWgEWAZcBbwBSAJIAmoEaATsAX8CBgLNAmgEaARoBGgEaARoBGgEaARoBGgEBgIGAmgEaARoBGoDxwZxBMkErgRUBRcExwNqBW0FLwIjAnUEywOyBp4FwwWHBMMFjQQEBPwDaAViBNEGJwQGBD8ESgLNAkoCIwQnA28EhQSeBJoDngTyA4ECAgSeBAgCCALnAwgC+gaeBH0EngSeBCsDbQOYAp4EsgO8BdMDsgONA8sCaATLAmgE////////////////////////////////////////////////////////////////////////////////////////FAJKAqADKwVoBNkGqgUKArYCtgJcBGgEOQKTAkgCXgNoBGgEaARoBGgEaARoBGgEaARoBEgCSAJoBGgEaASsA9kGBgX2BOUEagVWBD8EhQWaBZMCpgLnBCUECgcKBtcFpATXBd8EPQQ/BIcFuAQnB9kEgwRKBKYCXgOmAjkEMwNvBMEEwwTdA8EEdQT8AlQE1QRgAmACiwRgAj0H1QSuBMMEwQReA8kDSAPVBBkETgY/BCcEpAPXAmgE1wJoBP//8HcCAEH+ywcLhQigQP/////////////////////////////////////////////////////////////////////////////////////uAaYCSwMlBeEEigavBbkBAAMAA8cDJQUoAv4CKALAA+kEcAN4BGoEhQQ6BIcEBQTFBIcEgAKAAiUFJQUlBdQDbgdeBTsFIwX+BToFywTNBYUGHgMkBI4F1ARrByMG9AXhBPQFnQV9BPMEDQZVBc4HrwXsBNAEAAPAAwADJQUlBQAECAR7BKIDmATeA5oCEwSoBFgCVgJJBEoCDAe6BFAEkgR6BEcDdQPDApoE+QPmBQoE8AONA3EDAANxAyUF////////////////////////////////////////////////////////////////////////////////////////CAIDAxQEoAUgBQkHZQYnApMDkwPbA6AFoAIIA6ACxgOcBesDAwX/BDIFywQvBW8EaQUvBfAC8AKgBaAFoAVjBLwHEQYPBrkFrAbFBV8FdQZOB5EDwwSJBnwFMAi3Bo8GnAWPBmEGMQV5BasGGQYDCXgG2wWEBZMDxgOTA6AFoAUABMQEKgVABE4FkwQlA50EcAXUAsUCDgXBAiAIhQUWBUMFMAUpBBoELgNqBYkE6Aa0BH8ENAQABBoDAASgBf///////////////////////////////////////////////////////////////////////////////////////+4BpgJLAyUF4QSKBq8FuQEAAwADxwMlBSgC/gIoAsAD6QRwA3gEagSFBDoEhwT5A8UEhwQSAxIDJQUlBSUF1ANuB14FOwUjBf4FOgXLBM0FhQYeAyQEjgXUBGsHIwbYBeEE2AWdBX0E8wQNBlUFzgevBewE0AQAA8ADAAMlBSUFAASVBG4EoQOaBMYDoQKVBIAEYQJUAjkESAIJB7gETASgBHEEsQNzA8cCmgROBJQGAgR6BI0DcQMAA3EDJQX///////////////////////////////////////////////////////////////////////////////////////8IAgMDFASgBSAFCQdlBicCkwOTA9sDoAWgAggDoALGA5wF6wMDBf8EMgXLBC8FiARpBS8F8ALwAqAFoAWgBWMEvAcRBhMGuQWsBsUFXwV1Bk4HmwPDBIkGfAVECKMGjwamBY8GYQY5BXkFqwYZBgMJawbbBYQFkwPGA5MDoAWgBQAESAUxBUkETQV1BAwDMgVnBe0C6wIhBdYCBAiFBRYFTQUzBUUEIwRWA3sF5gR4B6sEWwUjBAAEGgMABKAF///4dwIAQY7UBwvICqBA/////////////////////////////////////////////////////////////////////////////////////88BmwI1A/wDDgS4BXUFxAFtAm0C/AP8A/8BcwIFAhcDDgQOBA4EDgQOBA4EDgQOBA4EDgQkAiQC/AP8A/wDtQMnB6EEWgREBOwE6AOtAwwF/AQEAo0CKARdA9cGKgVMBSIEYgVYBK0D5gMiBYoEHgcnBOYDvwN0AhcDdAL8A/wDVALVAzQEYgM0BPsDcQLEAzQE1gHqAaMD1gFkBjQEOAQ0BDQEygIhA64CNASdA7gFdwOfAykDhAKvA4QC/AP//wAA////////////////////////////////AAD////////////////////////////////////////////////PAZsCggP8Aw4E1QWjBd4BfgJ+AvwD/AMQAnMCIwJwAw4EDgQOBA4EDgQOBA4EDgQOBA4ENQI1AvwD/AP8A7UDMAfZBHwEPAQLBecDrAMZBQwFIgKmAmAEYgP+BkUFaQVCBH0FgQTIA/YDOQW7BEAHaAQoBNMDmQJwA5kC/AP8A2cC8wNLBFkDSwQHBIgCywNLBPcBCwLXA/cBggZLBE0ESwRLBNgCMQPGAksEyQP2Ba0DygMuA8ACzQPAAvwD////////////////////////////////////////////////////////////////////////////////////////zwGbAjUD/AMOBLgFdQXEAW0CbQL8A/wD/wFzAgUCGgMOBA4EDgQOBA4EDgQOBA4EDgQOBCQCJAL8A/wD/AO1AycHoQRaBC4E7AToA60DDAX8BAQCjQIoBF0D1wYoBTwFIgRQBVgEngPmAyIFigQfBycE5gO/A3QCEwN0AvwD/ANUAh0EHQRUAx0E0gNxAh0EHQTWAeoBowPWAVQGHQQbBB0EHQS+Ah0DrgIdBJEDuAV3A5QDKQOEAq8DhAL8A////////////////////////////////////////////////////////////////////////////////////////88BmwKCA/wDDgTVBaMF3gF+An4C/AP8AxACcwIjAnkDDgQOBA4EDgQOBA4EDgQOBA4EDgQ1AjUC/AP8A/wDtQMwB9kEfAQmBAsF5wOsAxkFDAUiAqYCYARi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AMg2AAD8AAAAfiwAABghAADDOgAAvgMAALJHAAD9AAAAzzIAAKUAAADDNgAA/wAAAAZgAAC2AwAAqToAAA0gAACtOgAADCAAAHU+AQAIAAAAAwAAAOI+AABAzwAACwAAAAYAAACFFQAAamgAAAIAAAABAAAA4ywAABF0AAAEAAAAAgAAABZCAAAABAAAAwAAAAQAAAAJQQAATM8AAAUAAAAFAAAAtUIAAAQEAAAEAAAABwAAAFsVAAC9NgAABQAAAAkAAAC/NgAAjmwAAAQAAAAKAAAAKUIAAGD5AQAEAAAADAAAAMkvAAAAAAEAAAHQ0dLT1NXW19jZAEGG8wcLCfC/AAAAAAAAAQBBmPMHCw1pbnZpcwAAZmlsbGVkAEGw8wcLGkkaAADVUAAA6DUAAJwLAABgeAAAlMUAAM+NAEHw8wcLef//////////////////////////////////////////AAAAAAAAAAT+//+H/v//BwAAAAAAAAAA//9/////f//////////zf/79//////9///////////8P4P////8x/P///wAAAAAAAAD//////////////wEA+AMAQYD1BwtBQNf///v/////f39U/f8PAP7f///////////+3/////8DAP///////58Z////zz8DAAAAAAAA/v///38C/v///38AQcr1BwuzAf///wcHAAAAAAD+//8H/gcAAAAA/v//////////fP9/LwBgAAAA4P///////yMAAAD/AwAAAOCf+f///cUDAAAAsAMAAwDgh/n///1tAwAAAF4AABwA4K/7///97SMAAAAAAQAAAOCf+f///c0jAAAAsAMAAADgxz3WGMe/AwAAAAAAAAAA4N/9///97wMAAAAAAwAAAODf/f///e8DAAAAQAMAAADg3/3///3/AwAAAAADAEGQ9wcLGf7/////fw0APwAAAAAAAACWJfD+rmwNIB8AQbj3BwsG//7///8DAEHk9wcLcv////8/AP////9/AO3aBwAAAABQAVAxgqtiLAAAAABAAMmA9QcAAAAACAEC/////////////////////////w///////////////wP//z8//////z8//6r///8/////////31/cH88P/x/cHwAAAABATABB4PgHCwEHAEHw+AcLJoAAAAD+AwAA/v///////////x8A/v////////////8H4P////8fAEGw+QcLFf//////////////////////////PwBB0PkHCxX//////////////////////////w8AQfX5BwvJAmD/B/7//4f+//8HAAAAAAAAgAD//3////9//////wAAAAAAAAD//////////////wEA+AMAAwAAAAAA//////////8/AAAAAwAAAMDX///7/////39/VP3/DwD+3////////////t//////ewD///////+fGf///88/AwAAAAAAAP7///9/Av7///9/AP7/+///uxYA////BwcAAAAAAP7//wf//wcA/wP///////////98/3/v//89/wPu////////8/8/Hv/P/wAA7p/5///9xdOfOYCwz/8DAOSH+f///W3ThzkAXsD/HwDur/v///3t8787AADB/wAA7p/5///9zfOPOcCww/8AAOzHPdYYx7/Dxz2AAID/AADu3/3///3vw989YADD/wAA7N/9///978PfPWBAw/8AAOzf/f///f/Dzz2AAMP/AEHQ/AcLOP7/////f/8H/3//AwAAAACWJfD+rmz/O18//wMAAAAAAAAAA/8DoML//v///wP+/98Pv/7/P/4CAEGq/QcLZ/8fAgAAAKAAAAD+/z4A/v///////////x9m/v////////////93YAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAAEAQaH+BwsFFQoAAAkAQbj+BwvgARUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFhICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAEHAgAgLEgIDBAUGBwgAAAkKCwwNDg8QEQBB3oAICwQSEwAUAEHwgAgLAhUWAEGOgQgLUgEBAQEBAQEBAQEBAQEB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sQQAAAZIAABWBQAA3D8AAAUSAAByMQAAOFAAACZLAAAKDgAABgUAAIUSAAAkMAAAsAkAAJYJAADgBAAAP1YAAB5WAABJUwAAyVcAALRXAAC6UwAAmlYAACoFAABYTAAAm1UAAJUXAAD/DwAARlUAALJWAADKUwAAdccAANO5AABaqwAAcZ0AAMeQAACMhQAAcH4AALV4AABQdAAANHEAANhuAACkbgAAb24AADNuAACkbQAAwWwAAGLHAADAuQAAR6sAAF6dAAC0kAAAeYUAAF1+AACieAAAPXQAACFxAADTbgAAn24AAGpuAAAubgAAn20AALxsAABPxwAArbkAADSrAABLnQAAoZAAAGaFAABKfgAAj3gAACp0AAAOcQAAzm4AAJpuAABlbgAAKW4AAJptAAC3bAAASscAAKi5AAAvqwAARp0AAJyQAABhhQAARX4AAIp4AAAldAAACXEAAMluAACVbgAAYG4AACRuAACVbQAAsmwAAEXHAACjuQAAKqsAAEGdAACXkAAAXIUAAEB+AACFeAAAIHQAAARxAADEbgAAkG4AAFtuAAAfbgAAkG0AAK1sAABAxwAAnrkAACWrAAA8nQAAkpAAAFeFAAA7fgAAgHgAABt0AAD/cAAAv24AAItuAABWbgAAGm4AAIRtAACobAAAO8cAAJm5AAAgqwAAN50AAI2QAABShQAANn4AAHt4AAAWdAAA+nAAALpuAACGbgAAUW4AAP9tAAB/bQAAo2wAADbHAACUuQAAG6sAADKdAACIkAAATYUAADF+AAB2eAAADHQAAPVwAAC1bgAAgW4AAExuAAD6bQAAem0AAIlsAAAwxwAAxbYAAHWoAACmmgAA+o0AAESFAAAtfgAAcngAAPNzAAA3EwAAZzUAAHluAAA9bgAA6x0AANBsAAB7bAAAc8gAADq6AADBqwAA2J0AADWRAAABhgAA134AABx5AAC3dAAApnEAAN1uAACpbgAAdG4AADhuAACpbQAAy2wAAMzlAABM4gAA3N8AADgUAgCw1QAArtUAAKzVAACq1QAASdUAAAPVAABczwAAWs8AAFjPAABVzwAAPs8AAJrOAACSzgAA6cYAAKe2AABXqAAAcZoAANyNAAA2hQAAH34AAGR4AADlcwAA53AAAA5wAADGbwAAxG8AALpvAADkbgAA4m4AAOBuAACzbgAAd24AADtuAACsbQAAzmwAAHlsAADqawAAxmsAAJ5rAACcawAAmWsAAHRoAABeaAAALWgAACtoAAAaaAAAGGgAAHZnAABaZwAAwWYAAL9mAAC9ZgAAu2YAAD1kAAAUZAAAEmQAAPdjAAD1YwAAYmIAAGBiAAD+YAAA/GAAAMJfAABCXwAA9VgAANVQAACDQwAAfkEAAGQ+AABcOwAAuToAAKc6AAByOQAAnzYAAOg1AADRLwAApC4AAEAeAAD8HQAASRoAADgTAABuDAAA6gsAAJwLAAANCgAALwkAAHkEAABEBAAAOwQAAC8EAAAJBAAAxmwAAAAAAAAIAK7/0QAKAK7/rv8LAK7/rv+u/67/rv+u/67/rv8FANEArv/RANEA0QDRANEA0QDRANEArv/7/67/DgDs/67/rv+u/67/0QDRANEA0QDRAA0AJQAMAEIAEABQABMAbQB7ABQAmAAPAKYAwwCu/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv8XAK7/dwCu/wcALgCu/yYArv8XABEAIwCu/w0Arv+u/67/rv86AK7/rv81AK7/rv+u/ygArv8HAK7/OwBFAK7/SACu/67/rv+u/67/AEGhtQgLwQYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoAAAAAAAAAAACAgICAgIQDFkBAB9QCAMHEhMUVxYXCAtpDB8KBQwOKRErDy0QLzAgMgY0NRscHR4LDCEiIyQlJicoDBgZFwQKGxwaICoKISIjJCUmJygMCg5TCixYMVhYWFhYWAwbHA8uWDMhIiMkJSYnKBsc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X05VTUVSSUMAAExDX1RJTUUAAAAAAExDX0NPTExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTAEGQ8wgLB0MuVVRGLTgAQajzCAugENCpAgBoqgIA+KoCAE5vIGVycm9yIGluZm9ybWF0aW9uAElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE11bHRpaG9wIGF0dGVtcHRlZABSZXF1aXJlZCBrZXkgbm90IGF2YWlsYWJsZQBLZXkgaGFzIGV4cGlyZWQAS2V5IGhhcyBiZWVuIHJldm9rZWQAS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlAAAAAAClAlsA8AG1BYwFJQGDBh0DlAT/AMcDMQMLBrwBjwF/A8oEKwDaBq8AQgNOA9wBDgQVAKEGDQGUAgsCOAZkArwC/wJdA+cECwfPAssF7wXbBeECHgZFAoUAggJsA28E8QDzAxgF2QDaA0wGVAJ7AZ0DvQQAAFEAFQK7ALMDbQD/AYUELwX5BDgAZQFGAZ8AtwaoAXMCUwEAQfiDCQsMIQQAAAAAAAAAAC8CAEGYhAkLBjUERwRWBABBroQJCwKgBABBwoQJCyJGBWAFbgVhBgAAzwEAAAAAAAAAAMkG6Qb5Bh4HOQdJB14HAEHwhAkLkQHRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAABkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEGRhgkLIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBy4YJCwEMAEHXhgkLFRMAAAAAEwAAAAAJDAAAAAAADAAADABBhYcJCwEQAEGRhwkLFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABBv4cJCwESAEHLhwkLHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBgogJCw4aAAAAGhoaAAAAAAAACQBBs4gJCwEUAEG/iAkLFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABB7YgJCwEWAEH5iAkLJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBBxIkJCwILAgBB7IkJCwj//////////wBBsIoJC/UI/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAAACAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNsAAAAA9EcCAA0CAAAOAgAADwIAABACAAARAgAAEgIAABMCAAAUAgAAFQIAABYCAAAXAgAAGAIAABkCAAAaAgAABAAAAAAAAAAwSAIAGwIAABwCAAD8/////P///zBIAgAdAgAAHgIAAFhHAgBsRwIAAAAAAHhIAgAfAgAAIAIAAA8CAAAQAgAAIQIAACICAAATAgAAFAIAABUCAAAjAgAAFwIAACQCAAAZAgAAJQIAAGhzAgDIRwIAjEkCAE5TdDNfXzI5YmFzaWNfaW9zSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAQHMCAPxHAgBOU3QzX18yMTViYXNpY19zdHJlYW1idWZJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAAAAxHMCAEhIAgAAAAAAAQAAALxHAgAD9P//TlN0M19fMjEzYmFzaWNfb3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAAaHMCAIRIAgD0RwIATlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxv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";return u}var uA;function ZA(u){if(u==uA&&E)return new Uint8Array(E);var y=f(u);if(y)return y;throw"both async and sync fetching of the wasm failed"}function QA(u){return Promise.resolve().then(()=>ZA(u))}function WA(u,y,x){return QA(u).then(H=>WebAssembly.instantiate(H,y)).then(x,H=>{B(`failed to asynchronously prepare wasm: ${H}`),KA(H)})}function MA(u,y,x,H){return WA(y,x,H)}function be(){return{a:Lt}}function LA(){var u=be();function y(H,k){return gt=H.exports,b=gt.y,O(),sA(gt.z),mA(),gt}UA();function x(H){y(H.instance)}return uA??=HA(),MA(E,uA,u,x).catch(o),{}}function pA(u){return i.agerrMessages.push(Me(u)),0}function Ft(u){this.name="ExitStatus",this.message=`Program terminated with exit(${u})`,this.status=u}var ht=u=>{u.forEach(y=>y(i))};function Ee(u,y="i8"){switch(y.endsWith("*")&&(y="*"),y){case"i1":return M[u];case"i8":return M[u];case"i16":return F[u>>1];case"i32":return _[u>>2];case"i64":return j[u>>3];case"float":return J[u>>2];case"double":return AA[u>>3];case"*":return U[u>>2];default:KA(`invalid type for getValue: ${y}`)}}var Kt=u=>Oi(u),Ye=()=>hn(),ze=typeof TextDecoder<"u"?new TextDecoder:void 0,ut=(u,y=0,x=NaN)=>{for(var H=y+x,k=y;u[k]&&!(k>=H);)++k;if(k-y>16&&u.buffer&&ze)return ze.decode(u.subarray(y,k));for(var T="";y>10,56320|Ae&1023)}}return T},Me=(u,y)=>u?ut(D,u,y):"",ei=(u,y,x,H)=>{KA(`Assertion failed: ${Me(u)}, at: `+[y?Me(y):"unknown filename",x,H?Me(H):"unknown function"])};class Y{constructor(y){this.excPtr=y,this.ptr=y-24}set_type(y){U[this.ptr+4>>2]=y}get_type(){return U[this.ptr+4>>2]}set_destructor(y){U[this.ptr+8>>2]=y}get_destructor(){return U[this.ptr+8>>2]}set_caught(y){y=y?1:0,M[this.ptr+12]=y}get_caught(){return M[this.ptr+12]!=0}set_rethrown(y){y=y?1:0,M[this.ptr+13]=y}get_rethrown(){return M[this.ptr+13]!=0}init(y,x){this.set_adjusted_ptr(0),this.set_type(y),this.set_destructor(x)}set_adjusted_ptr(y){U[this.ptr+16>>2]=y}get_adjusted_ptr(){return U[this.ptr+16>>2]}}var z=0,nA=(u,y,x)=>{var H=new Y(u);throw H.init(y,x),z=u,z},rA={isAbs:u=>u.charAt(0)==="/",splitPath:u=>{var y=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return y.exec(u).slice(1)},normalizeArray:(u,y)=>{for(var x=0,H=u.length-1;H>=0;H--){var k=u[H];k==="."?u.splice(H,1):k===".."?(u.splice(H,1),x++):x&&(u.splice(H,1),x--)}if(y)for(;x;x--)u.unshift("..");return u},normalize:u=>{var y=rA.isAbs(u),x=u.substr(-1)==="/";return u=rA.normalizeArray(u.split("/").filter(H=>!!H),!y).join("/"),!u&&!y&&(u="."),u&&x&&(u+="/"),(y?"/":"")+u},dirname:u=>{var y=rA.splitPath(u),x=y[0],H=y[1];return!x&&!H?".":(H&&(H=H.substr(0,H.length-1)),x+H)},basename:u=>{if(u==="/")return"/";u=rA.normalize(u),u=u.replace(/\/$/,"");var y=u.lastIndexOf("/");return y===-1?u:u.substr(y+1)},join:(...u)=>rA.normalize(u.join("/")),join2:(u,y)=>rA.normalize(u+"/"+y)},NA=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return u=>crypto.getRandomValues(u);KA("initRandomDevice")},Ie=u=>(Ie=NA())(u),Qe={resolve:(...u)=>{for(var y="",x=!1,H=u.length-1;H>=-1&&!x;H--){var k=H>=0?u[H]:L.cwd();if(typeof k!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!k)return"";y=k+"/"+y,x=rA.isAbs(k)}return y=rA.normalizeArray(y.split("/").filter(T=>!!T),!x).join("/"),(x?"/":"")+y||"."},relative:(u,y)=>{u=Qe.resolve(u).substr(1),y=Qe.resolve(y).substr(1);function x(Ae){for(var oe=0;oe=0&&Ae[Be]==="";Be--);return oe>Be?[]:Ae.slice(oe,Be-oe+1)}for(var H=x(u.split("/")),k=x(y.split("/")),T=Math.min(H.length,k.length),eA=T,gA=0;gA{for(var y=0,x=0;x=55296&&H<=57343?(y+=4,++x):y+=3}return y},Et=(u,y,x,H)=>{if(!(H>0))return 0;for(var k=x,T=x+H-1,eA=0;eA=55296&&gA<=57343){var wA=u.charCodeAt(++eA);gA=65536+((gA&1023)<<10)|wA&1023}if(gA<=127){if(x>=T)break;y[x++]=gA}else if(gA<=2047){if(x+1>=T)break;y[x++]=192|gA>>6,y[x++]=128|gA&63}else if(gA<=65535){if(x+2>=T)break;y[x++]=224|gA>>12,y[x++]=128|gA>>6&63,y[x++]=128|gA&63}else{if(x+3>=T)break;y[x++]=240|gA>>18,y[x++]=128|gA>>12&63,y[x++]=128|gA>>6&63,y[x++]=128|gA&63}}return y[x]=0,x-k};function et(u,y,x){var H=x>0?x:_A(u)+1,k=new Array(H),T=Et(u,k,0,k.length);return y&&(k.length=T),k}var Te=()=>{if(!xA.length){var u=null;if(typeof window<"u"&&typeof window.prompt=="function"&&(u=window.prompt("Input: "),u!==null&&(u+=` -`)),!u)return null;xA=et(u,!0)}return xA.shift()},Le={ttys:[],init(){},shutdown(){},register(u,y){Le.ttys[u]={input:[],output:[],ops:y},L.registerDevice(u,Le.stream_ops)},stream_ops:{open(u){var y=Le.ttys[u.node.rdev];if(!y)throw new L.ErrnoError(43);u.tty=y,u.seekable=!1},close(u){u.tty.ops.fsync(u.tty)},fsync(u){u.tty.ops.fsync(u.tty)},read(u,y,x,H,k){if(!u.tty||!u.tty.ops.get_char)throw new L.ErrnoError(60);for(var T=0,eA=0;eA0&&(d(ut(u.output)),u.output=[])},ioctl_tcgets(u){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(u,y,x){return 0},ioctl_tiocgwinsz(u){return[24,80]}},default_tty1_ops:{put_char(u,y){y===null||y===10?(B(ut(u.output)),u.output=[]):y!=0&&u.output.push(y)},fsync(u){u.output&&u.output.length>0&&(B(ut(u.output)),u.output=[])}}},si=(u,y)=>{D.fill(0,u,u+y)},gn=(u,y)=>Math.ceil(u/y)*y,dn=u=>{u=gn(u,65536);var y=Fi(65536,u);return y&&si(y,u),y},_e={ops_table:null,mount(u){return _e.createNode(null,"/",16895,0)},createNode(u,y,x,H){if(L.isBlkdev(x)||L.isFIFO(x))throw new L.ErrnoError(63);_e.ops_table||={dir:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr,lookup:_e.node_ops.lookup,mknod:_e.node_ops.mknod,rename:_e.node_ops.rename,unlink:_e.node_ops.unlink,rmdir:_e.node_ops.rmdir,readdir:_e.node_ops.readdir,symlink:_e.node_ops.symlink},stream:{llseek:_e.stream_ops.llseek}},file:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr},stream:{llseek:_e.stream_ops.llseek,read:_e.stream_ops.read,write:_e.stream_ops.write,allocate:_e.stream_ops.allocate,mmap:_e.stream_ops.mmap,msync:_e.stream_ops.msync}},link:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr,readlink:_e.node_ops.readlink},stream:{}},chrdev:{node:{getattr:_e.node_ops.getattr,setattr:_e.node_ops.setattr},stream:L.chrdev_stream_ops}};var k=L.createNode(u,y,x,H);return L.isDir(k.mode)?(k.node_ops=_e.ops_table.dir.node,k.stream_ops=_e.ops_table.dir.stream,k.contents={}):L.isFile(k.mode)?(k.node_ops=_e.ops_table.file.node,k.stream_ops=_e.ops_table.file.stream,k.usedBytes=0,k.contents=null):L.isLink(k.mode)?(k.node_ops=_e.ops_table.link.node,k.stream_ops=_e.ops_table.link.stream):L.isChrdev(k.mode)&&(k.node_ops=_e.ops_table.chrdev.node,k.stream_ops=_e.ops_table.chrdev.stream),k.timestamp=Date.now(),u&&(u.contents[y]=k,u.timestamp=k.timestamp),k},getFileDataAsTypedArray(u){return u.contents?u.contents.subarray?u.contents.subarray(0,u.usedBytes):new Uint8Array(u.contents):new Uint8Array(0)},expandFileStorage(u,y){var x=u.contents?u.contents.length:0;if(!(x>=y)){var H=1024*1024;y=Math.max(y,x*(x>>0),x!=0&&(y=Math.max(y,256));var k=u.contents;u.contents=new Uint8Array(y),u.usedBytes>0&&u.contents.set(k.subarray(0,u.usedBytes),0)}},resizeFileStorage(u,y){if(u.usedBytes!=y)if(y==0)u.contents=null,u.usedBytes=0;else{var x=u.contents;u.contents=new Uint8Array(y),x&&u.contents.set(x.subarray(0,Math.min(y,u.usedBytes))),u.usedBytes=y}},node_ops:{getattr(u){var y={};return y.dev=L.isChrdev(u.mode)?u.id:1,y.ino=u.id,y.mode=u.mode,y.nlink=1,y.uid=0,y.gid=0,y.rdev=u.rdev,L.isDir(u.mode)?y.size=4096:L.isFile(u.mode)?y.size=u.usedBytes:L.isLink(u.mode)?y.size=u.link.length:y.size=0,y.atime=new Date(u.timestamp),y.mtime=new Date(u.timestamp),y.ctime=new Date(u.timestamp),y.blksize=4096,y.blocks=Math.ceil(y.size/y.blksize),y},setattr(u,y){y.mode!==void 0&&(u.mode=y.mode),y.timestamp!==void 0&&(u.timestamp=y.timestamp),y.size!==void 0&&_e.resizeFileStorage(u,y.size)},lookup(u,y){throw L.genericErrors[44]},mknod(u,y,x,H){return _e.createNode(u,y,x,H)},rename(u,y,x){if(L.isDir(u.mode)){var H;try{H=L.lookupNode(y,x)}catch{}if(H)for(var k in H.contents)throw new L.ErrnoError(55)}delete u.parent.contents[u.name],u.parent.timestamp=Date.now(),u.name=x,y.contents[x]=u,y.timestamp=u.parent.timestamp},unlink(u,y){delete u.contents[y],u.timestamp=Date.now()},rmdir(u,y){var x=L.lookupNode(u,y);for(var H in x.contents)throw new L.ErrnoError(55);delete u.contents[y],u.timestamp=Date.now()},readdir(u){var y=[".",".."];for(var x of Object.keys(u.contents))y.push(x);return y},symlink(u,y,x){var H=_e.createNode(u,y,41471,0);return H.link=x,H},readlink(u){if(!L.isLink(u.mode))throw new L.ErrnoError(28);return u.link}},stream_ops:{read(u,y,x,H,k){var T=u.node.contents;if(k>=u.node.usedBytes)return 0;var eA=Math.min(u.node.usedBytes-k,H);if(eA>8&&T.subarray)y.set(T.subarray(k,k+eA),x);else for(var gA=0;gA0||x+y{var k=H?"":`al ${u}`;C(u).then(T=>{y(new Uint8Array(T)),k&&mA()},T=>{if(x)x();else throw`Loading data file "${u}" failed.`}),k&&UA()},ui=(u,y,x,H,k,T)=>{L.createDataFile(u,y,x,H,k,T)},Mi=[],zi=(u,y,x,H)=>{typeof Browser<"u"&&Browser.init();var k=!1;return Mi.forEach(T=>{k||T.canHandle(y)&&(T.handle(u,y,x,H),k=!0)}),k},vt=(u,y,x,H,k,T,eA,gA,wA,Ae)=>{var oe=y?Qe.resolve(rA.join2(u,y)):u;function Be(He){function ke(Ne){Ae?.(),gA||ui(u,y,Ne,H,k,wA),T?.(),mA()}zi(He,oe,ke,()=>{eA?.(),mA()})||ke(He)}UA(),typeof x=="string"?Wi(x,Be,eA):Be(x)},Zi=u=>{var y={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},x=y[u];if(typeof x>"u")throw new Error(`Unknown file open mode: ${u}`);return x},_t=(u,y)=>{var x=0;return u&&(x|=365),y&&(x|=146),x},L={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(u){this.name="ErrnoError",this.errno=u}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(u){this.node=u}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(u){this.shared.flags=u}get position(){return this.shared.position}set position(u){this.shared.position=u}},FSNode:class{constructor(u,y,x,H){u||(u=this),this.parent=u,this.mount=u.mount,this.mounted=null,this.id=L.nextInode++,this.name=y,this.mode=x,this.node_ops={},this.stream_ops={},this.rdev=H,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(u){u?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(u){u?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return L.isDir(this.mode)}get isDevice(){return L.isChrdev(this.mode)}},lookupPath(u,y={}){if(u=Qe.resolve(u),!u)return{path:"",node:null};var x={follow_mount:!0,recurse_count:0};if(y=Object.assign(x,y),y.recurse_count>8)throw new L.ErrnoError(32);for(var H=u.split("/").filter(Be=>!!Be),k=L.root,T="/",eA=0;eA40)throw new L.ErrnoError(32)}}return{path:T,node:k}},getPath(u){for(var y;;){if(L.isRoot(u)){var x=u.mount.mountpoint;return y?x[x.length-1]!=="/"?`${x}/${y}`:x+y:x}y=y?`${u.name}/${y}`:u.name,u=u.parent}},hashName(u,y){for(var x=0,H=0;H>>0)%L.nameTable.length},hashAddNode(u){var y=L.hashName(u.parent.id,u.name);u.name_next=L.nameTable[y],L.nameTable[y]=u},hashRemoveNode(u){var y=L.hashName(u.parent.id,u.name);if(L.nameTable[y]===u)L.nameTable[y]=u.name_next;else for(var x=L.nameTable[y];x;){if(x.name_next===u){x.name_next=u.name_next;break}x=x.name_next}},lookupNode(u,y){var x=L.mayLookup(u);if(x)throw new L.ErrnoError(x);for(var H=L.hashName(u.id,y),k=L.nameTable[H];k;k=k.name_next){var T=k.name;if(k.parent.id===u.id&&T===y)return k}return L.lookup(u,y)},createNode(u,y,x,H){var k=new L.FSNode(u,y,x,H);return L.hashAddNode(k),k},destroyNode(u){L.hashRemoveNode(u)},isRoot(u){return u===u.parent},isMountpoint(u){return!!u.mounted},isFile(u){return(u&61440)===32768},isDir(u){return(u&61440)===16384},isLink(u){return(u&61440)===40960},isChrdev(u){return(u&61440)===8192},isBlkdev(u){return(u&61440)===24576},isFIFO(u){return(u&61440)===4096},isSocket(u){return(u&49152)===49152},flagsToPermissionString(u){var y=["r","w","rw"][u&3];return u&512&&(y+="w"),y},nodePermissions(u,y){return L.ignorePermissions?0:y.includes("r")&&!(u.mode&292)||y.includes("w")&&!(u.mode&146)||y.includes("x")&&!(u.mode&73)?2:0},mayLookup(u){if(!L.isDir(u.mode))return 54;var y=L.nodePermissions(u,"x");return y||(u.node_ops.lookup?0:2)},mayCreate(u,y){try{var x=L.lookupNode(u,y);return 20}catch{}return L.nodePermissions(u,"wx")},mayDelete(u,y,x){var H;try{H=L.lookupNode(u,y)}catch(T){return T.errno}var k=L.nodePermissions(u,"wx");if(k)return k;if(x){if(!L.isDir(H.mode))return 54;if(L.isRoot(H)||L.getPath(H)===L.cwd())return 10}else if(L.isDir(H.mode))return 31;return 0},mayOpen(u,y){return u?L.isLink(u.mode)?32:L.isDir(u.mode)&&(L.flagsToPermissionString(y)!=="r"||y&512)?31:L.nodePermissions(u,L.flagsToPermissionString(y)):44},MAX_OPEN_FDS:4096,nextfd(){for(var u=0;u<=L.MAX_OPEN_FDS;u++)if(!L.streams[u])return u;throw new L.ErrnoError(33)},getStreamChecked(u){var y=L.getStream(u);if(!y)throw new L.ErrnoError(8);return y},getStream:u=>L.streams[u],createStream(u,y=-1){return u=Object.assign(new L.FSStream,u),y==-1&&(y=L.nextfd()),u.fd=y,L.streams[y]=u,u},closeStream(u){L.streams[u]=null},dupStream(u,y=-1){var x=L.createStream(u,y);return x.stream_ops?.dup?.(x),x},chrdev_stream_ops:{open(u){var y=L.getDevice(u.node.rdev);u.stream_ops=y.stream_ops,u.stream_ops.open?.(u)},llseek(){throw new L.ErrnoError(70)}},major:u=>u>>8,minor:u=>u&255,makedev:(u,y)=>u<<8|y,registerDevice(u,y){L.devices[u]={stream_ops:y}},getDevice:u=>L.devices[u],getMounts(u){for(var y=[],x=[u];x.length;){var H=x.pop();y.push(H),x.push(...H.mounts)}return y},syncfs(u,y){typeof u=="function"&&(y=u,u=!1),L.syncFSRequests++,L.syncFSRequests>1&&B(`warning: ${L.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var x=L.getMounts(L.root.mount),H=0;function k(eA){return L.syncFSRequests--,y(eA)}function T(eA){if(eA)return T.errored?void 0:(T.errored=!0,k(eA));++H>=x.length&&k(null)}x.forEach(eA=>{if(!eA.type.syncfs)return T(null);eA.type.syncfs(eA,u,T)})},mount(u,y,x){var H=x==="/",k=!x,T;if(H&&L.root)throw new L.ErrnoError(10);if(!H&&!k){var eA=L.lookupPath(x,{follow_mount:!1});if(x=eA.path,T=eA.node,L.isMountpoint(T))throw new L.ErrnoError(10);if(!L.isDir(T.mode))throw new L.ErrnoError(54)}var gA={type:u,opts:y,mountpoint:x,mounts:[]},wA=u.mount(gA);return wA.mount=gA,gA.root=wA,H?L.root=wA:T&&(T.mounted=gA,T.mount&&T.mount.mounts.push(gA)),wA},unmount(u){var y=L.lookupPath(u,{follow_mount:!1});if(!L.isMountpoint(y.node))throw new L.ErrnoError(28);var x=y.node,H=x.mounted,k=L.getMounts(H);Object.keys(L.nameTable).forEach(eA=>{for(var gA=L.nameTable[eA];gA;){var wA=gA.name_next;k.includes(gA.mount)&&L.destroyNode(gA),gA=wA}}),x.mounted=null;var T=x.mount.mounts.indexOf(H);x.mount.mounts.splice(T,1)},lookup(u,y){return u.node_ops.lookup(u,y)},mknod(u,y,x){var H=L.lookupPath(u,{parent:!0}),k=H.node,T=rA.basename(u);if(!T||T==="."||T==="..")throw new L.ErrnoError(28);var eA=L.mayCreate(k,T);if(eA)throw new L.ErrnoError(eA);if(!k.node_ops.mknod)throw new L.ErrnoError(63);return k.node_ops.mknod(k,T,y,x)},create(u,y){return y=y!==void 0?y:438,y&=4095,y|=32768,L.mknod(u,y,0)},mkdir(u,y){return y=y!==void 0?y:511,y&=1023,y|=16384,L.mknod(u,y,0)},mkdirTree(u,y){for(var x=u.split("/"),H="",k=0;k"u"&&(x=y,y=438),y|=8192,L.mknod(u,y,x)},symlink(u,y){if(!Qe.resolve(u))throw new L.ErrnoError(44);var x=L.lookupPath(y,{parent:!0}),H=x.node;if(!H)throw new L.ErrnoError(44);var k=rA.basename(y),T=L.mayCreate(H,k);if(T)throw new L.ErrnoError(T);if(!H.node_ops.symlink)throw new L.ErrnoError(63);return H.node_ops.symlink(H,k,u)},rename(u,y){var x=rA.dirname(u),H=rA.dirname(y),k=rA.basename(u),T=rA.basename(y),eA,gA,wA;if(eA=L.lookupPath(u,{parent:!0}),gA=eA.node,eA=L.lookupPath(y,{parent:!0}),wA=eA.node,!gA||!wA)throw new L.ErrnoError(44);if(gA.mount!==wA.mount)throw new L.ErrnoError(75);var Ae=L.lookupNode(gA,k),oe=Qe.relative(u,H);if(oe.charAt(0)!==".")throw new L.ErrnoError(28);if(oe=Qe.relative(y,x),oe.charAt(0)!==".")throw new L.ErrnoError(55);var Be;try{Be=L.lookupNode(wA,T)}catch{}if(Ae!==Be){var He=L.isDir(Ae.mode),ke=L.mayDelete(gA,k,He);if(ke)throw new L.ErrnoError(ke);if(ke=Be?L.mayDelete(wA,T,He):L.mayCreate(wA,T),ke)throw new L.ErrnoError(ke);if(!gA.node_ops.rename)throw new L.ErrnoError(63);if(L.isMountpoint(Ae)||Be&&L.isMountpoint(Be))throw new L.ErrnoError(10);if(wA!==gA&&(ke=L.nodePermissions(gA,"w"),ke))throw new L.ErrnoError(ke);L.hashRemoveNode(Ae);try{gA.node_ops.rename(Ae,wA,T),Ae.parent=wA}catch(Ne){throw Ne}finally{L.hashAddNode(Ae)}}},rmdir(u){var y=L.lookupPath(u,{parent:!0}),x=y.node,H=rA.basename(u),k=L.lookupNode(x,H),T=L.mayDelete(x,H,!0);if(T)throw new L.ErrnoError(T);if(!x.node_ops.rmdir)throw new L.ErrnoError(63);if(L.isMountpoint(k))throw new L.ErrnoError(10);x.node_ops.rmdir(x,H),L.destroyNode(k)},readdir(u){var y=L.lookupPath(u,{follow:!0}),x=y.node;if(!x.node_ops.readdir)throw new L.ErrnoError(54);return x.node_ops.readdir(x)},unlink(u){var y=L.lookupPath(u,{parent:!0}),x=y.node;if(!x)throw new L.ErrnoError(44);var H=rA.basename(u),k=L.lookupNode(x,H),T=L.mayDelete(x,H,!1);if(T)throw new L.ErrnoError(T);if(!x.node_ops.unlink)throw new L.ErrnoError(63);if(L.isMountpoint(k))throw new L.ErrnoError(10);x.node_ops.unlink(x,H),L.destroyNode(k)},readlink(u){var y=L.lookupPath(u),x=y.node;if(!x)throw new L.ErrnoError(44);if(!x.node_ops.readlink)throw new L.ErrnoError(28);return Qe.resolve(L.getPath(x.parent),x.node_ops.readlink(x))},stat(u,y){var x=L.lookupPath(u,{follow:!y}),H=x.node;if(!H)throw new L.ErrnoError(44);if(!H.node_ops.getattr)throw new L.ErrnoError(63);return H.node_ops.getattr(H)},lstat(u){return L.stat(u,!0)},chmod(u,y,x){var H;if(typeof u=="string"){var k=L.lookupPath(u,{follow:!x});H=k.node}else H=u;if(!H.node_ops.setattr)throw new L.ErrnoError(63);H.node_ops.setattr(H,{mode:y&4095|H.mode&-4096,timestamp:Date.now()})},lchmod(u,y){L.chmod(u,y,!0)},fchmod(u,y){var x=L.getStreamChecked(u);L.chmod(x.node,y)},chown(u,y,x,H){var k;if(typeof u=="string"){var T=L.lookupPath(u,{follow:!H});k=T.node}else k=u;if(!k.node_ops.setattr)throw new L.ErrnoError(63);k.node_ops.setattr(k,{timestamp:Date.now()})},lchown(u,y,x){L.chown(u,y,x,!0)},fchown(u,y,x){var H=L.getStreamChecked(u);L.chown(H.node,y,x)},truncate(u,y){if(y<0)throw new L.ErrnoError(28);var x;if(typeof u=="string"){var H=L.lookupPath(u,{follow:!0});x=H.node}else x=u;if(!x.node_ops.setattr)throw new L.ErrnoError(63);if(L.isDir(x.mode))throw new L.ErrnoError(31);if(!L.isFile(x.mode))throw new L.ErrnoError(28);var k=L.nodePermissions(x,"w");if(k)throw new L.ErrnoError(k);x.node_ops.setattr(x,{size:y,timestamp:Date.now()})},ftruncate(u,y){var x=L.getStreamChecked(u);if((x.flags&2097155)===0)throw new L.ErrnoError(28);L.truncate(x.node,y)},utime(u,y,x){var H=L.lookupPath(u,{follow:!0}),k=H.node;k.node_ops.setattr(k,{timestamp:Math.max(y,x)})},open(u,y,x){if(u==="")throw new L.ErrnoError(44);y=typeof y=="string"?Zi(y):y,y&64?(x=typeof x>"u"?438:x,x=x&4095|32768):x=0;var H;if(typeof u=="object")H=u;else{u=rA.normalize(u);try{var k=L.lookupPath(u,{follow:!(y&131072)});H=k.node}catch{}}var T=!1;if(y&64)if(H){if(y&128)throw new L.ErrnoError(20)}else H=L.mknod(u,x,0),T=!0;if(!H)throw new L.ErrnoError(44);if(L.isChrdev(H.mode)&&(y&=-513),y&65536&&!L.isDir(H.mode))throw new L.ErrnoError(54);if(!T){var eA=L.mayOpen(H,y);if(eA)throw new L.ErrnoError(eA)}y&512&&!T&&L.truncate(H,0),y&=-131713;var gA=L.createStream({node:H,path:L.getPath(H),flags:y,seekable:!0,position:0,stream_ops:H.stream_ops,ungotten:[],error:!1});return gA.stream_ops.open&&gA.stream_ops.open(gA),gA},close(u){if(L.isClosed(u))throw new L.ErrnoError(8);u.getdents&&(u.getdents=null);try{u.stream_ops.close&&u.stream_ops.close(u)}catch(y){throw y}finally{L.closeStream(u.fd)}u.fd=null},isClosed(u){return u.fd===null},llseek(u,y,x){if(L.isClosed(u))throw new L.ErrnoError(8);if(!u.seekable||!u.stream_ops.llseek)throw new L.ErrnoError(70);if(x!=0&&x!=1&&x!=2)throw new L.ErrnoError(28);return u.position=u.stream_ops.llseek(u,y,x),u.ungotten=[],u.position},read(u,y,x,H,k){if(H<0||k<0)throw new L.ErrnoError(28);if(L.isClosed(u))throw new L.ErrnoError(8);if((u.flags&2097155)===1)throw new L.ErrnoError(8);if(L.isDir(u.node.mode))throw new L.ErrnoError(31);if(!u.stream_ops.read)throw new L.ErrnoError(28);var T=typeof k<"u";if(!T)k=u.position;else if(!u.seekable)throw new L.ErrnoError(70);var eA=u.stream_ops.read(u,y,x,H,k);return T||(u.position+=eA),eA},write(u,y,x,H,k,T){if(H<0||k<0)throw new L.ErrnoError(28);if(L.isClosed(u))throw new L.ErrnoError(8);if((u.flags&2097155)===0)throw new L.ErrnoError(8);if(L.isDir(u.node.mode))throw new L.ErrnoError(31);if(!u.stream_ops.write)throw new L.ErrnoError(28);u.seekable&&u.flags&1024&&L.llseek(u,0,2);var eA=typeof k<"u";if(!eA)k=u.position;else if(!u.seekable)throw new L.ErrnoError(70);var gA=u.stream_ops.write(u,y,x,H,k,T);return eA||(u.position+=gA),gA},allocate(u,y,x){if(L.isClosed(u))throw new L.ErrnoError(8);if(y<0||x<=0)throw new L.ErrnoError(28);if((u.flags&2097155)===0)throw new L.ErrnoError(8);if(!L.isFile(u.node.mode)&&!L.isDir(u.node.mode))throw new L.ErrnoError(43);if(!u.stream_ops.allocate)throw new L.ErrnoError(138);u.stream_ops.allocate(u,y,x)},mmap(u,y,x,H,k){if((H&2)!==0&&(k&2)===0&&(u.flags&2097155)!==2)throw new L.ErrnoError(2);if((u.flags&2097155)===1)throw new L.ErrnoError(2);if(!u.stream_ops.mmap)throw new L.ErrnoError(43);if(!y)throw new L.ErrnoError(28);return u.stream_ops.mmap(u,y,x,H,k)},msync(u,y,x,H,k){return u.stream_ops.msync?u.stream_ops.msync(u,y,x,H,k):0},ioctl(u,y,x){if(!u.stream_ops.ioctl)throw new L.ErrnoError(59);return u.stream_ops.ioctl(u,y,x)},readFile(u,y={}){if(y.flags=y.flags||0,y.encoding=y.encoding||"binary",y.encoding!=="utf8"&&y.encoding!=="binary")throw new Error(`Invalid encoding type "${y.encoding}"`);var x,H=L.open(u,y.flags),k=L.stat(u),T=k.size,eA=new Uint8Array(T);return L.read(H,eA,0,T,0),y.encoding==="utf8"?x=ut(eA):y.encoding==="binary"&&(x=eA),L.close(H),x},writeFile(u,y,x={}){x.flags=x.flags||577;var H=L.open(u,x.flags,x.mode);if(typeof y=="string"){var k=new Uint8Array(_A(y)+1),T=Et(y,k,0,k.length);L.write(H,k,0,T,void 0,x.canOwn)}else if(ArrayBuffer.isView(y))L.write(H,y,0,y.byteLength,void 0,x.canOwn);else throw new Error("Unsupported data type");L.close(H)},cwd:()=>L.currentPath,chdir(u){var y=L.lookupPath(u,{follow:!0});if(y.node===null)throw new L.ErrnoError(44);if(!L.isDir(y.node.mode))throw new L.ErrnoError(54);var x=L.nodePermissions(y.node,"x");if(x)throw new L.ErrnoError(x);L.currentPath=y.path},createDefaultDirectories(){L.mkdir("/tmp"),L.mkdir("/home"),L.mkdir("/home/web_user")},createDefaultDevices(){L.mkdir("/dev"),L.registerDevice(L.makedev(1,3),{read:()=>0,write:(H,k,T,eA,gA)=>eA}),L.mkdev("/dev/null",L.makedev(1,3)),Le.register(L.makedev(5,0),Le.default_tty_ops),Le.register(L.makedev(6,0),Le.default_tty1_ops),L.mkdev("/dev/tty",L.makedev(5,0)),L.mkdev("/dev/tty1",L.makedev(6,0));var u=new Uint8Array(1024),y=0,x=()=>(y===0&&(y=Ie(u).byteLength),u[--y]);L.createDevice("/dev","random",x),L.createDevice("/dev","urandom",x),L.mkdir("/dev/shm"),L.mkdir("/dev/shm/tmp")},createSpecialDirectories(){L.mkdir("/proc");var u=L.mkdir("/proc/self");L.mkdir("/proc/self/fd"),L.mount({mount(){var y=L.createNode(u,"fd",16895,73);return y.node_ops={lookup(x,H){var k=+H,T=L.getStreamChecked(k),eA={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>T.path}};return eA.parent=eA,eA}},y}},{},"/proc/self/fd")},createStandardStreams(u,y,x){u?L.createDevice("/dev","stdin",u):L.symlink("/dev/tty","/dev/stdin"),y?L.createDevice("/dev","stdout",null,y):L.symlink("/dev/tty","/dev/stdout"),x?L.createDevice("/dev","stderr",null,x):L.symlink("/dev/tty1","/dev/stderr"),L.open("/dev/stdin",0),L.open("/dev/stdout",1),L.open("/dev/stderr",1)},staticInit(){[44].forEach(u=>{L.genericErrors[u]=new L.ErrnoError(u),L.genericErrors[u].stack=""}),L.nameTable=new Array(4096),L.mount(_e,{},"/"),L.createDefaultDirectories(),L.createDefaultDevices(),L.createSpecialDirectories(),L.filesystems={MEMFS:_e}},init(u,y,x){L.initialized=!0,L.createStandardStreams(u,y,x)},quit(){L.initialized=!1;for(var u=0;uthis.length-1||ke<0)){var Ne=ke%this.chunkSize,ni=ke/this.chunkSize|0;return this.getter(ni)[Ne]}}setDataGetter(ke){this.getter=ke}cacheLength(){var ke=new XMLHttpRequest;if(ke.open("HEAD",x,!1),ke.send(null),!(ke.status>=200&&ke.status<300||ke.status===304))throw new Error("Couldn't load "+x+". Status: "+ke.status);var Ne=Number(ke.getResponseHeader("Content-length")),ni,Un=(ni=ke.getResponseHeader("Accept-Ranges"))&&ni==="bytes",q=(ni=ke.getResponseHeader("Content-Encoding"))&&ni==="gzip",fA=1024*1024;Un||(fA=Ne);var PA=(pe,De)=>{if(pe>De)throw new Error("invalid range ("+pe+", "+De+") or no bytes requested!");if(De>Ne-1)throw new Error("only "+Ne+" bytes available! programmer error!");var ot=new XMLHttpRequest;if(ot.open("GET",x,!1),Ne!==fA&&ot.setRequestHeader("Range","bytes="+pe+"-"+De),ot.responseType="arraybuffer",ot.overrideMimeType&&ot.overrideMimeType("text/plain; charset=x-user-defined"),ot.send(null),!(ot.status>=200&&ot.status<300||ot.status===304))throw new Error("Couldn't load "+x+". Status: "+ot.status);return ot.response!==void 0?new Uint8Array(ot.response||[]):et(ot.responseText||"",!0)},Fe=this;Fe.setDataGetter(pe=>{var De=pe*fA,ot=(pe+1)*fA-1;if(ot=Math.min(ot,Ne-1),typeof Fe.chunks[pe]>"u"&&(Fe.chunks[pe]=PA(De,ot)),typeof Fe.chunks[pe]>"u")throw new Error("doXHR failed!");return Fe.chunks[pe]}),(q||!Ne)&&(fA=Ne=1,Ne=this.getter(0).length,fA=Ne,d("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=Ne,this._chunkSize=fA,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<"u"){throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var eA,gA}else var gA={isDevice:!1,url:x};var wA=L.createFile(u,y,gA,H,k);gA.contents?wA.contents=gA.contents:gA.url&&(wA.contents=null,wA.url=gA.url),Object.defineProperties(wA,{usedBytes:{get:function(){return this.contents.length}}});var Ae={},oe=Object.keys(wA.stream_ops);oe.forEach(He=>{var ke=wA.stream_ops[He];Ae[He]=(...Ne)=>(L.forceLoadFile(wA),ke(...Ne))});function Be(He,ke,Ne,ni,Un){var q=He.node.contents;if(Un>=q.length)return 0;var fA=Math.min(q.length-Un,ni);if(q.slice)for(var PA=0;PA(L.forceLoadFile(wA),Be(He,ke,Ne,ni,Un)),Ae.mmap=(He,ke,Ne,ni,Un)=>{L.forceLoadFile(wA);var q=dn(ke);if(!q)throw new L.ErrnoError(48);return Be(He,M,q,ke,Ne),{ptr:q,allocated:!0}},wA.stream_ops=Ae,wA}},Ct={DEFAULT_POLLMASK:5,calculateAt(u,y,x){if(rA.isAbs(y))return y;var H;if(u===-100)H=L.cwd();else{var k=Ct.getStreamFromFD(u);H=k.path}if(y.length==0){if(!x)throw new L.ErrnoError(44);return H}return rA.join2(H,y)},doStat(u,y,x){var H=u(y);_[x>>2]=H.dev,_[x+4>>2]=H.mode,U[x+8>>2]=H.nlink,_[x+12>>2]=H.uid,_[x+16>>2]=H.gid,_[x+20>>2]=H.rdev,j[x+24>>3]=BigInt(H.size),_[x+32>>2]=4096,_[x+36>>2]=H.blocks;var k=H.atime.getTime(),T=H.mtime.getTime(),eA=H.ctime.getTime();return j[x+40>>3]=BigInt(Math.floor(k/1e3)),U[x+48>>2]=k%1e3*1e3*1e3,j[x+56>>3]=BigInt(Math.floor(T/1e3)),U[x+64>>2]=T%1e3*1e3*1e3,j[x+72>>3]=BigInt(Math.floor(eA/1e3)),U[x+80>>2]=eA%1e3*1e3*1e3,j[x+88>>3]=BigInt(H.ino),0},doMsync(u,y,x,H,k){if(!L.isFile(y.node.mode))throw new L.ErrnoError(43);if(H&2)return 0;var T=D.slice(u,u+x);L.msync(y,T,k,x,H)},getStreamFromFD(u){var y=L.getStreamChecked(u);return y},varargs:void 0,getStr(u){var y=Me(u);return y}};function ci(u,y,x,H){try{if(y=Ct.getStr(y),y=Ct.calculateAt(u,y),x&-8)return-28;var k=L.lookupPath(y,{follow:!0}),T=k.node;if(!T)return-44;var eA="";return x&4&&(eA+="r"),x&2&&(eA+="w"),x&1&&(eA+="x"),eA&&L.nodePermissions(T,eA)?-2:0}catch(gA){if(typeof L>"u"||gA.name!=="ErrnoError")throw gA;return-gA.errno}}function Bn(){var u=_[+Ct.varargs>>2];return Ct.varargs+=4,u}var En=Bn;function qn(u,y,x){Ct.varargs=x;try{var H=Ct.getStreamFromFD(u);switch(y){case 0:{var k=Bn();if(k<0)return-28;for(;L.streams[k];)k++;var T;return T=L.dupStream(H,k),T.fd}case 1:case 2:return 0;case 3:return H.flags;case 4:{var k=Bn();return H.flags|=k,0}case 12:{var k=En(),eA=0;return F[k+eA>>1]=2,0}case 13:case 14:return 0}return-28}catch(gA){if(typeof L>"u"||gA.name!=="ErrnoError")throw gA;return-gA.errno}}function Yo(u,y){try{var x=Ct.getStreamFromFD(u);return Ct.doStat(L.stat,x.path,y)}catch(H){if(typeof L>"u"||H.name!=="ErrnoError")throw H;return-H.errno}}function Co(u,y,x){Ct.varargs=x;try{var H=Ct.getStreamFromFD(u);switch(y){case 21509:return H.tty?0:-59;case 21505:{if(!H.tty)return-59;if(H.tty.ops.ioctl_tcgets){var k=H.tty.ops.ioctl_tcgets(H),T=En();_[T>>2]=k.c_iflag||0,_[T+4>>2]=k.c_oflag||0,_[T+8>>2]=k.c_cflag||0,_[T+12>>2]=k.c_lflag||0;for(var eA=0;eA<32;eA++)M[T+eA+17]=k.c_cc[eA]||0;return 0}return 0}case 21510:case 21511:case 21512:return H.tty?0:-59;case 21506:case 21507:case 21508:{if(!H.tty)return-59;if(H.tty.ops.ioctl_tcsets){for(var T=En(),gA=_[T>>2],wA=_[T+4>>2],Ae=_[T+8>>2],oe=_[T+12>>2],Be=[],eA=0;eA<32;eA++)Be.push(M[T+eA+17]);return H.tty.ops.ioctl_tcsets(H.tty,y,{c_iflag:gA,c_oflag:wA,c_cflag:Ae,c_lflag:oe,c_cc:Be})}return 0}case 21519:{if(!H.tty)return-59;var T=En();return _[T>>2]=0,0}case 21520:return H.tty?-28:-59;case 21531:{var T=En();return L.ioctl(H,y,T)}case 21523:{if(!H.tty)return-59;if(H.tty.ops.ioctl_tiocgwinsz){var He=H.tty.ops.ioctl_tiocgwinsz(H.tty),T=En();F[T>>1]=He[0],F[T+2>>1]=He[1]}return 0}case 21524:return H.tty?0:-59;case 21515:return H.tty?0:-59;default:return-28}}catch(ke){if(typeof L>"u"||ke.name!=="ErrnoError")throw ke;return-ke.errno}}function ko(u,y,x,H){try{y=Ct.getStr(y);var k=H&256,T=H&4096;return H=H&-6401,y=Ct.calculateAt(u,y,T),Ct.doStat(k?L.lstat:L.stat,y,x)}catch(eA){if(typeof L>"u"||eA.name!=="ErrnoError")throw eA;return-eA.errno}}function Zo(u,y,x,H){Ct.varargs=H;try{y=Ct.getStr(y),y=Ct.calculateAt(u,y);var k=H?Bn():0;return L.open(y,x,k).fd}catch(T){if(typeof L>"u"||T.name!=="ErrnoError")throw T;return-T.errno}}function wo(u,y){try{return u=Ct.getStr(u),Ct.doStat(L.stat,u,y)}catch(x){if(typeof L>"u"||x.name!=="ErrnoError")throw x;return-x.errno}}var ha=()=>{KA("")},Xo=u=>u%4===0&&(u%100!==0||u%400===0),ra=[0,31,60,91,121,152,182,213,244,274,305,335],Do=[0,31,59,90,120,151,181,212,243,273,304,334],re=u=>{var y=Xo(u.getFullYear()),x=y?ra:Do,H=x[u.getMonth()]+u.getDate()-1;return H},di=9007199254740992,ln=-9007199254740992,Qn=u=>udi?NaN:Number(u);function To(u,y){u=Qn(u);var x=new Date(u*1e3);_[y>>2]=x.getSeconds(),_[y+4>>2]=x.getMinutes(),_[y+8>>2]=x.getHours(),_[y+12>>2]=x.getDate(),_[y+16>>2]=x.getMonth(),_[y+20>>2]=x.getFullYear()-1900,_[y+24>>2]=x.getDay();var H=re(x)|0;_[y+28>>2]=H,_[y+36>>2]=-(x.getTimezoneOffset()*60);var k=new Date(x.getFullYear(),0,1),T=new Date(x.getFullYear(),6,1).getTimezoneOffset(),eA=k.getTimezoneOffset(),gA=(T!=eA&&x.getTimezoneOffset()==Math.min(eA,T))|0;_[y+32>>2]=gA}function Ma(u,y,x,H,k,T,eA){k=Qn(k);try{if(isNaN(k))return 61;var gA=Ct.getStreamFromFD(H),wA=L.mmap(gA,u,k,y,x),Ae=wA.ptr;return _[T>>2]=wA.allocated,U[eA>>2]=Ae,0}catch(oe){if(typeof L>"u"||oe.name!=="ErrnoError")throw oe;return-oe.errno}}function wi(u,y,x,H,k,T){T=Qn(T);try{var eA=Ct.getStreamFromFD(k);x&2&&Ct.doMsync(u,eA,y,H,T)}catch(gA){if(typeof L>"u"||gA.name!=="ErrnoError")throw gA;return-gA.errno}}var Io=(u,y,x)=>Et(u,D,y,x),nr=(u,y,x,H)=>{var k=new Date().getFullYear(),T=new Date(k,0,1),eA=new Date(k,6,1),gA=T.getTimezoneOffset(),wA=eA.getTimezoneOffset(),Ae=Math.max(gA,wA);U[u>>2]=Ae*60,_[y>>2]=+(gA!=wA);var oe=ke=>{var Ne=ke>=0?"-":"+",ni=Math.abs(ke),Un=String(Math.floor(ni/60)).padStart(2,"0"),q=String(ni%60).padStart(2,"0");return`UTC${Ne}${Un}${q}`},Be=oe(gA),He=oe(wA);wADate.now(),Pa=()=>2147483648,Gn=u=>{var y=b.buffer,x=(u-y.byteLength+65535)/65536|0;try{return b.grow(x),O(),1}catch{}},xi=u=>{var y=D.length;u>>>=0;var x=Pa();if(u>x)return!1;for(var H=1;H<=4;H*=2){var k=y*(1+.2/H);k=Math.min(k,u+100663296);var T=Math.min(x,gn(Math.max(u,k),65536)),eA=Gn(T);if(eA)return!0}return!1},Pt={},Sn=()=>s,Bo=()=>{if(!Bo.strings){var u=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",y={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:u,_:Sn()};for(var x in Pt)Pt[x]===void 0?delete y[x]:y[x]=Pt[x];var H=[];for(var x in y)H.push(`${x}=${y[x]}`);Bo.strings=H}return Bo.strings},So=(u,y)=>{for(var x=0;x{var x=0;return Bo().forEach((H,k)=>{var T=y+x;U[u+k*4>>2]=T,So(H,T),x+=H.length+1}),0},VA=(u,y)=>{var x=Bo();U[u>>2]=x.length;var H=0;return x.forEach(k=>H+=k.length+1),U[y>>2]=H,0},me=u=>{g(u,new Ft(u))},dA=(u,y)=>{me(u)},SA=dA;function ae(u){try{var y=Ct.getStreamFromFD(u);return L.close(y),0}catch(x){if(typeof L>"u"||x.name!=="ErrnoError")throw x;return x.errno}}var xe=(u,y,x,H)=>{for(var k=0,T=0;T>2],gA=U[y+4>>2];y+=8;var wA=L.read(u,M,eA,gA,H);if(wA<0)return-1;if(k+=wA,wA>2]=T,0}catch(eA){if(typeof L>"u"||eA.name!=="ErrnoError")throw eA;return eA.errno}}function st(u,y,x,H){y=Qn(y);try{if(isNaN(y))return 61;var k=Ct.getStreamFromFD(u);return L.llseek(k,y,x),j[H>>3]=BigInt(k.position),k.getdents&&y===0&&x===0&&(k.getdents=null),0}catch(T){if(typeof L>"u"||T.name!=="ErrnoError")throw T;return T.errno}}var bt=(u,y,x,H)=>{for(var k=0,T=0;T>2],gA=U[y+4>>2];y+=8;var wA=L.write(u,M,eA,gA,H);if(wA<0)return-1;if(k+=wA,wA>2]=T,0}catch(eA){if(typeof L>"u"||eA.name!=="ErrnoError")throw eA;return eA.errno}}var Ri=u=>{var y=i["_"+u];return y},Ji=(u,y)=>{M.set(u,y)},Vt=u=>Vn(u),Ni=u=>{var y=_A(u)+1,x=Vt(y);return Io(u,x,y),x},ka=(u,y,x,H,k)=>{var T={string:Ne=>{var ni=0;return Ne!=null&&Ne!==0&&(ni=Ni(Ne)),ni},array:Ne=>{var ni=Vt(Ne.length);return Ji(Ne,ni),ni}};function eA(Ne){return y==="string"?Me(Ne):y==="boolean"?!!Ne:Ne}var gA=Ri(u),wA=[],Ae=0;if(H)for(var oe=0;oe(i._viz_set_y_invert=gt.A)(u),i._viz_set_reduce=u=>(i._viz_set_reduce=gt.B)(u),i._viz_get_graphviz_version=()=>(i._viz_get_graphviz_version=gt.C)(),i._free=u=>(i._free=gt.D)(u),i._malloc=u=>(i._malloc=gt.E)(u),i._viz_get_plugin_list=u=>(i._viz_get_plugin_list=gt.G)(u),i._viz_create_graph=(u,y,x)=>(i._viz_create_graph=gt.H)(u,y,x),i._viz_read_one_graph=u=>(i._viz_read_one_graph=gt.I)(u),i._viz_string_dup=(u,y)=>(i._viz_string_dup=gt.J)(u,y),i._viz_string_dup_html=(u,y)=>(i._viz_string_dup_html=gt.K)(u,y),i._viz_string_free=(u,y)=>(i._viz_string_free=gt.L)(u,y),i._viz_string_free_html=(u,y)=>(i._viz_string_free_html=gt.M)(u,y),i._viz_add_node=(u,y)=>(i._viz_add_node=gt.N)(u,y),i._viz_add_edge=(u,y,x)=>(i._viz_add_edge=gt.O)(u,y,x),i._viz_add_subgraph=(u,y)=>(i._viz_add_subgraph=gt.P)(u,y),i._viz_set_default_graph_attribute=(u,y,x)=>(i._viz_set_default_graph_attribute=gt.Q)(u,y,x),i._viz_set_default_node_attribute=(u,y,x)=>(i._viz_set_default_node_attribute=gt.R)(u,y,x),i._viz_set_default_edge_attribute=(u,y,x)=>(i._viz_set_default_edge_attribute=gt.S)(u,y,x),i._viz_set_attribute=(u,y,x)=>(i._viz_set_attribute=gt.T)(u,y,x),i._viz_free_graph=u=>(i._viz_free_graph=gt.U)(u),i._viz_create_context=()=>(i._viz_create_context=gt.V)(),i._viz_free_context=u=>(i._viz_free_context=gt.W)(u),i._viz_layout=(u,y,x)=>(i._viz_layout=gt.X)(u,y,x),i._viz_free_layout=(u,y)=>(i._viz_free_layout=gt.Y)(u,y),i._viz_reset_errors=()=>(i._viz_reset_errors=gt.Z)(),i._viz_render=(u,y,x)=>(i._viz_render=gt._)(u,y,x);var Fi=(u,y)=>(Fi=gt.$)(u,y),Oi=u=>(Oi=gt.aa)(u),Vn=u=>(Vn=gt.ba)(u),hn=()=>(hn=gt.ca)();i.ccall=ka,i.getValue=Ee,i.PATH=rA,i.UTF8ToString=Me,i.stringToUTF8=Io,i.lengthBytesUTF8=_A,i.FS=L;var Mt,sa;YA=function u(){Mt||Ho(),Mt||(YA=u)};function Ho(){if(hA>0||!sa&&(sa=1,iA(),hA>0))return;function u(){Mt||(Mt=1,i.calledRun=1,!S&&(BA(),n(i),oA()))}u()}return Ho(),A=a,A}})(),GgA=[[/^Error: (.*)/,"error"],[/^Warning: (.*)/,"warning"]];function ijA(t){return t.map(e=>{for(let A=0;A{if(typeof A.name!="string")throw new Error("image name must be a string");if(typeof A.width!="number"&&typeof A.width!="string")throw new Error("image width must be a number or string");if(typeof A.height!="number"&&typeof A.height!="string")throw new Error("image height must be a number or string");let i=t.PATH.join("/",A.name),n=` - -`;return t.FS.createPath("/",t.PATH.dirname(i)),t.FS.writeFile(i,n),i}):[]}function rjA(t,e){for(let A of e)t.FS.analyzePath(A).exists&&t.FS.unlink(A)}function sjA(t,e,A){let i;try{let n=t.lengthBytesUTF8(e);return i=t.ccall("malloc","number",["number"],[n+1]),t.stringToUTF8(e,i,n+1),t.ccall("viz_read_one_graph","number",["number"],[i])}finally{i&&t.ccall("free","number",["number"],[i])}}function gjA(t,e,A){let i=t.ccall("viz_create_graph","number",["string","number","number"],[e.name,typeof e.directed<"u"?e.directed:!0,typeof e.strict<"u"?e.strict:!1]);return YgA(t,i,e),i}function YgA(t,e,A){TgA(t,e,A),A.nodes&&A.nodes.forEach(i=>{if(typeof i.name>"u")throw new Error("nodes must have a name");let n=t.ccall("viz_add_node","number",["number","string"],[e,String(i.name)]);i.attributes&&JgA(t,e,n,i.attributes)}),A.edges&&A.edges.forEach(i=>{if(typeof i.tail>"u")throw new Error("edges must have a tail");if(typeof i.head>"u")throw new Error("edges must have a head");let n=t.ccall("viz_add_edge","number",["number","string","string"],[e,String(i.tail),String(i.head)]);i.attributes&&JgA(t,e,n,i.attributes)}),A.subgraphs&&A.subgraphs.forEach(i=>{let n=t.ccall("viz_add_subgraph","number",["number","string"],[e,typeof i.name<"u"?String(i.name):0]);YgA(t,n,i)})}function TgA(t,e,A){if(A.graphAttributes)for(let[i,n]of Object.entries(A.graphAttributes))hb(t,e,n,o=>{t.ccall("viz_set_default_graph_attribute","number",["number","string","number"],[e,i,o])});if(A.nodeAttributes)for(let[i,n]of Object.entries(A.nodeAttributes))hb(t,e,n,o=>{t.ccall("viz_set_default_node_attribute","number",["number","string","number"],[e,i,o])});if(A.edgeAttributes)for(let[i,n]of Object.entries(A.edgeAttributes))hb(t,e,n,o=>{t.ccall("viz_set_default_edge_attribute","number",["number","string","number"],[e,i,o])})}function JgA(t,e,A,i){for(let[n,o]of Object.entries(i))hb(t,e,o,a=>{t.ccall("viz_set_attribute","number",["number","string","number"],[A,n,a])})}function hb(t,e,A,i){let n;if(typeof A=="object"&&"html"in A?n=t.ccall("viz_string_dup_html","number",["number","string"],[e,String(A.html)]):n=t.ccall("viz_string_dup","number",["number","string"],[e,String(A)]),n==0)throw new Error("couldn't dup string");i(n),typeof A=="object"&&"html"in A?t.ccall("viz_string_free_html","number",["number","number"],[e,n]):t.ccall("viz_string_free","number",["number","number"],[e,n])}var JK=class{constructor(e){this.module=e}get graphvizVersion(){return ojA(this.module)}get formats(){return KgA(this.module,"device")}get engines(){return KgA(this.module,"layout")}renderFormats(e,A,i={}){return UgA(this.module,e,A,cA({engine:"dot"},i))}render(e,A={}){let i;A.format===void 0?i="dot":i=A.format;let n=UgA(this.module,e,[i],cA({engine:"dot"},A));return n.status==="success"&&(n.output=n.output[i]),n}renderString(e,A={}){let i=this.render(e,A);if(i.status!=="success")throw new Error(i.errors.find(n=>n.level=="error")?.message||"render failed");return i.output}renderSVGElement(e,A={}){let i=this.renderString(e,Ge(cA({},A),{format:"svg"})),n;return typeof A.trustedTypePolicy<"u"?n=A.trustedTypePolicy.createHTML(i):n=i,new DOMParser().parseFromString(n,"image/svg+xml").documentElement}renderJSON(e,A={}){let i=this.renderString(e,Ge(cA({},A),{format:"json"}));return JSON.parse(i)}};function HgA(){return tjA().then(t=>new JK(t))}var ub=class t{render(e){return nt(this,null,function*(){let A={format:"svg",engine:"dot"};return(yield HgA()).renderString(e,A)})}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var fb=class t{sendFeedback(e,A,i){return se(void 0)}getFeedback(e,A){return se(void 0)}deleteFeedback(e,A){return se(void 0)}getPositiveFeedbackReasons(){return se([])}getNegativeFeedbackReasons(){return se([])}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var mb=new yA("AudioPlayingService");var pb=new yA("VideoService");var wb=new yA("WebSocketService");var Db=class t{createMessagePartFromFile(e){return nt(this,null,function*(){return{inlineData:{displayName:e.name,data:yield this.readFileAsBytes(e),mimeType:e.type}}})}readFileAsBytes(e){return new Promise((A,i)=>{let n=new FileReader;n.onload=o=>{let a=o.target.result.split(",")[1];A(a)},n.onerror=i,n.readAsDataURL(e)})}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var yb=class t extends j7{createFunctionResponse(e,A,i){return{function_response:{id:e,name:A,response:i}}}static \u0275fac=(()=>{let e;return function(i){return(e||(e=Bi(t)))(i||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var vb=class t extends m8{sanitizer=h($s);windowOpen(e,A,i,n){return e.open(A,i,n)}createObjectUrl(e){return URL.createObjectURL(e)}openBlobUrl(e){let A=this.createObjectUrl(e);return this.windowOpen(window,A,"_blank")}setAnchorHref(e,A){e.href=A}bypassSecurityTrustHtml(e){return this.sanitizer.bypassSecurityTrustHtml(e)}bypassSecurityTrustUrl(e){return this.sanitizer.bypassSecurityTrustUrl(e)}static \u0275fac=(()=>{let e;return function(i){return(e||(e=Bi(t)))(i||t)}})();static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var bb=class t{constructor(e){this.http=e}apiServerDomain=zr.getApiServerBaseUrl();createSession(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`;return this.http.post(i,null)}return new $i}listSessions(e,A){if(this.apiServerDomain!=null){let i=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`;return this.http.get(i).pipe(fe(n=>({items:n,nextPageToken:""})))}return se({items:[],nextPageToken:""})}deleteSession(e,A,i){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}`;return this.http.delete(n)}getSession(e,A,i){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions/${i}`;return this.http.get(n)}importSession(e,A,i){if(this.apiServerDomain!=null){let n=this.apiServerDomain+`/apps/${A}/users/${e}/sessions`;return this.http.post(n,{appName:A,userId:e,events:i})}return new $i}canEdit(e,A){return se(!0)}static \u0275fac=function(A){return new(A||t)(xo(Xs))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Mb=class t{audioRecordingService=h(cb);videoService=h(pb);webSocketService=h(wb);audioIntervalId=void 0;videoIntervalId=void 0;constructor(){}startAudioChat(n){return nt(this,arguments,function*({appName:e,userId:A,sessionId:i}){let o=window.location.protocol==="https:"?"wss":"ws";this.webSocketService.connect(`${o}://${zr.getWSServerUrl()}/run_live?app_name=${e}&user_id=${A}&session_id=${i}`),yield this.startAudioStreaming()})}stopAudioChat(){this.stopAudioStreaming(),this.webSocketService.closeConnection()}startAudioStreaming(){return nt(this,null,function*(){try{yield this.audioRecordingService.startRecording(),this.audioIntervalId=setInterval(()=>this.sendBufferedAudio(),250)}catch(e){console.error("Error accessing microphone:",e)}})}stopAudioStreaming(){clearInterval(this.audioIntervalId),this.audioIntervalId=void 0,this.audioRecordingService.stopRecording()}sendBufferedAudio(){let e=this.audioRecordingService.getCombinedAudioBuffer();if(!e)return;let A={blob:{mime_type:"audio/pcm",data:e}};this.webSocketService.sendMessage(A),this.audioRecordingService.cleanAudioBuffer()}startVideoChat(o){return nt(this,arguments,function*({appName:e,userId:A,sessionId:i,videoContainer:n}){let a=window.location.protocol==="https:"?"wss":"ws";this.webSocketService.connect(`${a}://${zr.getWSServerUrl()}/run_live?app_name=${e}&user_id=${A}&session_id=${i}`),yield this.startAudioStreaming(),yield this.startVideoStreaming(n)})}stopVideoChat(e){this.stopAudioStreaming(),this.stopVideoStreaming(e),this.webSocketService.closeConnection()}startVideoStreaming(e){return nt(this,null,function*(){try{yield this.videoService.startRecording(e),this.videoIntervalId=setInterval(()=>nt(this,null,function*(){return yield this.sendCapturedFrame()}),1e3)}catch(A){console.error("Error accessing camera:",A)}})}sendCapturedFrame(){return nt(this,null,function*(){let e=yield this.videoService.getCapturedFrame();if(!e)return;let A={blob:{mime_type:"image/jpeg",data:e}};this.webSocketService.sendMessage(A)})}stopVideoStreaming(e){clearInterval(this.videoIntervalId),this.videoIntervalId=void 0,this.videoService.stopRecording(e)}onStreamClose(){return this.webSocketService.onCloseReason()}closeStream(){this.webSocketService.closeConnection()}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var acA=su(ocA());var Sb=class t{stc(e){return(0,acA.default)(e)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var xb=class t{THEME_STORAGE_KEY="adk-theme-preference";currentTheme=jA(this.getInitialTheme());constructor(){Ga(()=>{this.applyTheme(this.currentTheme())})}getInitialTheme(){let e=window.localStorage.getItem(this.THEME_STORAGE_KEY);return e==="light"||e==="dark"?e:"dark"}applyTheme(e){let A=document.documentElement;A.classList.remove("light-theme","dark-theme"),A.classList.add(`${e}-theme`),A.style.colorScheme=e,window.localStorage.setItem(this.THEME_STORAGE_KEY,e)}toggleTheme(){this.currentTheme.update(e=>e==="light"?"dark":"light")}setTheme(e){this.currentTheme.set(e)}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Rb=class t{selectedTraceRowSource=new Ht(void 0);selectedTraceRow$=this.selectedTraceRowSource.asObservable();eventDataSource=new Ht(void 0);eventData$=this.eventDataSource.asObservable();hoveredMessageIndicesSource=new Ht([]);hoveredMessageIndices$=this.hoveredMessageIndicesSource.asObservable();messagesSource=new Ht([]);messages$=this.messagesSource.asObservable();selectedRow(e){this.selectedTraceRowSource.next(e)}setEventData(e){this.eventDataSource.next(e)}setMessages(e){this.messagesSource.next(e)}setHoveredMessages(e,A){if(!e){this.hoveredMessageIndicesSource.next([]);return}let i=e.attributes,n=i&&i["gcp.vertex.agent.event_id"],o=[];for(let[a,r]of this.messagesSource.value.entries())r.role!=="user"&&this.eventDataSource.value?.get(r.eventId)?.invocationId===A&&(!n||i["gcp.vertex.agent.event_id"]===r.eventId)&&o.push(a);this.hoveredMessageIndicesSource.next(o)}resetTraceService(){this.eventDataSource.next(void 0),this.messagesSource.next([]),this.hoveredMessageIndicesSource.next([])}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Nb=class t{_isSessionLoading=new Ht(!1);_isSessionListLoading=new Ht(!1);_isEventRequestResponseLoading=new Ht(!1);_isMessagesLoading=new Ht(!1);_newMessagesLoadedResponse=new XA;_newMessagesLoadingFailedResponse=new XA;featureFlagService=h(vr);isSessionLoading(){return this._isSessionLoading.pipe(f2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),Ps({bufferSize:1,refCount:!0}))}setIsSessionLoading(e){this._isSessionLoading.next(e)}isSessionListLoading(){return this._isSessionListLoading.pipe(f2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),Ps({bufferSize:1,refCount:!0}))}setIsSessionListLoading(e){this._isSessionListLoading.next(e)}isEventRequestResponseLoading(){return this._isEventRequestResponseLoading.pipe(f2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),Ps({bufferSize:1,refCount:!0}))}setIsEventRequestResponseLoading(e){this._isEventRequestResponseLoading.next(e)}setIsMessagesLoading(e){this._isMessagesLoading.next(e)}isMessagesLoading(){return this._isMessagesLoading.pipe(f2(this.featureFlagService.isLoadingAnimationsEnabled()),fe(([e,A])=>e&&A),Ps({bufferSize:1,refCount:!0}))}lazyLoadMessages(e,A,i){throw new Error("Not implemented")}onNewMessagesLoaded(){return this._newMessagesLoadedResponse}onNewMessagesLoadingFailed(){return this._newMessagesLoadingFailedResponse}static \u0275fac=function(A){return new(A||t)};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var Fb=class t{mediaRecorder;stream;renderer;videoElement;videoBuffer=[];constructor(e){this.renderer=e.createRenderer(null,null)}createVideoElement(e){e?.nativeElement&&(this.clearVideoElement(e),this.videoElement=this.renderer.createElement("video"),this.renderer.setAttribute(this.videoElement,"width","400"),this.renderer.setAttribute(this.videoElement,"height","300"),this.renderer.setAttribute(this.videoElement,"autoplay","true"),this.renderer.setAttribute(this.videoElement,"muted","true"),this.renderer.appendChild(e.nativeElement,this.videoElement))}startRecording(e){return nt(this,null,function*(){this.createVideoElement(e);try{this.stream=yield navigator.mediaDevices.getUserMedia({video:!0}),this.videoElement&&(this.videoElement.srcObject=this.stream),this.mediaRecorder=new MediaRecorder(this.stream,{mimeType:"video/webm"}),this.mediaRecorder.start(1e3)}catch(A){console.error("Error accessing camera/microphone:",A)}})}getCapturedFrame(){return nt(this,null,function*(){try{let e=yield this.captureFrame();return this.blobToUint8Array(e)}catch(e){console.error("Error capturing frame:",e);return}})}blobToUint8Array(e){return nt(this,null,function*(){let A=yield e.arrayBuffer();return new Uint8Array(A)})}captureFrame(){return nt(this,null,function*(){return new Promise((e,A)=>{try{if(!this.videoElement){A(new Error("Video element not available"));return}let i=document.createElement("canvas");i.width=this.videoElement.videoWidth,i.height=this.videoElement.videoHeight;let n=i.getContext("2d");if(!n){A(new Error("Canvas context not supported"));return}n.drawImage(this.videoElement,0,0,i.width,i.height),i.toBlob(o=>{o?e(o):A(new Error("Failed to create image blob"))},"image/png")}catch(i){A(i)}})})}stopRecording(e){this.mediaRecorder&&this.mediaRecorder.stop(),this.stream&&this.stream.getTracks().forEach(A=>A.stop()),this.clearVideoElement(e)}clearVideoElement(e){let A=e.nativeElement.querySelector("video");A&&this.renderer.removeChild(e.nativeElement,A)}static \u0275fac=function(A){return new(A||t)(xo(Kr))};static \u0275prov=zA({token:t,factory:t.\u0275fac,providedIn:"root"})};var dVA={url:"",deserializer:t=>JSON.parse(t.data),serializer:t=>JSON.stringify(t)},BVA="WebSocketSubject.error must be called with an object with an error code, and an optional reason: { code: number, reason: string }",qm=class t extends aU{constructor(e,A){if(super(),this._socket=null,e instanceof $i)this.destination=A,this.source=e;else{let i=this._config=Object.assign({},dVA);if(this._output=new XA,typeof e=="string")i.url=e;else for(let n in e)e.hasOwnProperty(n)&&(i[n]=e[n]);if(!i.WebSocketCtor&&WebSocket)i.WebSocketCtor=WebSocket;else if(!i.WebSocketCtor)throw new Error("no WebSocket constructor can be found");this.destination=new ql}}lift(e){let A=new t(this._config,this.destination);return A.operator=e,A.source=this,A}_resetState(){this._socket=null,this.source||(this.destination=new ql),this._output=new XA}multiplex(e,A,i){let n=this;return new $i(o=>{try{n.next(e())}catch(r){o.error(r)}let a=n.subscribe({next:r=>{try{i(r)&&o.next(r)}catch(s){o.error(s)}},error:r=>o.error(r),complete:()=>o.complete()});return()=>{try{n.next(A())}catch(r){o.error(r)}a.unsubscribe()}})}_connectSocket(){let{WebSocketCtor:e,protocol:A,url:i,binaryType:n}=this._config,o=this._output,a=null;try{a=A?new e(i,A):new e(i),this._socket=a,n&&(this._socket.binaryType=n)}catch(s){o.error(s);return}let r=new Jn(()=>{this._socket=null,a&&a.readyState===1&&a.close()});a.onopen=s=>{let{_socket:g}=this;if(!g){a.close(),this._resetState();return}let{openObserver:l}=this._config;l&&l.next(s);let C=this.destination;this.destination=iU.create(I=>{if(a.readyState===1)try{let{serializer:d}=this._config;a.send(d(I))}catch(d){this.destination.error(d)}},I=>{let{closingObserver:d}=this._config;d&&d.next(void 0),I&&I.code?a.close(I.code,I.reason):o.error(new TypeError(BVA)),this._resetState()},()=>{let{closingObserver:I}=this._config;I&&I.next(void 0),a.close(),this._resetState()}),C&&C instanceof ql&&r.add(C.subscribe(this.destination))},a.onerror=s=>{this._resetState(),o.error(s)},a.onclose=s=>{a===this._socket&&this._resetState();let{closeObserver:g}=this._config;g&&g.next(s),s.wasClean?o.complete():o.error(s)},a.onmessage=s=>{try{let{deserializer:g}=this._config;o.next(g(s))}catch(g){o.error(g)}}}_subscribe(e){let{source:A}=this;return A?A.subscribe(e):(this._socket||this._connectSocket(),this._output.subscribe(e),e.add(()=>{let{_socket:i}=this;this._output.observers.length===0&&(i&&(i.readyState===1||i.readyState===0)&&i.close(),this._resetState())}),e)}unsubscribe(){let{_socket:e}=this;e&&(e.readyState===1||e.readyState===0)&&e.close(),this._resetState(),super.unsubscribe()}};var _b=class t{audioPlayingService=h(mb);socket$;messages$=new Ht("");audioBuffer=[];audioIntervalId=null;closeReasonSubject=new XA;connect(e){this.socket$=new qm({url:e,serializer:A=>JSON.stringify(A),deserializer:A=>A.data,closeObserver:{next:A=>{this.emitWsCloseReason(A.reason)}}}),this.socket$.subscribe(A=>{this.handleIncomingAudio(A),this.messages$.next(A)},A=>{console.error("WebSocket error:",A)}),this.audioIntervalId=setInterval(()=>this.playIncomingAudio(),250)}playIncomingAudio(){this.audioPlayingService.playAudio(this.audioBuffer),this.audioBuffer=[]}sendMessage(e){if(e.blob.data=this.arrayBufferToBase64(e.blob.data.buffer),!this.socket$||this.socket$.closed){console.error("WebSocket is not open.");return}this.socket$.next(e)}closeConnection(){clearInterval(this.audioIntervalId),this.audioIntervalId=null,this.socket$&&this.socket$.complete()}getMessages(){return this.messages$.asObservable()}arrayBufferToBase64(e){let A="",i=new Uint8Array(e),n=i.byteLength;for(let o=0;ot.json()).then(t=>{window.runtimeConfig=t,KU(Au,{providers:[dU(UU,Nn,JU,nb,gl,Yr,Ns),{provide:El,useClass:bb},{provide:sg,useClass:Kh},{provide:S7,useClass:fb},{provide:wb,useClass:_b},{provide:Cb,useValue:"./assets/audio-processor.js"},{provide:cb,useClass:Ib},{provide:mb,useClass:lb},{provide:pb,useClass:Fb},{provide:p8,useClass:Mb},{provide:CE,useClass:Eb},{provide:h0,useClass:Bb},{provide:u8,useClass:gb},{provide:cE,useClass:db},{provide:T2,useClass:Rb},{provide:vr,useClass:Qb},{provide:IE,useClass:ub},{provide:dE,useClass:Sb},{provide:u0,useClass:vb},{provide:f8,useClass:Db},{provide:TU,useValue:OU},{provide:zU,useValue:LgA},{provide:q7,useClass:yb},{provide:Gh,useValue:rb},...t.logo?[{provide:Z7,useValue:ab}]:[],{provide:Q0,useClass:sb},{provide:P7,useValue:$c},mT(),e4(),{provide:w8,useClass:o0},{provide:Ql,useClass:Nb},{provide:Fv,useClass:xb}]}).catch(e=>console.error(e))}); diff --git a/src/google/adk/cli/browser/styles-SI5RXIFC.css b/src/google/adk/cli/browser/styles-SI5RXIFC.css deleted file mode 100644 index d69c02fdf5..0000000000 --- a/src/google/adk/cli/browser/styles-SI5RXIFC.css +++ /dev/null @@ -1 +0,0 @@ -html,html.light-theme,html.dark-theme{--mat-sys-corner-extra-large: 28px;--mat-sys-corner-extra-large-top: 28px 28px 0 0;--mat-sys-corner-extra-small: 4px;--mat-sys-corner-extra-small-top: 4px 4px 0 0;--mat-sys-corner-full: 9999px;--mat-sys-corner-large: 16px;--mat-sys-corner-large-end: 0 16px 16px 0;--mat-sys-corner-large-start: 16px 0 0 16px;--mat-sys-corner-large-top: 16px 16px 0 0;--mat-sys-corner-medium: 12px;--mat-sys-corner-none: 0;--mat-sys-corner-small: 8px;--mat-sys-dragged-state-layer-opacity: .16;--mat-sys-focus-state-layer-opacity: .12;--mat-sys-hover-state-layer-opacity: .08;--mat-sys-pressed-state-layer-opacity: .12}html{font-family:Google Sans,Helvetica Neue,sans-serif!important}body{height:100vh;margin:0}markdown p{margin-block-start:.5em;margin-block-end:.5em}.cdk-overlay-container{z-index:9999!important}.mat-mdc-menu-panel{z-index:10000!important}.mat-mdc-menu-panel,.mat-mdc-menu-panel .mat-mdc-menu-content{background-color:var(--mdc-dialog-container-color)!important}.mat-mdc-menu-item,.mat-mdc-menu-item .mdc-list-item__primary-text{color:var(--mdc-dialog-supporting-text-color)!important}.mat-mdc-menu-item:hover,.mat-mdc-menu-item:focus{background-color:var(--builder-tool-item-hover-background-color)!important}.mat-mdc-menu-item .mat-icon{color:var(--mdc-dialog-supporting-text-color)!important}.mat-mdc-snack-bar-container{--mdc-snackbar-container-color: var(--mdc-dialog-container-color) !important;--mdc-snackbar-supporting-text-color: var(--mdc-dialog-supporting-text-color) !important;--mat-snack-bar-button-color: var(--builder-text-link-color) !important}.mdc-snackbar__surface{background-color:var(--mdc-dialog-container-color)!important}.mdc-snackbar__label,.mat-mdc-snack-bar-label{color:var(--mdc-dialog-supporting-text-color)!important}.mat-mdc-snack-bar-action{color:var(--builder-text-link-color)!important}html.dark-theme{--mat-sys-primary: black;--mdc-checkbox-selected-icon-color: white;--mat-sys-background: #131314;--mat-tab-header-active-label-text-color: #8ab4f8;--mat-tab-header-active-hover-label-text-color: #8ab4f8;--mat-tab-header-active-focus-label-text-color: #8ab4f8;--mat-tab-header-label-text-weight: 500;--mdc-text-button-label-text-color: #89b4f8;--mat-select-trigger-text-color: #8ab4f8;--mat-select-panel-background-color: #2b2b2f;--mat-option-label-text-color: #e8eaed;--mat-option-hover-state-layer-color: rgba(255, 255, 255, .08);--mat-option-focus-state-layer-color: rgba(255, 255, 255, .08);--mat-option-selected-state-layer-color: rgba(138, 180, 248, .24);--mat-form-field-container-text-color: white;--mdc-filled-text-field-input-text-color: white;--mdc-filled-text-field-label-text-color: #9aa0a6;--mdc-filled-text-field-container-color: #303030;--mdc-outlined-text-field-input-text-color: white;--mdc-outlined-text-field-label-text-color: #9aa0a6;--mat-form-field-state-layer-color: white;--mdc-dialog-supporting-text-color: #e8eaed;--mat-dialog-content-text-color: #e8eaed;--mat-expansion-container-text-color: #e8eaed;--mat-expansion-header-text-color: #e8eaed;--adk-web-text-color-light-gray: #c4c7c5}html.light-theme{--mat-sys-primary: #9AA0A6;--mdc-checkbox-selected-icon-color: #305f9d;--mat-sys-background: #ffffff;--mat-tab-header-active-label-text-color: #305f9d;--mat-tab-header-active-hover-label-text-color: #305f9d;--mat-tab-header-active-focus-label-text-color: #305f9d;--mat-tab-header-label-text-weight: 500;--mdc-text-button-label-text-color: #305f9d;--mat-select-trigger-text-color: #202124;--mat-select-panel-background-color: #ffffff;--mat-option-label-text-color: #202124;--mat-option-hover-state-layer-color: rgba(0, 0, 0, .04);--mat-option-focus-state-layer-color: rgba(0, 0, 0, .04);--mat-option-selected-state-layer-color: rgba(48, 95, 157, .12);--mat-form-field-container-text-color: #202124;--mdc-filled-text-field-input-text-color: #202124;--mdc-filled-text-field-label-text-color: #5f5e5e;--mdc-filled-text-field-container-color: #f3f0f0;--mdc-outlined-text-field-input-text-color: #202124;--mdc-outlined-text-field-label-text-color: #5f5e5e;--mat-form-field-state-layer-color: #202124;--mdc-dialog-supporting-text-color: #202124;--mat-dialog-content-text-color: #202124;--mat-expansion-container-text-color: #202124;--mat-expansion-header-text-color: #202124;--adk-web-text-color-light-gray: #c4c7c5}html.dark-theme{--mdc-dialog-subhead-font-family: "Google Sans";--mdc-dialog-subhead-font-style: normal;--mdc-dialog-subhead-font-weight: 400;--mdc-dialog-subhead-font-size: 24px;--mdc-dialog-subhead-line-height: 32px;--mdc-dialog-subhead-color: #e3e3e3;--mat-dialog-container-color: #2b2b2f;--mat-dialog-subhead-color: white}html.light-theme{--mdc-dialog-subhead-font-family: "Google Sans";--mdc-dialog-subhead-font-style: normal;--mdc-dialog-subhead-font-weight: 400;--mdc-dialog-subhead-font-size: 24px;--mdc-dialog-subhead-line-height: 32px;--mdc-dialog-subhead-color: #202124;--mat-dialog-container-color: #ffffff;--mat-dialog-subhead-color: #202124}.mat-mdc-dialog-container .mat-mdc-dialog-title.mdc-dialog__title{font-family:var(--mdc-dialog-subhead-font-family);font-style:var(--mdc-dialog-subhead-font-style);font-weight:var(--mdc-dialog-subhead-font-weight);font-size:var(--mdc-dialog-subhead-font-size);line-height:var(--mdc-dialog-subhead-line-height);color:var(--mdc-dialog-subhead-color)}html.dark-theme{--chat-panel-function-event-button-background-color: white;--chat-panel-function-event-button-highlight-background-color: rgb( 15, 82, 35 );--chat-panel-function-event-button-highlight-border-color: rgb(15, 82, 35);--chat-panel-function-event-button-highlight-color: white;--chat-panel-user-message-message-card-background-color: #004a77;--chat-panel-user-message-message-card-color: white;--chat-panel-bot-message-message-card-background-color: #303030;--chat-panel-bot-message-message-card-color: white;--chat-panel-bot-message-focus-within-message-card-background-color: #131314;--chat-panel-bot-message-focus-within-message-card-border-color: #8ab4f8;--chat-panel-message-textarea-background-color: #303030;--chat-panel-message-textarea-focus-background-color: #131314;--chat-panel-eval-compare-container-background-color: #484848;--chat-panel-actual-result-border-right-color: #8a8686;--chat-panel-eval-response-header-border-bottom-color: #8a8686;--chat-panel-header-expected-color: #44c265;--chat-panel-header-actual-color: #ff8983;--chat-panel-eval-pass-color: #44c265;--chat-panel-eval-fail-color: #ff8983;--chat-panel-input-field-textarea-color: white;--chat-panel-input-field-textarea-placeholder-color: #8e918f;--chat-panel-input-field-textarea-caret-color: white;--chat-panel-input-field-button-color: white;--chat-panel-input-field-button-background-color: rgb(51, 53, 55);--chat-panel-mat-mdc-mini-fab-background-color: white;--chat-panel-mat-mdc-mini-fab-mat-icon-color: black;--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color: #8e918f;--chat-panel-delete-button-background-color: rgba(0, 0, 0, .7);--chat-panel-delete-button-color: white;--chat-panel-file-container-background-color: #1e1e1e;--chat-panel-thought-chip-background-color: #8ab4f8;--chat-panel-link-style-button-color: #007bff;--artifact-tab-download-button-background-color: #8ab4f8;--artifact-tab-white-separator-border-top-color: white;--artifact-tab-version-select-container-background-color: #212123;--artifact-tab-link-style-button-color: #007bff;--artifact-tab-link-style-button-hover-color: #0056b3;--artifact-tab-link-style-button-focus-outline-color: #007bff;--artifact-tab-link-style-button-active-color: #004085;--artifact-tab-link-style-button-disabled-color: #6c757d;--audio-player-container-background-color: #f0f0f0;--audio-player-container-box-shadow-color: rgba(0, 0, 0, .1);--audio-player-custom-controls-button-background-color: #007bff;--audio-player-custom-controls-button-color: white;--audio-player-custom-controls-button-hover-background-color: #0056b3;--chat-drawer-container-background-color: #131314;--chat-event-container-color: white;--chat-card-background-color: #131314;--chat-function-event-button-background-color: white;--chat-function-event-button-highlight-background-color: rgb(15, 82, 35);--chat-function-event-button-highlight-border-color: rgb(15, 82, 35);--chat-function-event-button-highlight-color: white;--chat-user-message-message-card-background-color: #004a77;--chat-user-message-message-card-color: white;--chat-bot-message-message-card-background-color: #303030;--chat-bot-message-message-card-color: white;--chat-bot-message-focus-within-message-card-background-color: #131314;--chat-bot-message-focus-within-message-card-border-color: #8ab4f8;--chat-message-textarea-background-color: #303030;--chat-message-textarea-focus-background-color: #131314;--chat-eval-compare-container-background-color: #484848;--chat-actual-result-border-right-color: #8a8686;--chat-eval-response-header-border-bottom-color: #8a8686;--chat-header-expected-color: #44c265;--chat-header-actual-color: #ff8983;--chat-eval-pass-color: #44c265;--chat-eval-fail-color: #ff8983;--chat-side-drawer-background-color: #1b1b1b;--chat-side-drawer-color: white;--chat-file-item-background-color: #eee;--chat-empty-state-container-color: #eee;--chat-warning-color: #ffc185;--chat-error-color: #ff4545;--chat-mat-mdc-unelevated-button-color: #202124;--chat-mat-mdc-unelevated-button-background-color: #8ab4f8;--chat-mdc-linear-progress-buffer-dots-background-color: white;--chat-mat-mdc-text-field-wrapper-border-color: #8e918f;--chat-segment-key-color: lightgray;--chat-bottom-resize-handler-background-color: #5f6368;--chat-readonly-badge-background-color: #ff8983;--chat-readonly-badge-color: #202124;--chat-trace-detail-container-background-color: #1b1b1b;--chat-toolbar-background-color: #1b1b1b;--chat-toolbar-edit-mode-background-color: #44c2651a;--chat-toolbar-session-text-color: #fdfdfd;--chat-toolbar-session-id-color: #9aa0a6;--chat-toolbar-icon-color: #c4c7c5;--chat-toolbar-new-session-color: #9aa0a6;--chat-toolbar-sse-toggle-label-text-color: #e8eaed;--chat-toolbar-sse-toggle-unselected-track-color: #5f6368;--chat-toolbar-sse-toggle-unselected-handle-color: #9aa0a6;--chat-toolbar-sse-toggle-selected-track-color: #8ab4f9;--chat-toolbar-sse-toggle-selected-handle-color: #1b73e8;--chat-toolbar-sse-toggle-track-outline-color: #1b73e8;--chat-mat-drawer-border-right-color: #444746;--edit-json-dialog-container-box-shadow-color: rgba(0, 0, 0, .4);--eval-tab-eval-set-actions-color: #9aa0a6;--eval-tab-empty-eval-info-background-color: #202124;--eval-tab-empty-eval-info-box-shadow-color1: rgba(0, 0, 0, .15);--eval-tab-empty-eval-info-box-shadow-color2: rgba(0, 0, 0, .3);--eval-tab-info-title-color: #e8eaed;--eval-tab-info-detail-color: #e8eaed;--eval-tab-info-create-color: #8ab4f8;--eval-tab-selected-eval-case-color: #8ab4f8;--eval-tab-save-session-btn-background-color1: rgba(138, 180, 248, .24);--eval-tab-save-session-btn-background-color2: #202124;--eval-tab-save-session-btn-text-color: #d2e3fc;--eval-tab-run-eval-btn-border-color: #5f6368;--eval-tab-run-eval-btn-color: #8ab4f8;--eval-tab-run-eval-btn-hover-background-color: #202124;--eval-tab-result-btn-border-color: #5f6368;--eval-tab-result-btn-hover-background-color: #202124;--eval-tab-result-btn-pass-color: #44c265;--eval-tab-result-btn-fail-color: #ff8983;--eval-tab-status-card-background-color: #2d2d2d;--eval-tab-status-card-timestamp-color: #e0e0e0;--eval-tab-status-card-metric-color: #bbb;--eval-tab-status-card-failed-color: #ff6b6b;--eval-tab-status-card-separator-color: #666;--eval-tab-status-card-passed-color: #63e6be;--eval-tab-status-card-action-mat-icon-color: #bdbdbd;--eval-tab-status-card-icon-color: #bdbdbd;--run-eval-config-dialog-container-box-shadow-color: rgba(0, 0, 0, .4);--run-eval-config-dialog-threshold-slider-active-track-color: #4285f4;--run-eval-config-dialog-threshold-slider-inactive-track-color: #616161;--run-eval-config-dialog-threshold-slider-handle-color: #4285f4;--run-eval-config-dialog-threshold-slider-ripple-color: #4285f4;--run-eval-config-dialog-mdc-slider-thumb-background-color: black;--event-tab-events-wrapper-color: #9aa0a6;--event-tab-event-index-color: #80868b;--event-tab-event-list-active-indicator-color: orange;--event-tab-event-list-list-item-container-color: #2b2b2f;--event-tab-mdc-list-item-border-color: #5f6368;--event-tab-mdc-list-item-hover-background-color: #1c1b1c;--trace-chart-trace-label-color: #e3e3e3;--trace-chart-trace-bar-background-color: #2f4d65;--trace-chart-trace-bar-color: #8dabbf;--trace-chart-trace-duration-color: #888;--trace-chart-vertical-line-background-color: #ccc;--trace-chart-horizontal-line-background-color: #ccc;--session-tab-session-wrapper-color: #9aa0a6;--session-tab-session-item-background-color: #303030;--session-tab-session-item-hover-background-color: #141414;--session-tab-session-item-current-background-color: #004a77;--session-tab-session-id-color: #e8eaed;--session-tab-session-date-color: #9aa0a6;--side-panel-button-filled-container-color: #89b4f8;--side-panel-button-filled-label-text-color: black;--side-panel-mat-icon-color: #bdc1c6;--side-panel-resize-handler-background-color: #5f6368;--side-panel-details-panel-container-background-color: #242424;--side-panel-details-content-color: white;--side-panel-powered-by-adk-color: grey;--side-panel-app-select-container-background-color: #212123;--side-panel-select-placeholder-text-color: #8ab4f8;--side-panel-select-enabled-trigger-text-color: #8ab4f8;--side-panel-select-enabled-arrow-color: #8ab4f8;--side-panel-app-name-option-color: #9aa0a6;--trace-tab-trace-title-color: #9aa0a6;--trace-tab-trace-label-color: #e3e3e3;--trace-tab-trace-bar-background-color: #2f4d65;--trace-tab-trace-bar-color: #8dabbf;--trace-tab-trace-duration-color: #888;--trace-tab-vertical-line-background-color: #ccc;--trace-tab-horizontal-line-background-color: #ccc;--trace-tab-trace-item-container-background-color: #333537;--trace-tab-trace-item-header-focus-state-layer-color: rgba(138, 180, 248, .12);--trace-tab-trace-item-header-description-color: #8e918f;--trace-tab-mat-expansion-panel-header-focus-background-color: #444746;--trace-tab-mat-expansion-panel-header-background-color: #444746;--trace-tab-mat-expansion-panel-header-hover-background-color: #444746;--trace-event-json-viewer-container-background-color: #1b1b1b;--trace-tree-trace-label-color: #e3e3e3;--trace-tree-trace-bar-background-color: #2f4d65;--trace-tree-trace-bar-color: #8dabbf;--trace-tree-short-trace-bar-duration-color: #8dabbf;--trace-tree-trace-duration-color: #888;--trace-tree-trace-row-hover-background-color: #3b3d3c;--trace-tree-trace-row-selected-background-color: #3b3d3c;--trace-tree-vertical-line-background-color: #ccc;--trace-tree-horizontal-line-background-color: #ccc;--trace-tree-invocation-id-container-color: #9aa0a6;--trace-tree-trace-row-left-span-div-color: white;--trace-tree-trace-row-left-is-event-row-color: #8ab4f8;--builder-container-background-color: #131314;--builder-panel-background-color: #202124;--builder-tabs-background-color: #202124;--builder-card-background-color: #303030;--builder-secondary-background-color: #333537;--builder-tertiary-background-color: #1b1b1b;--builder-hover-background-color: #141414;--builder-border-color: #444746;--builder-text-primary-color: #e8eaed;--builder-text-secondary-color: #9aa0a6;--builder-text-tertiary-color: #c4c7c5;--builder-text-muted-color: #5c5f5e;--builder-text-link-color: #aecbfa;--builder-breadcrumb-separator-color: #666;--builder-form-field-background-color: #333537;--builder-tool-chip-background-color: #303030;--builder-tool-chip-hover-color: #3c4043;--builder-callback-chip-background-color: #333537;--builder-callback-chip-text-color: #f1f3f4;--builder-callback-chip-type-color: #8f9aa6;--builder-callback-chip-name-color: #f5f7f9;--builder-expansion-background-color: #333537;--builder-expansion-header-description-color: #8e918f;--builder-expansion-hover-color: #444746;--builder-menu-background-color: #303030;--builder-menu-item-hover-color: #444746;--builder-menu-divider-color: #444746;--builder-button-primary-background-color: #8ab4f8;--builder-button-primary-text-color: #202124;--builder-button-primary-hover-color: #aecbfa;--builder-button-secondary-text-color: #9aa0a6;--builder-button-secondary-border-color: rgba(154, 160, 166, .3);--builder-button-secondary-hover-background-color: rgba(154, 160, 166, .1);--builder-button-secondary-hover-text-color: #e8eaed;--builder-add-button-background-color: rgba(138, 180, 248, .24);--builder-add-button-text-color: #d2e3fc;--builder-icon-color: #f1f3f4;--builder-assistant-panel-background-color: #2b2b2b;--builder-assistant-panel-header-background-color: #292929;--builder-assistant-panel-border-color: #3c3c3c;--builder-assistant-input-background-color: #1a1a1a;--builder-assistant-input-text-color: #e0e0e0;--builder-assistant-input-placeholder-color: #808080;--builder-assistant-user-message-background-color: #1a1a1a;--builder-assistant-user-message-border-color: #404040;--builder-assistant-user-message-text-color: #e3e3e3;--builder-assistant-bot-message-text-color: #d4d4d4;--builder-assistant-send-button-color: #888888;--builder-assistant-send-button-hover-color: #b0b0b0;--builder-assistant-send-button-disabled-color: #4a4a4a;--builder-canvas-container-background: linear-gradient(135deg, #0f0f0f 0%, #1a1a1a 100%);--builder-canvas-shadow: 0 8px 32px rgba(0, 0, 0, .4);--builder-canvas-header-background: linear-gradient(90deg, #1e1e1e 0%, #2a2a2a 100%);--builder-canvas-header-title-gradient: linear-gradient(45deg, #8ab4f8, #4285f4);--builder-canvas-workspace-background: #131314;--builder-canvas-instruction-background: rgba(19, 19, 20, .9);--builder-canvas-instruction-border: rgba(138, 180, 248, .2);--builder-canvas-node-background: rgba(85, 107, 116, .4);--builder-canvas-node-border: #474747;--builder-canvas-node-hover-border: #666;--builder-canvas-node-chip-outline: rgba(255, 255, 255, .1);--builder-canvas-node-badge-background: linear-gradient(135deg, rgba(0, 187, 234, .2), rgba(0, 78, 122, .4));--builder-canvas-group-background: #1c1c1c;--builder-canvas-group-border: #3e3e3e;--builder-canvas-handle-fill: rgba(0, 0, 0, 1);--builder-canvas-reconnect-handle-fill: rgba(0, 187, 234, .15);--builder-canvas-workflow-chip-background: rgba(0, 187, 234, .2);--builder-canvas-workflow-chip-border: rgba(0, 187, 234, .4);--builder-canvas-add-btn-background: radial-gradient(circle at 50% 50%, #1f2330 0%, #131314 100%);--builder-canvas-add-btn-hover-background: radial-gradient(circle at 50% 50%, #222a3a 0%, #16181d 100%);--builder-canvas-add-btn-shadow: 0 4px 12px rgba(0, 187, 234, .35);--builder-canvas-empty-group-background: rgba(255, 255, 255, .02);--builder-canvas-empty-group-border: rgba(0, 187, 234, .3);--builder-canvas-empty-group-hover-background: rgba(255, 255, 255, .04);--builder-canvas-empty-group-hover-border: rgba(0, 187, 234, .5);--builder-canvas-empty-group-btn-background: rgba(0, 187, 234, .1);--builder-canvas-empty-group-btn-hover-background: rgba(0, 187, 234, .2);--builder-button-background-color: rgba(138, 180, 248, .1);--builder-button-border-color: rgba(138, 180, 248, .3);--builder-button-text-color: #8ab4f8;--builder-button-hover-background-color: rgba(138, 180, 248, .2);--builder-button-hover-border-color: #8ab4f8;--builder-item-hover-color: rgba(138, 180, 248, .1);--builder-chip-background-color: rgba(138, 180, 248, .2);--builder-accent-color: #00bbea;--builder-tool-item-background-color: rgba(255, 255, 255, .05);--builder-tool-item-border-color: rgba(255, 255, 255, .1);--builder-tool-item-hover-background-color: rgba(255, 255, 255, .1);--mat-table-row-item-label-text-color: #fff;--mat-table-header-headline-color: #fff;--mat-progress-spinner-active-indicator-color: #a8c7fa;--mat-progress-spinner-size: 80}html.light-theme{--chat-panel-function-event-button-background-color: #202124;--chat-panel-function-event-button-highlight-background-color: #0f5223;--chat-panel-function-event-button-highlight-border-color: #0f5223;--chat-panel-function-event-button-highlight-color: white;--chat-panel-user-message-message-card-background-color: #d5e3ff;--chat-panel-user-message-message-card-color: #202124;--chat-panel-bot-message-message-card-background-color: #f3f0f0;--chat-panel-bot-message-message-card-color: #202124;--chat-panel-bot-message-focus-within-message-card-background-color: #ffffff;--chat-panel-bot-message-focus-within-message-card-border-color: #305f9d;--chat-panel-message-textarea-background-color: #f3f0f0;--chat-panel-message-textarea-focus-background-color: #ffffff;--chat-panel-eval-compare-container-background-color: #e5e2e2;--chat-panel-actual-result-border-right-color: #c8c6c6;--chat-panel-eval-response-header-border-bottom-color: #c8c6c6;--chat-panel-header-expected-color: #0f5223;--chat-panel-header-actual-color: #ba1a1a;--chat-panel-eval-pass-color: #0f5223;--chat-panel-eval-fail-color: #ba1a1a;--chat-panel-input-field-textarea-color: #202124;--chat-panel-input-field-textarea-placeholder-color: #5f5e5e;--chat-panel-input-field-textarea-caret-color: #202124;--chat-panel-input-field-button-color: #202124;--chat-panel-input-field-button-background-color: #e5e2e2;--chat-panel-mat-mdc-mini-fab-background-color: #305f9d;--chat-panel-mat-mdc-mini-fab-mat-icon-color: white;--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color: #adabab;--chat-panel-delete-button-background-color: rgba(255, 255, 255, .9);--chat-panel-delete-button-color: #202124;--chat-panel-file-container-background-color: #f3f0f0;--chat-panel-thought-chip-background-color: #305f9d;--chat-panel-link-style-button-color: #305f9d;--artifact-tab-download-button-background-color: #305f9d;--artifact-tab-white-separator-border-top-color: #202124;--artifact-tab-version-select-container-background-color: #f3f0f0;--artifact-tab-link-style-button-color: #305f9d;--artifact-tab-link-style-button-hover-color: #0f4784;--artifact-tab-link-style-button-focus-outline-color: #305f9d;--artifact-tab-link-style-button-active-color: #003061;--artifact-tab-link-style-button-disabled-color: #929090;--audio-player-container-background-color: #f3f0f0;--audio-player-container-box-shadow-color: rgba(0, 0, 0, .1);--audio-player-custom-controls-button-background-color: #305f9d;--audio-player-custom-controls-button-color: white;--audio-player-custom-controls-button-hover-background-color: #0f4784;--chat-drawer-container-background-color: #ffffff;--chat-event-container-color: #202124;--chat-card-background-color: #ffffff;--chat-function-event-button-background-color: #202124;--chat-function-event-button-highlight-background-color: #0f5223;--chat-function-event-button-highlight-border-color: #0f5223;--chat-function-event-button-highlight-color: white;--chat-user-message-message-card-background-color: #d5e3ff;--chat-user-message-message-card-color: #202124;--chat-bot-message-message-card-background-color: #f3f0f0;--chat-bot-message-message-card-color: #202124;--chat-bot-message-focus-within-message-card-background-color: #ffffff;--chat-bot-message-focus-within-message-card-border-color: #305f9d;--chat-message-textarea-background-color: #f3f0f0;--chat-message-textarea-focus-background-color: #ffffff;--chat-eval-compare-container-background-color: #e5e2e2;--chat-actual-result-border-right-color: #c8c6c6;--chat-eval-response-header-border-bottom-color: #c8c6c6;--chat-header-expected-color: #0f5223;--chat-header-actual-color: #ba1a1a;--chat-eval-pass-color: #0f5223;--chat-eval-fail-color: #ba1a1a;--chat-side-drawer-background-color: #f3f0f0;--chat-side-drawer-color: #202124;--chat-file-item-background-color: #e5e2e2;--chat-empty-state-container-color: #202124;--chat-warning-color: #93000a;--chat-error-color: #ba1a1a;--chat-mat-mdc-unelevated-button-color: white;--chat-mat-mdc-unelevated-button-background-color: #305f9d;--chat-mdc-linear-progress-buffer-dots-background-color: #202124;--chat-mat-mdc-text-field-wrapper-border-color: #adabab;--chat-segment-key-color: #5f5e5e;--chat-bottom-resize-handler-background-color: #adabab;--chat-readonly-badge-background-color: #ba1a1a;--chat-readonly-badge-color: white;--chat-trace-detail-container-background-color: #f3f0f0;--chat-toolbar-background-color: #f3f0f0;--chat-toolbar-edit-mode-background-color: rgba(15, 82, 35, .1);--chat-toolbar-session-text-color: #202124;--chat-toolbar-session-id-color: #5f5e5e;--chat-toolbar-icon-color: #5f5e5e;--chat-toolbar-new-session-color: #5f5e5e;--chat-toolbar-sse-toggle-label-text-color: #202124;--chat-toolbar-sse-toggle-unselected-track-color: #c8c6c6;--chat-toolbar-sse-toggle-unselected-handle-color: #5f5e5e;--chat-toolbar-sse-toggle-selected-track-color: #82adf0;--chat-toolbar-sse-toggle-selected-handle-color: #305f9d;--chat-toolbar-sse-toggle-track-outline-color: #305f9d;--chat-mat-drawer-border-right-color: #c8c6c6;--edit-json-dialog-container-box-shadow-color: rgba(0, 0, 0, .2);--eval-tab-eval-set-actions-color: #5f5e5e;--eval-tab-empty-eval-info-background-color: #f3f0f0;--eval-tab-empty-eval-info-box-shadow-color1: rgba(0, 0, 0, .08);--eval-tab-empty-eval-info-box-shadow-color2: rgba(0, 0, 0, .15);--eval-tab-info-title-color: #202124;--eval-tab-info-detail-color: #202124;--eval-tab-info-create-color: #305f9d;--eval-tab-selected-eval-case-color: #305f9d;--eval-tab-save-session-btn-background-color1: rgba(48, 95, 157, .12);--eval-tab-save-session-btn-background-color2: #f3f0f0;--eval-tab-save-session-btn-text-color: #0f4784;--eval-tab-run-eval-btn-border-color: #adabab;--eval-tab-run-eval-btn-color: #305f9d;--eval-tab-run-eval-btn-hover-background-color: #f3f0f0;--eval-tab-result-btn-border-color: #adabab;--eval-tab-result-btn-hover-background-color: #f3f0f0;--eval-tab-result-btn-pass-color: #0f5223;--eval-tab-result-btn-fail-color: #ba1a1a;--eval-tab-status-card-background-color: #f3f0f0;--eval-tab-status-card-timestamp-color: #5f5e5e;--eval-tab-status-card-metric-color: #787777;--eval-tab-status-card-failed-color: #ba1a1a;--eval-tab-status-card-separator-color: #c8c6c6;--eval-tab-status-card-passed-color: #0f5223;--eval-tab-status-card-action-mat-icon-color: #5f5e5e;--eval-tab-status-card-icon-color: #5f5e5e;--run-eval-config-dialog-container-box-shadow-color: rgba(0, 0, 0, .2);--run-eval-config-dialog-threshold-slider-active-track-color: #305f9d;--run-eval-config-dialog-threshold-slider-inactive-track-color: #c8c6c6;--run-eval-config-dialog-threshold-slider-handle-color: #305f9d;--run-eval-config-dialog-threshold-slider-ripple-color: #305f9d;--run-eval-config-dialog-mdc-slider-thumb-background-color: white;--event-tab-events-wrapper-color: #5f5e5e;--event-tab-event-index-color: #787777;--event-tab-event-list-active-indicator-color: #ff5449;--event-tab-event-list-list-item-container-color: #f3f0f0;--event-tab-mdc-list-item-border-color: #c8c6c6;--event-tab-mdc-list-item-hover-background-color: #e5e2e2;--trace-chart-trace-label-color: #202124;--trace-chart-trace-bar-background-color: #a7c8ff;--trace-chart-trace-bar-color: #305f9d;--trace-chart-trace-duration-color: #787777;--trace-chart-vertical-line-background-color: #c8c6c6;--trace-chart-horizontal-line-background-color: #c8c6c6;--session-tab-session-wrapper-color: #5f5e5e;--session-tab-session-item-background-color: #f3f0f0;--session-tab-session-item-hover-background-color: #e5e2e2;--session-tab-session-item-current-background-color: #d5e3ff;--session-tab-session-id-color: #202124;--session-tab-session-date-color: #5f5e5e;--side-panel-button-filled-container-color: #305f9d;--side-panel-button-filled-label-text-color: white;--side-panel-mat-icon-color: #5f5e5e;--side-panel-resize-handler-background-color: #adabab;--side-panel-details-panel-container-background-color: #f3f0f0;--side-panel-details-content-color: #202124;--side-panel-powered-by-adk-color: #787777;--side-panel-app-select-container-background-color: #ffffff;--side-panel-select-placeholder-text-color: #305f9d;--side-panel-select-enabled-trigger-text-color: #305f9d;--side-panel-select-enabled-arrow-color: #305f9d;--side-panel-app-name-option-color: #5f5e5e;--trace-tab-trace-title-color: #5f5e5e;--trace-tab-trace-label-color: #202124;--trace-tab-trace-bar-background-color: #a7c8ff;--trace-tab-trace-bar-color: #305f9d;--trace-tab-trace-duration-color: #787777;--trace-tab-vertical-line-background-color: #c8c6c6;--trace-tab-horizontal-line-background-color: #c8c6c6;--trace-tab-trace-item-container-background-color: #f3f0f0;--trace-tab-trace-item-header-focus-state-layer-color: rgba(48, 95, 157, .12);--trace-tab-trace-item-header-description-color: #787777;--trace-tab-mat-expansion-panel-header-focus-background-color: #e5e2e2;--trace-tab-mat-expansion-panel-header-background-color: #e5e2e2;--trace-tab-mat-expansion-panel-header-hover-background-color: #e5e2e2;--trace-event-json-viewer-container-background-color: #ffffff;--trace-tree-trace-label-color: #202124;--trace-tree-trace-bar-background-color: #a7c8ff;--trace-tree-trace-bar-color: #305f9d;--trace-tree-short-trace-bar-duration-color: #305f9d;--trace-tree-trace-duration-color: #787777;--trace-tree-trace-row-hover-background-color: #e5e2e2;--trace-tree-trace-row-selected-background-color: #e5e2e2;--trace-tree-vertical-line-background-color: #c8c6c6;--trace-tree-horizontal-line-background-color: #c8c6c6;--trace-tree-invocation-id-container-color: #5f5e5e;--trace-tree-trace-row-left-span-div-color: #202124;--trace-tree-trace-row-left-is-event-row-color: #305f9d;--builder-container-background-color: #ffffff;--builder-panel-background-color: #f3f0f0;--builder-tabs-background-color: #f3f0f0;--builder-card-background-color: #ffffff;--builder-secondary-background-color: #e5e2e2;--builder-tertiary-background-color: #f3f0f0;--builder-hover-background-color: #dcd9d9;--builder-border-color: #c8c6c6;--builder-text-primary-color: #202124;--builder-text-secondary-color: #5f5e5e;--builder-text-tertiary-color: #787777;--builder-text-muted-color: #929090;--builder-text-link-color: #305f9d;--builder-breadcrumb-separator-color: #c8c6c6;--builder-form-field-background-color: #e5e2e2;--builder-tool-chip-background-color: #ffffff;--builder-tool-chip-hover-color: #e5e2e2;--builder-callback-chip-background-color: #e5e2e2;--builder-callback-chip-text-color: #202124;--builder-callback-chip-type-color: #5f5e5e;--builder-callback-chip-name-color: #202124;--builder-expansion-background-color: #e5e2e2;--builder-expansion-header-description-color: #787777;--builder-expansion-hover-color: #dcd9d9;--builder-menu-background-color: #ffffff;--builder-menu-item-hover-color: #e5e2e2;--builder-menu-divider-color: #c8c6c6;--builder-button-primary-background-color: #305f9d;--builder-button-primary-text-color: #ffffff;--builder-button-primary-hover-color: #0f4784;--builder-button-secondary-text-color: #5f5e5e;--builder-button-secondary-border-color: rgba(95, 94, 94, .3);--builder-button-secondary-hover-background-color: rgba(95, 94, 94, .1);--builder-button-secondary-hover-text-color: #202124;--builder-add-button-background-color: rgba(48, 95, 157, .12);--builder-add-button-text-color: #0f4784;--builder-icon-color: #202124;--builder-assistant-panel-background-color: #f3f0f0;--builder-assistant-panel-header-background-color: #e5e2e2;--builder-assistant-panel-border-color: #c8c6c6;--builder-assistant-input-background-color: #ffffff;--builder-assistant-input-text-color: #202124;--builder-assistant-input-placeholder-color: #929090;--builder-assistant-user-message-background-color: #d5e3ff;--builder-assistant-user-message-border-color: #a7c8ff;--builder-assistant-user-message-text-color: #202124;--builder-assistant-bot-message-text-color: #202124;--builder-assistant-send-button-color: #5f5e5e;--builder-assistant-send-button-hover-color: #305f9d;--builder-assistant-send-button-disabled-color: #c8c6c6;--builder-canvas-container-background: linear-gradient(135deg, #f8f9fa 0%, #e8eaed 100%);--builder-canvas-shadow: 0 8px 32px rgba(0, 0, 0, .1);--builder-canvas-header-background: linear-gradient(90deg, #ffffff 0%, #f3f0f0 100%);--builder-canvas-header-title-gradient: linear-gradient(45deg, #305f9d, #0f4784);--builder-canvas-workspace-background: #ffffff;--builder-canvas-instruction-background: rgba(255, 255, 255, .95);--builder-canvas-instruction-border: rgba(48, 95, 157, .3);--builder-canvas-node-background: rgba(229, 226, 226, .6);--builder-canvas-node-border: #c8c6c6;--builder-canvas-node-hover-border: #adabab;--builder-canvas-node-chip-outline: rgba(200, 198, 198, .3);--builder-canvas-node-badge-background: linear-gradient(135deg, rgba(48, 95, 157, .15), rgba(15, 71, 132, .2));--builder-canvas-group-background: #f3f0f0;--builder-canvas-group-border: #c8c6c6;--builder-canvas-handle-fill: rgba(255, 255, 255, 1);--builder-canvas-reconnect-handle-fill: rgba(48, 95, 157, .15);--builder-canvas-workflow-chip-background: rgba(48, 95, 157, .15);--builder-canvas-workflow-chip-border: rgba(48, 95, 157, .3);--builder-canvas-add-btn-background: radial-gradient(circle at 50% 50%, #ffffff 0%, #f8f9fa 100%);--builder-canvas-add-btn-hover-background: radial-gradient(circle at 50% 50%, #f3f0f0 0%, #e8eaed 100%);--builder-canvas-add-btn-shadow: 0 4px 12px rgba(48, 95, 157, .25);--builder-canvas-empty-group-background: rgba(48, 95, 157, .03);--builder-canvas-empty-group-border: rgba(48, 95, 157, .3);--builder-canvas-empty-group-hover-background: rgba(48, 95, 157, .06);--builder-canvas-empty-group-hover-border: rgba(48, 95, 157, .5);--builder-canvas-empty-group-btn-background: rgba(48, 95, 157, .1);--builder-canvas-empty-group-btn-hover-background: rgba(48, 95, 157, .2);--builder-button-background-color: rgba(48, 95, 157, .1);--builder-button-border-color: rgba(48, 95, 157, .3);--builder-button-text-color: #305f9d;--builder-button-hover-background-color: rgba(48, 95, 157, .2);--builder-button-hover-border-color: #305f9d;--builder-item-hover-color: rgba(48, 95, 157, .1);--builder-chip-background-color: rgba(48, 95, 157, .15);--builder-accent-color: #305f9d;--builder-tool-item-background-color: #f6f3f3;--builder-tool-item-border-color: #c8c6c6;--builder-tool-item-hover-background-color: #dcd9d9;--mat-progress-spinner-active-indicator-color: #305f9d;--mat-progress-spinner-size: 80}html.dark-theme{--mat-form-field-disabled-input-text-placeholder-color: orange;--mat-form-field-filled-active-indicator-color: red;--mat-form-field-outlined-outline-color: #cccccc;--mat-form-field-outlined-input-text-color: #cccccc;--mat-form-field-outlined-label-text-color: #cccccc;--mat-form-field-outlined-hover-label-text-color: #cccccc;--mat-form-field-outlined-focus-label-text-color: #cccccc;--mat-form-field-outlined-disabled-label-text-color: #cccccc;--mat-form-field-outlined-disabled-input-text-color: #cccccc;--mat-form-field-outlined-disabled-outline-color: #cccccc;--mat-form-field-outlined-caret-color: #cccccc}html.light-theme{--mat-form-field-disabled-input-text-placeholder-color: #ff8983;--mat-form-field-filled-active-indicator-color: #ba1a1a;--mat-form-field-outlined-outline-color: #787777;--mat-form-field-outlined-input-text-color: #202124;--mat-form-field-outlined-label-text-color: #5f5e5e;--mat-form-field-outlined-hover-label-text-color: #202124;--mat-form-field-outlined-focus-label-text-color: #305f9d;--mat-form-field-outlined-disabled-label-text-color: #929090;--mat-form-field-outlined-disabled-input-text-color: #929090;--mat-form-field-outlined-disabled-outline-color: #c8c6c6;--mat-form-field-outlined-caret-color: #305f9d}.mdc-line-ripple{display:none}.mat-mdc-tooltip{z-index:10000!important;max-width:300px}.mat-mdc-select-panel{background-color:var(--mat-select-panel-background-color)!important}html.light-theme .mat-expansion-panel{box-shadow:none!important;border:1px solid #e0e0e0;border-radius:4px!important}html.light-theme .mat-expansion-panel:not(:last-child){margin-bottom:8px}html.light-theme .mat-expansion-panel-header{border-bottom:none!important}html.dark-theme .mat-expansion-panel{box-shadow:none!important;border:1px solid #444746;border-radius:4px!important}html.dark-theme .mat-expansion-panel:not(:last-child){margin-bottom:8px}html.dark-theme .mat-expansion-panel-header{border-bottom:none!important}.wide-agent-dropdown-panel{padding:0!important}.wide-agent-dropdown-panel .search-option{position:sticky!important;top:0!important;z-index:1000!important;opacity:1!important;padding-top:8px;padding-bottom:8px}.wide-agent-dropdown-panel span{width:100%}html.dark-theme .wide-agent-dropdown-panel .search-option{background-color:#2b2b2f!important}html.dark-theme .wide-agent-dropdown-panel .search-option input{caret-color:#fff!important}html.light-theme .wide-agent-dropdown-panel .search-option{background-color:#fff!important}.function-args-tooltip .mdc-tooltip__surface{background-color:#333!important;color:#fff!important;border:2px solid #666!important;border-radius:2px!important;padding:8px 12px!important;font-family:Courier New,monospace!important;font-size:12px!important;white-space:pre-wrap!important;max-width:800px!important;line-height:1.2!important;box-shadow:0 2px 8px #0000004d!important}html.dark-theme{--chat-panel-event-number-label-color: rgba(255, 255, 255, .8)}html.light-theme{--chat-panel-event-number-label-color: #5f6368}.json-key{color:#9876aa;font-weight:600}.json-string{color:#6a8759}.json-number{color:#6897bb}.json-boolean{color:#cc7832}.json-null{color:gray}.json-tooltip-panel{background-color:#333!important;color:#fff!important;border:2px solid #666!important;border-radius:4px!important;padding:8px 12px!important;box-shadow:0 2px 8px #0000004d!important;max-width:800px!important} diff --git a/src/google/adk/cli/browser/styles-YY6V3TJU.css b/src/google/adk/cli/browser/styles-YY6V3TJU.css new file mode 100644 index 0000000000..865cbf169e --- /dev/null +++ b/src/google/adk/cli/browser/styles-YY6V3TJU.css @@ -0,0 +1 @@ +html,html.light-theme,html.dark-theme{--mat-sys-corner-extra-large: 28px;--mat-sys-corner-extra-large-top: 28px 28px 0 0;--mat-sys-corner-extra-small: 4px;--mat-sys-corner-extra-small-top: 4px 4px 0 0;--mat-sys-corner-full: 9999px;--mat-sys-corner-large: 16px;--mat-sys-corner-large-end: 0 16px 16px 0;--mat-sys-corner-large-start: 16px 0 0 16px;--mat-sys-corner-large-top: 16px 16px 0 0;--mat-sys-corner-medium: 12px;--mat-sys-corner-none: 0;--mat-sys-corner-small: 8px;--mat-sys-dragged-state-layer-opacity: .16;--mat-sys-focus-state-layer-opacity: .12;--mat-sys-hover-state-layer-opacity: .08;--mat-sys-pressed-state-layer-opacity: .12}html{font-family:Google Sans,Helvetica Neue,sans-serif!important}body{height:100vh;margin:0}markdown p{margin-block-start:.5em;margin-block-end:.5em}.cdk-overlay-container{z-index:9999!important}.mat-mdc-menu-panel{z-index:10000!important}.mat-mdc-menu-panel,.mat-mdc-menu-panel .mat-mdc-menu-content{background-color:var(--mdc-dialog-container-color)!important}.mat-mdc-menu-item,.mat-mdc-menu-item .mdc-list-item__primary-text{color:var(--mdc-dialog-supporting-text-color)!important}.mat-mdc-menu-item:hover,.mat-mdc-menu-item:focus{background-color:var(--builder-tool-item-hover-background-color)!important}.mat-mdc-menu-item .mat-icon{color:var(--mdc-dialog-supporting-text-color)!important}.mat-mdc-snack-bar-container{--mdc-snackbar-container-color: var(--mdc-dialog-container-color) !important;--mdc-snackbar-supporting-text-color: var(--mdc-dialog-supporting-text-color) !important;--mat-snack-bar-button-color: var(--builder-text-link-color) !important}.mdc-snackbar__surface{background-color:var(--mdc-dialog-container-color)!important}.mdc-snackbar__label,.mat-mdc-snack-bar-label{color:var(--mdc-dialog-supporting-text-color)!important}.mat-mdc-snack-bar-action{color:var(--builder-text-link-color)!important}html.dark-theme{--mat-sys-primary: black;--mdc-checkbox-selected-icon-color: white;--mat-sys-background: #131314;--mat-tab-header-active-label-text-color: #8ab4f8;--mat-tab-header-active-hover-label-text-color: #8ab4f8;--mat-tab-header-active-focus-label-text-color: #8ab4f8;--mat-tab-header-label-text-weight: 500;--mdc-text-button-label-text-color: #89b4f8;--mat-select-trigger-text-color: #8ab4f8;--mat-select-panel-background-color: #2b2b2f;--mat-option-label-text-color: #e8eaed;--mat-option-hover-state-layer-color: rgba(255, 255, 255, .08);--mat-option-focus-state-layer-color: rgba(255, 255, 255, .08);--mat-option-selected-state-layer-color: rgba(138, 180, 248, .24);--mat-form-field-container-text-color: white;--mdc-filled-text-field-input-text-color: white;--mdc-filled-text-field-label-text-color: #9aa0a6;--mdc-filled-text-field-container-color: #303030;--mdc-outlined-text-field-input-text-color: white;--mdc-outlined-text-field-label-text-color: #9aa0a6;--mat-form-field-state-layer-color: white;--mdc-dialog-supporting-text-color: #e8eaed;--mat-dialog-content-text-color: #e8eaed;--mat-expansion-container-text-color: #e8eaed;--mat-expansion-header-text-color: #e8eaed;--adk-web-text-color-light-gray: #c4c7c5}html.light-theme{--mat-sys-primary: #9AA0A6;--mdc-checkbox-selected-icon-color: #305f9d;--mat-sys-background: #ffffff;--mat-tab-header-active-label-text-color: #305f9d;--mat-tab-header-active-hover-label-text-color: #305f9d;--mat-tab-header-active-focus-label-text-color: #305f9d;--mat-tab-header-label-text-weight: 500;--mdc-text-button-label-text-color: #305f9d;--mat-select-trigger-text-color: #202124;--mat-select-panel-background-color: #ffffff;--mat-option-label-text-color: #202124;--mat-option-hover-state-layer-color: rgba(0, 0, 0, .04);--mat-option-focus-state-layer-color: rgba(0, 0, 0, .04);--mat-option-selected-state-layer-color: rgba(48, 95, 157, .12);--mat-form-field-container-text-color: #202124;--mdc-filled-text-field-input-text-color: #202124;--mdc-filled-text-field-label-text-color: #5f5e5e;--mdc-filled-text-field-container-color: #f3f0f0;--mdc-outlined-text-field-input-text-color: #202124;--mdc-outlined-text-field-label-text-color: #5f5e5e;--mat-form-field-state-layer-color: #202124;--mdc-dialog-supporting-text-color: #202124;--mat-dialog-content-text-color: #202124;--mat-expansion-container-text-color: #202124;--mat-expansion-header-text-color: #202124;--adk-web-text-color-light-gray: #c4c7c5}html.dark-theme{--mdc-dialog-subhead-font-family: "Google Sans";--mdc-dialog-subhead-font-style: normal;--mdc-dialog-subhead-font-weight: 400;--mdc-dialog-subhead-font-size: 24px;--mdc-dialog-subhead-line-height: 32px;--mdc-dialog-subhead-color: #e3e3e3;--mat-dialog-container-color: #2b2b2f;--mat-dialog-subhead-color: white}html.light-theme{--mdc-dialog-subhead-font-family: "Google Sans";--mdc-dialog-subhead-font-style: normal;--mdc-dialog-subhead-font-weight: 400;--mdc-dialog-subhead-font-size: 24px;--mdc-dialog-subhead-line-height: 32px;--mdc-dialog-subhead-color: #202124;--mat-dialog-container-color: #ffffff;--mat-dialog-subhead-color: #202124}.mat-mdc-dialog-container .mat-mdc-dialog-title.mdc-dialog__title{font-family:var(--mdc-dialog-subhead-font-family);font-style:var(--mdc-dialog-subhead-font-style);font-weight:var(--mdc-dialog-subhead-font-weight);font-size:var(--mdc-dialog-subhead-font-size);line-height:var(--mdc-dialog-subhead-line-height);color:var(--mdc-dialog-subhead-color)}html.dark-theme{--chat-panel-function-event-button-background-color: white;--chat-panel-function-event-button-highlight-background-color: rgb( 15, 82, 35 );--chat-panel-function-event-button-highlight-border-color: rgb(15, 82, 35);--chat-panel-function-event-button-highlight-color: white;--long-running-response-input-text-color: #000;--long-running-response-input-caret-color: #000;--long-running-response-input-placeholder-color: rgba(0, 0, 0, .5);--long-running-response-icon-color: #000;--long-running-response-send-button-color: #000;--chat-panel-user-message-message-card-background-color: #004a77;--chat-panel-user-message-message-card-color: white;--chat-panel-bot-message-message-card-background-color: #303030;--chat-panel-bot-message-message-card-color: white;--chat-panel-bot-message-focus-within-message-card-background-color: #131314;--chat-panel-bot-message-focus-within-message-card-border-color: #8ab4f8;--chat-panel-message-textarea-background-color: #303030;--chat-panel-message-textarea-focus-background-color: #131314;--chat-panel-eval-compare-container-background-color: #484848;--chat-panel-actual-result-border-right-color: #8a8686;--chat-panel-eval-response-header-border-bottom-color: #8a8686;--chat-panel-header-expected-color: #44c265;--chat-panel-header-actual-color: #ff8983;--chat-panel-eval-pass-color: #44c265;--chat-panel-eval-fail-color: #ff8983;--chat-panel-input-field-textarea-color: white;--chat-panel-input-field-textarea-placeholder-color: #8e918f;--chat-panel-input-field-textarea-caret-color: white;--chat-panel-input-field-button-color: white;--chat-panel-input-field-button-background-color: rgb(51, 53, 55);--chat-panel-mat-mdc-mini-fab-background-color: white;--chat-panel-mat-mdc-mini-fab-mat-icon-color: black;--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color: #8e918f;--chat-panel-delete-button-background-color: rgba(0, 0, 0, .7);--chat-panel-delete-button-color: white;--chat-panel-file-container-background-color: #1e1e1e;--chat-panel-thought-chip-background-color: #8ab4f8;--chat-panel-link-style-button-color: #007bff;--artifact-tab-download-button-background-color: #8ab4f8;--artifact-tab-white-separator-border-top-color: white;--artifact-tab-version-select-container-background-color: #212123;--artifact-tab-link-style-button-color: #007bff;--artifact-tab-link-style-button-hover-color: #0056b3;--artifact-tab-link-style-button-focus-outline-color: #007bff;--artifact-tab-link-style-button-active-color: #004085;--artifact-tab-link-style-button-disabled-color: #6c757d;--audio-player-container-background-color: #f0f0f0;--audio-player-container-box-shadow-color: rgba(0, 0, 0, .1);--audio-player-custom-controls-button-background-color: #007bff;--audio-player-custom-controls-button-color: white;--audio-player-custom-controls-button-hover-background-color: #0056b3;--chat-drawer-container-background-color: #131314;--chat-event-container-color: white;--chat-card-background-color: #131314;--chat-function-event-button-background-color: white;--chat-function-event-button-highlight-background-color: rgb(15, 82, 35);--chat-function-event-button-highlight-border-color: rgb(15, 82, 35);--chat-function-event-button-highlight-color: white;--chat-user-message-message-card-background-color: #004a77;--chat-user-message-message-card-color: white;--chat-bot-message-message-card-background-color: #303030;--chat-bot-message-message-card-color: white;--chat-bot-message-focus-within-message-card-background-color: #131314;--chat-bot-message-focus-within-message-card-border-color: #8ab4f8;--chat-message-textarea-background-color: #303030;--chat-message-textarea-focus-background-color: #131314;--chat-eval-compare-container-background-color: #484848;--chat-actual-result-border-right-color: #8a8686;--chat-eval-response-header-border-bottom-color: #8a8686;--chat-header-expected-color: #44c265;--chat-header-actual-color: #ff8983;--chat-eval-pass-color: #44c265;--chat-eval-fail-color: #ff8983;--chat-side-drawer-background-color: #1b1b1b;--chat-side-drawer-color: white;--chat-file-item-background-color: #eee;--chat-empty-state-container-color: #eee;--chat-warning-color: #ffc185;--chat-error-color: #ff4545;--chat-mat-mdc-unelevated-button-color: #202124;--chat-mat-mdc-unelevated-button-background-color: #8ab4f8;--chat-mdc-linear-progress-buffer-dots-background-color: white;--chat-mat-mdc-text-field-wrapper-border-color: #8e918f;--chat-segment-key-color: lightgray;--chat-bottom-resize-handler-background-color: #5f6368;--chat-readonly-badge-background-color: #ff8983;--chat-readonly-badge-color: #202124;--chat-trace-detail-container-background-color: #1b1b1b;--chat-toolbar-background-color: #1b1b1b;--chat-toolbar-edit-mode-background-color: #44c2651a;--chat-toolbar-session-text-color: #fdfdfd;--chat-toolbar-session-id-color: #9aa0a6;--chat-toolbar-icon-color: #c4c7c5;--chat-toolbar-new-session-color: #9aa0a6;--chat-toolbar-sse-toggle-label-text-color: #e8eaed;--chat-toolbar-sse-toggle-unselected-track-color: #5f6368;--chat-toolbar-sse-toggle-unselected-handle-color: #9aa0a6;--chat-toolbar-sse-toggle-selected-track-color: #8ab4f9;--chat-toolbar-sse-toggle-selected-handle-color: #1b73e8;--chat-toolbar-sse-toggle-track-outline-color: #1b73e8;--chat-mat-drawer-border-right-color: #444746;--edit-json-dialog-container-box-shadow-color: rgba(0, 0, 0, .4);--eval-tab-eval-set-actions-color: #9aa0a6;--eval-tab-empty-eval-info-background-color: #202124;--eval-tab-empty-eval-info-box-shadow-color1: rgba(0, 0, 0, .15);--eval-tab-empty-eval-info-box-shadow-color2: rgba(0, 0, 0, .3);--eval-tab-info-title-color: #e8eaed;--eval-tab-info-detail-color: #e8eaed;--eval-tab-info-create-color: #8ab4f8;--eval-tab-selected-eval-case-color: #8ab4f8;--eval-tab-save-session-btn-background-color1: rgba(138, 180, 248, .24);--eval-tab-save-session-btn-background-color2: #202124;--eval-tab-save-session-btn-text-color: #d2e3fc;--eval-tab-run-eval-btn-border-color: #5f6368;--eval-tab-run-eval-btn-color: #8ab4f8;--eval-tab-run-eval-btn-hover-background-color: #202124;--eval-tab-result-btn-border-color: #5f6368;--eval-tab-result-btn-hover-background-color: #202124;--eval-tab-result-btn-pass-color: #44c265;--eval-tab-result-btn-fail-color: #ff8983;--eval-tab-status-card-background-color: #2d2d2d;--eval-tab-status-card-timestamp-color: #e0e0e0;--eval-tab-status-card-metric-color: #bbb;--eval-tab-status-card-failed-color: #ff6b6b;--eval-tab-status-card-separator-color: #666;--eval-tab-status-card-passed-color: #63e6be;--eval-tab-status-card-action-mat-icon-color: #bdbdbd;--eval-tab-status-card-icon-color: #bdbdbd;--run-eval-config-dialog-container-box-shadow-color: rgba(0, 0, 0, .4);--run-eval-config-dialog-threshold-slider-active-track-color: #4285f4;--run-eval-config-dialog-threshold-slider-inactive-track-color: #616161;--run-eval-config-dialog-threshold-slider-handle-color: #4285f4;--run-eval-config-dialog-threshold-slider-ripple-color: #4285f4;--run-eval-config-dialog-mdc-slider-thumb-background-color: black;--event-tab-events-wrapper-color: #9aa0a6;--event-tab-event-index-color: #80868b;--event-tab-event-list-active-indicator-color: orange;--event-tab-event-list-list-item-container-color: #2b2b2f;--event-tab-mdc-list-item-border-color: #5f6368;--event-tab-mdc-list-item-hover-background-color: #1c1b1c;--trace-chart-trace-label-color: #e3e3e3;--trace-chart-trace-bar-background-color: #2f4d65;--trace-chart-trace-bar-color: #8dabbf;--trace-chart-trace-duration-color: #888;--trace-chart-vertical-line-background-color: #ccc;--trace-chart-horizontal-line-background-color: #ccc;--session-tab-session-wrapper-color: #9aa0a6;--session-tab-session-item-background-color: #303030;--session-tab-session-item-hover-background-color: #141414;--session-tab-session-item-current-background-color: #004a77;--session-tab-session-id-color: #e8eaed;--session-tab-session-date-color: #9aa0a6;--side-panel-button-filled-container-color: #89b4f8;--side-panel-button-filled-label-text-color: black;--side-panel-mat-icon-color: #bdc1c6;--side-panel-resize-handler-background-color: #5f6368;--side-panel-details-panel-container-background-color: #242424;--side-panel-details-content-color: white;--side-panel-powered-by-adk-color: grey;--side-panel-app-select-container-background-color: #212123;--side-panel-select-placeholder-text-color: #8ab4f8;--side-panel-select-enabled-trigger-text-color: #8ab4f8;--side-panel-select-enabled-arrow-color: #8ab4f8;--side-panel-app-name-option-color: #9aa0a6;--trace-tab-trace-title-color: #9aa0a6;--trace-tab-trace-label-color: #e3e3e3;--trace-tab-trace-bar-background-color: #2f4d65;--trace-tab-trace-bar-color: #8dabbf;--trace-tab-trace-duration-color: #888;--trace-tab-vertical-line-background-color: #ccc;--trace-tab-horizontal-line-background-color: #ccc;--trace-tab-trace-item-container-background-color: #333537;--trace-tab-trace-item-header-focus-state-layer-color: rgba(138, 180, 248, .12);--trace-tab-trace-item-header-description-color: #8e918f;--trace-tab-mat-expansion-panel-header-focus-background-color: #444746;--trace-tab-mat-expansion-panel-header-background-color: #444746;--trace-tab-mat-expansion-panel-header-hover-background-color: #444746;--trace-event-json-viewer-container-background-color: #1b1b1b;--trace-tree-trace-label-color: #e3e3e3;--trace-tree-trace-bar-background-color: #2f4d65;--trace-tree-trace-bar-color: #8dabbf;--trace-tree-short-trace-bar-duration-color: #8dabbf;--trace-tree-trace-duration-color: #888;--trace-tree-trace-row-hover-background-color: #3b3d3c;--trace-tree-trace-row-selected-background-color: #3b3d3c;--trace-tree-vertical-line-background-color: #ccc;--trace-tree-horizontal-line-background-color: #ccc;--trace-tree-invocation-id-container-color: #9aa0a6;--trace-tree-trace-row-left-span-div-color: white;--trace-tree-trace-row-left-is-event-row-color: #8ab4f8;--builder-container-background-color: #131314;--builder-panel-background-color: #202124;--builder-tabs-background-color: #202124;--builder-card-background-color: #303030;--builder-secondary-background-color: #333537;--builder-tertiary-background-color: #1b1b1b;--builder-hover-background-color: #141414;--builder-border-color: #444746;--builder-text-primary-color: #e8eaed;--builder-text-secondary-color: #9aa0a6;--builder-text-tertiary-color: #c4c7c5;--builder-text-muted-color: #5c5f5e;--builder-text-link-color: #aecbfa;--builder-breadcrumb-separator-color: #666;--builder-form-field-background-color: #333537;--builder-tool-chip-background-color: #303030;--builder-tool-chip-hover-color: #3c4043;--builder-callback-chip-background-color: #333537;--builder-callback-chip-text-color: #f1f3f4;--builder-callback-chip-type-color: #8f9aa6;--builder-callback-chip-name-color: #f5f7f9;--builder-expansion-background-color: #333537;--builder-expansion-header-description-color: #8e918f;--builder-expansion-hover-color: #444746;--builder-menu-background-color: #303030;--builder-menu-item-hover-color: #444746;--builder-menu-divider-color: #444746;--builder-button-primary-background-color: #8ab4f8;--builder-button-primary-text-color: #202124;--builder-button-primary-hover-color: #aecbfa;--builder-button-secondary-text-color: #9aa0a6;--builder-button-secondary-border-color: rgba(154, 160, 166, .3);--builder-button-secondary-hover-background-color: rgba(154, 160, 166, .1);--builder-button-secondary-hover-text-color: #e8eaed;--builder-add-button-background-color: rgba(138, 180, 248, .24);--builder-add-button-text-color: #d2e3fc;--builder-icon-color: #f1f3f4;--builder-assistant-panel-background-color: #2b2b2b;--builder-assistant-panel-header-background-color: #292929;--builder-assistant-panel-border-color: #3c3c3c;--builder-assistant-input-background-color: #1a1a1a;--builder-assistant-input-text-color: #e0e0e0;--builder-assistant-input-placeholder-color: #808080;--builder-assistant-user-message-background-color: #1a1a1a;--builder-assistant-user-message-border-color: #404040;--builder-assistant-user-message-text-color: #e3e3e3;--builder-assistant-bot-message-text-color: #d4d4d4;--builder-assistant-send-button-color: #888888;--builder-assistant-send-button-hover-color: #b0b0b0;--builder-assistant-send-button-disabled-color: #4a4a4a;--builder-canvas-container-background: linear-gradient(135deg, #0f0f0f 0%, #1a1a1a 100%);--builder-canvas-shadow: 0 8px 32px rgba(0, 0, 0, .4);--builder-canvas-header-background: linear-gradient(90deg, #1e1e1e 0%, #2a2a2a 100%);--builder-canvas-header-title-gradient: linear-gradient(45deg, #8ab4f8, #4285f4);--builder-canvas-workspace-background: #131314;--builder-canvas-instruction-background: rgba(19, 19, 20, .9);--builder-canvas-instruction-border: rgba(138, 180, 248, .2);--builder-canvas-node-background: rgba(85, 107, 116, .4);--builder-canvas-node-border: #474747;--builder-canvas-node-hover-border: #666;--builder-canvas-node-chip-outline: rgba(255, 255, 255, .1);--builder-canvas-node-badge-background: linear-gradient(135deg, rgba(0, 187, 234, .2), rgba(0, 78, 122, .4));--builder-canvas-group-background: #1c1c1c;--builder-canvas-group-border: #3e3e3e;--builder-canvas-handle-fill: rgba(0, 0, 0, 1);--builder-canvas-reconnect-handle-fill: rgba(0, 187, 234, .15);--builder-canvas-workflow-chip-background: rgba(0, 187, 234, .2);--builder-canvas-workflow-chip-border: rgba(0, 187, 234, .4);--builder-canvas-add-btn-background: radial-gradient(circle at 50% 50%, #1f2330 0%, #131314 100%);--builder-canvas-add-btn-hover-background: radial-gradient(circle at 50% 50%, #222a3a 0%, #16181d 100%);--builder-canvas-add-btn-shadow: 0 4px 12px rgba(0, 187, 234, .35);--builder-canvas-empty-group-background: rgba(255, 255, 255, .02);--builder-canvas-empty-group-border: rgba(0, 187, 234, .3);--builder-canvas-empty-group-hover-background: rgba(255, 255, 255, .04);--builder-canvas-empty-group-hover-border: rgba(0, 187, 234, .5);--builder-canvas-empty-group-btn-background: rgba(0, 187, 234, .1);--builder-canvas-empty-group-btn-hover-background: rgba(0, 187, 234, .2);--builder-button-background-color: rgba(138, 180, 248, .1);--builder-button-border-color: rgba(138, 180, 248, .3);--builder-button-text-color: #8ab4f8;--builder-button-hover-background-color: rgba(138, 180, 248, .2);--builder-button-hover-border-color: #8ab4f8;--builder-item-hover-color: rgba(138, 180, 248, .1);--builder-chip-background-color: rgba(138, 180, 248, .2);--builder-accent-color: #00bbea;--builder-tool-item-background-color: rgba(255, 255, 255, .05);--builder-tool-item-border-color: rgba(255, 255, 255, .1);--builder-tool-item-hover-background-color: rgba(255, 255, 255, .1);--mat-table-row-item-label-text-color: #fff;--mat-table-header-headline-color: #fff;--mat-progress-spinner-active-indicator-color: #a8c7fa;--mat-progress-spinner-size: 80}html.light-theme{--mat-button-outlined-label-text-color: black;--chat-panel-function-event-button-background-color: #f2f1ef;--chat-panel-function-event-button-highlight-border-color: #0f5223;--chat-panel-function-event-button-highlight-color: white;--long-running-response-input-text-color: #202124;--long-running-response-input-caret-color: #202124;--long-running-response-input-placeholder-color: rgba(0, 0, 0, .5);--long-running-response-icon-color: rgba(0, 0, 0, .7);--long-running-response-send-button-color: #305f9d;--chat-panel-user-message-message-card-background-color: #d5e3ff;--chat-panel-user-message-message-card-color: #202124;--chat-panel-bot-message-message-card-background-color: #f3f0f0;--chat-panel-bot-message-message-card-color: #202124;--chat-panel-bot-message-focus-within-message-card-background-color: #ffffff;--chat-panel-bot-message-focus-within-message-card-border-color: #305f9d;--chat-panel-message-textarea-background-color: #f3f0f0;--chat-panel-message-textarea-focus-background-color: #ffffff;--chat-panel-eval-compare-container-background-color: #e5e2e2;--chat-panel-actual-result-border-right-color: #c8c6c6;--chat-panel-eval-response-header-border-bottom-color: #c8c6c6;--chat-panel-header-expected-color: #0f5223;--chat-panel-header-actual-color: #ba1a1a;--chat-panel-eval-pass-color: #0f5223;--chat-panel-eval-fail-color: #ba1a1a;--chat-panel-input-field-textarea-color: #202124;--chat-panel-input-field-textarea-placeholder-color: #5f5e5e;--chat-panel-input-field-textarea-caret-color: #202124;--chat-panel-input-field-button-color: #202124;--chat-panel-input-field-button-background-color: #e5e2e2;--chat-panel-mat-mdc-mini-fab-background-color: #305f9d;--chat-panel-mat-mdc-mini-fab-mat-icon-color: white;--chat-panel-input-field-mat-mdc-text-field-wrapper-border-color: #adabab;--chat-panel-delete-button-background-color: rgba(255, 255, 255, .9);--chat-panel-delete-button-color: #202124;--chat-panel-file-container-background-color: #f3f0f0;--chat-panel-thought-chip-background-color: #305f9d;--chat-panel-link-style-button-color: #305f9d;--artifact-tab-download-button-background-color: #305f9d;--artifact-tab-white-separator-border-top-color: #202124;--artifact-tab-version-select-container-background-color: #f3f0f0;--artifact-tab-link-style-button-color: #305f9d;--artifact-tab-link-style-button-hover-color: #0f4784;--artifact-tab-link-style-button-focus-outline-color: #305f9d;--artifact-tab-link-style-button-active-color: #003061;--artifact-tab-link-style-button-disabled-color: #929090;--audio-player-container-background-color: #f3f0f0;--audio-player-container-box-shadow-color: rgba(0, 0, 0, .1);--audio-player-custom-controls-button-background-color: #305f9d;--audio-player-custom-controls-button-color: white;--audio-player-custom-controls-button-hover-background-color: #0f4784;--chat-drawer-container-background-color: #ffffff;--chat-event-container-color: #202124;--chat-card-background-color: #ffffff;--chat-function-event-button-background-color: #202124;--chat-function-event-button-highlight-background-color: #0f5223;--chat-function-event-button-highlight-border-color: #0f5223;--chat-function-event-button-highlight-color: white;--chat-user-message-message-card-background-color: #d5e3ff;--chat-user-message-message-card-color: #202124;--chat-bot-message-message-card-background-color: #f3f0f0;--chat-bot-message-message-card-color: #202124;--chat-bot-message-focus-within-message-card-background-color: #ffffff;--chat-bot-message-focus-within-message-card-border-color: #305f9d;--chat-message-textarea-background-color: #f3f0f0;--chat-message-textarea-focus-background-color: #ffffff;--chat-eval-compare-container-background-color: #e5e2e2;--chat-actual-result-border-right-color: #c8c6c6;--chat-eval-response-header-border-bottom-color: #c8c6c6;--chat-header-expected-color: #0f5223;--chat-header-actual-color: #ba1a1a;--chat-eval-pass-color: #0f5223;--chat-eval-fail-color: #ba1a1a;--chat-side-drawer-background-color: #f3f0f0;--chat-side-drawer-color: #202124;--chat-file-item-background-color: #e5e2e2;--chat-empty-state-container-color: #202124;--chat-warning-color: #93000a;--chat-error-color: #ba1a1a;--chat-mat-mdc-unelevated-button-color: white;--chat-mat-mdc-unelevated-button-background-color: #305f9d;--chat-mdc-linear-progress-buffer-dots-background-color: #202124;--chat-mat-mdc-text-field-wrapper-border-color: #adabab;--chat-segment-key-color: #5f5e5e;--chat-bottom-resize-handler-background-color: #adabab;--chat-readonly-badge-background-color: #ba1a1a;--chat-readonly-badge-color: white;--chat-trace-detail-container-background-color: #f3f0f0;--chat-toolbar-background-color: #f3f0f0;--chat-toolbar-edit-mode-background-color: rgba(15, 82, 35, .1);--chat-toolbar-session-text-color: #202124;--chat-toolbar-session-id-color: #5f5e5e;--chat-toolbar-icon-color: #5f5e5e;--chat-toolbar-new-session-color: #5f5e5e;--chat-toolbar-sse-toggle-label-text-color: #202124;--chat-toolbar-sse-toggle-unselected-track-color: #c8c6c6;--chat-toolbar-sse-toggle-unselected-handle-color: #5f5e5e;--chat-toolbar-sse-toggle-selected-track-color: #82adf0;--chat-toolbar-sse-toggle-selected-handle-color: #305f9d;--chat-toolbar-sse-toggle-track-outline-color: #305f9d;--chat-mat-drawer-border-right-color: #c8c6c6;--edit-json-dialog-container-box-shadow-color: rgba(0, 0, 0, .2);--eval-tab-eval-set-actions-color: #5f5e5e;--eval-tab-empty-eval-info-background-color: #f3f0f0;--eval-tab-empty-eval-info-box-shadow-color1: rgba(0, 0, 0, .08);--eval-tab-empty-eval-info-box-shadow-color2: rgba(0, 0, 0, .15);--eval-tab-info-title-color: #202124;--eval-tab-info-detail-color: #202124;--eval-tab-info-create-color: #305f9d;--eval-tab-selected-eval-case-color: #305f9d;--eval-tab-save-session-btn-background-color1: rgba(48, 95, 157, .12);--eval-tab-save-session-btn-background-color2: #f3f0f0;--eval-tab-save-session-btn-text-color: #0f4784;--eval-tab-run-eval-btn-border-color: #adabab;--eval-tab-run-eval-btn-color: #305f9d;--eval-tab-run-eval-btn-hover-background-color: #f3f0f0;--eval-tab-result-btn-border-color: #adabab;--eval-tab-result-btn-hover-background-color: #f3f0f0;--eval-tab-result-btn-pass-color: #0f5223;--eval-tab-result-btn-fail-color: #ba1a1a;--eval-tab-status-card-background-color: #f3f0f0;--eval-tab-status-card-timestamp-color: #5f5e5e;--eval-tab-status-card-metric-color: #787777;--eval-tab-status-card-failed-color: #ba1a1a;--eval-tab-status-card-separator-color: #c8c6c6;--eval-tab-status-card-passed-color: #0f5223;--eval-tab-status-card-action-mat-icon-color: #5f5e5e;--eval-tab-status-card-icon-color: #5f5e5e;--run-eval-config-dialog-container-box-shadow-color: rgba(0, 0, 0, .2);--run-eval-config-dialog-threshold-slider-active-track-color: #305f9d;--run-eval-config-dialog-threshold-slider-inactive-track-color: #c8c6c6;--run-eval-config-dialog-threshold-slider-handle-color: #305f9d;--run-eval-config-dialog-threshold-slider-ripple-color: #305f9d;--run-eval-config-dialog-mdc-slider-thumb-background-color: white;--event-tab-events-wrapper-color: #5f5e5e;--event-tab-event-index-color: #787777;--event-tab-event-list-active-indicator-color: #ff5449;--event-tab-event-list-list-item-container-color: #f3f0f0;--event-tab-mdc-list-item-border-color: #c8c6c6;--event-tab-mdc-list-item-hover-background-color: #e5e2e2;--trace-chart-trace-label-color: #202124;--trace-chart-trace-bar-background-color: #a7c8ff;--trace-chart-trace-bar-color: #305f9d;--trace-chart-trace-duration-color: #787777;--trace-chart-vertical-line-background-color: #c8c6c6;--trace-chart-horizontal-line-background-color: #c8c6c6;--session-tab-session-wrapper-color: #5f5e5e;--session-tab-session-item-background-color: #f3f0f0;--session-tab-session-item-hover-background-color: #e5e2e2;--session-tab-session-item-current-background-color: #d5e3ff;--session-tab-session-id-color: #202124;--session-tab-session-date-color: #5f5e5e;--side-panel-button-filled-container-color: #305f9d;--side-panel-button-filled-label-text-color: white;--side-panel-mat-icon-color: #5f5e5e;--side-panel-resize-handler-background-color: #adabab;--side-panel-details-panel-container-background-color: #f3f0f0;--side-panel-details-content-color: #202124;--side-panel-powered-by-adk-color: #787777;--side-panel-app-select-container-background-color: #ffffff;--side-panel-select-placeholder-text-color: #305f9d;--side-panel-select-enabled-trigger-text-color: #305f9d;--side-panel-select-enabled-arrow-color: #305f9d;--side-panel-app-name-option-color: #5f5e5e;--trace-tab-trace-title-color: #5f5e5e;--trace-tab-trace-label-color: #202124;--trace-tab-trace-bar-background-color: #a7c8ff;--trace-tab-trace-bar-color: #305f9d;--trace-tab-trace-duration-color: #787777;--trace-tab-vertical-line-background-color: #c8c6c6;--trace-tab-horizontal-line-background-color: #c8c6c6;--trace-tab-trace-item-container-background-color: #f3f0f0;--trace-tab-trace-item-header-focus-state-layer-color: rgba(48, 95, 157, .12);--trace-tab-trace-item-header-description-color: #787777;--trace-tab-mat-expansion-panel-header-focus-background-color: #e5e2e2;--trace-tab-mat-expansion-panel-header-background-color: #e5e2e2;--trace-tab-mat-expansion-panel-header-hover-background-color: #e5e2e2;--trace-event-json-viewer-container-background-color: #ffffff;--trace-tree-trace-label-color: #202124;--trace-tree-trace-bar-background-color: #a7c8ff;--trace-tree-trace-bar-color: #305f9d;--trace-tree-short-trace-bar-duration-color: #305f9d;--trace-tree-trace-duration-color: #787777;--trace-tree-trace-row-hover-background-color: #e5e2e2;--trace-tree-trace-row-selected-background-color: #e5e2e2;--trace-tree-vertical-line-background-color: #c8c6c6;--trace-tree-horizontal-line-background-color: #c8c6c6;--trace-tree-invocation-id-container-color: #5f5e5e;--trace-tree-trace-row-left-span-div-color: #202124;--trace-tree-trace-row-left-is-event-row-color: #305f9d;--builder-container-background-color: #ffffff;--builder-panel-background-color: #f3f0f0;--builder-tabs-background-color: #f3f0f0;--builder-card-background-color: #ffffff;--builder-secondary-background-color: #e5e2e2;--builder-tertiary-background-color: #f3f0f0;--builder-hover-background-color: #dcd9d9;--builder-border-color: #c8c6c6;--builder-text-primary-color: #202124;--builder-text-secondary-color: #5f5e5e;--builder-text-tertiary-color: #787777;--builder-text-muted-color: #929090;--builder-text-link-color: #305f9d;--builder-breadcrumb-separator-color: #c8c6c6;--builder-form-field-background-color: #e5e2e2;--builder-tool-chip-background-color: #ffffff;--builder-tool-chip-hover-color: #e5e2e2;--builder-callback-chip-background-color: #e5e2e2;--builder-callback-chip-text-color: #202124;--builder-callback-chip-type-color: #5f5e5e;--builder-callback-chip-name-color: #202124;--builder-expansion-background-color: #e5e2e2;--builder-expansion-header-description-color: #787777;--builder-expansion-hover-color: #dcd9d9;--builder-menu-background-color: #ffffff;--builder-menu-item-hover-color: #e5e2e2;--builder-menu-divider-color: #c8c6c6;--builder-button-primary-background-color: #305f9d;--builder-button-primary-text-color: #ffffff;--builder-button-primary-hover-color: #0f4784;--builder-button-secondary-text-color: #5f5e5e;--builder-button-secondary-border-color: rgba(95, 94, 94, .3);--builder-button-secondary-hover-background-color: rgba(95, 94, 94, .1);--builder-button-secondary-hover-text-color: #202124;--builder-add-button-background-color: rgba(48, 95, 157, .12);--builder-add-button-text-color: #0f4784;--builder-icon-color: #202124;--builder-assistant-panel-background-color: #f3f0f0;--builder-assistant-panel-header-background-color: #e5e2e2;--builder-assistant-panel-border-color: #c8c6c6;--builder-assistant-input-background-color: #ffffff;--builder-assistant-input-text-color: #202124;--builder-assistant-input-placeholder-color: #929090;--builder-assistant-user-message-background-color: #d5e3ff;--builder-assistant-user-message-border-color: #a7c8ff;--builder-assistant-user-message-text-color: #202124;--builder-assistant-bot-message-text-color: #202124;--builder-assistant-send-button-color: #5f5e5e;--builder-assistant-send-button-hover-color: #305f9d;--builder-assistant-send-button-disabled-color: #c8c6c6;--builder-canvas-container-background: linear-gradient(135deg, #f8f9fa 0%, #e8eaed 100%);--builder-canvas-shadow: 0 8px 32px rgba(0, 0, 0, .1);--builder-canvas-header-background: linear-gradient(90deg, #ffffff 0%, #f3f0f0 100%);--builder-canvas-header-title-gradient: linear-gradient(45deg, #305f9d, #0f4784);--builder-canvas-workspace-background: #ffffff;--builder-canvas-instruction-background: rgba(255, 255, 255, .95);--builder-canvas-instruction-border: rgba(48, 95, 157, .3);--builder-canvas-node-background: rgba(229, 226, 226, .6);--builder-canvas-node-border: #c8c6c6;--builder-canvas-node-hover-border: #adabab;--builder-canvas-node-chip-outline: rgba(200, 198, 198, .3);--builder-canvas-node-badge-background: linear-gradient(135deg, rgba(48, 95, 157, .15), rgba(15, 71, 132, .2));--builder-canvas-group-background: #f3f0f0;--builder-canvas-group-border: #c8c6c6;--builder-canvas-handle-fill: rgba(255, 255, 255, 1);--builder-canvas-reconnect-handle-fill: rgba(48, 95, 157, .15);--builder-canvas-workflow-chip-background: rgba(48, 95, 157, .15);--builder-canvas-workflow-chip-border: rgba(48, 95, 157, .3);--builder-canvas-add-btn-background: radial-gradient(circle at 50% 50%, #ffffff 0%, #f8f9fa 100%);--builder-canvas-add-btn-hover-background: radial-gradient(circle at 50% 50%, #f3f0f0 0%, #e8eaed 100%);--builder-canvas-add-btn-shadow: 0 4px 12px rgba(48, 95, 157, .25);--builder-canvas-empty-group-background: rgba(48, 95, 157, .03);--builder-canvas-empty-group-border: rgba(48, 95, 157, .3);--builder-canvas-empty-group-hover-background: rgba(48, 95, 157, .06);--builder-canvas-empty-group-hover-border: rgba(48, 95, 157, .5);--builder-canvas-empty-group-btn-background: rgba(48, 95, 157, .1);--builder-canvas-empty-group-btn-hover-background: rgba(48, 95, 157, .2);--builder-button-background-color: rgba(48, 95, 157, .1);--builder-button-border-color: rgba(48, 95, 157, .3);--builder-button-text-color: #305f9d;--builder-button-hover-background-color: rgba(48, 95, 157, .2);--builder-button-hover-border-color: #305f9d;--builder-item-hover-color: rgba(48, 95, 157, .1);--builder-chip-background-color: rgba(48, 95, 157, .15);--builder-accent-color: #305f9d;--builder-tool-item-background-color: #f6f3f3;--builder-tool-item-border-color: #c8c6c6;--builder-tool-item-hover-background-color: #dcd9d9;--mat-progress-spinner-active-indicator-color: #305f9d;--mat-progress-spinner-size: 80}html.dark-theme{--mat-form-field-disabled-input-text-placeholder-color: orange;--mat-form-field-filled-active-indicator-color: red;--mat-form-field-outlined-outline-color: #cccccc;--mat-form-field-outlined-input-text-color: #cccccc;--mat-form-field-outlined-label-text-color: #cccccc;--mat-form-field-outlined-hover-label-text-color: #cccccc;--mat-form-field-outlined-focus-label-text-color: #cccccc;--mat-form-field-outlined-disabled-label-text-color: #cccccc;--mat-form-field-outlined-disabled-input-text-color: #cccccc;--mat-form-field-outlined-disabled-outline-color: #cccccc;--mat-form-field-outlined-caret-color: #cccccc}html.light-theme{--mat-form-field-disabled-input-text-placeholder-color: #ff8983;--mat-form-field-filled-active-indicator-color: #ba1a1a;--mat-form-field-outlined-outline-color: #787777;--mat-form-field-outlined-input-text-color: #202124;--mat-form-field-outlined-label-text-color: #5f5e5e;--mat-form-field-outlined-hover-label-text-color: #202124;--mat-form-field-outlined-focus-label-text-color: #305f9d;--mat-form-field-outlined-disabled-label-text-color: #929090;--mat-form-field-outlined-disabled-input-text-color: #929090;--mat-form-field-outlined-disabled-outline-color: #c8c6c6;--mat-form-field-outlined-caret-color: #305f9d}.mdc-line-ripple{display:none}.mat-mdc-tooltip{z-index:10000!important;max-width:300px}.mat-mdc-select-panel{background-color:var(--mat-select-panel-background-color)!important}html.light-theme .mat-expansion-panel{box-shadow:none!important;border:1px solid #e0e0e0;border-radius:4px!important}html.light-theme .mat-expansion-panel:not(:last-child){margin-bottom:8px}html.light-theme .mat-expansion-panel-header{border-bottom:none!important}html.dark-theme .mat-expansion-panel{box-shadow:none!important;border:1px solid #444746;border-radius:4px!important}html.dark-theme .mat-expansion-panel:not(:last-child){margin-bottom:8px}html.dark-theme .mat-expansion-panel-header{border-bottom:none!important}.wide-agent-dropdown-panel{padding:0!important}.wide-agent-dropdown-panel .search-option{position:sticky!important;top:0!important;z-index:1000!important;opacity:1!important;padding-top:8px;padding-bottom:8px}.wide-agent-dropdown-panel span{width:100%}html.dark-theme .wide-agent-dropdown-panel .search-option{background-color:#2b2b2f!important}html.dark-theme .wide-agent-dropdown-panel .search-option input{caret-color:#fff!important}html.light-theme .wide-agent-dropdown-panel .search-option{background-color:#fff!important}.function-args-tooltip .mdc-tooltip__surface{background-color:#333!important;color:#fff!important;border:2px solid #666!important;border-radius:2px!important;padding:8px 12px!important;font-family:Courier New,monospace!important;font-size:12px!important;white-space:pre-wrap!important;max-width:800px!important;line-height:1.2!important;box-shadow:0 2px 8px #0000004d!important}html.dark-theme{--chat-panel-event-number-label-color: rgba(255, 255, 255, .8)}html.light-theme{--chat-panel-event-number-label-color: #5f6368}.json-key{color:#9876aa;font-weight:600}.json-string{color:#6a8759}.json-number{color:#6897bb}.json-boolean{color:#cc7832}.json-null{color:gray}.json-tooltip-panel{background-color:#333!important;color:#fff!important;border:2px solid #666!important;border-radius:4px!important;padding:8px 12px!important;box-shadow:0 2px 8px #0000004d!important;max-width:800px!important} From ae565be30e64249b2913ad647911061a8b170e21 Mon Sep 17 00:00:00 2001 From: George Weale Date: Wed, 11 Mar 2026 14:56:30 -0700 Subject: [PATCH 006/192] fix: Preserve thought_signature in LiteLLM tool calls This change adds logic to extract and re-embed the `thought_signature` field associated with function calls in Gemini models when converting between LiteLLM's ChatCompletionMessageToolCall and ADK's types.Part Close #4650 Co-authored-by: George Weale PiperOrigin-RevId: 882212223 --- src/google/adk/models/lite_llm.py | 123 +++++++++++- tests/unittests/models/test_litellm.py | 257 ++++++++++++++++++++++--- 2 files changed, 345 insertions(+), 35 deletions(-) diff --git a/src/google/adk/models/lite_llm.py b/src/google/adk/models/lite_llm.py index ed265abe9f..1eb902630f 100644 --- a/src/google/adk/models/lite_llm.py +++ b/src/google/adk/models/lite_llm.py @@ -15,6 +15,7 @@ from __future__ import annotations import base64 +import binascii import copy import importlib.util import json @@ -143,6 +144,11 @@ "before a response was recorded)." ) +# Separator LiteLLM uses to embed thought_signature in tool call IDs. +# Gemini's thoughtSignature requirement is documented here: +# https://ai.google.dev/gemini-api/docs/thought-signatures +_THOUGHT_SIGNATURE_SEPARATOR = "__thought__" + _LITELLM_IMPORTED = False _LITELLM_GLOBAL_SYMBOLS = ( "ChatCompletionAssistantMessage", @@ -602,6 +608,27 @@ def _extract_cached_prompt_tokens(usage: Any) -> int: return 0 +def _decode_thought_signature(value: Any) -> Optional[bytes]: + """Safely decodes a thought_signature value to bytes. + + Args: + value: A base64 string or raw bytes thought_signature. + + Returns: + The decoded bytes, or None if decoding fails. + """ + if isinstance(value, bytes): + return value + try: + return base64.b64decode(value, validate=True) + except (binascii.Error, TypeError, ValueError): + logger.debug( + "Failed to decode thought_signature of type %s.", + type(value).__name__, + ) + return None + + def _extract_reasoning_tokens(usage: Any) -> int: """Extracts reasoning tokens from LiteLLM usage. @@ -637,6 +664,64 @@ def _extract_reasoning_tokens(usage: Any) -> int: return 0 +def _extract_thought_signature_from_tool_call( + tool_call: ChatCompletionMessageToolCall, +) -> Optional[bytes]: + """Extracts thought_signature from a litellm tool call if present. + + Gemini thinking models attach a thought_signature to function call parts. + See https://ai.google.dev/gemini-api/docs/thought-signatures. + This signature may appear in several locations depending on the + provider path: + 1. extra_content.google.thought_signature (OpenAI-compatible API). + 2. provider_specific_fields on the tool call or function (Vertex). + 3. Embedded in the tool call ID via __thought__ separator. + + Args: + tool_call: A litellm tool call object. + + Returns: + The thought_signature as bytes, or None if not present. + """ + # Check extra_content.google.thought_signature (OpenAI format) + extra_content = tool_call.get("extra_content") + if isinstance(extra_content, dict): + google_fields = extra_content.get("google") + if isinstance(google_fields, dict): + signature = google_fields.get("thought_signature") + if signature: + return _decode_thought_signature(signature) + + # Check provider_specific_fields on the tool call + provider_fields = tool_call.get("provider_specific_fields") + if isinstance(provider_fields, dict): + signature = provider_fields.get("thought_signature") + if signature: + return _decode_thought_signature(signature) + + # Check provider_specific_fields on the function + function = tool_call.get("function") + if function: + func_provider_fields = None + if isinstance(function, dict): + func_provider_fields = function.get("provider_specific_fields") + elif hasattr(function, "provider_specific_fields"): + func_provider_fields = function.provider_specific_fields + if isinstance(func_provider_fields, dict): + signature = func_provider_fields.get("thought_signature") + if signature: + return _decode_thought_signature(signature) + + # Check if thought signature is embedded in the tool call ID + tool_call_id = tool_call.get("id") or "" + if _THOUGHT_SIGNATURE_SEPARATOR in tool_call_id: + parts = tool_call_id.split(_THOUGHT_SIGNATURE_SEPARATOR, 1) + if len(parts) == 2: + return _decode_thought_signature(parts[1]) + + return None + + async def _content_to_message_param( content: types.Content, *, @@ -706,16 +791,31 @@ async def _content_to_message_param( reasoning_parts: list[types.Part] = [] for part in content.parts: if part.function_call: - tool_calls.append( - ChatCompletionAssistantToolCall( - type="function", - id=part.function_call.id, - function=Function( - name=part.function_call.name, - arguments=_safe_json_serialize(part.function_call.args), - ), - ) - ) + tool_call_id = part.function_call.id or "" + tool_call_dict: ChatCompletionAssistantToolCall = { + "type": "function", + "id": tool_call_id, + "function": { + "name": part.function_call.name, + "arguments": _safe_json_serialize(part.function_call.args), + }, + } + # Preserve thought_signature for Gemini thinking models. + # LiteLLM's Gemini prompt conversion reads provider_specific_fields, + # while the OpenAI-compatible Gemini endpoint path expects the + # extra_content.google.thought_signature payload to survive. + # See https://ai.google.dev/gemini-api/docs/thought-signatures. + if part.thought_signature: + sig = part.thought_signature + if isinstance(sig, bytes): + sig = base64.b64encode(sig).decode("utf-8") + tool_call_dict["provider_specific_fields"] = { + "thought_signature": sig + } + tool_call_dict["extra_content"] = { + "google": {"thought_signature": sig} + } + tool_calls.append(tool_call_dict) elif part.thought: reasoning_parts.append(part) else: @@ -1524,11 +1624,14 @@ def _message_to_generate_content_response( if tool_calls: for tool_call in tool_calls: if tool_call.type == "function": + thought_signature = _extract_thought_signature_from_tool_call(tool_call) part = types.Part.from_function_call( name=tool_call.function.name, args=json.loads(tool_call.function.arguments or "{}"), ) part.function_call.id = tool_call.id + if thought_signature: + part.thought_signature = thought_signature parts.append(part) return LlmResponse( diff --git a/tests/unittests/models/test_litellm.py b/tests/unittests/models/test_litellm.py index e080b4c733..8fda3d98d4 100644 --- a/tests/unittests/models/test_litellm.py +++ b/tests/unittests/models/test_litellm.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License +import base64 import contextlib import json import logging @@ -28,6 +29,7 @@ from google.adk.models.lite_llm import _content_to_message_param from google.adk.models.lite_llm import _enforce_strict_openai_schema from google.adk.models.lite_llm import _extract_reasoning_value +from google.adk.models.lite_llm import _extract_thought_signature_from_tool_call from google.adk.models.lite_llm import _FILE_ID_REQUIRED_PROVIDERS from google.adk.models.lite_llm import _FINISH_REASON_MAPPING from google.adk.models.lite_llm import _function_declaration_to_tool_param @@ -42,6 +44,7 @@ from google.adk.models.lite_llm import _redirect_litellm_loggers_to_stdout from google.adk.models.lite_llm import _schema_to_dict from google.adk.models.lite_llm import _split_message_content_and_tool_calls +from google.adk.models.lite_llm import _THOUGHT_SIGNATURE_SEPARATOR from google.adk.models.lite_llm import _to_litellm_response_format from google.adk.models.lite_llm import _to_litellm_role from google.adk.models.lite_llm import FunctionChunk @@ -2421,6 +2424,219 @@ def test_extract_reasoning_value_no_reasoning_fields(): assert result is None +def test_extract_thought_signature_from_extra_content(): + """Extracts thought_signature from extra_content (OpenAI-compatible path).""" + sig_b64 = base64.b64encode(b"test_signature").decode("utf-8") + tc = ChatCompletionMessageToolCall( + type="function", + id="call_123", + function=Function(name="test_fn", arguments="{}"), + extra_content={"google": {"thought_signature": sig_b64}}, + ) + result = _extract_thought_signature_from_tool_call(tc) + assert result == b"test_signature" + + +def test_extract_thought_signature_from_provider_specific_fields(): + """Extracts thought_signature from provider_specific_fields (Vertex path).""" + sig_b64 = base64.b64encode(b"vertex_sig").decode("utf-8") + tc = ChatCompletionMessageToolCall( + type="function", + id="call_456", + function=Function(name="test_fn", arguments="{}"), + provider_specific_fields={"thought_signature": sig_b64}, + ) + result = _extract_thought_signature_from_tool_call(tc) + assert result == b"vertex_sig" + + +def test_extract_thought_signature_from_function_provider_fields(): + """Extracts thought_signature from function's provider_specific_fields. + + When provider_specific_fields is set directly on the function object + (e.g. by litellm internals), the extraction should find it. + """ + sig_b64 = base64.b64encode(b"func_sig").decode("utf-8") + tc = ChatCompletionMessageToolCall( + type="function", + id="call_func", + function=Function(name="test_fn", arguments="{}"), + ) + # Simulate litellm setting provider_specific_fields on the function + tc.function.provider_specific_fields = { + "thought_signature": sig_b64, + } + result = _extract_thought_signature_from_tool_call(tc) + assert result == b"func_sig" + + +def test_extract_thought_signature_from_id(): + """Extracts thought_signature from tool call ID (__thought__ separator).""" + sig_b64 = base64.b64encode(b"id_sig").decode("utf-8") + tc = ChatCompletionMessageToolCall( + type="function", + id=f"call_789{_THOUGHT_SIGNATURE_SEPARATOR}{sig_b64}", + function=Function(name="test_fn", arguments="{}"), + ) + result = _extract_thought_signature_from_tool_call(tc) + assert result == b"id_sig" + + +def test_extract_thought_signature_returns_none_when_absent(): + """Returns None when no thought_signature is present.""" + tc = ChatCompletionMessageToolCall( + type="function", + id="call_plain", + function=Function(name="test_fn", arguments="{}"), + ) + result = _extract_thought_signature_from_tool_call(tc) + assert result is None + + +def test_extract_thought_signature_corrupted_base64_returns_none(): + """Returns None gracefully for corrupted base64 signatures.""" + tc = ChatCompletionMessageToolCall( + type="function", + id="call_bad", + function=Function(name="test_fn", arguments="{}"), + extra_content={"google": {"thought_signature": "!!!not_valid_base64!!!"}}, + ) + result = _extract_thought_signature_from_tool_call(tc) + assert result is None + + +def test_message_to_generate_content_response_preserves_thought_signature(): + """thought_signature from tool call is preserved on the output Part.""" + sig_b64 = base64.b64encode(b"round_trip_sig").decode("utf-8") + message = ChatCompletionAssistantMessage( + role="assistant", + content=None, + tool_calls=[ + ChatCompletionMessageToolCall( + type="function", + id="call_ts_1", + function=Function( + name="load_skill", + arguments='{"skill": "my_skill"}', + ), + extra_content={"google": {"thought_signature": sig_b64}}, + ) + ], + ) + + response = _message_to_generate_content_response(message) + fc_part = response.content.parts[0] + assert fc_part.function_call.name == "load_skill" + assert fc_part.function_call.id == "call_ts_1" + assert fc_part.thought_signature == b"round_trip_sig" + + +def test_message_to_generate_content_response_no_thought_signature(): + """Parts without thought_signature have thought_signature=None.""" + message = ChatCompletionAssistantMessage( + role="assistant", + content=None, + tool_calls=[ + ChatCompletionMessageToolCall( + type="function", + id="call_no_ts", + function=Function( + name="plain_tool", + arguments="{}", + ), + ) + ], + ) + + response = _message_to_generate_content_response(message) + fc_part = response.content.parts[0] + assert fc_part.function_call.name == "plain_tool" + assert fc_part.thought_signature is None + + +@pytest.mark.asyncio +async def test_content_to_message_param_preserves_thought_signature(): + """thought_signature on Part is emitted on both tool call metadata paths.""" + sig_bytes = b"preserved_sig" + sig_b64 = base64.b64encode(sig_bytes).decode("utf-8") + content = types.Content( + role="model", + parts=[ + types.Part( + function_call=types.FunctionCall( + name="load_skill", + args={"skill": "my_skill"}, + id="call_rt", + ), + thought_signature=sig_bytes, + ), + ], + ) + + message = await _content_to_message_param(content) + assert message["role"] == "assistant" + tc = message["tool_calls"][0] + assert tc["function"]["name"] == "load_skill" + assert tc["id"] == "call_rt" + assert tc["provider_specific_fields"] == {"thought_signature": sig_b64} + assert tc["extra_content"] == {"google": {"thought_signature": sig_b64}} + + +@pytest.mark.asyncio +async def test_content_to_message_param_no_thought_signature(): + """Tool calls without thought_signature have no signature metadata.""" + content = types.Content( + role="model", + parts=[ + types.Part.from_function_call(name="plain_tool", args={"key": "val"}), + ], + ) + content.parts[0].function_call.id = "call_plain" + + message = await _content_to_message_param(content) + tc = message["tool_calls"][0] + assert tc["id"] == "call_plain" + assert "provider_specific_fields" not in tc + assert "extra_content" not in tc + + +@pytest.mark.asyncio +async def test_thought_signature_round_trip(): + """thought_signature survives a full round trip through ADK conversions. + + Simulates the flow: litellm response → types.Part → litellm request. + """ + sig_b64 = base64.b64encode(b"full_round_trip").decode("utf-8") + + # Step 1: Incoming litellm message with thought_signature + incoming_message = ChatCompletionAssistantMessage( + role="assistant", + content=None, + tool_calls=[ + ChatCompletionMessageToolCall( + type="function", + id="call_round", + function=Function( + name="load_skill", + arguments='{"skill_name": "test"}', + ), + extra_content={"google": {"thought_signature": sig_b64}}, + ) + ], + ) + + # Step 2: Convert to ADK internal format (types.Content) + llm_response = _message_to_generate_content_response(incoming_message) + fc_part = llm_response.content.parts[0] + assert fc_part.thought_signature == b"full_round_trip" + + # Step 3: Convert back to litellm format + outgoing_message = await _content_to_message_param(llm_response.content) + out_tc = outgoing_message["tool_calls"][0] + assert out_tc["provider_specific_fields"] == {"thought_signature": sig_b64} + assert out_tc["extra_content"] == {"google": {"thought_signature": sig_b64}} + + def test_parse_tool_calls_from_text_multiple_calls(): text = ( '{"name":"alpha","arguments":{"value":1}}\n' @@ -3018,32 +3234,24 @@ def test_to_litellm_role(): (None, "stop"), ), ( - ModelResponse( - choices=[{"finish_reason": "tool_calls"}], - usage={ - "prompt_tokens": 0, - "completion_tokens": 0, - "total_tokens": 0, - }, - ), + ModelResponse(choices=[{"finish_reason": "tool_calls"}]), [None], - UsageMetadataChunk( - prompt_tokens=0, completion_tokens=0, total_tokens=0 + ( + None, + UsageMetadataChunk( + prompt_tokens=0, completion_tokens=0, total_tokens=0 + ), ), "tool_calls", ), ( - ModelResponse( - choices=[{}], - usage={ - "prompt_tokens": 0, - "completion_tokens": 0, - "total_tokens": 0, - }, - ), + ModelResponse(choices=[{}]), [None], - UsageMetadataChunk( - prompt_tokens=0, completion_tokens=0, total_tokens=0 + ( + None, + UsageMetadataChunk( + prompt_tokens=0, completion_tokens=0, total_tokens=0 + ), ), "stop", ), @@ -3172,7 +3380,9 @@ def test_model_response_to_chunk( else: assert finished == expected_finished - if expected_usage_chunk is None: + if isinstance(expected_usage_chunk, tuple): + assert usage_chunk in expected_usage_chunk + elif expected_usage_chunk is None: assert usage_chunk is None else: assert usage_chunk is not None @@ -3780,7 +3990,6 @@ async def test_streaming_tool_call_truncated_by_max_tokens( ) ] ), - # finish_reason="length" arrives before args are complete ModelResponseStream( choices=[StreamingChoices(finish_reason="length", delta=Delta())] ), @@ -3829,7 +4038,6 @@ async def test_streaming_tool_call_complete_with_length_finish_reason( ) ] ), - # finish_reason="length" but tool call args are valid JSON ModelResponseStream( choices=[StreamingChoices(finish_reason="length", delta=Delta())] ), @@ -3873,7 +4081,6 @@ async def test_streaming_text_truncated_by_max_tokens( ) ] ), - # finish_reason="length" on text-only response ModelResponseStream( choices=[StreamingChoices(finish_reason="length", delta=Delta())] ), @@ -3895,10 +4102,10 @@ async def test_streaming_text_truncated_by_max_tokens( ) ] - # First response is the partial text chunk, second is the aggregated response partial_responses = [r for r in responses if r.partial] aggregated_responses = [r for r in responses if not r.partial] + assert len(partial_responses) == 1 assert len(aggregated_responses) == 1 aggregated = aggregated_responses[0] assert aggregated.finish_reason == types.FinishReason.MAX_TOKENS From 066fcec3e8e669d1c5360e1556afce3f7e068072 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Wed, 11 Mar 2026 14:58:03 -0700 Subject: [PATCH 007/192] feat: Add support for toolsets to additional_tools field of SkillToolset Co-authored-by: Kathy Wu PiperOrigin-RevId: 882212923 --- src/google/adk/tools/skill_toolset.py | 20 +++++-- tests/unittests/tools/test_skill_toolset.py | 59 ++++++++++++++++++--- 2 files changed, 70 insertions(+), 9 deletions(-) diff --git a/src/google/adk/tools/skill_toolset.py b/src/google/adk/tools/skill_toolset.py index 25f5ea1416..3ea1f2bfe4 100644 --- a/src/google/adk/tools/skill_toolset.py +++ b/src/google/adk/tools/skill_toolset.py @@ -702,8 +702,11 @@ def __init__( self._script_timeout = script_timeout self._provided_tools_by_name = {} + self._provided_toolsets = [] for tool_union in additional_tools or []: - if isinstance(tool_union, BaseTool): + if isinstance(tool_union, BaseToolset): + self._provided_toolsets.append(tool_union) + elif isinstance(tool_union, BaseTool): self._provided_tools_by_name[tool_union.name] = tool_union elif callable(tool_union): ft = FunctionTool(tool_union) @@ -754,11 +757,22 @@ async def _resolve_additional_tools_from_state( if not additional_tool_names: return [] + # Collect all candidate tools from both individual tools and toolsets + candidate_tools = self._provided_tools_by_name.copy() + if self._provided_toolsets: + ts_results = await asyncio.gather(*( + ts.get_tools_with_prefix(readonly_context) + for ts in self._provided_toolsets + )) + for ts_tools in ts_results: + for t in ts_tools: + candidate_tools[t.name] = t + resolved_tools = [] existing_tool_names = {t.name for t in self._tools} for name in additional_tool_names: - if name in self._provided_tools_by_name: - tool = self._provided_tools_by_name[name] + if name in candidate_tools: + tool = candidate_tools[name] if tool.name in existing_tool_names: logger.error( "Tool name collision: tool '%s' already exists.", tool.name diff --git a/tests/unittests/tools/test_skill_toolset.py b/tests/unittests/tools/test_skill_toolset.py index 1c0f1d0e3d..3e8ca66377 100644 --- a/tests/unittests/tools/test_skill_toolset.py +++ b/tests/unittests/tools/test_skill_toolset.py @@ -15,6 +15,7 @@ import logging from unittest import mock +from google.adk.agents.readonly_context import ReadonlyContext from google.adk.code_executors.base_code_executor import BaseCodeExecutor from google.adk.code_executors.code_execution_utils import CodeExecutionResult from google.adk.models import llm_request as llm_request_model @@ -1290,24 +1291,51 @@ async def test_execute_script_binary_content_packaged(): @pytest.mark.asyncio -async def test_skill_toolset_dynamic_tool_resolution(mock_skill1): - # Set up a skill with additional_tools in metadata +async def test_skill_toolset_dynamic_tool_resolution(mock_skill1, mock_skill2): + # Set up skills with additional_tools in metadata mock_skill1.frontmatter.metadata = { - "adk_additional_tools": ["my_custom_tool", "my_func"] + "adk_additional_tools": ["my_custom_tool", "my_func", "shared_tool"] } mock_skill1.name = "skill1" + mock_skill2.frontmatter.metadata = { + "adk_additional_tools": [ + "skill2_tool", + "shared_tool", + "prefixed_mock_tool", + ] + } + mock_skill2.name = "skill2" + # Prepare additional tools custom_tool = mock.create_autospec(skill_toolset.BaseTool, instance=True) custom_tool.name = "my_custom_tool" + skill2_tool = mock.create_autospec(skill_toolset.BaseTool, instance=True) + skill2_tool.name = "skill2_tool" + + shared_tool = mock.create_autospec(skill_toolset.BaseTool, instance=True) + shared_tool.name = "shared_tool" + def my_func(): """My function description.""" pass + # Setup prefixed toolset + mock_tool = mock.create_autospec(skill_toolset.BaseTool, instance=True) + mock_tool.name = "prefixed_mock_tool" + prefixed_set = mock.create_autospec(skill_toolset.BaseToolset, instance=True) + prefixed_set.get_tools_with_prefix.return_value = [mock_tool] + toolset = skill_toolset.SkillToolset( - [mock_skill1], - additional_tools=[custom_tool, my_func], + [mock_skill1, mock_skill2], + additional_tools=[ + custom_tool, + skill2_tool, + shared_tool, + my_func, + prefixed_set, + ], ) ctx = _make_tool_context_with_agent() @@ -1315,16 +1343,35 @@ def my_func(): tools = await toolset.get_tools(readonly_context=ctx) assert len(tools) == 4 - # Activate skill + # Activate skills load_tool = skill_toolset.LoadSkillTool(toolset) await load_tool.run_async(args={"name": "skill1"}, tool_context=ctx) + await load_tool.run_async(args={"name": "skill2"}, tool_context=ctx) # Dynamic tools should now be resolved tools = await toolset.get_tools(readonly_context=ctx) tool_names = {t.name for t in tools} + + # Core tools + assert "list_skills" in tool_names + assert "load_skill" in tool_names + assert "load_skill_resource" in tool_names + assert "run_skill_script" in tool_names + + # Skill 1 tools assert "my_custom_tool" in tool_names assert "my_func" in tool_names + # Skill 2 tools + assert "skill2_tool" in tool_names + + # Shared tool (should only appear once) + assert "shared_tool" in tool_names + assert len([t for t in tools if t.name == "shared_tool"]) == 1 + + # Prefixed toolset tool + assert "prefixed_mock_tool" in tool_names + # Check specific tool resolution details my_func_tool = next(t for t in tools if t.name == "my_func") assert isinstance(my_func_tool, skill_toolset.FunctionTool) From 7b94a767337e0d642e808734608f07a70e077c62 Mon Sep 17 00:00:00 2001 From: George Weale Date: Wed, 11 Mar 2026 16:24:36 -0700 Subject: [PATCH 008/192] fix: Refactor LiteLlm check to avoid ImportError The `can_use_output_schema_with_tools` function now checks if a model is a LiteLlm instance by inspecting its type's Method Resolution Order, rather than directly importing `LiteLlm` Co-authored-by: George Weale PiperOrigin-RevId: 882253446 --- src/google/adk/utils/output_schema_utils.py | 12 +++-- .../utils/test_output_schema_utils.py | 54 ++++++++++++++++--- 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/src/google/adk/utils/output_schema_utils.py b/src/google/adk/utils/output_schema_utils.py index bb31d098a1..228e95b66d 100644 --- a/src/google/adk/utils/output_schema_utils.py +++ b/src/google/adk/utils/output_schema_utils.py @@ -36,10 +36,14 @@ def can_use_output_schema_with_tools(model: Union[str, BaseLlm]) -> bool: # tool_choice enforcement # This is strictly more reliable than the SetModelResponseTool # prompt-based workaround. - from ..models.lite_llm import LiteLlm - - if isinstance(model, LiteLlm): - return True + if not isinstance(model, str): + try: + from ..models.lite_llm import LiteLlm + except ImportError: + LiteLlm = None + + if LiteLlm is not None and isinstance(model, LiteLlm): + return True model_string = model if isinstance(model, str) else model.model diff --git a/tests/unittests/utils/test_output_schema_utils.py b/tests/unittests/utils/test_output_schema_utils.py index cf759c996b..2f9eb4bb09 100644 --- a/tests/unittests/utils/test_output_schema_utils.py +++ b/tests/unittests/utils/test_output_schema_utils.py @@ -12,10 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. +from __future__ import annotations + +import builtins +import importlib.util +import sys +from typing import Any from google.adk.models.anthropic_llm import Claude +from google.adk.models.base_llm import BaseLlm from google.adk.models.google_llm import Gemini -from google.adk.models.lite_llm import LiteLlm from google.adk.utils.output_schema_utils import can_use_output_schema_with_tools import pytest @@ -38,19 +44,51 @@ (Claude(model="claude-3.7-sonnet"), "1", False), (Claude(model="claude-3.7-sonnet"), "0", False), (Claude(model="claude-3.7-sonnet"), None, False), - (LiteLlm(model="openai/gpt-4o"), "1", True), - (LiteLlm(model="openai/gpt-4o"), "0", True), - (LiteLlm(model="openai/gpt-4o"), None, True), - (LiteLlm(model="anthropic/claude-3.7-sonnet"), None, True), - (LiteLlm(model="fireworks_ai/llama-v3p1-70b"), None, True), ], ) def test_can_use_output_schema_with_tools( - monkeypatch, model, env_value, expected -): + monkeypatch: pytest.MonkeyPatch, + model: str | BaseLlm, + env_value: str | None, + expected: bool, +) -> None: """Test can_use_output_schema_with_tools.""" if env_value is not None: monkeypatch.setenv("GOOGLE_GENAI_USE_VERTEXAI", env_value) else: monkeypatch.delenv("GOOGLE_GENAI_USE_VERTEXAI", raising=False) assert can_use_output_schema_with_tools(model) == expected + + +def test_can_use_output_schema_with_tools_with_litellm_model() -> None: + """Test LiteLlm detection when the optional module is available.""" + if importlib.util.find_spec("litellm") is None: + pytest.skip("litellm is not installed") + + from google.adk.models.lite_llm import LiteLlm + + assert can_use_output_schema_with_tools(LiteLlm(model="openai/gpt-4o")) + + +def test_can_use_output_schema_with_tools_without_litellm_module( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Test optional LiteLlm import failures do not affect other models.""" + original_import = builtins.__import__ + + def _failing_import( + name: str, + globals_dict: dict[str, Any] | None = None, + locals_dict: dict[str, Any] | None = None, + fromlist: tuple[str, ...] = (), + level: int = 0, + ) -> Any: + if name.endswith("lite_llm"): + raise ImportError("litellm not installed") + return original_import(name, globals_dict, locals_dict, fromlist, level) + + monkeypatch.delenv("GOOGLE_GENAI_USE_VERTEXAI", raising=False) + monkeypatch.delitem(sys.modules, "google.adk.models.lite_llm", raising=False) + monkeypatch.setattr(builtins, "__import__", _failing_import) + + assert not can_use_output_schema_with_tools(Claude(model="claude-3.7-sonnet")) From 6f6fd955f6dab50c98859294328a98f32181dc27 Mon Sep 17 00:00:00 2001 From: Divyansh Shukla Date: Wed, 11 Mar 2026 17:04:03 -0700 Subject: [PATCH 009/192] fix: Fix IDE hangs by moving test venv and cache to /tmp PiperOrigin-RevId: 882270600 --- scripts/unittests.sh | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/scripts/unittests.sh b/scripts/unittests.sh index b4892c290c..5c5dc348a6 100755 --- a/scripts/unittests.sh +++ b/scripts/unittests.sh @@ -58,10 +58,9 @@ restore_venv() { deactivate fi - if [[ -d ".unittest_venv" ]]; then - echo "Cleaning up .unittest_venv..." - rm -rf .unittest_venv - fi + echo "Cleaning up temporary directories..." + [[ -n "${VENV_DIR:-}" ]] && rm -rf "$VENV_DIR" + [[ -n "${UV_CACHE_DIR:-}" ]] && rm -rf "$UV_CACHE_DIR" if [[ -n "$ORIGINAL_VENV" ]]; then echo "Reactivating pre-existing venv: $ORIGINAL_VENV" @@ -72,6 +71,15 @@ restore_venv() { # Ensure the environment is restored when the script exits. trap restore_venv EXIT +# Temporary directory for the virtual environment. +VENV_DIR=$(mktemp -d "${TMPDIR:-/tmp}/unittest_venv.XXXXXX") + +# Move uv cache to temp to prevent workspace bloat and IDE performance issues. +export UV_CACHE_DIR=$(mktemp -d "${TMPDIR:-/tmp}/uv_cache.XXXXXX") + +# Force 'copy' mode; hardlinks (uv default) fail on many virtual filesystems. +export UV_LINK_MODE=copy + # 1. deactivate the current venv if [[ -n "${VIRTUAL_ENV:-}" ]]; then echo "Deactivating current venv: $VIRTUAL_ENV" @@ -88,12 +96,12 @@ for version in "${versions_to_run[@]}"; do echo "==================================================" # 2. create a unittest_venv just for unit tests - echo "Creating/Using unittest_venv for python${version} in .unittest_venv..." - uv venv --python "${version}" .unittest_venv --clear - source .unittest_venv/bin/activate + echo "Creating/Using unittest_venv for python${version} in $VENV_DIR..." + uv venv --python "${version}" "$VENV_DIR" --clear + source "$VENV_DIR/bin/activate" # 3. perform the unit tests - echo "Setting up test environment in .unittest_venv..." + echo "Setting up test environment in $VENV_DIR..." uv sync --extra test --active echo "Running unit tests..." From 0847f511d201712d1fa69dd3ce929d0d166bf7fe Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Wed, 11 Mar 2026 17:17:58 -0700 Subject: [PATCH 010/192] chore: Update actions/checkout to v6 in GitHub workflows V4 still uses deprecated Node.js 20. Co-authored-by: Liang Wu PiperOrigin-RevId: 882275971 --- .github/workflows/release-cherry-pick.yml | 2 +- .github/workflows/release-cut.yml | 2 +- .github/workflows/release-finalize.yml | 2 +- .github/workflows/release-please.yml | 2 +- .github/workflows/release-publish.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release-cherry-pick.yml b/.github/workflows/release-cherry-pick.yml index ad324a08a5..469b9c8063 100644 --- a/.github/workflows/release-cherry-pick.yml +++ b/.github/workflows/release-cherry-pick.yml @@ -18,7 +18,7 @@ jobs: cherry-pick: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: ref: release/candidate fetch-depth: 0 diff --git a/.github/workflows/release-cut.yml b/.github/workflows/release-cut.yml index 8dbed40487..ca54fa698b 100644 --- a/.github/workflows/release-cut.yml +++ b/.github/workflows/release-cut.yml @@ -18,7 +18,7 @@ jobs: cut-release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: ref: ${{ inputs.commit_sha || 'main' }} diff --git a/.github/workflows/release-finalize.yml b/.github/workflows/release-finalize.yml index b9d6203f37..a9256d9a75 100644 --- a/.github/workflows/release-finalize.yml +++ b/.github/workflows/release-finalize.yml @@ -29,7 +29,7 @@ jobs: echo "is_release_pr=false" >> $GITHUB_OUTPUT fi - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 if: steps.check.outputs.is_release_pr == 'true' with: ref: release/candidate diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 41d8d864c2..cc5a98a228 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -27,7 +27,7 @@ jobs: echo "exists=false" >> $GITHUB_OUTPUT fi - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 if: steps.check.outputs.exists == 'true' with: ref: release/candidate diff --git a/.github/workflows/release-publish.yml b/.github/workflows/release-publish.yml index 95ee326a9c..8f31945a29 100644 --- a/.github/workflows/release-publish.yml +++ b/.github/workflows/release-publish.yml @@ -28,7 +28,7 @@ jobs: echo "version=$VERSION" >> $GITHUB_OUTPUT echo "Publishing version: $VERSION" - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install uv uses: astral-sh/setup-uv@v4 From c910961501ef559814f54c22aca1609fd3227b80 Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Wed, 11 Mar 2026 18:07:23 -0700 Subject: [PATCH 011/192] feat: Add SSE streaming support to conformance tests Co-authored-by: Liang Wu PiperOrigin-RevId: 882293566 --- src/google/adk/cli/cli_tools_click.py | 39 ++++- .../_conformance_test_google_llm.py | 122 +++++++++++++++ .../conformance/_generate_markdown_utils.py | 104 +++++++++---- .../cli/conformance/_generated_file_utils.py | 15 +- .../cli/conformance/adk_web_server_client.py | 19 ++- src/google/adk/cli/conformance/cli_record.py | 21 ++- src/google/adk/cli/conformance/cli_test.py | 115 ++++++++------ .../adk/cli/plugins/recordings_plugin.py | 61 +++++--- .../adk/cli/plugins/recordings_schema.py | 4 +- src/google/adk/cli/plugins/replay_plugin.py | 141 ++++-------------- .../adk/flows/llm_flows/base_llm_flow.py | 31 +++- 11 files changed, 450 insertions(+), 222 deletions(-) create mode 100644 src/google/adk/cli/conformance/_conformance_test_google_llm.py diff --git a/src/google/adk/cli/cli_tools_click.py b/src/google/adk/cli/cli_tools_click.py index 3565714139..dcf9415652 100644 --- a/src/google/adk/cli/cli_tools_click.py +++ b/src/google/adk/cli/cli_tools_click.py @@ -35,6 +35,7 @@ from . import cli_create from . import cli_deploy from .. import version +from ..agents.run_config import StreamingMode from ..evaluation.constants import MISSING_EVAL_DEPENDENCIES_MESSAGE from ..features import FeatureName from ..features import override_feature_enabled @@ -230,10 +231,21 @@ def conformance(): exists=True, dir_okay=True, file_okay=False, resolve_path=True ), ) +@click.argument( + "streaming-mode", + type=click.Choice( + [str(m.value) for m in StreamingMode], case_sensitive=False + ), + callback=lambda ctx, param, value: next( + (m for m in StreamingMode if str(m.value).lower() == value.lower()), + value, + ), +) @click.pass_context def cli_conformance_record( ctx, paths: tuple[str, ...], + streaming_mode: StreamingMode, ): """Generate ADK conformance test YAML files from TestCaseInput specifications. @@ -273,7 +285,7 @@ def cli_conformance_record( # Default to tests/ directory if no paths provided test_paths = [Path(p) for p in paths] if paths else [Path("tests").resolve()] - asyncio.run(run_conformance_record(test_paths)) + asyncio.run(run_conformance_record(test_paths, streaming_mode)) @conformance.command("test", cls=HelpfulCommand) @@ -309,6 +321,20 @@ def cli_conformance_record( " directory." ), ) +@click.option( + "--streaming-mode", + type=click.Choice( + [str(m.value) for m in StreamingMode], case_sensitive=False + ), + callback=lambda ctx, param, value: next( + (m for m in StreamingMode if str(m.value).lower() == value.lower()), + value, + ) + if value is not None + else None, + required=False, + default=None, +) @click.pass_context def cli_conformance_test( ctx, @@ -316,6 +342,7 @@ def cli_conformance_test( mode: str, generate_report: bool, report_dir: Optional[str] = None, + streaming_mode: Optional[StreamingMode] = None, ): """Run conformance tests to verify agent behavior consistency. @@ -342,9 +369,11 @@ def cli_conformance_test( \b category/ test_name/ - spec.yaml # Test specification - generated-recordings.yaml # Recorded interactions (replay mode) - generated-session.yaml # Session data (replay mode) + spec.yaml # Test specification + generated-recordings.yaml # Recorded interactions (replay mode) + generated-session.yaml # Session data (replay mode) + generated-recordings-sse.yaml # Recorded SSE interactions (replay mode) + generated-session-sse.yaml # SSE Session data (replay mode) REPORT GENERATION: @@ -377,7 +406,6 @@ def cli_conformance_test( # Generate a test report in a specific directory adk conformance test --generate_report --report_dir=reports """ - try: from .conformance.cli_test import run_conformance_test except ImportError as e: @@ -403,6 +431,7 @@ def cli_conformance_test( mode=mode.lower(), generate_report=generate_report, report_dir=report_dir, + streaming_mode=streaming_mode, ) ) diff --git a/src/google/adk/cli/conformance/_conformance_test_google_llm.py b/src/google/adk/cli/conformance/_conformance_test_google_llm.py new file mode 100644 index 0000000000..cf32e2f076 --- /dev/null +++ b/src/google/adk/cli/conformance/_conformance_test_google_llm.py @@ -0,0 +1,122 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from __future__ import annotations + +import logging +from typing import Any +from typing import AsyncGenerator +from typing import TYPE_CHECKING + +from ...models.google_llm import Gemini + +if TYPE_CHECKING: + from ...models.llm_request import LlmRequest + from ...models.llm_response import LlmResponse + +logger = logging.getLogger('google_adk.' + __name__) + + +class ReplayVerificationError(Exception): + """Exception raised when replay verification fails.""" + + +class _ConformanceTestGemini(Gemini): + """A mocked Gemini model for conformance test replay mode. + + This class is used to mock the Gemini model in conformance test replay mode. + It is a subclass of Gemini and overrides the `generate_content_async`` method to + return a mocked response from the provided recordingss. + """ + + def __init__( + self, + *, + config: dict[str, Any], + **kwargs: Any, + ) -> None: + super().__init__(**kwargs) + recordings = config.get('_adk_replay_recordings') + self._user_message_index = config.get('user_message_index') + self._agent_name = config.get('agent_name') + self._replay_index = config.get('current_replay_index') + # Pre-filter LLM recordings for this agent and message index + self._agent_llm_recordings = [ + recording.llm_recording + for recording in recordings.recordings + if recording.agent_name == self._agent_name + and recording.user_message_index == self._user_message_index + and recording.llm_recording + ] + + async def generate_content_async( + self, llm_request: LlmRequest, stream: bool = False + ) -> AsyncGenerator[LlmResponse, None]: + """Replay LLM response from recordings instead of making real call.""" + logger.debug( + 'Replaying LLM response for agent %s (index %d)', + self._agent_name, + self._replay_index, + ) + + if self._replay_index >= len(self._agent_llm_recordings): + raise ReplayVerificationError( + 'Runtime sent more LLM requests than expected for agent' + f" '{self._agent_name}' at user_message_index" + f' {self._user_message_index}. Expected' + f' {len(self._agent_llm_recordings)}, but got request at index' + f' {self._replay_index}' + ) + + recording = self._agent_llm_recordings[self._replay_index] + + # Verify request matches + self._verify_llm_request_match( + recording.llm_request, llm_request, self._replay_index + ) + + for response in recording.llm_responses: + yield response + + def _verify_llm_request_match( + self, + recorded_request: LlmRequest, + current_request: LlmRequest, + replay_index: int, + ) -> None: + """Verify that the current LLM request exactly matches the recorded one.""" + # Comprehensive exclude dict for all fields that can differ between runs + excluded_fields = { + 'live_connect_config': True, + 'config': { # some config fields can vary per run + 'http_options': True, + 'labels': True, + }, + } + + # Compare using model dumps with nested exclude dict + recorded_dict = recorded_request.model_dump( + exclude_none=True, exclude=excluded_fields, exclude_defaults=True + ) + current_dict = current_request.model_dump( + exclude_none=True, exclude=excluded_fields, exclude_defaults=True + ) + + if recorded_dict != current_dict: + raise ReplayVerificationError( + f"""LLM request mismatch in turn {self._user_message_index} for agent '{self._agent_name}' (index {replay_index}): +recorded: {recorded_dict} +current: {current_dict}""" + ) diff --git a/src/google/adk/cli/conformance/_generate_markdown_utils.py b/src/google/adk/cli/conformance/_generate_markdown_utils.py index ced3afbb5f..dd45d0ad2a 100644 --- a/src/google/adk/cli/conformance/_generate_markdown_utils.py +++ b/src/google/adk/cli/conformance/_generate_markdown_utils.py @@ -29,7 +29,7 @@ def generate_markdown_report( version_data: dict[str, Any], - summary: _ConformanceTestSummary, + summaries: list[_ConformanceTestSummary], report_dir: Optional[str], ) -> None: """Generates a Markdown report of the test results.""" @@ -44,46 +44,94 @@ def generate_markdown_report( report_path = Path(report_dir) / report_name report_path.parent.mkdir(parents=True, exist_ok=True) + # Collect all test results + test_results = {} + test_descriptions = {} + streaming_modes = [] + + for summary in summaries: + mode_name = ( + str(summary.streaming_mode.value) + if summary.streaming_mode.value is not None + else "none" + ) + streaming_modes.append(mode_name) + for result in summary.results: + key = (result.category, result.name) + if key not in test_results: + test_results[key] = {} + test_results[key][mode_name] = result + if result.description: + test_descriptions[key] = result.description + + streaming_modes.sort() + with open(report_path, "w") as f: f.write("# ADK Python Conformance Test Report\n\n") - - # Summary f.write("## Summary\n\n") f.write(f"- **ADK Version**: {server_version}\n") - f.write(f"- **Language**: {language} {language_version}\n") - f.write(f"- **Total Tests**: {summary.total_tests}\n") - f.write(f"- **Passed**: {summary.passed_tests}\n") - f.write(f"- **Failed**: {summary.failed_tests}\n") - f.write(f"- **Success Rate**: {summary.success_rate:.1f}%\n\n") + f.write(f"- **Language**: {language} {language_version}\n\n") - # Table - f.write("## Test Results\n\n") - f.write("| Status | Category | Test Name | Description |\n") - f.write("| :--- | :--- | :--- | :--- |\n") + f.write( + "| Streaming Mode | Total Tests | Passed | Failed | Success Rate |\n" + ) + f.write("| :--- | :--- | :--- | :--- | :--- |\n") - for result in summary.results: - status_icon = "✅ PASS" if result.success else "❌ FAIL" - description = ( - result.description.replace("\n", " ") if result.description else "" + for summary in summaries: + mode_name = ( + str(summary.streaming_mode.value) + if summary.streaming_mode.value is not None + else "none" ) f.write( - f"| {status_icon} | {result.category} | {result.name} |" - f" {description} |\n" + f"| {mode_name} | {summary.total_tests} |" + f" {summary.passed_tests} | {summary.failed_tests} |" + f" {summary.success_rate:.1f}% |\n" + ) + f.write("\n") + + # Table + f.write("## Test Results\n\n") + headers = ["Category", "Test Name", "Description"] + streaming_modes + f.write("| " + " | ".join(headers) + " |\n") + f.write("| " + " | ".join([":---"] * len(headers)) + " |\n") + + sorted_keys = sorted(test_results.keys()) + for category, name in sorted_keys: + description = test_descriptions.get((category, name), "").replace( + "\n", " " ) + row = [category, name, description] + for mode in streaming_modes: + result = test_results[(category, name)].get(mode) + if result: + status_icon = "✅ PASS" if result.success else "❌ FAIL" + else: + status_icon = "N/A" + row.append(status_icon) + f.write("| " + " | ".join(row) + " |\n") f.write("\n") # Failed Tests Details - if summary.failed_tests > 0: + has_failures = any(s.failed_tests > 0 for s in summaries) + if has_failures: f.write("## Failed Tests Details\n\n") - for result in summary.results: - if not result.success: - f.write(f"### {result.category}/{result.name}\n\n") - if result.description: - f.write(f"**Description**: {result.description}\n\n") - f.write("**Error**:\n") - f.write("```\n") - f.write(f"{result.error_message}\n") - f.write("```\n\n") + for summary in summaries: + if summary.failed_tests > 0: + mode_name = ( + str(summary.streaming_mode.value) + if summary.streaming_mode.value is not None + else "none" + ) + for result in summary.results: + if not result.success: + f.write(f"### {result.category}/{result.name} ({mode_name})\n\n") + if result.description: + f.write(f"**Description**: {result.description}\n\n") + f.write("**Error**:\n") + f.write("```\n") + f.write(f"{result.error_message}\n") + f.write("```\n\n") click.secho(f"\nReport generated at: {report_path.resolve()}", fg="blue") diff --git a/src/google/adk/cli/conformance/_generated_file_utils.py b/src/google/adk/cli/conformance/_generated_file_utils.py index 3d3996082d..e6aad7fdb1 100644 --- a/src/google/adk/cli/conformance/_generated_file_utils.py +++ b/src/google/adk/cli/conformance/_generated_file_utils.py @@ -23,6 +23,7 @@ import click import yaml +from ...agents.run_config import StreamingMode from ...sessions.session import Session from .test_case import TestSpec @@ -35,9 +36,17 @@ def load_test_case(test_case_dir: Path) -> TestSpec: return TestSpec.model_validate(data) -def load_recorded_session(test_case_dir: Path) -> Optional[Session]: - """Load recorded session data from generated-session.yaml file.""" - session_file = test_case_dir / "generated-session.yaml" +def load_recorded_session( + test_case_dir: Path, streaming_mode: StreamingMode +) -> Optional[Session]: + """Load recorded session data from YAML file.""" + if streaming_mode == StreamingMode.SSE: + session_file = test_case_dir / "generated-session-sse.yaml" + elif streaming_mode == StreamingMode.NONE: + session_file = test_case_dir / "generated-session.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {streaming_mode}") + if not session_file.exists(): return None diff --git a/src/google/adk/cli/conformance/adk_web_server_client.py b/src/google/adk/cli/conformance/adk_web_server_client.py index 10bf82d1fc..1d5dd3e0f3 100644 --- a/src/google/adk/cli/conformance/adk_web_server_client.py +++ b/src/google/adk/cli/conformance/adk_web_server_client.py @@ -237,7 +237,8 @@ async def run_agent( Event objects streamed from the agent execution Raises: - ValueError: If mode is provided but test_case_dir or user_message_index is None + ValueError: If mode is not supported, or if mode is provided but + test_case_dir or user_message_index is None httpx.HTTPStatusError: If the request fails json.JSONDecodeError: If event data cannot be parsed RuntimeError: If the server streams an error payload @@ -259,11 +260,25 @@ async def run_agent( "dir": str(test_case_dir), "user_message_index": user_message_index, } - else: # record mode + if request.streaming: + request.state_delta["_adk_replay_config"]["streaming_mode"] = "sse" + else: + request.state_delta["_adk_replay_config"]["streaming_mode"] = "none" + elif mode == "record": request.state_delta["_adk_recordings_config"] = { "dir": str(test_case_dir), "user_message_index": user_message_index, } + if request.streaming: + request.state_delta["_adk_recordings_config"][ + "streaming_mode" + ] = "sse" + else: + request.state_delta["_adk_recordings_config"][ + "streaming_mode" + ] = "none" + else: + raise ValueError(f"Unsupported mode: {mode}") async with self._get_client() as client: async with client.stream( diff --git a/src/google/adk/cli/conformance/cli_record.py b/src/google/adk/cli/conformance/cli_record.py index 7d3849493d..eb38c99478 100644 --- a/src/google/adk/cli/conformance/cli_record.py +++ b/src/google/adk/cli/conformance/cli_record.py @@ -21,6 +21,7 @@ import click from google.genai import types +from ...agents.run_config import StreamingMode from ...utils.yaml_utils import dump_pydantic_to_yaml from ..adk_web_server import RunAgentRequest from ._generated_file_utils import load_test_case @@ -31,14 +32,21 @@ async def _create_conformance_test_files( test_case: TestCase, user_id: str = "adk_conformance_test_user", + streaming_mode: StreamingMode = StreamingMode.NONE, ) -> Path: """Generate conformance test files from TestCase.""" # Clean existing generated files test_case_dir = test_case.dir # Remove existing generated files to ensure clean state - generated_session_file = test_case_dir / "generated-session.yaml" - generated_recordings_file = test_case_dir / "generated-recordings.yaml" + if streaming_mode == StreamingMode.SSE: + generated_session_file = test_case_dir / "generated-session-sse.yaml" + generated_recordings_file = test_case_dir / "generated-recordings-sse.yaml" + elif streaming_mode == StreamingMode.NONE: + generated_session_file = test_case_dir / "generated-session.yaml" + generated_recordings_file = test_case_dir / "generated-recordings.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {streaming_mode}") generated_session_file.unlink(missing_ok=True) generated_recordings_file.unlink(missing_ok=True) @@ -96,6 +104,7 @@ async def _create_conformance_test_files( session_id=session.id, new_message=content, state_delta=user_message.state_delta, + streaming=(streaming_mode == StreamingMode.SSE), ), mode="record", test_case_dir=str(test_case_dir), @@ -133,7 +142,9 @@ async def _create_conformance_test_files( return generated_session_file -async def run_conformance_record(paths: list[Path]) -> None: +async def run_conformance_record( + paths: list[Path], streaming_mode: StreamingMode +) -> None: """Generate conformance tests from TestCaseInput files. Args: @@ -171,7 +182,9 @@ async def run_conformance_record(paths: list[Path]) -> None: for test_case in test_cases.values(): try: - await _create_conformance_test_files(test_case) + await _create_conformance_test_files( + test_case, streaming_mode=streaming_mode + ) click.secho( "Generated conformance test files for:" f" {test_case.category}/{test_case.name}", diff --git a/src/google/adk/cli/conformance/cli_test.py b/src/google/adk/cli/conformance/cli_test.py index 70fbe5547b..df51199cdc 100644 --- a/src/google/adk/cli/conformance/cli_test.py +++ b/src/google/adk/cli/conformance/cli_test.py @@ -17,6 +17,7 @@ from __future__ import annotations from dataclasses import dataclass +from enum import Enum from pathlib import Path import textwrap from typing import Optional @@ -24,6 +25,7 @@ import click from google.genai import types +from ...agents.run_config import StreamingMode from ..adk_web_server import RunAgentRequest from ._generate_markdown_utils import generate_markdown_report from ._generated_file_utils import load_recorded_session @@ -33,6 +35,8 @@ from .adk_web_server_client import AdkWebServerClient from .test_case import TestCase +_SUPPORTED_STREAMING_MODES = [StreamingMode.NONE, StreamingMode.SSE] + @dataclass class _TestResult: @@ -53,6 +57,7 @@ class _ConformanceTestSummary: passed_tests: int failed_tests: int results: list[_TestResult] + streaming_mode: StreamingMode @property def success_rate(self) -> float: @@ -71,11 +76,13 @@ def __init__( client: AdkWebServerClient, mode: str = "replay", user_id: str = "adk_conformance_test_user", + streaming_mode: StreamingMode = StreamingMode.NONE, ): self.test_paths = test_paths self.mode = mode self.client = client self.user_id = user_id + self.streaming_mode = streaming_mode def _discover_test_cases(self) -> list[TestCase]: """Discover test cases from specified folder paths.""" @@ -90,11 +97,15 @@ def _discover_test_cases(self) -> list[TestCase]: category = test_case_dir.parent.name name = test_case_dir.name + if self.streaming_mode == StreamingMode.SSE: + recordings_file = test_case_dir / "generated-recordings-sse.yaml" + elif self.streaming_mode == StreamingMode.NONE: + recordings_file = test_case_dir / "generated-recordings.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {self.streaming_mode}") + # Skip if recordings missing in replay mode - if ( - self.mode == "replay" - and not (test_case_dir / "generated-recordings.yaml").exists() - ): + if self.mode == "replay" and not recordings_file.exists(): click.secho( f"Skipping {category}/{name}: no recordings", fg="yellow", @@ -115,7 +126,9 @@ def _discover_test_cases(self) -> list[TestCase]: return sorted(test_cases, key=lambda tc: (tc.category, tc.name)) async def _run_user_messages( - self, session_id: str, test_case: TestCase + self, + session_id: str, + test_case: TestCase, ) -> None: """Run all user messages for a test case.""" function_call_name_to_id_map = {} @@ -160,7 +173,7 @@ async def _run_user_messages( user_id=self.user_id, session_id=session_id, new_message=content, - streaming=False, + streaming=self.streaming_mode == StreamingMode.SSE, state_delta=user_message.state_delta, ) @@ -198,7 +211,7 @@ async def _validate_test_results( ) # Load recorded session data for comparison - recorded_session = load_recorded_session(test_case.dir) + recorded_session = load_recorded_session(test_case.dir, self.streaming_mode) if not recorded_session: return _TestResult( category=test_case.category, @@ -283,10 +296,11 @@ async def run_all_tests(self) -> _ConformanceTestSummary: passed_tests=0, failed_tests=0, results=[], + streaming_mode=self.streaming_mode, ) click.echo(f""" -Found {len(test_cases)} test cases to run in {self.mode} mode +Found {len(test_cases)} test cases to run in {self.mode} mode for streaming mode {self.streaming_mode}. """) results: list[_TestResult] = [] @@ -300,7 +314,7 @@ async def run_all_tests(self) -> _ConformanceTestSummary: category=test_case.category, name=test_case.name, success=False, - error_message="Live mode not yet implemented", + error_message="Live mode is not implemented yet", description=test_case.test_spec.description, ) results.append(result) @@ -312,6 +326,7 @@ async def run_all_tests(self) -> _ConformanceTestSummary: passed_tests=passed, failed_tests=len(results) - passed, results=results, + streaming_mode=self.streaming_mode, ) @@ -320,19 +335,27 @@ async def run_conformance_test( mode: str = "replay", generate_report: bool = False, report_dir: Optional[str] = None, + streaming_mode: Optional[StreamingMode] = None, ) -> None: """Run conformance tests.""" _print_test_header(mode) + test_summaries: list[_ConformanceTestSummary] = [] async with AdkWebServerClient() as client: - runner = ConformanceTestRunner(test_paths, client, mode) - summary = await runner.run_all_tests() + modes_to_run = _SUPPORTED_STREAMING_MODES + if streaming_mode and streaming_mode in _SUPPORTED_STREAMING_MODES: + modes_to_run = [streaming_mode] + for current_streaming_mode in modes_to_run: + runner = ConformanceTestRunner( + test_paths, client, mode, streaming_mode=current_streaming_mode + ) + test_summaries.append(await runner.run_all_tests()) if generate_report: version_data = await client.get_version_data() - generate_markdown_report(version_data, summary, report_dir) + generate_markdown_report(version_data, test_summaries, report_dir) - _print_test_summary(summary) + _print_test_summary(test_summaries) def _print_test_header(mode: str) -> None: @@ -360,36 +383,38 @@ def _print_test_result_details(result: _TestResult) -> None: click.secho(indented_message, fg="red", err=True) -def _print_test_summary(summary: _ConformanceTestSummary) -> None: +def _print_test_summary(summaries: list[_ConformanceTestSummary]) -> None: """Print the conformance test summary results.""" - # Print summary - click.echo("\n" + "=" * 50) - click.echo("CONFORMANCE TEST SUMMARY") - click.echo("=" * 50) - - if summary.total_tests == 0: - click.secho("No tests were run.", fg="yellow") - return - - click.echo(f"Total tests: {summary.total_tests}") - click.secho(f"Passed: {summary.passed_tests}", fg="green") - - if summary.failed_tests > 0: - click.secho(f"Failed: {summary.failed_tests}", fg="red") - else: - click.echo(f"Failed: {summary.failed_tests}") - - click.echo(f"Success rate: {summary.success_rate:.1f}%") - - # List failed tests - failed_tests = [r for r in summary.results if not r.success] - if failed_tests: - click.echo("\nFailed tests:") - for result in failed_tests: - _print_test_result_details(result) - - # Exit with error code if any tests failed - if summary.failed_tests > 0: - raise click.ClickException(f"{summary.failed_tests} test(s) failed") - else: - click.secho("\nAll tests passed! 🎉", fg="green") + for summary in summaries: + click.echo("\n" + "=" * 50) + click.echo( + f"CONFORMANCE TEST SUMMARY FOR STREAMING MODE: {summary.streaming_mode}" + ) + click.echo("=" * 50) + + if summary.total_tests == 0: + click.secho("No tests were run.", fg="yellow") + return + + click.echo(f"Total tests: {summary.total_tests}") + click.secho(f"Passed: {summary.passed_tests}", fg="green") + + if summary.failed_tests > 0: + click.secho(f"Failed: {summary.failed_tests}", fg="red") + else: + click.echo(f"Failed: {summary.failed_tests}") + + click.echo(f"Success rate: {summary.success_rate:.1f}%") + + # List failed tests + failed_tests = [r for r in summary.results if not r.success] + if failed_tests: + click.echo("\nFailed tests:") + for result in failed_tests: + _print_test_result_details(result) + + # Exit with error code if any tests failed + if summary.failed_tests > 0: + raise click.ClickException(f"{summary.failed_tests} test(s) failed") + else: + click.secho("\nAll tests passed! 🎉", fg="green") diff --git a/src/google/adk/cli/plugins/recordings_plugin.py b/src/google/adk/cli/plugins/recordings_plugin.py index fd4ca67fba..d7bd70e513 100644 --- a/src/google/adk/cli/plugins/recordings_plugin.py +++ b/src/google/adk/cli/plugins/recordings_plugin.py @@ -98,7 +98,8 @@ async def before_model_callback( if (state := self._get_invocation_state(callback_context)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) pending_recording = Recording( @@ -106,7 +107,7 @@ async def before_model_callback( agent_name=callback_context.agent_name, llm_recording=LlmRecording( llm_request=llm_request, - llm_response=None, + llm_responses=[], ), ) @@ -132,17 +133,25 @@ async def after_model_callback( """Complete pending LLM recording for the invocation specified in session state.""" if not self._is_record_mode_on(callback_context): return None - if (state := self._get_invocation_state(callback_context)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) agent_name = callback_context.agent_name - if pending_recording := state.pending_llm_recordings.pop(agent_name, None): - if pending_recording.llm_recording is not None: - pending_recording.llm_recording.llm_response = llm_response - logger.debug("Completed LLM recording for agent %s", agent_name) + if pending_recording := state.pending_llm_recordings.get(agent_name, None): + if ( + pending_recording.llm_recording is not None + and pending_recording.llm_recording.llm_responses is not None + ): + pending_recording.llm_recording.llm_responses.append(llm_response) + logger.debug( + "Appended LLM response to recording for agent %s", agent_name + ) + # Only remove from pending dict when response is complete + if not llm_response.partial: + state.pending_llm_recordings.pop(agent_name) else: logger.warning( "No pending LLM recording found for agent %s, skipping response", @@ -172,7 +181,8 @@ async def before_tool_callback( if (state := self._get_invocation_state(tool_context)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) pending_recording = Recording( @@ -222,7 +232,8 @@ async def after_tool_callback( if (state := self._get_invocation_state(tool_context)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) if pending_recording := state.pending_tool_recordings.pop( @@ -266,7 +277,8 @@ async def on_tool_error_callback( if (state := self._get_invocation_state(tool_context)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) logger.debug( @@ -289,13 +301,14 @@ async def after_run_callback( if (state := self._get_invocation_state(ctx)) is None: raise ValueError( - "Recording state not initialized. Ensure before_run created it." + "Recording state not initialized. Ensure before_run_callback" + " created it." ) try: for pending in state.pending_recordings_order: if pending.llm_recording is not None: - if pending.llm_recording.llm_response is not None: + if pending.llm_recording.llm_responses: state.records.recordings.append(pending) else: logger.warning( @@ -310,16 +323,24 @@ async def after_run_callback( "Incomplete tool recording for agent %s, skipping", pending.agent_name, ) + if self._streaming_mode == "sse": + recordings_file = ( + f"{state.test_case_path}/generated-recordings-sse.yaml" + ) + elif self._streaming_mode == "none": + recordings_file = f"{state.test_case_path}/generated-recordings.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {self._streaming_mode}") dump_pydantic_to_yaml( state.records, - f"{state.test_case_path}/generated-recordings.yaml", + recordings_file, sort_keys=False, ) logger.info( - "Saved %d recordings to %s/generated-recordings.yaml", + "Saved %d recordings to %s", len(state.records.recordings), - state.test_case_path, + recordings_file, ) except Exception as e: logger.error("Failed to save interactions: %s", e) @@ -364,12 +385,18 @@ def _create_invocation_state( config = session_state.get("_adk_recordings_config", {}) case_dir = config.get("dir") msg_index = config.get("user_message_index") + self._streaming_mode = config.get("streaming_mode", "") if not case_dir or msg_index is None: raise ValueError("Recording parameters are missing from session state") # Load or create recordings - recordings_file = Path(case_dir) / "generated-recordings.yaml" + if self._streaming_mode == "sse": + recordings_file = Path(case_dir) / "generated-recordings-sse.yaml" + elif self._streaming_mode == "none": + recordings_file = Path(case_dir) / "generated-recordings.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {self._streaming_mode}") if recordings_file.exists(): try: diff --git a/src/google/adk/cli/plugins/recordings_schema.py b/src/google/adk/cli/plugins/recordings_schema.py index d0f20d55cf..ab255ff60d 100644 --- a/src/google/adk/cli/plugins/recordings_schema.py +++ b/src/google/adk/cli/plugins/recordings_schema.py @@ -37,8 +37,8 @@ class LlmRecording(BaseModel): llm_request: Optional[LlmRequest] = None """Required. The LLM request.""" - llm_response: Optional[LlmResponse] = None - """Required. The LLM response.""" + llm_responses: Optional[list[LlmResponse]] = None + """Required. The list of LLM responses.""" class ToolRecording(BaseModel): diff --git a/src/google/adk/cli/plugins/replay_plugin.py b/src/google/adk/cli/plugins/replay_plugin.py index f382947291..c80248dc0d 100644 --- a/src/google/adk/cli/plugins/replay_plugin.py +++ b/src/google/adk/cli/plugins/replay_plugin.py @@ -29,11 +29,7 @@ import yaml from ...agents.callback_context import CallbackContext -from ...models.llm_request import LlmRequest -from ...models.llm_response import LlmResponse from ...plugins.base_plugin import BasePlugin -from .recordings_schema import LlmRecording -from .recordings_schema import Recording from .recordings_schema import Recordings from .recordings_schema import ToolRecording @@ -65,8 +61,8 @@ class _InvocationReplayState(BaseModel): recordings: Recordings # Per-agent replay indices for parallel execution - # key: agent_name -> current replay index for that agent - agent_replay_indices: dict[str, int] = Field(default_factory=dict) + # key: agent_name -> current tool replay index for that agent + agent_tool_replay_indices: dict[str, int] = Field(default_factory=dict) class ReplayPlugin(BasePlugin): @@ -90,31 +86,6 @@ async def before_run_callback( self._load_invocation_state(ctx) return None - @override - async def before_model_callback( - self, *, callback_context: CallbackContext, llm_request: LlmRequest - ) -> Optional[LlmResponse]: - """Replay LLM response from recordings instead of making real call.""" - if not self._is_replay_mode_on(callback_context): - return None - - if (state := self._get_invocation_state(callback_context)) is None: - raise ReplayConfigError( - "Replay state not initialized. Ensure before_run created it." - ) - - agent_name = callback_context.agent_name - - # Verify and get the next LLM recording for this specific agent - recording = self._verify_and_get_next_llm_recording_for_agent( - state, agent_name, llm_request - ) - - logger.debug("Verified and replaying LLM response for agent %s", agent_name) - - # Return the recorded response - return recording.llm_response - @override async def before_tool_callback( self, @@ -196,6 +167,7 @@ def _load_invocation_state( config = session_state.get("_adk_replay_config", {}) case_dir = config.get("dir") msg_index = config.get("user_message_index") + streaming_mode = config.get("streaming_mode") if not case_dir or msg_index is None: raise ReplayConfigError( @@ -203,7 +175,12 @@ def _load_invocation_state( ) # Load recordings - recordings_file = Path(case_dir) / "generated-recordings.yaml" + if streaming_mode == "sse": + recordings_file = Path(case_dir) / "generated-recordings-sse.yaml" + elif streaming_mode == "none": + recordings_file = Path(case_dir) / "generated-recordings.yaml" + else: + raise ValueError(f"Unsupported streaming mode: {streaming_mode}") if not recordings_file.exists(): raise ReplayConfigError(f"Recordings file not found: {recordings_file}") @@ -217,6 +194,9 @@ def _load_invocation_state( f"Failed to load recordings from {recordings_file}: {e}" ) from e + # Store recordings in session state for BaseLlmFlow to access + config["_adk_replay_recordings"] = recordings + # Load and store invocation state state = _InvocationReplayState( test_case_path=case_dir, @@ -234,31 +214,32 @@ def _load_invocation_state( ) return state - def _get_next_recording_for_agent( + def _get_next_tool_recording_for_agent( self, state: _InvocationReplayState, agent_name: str, - ) -> Recording: - """Get the next recording for the specific agent in strict order.""" + ) -> ToolRecording: + """Get the next tool recording for the specific agent.""" # Get current agent index - current_agent_index = state.agent_replay_indices.get(agent_name, 0) + current_agent_index = state.agent_tool_replay_indices.get(agent_name, 0) - # Filter ALL recordings for this agent and user message index (strict order) + # Filter tool recordings for this agent and user message index agent_recordings = [ - recording + recording.tool_recording for recording in state.recordings.recordings if ( recording.agent_name == agent_name and recording.user_message_index == state.user_message_index + and recording.tool_recording ) ] # Check if we have enough recordings for this agent if current_agent_index >= len(agent_recordings): raise ReplayVerificationError( - f"Runtime sent more requests than expected for agent '{agent_name}'" - f" at user_message_index {state.user_message_index}. Expected" - f" {len(agent_recordings)}, but got request at index" + "Runtime sent more tool requests than expected for agent" + f" '{agent_name}' at user_message_index {state.user_message_index}." + f" Expected {len(agent_recordings)}, but got request at index" f" {current_agent_index}" ) @@ -266,37 +247,10 @@ def _get_next_recording_for_agent( expected_recording = agent_recordings[current_agent_index] # Advance agent index - state.agent_replay_indices[agent_name] = current_agent_index + 1 + state.agent_tool_replay_indices[agent_name] = current_agent_index + 1 return expected_recording - def _verify_and_get_next_llm_recording_for_agent( - self, - state: _InvocationReplayState, - agent_name: str, - llm_request: LlmRequest, - ) -> LlmRecording: - """Verify and get the next LLM recording for the specific agent.""" - current_agent_index = state.agent_replay_indices.get(agent_name, 0) - expected_recording = self._get_next_recording_for_agent(state, agent_name) - - # Verify this is an LLM recording - if not expected_recording.llm_recording: - raise ReplayVerificationError( - f"Expected LLM recording for agent '{agent_name}' at index " - f"{current_agent_index}, but found tool recording" - ) - - # Strict verification of LLM request - self._verify_llm_request_match( - expected_recording.llm_recording.llm_request, - llm_request, - agent_name, - current_agent_index, - ) - - return expected_recording.llm_recording - def _verify_and_get_next_tool_recording_for_agent( self, state: _InvocationReplayState, @@ -305,58 +259,21 @@ def _verify_and_get_next_tool_recording_for_agent( tool_args: dict[str, Any], ) -> ToolRecording: """Verify and get the next tool recording for the specific agent.""" - current_agent_index = state.agent_replay_indices.get(agent_name, 0) - expected_recording = self._get_next_recording_for_agent(state, agent_name) - - # Verify this is a tool recording - if not expected_recording.tool_recording: - raise ReplayVerificationError( - f"Expected tool recording for agent '{agent_name}' at index " - f"{current_agent_index}, but found LLM recording" - ) + current_agent_index = state.agent_tool_replay_indices.get(agent_name, 0) + expected_recording = self._get_next_tool_recording_for_agent( + state, agent_name + ) # Strict verification of tool call self._verify_tool_call_match( - expected_recording.tool_recording.tool_call, + expected_recording.tool_call, tool_name, tool_args, agent_name, current_agent_index, ) - return expected_recording.tool_recording - - def _verify_llm_request_match( - self, - recorded_request: LlmRequest, - current_request: LlmRequest, - agent_name: str, - agent_index: int, - ) -> None: - """Verify that the current LLM request exactly matches the recorded one.""" - # Comprehensive exclude dict for all fields that can differ between runs - excluded_fields = { - "live_connect_config": True, - "config": { # some config fields can vary per run - "http_options": True, - "labels": True, - }, - } - - # Compare using model dumps with nested exclude dict - recorded_dict = recorded_request.model_dump( - exclude_none=True, exclude=excluded_fields, exclude_defaults=True - ) - current_dict = current_request.model_dump( - exclude_none=True, exclude=excluded_fields, exclude_defaults=True - ) - - if recorded_dict != current_dict: - raise ReplayVerificationError( - f"""LLM request mismatch for agent '{agent_name}' (index {agent_index}): -recorded: {recorded_dict} -current: {current_dict}""" - ) + return expected_recording def _verify_tool_call_match( self, diff --git a/src/google/adk/flows/llm_flows/base_llm_flow.py b/src/google/adk/flows/llm_flows/base_llm_flow.py index 5203ea4fe8..bd0037bdcb 100644 --- a/src/google/adk/flows/llm_flows/base_llm_flow.py +++ b/src/google/adk/flows/llm_flows/base_llm_flow.py @@ -19,7 +19,6 @@ import inspect import logging from typing import AsyncGenerator -from typing import cast from typing import Optional from typing import TYPE_CHECKING @@ -36,7 +35,6 @@ from ...agents.live_request_queue import LiveRequestQueue from ...agents.readonly_context import ReadonlyContext from ...agents.run_config import StreamingMode -from ...agents.transcription_entry import TranscriptionEntry from ...auth.auth_handler import AuthHandler from ...auth.auth_tool import AuthConfig from ...auth.credential_manager import CredentialManager @@ -49,12 +47,10 @@ from ...telemetry.tracing import trace_send_data from ...telemetry.tracing import tracer from ...tools.base_toolset import BaseToolset -from ...tools.google_search_tool import google_search from ...tools.tool_context import ToolContext from ...utils.context_utils import Aclosing from .audio_cache_manager import AudioCacheManager from .functions import build_auth_request_event -from .functions import REQUEST_EUC_FUNCTION_CALL_NAME # Prefix used by toolset auth credential IDs TOOLSET_AUTH_CREDENTIAL_ID_PREFIX = '_adk_toolset_auth_' @@ -1289,6 +1285,33 @@ async def _handle_control_event_flush( def __get_llm(self, invocation_context: InvocationContext) -> BaseLlm: agent = invocation_context.agent + + # Check for conformance test replay mode + if config := invocation_context.session.state.get('_adk_replay_config'): + from ...cli.conformance._conformance_test_google_llm import _ConformanceTestGemini + + # Models are stateless, so the current replay state is cached in the + # session state to maintain the state across model calls + # key: (agent_name, user_message_index) + # value: replay index + user_message_index = config.get('user_message_index') + replay_indexes = config.get('_adk_replay_indexes', {}) + if (agent.name, user_message_index) not in replay_indexes: + replay_indexes[(agent.name, user_message_index)] = 0 + current_replay_index = replay_indexes[(agent.name, user_message_index)] + + config['current_replay_index'] = current_replay_index + config['agent_name'] = agent.name + model = _ConformanceTestGemini( + config=config, + ) + + replay_indexes[(agent.name, user_message_index)] = ( + current_replay_index + 1 + ) + config['_adk_replay_indexes'] = replay_indexes + return model + if not hasattr(agent, 'canonical_model'): raise TypeError( 'Expected agent to have canonical_model attribute,' From abf88a94761039ff6cae230c4a0c755f42dea77f Mon Sep 17 00:00:00 2001 From: "Wei (Jack) Sun" Date: Thu, 12 Mar 2026 15:56:40 -0700 Subject: [PATCH 012/192] chore: merge release v1.27.0 to main Co-authored-by: Liang Wu <18244712+wuliang229@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- .github/release-please-config.json | 2 +- CHANGELOG.md | 98 +++++++++++++++++++++++++++ src/google/adk/version.py | 2 +- 4 files changed, 101 insertions(+), 3 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index f97891a673..c775f946fb 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.26.0" + ".": "1.27.0" } diff --git a/.github/release-please-config.json b/.github/release-please-config.json index 053aab23c3..8c58807069 100644 --- a/.github/release-please-config.json +++ b/.github/release-please-config.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "last-release-sha": "8f5428150d18ed732b66379c0acb806a9121c3cb", + "last-release-sha": "066fcec3e8e669d1c5360e1556afce3f7e068072", "packages": { ".": { "release-type": "python", diff --git a/CHANGELOG.md b/CHANGELOG.md index 92a8197b7a..49b189b095 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,103 @@ # Changelog +## [1.27.0](https://github.com/google/adk-python/compare/v1.26.0...v1.27.0) (2026-03-12) + +### Features +* **[Core]** + * Introduce A2A request interceptors in RemoteA2aAgent ([6f772d2](https://github.com/google/adk-python/commit/6f772d2b0841446bc168ccf405b59eb17c1d671a)) + * Add UiWidget to EventActions for supporting new experimental UI Widgets feature ([530ff06](https://github.com/google/adk-python/commit/530ff06ece61a93855a53235e85af18b46b2a6a0)) + * **auth:** Add pluggable support for auth integrations using AuthProviderRegistry within CredentialManager ([d004074](https://github.com/google/adk-python/commit/d004074c90525442a69cebe226440bb318abad29)) + * Support all `types.SchemaUnion` as output_schema in LLM Agent ([63f450e](https://github.com/google/adk-python/commit/63f450e0231f237ee1af37f17420d37b15426d48)) + * durable runtime support ([07fdd23](https://github.com/google/adk-python/commit/07fdd23c9c3f5046aa668fb480840f67f13bf271)) + * **runners:** pass GetSessionConfig through Runner to session service ([eff724a](https://github.com/google/adk-python/commit/eff724ac9aef2a203607f772c473703f21c09a72)) + +* **[Models]** + * Add support for PDF documents in Anthropic LLM ([4c8ba74](https://github.com/google/adk-python/commit/4c8ba74fcb07014db187ef8db8246ff966379aa9)) + * Add streaming support for Anthropic models ([5770cd3](https://github.com/google/adk-python/commit/5770cd3776c8805086ece34d747e589e36916a34)), closes [#3250](https://github.com/google/adk-python/issues/3250) + * Enable output schema with tools for LiteLlm models ([89df5fc](https://github.com/google/adk-python/commit/89df5fcf883b599cf7bfe40bde35b8d86ab0146b)), closes [#3969](https://github.com/google/adk-python/issues/3969) + * Preserve thought_signature in LiteLLM tool calls ([ae565be](https://github.com/google/adk-python/commit/ae565be30e64249b2913ad647911061a8b170e21)), closes [#4650](https://github.com/google/adk-python/issues/4650) + +* **[Web]** + * Updated human in the loop: developers now can respond to long running functions directly in chat + * Render artifacts when resuming + * Fix some light mode styles + * Fix token level streaming not working properly ([22799c0](https://github.com/google/adk-python/commit/22799c0833569753021078f7bd8dcd11ece562fe)) + +* **[Observability]** + * **telemetry:** add new gen_ai.agent.version span attribute ([ffe97ec](https://github.com/google/adk-python/commit/ffe97ec5ad7229c0b4ba573f33eb0edb8bb2877a)) + * **otel:** add `gen_ai.tool.definitions` to experimental semconv ([4dd4d5e](https://github.com/google/adk-python/commit/4dd4d5ecb6a1dadbc41389dac208616f6d21bc6e)) + * **otel:** add experimental semantic convention and emit `gen_ai.client.inference.operation.details` event ([19718e9](https://github.com/google/adk-python/commit/19718e9c174af7b1287b627e6b23a609db1ee5e2)) + * add missing token usage span attributes during model usage ([77bf325](https://github.com/google/adk-python/commit/77bf325d2bf556621c3276f74ee2816fce2a7085)) + * capture tool execution error code in OpenTelemetry spans ([e0a6c6d](https://github.com/google/adk-python/commit/e0a6c6db6f8e2db161f8b86b9f11030f0cec807a)) + +* **[Tools]** + * Warn when accessing DEFAULT_SKILL_SYSTEM_INSTRUCTION ([35366f4](https://github.com/google/adk-python/commit/35366f4e2a0575090fe12cd85f51e8116a1cd0d3)) + * add preserve_property_names option to OpenAPIToolset ([078b516](https://github.com/google/adk-python/commit/078b5163ff47acec69b1c8e105f62eb7b74f5548)) + * Add gcs filesystem support for Skills. It supports skills in text and pdf format, also has some sample agents ([6edcb97](https://github.com/google/adk-python/commit/6edcb975827dbd543a40ae3a402d2389327df603)) + * Add list_skills_in_dir to skills utils ([327b3af](https://github.com/google/adk-python/commit/327b3affd2d0a192f5a072b90fdb4aae7575be90)) + * Add support for MCP App UI widgets in MCPTool ([86db35c](https://github.com/google/adk-python/commit/86db35c338adaafb41e156311465e71e17edf35e)) + * add Dataplex Catalog search tool to BigQuery ADK ([82c2eef](https://github.com/google/adk-python/commit/82c2eefb27313c5b11b9e9382f626f543c53a29e)) + * Add RunSkillScriptTool to SkillToolset ([636f68f](https://github.com/google/adk-python/commit/636f68fbee700aa47f01e2cfd746859353b3333d)) + * Add support for ADK tools in SkillToolset ([44a5e6b](https://github.com/google/adk-python/commit/44a5e6bdb8e8f02891e72b65ef883f108c506f6a)) + * limit number of user-provided BigQuery job labels and reserve internal prefixes ([8c4ff74](https://github.com/google/adk-python/commit/8c4ff74e7d70cf940f54f6d7735f001495ce75d5)) + * Add param support to Bigtable execute_sql ([5702a4b](https://github.com/google/adk-python/commit/5702a4b1f59b17fd8b290fc125c349240b0953d7)) + * **bigtable:** add Bigtable cluster metadata tools ([34c560e](https://github.com/google/adk-python/commit/34c560e66e7ad379f586bbcd45a9460dc059bee2)) + * execute-type param addition in GkeCodeExecutor ([9c45166](https://github.com/google/adk-python/commit/9c451662819a6c7de71be71d12ea715b2fe74135)) + * **skill:** Add BashTool ([8a31612](https://github.com/google/adk-python/commit/8a3161202e4bac0bb8e8801b100f4403c1c75646)) + * Add support for toolsets to additional_tools field of SkillToolset ([066fcec](https://github.com/google/adk-python/commit/066fcec3e8e669d1c5360e1556afce3f7e068072)) + + +* **[Optimization]** + * Add `adk optimize` command ([b18d7a1](https://github.com/google/adk-python/commit/b18d7a140f8e18e03255b07e6d89948427790095)) + * Add interface between optimization infra and LocalEvalService ([7b7ddda](https://github.com/google/adk-python/commit/7b7ddda46ca701952f002b2807b89dbef5322414)) + * Add GEPA root agent prompt optimizer ([4e3e2cb](https://github.com/google/adk-python/commit/4e3e2cb58858e08a79bc6119ad49b6c049dbc0d0)) + +* **[Integrations]** + * Enhance BigQuery plugin schema upgrades and error reporting ([bcf38fa](https://github.com/google/adk-python/commit/bcf38fa2bac2f0d1ab74e07e01eb5160bad1d6dc)) + * Enhance BQ plugin with fork safety, auto views, and trace continuity ([80c5a24](https://github.com/google/adk-python/commit/80c5a245557cd75870e72bff0ecfaafbd37fdbc7)) + * Handle Conflict Errors in BigQuery Agent Analytics Plugin ([372c76b](https://github.com/google/adk-python/commit/372c76b857daa1102e76d755c0758f1515d6f180)) + * Added tracking headers for ADK CLI command to Agent Engine ([3117446](https://github.com/google/adk-python/commit/3117446293d30039c2f21f3d17a64a456c42c47d)) + +* **[A2A]** + * New implementation of A2aAgentExecutor and A2A-ADK conversion ([87ffc55](https://github.com/google/adk-python/commit/87ffc55640dea1185cf67e6f9b78f70b30867bcc)) + * New implementation of RemoteA2aAgent and A2A-ADK conversion ([6770e41](https://github.com/google/adk-python/commit/6770e419f5e200f4c7ad26587e1f769693ef4da0)) + +### Bug Fixes + +* Allow artifact services to accept dictionary representations of types.Part ([b004da5](https://github.com/google/adk-python/commit/b004da50270475adc9e1d7afe4064ca1d10c560a)), closes [#2886](https://github.com/google/adk-python/issues/2886) +* Decode image data from ComputerUse tool response into image blobs ([d7cfd8f](https://github.com/google/adk-python/commit/d7cfd8fe4def2198c113ff1993ef39cd519908a1)) +* Expand LiteLLM reasoning extraction to include 'reasoning' field ([9468487](https://github.com/google/adk-python/commit/94684874e436c2959cfc90ec346010a6f4fddc49)), closes [#3694](https://github.com/google/adk-python/issues/3694) +* Filter non-agent directories from list_agents() ([3b5937f](https://github.com/google/adk-python/commit/3b5937f022adf9286dc41e01e3618071a23eb992)) +* Fix Type Error by initializing user_content as a Content object ([2addf6b](https://github.com/google/adk-python/commit/2addf6b9dacfe87344aeec0101df98d99c23bdb1)) +* Handle length finish reason in LiteLLM responses ([4c6096b](https://github.com/google/adk-python/commit/4c6096baa1b0bed8533397287a5c11a0c4cb9101)), closes [#4482](https://github.com/google/adk-python/issues/4482) +* In SaveFilesAsArtifactsPlugin, write the artifact delta to state then event actions so that the plugin works with ADK Web UI's artifacts panel ([d6f31be](https://github.com/google/adk-python/commit/d6f31be554d9b7ee15fd9c95ae655b2265fb1f32)) +* Make invocation_context optional in convert_event_to_a2a_message ([8e79a12](https://github.com/google/adk-python/commit/8e79a12d6bcde43cc33247b7ee6cc9e929fa6288)) +* Optimize row-level locking in append_event ([d61846f](https://github.com/google/adk-python/commit/d61846f6c6dd5e357abb0e30eaf61fe27896ae6a)), closes [#4655](https://github.com/google/adk-python/issues/4655) +* Preserve thought_signature in FunctionCall conversions between GenAI and A2A ([f9c104f](https://github.com/google/adk-python/commit/f9c104faf73e2a002bb3092b50fb88f4eed78163)) +* Prevent splitting of SSE events with artifactDelta for function resume requests ([6a929af](https://github.com/google/adk-python/commit/6a929af718fa77199d1eecc62b16c54beb1c8d84)), closes [#4487](https://github.com/google/adk-python/issues/4487) +* Propagate file names during A2A to/from Genai Part conversion ([f324fa2](https://github.com/google/adk-python/commit/f324fa2d62442301ebb2e7974eb97ea870471410)) +* Propagate thought from A2A TextPart metadata to GenAI Part ([e59929e](https://github.com/google/adk-python/commit/e59929e11a56aaee7bb0c45cd4c9d9fef689548c)) +* Re-export DEFAULT_SKILL_SYSTEM_INSTRUCTION to skills and skill/prompt.py to avoid breaking current users ([de4dee8](https://github.com/google/adk-python/commit/de4dee899cd777a01ba15906f8496a72e717ea98)) +* Refactor type string update in Anthropic tool param conversion ([ab4b736](https://github.com/google/adk-python/commit/ab4b736807dabee65659486a68135d9f1530834c)) +* **simulation:** handle NoneType generated_content ([9d15517](https://github.com/google/adk-python/commit/9d155177b956f690d4c99560f582e3e90e111f71)) +* Store and retrieve EventCompaction via custom_metadata in Vertex AISessionService ([2e434ca](https://github.com/google/adk-python/commit/2e434ca7be765d45426fde9d52b131921bd9fa30)), closes [#3465](https://github.com/google/adk-python/issues/3465) +* Support before_tool_callback and after_tool_callback in Live mode ([c36a708](https://github.com/google/adk-python/commit/c36a708058163ade061cd3d2f9957231a505a62d)), closes [#4704](https://github.com/google/adk-python/issues/4704) +* temp-scoped state now visible to subsequent agents in same invocation ([2780ae2](https://github.com/google/adk-python/commit/2780ae2892adfbebc7580c843d2eaad29f86c335)) +* **tools:** Handle JSON Schema boolean schemas in Gemini schema conversion ([3256a67](https://github.com/google/adk-python/commit/3256a679da3e0fb6f18b26057e87f5284680cb58)) +* typo in A2A EXPERIMENTAL warning ([eb55eb7](https://github.com/google/adk-python/commit/eb55eb7e7f0fa647d762205225c333dcd8a08dd0)) +* Update agent_engine_sandbox_code_executor in ADK ([dff4c44](https://github.com/google/adk-python/commit/dff4c4404051b711c8be437ba0ae26ca2763df7d)) +* update Bigtable query tools to async functions ([72f3e7e](https://github.com/google/adk-python/commit/72f3e7e1e00d93c632883027bf6d31a9095cd6c2)) +* Update expected UsageMetadataChunk in LiteLLM tests ([dd0851a](https://github.com/google/adk-python/commit/dd0851ac74d358bc030def5adf242d875ab18265)), closes [#4680](https://github.com/google/adk-python/issues/4680) +* update toolbox server and SDK package versions ([2e370ea](https://github.com/google/adk-python/commit/2e370ea688033f0663501171d0babfb0d74de4b2)) +* Validate session before streaming instead of eagerly advancing the runner generator ([ebbc114](https://github.com/google/adk-python/commit/ebbc1147863956e85931f8d46abb0632e3d1cf67)) + + +### Code Refactoring + +* extract reusable functions from hitl and auth preprocessor ([c59afc2](https://github.com/google/adk-python/commit/c59afc21cbed27d1328872cdc2b0e182ab2ca6c8)) +* Rename base classes and TypeVars in optimization data types ([9154ef5](https://github.com/google/adk-python/commit/9154ef59d29eb37538914e9967c4392cc2a24237)) + + ## [1.26.0](https://github.com/google/adk-python/compare/v1.25.1...v1.26.0) (2026-02-26) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 2e373f505a..6570514289 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "1.26.0" +__version__ = "1.27.0" From 31b005c301b634ff5fa608a86ba014cbb2c307eb Mon Sep 17 00:00:00 2001 From: Guoyi Lou Date: Thu, 12 Mar 2026 14:44:36 -0700 Subject: [PATCH 013/192] ADK changes Co-authored-by: Guoyi Lou PiperOrigin-RevId: 882787811 --- .github/.release-please-manifest.json | 2 +- .github/release-please-config.json | 2 +- CHANGELOG.md | 98 --------------------------- src/google/adk/version.py | 2 +- 4 files changed, 3 insertions(+), 101 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index c775f946fb..f97891a673 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.27.0" + ".": "1.26.0" } diff --git a/.github/release-please-config.json b/.github/release-please-config.json index 8c58807069..053aab23c3 100644 --- a/.github/release-please-config.json +++ b/.github/release-please-config.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "last-release-sha": "066fcec3e8e669d1c5360e1556afce3f7e068072", + "last-release-sha": "8f5428150d18ed732b66379c0acb806a9121c3cb", "packages": { ".": { "release-type": "python", diff --git a/CHANGELOG.md b/CHANGELOG.md index 49b189b095..92a8197b7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,103 +1,5 @@ # Changelog -## [1.27.0](https://github.com/google/adk-python/compare/v1.26.0...v1.27.0) (2026-03-12) - -### Features -* **[Core]** - * Introduce A2A request interceptors in RemoteA2aAgent ([6f772d2](https://github.com/google/adk-python/commit/6f772d2b0841446bc168ccf405b59eb17c1d671a)) - * Add UiWidget to EventActions for supporting new experimental UI Widgets feature ([530ff06](https://github.com/google/adk-python/commit/530ff06ece61a93855a53235e85af18b46b2a6a0)) - * **auth:** Add pluggable support for auth integrations using AuthProviderRegistry within CredentialManager ([d004074](https://github.com/google/adk-python/commit/d004074c90525442a69cebe226440bb318abad29)) - * Support all `types.SchemaUnion` as output_schema in LLM Agent ([63f450e](https://github.com/google/adk-python/commit/63f450e0231f237ee1af37f17420d37b15426d48)) - * durable runtime support ([07fdd23](https://github.com/google/adk-python/commit/07fdd23c9c3f5046aa668fb480840f67f13bf271)) - * **runners:** pass GetSessionConfig through Runner to session service ([eff724a](https://github.com/google/adk-python/commit/eff724ac9aef2a203607f772c473703f21c09a72)) - -* **[Models]** - * Add support for PDF documents in Anthropic LLM ([4c8ba74](https://github.com/google/adk-python/commit/4c8ba74fcb07014db187ef8db8246ff966379aa9)) - * Add streaming support for Anthropic models ([5770cd3](https://github.com/google/adk-python/commit/5770cd3776c8805086ece34d747e589e36916a34)), closes [#3250](https://github.com/google/adk-python/issues/3250) - * Enable output schema with tools for LiteLlm models ([89df5fc](https://github.com/google/adk-python/commit/89df5fcf883b599cf7bfe40bde35b8d86ab0146b)), closes [#3969](https://github.com/google/adk-python/issues/3969) - * Preserve thought_signature in LiteLLM tool calls ([ae565be](https://github.com/google/adk-python/commit/ae565be30e64249b2913ad647911061a8b170e21)), closes [#4650](https://github.com/google/adk-python/issues/4650) - -* **[Web]** - * Updated human in the loop: developers now can respond to long running functions directly in chat - * Render artifacts when resuming - * Fix some light mode styles - * Fix token level streaming not working properly ([22799c0](https://github.com/google/adk-python/commit/22799c0833569753021078f7bd8dcd11ece562fe)) - -* **[Observability]** - * **telemetry:** add new gen_ai.agent.version span attribute ([ffe97ec](https://github.com/google/adk-python/commit/ffe97ec5ad7229c0b4ba573f33eb0edb8bb2877a)) - * **otel:** add `gen_ai.tool.definitions` to experimental semconv ([4dd4d5e](https://github.com/google/adk-python/commit/4dd4d5ecb6a1dadbc41389dac208616f6d21bc6e)) - * **otel:** add experimental semantic convention and emit `gen_ai.client.inference.operation.details` event ([19718e9](https://github.com/google/adk-python/commit/19718e9c174af7b1287b627e6b23a609db1ee5e2)) - * add missing token usage span attributes during model usage ([77bf325](https://github.com/google/adk-python/commit/77bf325d2bf556621c3276f74ee2816fce2a7085)) - * capture tool execution error code in OpenTelemetry spans ([e0a6c6d](https://github.com/google/adk-python/commit/e0a6c6db6f8e2db161f8b86b9f11030f0cec807a)) - -* **[Tools]** - * Warn when accessing DEFAULT_SKILL_SYSTEM_INSTRUCTION ([35366f4](https://github.com/google/adk-python/commit/35366f4e2a0575090fe12cd85f51e8116a1cd0d3)) - * add preserve_property_names option to OpenAPIToolset ([078b516](https://github.com/google/adk-python/commit/078b5163ff47acec69b1c8e105f62eb7b74f5548)) - * Add gcs filesystem support for Skills. It supports skills in text and pdf format, also has some sample agents ([6edcb97](https://github.com/google/adk-python/commit/6edcb975827dbd543a40ae3a402d2389327df603)) - * Add list_skills_in_dir to skills utils ([327b3af](https://github.com/google/adk-python/commit/327b3affd2d0a192f5a072b90fdb4aae7575be90)) - * Add support for MCP App UI widgets in MCPTool ([86db35c](https://github.com/google/adk-python/commit/86db35c338adaafb41e156311465e71e17edf35e)) - * add Dataplex Catalog search tool to BigQuery ADK ([82c2eef](https://github.com/google/adk-python/commit/82c2eefb27313c5b11b9e9382f626f543c53a29e)) - * Add RunSkillScriptTool to SkillToolset ([636f68f](https://github.com/google/adk-python/commit/636f68fbee700aa47f01e2cfd746859353b3333d)) - * Add support for ADK tools in SkillToolset ([44a5e6b](https://github.com/google/adk-python/commit/44a5e6bdb8e8f02891e72b65ef883f108c506f6a)) - * limit number of user-provided BigQuery job labels and reserve internal prefixes ([8c4ff74](https://github.com/google/adk-python/commit/8c4ff74e7d70cf940f54f6d7735f001495ce75d5)) - * Add param support to Bigtable execute_sql ([5702a4b](https://github.com/google/adk-python/commit/5702a4b1f59b17fd8b290fc125c349240b0953d7)) - * **bigtable:** add Bigtable cluster metadata tools ([34c560e](https://github.com/google/adk-python/commit/34c560e66e7ad379f586bbcd45a9460dc059bee2)) - * execute-type param addition in GkeCodeExecutor ([9c45166](https://github.com/google/adk-python/commit/9c451662819a6c7de71be71d12ea715b2fe74135)) - * **skill:** Add BashTool ([8a31612](https://github.com/google/adk-python/commit/8a3161202e4bac0bb8e8801b100f4403c1c75646)) - * Add support for toolsets to additional_tools field of SkillToolset ([066fcec](https://github.com/google/adk-python/commit/066fcec3e8e669d1c5360e1556afce3f7e068072)) - - -* **[Optimization]** - * Add `adk optimize` command ([b18d7a1](https://github.com/google/adk-python/commit/b18d7a140f8e18e03255b07e6d89948427790095)) - * Add interface between optimization infra and LocalEvalService ([7b7ddda](https://github.com/google/adk-python/commit/7b7ddda46ca701952f002b2807b89dbef5322414)) - * Add GEPA root agent prompt optimizer ([4e3e2cb](https://github.com/google/adk-python/commit/4e3e2cb58858e08a79bc6119ad49b6c049dbc0d0)) - -* **[Integrations]** - * Enhance BigQuery plugin schema upgrades and error reporting ([bcf38fa](https://github.com/google/adk-python/commit/bcf38fa2bac2f0d1ab74e07e01eb5160bad1d6dc)) - * Enhance BQ plugin with fork safety, auto views, and trace continuity ([80c5a24](https://github.com/google/adk-python/commit/80c5a245557cd75870e72bff0ecfaafbd37fdbc7)) - * Handle Conflict Errors in BigQuery Agent Analytics Plugin ([372c76b](https://github.com/google/adk-python/commit/372c76b857daa1102e76d755c0758f1515d6f180)) - * Added tracking headers for ADK CLI command to Agent Engine ([3117446](https://github.com/google/adk-python/commit/3117446293d30039c2f21f3d17a64a456c42c47d)) - -* **[A2A]** - * New implementation of A2aAgentExecutor and A2A-ADK conversion ([87ffc55](https://github.com/google/adk-python/commit/87ffc55640dea1185cf67e6f9b78f70b30867bcc)) - * New implementation of RemoteA2aAgent and A2A-ADK conversion ([6770e41](https://github.com/google/adk-python/commit/6770e419f5e200f4c7ad26587e1f769693ef4da0)) - -### Bug Fixes - -* Allow artifact services to accept dictionary representations of types.Part ([b004da5](https://github.com/google/adk-python/commit/b004da50270475adc9e1d7afe4064ca1d10c560a)), closes [#2886](https://github.com/google/adk-python/issues/2886) -* Decode image data from ComputerUse tool response into image blobs ([d7cfd8f](https://github.com/google/adk-python/commit/d7cfd8fe4def2198c113ff1993ef39cd519908a1)) -* Expand LiteLLM reasoning extraction to include 'reasoning' field ([9468487](https://github.com/google/adk-python/commit/94684874e436c2959cfc90ec346010a6f4fddc49)), closes [#3694](https://github.com/google/adk-python/issues/3694) -* Filter non-agent directories from list_agents() ([3b5937f](https://github.com/google/adk-python/commit/3b5937f022adf9286dc41e01e3618071a23eb992)) -* Fix Type Error by initializing user_content as a Content object ([2addf6b](https://github.com/google/adk-python/commit/2addf6b9dacfe87344aeec0101df98d99c23bdb1)) -* Handle length finish reason in LiteLLM responses ([4c6096b](https://github.com/google/adk-python/commit/4c6096baa1b0bed8533397287a5c11a0c4cb9101)), closes [#4482](https://github.com/google/adk-python/issues/4482) -* In SaveFilesAsArtifactsPlugin, write the artifact delta to state then event actions so that the plugin works with ADK Web UI's artifacts panel ([d6f31be](https://github.com/google/adk-python/commit/d6f31be554d9b7ee15fd9c95ae655b2265fb1f32)) -* Make invocation_context optional in convert_event_to_a2a_message ([8e79a12](https://github.com/google/adk-python/commit/8e79a12d6bcde43cc33247b7ee6cc9e929fa6288)) -* Optimize row-level locking in append_event ([d61846f](https://github.com/google/adk-python/commit/d61846f6c6dd5e357abb0e30eaf61fe27896ae6a)), closes [#4655](https://github.com/google/adk-python/issues/4655) -* Preserve thought_signature in FunctionCall conversions between GenAI and A2A ([f9c104f](https://github.com/google/adk-python/commit/f9c104faf73e2a002bb3092b50fb88f4eed78163)) -* Prevent splitting of SSE events with artifactDelta for function resume requests ([6a929af](https://github.com/google/adk-python/commit/6a929af718fa77199d1eecc62b16c54beb1c8d84)), closes [#4487](https://github.com/google/adk-python/issues/4487) -* Propagate file names during A2A to/from Genai Part conversion ([f324fa2](https://github.com/google/adk-python/commit/f324fa2d62442301ebb2e7974eb97ea870471410)) -* Propagate thought from A2A TextPart metadata to GenAI Part ([e59929e](https://github.com/google/adk-python/commit/e59929e11a56aaee7bb0c45cd4c9d9fef689548c)) -* Re-export DEFAULT_SKILL_SYSTEM_INSTRUCTION to skills and skill/prompt.py to avoid breaking current users ([de4dee8](https://github.com/google/adk-python/commit/de4dee899cd777a01ba15906f8496a72e717ea98)) -* Refactor type string update in Anthropic tool param conversion ([ab4b736](https://github.com/google/adk-python/commit/ab4b736807dabee65659486a68135d9f1530834c)) -* **simulation:** handle NoneType generated_content ([9d15517](https://github.com/google/adk-python/commit/9d155177b956f690d4c99560f582e3e90e111f71)) -* Store and retrieve EventCompaction via custom_metadata in Vertex AISessionService ([2e434ca](https://github.com/google/adk-python/commit/2e434ca7be765d45426fde9d52b131921bd9fa30)), closes [#3465](https://github.com/google/adk-python/issues/3465) -* Support before_tool_callback and after_tool_callback in Live mode ([c36a708](https://github.com/google/adk-python/commit/c36a708058163ade061cd3d2f9957231a505a62d)), closes [#4704](https://github.com/google/adk-python/issues/4704) -* temp-scoped state now visible to subsequent agents in same invocation ([2780ae2](https://github.com/google/adk-python/commit/2780ae2892adfbebc7580c843d2eaad29f86c335)) -* **tools:** Handle JSON Schema boolean schemas in Gemini schema conversion ([3256a67](https://github.com/google/adk-python/commit/3256a679da3e0fb6f18b26057e87f5284680cb58)) -* typo in A2A EXPERIMENTAL warning ([eb55eb7](https://github.com/google/adk-python/commit/eb55eb7e7f0fa647d762205225c333dcd8a08dd0)) -* Update agent_engine_sandbox_code_executor in ADK ([dff4c44](https://github.com/google/adk-python/commit/dff4c4404051b711c8be437ba0ae26ca2763df7d)) -* update Bigtable query tools to async functions ([72f3e7e](https://github.com/google/adk-python/commit/72f3e7e1e00d93c632883027bf6d31a9095cd6c2)) -* Update expected UsageMetadataChunk in LiteLLM tests ([dd0851a](https://github.com/google/adk-python/commit/dd0851ac74d358bc030def5adf242d875ab18265)), closes [#4680](https://github.com/google/adk-python/issues/4680) -* update toolbox server and SDK package versions ([2e370ea](https://github.com/google/adk-python/commit/2e370ea688033f0663501171d0babfb0d74de4b2)) -* Validate session before streaming instead of eagerly advancing the runner generator ([ebbc114](https://github.com/google/adk-python/commit/ebbc1147863956e85931f8d46abb0632e3d1cf67)) - - -### Code Refactoring - -* extract reusable functions from hitl and auth preprocessor ([c59afc2](https://github.com/google/adk-python/commit/c59afc21cbed27d1328872cdc2b0e182ab2ca6c8)) -* Rename base classes and TypeVars in optimization data types ([9154ef5](https://github.com/google/adk-python/commit/9154ef59d29eb37538914e9967c4392cc2a24237)) - - ## [1.26.0](https://github.com/google/adk-python/compare/v1.25.1...v1.26.0) (2026-02-26) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 6570514289..2e373f505a 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "1.27.0" +__version__ = "1.26.0" From 780093f389bfbffce965c89ca888d49f992219c1 Mon Sep 17 00:00:00 2001 From: Rohit Yanamadala Date: Thu, 12 Mar 2026 23:56:27 -0700 Subject: [PATCH 014/192] docs: Feat/Issue Monitoring Agent Merge https://github.com/google/adk-python/pull/4622 Co-authored-by: Xuan Yang COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4622 from rohityan:feat/IssueWatchdog 560937039d0a218b27d9cea767abd9a88a004822 PiperOrigin-RevId: 882987318 --- .github/workflows/issue-monitor.yml | 63 ++++++ .../PROMPT_INSTRUCTION.txt | 18 ++ .../adk_issue_monitoring_agent/README.md | 62 ++++++ .../adk_issue_monitoring_agent/__init__.py | 15 ++ .../adk_issue_monitoring_agent/agent.py | 118 ++++++++++ .../adk_issue_monitoring_agent/main.py | 204 ++++++++++++++++++ .../adk_issue_monitoring_agent/settings.py | 43 ++++ .../adk_issue_monitoring_agent/utils.py | 171 +++++++++++++++ 8 files changed, 694 insertions(+) create mode 100644 .github/workflows/issue-monitor.yml create mode 100644 contributing/samples/adk_issue_monitoring_agent/PROMPT_INSTRUCTION.txt create mode 100644 contributing/samples/adk_issue_monitoring_agent/README.md create mode 100644 contributing/samples/adk_issue_monitoring_agent/__init__.py create mode 100644 contributing/samples/adk_issue_monitoring_agent/agent.py create mode 100644 contributing/samples/adk_issue_monitoring_agent/main.py create mode 100644 contributing/samples/adk_issue_monitoring_agent/settings.py create mode 100644 contributing/samples/adk_issue_monitoring_agent/utils.py diff --git a/.github/workflows/issue-monitor.yml b/.github/workflows/issue-monitor.yml new file mode 100644 index 0000000000..e0dc82dcf7 --- /dev/null +++ b/.github/workflows/issue-monitor.yml @@ -0,0 +1,63 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: ADK Issue Monitoring Agent + +on: + schedule: + # Runs daily at 6:00 AM UTC + - cron: '0 6 * * *' + + # Allows manual triggering from the GitHub Actions tab + workflow_dispatch: + inputs: + full_scan: + description: 'Run an Initial Full Scan of ALL open issues' + required: false + type: boolean + default: false + +jobs: + sweep-spam: + runs-on: ubuntu-latest + timeout-minutes: 120 + permissions: + issues: write + contents: read + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: '3.11' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install requests google-adk python-dotenv + + - name: Run Issue Monitoring Agent + env: + GITHUB_TOKEN: ${{ secrets.ADK_TRIAGE_AGENT }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + OWNER: ${{ github.repository_owner }} + REPO: ${{ github.event.repository.name }} + CONCURRENCY_LIMIT: 3 + INITIAL_FULL_SCAN: ${{ github.event.inputs.full_scan == 'true' }} + LLM_MODEL_NAME: "gemini-2.5-flash" + PYTHONPATH: contributing/samples + run: python -m adk_issue_monitoring_agent.main diff --git a/contributing/samples/adk_issue_monitoring_agent/PROMPT_INSTRUCTION.txt b/contributing/samples/adk_issue_monitoring_agent/PROMPT_INSTRUCTION.txt new file mode 100644 index 0000000000..dcd7cb071b --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/PROMPT_INSTRUCTION.txt @@ -0,0 +1,18 @@ +You are the automated security and moderation agent for the {OWNER}/{REPO} repository. + +You will be provided with an Issue Number and a list of comments made by non-maintainers. +Your job is to read through these comments and identify if any of them contain SPAM, promotional content for 3rd-party websites, SEO links, or objectionable material. + +CRITERIA FOR SPAM: +- The comment is completely unrelated to the repository or the specific issue. +- The comment promotes a 3rd party product, service, or website. +- The comment is generic "SEO spam" (e.g., "Great post! Check out my site at [link]"). + +INSTRUCTIONS: +1. Evaluate the provided comments. +2. If you identify spam, call the `flag_issue_as_spam` tool. + - Pass the `item_number`. + - Pass a brief `detection_reason` explaining which comment is spam and why (e.g., "@spammer_bot posted an irrelevant link to a shoe store"). +3. If NONE of the comments contain spam, do NOT call any tools. Just respond with "No spam detected." + +Remember: Do not flag comments that are merely unhelpful, off-topic, or from beginners asking legitimate questions. Only flag actual spam, endorsements, or objectionable material. \ No newline at end of file diff --git a/contributing/samples/adk_issue_monitoring_agent/README.md b/contributing/samples/adk_issue_monitoring_agent/README.md new file mode 100644 index 0000000000..da1a5d7d4f --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/README.md @@ -0,0 +1,62 @@ +# ADK Issue Monitoring Agent 🛡️ + +An intelligent, cost-optimized, automated moderation agent built with the **Google Agent Development Kit (ADK)**. + +This agent automatically audits GitHub repository issues to detect SEO spam, unsolicited promotional links, and irrelevant third-party endorsements. If spam is detected, it automatically applies a `spam` label and alerts the repository maintainers. + +## ✨ Key Features & Optimizations + +* **Zero-Waste LLM Invocations:** Fetches issue comments via REST APIs and pre-filters them in Python. It automatically ignores comments from maintainers, `[bot]` accounts, and the official `adk-bot`. The Gemini LLM is never invoked for safe threads, saving 100% of the token cost. +* **Dual-Mode Scanning:** Can perform a **Deep Clean** (auditing the entire history of all open issues) or a **Daily Sweep** (only fetching issues updated within the last 24 hours). +* **Token Truncation:** Uses Regular Expressions to strip out Markdown code blocks (` ``` `) replacing them with `[CODE BLOCK REMOVED]`, and truncates unusually long text to 1,500 characters before sending it to the AI. +* **Idempotency (Anti-Double-Posting):** The bot reads the comment history for its own signature. If it has already flagged an issue, it instantly skips it, preventing infinite feedback loops. + +--- + +## Configuration + +The agent is configured via environment variables, typically set as secrets in GitHub Actions. + +### Required Secrets + +| Secret Name | Description | +| :--- | :--- | +| `GITHUB_TOKEN` | A GitHub Personal Access Token (PAT) or Service Account Token with `repo` and `issues: write` scope. | +| `GOOGLE_API_KEY` | An API key for the Google AI (Gemini) model used for reasoning. | + +### Optional Configuration + +These variables control the scanning behavior, thresholds, and model selection. + +| Variable Name | Description | Default | +| :--- | :--- | :--- | +| `INITIAL_FULL_SCAN` | If `true`, audits every open issue in the repository. If `false`, only audits issues updated in the last 24 hours. | `false` | +| `SPAM_LABEL_NAME` | The exact text of the label applied to flagged issues. | `spam` | +| `BOT_NAME` | The GitHub username of your official bot to ensure its comments are ignored. | `adk-bot` | +| `CONCURRENCY_LIMIT` | The number of issues to process concurrently. | `3` | +| `SLEEP_BETWEEN_CHUNKS` | Time in seconds to sleep between batches to respect GitHub API rate limits. | `1.5` | +| `LLM_MODEL_NAME`| The specific Gemini model version to use. | `gemini-2.5-flash` | +| `OWNER` | Repository owner (auto-detected in Actions). | (Environment dependent) | +| `REPO` | Repository name (auto-detected in Actions). | (Environment dependent) | + +--- + +## Deployment + +To deploy this agent, a GitHub Actions workflow file (`.github/workflows/issue-monitor.yml`) is recommended. + +### Directory Structure Note +Because this agent resides within the `adk-python` package structure, the workflow must ensure the script is executed correctly to handle imports. It must be run as a module from the parent directory. + +### Example Workflow Execution +```yaml + - name: Run ADK Issue Monitoring Agent + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + OWNER: ${{ github.repository_owner }} + REPO: ${{ github.event.repository.name }} + # Mapped to the manual trigger checkbox in the GitHub UI + INITIAL_FULL_SCAN: ${{ github.event.inputs.full_scan == 'true' }} + PYTHONPATH: contributing/samples + run: python -m adk_issue_monitoring_agent.main \ No newline at end of file diff --git a/contributing/samples/adk_issue_monitoring_agent/__init__.py b/contributing/samples/adk_issue_monitoring_agent/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/adk_issue_monitoring_agent/agent.py b/contributing/samples/adk_issue_monitoring_agent/agent.py new file mode 100644 index 0000000000..b30bce3d36 --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/agent.py @@ -0,0 +1,118 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os +from typing import Any + +from adk_issue_monitoring_agent.settings import BOT_ALERT_SIGNATURE +from adk_issue_monitoring_agent.settings import GITHUB_BASE_URL +from adk_issue_monitoring_agent.settings import LLM_MODEL_NAME +from adk_issue_monitoring_agent.settings import OWNER +from adk_issue_monitoring_agent.settings import REPO +from adk_issue_monitoring_agent.settings import SPAM_LABEL_NAME +from adk_issue_monitoring_agent.utils import error_response +from adk_issue_monitoring_agent.utils import get_issue_comments +from adk_issue_monitoring_agent.utils import get_issue_details +from adk_issue_monitoring_agent.utils import post_request +from google.adk.agents.llm_agent import Agent +from requests.exceptions import RequestException + +logger = logging.getLogger("google_adk." + __name__) + + +def load_prompt_template(filename: str) -> str: + file_path = os.path.join(os.path.dirname(__file__), filename) + with open(file_path, "r") as f: + return f.read() + + +PROMPT_TEMPLATE = load_prompt_template("PROMPT_INSTRUCTION.txt") + +# --- Tools --- + + +def flag_issue_as_spam( + item_number: int, detection_reason: str +) -> dict[str, Any]: + """ + Flags an issue as spam by adding a label and leaving a comment for maintainers. + Includes idempotency checks to avoid duplicate POST actions. + + Args: + item_number (int): The GitHub issue number. + detection_reason (str): The explanation of what the spam is. + """ + logger.info(f"Flagging #{item_number} as SPAM. Reason: {detection_reason}") + + label_url = ( + f"{GITHUB_BASE_URL}/repos/{OWNER}/{REPO}/issues/{item_number}/labels" + ) + comment_url = ( + f"{GITHUB_BASE_URL}/repos/{OWNER}/{REPO}/issues/{item_number}/comments" + ) + + safe_reason = detection_reason.replace("```", "'''") + + alert_body = ( + f"{BOT_ALERT_SIGNATURE}\n" + "@maintainers, a suspected spam comment was detected in this thread.\n\n" + "**Reason:**\n" + f"```text\n{safe_reason}\n```" + ) + + try: + # 1. Fetch current state to check what actions are actually needed + issue = get_issue_details(OWNER, REPO, item_number) + comments = get_issue_comments(OWNER, REPO, item_number) + + current_labels = [ + label["name"].lower() for label in issue.get("labels", []) + ] + is_labeled = SPAM_LABEL_NAME.lower() in current_labels + is_commented = any( + BOT_ALERT_SIGNATURE in c.get("body", "") for c in comments + ) + + if is_labeled and is_commented: + logger.info(f"#{item_number} is already labeled and commented. Skipping.") + elif is_labeled and not is_commented: + post_request(comment_url, {"body": alert_body}) + logger.info(f"Successfully posted spam alert comment to #{item_number}.") + elif not is_labeled and is_commented: + post_request(label_url, {"labels": [SPAM_LABEL_NAME]}) + logger.info( + f"Successfully added '{SPAM_LABEL_NAME}' label to #{item_number}." + ) + else: + post_request(label_url, {"labels": [SPAM_LABEL_NAME]}) + post_request(comment_url, {"body": alert_body}) + logger.info(f"Successfully fully flagged #{item_number}.") + + return {"status": "success", "message": "Maintainers alerted successfully."} + + except RequestException as e: + return error_response(f"Error flagging issue: {e}") + + +root_agent = Agent( + model=LLM_MODEL_NAME, + name="spam_auditor_agent", + description="Audits issue comments for spam.", + instruction=PROMPT_TEMPLATE.format( + OWNER=OWNER, + REPO=REPO, + ), + tools=[flag_issue_as_spam], +) diff --git a/contributing/samples/adk_issue_monitoring_agent/main.py b/contributing/samples/adk_issue_monitoring_agent/main.py new file mode 100644 index 0000000000..65956d2685 --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/main.py @@ -0,0 +1,204 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import asyncio +import logging +import re +import time + +from adk_issue_monitoring_agent.agent import root_agent +from adk_issue_monitoring_agent.settings import BOT_ALERT_SIGNATURE +from adk_issue_monitoring_agent.settings import BOT_NAME +from adk_issue_monitoring_agent.settings import CONCURRENCY_LIMIT +from adk_issue_monitoring_agent.settings import OWNER +from adk_issue_monitoring_agent.settings import REPO +from adk_issue_monitoring_agent.settings import SLEEP_BETWEEN_CHUNKS +from adk_issue_monitoring_agent.utils import get_api_call_count +from adk_issue_monitoring_agent.utils import get_issue_comments +from adk_issue_monitoring_agent.utils import get_issue_details +from adk_issue_monitoring_agent.utils import get_repository_maintainers +from adk_issue_monitoring_agent.utils import get_target_issues +from adk_issue_monitoring_agent.utils import reset_api_call_count +from google.adk.cli.utils import logs +from google.adk.runners import InMemoryRunner +from google.genai import types + +logs.setup_adk_logger(level=logging.INFO) +logger = logging.getLogger("google_adk." + __name__) + +APP_NAME = "issue_monitoring_app" +USER_ID = "issue_monitoring_user" + + +async def process_single_issue( + runner: InMemoryRunner, issue_number: int, maintainers: list[str] +) -> tuple[float, int]: + start_time = time.perf_counter() + start_api_calls = get_api_call_count() + + try: + # 1. Fetch the main issue AND the comments + issue = get_issue_details(OWNER, REPO, issue_number) + comments = get_issue_comments(OWNER, REPO, issue_number) + + user_comments = [] + + # 2. Process the ORIGINAL ISSUE DESCRIPTION first! + issue_author = issue.get("user", {}).get("login", "") + issue_body = issue.get("body") or "" + + # Only check the description if the author isn't a maintainer/bot + if ( + issue_author not in maintainers + and not issue_author.endswith("[bot]") + and issue_author != BOT_NAME + ): + cleaned_issue_body = re.sub( + r"```.*?```", "\n[CODE BLOCK REMOVED]\n", issue_body, flags=re.DOTALL + ) + if len(cleaned_issue_body) > 1500: + cleaned_issue_body = cleaned_issue_body[:1500] + "\n...[TRUNCATED]" + user_comments.append( + f"Author (Original Issue): @{issue_author}\nText:" + f" {cleaned_issue_body}\n---" + ) + + # 3. Process all the replies (comments) + for c in comments: + author = c.get("user", {}).get("login", "") + body = c.get("body") or "" + + if BOT_ALERT_SIGNATURE in body: + logger.info( + f"#{issue_number}: Spam bot already alerted maintainers previously." + " Skipping." + ) + return ( + time.perf_counter() - start_time, + get_api_call_count() - start_api_calls, + ) + + if ( + author in maintainers + or author.endswith("[bot]") + or author == BOT_NAME + ): + continue + + cleaned_body = re.sub( + r"```.*?```", "\n[CODE BLOCK REMOVED]\n", body, flags=re.DOTALL + ) + + if len(cleaned_body) > 1500: + cleaned_body = cleaned_body[:1500] + "\n...[TRUNCATED]" + + user_comments.append(f"Author: @{author}\nComment: {cleaned_body}\n---") + + # 4. Skip LLM if no user text exists + if not user_comments: + logger.debug(f"#{issue_number}: No non-maintainer text found. Skipping.") + return ( + time.perf_counter() - start_time, + get_api_call_count() - start_api_calls, + ) + + logger.info( + f"Processing Issue #{issue_number} (Found {len(user_comments)} items to" + " review)..." + ) + + # 5. Format prompt and invoke LLM + compiled_comments = "\n".join(user_comments) + prompt_text = ( + "Please review the following text for issue" + f" #{issue_number}:\n\n{compiled_comments}" + ) + + session = await runner.session_service.create_session( + user_id=USER_ID, app_name=APP_NAME + ) + prompt_message = types.Content( + role="user", parts=[types.Part(text=prompt_text)] + ) + + async for event in runner.run_async( + user_id=USER_ID, session_id=session.id, new_message=prompt_message + ): + if ( + event.content + and event.content.parts + and hasattr(event.content.parts[0], "text") + ): + text = event.content.parts[0].text + if text: + clean_text = text[:100].replace("\n", " ") + logger.info(f"#{issue_number} Decision: {clean_text}...") + + except Exception as e: + logger.error(f"Error processing issue #{issue_number}: {e}", exc_info=True) + + # Calculate duration and API calls regardless of success or failure + duration = time.perf_counter() - start_time + issue_api_calls = get_api_call_count() - start_api_calls + return duration, issue_api_calls + + +async def main(): + logger.info(f"--- Starting Issue Monitoring Agent for {OWNER}/{REPO} ---") + reset_api_call_count() + + # Step 1: Fetch Maintainers + try: + maintainers = get_repository_maintainers(OWNER, REPO) + logger.info(f"Found {len(maintainers)} maintainers.") + except Exception as e: + logger.critical(f"Failed to fetch maintainers: {e}") + return + + # Step 2: Fetch target issues + try: + all_issues = get_target_issues(OWNER, REPO) + except Exception as e: + logger.critical(f"Failed to fetch issue list: {e}") + return + + total_count = len(all_issues) + if total_count == 0: + logger.info("No issues matched criteria. Run finished.") + return + + logger.info(f"Found {total_count} issues to process.") + + # Initialize the runner ONCE for the entire run + runner = InMemoryRunner(agent=root_agent, app_name=APP_NAME) + + # Step 3: Iterate through issues async 'CONCURRENCY_LIMIT' at a time + for i in range(0, total_count, CONCURRENCY_LIMIT): + chunk = all_issues[i : i + CONCURRENCY_LIMIT] + logger.info(f"Processing chunk: {chunk}") + + tasks = [ + process_single_issue(runner, issue_num, maintainers) + for issue_num in chunk + ] + await asyncio.gather(*tasks) + + if (i + CONCURRENCY_LIMIT) < total_count: + await asyncio.sleep(SLEEP_BETWEEN_CHUNKS) + + logger.info(f"--- Run Finished. Total API calls: {get_api_call_count()} ---") + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/contributing/samples/adk_issue_monitoring_agent/settings.py b/contributing/samples/adk_issue_monitoring_agent/settings.py new file mode 100644 index 0000000000..fbba22f904 --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/settings.py @@ -0,0 +1,43 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +from pathlib import Path + +from dotenv import load_dotenv + +CURRENT_DIR = Path(__file__).resolve().parent +ENV_PATH = CURRENT_DIR / ".env" +load_dotenv(dotenv_path=ENV_PATH, override=True) + +GITHUB_BASE_URL = "https://api.github.com" +GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") +if not GITHUB_TOKEN: + raise ValueError("GITHUB_TOKEN environment variable not set") + +OWNER = os.getenv("OWNER", "google") +REPO = os.getenv("REPO", "adk-python") +LLM_MODEL_NAME = os.getenv("LLM_MODEL_NAME", "gemini-2.5-flash") + +SPAM_LABEL_NAME = os.getenv("SPAM_LABEL_NAME", "spam") +CONCURRENCY_LIMIT = int(os.getenv("CONCURRENCY_LIMIT", 3)) +BOT_NAME = os.getenv("BOT_NAME", "adk-bot") +BOT_ALERT_SIGNATURE = os.getenv( + "BOT_ALERT_SIGNATURE", "🚨 **Automated Spam Detection Alert** 🚨" +) +SLEEP_BETWEEN_CHUNKS = float(os.getenv("SLEEP_BETWEEN_CHUNKS", 1.5)) + + +# Toggle for the initial run +INITIAL_FULL_SCAN = os.getenv("INITIAL_FULL_SCAN", "false").lower() == "true" diff --git a/contributing/samples/adk_issue_monitoring_agent/utils.py b/contributing/samples/adk_issue_monitoring_agent/utils.py new file mode 100644 index 0000000000..a2c8b70d0b --- /dev/null +++ b/contributing/samples/adk_issue_monitoring_agent/utils.py @@ -0,0 +1,171 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from typing import Any + +from adk_issue_monitoring_agent.settings import GITHUB_TOKEN +from adk_issue_monitoring_agent.settings import INITIAL_FULL_SCAN +from adk_issue_monitoring_agent.settings import SPAM_LABEL_NAME +import requests +from requests.adapters import HTTPAdapter +from urllib3.util.retry import Retry + +logger = logging.getLogger("google_adk." + __name__) + +_api_call_count = 0 + + +def get_api_call_count() -> int: + return _api_call_count + + +def reset_api_call_count() -> None: + global _api_call_count + _api_call_count = 0 + + +def _increment_api_call_count() -> None: + global _api_call_count + _api_call_count += 1 + + +retry_strategy = Retry( + total=6, + backoff_factor=2, + status_forcelist=[429, 500, 502, 503, 504], + allowed_methods=["GET", "DELETE"], +) +adapter = HTTPAdapter(max_retries=retry_strategy) +_session = requests.Session() +_session.mount("https://", adapter) +_session.headers.update({ + "Authorization": f"token {GITHUB_TOKEN}", + "Accept": "application/vnd.github.v3+json", +}) + + +def get_request(url: str, params: dict[str, Any] | None = None) -> Any: + _increment_api_call_count() + response = _session.get(url, params=params or {}, timeout=60) + response.raise_for_status() + return response.json() + + +def post_request(url: str, payload: Any) -> Any: + _increment_api_call_count() + response = _session.post(url, json=payload, timeout=60) + response.raise_for_status() + return response.json() + + +def error_response(error_message: str) -> dict[str, Any]: + return {"status": "error", "message": error_message} + + +def get_repository_maintainers(owner: str, repo: str) -> list[str]: + """Fetches all users with push/maintain access.""" + url = f"https://api.github.com/repos/{owner}/{repo}/collaborators" + data = get_request(url, {"permission": "push"}) + return [user["login"] for user in data] + + +def get_issue_details( + owner: str, repo: str, issue_number: int +) -> dict[str, Any]: + """Fetches the main issue object to get the original description (body).""" + url = f"https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}" + return get_request(url) + + +def get_issue_comments( + owner: str, repo: str, issue_number: int +) -> list[dict[str, Any]]: + """Fetches ALL comments for a specific issue, handling pagination.""" + url = f"https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}/comments" + all_comments = [] + page = 1 + + while True: + data = get_request(url, params={"per_page": 100, "page": page}) + if not data: + break + + all_comments.extend(data) + + if len(data) < 100: + break + page += 1 + + return all_comments + + +def get_target_issues(owner: str, repo: str) -> list[int]: + """ + Fetches issues. + If INITIAL_FULL_SCAN is True, fetches ALL open issues. + If False, fetches only issues updated in the last 24 hours using the 'since' parameter. + """ + from datetime import datetime + from datetime import timedelta + from datetime import timezone + + url = f"https://api.github.com/repos/{owner}/{repo}/issues" + params = { + "state": "open", + "per_page": 100, + } + + if INITIAL_FULL_SCAN: + logger.info("INITIAL_FULL_SCAN is True. Fetching ALL open issues...") + else: + yesterday = (datetime.now(timezone.utc) - timedelta(days=1)).strftime( + "%Y-%m-%dT%H:%M:%SZ" + ) + params["since"] = yesterday + logger.info(f"Daily mode: Fetching issues updated since {yesterday}...") + + issue_numbers = [] + page = 1 + + while True: + params["page"] = page + try: + items = get_request(url, params=params) + + if not items: + break + + for item in items: + if "pull_request" not in item: + # Extract all the label names on this issue + current_labels = [label["name"] for label in item.get("labels", [])] + + # Only add the issue if it DOES NOT already have the spam label + if SPAM_LABEL_NAME not in current_labels: + issue_numbers.append(item["number"]) + else: + logger.debug( + f"Skipping #{item['number']} - already marked as spam." + ) + + if len(items) < 100: + break + + page += 1 + except requests.exceptions.RequestException as e: + logger.error(f"Failed to fetch issues on page {page}: {e}") + break + + return issue_numbers From 6f0dcb3e26dd82fed1a8564c17a47eec03b04617 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Fri, 13 Mar 2026 01:28:52 -0700 Subject: [PATCH 015/192] feat: Add a new extension for the new version of ADK-A2A integration This change introduces a new interceptor that adds the 'https://google.github.io/adk-docs/a2a/a2a-extension/' extension to the request headers in the A2A client from the RemoteAgent side. To send this extension along with requests, the RemoteAgent has to be instantiated with the `use_legacy` flag set to False. The AgentExecutor will default to the new implementation when this extension is requested by the client, but this behavior can be disabled via the `use_legacy` flag. The 'force_new' flag on the agent_executor side can be used to bypass the presence of the extension, and always activate the new version of the agent_executor. PiperOrigin-RevId: 883021792 --- .../adk/a2a/agent/interceptors/__init__.py | 13 +++++ .../interceptors/new_integration_extension.py | 56 +++++++++++++++++++ .../adk/a2a/executor/a2a_agent_executor.py | 37 +++++++++--- .../a2a/executor/a2a_agent_executor_impl.py | 3 +- src/google/adk/agents/remote_a2a_agent.py | 16 +++++- .../a2a/executor/test_a2a_agent_executor.py | 1 + .../executor/test_a2a_agent_executor_impl.py | 3 +- 7 files changed, 115 insertions(+), 14 deletions(-) create mode 100644 src/google/adk/a2a/agent/interceptors/__init__.py create mode 100644 src/google/adk/a2a/agent/interceptors/new_integration_extension.py diff --git a/src/google/adk/a2a/agent/interceptors/__init__.py b/src/google/adk/a2a/agent/interceptors/__init__.py new file mode 100644 index 0000000000..58d482ea38 --- /dev/null +++ b/src/google/adk/a2a/agent/interceptors/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/src/google/adk/a2a/agent/interceptors/new_integration_extension.py b/src/google/adk/a2a/agent/interceptors/new_integration_extension.py new file mode 100644 index 0000000000..e98667156f --- /dev/null +++ b/src/google/adk/a2a/agent/interceptors/new_integration_extension.py @@ -0,0 +1,56 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Interceptor that injects the new agent version extension.""" + +from __future__ import annotations + +from typing import Union + +from a2a.client.middleware import ClientCallContext +from a2a.extensions.common import HTTP_EXTENSION_HEADER +from a2a.types import Message as A2AMessage +from google.adk.a2a.agent.config import ParametersConfig +from google.adk.a2a.agent.config import RequestInterceptor +from google.adk.agents.invocation_context import InvocationContext +from google.adk.events.event import Event + +_NEW_A2A_ADK_INTEGRATION_EXTENSION = ( + 'https://google.github.io/adk-docs/a2a/a2a-extension/' +) + + +async def _before_request( + _: InvocationContext, + a2a_request: A2AMessage, + params: ParametersConfig, +) -> tuple[Union[A2AMessage, Event], ParametersConfig]: + """Adds A2A_new_agent_version to client_call_context.""" + if params.client_call_context is None: + params.client_call_context = ClientCallContext() + + http_kwargs = params.client_call_context.state.get('http_kwargs', {}) + headers = http_kwargs.get('headers', {}) + a2a_extensions = headers.get(HTTP_EXTENSION_HEADER, '').split(',') + a2a_extensions = [ext for ext in a2a_extensions if ext] + if _NEW_A2A_ADK_INTEGRATION_EXTENSION not in a2a_extensions: + a2a_extensions.append(_NEW_A2A_ADK_INTEGRATION_EXTENSION) + headers[HTTP_EXTENSION_HEADER] = ','.join(a2a_extensions) + http_kwargs['headers'] = headers + params.client_call_context.state['http_kwargs'] = http_kwargs + return a2a_request, params + + +_new_integration_extension_interceptor = RequestInterceptor( + before_request=_before_request +) diff --git a/src/google/adk/a2a/executor/a2a_agent_executor.py b/src/google/adk/a2a/executor/a2a_agent_executor.py index f2f9852ab6..9288bb4828 100644 --- a/src/google/adk/a2a/executor/a2a_agent_executor.py +++ b/src/google/adk/a2a/executor/a2a_agent_executor.py @@ -39,6 +39,7 @@ from typing_extensions import override from ...utils.context_utils import Aclosing +from ..agent.interceptors.new_integration_extension import _NEW_A2A_ADK_INTEGRATION_EXTENSION from ..converters.request_converter import AgentRunRequest from ..converters.utils import _get_adk_metadata_key from ..experimental import a2a_experimental @@ -62,7 +63,9 @@ class A2aAgentExecutor(AgentExecutor): Args: runner: The runner to use for the agent. config: The config to use for the executor. - use_legacy: Whether to use the legacy executor implementation. + use_legacy: If true, force the legacy implementation. + force_new_version: If true, force the new implementation regardless of the + extension. """ def __init__( @@ -70,15 +73,15 @@ def __init__( *, runner: Runner | Callable[..., Runner | Awaitable[Runner]], config: Optional[A2aAgentExecutorConfig] = None, - use_legacy: bool = True, + use_legacy: bool = False, + force_new_version: bool = False, ): super().__init__() - if not use_legacy: - self._executor_impl = ExecutorImpl(runner=runner, config=config) - else: - self._executor_impl = None - self._runner = runner - self._config = config or A2aAgentExecutorConfig() + self._runner = runner + self._config = config or A2aAgentExecutorConfig() + self._use_legacy = use_legacy + self._force_new_version = force_new_version + self._executor_impl = None async def _resolve_runner(self) -> Runner: """Resolve the runner, handling cases where it's a callable that returns a Runner.""" @@ -129,7 +132,16 @@ async def execute( * Converts the ADK output events into A2A task updates * Publishes the updates back to A2A server via event queue """ - if self._executor_impl: + should_use_new_impl = not self._use_legacy and ( + self._force_new_version or self._check_new_version_extension(context) + ) + + if should_use_new_impl: + if self._executor_impl is None: + self._executor_impl = ExecutorImpl( + runner=self._runner, + config=self._config, + ) await self._executor_impl.execute(context, event_queue) return @@ -338,3 +350,10 @@ async def _prepare_session( run_request.session_id = session.id return session + + def _check_new_version_extension(self, context: RequestContext): + """Check if the extension for the new version is requested and activate it.""" + if _NEW_A2A_ADK_INTEGRATION_EXTENSION in context.requested_extensions: + context.add_activated_extension(_NEW_A2A_ADK_INTEGRATION_EXTENSION) + return True + return False diff --git a/src/google/adk/a2a/executor/a2a_agent_executor_impl.py b/src/google/adk/a2a/executor/a2a_agent_executor_impl.py index cec68f3698..19b6ec8731 100644 --- a/src/google/adk/a2a/executor/a2a_agent_executor_impl.py +++ b/src/google/adk/a2a/executor/a2a_agent_executor_impl.py @@ -39,6 +39,7 @@ from ...runners import Runner from ...utils.context_utils import Aclosing +from ..agent.interceptors.new_integration_extension import _NEW_A2A_ADK_INTEGRATION_EXTENSION from ..converters.from_adk_event import create_error_status_event from ..converters.long_running_functions import handle_user_input from ..converters.long_running_functions import LongRunningFunctions @@ -306,5 +307,5 @@ def _get_invocation_metadata( _get_adk_metadata_key('session_id'): executor_context.session_id, # TODO: Remove this metadata once the new agent executor # is fully adopted. - _get_adk_metadata_key('agent_executor_v2'): True, + _NEW_A2A_ADK_INTEGRATION_EXTENSION: {'adk_agent_executor_v2': True}, } diff --git a/src/google/adk/agents/remote_a2a_agent.py b/src/google/adk/agents/remote_a2a_agent.py index 2e3d2495cb..6072a5ddcb 100644 --- a/src/google/adk/agents/remote_a2a_agent.py +++ b/src/google/adk/agents/remote_a2a_agent.py @@ -54,6 +54,8 @@ AGENT_CARD_WELL_KNOWN_PATH = "/.well-known/agent.json" from ..a2a.agent.config import A2aRemoteAgentConfig +from ..a2a.agent.interceptors.new_integration_extension import _NEW_A2A_ADK_INTEGRATION_EXTENSION +from ..a2a.agent.interceptors.new_integration_extension import _new_integration_extension_interceptor from ..a2a.agent.utils import execute_after_request_interceptors from ..a2a.agent.utils import execute_before_request_interceptors from ..a2a.converters.event_converter import convert_a2a_message_to_event @@ -135,6 +137,7 @@ def __init__( ] = None, full_history_when_stateless: bool = False, config: Optional[A2aRemoteAgentConfig] = None, + use_legacy: bool = True, **kwargs: Any, ) -> None: """Initialize RemoteA2aAgent. @@ -156,6 +159,8 @@ def __init__( request. If False, the default behavior of sending only events since the last reply from the agent will be used. config: Optional configuration object. + use_legacy: If false, send request to the server including the extension + indicating that the server should use the new implementation. **kwargs: Additional arguments passed to BaseAgent Raises: @@ -185,6 +190,13 @@ def __init__( self._full_history_when_stateless = full_history_when_stateless self._config = config or A2aRemoteAgentConfig() + if not use_legacy: + if self._config.request_interceptors is None: + self._config.request_interceptors = [] + self._config.request_interceptors.append( + _new_integration_extension_interceptor + ) + # Validate and store agent card reference if isinstance(agent_card, AgentCard): self._agent_card = agent_card @@ -669,9 +681,7 @@ async def _run_async_impl( else: metadata = a2a_response.metadata - if metadata and metadata.get( - _get_adk_metadata_key("agent_executor_v2") - ): + if metadata and metadata.get(_NEW_A2A_ADK_INTEGRATION_EXTENSION): event = await self._handle_a2a_response_v2(a2a_response, ctx) else: event = await self._handle_a2a_response(a2a_response, ctx) diff --git a/tests/unittests/a2a/executor/test_a2a_agent_executor.py b/tests/unittests/a2a/executor/test_a2a_agent_executor.py index 787b260fe6..4f44e1363c 100644 --- a/tests/unittests/a2a/executor/test_a2a_agent_executor.py +++ b/tests/unittests/a2a/executor/test_a2a_agent_executor.py @@ -66,6 +66,7 @@ def setup_method(self): self.mock_context.current_task = None self.mock_context.task_id = "test-task-id" self.mock_context.context_id = "test-context-id" + self.mock_context.requested_extensions = [] self.mock_event_queue = Mock(spec=EventQueue) diff --git a/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py b/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py index 9acae2dc52..f10d56e564 100644 --- a/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py +++ b/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py @@ -29,6 +29,7 @@ from google.adk.a2a.converters.request_converter import AgentRunRequest from google.adk.a2a.converters.utils import _get_adk_metadata_key from google.adk.a2a.executor.a2a_agent_executor_impl import _A2aAgentExecutor as A2aAgentExecutor +from google.adk.a2a.executor.a2a_agent_executor_impl import _NEW_A2A_ADK_INTEGRATION_EXTENSION from google.adk.a2a.executor.a2a_agent_executor_impl import A2aAgentExecutorConfig from google.adk.a2a.executor.config import ExecuteInterceptor from google.adk.events.event import Event @@ -77,7 +78,7 @@ def setup_method(self): _get_adk_metadata_key("app_name"): "test-app", _get_adk_metadata_key("user_id"): "test-user", _get_adk_metadata_key("session_id"): "test-session", - _get_adk_metadata_key("agent_executor_v2"): True, + _NEW_A2A_ADK_INTEGRATION_EXTENSION: {"adk_agent_executor_v2": True}, } async def _create_async_generator(self, items): From 51c19cbc13c422dffd764ed0d7c664deed9e58b3 Mon Sep 17 00:00:00 2001 From: Xuan Yang Date: Fri, 13 Mar 2026 11:03:49 -0700 Subject: [PATCH 016/192] docs: Use a dedicated API key for docs agents Co-authored-by: Xuan Yang PiperOrigin-RevId: 883246168 --- .github/workflows/analyze-releases-for-adk-docs-updates.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/analyze-releases-for-adk-docs-updates.yml b/.github/workflows/analyze-releases-for-adk-docs-updates.yml index a149a48c33..9e0827757b 100644 --- a/.github/workflows/analyze-releases-for-adk-docs-updates.yml +++ b/.github/workflows/analyze-releases-for-adk-docs-updates.yml @@ -36,7 +36,7 @@ jobs: - name: Run Analyzing Script env: GITHUB_TOKEN: ${{ secrets.ADK_TRIAGE_AGENT }} - GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY_FOR_DOCS_AGENTS }} GOOGLE_GENAI_USE_VERTEXAI: 0 DOC_OWNER: 'google' CODE_OWNER: 'google' From 0e18f81a5cd0d0392ded653b1a63a236449a2685 Mon Sep 17 00:00:00 2001 From: Achuth Narayan Rajagopal Date: Fri, 13 Mar 2026 14:20:43 -0700 Subject: [PATCH 017/192] fix(telemetery): Rolling back change to fix issue affecting LlmAgent creation due to missing version field Co-authored-by: Achuth Narayan Rajagopal PiperOrigin-RevId: 883336463 --- src/google/adk/agents/base_agent.py | 7 ----- src/google/adk/agents/base_agent_config.py | 4 --- src/google/adk/telemetry/tracing.py | 5 ---- tests/unittests/telemetry/test_spans.py | 30 ---------------------- 4 files changed, 46 deletions(-) diff --git a/src/google/adk/agents/base_agent.py b/src/google/adk/agents/base_agent.py index 27971711ca..dec85690b3 100644 --- a/src/google/adk/agents/base_agent.py +++ b/src/google/adk/agents/base_agent.py @@ -136,12 +136,6 @@ class MyAgent(BaseAgent): sub_agents: list[BaseAgent] = Field(default_factory=list) """The sub-agents of this agent.""" - version: str = '' - """The agent's version. - - Version of the agent being invoked. Used to identify the Agent involved in telemetry. - """ - before_agent_callback: Optional[BeforeAgentCallback] = None """Callback or list of callbacks to be invoked before the agent run. @@ -686,7 +680,6 @@ def __create_kwargs( kwargs: Dict[str, Any] = { 'name': config.name, - 'version': config.version, 'description': config.description, } if config.sub_agents: diff --git a/src/google/adk/agents/base_agent_config.py b/src/google/adk/agents/base_agent_config.py index 9dca68c5e6..3859cb3550 100644 --- a/src/google/adk/agents/base_agent_config.py +++ b/src/google/adk/agents/base_agent_config.py @@ -55,10 +55,6 @@ class BaseAgentConfig(BaseModel): name: str = Field(description='Required. The name of the agent.') - version: str = Field( - default='', description='Optional. The version of the agent.' - ) - description: str = Field( default='', description='Optional. The description of the agent.' ) diff --git a/src/google/adk/telemetry/tracing.py b/src/google/adk/telemetry/tracing.py index 4c79ca60e4..5c05968d31 100644 --- a/src/google/adk/telemetry/tracing.py +++ b/src/google/adk/telemetry/tracing.py @@ -83,8 +83,6 @@ USER_CONTENT_ELIDED = '' -GEN_AI_AGENT_VERSION = 'gen_ai.agent.version' - # Needed to avoid circular imports if TYPE_CHECKING: from ..agents.base_agent import BaseAgent @@ -159,7 +157,6 @@ def trace_agent_invocation( span.set_attribute(GEN_AI_AGENT_DESCRIPTION, agent.description) span.set_attribute(GEN_AI_AGENT_NAME, agent.name) - span.set_attribute(GEN_AI_AGENT_VERSION, agent.version) span.set_attribute(GEN_AI_CONVERSATION_ID, ctx.session.id) @@ -495,7 +492,6 @@ def use_generate_content_span( USER_ID: invocation_context.session.user_id, 'gcp.vertex.agent.event_id': model_response_event.id, 'gcp.vertex.agent.invocation_id': invocation_context.invocation_id, - GEN_AI_AGENT_VERSION: invocation_context.agent.version, } if ( _is_gemini_agent(invocation_context.agent) @@ -530,7 +526,6 @@ async def use_inference_span( USER_ID: invocation_context.session.user_id, 'gcp.vertex.agent.event_id': model_response_event.id, 'gcp.vertex.agent.invocation_id': invocation_context.invocation_id, - GEN_AI_AGENT_VERSION: invocation_context.agent.version, } if ( _is_gemini_agent(invocation_context.agent) diff --git a/tests/unittests/telemetry/test_spans.py b/tests/unittests/telemetry/test_spans.py index e9df610f1a..c4bd485fba 100644 --- a/tests/unittests/telemetry/test_spans.py +++ b/tests/unittests/telemetry/test_spans.py @@ -26,7 +26,6 @@ from google.adk.models.llm_response import LlmResponse from google.adk.sessions.in_memory_session_service import InMemorySessionService from google.adk.telemetry.tracing import ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS -from google.adk.telemetry.tracing import GEN_AI_AGENT_VERSION from google.adk.telemetry.tracing import trace_agent_invocation from google.adk.telemetry.tracing import trace_call_llm from google.adk.telemetry.tracing import trace_inference_result @@ -122,33 +121,6 @@ async def test_trace_agent_invocation(mock_span_fixture): mock.call('gen_ai.operation.name', 'invoke_agent'), mock.call('gen_ai.agent.description', agent.description), mock.call('gen_ai.agent.name', agent.name), - mock.call(GEN_AI_AGENT_VERSION, ''), - mock.call( - 'gen_ai.conversation.id', - invocation_context.session.id, - ), - ] - mock_span_fixture.set_attribute.assert_has_calls( - expected_calls, any_order=True - ) - assert mock_span_fixture.set_attribute.call_count == len(expected_calls) - - -@pytest.mark.asyncio -async def test_trace_agent_invocation_with_version(mock_span_fixture): - """Test trace_agent_invocation sets span attributes correctly when version is provided.""" - agent = LlmAgent(name='test_llm_agent', model='gemini-pro') - agent.description = 'Test agent description' - agent.version = '1.0.0' - invocation_context = await _create_invocation_context(agent) - - trace_agent_invocation(mock_span_fixture, agent, invocation_context) - - expected_calls = [ - mock.call('gen_ai.operation.name', 'invoke_agent'), - mock.call('gen_ai.agent.description', agent.description), - mock.call('gen_ai.agent.name', agent.name), - mock.call(GEN_AI_AGENT_VERSION, agent.version), mock.call( 'gen_ai.conversation.id', invocation_context.session.id, @@ -815,7 +787,6 @@ async def test_generate_content_span( mock_span.set_attributes.assert_called_once_with({ GEN_AI_AGENT_NAME: invocation_context.agent.name, - GEN_AI_AGENT_VERSION: '', GEN_AI_CONVERSATION_ID: invocation_context.session.id, USER_ID: invocation_context.session.user_id, 'gcp.vertex.agent.event_id': 'event-123', @@ -1136,7 +1107,6 @@ async def test_generate_content_span_with_experimental_semconv( mock_span.set_attributes.assert_called_once_with({ GEN_AI_AGENT_NAME: invocation_context.agent.name, - GEN_AI_AGENT_VERSION: '', GEN_AI_CONVERSATION_ID: invocation_context.session.id, USER_ID: invocation_context.session.user_id, 'gcp.vertex.agent.event_id': 'event-123', From 9b3888b637dd4015796cf6fce8b3e5cd1de99308 Mon Sep 17 00:00:00 2001 From: "Wei (Jack) Sun" Date: Fri, 13 Mar 2026 16:33:40 -0700 Subject: [PATCH 018/192] chore: merge release v1.27.1 to main Merge https://github.com/google/adk-python/pull/4833 Syncs version bump and CHANGELOG from release v1.27.1 to main. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4833 from google:release/v1.27.1 bc1b50020109004c6797b153a5e9b8144a22aebd PiperOrigin-RevId: 883394436 --- .github/.release-please-manifest.json | 2 +- .github/release-please-config.json | 2 +- CHANGELOG.md | 104 ++++++++++++++++++++++++++ src/google/adk/version.py | 2 +- 4 files changed, 107 insertions(+), 3 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index f97891a673..77003bf734 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.26.0" + ".": "1.27.1" } diff --git a/.github/release-please-config.json b/.github/release-please-config.json index 053aab23c3..d005c874eb 100644 --- a/.github/release-please-config.json +++ b/.github/release-please-config.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "last-release-sha": "8f5428150d18ed732b66379c0acb806a9121c3cb", + "last-release-sha": "7b94a767337e0d642e808734608f07a70e077c62", "packages": { ".": { "release-type": "python", diff --git a/CHANGELOG.md b/CHANGELOG.md index 92a8197b7a..e6ad315733 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,109 @@ # Changelog + +## [1.27.1](https://github.com/google/adk-python/compare/v1.26.0...v1.27.0) (2026-03-13) +### Bug Fixes + * Rolling back change to fix issue affecting LlmAgent creation due to missing version field ([0e18f81](https://github.com/google/adk-python/commit/0e18f81a5cd0d0392ded653b1a63a236449a2685)) + + +## [1.27.0](https://github.com/google/adk-python/compare/v1.26.0...v1.27.0) (2026-03-12) + +### Features +* **[Core]** + * Introduce A2A request interceptors in RemoteA2aAgent ([6f772d2](https://github.com/google/adk-python/commit/6f772d2b0841446bc168ccf405b59eb17c1d671a)) + * Add UiWidget to EventActions for supporting new experimental UI Widgets feature ([530ff06](https://github.com/google/adk-python/commit/530ff06ece61a93855a53235e85af18b46b2a6a0)) + * **auth:** Add pluggable support for auth integrations using AuthProviderRegistry within CredentialManager ([d004074](https://github.com/google/adk-python/commit/d004074c90525442a69cebe226440bb318abad29)) + * Support all `types.SchemaUnion` as output_schema in LLM Agent ([63f450e](https://github.com/google/adk-python/commit/63f450e0231f237ee1af37f17420d37b15426d48)) + * durable runtime support ([07fdd23](https://github.com/google/adk-python/commit/07fdd23c9c3f5046aa668fb480840f67f13bf271)) + * **runners:** pass GetSessionConfig through Runner to session service ([eff724a](https://github.com/google/adk-python/commit/eff724ac9aef2a203607f772c473703f21c09a72)) + +* **[Models]** + * Add support for PDF documents in Anthropic LLM ([4c8ba74](https://github.com/google/adk-python/commit/4c8ba74fcb07014db187ef8db8246ff966379aa9)) + * Add streaming support for Anthropic models ([5770cd3](https://github.com/google/adk-python/commit/5770cd3776c8805086ece34d747e589e36916a34)), closes [#3250](https://github.com/google/adk-python/issues/3250) + * Enable output schema with tools for LiteLlm models ([89df5fc](https://github.com/google/adk-python/commit/89df5fcf883b599cf7bfe40bde35b8d86ab0146b)), closes [#3969](https://github.com/google/adk-python/issues/3969) + * Preserve thought_signature in LiteLLM tool calls ([ae565be](https://github.com/google/adk-python/commit/ae565be30e64249b2913ad647911061a8b170e21)), closes [#4650](https://github.com/google/adk-python/issues/4650) + +* **[Web]** + * Updated human in the loop: developers now can respond to long running functions directly in chat + * Render artifacts when resuming + * Fix some light mode styles + * Fix token level streaming not working properly ([22799c0](https://github.com/google/adk-python/commit/22799c0833569753021078f7bd8dcd11ece562fe)) + +* **[Observability]** + * **telemetry:** add new gen_ai.agent.version span attribute ([ffe97ec](https://github.com/google/adk-python/commit/ffe97ec5ad7229c0b4ba573f33eb0edb8bb2877a)) + * **otel:** add `gen_ai.tool.definitions` to experimental semconv ([4dd4d5e](https://github.com/google/adk-python/commit/4dd4d5ecb6a1dadbc41389dac208616f6d21bc6e)) + * **otel:** add experimental semantic convention and emit `gen_ai.client.inference.operation.details` event ([19718e9](https://github.com/google/adk-python/commit/19718e9c174af7b1287b627e6b23a609db1ee5e2)) + * add missing token usage span attributes during model usage ([77bf325](https://github.com/google/adk-python/commit/77bf325d2bf556621c3276f74ee2816fce2a7085)) + * capture tool execution error code in OpenTelemetry spans ([e0a6c6d](https://github.com/google/adk-python/commit/e0a6c6db6f8e2db161f8b86b9f11030f0cec807a)) + +* **[Tools]** + * Warn when accessing DEFAULT_SKILL_SYSTEM_INSTRUCTION ([35366f4](https://github.com/google/adk-python/commit/35366f4e2a0575090fe12cd85f51e8116a1cd0d3)) + * add preserve_property_names option to OpenAPIToolset ([078b516](https://github.com/google/adk-python/commit/078b5163ff47acec69b1c8e105f62eb7b74f5548)) + * Add gcs filesystem support for Skills. It supports skills in text and pdf format, also has some sample agents ([6edcb97](https://github.com/google/adk-python/commit/6edcb975827dbd543a40ae3a402d2389327df603)) + * Add list_skills_in_dir to skills utils ([327b3af](https://github.com/google/adk-python/commit/327b3affd2d0a192f5a072b90fdb4aae7575be90)) + * Add support for MCP App UI widgets in MCPTool ([86db35c](https://github.com/google/adk-python/commit/86db35c338adaafb41e156311465e71e17edf35e)) + * add Dataplex Catalog search tool to BigQuery ADK ([82c2eef](https://github.com/google/adk-python/commit/82c2eefb27313c5b11b9e9382f626f543c53a29e)) + * Add RunSkillScriptTool to SkillToolset ([636f68f](https://github.com/google/adk-python/commit/636f68fbee700aa47f01e2cfd746859353b3333d)) + * Add support for ADK tools in SkillToolset ([44a5e6b](https://github.com/google/adk-python/commit/44a5e6bdb8e8f02891e72b65ef883f108c506f6a)) + * limit number of user-provided BigQuery job labels and reserve internal prefixes ([8c4ff74](https://github.com/google/adk-python/commit/8c4ff74e7d70cf940f54f6d7735f001495ce75d5)) + * Add param support to Bigtable execute_sql ([5702a4b](https://github.com/google/adk-python/commit/5702a4b1f59b17fd8b290fc125c349240b0953d7)) + * **bigtable:** add Bigtable cluster metadata tools ([34c560e](https://github.com/google/adk-python/commit/34c560e66e7ad379f586bbcd45a9460dc059bee2)) + * execute-type param addition in GkeCodeExecutor ([9c45166](https://github.com/google/adk-python/commit/9c451662819a6c7de71be71d12ea715b2fe74135)) + * **skill:** Add BashTool ([8a31612](https://github.com/google/adk-python/commit/8a3161202e4bac0bb8e8801b100f4403c1c75646)) + * Add support for toolsets to additional_tools field of SkillToolset ([066fcec](https://github.com/google/adk-python/commit/066fcec3e8e669d1c5360e1556afce3f7e068072)) + + +* **[Optimization]** + * Add `adk optimize` command ([b18d7a1](https://github.com/google/adk-python/commit/b18d7a140f8e18e03255b07e6d89948427790095)) + * Add interface between optimization infra and LocalEvalService ([7b7ddda](https://github.com/google/adk-python/commit/7b7ddda46ca701952f002b2807b89dbef5322414)) + * Add GEPA root agent prompt optimizer ([4e3e2cb](https://github.com/google/adk-python/commit/4e3e2cb58858e08a79bc6119ad49b6c049dbc0d0)) + +* **[Integrations]** + * Enhance BigQuery plugin schema upgrades and error reporting ([bcf38fa](https://github.com/google/adk-python/commit/bcf38fa2bac2f0d1ab74e07e01eb5160bad1d6dc)) + * Enhance BQ plugin with fork safety, auto views, and trace continuity ([80c5a24](https://github.com/google/adk-python/commit/80c5a245557cd75870e72bff0ecfaafbd37fdbc7)) + * Handle Conflict Errors in BigQuery Agent Analytics Plugin ([372c76b](https://github.com/google/adk-python/commit/372c76b857daa1102e76d755c0758f1515d6f180)) + * Added tracking headers for ADK CLI command to Agent Engine ([3117446](https://github.com/google/adk-python/commit/3117446293d30039c2f21f3d17a64a456c42c47d)) + +* **[A2A]** + * New implementation of A2aAgentExecutor and A2A-ADK conversion ([87ffc55](https://github.com/google/adk-python/commit/87ffc55640dea1185cf67e6f9b78f70b30867bcc)) + * New implementation of RemoteA2aAgent and A2A-ADK conversion ([6770e41](https://github.com/google/adk-python/commit/6770e419f5e200f4c7ad26587e1f769693ef4da0)) + +### Bug Fixes + +* Allow artifact services to accept dictionary representations of types.Part ([b004da5](https://github.com/google/adk-python/commit/b004da50270475adc9e1d7afe4064ca1d10c560a)), closes [#2886](https://github.com/google/adk-python/issues/2886) +* Decode image data from ComputerUse tool response into image blobs ([d7cfd8f](https://github.com/google/adk-python/commit/d7cfd8fe4def2198c113ff1993ef39cd519908a1)) +* Expand LiteLLM reasoning extraction to include 'reasoning' field ([9468487](https://github.com/google/adk-python/commit/94684874e436c2959cfc90ec346010a6f4fddc49)), closes [#3694](https://github.com/google/adk-python/issues/3694) +* Filter non-agent directories from list_agents() ([3b5937f](https://github.com/google/adk-python/commit/3b5937f022adf9286dc41e01e3618071a23eb992)) +* Fix Type Error by initializing user_content as a Content object ([2addf6b](https://github.com/google/adk-python/commit/2addf6b9dacfe87344aeec0101df98d99c23bdb1)) +* Handle length finish reason in LiteLLM responses ([4c6096b](https://github.com/google/adk-python/commit/4c6096baa1b0bed8533397287a5c11a0c4cb9101)), closes [#4482](https://github.com/google/adk-python/issues/4482) +* In SaveFilesAsArtifactsPlugin, write the artifact delta to state then event actions so that the plugin works with ADK Web UI's artifacts panel ([d6f31be](https://github.com/google/adk-python/commit/d6f31be554d9b7ee15fd9c95ae655b2265fb1f32)) +* Make invocation_context optional in convert_event_to_a2a_message ([8e79a12](https://github.com/google/adk-python/commit/8e79a12d6bcde43cc33247b7ee6cc9e929fa6288)) +* Optimize row-level locking in append_event ([d61846f](https://github.com/google/adk-python/commit/d61846f6c6dd5e357abb0e30eaf61fe27896ae6a)), closes [#4655](https://github.com/google/adk-python/issues/4655) +* Preserve thought_signature in FunctionCall conversions between GenAI and A2A ([f9c104f](https://github.com/google/adk-python/commit/f9c104faf73e2a002bb3092b50fb88f4eed78163)) +* Prevent splitting of SSE events with artifactDelta for function resume requests ([6a929af](https://github.com/google/adk-python/commit/6a929af718fa77199d1eecc62b16c54beb1c8d84)), closes [#4487](https://github.com/google/adk-python/issues/4487) +* Propagate file names during A2A to/from Genai Part conversion ([f324fa2](https://github.com/google/adk-python/commit/f324fa2d62442301ebb2e7974eb97ea870471410)) +* Propagate thought from A2A TextPart metadata to GenAI Part ([e59929e](https://github.com/google/adk-python/commit/e59929e11a56aaee7bb0c45cd4c9d9fef689548c)) +* Re-export DEFAULT_SKILL_SYSTEM_INSTRUCTION to skills and skill/prompt.py to avoid breaking current users ([de4dee8](https://github.com/google/adk-python/commit/de4dee899cd777a01ba15906f8496a72e717ea98)) +* Refactor type string update in Anthropic tool param conversion ([ab4b736](https://github.com/google/adk-python/commit/ab4b736807dabee65659486a68135d9f1530834c)) +* **simulation:** handle NoneType generated_content ([9d15517](https://github.com/google/adk-python/commit/9d155177b956f690d4c99560f582e3e90e111f71)) +* Store and retrieve EventCompaction via custom_metadata in Vertex AISessionService ([2e434ca](https://github.com/google/adk-python/commit/2e434ca7be765d45426fde9d52b131921bd9fa30)), closes [#3465](https://github.com/google/adk-python/issues/3465) +* Support before_tool_callback and after_tool_callback in Live mode ([c36a708](https://github.com/google/adk-python/commit/c36a708058163ade061cd3d2f9957231a505a62d)), closes [#4704](https://github.com/google/adk-python/issues/4704) +* temp-scoped state now visible to subsequent agents in same invocation ([2780ae2](https://github.com/google/adk-python/commit/2780ae2892adfbebc7580c843d2eaad29f86c335)) +* **tools:** Handle JSON Schema boolean schemas in Gemini schema conversion ([3256a67](https://github.com/google/adk-python/commit/3256a679da3e0fb6f18b26057e87f5284680cb58)) +* typo in A2A EXPERIMENTAL warning ([eb55eb7](https://github.com/google/adk-python/commit/eb55eb7e7f0fa647d762205225c333dcd8a08dd0)) +* Update agent_engine_sandbox_code_executor in ADK ([dff4c44](https://github.com/google/adk-python/commit/dff4c4404051b711c8be437ba0ae26ca2763df7d)) +* update Bigtable query tools to async functions ([72f3e7e](https://github.com/google/adk-python/commit/72f3e7e1e00d93c632883027bf6d31a9095cd6c2)) +* Update expected UsageMetadataChunk in LiteLLM tests ([dd0851a](https://github.com/google/adk-python/commit/dd0851ac74d358bc030def5adf242d875ab18265)), closes [#4680](https://github.com/google/adk-python/issues/4680) +* update toolbox server and SDK package versions ([2e370ea](https://github.com/google/adk-python/commit/2e370ea688033f0663501171d0babfb0d74de4b2)) +* Validate session before streaming instead of eagerly advancing the runner generator ([ebbc114](https://github.com/google/adk-python/commit/ebbc1147863956e85931f8d46abb0632e3d1cf67)) + + +### Code Refactoring + +* extract reusable functions from hitl and auth preprocessor ([c59afc2](https://github.com/google/adk-python/commit/c59afc21cbed27d1328872cdc2b0e182ab2ca6c8)) +* Rename base classes and TypeVars in optimization data types ([9154ef5](https://github.com/google/adk-python/commit/9154ef59d29eb37538914e9967c4392cc2a24237)) + + ## [1.26.0](https://github.com/google/adk-python/compare/v1.25.1...v1.26.0) (2026-02-26) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 2e373f505a..9b5eec1143 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "1.26.0" +__version__ = "1.27.1" From faafac9bb33b45174f04746055fc655b12d3e7f7 Mon Sep 17 00:00:00 2001 From: "Xiang (Sean) Zhou" Date: Fri, 13 Mar 2026 16:52:08 -0700 Subject: [PATCH 019/192] feat: Support new embedding model in files retrieval Co-authored-by: Xiang (Sean) Zhou PiperOrigin-RevId: 883401159 --- src/google/adk/tools/retrieval/files_retrieval.py | 9 ++++++--- tests/unittests/tools/retrieval/test_files_retrieval.py | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/google/adk/tools/retrieval/files_retrieval.py b/src/google/adk/tools/retrieval/files_retrieval.py index c70add4ce0..9db1bc39cf 100644 --- a/src/google/adk/tools/retrieval/files_retrieval.py +++ b/src/google/adk/tools/retrieval/files_retrieval.py @@ -32,7 +32,7 @@ def _get_default_embedding_model() -> BaseEmbedding: """Get the default Google Gemini embedding model. Returns: - GoogleGenAIEmbedding instance configured with text-embedding-004 model. + GoogleGenAIEmbedding instance configured with gemini-embedding-2-preview model. Raises: ImportError: If llama-index-embeddings-google-genai package is not installed. @@ -40,7 +40,10 @@ def _get_default_embedding_model() -> BaseEmbedding: try: from llama_index.embeddings.google_genai import GoogleGenAIEmbedding - return GoogleGenAIEmbedding(model_name="text-embedding-004") + return GoogleGenAIEmbedding( + model_name="gemini-embedding-2-preview", + embed_batch_size=1, + ) except ImportError as e: raise ImportError( "llama-index-embeddings-google-genai package not found. " @@ -65,7 +68,7 @@ def __init__( description: Description of the tool. input_dir: Directory path containing files to index. embedding_model: Optional custom embedding model. If None, defaults to - Google's text-embedding-004 model. + Google's gemini-embedding-2-preview model. """ self.input_dir = input_dir diff --git a/tests/unittests/tools/retrieval/test_files_retrieval.py b/tests/unittests/tools/retrieval/test_files_retrieval.py index 3244e81746..5723b521fd 100644 --- a/tests/unittests/tools/retrieval/test_files_retrieval.py +++ b/tests/unittests/tools/retrieval/test_files_retrieval.py @@ -122,7 +122,8 @@ def test_get_default_embedding_model_success(self): result = _get_default_embedding_model() mock_module.GoogleGenAIEmbedding.assert_called_once_with( - model_name="text-embedding-004" + model_name="gemini-embedding-2-preview", + embed_batch_size=1, ) assert result == mock_embedding_instance From 8f826972cc06ef250c1f020e34b9d1cdbd0788c4 Mon Sep 17 00:00:00 2001 From: Piyush Mourya <86821813+Piyushmrya@users.noreply.github.com> Date: Fri, 13 Mar 2026 16:52:11 -0700 Subject: [PATCH 020/192] feat(mcp): add sampling callback support for MCP sessions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge https://github.com/google/adk-python/pull/4718 ### Link to Issue or Description of Change **1. Link to an existing issue (if applicable):** - Closes: N/A - Related: N/A **2. Or, if no issue exists, describe the change:** **Problem** ADK’s MCP integration currently does not expose the MCP sampling callback capability. This prevents agent-side LLM sampling handlers from being used when interacting with MCP servers that support sampling. The MCP Python SDK supports sampling callbacks, but these parameters are not propagated through the ADK MCP integration layers. **Solution** Add sampling callback support by propagating the parameters through the MCP stack: - Add `sampling_callback` and `sampling_capabilities` parameters to `McpToolset` - Forward them to `MCPSessionManager` - Forward them to `SessionContext` - Pass them into `ClientSession` initialization This enables agent-side sampling handling when interacting with MCP servers. --- ### Testing Plan **Unit Tests** - [x] I have added or updated unit tests for my change. - [x] All unit tests pass locally. Added `test_mcp_sampling_callback.py` to verify that the sampling callback is correctly invoked. Example result: pytest tests/unittests/tools/mcp_tool/test_mcp_sampling_callback.py 1 passed **Manual End-to-End (E2E) Tests** Manual testing was performed using a FastMCP sampling example server where the sampling callback was invoked from the agent side and returned the expected response. --- ### Checklist - [x] I have read the CONTRIBUTING.md document. - [x] I have performed a self-review of my own code. - [x] I have commented my code where necessary. - [x] I have added tests proving the feature works. - [x] Unit tests pass locally. - [x] I have manually tested the change end-to-end. --- ### Additional context This change aligns ADK MCP support with the sampling capabilities available in the MCP Python SDK and enables agent implementations to handle sampling requests via a callback. Co-authored-by: Kathy Wu COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4718 from Piyushmrya:fix-mcp-sampling-callback 18f477f04ad357d698b0a4c8a4392936b9f6d185 PiperOrigin-RevId: 883401178 --- .../adk/tools/mcp_tool/mcp_session_manager.py | 13 +++++++ src/google/adk/tools/mcp_tool/mcp_toolset.py | 12 +++++++ .../adk/tools/mcp_tool/session_context.py | 14 ++++++++ .../tools/mcp_tool/test_mcp_toolset.py | 34 +++++++++++++++++++ 4 files changed, 73 insertions(+) diff --git a/src/google/adk/tools/mcp_tool/mcp_session_manager.py b/src/google/adk/tools/mcp_tool/mcp_session_manager.py index f4339f8678..e0cd1ebc89 100644 --- a/src/google/adk/tools/mcp_tool/mcp_session_manager.py +++ b/src/google/adk/tools/mcp_tool/mcp_session_manager.py @@ -33,7 +33,9 @@ from typing import Union from mcp import ClientSession +from mcp import SamplingCapability from mcp import StdioServerParameters +from mcp.client.session import SamplingFnT from mcp.client.sse import sse_client from mcp.client.stdio import stdio_client from mcp.client.streamable_http import create_mcp_http_client @@ -195,6 +197,9 @@ def __init__( StreamableHTTPConnectionParams, ], errlog: TextIO = sys.stderr, + *, + sampling_callback: Optional[SamplingFnT] = None, + sampling_capabilities: Optional[SamplingCapability] = None, ): """Initializes the MCP session manager. @@ -204,7 +209,13 @@ def __init__( parameters but it's not configurable for now. errlog: (Optional) TextIO stream for error logging. Use only for initializing a local stdio MCP session. + sampling_callback: Optional callback to handle sampling requests from the + MCP server. + sampling_capabilities: Optional capabilities for sampling. """ + self._sampling_callback = sampling_callback + self._sampling_capabilities = sampling_capabilities + if isinstance(connection_params, StdioServerParameters): # So far timeout is not configurable. Given MCP is still evolving, we # would expect stdio_client to evolve to accept timeout parameter like @@ -475,6 +486,8 @@ async def create_session( timeout=timeout_in_seconds, sse_read_timeout=sse_read_timeout_in_seconds, is_stdio=is_stdio, + sampling_callback=self._sampling_callback, + sampling_capabilities=self._sampling_capabilities, ) ), timeout=timeout_in_seconds, diff --git a/src/google/adk/tools/mcp_tool/mcp_toolset.py b/src/google/adk/tools/mcp_tool/mcp_toolset.py index fb4e992dfd..db6bd9051e 100644 --- a/src/google/adk/tools/mcp_tool/mcp_toolset.py +++ b/src/google/adk/tools/mcp_tool/mcp_toolset.py @@ -29,7 +29,9 @@ from typing import Union import warnings +from mcp import SamplingCapability from mcp import StdioServerParameters +from mcp.client.session import SamplingFnT from mcp.shared.session import ProgressFnT from mcp.types import ListResourcesResult from mcp.types import ListToolsResult @@ -114,6 +116,8 @@ def __init__( Union[ProgressFnT, ProgressCallbackFactory] ] = None, use_mcp_resources: Optional[bool] = False, + sampling_callback: Optional[SamplingFnT] = None, + sampling_capabilities: Optional[SamplingCapability] = None, ): """Initializes the McpToolset. @@ -150,10 +154,16 @@ def __init__( use_mcp_resources: Whether the agent should have access to MCP resources. This will add a `load_mcp_resource` tool to the toolset and include available resources in the agent context. Defaults to False. + sampling_callback: Optional callback to handle sampling requests from the + MCP server. + sampling_capabilities: Optional capabilities for sampling. """ super().__init__(tool_filter=tool_filter, tool_name_prefix=tool_name_prefix) + self._sampling_callback = sampling_callback + self._sampling_capabilities = sampling_capabilities + if not connection_params: raise ValueError("Missing connection params in McpToolset.") @@ -166,6 +176,8 @@ def __init__( self._mcp_session_manager = MCPSessionManager( connection_params=self._connection_params, errlog=self._errlog, + sampling_callback=self._sampling_callback, + sampling_capabilities=self._sampling_capabilities, ) self._auth_scheme = auth_scheme self._auth_credential = auth_credential diff --git a/src/google/adk/tools/mcp_tool/session_context.py b/src/google/adk/tools/mcp_tool/session_context.py index ca637d0489..23e968fe52 100644 --- a/src/google/adk/tools/mcp_tool/session_context.py +++ b/src/google/adk/tools/mcp_tool/session_context.py @@ -22,6 +22,8 @@ from typing import Optional from mcp import ClientSession +from mcp import SamplingCapability +from mcp.client.session import SamplingFnT logger = logging.getLogger('google_adk.' + __name__) @@ -54,6 +56,9 @@ def __init__( timeout: Optional[float], sse_read_timeout: Optional[float], is_stdio: bool = False, + *, + sampling_callback: Optional[SamplingFnT] = None, + sampling_capabilities: Optional[SamplingCapability] = None, ): """ Args: @@ -63,6 +68,9 @@ def __init__( sse_read_timeout: Timeout in seconds for reading data from the MCP SSE server. is_stdio: Whether this is a stdio connection (affects read timeout). + sampling_callback: Optional callback to handle sampling requests from the + MCP server. + sampling_capabilities: Optional capabilities for sampling. """ self._client = client self._timeout = timeout @@ -73,6 +81,8 @@ def __init__( self._close_event = asyncio.Event() self._task: Optional[asyncio.Task] = None self._task_lock = asyncio.Lock() + self._sampling_callback = sampling_callback + self._sampling_capabilities = sampling_capabilities @property def session(self) -> Optional[ClientSession]: @@ -165,6 +175,8 @@ async def _run(self): read_timeout_seconds=timedelta(seconds=self._timeout) if self._timeout is not None else None, + sampling_callback=self._sampling_callback, + sampling_capabilities=self._sampling_capabilities, ) ) else: @@ -176,6 +188,8 @@ async def _run(self): read_timeout_seconds=timedelta(seconds=self._sse_read_timeout) if self._sse_read_timeout is not None else None, + sampling_callback=self._sampling_callback, + sampling_capabilities=self._sampling_capabilities, ) ) await asyncio.wait_for(session.initialize(), timeout=self._timeout) diff --git a/tests/unittests/tools/mcp_tool/test_mcp_toolset.py b/tests/unittests/tools/mcp_tool/test_mcp_toolset.py index d510abc7c1..8179a1c9e1 100644 --- a/tests/unittests/tools/mcp_tool/test_mcp_toolset.py +++ b/tests/unittests/tools/mcp_tool/test_mcp_toolset.py @@ -612,3 +612,37 @@ async def test_read_resource(self, name, mime_type, content, encoding): assert result == contents self.mock_session.list_resources.assert_called_once() self.mock_session.read_resource.assert_called_once_with(uri=uri) + + @pytest.mark.asyncio + async def test_sampling_callback_invoked(self): + + called = {"value": False} + + async def mock_sampling_handler(messages, params=None, context=None): + called["value"] = True + + assert isinstance(messages, list) + assert messages[0]["role"] == "user" + + return { + "model": "test-model", + "role": "assistant", + "content": {"type": "text", "text": "sampling response"}, + "stopReason": "endTurn", + } + + toolset = McpToolset( + connection_params=StreamableHTTPConnectionParams( + url="http://localhost:9999", + timeout=10, + ), + sampling_callback=mock_sampling_handler, + ) + + messages = [{"role": "user", "content": {"type": "text", "text": "hello"}}] + + result = await toolset._sampling_callback(messages) + + assert called["value"] is True + assert result["role"] == "assistant" + assert result["content"]["text"] == "sampling response" From e3b58e22c3719a6e11b3951a7569eb17ae7904e5 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Fri, 13 Mar 2026 16:53:55 -0700 Subject: [PATCH 021/192] chore: Move crew ai tool into integrations folder Co-authored-by: Kathy Wu PiperOrigin-RevId: 883401885 --- .../adk/integrations/crewai/__init__.py | 19 +++ .../adk/integrations/crewai/crewai_tool.py | 158 ++++++++++++++++++ src/google/adk/tools/crewai_tool.py | 151 ++--------------- .../crewai}/test_crewai_tool.py | 4 +- 4 files changed, 191 insertions(+), 141 deletions(-) create mode 100644 src/google/adk/integrations/crewai/__init__.py create mode 100644 src/google/adk/integrations/crewai/crewai_tool.py rename tests/unittests/{tools => integrations/crewai}/test_crewai_tool.py (98%) diff --git a/src/google/adk/integrations/crewai/__init__.py b/src/google/adk/integrations/crewai/__init__.py new file mode 100644 index 0000000000..a463c453df --- /dev/null +++ b/src/google/adk/integrations/crewai/__init__.py @@ -0,0 +1,19 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .crewai_tool import CrewaiTool +from .crewai_tool import CrewaiToolConfig + +__all__ = [ + 'CrewaiTool', + 'CrewaiToolConfig', +] diff --git a/src/google/adk/integrations/crewai/crewai_tool.py b/src/google/adk/integrations/crewai/crewai_tool.py new file mode 100644 index 0000000000..3f47d7e5c9 --- /dev/null +++ b/src/google/adk/integrations/crewai/crewai_tool.py @@ -0,0 +1,158 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import inspect +from typing import Any +from typing import Callable + +from google.genai import types +from typing_extensions import override + +from ...tools import _automatic_function_calling_util +from ...tools.function_tool import FunctionTool +from ...tools.tool_configs import BaseToolConfig +from ...tools.tool_configs import ToolArgsConfig +from ...tools.tool_context import ToolContext + +try: + from crewai.tools import BaseTool as CrewaiBaseTool +except ImportError as e: + raise ImportError( + "Crewai Tools require pip install 'google-adk[extensions]'." + ) from e + + +class CrewaiTool(FunctionTool): + """Use this class to wrap a CrewAI tool. + + If the original tool name and description are not suitable, you can override + them in the constructor. + """ + + tool: CrewaiBaseTool + """The wrapped CrewAI tool.""" + + def __init__(self, tool: CrewaiBaseTool, *, name: str, description: str = ''): + super().__init__(tool.run) + self.tool = tool + if name: + self.name = name + elif tool.name: + # Right now, CrewAI tool name contains white spaces. White spaces are + # not supported in our framework. So we replace them with "_". + self.name = tool.name.replace(' ', '_').lower() + if description: + self.description = description + elif tool.description: + self.description = tool.description + + @override + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + """Override run_async to handle CrewAI-specific parameter filtering. + + CrewAI tools use **kwargs pattern, so we need special parameter filtering + logic that allows all parameters to pass through while removing only + reserved parameters like 'self' and 'tool_context'. + + Note: 'tool_context' is removed from the initial args dictionary to prevent + duplicates, but is re-added if the function signature explicitly requires it + as a parameter. + """ + # Preprocess arguments (includes Pydantic model conversion) + args_to_call = self._preprocess_args(args) + + signature = inspect.signature(self.func) + valid_params = {param for param in signature.parameters} + + # Check if function accepts **kwargs + has_kwargs = any( + param.kind == inspect.Parameter.VAR_KEYWORD + for param in signature.parameters.values() + ) + + if has_kwargs: + # For functions with **kwargs, we pass all arguments. We defensively + # remove arguments like `self` that are managed by the framework and not + # intended to be passed through **kwargs. + args_to_call.pop('self', None) + # We also remove context param that might have been passed in `args`, + # as it will be explicitly injected later if it's a valid parameter. + args_to_call.pop(self._context_param_name, None) + else: + # For functions without **kwargs, use the original filtering. + args_to_call = { + k: v for k, v in args_to_call.items() if k in valid_params + } + + # Inject context if it's an explicit parameter. This will add it + # or overwrite any value that might have been passed in `args`. + if self._context_param_name in valid_params: + args_to_call[self._context_param_name] = tool_context + + # Check for missing mandatory arguments + mandatory_args = self._get_mandatory_args() + missing_mandatory_args = [ + arg for arg in mandatory_args if arg not in args_to_call + ] + + if missing_mandatory_args: + missing_mandatory_args_str = '\n'.join(missing_mandatory_args) + error_str = f"""Invoking `{self.name}()` failed as the following mandatory input parameters are not present: +{missing_mandatory_args_str} +You could retry calling this tool, but it is IMPORTANT for you to provide all the mandatory parameters.""" + return {'error': error_str} + + return await self._invoke_callable(self.func, args_to_call) + + @override + def _get_declaration(self) -> types.FunctionDeclaration: + """Build the function declaration for the tool.""" + function_declaration = _automatic_function_calling_util.build_function_declaration_for_params_for_crewai( + False, + self.name, + self.description, + self.func, + self.tool.args_schema.model_json_schema(), + ) + return function_declaration + + @override + @classmethod + def from_config( + cls: type[CrewaiTool], config: ToolArgsConfig, config_abs_path: str + ) -> CrewaiTool: + from ...agents import config_agent_utils + + crewai_tool_config = CrewaiToolConfig.model_validate(config.model_dump()) + tool = config_agent_utils.resolve_fully_qualified_name( + crewai_tool_config.tool + ) + name = crewai_tool_config.name + description = crewai_tool_config.description + return cls(tool, name=name, description=description) + + +class CrewaiToolConfig(BaseToolConfig): + tool: str + """The fully qualified path of the CrewAI tool instance.""" + + name: str = '' + """The name of the tool.""" + + description: str = '' + """The description of the tool.""" diff --git a/src/google/adk/tools/crewai_tool.py b/src/google/adk/tools/crewai_tool.py index fca8ba9f50..1160a711eb 100644 --- a/src/google/adk/tools/crewai_tool.py +++ b/src/google/adk/tools/crewai_tool.py @@ -14,145 +14,18 @@ from __future__ import annotations -import inspect -from typing import Any -from typing import Callable +import warnings -from google.genai import types -from typing_extensions import override +from google.adk.integrations.crewai import CrewaiTool +from google.adk.integrations.crewai import CrewaiToolConfig -from . import _automatic_function_calling_util -from .function_tool import FunctionTool -from .tool_configs import BaseToolConfig -from .tool_configs import ToolArgsConfig -from .tool_context import ToolContext +warnings.warn( + "google.adk.tools.crewai_tool is moved to google.adk.integrations.crewai", + DeprecationWarning, + stacklevel=2, +) -try: - from crewai.tools import BaseTool as CrewaiBaseTool -except ImportError as e: - raise ImportError( - "Crewai Tools require pip install 'google-adk[extensions]'." - ) from e - - -class CrewaiTool(FunctionTool): - """Use this class to wrap a CrewAI tool. - - If the original tool name and description are not suitable, you can override - them in the constructor. - """ - - tool: CrewaiBaseTool - """The wrapped CrewAI tool.""" - - def __init__(self, tool: CrewaiBaseTool, *, name: str, description: str): - super().__init__(tool.run) - self.tool = tool - if name: - self.name = name - elif tool.name: - # Right now, CrewAI tool name contains white spaces. White spaces are - # not supported in our framework. So we replace them with "_". - self.name = tool.name.replace(' ', '_').lower() - if description: - self.description = description - elif tool.description: - self.description = tool.description - - @override - async def run_async( - self, *, args: dict[str, Any], tool_context: ToolContext - ) -> Any: - """Override run_async to handle CrewAI-specific parameter filtering. - - CrewAI tools use **kwargs pattern, so we need special parameter filtering - logic that allows all parameters to pass through while removing only - reserved parameters like 'self' and 'tool_context'. - - Note: 'tool_context' is removed from the initial args dictionary to prevent - duplicates, but is re-added if the function signature explicitly requires it - as a parameter. - """ - # Preprocess arguments (includes Pydantic model conversion) - args_to_call = self._preprocess_args(args) - - signature = inspect.signature(self.func) - valid_params = {param for param in signature.parameters} - - # Check if function accepts **kwargs - has_kwargs = any( - param.kind == inspect.Parameter.VAR_KEYWORD - for param in signature.parameters.values() - ) - - if has_kwargs: - # For functions with **kwargs, we pass all arguments. We defensively - # remove arguments like `self` that are managed by the framework and not - # intended to be passed through **kwargs. - args_to_call.pop('self', None) - # We also remove context param that might have been passed in `args`, - # as it will be explicitly injected later if it's a valid parameter. - args_to_call.pop(self._context_param_name, None) - else: - # For functions without **kwargs, use the original filtering. - args_to_call = { - k: v for k, v in args_to_call.items() if k in valid_params - } - - # Inject context if it's an explicit parameter. This will add it - # or overwrite any value that might have been passed in `args`. - if self._context_param_name in valid_params: - args_to_call[self._context_param_name] = tool_context - - # Check for missing mandatory arguments - mandatory_args = self._get_mandatory_args() - missing_mandatory_args = [ - arg for arg in mandatory_args if arg not in args_to_call - ] - - if missing_mandatory_args: - missing_mandatory_args_str = '\n'.join(missing_mandatory_args) - error_str = f"""Invoking `{self.name}()` failed as the following mandatory input parameters are not present: -{missing_mandatory_args_str} -You could retry calling this tool, but it is IMPORTANT for you to provide all the mandatory parameters.""" - return {'error': error_str} - - return await self._invoke_callable(self.func, args_to_call) - - @override - def _get_declaration(self) -> types.FunctionDeclaration: - """Build the function declaration for the tool.""" - function_declaration = _automatic_function_calling_util.build_function_declaration_for_params_for_crewai( - False, - self.name, - self.description, - self.func, - self.tool.args_schema.model_json_schema(), - ) - return function_declaration - - @override - @classmethod - def from_config( - cls: type[CrewaiTool], config: ToolArgsConfig, config_abs_path: str - ) -> CrewaiTool: - from ..agents import config_agent_utils - - crewai_tool_config = CrewaiToolConfig.model_validate(config.model_dump()) - tool = config_agent_utils.resolve_fully_qualified_name( - crewai_tool_config.tool - ) - name = crewai_tool_config.name - description = crewai_tool_config.description - return cls(tool, name=name, description=description) - - -class CrewaiToolConfig(BaseToolConfig): - tool: str - """The fully qualified path of the CrewAI tool instance.""" - - name: str = '' - """The name of the tool.""" - - description: str = '' - """The description of the tool.""" +__all__ = [ + "CrewaiTool", + "CrewaiToolConfig", +] diff --git a/tests/unittests/tools/test_crewai_tool.py b/tests/unittests/integrations/crewai/test_crewai_tool.py similarity index 98% rename from tests/unittests/tools/test_crewai_tool.py rename to tests/unittests/integrations/crewai/test_crewai_tool.py index a0028233f0..f7f9bfe0bd 100644 --- a/tests/unittests/tools/test_crewai_tool.py +++ b/tests/unittests/integrations/crewai/test_crewai_tool.py @@ -18,13 +18,13 @@ # Skip entire module if Python < 3.10 (must be before crewai_tool import) pytest.importorskip( - "google.adk.tools.crewai_tool", reason="Requires Python 3.10+" + "google.adk.integrations.crewai.crewai_tool", reason="Requires Python 3.10+" ) from google.adk.agents.context import Context from google.adk.agents.invocation_context import InvocationContext +from google.adk.integrations.crewai import CrewaiTool from google.adk.sessions.session import Session -from google.adk.tools.crewai_tool import CrewaiTool from google.adk.tools.tool_context import ToolContext From b24f60452d1bdbfb24596bb32bac1936db431676 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Fri, 13 Mar 2026 16:58:41 -0700 Subject: [PATCH 022/192] chore: Move langchain tool into integrations folder Co-authored-by: Kathy Wu PiperOrigin-RevId: 883403479 --- .../adk/integrations/langchain/__init__.py | 19 ++ .../integrations/langchain/langchain_tool.py | 180 ++++++++++++++++++ src/google/adk/tools/langchain_tool.py | 180 ++---------------- .../langchain}/test_langchain_tool.py | 2 +- 4 files changed, 216 insertions(+), 165 deletions(-) create mode 100644 src/google/adk/integrations/langchain/__init__.py create mode 100644 src/google/adk/integrations/langchain/langchain_tool.py rename tests/unittests/{tools => integrations/langchain}/test_langchain_tool.py (97%) diff --git a/src/google/adk/integrations/langchain/__init__.py b/src/google/adk/integrations/langchain/__init__.py new file mode 100644 index 0000000000..985e49f82a --- /dev/null +++ b/src/google/adk/integrations/langchain/__init__.py @@ -0,0 +1,19 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .langchain_tool import LangchainTool +from .langchain_tool import LangchainToolConfig + +__all__ = [ + 'LangchainTool', + 'LangchainToolConfig', +] diff --git a/src/google/adk/integrations/langchain/langchain_tool.py b/src/google/adk/integrations/langchain/langchain_tool.py new file mode 100644 index 0000000000..54fd05d781 --- /dev/null +++ b/src/google/adk/integrations/langchain/langchain_tool.py @@ -0,0 +1,180 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Optional +from typing import Union + +from google.genai import types +from langchain_core.tools import BaseTool as LangchainBaseTool +from langchain_core.tools import Tool +from langchain_core.tools.structured import StructuredTool +from typing_extensions import override + +from ...tools import _automatic_function_calling_util +from ...tools.function_tool import FunctionTool +from ...tools.tool_configs import BaseToolConfig +from ...tools.tool_configs import ToolArgsConfig + + +class LangchainTool(FunctionTool): + """Adapter class that wraps a Langchain tool for use with ADK. + + This adapter converts Langchain tools into a format compatible with Google's + generative AI function calling interface. It preserves the tool's name, + description, and functionality while adapting its schema. + + The original tool's name and description can be overridden if needed. + + Args: + tool: A Langchain tool to wrap (BaseTool or a tool with a .run method) + name: Optional override for the tool's name + description: Optional override for the tool's description + + Examples:: + + from langchain.tools import DuckDuckGoSearchTool + from google.adk.integrations.langchain import LangchainTool + + search_tool = DuckDuckGoSearchTool() + wrapped_tool = LangchainTool(search_tool) + """ + + _langchain_tool: Union[LangchainBaseTool, object] + """The wrapped langchain tool.""" + + def __init__( + self, + tool: Union[LangchainBaseTool, object], + name: Optional[str] = None, + description: Optional[str] = None, + ): + if not hasattr(tool, 'run') and not hasattr(tool, '_run'): + raise ValueError( + "Tool must be a Langchain tool, have a 'run' or '_run' method." + ) + + # Determine which function to use + if isinstance(tool, StructuredTool): + func = tool.func + # For async tools, func might be None but coroutine exists + if func is None and hasattr(tool, 'coroutine') and tool.coroutine: + func = tool.coroutine + elif hasattr(tool, '_run') or hasattr(tool, 'run'): + func = tool._run if hasattr(tool, '_run') else tool.run + else: + raise ValueError( + "This is not supported. Tool must be a Langchain tool, have a 'run'" + " or '_run' method. The tool is: ", + type(tool), + ) + + super().__init__(func) + # run_manager is a special parameter for langchain tool + self._ignore_params.append('run_manager') + self._langchain_tool = tool + + # Set name: priority is 1) explicitly provided name, 2) tool's name, 3) default + if name is not None: + self.name = name + elif hasattr(tool, 'name') and tool.name: + self.name = tool.name + # else: keep default from FunctionTool + + # Set description: similar priority + if description is not None: + self.description = description + elif hasattr(tool, 'description') and tool.description: + self.description = tool.description + # else: keep default from FunctionTool + + @override + def _get_declaration(self) -> types.FunctionDeclaration: + """Build the function declaration for the tool. + + Returns: + A FunctionDeclaration object that describes the tool's interface. + + Raises: + ValueError: If the tool schema cannot be correctly parsed. + """ + try: + # There are two types of tools: + # 1. BaseTool: the tool is defined in langchain_core.tools. + # 2. Other tools: the tool doesn't inherit any class but follow some + # conventions, like having a "run" method. + # Handle BaseTool type (preferred Langchain approach) + if isinstance(self._langchain_tool, LangchainBaseTool): + tool_wrapper = Tool( + name=self.name, + func=self.func, + description=self.description, + ) + + # Add schema if available + if ( + hasattr(self._langchain_tool, 'args_schema') + and self._langchain_tool.args_schema + ): + tool_wrapper.args_schema = self._langchain_tool.args_schema + + return _automatic_function_calling_util.build_function_declaration_for_langchain( + False, + self.name, + self.description, + tool_wrapper.func, + tool_wrapper.args, + ) + + # Need to provide a way to override the function names and descriptions + # as the original function names are mostly ".run" and the descriptions + # may not meet users' needs + function_decl = super()._get_declaration() + function_decl.name = self.name + function_decl.description = self.description + return function_decl + + except Exception as e: + raise ValueError( + f'Failed to build function declaration for Langchain tool: {e}' + ) from e + + @override + @classmethod + def from_config( + cls: type[LangchainTool], config: ToolArgsConfig, config_abs_path: str + ) -> LangchainTool: + from ...agents import config_agent_utils + + langchain_tool_config = LangchainToolConfig.model_validate( + config.model_dump() + ) + tool = config_agent_utils.resolve_fully_qualified_name( + langchain_tool_config.tool + ) + name = langchain_tool_config.name + description = langchain_tool_config.description + return cls(tool, name=name, description=description) + + +class LangchainToolConfig(BaseToolConfig): + tool: str + """The fully qualified path of the Langchain tool instance.""" + + name: str = '' + """The name of the tool.""" + + description: str = '' + """The description of the tool.""" diff --git a/src/google/adk/tools/langchain_tool.py b/src/google/adk/tools/langchain_tool.py index 0a16b2ca0e..a483db6dc7 100644 --- a/src/google/adk/tools/langchain_tool.py +++ b/src/google/adk/tools/langchain_tool.py @@ -14,167 +14,19 @@ from __future__ import annotations -from typing import Optional -from typing import Union - -from google.genai import types -from langchain_core.tools import BaseTool as LangchainBaseTool -from langchain_core.tools import Tool -from langchain_core.tools.structured import StructuredTool -from typing_extensions import override - -from . import _automatic_function_calling_util -from .function_tool import FunctionTool -from .tool_configs import BaseToolConfig -from .tool_configs import ToolArgsConfig - - -class LangchainTool(FunctionTool): - """Adapter class that wraps a Langchain tool for use with ADK. - - This adapter converts Langchain tools into a format compatible with Google's - generative AI function calling interface. It preserves the tool's name, - description, and functionality while adapting its schema. - - The original tool's name and description can be overridden if needed. - - Args: - tool: A Langchain tool to wrap (BaseTool or a tool with a .run method) - name: Optional override for the tool's name - description: Optional override for the tool's description - - Examples:: - - from langchain.tools import DuckDuckGoSearchTool - from google.genai.tools import LangchainTool - - search_tool = DuckDuckGoSearchTool() - wrapped_tool = LangchainTool(search_tool) - """ - - _langchain_tool: Union[LangchainBaseTool, object] - """The wrapped langchain tool.""" - - def __init__( - self, - tool: Union[LangchainBaseTool, object], - name: Optional[str] = None, - description: Optional[str] = None, - ): - if not hasattr(tool, 'run') and not hasattr(tool, '_run'): - raise ValueError( - "Tool must be a Langchain tool, have a 'run' or '_run' method." - ) - - # Determine which function to use - if isinstance(tool, StructuredTool): - func = tool.func - # For async tools, func might be None but coroutine exists - if func is None and hasattr(tool, 'coroutine') and tool.coroutine: - func = tool.coroutine - elif hasattr(tool, '_run') or hasattr(tool, 'run'): - func = tool._run if hasattr(tool, '_run') else tool.run - else: - raise ValueError( - "This is not supported. Tool must be a Langchain tool, have a 'run'" - " or '_run' method. The tool is: ", - type(tool), - ) - - super().__init__(func) - # run_manager is a special parameter for langchain tool - self._ignore_params.append('run_manager') - self._langchain_tool = tool - - # Set name: priority is 1) explicitly provided name, 2) tool's name, 3) default - if name is not None: - self.name = name - elif hasattr(tool, 'name') and tool.name: - self.name = tool.name - # else: keep default from FunctionTool - - # Set description: similar priority - if description is not None: - self.description = description - elif hasattr(tool, 'description') and tool.description: - self.description = tool.description - # else: keep default from FunctionTool - - @override - def _get_declaration(self) -> types.FunctionDeclaration: - """Build the function declaration for the tool. - - Returns: - A FunctionDeclaration object that describes the tool's interface. - - Raises: - ValueError: If the tool schema cannot be correctly parsed. - """ - try: - # There are two types of tools: - # 1. BaseTool: the tool is defined in langchain_core.tools. - # 2. Other tools: the tool doesn't inherit any class but follow some - # conventions, like having a "run" method. - # Handle BaseTool type (preferred Langchain approach) - if isinstance(self._langchain_tool, LangchainBaseTool): - tool_wrapper = Tool( - name=self.name, - func=self.func, - description=self.description, - ) - - # Add schema if available - if ( - hasattr(self._langchain_tool, 'args_schema') - and self._langchain_tool.args_schema - ): - tool_wrapper.args_schema = self._langchain_tool.args_schema - - return _automatic_function_calling_util.build_function_declaration_for_langchain( - False, - self.name, - self.description, - tool_wrapper.func, - tool_wrapper.args, - ) - - # Need to provide a way to override the function names and descriptions - # as the original function names are mostly ".run" and the descriptions - # may not meet users' needs - function_decl = super()._get_declaration() - function_decl.name = self.name - function_decl.description = self.description - return function_decl - - except Exception as e: - raise ValueError( - f'Failed to build function declaration for Langchain tool: {e}' - ) from e - - @override - @classmethod - def from_config( - cls: type[LangchainTool], config: ToolArgsConfig, config_abs_path: str - ) -> LangchainTool: - from ..agents import config_agent_utils - - langchain_tool_config = LangchainToolConfig.model_validate( - config.model_dump() - ) - tool = config_agent_utils.resolve_fully_qualified_name( - langchain_tool_config.tool - ) - name = langchain_tool_config.name - description = langchain_tool_config.description - return cls(tool, name=name, description=description) - - -class LangchainToolConfig(BaseToolConfig): - tool: str - """The fully qualified path of the Langchain tool instance.""" - - name: str = '' - """The name of the tool.""" - - description: str = '' - """The description of the tool.""" +import warnings + +from google.adk.integrations.langchain import LangchainTool +from google.adk.integrations.langchain import LangchainToolConfig + +warnings.warn( + "google.adk.tools.langchain_tool is moved to" + " google.adk.integrations.langchain", + DeprecationWarning, + stacklevel=2, +) + +__all__ = [ + "LangchainTool", + "LangchainToolConfig", +] diff --git a/tests/unittests/tools/test_langchain_tool.py b/tests/unittests/integrations/langchain/test_langchain_tool.py similarity index 97% rename from tests/unittests/tools/test_langchain_tool.py rename to tests/unittests/integrations/langchain/test_langchain_tool.py index 4d22fb5075..408b23c155 100644 --- a/tests/unittests/tools/test_langchain_tool.py +++ b/tests/unittests/integrations/langchain/test_langchain_tool.py @@ -14,7 +14,7 @@ from unittest.mock import MagicMock -from google.adk.tools.langchain_tool import LangchainTool +from google.adk.integrations.langchain import LangchainTool from langchain_core.tools import tool from langchain_core.tools.structured import StructuredTool from pydantic import BaseModel From 4010716470fc83918dc367c5971342ff551401c8 Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Fri, 13 Mar 2026 16:59:08 -0700 Subject: [PATCH 023/192] fix(bigquery): use valid dataplex OAuth scope Closes issue #4805 Co-authored-by: Liang Wu PiperOrigin-RevId: 883403628 --- src/google/adk/tools/bigquery/bigquery_credentials.py | 2 +- tests/unittests/tools/bigquery/test_bigquery_credentials.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/google/adk/tools/bigquery/bigquery_credentials.py b/src/google/adk/tools/bigquery/bigquery_credentials.py index 958ce9d7ec..c491c52ee6 100644 --- a/src/google/adk/tools/bigquery/bigquery_credentials.py +++ b/src/google/adk/tools/bigquery/bigquery_credentials.py @@ -21,7 +21,7 @@ BIGQUERY_TOKEN_CACHE_KEY = "bigquery_token_cache" BIGQUERY_SCOPES = [ "https://www.googleapis.com/auth/bigquery", - "https://www.googleapis.com/auth/dataplex", + "https://www.googleapis.com/auth/dataplex.read-write", ] BIGQUERY_DEFAULT_SCOPE = ["https://www.googleapis.com/auth/bigquery"] diff --git a/tests/unittests/tools/bigquery/test_bigquery_credentials.py b/tests/unittests/tools/bigquery/test_bigquery_credentials.py index e20662924b..f0c188d0a4 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_credentials.py +++ b/tests/unittests/tools/bigquery/test_bigquery_credentials.py @@ -47,7 +47,7 @@ def test_valid_credentials_object_auth_credentials(self): assert config.client_secret is None assert config.scopes == [ "https://www.googleapis.com/auth/bigquery", - "https://www.googleapis.com/auth/dataplex", + "https://www.googleapis.com/auth/dataplex.read-write", ] def test_valid_credentials_object_oauth2_credentials(self): @@ -90,7 +90,7 @@ def test_valid_client_id_secret_pair_default_scope(self): assert config.client_secret == "test_client_secret" assert config.scopes == [ "https://www.googleapis.com/auth/bigquery", - "https://www.googleapis.com/auth/dataplex", + "https://www.googleapis.com/auth/dataplex.read-write", ] def test_valid_client_id_secret_pair_w_scope(self): @@ -135,7 +135,7 @@ def test_valid_client_id_secret_pair_w_empty_scope(self): assert config.client_secret == "test_client_secret" assert config.scopes == [ "https://www.googleapis.com/auth/bigquery", - "https://www.googleapis.com/auth/dataplex", + "https://www.googleapis.com/auth/dataplex.read-write", ] def test_missing_client_secret_raises_error(self): From f8270c826bc807da99b4126e98ee1c505f4ed7c3 Mon Sep 17 00:00:00 2001 From: "Xiang (Sean) Zhou" Date: Sat, 14 Mar 2026 10:33:20 -0700 Subject: [PATCH 024/192] fix(deps): bump google-genai minimum to >=1.64.0 for gemini-embedding-2-preview The gemini-embedding-2-preview model requires the Vertex AI :embedContent endpoint instead of the legacy :predict endpoint used by older models (text-embedding-004, text-embedding-005). In google-genai <1.64.0, embed_content() unconditionally routed to :predict on Vertex AI, which returns FAILED_PRECONDITION for this model. v1.64.0 (googleapis/python-genai@af40cc6) introduced model-aware dispatch in embed_content(): models with "gemini" in the name are routed to :embedContent via t_is_vertex_embed_content_model(), while older text-embedding-* models continue to use :predict. This version also enforces a single-content-per-call limit for the embedContent API, which is why FilesRetrieval sets embed_batch_size=1. Co-authored-by: Xiang (Sean) Zhou PiperOrigin-RevId: 883689438 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4bd800131d..c62d8e2978 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,7 +44,7 @@ dependencies = [ "google-cloud-spanner>=3.56.0, <4.0.0", # For Spanner database "google-cloud-speech>=2.30.0, <3.0.0", # For Audio Transcription "google-cloud-storage>=2.18.0, <4.0.0", # For GCS Artifact service - "google-genai>=1.56.0, <2.0.0", # Google GenAI SDK + "google-genai>=1.64.0, <2.0.0", # Google GenAI SDK "graphviz>=0.20.2, <1.0.0", # Graphviz for graph rendering "httpx>=0.27.0, <1.0.0", # HTTP client library "jsonschema>=4.23.0, <5.0.0", # Agent Builder config validation From 6c34694da64968bc766a7e5e860c0ed9acbc69c2 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Sun, 15 Mar 2026 13:47:47 -0700 Subject: [PATCH 025/192] feat: Enhance AgentEngineSandboxCodeExecutor sample to automatically provision an Agent Engine if neither agent_engine_resource_name nor sandbox_resource_name is provided The AgentEngineSandboxCodeExecutor now has three initialization modes: 1. Create both an Agent Engine and sandbox if neither resource name is provided. 2. Creating a new sandbox within a provided agent_engine_resource_name. 3. Using a provided sandbox_resource_name. PiperOrigin-RevId: 884088248 --- .../agent_engine_code_execution/agent.py | 2 +- .../agent_engine_sandbox_code_executor.py | 46 +++++++-- ...test_agent_engine_sandbox_code_executor.py | 99 +++++++++++++++++++ 3 files changed, 138 insertions(+), 9 deletions(-) diff --git a/contributing/samples/agent_engine_code_execution/agent.py b/contributing/samples/agent_engine_code_execution/agent.py index a32e4ca4c6..8e9ea4af63 100644 --- a/contributing/samples/agent_engine_code_execution/agent.py +++ b/contributing/samples/agent_engine_code_execution/agent.py @@ -89,6 +89,6 @@ def base_system_instruction(): # "projects/vertex-agent-loadtest/locations/us-central1/reasoningEngines/6842889780301135872/sandboxEnvironments/6545148628569161728", sandbox_resource_name=None, # Replace with agent engine resource name used for creating sandbox environment. - agent_engine_resource_name="AGENT_ENGINE_RESOURCE_NAME", + agent_engine_resource_name=None, ), ) diff --git a/src/google/adk/code_executors/agent_engine_sandbox_code_executor.py b/src/google/adk/code_executors/agent_engine_sandbox_code_executor.py index 071d59dc2a..6634847271 100644 --- a/src/google/adk/code_executors/agent_engine_sandbox_code_executor.py +++ b/src/google/adk/code_executors/agent_engine_sandbox_code_executor.py @@ -17,7 +17,9 @@ import json import logging import mimetypes +import os import re +import threading from typing import Optional from typing_extensions import override @@ -46,6 +48,7 @@ class AgentEngineSandboxCodeExecutor(BaseCodeExecutor): sandbox_resource_name: str = None agent_engine_resource_name: str = None + _agent_engine_creation_lock: Optional[threading.Lock] = None def __init__( self, @@ -61,16 +64,19 @@ def __init__( projects/123/locations/us-central1/reasoningEngines/456/ sandboxEnvironments/789 agent_engine_resource_name: The resource name of the agent engine to use - to create the code execution sandbox. Format: + to create the code execution sandbox. If not set, a new Agent Engine + will be created automatically. Format: projects/123/locations/us-central1/reasoningEngines/456, when both sandbox_resource_name and agent_engine_resource_name are set, agent_engine_resource_name will be ignored. **data: Additional keyword arguments to be passed to the base class. """ super().__init__(**data) + self._agent_engine_creation_lock = threading.Lock() sandbox_resource_name_pattern = r'^projects/([a-zA-Z0-9-_]+)/locations/([a-zA-Z0-9-_]+)/reasoningEngines/(\d+)/sandboxEnvironments/(\d+)$' agent_engine_resource_name_pattern = r'^projects/([a-zA-Z0-9-_]+)/locations/([a-zA-Z0-9-_]+)/reasoningEngines/(\d+)$' + # Case 1: sandbox_resource_name is provided. if sandbox_resource_name is not None: self._project_id, self._location = ( self._get_project_id_and_location_from_resource_name( @@ -78,18 +84,23 @@ def __init__( ) ) self.sandbox_resource_name = sandbox_resource_name - elif agent_engine_resource_name is not None: + + # Case 2: Agent Engine resource name is not provided. + elif agent_engine_resource_name is None: + # The Agent Engine will be auto-created lazily within execute_code(). + self._project_id = os.environ.get('GOOGLE_CLOUD_PROJECT') + self._location = os.environ.get('GOOGLE_CLOUD_LOCATION', 'us-central1') + self.agent_engine_resource_name = None + + # Case 3: Use the provided agent_engine_resource_name. + else: self._project_id, self._location = ( self._get_project_id_and_location_from_resource_name( - agent_engine_resource_name, agent_engine_resource_name_pattern + agent_engine_resource_name, + agent_engine_resource_name_pattern, ) ) self.agent_engine_resource_name = agent_engine_resource_name - else: - raise ValueError( - 'Either sandbox_resource_name or agent_engine_resource_name must be' - ' set.' - ) @override def execute_code( @@ -97,6 +108,25 @@ def execute_code( invocation_context: InvocationContext, code_execution_input: CodeExecutionInput, ) -> CodeExecutionResult: + if ( + self.sandbox_resource_name is None + and self.agent_engine_resource_name is None + ): + with self._agent_engine_creation_lock: + if self.agent_engine_resource_name is None: + logger.info( + 'No Agent Engine resource name provided. Creating a new one...' + ) + try: + # Create a default Agent Engine. + created_engine = self._get_api_client().agent_engines.create() + self.agent_engine_resource_name = created_engine.api_resource.name + logger.info( + 'Created Agent Engine: %s', self.agent_engine_resource_name + ) + except Exception as e: + logger.error('Failed to auto-create Agent Engine: %s', e) + raise # default to the sandbox resource name if set. sandbox_name = self.sandbox_resource_name if self.sandbox_resource_name is None: diff --git a/tests/unittests/code_executors/test_agent_engine_sandbox_code_executor.py b/tests/unittests/code_executors/test_agent_engine_sandbox_code_executor.py index 9b27b82c20..78c7c5cd33 100644 --- a/tests/unittests/code_executors/test_agent_engine_sandbox_code_executor.py +++ b/tests/unittests/code_executors/test_agent_engine_sandbox_code_executor.py @@ -13,6 +13,7 @@ # limitations under the License. import json +import os from unittest.mock import MagicMock from unittest.mock import patch @@ -249,3 +250,101 @@ def test_execute_code_creates_sandbox_if_missing( name=created_sandbox_name, input_data={"code": 'print("hello world")'}, ) + + def test_init_with_agent_engine_resource_name(self): + """Tests init when only agent_engine_resource_name is provided.""" + agent_engine_name = ( + "projects/123/locations/us-central1/reasoningEngines/456" + ) + + executor = AgentEngineSandboxCodeExecutor( + agent_engine_resource_name=agent_engine_name + ) + + # Verify the engine name is set, and sandbox remains None. + assert executor.agent_engine_resource_name == agent_engine_name + assert executor.sandbox_resource_name is None + assert executor._project_id == "123" + assert executor._location == "us-central1" + + @patch("vertexai.Client") + @patch.dict( + os.environ, + { + "GOOGLE_CLOUD_PROJECT": "test-project-456", + "GOOGLE_CLOUD_LOCATION": "us-central1", + }, + ) + def test_execute_code_with_auto_create_agent_engine( + self, mock_vertexai_client, mock_invocation_context + ): + """Tests that Agent Engine is created lazily in execute_code.""" + # Setup Mocks + mock_api_client = MagicMock() + mock_vertexai_client.return_value = mock_api_client + + # Mock Engine Creation + mock_created_engine = MagicMock() + mock_created_engine.api_resource.name = "projects/test-project-456/locations/us-central1/reasoningEngines/auto-created-ae-1" + mock_api_client.agent_engines.create.return_value = mock_created_engine + + # Mock create operation to return a sandbox resource name + operation_mock = MagicMock() + created_sandbox_name = "projects/test-project-456/locations/us-central1/reasoningEngines/auto-created-ae-1/sandboxEnvironments/789" + operation_mock.response.name = created_sandbox_name + mock_api_client.agent_engines.sandboxes.create.return_value = operation_mock + + # Mock execute_code response + mock_response = MagicMock() + mock_json_output = MagicMock() + mock_json_output.mime_type = "application/json" + mock_json_output.data = json.dumps( + {"stdout": "created sandbox run", "stderr": ""} + ).encode("utf-8") + mock_json_output.metadata = None + mock_response.outputs = [mock_json_output] + mock_api_client.agent_engines.sandboxes.execute_code.return_value = ( + mock_response + ) + + # Execute + executor = AgentEngineSandboxCodeExecutor() + code_input = CodeExecutionInput(code='print("hello world")') + executor.execute_code(mock_invocation_context, code_input) + + # Assert + mock_api_client.agent_engines.create.assert_called_once() + assert ( + executor.agent_engine_resource_name + == "projects/test-project-456/locations/us-central1/reasoningEngines/auto-created-ae-1" + ) + assert executor.sandbox_resource_name is None + mock_api_client.agent_engines.sandboxes.create.assert_called_once() + assert ( + mock_invocation_context.session.state["sandbox_name"] + == created_sandbox_name + ) + + @patch("vertexai.Client") + @patch.dict( + os.environ, + { + "GOOGLE_CLOUD_PROJECT": "test-project-456", + "GOOGLE_CLOUD_LOCATION": "us-central1", + }, + ) + def test_execute_code_auto_create_agent_engine_fails( + self, mock_vertexai_client, mock_invocation_context + ): + """Tests error handling when auto-creating Agent Engine fails.""" + mock_api_client = MagicMock() + mock_vertexai_client.return_value = mock_api_client + mock_api_client.agent_engines.create.side_effect = Exception( + "Failed to auto-create Agent Engine" + ) + + executor = AgentEngineSandboxCodeExecutor() + code_input = CodeExecutionInput(code='print("hello world")') + + with pytest.raises(Exception, match="Failed to auto-create Agent Engine"): + executor.execute_code(mock_invocation_context, code_input) From 360e0f7ebaba7a682f7230c259b474ace7ff6d13 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Sun, 15 Mar 2026 19:30:46 -0700 Subject: [PATCH 026/192] feat: Add database_role property to SpannerToolSettings and use it in execute_sql to support fine grained access controls PiperOrigin-RevId: 884166439 --- src/google/adk/tools/spanner/settings.py | 3 + src/google/adk/tools/spanner/utils.py | 9 ++- .../spanner/test_spanner_tool_settings.py | 16 ++++- tests/unittests/tools/spanner/test_utils.py | 61 +++++++++++++++++++ 4 files changed, 84 insertions(+), 5 deletions(-) diff --git a/src/google/adk/tools/spanner/settings.py b/src/google/adk/tools/spanner/settings.py index 13eda282ec..e33b659e51 100644 --- a/src/google/adk/tools/spanner/settings.py +++ b/src/google/adk/tools/spanner/settings.py @@ -263,5 +263,8 @@ class SpannerToolSettings(BaseModel): query_result_mode: QueryResultMode = QueryResultMode.DEFAULT """Mode for Spanner execute sql query result.""" + database_role: Optional[str] = None + """Optional. The database role to use for the Spanner session.""" + vector_store_settings: Optional[SpannerVectorStoreSettings] = None """Settings for Spanner vector store and vector similarity search.""" diff --git a/src/google/adk/tools/spanner/utils.py b/src/google/adk/tools/spanner/utils.py index 9f5efdb76b..7d31ed44aa 100644 --- a/src/google/adk/tools/spanner/utils.py +++ b/src/google/adk/tools/spanner/utils.py @@ -82,7 +82,9 @@ def execute_sql( project=project_id, credentials=credentials ) instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database = instance.database( + database_id, database_role=settings.database_role + ) if database.database_dialect == DatabaseDialect.POSTGRESQL: return { @@ -244,7 +246,10 @@ def __init__( self._vector_store_settings.instance_id ) ) - self._database = instance.database(self._vector_store_settings.database_id) + self._database = instance.database( + self._vector_store_settings.database_id, + database_role=self._settings.database_role, + ) if not self._database.exists(): raise ValueError( "Database id {} doesn't exist.".format( diff --git a/tests/unittests/tools/spanner/test_spanner_tool_settings.py b/tests/unittests/tools/spanner/test_spanner_tool_settings.py index df71dba247..f2f9e22d4d 100644 --- a/tests/unittests/tools/spanner/test_spanner_tool_settings.py +++ b/tests/unittests/tools/spanner/test_spanner_tool_settings.py @@ -83,9 +83,9 @@ def test_spanner_vector_store_settings_invalid_vector_length(): @pytest.mark.parametrize( - "settings_args, expected_rows, expected_mode", + "settings_args, expected_rows, expected_mode, expected_role", [ - ({}, 50, QueryResultMode.DEFAULT), + ({}, 50, QueryResultMode.DEFAULT, None), ( { "capabilities": [Capabilities.DATA_READ], @@ -94,12 +94,22 @@ def test_spanner_vector_store_settings_invalid_vector_length(): }, 100, QueryResultMode.DICT_LIST, + None, + ), + ( + {"database_role": "test-role"}, + 50, + QueryResultMode.DEFAULT, + "test-role", ), ], ) -def test_spanner_tool_settings(settings_args, expected_rows, expected_mode): +def test_spanner_tool_settings( + settings_args, expected_rows, expected_mode, expected_role +): """Test SpannerToolSettings with different values.""" settings = SpannerToolSettings(**settings_args) assert settings.capabilities == [Capabilities.DATA_READ] assert settings.max_executed_query_result_rows == expected_rows assert settings.query_result_mode == expected_mode + assert settings.database_role == expected_role diff --git a/tests/unittests/tools/spanner/test_utils.py b/tests/unittests/tools/spanner/test_utils.py index fe8d7db4a3..75730fbc10 100644 --- a/tests/unittests/tools/spanner/test_utils.py +++ b/tests/unittests/tools/spanner/test_utils.py @@ -411,3 +411,64 @@ def test_create_vector_search_index_fails( vector_store = spanner_utils.SpannerVectorStore(spanner_tool_settings) with pytest.raises(RuntimeError, match="DDL failed"): vector_store.create_vector_search_index() + + +@mock.patch.object(spanner_utils.client, "get_spanner_client", autospec=True) +def test_execute_sql_with_database_role(mock_get_spanner_client): + """Test that execute_sql passes database_role to instance.database.""" + mock_spanner_client = mock.MagicMock() + mock_instance = mock.MagicMock() + mock_database = mock.MagicMock() + mock_snapshot = mock.MagicMock() + + mock_snapshot.execute_sql.return_value = iter([["row1"]]) + mock_database.snapshot.return_value.__enter__.return_value = mock_snapshot + mock_database.database_dialect = DatabaseDialect.GOOGLE_STANDARD_SQL + mock_instance.database.return_value = mock_database + mock_spanner_client.instance.return_value = mock_instance + mock_get_spanner_client.return_value = mock_spanner_client + + database_role = "test-role" + settings = SpannerToolSettings(database_role=database_role) + + spanner_utils.execute_sql( + project_id="test-project", + instance_id="test-instance", + database_id="test-database", + query="SELECT 1", + credentials=mock.Mock(), + settings=settings, + tool_context=mock.Mock(), + ) + + mock_instance.database.assert_called_once_with( + "test-database", database_role=database_role + ) + + +@mock.patch.object(spanner_utils.client, "get_spanner_client", autospec=True) +def test_spanner_vector_store_with_database_role( + mock_get_spanner_client, vector_store_settings +): + """Test that SpannerVectorStore passes database_role to instance.database.""" + mock_spanner_client = mock.MagicMock() + mock_instance = mock.MagicMock() + mock_database = mock.MagicMock() + + mock_instance.database.return_value = mock_database + mock_instance.exists.return_value = True + mock_database.exists.return_value = True + mock_spanner_client.instance.return_value = mock_instance + mock_get_spanner_client.return_value = mock_spanner_client + mock_spanner_client._client_info = mock.Mock(user_agent="test-agent") + + database_role = "test-role" + settings = SpannerToolSettings( + database_role=database_role, vector_store_settings=vector_store_settings + ) + + spanner_utils.SpannerVectorStore(settings) + + mock_instance.database.assert_called_once_with( + "test-database", database_role=database_role + ) From 9a75c06873b79fbd206b3712231c0280fb2f87ca Mon Sep 17 00:00:00 2001 From: Ankur Sharma Date: Mon, 16 Mar 2026 10:08:27 -0700 Subject: [PATCH 027/192] feat: Add MultiTurn Task success metric The metric takes into account all the turns of the multi-turn conversation. The class delegates the responsibility to Vertex Gen AI Eval SDK. The V1 suffix in the class name is added to convey that there could be other versions of the safety metric as well, and those metrics could use a different strategy to evaluate safety. Co-authored-by: Ankur Sharma PiperOrigin-RevId: 884504910 --- pyproject.toml | 2 +- src/google/adk/evaluation/eval_metrics.py | 2 + .../evaluation/metric_evaluator_registry.py | 6 + .../adk/evaluation/metric_info_providers.py | 18 ++ .../multi_turn_task_success_evaluator.py | 63 +++++ .../adk/evaluation/vertex_ai_eval_facade.py | 169 ++++++++++- .../test_multi_turn_task_success_evaluator.py | 106 +++++++ .../evaluation/test_vertex_ai_eval_facade.py | 265 ++++++++++++++++++ 8 files changed, 627 insertions(+), 4 deletions(-) create mode 100644 src/google/adk/evaluation/multi_turn_task_success_evaluator.py create mode 100644 tests/unittests/evaluation/test_multi_turn_task_success_evaluator.py diff --git a/pyproject.toml b/pyproject.toml index c62d8e2978..6851122b3f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -111,7 +111,7 @@ eval = [ # go/keep-sorted start "Jinja2>=3.1.4,<4.0.0", # For eval template rendering "gepa>=0.1.0", - "google-cloud-aiplatform[evaluation]>=1.100.0", + "google-cloud-aiplatform[evaluation]>=1.140.0", "pandas>=2.2.3", "rouge-score>=0.1.2", "tabulate>=0.9.0", diff --git a/src/google/adk/evaluation/eval_metrics.py b/src/google/adk/evaluation/eval_metrics.py index eb7c7e36cb..77cfa9a1fc 100644 --- a/src/google/adk/evaluation/eval_metrics.py +++ b/src/google/adk/evaluation/eval_metrics.py @@ -61,6 +61,8 @@ class PrebuiltMetrics(Enum): PER_TURN_USER_SIMULATOR_QUALITY_V1 = "per_turn_user_simulator_quality_v1" + MULTI_TURN_TASK_SUCCESS_V1 = "multi_turn_task_success_v1" + MetricName: TypeAlias = Union[str, PrebuiltMetrics] Threshold: TypeAlias = float diff --git a/src/google/adk/evaluation/metric_evaluator_registry.py b/src/google/adk/evaluation/metric_evaluator_registry.py index 775d5c2d7a..b554ad6ed6 100644 --- a/src/google/adk/evaluation/metric_evaluator_registry.py +++ b/src/google/adk/evaluation/metric_evaluator_registry.py @@ -27,12 +27,14 @@ from .hallucinations_v1 import HallucinationsV1Evaluator from .metric_info_providers import FinalResponseMatchV2EvaluatorMetricInfoProvider from .metric_info_providers import HallucinationsV1EvaluatorMetricInfoProvider +from .metric_info_providers import MultiTurnTaskSuccessV1MetricInfoProvider from .metric_info_providers import PerTurnUserSimulatorQualityV1MetricInfoProvider from .metric_info_providers import ResponseEvaluatorMetricInfoProvider from .metric_info_providers import RubricBasedFinalResponseQualityV1EvaluatorMetricInfoProvider from .metric_info_providers import RubricBasedToolUseV1EvaluatorMetricInfoProvider from .metric_info_providers import SafetyEvaluatorV1MetricInfoProvider from .metric_info_providers import TrajectoryEvaluatorMetricInfoProvider +from .multi_turn_task_success_evaluator import MultiTurnTaskSuccessV1Evaluator from .response_evaluator import ResponseEvaluator from .rubric_based_final_response_quality_v1 import RubricBasedFinalResponseQualityV1Evaluator from .rubric_based_tool_use_quality_v1 import RubricBasedToolUseV1Evaluator @@ -126,6 +128,10 @@ def _get_default_metric_evaluator_registry() -> MetricEvaluatorRegistry: metric_info=SafetyEvaluatorV1MetricInfoProvider().get_metric_info(), evaluator=SafetyEvaluatorV1, ) + metric_evaluator_registry.register_evaluator( + metric_info=MultiTurnTaskSuccessV1MetricInfoProvider().get_metric_info(), + evaluator=MultiTurnTaskSuccessV1Evaluator, + ) metric_evaluator_registry.register_evaluator( metric_info=FinalResponseMatchV2EvaluatorMetricInfoProvider().get_metric_info(), evaluator=FinalResponseMatchV2Evaluator, diff --git a/src/google/adk/evaluation/metric_info_providers.py b/src/google/adk/evaluation/metric_info_providers.py index 638e817289..cee991a96d 100644 --- a/src/google/adk/evaluation/metric_info_providers.py +++ b/src/google/adk/evaluation/metric_info_providers.py @@ -94,6 +94,24 @@ def get_metric_info(self) -> MetricInfo: ) +class MultiTurnTaskSuccessV1MetricInfoProvider(MetricInfoProvider): + """Metric info provider for MultiTurnTaskSuccessV1.""" + + def get_metric_info(self) -> MetricInfo: + return MetricInfo( + metric_name=PrebuiltMetrics.MULTI_TURN_TASK_SUCCESS_V1.value, + description=( + "Evaluates if the agent was able to achieve the goal or goals of" + " the conversation." + " Value range of the metric is [0, 1], with values closer" + " to 1 to be more desirable (safe)." + ), + metric_value_info=MetricValueInfo( + interval=Interval(min_value=0.0, max_value=1.0) + ), + ) + + class FinalResponseMatchV2EvaluatorMetricInfoProvider(MetricInfoProvider): """Metric info provider for FinalResponseMatchV2Evaluator.""" diff --git a/src/google/adk/evaluation/multi_turn_task_success_evaluator.py b/src/google/adk/evaluation/multi_turn_task_success_evaluator.py new file mode 100644 index 0000000000..015bff39e3 --- /dev/null +++ b/src/google/adk/evaluation/multi_turn_task_success_evaluator.py @@ -0,0 +1,63 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Optional + +from typing_extensions import override + +from .eval_case import ConversationScenario +from .eval_case import Invocation +from .eval_metrics import EvalMetric +from .evaluator import EvaluationResult +from .evaluator import Evaluator +from .vertex_ai_eval_facade import _MultiTurnVertexiAiEvalFacade + + +class MultiTurnTaskSuccessV1Evaluator(Evaluator): + """Evaluates if the agent was able to achieve the goal or goals of the conversation. + + The metric takes into account all the turns of the multi-turn conversation. + + The class delegates the responsibility to Vertex Gen AI Eval SDK. The V1 + suffix in the class name is added to convey that there could be other versions + of the safety metric as well, and those metrics could use a different strategy + to evaluate safety. + + Using this class requires a GCP project. Please set GOOGLE_CLOUD_PROJECT and + GOOGLE_CLOUD_LOCATION in your .env file. + + Value range of the metric is [0, 1], with values closer to 1 to be more + desirable (safe). + """ + + def __init__(self, eval_metric: EvalMetric): + self._eval_metric = eval_metric + + @override + def evaluate_invocations( + self, + actual_invocations: list[Invocation], + expected_invocations: Optional[list[Invocation]] = None, + conversation_scenario: Optional[ConversationScenario] = None, + ) -> EvaluationResult: + from ..dependencies.vertexai import vertexai + + return _MultiTurnVertexiAiEvalFacade( + threshold=self._eval_metric.threshold, + metric_name=vertexai.types.RubricMetric.MULTI_TURN_TASK_SUCCESS, + ).evaluate_invocations( + actual_invocations, expected_invocations, conversation_scenario + ) diff --git a/src/google/adk/evaluation/vertex_ai_eval_facade.py b/src/google/adk/evaluation/vertex_ai_eval_facade.py index 93b54a7534..9205c96c91 100644 --- a/src/google/adk/evaluation/vertex_ai_eval_facade.py +++ b/src/google/adk/evaluation/vertex_ai_eval_facade.py @@ -15,22 +15,28 @@ from __future__ import annotations import abc +import logging import math import os from typing import Optional +from typing import Union from google.genai import types as genai_types import pandas as pd from typing_extensions import override from ..dependencies.vertexai import vertexai +from .app_details import AgentDetails from .eval_case import ConversationScenario from .eval_case import Invocation +from .eval_case import InvocationEvent from .evaluator import EvalStatus from .evaluator import EvaluationResult from .evaluator import Evaluator from .evaluator import PerInvocationResult +logger = logging.getLogger("google_adk." + __name__) + _ERROR_MESSAGE_SUFFIX = """ You should specify both project id and location. This metric uses Vertex Gen AI Eval SDK, and it requires google cloud credentials. @@ -56,7 +62,9 @@ class _VertexAiEvalFacade(Evaluator): def __init__( self, threshold: float, - metric_name: vertexai.types.PrebuiltMetric, + metric_name: Union[ + vertexai.types.PrebuiltMetric, vertexai.types.RubricMetric + ], expected_invocations_required=False, ): self._threshold = threshold @@ -119,7 +127,7 @@ def _get_score(self, eval_result) -> Optional[float]: return None def _get_eval_status(self, score: Optional[float]): - if score: + if score is not None: return ( EvalStatus.PASSED if score >= self._threshold else EvalStatus.FAILED ) @@ -188,7 +196,7 @@ def evaluate_invocations( ) ) - if score: + if score is not None: total_score += score num_invocations += 1 @@ -203,3 +211,158 @@ def evaluate_invocations( ) return EvaluationResult() + + +class _MultiTurnVertexiAiEvalFacade(_VertexAiEvalFacade): + """A facade for multi turn metrics exposed in Vertex Gen AI Eval SDK.""" + + @override + def evaluate_invocations( + self, + actual_invocations: list[Invocation], + expected_invocations: Optional[list[Invocation]] = None, + conversation_scenario: Optional[ConversationScenario] = None, + ) -> EvaluationResult: + del conversation_scenario + + per_invocation_results = [] + # If expected_invocation are not required by the metric and if they are not + # supplied, we provide a list of None. + expected_invocations = ( + [None] * len(actual_invocations) + if expected_invocations is None + else expected_invocations + ) + + # We mark all the n-1 turns as NOT-EVALUATED for these metrics. + for actual, expected in zip( + actual_invocations[:-1], expected_invocations[:-1] + ): + per_invocation_results.append( + PerInvocationResult( + actual_invocation=actual, + expected_invocation=expected, + score=None, + eval_status=self._get_eval_status(None), + ) + ) + + # Only evaluate the last turn and take into account all the previous turns. + eval_case = vertexai.types.EvalCase( + agent_data=_MultiTurnVertexiAiEvalFacade._get_agent_data( + actual_invocations + ) + ) + dataset = vertexai.types.EvaluationDataset(eval_cases=[eval_case]) + + eval_case_result = self._perform_eval( + dataset=dataset, metrics=[self._metric_name] + ) + + score = self._get_score(eval_case_result) + per_invocation_results.append( + PerInvocationResult( + actual_invocation=actual_invocations[-1], + expected_invocation=expected_invocations[-1], + score=score, + eval_status=self._get_eval_status(score), + ) + ) + + if score is not None: + return EvaluationResult( + overall_score=score, + overall_eval_status=self._get_eval_status(score), + per_invocation_results=per_invocation_results, + ) + + return EvaluationResult() + + @staticmethod + def _get_agent_data( + actual_invocations: list[Invocation], + ) -> vertexai.types.evals.AgentData: + return vertexai.types.evals.AgentData( + agents=_MultiTurnVertexiAiEvalFacade._get_agent_details( + actual_invocations + ), + turns=_MultiTurnVertexiAiEvalFacade._get_turns(actual_invocations), + ) + + @staticmethod + def _get_turns( + actual_invocations: list[Invocation], + ) -> list[vertexai.types.evals.ConversationTurn]: + return [ + _MultiTurnVertexiAiEvalFacade._map_invocation_turn(index, invocation) + for index, invocation in enumerate(actual_invocations) + ] + + @staticmethod + def _map_invocation_turn( + turn_index: int, + invocation: Invocation, + ) -> vertexai.types.evals.ConversationTurn: + agent_events = [] + agent_events.append( + vertexai.types.evals.AgentEvent( + author="user", content=invocation.user_content + ) + ) + + for invocation_event in invocation.intermediate_data.invocation_events: + agent_events.append( + _MultiTurnVertexiAiEvalFacade._map_inovcation_event_to_agent_event( + invocation_event + ) + ) + + agent_events.append( + vertexai.types.evals.AgentEvent( + author="agent", content=invocation.final_response + ) + ) + + return vertexai.types.evals.ConversationTurn( + turn_index=turn_index, + events=agent_events, + turn_id=invocation.invocation_id, + ) + + @staticmethod + def _map_inovcation_event_to_agent_event( + invocation_event: InvocationEvent, + ) -> vertexai.types.evals.AgentEvent: + return vertexai.types.evals.AgentEvent( + author=invocation_event.author, content=invocation_event.content + ) + + @staticmethod + def _get_agent_details( + actual_invocations: list[Invocation], + ) -> dict[str, vertexai.types.evals.AgentConfig]: + agent_configs = {} + for invocation in actual_invocations: + if invocation.app_details and invocation.app_details.agent_details: + for ( + agent_name, + agent_details, + ) in invocation.app_details.agent_details.items(): + if agent_name not in agent_configs: + agent_configs[agent_name] = ( + _MultiTurnVertexiAiEvalFacade._map_agent_details_to_agent_config( + agent_details + ) + ) + + return agent_configs + + @staticmethod + def _map_agent_details_to_agent_config( + agent_details: AgentDetails, + ) -> vertexai.types.evals.AgentConfig: + return vertexai.types.evals.AgentConfig( + agent_id=agent_details.name, + instruction=agent_details.instructions, + tools=agent_details.tool_declarations, + ) diff --git a/tests/unittests/evaluation/test_multi_turn_task_success_evaluator.py b/tests/unittests/evaluation/test_multi_turn_task_success_evaluator.py new file mode 100644 index 0000000000..aa260bf27b --- /dev/null +++ b/tests/unittests/evaluation/test_multi_turn_task_success_evaluator.py @@ -0,0 +1,106 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the Multi Turn Task Success Evaluator.""" + +from google.adk.dependencies.vertexai import vertexai +from google.adk.evaluation.app_details import AgentDetails +from google.adk.evaluation.app_details import AppDetails +from google.adk.evaluation.eval_case import Invocation +from google.adk.evaluation.eval_case import InvocationEvent +from google.adk.evaluation.eval_case import InvocationEvents +from google.adk.evaluation.eval_metrics import EvalMetric +from google.adk.evaluation.evaluator import EvalStatus +from google.adk.evaluation.multi_turn_task_success_evaluator import MultiTurnTaskSuccessV1Evaluator +from google.genai import types as genai_types + +vertexai_types = vertexai.types + + +class TestMultiTurnTaskSuccessV1Evaluator: + """A class to help organize "patch" that are applicable to all tests.""" + + def test_evaluate_invocations_metric_passed(self, mocker): + """Test evaluate_invocations function for multi-turn task success metric.""" + mock_perform_eval = mocker.patch( + "google.adk.evaluation.vertex_ai_eval_facade._VertexAiEvalFacade._perform_eval" + ) + actual_invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + Invocation( + invocation_id="inv2", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q2")] + ), + intermediate_data=InvocationEvents( + invocation_events=[ + InvocationEvent( + author="agent1", + content=genai_types.Content( + parts=[genai_types.Part(text="intermediate")] + ), + ) + ] + ), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r2")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + ] + evaluator = MultiTurnTaskSuccessV1Evaluator( + eval_metric=EvalMetric( + threshold=0.8, metric_name="multi_turn_task_success" + ) + ) + # Mock the return value of _perform_eval + mock_perform_eval.return_value = vertexai_types.EvaluationResult( + summary_metrics=[vertexai_types.AggregatedMetricResult(mean_score=0.9)], + eval_case_results=[], + ) + + evaluation_result = evaluator.evaluate_invocations( + actual_invocations, + ) + + assert evaluation_result.overall_score == 0.9 + assert evaluation_result.overall_eval_status == EvalStatus.PASSED + mock_perform_eval.assert_called_once() + _, mock_kwargs = mock_perform_eval.call_args + # Compare the names of the metrics. + assert [m.name for m in mock_kwargs["metrics"]] == [ + vertexai_types.RubricMetric.MULTI_TURN_TASK_SUCCESS.name + ] diff --git a/tests/unittests/evaluation/test_vertex_ai_eval_facade.py b/tests/unittests/evaluation/test_vertex_ai_eval_facade.py index dbef1010dd..285f8c7062 100644 --- a/tests/unittests/evaluation/test_vertex_ai_eval_facade.py +++ b/tests/unittests/evaluation/test_vertex_ai_eval_facade.py @@ -20,8 +20,13 @@ import random from google.adk.dependencies.vertexai import vertexai +from google.adk.evaluation.app_details import AgentDetails +from google.adk.evaluation.app_details import AppDetails from google.adk.evaluation.eval_case import Invocation +from google.adk.evaluation.eval_case import InvocationEvent +from google.adk.evaluation.eval_case import InvocationEvents from google.adk.evaluation.evaluator import EvalStatus +from google.adk.evaluation.vertex_ai_eval_facade import _MultiTurnVertexiAiEvalFacade from google.adk.evaluation.vertex_ai_eval_facade import _SingleTurnVertexAiEvalFacade from google.adk.evaluation.vertex_ai_eval_facade import _VertexAiEvalFacade from google.genai import types as genai_types @@ -272,6 +277,7 @@ def test_constructor_with_api_key(self, mocker): mock_client_cls.assert_called_once_with(api_key="test_api_key") def test_constructor_with_project_and_location(self, mocker): + mocker.patch.dict( os.environ, { @@ -327,3 +333,262 @@ def test_constructor_with_no_env_vars_raises_error(self, mocker): _SingleTurnVertexAiEvalFacade( threshold=0.8, metric_name=vertexai_types.PrebuiltMetric.COHERENCE ) + + +class TestMultiTurnVertexAiEvalFacade: + """Tests for _MultiTurnVertexiAiEvalFacade.""" + + def test_map_agent_details_to_agent_config(self): + tool_declarations = [ + genai_types.Tool( + function_declarations=[ + genai_types.FunctionDeclaration( + name="tool_1", + description="this is tool 1", + ) + ] + ) + ] + agent_details = AgentDetails( + name="test_agent", + instructions="test_instructions", + tool_declarations=tool_declarations, + ) + agent_config = ( + _MultiTurnVertexiAiEvalFacade._map_agent_details_to_agent_config( + agent_details + ) + ) + assert agent_config.agent_id == "test_agent" + assert agent_config.instruction == "test_instructions" + assert agent_config.tools == tool_declarations + + def test_get_agent_details(self): + invocations = [ + Invocation( + user_content=genai_types.Content(), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ), + "agent2": AgentDetails( + name="agent2", instructions="instructions2" + ), + } + ), + ), + Invocation( + user_content=genai_types.Content(), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ), + "agent3": AgentDetails( + name="agent3", instructions="instructions3" + ), + } + ), + ), + ] + agent_configs = _MultiTurnVertexiAiEvalFacade._get_agent_details( + invocations + ) + assert len(agent_configs) == 3 + assert "agent1" in agent_configs + assert "agent2" in agent_configs + assert "agent3" in agent_configs + assert agent_configs["agent1"].instruction == "instructions1" + assert agent_configs["agent2"].instruction == "instructions2" + assert agent_configs["agent3"].instruction == "instructions3" + + def test_map_invocation_event_to_agent_event(self): + invocation_event = InvocationEvent( + author="test_author", + content=genai_types.Content( + parts=[genai_types.Part(text="test_content")] + ), + ) + agent_event = ( + _MultiTurnVertexiAiEvalFacade._map_inovcation_event_to_agent_event( + invocation_event + ) + ) + assert agent_event.author == "test_author" + assert agent_event.content.parts[0].text == "test_content" + + def test_map_invocation_turn(self): + invocation = Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="user query")] + ), + intermediate_data=InvocationEvents( + invocation_events=[ + InvocationEvent( + author="agent1", + content=genai_types.Content( + parts=[genai_types.Part(text="intermediate content")] + ), + ) + ] + ), + final_response=genai_types.Content( + parts=[genai_types.Part(text="final response")] + ), + ) + conversation_turn = _MultiTurnVertexiAiEvalFacade._map_invocation_turn( + 0, invocation + ) + assert conversation_turn.turn_index == 0 + assert conversation_turn.turn_id == "inv1" + assert len(conversation_turn.events) == 3 + assert conversation_turn.events[0].author == "user" + assert conversation_turn.events[0].content.parts[0].text == "user query" + assert conversation_turn.events[1].author == "agent1" + assert ( + conversation_turn.events[1].content.parts[0].text + == "intermediate content" + ) + assert conversation_turn.events[2].author == "agent" + assert conversation_turn.events[2].content.parts[0].text == "final response" + + def test_get_turns(self): + invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + ), + Invocation( + invocation_id="inv2", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q2")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r2")] + ), + ), + ] + turns = _MultiTurnVertexiAiEvalFacade._get_turns(invocations) + assert len(turns) == 2 + assert turns[0].turn_id == "inv1" + assert turns[1].turn_id == "inv2" + + def test_get_agent_data(self): + invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ) + ] + agent_data = _MultiTurnVertexiAiEvalFacade._get_agent_data(invocations) + assert "agent1" in agent_data.agents + assert len(agent_data.turns) == 1 + + def test_evaluate_invocations_multi_turn_metric_passed(self, mocker): + """Test evaluate_invocations function for a multi-turn metric.""" + mock_perform_eval = mocker.patch( + "google.adk.evaluation.vertex_ai_eval_facade._VertexAiEvalFacade._perform_eval" + ) + actual_invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + Invocation( + invocation_id="inv2", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q2")] + ), + intermediate_data=InvocationEvents( + invocation_events=[ + InvocationEvent( + author="agent1", + content=genai_types.Content( + parts=[genai_types.Part(text="intermediate")] + ), + ) + ] + ), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r2")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + ] + evaluator = _MultiTurnVertexiAiEvalFacade( + threshold=0.8, + metric_name=vertexai_types.PrebuiltMetric.CONVERSATIONAL_COHERENCE, + ) + # Mock the return value of _perform_eval + mock_perform_eval.return_value = vertexai_types.EvaluationResult( + summary_metrics=[vertexai_types.AggregatedMetricResult(mean_score=0.9)], + eval_case_results=[], + ) + + evaluation_result = evaluator.evaluate_invocations(actual_invocations) + + assert evaluation_result.overall_score == 0.9 + assert evaluation_result.overall_eval_status == EvalStatus.PASSED + assert len(evaluation_result.per_invocation_results) == 2 + assert ( + evaluation_result.per_invocation_results[0].eval_status + == EvalStatus.NOT_EVALUATED + ) + assert ( + evaluation_result.per_invocation_results[1].eval_status + == EvalStatus.PASSED + ) + mock_perform_eval.assert_called_once() + _, mock_kwargs = mock_perform_eval.call_args + assert [m.name for m in mock_kwargs["metrics"]] == [ + vertexai_types.PrebuiltMetric.CONVERSATIONAL_COHERENCE.name + ] + dataset = mock_kwargs["dataset"] + assert len(dataset.eval_cases) == 1 + agent_data = dataset.eval_cases[0].agent_data + assert "agent1" in agent_data.agents + assert len(agent_data.turns) == 2 + assert agent_data.turns[0].turn_id == "inv1" + assert agent_data.turns[1].turn_id == "inv2" + assert len(agent_data.turns[1].events) == 3 # user, intermediate, agent From 38bfb4475406d63af3111775950d9c25acf17ed2 Mon Sep 17 00:00:00 2001 From: Ankur Sharma Date: Mon, 16 Mar 2026 10:43:56 -0700 Subject: [PATCH 028/192] feat: Add MultiTurn Task trajectory and tool trajectory metrics Tool use: The class delegates the responsibility to Vertex Gen AI Eval SDK. The V1 suffix in the class name is added to convey that there could be other versions of the safety metric as well, and those metrics could use a different strategy to evaluate safety. Task trajectory: this metric is different from `Multi-Turn Overall Task Success`, in the sense that task success only concerns itself with the goal of whether the success was achieved or not. How that was achieved is not its concern. This metric on the other hand does care about the path that agent took to achieve the goal. Co-authored-by: Ankur Sharma PiperOrigin-RevId: 884525532 --- src/google/adk/evaluation/eval_metrics.py | 4 + .../evaluation/metric_evaluator_registry.py | 12 ++ .../adk/evaluation/metric_info_providers.py | 41 +++++++ .../multi_turn_tool_use_quality_evaluator.py | 63 +++++++++++ ...multi_turn_trajectory_quality_evaluator.py | 69 ++++++++++++ ...t_multi_turn_tool_use_quality_evaluator.py | 106 ++++++++++++++++++ ...multi_turn_trajectory_quality_evaluator.py | 106 ++++++++++++++++++ 7 files changed, 401 insertions(+) create mode 100644 src/google/adk/evaluation/multi_turn_tool_use_quality_evaluator.py create mode 100644 src/google/adk/evaluation/multi_turn_trajectory_quality_evaluator.py create mode 100644 tests/unittests/evaluation/test_multi_turn_tool_use_quality_evaluator.py create mode 100644 tests/unittests/evaluation/test_multi_turn_trajectory_quality_evaluator.py diff --git a/src/google/adk/evaluation/eval_metrics.py b/src/google/adk/evaluation/eval_metrics.py index 77cfa9a1fc..50c3473c3a 100644 --- a/src/google/adk/evaluation/eval_metrics.py +++ b/src/google/adk/evaluation/eval_metrics.py @@ -63,6 +63,10 @@ class PrebuiltMetrics(Enum): MULTI_TURN_TASK_SUCCESS_V1 = "multi_turn_task_success_v1" + MULTI_TURN_TRAJECTORY_QUALITY_V1 = "multi_turn_trajectory_quality_v1" + + MULTI_TURN_TOOL_USE_QUALITY_V1 = "multi_turn_tool_use_quality_v1" + MetricName: TypeAlias = Union[str, PrebuiltMetrics] Threshold: TypeAlias = float diff --git a/src/google/adk/evaluation/metric_evaluator_registry.py b/src/google/adk/evaluation/metric_evaluator_registry.py index b554ad6ed6..b005bd36e6 100644 --- a/src/google/adk/evaluation/metric_evaluator_registry.py +++ b/src/google/adk/evaluation/metric_evaluator_registry.py @@ -28,6 +28,8 @@ from .metric_info_providers import FinalResponseMatchV2EvaluatorMetricInfoProvider from .metric_info_providers import HallucinationsV1EvaluatorMetricInfoProvider from .metric_info_providers import MultiTurnTaskSuccessV1MetricInfoProvider +from .metric_info_providers import MultiTurnToolUseQualityV1MetricInfoProvider +from .metric_info_providers import MultiTurnTrajectoryQualityV1MetricInfoProvider from .metric_info_providers import PerTurnUserSimulatorQualityV1MetricInfoProvider from .metric_info_providers import ResponseEvaluatorMetricInfoProvider from .metric_info_providers import RubricBasedFinalResponseQualityV1EvaluatorMetricInfoProvider @@ -35,6 +37,8 @@ from .metric_info_providers import SafetyEvaluatorV1MetricInfoProvider from .metric_info_providers import TrajectoryEvaluatorMetricInfoProvider from .multi_turn_task_success_evaluator import MultiTurnTaskSuccessV1Evaluator +from .multi_turn_tool_use_quality_evaluator import MultiTurnToolUseQualityV1Evaluator +from .multi_turn_trajectory_quality_evaluator import MultiTurnTrajectoryQualityV1Evaluator from .response_evaluator import ResponseEvaluator from .rubric_based_final_response_quality_v1 import RubricBasedFinalResponseQualityV1Evaluator from .rubric_based_tool_use_quality_v1 import RubricBasedToolUseV1Evaluator @@ -132,6 +136,14 @@ def _get_default_metric_evaluator_registry() -> MetricEvaluatorRegistry: metric_info=MultiTurnTaskSuccessV1MetricInfoProvider().get_metric_info(), evaluator=MultiTurnTaskSuccessV1Evaluator, ) + metric_evaluator_registry.register_evaluator( + metric_info=MultiTurnTrajectoryQualityV1MetricInfoProvider().get_metric_info(), + evaluator=MultiTurnTrajectoryQualityV1Evaluator, + ) + metric_evaluator_registry.register_evaluator( + metric_info=MultiTurnToolUseQualityV1MetricInfoProvider().get_metric_info(), + evaluator=MultiTurnToolUseQualityV1Evaluator, + ) metric_evaluator_registry.register_evaluator( metric_info=FinalResponseMatchV2EvaluatorMetricInfoProvider().get_metric_info(), evaluator=FinalResponseMatchV2Evaluator, diff --git a/src/google/adk/evaluation/metric_info_providers.py b/src/google/adk/evaluation/metric_info_providers.py index cee991a96d..f887aacad2 100644 --- a/src/google/adk/evaluation/metric_info_providers.py +++ b/src/google/adk/evaluation/metric_info_providers.py @@ -112,6 +112,47 @@ def get_metric_info(self) -> MetricInfo: ) +class MultiTurnTrajectoryQualityV1MetricInfoProvider(MetricInfoProvider): + """Metric info provider for MultiTurnTrajectoryQualityV1.""" + + def get_metric_info(self) -> MetricInfo: + return MetricInfo( + metric_name=PrebuiltMetrics.MULTI_TURN_TRAJECTORY_QUALITY_V1.value, + description=( + "Evaluates the overall trajectory of the conversation. Note that" + " this metric is different from `Multi-Turn Overall Task Success`," + " in the sense that task success only concerns itself with the" + " goal of whether the success was achieved or not. How that was" + " achieved is not its concern. This metric on the other hand does" + " care about the path that agent took to achieve the goal. This is" + " a reference free metric." + " Value range of the metric is [0, 1], with values closer" + " to 1 to be more desirable (safe)." + ), + metric_value_info=MetricValueInfo( + interval=Interval(min_value=0.0, max_value=1.0) + ), + ) + + +class MultiTurnToolUseQualityV1MetricInfoProvider(MetricInfoProvider): + """Metric info provider for MultiTurnToolUseQualityV1.""" + + def get_metric_info(self) -> MetricInfo: + return MetricInfo( + metric_name=PrebuiltMetrics.MULTI_TURN_TOOL_USE_QUALITY_V1.value, + description=( + "Evaluates the function calls made during a multi-turn" + " conversation. This is a reference free metric." + " Value range of the metric is [0, 1], with values closer" + " to 1 to be more desirable (safe)." + ), + metric_value_info=MetricValueInfo( + interval=Interval(min_value=0.0, max_value=1.0) + ), + ) + + class FinalResponseMatchV2EvaluatorMetricInfoProvider(MetricInfoProvider): """Metric info provider for FinalResponseMatchV2Evaluator.""" diff --git a/src/google/adk/evaluation/multi_turn_tool_use_quality_evaluator.py b/src/google/adk/evaluation/multi_turn_tool_use_quality_evaluator.py new file mode 100644 index 0000000000..5d2d876569 --- /dev/null +++ b/src/google/adk/evaluation/multi_turn_tool_use_quality_evaluator.py @@ -0,0 +1,63 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Optional + +from typing_extensions import override + +from .eval_case import ConversationScenario +from .eval_case import Invocation +from .eval_metrics import EvalMetric +from .evaluator import EvaluationResult +from .evaluator import Evaluator +from .vertex_ai_eval_facade import _MultiTurnVertexiAiEvalFacade + + +class MultiTurnToolUseQualityV1Evaluator(Evaluator): + """Evaluates the function calls made during a multi-turn conversation. + + This is a reference free metric. + + The class delegates the responsibility to Vertex Gen AI Eval SDK. The V1 + suffix in the class name is added to convey that there could be other versions + of the safety metric as well, and those metrics could use a different strategy + to evaluate safety. + + Using this class requires a GCP project. Please set GOOGLE_CLOUD_PROJECT and + GOOGLE_CLOUD_LOCATION in your .env file. + + Value range of the metric is [0, 1], with values closer to 1 to be more + desirable (safe). + """ + + def __init__(self, eval_metric: EvalMetric): + self._eval_metric = eval_metric + + @override + def evaluate_invocations( + self, + actual_invocations: list[Invocation], + expected_invocations: Optional[list[Invocation]] = None, + conversation_scenario: Optional[ConversationScenario] = None, + ) -> EvaluationResult: + from ..dependencies.vertexai import vertexai + + return _MultiTurnVertexiAiEvalFacade( + threshold=self._eval_metric.threshold, + metric_name=vertexai.types.RubricMetric.MULTI_TURN_TOOL_USE_QUALITY, + ).evaluate_invocations( + actual_invocations, expected_invocations, conversation_scenario + ) diff --git a/src/google/adk/evaluation/multi_turn_trajectory_quality_evaluator.py b/src/google/adk/evaluation/multi_turn_trajectory_quality_evaluator.py new file mode 100644 index 0000000000..a9f042a852 --- /dev/null +++ b/src/google/adk/evaluation/multi_turn_trajectory_quality_evaluator.py @@ -0,0 +1,69 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Optional + +from typing_extensions import override + +from .eval_case import ConversationScenario +from .eval_case import Invocation +from .eval_metrics import EvalMetric +from .evaluator import EvaluationResult +from .evaluator import Evaluator +from .vertex_ai_eval_facade import _MultiTurnVertexiAiEvalFacade + + +class MultiTurnTrajectoryQualityV1Evaluator(Evaluator): + """Evaluates the overall trajectory of the conversation. + + Note that this metric is different from `Multi-Turn Overall Task Success`, + in the sense that task success only concerns itself with the goal of whether + the success was achieved or not. How that was achieved is not its concern. + This metric on the other hand does care about the path that agent took to + achieve the goal. + + This is a reference free metric. + + The class delegates the responsibility to Vertex Gen AI Eval SDK. The V1 + suffix in the class name is added to convey that there could be other versions + of the safety metric as well, and those metrics could use a different strategy + to evaluate safety. + + Using this class requires a GCP project. Please set GOOGLE_CLOUD_PROJECT and + GOOGLE_CLOUD_LOCATION in your .env file. + + Value range of the metric is [0, 1], with values closer to 1 to be more + desirable (safe). + """ + + def __init__(self, eval_metric: EvalMetric): + self._eval_metric = eval_metric + + @override + def evaluate_invocations( + self, + actual_invocations: list[Invocation], + expected_invocations: Optional[list[Invocation]] = None, + conversation_scenario: Optional[ConversationScenario] = None, + ) -> EvaluationResult: + from ..dependencies.vertexai import vertexai + + return _MultiTurnVertexiAiEvalFacade( + threshold=self._eval_metric.threshold, + metric_name=vertexai.types.RubricMetric.MULTI_TURN_TRAJECTORY_QUALITY, + ).evaluate_invocations( + actual_invocations, expected_invocations, conversation_scenario + ) diff --git a/tests/unittests/evaluation/test_multi_turn_tool_use_quality_evaluator.py b/tests/unittests/evaluation/test_multi_turn_tool_use_quality_evaluator.py new file mode 100644 index 0000000000..330d5bdff5 --- /dev/null +++ b/tests/unittests/evaluation/test_multi_turn_tool_use_quality_evaluator.py @@ -0,0 +1,106 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the Multi Turn Tool Use Quality Evaluator.""" + +from google.adk.dependencies.vertexai import vertexai +from google.adk.evaluation.app_details import AgentDetails +from google.adk.evaluation.app_details import AppDetails +from google.adk.evaluation.eval_case import Invocation +from google.adk.evaluation.eval_case import InvocationEvent +from google.adk.evaluation.eval_case import InvocationEvents +from google.adk.evaluation.eval_metrics import EvalMetric +from google.adk.evaluation.evaluator import EvalStatus +from google.adk.evaluation.multi_turn_tool_use_quality_evaluator import MultiTurnToolUseQualityV1Evaluator +from google.genai import types as genai_types + +vertexai_types = vertexai.types + + +class TestMultiTurnToolUseQualityV1Evaluator: + """A class to help organize "patch" that are applicable to all tests.""" + + def test_evaluate_invocations_metric_passed(self, mocker): + """Test evaluate_invocations function for multi-turn tool use quality metric.""" + mock_perform_eval = mocker.patch( + "google.adk.evaluation.vertex_ai_eval_facade._VertexAiEvalFacade._perform_eval" + ) + actual_invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + Invocation( + invocation_id="inv2", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q2")] + ), + intermediate_data=InvocationEvents( + invocation_events=[ + InvocationEvent( + author="agent1", + content=genai_types.Content( + parts=[genai_types.Part(text="intermediate")] + ), + ) + ] + ), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r2")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + ] + evaluator = MultiTurnToolUseQualityV1Evaluator( + eval_metric=EvalMetric( + threshold=0.8, metric_name="multi_turn_tool_use_quality" + ) + ) + # Mock the return value of _perform_eval + mock_perform_eval.return_value = vertexai_types.EvaluationResult( + summary_metrics=[vertexai_types.AggregatedMetricResult(mean_score=0.9)], + eval_case_results=[], + ) + + evaluation_result = evaluator.evaluate_invocations( + actual_invocations, + ) + + assert evaluation_result.overall_score == 0.9 + assert evaluation_result.overall_eval_status == EvalStatus.PASSED + mock_perform_eval.assert_called_once() + _, mock_kwargs = mock_perform_eval.call_args + # Compare the names of the metrics. + assert [m.name for m in mock_kwargs["metrics"]] == [ + vertexai_types.RubricMetric.MULTI_TURN_TOOL_USE_QUALITY.name + ] diff --git a/tests/unittests/evaluation/test_multi_turn_trajectory_quality_evaluator.py b/tests/unittests/evaluation/test_multi_turn_trajectory_quality_evaluator.py new file mode 100644 index 0000000000..6ab4bf1fda --- /dev/null +++ b/tests/unittests/evaluation/test_multi_turn_trajectory_quality_evaluator.py @@ -0,0 +1,106 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the Multi Turn Trajectory Quality Evaluator.""" + +from google.adk.dependencies.vertexai import vertexai +from google.adk.evaluation.app_details import AgentDetails +from google.adk.evaluation.app_details import AppDetails +from google.adk.evaluation.eval_case import Invocation +from google.adk.evaluation.eval_case import InvocationEvent +from google.adk.evaluation.eval_case import InvocationEvents +from google.adk.evaluation.eval_metrics import EvalMetric +from google.adk.evaluation.evaluator import EvalStatus +from google.adk.evaluation.multi_turn_trajectory_quality_evaluator import MultiTurnTrajectoryQualityV1Evaluator +from google.genai import types as genai_types + +vertexai_types = vertexai.types + + +class TestMultiTurnTrajectoryQualityV1Evaluator: + """A class to help organize "patch" that are applicable to all tests.""" + + def test_evaluate_invocations_metric_passed(self, mocker): + """Test evaluate_invocations function for multi-turn trajectory quality metric.""" + mock_perform_eval = mocker.patch( + "google.adk.evaluation.vertex_ai_eval_facade._VertexAiEvalFacade._perform_eval" + ) + actual_invocations = [ + Invocation( + invocation_id="inv1", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q1")] + ), + intermediate_data=InvocationEvents(invocation_events=[]), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r1")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + Invocation( + invocation_id="inv2", + user_content=genai_types.Content( + parts=[genai_types.Part(text="q2")] + ), + intermediate_data=InvocationEvents( + invocation_events=[ + InvocationEvent( + author="agent1", + content=genai_types.Content( + parts=[genai_types.Part(text="intermediate")] + ), + ) + ] + ), + final_response=genai_types.Content( + parts=[genai_types.Part(text="r2")] + ), + app_details=AppDetails( + agent_details={ + "agent1": AgentDetails( + name="agent1", instructions="instructions1" + ) + } + ), + ), + ] + evaluator = MultiTurnTrajectoryQualityV1Evaluator( + eval_metric=EvalMetric( + threshold=0.8, metric_name="multi_turn_trajectory_quality" + ) + ) + # Mock the return value of _perform_eval + mock_perform_eval.return_value = vertexai_types.EvaluationResult( + summary_metrics=[vertexai_types.AggregatedMetricResult(mean_score=0.9)], + eval_case_results=[], + ) + + evaluation_result = evaluator.evaluate_invocations( + actual_invocations, + ) + + assert evaluation_result.overall_score == 0.9 + assert evaluation_result.overall_eval_status == EvalStatus.PASSED + mock_perform_eval.assert_called_once() + _, mock_kwargs = mock_perform_eval.call_args + # Compare the names of the metrics. + assert [m.name for m in mock_kwargs["metrics"]] == [ + vertexai_types.RubricMetric.MULTI_TURN_TRAJECTORY_QUALITY.name + ] From 71d26ef7b90fe25a5093e4ccdf74b103e64fac67 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Mon, 16 Mar 2026 11:39:06 -0700 Subject: [PATCH 029/192] feat: Add support for timeout to UnsafeLocalCodeExecutor Co-authored-by: Kathy Wu PiperOrigin-RevId: 884557773 --- .../adk/code_executors/base_code_executor.py | 5 ++ .../unsafe_local_code_executor.py | 47 +++++++++++++++---- .../test_unsafe_local_code_executor.py | 10 ++++ 3 files changed, 54 insertions(+), 8 deletions(-) diff --git a/src/google/adk/code_executors/base_code_executor.py b/src/google/adk/code_executors/base_code_executor.py index 8afd0d14aa..bafe7b8b2d 100644 --- a/src/google/adk/code_executors/base_code_executor.py +++ b/src/google/adk/code_executors/base_code_executor.py @@ -16,6 +16,7 @@ import abc from typing import List +from typing import Optional from pydantic import BaseModel @@ -41,6 +42,7 @@ class BaseCodeExecutor(BaseModel): code blocks. execution_result_delimiters: The delimiters to format the code execution result. + timeout_seconds: The fallback timeout in seconds for the code execution. """ optimize_data_file: bool = False @@ -74,6 +76,9 @@ class BaseCodeExecutor(BaseModel): execution_result_delimiters: tuple[str, str] = ('```tool_output\n', '\n```') """The delimiters to format the code execution result.""" + timeout_seconds: Optional[int] = None + """The timeout in seconds for the code execution.""" + @abc.abstractmethod def execute_code( self, diff --git a/src/google/adk/code_executors/unsafe_local_code_executor.py b/src/google/adk/code_executors/unsafe_local_code_executor.py index e91a54bb24..64752fffd5 100644 --- a/src/google/adk/code_executors/unsafe_local_code_executor.py +++ b/src/google/adk/code_executors/unsafe_local_code_executor.py @@ -17,7 +17,10 @@ from contextlib import redirect_stdout import io import logging +import multiprocessing +import queue import re +import traceback from typing import Any from pydantic import Field @@ -31,6 +34,20 @@ logger = logging.getLogger('google_adk.' + __name__) +def _execute_in_process( + code: str, globals_: dict[str, Any], result_queue: multiprocessing.Queue +) -> None: + """Executes code in a separate process and puts result in queue.""" + stdout = io.StringIO() + error = None + try: + with redirect_stdout(stdout): + exec(code, globals_, globals_) + except BaseException: + error = traceback.format_exc() + result_queue.put((stdout.getvalue(), error)) + + def _prepare_globals(code: str, globals_: dict[str, Any]) -> None: """Prepare globals for code execution, injecting __name__ if needed.""" if re.search(r"if\s+__name__\s*==\s*['\"]__main__['\"]", code): @@ -65,19 +82,33 @@ def execute_code( ) -> CodeExecutionResult: logger.debug('Executing code:\n```\n%s\n```', code_execution_input.code) # Execute the code. + globals_ = {} + _prepare_globals(code_execution_input.code, globals_) + + ctx = multiprocessing.get_context('spawn') + result_queue = ctx.Queue() + process = ctx.Process( + target=_execute_in_process, + args=(code_execution_input.code, globals_, result_queue), + daemon=True, + ) + process.start() + output = '' error = '' try: - globals_ = {} - _prepare_globals(code_execution_input.code, globals_) - stdout = io.StringIO() - with redirect_stdout(stdout): - exec(code_execution_input.code, globals_, globals_) - output = stdout.getvalue() - except Exception as e: - error = str(e) + output, err = result_queue.get(timeout=self.timeout_seconds) + process.join() + if err: + error = err + except queue.Empty: + process.terminate() + process.join() + error = f'Code execution timed out after {self.timeout_seconds} seconds.' # Collect the final result. + result_queue.close() + result_queue.join_thread() return CodeExecutionResult( stdout=output, stderr=error, diff --git a/tests/unittests/code_executors/test_unsafe_local_code_executor.py b/tests/unittests/code_executors/test_unsafe_local_code_executor.py index f8d5f496a8..fa22e1bbbf 100644 --- a/tests/unittests/code_executors/test_unsafe_local_code_executor.py +++ b/tests/unittests/code_executors/test_unsafe_local_code_executor.py @@ -121,3 +121,13 @@ def run(): assert result.stderr == "" assert result.stdout == "hi ada\n" + + def test_execute_code_timeout( + self, mock_invocation_context: InvocationContext + ): + executor = UnsafeLocalCodeExecutor(timeout_seconds=1) + code_input = CodeExecutionInput(code="import time\ntime.sleep(2)") + result = executor.execute_code(mock_invocation_context, code_input) + + assert result.stdout == "" + assert "Code execution timed out after 1 seconds." in result.stderr From 50d6f35139b56aa5b9fb06ee53b911269c222ffe Mon Sep 17 00:00:00 2001 From: George Weale Date: Mon, 16 Mar 2026 12:10:51 -0700 Subject: [PATCH 030/192] fix: Remove redundant client_id from fetch_token call When using OAuth2Session with `client_secret_post`, Authlib automatically includes the client_id and client_secret in the request body. Explicitly passing `client_id` again results in a duplicate parameter in the token exchange request, which can cause issues with some OAuth providers. Close #4782 Co-authored-by: George Weale PiperOrigin-RevId: 884574091 --- .../exchanger/oauth2_credential_exchanger.py | 3 +- .../test_oauth2_credential_exchanger.py | 76 ++++++++++++++++++- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/src/google/adk/auth/exchanger/oauth2_credential_exchanger.py b/src/google/adk/auth/exchanger/oauth2_credential_exchanger.py index 02365f3026..76f0c67899 100644 --- a/src/google/adk/auth/exchanger/oauth2_credential_exchanger.py +++ b/src/google/adk/auth/exchanger/oauth2_credential_exchanger.py @@ -193,6 +193,8 @@ async def _exchange_authorization_code( return ExchangeResult(auth_credential, False) try: + # Authlib already injects client_id for body-based client auth flows such + # as client_secret_post, so passing it here would duplicate the field. tokens = client.fetch_token( token_endpoint, authorization_response=self._normalize_auth_uri( @@ -200,7 +202,6 @@ async def _exchange_authorization_code( ), code=auth_credential.oauth2.auth_code, grant_type=OAuthGrantType.AUTHORIZATION_CODE, - client_id=auth_credential.oauth2.client_id, ) update_credential_with_tokens(auth_credential, tokens) logger.debug("Successfully exchanged authorization code for access token") diff --git a/tests/unittests/auth/exchanger/test_oauth2_credential_exchanger.py b/tests/unittests/auth/exchanger/test_oauth2_credential_exchanger.py index 574a0922b8..3a0a5647cb 100644 --- a/tests/unittests/auth/exchanger/test_oauth2_credential_exchanger.py +++ b/tests/unittests/auth/exchanger/test_oauth2_credential_exchanger.py @@ -15,7 +15,9 @@ import time from unittest.mock import Mock from unittest.mock import patch +from urllib.parse import parse_qs +from authlib.integrations.requests_client import OAuth2Session from authlib.oauth2.rfc6749 import OAuth2Token from fastapi.openapi.models import OAuth2 from fastapi.openapi.models import OAuthFlowClientCredentials @@ -25,11 +27,39 @@ from google.adk.auth.auth_credential import OAuth2Auth from google.adk.auth.auth_schemes import OAuthGrantType from google.adk.auth.auth_schemes import OpenIdConnectWithConfig +from google.adk.auth.exchanger import oauth2_credential_exchanger from google.adk.auth.exchanger.base_credential_exchanger import CredentialExchangeError from google.adk.auth.exchanger.oauth2_credential_exchanger import OAuth2CredentialExchanger import pytest +class _TokenBodyCapturingOAuth2Session(OAuth2Session): + """A mock OAuth2Session that captures the final token request body.""" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.request_body = "" + + def _fetch_token( + self, + url=None, + body="", + auth=None, + method="POST", + headers=None, + **kwargs, + ): + if auth is not None: + _, _, body = auth.prepare(method, url, headers or {}, body) + self.request_body = body + return OAuth2Token({ + "access_token": "new_access_token", + "refresh_token": "new_refresh_token", + "expires_at": int(time.time()) + 3600, + "expires_in": 3600, + }) + + class TestOAuth2CredentialExchanger: """Test suite for OAuth2CredentialExchanger.""" @@ -343,9 +373,53 @@ async def test_exchange_normalize_uri(self, mock_oauth2_session): authorization_response="https://example.com/callback?code=auth_code", # Normalized URI code="auth_code", grant_type=OAuthGrantType.AUTHORIZATION_CODE, - client_id="test_client_id", ) + async def test_exchange_client_secret_post_has_single_client_id(self): + """Test exchange lets Authlib add client_id only once for body auth.""" + scheme = OpenIdConnectWithConfig( + type_="openIdConnect", + openId_connect_url=( + "https://example.com/.well-known/openid_configuration" + ), + authorization_endpoint="https://example.com/auth", + token_endpoint="https://example.com/token", + scopes=["openid"], + ) + credential = AuthCredential( + auth_type=AuthCredentialTypes.OPEN_ID_CONNECT, + oauth2=OAuth2Auth( + client_id="test_client_id", + client_secret="test_client_secret", + token_endpoint_auth_method="client_secret_post", + auth_response_uri="https://example.com/callback?code=auth_code", + auth_code="auth_code", + ), + ) + + client = _TokenBodyCapturingOAuth2Session( + credential.oauth2.client_id, + credential.oauth2.client_secret, + token_endpoint_auth_method="client_secret_post", + ) + + with patch.object( + oauth2_credential_exchanger, + "create_oauth2_session", + autospec=True, + return_value=(client, "https://example.com/token"), + ): + exchanger = OAuth2CredentialExchanger() + exchange_result = await exchanger.exchange(credential, scheme) + + request_params = parse_qs(client.request_body) + + assert exchange_result.was_exchanged + assert request_params["grant_type"] == [OAuthGrantType.AUTHORIZATION_CODE] + assert request_params["code"] == ["auth_code"] + assert request_params["client_id"] == ["test_client_id"] + assert request_params["client_secret"] == ["test_client_secret"] + async def test_determine_grant_type_client_credentials(self): """Test grant type determination for client credentials.""" flows = OAuthFlows( From 4752f3f993e59aac2df24e9f5d283174dfd9ca24 Mon Sep 17 00:00:00 2001 From: "Xiang (Sean) Zhou" Date: Mon, 16 Mar 2026 12:11:30 -0700 Subject: [PATCH 031/192] chore: Add a sample agent for files_retrieval tool this sample can be used to test the latest gemini embedding model Co-authored-by: Xiang (Sean) Zhou PiperOrigin-RevId: 884574396 --- .../samples/files_retrieval_agent/README.md | 76 +++++++++++++++++++ .../samples/files_retrieval_agent/__init__.py | 15 ++++ .../samples/files_retrieval_agent/agent.py | 54 +++++++++++++ .../data/adk_overview.txt | 23 ++++++ .../data/tools_guide.txt | 28 +++++++ 5 files changed, 196 insertions(+) create mode 100644 contributing/samples/files_retrieval_agent/README.md create mode 100644 contributing/samples/files_retrieval_agent/__init__.py create mode 100644 contributing/samples/files_retrieval_agent/agent.py create mode 100644 contributing/samples/files_retrieval_agent/data/adk_overview.txt create mode 100644 contributing/samples/files_retrieval_agent/data/tools_guide.txt diff --git a/contributing/samples/files_retrieval_agent/README.md b/contributing/samples/files_retrieval_agent/README.md new file mode 100644 index 0000000000..57b16e742b --- /dev/null +++ b/contributing/samples/files_retrieval_agent/README.md @@ -0,0 +1,76 @@ +# Files Retrieval Agent + +A sample agent that demonstrates using `FilesRetrieval` with the +`gemini-embedding-2-preview` embedding model for retrieval-augmented +generation (RAG) over local files. + +## What it does + +This agent indexes local text files from the `data/` directory using +`FilesRetrieval` (backed by LlamaIndex's `VectorStoreIndex` and Google's +`gemini-embedding-2-preview` embedding model), then answers user questions +by retrieving relevant documents before generating a response. + +## Prerequisites + +- Python 3.11+ +- `google-genai >= 1.64.0` (required for `gemini-embedding-2-preview` + support via the Vertex AI `embedContent` endpoint) +- `llama-index-embeddings-google-genai >= 0.3.0` + +Install dependencies: + +```bash +uv sync --all-extras +``` + +## Authentication + +Configure one of the following: + +**Google AI API:** + +```bash +export GOOGLE_API_KEY="your-api-key" +``` + +**Vertex AI:** + +```bash +export GOOGLE_GENAI_USE_VERTEXAI=1 +export GOOGLE_CLOUD_PROJECT="your-project-id" +export GOOGLE_CLOUD_LOCATION="us-central1" +``` + +Note: `gemini-embedding-2-preview` is currently only available in +`us-central1`. + +## Usage + +```bash +cd contributing/samples + +# Interactive CLI +adk run files_retrieval_agent + +# Web UI +adk web . +``` + +## Example queries + +- "What agent types does ADK support?" +- "How does FilesRetrieval work?" +- "What tools are available in ADK?" + +## File structure + +``` +files_retrieval_agent/ +├── __init__.py +├── agent.py # Agent definition with FilesRetrieval tool +├── data/ +│ ├── adk_overview.txt # ADK architecture overview +│ └── tools_guide.txt # ADK tools documentation +└── README.md +``` diff --git a/contributing/samples/files_retrieval_agent/__init__.py b/contributing/samples/files_retrieval_agent/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/files_retrieval_agent/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/files_retrieval_agent/agent.py b/contributing/samples/files_retrieval_agent/agent.py new file mode 100644 index 0000000000..7b1209b8af --- /dev/null +++ b/contributing/samples/files_retrieval_agent/agent.py @@ -0,0 +1,54 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Sample agent using FilesRetrieval with gemini-embedding-2-preview. + +This agent indexes local text files and answers questions about them +using retrieval-augmented generation. + +Usage: + cd contributing/samples + adk run files_retrieval_agent + # or + adk web . +""" + +import os + +from google.adk.agents.llm_agent import Agent +from google.adk.tools.retrieval.files_retrieval import FilesRetrieval + +DATA_DIR = os.path.join(os.path.dirname(__file__), "data") + +files_retrieval = FilesRetrieval( + name="search_documents", + description=( + "Search through local ADK documentation files to find relevant" + " information. Use this tool when the user asks questions about ADK" + " features, architecture, or tools." + ), + input_dir=DATA_DIR, +) + +root_agent = Agent( + model="gemini-2.0-flash", + name="files_retrieval_agent", + instruction=( + "You are a helpful assistant that answers questions about the Agent" + " Development Kit (ADK). Use the search_documents tool to find" + " relevant information before answering. Always base your answers" + " on the retrieved documents." + ), + tools=[files_retrieval], +) diff --git a/contributing/samples/files_retrieval_agent/data/adk_overview.txt b/contributing/samples/files_retrieval_agent/data/adk_overview.txt new file mode 100644 index 0000000000..5e2f08e31a --- /dev/null +++ b/contributing/samples/files_retrieval_agent/data/adk_overview.txt @@ -0,0 +1,23 @@ +Agent Development Kit (ADK) Overview + +ADK is a Python framework for building AI agents powered by large language models. +It provides a structured way to create agents that can reason, use tools, and +collaborate with other agents. + +Key Features: +- Multi-agent orchestration with sequential, parallel, and loop patterns +- Built-in tool support including function tools, retrieval, and code execution +- Session management for maintaining conversation state +- Memory services for long-term recall across sessions +- Support for multiple LLM backends including Gemini, Anthropic, and Ollama + +Architecture: +The core abstractions are Agent, Runner, Tool, Session, and Memory. +The Runner orchestrates the reason-act loop, processing user turns and +streaming events back to the caller. + +Agent Types: +- LlmAgent: Main agent with LLM integration +- SequentialAgent: Runs sub-agents in sequence +- ParallelAgent: Runs sub-agents in parallel +- LoopAgent: Runs sub-agents in a loop diff --git a/contributing/samples/files_retrieval_agent/data/tools_guide.txt b/contributing/samples/files_retrieval_agent/data/tools_guide.txt new file mode 100644 index 0000000000..487e2f5e06 --- /dev/null +++ b/contributing/samples/files_retrieval_agent/data/tools_guide.txt @@ -0,0 +1,28 @@ +ADK Tools Guide + +Tools are capabilities that agents can invoke during their reasoning process. +ADK supports several types of tools: + +1. Function Tools + Define Python functions and pass them directly to an agent. + The function signature and docstring become the tool schema. + +2. Retrieval Tools + - FilesRetrieval: Index and search local files using embeddings. + Uses gemini-embedding-2-preview by default. + - VertexAiRagRetrieval: Search Vertex AI RAG corpora. + +3. Code Execution + Agents can generate and execute code in a sandboxed environment. + +4. Third-Party Tool Integration + - LangchainTool: Wraps LangChain tools for use in ADK. + - CrewaiTool: Wraps CrewAI tools for use in ADK. + +5. MCP Tools + Connect to Model Context Protocol servers for external tool access. + +Tool Configuration: +Tools can be configured with authentication, rate limiting, and custom +schemas. The ToolContext provides access to session state, artifacts, +and other contextual information during tool execution. From a231c729e6526a2035b4630796f3dc8a658bb203 Mon Sep 17 00:00:00 2001 From: nikkie Date: Mon, 16 Mar 2026 12:24:30 -0700 Subject: [PATCH 032/192] fix(models): update 429 docs link for Gemini Merge https://github.com/google/adk-python/pull/4818 **Please ensure you have read the [contribution guide](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) before creating a pull request.** ### Link to Issue or Description of Change **2. Or, if no issue exists, describe the change:** **Problem:** `src/google/adk/models/google_llm.py` includes a mitigation link for `429 RESOURCE_EXHAUSTED`, but the current URL points to a broken docs anchor: https://google.github.io/adk-docs/agents/models/#error-code-429-resource_exhausted image **Solution:** Update the link to the current Gemini-specific docs page so users are directed to the correct troubleshooting section: https://google.github.io/adk-docs/agents/models/google-gemini/#error-code-429-resource_exhausted image ### Testing Plan This is a small string-only fix for a broken documentation link. No unit tests were added because there does not appear to be existing test coverage for this message and the change does not affect runtime behavior beyond the emitted URL. **Unit Tests:** - [ ] I have added or updated unit tests for my change. - [ ] All unit tests pass locally. _Please include a summary of passed `pytest` results._ **Manual End-to-End (E2E) Tests:** Confirmed the updated URL in the source points to the intended documentation page/anchor. ### Checklist - [x] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document. - [x] I have performed a self-review of my own code. - [ ] I have commented my code, particularly in hard-to-understand areas. - [ ] I have added tests that prove my fix is effective or that my feature works. - [ ] New and existing unit tests pass locally with my changes. - [x] I have manually tested my changes end-to-end. - [ ] Any dependent changes have been merged and published in downstream modules. ### Additional context This change only updates the documentation URL shown in the `RESOURCE_EXHAUSTED` guidance message. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4818 from ftnext:fix-429-doc-link 1c533453a9428a3fcc6d22b97d64834f0a4f3acb PiperOrigin-RevId: 884581120 --- src/google/adk/models/google_llm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/google/adk/models/google_llm.py b/src/google/adk/models/google_llm.py index 23c9c27810..609de3d3d3 100644 --- a/src/google/adk/models/google_llm.py +++ b/src/google/adk/models/google_llm.py @@ -54,7 +54,7 @@ _RESOURCE_EXHAUSTED_POSSIBLE_FIX_MESSAGE = """ On how to mitigate this issue, please refer to: -https://google.github.io/adk-docs/agents/models/#error-code-429-resource_exhausted +https://google.github.io/adk-docs/agents/models/google-gemini/#error-code-429-resource_exhausted """ From e6476c9790eaa8f3a6ae8165351f8fe38bf9bd1e Mon Sep 17 00:00:00 2001 From: Divyansh Shukla Date: Mon, 16 Mar 2026 13:00:50 -0700 Subject: [PATCH 033/192] fix: Prevent uv.lock modifications in unittests.sh PiperOrigin-RevId: 884597343 --- scripts/unittests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/unittests.sh b/scripts/unittests.sh index 5c5dc348a6..ebacf24e45 100755 --- a/scripts/unittests.sh +++ b/scripts/unittests.sh @@ -102,7 +102,7 @@ for version in "${versions_to_run[@]}"; do # 3. perform the unit tests echo "Setting up test environment in $VENV_DIR..." - uv sync --extra test --active + uv sync --extra test --active --frozen echo "Running unit tests..." TEST_EXIT_CODE=0 From 8b973187df0ed3e703aced375aa5a6379076622a Mon Sep 17 00:00:00 2001 From: George Weale Date: Mon, 16 Mar 2026 16:01:46 -0700 Subject: [PATCH 034/192] test: Update LiteLLM finish_reason unmapped test The previous test for unmapped LiteLLM finish_reason values was ineffective because LiteLLM's internal models normalize certain values (e.g., "eos" to "stop") before ADK processes them Co-authored-by: George Weale PiperOrigin-RevId: 884678119 --- tests/unittests/models/test_litellm.py | 33 ++++++++++++++++---------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/tests/unittests/models/test_litellm.py b/tests/unittests/models/test_litellm.py index 8fda3d98d4..7d27697306 100644 --- a/tests/unittests/models/test_litellm.py +++ b/tests/unittests/models/test_litellm.py @@ -22,6 +22,7 @@ import unittest from unittest.mock import ANY from unittest.mock import AsyncMock +from unittest.mock import MagicMock from unittest.mock import Mock import warnings @@ -4388,19 +4389,25 @@ async def test_finish_reason_unknown_maps_to_other( mock_acompletion, lite_llm_instance ): """Test that unmapped finish_reason values map to FinishReason.OTHER.""" - mock_response = ModelResponse( - choices=[ - Choices( - message=ChatCompletionAssistantMessage( - role="assistant", - content="Test response", - ), - # LiteLLM validates finish_reason to a known set. Use a value that - # LiteLLM accepts but ADK does not explicitly map. - finish_reason="eos", - ) - ] - ) + # LiteLLM's Choices model normalizes finish_reason values (e.g., "eos" -> + # "stop") before ADK processes them. To test ADK's own fallback mapping, + # construct a mock response that bypasses LiteLLM's normalization and + # returns a raw unmapped finish_reason string. + mock_choice = MagicMock() + mock_choice.get = lambda key, default=None: { + "message": ChatCompletionAssistantMessage( + role="assistant", + content="Test response", + ), + "finish_reason": "totally_unknown_reason", + }.get(key, default) + + mock_response = MagicMock() + mock_response.get = lambda key, default=None: { + "choices": [mock_choice], + }.get(key, default) + mock_response.model = "test_model" + mock_acompletion.return_value = mock_response llm_request = LlmRequest( From 22fc332c95b7deca95240b33406513bcc95c6e03 Mon Sep 17 00:00:00 2001 From: Xuan Yang Date: Mon, 16 Mar 2026 16:17:54 -0700 Subject: [PATCH 035/192] fix: Support resolving string annotations for `find_context_parameter` Co-authored-by: Xuan Yang PiperOrigin-RevId: 884686010 --- src/google/adk/utils/context_utils.py | 13 ++++++++++- tests/unittests/utils/test_context_utils.py | 24 +++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/google/adk/utils/context_utils.py b/src/google/adk/utils/context_utils.py index cb68d800c4..c0fde29ae4 100644 --- a/src/google/adk/utils/context_utils.py +++ b/src/google/adk/utils/context_utils.py @@ -22,6 +22,7 @@ from contextlib import aclosing import inspect +import typing from typing import Any from typing import Callable from typing import get_args @@ -80,7 +81,17 @@ def find_context_parameter(func: Callable[..., Any]) -> str | None: signature = inspect.signature(func) except (ValueError, TypeError): return None + # Resolve string annotations (e.g., 'Context') + try: + type_hints = typing.get_type_hints(func) + except Exception: + # get_type_hints can fail for various reasons (e.g., unresolvable forward + # references). In such cases, we fall back to inspecting the parameter + # annotations directly. + type_hints = {} + for name, param in signature.parameters.items(): - if _is_context_type(param.annotation): + annotation = type_hints.get(name, param.annotation) + if _is_context_type(annotation): return name return None diff --git a/tests/unittests/utils/test_context_utils.py b/tests/unittests/utils/test_context_utils.py index a5e2d6566d..56583b9c6d 100644 --- a/tests/unittests/utils/test_context_utils.py +++ b/tests/unittests/utils/test_context_utils.py @@ -33,6 +33,30 @@ def my_tool(query: str, ctx: Context) -> str: assert find_context_parameter(my_tool) == 'ctx' + def test_find_context_parameter_with_string_annotation(self): + """Test detection of string annotation 'Context'.""" + + def my_tool(query: str, ctx: 'Context') -> str: + return query + + assert find_context_parameter(my_tool) == 'ctx' + + def test_find_context_parameter_with_string_tool_context(self): + """Test detection of string annotation 'ToolContext'.""" + + def my_tool(query: str, ctx: 'ToolContext') -> str: + return query + + assert find_context_parameter(my_tool) == 'ctx' + + def test_find_context_parameter_with_string_optional_context(self): + """Test detection of string annotation 'Optional[Context]'.""" + + def my_tool(query: str, ctx: 'Optional[Context]' = None) -> str: + return query + + assert find_context_parameter(my_tool) == 'ctx' + def test_find_context_parameter_with_tool_context_type(self): """Test detection of ToolContext type annotation.""" From 28618a8dcbee9c4faeec6653a5d978d0330f39bb Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 17 Mar 2026 11:13:56 -0700 Subject: [PATCH 036/192] feat: Add Spanner Admin Toolset This change introduces a new `SpannerAdminToolset` with tools for managing Google Cloud Spanner resources. The toolset includes functions to list and get details of Spanner instances and instance configurations, and to create, list databases. The new toolset is marked as experimental. Unit tests for the new admin tools are also added PiperOrigin-RevId: 885116111 --- contributing/samples/spanner_admin/README.md | 116 ++++++ .../samples/spanner_admin/__init__.py | 15 + contributing/samples/spanner_admin/agent.py | 77 ++++ src/google/adk/features/_feature_registry.py | 4 + src/google/adk/tools/spanner/__init__.py | 2 + src/google/adk/tools/spanner/admin_tool.py | 372 +++++++++++++++++ src/google/adk/tools/spanner/admin_toolset.py | 110 +++++ .../tools/spanner/test_admin_tool.py | 384 ++++++++++++++++++ .../tools/spanner/test_admin_toolset.py | 91 +++++ 9 files changed, 1171 insertions(+) create mode 100644 contributing/samples/spanner_admin/README.md create mode 100644 contributing/samples/spanner_admin/__init__.py create mode 100644 contributing/samples/spanner_admin/agent.py create mode 100644 src/google/adk/tools/spanner/admin_tool.py create mode 100644 src/google/adk/tools/spanner/admin_toolset.py create mode 100644 tests/unittests/tools/spanner/test_admin_tool.py create mode 100644 tests/unittests/tools/spanner/test_admin_toolset.py diff --git a/contributing/samples/spanner_admin/README.md b/contributing/samples/spanner_admin/README.md new file mode 100644 index 0000000000..eadfd1fe25 --- /dev/null +++ b/contributing/samples/spanner_admin/README.md @@ -0,0 +1,116 @@ +# Spanner Admin Tools Sample + +## Introduction + +This sample agent demonstrates the Spanner first-party tools in ADK, +distributed via the `google.adk.tools.spanner` module. These tools include: + +1. `list_instances` + + Fetches Spanner instance names present in a project. + +1. `get_instance` + + Fetches details of a given Spanner instance. + +1. `create_database` + + Creates a Spanner database within a given instance and project. + +1. `list_databases` + + Fetches Spanner database names present in an instance. + +1. `create_instance` + + Creates a Spanner instance within a GCP project. + +1. `list_instance_configs` + + Fetches Spanner instance configurations available for a project. + +1. `get_instance_config` + + Fetches details of a Spanner instance configuration. + +## How to use + +Set up environment variables in your `.env` file for using +[Google AI Studio](https://google.github.io/adk-docs/get-started/quickstart/#gemini---google-ai-studio) +or +[Google Cloud Vertex AI](https://google.github.io/adk-docs/get-started/quickstart/#gemini---google-cloud-vertex-ai) +for the LLM service for your agent. For example, for using Google AI Studio you +would set: + +* GOOGLE_GENAI_USE_VERTEXAI=FALSE +* GOOGLE_API_KEY={your api key} + +### With Application Default Credentials + +This mode is useful for quick development when the agent builder is the only +user interacting with the agent. The tools are run with these credentials. + +1. Create application default credentials on the machine where the agent would +be running by following https://cloud.google.com/docs/authentication/provide-credentials-adc. + +1. Set `CREDENTIALS_TYPE=None` in `agent.py` + +1. Run the agent + +### With Service Account Keys + +This mode is useful for quick development when the agent builder wants to run +the agent with service account credentials. The tools are run with these +credentials. + +1. Create service account key by following https://cloud.google.com/iam/docs/service-account-creds#user-managed-keys. + +1. Set `CREDENTIALS_TYPE=AuthCredentialTypes.SERVICE_ACCOUNT` in `agent.py` + +1. Download the key file and replace `"service_account_key.json"` with the path + +1. Run the agent + +### With Interactive OAuth + +1. Follow +https://developers.google.com/identity/protocols/oauth2#1.-obtain-oauth-2.0-credentials-from-the-dynamic_data.setvar.console_name. +to get your client id and client secret. Be sure to choose "web" as your client +type. + +1. Follow https://developers.google.com/workspace/guides/configure-oauth-consent + to add scope "https://www.googleapis.com/auth/spanner.data" and + "https://www.googleapis.com/auth/spanner.admin" as declaration, this is used + for review purpose. + +1. Follow + https://developers.google.com/identity/protocols/oauth2/web-server#creatingcred + to add http://localhost/dev-ui/ to "Authorized redirect URIs". + + Note: localhost here is just a hostname that you use to access the dev ui, + replace it with the actual hostname you use to access the dev ui. + +1. For 1st run, allow popup for localhost in Chrome. + +1. Configure your `.env` file to add two more variables before running the + agent: + + * OAUTH_CLIENT_ID={your client id} + * OAUTH_CLIENT_SECRET={your client secret} + + Note: don't create a separate .env, instead put it to the same .env file that + stores your Vertex AI or Dev ML credentials + +1. Set `CREDENTIALS_TYPE=AuthCredentialTypes.OAUTH2` in `agent.py` and run the + agent + +## Sample prompts + +* Show me all Spanner instances in my project. +* Give me details about the 'my-instance' Spanner instance. +* List all databases in instance 'my-instance'. +* Create a new Spanner database named 'my-db' in instance 'my-instance'. +* List all instance configurations available for my project. +* Get details about 'regional-us-central1' configuration. +* Create a Spanner instance 'new-instance' with 'regional-us-central1' config and name 'new-instance'. + diff --git a/contributing/samples/spanner_admin/__init__.py b/contributing/samples/spanner_admin/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/spanner_admin/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/spanner_admin/agent.py b/contributing/samples/spanner_admin/agent.py new file mode 100644 index 0000000000..6129207e87 --- /dev/null +++ b/contributing/samples/spanner_admin/agent.py @@ -0,0 +1,77 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +from google.adk.agents.llm_agent import LlmAgent +from google.adk.auth.auth_credential import AuthCredentialTypes +from google.adk.tools.spanner.admin_toolset import SpannerAdminToolset +from google.adk.tools.spanner.spanner_credentials import SpannerCredentialsConfig +import google.auth + +# Define an appropriate credential type +# Set to None to use the application default credentials (ADC) for a quick +# development. +CREDENTIALS_TYPE = None + +if CREDENTIALS_TYPE == AuthCredentialTypes.OAUTH2: + # Initialize the tools to do interactive OAuth + # The environment variables OAUTH_CLIENT_ID and OAUTH_CLIENT_SECRET + # must be set + credentials_config = SpannerCredentialsConfig( + client_id=os.getenv("OAUTH_CLIENT_ID"), + client_secret=os.getenv("OAUTH_CLIENT_SECRET"), + scopes=[ + "https://www.googleapis.com/auth/spanner.admin", + "https://www.googleapis.com/auth/spanner.data", + ], + ) +elif CREDENTIALS_TYPE == AuthCredentialTypes.SERVICE_ACCOUNT: + # Initialize the tools to use the credentials in the service account key. + # If this flow is enabled, make sure to replace the file path with your own + # service account key file + # https://cloud.google.com/iam/docs/service-account-creds#user-managed-keys + creds, _ = google.auth.load_credentials_from_file("service_account_key.json") + credentials_config = SpannerCredentialsConfig(credentials=creds) +else: + # Initialize the tools to use the application default credentials. + # https://cloud.google.com/docs/authentication/provide-credentials-adc + application_default_credentials, _ = google.auth.default() + credentials_config = SpannerCredentialsConfig( + credentials=application_default_credentials + ) + +spanner_admin_toolset = SpannerAdminToolset( + credentials_config=credentials_config, +) + +# The variable name `root_agent` determines what your root agent is for the +# debug CLI +root_agent = LlmAgent( + model="gemini-2.5-flash", + name="spanner_admin_agent", + description=( + "Agent to perform Spanner admin tasks and answer questions about" + " Spanner databases." + ), + instruction="""\ + You are a Spanner admin agent with access to several Spanner admin tools. + Make use of those tools to answer user's questions and perform admin + tasks like listing instances or databases. + """, + tools=[ + # Use tools from Spanner admin toolset. + spanner_admin_toolset, + ], +) diff --git a/src/google/adk/features/_feature_registry.py b/src/google/adk/features/_feature_registry.py index 08f58adba9..61759245f2 100644 --- a/src/google/adk/features/_feature_registry.py +++ b/src/google/adk/features/_feature_registry.py @@ -45,6 +45,7 @@ class FeatureName(str, Enum): PUBSUB_TOOLSET = "PUBSUB_TOOLSET" SKILL_TOOLSET = "SKILL_TOOLSET" SPANNER_TOOLSET = "SPANNER_TOOLSET" + SPANNER_ADMIN_TOOLSET = "SPANNER_ADMIN_TOOLSET" SPANNER_TOOL_SETTINGS = "SPANNER_TOOL_SETTINGS" SPANNER_VECTOR_STORE = "SPANNER_VECTOR_STORE" TOOL_CONFIG = "TOOL_CONFIG" @@ -136,6 +137,9 @@ class FeatureConfig: FeatureName.SKILL_TOOLSET: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), + FeatureName.SPANNER_ADMIN_TOOLSET: FeatureConfig( + FeatureStage.EXPERIMENTAL, default_on=True + ), FeatureName.SPANNER_TOOLSET: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), diff --git a/src/google/adk/tools/spanner/__init__.py b/src/google/adk/tools/spanner/__init__.py index e41b9b7986..533714b0be 100644 --- a/src/google/adk/tools/spanner/__init__.py +++ b/src/google/adk/tools/spanner/__init__.py @@ -31,10 +31,12 @@ """ from . import spanner_credentials +from .admin_toolset import SpannerAdminToolset from .spanner_toolset import SpannerToolset SpannerCredentialsConfig = spanner_credentials.SpannerCredentialsConfig __all__ = [ "SpannerToolset", + "SpannerAdminToolset", "SpannerCredentialsConfig", ] diff --git a/src/google/adk/tools/spanner/admin_tool.py b/src/google/adk/tools/spanner/admin_tool.py new file mode 100644 index 0000000000..2f7269945e --- /dev/null +++ b/src/google/adk/tools/spanner/admin_tool.py @@ -0,0 +1,372 @@ +# Copyright 2026 Google LLC +# +"""Spanner Admin Tool.""" + +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from __future__ import annotations + +from typing import Any + +from google.auth.credentials import Credentials +from google.cloud import spanner_admin_instance_v1 +from google.cloud.spanner_admin_database_v1 import DatabaseAdminAsyncClient +from google.cloud.spanner_admin_instance_v1 import InstanceAdminAsyncClient + + +async def list_instances( + project_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """List Spanner instances within a project. + + Args: + project_id: The Google Cloud project id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with the status and a list of the Spanner instance IDs. + + Examples: + >>> await list_instances("my_project", credentials) + { + "status": "SUCCESS", + "results": [ + "instance_1", + "instance_2" + ] + } + """ + try: + instance_admin_api = InstanceAdminAsyncClient(credentials=credentials) + instances = [] + async for instance in await instance_admin_api.list_instances( + parent=f"projects/{project_id}" + ): + instances.append(instance.name.split("/")[-1]) + + return {"status": "SUCCESS", "results": instances} + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def get_instance( + project_id: str, + *, + instance_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """Get details of a Spanner instance. + + Args: + project_id: The Google Cloud project id. + instance_id: The Spanner instance id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with the status and the Spanner instance details. + + Examples: + >>> await get_instance(project_id="my_project", instance_id="my_instance", + ... credentials=credentials) + { + "status": "SUCCESS", + "results": { + "instance_id": "my_instance", + "display_name": "My Instance", + "config": "projects/my_project/instanceConfigs/regional-us-central1", + "node_count": 1, + "processing_units": 1000, + "labels": {"env": "prod"} + } + } + """ + try: + instance_admin_api = InstanceAdminAsyncClient(credentials=credentials) + instance_path = instance_admin_api.instance_path(project_id, instance_id) + instance = await instance_admin_api.get_instance(name=instance_path) + + return { + "status": "SUCCESS", + "results": { + "instance_id": instance_id, + "display_name": instance.display_name, + "config": instance.config, + "node_count": instance.node_count, + "processing_units": instance.processing_units, + "labels": dict(instance.labels), + }, + } + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def list_instance_configs( + project_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """List Spanner instance configs available for a project. + + Args: + project_id: The Google Cloud project id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with a list of Spanner instance config IDs. + + Examples: + >>> await list_instance_configs("my_project", credentials) + { + "status": "SUCCESS", + "results": [ + "regional-us-central1", + "nam3" + ] + } + """ + try: + instance_admin_api = InstanceAdminAsyncClient(credentials=credentials) + configs = await instance_admin_api.list_instance_configs( + parent=instance_admin_api.common_project_path(project_id) + ) + config_ids = [config.name.split("/")[-1] async for config in configs] + + return {"status": "SUCCESS", "results": config_ids} + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def get_instance_config( + project_id: str, + *, + config_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """Get details of a Spanner instance config. + + Args: + project_id: The Google Cloud project id. + config_id: The Spanner instance config id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with the status and the Spanner instance config details. + + Examples: + >>> await get_instance_config(project_id="my_project", + ... config_id="regional-us-central1", credentials=credentials) + { + "status": "SUCCESS", + "results": { + "name": "projects/my_project/instanceConfigs/regional-us-central1", + "display_name": "us-central1", + "replicas": [ + {'location': 'us-central1', 'type': 'READ_WRITE', + 'default_leader_location': True} + ], + "labels": {}, + } + } + """ + try: + instance_admin_api = InstanceAdminAsyncClient(credentials=credentials) + config_name = instance_admin_api.instance_config_path(project_id, config_id) + config = await instance_admin_api.get_instance_config(name=config_name) + + replicas = [ + { + "location": r.location, + "type": ( + spanner_admin_instance_v1.types.ReplicaInfo.ReplicaType( + r.type + ).name + ), + "default_leader_location": r.default_leader_location, + } + for r in config.replicas + ] + + return { + "status": "SUCCESS", + "results": { + "name": config.name, + "display_name": config.display_name, + "replicas": replicas, + "labels": dict(config.labels), + }, + } + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def create_instance( + project_id: str, + *, + instance_id: str, + config_id: str, + display_name: str, + credentials: Credentials, + nodes: int = 1, +) -> dict[str, Any]: + """Create a Spanner instance. + + Args: + project_id: The Google Cloud project id. + instance_id: The Spanner instance id to create. + config_id: The instance config id, e.g. regional-us-central1. + display_name: The display name for the instance. + credentials: The credentials to use for the request. + nodes: Number of nodes for the instance. Defaults to 1. + + Returns: + dict: Dictionary with the status and result of instance creation. + + Examples: + >>> await create_instance(project_id="my_project", + instance_id="my_instance", + ... config_id="regional-us-central1", display_name="My Instance", + credentials=credentials) + { + "status": "SUCCESS", + "results": "Instance my_instance created successfully." + } + """ + try: + instance_admin_api = InstanceAdminAsyncClient(credentials=credentials) + instance_config = instance_admin_api.instance_config_path( + project_id, config_id + ) + instance = spanner_admin_instance_v1.types.Instance( + display_name=display_name, + config=instance_config, + node_count=nodes, + ) + operation = await instance_admin_api.create_instance( + parent=instance_admin_api.common_project_path(project_id), + instance_id=instance_id, + instance=instance, + ) + await operation.result(timeout=300) # waits for completion + + return { + "status": "SUCCESS", + "results": f"Instance {instance_id} created successfully.", + } + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def list_databases( + project_id: str, + *, + instance_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """List Spanner databases within an instance. + + Args: + project_id: The Google Cloud project id. + instance_id: The Spanner instance id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with the status and a list of the Spanner database IDs. + + Examples: + >>> await list_databases(project_id="my_project", + ... instance_id="my_instance", credentials=credentials) + { + "status": "SUCCESS", + "results": [ + "database_1", + "database_2" + ] + } + """ + try: + database_admin_api = DatabaseAdminAsyncClient(credentials=credentials) + databases = await database_admin_api.list_databases( + parent=database_admin_api.instance_path(project_id, instance_id) + ) + database_ids = [ + database.name.split("/")[-1] async for database in databases + ] + + return {"status": "SUCCESS", "results": database_ids} + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } + + +async def create_database( + project_id: str, + *, + instance_id: str, + database_id: str, + credentials: Credentials, +) -> dict[str, Any]: + """Create a Spanner database. + + Args: + project_id: The Google Cloud project id. + instance_id: The Spanner instance id. + database_id: The Spanner database id. + credentials: The credentials to use for the request. + + Returns: + dict: Dictionary with result of database creation. + + Examples: + >>> await create_database(project_id="my_project", + instance_id="my_instance", + ... database_id="my_database", credentials=credentials) + { + "status": "SUCCESS", + } + """ + try: + database_admin_api = DatabaseAdminAsyncClient(credentials=credentials) + operation = await database_admin_api.create_database( + parent=database_admin_api.instance_path(project_id, instance_id), + create_statement=f"CREATE DATABASE `{database_id}`", + ) + # Wait for the operation to complete (default timeout 5 minutes). + # Result on success is + # google.cloud.spanner_admin_database_v1.types.Database + await operation.result(timeout=300) + + return { + "status": "SUCCESS", + } + except Exception as ex: + return { + "status": "ERROR", + "error_details": repr(ex), + } diff --git a/src/google/adk/tools/spanner/admin_toolset.py b/src/google/adk/tools/spanner/admin_toolset.py new file mode 100644 index 0000000000..4989a13440 --- /dev/null +++ b/src/google/adk/tools/spanner/admin_toolset.py @@ -0,0 +1,110 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from google.adk.agents.readonly_context import ReadonlyContext +from google.adk.tools.spanner import admin_tool +from typing_extensions import override + +from ...features import experimental +from ...features import FeatureName +from ...tools.base_tool import BaseTool +from ...tools.base_toolset import BaseToolset +from ...tools.base_toolset import ToolPredicate +from ...tools.google_tool import GoogleTool +from .settings import SpannerToolSettings +from .spanner_credentials import SpannerCredentialsConfig + +DEFAULT_SPANNER_TOOL_NAME_PREFIX = "spanner" + + +@experimental(FeatureName.SPANNER_ADMIN_TOOLSET) +class SpannerAdminToolset(BaseToolset): + """A toolset containing tools for interacting with Spanner admin tasks. + + The tool names are: + - spanner_list_instances + - spanner_get_instance + - spanner_create_database + - spanner_list_databases + - spanner_create_instance + - spanner_list_instance_configs + - spanner_get_instance_config + """ + + def __init__( + self, + *, + tool_filter: ToolPredicate | list[str] | None = None, + credentials_config: SpannerCredentialsConfig | None = None, + spanner_tool_settings: SpannerToolSettings | None = None, + ): + super().__init__( + tool_filter=tool_filter, + tool_name_prefix=DEFAULT_SPANNER_TOOL_NAME_PREFIX, + ) + self._credentials_config = credentials_config + self._tool_settings = ( + spanner_tool_settings + if spanner_tool_settings + else SpannerToolSettings() + ) + + def _is_tool_selected( + self, tool: BaseTool, readonly_context: ReadonlyContext + ) -> bool: + if self.tool_filter is None: + return True + + if isinstance(self.tool_filter, ToolPredicate): + return self.tool_filter(tool, readonly_context) + + if isinstance(self.tool_filter, list): + return tool.name in self.tool_filter + + return False + + @override + async def get_tools( + self, readonly_context: ReadonlyContext | None = None + ) -> list[BaseTool]: + """Get tools from the toolset.""" + all_tools = [ + GoogleTool( + func=func, + credentials_config=self._credentials_config, + tool_settings=self._tool_settings, + ) + for func in [ + # Admin tools + admin_tool.create_database, + admin_tool.list_instances, + admin_tool.get_instance, + admin_tool.list_databases, + admin_tool.create_instance, + admin_tool.list_instance_configs, + admin_tool.get_instance_config, + ] + ] + + return [ + tool + for tool in all_tools + if self._is_tool_selected(tool, readonly_context) + ] + + @override + async def close(self): + pass diff --git a/tests/unittests/tools/spanner/test_admin_tool.py b/tests/unittests/tools/spanner/test_admin_tool.py new file mode 100644 index 0000000000..288cd8338e --- /dev/null +++ b/tests/unittests/tools/spanner/test_admin_tool.py @@ -0,0 +1,384 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from unittest.mock import create_autospec +from unittest.mock import patch + +from google.adk.tools.spanner import admin_tool +from google.api_core.operation_async import AsyncOperation +from google.auth.credentials import Credentials +from google.cloud import spanner_admin_database_v1 +from google.cloud import spanner_admin_instance_v1 +import pytest + + +class AsyncListIterator: + """Asynchronous iterator for a list.""" + + def __init__(self, list_): + self._iter = iter(list_) + + def __aiter__(self): + return self + + async def __anext__(self): + try: + return next(self._iter) + except StopIteration as exc: + raise StopAsyncIteration from exc + + +@pytest.fixture +def mock_credentials(): + return create_autospec(Credentials, instance=True) + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_list_instances_success( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the list_instances function in admin_tool.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance1 = create_autospec( + spanner_admin_instance_v1.types.Instance, instance=True + ) + mock_instance1.name = "projects/test-project/instances/test-instance-1" + mock_instance2 = create_autospec( + spanner_admin_instance_v1.types.Instance, instance=True + ) + mock_instance2.name = "projects/test-project/instances/test-instance-2" + mock_instance_admin_client.list_instances.return_value = AsyncListIterator([ + mock_instance1, + mock_instance2, + ]) + + result = await admin_tool.list_instances("test-project", mock_credentials) + + assert result == { + "status": "SUCCESS", + "results": ["test-instance-1", "test-instance-2"], + } + mock_instance_admin_client.list_instances.assert_called_once() + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_list_instances_error( + mock_instance_admin_client_cls, mock_credentials +): + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.list_instances.side_effect = Exception( + "test error" + ) + result = await admin_tool.list_instances("test-project", mock_credentials) + assert result == { + "status": "ERROR", + "error_details": "Exception('test error')", + } + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_get_instance_success( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the get_instance function in admin_tool.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance = create_autospec( + spanner_admin_instance_v1.types.Instance, instance=True + ) + mock_instance.display_name = "Test Instance" + mock_instance.config = ( + "projects/test-project/instanceConfigs/regional-us-central1" + ) + mock_instance.node_count = 1 + mock_instance.processing_units = 1000 + mock_instance.labels = {"env": "test"} + mock_instance_admin_client.get_instance.return_value = mock_instance + + result = await admin_tool.get_instance( + project_id="test-project", + instance_id="test-instance", + credentials=mock_credentials, + ) + + assert result == { + "status": "SUCCESS", + "results": { + "instance_id": "test-instance", + "display_name": "Test Instance", + "config": ( + "projects/test-project/instanceConfigs/regional-us-central1" + ), + "node_count": 1, + "processing_units": 1000, + "labels": {"env": "test"}, + }, + } + mock_instance_admin_client.instance_path.assert_called_once_with( + "test-project", "test-instance" + ) + mock_instance_admin_client.get_instance.assert_called_once() + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_get_instance_error( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the get_instance function in admin_tool when an error occurs.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.get_instance.side_effect = Exception("test error") + result = await admin_tool.get_instance( + project_id="test-project", + instance_id="test-instance", + credentials=mock_credentials, + ) + assert result == { + "status": "ERROR", + "error_details": "Exception('test error')", + } + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_list_instance_configs_success( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the list_instance_configs function in admin_tool.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.common_project_path.return_value = ( + "projects/test-project" + ) + mock_config1 = create_autospec( + spanner_admin_instance_v1.types.InstanceConfig, instance=True + ) + mock_config1.name = "projects/test-project/instanceConfigs/config-1" + mock_config2 = create_autospec( + spanner_admin_instance_v1.types.InstanceConfig, instance=True + ) + mock_config2.name = "projects/test-project/instanceConfigs/config-2" + mock_instance_admin_client.list_instance_configs.return_value = ( + AsyncListIterator([ + mock_config1, + mock_config2, + ]) + ) + + result = await admin_tool.list_instance_configs( + "test-project", mock_credentials + ) + + assert result == {"status": "SUCCESS", "results": ["config-1", "config-2"]} + mock_instance_admin_client.common_project_path.assert_called_once_with( + "test-project" + ) + mock_instance_admin_client.list_instance_configs.assert_called_once_with( + parent="projects/test-project" + ) + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_get_instance_config_success( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the get_instance_config function in admin_tool.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.instance_config_path.return_value = ( + "projects/test-project/instanceConfigs/config-1" + ) + mock_config = create_autospec( + spanner_admin_instance_v1.types.InstanceConfig, instance=True + ) + mock_config.name = "projects/test-project/instanceConfigs/config-1" + mock_config.display_name = "Config 1" + mock_config.labels = {"env": "test"} + mock_replica = create_autospec( + spanner_admin_instance_v1.types.ReplicaInfo, instance=True + ) + mock_replica.location = "us-central1" + mock_replica.type = 1 # READ_WRITE + mock_replica.default_leader_location = True + mock_config.replicas = [mock_replica] + mock_instance_admin_client.get_instance_config.return_value = mock_config + + result = await admin_tool.get_instance_config( + project_id="test-project", + config_id="config-1", + credentials=mock_credentials, + ) + + assert result == { + "status": "SUCCESS", + "results": { + "name": "projects/test-project/instanceConfigs/config-1", + "display_name": "Config 1", + "replicas": [{ + "location": "us-central1", + "type": "READ_WRITE", + "default_leader_location": True, + }], + "labels": {"env": "test"}, + }, + } + mock_instance_admin_client.instance_config_path.assert_called_once_with( + "test-project", "config-1" + ) + mock_instance_admin_client.get_instance_config.assert_called_once_with( + name="projects/test-project/instanceConfigs/config-1" + ) + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_get_instance_config_error( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the get_instance_config function when an error occurs.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.get_instance_config.side_effect = Exception( + "test error" + ) + result = await admin_tool.get_instance_config( + project_id="test-project", + config_id="config-1", + credentials=mock_credentials, + ) + assert result == { + "status": "ERROR", + "error_details": "Exception('test error')", + } + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.InstanceAdminAsyncClient", + autospec=True, +) +async def test_create_instance_success( + mock_instance_admin_client_cls, mock_credentials +): + """Tests the create_instance function in admin_tool.""" + mock_instance_admin_client = mock_instance_admin_client_cls.return_value + mock_instance_admin_client.instance_config_path.return_value = ( + "projects/test-project/instanceConfigs/config-1" + ) + mock_instance_admin_client.common_project_path.return_value = ( + "projects/test-project" + ) + mock_op = create_autospec(AsyncOperation, instance=True) + mock_instance_admin_client.create_instance.return_value = mock_op + result = await admin_tool.create_instance( + project_id="test-project", + instance_id="test-instance", + config_id="config-1", + display_name="Test Instance", + credentials=mock_credentials, + ) + assert result == { + "status": "SUCCESS", + "results": "Instance test-instance created successfully.", + } + mock_instance_admin_client.create_instance.assert_called_once() + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.DatabaseAdminAsyncClient", + autospec=True, +) +async def test_list_databases_success( + mock_db_admin_client_cls, mock_credentials +): + """Tests the list_databases function in admin_tool.""" + mock_db_admin_client = mock_db_admin_client_cls.return_value + mock_db_admin_client.instance_path.return_value = ( + "projects/test-project/instances/test-instance" + ) + mock_db1 = create_autospec( + spanner_admin_database_v1.types.Database, instance=True + ) + mock_db1.name = "projects/test-project/instances/test-instance/databases/db-1" + mock_db2 = create_autospec( + spanner_admin_database_v1.types.Database, instance=True + ) + mock_db2.name = "projects/test-project/instances/test-instance/databases/db-2" + mock_db_admin_client.list_databases.return_value = AsyncListIterator([ + mock_db1, + mock_db2, + ]) + + result = await admin_tool.list_databases( + project_id="test-project", + instance_id="test-instance", + credentials=mock_credentials, + ) + + assert result == {"status": "SUCCESS", "results": ["db-1", "db-2"]} + mock_db_admin_client.instance_path.assert_called_once_with( + "test-project", "test-instance" + ) + mock_db_admin_client.list_databases.assert_called_once_with( + parent="projects/test-project/instances/test-instance" + ) + + +@pytest.mark.asyncio +@patch( + "google.adk.tools.spanner.admin_tool.DatabaseAdminAsyncClient", + autospec=True, +) +async def test_create_database_success( + mock_db_admin_client_cls, mock_credentials +): + """Tests the create_database function in admin_tool.""" + mock_db_admin_client = mock_db_admin_client_cls.return_value + mock_db_admin_client.instance_path.return_value = ( + "projects/test-project/instances/test-instance" + ) + mock_op = create_autospec(AsyncOperation, instance=True) + mock_db_admin_client.create_database.return_value = mock_op + result = await admin_tool.create_database( + project_id="test-project", + instance_id="test-instance", + database_id="db-1", + credentials=mock_credentials, + ) + assert result == { + "status": "SUCCESS", + } + mock_db_admin_client.create_database.assert_called_once() diff --git a/tests/unittests/tools/spanner/test_admin_toolset.py b/tests/unittests/tools/spanner/test_admin_toolset.py new file mode 100644 index 0000000000..d49c9c3a8d --- /dev/null +++ b/tests/unittests/tools/spanner/test_admin_toolset.py @@ -0,0 +1,91 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from google.adk.tools.google_tool import GoogleTool +from google.adk.tools.spanner.admin_toolset import SpannerAdminToolset +from google.adk.tools.spanner.settings import SpannerToolSettings +from google.adk.tools.spanner.spanner_credentials import SpannerCredentialsConfig +import pytest + + +@pytest.mark.asyncio +async def test_spanner_toolset_tools_default(): + """Test Admin Spanner toolset. + + This test verifies the behavior of the Spanner admin toolset when no filter is + specified. + """ + credentials_config = SpannerCredentialsConfig( + client_id="abc", client_secret="def" + ) + toolset = SpannerAdminToolset(credentials_config=credentials_config) + assert isinstance(toolset._tool_settings, SpannerToolSettings) # pylint: disable=protected-access + assert toolset._tool_settings.__dict__ == SpannerToolSettings().__dict__ # pylint: disable=protected-access + tools = await toolset.get_tools() + assert tools is not None + + assert len(tools) == 7 + assert all([isinstance(tool, GoogleTool) for tool in tools]) + + expected_tool_names = set([ + "list_instances", + "get_instance", + "list_databases", + "create_instance", + "create_database", + "list_instance_configs", + "get_instance_config", + ]) + actual_tool_names = set([tool.name for tool in tools]) + assert actual_tool_names == expected_tool_names + + +@pytest.mark.parametrize( + "selected_tools", + [ + pytest.param( + ["list_instances"], + id="list-instances", + ) + ], +) +@pytest.mark.asyncio +async def test_spanner_admin_toolset_selective(selected_tools): + """Test selective Admin Spanner toolset. + + This test verifies the behavior of the Spanner admin toolset when a filter is + specified. + + Args: + selected_tools: A list of tool names to filter. + """ + credentials_config = SpannerCredentialsConfig( + client_id="abc", client_secret="def" + ) + toolset = SpannerAdminToolset( + credentials_config=credentials_config, + tool_filter=selected_tools, + spanner_tool_settings=SpannerToolSettings(), + ) + tools = await toolset.get_tools() + assert tools is not None + + assert len(tools) == len(selected_tools) + assert all([isinstance(tool, GoogleTool) for tool in tools]) + + expected_tool_names = set(selected_tools) + actual_tool_names = set([tool.name for tool in tools]) + assert actual_tool_names == expected_tool_names From b318eee979b1625d3d23ad98825c88f54016a12f Mon Sep 17 00:00:00 2001 From: George Weale Date: Tue, 17 Mar 2026 11:24:04 -0700 Subject: [PATCH 037/192] fix: Store and retrieve usage_metadata in Vertex AI custom_metadata The Vertex AI session service does not natively support persisting usage_metadata. This change serializes usage_metadata into the custom_metadata field under the key '_usage_metadata' when appending events and deserializes it back when retrieving events. This allows usage information to be round-tripped through the Vertex AI session service. Co-authored-by: George Weale PiperOrigin-RevId: 885121070 --- .../adk/sessions/vertex_ai_session_service.py | 58 ++++++-- .../test_vertex_ai_session_service.py | 128 ++++++++++++++++++ 2 files changed, 178 insertions(+), 8 deletions(-) diff --git a/src/google/adk/sessions/vertex_ai_session_service.py b/src/google/adk/sessions/vertex_ai_session_service.py index 8cb7109ece..9e5c9bb2ec 100644 --- a/src/google/adk/sessions/vertex_ai_session_service.py +++ b/src/google/adk/sessions/vertex_ai_session_service.py @@ -42,6 +42,20 @@ logger = logging.getLogger('google_adk.' + __name__) +_COMPACTION_CUSTOM_METADATA_KEY = '_compaction' +_USAGE_METADATA_CUSTOM_METADATA_KEY = '_usage_metadata' + + +def _set_internal_custom_metadata( + metadata_dict: dict[str, Any], *, key: str, value: dict[str, Any] +) -> None: + """Stores internal metadata alongside user-provided custom metadata.""" + existing_custom_metadata = metadata_dict.get('custom_metadata') or {} + metadata_dict['custom_metadata'] = { + **existing_custom_metadata, + key: value, + } + class VertexAiSessionService(BaseSessionService): """Connects to the Vertex AI Agent Engine Session Service using Agent Engine SDK. @@ -301,11 +315,22 @@ async def append_event(self, session: Session, event: Event) -> Event: compaction_dict = event.actions.compaction.model_dump( exclude_none=True, mode='json' ) - existing_custom = metadata_dict.get('custom_metadata') or {} - metadata_dict['custom_metadata'] = { - **existing_custom, - '_compaction': compaction_dict, - } + _set_internal_custom_metadata( + metadata_dict, + key=_COMPACTION_CUSTOM_METADATA_KEY, + value=compaction_dict, + ) + # Store usage_metadata in custom_metadata since the Vertex AI service + # does not persist it in EventMetadata. + if event.usage_metadata: + usage_dict = event.usage_metadata.model_dump( + exclude_none=True, mode='json' + ) + _set_internal_custom_metadata( + metadata_dict, + key=_USAGE_METADATA_CUSTOM_METADATA_KEY, + value=usage_dict, + ) config['event_metadata'] = metadata_dict async with self._get_api_client() as api_client: @@ -378,11 +403,20 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: # Extract compaction data stored in custom_metadata. # NOTE: This read path must be kept permanently because sessions # written before native compaction support store compaction data - # in custom_metadata under the '_compaction' key. + # in custom_metadata under the compaction metadata key. compaction_data = None - if custom_metadata and '_compaction' in custom_metadata: + usage_metadata_data = None + if custom_metadata and ( + _COMPACTION_CUSTOM_METADATA_KEY in custom_metadata + or _USAGE_METADATA_CUSTOM_METADATA_KEY in custom_metadata + ): custom_metadata = dict(custom_metadata) # avoid mutating the API response - compaction_data = custom_metadata.pop('_compaction') + compaction_data = custom_metadata.pop( + _COMPACTION_CUSTOM_METADATA_KEY, None + ) + usage_metadata_data = custom_metadata.pop( + _USAGE_METADATA_CUSTOM_METADATA_KEY, None + ) if not custom_metadata: custom_metadata = None grounding_metadata = _session_util.decode_model( @@ -397,6 +431,7 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: branch = None custom_metadata = None compaction_data = None + usage_metadata_data = None grounding_metadata = None if actions: @@ -416,6 +451,12 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: else: event_actions = EventActions() + usage_metadata = None + if usage_metadata_data: + usage_metadata = types.GenerateContentResponseUsageMetadata.model_validate( + usage_metadata_data + ) + return Event( id=api_event_obj.name.split('/')[-1], invocation_id=api_event_obj.invocation_id, @@ -434,4 +475,5 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: custom_metadata=custom_metadata, grounding_metadata=grounding_metadata, long_running_tool_ids=long_running_tool_ids, + usage_metadata=usage_metadata, ) diff --git a/tests/unittests/sessions/test_vertex_ai_session_service.py b/tests/unittests/sessions/test_vertex_ai_session_service.py index c095ddd9d2..20fdbe3c6d 100644 --- a/tests/unittests/sessions/test_vertex_ai_session_service.py +++ b/tests/unittests/sessions/test_vertex_ai_session_service.py @@ -911,3 +911,131 @@ async def test_append_event_with_compaction_and_custom_metadata(): # User custom_metadata is preserved without the internal _compaction key assert appended_event.custom_metadata == {'user_key': 'user_value'} assert '_compaction' not in (appended_event.custom_metadata or {}) + + +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +async def test_append_event_with_usage_metadata(): + """usage_metadata round-trips through append_event and get_session.""" + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert session is not None + + event_to_append = Event( + invocation_id='usage_invocation', + author='model', + timestamp=1734005536.0, + usage_metadata=genai_types.GenerateContentResponseUsageMetadata( + prompt_token_count=150, + candidates_token_count=50, + total_token_count=200, + ), + ) + + await session_service.append_event(session, event_to_append) + + retrieved_session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert retrieved_session is not None + + appended_event = retrieved_session.events[-1] + assert appended_event.usage_metadata is not None + assert appended_event.usage_metadata.prompt_token_count == 150 + assert appended_event.usage_metadata.candidates_token_count == 50 + assert appended_event.usage_metadata.total_token_count == 200 + # custom_metadata should remain None when only usage_metadata was stored + assert appended_event.custom_metadata is None + + +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +async def test_append_event_with_usage_metadata_and_custom_metadata(): + """Both usage_metadata and user custom_metadata survive the round-trip.""" + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert session is not None + + event_to_append = Event( + invocation_id='usage_and_meta_invocation', + author='model', + timestamp=1734005537.0, + usage_metadata=genai_types.GenerateContentResponseUsageMetadata( + prompt_token_count=300, + total_token_count=400, + ), + custom_metadata={'my_key': 'my_value'}, + ) + + await session_service.append_event(session, event_to_append) + + retrieved_session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert retrieved_session is not None + + appended_event = retrieved_session.events[-1] + # usage_metadata is restored + assert appended_event.usage_metadata is not None + assert appended_event.usage_metadata.prompt_token_count == 300 + assert appended_event.usage_metadata.total_token_count == 400 + # User custom_metadata is preserved without internal keys + assert appended_event.custom_metadata == {'my_key': 'my_value'} + assert '_usage_metadata' not in (appended_event.custom_metadata or {}) + + +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +async def test_append_event_with_usage_metadata_and_compaction(): + """usage_metadata, compaction, and user custom_metadata all coexist.""" + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert session is not None + + compaction = EventCompaction( + start_timestamp=500.0, + end_timestamp=600.0, + compacted_content=genai_types.Content( + parts=[genai_types.Part(text='compacted')] + ), + ) + event_to_append = Event( + invocation_id='all_three_invocation', + author='model', + timestamp=1734005538.0, + actions=EventActions(compaction=compaction), + usage_metadata=genai_types.GenerateContentResponseUsageMetadata( + prompt_token_count=1000, + candidates_token_count=250, + total_token_count=1250, + ), + custom_metadata={'extra': 'info'}, + ) + + await session_service.append_event(session, event_to_append) + + retrieved_session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert retrieved_session is not None + + appended_event = retrieved_session.events[-1] + # Compaction is restored + assert appended_event.actions.compaction is not None + assert appended_event.actions.compaction.start_timestamp == 500.0 + assert appended_event.actions.compaction.end_timestamp == 600.0 + # usage_metadata is restored + assert appended_event.usage_metadata is not None + assert appended_event.usage_metadata.prompt_token_count == 1000 + assert appended_event.usage_metadata.candidates_token_count == 250 + assert appended_event.usage_metadata.total_token_count == 1250 + # User custom_metadata is preserved without internal keys + assert appended_event.custom_metadata == {'extra': 'info'} + assert '_compaction' not in (appended_event.custom_metadata or {}) + assert '_usage_metadata' not in (appended_event.custom_metadata or {}) From fc45fa68d75fbf5276bf5951929026285a8bb4af Mon Sep 17 00:00:00 2001 From: George Weale Date: Tue, 17 Mar 2026 11:45:15 -0700 Subject: [PATCH 038/192] feat: Add support for Anthropic's thinking_blocks format in LiteLLM integration This change enables the LiteLLM adapter to correctly parse and generate Anthropic's structured "thinking_blocks" format, which includes a "signature" for each thought block. The "signature" is crucial for Anthropic models to maintain their reasoning state across multiple turns, particularly when tool calls are made Close #4801 Co-authored-by: George Weale PiperOrigin-RevId: 885131757 --- src/google/adk/models/lite_llm.py | 98 +++++++++++- tests/unittests/models/test_litellm.py | 212 +++++++++++++++++++++++++ 2 files changed, 306 insertions(+), 4 deletions(-) diff --git a/src/google/adk/models/lite_llm.py b/src/google/adk/models/lite_llm.py index 1eb902630f..7d13696c96 100644 --- a/src/google/adk/models/lite_llm.py +++ b/src/google/adk/models/lite_llm.py @@ -384,8 +384,42 @@ def _iter_reasoning_texts(reasoning_value: Any) -> Iterable[str]: yield str(reasoning_value) +def _is_thinking_blocks_format(reasoning_value: Any) -> bool: + """Returns True if reasoning_value is Anthropic thinking_blocks format. + + Anthropic thinking_blocks is a list of dicts, each with 'type', 'thinking', + and 'signature' keys. + """ + if not isinstance(reasoning_value, list) or not reasoning_value: + return False + first = reasoning_value[0] + return isinstance(first, dict) and "signature" in first + + def _convert_reasoning_value_to_parts(reasoning_value: Any) -> List[types.Part]: - """Converts provider reasoning payloads into Gemini thought parts.""" + """Converts provider reasoning payloads into Gemini thought parts. + + Handles Anthropic thinking_blocks (list of dicts with type/thinking/signature) + by preserving the signature on each part's thought_signature field. This is + required for Anthropic to maintain thinking across tool call boundaries. + """ + if _is_thinking_blocks_format(reasoning_value): + parts: List[types.Part] = [] + for block in reasoning_value: + if not isinstance(block, dict): + continue + block_type = block.get("type", "") + if block_type == "redacted": + continue + thinking_text = block.get("thinking", "") + signature = block.get("signature", "") + if not thinking_text: + continue + part = types.Part(text=thinking_text, thought=True) + if signature: + part.thought_signature = signature.encode("utf-8") + parts.append(part) + return parts return [ types.Part(text=text, thought=True) for text in _iter_reasoning_texts(reasoning_value) @@ -396,12 +430,19 @@ def _convert_reasoning_value_to_parts(reasoning_value: Any) -> List[types.Part]: def _extract_reasoning_value(message: Message | Delta | None) -> Any: """Fetches the reasoning payload from a LiteLLM message. - Checks for both 'reasoning_content' (LiteLLM standard, used by Azure/Foundry, - Ollama via LiteLLM) and 'reasoning' (used by LM Studio, vLLM). - Prioritizes 'reasoning_content' when both are present. + Checks for 'thinking_blocks' (Anthropic structured format with signatures), + 'reasoning_content' (LiteLLM standard, used by Azure/Foundry, Ollama via + LiteLLM) and 'reasoning' (used by LM Studio, vLLM). + Prioritizes 'thinking_blocks' when present (Anthropic models), then + 'reasoning_content', then 'reasoning'. """ if message is None: return None + # Anthropic models return thinking_blocks with type/thinking/signature fields. + # This must be preserved to maintain thinking across tool call boundaries. + thinking_blocks = message.get("thinking_blocks") + if thinking_blocks is not None: + return thinking_blocks reasoning_content = message.get("reasoning_content") if reasoning_content is not None: return reasoning_content @@ -835,6 +876,30 @@ async def _content_to_message_param( else final_content ) + # For Anthropic models, rebuild thinking_blocks with signatures so that + # thinking is preserved across tool call boundaries. Without this, + # Anthropic silently drops thinking after the first turn. + if model and _is_anthropic_model(model) and reasoning_parts: + thinking_blocks = [] + for part in reasoning_parts: + if part.text and part.thought_signature: + sig = part.thought_signature + if isinstance(sig, bytes): + sig = sig.decode("utf-8") + thinking_blocks.append({ + "type": "thinking", + "thinking": part.text, + "signature": sig, + }) + if thinking_blocks: + msg = ChatCompletionAssistantMessage( + role=role, + content=final_content, + tool_calls=tool_calls or None, + ) + msg["thinking_blocks"] = thinking_blocks # type: ignore[typeddict-unknown-key] + return msg + reasoning_texts = [] for part in reasoning_parts: if part.text: @@ -1943,6 +2008,31 @@ def _build_request_log(req: LlmRequest) -> str: """ +def _is_anthropic_model(model_string: str) -> bool: + """Check if the model is an Anthropic Claude model accessed via LiteLLM. + + Detects models using the anthropic/ provider prefix, bedrock/ models that + contain 'anthropic' or 'claude', and vertex_ai/ models that contain 'claude'. + + Args: + model_string: A LiteLLM model string (e.g., "anthropic/claude-4-sonnet", + "bedrock/anthropic.claude-3-5-sonnet", "vertex_ai/claude-4-sonnet") + + Returns: + True if it's an Anthropic Claude model, False otherwise. + """ + lower = model_string.lower() + if lower.startswith("anthropic/"): + return True + if lower.startswith("bedrock/"): + model_part = lower.split("/", 1)[1] + return "anthropic" in model_part or "claude" in model_part + if lower.startswith("vertex_ai/"): + model_part = lower.split("/", 1)[1] + return "claude" in model_part + return False + + def _is_litellm_vertex_model(model_string: str) -> bool: """Check if the model is a Vertex AI model accessed via LiteLLM. diff --git a/tests/unittests/models/test_litellm.py b/tests/unittests/models/test_litellm.py index 7d27697306..ace08ad997 100644 --- a/tests/unittests/models/test_litellm.py +++ b/tests/unittests/models/test_litellm.py @@ -28,6 +28,7 @@ from google.adk.models.lite_llm import _append_fallback_user_content_if_missing from google.adk.models.lite_llm import _content_to_message_param +from google.adk.models.lite_llm import _convert_reasoning_value_to_parts from google.adk.models.lite_llm import _enforce_strict_openai_schema from google.adk.models.lite_llm import _extract_reasoning_value from google.adk.models.lite_llm import _extract_thought_signature_from_tool_call @@ -37,6 +38,7 @@ from google.adk.models.lite_llm import _get_completion_inputs from google.adk.models.lite_llm import _get_content from google.adk.models.lite_llm import _get_provider_from_model +from google.adk.models.lite_llm import _is_anthropic_model from google.adk.models.lite_llm import _message_to_generate_content_response from google.adk.models.lite_llm import _MISSING_TOOL_RESULT_MESSAGE from google.adk.models.lite_llm import _model_response_to_chunk @@ -4682,3 +4684,213 @@ def test_handles_litellm_logger_names(logger_name): finally: # Clean up test_logger.removeHandler(handler) + + +# ── Anthropic thinking_blocks tests ───────────────────────────── + + +@pytest.mark.parametrize( + "model_string,expected", + [ + ("anthropic/claude-4-sonnet", True), + ("anthropic/claude-3-5-sonnet-20241022", True), + ("Anthropic/Claude-4-Opus", True), + ("bedrock/anthropic.claude-3-5-sonnet", True), + ("bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0", True), + ("bedrock/claude-3-5-sonnet", True), + ("vertex_ai/claude-3-5-sonnet@20241022", True), + ("openai/gpt-4o", False), + ("gemini/gemini-2.5-pro", False), + ("vertex_ai/gemini-2.5-flash", False), + ("bedrock/amazon.titan-text-express-v1", False), + ], + ids=[ + "anthropic-prefix", + "anthropic-versioned", + "anthropic-uppercase", + "bedrock-anthropic-dot", + "bedrock-us-anthropic", + "bedrock-claude", + "vertex-claude", + "openai-no-match", + "gemini-no-match", + "vertex-gemini-no-match", + "bedrock-non-anthropic", + ], +) +def test_is_anthropic_model(model_string, expected): + assert _is_anthropic_model(model_string) is expected + + +def test_extract_reasoning_value_prefers_thinking_blocks(): + """thinking_blocks takes precedence over reasoning_content.""" + thinking_blocks = [ + {"type": "thinking", "thinking": "deep thought", "signature": "sig123"}, + ] + message = { + "role": "assistant", + "content": "Answer", + "thinking_blocks": thinking_blocks, + "reasoning_content": "flat reasoning", + } + result = _extract_reasoning_value(message) + assert result is thinking_blocks + + +def test_extract_reasoning_value_falls_back_without_thinking_blocks(): + """When thinking_blocks is absent, falls back to reasoning_content.""" + message = { + "role": "assistant", + "content": "Answer", + "reasoning_content": "flat reasoning", + } + result = _extract_reasoning_value(message) + assert result == "flat reasoning" + + +def test_convert_reasoning_value_to_parts_thinking_blocks_preserves_signature(): + """thinking_blocks format produces parts with thought_signature.""" + thinking_blocks = [ + {"type": "thinking", "thinking": "step 1", "signature": "sig_abc"}, + {"type": "thinking", "thinking": "step 2", "signature": "sig_def"}, + ] + parts = _convert_reasoning_value_to_parts(thinking_blocks) + assert len(parts) == 2 + assert parts[0].text == "step 1" + assert parts[0].thought is True + assert parts[0].thought_signature == b"sig_abc" + assert parts[1].text == "step 2" + assert parts[1].thought_signature == b"sig_def" + + +def test_convert_reasoning_value_to_parts_skips_redacted_blocks(): + """Redacted thinking blocks are excluded from parts.""" + thinking_blocks = [ + {"type": "thinking", "thinking": "visible", "signature": "sig1"}, + {"type": "redacted", "data": "hidden"}, + ] + parts = _convert_reasoning_value_to_parts(thinking_blocks) + assert len(parts) == 1 + assert parts[0].text == "visible" + + +def test_convert_reasoning_value_to_parts_skips_empty_thinking(): + """Blocks with empty thinking text are excluded.""" + thinking_blocks = [ + {"type": "thinking", "thinking": "", "signature": "sig1"}, + {"type": "thinking", "thinking": "real thought", "signature": "sig2"}, + ] + parts = _convert_reasoning_value_to_parts(thinking_blocks) + assert len(parts) == 1 + assert parts[0].text == "real thought" + + +def test_convert_reasoning_value_to_parts_flat_string_unchanged(): + """Flat string reasoning still produces thought parts without signature.""" + parts = _convert_reasoning_value_to_parts("simple reasoning text") + assert len(parts) == 1 + assert parts[0].text == "simple reasoning text" + assert parts[0].thought is True + assert parts[0].thought_signature is None + + +@pytest.mark.asyncio +async def test_content_to_message_param_anthropic_outputs_thinking_blocks(): + """For Anthropic models, thinking_blocks are output instead of reasoning_content.""" + content = types.Content( + role="model", + parts=[ + types.Part( + text="deep thought", + thought=True, + thought_signature=b"sig_round_trip", + ), + types.Part(text="Hello!"), + ], + ) + result = await _content_to_message_param( + content, model="anthropic/claude-4-sonnet" + ) + assert result["role"] == "assistant" + assert "thinking_blocks" in result + assert result.get("reasoning_content") is None + blocks = result["thinking_blocks"] + assert len(blocks) == 1 + assert blocks[0]["type"] == "thinking" + assert blocks[0]["thinking"] == "deep thought" + assert blocks[0]["signature"] == "sig_round_trip" + assert result["content"] == "Hello!" + + +@pytest.mark.asyncio +async def test_content_to_message_param_non_anthropic_uses_reasoning_content(): + """For non-Anthropic models, reasoning_content is used as before.""" + content = types.Content( + role="model", + parts=[ + types.Part(text="thinking text", thought=True), + types.Part(text="Answer"), + ], + ) + result = await _content_to_message_param(content, model="openai/gpt-4o") + assert result["role"] == "assistant" + assert result.get("reasoning_content") == "thinking text" + assert "thinking_blocks" not in result + + +@pytest.mark.asyncio +async def test_anthropic_thinking_blocks_round_trip(): + """End-to-end: thinking_blocks in response → Part → thinking_blocks out.""" + # Simulate LiteLLM response with thinking_blocks + response_message = { + "role": "assistant", + "content": "Final answer", + "thinking_blocks": [ + { + "type": "thinking", + "thinking": "Let me reason...", + "signature": "abc123signature", + }, + ], + } + + # Step 1: Extract reasoning value + reasoning_value = _extract_reasoning_value(response_message) + assert isinstance(reasoning_value, list) + + # Step 2: Convert to parts (preserves signature) + parts = _convert_reasoning_value_to_parts(reasoning_value) + assert len(parts) == 1 + assert parts[0].thought_signature == b"abc123signature" + + # Step 3: Build Content for history + all_parts = parts + [types.Part(text="Final answer")] + content = types.Content(role="model", parts=all_parts) + + # Step 4: Convert back to message param for Anthropic + result = await _content_to_message_param( + content, model="anthropic/claude-4-sonnet" + ) + blocks = result["thinking_blocks"] + assert len(blocks) == 1 + assert blocks[0]["type"] == "thinking" + assert blocks[0]["thinking"] == "Let me reason..." + assert blocks[0]["signature"] == "abc123signature" + + +@pytest.mark.asyncio +async def test_content_to_message_param_anthropic_no_signature_falls_back(): + """Anthropic model with thought parts but no signatures uses reasoning_content.""" + content = types.Content( + role="model", + parts=[ + types.Part(text="thinking without sig", thought=True), + types.Part(text="Response"), + ], + ) + result = await _content_to_message_param( + content, model="anthropic/claude-4-sonnet" + ) + # Falls back to reasoning_content when no signatures present + assert result.get("reasoning_content") == "thinking without sig" + assert "thinking_blocks" not in result From 950a3b2d0a588c1ee5e2ffef440cc2739da04415 Mon Sep 17 00:00:00 2001 From: "Xiang (Sean) Zhou" Date: Tue, 17 Mar 2026 11:58:47 -0700 Subject: [PATCH 039/192] chore: update the component owner Co-authored-by: Xiang (Sean) Zhou PiperOrigin-RevId: 885138365 --- contributing/samples/adk_triaging_agent/agent.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/contributing/samples/adk_triaging_agent/agent.py b/contributing/samples/adk_triaging_agent/agent.py index 82f02e771c..4ea3facc03 100644 --- a/contributing/samples/adk_triaging_agent/agent.py +++ b/contributing/samples/adk_triaging_agent/agent.py @@ -26,15 +26,14 @@ import requests LABEL_TO_OWNER = { - "a2a": "seanzhou1023", "agent engine": "yeesian", - "auth": "seanzhou1023", + "auth": "xuanyang15", "bq": "shobsi", "core": "Jacksunwei", "documentation": "joefernandez", "eval": "ankursharmas", - "live": "seanzhou1023", - "mcp": "seanzhou1023", + "live": "wuliang229", + "mcp": "wukath", "models": "xuanyang15", "services": "DeanChensj", "tools": "xuanyang15", From 4e5f68391091e9d3a15c338fbb3092746f07dde5 Mon Sep 17 00:00:00 2001 From: "Wei (Jack) Sun" Date: Tue, 17 Mar 2026 14:38:30 -0700 Subject: [PATCH 040/192] chore: merge release v1.27.2 to main Merge https://github.com/google/adk-python/pull/4862 Syncs version bump and CHANGELOG from release v1.27.2 to main. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4862 from google:release/v1.27.2 70847b6da6e6727dc14e1282b4e890b08249f3b0 PiperOrigin-RevId: 885216591 --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 6 +++++- src/google/adk/version.py | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 77003bf734..42b9d998ba 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.27.1" + ".": "1.27.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index e6ad315733..852c69cb9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,11 @@ # Changelog +## [1.27.2](https://github.com/google/adk-python/compare/v1.27.1...v1.27.2) (2026-03-17) +### Bug Fixes + * Use valid dataplex OAuth scope for BigQueryToolset ([4010716](https://github.com/google/adk-python/commit/4010716470fc83918dc367c5971342ff551401c8)) + * Store and retrieve usage_metadata in Vertex AI custom_metadata ([b318eee](https://github.com/google/adk-python/commit/b318eee979b1625d3d23ad98825c88f54016a12f)) -## [1.27.1](https://github.com/google/adk-python/compare/v1.26.0...v1.27.0) (2026-03-13) +## [1.27.1](https://github.com/google/adk-python/compare/v1.27.0...v1.27.1) (2026-03-13) ### Bug Fixes * Rolling back change to fix issue affecting LlmAgent creation due to missing version field ([0e18f81](https://github.com/google/adk-python/commit/0e18f81a5cd0d0392ded653b1a63a236449a2685)) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 9b5eec1143..46ed9b3d36 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "1.27.1" +__version__ = "1.27.2" From 4c9c01fd4b1c716950700fd56a1a8789795cb7b1 Mon Sep 17 00:00:00 2001 From: "Xiang (Sean) Zhou" Date: Tue, 17 Mar 2026 17:16:03 -0700 Subject: [PATCH 041/192] fix(tools): disable default httpx 5s timeout in OpenAPI tool _request MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When PR #2872 migrated RestApiTool from requests (sync) to httpx.AsyncClient (async), the _request function was left without an explicit timeout parameter. Unlike requests which has no default timeout, httpx defaults to 5 seconds — causing ReadTimeout errors for any API call exceeding that limit. This regression blocked users from upgrading past 1.23.0. Set timeout=None on httpx.AsyncClient to restore parity with the previous requests-based behavior (no timeout). Fixes #4431 Co-authored-by: Xiang (Sean) Zhou PiperOrigin-RevId: 885287948 --- .../openapi_spec_parser/rest_api_tool.py | 3 +- .../openapi_spec_parser/test_rest_api_tool.py | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py b/src/google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py index 5f83548980..fa32ce932a 100644 --- a/src/google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py +++ b/src/google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py @@ -571,6 +571,7 @@ def __repr__(self): async def _request(**request_params) -> httpx.Response: async with httpx.AsyncClient( - verify=request_params.pop("verify", True) + verify=request_params.pop("verify", True), + timeout=None, ) as client: return await client.request(**request_params) diff --git a/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py b/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py index 1131181acd..64c8b37200 100644 --- a/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py +++ b/tests/unittests/tools/openapi_tool/openapi_spec_parser/test_rest_api_tool.py @@ -1088,6 +1088,48 @@ async def test_call_with_verify_options( else: assert call_kwargs["verify"] == expected_verify_in_call + async def test_request_uses_no_default_timeout( + self, + mock_tool_context, + sample_endpoint, + sample_operation, + sample_auth_scheme, + sample_auth_credential, + ): + """Test that _request creates AsyncClient with timeout=None. + + httpx defaults to a 5-second timeout, which is too short for many + real-world API calls. Verify that we explicitly disable the timeout + to match the previous requests-library behavior (no timeout). + Regression test for https://github.com/google/adk-python/issues/4431. + """ + mock_response = mock.create_autospec(requests.Response, instance=True) + mock_response.json.return_value = {"result": "success"} + mock_response.configure_mock(status_code=200) + + mock_client = mock.create_autospec( + httpx.AsyncClient, instance=True, spec_set=True + ) + mock_client.request = AsyncMock(return_value=mock_response) + + tool = RestApiTool( + name="test_tool", + description="Test Tool", + endpoint=sample_endpoint, + operation=sample_operation, + auth_scheme=sample_auth_scheme, + auth_credential=sample_auth_credential, + ) + + with patch.object( + httpx, "AsyncClient", return_value=mock_client, autospec=True + ) as mock_async_client: + await tool.call(args={}, tool_context=mock_tool_context) + + assert mock_async_client.called + _, call_kwargs = mock_async_client.call_args + assert call_kwargs["timeout"] is None + async def test_call_with_configure_verify( self, mock_tool_context, From b8e764715cb1cc7c8bc1de9aa94ca5f5271bb627 Mon Sep 17 00:00:00 2001 From: George Weale Date: Tue, 17 Mar 2026 19:54:56 -0700 Subject: [PATCH 042/192] fix: Reject appends to stale sessions in DatabaseSessionService This change introduces optimistic concurrency control for session updates. Instead of automatically reloading and merging when an append is attempted on a session that has been modified in storage, the service now raises a ValueError. Close #4751 Co-authored-by: George Weale PiperOrigin-RevId: 885334444 --- .../adk/sessions/database_session_service.py | 89 +++++++++++---- src/google/adk/sessions/schemas/v0.py | 11 +- src/google/adk/sessions/schemas/v1.py | 11 +- src/google/adk/sessions/session.py | 4 + .../sessions/test_session_service.py | 107 ++++++++++++++++-- 5 files changed, 184 insertions(+), 38 deletions(-) diff --git a/src/google/adk/sessions/database_session_service.py b/src/google/adk/sessions/database_session_service.py index eed1d9eae6..bb00aefe4f 100644 --- a/src/google/adk/sessions/database_session_service.py +++ b/src/google/adk/sessions/database_session_service.py @@ -61,6 +61,11 @@ logger = logging.getLogger("google_adk." + __name__) +_STALE_SESSION_ERROR_MESSAGE = ( + "The session has been modified in storage since it was loaded. " + "Please reload the session before appending more events." +) + _SQLITE_DIALECT = "sqlite" _MARIADB_DIALECT = "mariadb" _MYSQL_DIALECT = "mysql" @@ -309,6 +314,39 @@ async def _prepare_tables(self): self._tables_created = True + async def _session_matches_storage_revision( + self, + *, + sql_session: DatabaseSessionFactory, + schema: _SchemaClasses, + session: Session, + ) -> bool: + """Returns whether a marker-less session still matches stored events.""" + if not session.events: + stmt = ( + select(schema.StorageEvent.id) + .filter(schema.StorageEvent.app_name == session.app_name) + .filter(schema.StorageEvent.session_id == session.id) + .filter(schema.StorageEvent.user_id == session.user_id) + .limit(1) + ) + result = await sql_session.execute(stmt) + return result.scalar_one_or_none() is None + + stmt = ( + select(schema.StorageEvent.id) + .filter(schema.StorageEvent.app_name == session.app_name) + .filter(schema.StorageEvent.session_id == session.id) + .filter(schema.StorageEvent.user_id == session.user_id) + .order_by( + schema.StorageEvent.timestamp.desc(), schema.StorageEvent.id.desc() + ) + .limit(1) + ) + result = await sql_session.execute(stmt) + latest_storage_event_id = result.scalar_one_or_none() + return latest_storage_event_id == session.events[-1].id + @override async def create_session( self, @@ -529,9 +567,9 @@ async def append_event(self, session: Session, event: Event) -> Event: # Trim temp state before persisting event = self._trim_temp_delta_state(event) - # 1. Check if timestamp is stale - # 2. Update session attributes based on event config - # 3. Store event to table + # 1. Validate the session has not gone stale. + # 2. Update session attributes based on event config. + # 3. Store the new event. schema = self._get_schema_classes() is_sqlite = self.db_engine.dialect.name == _SQLITE_DIALECT use_row_level_locking = self._supports_row_level_locking() @@ -563,6 +601,8 @@ async def append_event(self, session: Session, event: Event) -> Event: storage_session = storage_session_result.scalars().one_or_none() if storage_session is None: raise ValueError(f"Session {session.id} not found.") + storage_update_time = storage_session.get_update_timestamp(is_sqlite) + storage_update_marker = storage_session.get_update_marker() storage_app_state = await _select_required_state( sql_session=sql_session, @@ -591,27 +631,27 @@ async def append_event(self, session: Session, event: Event) -> Event: ), ) - if ( - storage_session.get_update_timestamp(is_sqlite) - > session.last_update_time - ): - # Reload the session from storage if it has been updated since it was - # loaded. - app_state = storage_app_state.state - user_state = storage_user_state.state - session_state = storage_session.state - session.state = _merge_state(app_state, user_state, session_state) - - stmt = ( - select(schema.StorageEvent) - .filter(schema.StorageEvent.app_name == session.app_name) - .filter(schema.StorageEvent.session_id == session.id) - .filter(schema.StorageEvent.user_id == session.user_id) - .order_by(schema.StorageEvent.timestamp.asc()) - ) - result = await sql_session.stream_scalars(stmt) - storage_events = [e async for e in result] - session.events = [e.to_event() for e in storage_events] + if session._storage_update_marker is not None: + # Sessions loaded by DatabaseSessionService carry an exact storage + # revision marker, so stale-writer detection can use that marker + # instead of relying on rounded timestamps. + if session._storage_update_marker != storage_update_marker: + raise ValueError(_STALE_SESSION_ERROR_MESSAGE) + # Keep the float timestamp synchronized with the exact storage value + # so tiny round-trip differences do not trigger false stale checks on + # the next append. + session.last_update_time = storage_update_time + elif storage_update_time > session.last_update_time: + # Backward-compatible fallback for marker-less session objects, such + # as older in-memory sessions or manually constructed Session values. + # Only reject when storage has actually advanced beyond the in-memory + # revision represented by session.events. + if not await self._session_matches_storage_revision( + sql_session=sql_session, schema=schema, session=session + ): + raise ValueError(_STALE_SESSION_ERROR_MESSAGE) + session.last_update_time = storage_update_time + session._storage_update_marker = storage_update_marker # Merge pre-extracted state deltas into storage. if has_app_delta: @@ -642,6 +682,7 @@ async def append_event(self, session: Session, event: Event) -> Event: session.last_update_time = storage_session.get_update_timestamp( is_sqlite ) + session._storage_update_marker = storage_session.get_update_marker() # Also update the in-memory session await super().append_event(session=session, event=event) diff --git a/src/google/adk/sessions/schemas/v0.py b/src/google/adk/sessions/schemas/v0.py index a95d0b9de5..3113c4c441 100644 --- a/src/google/adk/sessions/schemas/v0.py +++ b/src/google/adk/sessions/schemas/v0.py @@ -154,6 +154,13 @@ def get_update_timestamp(self, is_sqlite: bool) -> float: return self.update_time.replace(tzinfo=timezone.utc).timestamp() return self.update_time.timestamp() + def get_update_marker(self) -> str: + """Returns a stable revision marker for optimistic concurrency checks.""" + update_time = self.update_time + if update_time.tzinfo is not None: + update_time = update_time.astimezone(timezone.utc) + return update_time.isoformat(timespec="microseconds") + def to_session( self, state: dict[str, Any] | None = None, @@ -166,7 +173,7 @@ def to_session( if events is None: events = [] - return Session( + session = Session( app_name=self.app_name, user_id=self.user_id, id=self.id, @@ -174,6 +181,8 @@ def to_session( events=events, last_update_time=self.get_update_timestamp(is_sqlite=is_sqlite), ) + session._storage_update_marker = self.get_update_marker() + return session class StorageEvent(Base): diff --git a/src/google/adk/sessions/schemas/v1.py b/src/google/adk/sessions/schemas/v1.py index 7ee8c811fd..3b2c550935 100644 --- a/src/google/adk/sessions/schemas/v1.py +++ b/src/google/adk/sessions/schemas/v1.py @@ -128,6 +128,13 @@ def get_update_timestamp(self, is_sqlite: bool) -> float: return self.update_time.replace(tzinfo=timezone.utc).timestamp() return self.update_time.timestamp() + def get_update_marker(self) -> str: + """Returns a stable revision marker for optimistic concurrency checks.""" + update_time = self.update_time + if update_time.tzinfo is not None: + update_time = update_time.astimezone(timezone.utc) + return update_time.isoformat(timespec="microseconds") + def to_session( self, state: dict[str, Any] | None = None, @@ -140,7 +147,7 @@ def to_session( if events is None: events = [] - return Session( + session = Session( app_name=self.app_name, user_id=self.user_id, id=self.id, @@ -148,6 +155,8 @@ def to_session( events=events, last_update_time=self.get_update_timestamp(is_sqlite=is_sqlite), ) + session._storage_update_marker = self.get_update_marker() + return session class StorageEvent(Base): diff --git a/src/google/adk/sessions/session.py b/src/google/adk/sessions/session.py index 89af1d4167..24d200efdb 100644 --- a/src/google/adk/sessions/session.py +++ b/src/google/adk/sessions/session.py @@ -20,6 +20,7 @@ from pydantic import BaseModel from pydantic import ConfigDict from pydantic import Field +from pydantic import PrivateAttr from ..events.event import Event @@ -48,3 +49,6 @@ class Session(BaseModel): call/response, etc.""" last_update_time: float = 0.0 """The last update time of the session.""" + + _storage_update_marker: str | None = PrivateAttr(default=None) + """Internal storage revision marker used for stale-session detection.""" diff --git a/tests/unittests/sessions/test_session_service.py b/tests/unittests/sessions/test_session_service.py index 9686596b93..0a7721088e 100644 --- a/tests/unittests/sessions/test_session_service.py +++ b/tests/unittests/sessions/test_session_service.py @@ -657,28 +657,27 @@ async def test_append_event_to_stale_session(): assert len(original_session.events) == 1 assert 'sk2' not in original_session.state - # Appending another event to stale original_session + # Appending another event to stale original_session should be rejected. event3 = Event( invocation_id='inv3', author='user', timestamp=current_time + 3, actions=EventActions(state_delta={'sk3': 'v3'}), ) - await session_service.append_event(original_session, event3) + with pytest.raises(ValueError, match='modified in storage'): + await session_service.append_event(original_session, event3) - # If we fetch session from DB, it should contain all 3 events and all state - # changes. + # If we fetch session from DB, it should only contain the committed events. session_final = await session_service.get_session( app_name=app_name, user_id=user_id, session_id=original_session.id ) - assert len(session_final.events) == 3 + assert len(session_final.events) == 2 assert session_final.state.get('sk1') == 'v1' assert session_final.state.get('sk2') == 'v2' - assert session_final.state.get('sk3') == 'v3' + assert session_final.state.get('sk3') is None assert [e.invocation_id for e in session_final.events] == [ 'inv1', 'inv2', - 'inv3', ] @@ -738,7 +737,7 @@ async def test_append_event_raises_if_user_state_row_missing(): @pytest.mark.asyncio -async def test_append_event_concurrent_stale_sessions_preserve_all_state(): +async def test_append_event_concurrent_stale_sessions_reject_stale_writer(): session_service = get_session_service( service_type=SessionServiceType.DATABASE ) @@ -771,19 +770,103 @@ async def test_append_event_concurrent_stale_sessions_preserve_all_state(): actions=EventActions(state_delta={f'sk{i}-2': f'v{i}-2'}), ) - await asyncio.gather( + results = await asyncio.gather( session_service.append_event(stale_session_1, event_1), session_service.append_event(stale_session_2, event_2), + return_exceptions=True, ) + errors = [result for result in results if isinstance(result, Exception)] + successes = [ + result for result in results if not isinstance(result, Exception) + ] + assert len(successes) == 1 + assert len(errors) == 1 + assert isinstance(errors[0], ValueError) + assert 'modified in storage' in str(errors[0]) session_final = await session_service.get_session( app_name=app_name, user_id=user_id, session_id=session.id ) for i in range(iteration_count): - assert session_final.state.get(f'sk{i}-1') == f'v{i}-1' - assert session_final.state.get(f'sk{i}-2') == f'v{i}-2' - assert len(session_final.events) == iteration_count * 2 + event_values = { + session_final.state.get(f'sk{i}-1'), + session_final.state.get(f'sk{i}-2'), + } + assert event_values & {f'v{i}-1', f'v{i}-2'} + assert None in event_values + assert len(session_final.events) == iteration_count + + +@pytest.mark.asyncio +async def test_append_event_allows_timestamp_drift_for_current_session(): + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + session = await service.create_session( + app_name='my_app', user_id='user', session_id='s1' + ) + event1 = Event( + invocation_id='inv1', + author='user', + timestamp=session.last_update_time + 10, + ) + await service.append_event(session, event1) + + # Simulate a float round-trip mismatch without changing the persisted + # session revision. + session.last_update_time -= 0.0001 + + event2 = Event( + invocation_id='inv2', + author='user', + timestamp=event1.timestamp + 10, + ) + await service.append_event(session, event2) + + refreshed_session = await service.get_session( + app_name='my_app', user_id='user', session_id=session.id + ) + assert [event.invocation_id for event in refreshed_session.events] == [ + 'inv1', + 'inv2', + ] + finally: + await service.close() + + +@pytest.mark.asyncio +async def test_append_event_allows_markerless_current_session(): + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + session = await service.create_session( + app_name='my_app', user_id='user', session_id='s1' + ) + event1 = Event( + invocation_id='inv1', + author='user', + timestamp=session.last_update_time + 10, + ) + await service.append_event(session, event1) + + session._storage_update_marker = None + session.last_update_time -= 0.0001 + + event2 = Event( + invocation_id='inv2', + author='user', + timestamp=event1.timestamp + 10, + ) + await service.append_event(session, event2) + + refreshed_session = await service.get_session( + app_name='my_app', user_id='user', session_id=session.id + ) + assert [event.invocation_id for event in refreshed_session.events] == [ + 'inv1', + 'inv2', + ] + finally: + await service.close() @pytest.mark.asyncio From b6185f742d235245abf7208f6a2a71a2b3ac64c6 Mon Sep 17 00:00:00 2001 From: sasha-gitg <44654632+sasha-gitg@users.noreply.github.com> Date: Wed, 18 Mar 2026 09:06:51 -0700 Subject: [PATCH 043/192] chore: move release workflows to main Merge https://github.com/google/adk-python/pull/4879 COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4879 from sasha-gitg:add-v2-release-workflows-to-main f28f3d1ca069b4a1624253fe49c5a0b04f48c5c9 PiperOrigin-RevId: 885627463 --- .github/.release-please-manifest-v2.json | 3 + .github/release-please-config-v2.json | 62 ++++++++++++++ .github/workflows/release-v2-cherry-pick.yml | 43 ++++++++++ .github/workflows/release-v2-cut.yml | 46 +++++++++++ .github/workflows/release-v2-finalize.yml | 85 ++++++++++++++++++++ .github/workflows/release-v2-please.yml | 41 ++++++++++ .github/workflows/release-v2-publish.yml | 79 ++++++++++++++++++ .github/workflows/v2-sync.yml | 59 ++++++++++++++ 8 files changed, 418 insertions(+) create mode 100644 .github/.release-please-manifest-v2.json create mode 100644 .github/release-please-config-v2.json create mode 100644 .github/workflows/release-v2-cherry-pick.yml create mode 100644 .github/workflows/release-v2-cut.yml create mode 100644 .github/workflows/release-v2-finalize.yml create mode 100644 .github/workflows/release-v2-please.yml create mode 100644 .github/workflows/release-v2-publish.yml create mode 100644 .github/workflows/v2-sync.yml diff --git a/.github/.release-please-manifest-v2.json b/.github/.release-please-manifest-v2.json new file mode 100644 index 0000000000..0739396e62 --- /dev/null +++ b/.github/.release-please-manifest-v2.json @@ -0,0 +1,3 @@ +{ + ".": "2.0.0-alpha.0" +} diff --git a/.github/release-please-config-v2.json b/.github/release-please-config-v2.json new file mode 100644 index 0000000000..6947d9e15a --- /dev/null +++ b/.github/release-please-config-v2.json @@ -0,0 +1,62 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "packages": { + ".": { + "release-type": "python", + "versioning": "prerelease", + "prerelease": true, + "prerelease-type": "alpha", + "package-name": "google-adk", + "include-component-in-tag": false, + "skip-github-release": true, + "changelog-path": "CHANGELOG-v2.md", + "changelog-sections": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "perf", + "section": "Performance Improvements" + }, + { + "type": "refactor", + "section": "Code Refactoring" + }, + { + "type": "docs", + "section": "Documentation" + }, + { + "type": "test", + "section": "Tests", + "hidden": true + }, + { + "type": "build", + "section": "Build System", + "hidden": true + }, + { + "type": "ci", + "section": "CI/CD", + "hidden": true + }, + { + "type": "style", + "section": "Styles", + "hidden": true + }, + { + "type": "chore", + "section": "Miscellaneous Chores", + "hidden": true + } + ] + } + } +} diff --git a/.github/workflows/release-v2-cherry-pick.yml b/.github/workflows/release-v2-cherry-pick.yml new file mode 100644 index 0000000000..f5641a55b3 --- /dev/null +++ b/.github/workflows/release-v2-cherry-pick.yml @@ -0,0 +1,43 @@ +# Step 3 (v2, optional): Cherry-picks a commit from v2 to the release/v2-candidate branch. +# Use between step 1 and step 4 to include bug fixes in an in-progress release. +# Note: Does NOT auto-trigger release-please to preserve manual changelog edits. +name: "Release v2: Cherry-pick" + +on: + workflow_dispatch: + inputs: + commit_sha: + description: 'Commit SHA to cherry-pick' + required: true + type: string + +permissions: + contents: write + +jobs: + cherry-pick: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + ref: release/v2-candidate + fetch-depth: 0 + + - name: Configure git + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Cherry-pick commit + run: | + echo "Cherry-picking ${INPUTS_COMMIT_SHA} to release/v2-candidate" + git cherry-pick ${INPUTS_COMMIT_SHA} + env: + INPUTS_COMMIT_SHA: ${{ inputs.commit_sha }} + + - name: Push changes + run: | + git push origin release/v2-candidate + echo "Successfully cherry-picked commit to release/v2-candidate" + echo "Note: Release Please is NOT auto-triggered to preserve manual changelog edits." + echo "Run release-v2-please.yml manually if you want to regenerate the changelog." diff --git a/.github/workflows/release-v2-cut.yml b/.github/workflows/release-v2-cut.yml new file mode 100644 index 0000000000..52af5bf038 --- /dev/null +++ b/.github/workflows/release-v2-cut.yml @@ -0,0 +1,46 @@ +# Step 1 (v2): Starts the v2 release process by creating a release/v2-candidate branch. +# Generates a changelog PR for review (step 2). +name: "Release v2: Cut" + +on: + workflow_dispatch: + inputs: + commit_sha: + description: 'Commit SHA to cut from (leave empty for latest v2)' + required: false + type: string + +permissions: + contents: write + actions: write + +jobs: + cut-release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + ref: ${{ inputs.commit_sha || 'v2' }} + + - name: Check for existing release/v2-candidate branch + env: + GH_TOKEN: ${{ github.token }} + run: | + if git ls-remote --exit-code --heads origin release/v2-candidate &>/dev/null; then + echo "Error: release/v2-candidate branch already exists" + echo "Please finalize or delete the existing release candidate before starting a new one" + exit 1 + fi + + - name: Create and push release/v2-candidate branch + run: | + git checkout -b release/v2-candidate + git push origin release/v2-candidate + echo "Created branch: release/v2-candidate" + + - name: Trigger Release Please + env: + GH_TOKEN: ${{ github.token }} + run: | + gh workflow run release-v2-please.yml --repo ${{ github.repository }} --ref release/v2-candidate + echo "Triggered Release Please workflow for v2" diff --git a/.github/workflows/release-v2-finalize.yml b/.github/workflows/release-v2-finalize.yml new file mode 100644 index 0000000000..c8b1020948 --- /dev/null +++ b/.github/workflows/release-v2-finalize.yml @@ -0,0 +1,85 @@ +# Step 4 (v2): Triggers when the changelog PR is merged to release/v2-candidate. +# Records last-release-sha and renames release/v2-candidate to release/v{version}. +name: "Release v2: Finalize" + +on: + pull_request: + types: [closed] + branches: + - release/v2-candidate + +permissions: + contents: write + pull-requests: write + +jobs: + finalize: + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - name: Check for release-please PR + id: check + env: + LABELS: ${{ toJson(github.event.pull_request.labels.*.name) }} + run: | + if echo "$LABELS" | grep -q "autorelease: pending"; then + echo "is_release_pr=true" >> $GITHUB_OUTPUT + else + echo "Not a release-please PR, skipping" + echo "is_release_pr=false" >> $GITHUB_OUTPUT + fi + + - uses: actions/checkout@v6 + if: steps.check.outputs.is_release_pr == 'true' + with: + ref: release/v2-candidate + token: ${{ secrets.RELEASE_PAT }} + fetch-depth: 0 + + - name: Extract version from manifest + if: steps.check.outputs.is_release_pr == 'true' + id: version + run: | + VERSION=$(jq -r '.["."]' .github/.release-please-manifest-v2.json) + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "Extracted version: $VERSION" + + - name: Configure git identity from RELEASE_PAT + if: steps.check.outputs.is_release_pr == 'true' + env: + GH_TOKEN: ${{ secrets.RELEASE_PAT }} + run: | + USER_JSON=$(gh api user) + git config user.name "$(echo "$USER_JSON" | jq -r '.login')" + git config user.email "$(echo "$USER_JSON" | jq -r '.id')+$(echo "$USER_JSON" | jq -r '.login')@users.noreply.github.com" + + - name: Record last-release-sha for release-please + if: steps.check.outputs.is_release_pr == 'true' + run: | + git fetch origin v2 + CUT_SHA=$(git merge-base origin/v2 HEAD) + echo "Release was cut from v2 at: $CUT_SHA" + jq --arg sha "$CUT_SHA" '. + {"last-release-sha": $sha}' \ + .github/release-please-config-v2.json > tmp.json && mv tmp.json .github/release-please-config-v2.json + git add .github/release-please-config-v2.json + git commit -m "chore: update last-release-sha for next v2 release" + git push origin release/v2-candidate + + - name: Rename release/v2-candidate to release/v{version} + if: steps.check.outputs.is_release_pr == 'true' + run: | + VERSION="v${STEPS_VERSION_OUTPUTS_VERSION}" + git push origin "release/v2-candidate:refs/heads/release/$VERSION" ":release/v2-candidate" + echo "Renamed release/v2-candidate to release/$VERSION" + env: + STEPS_VERSION_OUTPUTS_VERSION: ${{ steps.version.outputs.version }} + + - name: Update PR label to tagged + if: steps.check.outputs.is_release_pr == 'true' + env: + GH_TOKEN: ${{ github.token }} + run: | + gh pr edit ${{ github.event.pull_request.number }} \ + --remove-label "autorelease: pending" \ + --add-label "autorelease: tagged" + echo "Updated PR label to autorelease: tagged" diff --git a/.github/workflows/release-v2-please.yml b/.github/workflows/release-v2-please.yml new file mode 100644 index 0000000000..d659ca1c4e --- /dev/null +++ b/.github/workflows/release-v2-please.yml @@ -0,0 +1,41 @@ +# Runs release-please to create/update a PR with version bump and changelog for v2. +# Triggered only by workflow_dispatch (from release-v2-cut.yml). +# Does NOT auto-run on push to preserve manual changelog edits after cherry-picks. +name: "Release v2: Please" + +on: + # Only run via workflow_dispatch (triggered by release-v2-cut.yml) + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + release-please: + runs-on: ubuntu-latest + steps: + - name: Check if release/v2-candidate still exists + id: check + env: + GH_TOKEN: ${{ github.token }} + run: | + if gh api repos/${{ github.repository }}/branches/release/v2-candidate --silent 2>/dev/null; then + echo "exists=true" >> $GITHUB_OUTPUT + else + echo "release/v2-candidate branch no longer exists, skipping" + echo "exists=false" >> $GITHUB_OUTPUT + fi + + - uses: actions/checkout@v6 + if: steps.check.outputs.exists == 'true' + with: + ref: release/v2-candidate + + - uses: googleapis/release-please-action@v4 + if: steps.check.outputs.exists == 'true' + with: + token: ${{ secrets.RELEASE_PAT }} + config-file: .github/release-please-config-v2.json + manifest-file: .github/.release-please-manifest-v2.json + target-branch: release/v2-candidate diff --git a/.github/workflows/release-v2-publish.yml b/.github/workflows/release-v2-publish.yml new file mode 100644 index 0000000000..3ecb8f677d --- /dev/null +++ b/.github/workflows/release-v2-publish.yml @@ -0,0 +1,79 @@ +# Step 6 (v2): Builds and publishes the v2 package to PyPI from a release/v{version} branch. +# Converts semver pre-release version to PEP 440 format before building. +# Creates a merge-back PR (step 7) to sync release changes to v2. +name: "Release v2: Publish to PyPi" + +on: + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - name: Validate branch + run: | + if [[ ! "${GITHUB_REF_NAME}" =~ ^release/v[0-9]+\.[0-9]+\.[0-9]+ ]]; then + echo "Error: Must run from a release/v* branch (e.g., release/v2.0.0-alpha.1)" + exit 1 + fi + + - name: Extract and convert version to PEP 440 + id: version + run: | + VERSION="${GITHUB_REF_NAME}" + VERSION="${VERSION#release/v}" + echo "semver=$VERSION" >> $GITHUB_OUTPUT + echo "Semver version: $VERSION" + + # Convert semver pre-release to PEP 440: + # 2.0.0-alpha.1 -> 2.0.0a1 + # 2.0.0-beta.1 -> 2.0.0b1 + # 2.0.0-rc.1 -> 2.0.0rc1 + # 2.0.0 -> 2.0.0 (no change for stable) + PEP440=$(echo "$VERSION" | sed -E 's/-alpha\./a/; s/-beta\./b/; s/-rc\./rc/') + echo "pep440=$PEP440" >> $GITHUB_OUTPUT + echo "PEP 440 version: $PEP440" + + - uses: actions/checkout@v6 + + - name: Install uv + uses: astral-sh/setup-uv@v4 + with: + version: "latest" + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Update pyproject.toml with PEP 440 version + env: + PEP440_VERSION: ${{ steps.version.outputs.pep440 }} + run: | + # Update version in pyproject.toml if it differs from PEP 440 + sed -i "s/^version = .*/version = \"${PEP440_VERSION}\"/" pyproject.toml + echo "Updated pyproject.toml version to ${PEP440_VERSION}" + + - name: Build package + run: uv build + + - name: Publish to PyPI + env: + UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }} + run: uv publish + + - name: Create merge-back PR + env: + GH_TOKEN: ${{ secrets.RELEASE_PAT }} + SEMVER_VERSION: ${{ steps.version.outputs.semver }} + PEP440_VERSION: ${{ steps.version.outputs.pep440 }} + run: | + gh pr create \ + --base v2 \ + --head "${GITHUB_REF_NAME}" \ + --title "chore: merge release v${PEP440_VERSION} to v2" \ + --body "Syncs version bump and CHANGELOG from release v${SEMVER_VERSION} to v2." diff --git a/.github/workflows/v2-sync.yml b/.github/workflows/v2-sync.yml new file mode 100644 index 0000000000..c627f40d46 --- /dev/null +++ b/.github/workflows/v2-sync.yml @@ -0,0 +1,59 @@ +# Automatically creates a PR to merge main (v1) into v2 to keep v2 up to date. +# The oncall is responsible for reviewing and merging the sync PR. +name: "Sync: main -> v2" + +on: + schedule: + - cron: '0 6 * * *' # Daily at 6am UTC + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + ref: v2 + fetch-depth: 0 + token: ${{ secrets.RELEASE_PAT }} + + - name: Check for new commits on main + id: check + run: | + git fetch origin main + BEHIND=$(git rev-list --count HEAD..origin/main) + echo "behind=$BEHIND" >> $GITHUB_OUTPUT + if [ "$BEHIND" -eq 0 ]; then + echo "v2 is up to date with main, nothing to sync" + else + echo "v2 is $BEHIND commit(s) behind main" + fi + + - name: Check for existing sync PR + if: steps.check.outputs.behind != '0' + id: existing + env: + GH_TOKEN: ${{ github.token }} + run: | + PR=$(gh pr list --base v2 --head main --state open --json number --jq '.[0].number // empty') + if [ -n "$PR" ]; then + echo "Sync PR #$PR already exists, skipping" + echo "exists=true" >> $GITHUB_OUTPUT + else + echo "exists=false" >> $GITHUB_OUTPUT + fi + + - name: Create sync PR + if: steps.check.outputs.behind != '0' && steps.existing.outputs.exists == 'false' + env: + GH_TOKEN: ${{ secrets.RELEASE_PAT }} + run: | + gh pr create \ + --base v2 \ + --head main \ + --title "chore: sync main -> v2" \ + --body "Automated sync of v1 changes from main into v2. The oncall is responsible for reviewing and merging this PR. Resolve conflicts in favor of the v2 implementation." From 99a31bf77ea6fb2c53c313094734611dcb87b1e2 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Wed, 18 Mar 2026 13:28:20 -0700 Subject: [PATCH 044/192] refactor: rename agent simulator to environment simulation. Also add tracing into environment simulation PiperOrigin-RevId: 885759367 --- src/google/adk/features/_feature_registry.py | 4 + .../adk/tools/agent_simulator/__init__.py | 13 +- .../agent_simulator/agent_simulator_config.py | 177 +++----------- .../agent_simulator/agent_simulator_engine.py | 128 +--------- .../agent_simulator_factory.py | 61 +---- .../agent_simulator/agent_simulator_plugin.py | 32 +-- .../agent_simulator/strategies/__init__.py | 9 + .../tools/agent_simulator/strategies/base.py | 49 +--- .../strategies/tool_spec_mock_strategy.py | 196 +-------------- .../tool_connection_analyzer.py | 131 +--------- .../agent_simulator/tool_connection_map.py | 30 +-- .../tools/environment_simulation/__init__.py | 17 ++ .../environment_simulation_config.py | 170 +++++++++++++ .../environment_simulation_engine.py | 146 +++++++++++ .../environment_simulation_factory.py | 74 ++++++ .../environment_simulation_plugin.py | 44 ++++ .../strategies}/__init__.py | 0 .../environment_simulation/strategies/base.py | 65 +++++ .../strategies/tool_spec_mock_strategy.py | 228 ++++++++++++++++++ .../tool_connection_analyzer.py | 146 +++++++++++ .../tool_connection_map.py | 44 ++++ .../tools/environment_simulation/__init__.py | 13 + .../test_environment_simulation_engine.py} | 55 +++-- .../test_environment_simulation_factory.py} | 28 +-- .../test_environment_simulation_plugin.py} | 10 +- 25 files changed, 1125 insertions(+), 745 deletions(-) create mode 100644 src/google/adk/tools/environment_simulation/__init__.py create mode 100644 src/google/adk/tools/environment_simulation/environment_simulation_config.py create mode 100644 src/google/adk/tools/environment_simulation/environment_simulation_engine.py create mode 100644 src/google/adk/tools/environment_simulation/environment_simulation_factory.py create mode 100644 src/google/adk/tools/environment_simulation/environment_simulation_plugin.py rename {tests/unittests/tools/agent_simulator => src/google/adk/tools/environment_simulation/strategies}/__init__.py (100%) create mode 100644 src/google/adk/tools/environment_simulation/strategies/base.py create mode 100644 src/google/adk/tools/environment_simulation/strategies/tool_spec_mock_strategy.py create mode 100644 src/google/adk/tools/environment_simulation/tool_connection_analyzer.py create mode 100644 src/google/adk/tools/environment_simulation/tool_connection_map.py create mode 100644 tests/unittests/tools/environment_simulation/__init__.py rename tests/unittests/tools/{agent_simulator/test_agent_simulator_engine.py => environment_simulation/test_environment_simulation_engine.py} (77%) rename tests/unittests/tools/{agent_simulator/test_agent_simulator_factory.py => environment_simulation/test_environment_simulation_factory.py} (60%) rename tests/unittests/tools/{agent_simulator/test_agent_simulator_plugin.py => environment_simulation/test_environment_simulation_plugin.py} (79%) diff --git a/src/google/adk/features/_feature_registry.py b/src/google/adk/features/_feature_registry.py index 61759245f2..e42ebac6a9 100644 --- a/src/google/adk/features/_feature_registry.py +++ b/src/google/adk/features/_feature_registry.py @@ -37,6 +37,7 @@ class FeatureName(str, Enum): COMPUTER_USE = "COMPUTER_USE" DATA_AGENT_TOOL_CONFIG = "DATA_AGENT_TOOL_CONFIG" DATA_AGENT_TOOLSET = "DATA_AGENT_TOOLSET" + ENVIRONMENT_SIMULATION = "ENVIRONMENT_SIMULATION" GOOGLE_CREDENTIALS_CONFIG = "GOOGLE_CREDENTIALS_CONFIG" GOOGLE_TOOL = "GOOGLE_TOOL" JSON_SCHEMA_FOR_FUNC_DECL = "JSON_SCHEMA_FOR_FUNC_DECL" @@ -116,6 +117,9 @@ class FeatureConfig: FeatureName.DATA_AGENT_TOOLSET: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), + FeatureName.ENVIRONMENT_SIMULATION: FeatureConfig( + FeatureStage.EXPERIMENTAL, default_on=True + ), FeatureName.GOOGLE_CREDENTIALS_CONFIG: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), diff --git a/src/google/adk/tools/agent_simulator/__init__.py b/src/google/adk/tools/agent_simulator/__init__.py index 3c44035781..4e8b134b44 100644 --- a/src/google/adk/tools/agent_simulator/__init__.py +++ b/src/google/adk/tools/agent_simulator/__init__.py @@ -12,6 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -from google.adk.tools.agent_simulator.agent_simulator_factory import AgentSimulatorFactory +import warnings -__all__ = ["AgentSimulator"] +from google.adk.tools.environment_simulation import EnvironmentSimulationFactory as AgentSimulatorFactory + +warnings.warn( + "google.adk.tools.agent_simulator is moved to" + " google.adk.tools.environment_simulation", + DeprecationWarning, + stacklevel=2, +) + +__all__ = ["AgentSimulatorFactory"] diff --git a/src/google/adk/tools/agent_simulator/agent_simulator_config.py b/src/google/adk/tools/agent_simulator/agent_simulator_config.py index 17051c68b1..1b8b4df0ac 100644 --- a/src/google/adk/tools/agent_simulator/agent_simulator_config.py +++ b/src/google/adk/tools/agent_simulator/agent_simulator_config.py @@ -14,150 +14,51 @@ from __future__ import annotations -import enum from typing import Any -from typing import Dict -from typing import List -from typing import Optional +import warnings -from google.genai import types as genai_types -from pydantic import BaseModel -from pydantic import Field -from pydantic import field_validator +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_config import InjectedError +from google.adk.tools.environment_simulation.environment_simulation_config import InjectionConfig +from google.adk.tools.environment_simulation.environment_simulation_config import MockStrategy +from google.adk.tools.environment_simulation.environment_simulation_config import ToolSimulationConfig from pydantic import model_validator -from pydantic_core import ValidationError +warnings.warn( + "google.adk.tools.agent_simulator.agent_simulator_config is moved to" + " google.adk.tools.environment_simulation.environment_simulation_config", + DeprecationWarning, + stacklevel=2, +) -class InjectedError(BaseModel): - """An error to be injected into a tool call.""" - injected_http_error_code: int - """Inject http error code to the tool call. Will present as "error_code" - in the tool response dict.""" +class AgentSimulatorConfig(EnvironmentSimulationConfig): + """Deprecated AgentSimulatorConfig alias. - error_message: str - """Inject error message to the tool call. Will present as - "error_message" in the tool response dict.""" + Forwards tracing_path to tracing. + """ - -class InjectionConfig(BaseModel): - """Injection configuration for a tool.""" - - injection_probability: float = 1.0 - """Probability of injecting the injected_value.""" - - match_args: Optional[Dict[str, Any]] = None - """Only apply injection if the request matches the match_args. - If match_args is not provided, the injection will be applied to all - requests.""" - - injected_latency_seconds: float = Field(default=0.0, le=120.0) - """Inject latency to the tool call. Please note it may not be accurate if │ - the interceptor is applied as after tool callback.""" - - random_seed: Optional[int] = None - """The random seed to use for this injection.""" - - injected_error: Optional[InjectedError] = None - """The injected error.""" - - injected_response: Optional[Dict[str, Any]] = None - """The injected response.""" - - @model_validator(mode="after") - def check_injected_error_or_response(self) -> Self: - """Checks that either injected_error or injected_response is set.""" - if bool(self.injected_error) == bool(self.injected_response): - raise ValueError( - "Either injected_error or injected_response must be set, but not" - " both, and not neither." - ) - return self - - -class MockStrategy(enum.Enum): - """Mock strategy for a tool.""" - - MOCK_STRATEGY_UNSPECIFIED = 0 - - MOCK_STRATEGY_TOOL_SPEC = 1 - """Use tool specifications to mock the tool response.""" - - MOCK_STRATEGY_TRACING = 2 - """Use provided tracing and tool specifications to mock the tool - response based on llm response. Need to provide tracing path in - command.""" - - -class ToolSimulationConfig(BaseModel): - """Simulation configuration for a single tool.""" - - tool_name: str - """Name of the tool to be simulated.""" - - injection_configs: List[InjectionConfig] = Field(default_factory=list) - """Injection configuration for the tool. If provided, the tool will be - injected with the injected_value with the injection_probability first, - the mock_strategy will be applied if no injection config is hit.""" - - mock_strategy_type: MockStrategy = MockStrategy.MOCK_STRATEGY_UNSPECIFIED - """The mock strategy to use.""" - - @model_validator(mode="after") - def check_mock_strategy_type(self) -> Self: - """Checks that mock_strategy_type is not UNSPECIFIED if no injections.""" - if ( - not self.injection_configs - and self.mock_strategy_type == MockStrategy.MOCK_STRATEGY_UNSPECIFIED - ): - raise ValueError( - "If injection_configs is empty, mock_strategy_type cannot be" - " MOCK_STRATEGY_UNSPECIFIED." - ) - return self - - -class AgentSimulatorConfig(BaseModel): - """Configuration for AgentSimulator.""" - - tool_simulation_configs: List[ToolSimulationConfig] = Field( - default_factory=list - ) - """A list of tool simulation configurations.""" - - simulation_model: str = Field(default="gemini-2.5-flash") - """The model to use for internal simulator LLM calls (tool analysis, mock responses).""" - - simulation_model_configuration: genai_types.GenerateContentConfig = Field( - default_factory=lambda: genai_types.GenerateContentConfig( - thinking_config=genai_types.ThinkingConfig( - include_thoughts=False, - thinking_budget=10240, - ) - ), - ) - """The configuration for the internal simulator LLM calls.""" - - tracing_path: Optional[str] = None - """The path to the tracing file to be used for mocking. Only used if the - mock_strategy_type is MOCK_STRATEGY_TRACING.""" - - environment_data: Optional[str] = None - """Environment-specific data (e.g., a minimal database dump in JSON string - format). This data is passed directly to mock strategies for contextual - mock generation.""" - - @field_validator("tool_simulation_configs") + @model_validator(mode="before") @classmethod - def check_tool_simulation_configs(cls, v: List[ToolSimulationConfig]): - """Checks that tool_simulation_configs is not empty.""" - if not v: - raise ValueError("tool_simulation_configs must be provided.") - seen_tool_names = set() - for tool_sim_config in v: - if tool_sim_config.tool_name in seen_tool_names: - raise ValueError( - f"Duplicate tool_name found: {tool_sim_config.tool_name}" - ) - seen_tool_names.add(tool_sim_config.tool_name) - return v + def convert_tracing_path(cls, data: Any) -> Any: + """Convert tracing_path to tracing.""" + if isinstance(data, dict) and "tracing_path" in data: + warnings.warn( + "`tracing_path` is deprecated. Use `tracing` instead.", + DeprecationWarning, + stacklevel=2, + ) + if "tracing" not in data: + data["tracing"] = data.pop("tracing_path") + else: + data.pop("tracing_path") + return data + + +__all__ = [ + "AgentSimulatorConfig", + "InjectedError", + "InjectionConfig", + "MockStrategy", + "ToolSimulationConfig", +] diff --git a/src/google/adk/tools/agent_simulator/agent_simulator_engine.py b/src/google/adk/tools/agent_simulator/agent_simulator_engine.py index 577e8639e0..91d3962f4e 100644 --- a/src/google/adk/tools/agent_simulator/agent_simulator_engine.py +++ b/src/google/adk/tools/agent_simulator/agent_simulator_engine.py @@ -14,125 +14,15 @@ from __future__ import annotations -import asyncio -import concurrent.futures -import logging -import random -import time -from typing import Any -from typing import Dict -from typing import Optional +import warnings -agent_simulator_logger = logging.getLogger("agent_simulator_logger") +from google.adk.tools.environment_simulation.environment_simulation_engine import EnvironmentSimulationEngine as AgentSimulatorEngine -from google.adk.agents.llm_agent import LlmAgent -from google.adk.tools.agent_simulator.agent_simulator_config import AgentSimulatorConfig -from google.adk.tools.agent_simulator.agent_simulator_config import MockStrategy as MockStrategyEnum -from google.adk.tools.agent_simulator.agent_simulator_config import ToolSimulationConfig -from google.adk.tools.agent_simulator.strategies import base as base_mock_strategies -from google.adk.tools.agent_simulator.strategies import tool_spec_mock_strategy -from google.adk.tools.agent_simulator.tool_connection_analyzer import ToolConnectionAnalyzer -from google.adk.tools.agent_simulator.tool_connection_map import ToolConnectionMap -from google.adk.tools.base_tool import BaseTool +warnings.warn( + "google.adk.tools.agent_simulator.agent_simulator_engine is moved to" + " google.adk.tools.environment_simulation.environment_simulation_engine", + DeprecationWarning, + stacklevel=2, +) - -def _create_mock_strategy( - mock_strategy_type: MockStrategyEnum, - llm_name: str, - llm_config: genai_types.GenerateContentConfig, -) -> base_mock_strategies.MockStrategy: - """Creates a mock strategy based on the given type.""" - if mock_strategy_type == MockStrategyEnum.MOCK_STRATEGY_TOOL_SPEC: - return tool_spec_mock_strategy.ToolSpecMockStrategy(llm_name, llm_config) - if mock_strategy_type == MockStrategyEnum.MOCK_STRATEGY_TRACING: - return base_mock_strategies.TracingMockStrategy() - raise ValueError(f"Unknown mock strategy type: {mock_strategy_type}") - - -class AgentSimulatorEngine: - """Core engine to handle the simulation logic.""" - - def __init__(self, config: AgentSimulatorConfig): - self._config = config - self._tool_sim_configs = { - c.tool_name: c for c in config.tool_simulation_configs - } - self._is_analyzed = False - self._tool_connection_map: Optional[ToolConnectionMap] = None - self._analyzer = ToolConnectionAnalyzer( - llm_name=config.simulation_model, - llm_config=config.simulation_model_configuration, - ) - self._state_store = {} - self._random_generator = random.Random() - self._environment_data = config.environment_data - - async def simulate( - self, tool: BaseTool, args: Dict[str, Any], tool_context: Any - ) -> Optional[Dict[str, Any]]: - """Simulates a tool call.""" - if tool.name not in self._tool_sim_configs: - return None - - tool_sim_config = self._tool_sim_configs[tool.name] - - if not self._is_analyzed and any( - c.mock_strategy_type != MockStrategyEnum.MOCK_STRATEGY_UNSPECIFIED - for c in self._config.tool_simulation_configs - ): - agent = tool_context._invocation_context.agent - if isinstance(agent, LlmAgent): - tools = await agent.canonical_tools(tool_context) - self._tool_connection_map = await self._analyzer.analyze(tools) - self._is_analyzed = True - - for injection_config in tool_sim_config.injection_configs: - if injection_config.match_args: - if not all( - item in args.items() for item in injection_config.match_args.items() - ): - continue - - if injection_config.random_seed is not None: - self._random_generator.seed(injection_config.random_seed) - - if ( - self._random_generator.random() - < injection_config.injection_probability - ): - time.sleep(injection_config.injected_latency_seconds) - if injection_config.injected_error: - return { - "error_code": ( - injection_config.injected_error.injected_http_error_code - ), - "error_message": injection_config.injected_error.error_message, - } - if injection_config.injected_response: - return injection_config.injected_response - - # If no injection was applied, fall back to the mock strategy. - if ( - tool_sim_config.mock_strategy_type - == MockStrategyEnum.MOCK_STRATEGY_UNSPECIFIED - ): - agent_simulator_logger.warning( - "Tool '%s' did not hit any injection config and has no mock strategy" - " configured. Returning no-op.", - tool.name, - ) - return None - - mock_strategy = _create_mock_strategy( - tool_sim_config.mock_strategy_type, - self._config.simulation_model, - self._config.simulation_model_configuration, - ) - return await mock_strategy.mock( - tool, - args, - tool_context, - self._tool_connection_map, - self._state_store, - self._environment_data, - ) +__all__ = ["AgentSimulatorEngine"] diff --git a/src/google/adk/tools/agent_simulator/agent_simulator_factory.py b/src/google/adk/tools/agent_simulator/agent_simulator_factory.py index 49a7cd2c3e..11af5df84e 100644 --- a/src/google/adk/tools/agent_simulator/agent_simulator_factory.py +++ b/src/google/adk/tools/agent_simulator/agent_simulator_factory.py @@ -14,58 +14,15 @@ from __future__ import annotations -from typing import Any -from typing import Awaitable -from typing import Callable -from typing import Dict -from typing import Optional +import warnings -from google.adk.tools.agent_simulator.agent_simulator_config import AgentSimulatorConfig -from google.adk.tools.agent_simulator.agent_simulator_engine import AgentSimulatorEngine -from google.adk.tools.agent_simulator.agent_simulator_plugin import AgentSimulatorPlugin -from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.environment_simulation_factory import EnvironmentSimulationFactory as AgentSimulatorFactory -from ...utils.feature_decorator import experimental +warnings.warn( + "google.adk.tools.agent_simulator.agent_simulator_factory is moved to" + " google.adk.tools.environment_simulation.environment_simulation_factory", + DeprecationWarning, + stacklevel=2, +) - -@experimental -class AgentSimulatorFactory: - """Factory for creating AgentSimulator instances.""" - - @staticmethod - def create_callback( - config: AgentSimulatorConfig, - ) -> Callable[ - [BaseTool, Dict[str, Any], Any], Awaitable[Optional[Dict[str, Any]]] - ]: - """Creates a callback function for AgentSimulator. - - Args: - config: The configuration for the AgentSimulator. - - Returns: - A callable that can be used as a before_tool_callback or after_tool_callback. - """ - simulator_engine = AgentSimulatorEngine(config) - - async def _agent_simulator_callback( - tool: BaseTool, args: Dict[str, Any], tool_context: Any - ) -> Optional[Dict[str, Any]]: - return await simulator_engine.simulate(tool, args, tool_context) - - return _agent_simulator_callback - - @staticmethod - def create_plugin( - config: AgentSimulatorConfig, - ) -> AgentSimulatorPlugin: - """Creates an ADK Plugin for AgentSimulator. - - Args: - config: The configuration for the AgentSimulator. - - Returns: - An instance of AgentSimulatorPlugin that can be used as an ADK plugin. - """ - simulator_engine = AgentSimulatorEngine(config) - return AgentSimulatorPlugin(simulator_engine) +__all__ = ["AgentSimulatorFactory"] diff --git a/src/google/adk/tools/agent_simulator/agent_simulator_plugin.py b/src/google/adk/tools/agent_simulator/agent_simulator_plugin.py index 0fb86a9f4d..9f883a0a3f 100644 --- a/src/google/adk/tools/agent_simulator/agent_simulator_plugin.py +++ b/src/google/adk/tools/agent_simulator/agent_simulator_plugin.py @@ -1,4 +1,4 @@ -# Copyright 2024 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,27 +14,15 @@ from __future__ import annotations -from typing import Any -from typing import Dict -from typing import Optional +import warnings -from google.adk.plugins import BasePlugin -from google.adk.tools.agent_simulator.agent_simulator_config import AgentSimulatorConfig -from google.adk.tools.agent_simulator.agent_simulator_engine import AgentSimulatorEngine -from google.adk.tools.base_tool import BaseTool -from google.adk.tools.tool_context import ToolContext +from google.adk.tools.environment_simulation.environment_simulation_plugin import EnvironmentSimulationPlugin as AgentSimulatorPlugin +warnings.warn( + "google.adk.tools.agent_simulator.agent_simulator_plugin is moved to" + " google.adk.tools.environment_simulation.environment_simulation_plugin", + DeprecationWarning, + stacklevel=2, +) -class AgentSimulatorPlugin(BasePlugin): - """ADK Plugin for AgentSimulator.""" - - name: str = "AgentSimulator" - - def __init__(self, simulator_engine: AgentSimulatorEngine): - self._simulator_engine = simulator_engine - - async def before_tool_callback( - self, tool: BaseTool, tool_args: dict[str, Any], tool_context: ToolContext - ) -> Optional[Dict[str, Any]]: - """Invokes the AgentSimulatorEngine before a tool call.""" - return await self._simulator_engine.simulate(tool, tool_args, tool_context) +__all__ = ["AgentSimulatorPlugin"] diff --git a/src/google/adk/tools/agent_simulator/strategies/__init__.py b/src/google/adk/tools/agent_simulator/strategies/__init__.py index 58d482ea38..f1dc50a2fa 100644 --- a/src/google/adk/tools/agent_simulator/strategies/__init__.py +++ b/src/google/adk/tools/agent_simulator/strategies/__init__.py @@ -11,3 +11,12 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + +import warnings + +warnings.warn( + "google.adk.tools.agent_simulator.strategies is moved to" + " google.adk.tools.environment_simulation.strategies", + DeprecationWarning, + stacklevel=2, +) diff --git a/src/google/adk/tools/agent_simulator/strategies/base.py b/src/google/adk/tools/agent_simulator/strategies/base.py index d4ffe1bd92..7d71fbb07c 100644 --- a/src/google/adk/tools/agent_simulator/strategies/base.py +++ b/src/google/adk/tools/agent_simulator/strategies/base.py @@ -14,46 +14,15 @@ from __future__ import annotations -from typing import Any -from typing import Dict -from typing import Optional +import warnings -from google.adk.tools.agent_simulator.tool_connection_map import ToolConnectionMap +from google.adk.tools.environment_simulation.strategies.base import MockStrategy +warnings.warn( + "google.adk.tools.agent_simulator.strategies.base is moved to" + " google.adk.tools.environment_simulation.strategies.base", + DeprecationWarning, + stacklevel=2, +) -class MockStrategy: - """Base class for mock strategies.""" - - async def mock( - self, - tool: BaseTool, - args: Dict[str, Any], - tool_context: Any, - tool_connection_map: Optional[ToolConnectionMap], - state_store: Dict[str, Any], - environment_data: Optional[str] = None, - ) -> Dict[str, Any]: - """Generates a mock response for a tool call.""" - raise NotImplementedError() - - -class TracingMockStrategy(MockStrategy): - """Mocks a tool response based on tracing and an LLM.""" - - def __init__( - self, llm_name: str, llm_config: genai_types.GenerateContentConfig - ): - self._llm_name = llm_name - self._llm_config = llm_config - - async def mock( - self, - tool: BaseTool, - args: Dict[str, Any], - tool_context: Any, - tool_connection_map: Optional[ToolConnectionMap], - state_store: Dict[str, Any], - environment_data: Optional[str] = None, - ) -> Dict[str, Any]: - # TODO: Implement tracing LLM-based mocking. - return {"status": "error", "error_message": "Not implemented"} +__all__ = ["MockStrategy"] diff --git a/src/google/adk/tools/agent_simulator/strategies/tool_spec_mock_strategy.py b/src/google/adk/tools/agent_simulator/strategies/tool_spec_mock_strategy.py index 2ad3a89265..9da5c78480 100644 --- a/src/google/adk/tools/agent_simulator/strategies/tool_spec_mock_strategy.py +++ b/src/google/adk/tools/agent_simulator/strategies/tool_spec_mock_strategy.py @@ -14,192 +14,16 @@ from __future__ import annotations -import asyncio -import concurrent.futures -import json -import re -from typing import Any -from typing import Dict -from typing import Optional +import warnings -from google.adk.models.llm_request import LlmRequest -from google.adk.models.registry import LLMRegistry -from google.adk.tools.agent_simulator.strategies.base import MockStrategy -from google.adk.tools.agent_simulator.tool_connection_map import ToolConnectionMap -from google.adk.tools.base_tool import BaseTool -from google.adk.utils.context_utils import Aclosing -from google.genai import types as genai_types +from google.adk.tools.environment_simulation.strategies.tool_spec_mock_strategy import ToolSpecMockStrategy -_TOOL_SPEC_MOCK_PROMPT_TEMPLATE = """ - You are a stateful tool simulator. Your task is to generate a - realistic JSON response for a tool call, maintaining consistency based - on a shared state. +warnings.warn( + "google.adk.tools.agent_simulator.strategies.tool_spec_mock_strategy is" + " moved to" + " google.adk.tools.environment_simulation.strategies.tool_spec_mock_strategy", + DeprecationWarning, + stacklevel=2, +) - {environment_data_snippet} - - Here is the map of how tools connect via stateful parameters: - {tool_connection_map_json} - - Here is the current state of all stateful parameters: - {state_store_json} - - You are now simulating the following tool call: - Tool Name: {tool_name} - Tool Description: {tool_description} - Tool Schema: {tool_schema_json} - Tool Arguments: {tool_arguments_json} - - Your instructions: - 1. Analyze the tool call. Is it a "creating" or "consuming" tool - based on the connection map? - 2. If it's a "consuming" tool, check the provided arguments against - the state store. If an ID is provided that does not exist in the - state, return a realistic error (e.g., a 404 Not Found error). - Otherwise, use the data from the state and the provided environment data - to generate the response. - 3. If it's a "creating" tool, generate a new, unique ID for the - stateful parameter (e.g., a random string for a ticket_id). Include - this new ID in your response. I will then update the state with it. - 4. Leverage the provided environment data (if any) to make your response - more realistic and consistent with the simulated environment. - 5. Generate a convincing, valid JSON object that mocks the tool's - response. The response must be only the JSON object, without any - additional text or formatting. - 6. The response must start with '{{' and end with '}}'. - """ - - -def _find_value_by_key(data: Any, target_key: str) -> Optional[Any]: - """Recursively searches for a value by key in a nested structure.""" - if isinstance(data, dict): - if target_key in data: - return data[target_key] - for key, value in data.items(): - result = _find_value_by_key(value, target_key) - if result is not None: - return result - elif isinstance(data, list): - for item in data: - result = _find_value_by_key(item, target_key) - if result is not None: - return result - return None - - -class ToolSpecMockStrategy(MockStrategy): - """Mocks a tool response based on the tool's specification.""" - - def __init__( - self, llm_name: str, llm_config: genai_types.GenerateContentConfig - ): - self._llm_name = llm_name - self._llm_config = llm_config - llm_registry = LLMRegistry() - llm_class = llm_registry.resolve(self._llm_name) - self._llm = llm_class(model=self._llm_name) - - async def mock( - self, - tool: BaseTool, - args: Dict[str, Any], - tool_context: Any, - tool_connection_map: Optional[ToolConnectionMap], - state_store: Dict[str, Any], - environment_data: Optional[str] = None, - ) -> Dict[str, Any]: - declaration = tool._get_declaration() - if not declaration: - return { - "status": "error", - "error_message": "Could not get tool declaration.", - } - - tool_connection_map_json = ( - json.dumps(tool_connection_map.model_dump(exclude_none=True), indent=2) - if tool_connection_map - else "''" - ) - state_store_json = json.dumps(state_store, indent=2) - tool_schema_json = json.dumps( - declaration.model_dump(exclude_none=True), indent=2 - ) - tool_arguments_json = json.dumps(args, indent=2) - - environment_data_snippet = "" - if environment_data: - environment_data_snippet = f""" - Here is relevant environment data (e.g., database snippet, context information): - - {environment_data} - - Use this information to generate more realistic responses. - """ - - prompt = _TOOL_SPEC_MOCK_PROMPT_TEMPLATE.format( - environment_data_snippet=environment_data_snippet, - tool_connection_map_json=tool_connection_map_json, - state_store_json=state_store_json, - tool_name=tool.name, - tool_description=tool.description, - tool_schema_json=tool_schema_json, - tool_arguments_json=tool_arguments_json, - ) - - request_contents = [ - genai_types.Content(parts=[genai_types.Part(text=prompt)], role="user") - ] - request = LlmRequest( - contents=request_contents, - model=self._llm_name, - config=self._llm_config, - generation_config=genai_types.GenerateContentConfig( - response_mime_type="application/json" - ), - ) - response_text = "" - async with Aclosing(self._llm.generate_content_async(request)) as agen: - async for llm_response in agen: - generated_content: genai_types.Content = llm_response.content - if generated_content.parts: - for part in generated_content.parts: - if part.text: - response_text += part.text - - try: - clean_json_text = re.sub(r"^```[a-zA-Z]*\n", "", response_text) - clean_json_text = re.sub(r"\n```$", "", clean_json_text) - mock_response = json.loads(clean_json_text.strip()) - # Determine if the current tool is mutative by checking the connection map. - is_mutative = False - if tool_connection_map: - all_creating_tools = { - tool_name - for param in tool_connection_map.stateful_parameters - for tool_name in param.creating_tools - } - if tool.name in all_creating_tools: - is_mutative = True - - # After getting the response, update the state if this was a mutative tool. - if is_mutative: - for param_info in tool_connection_map.stateful_parameters: - param_name = param_info.parameter_name - # Only update the state for the specific parameter this tool - # creates/modifies. - if tool.name in param_info.creating_tools: - param_value = _find_value_by_key(mock_response, param_name) - if param_value is not None: - if param_name not in state_store: - state_store[param_name] = {} - # Store the entire response as the new state for this entity. - # This correctly captures creations and modifications (like - # cancellation). - state_store[param_name][param_value] = mock_response - - return mock_response - except json.JSONDecodeError: - return { - "status": "error", - "error_message": "Failed to generate valid JSON mock response.", - "llm_output": response_text, - } +__all__ = ["ToolSpecMockStrategy"] diff --git a/src/google/adk/tools/agent_simulator/tool_connection_analyzer.py b/src/google/adk/tools/agent_simulator/tool_connection_analyzer.py index 91655e7b85..599db0111a 100644 --- a/src/google/adk/tools/agent_simulator/tool_connection_analyzer.py +++ b/src/google/adk/tools/agent_simulator/tool_connection_analyzer.py @@ -14,128 +14,15 @@ from __future__ import annotations -import asyncio -import concurrent.futures -import json -import logging -import re -from typing import Any -from typing import Dict -from typing import List +import warnings -from google.adk.models.llm_request import LlmRequest -from google.adk.models.registry import LLMRegistry -from google.adk.tools.agent_simulator.tool_connection_map import ToolConnectionMap -from google.adk.tools.base_tool import BaseTool -from google.adk.utils.context_utils import Aclosing -from google.genai import types as genai_types +from google.adk.tools.environment_simulation.tool_connection_analyzer import ToolConnectionAnalyzer -_TOOL_CONNECTION_ANALYSIS_PROMPT_TEMPLATE = """ - You are an expert software architect analyzing a set of tools to understand - stateful dependencies. Your task is to identify parameters that act as - stateful identifiers (like IDs) and classify the tools that interact with - them. +warnings.warn( + "google.adk.tools.agent_simulator.tool_connection_analyzer is moved to" + " google.adk.tools.environment_simulation.tool_connection_analyzer", + DeprecationWarning, + stacklevel=2, +) - **Definitions:** - - A **"creating tool"** is a tool that creates a new resource or makes a - significant state change to an existing one (e.g., creating, updating, - canceling, or deleting). Tool names like `create_account`, `cancel_order`, - or `update_price` are strong indicators. These tools are responsible for - generating or modifying the state associated with an ID. - - A **"consuming tool"** is a tool that uses a resource's ID to retrieve - information without changing its state. Tool names like `get_user`, - `list_events`, or `find_order` are strong indicators. - - **Your Goal:** - Analyze the following tool schemas and identify the shared, stateful - parameters (like `user_id`, `order_id`, etc.). - - For each stateful parameter you identify, classify the tools into - `creating_tools` and `consuming_tools` based on the definitions above. - - **Example:** A `create_ticket` tool would be a `creating_tool` for - `ticket_id`. A `get_ticket` tool would be a `consuming_tool` for - `ticket_id`. A `list_tickets` tool that takes a `user_id` as input is a - `consuming_tool` for `user_id`. - - **Analyze the following tool schemas:** - {tool_schemas_json} - - **Output Format:** - Generate a JSON object with a single key, "stateful_parameters", which is a - list. Each item in the list must have these keys: - - "parameter_name": The name of the shared parameter (e.g., "ticket_id"). - - "creating_tools": A list of tools that create or modify this parameter's - state. - - "consuming_tools": A list of tools that use this parameter as input for - read-only operations. - - ONLY return the raw JSON object. - Your response must start with '{{' and end with '}}'. - """ - - -class ToolConnectionAnalyzer: - """ - Uses an LLM to analyze stateful connections between tools. For example, - get_ticket will consume a ticket_id created by create_ticket, the analyzer - will create a list of such connections. - """ - - def __init__( - self, llm_name: str, llm_config: genai_types.GenerateContentConfig - ): - self._llm_name = llm_name - self._llm_config = llm_config - llm_registry = LLMRegistry() - llm_class = llm_registry.resolve(self._llm_name) - self._llm = llm_class(model=self._llm_name) - - async def analyze(self, tools: List[BaseTool]) -> ToolConnectionMap: - """ - Analyzes a list of tools and returns a map of their connections. - """ - tool_schemas = [ - tool._get_declaration().model_dump(exclude_none=True) - for tool in tools - if tool._get_declaration() - ] - tool_schemas_json = json.dumps(tool_schemas, indent=2) - prompt = _TOOL_CONNECTION_ANALYSIS_PROMPT_TEMPLATE.format( - tool_schemas_json=tool_schemas_json - ) - - request_contents = [ - genai_types.Content(parts=[genai_types.Part(text=prompt)], role="user") - ] - request = LlmRequest( - contents=request_contents, - model=self._llm_name, - config=self._llm_config, - generation_config=genai_types.GenerateContentConfig( - response_mime_type="application/json" - ), - ) - response_text = "" - async with Aclosing(self._llm.generate_content_async(request)) as agen: - async for llm_response in agen: - generated_content: genai_types.Content = llm_response.content - if not generated_content.parts: - continue - for part in generated_content.parts: - if part.text: - response_text += part.text - - try: - clean_json_text = re.sub(r"^```[a-zA-Z]*\n", "", response_text) - clean_json_text = re.sub(r"\n```$", "", clean_json_text) - response_json = json.loads(clean_json_text.strip()) - except json.JSONDecodeError: - logging.warning( - "Failed to parse tool connection analysis from LLM. Proceeding" - " without connection map. Error: %s\nLLM Output:\n%s", - e, - response_text, - ) - return ToolConnectionMap(stateful_parameters=[]) - return ToolConnectionMap.model_validate(response_json) +__all__ = ["ToolConnectionAnalyzer"] diff --git a/src/google/adk/tools/agent_simulator/tool_connection_map.py b/src/google/adk/tools/agent_simulator/tool_connection_map.py index 4063b3c368..0560995bf7 100644 --- a/src/google/adk/tools/agent_simulator/tool_connection_map.py +++ b/src/google/adk/tools/agent_simulator/tool_connection_map.py @@ -14,26 +14,16 @@ from __future__ import annotations -from typing import List +import warnings -from pydantic import BaseModel +from google.adk.tools.environment_simulation.tool_connection_map import StatefulParameter +from google.adk.tools.environment_simulation.tool_connection_map import ToolConnectionMap +warnings.warn( + "google.adk.tools.agent_simulator.tool_connection_map is moved to" + " google.adk.tools.environment_simulation.tool_connection_map", + DeprecationWarning, + stacklevel=2, +) -class StatefulParameter(BaseModel): - """Represents a stateful parameter and its connections.""" - - parameter_name: str - """The name of the shared parameter (e.g., "ticket_id").""" - - creating_tools: List[str] - """A list of tools that generate this parameter.""" - - consuming_tools: List[str] - """A list of tools that use this parameter as input.""" - - -class ToolConnectionMap(BaseModel): - """Represents the map of tool connections.""" - - stateful_parameters: List[StatefulParameter] - """A list of stateful parameters and their connections.""" +__all__ = ["StatefulParameter", "ToolConnectionMap"] diff --git a/src/google/adk/tools/environment_simulation/__init__.py b/src/google/adk/tools/environment_simulation/__init__.py new file mode 100644 index 0000000000..4479d36bc0 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/__init__.py @@ -0,0 +1,17 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from google.adk.tools.environment_simulation.environment_simulation_factory import EnvironmentSimulationFactory + +__all__ = ["EnvironmentSimulationFactory"] diff --git a/src/google/adk/tools/environment_simulation/environment_simulation_config.py b/src/google/adk/tools/environment_simulation/environment_simulation_config.py new file mode 100644 index 0000000000..a1ade063d3 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/environment_simulation_config.py @@ -0,0 +1,170 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import enum +from typing import Any +from typing import Dict +from typing import List +from typing import Optional + +from google.genai import types as genai_types +from pydantic import BaseModel +from pydantic import Field +from pydantic import field_validator +from pydantic import model_validator +from pydantic_core import ValidationError + +from ...features import experimental +from ...features import FeatureName + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class InjectedError(BaseModel): + """An error to be injected into a tool call.""" + + injected_http_error_code: int + """Inject http error code to the tool call. Will present as "error_code" + in the tool response dict.""" + + error_message: str + """Inject error message to the tool call. Will present as + "error_message" in the tool response dict.""" + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class InjectionConfig(BaseModel): + """Injection configuration for a tool.""" + + injection_probability: float = 1.0 + """Probability of injecting the injected_value.""" + + match_args: Optional[Dict[str, Any]] = None + """Only apply injection if the request matches the match_args. + If match_args is not provided, the injection will be applied to all + requests.""" + + injected_latency_seconds: float = Field(default=0.0, le=120.0) + """Inject latency to the tool call. Please note it may not be accurate if │ + the interceptor is applied as after tool callback.""" + + random_seed: Optional[int] = None + """The random seed to use for this injection.""" + + injected_error: Optional[InjectedError] = None + """The injected error.""" + + injected_response: Optional[Dict[str, Any]] = None + """The injected response.""" + + @model_validator(mode="after") + def check_injected_error_or_response(self) -> Self: + """Checks that either injected_error or injected_response is set.""" + if bool(self.injected_error) == bool(self.injected_response): + raise ValueError( + "Either injected_error or injected_response must be set, but not" + " both, and not neither." + ) + return self + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class MockStrategy(enum.Enum): + """Mock strategy for a tool.""" + + MOCK_STRATEGY_UNSPECIFIED = 0 + + MOCK_STRATEGY_TOOL_SPEC = 1 + """Use tool specifications to mock the tool response.""" + + MOCK_STRATEGY_TRACING = 2 + """Deprecated, please use MOCK_STRATEGY_TOOL_SPEC with tracing input.""" + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class ToolSimulationConfig(BaseModel): + """Simulation configuration for a single tool.""" + + tool_name: str + """Name of the tool to be simulated.""" + + injection_configs: List[InjectionConfig] = Field(default_factory=list) + """Injection configuration for the tool. If provided, the tool will be + injected with the injected_value with the injection_probability first, + the mock_strategy will be applied if no injection config is hit.""" + + mock_strategy_type: MockStrategy = MockStrategy.MOCK_STRATEGY_UNSPECIFIED + """The mock strategy to use.""" + + @model_validator(mode="after") + def check_mock_strategy_type(self) -> Self: + """Checks that mock_strategy_type is not UNSPECIFIED if no injections.""" + if ( + not self.injection_configs + and self.mock_strategy_type == MockStrategy.MOCK_STRATEGY_UNSPECIFIED + ): + raise ValueError( + "If injection_configs is empty, mock_strategy_type cannot be" + " MOCK_STRATEGY_UNSPECIFIED." + ) + return self + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class EnvironmentSimulationConfig(BaseModel): + """Configuration for EnvironmentSimulation.""" + + tool_simulation_configs: List[ToolSimulationConfig] = Field( + default_factory=list + ) + """A list of tool simulation configurations.""" + + simulation_model: str = Field(default="gemini-2.5-flash") + """The model to use for internal simulator LLM calls (tool analysis, mock responses).""" + + simulation_model_configuration: genai_types.GenerateContentConfig = Field( + default_factory=lambda: genai_types.GenerateContentConfig( + thinking_config=genai_types.ThinkingConfig( + include_thoughts=False, + thinking_budget=10240, + ) + ), + ) + """The configuration for the internal simulator LLM calls.""" + + tracing: Optional[str] = None + """Tracing data (e.g., a prior agent run trace in JSON string format) to + provide historical context for mock generation. Passed directly to mock + strategies alongside environment_data.""" + + environment_data: Optional[str] = None + """Environment-specific data (e.g., a minimal database dump in JSON string + format). This data is passed directly to mock strategies for contextual + mock generation.""" + + @field_validator("tool_simulation_configs") + @classmethod + def check_tool_simulation_configs(cls, v: List[ToolSimulationConfig]): + """Checks that tool_simulation_configs is not empty.""" + if not v: + raise ValueError("tool_simulation_configs must be provided.") + seen_tool_names = set() + for tool_sim_config in v: + if tool_sim_config.tool_name in seen_tool_names: + raise ValueError( + f"Duplicate tool_name found: {tool_sim_config.tool_name}" + ) + seen_tool_names.add(tool_sim_config.tool_name) + return v diff --git a/src/google/adk/tools/environment_simulation/environment_simulation_engine.py b/src/google/adk/tools/environment_simulation/environment_simulation_engine.py new file mode 100644 index 0000000000..41566ec5d1 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/environment_simulation_engine.py @@ -0,0 +1,146 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +import concurrent.futures +import logging +import random +import time +from typing import Any +from typing import Dict +from typing import Optional + +environment_simulation_logger = logging.getLogger( + "environment_simulation_logger" +) + +from google.adk.agents.llm_agent import LlmAgent +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_config import MockStrategy as MockStrategyEnum +from google.adk.tools.environment_simulation.environment_simulation_config import ToolSimulationConfig +from google.adk.tools.environment_simulation.strategies import base as base_mock_strategies +from google.adk.tools.environment_simulation.strategies import tool_spec_mock_strategy +from google.adk.tools.environment_simulation.tool_connection_analyzer import ToolConnectionAnalyzer +from google.adk.tools.environment_simulation.tool_connection_map import ToolConnectionMap + +from ...features import FeatureName +from ...features import experimental + + +def _create_mock_strategy( + mock_strategy_type: MockStrategyEnum, + llm_name: str, + llm_config: genai_types.GenerateContentConfig, +) -> base_mock_strategies.MockStrategy: + """Creates a mock strategy based on the given type.""" + if mock_strategy_type == MockStrategyEnum.MOCK_STRATEGY_TOOL_SPEC: + return tool_spec_mock_strategy.ToolSpecMockStrategy(llm_name, llm_config) + if mock_strategy_type == MockStrategyEnum.MOCK_STRATEGY_TRACING: + return base_mock_strategies.TracingMockStrategy(llm_name, llm_config) + raise ValueError(f"Unknown mock strategy type: {mock_strategy_type}") + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class EnvironmentSimulationEngine: + """Core engine to handle the simulation logic.""" + + def __init__(self, config: EnvironmentSimulationConfig): + self._config = config + self._tool_sim_configs = { + c.tool_name: c for c in config.tool_simulation_configs + } + self._is_analyzed = False + self._tool_connection_map: Optional[ToolConnectionMap] = None + self._analyzer = ToolConnectionAnalyzer( + llm_name=config.simulation_model, + llm_config=config.simulation_model_configuration, + ) + self._state_store = {} + self._random_generator = random.Random() + self._environment_data = config.environment_data + self._tracing = config.tracing + + async def simulate( + self, tool: BaseTool, args: Dict[str, Any], tool_context: Any + ) -> Optional[Dict[str, Any]]: + """Simulates a tool call.""" + if tool.name not in self._tool_sim_configs: + return None + + tool_sim_config = self._tool_sim_configs[tool.name] + + if not self._is_analyzed and any( + c.mock_strategy_type != MockStrategyEnum.MOCK_STRATEGY_UNSPECIFIED + for c in self._config.tool_simulation_configs + ): + agent = tool_context._invocation_context.agent + if isinstance(agent, LlmAgent): + tools = await agent.canonical_tools(tool_context) + self._tool_connection_map = await self._analyzer.analyze(tools) + self._is_analyzed = True + + for injection_config in tool_sim_config.injection_configs: + if injection_config.match_args: + if not all( + item in args.items() for item in injection_config.match_args.items() + ): + continue + + if injection_config.random_seed is not None: + self._random_generator.seed(injection_config.random_seed) + + if ( + self._random_generator.random() + < injection_config.injection_probability + ): + time.sleep(injection_config.injected_latency_seconds) + if injection_config.injected_error: + return { + "error_code": ( + injection_config.injected_error.injected_http_error_code + ), + "error_message": injection_config.injected_error.error_message, + } + if injection_config.injected_response: + return injection_config.injected_response + + # If no injection was applied, fall back to the mock strategy. + if ( + tool_sim_config.mock_strategy_type + == MockStrategyEnum.MOCK_STRATEGY_UNSPECIFIED + ): + environment_simulation_logger.warning( + "Tool '%s' did not hit any injection config and has no mock strategy" + " configured. Returning no-op.", + tool.name, + ) + return None + + mock_strategy = _create_mock_strategy( + tool_sim_config.mock_strategy_type, + self._config.simulation_model, + self._config.simulation_model_configuration, + ) + return await mock_strategy.mock( + tool, + args, + tool_context, + self._tool_connection_map, + self._state_store, + self._environment_data, + self._tracing, + ) diff --git a/src/google/adk/tools/environment_simulation/environment_simulation_factory.py b/src/google/adk/tools/environment_simulation/environment_simulation_factory.py new file mode 100644 index 0000000000..6fdea44f14 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/environment_simulation_factory.py @@ -0,0 +1,74 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Any +from typing import Awaitable +from typing import Callable +from typing import Dict +from typing import Optional + +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_engine import EnvironmentSimulationEngine +from google.adk.tools.environment_simulation.environment_simulation_plugin import EnvironmentSimulationPlugin + +from ...features import experimental +from ...features import FeatureName + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class EnvironmentSimulationFactory: + """Factory for creating EnvironmentSimulation instances.""" + + @staticmethod + def create_callback( + config: EnvironmentSimulationConfig, + ) -> Callable[ + [BaseTool, Dict[str, Any], Any], Awaitable[Optional[Dict[str, Any]]] + ]: + """Creates a callback function for EnvironmentSimulation. + + Args: + config: The configuration for the EnvironmentSimulation. + + Returns: + A callable that can be used as a before_tool_callback or + after_tool_callback. + """ + simulator_engine = EnvironmentSimulationEngine(config) + + async def _environment_simulation_callback( + tool: BaseTool, args: Dict[str, Any], tool_context: Any + ) -> Optional[Dict[str, Any]]: + return await simulator_engine.simulate(tool, args, tool_context) + + return _environment_simulation_callback + + @staticmethod + def create_plugin( + config: EnvironmentSimulationConfig, + ) -> EnvironmentSimulationPlugin: + """Creates an ADK Plugin for EnvironmentSimulation. + + Args: + config: The configuration for the EnvironmentSimulation. + + Returns: + An instance of EnvironmentSimulationPlugin that can be used as an ADK + plugin. + """ + simulator_engine = EnvironmentSimulationEngine(config) + return EnvironmentSimulationPlugin(simulator_engine) diff --git a/src/google/adk/tools/environment_simulation/environment_simulation_plugin.py b/src/google/adk/tools/environment_simulation/environment_simulation_plugin.py new file mode 100644 index 0000000000..dad82bda3d --- /dev/null +++ b/src/google/adk/tools/environment_simulation/environment_simulation_plugin.py @@ -0,0 +1,44 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Any +from typing import Dict +from typing import Optional + +from google.adk.plugins import BasePlugin +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_engine import EnvironmentSimulationEngine +from google.adk.tools.tool_context import ToolContext + +from ...features import experimental +from ...features import FeatureName + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class EnvironmentSimulationPlugin(BasePlugin): + """ADK Plugin for EnvironmentSimulation.""" + + name: str = "EnvironmentSimulation" + + def __init__(self, simulator_engine: EnvironmentSimulationEngine): + self._simulator_engine = simulator_engine + + async def before_tool_callback( + self, tool: BaseTool, tool_args: dict[str, Any], tool_context: ToolContext + ) -> Optional[Dict[str, Any]]: + """Invokes the EnvironmentSimulationEngine before a tool call.""" + return await self._simulator_engine.simulate(tool, tool_args, tool_context) diff --git a/tests/unittests/tools/agent_simulator/__init__.py b/src/google/adk/tools/environment_simulation/strategies/__init__.py similarity index 100% rename from tests/unittests/tools/agent_simulator/__init__.py rename to src/google/adk/tools/environment_simulation/strategies/__init__.py diff --git a/src/google/adk/tools/environment_simulation/strategies/base.py b/src/google/adk/tools/environment_simulation/strategies/base.py new file mode 100644 index 0000000000..c2c7733f68 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/strategies/base.py @@ -0,0 +1,65 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Any +from typing import Dict +from typing import Optional + +from google.adk.features import experimental +from google.adk.features import FeatureName +from google.adk.tools.environment_simulation.tool_connection_map import ToolConnectionMap +from google.genai import types as genai_types + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class MockStrategy: + """Base class for mock strategies.""" + + async def mock( + self, + tool: BaseTool, + args: Dict[str, Any], + tool_context: Any, + tool_connection_map: Optional[ToolConnectionMap], + state_store: Dict[str, Any], + environment_data: Optional[str] = None, + tracing: Optional[str] = None, + ) -> Dict[str, Any]: + """Generates a mock response for a tool call.""" + raise NotImplementedError() + + +class TracingMockStrategy(MockStrategy): + + def __init__( + self, + llm_name: str = "", + llm_config: Optional[genai_types.GenerateContentConfig] = None, + ): + self._llm_name = llm_name + self._llm_config = llm_config + + async def mock( + self, + tool: BaseTool, + args: Dict[str, Any], + tool_context: Any, + tool_connection_map: Optional[ToolConnectionMap], + state_store: Dict[str, Any], + environment_data: Optional[str] = None, + tracing: Optional[str] = None, + ) -> Dict[str, Any]: + return {"status": "error", "error_message": "Not implemented"} diff --git a/src/google/adk/tools/environment_simulation/strategies/tool_spec_mock_strategy.py b/src/google/adk/tools/environment_simulation/strategies/tool_spec_mock_strategy.py new file mode 100644 index 0000000000..ddf1bcab6b --- /dev/null +++ b/src/google/adk/tools/environment_simulation/strategies/tool_spec_mock_strategy.py @@ -0,0 +1,228 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +import concurrent.futures +import json +import re +from typing import Any +from typing import Dict +from typing import Optional + +from google.adk.models.llm_request import LlmRequest +from google.adk.models.registry import LLMRegistry +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.strategies.base import MockStrategy +from google.adk.tools.environment_simulation.tool_connection_map import ToolConnectionMap +from google.adk.utils.context_utils import Aclosing +from google.genai import types as genai_types + +_TOOL_SPEC_MOCK_PROMPT_TEMPLATE = """ + You are a stateful tool simulator. Your task is to generate a + realistic JSON response for a tool call, maintaining consistency based + on a shared state. + + {environment_data_snippet} + + {tracing_snippet} + + Here is the map of how tools connect via stateful parameters: + {tool_connection_map_json} + + Here is the current state of all stateful parameters: + {state_store_json} + + You are now simulating the following tool call: + Tool Name: {tool_name} + Tool Description: {tool_description} + Tool Schema: {tool_schema_json} + Tool Arguments: {tool_arguments_json} + + Your instructions: + 1. Analyze the tool call. Is it a "creating" or "consuming" tool + based on the connection map? + 2. If it's a "consuming" tool, check the provided arguments against + the state store. If an ID is provided that does not exist in the + state, return a realistic error (e.g., a 404 Not Found error). + Otherwise, use the data from the state, the provided environment data, + and the tracing history to generate the response. + 3. If it's a "creating" tool, generate a new, unique ID for the + stateful parameter (e.g., a random string for a ticket_id). Include + this new ID in your response. I will then update the state with it. + 4. Leverage the provided environment data (if any) to make your response + more realistic and consistent with the simulated environment. + 5. Leverage the provided tracing history (if any) to make your response + consistent with observed tool behavior patterns from prior runs. + 6. Generate a convincing, valid JSON object that mocks the tool's + response. The response must be only the JSON object, without any + additional text or formatting. + 7. The response must start with '{{' and end with '}}'. + """ + + +def _find_value_by_key(data: Any, target_key: str) -> Optional[Any]: + """Recursively searches for a value by key in a nested structure.""" + if isinstance(data, dict): + if target_key in data: + return data[target_key] + for key, value in data.items(): + result = _find_value_by_key(value, target_key) + if result is not None: + return result + elif isinstance(data, list): + for item in data: + result = _find_value_by_key(item, target_key) + if result is not None: + return result + return None + + +from google.adk.features import FeatureName +from google.adk.features import experimental + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class ToolSpecMockStrategy(MockStrategy): + """Mocks a tool response based on the tool's specification.""" + + def __init__( + self, llm_name: str, llm_config: genai_types.GenerateContentConfig + ): + self._llm_name = llm_name + self._llm_config = llm_config + llm_registry = LLMRegistry() + llm_class = llm_registry.resolve(self._llm_name) + self._llm = llm_class(model=self._llm_name) + + async def mock( + self, + tool: BaseTool, + args: Dict[str, Any], + tool_context: Any, + tool_connection_map: Optional[ToolConnectionMap], + state_store: Dict[str, Any], + environment_data: Optional[str] = None, + tracing: Optional[str] = None, + ) -> Dict[str, Any]: + declaration = tool._get_declaration() + if not declaration: + return { + "status": "error", + "error_message": "Could not get tool declaration.", + } + + tool_connection_map_json = ( + json.dumps(tool_connection_map.model_dump(exclude_none=True), indent=2) + if tool_connection_map + else "''" + ) + state_store_json = json.dumps(state_store, indent=2) + tool_schema_json = json.dumps( + declaration.model_dump(exclude_none=True), indent=2 + ) + tool_arguments_json = json.dumps(args, indent=2) + + environment_data_snippet = "" + if environment_data: + environment_data_snippet = f""" + Here is relevant environment data (e.g., database snippet, context information): + + {environment_data} + + Use this information to generate more realistic responses. + """ + + tracing_snippet = "" + if tracing: + tracing_snippet = f""" + Here is a tracing history from a prior agent run (e.g., recorded tool + calls and responses): + + {tracing} + + Use this history to make your mock responses consistent with observed + tool behavior patterns. + """ + + prompt = _TOOL_SPEC_MOCK_PROMPT_TEMPLATE.format( + environment_data_snippet=environment_data_snippet, + tracing_snippet=tracing_snippet, + tool_connection_map_json=tool_connection_map_json, + state_store_json=state_store_json, + tool_name=tool.name, + tool_description=tool.description, + tool_schema_json=tool_schema_json, + tool_arguments_json=tool_arguments_json, + ) + + request_contents = [ + genai_types.Content(parts=[genai_types.Part(text=prompt)], role="user") + ] + request = LlmRequest( + contents=request_contents, + model=self._llm_name, + config=self._llm_config, + generation_config=genai_types.GenerateContentConfig( + response_mime_type="application/json" + ), + ) + response_text = "" + async with Aclosing(self._llm.generate_content_async(request)) as agen: + async for llm_response in agen: + generated_content: genai_types.Content = llm_response.content + if generated_content.parts: + for part in generated_content.parts: + if part.text: + response_text += part.text + + try: + clean_json_text = re.sub(r"^```[a-zA-Z]*\n", "", response_text) + clean_json_text = re.sub(r"\n```$", "", clean_json_text) + mock_response = json.loads(clean_json_text.strip()) + # Determine if the current tool is mutative by checking the connection map. + is_mutative = False + if tool_connection_map: + all_creating_tools = { + tool_name + for param in tool_connection_map.stateful_parameters + for tool_name in param.creating_tools + } + if tool.name in all_creating_tools: + is_mutative = True + + # After getting the response, update the state if this was a mutative tool. + if is_mutative: + for param_info in tool_connection_map.stateful_parameters: + param_name = param_info.parameter_name + # Only update the state for the specific parameter this tool + # creates/modifies. + if tool.name in param_info.creating_tools: + param_value = _find_value_by_key(mock_response, param_name) + if param_value is not None: + if param_name not in state_store: + state_store[param_name] = {} + # Store the entire response as the new state for this entity. + # This correctly captures creations and modifications (like + # cancellation). + state_store[param_name][param_value] = mock_response + + return mock_response + except json.JSONDecodeError: + return { + "status": "error", + "error_message": "Failed to generate valid JSON mock response.", + "llm_output": response_text, + } diff --git a/src/google/adk/tools/environment_simulation/tool_connection_analyzer.py b/src/google/adk/tools/environment_simulation/tool_connection_analyzer.py new file mode 100644 index 0000000000..22608275b9 --- /dev/null +++ b/src/google/adk/tools/environment_simulation/tool_connection_analyzer.py @@ -0,0 +1,146 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +import concurrent.futures +import json +import logging +import re +from typing import Any +from typing import Dict +from typing import List + +from google.adk.models.llm_request import LlmRequest +from google.adk.models.registry import LLMRegistry +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment_simulation.tool_connection_map import ToolConnectionMap +from google.adk.utils.context_utils import Aclosing +from google.genai import types as genai_types + +from ...features import experimental +from ...features import FeatureName + + +_TOOL_CONNECTION_ANALYSIS_PROMPT_TEMPLATE = """ + You are an expert software architect analyzing a set of tools to understand + stateful dependencies. Your task is to identify parameters that act as + stateful identifiers (like IDs) and classify the tools that interact with + them. + + **Definitions:** + - A **"creating tool"** is a tool that creates a new resource or makes a + significant state change to an existing one (e.g., creating, updating, + canceling, or deleting). Tool names like `create_account`, `cancel_order`, + or `update_price` are strong indicators. These tools are responsible for + generating or modifying the state associated with an ID. + - A **"consuming tool"** is a tool that uses a resource's ID to retrieve + information without changing its state. Tool names like `get_user`, + `list_events`, or `find_order` are strong indicators. + + **Your Goal:** + Analyze the following tool schemas and identify the shared, stateful + parameters (like `user_id`, `order_id`, etc.). + + For each stateful parameter you identify, classify the tools into + `creating_tools` and `consuming_tools` based on the definitions above. + + **Example:** A `create_ticket` tool would be a `creating_tool` for + `ticket_id`. A `get_ticket` tool would be a `consuming_tool` for + `ticket_id`. A `list_tickets` tool that takes a `user_id` as input is a + `consuming_tool` for `user_id`. + + **Analyze the following tool schemas:** + {tool_schemas_json} + + **Output Format:** + Generate a JSON object with a single key, "stateful_parameters", which is a + list. Each item in the list must have these keys: + - "parameter_name": The name of the shared parameter (e.g., "ticket_id"). + - "creating_tools": A list of tools that create or modify this parameter's + state. + - "consuming_tools": A list of tools that use this parameter as input for + read-only operations. + + ONLY return the raw JSON object. + Your response must start with '{{' and end with '}}'. + """ + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class ToolConnectionAnalyzer: + """ + Uses an LLM to analyze stateful connections between tools. For example, + get_ticket will consume a ticket_id created by create_ticket, the analyzer + will create a list of such connections. + """ + + def __init__( + self, llm_name: str, llm_config: genai_types.GenerateContentConfig + ): + self._llm_name = llm_name + self._llm_config = llm_config + llm_registry = LLMRegistry() + llm_class = llm_registry.resolve(self._llm_name) + self._llm = llm_class(model=self._llm_name) + + async def analyze(self, tools: List[BaseTool]) -> ToolConnectionMap: + """ + Analyzes a list of tools and returns a map of their connections. + """ + tool_schemas = [ + tool._get_declaration().model_dump(exclude_none=True) + for tool in tools + if tool._get_declaration() + ] + tool_schemas_json = json.dumps(tool_schemas, indent=2) + prompt = _TOOL_CONNECTION_ANALYSIS_PROMPT_TEMPLATE.format( + tool_schemas_json=tool_schemas_json + ) + + request_contents = [ + genai_types.Content(parts=[genai_types.Part(text=prompt)], role="user") + ] + request = LlmRequest( + contents=request_contents, + model=self._llm_name, + config=self._llm_config, + generation_config=genai_types.GenerateContentConfig( + response_mime_type="application/json" + ), + ) + response_text = "" + async with Aclosing(self._llm.generate_content_async(request)) as agen: + async for llm_response in agen: + generated_content: genai_types.Content = llm_response.content + if not generated_content.parts: + continue + for part in generated_content.parts: + if part.text: + response_text += part.text + + try: + clean_json_text = re.sub(r"^```[a-zA-Z]*\n", "", response_text) + clean_json_text = re.sub(r"\n```$", "", clean_json_text) + response_json = json.loads(clean_json_text.strip()) + except json.JSONDecodeError: + logging.warning( + "Failed to parse tool connection analysis from LLM. Proceeding" + " without connection map. Error: %s\nLLM Output:\n%s", + e, + response_text, + ) + return ToolConnectionMap(stateful_parameters=[]) + return ToolConnectionMap.model_validate(response_json) diff --git a/src/google/adk/tools/environment_simulation/tool_connection_map.py b/src/google/adk/tools/environment_simulation/tool_connection_map.py new file mode 100644 index 0000000000..affd1481ec --- /dev/null +++ b/src/google/adk/tools/environment_simulation/tool_connection_map.py @@ -0,0 +1,44 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import List + +from pydantic import BaseModel + +from ...features import experimental +from ...features import FeatureName + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class StatefulParameter(BaseModel): + """Represents a stateful parameter and its connections.""" + + parameter_name: str + """The name of the shared parameter (e.g., "ticket_id").""" + + creating_tools: List[str] + """A list of tools that generate this parameter.""" + + consuming_tools: List[str] + """A list of tools that use this parameter as input.""" + + +@experimental(FeatureName.ENVIRONMENT_SIMULATION) +class ToolConnectionMap(BaseModel): + """Represents the map of tool connections.""" + + stateful_parameters: List[StatefulParameter] + """A list of stateful parameters and their connections.""" diff --git a/tests/unittests/tools/environment_simulation/__init__.py b/tests/unittests/tools/environment_simulation/__init__.py new file mode 100644 index 0000000000..58d482ea38 --- /dev/null +++ b/tests/unittests/tools/environment_simulation/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unittests/tools/agent_simulator/test_agent_simulator_engine.py b/tests/unittests/tools/environment_simulation/test_environment_simulation_engine.py similarity index 77% rename from tests/unittests/tools/agent_simulator/test_agent_simulator_engine.py rename to tests/unittests/tools/environment_simulation/test_environment_simulation_engine.py index 104b71d3fb..efa9538807 100644 --- a/tests/unittests/tools/agent_simulator/test_agent_simulator_engine.py +++ b/tests/unittests/tools/environment_simulation/test_environment_simulation_engine.py @@ -6,7 +6,10 @@ # # http://www.apache.org/licenses/LICENSE-2.0 # -# Unless required by applicable law of a-specific language governing permissions and +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and # limitations under the License. import logging @@ -14,31 +17,31 @@ from unittest.mock import MagicMock from unittest.mock import patch -from google.adk.tools.agent_simulator.agent_simulator_config import AgentSimulatorConfig -from google.adk.tools.agent_simulator.agent_simulator_config import InjectedError -from google.adk.tools.agent_simulator.agent_simulator_config import InjectionConfig -from google.adk.tools.agent_simulator.agent_simulator_config import MockStrategy -from google.adk.tools.agent_simulator.agent_simulator_config import ToolSimulationConfig -from google.adk.tools.agent_simulator.agent_simulator_engine import AgentSimulatorEngine +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_config import InjectedError +from google.adk.tools.environment_simulation.environment_simulation_config import InjectionConfig +from google.adk.tools.environment_simulation.environment_simulation_config import MockStrategy +from google.adk.tools.environment_simulation.environment_simulation_config import ToolSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_engine import EnvironmentSimulationEngine from google.genai import types as genai_types import pytest @patch( - "google.adk.tools.agent_simulator.agent_simulator_engine.ToolConnectionAnalyzer" + "google.adk.tools.environment_simulation.environment_simulation_engine.ToolConnectionAnalyzer" ) @patch( - "google.adk.tools.agent_simulator.agent_simulator_engine._create_mock_strategy" + "google.adk.tools.environment_simulation.environment_simulation_engine._create_mock_strategy" ) @pytest.mark.asyncio -class TestAgentSimulatorEngineSimulate: - """Test cases for the simulate method of AgentSimulatorEngine.""" +class TestEnvironmentSimulationEngineSimulate: + """Test cases for the simulate method of EnvironmentSimulationEngine.""" async def test_simulate_no_op_for_unconfigured_tool( self, mock_create_strategy, mock_analyzer ): """Test that simulate returns None for a tool not in the config.""" - config = AgentSimulatorConfig( + config = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="configured_tool", @@ -48,7 +51,7 @@ async def test_simulate_no_op_for_unconfigured_tool( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine = AgentSimulatorEngine(config) + engine = EnvironmentSimulationEngine(config) mock_tool = MagicMock() mock_tool.name = "unconfigured_tool" result = await engine.simulate(mock_tool, {}, MagicMock()) @@ -58,7 +61,7 @@ async def test_injection_with_matching_args( self, mock_create_strategy, mock_analyzer ): """Test that an injection is applied when match_args match.""" - config = AgentSimulatorConfig( + config = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -73,7 +76,7 @@ async def test_injection_with_matching_args( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine = AgentSimulatorEngine(config) + engine = EnvironmentSimulationEngine(config) mock_tool = MagicMock() mock_tool.name = "test_tool" result = await engine.simulate(mock_tool, {"param": "value"}, MagicMock()) @@ -86,7 +89,7 @@ async def test_injection_not_applied_with_mismatched_args( mock_strategy_instance = MagicMock() mock_strategy_instance.mock = AsyncMock(return_value={"mocked": True}) mock_create_strategy.return_value = mock_strategy_instance - config = AgentSimulatorConfig( + config = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -102,7 +105,7 @@ async def test_injection_not_applied_with_mismatched_args( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine = AgentSimulatorEngine(config) + engine = EnvironmentSimulationEngine(config) mock_tool = MagicMock() mock_tool.name = "test_tool" result = await engine.simulate( @@ -120,7 +123,7 @@ async def test_no_op_when_no_injection_hit_and_unspecified_strategy( self, mock_create_strategy, mock_analyzer, caplog ): """Test for no-op and warning when no injection hits and mock strategy is unspecified.""" - config = AgentSimulatorConfig( + config = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -136,12 +139,14 @@ async def test_no_op_when_no_injection_hit_and_unspecified_strategy( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine = AgentSimulatorEngine(config) + engine = EnvironmentSimulationEngine(config) mock_tool = MagicMock() mock_tool.name = "test_tool" - caplog.set_level(logging.WARNING, logger="agent_simulator_logger") - with caplog.at_level(logging.WARNING, logger="agent_simulator_logger"): + caplog.set_level(logging.WARNING, logger="environment_simulation_logger") + with caplog.at_level( + logging.WARNING, logger="environment_simulation_logger" + ): result = await engine.simulate( mock_tool, {"param": "different_value"}, MagicMock() ) @@ -161,7 +166,7 @@ async def test_injection_with_random_seed_is_deterministic( mock_strategy_instance = MagicMock() mock_strategy_instance.mock = AsyncMock(return_value={"mocked": True}) mock_create_strategy.return_value = mock_strategy_instance - config_mocked = AgentSimulatorConfig( + config_mocked = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -178,7 +183,7 @@ async def test_injection_with_random_seed_is_deterministic( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine_mocked = AgentSimulatorEngine(config_mocked) + engine_mocked = EnvironmentSimulationEngine(config_mocked) mock_tool = MagicMock() mock_tool.name = "test_tool" @@ -195,7 +200,7 @@ async def test_injection_with_random_seed_is_deterministic( mock_strategy_instance.mock.reset_mock() # With seed=100, random.random() is < 0.5, so this WILL be injected. - config_injected = AgentSimulatorConfig( + config_injected = EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -212,7 +217,7 @@ async def test_injection_with_random_seed_is_deterministic( simulation_model="test-model", simulation_model_configuration=genai_types.GenerateContentConfig(), ) - engine_injected = AgentSimulatorEngine(config_injected) + engine_injected = EnvironmentSimulationEngine(config_injected) result2 = await engine_injected.simulate(mock_tool, {}, MagicMock()) assert result2 == {"injected": True} mock_create_strategy.assert_not_called() diff --git a/tests/unittests/tools/agent_simulator/test_agent_simulator_factory.py b/tests/unittests/tools/environment_simulation/test_environment_simulation_factory.py similarity index 60% rename from tests/unittests/tools/agent_simulator/test_agent_simulator_factory.py rename to tests/unittests/tools/environment_simulation/test_environment_simulation_factory.py index a247564484..159f6cc9a1 100644 --- a/tests/unittests/tools/agent_simulator/test_agent_simulator_factory.py +++ b/tests/unittests/tools/environment_simulation/test_environment_simulation_factory.py @@ -16,25 +16,25 @@ from unittest.mock import MagicMock from unittest.mock import patch -from google.adk.tools.agent_simulator import AgentSimulatorFactory -from google.adk.tools.agent_simulator.agent_simulator_config import AgentSimulatorConfig -from google.adk.tools.agent_simulator.agent_simulator_config import MockStrategy -from google.adk.tools.agent_simulator.agent_simulator_config import ToolSimulationConfig -from google.adk.tools.agent_simulator.agent_simulator_plugin import AgentSimulatorPlugin +from google.adk.tools.environment_simulation import EnvironmentSimulationFactory +from google.adk.tools.environment_simulation.environment_simulation_config import EnvironmentSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_config import MockStrategy +from google.adk.tools.environment_simulation.environment_simulation_config import ToolSimulationConfig +from google.adk.tools.environment_simulation.environment_simulation_plugin import EnvironmentSimulationPlugin import pytest @pytest.mark.asyncio @patch( - "google.adk.tools.agent_simulator.agent_simulator_factory.AgentSimulatorEngine" + "google.adk.tools.environment_simulation.environment_simulation_factory.EnvironmentSimulationEngine" ) -class TestAgentSimulatorFactory: - """Test cases for the AgentSimulator factory class.""" +class TestEnvironmentSimulationFactory: + """Test cases for the EnvironmentSimulation factory class.""" @pytest.fixture def mock_config(self): - """Fixture for a basic AgentSimulatorConfig.""" - return AgentSimulatorConfig( + """Fixture for a basic EnvironmentSimulationConfig.""" + return EnvironmentSimulationConfig( tool_simulation_configs=[ ToolSimulationConfig( tool_name="test_tool", @@ -49,7 +49,7 @@ async def test_create_callback(self, mock_engine_class, mock_config): mock_engine_instance.simulate = AsyncMock(return_value=None) mock_engine_class.return_value = mock_engine_instance - callback = AgentSimulatorFactory.create_callback(mock_config) + callback = EnvironmentSimulationFactory.create_callback(mock_config) assert callable(callback) await callback(MagicMock(), {}, MagicMock()) @@ -57,13 +57,13 @@ async def test_create_callback(self, mock_engine_class, mock_config): mock_engine_instance.simulate.assert_awaited_once() @patch( - "google.adk.tools.agent_simulator.agent_simulator_factory.AgentSimulatorPlugin" + "google.adk.tools.environment_simulation.environment_simulation_factory.EnvironmentSimulationPlugin" ) def test_create_plugin( self, mock_plugin_class, mock_engine_class, mock_config ): - """Test that create_plugin returns a valid AgentSimulatorPlugin instance.""" - plugin = AgentSimulatorFactory.create_plugin(mock_config) + """Test that create_plugin returns a valid EnvironmentSimulationPlugin instance.""" + plugin = EnvironmentSimulationFactory.create_plugin(mock_config) mock_engine_class.assert_called_once_with(mock_config) mock_plugin_class.assert_called_once_with(mock_engine_class.return_value) assert plugin == mock_plugin_class.return_value diff --git a/tests/unittests/tools/agent_simulator/test_agent_simulator_plugin.py b/tests/unittests/tools/environment_simulation/test_environment_simulation_plugin.py similarity index 79% rename from tests/unittests/tools/agent_simulator/test_agent_simulator_plugin.py rename to tests/unittests/tools/environment_simulation/test_environment_simulation_plugin.py index bee11ce556..0611705ce6 100644 --- a/tests/unittests/tools/agent_simulator/test_agent_simulator_plugin.py +++ b/tests/unittests/tools/environment_simulation/test_environment_simulation_plugin.py @@ -16,24 +16,24 @@ from unittest.mock import MagicMock from unittest.mock import patch -from google.adk.tools.agent_simulator.agent_simulator_plugin import AgentSimulatorPlugin +from google.adk.tools.environment_simulation.environment_simulation_plugin import EnvironmentSimulationPlugin import pytest @pytest.mark.asyncio -class TestAgentSimulatorPlugin: - """Test cases for the AgentSimulatorPlugin.""" +class TestEnvironmentSimulationPlugin: + """Test cases for the EnvironmentSimulationPlugin.""" @pytest.fixture def mock_simulator_engine(self): - """Fixture for a mock AgentSimulatorEngine.""" + """Fixture for a mock EnvironmentSimulationEngine.""" engine = MagicMock() engine.simulate = AsyncMock() return engine async def test_before_tool_callback(self, mock_simulator_engine): """Test that the before_tool_callback calls the engine's simulate method.""" - plugin = AgentSimulatorPlugin(mock_simulator_engine) + plugin = EnvironmentSimulationPlugin(mock_simulator_engine) mock_tool = MagicMock() mock_args = {} From 47aaf66efb3e3825f06fd44578d592924fb7542b Mon Sep 17 00:00:00 2001 From: "Xiang (Sean) Zhou" Date: Wed, 18 Mar 2026 14:11:44 -0700 Subject: [PATCH 045/192] fix(live): convert response_modalities to Modality enum before assigning to LiveConnectConfig RunConfig.response_modalities is typed as list[str] for backward compatibility, but LiveConnectConfig.response_modalities expects list[Modality] (an enum). Assigning strings directly causes a Pydantic serialization warning on every live streaming session: PydanticSerializationUnexpectedValue(Expected `enum` - serialized value may not be as expected [field_name='response_modalities', input_value='AUDIO', input_type=str]) Convert each modality value to types.Modality at the assignment point in basic.py using types.Modality(m), which is a no-op for values that are already Modality enums and converts plain strings like "AUDIO" to Modality.AUDIO. The public RunConfig interface remains list[str] so existing callers are unaffected. Fixes: #4869 Co-authored-by: Xiang (Sean) Zhou PiperOrigin-RevId: 885781014 --- src/google/adk/flows/llm_flows/basic.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/google/adk/flows/llm_flows/basic.py b/src/google/adk/flows/llm_flows/basic.py index 4a296734a5..8751f9b3a2 100644 --- a/src/google/adk/flows/llm_flows/basic.py +++ b/src/google/adk/flows/llm_flows/basic.py @@ -59,7 +59,12 @@ def _build_basic_request( llm_request.set_output_schema(agent.output_schema) llm_request.live_connect_config.response_modalities = ( - invocation_context.run_config.response_modalities + [ + types.Modality(m) + for m in invocation_context.run_config.response_modalities + ] + if invocation_context.run_config.response_modalities is not None + else None ) llm_request.live_connect_config.speech_config = ( invocation_context.run_config.speech_config From dcccfca1d1dd1b3b9c273278e9f9c883f0148eba Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Wed, 18 Mar 2026 14:52:13 -0700 Subject: [PATCH 046/192] fix: Fix imports for environment simulation files Co-authored-by: Kathy Wu PiperOrigin-RevId: 885801247 --- .../environment_simulation/environment_simulation_engine.py | 2 +- .../strategies/tool_spec_mock_strategy.py | 6 ++---- .../environment_simulation/tool_connection_analyzer.py | 1 - 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/google/adk/tools/environment_simulation/environment_simulation_engine.py b/src/google/adk/tools/environment_simulation/environment_simulation_engine.py index 41566ec5d1..3d260c6954 100644 --- a/src/google/adk/tools/environment_simulation/environment_simulation_engine.py +++ b/src/google/adk/tools/environment_simulation/environment_simulation_engine.py @@ -37,8 +37,8 @@ from google.adk.tools.environment_simulation.tool_connection_analyzer import ToolConnectionAnalyzer from google.adk.tools.environment_simulation.tool_connection_map import ToolConnectionMap -from ...features import FeatureName from ...features import experimental +from ...features import FeatureName def _create_mock_strategy( diff --git a/src/google/adk/tools/environment_simulation/strategies/tool_spec_mock_strategy.py b/src/google/adk/tools/environment_simulation/strategies/tool_spec_mock_strategy.py index ddf1bcab6b..25a07b66f8 100644 --- a/src/google/adk/tools/environment_simulation/strategies/tool_spec_mock_strategy.py +++ b/src/google/adk/tools/environment_simulation/strategies/tool_spec_mock_strategy.py @@ -22,6 +22,8 @@ from typing import Dict from typing import Optional +from google.adk.features import experimental +from google.adk.features import FeatureName from google.adk.models.llm_request import LlmRequest from google.adk.models.registry import LLMRegistry from google.adk.tools.base_tool import BaseTool @@ -90,10 +92,6 @@ def _find_value_by_key(data: Any, target_key: str) -> Optional[Any]: return None -from google.adk.features import FeatureName -from google.adk.features import experimental - - @experimental(FeatureName.ENVIRONMENT_SIMULATION) class ToolSpecMockStrategy(MockStrategy): """Mocks a tool response based on the tool's specification.""" diff --git a/src/google/adk/tools/environment_simulation/tool_connection_analyzer.py b/src/google/adk/tools/environment_simulation/tool_connection_analyzer.py index 22608275b9..8f8d5532cd 100644 --- a/src/google/adk/tools/environment_simulation/tool_connection_analyzer.py +++ b/src/google/adk/tools/environment_simulation/tool_connection_analyzer.py @@ -33,7 +33,6 @@ from ...features import experimental from ...features import FeatureName - _TOOL_CONNECTION_ANALYSIS_PROMPT_TEMPLATE = """ You are an expert software architect analyzing a set of tools to understand stateful dependencies. Your task is to identify parameters that act as From 031f581ac6e0fb06cc1175217a26bdd0c7382da8 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Wed, 18 Mar 2026 15:17:38 -0700 Subject: [PATCH 047/192] fix: Update Agent Registry to use the full agent card if available Co-authored-by: Kathy Wu PiperOrigin-RevId: 885813216 --- .../agent_registry/agent_registry.py | 14 +++++++ .../agent_registry/test_agent_registry.py | 42 +++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/src/google/adk/integrations/agent_registry/agent_registry.py b/src/google/adk/integrations/agent_registry/agent_registry.py index 93a91df432..1cf3d8003c 100644 --- a/src/google/adk/integrations/agent_registry/agent_registry.py +++ b/src/google/adk/integrations/agent_registry/agent_registry.py @@ -241,6 +241,20 @@ def get_agent_info(self, name: str) -> Dict[str, Any]: def get_remote_a2a_agent(self, agent_name: str) -> RemoteA2aAgent: """Creates a RemoteA2aAgent instance for a registered A2A Agent.""" agent_info = self.get_agent_info(agent_name) + + # Try to use the full agent card if available + card = agent_info.get("card", {}) + card_content = card.get("content") + if card.get("type") == "A2A_AGENT_CARD" and card_content: + agent_card = AgentCard(**card_content) + # Clean the name to be a valid identifier + name = self._clean_name(agent_card.name) + return RemoteA2aAgent( + name=name, + agent_card=agent_card, + description=agent_card.description, + ) + name = self._clean_name(agent_info.get("displayName", agent_name)) description = agent_info.get("description", "") version = agent_info.get("version", "") diff --git a/tests/unittests/integrations/agent_registry/test_agent_registry.py b/tests/unittests/integrations/agent_registry/test_agent_registry.py index fc68086942..0e68cc253c 100644 --- a/tests/unittests/integrations/agent_registry/test_agent_registry.py +++ b/tests/unittests/integrations/agent_registry/test_agent_registry.py @@ -197,6 +197,48 @@ def test_get_remote_a2a_agent(self, mock_httpx, registry): assert len(agent._agent_card.skills) == 1 assert agent._agent_card.skills[0].name == "Skill 1" + @patch("httpx.Client") + def test_get_remote_a2a_agent_with_card(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = { + "name": "projects/p/locations/l/agents/a", + "card": { + "type": "A2A_AGENT_CARD", + "content": { + "name": "CardName", + "description": "CardDesc", + "version": "2.0", + "url": "https://card-url.com", + "skills": [{ + "id": "s1", + "name": "S1", + "description": "D1", + "tags": ["t1"], + }], + "capabilities": {"streaming": True, "polling": False}, + "defaultInputModes": ["text"], + "defaultOutputModes": ["text"], + }, + }, + } + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + agent = registry.get_remote_a2a_agent("test-agent") + assert isinstance(agent, RemoteA2aAgent) + assert agent.name == "CardName" + assert agent.description == "CardDesc" + assert agent._agent_card.version == "2.0" + assert agent._agent_card.url == "https://card-url.com" + assert agent._agent_card.capabilities.streaming is True + assert len(agent._agent_card.skills) == 1 + assert agent._agent_card.skills[0].name == "S1" + def test_get_auth_headers(self, registry): registry._credentials.token = "fake-token" registry._credentials.refresh = MagicMock() From 6909a167c8d030111bf7118b9d5e78255a299684 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Wed, 18 Mar 2026 15:20:19 -0700 Subject: [PATCH 048/192] feat: Add slack integration to ADK Co-authored-by: Kathy Wu PiperOrigin-RevId: 885814460 --- contributing/samples/slack_agent/agent.py | 61 ++++++++ pyproject.toml | 3 + src/google/adk/integrations/slack/README.md | 82 ++++++++++ src/google/adk/integrations/slack/__init__.py | 17 ++ .../adk/integrations/slack/slack_runner.py | 123 +++++++++++++++ .../integrations/slack/test_slack_runner.py | 148 ++++++++++++++++++ 6 files changed, 434 insertions(+) create mode 100644 contributing/samples/slack_agent/agent.py create mode 100644 src/google/adk/integrations/slack/README.md create mode 100644 src/google/adk/integrations/slack/__init__.py create mode 100644 src/google/adk/integrations/slack/slack_runner.py create mode 100644 tests/unittests/integrations/slack/test_slack_runner.py diff --git a/contributing/samples/slack_agent/agent.py b/contributing/samples/slack_agent/agent.py new file mode 100644 index 0000000000..45d20e8db6 --- /dev/null +++ b/contributing/samples/slack_agent/agent.py @@ -0,0 +1,61 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import asyncio +import os + +from google.adk.agents.llm_agent import LlmAgent +from google.adk.integrations.slack import SlackRunner +from google.adk.runners import Runner +from google.adk.sessions.in_memory_session_service import InMemorySessionService +from slack_bolt.app.async_app import AsyncApp + + +async def main(): + # 1. Setup your ADK agent + agent = LlmAgent( + name="slack_agent", + instruction=( + "You are a helpful Slack bot powered by Google ADK. Be concise and" + " friendly." + ), + ) + + # 2. Setup ADK Runner + runner = Runner( + agent=agent, + app_name="slack_app", + session_service=InMemorySessionService(), + auto_create_session=True, + ) + + # 3. Setup Slack Bolt App + # Ensure you have SLACK_BOT_TOKEN and SLACK_APP_TOKEN in your environment + slack_app = AsyncApp(token=os.environ.get("SLACK_BOT_TOKEN")) + + # 4. Initialize SlackRunner + slack_runner = SlackRunner(runner=runner, slack_app=slack_app) + + # 5. Start the Slack bot (using Socket Mode) + app_token = os.environ.get("SLACK_APP_TOKEN") + if not app_token: + print("SLACK_APP_TOKEN not found. Please set it for Socket Mode.") + return + + print("Starting Slack bot...") + await slack_runner.start(app_token=app_token) + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/pyproject.toml b/pyproject.toml index 6851122b3f..6ff9ea2b00 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -137,6 +137,7 @@ test = [ "pytest>=9.0.0,<10.0.0", "python-multipart>=0.0.9", "rouge-score>=0.1.2", + "slack-bolt>=1.22.0", "tabulate>=0.9.0", # go/keep-sorted end ] @@ -171,6 +172,8 @@ otel-gcp = ["opentelemetry-instrumentation-google-genai>=0.6b0, <1.0.0"] toolbox = ["toolbox-adk>=0.7.0, <0.8.0"] +slack = ["slack-bolt>=1.22.0"] + [tool.pyink] # Format py files following Google style-guide line-length = 80 diff --git a/src/google/adk/integrations/slack/README.md b/src/google/adk/integrations/slack/README.md new file mode 100644 index 0000000000..1aab87a991 --- /dev/null +++ b/src/google/adk/integrations/slack/README.md @@ -0,0 +1,82 @@ +# Slack Integration + +The ADK Slack integration provides a `SlackRunner` to easily deploy your agents +on Slack using [Socket Mode](https://api.slack.com/apis/connections/socket). + +## Prerequisites + +Install the ADK with Slack support: + +```bash +pip install "google-adk[slack]" +``` + +## Slack App Configuration + +To use the `SlackRunner`, you need to set up a Slack App in the +[Slack API Dashboard](https://api.slack.com/apps). + +### 1. Enable Socket Mode +In your app settings, go to **Socket Mode** and toggle **Enable Socket Mode** to +`on`. +You will be prompted to generate an **App-Level Token** (starts with `xapp-`). +Ensure it has the `connections:write` scope. + +### 2. Configure Scopes +Navigate to **OAuth & Permissions** and add the following **Bot Token Scopes**: + +- `app_mentions:read`: To receive mention events. +- `chat:write`: To send messages. +- `im:history`: To respond in Direct Messages. +- `groups:history` (Optional): To respond in private channels. +- `channels:history` (Optional): To respond in public channels. + +### 3. Subscribe to Events +Go to **Event Subscriptions**: + +- Toggle **Enable Events** to `on`. +- Under **Subscribe to bot events**, add: + - `app_mention`: To respond when the bot is mentioned. + - `message.im`: To respond in Direct Messages. + +### 4. Install App to Workspace +Install the app to your workspace to obtain the +**Bot User OAuth Token** (starts with `xoxb-`). + +## Usage + +```python +import asyncio +import os +from google.adk.runners import Runner +from google.adk.integrations.slack import SlackRunner +from slack_bolt.app.async_app import AsyncApp + +async def main(): + # 1. Initialize your ADK Runner (with your agent) + # runner = Runner(agent=my_agent, session_service=my_session_service) + + # 2. Initialize Slack AsyncApp with your Bot Token + slack_app = AsyncApp(token=os.environ["SLACK_BOT_TOKEN"]) + + # 3. Initialize the SlackRunner + slack_runner = SlackRunner(runner=runner, slack_app=slack_app) + + # 4. Start the runner in Socket Mode with your App Token + await slack_runner.start(app_token=os.environ["SLACK_APP_TOKEN"]) + +if __name__ == "__main__": + asyncio.run(main()) +``` + +## Session Management + +The `SlackRunner` automatically manages conversation sessions: + +- **Direct Messages**: The `channel_id` is used as the session ID. +- **Threaded Conversations**: The combination of `channel_id` and `thread_ts` +(the timestamp of the parent message) is used as the session ID to maintain +thread context. +- **App Mentions**: If not in a thread, the message timestamp (`ts`) is used +with the `channel_id` to start a new threaded session if the user replies +in-thread. diff --git a/src/google/adk/integrations/slack/__init__.py b/src/google/adk/integrations/slack/__init__.py new file mode 100644 index 0000000000..ffa5fab716 --- /dev/null +++ b/src/google/adk/integrations/slack/__init__.py @@ -0,0 +1,17 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .slack_runner import SlackRunner + +__all__ = ["SlackRunner"] diff --git a/src/google/adk/integrations/slack/slack_runner.py b/src/google/adk/integrations/slack/slack_runner.py new file mode 100644 index 0000000000..d8449a1a4f --- /dev/null +++ b/src/google/adk/integrations/slack/slack_runner.py @@ -0,0 +1,123 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import logging +from typing import Any + +from google.adk.runners import Runner +from google.genai import types +from slack_bolt.adapter.socket_mode.aiohttp import AsyncSocketModeHandler + +try: + from slack_bolt.app.async_app import AsyncApp +except ImportError: + raise ImportError( + "slack_bolt is not installed. Please install it with " + '`pip install "google-adk[slack]"`.' + ) + +logger = logging.getLogger("google_adk." + __name__) + + +class SlackRunner: + """Runner for ADK agents on Slack.""" + + def __init__( + self, + runner: Runner, + slack_app: AsyncApp, + ): + self.runner = runner + self.slack_app = slack_app + self._setup_handlers() + + def _setup_handlers(self): + """Sets up event handlers for Slack.""" + + @self.slack_app.event("app_mention") + async def handle_app_mentions(event, say): + await self._handle_message(event, say) + + @self.slack_app.event("message") + async def handle_message_events(event, say): + # Skip bot messages to avoid loops + if event.get("bot_id") or event.get("bot_profile"): + return + + is_im = event.get("channel_type") == "im" + in_thread = event.get("thread_ts") is not None + + if is_im or in_thread: + await self._handle_message(event, say) + + async def _handle_message(self, event: dict[str, Any], say: Any): + """Handles a message or app_mention event.""" + text = event.get("text", "") + user_id = event.get("user") + channel_id = event.get("channel") + thread_ts = event.get("thread_ts") or event.get("ts") + + if not text or not user_id or not channel_id: + return + + # In Slack, we can use the channel_id (and optionally thread_ts) as a session ID. + session_id = f"{channel_id}-{thread_ts}" if thread_ts else channel_id + + new_message = types.Content(role="user", parts=[types.Part(text=text)]) + + thinking_ts: str | None = None + try: + thinking_response = await say(text="_Thinking..._", thread_ts=thread_ts) + thinking_ts = thinking_response.get("ts") + + async for event in self.runner.run_async( + user_id=user_id, + session_id=session_id, + new_message=new_message, + ): + if event.content and event.content.parts: + for part in event.content.parts: + if part.text: + if thinking_ts: + await self.slack_app.client.chat_update( + channel=channel_id, + ts=thinking_ts, + text=part.text, + ) + thinking_ts = None + else: + await say(text=part.text, thread_ts=thread_ts) + if thinking_ts: + await self.slack_app.client.chat_delete( + channel=channel_id, ts=thinking_ts + ) + thinking_ts = None + except Exception as e: + error_message = f"Sorry, I encountered an error: {str(e)}" + logger.exception("Error running ADK agent for Slack:") + if thinking_ts: + await self.slack_app.client.chat_update( + channel=channel_id, + ts=thinking_ts, + text=error_message, + ) + else: + await say(text=error_message, thread_ts=thread_ts) + + async def start(self, app_token: str): + """Starts the Slack app using Socket Mode.""" + handler = AsyncSocketModeHandler(self.slack_app, app_token) + await handler.start_async() diff --git a/tests/unittests/integrations/slack/test_slack_runner.py b/tests/unittests/integrations/slack/test_slack_runner.py new file mode 100644 index 0000000000..8dc9367fbe --- /dev/null +++ b/tests/unittests/integrations/slack/test_slack_runner.py @@ -0,0 +1,148 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +from unittest.mock import AsyncMock +from unittest.mock import MagicMock +from unittest.mock import patch + +from google.adk.integrations.slack import SlackRunner +from google.adk.runners import Runner +from google.genai import types +from slack_bolt.app.async_app import AsyncApp + + +class TestSlackRunner(unittest.IsolatedAsyncioTestCase): + + def setUp(self): + self.mock_runner = MagicMock(spec=Runner) + self.mock_slack_app = MagicMock(spec=AsyncApp) + self.mock_slack_app.client = MagicMock() + self.mock_slack_app.client.chat_update = AsyncMock() + self.mock_slack_app.client.chat_delete = AsyncMock() + self.slack_runner = SlackRunner(self.mock_runner, self.mock_slack_app) + + @patch("google.adk.integrations.slack.slack_runner.logger") + async def test_handle_message_success(self, mock_logger): + # Setup mocks + mock_say = AsyncMock() + mock_say.return_value = {"ts": "thinking_ts"} + event = { + "text": "Hello bot", + "user": "U12345", + "channel": "C67890", + "ts": "1234567890.123456", + } + + # Mock runner.run_async to yield a response + mock_event = MagicMock() + mock_event.content = types.Content( + role="model", parts=[types.Part(text="Hi user!")] + ) + + async def mock_run_async(*args, **kwargs): + yield mock_event + + self.mock_runner.run_async.side_effect = mock_run_async + + # Call the handler + await self.slack_runner._handle_message(event, mock_say) + + # Verify calls + self.mock_runner.run_async.assert_called_once() + mock_say.assert_called_once_with( + text="_Thinking..._", thread_ts="1234567890.123456" + ) + self.mock_slack_app.client.chat_update.assert_called_once_with( + channel="C67890", + ts="thinking_ts", + text="Hi user!", + ) + + @patch("google.adk.integrations.slack.slack_runner.logger") + async def test_handle_message_multi_turn(self, mock_logger): + # Setup mocks + mock_say = AsyncMock() + mock_say.return_value = {"ts": "thinking_ts"} + event = { + "text": "Tell me two things", + "user": "U12345", + "channel": "C67890", + "ts": "1234567890.123456", + } + + # Mock runner.run_async to yield two responses + e1 = MagicMock() + e1.content = types.Content( + role="model", parts=[types.Part(text="First thing.")] + ) + e2 = MagicMock() + e2.content = types.Content( + role="model", parts=[types.Part(text="Second thing.")] + ) + + async def mock_run_async(*args, **kwargs): + yield e1 + yield e2 + + self.mock_runner.run_async.side_effect = mock_run_async + + await self.slack_runner._handle_message(event, mock_say) + + # First message uses chat_update + self.mock_slack_app.client.chat_update.assert_called_once_with( + channel="C67890", + ts="thinking_ts", + text="First thing.", + ) + # Second message uses say + self.assertEqual(mock_say.call_count, 2) + mock_say.assert_any_call( + text="_Thinking..._", thread_ts="1234567890.123456" + ) + mock_say.assert_any_call( + text="Second thing.", thread_ts="1234567890.123456" + ) + + @patch("google.adk.integrations.slack.slack_runner.logger") + async def test_handle_message_error(self, mock_logger): + mock_say = AsyncMock() + mock_say.return_value = {"ts": "thinking_ts"} + event = { + "text": "Trigger error", + "user": "U12345", + "channel": "C67890", + "ts": "1234567890.123456", + } + + async def mock_run_async_error(*args, **kwargs): + raise Exception("Something went wrong") + yield # To make it a generator + + self.mock_runner.run_async.side_effect = mock_run_async_error + + await self.slack_runner._handle_message(event, mock_say) + + mock_say.assert_called_once_with( + text="_Thinking..._", thread_ts="1234567890.123456" + ) + self.mock_slack_app.client.chat_update.assert_called_once() + self.assertIn( + "Sorry, I encountered an error", + self.mock_slack_app.client.chat_update.call_args[1]["text"], + ) + + +if __name__ == "__main__": + unittest.main() From 41f4b44bc14341ba413080806b95498a978100b6 Mon Sep 17 00:00:00 2001 From: Xuan Yang Date: Wed, 18 Mar 2026 15:52:48 -0700 Subject: [PATCH 049/192] chore: Fix copyright notices Co-authored-by: Xuan Yang PiperOrigin-RevId: 885829552 --- src/google/adk/integrations/agent_registry/__init__.py | 2 ++ src/google/adk/integrations/api_registry/__init__.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/google/adk/integrations/agent_registry/__init__.py b/src/google/adk/integrations/agent_registry/__init__.py index 995ad046f2..18a30b3211 100644 --- a/src/google/adk/integrations/agent_registry/__init__.py +++ b/src/google/adk/integrations/agent_registry/__init__.py @@ -1,3 +1,5 @@ +# Copyright 2026 Google LLC +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at diff --git a/src/google/adk/integrations/api_registry/__init__.py b/src/google/adk/integrations/api_registry/__init__.py index 1179bc8616..e1aded4b12 100644 --- a/src/google/adk/integrations/api_registry/__init__.py +++ b/src/google/adk/integrations/api_registry/__init__.py @@ -1,3 +1,5 @@ +# Copyright 2026 Google LLC +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at From c26d35916e1b6cd12a412516381c6fcbf867bcee Mon Sep 17 00:00:00 2001 From: Akash Bangad Date: Wed, 18 Mar 2026 15:57:48 -0700 Subject: [PATCH 050/192] fix(models): handle arbitrary dict responses in part_to_message_block MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge https://github.com/google/adk-python/pull/4780 ## Bug `AnthropicLlm.part_to_message_block()` only serializes `FunctionResponse.response` dicts that contain a `"content"` or `"result"` key. When neither key is present the variable `content` stays as `""` and an empty `ToolResultBlockParam` is sent to Claude. This silently drops the output of several `SkillToolset` tools: | Tool | Keys returned | Handled before this fix? | |---|---|---| | `load_skill` (success) | `skill_name`, `instructions`, `frontmatter` | **No** | | `run_skill_script` (success) | `skill_name`, `script_path`, `stdout`, `stderr`, `status` | **No** | | Any skill tool (error) | `error`, `error_code` | **No** | | `load_skill_resource` (success) | `skill_name`, `path`, `content` | Yes (`"content"` key) | Because `load_skill` is the entry-point for skill instructions, Claude models using `SkillToolset` **never received skill instructions**, making the feature completely non-functional with Anthropic models. ## Fix Added an `else` branch in `part_to_message_block()` that JSON-serializes the full response dict when neither `"content"` nor `"result"` is present: ```python elif response_data: # Fallback: serialize the entire response dict as JSON so that tools # returning arbitrary key structures (e.g. load_skill returning # {"skill_name", "instructions", "frontmatter"}) are not silently # dropped. content = json.dumps(response_data) ``` This is consistent with how Gemini handles it — the Gemini integration passes `types.Part` objects directly to the Google GenAI SDK which serializes them natively, so there is no key-based filtering at all. ## Testing plan Added 4 new unit tests to `tests/unittests/models/test_anthropic_llm.py`: - `test_part_to_message_block_arbitrary_dict_serialized_as_json` — covers the `load_skill` response shape - `test_part_to_message_block_run_skill_script_response` — covers the `run_skill_script` response shape - `test_part_to_message_block_error_response_not_dropped` — covers error dict responses - `test_part_to_message_block_empty_response_stays_empty` — ensures empty dict still produces empty content (no regression) All 35 tests in `test_anthropic_llm.py` pass: ``` 35 passed in 7.32s ``` Run with: ```bash uv sync --extra test pytest tests/unittests/models/test_anthropic_llm.py -v ``` Co-authored-by: Kathy Wu COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4780 from akashbangad:fix/anthropic-llm-skill-toolset-fallback c23ad3755f94eb8c914203a6389bd3fa755c70be PiperOrigin-RevId: 885831845 --- src/google/adk/models/anthropic_llm.py | 6 ++ tests/unittests/models/test_anthropic_llm.py | 81 ++++++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/src/google/adk/models/anthropic_llm.py b/src/google/adk/models/anthropic_llm.py index 7dd050a1cb..f8d7d17895 100644 --- a/src/google/adk/models/anthropic_llm.py +++ b/src/google/adk/models/anthropic_llm.py @@ -146,6 +146,12 @@ def part_to_message_block( content = json.dumps(result) else: content = str(result) + elif response_data: + # Fallback: serialize the entire response dict as JSON so that tools + # returning arbitrary key structures (e.g. load_skill returning + # {"skill_name", "instructions", "frontmatter"}) are not silently + # dropped. + content = json.dumps(response_data) return anthropic_types.ToolResultBlockParam( tool_use_id=part.function_response.id or "", diff --git a/tests/unittests/models/test_anthropic_llm.py b/tests/unittests/models/test_anthropic_llm.py index 3df9f567be..f5b0d2c019 100644 --- a/tests/unittests/models/test_anthropic_llm.py +++ b/tests/unittests/models/test_anthropic_llm.py @@ -979,6 +979,87 @@ def test_part_to_message_block_nested_dict_result(): assert parsed["results"][0]["tags"] == ["a", "b"] +# --- Tests for arbitrary dict fallback (e.g. SkillToolset load_skill) --- + + +def test_part_to_message_block_arbitrary_dict_serialized_as_json(): + """Dicts with keys other than 'content'/'result' should be JSON-serialized. + + This covers tools like load_skill that return arbitrary key structures + such as {"skill_name": ..., "instructions": ..., "frontmatter": ...}. + """ + response_part = types.Part.from_function_response( + name="load_skill", + response={ + "skill_name": "my_skill", + "instructions": "Step 1: do this. Step 2: do that.", + "frontmatter": {"version": "1.0", "tags": ["a", "b"]}, + }, + ) + response_part.function_response.id = "test_id" + + result = part_to_message_block(response_part) + + assert result["type"] == "tool_result" + assert result["tool_use_id"] == "test_id" + assert not result["is_error"] + parsed = json.loads(result["content"]) + assert parsed["skill_name"] == "my_skill" + assert parsed["instructions"] == "Step 1: do this. Step 2: do that." + assert parsed["frontmatter"]["version"] == "1.0" + + +def test_part_to_message_block_run_skill_script_response(): + """run_skill_script response keys (stdout/stderr/status) should not be dropped.""" + response_part = types.Part.from_function_response( + name="run_skill_script", + response={ + "skill_name": "my_skill", + "script_path": "scripts/setup.py", + "stdout": "Done.", + "stderr": "", + "status": "success", + }, + ) + response_part.function_response.id = "test_id_2" + + result = part_to_message_block(response_part) + + parsed = json.loads(result["content"]) + assert parsed["status"] == "success" + assert parsed["stdout"] == "Done." + + +def test_part_to_message_block_error_response_not_dropped(): + """Error dicts like {"error": ..., "error_code": ...} should be serialized.""" + response_part = types.Part.from_function_response( + name="load_skill", + response={ + "error": "Skill 'missing' not found.", + "error_code": "SKILL_NOT_FOUND", + }, + ) + response_part.function_response.id = "test_id_3" + + result = part_to_message_block(response_part) + + parsed = json.loads(result["content"]) + assert parsed["error_code"] == "SKILL_NOT_FOUND" + + +def test_part_to_message_block_empty_response_stays_empty(): + """An empty response dict should still produce an empty content string.""" + response_part = types.Part.from_function_response( + name="some_tool", + response={}, + ) + response_part.function_response.id = "test_id_4" + + result = part_to_message_block(response_part) + + assert result["content"] == "" + + # --- Tests for Bug #1: Streaming support --- From 1ee062312813e9564fdff693f883f57987e18c6a Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Wed, 18 Mar 2026 16:16:29 -0700 Subject: [PATCH 051/192] fix: Update import and version for k8s-agent-sandbox Renames the imported module from `agentic_sandbox` to `k8s_agent_sandbox` in `gke_code_executor.py` and updates the required version in `pyproject.toml` to `>=0.1.1.post3`. Closes #4883 Co-authored-by: Liang Wu PiperOrigin-RevId: 885840142 --- pyproject.toml | 2 +- src/google/adk/code_executors/gke_code_executor.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 6ff9ea2b00..a39d831ce8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -158,7 +158,7 @@ extensions = [ "crewai[tools];python_version>='3.11' and python_version<'3.12'", # For CrewaiTool; chromadb/pypika fail on 3.12+ "docker>=7.0.0", # For ContainerCodeExecutor "kubernetes>=29.0.0", # For GkeCodeExecutor - "k8s-agent-sandbox>=0.1.1.post2", # For GkeCodeExecutor sandbox mode + "k8s-agent-sandbox>=0.1.1.post3", # For GkeCodeExecutor sandbox mode "langgraph>=0.2.60, <0.4.8", # For LangGraphAgent "litellm>=1.75.5, <2.0.0", # For LiteLlm class. Currently has OpenAI limitations. TODO: once LiteLlm fix it "llama-index-readers-file>=0.4.0", # For retrieval using LlamaIndex. diff --git a/src/google/adk/code_executors/gke_code_executor.py b/src/google/adk/code_executors/gke_code_executor.py index b44aa19357..3336eed6d9 100644 --- a/src/google/adk/code_executors/gke_code_executor.py +++ b/src/google/adk/code_executors/gke_code_executor.py @@ -30,12 +30,12 @@ from .code_execution_utils import CodeExecutionResult try: - from agentic_sandbox import SandboxClient + from k8s_agent_sandbox import SandboxClient except ImportError: SandboxClient = None if TYPE_CHECKING: - from agentic_sandbox import SandboxClient + from k8s_agent_sandbox import SandboxClient # Expose these for tests to monkeypatch. client = k8s.client From 78e5a908dcb4b1a93e156c6f1b282f59ec6b69d4 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 19 Mar 2026 03:10:51 -0700 Subject: [PATCH 052/192] feat(auth): Integrate GCP IAM Connectors (Noop implementation) - Introduced a new `AuthScheme` named `GcpIamConnectorAuth` in `google.adk.integrations.iam_connector` package. - The feature is currently disabled through the newly added `GCP_IAM_CONNECTOR_AUTH`experimentation flag. - The newly added `GcpAuthProvider` class in `adk/integrations/iam_connector/gcp_auth_provider.py` is for internal ADK use and developer should not depend on it. PiperOrigin-RevId: 886070137 --- src/google/adk/auth/auth_schemes.py | 6 +- src/google/adk/auth/credential_manager.py | 10 ++++ src/google/adk/features/_feature_registry.py | 4 ++ .../integrations/_iam_connectors/README.md | 19 +++++++ .../integrations/_iam_connectors/__init__.py | 19 +++++++ .../_iam_connectors/gcp_auth_provider.py | 40 +++++++++++++ .../_iam_connectors/gcp_iam_connector_auth.py | 57 +++++++++++++++++++ .../unittests/auth/test_credential_manager.py | 20 +++++++ 8 files changed, 173 insertions(+), 2 deletions(-) create mode 100644 src/google/adk/integrations/_iam_connectors/README.md create mode 100644 src/google/adk/integrations/_iam_connectors/__init__.py create mode 100644 src/google/adk/integrations/_iam_connectors/gcp_auth_provider.py create mode 100644 src/google/adk/integrations/_iam_connectors/gcp_iam_connector_auth.py diff --git a/src/google/adk/auth/auth_schemes.py b/src/google/adk/auth/auth_schemes.py index 78347eaf36..334264d90c 100644 --- a/src/google/adk/auth/auth_schemes.py +++ b/src/google/adk/auth/auth_schemes.py @@ -26,6 +26,7 @@ from fastapi.openapi.models import SecuritySchemeType from pydantic import Field +from ..integrations._iam_connectors.gcp_iam_connector_auth import GcpIamConnectorAuth from ..utils.feature_decorator import experimental @@ -42,8 +43,9 @@ class OpenIdConnectWithConfig(SecurityBase): scopes: Optional[List[str]] = None -# AuthSchemes contains SecuritySchemes from OpenAPI 3.0 and an extra flattened OpenIdConnectWithConfig. -AuthScheme = Union[SecurityScheme, OpenIdConnectWithConfig] +# AuthSchemes contains SecuritySchemes from OpenAPI 3.0, an extra flattened +# OpenIdConnectWithConfig, and GCP managed auth. +AuthScheme = Union[SecurityScheme, OpenIdConnectWithConfig, GcpIamConnectorAuth] class OAuthGrantType(str, Enum): diff --git a/src/google/adk/auth/credential_manager.py b/src/google/adk/auth/credential_manager.py index 08d1184d4d..3d5ace592b 100644 --- a/src/google/adk/auth/credential_manager.py +++ b/src/google/adk/auth/credential_manager.py @@ -20,6 +20,10 @@ from fastapi.openapi.models import OAuth2 from ..agents.callback_context import CallbackContext +from ..features import FeatureName +from ..features import is_feature_enabled +from ..integrations._iam_connectors.gcp_auth_provider import GcpAuthProvider +from ..integrations._iam_connectors.gcp_iam_connector_auth import GcpIamConnectorAuth from ..tools.openapi_tool.auth.credential_exchangers.service_account_exchanger import ServiceAccountCredentialExchanger from ..utils.feature_decorator import experimental from .auth_credential import AuthCredential @@ -87,6 +91,12 @@ def __init__( self._refresher_registry = CredentialRefresherRegistry() self._discovery_manager = OAuth2DiscoveryManager() + # Register auth providers + if is_feature_enabled(FeatureName.GCP_IAM_CONNECTOR_AUTH): + self._auth_provider_registry.register( + GcpIamConnectorAuth, GcpAuthProvider() + ) + # Register default exchangers and refreshers from .exchanger.oauth2_credential_exchanger import OAuth2CredentialExchanger from .refresher.oauth2_credential_refresher import OAuth2CredentialRefresher diff --git a/src/google/adk/features/_feature_registry.py b/src/google/adk/features/_feature_registry.py index e42ebac6a9..1b5354c103 100644 --- a/src/google/adk/features/_feature_registry.py +++ b/src/google/adk/features/_feature_registry.py @@ -38,6 +38,7 @@ class FeatureName(str, Enum): DATA_AGENT_TOOL_CONFIG = "DATA_AGENT_TOOL_CONFIG" DATA_AGENT_TOOLSET = "DATA_AGENT_TOOLSET" ENVIRONMENT_SIMULATION = "ENVIRONMENT_SIMULATION" + GCP_IAM_CONNECTOR_AUTH = "GCP_IAM_CONNECTOR_AUTH" GOOGLE_CREDENTIALS_CONFIG = "GOOGLE_CREDENTIALS_CONFIG" GOOGLE_TOOL = "GOOGLE_TOOL" JSON_SCHEMA_FOR_FUNC_DECL = "JSON_SCHEMA_FOR_FUNC_DECL" @@ -126,6 +127,9 @@ class FeatureConfig: FeatureName.GOOGLE_TOOL: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), + FeatureName.GCP_IAM_CONNECTOR_AUTH: FeatureConfig( + FeatureStage.EXPERIMENTAL, default_on=False + ), FeatureName.JSON_SCHEMA_FOR_FUNC_DECL: FeatureConfig( FeatureStage.WIP, default_on=False ), diff --git a/src/google/adk/integrations/_iam_connectors/README.md b/src/google/adk/integrations/_iam_connectors/README.md new file mode 100644 index 0000000000..bdccc0c9ce --- /dev/null +++ b/src/google/adk/integrations/_iam_connectors/README.md @@ -0,0 +1,19 @@ +# GCP IAM Connector Auth + +Manages complete lifecycle of access token using the GCP IAM Connector +Credential service. + +## Setup + +1. **Install Dependencies:** + ```bash + pip install "google-adk[iam_connectors]" + ``` + +2. **Configure:** + Specify the IAM Connector configuration like Connector name, scopes etc + using the `GcpIamConnectorAuth` as `auth_scheme` while configuring + `McpToolset` Refer to this link for detailed steps (TODO) + +## Usage +See the [official documentation](TODO) for integration details. diff --git a/src/google/adk/integrations/_iam_connectors/__init__.py b/src/google/adk/integrations/_iam_connectors/__init__.py new file mode 100644 index 0000000000..125f631dcf --- /dev/null +++ b/src/google/adk/integrations/_iam_connectors/__init__.py @@ -0,0 +1,19 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .gcp_iam_connector_auth import GcpIamConnectorAuth + +__all__ = [ + "GcpIamConnectorAuth", +] diff --git a/src/google/adk/integrations/_iam_connectors/gcp_auth_provider.py b/src/google/adk/integrations/_iam_connectors/gcp_auth_provider.py new file mode 100644 index 0000000000..5394442b59 --- /dev/null +++ b/src/google/adk/integrations/_iam_connectors/gcp_auth_provider.py @@ -0,0 +1,40 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Optional +from typing import TYPE_CHECKING + +from google.adk.auth.base_auth_provider import BaseAuthProvider +from google.adk.features import experimental +from google.adk.features import FeatureName + +if TYPE_CHECKING: + from google.adk.agents.callback_context import CallbackContext + from google.adk.auth.auth_credential import AuthCredential + from google.adk.auth.auth_tool import AuthConfig + + +@experimental(FeatureName.GCP_IAM_CONNECTOR_AUTH) +class GcpAuthProvider(BaseAuthProvider): + """Manages auth credentials using GCP IAM Connector Credential service.""" + + async def get_auth_credential( + self, + auth_config: AuthConfig, + context: Optional[CallbackContext] = None, + ) -> AuthCredential: + """Retrieves credentials (Not Implemented).""" + raise NotImplementedError("GcpAuthProvider is not yet implemented.") diff --git a/src/google/adk/integrations/_iam_connectors/gcp_iam_connector_auth.py b/src/google/adk/integrations/_iam_connectors/gcp_iam_connector_auth.py new file mode 100644 index 0000000000..9b75cd0d66 --- /dev/null +++ b/src/google/adk/integrations/_iam_connectors/gcp_iam_connector_auth.py @@ -0,0 +1,57 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from enum import Enum +from typing import List +from typing import Optional + +from pydantic import BaseModel +from pydantic import Field + +from ...features import FeatureName +from ...utils.feature_decorator import experimental + + +class ManagedAuthSchemeType(str, Enum): + """Enum for externally managed authentication scheme types.""" + + gcpIamConnectorAuth = "gcpIamConnectorAuth" + + +@experimental(FeatureName.GCP_IAM_CONNECTOR_AUTH) +class GcpIamConnectorAuth(BaseModel): + """Represents a GCP IAM Connector authentication scheme. + + Attributes: + connector_name: The name of the GCP IAM connector to use. + scopes: Optional. A list of OAuth2 scopes to request. + continue_uri: Optional. A type of redirect URI. It is distinct from the + standard OAuth2 redirect URI. Its purpose is to reauthenticate the user to + prevent phishing attacks and to finalize the managed OAuth flow. The + standard, Google-hosted OAuth2 redirect URI will redirect the user to this + continue URI. The agent will include this URI in every 3-legged OAuth + request sent to the upstream IAM Connector Credential service. Developers + must ensure this URI is hosted (e.g. on GCP, a third-party cloud, + on-prem), preferably alongside the agent client's web server. + TODO: Add public documentation link for more information once available. + """ + + type_: ManagedAuthSchemeType = Field( + default=ManagedAuthSchemeType.gcpIamConnectorAuth, alias="type" + ) + connector_name: str + scopes: Optional[List[str]] = None + continue_uri: Optional[str] = None diff --git a/tests/unittests/auth/test_credential_manager.py b/tests/unittests/auth/test_credential_manager.py index 0cb999e5d9..785f4a7ce2 100644 --- a/tests/unittests/auth/test_credential_manager.py +++ b/tests/unittests/auth/test_credential_manager.py @@ -37,6 +37,10 @@ from google.adk.auth.credential_manager import CredentialManager from google.adk.auth.credential_manager import ServiceAccountCredentialExchanger from google.adk.auth.oauth2_discovery import AuthorizationServerMetadata +from google.adk.features import FeatureName +from google.adk.features._feature_registry import temporary_feature_override +from google.adk.integrations._iam_connectors import GcpIamConnectorAuth +from google.adk.integrations._iam_connectors.gcp_auth_provider import GcpAuthProvider from google.adk.sessions.in_memory_session_service import InMemorySessionService from google.adk.tools.tool_context import ToolContext import pytest @@ -47,12 +51,28 @@ class TestCredentialManager: """Test suite for CredentialManager.""" + @pytest.fixture(autouse=True) + def enable_gcp_iam_connector_auth(self): + with temporary_feature_override(FeatureName.GCP_IAM_CONNECTOR_AUTH, True): + yield + def test_init(self): """Test CredentialManager initialization.""" auth_config = Mock(spec=AuthConfig) manager = CredentialManager(auth_config) assert manager._auth_config == auth_config + def test_init_registers_gcp_auth_provider(self): + """Test that GcpIamConnectorAuth is registered with GcpAuthProvider.""" + auth_config = Mock(spec=AuthConfig) + manager = CredentialManager(auth_config) + + provider = manager._auth_provider_registry.get_provider( + GcpIamConnectorAuth(connector_name="test") + ) + + assert isinstance(provider, GcpAuthProvider) + @pytest.mark.asyncio async def test_request_credential(self): """Test request_credential method.""" From fbe76595b77a7cdc903371e1825227edcd173146 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 19 Mar 2026 05:29:06 -0700 Subject: [PATCH 053/192] ADK changes PiperOrigin-RevId: 886119834 --- src/google/adk/auth/auth_schemes.py | 6 +- src/google/adk/auth/credential_manager.py | 10 ---- src/google/adk/features/_feature_registry.py | 4 -- .../integrations/_iam_connectors/README.md | 19 ------- .../integrations/_iam_connectors/__init__.py | 19 ------- .../_iam_connectors/gcp_auth_provider.py | 40 ------------- .../_iam_connectors/gcp_iam_connector_auth.py | 57 ------------------- .../unittests/auth/test_credential_manager.py | 20 ------- 8 files changed, 2 insertions(+), 173 deletions(-) delete mode 100644 src/google/adk/integrations/_iam_connectors/README.md delete mode 100644 src/google/adk/integrations/_iam_connectors/__init__.py delete mode 100644 src/google/adk/integrations/_iam_connectors/gcp_auth_provider.py delete mode 100644 src/google/adk/integrations/_iam_connectors/gcp_iam_connector_auth.py diff --git a/src/google/adk/auth/auth_schemes.py b/src/google/adk/auth/auth_schemes.py index 334264d90c..78347eaf36 100644 --- a/src/google/adk/auth/auth_schemes.py +++ b/src/google/adk/auth/auth_schemes.py @@ -26,7 +26,6 @@ from fastapi.openapi.models import SecuritySchemeType from pydantic import Field -from ..integrations._iam_connectors.gcp_iam_connector_auth import GcpIamConnectorAuth from ..utils.feature_decorator import experimental @@ -43,9 +42,8 @@ class OpenIdConnectWithConfig(SecurityBase): scopes: Optional[List[str]] = None -# AuthSchemes contains SecuritySchemes from OpenAPI 3.0, an extra flattened -# OpenIdConnectWithConfig, and GCP managed auth. -AuthScheme = Union[SecurityScheme, OpenIdConnectWithConfig, GcpIamConnectorAuth] +# AuthSchemes contains SecuritySchemes from OpenAPI 3.0 and an extra flattened OpenIdConnectWithConfig. +AuthScheme = Union[SecurityScheme, OpenIdConnectWithConfig] class OAuthGrantType(str, Enum): diff --git a/src/google/adk/auth/credential_manager.py b/src/google/adk/auth/credential_manager.py index 3d5ace592b..08d1184d4d 100644 --- a/src/google/adk/auth/credential_manager.py +++ b/src/google/adk/auth/credential_manager.py @@ -20,10 +20,6 @@ from fastapi.openapi.models import OAuth2 from ..agents.callback_context import CallbackContext -from ..features import FeatureName -from ..features import is_feature_enabled -from ..integrations._iam_connectors.gcp_auth_provider import GcpAuthProvider -from ..integrations._iam_connectors.gcp_iam_connector_auth import GcpIamConnectorAuth from ..tools.openapi_tool.auth.credential_exchangers.service_account_exchanger import ServiceAccountCredentialExchanger from ..utils.feature_decorator import experimental from .auth_credential import AuthCredential @@ -91,12 +87,6 @@ def __init__( self._refresher_registry = CredentialRefresherRegistry() self._discovery_manager = OAuth2DiscoveryManager() - # Register auth providers - if is_feature_enabled(FeatureName.GCP_IAM_CONNECTOR_AUTH): - self._auth_provider_registry.register( - GcpIamConnectorAuth, GcpAuthProvider() - ) - # Register default exchangers and refreshers from .exchanger.oauth2_credential_exchanger import OAuth2CredentialExchanger from .refresher.oauth2_credential_refresher import OAuth2CredentialRefresher diff --git a/src/google/adk/features/_feature_registry.py b/src/google/adk/features/_feature_registry.py index 1b5354c103..e42ebac6a9 100644 --- a/src/google/adk/features/_feature_registry.py +++ b/src/google/adk/features/_feature_registry.py @@ -38,7 +38,6 @@ class FeatureName(str, Enum): DATA_AGENT_TOOL_CONFIG = "DATA_AGENT_TOOL_CONFIG" DATA_AGENT_TOOLSET = "DATA_AGENT_TOOLSET" ENVIRONMENT_SIMULATION = "ENVIRONMENT_SIMULATION" - GCP_IAM_CONNECTOR_AUTH = "GCP_IAM_CONNECTOR_AUTH" GOOGLE_CREDENTIALS_CONFIG = "GOOGLE_CREDENTIALS_CONFIG" GOOGLE_TOOL = "GOOGLE_TOOL" JSON_SCHEMA_FOR_FUNC_DECL = "JSON_SCHEMA_FOR_FUNC_DECL" @@ -127,9 +126,6 @@ class FeatureConfig: FeatureName.GOOGLE_TOOL: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), - FeatureName.GCP_IAM_CONNECTOR_AUTH: FeatureConfig( - FeatureStage.EXPERIMENTAL, default_on=False - ), FeatureName.JSON_SCHEMA_FOR_FUNC_DECL: FeatureConfig( FeatureStage.WIP, default_on=False ), diff --git a/src/google/adk/integrations/_iam_connectors/README.md b/src/google/adk/integrations/_iam_connectors/README.md deleted file mode 100644 index bdccc0c9ce..0000000000 --- a/src/google/adk/integrations/_iam_connectors/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# GCP IAM Connector Auth - -Manages complete lifecycle of access token using the GCP IAM Connector -Credential service. - -## Setup - -1. **Install Dependencies:** - ```bash - pip install "google-adk[iam_connectors]" - ``` - -2. **Configure:** - Specify the IAM Connector configuration like Connector name, scopes etc - using the `GcpIamConnectorAuth` as `auth_scheme` while configuring - `McpToolset` Refer to this link for detailed steps (TODO) - -## Usage -See the [official documentation](TODO) for integration details. diff --git a/src/google/adk/integrations/_iam_connectors/__init__.py b/src/google/adk/integrations/_iam_connectors/__init__.py deleted file mode 100644 index 125f631dcf..0000000000 --- a/src/google/adk/integrations/_iam_connectors/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from .gcp_iam_connector_auth import GcpIamConnectorAuth - -__all__ = [ - "GcpIamConnectorAuth", -] diff --git a/src/google/adk/integrations/_iam_connectors/gcp_auth_provider.py b/src/google/adk/integrations/_iam_connectors/gcp_auth_provider.py deleted file mode 100644 index 5394442b59..0000000000 --- a/src/google/adk/integrations/_iam_connectors/gcp_auth_provider.py +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from typing import Optional -from typing import TYPE_CHECKING - -from google.adk.auth.base_auth_provider import BaseAuthProvider -from google.adk.features import experimental -from google.adk.features import FeatureName - -if TYPE_CHECKING: - from google.adk.agents.callback_context import CallbackContext - from google.adk.auth.auth_credential import AuthCredential - from google.adk.auth.auth_tool import AuthConfig - - -@experimental(FeatureName.GCP_IAM_CONNECTOR_AUTH) -class GcpAuthProvider(BaseAuthProvider): - """Manages auth credentials using GCP IAM Connector Credential service.""" - - async def get_auth_credential( - self, - auth_config: AuthConfig, - context: Optional[CallbackContext] = None, - ) -> AuthCredential: - """Retrieves credentials (Not Implemented).""" - raise NotImplementedError("GcpAuthProvider is not yet implemented.") diff --git a/src/google/adk/integrations/_iam_connectors/gcp_iam_connector_auth.py b/src/google/adk/integrations/_iam_connectors/gcp_iam_connector_auth.py deleted file mode 100644 index 9b75cd0d66..0000000000 --- a/src/google/adk/integrations/_iam_connectors/gcp_iam_connector_auth.py +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from enum import Enum -from typing import List -from typing import Optional - -from pydantic import BaseModel -from pydantic import Field - -from ...features import FeatureName -from ...utils.feature_decorator import experimental - - -class ManagedAuthSchemeType(str, Enum): - """Enum for externally managed authentication scheme types.""" - - gcpIamConnectorAuth = "gcpIamConnectorAuth" - - -@experimental(FeatureName.GCP_IAM_CONNECTOR_AUTH) -class GcpIamConnectorAuth(BaseModel): - """Represents a GCP IAM Connector authentication scheme. - - Attributes: - connector_name: The name of the GCP IAM connector to use. - scopes: Optional. A list of OAuth2 scopes to request. - continue_uri: Optional. A type of redirect URI. It is distinct from the - standard OAuth2 redirect URI. Its purpose is to reauthenticate the user to - prevent phishing attacks and to finalize the managed OAuth flow. The - standard, Google-hosted OAuth2 redirect URI will redirect the user to this - continue URI. The agent will include this URI in every 3-legged OAuth - request sent to the upstream IAM Connector Credential service. Developers - must ensure this URI is hosted (e.g. on GCP, a third-party cloud, - on-prem), preferably alongside the agent client's web server. - TODO: Add public documentation link for more information once available. - """ - - type_: ManagedAuthSchemeType = Field( - default=ManagedAuthSchemeType.gcpIamConnectorAuth, alias="type" - ) - connector_name: str - scopes: Optional[List[str]] = None - continue_uri: Optional[str] = None diff --git a/tests/unittests/auth/test_credential_manager.py b/tests/unittests/auth/test_credential_manager.py index 785f4a7ce2..0cb999e5d9 100644 --- a/tests/unittests/auth/test_credential_manager.py +++ b/tests/unittests/auth/test_credential_manager.py @@ -37,10 +37,6 @@ from google.adk.auth.credential_manager import CredentialManager from google.adk.auth.credential_manager import ServiceAccountCredentialExchanger from google.adk.auth.oauth2_discovery import AuthorizationServerMetadata -from google.adk.features import FeatureName -from google.adk.features._feature_registry import temporary_feature_override -from google.adk.integrations._iam_connectors import GcpIamConnectorAuth -from google.adk.integrations._iam_connectors.gcp_auth_provider import GcpAuthProvider from google.adk.sessions.in_memory_session_service import InMemorySessionService from google.adk.tools.tool_context import ToolContext import pytest @@ -51,28 +47,12 @@ class TestCredentialManager: """Test suite for CredentialManager.""" - @pytest.fixture(autouse=True) - def enable_gcp_iam_connector_auth(self): - with temporary_feature_override(FeatureName.GCP_IAM_CONNECTOR_AUTH, True): - yield - def test_init(self): """Test CredentialManager initialization.""" auth_config = Mock(spec=AuthConfig) manager = CredentialManager(auth_config) assert manager._auth_config == auth_config - def test_init_registers_gcp_auth_provider(self): - """Test that GcpIamConnectorAuth is registered with GcpAuthProvider.""" - auth_config = Mock(spec=AuthConfig) - manager = CredentialManager(auth_config) - - provider = manager._auth_provider_registry.get_provider( - GcpIamConnectorAuth(connector_name="test") - ) - - assert isinstance(provider, GcpAuthProvider) - @pytest.mark.asyncio async def test_request_credential(self): """Test request_credential method.""" From fdc2b4355b5a73b8f32d3fa32a092339d963ce67 Mon Sep 17 00:00:00 2001 From: Tim Niemueller Date: Thu, 19 Mar 2026 09:53:18 -0700 Subject: [PATCH 054/192] feat: enable suppressing A2A experimental warnings The ADK experimental warnings can already be disabled with an environment variable, enable the same behavior for A2A to avoid log spam. Co-authored-by: Tim Niemueller PiperOrigin-RevId: 886233489 --- src/google/adk/a2a/experimental.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/google/adk/a2a/experimental.py b/src/google/adk/a2a/experimental.py index 7f331eb763..dadc3791d1 100644 --- a/src/google/adk/a2a/experimental.py +++ b/src/google/adk/a2a/experimental.py @@ -27,6 +27,7 @@ "themselves not experimental. Once it's stable enough the experimental " "mode will be removed. Your feedback is welcome." ), + bypass_env_var="ADK_SUPPRESS_A2A_EXPERIMENTAL_FEATURE_WARNINGS", ) """Mark a class or function as experimental A2A feature. From f6ea58b5939b33afad5a2d2f8fb395150120ae07 Mon Sep 17 00:00:00 2001 From: George Weale Date: Thu, 19 Mar 2026 10:58:07 -0700 Subject: [PATCH 055/192] fix: Add read-only session support in DatabaseSessionService This change introduces a separate async session factory for Spanner connections configured with `read_only=True` Close #4771 Co-authored-by: George Weale PiperOrigin-RevId: 886267104 --- .../adk/sessions/database_session_service.py | 26 +++- .../sessions/test_session_service.py | 130 ++++++++++++++++++ 2 files changed, 151 insertions(+), 5 deletions(-) diff --git a/src/google/adk/sessions/database_session_service.py b/src/google/adk/sessions/database_session_service.py index bb00aefe4f..1aeb464b7f 100644 --- a/src/google/adk/sessions/database_session_service.py +++ b/src/google/adk/sessions/database_session_service.py @@ -21,7 +21,6 @@ import logging from typing import Any from typing import AsyncIterator -from typing import Optional from typing import TypeAlias from typing import TypeVar @@ -178,11 +177,14 @@ def __init__(self, db_url: str, **kwargs: Any): ) from e self.db_engine: AsyncEngine = db_engine - # DB session factory method self.database_session_factory: async_sessionmaker[ DatabaseSessionFactory ] = async_sessionmaker(bind=self.db_engine, expire_on_commit=False) + read_only_engine = self.db_engine.execution_options(read_only=True) + self._read_only_database_session_factory: async_sessionmaker[ + DatabaseSessionFactory + ] = async_sessionmaker(bind=read_only_engine, expire_on_commit=False) # Flag to indicate if tables are created self._tables_created = False @@ -201,9 +203,18 @@ def __init__(self, db_url: str, **kwargs: Any): def _get_schema_classes(self) -> _SchemaClasses: return _SchemaClasses(self._db_schema_version) + def _get_database_session_factory( + self, *, read_only: bool = False + ) -> async_sessionmaker[DatabaseSessionFactory]: + if read_only: + return self._read_only_database_session_factory + return self.database_session_factory + @asynccontextmanager async def _rollback_on_exception_session( self, + *, + read_only: bool = False, ) -> AsyncIterator[DatabaseSessionFactory]: """Yields a database session with guaranteed rollback on errors. @@ -211,7 +222,8 @@ async def _rollback_on_exception_session( the transaction is explicitly rolled back before the error propagates, preventing connection-pool exhaustion from lingering invalid transactions. """ - async with self.database_session_factory() as sql_session: + session_factory = self._get_database_session_factory(read_only=read_only) + async with session_factory() as sql_session: try: yield sql_session except BaseException: @@ -441,7 +453,9 @@ async def get_session( # 2. Get all the events based on session id and filtering config # 3. Convert and return the session schema = self._get_schema_classes() - async with self._rollback_on_exception_session() as sql_session: + async with self._rollback_on_exception_session( + read_only=True + ) as sql_session: storage_session = await sql_session.get( schema.StorageSession, (app_name, user_id, session_id) ) @@ -496,7 +510,9 @@ async def list_sessions( ) -> ListSessionsResponse: await self._prepare_tables() schema = self._get_schema_classes() - async with self._rollback_on_exception_session() as sql_session: + async with self._rollback_on_exception_session( + read_only=True + ) as sql_session: stmt = select(schema.StorageSession).filter( schema.StorageSession.app_name == app_name ) diff --git a/tests/unittests/sessions/test_session_service.py b/tests/unittests/sessions/test_session_service.py index 0a7721088e..8a56600edc 100644 --- a/tests/unittests/sessions/test_session_service.py +++ b/tests/unittests/sessions/test_session_service.py @@ -13,6 +13,7 @@ # limitations under the License. import asyncio +from contextlib import asynccontextmanager from datetime import datetime from datetime import timezone import enum @@ -151,6 +152,74 @@ def fake_create_async_engine(_db_url: str, **kwargs): assert captured_kwargs.get('pool_pre_ping') is False +def test_database_session_service_creates_read_only_engine_for_spanner(): + captured_binds = [] + fake_engine = mock.Mock() + fake_engine.dialect.name = 'spanner+spanner' + fake_engine.sync_engine = mock.Mock() + read_only_engine = mock.Mock() + fake_engine.execution_options.return_value = read_only_engine + + def fake_async_sessionmaker(*, bind, expire_on_commit, **kwargs): + del expire_on_commit + del kwargs + captured_binds.append(bind) + return mock.Mock() + + with ( + mock.patch.object( + database_session_service, + 'create_async_engine', + return_value=fake_engine, + ), + mock.patch.object( + database_session_service, + 'async_sessionmaker', + side_effect=fake_async_sessionmaker, + ), + ): + database_session_service.DatabaseSessionService( + 'spanner+spanner:///projects/test/instances/test/databases/test' + ) + + assert captured_binds == [fake_engine, read_only_engine] + fake_engine.execution_options.assert_called_once_with(read_only=True) + + +def test_database_session_service_creates_read_only_engine_for_other_dialects(): + captured_binds = [] + fake_engine = mock.Mock() + fake_engine.dialect.name = 'postgresql' + fake_engine.sync_engine = mock.Mock() + read_only_engine = mock.Mock() + fake_engine.execution_options.return_value = read_only_engine + + def fake_async_sessionmaker(*, bind, expire_on_commit, **kwargs): + del expire_on_commit + del kwargs + captured_binds.append(bind) + return mock.Mock() + + with ( + mock.patch.object( + database_session_service, + 'create_async_engine', + return_value=fake_engine, + ), + mock.patch.object( + database_session_service, + 'async_sessionmaker', + side_effect=fake_async_sessionmaker, + ), + ): + database_session_service.DatabaseSessionService( + 'postgresql+psycopg2://user:pass@localhost:5432/db' + ) + + assert captured_binds == [fake_engine, read_only_engine] + fake_engine.execution_options.assert_called_once_with(read_only=True) + + @pytest.mark.asyncio async def test_sqlite_session_service_accepts_sqlite_urls( tmp_path, monkeypatch @@ -198,6 +267,67 @@ async def test_get_empty_session(session_service): ) +@pytest.mark.asyncio +async def test_database_session_service_get_session_uses_read_only_factory(): + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + service._prepare_tables = mock.AsyncMock() + + read_only_session = mock.AsyncMock() + read_only_session.get = mock.AsyncMock(return_value=None) + + @asynccontextmanager + async def fake_read_only_session(): + yield read_only_session + + service.database_session_factory = mock.Mock( + side_effect=AssertionError('write session factory should not be used') + ) + service._read_only_database_session_factory = mock.Mock( + return_value=fake_read_only_session() + ) + + session = await service.get_session( + app_name='my_app', user_id='test_user', session_id='123' + ) + + assert session is None + service._read_only_database_session_factory.assert_called_once_with() + service.database_session_factory.assert_not_called() + + await service.close() + + +@pytest.mark.asyncio +async def test_database_session_service_list_sessions_uses_read_only_factory(): + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + service._prepare_tables = mock.AsyncMock() + + read_only_session = mock.AsyncMock() + empty_result = mock.Mock() + empty_result.scalars.return_value.all.return_value = [] + read_only_session.execute = mock.AsyncMock(return_value=empty_result) + read_only_session.get = mock.AsyncMock(return_value=None) + + @asynccontextmanager + async def fake_read_only_session(): + yield read_only_session + + service.database_session_factory = mock.Mock( + side_effect=AssertionError('write session factory should not be used') + ) + service._read_only_database_session_factory = mock.Mock( + return_value=fake_read_only_session() + ) + + response = await service.list_sessions(app_name='my_app', user_id='test_user') + + assert response.sessions == [] + service._read_only_database_session_factory.assert_called_once_with() + service.database_session_factory.assert_not_called() + + await service.close() + + @pytest.mark.asyncio async def test_create_get_session(session_service): app_name = 'my_app' From 991c4111e31ffe97acc73c2ddf5cacea0955d39f Mon Sep 17 00:00:00 2001 From: George Weale Date: Thu, 19 Mar 2026 11:01:09 -0700 Subject: [PATCH 056/192] fix: Prevent compaction of events with pending function calls Modified compaction logic to exclude events containing function calls for which no corresponding function response has been recorded in the session. Added helper functions to identify pending function call IDs and check if an event contains such IDs. Applied this exclusion to both sliding window and token threshold-based compaction strategies Close #4740 Co-authored-by: George Weale PiperOrigin-RevId: 886268526 --- src/google/adk/apps/compaction.py | 41 +++++ tests/unittests/apps/test_compaction.py | 206 ++++++++++++++++++++++++ 2 files changed, 247 insertions(+) diff --git a/src/google/adk/apps/compaction.py b/src/google/adk/apps/compaction.py index 61941bff2c..1f6ebdec7a 100644 --- a/src/google/adk/apps/compaction.py +++ b/src/google/adk/apps/compaction.py @@ -232,6 +232,10 @@ def _events_to_compact_for_token_threshold( event_retention_size=event_retention_size, ) events_to_compact = candidate_events[:split_index] + pending_ids = _pending_function_call_ids(events) + events_to_compact = _truncate_events_before_pending_function_call( + events_to_compact, pending_ids + ) if not events_to_compact: return [] @@ -273,6 +277,39 @@ def _event_function_response_ids(event: Event) -> set[str]: return function_response_ids +def _pending_function_call_ids(events: list[Event]) -> set[str]: + """Returns function call IDs that have no matching response in the session. + + Scans the session once, collecting function call IDs and response IDs, then + returns the call IDs that are not covered by any response. Events containing + these IDs represent pending (unanswered) function calls that must not be + compacted. + """ + all_call_ids: set[str] = set() + all_response_ids: set[str] = set() + for event in events: + all_call_ids.update(_event_function_call_ids(event)) + all_response_ids.update(_event_function_response_ids(event)) + + return all_call_ids - all_response_ids + + +def _has_pending_function_call(event: Event, pending_ids: set[str]) -> bool: + """Returns True if the event contains any pending function call.""" + call_ids = _event_function_call_ids(event) + return bool(call_ids and not call_ids.isdisjoint(pending_ids)) + + +def _truncate_events_before_pending_function_call( + events: list[Event], pending_ids: set[str] +) -> list[Event]: + """Returns the leading contiguous events that avoid pending function calls.""" + for index, event in enumerate(events): + if _has_pending_function_call(event, pending_ids): + return events[:index] + return events + + def _safe_token_compaction_split_index( *, candidate_events: list[Event], @@ -553,6 +590,10 @@ async def _run_compaction_for_sliding_window( for e in events_to_compact if not (e.actions and e.actions.compaction) ] + pending_ids = _pending_function_call_ids(events) + events_to_compact = _truncate_events_before_pending_function_call( + events_to_compact, pending_ids + ) if not events_to_compact: return None diff --git a/tests/unittests/apps/test_compaction.py b/tests/unittests/apps/test_compaction.py index 6960c8d48b..935b09793e 100644 --- a/tests/unittests/apps/test_compaction.py +++ b/tests/unittests/apps/test_compaction.py @@ -922,3 +922,209 @@ def test_get_contents_compaction_at_beginning(self): expected_texts = ['Summary 1-2', 'Event 3', 'Event 4'] actual_texts = [c.parts[0].text for c in result_contents] self.assertEqual(actual_texts, expected_texts) + + async def test_sliding_window_excludes_pending_function_call_events(self): + """Sliding-window compaction stops before pending function calls.""" + app = App( + name='test', + root_agent=Mock(spec=BaseAgent), + events_compaction_config=EventsCompactionConfig( + summarizer=self.mock_compactor, + compaction_interval=2, + overlap_size=0, + ), + ) + # inv1: normal text, inv2: pending function call (no response) + events = [ + self._create_event(1.0, 'inv1', 'e1'), + self._create_function_call_event(2.0, 'inv2', 'pending-call-1'), + self._create_event(3.0, 'inv3', 'e3'), + ] + session = Session(app_name='test', user_id='u1', id='s1', events=events) + + mock_compacted_event = self._create_compacted_event( + 1.0, 3.0, 'Summary without pending' + ) + self.mock_compactor.maybe_summarize_events.return_value = ( + mock_compacted_event + ) + + await _run_compaction_for_sliding_window( + app, session, self.mock_session_service + ) + + compacted_events_arg = self.mock_compactor.maybe_summarize_events.call_args[ + 1 + ]['events'] + compacted_inv_ids = [e.invocation_id for e in compacted_events_arg] + self.assertEqual(compacted_inv_ids, ['inv1']) + + async def test_sliding_window_pending_function_call_remains_in_contents( + self, + ): + """Sliding-window compaction keeps pending tool calls visible in history.""" + app = App( + name='test', + root_agent=Mock(spec=BaseAgent), + events_compaction_config=EventsCompactionConfig( + summarizer=self.mock_compactor, + compaction_interval=2, + overlap_size=0, + ), + ) + events = [ + self._create_event(1.0, 'inv1', 'e1'), + self._create_function_call_event(2.0, 'inv2', 'pending-call-1'), + self._create_event(3.0, 'inv3', 'e3'), + ] + session = Session(app_name='test', user_id='u1', id='s1', events=events) + self.mock_compactor.maybe_summarize_events.side_effect = ( + lambda *, events: self._create_compacted_event( + events[0].timestamp, + events[-1].timestamp, + 'Summary safe prefix', + ) + ) + + await _run_compaction_for_sliding_window( + app, session, self.mock_session_service + ) + + appended_event = self.mock_session_service.append_event.call_args[1][ + 'event' + ] + self.assertEqual(appended_event.actions.compaction.start_timestamp, 1.0) + self.assertEqual(appended_event.actions.compaction.end_timestamp, 1.0) + + result_contents = contents._get_contents(None, events + [appended_event]) + self.assertEqual(result_contents[0].parts[0].text, 'Summary safe prefix') + self.assertEqual( + result_contents[1].parts[0].function_call.name, + 'tool', + ) + self.assertEqual(result_contents[2].parts[0].text, 'e3') + + async def test_token_threshold_excludes_pending_function_call_events(self): + """Token-threshold compaction stays contiguous before pending calls.""" + app = App( + name='test', + root_agent=Mock(spec=BaseAgent), + events_compaction_config=EventsCompactionConfig( + summarizer=self.mock_compactor, + compaction_interval=999, + overlap_size=0, + token_threshold=50, + event_retention_size=0, + ), + ) + # inv1: text, inv2: pending function call, inv3: text with token count + events = [ + self._create_event(1.0, 'inv1', 'e1'), + self._create_function_call_event(2.0, 'inv2', 'pending-call-1'), + self._create_event(3.0, 'inv3', 'e3', prompt_token_count=100), + ] + session = Session(app_name='test', user_id='u1', id='s1', events=events) + + mock_compacted_event = self._create_compacted_event( + 1.0, 1.0, 'Summary inv1' + ) + self.mock_compactor.maybe_summarize_events.return_value = ( + mock_compacted_event + ) + + await _run_compaction_for_sliding_window( + app, session, self.mock_session_service + ) + + compacted_events_arg = self.mock_compactor.maybe_summarize_events.call_args[ + 1 + ]['events'] + compacted_inv_ids = [e.invocation_id for e in compacted_events_arg] + self.assertEqual(compacted_inv_ids, ['inv1']) + + async def test_token_threshold_pending_function_call_remains_in_contents( + self, + ): + """Token-threshold compaction keeps pending tool calls visible.""" + app = App( + name='test', + root_agent=Mock(spec=BaseAgent), + events_compaction_config=EventsCompactionConfig( + summarizer=self.mock_compactor, + compaction_interval=999, + overlap_size=0, + token_threshold=50, + event_retention_size=0, + ), + ) + events = [ + self._create_event(1.0, 'inv1', 'e1'), + self._create_function_call_event(2.0, 'inv2', 'pending-call-1'), + self._create_event(3.0, 'inv3', 'e3', prompt_token_count=100), + ] + session = Session(app_name='test', user_id='u1', id='s1', events=events) + self.mock_compactor.maybe_summarize_events.side_effect = ( + lambda *, events: self._create_compacted_event( + events[0].timestamp, + events[-1].timestamp, + 'Summary safe prefix', + ) + ) + + await _run_compaction_for_sliding_window( + app, session, self.mock_session_service + ) + + appended_event = self.mock_session_service.append_event.call_args[1][ + 'event' + ] + self.assertEqual(appended_event.actions.compaction.start_timestamp, 1.0) + self.assertEqual(appended_event.actions.compaction.end_timestamp, 1.0) + + result_contents = contents._get_contents(None, events + [appended_event]) + self.assertEqual(result_contents[0].parts[0].text, 'Summary safe prefix') + self.assertEqual( + result_contents[1].parts[0].function_call.name, + 'tool', + ) + self.assertEqual(result_contents[2].parts[0].text, 'e3') + + async def test_completed_function_call_pair_is_still_compacted(self): + """Completed function call/response pairs must still be compacted.""" + app = App( + name='test', + root_agent=Mock(spec=BaseAgent), + events_compaction_config=EventsCompactionConfig( + summarizer=self.mock_compactor, + compaction_interval=2, + overlap_size=0, + ), + ) + # inv1: text, inv2: completed call+response pair, inv3: text + events = [ + self._create_event(1.0, 'inv1', 'e1'), + self._create_function_call_event(2.0, 'inv2', 'completed-call-1'), + self._create_function_response_event(3.0, 'inv2', 'completed-call-1'), + self._create_event(4.0, 'inv3', 'e3'), + ] + session = Session(app_name='test', user_id='u1', id='s1', events=events) + + mock_compacted_event = self._create_compacted_event( + 1.0, 4.0, 'Summary with completed pair' + ) + self.mock_compactor.maybe_summarize_events.return_value = ( + mock_compacted_event + ) + + await _run_compaction_for_sliding_window( + app, session, self.mock_session_service + ) + + compacted_events_arg = self.mock_compactor.maybe_summarize_events.call_args[ + 1 + ]['events'] + compacted_inv_ids = [e.invocation_id for e in compacted_events_arg] + # Both the call and response events for inv2 should be compacted. + self.assertIn('inv1', compacted_inv_ids) + self.assertEqual(compacted_inv_ids.count('inv2'), 2) + self.assertIn('inv3', compacted_inv_ids) From b157276cbb3c4f7f7b97e338e9d9df63d9c949cd Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Thu, 19 Mar 2026 13:39:22 -0700 Subject: [PATCH 057/192] fix: Allow snake case for skill name Kebab-case is the standard for skill names/directories given by the Skill spec. However, to enable support for importing within skill scripts (python does not allow imports with kebab-case, only snake case), allow snake case for the skill name. Co-authored-by: Kathy Wu PiperOrigin-RevId: 886351132 --- src/google/adk/features/_feature_registry.py | 4 +++ src/google/adk/skills/models.py | 30 ++++++++++++++++---- tests/unittests/skills/test_models.py | 29 +++++++++++++++++-- 3 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/google/adk/features/_feature_registry.py b/src/google/adk/features/_feature_registry.py index e42ebac6a9..4ae26a98ab 100644 --- a/src/google/adk/features/_feature_registry.py +++ b/src/google/adk/features/_feature_registry.py @@ -52,6 +52,7 @@ class FeatureName(str, Enum): TOOL_CONFIG = "TOOL_CONFIG" TOOL_CONFIRMATION = "TOOL_CONFIRMATION" PLUGGABLE_AUTH = "PLUGGABLE_AUTH" + SNAKE_CASE_SKILL_NAME = "SNAKE_CASE_SKILL_NAME" class FeatureStage(Enum): @@ -162,6 +163,9 @@ class FeatureConfig: FeatureName.PLUGGABLE_AUTH: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True ), + FeatureName.SNAKE_CASE_SKILL_NAME: FeatureConfig( + FeatureStage.EXPERIMENTAL, default_on=False + ), } # Track which experimental features have already warned (warn only once) diff --git a/src/google/adk/skills/models.py b/src/google/adk/skills/models.py index cda1447bbe..1cd443b2ca 100644 --- a/src/google/adk/skills/models.py +++ b/src/google/adk/skills/models.py @@ -26,14 +26,20 @@ from pydantic import Field from pydantic import field_validator -_NAME_PATTERN = re.compile(r"^[a-z0-9]+(-[a-z0-9]+)*$") +from ..features import FeatureName +from ..features import is_feature_enabled + +_KEBAB_NAME_PATTERN = re.compile(r"^[a-z0-9]+(-[a-z0-9]+)*$") +_SNAKE_OR_KEBAB_NAME_PATTERN = re.compile( + r"^([a-z0-9]+(-[a-z0-9]+)*|[a-z0-9]+(_[a-z0-9]+)*)$" +) class Frontmatter(BaseModel): """L1 skill content: metadata parsed from SKILL.md for skill discovery. Attributes: - name: Skill name in kebab-case (required). + name: Skill name in kebab-case or snake_case (required). description: What the skill does and when the model should use it (required). license: License for the skill (optional). @@ -78,11 +84,23 @@ def _validate_name(cls, v: str) -> str: v = unicodedata.normalize("NFKC", v) if len(v) > 64: raise ValueError("name must be at most 64 characters") - if not _NAME_PATTERN.match(v): - raise ValueError( - "name must be lowercase kebab-case (a-z, 0-9, hyphens)," - " with no leading, trailing, or consecutive hyphens" + if is_feature_enabled(FeatureName.SNAKE_CASE_SKILL_NAME): + pattern = _SNAKE_OR_KEBAB_NAME_PATTERN + msg = ( + "name must be lowercase kebab-case (a-z, 0-9, hyphens) or" + " snake_case (a-z, 0-9, underscores), with no leading, trailing," + " or consecutive delimiters. Mixing hyphens and underscores is" + " not allowed." + ) + else: + pattern = _KEBAB_NAME_PATTERN + msg = ( + "name must be lowercase kebab-case (a-z, 0-9," + " hyphens), with no leading, trailing, or" + " consecutive delimiters" ) + if not pattern.match(v): + raise ValueError(msg) return v @field_validator("description") diff --git a/tests/unittests/skills/test_models.py b/tests/unittests/skills/test_models.py index 5685e9d868..73136be0b9 100644 --- a/tests/unittests/skills/test_models.py +++ b/tests/unittests/skills/test_models.py @@ -14,6 +14,8 @@ """Unit tests for skill models.""" +from google.adk.features import FeatureName +from google.adk.features._feature_registry import temporary_feature_override from google.adk.skills import models from pydantic import ValidationError import pytest @@ -99,16 +101,39 @@ def test_name_consecutive_hyphens(): models.Frontmatter(name="my--skill", description="desc") -def test_name_invalid_chars_underscore(): +def test_name_underscore_rejected_by_default(): with pytest.raises(ValidationError, match="lowercase kebab-case"): models.Frontmatter(name="my_skill", description="desc") +def test_name_valid_underscore_preserved_with_flag(): + with temporary_feature_override(FeatureName.SNAKE_CASE_SKILL_NAME, True): + fm = models.Frontmatter(name="my_skill", description="desc") + assert fm.name == "my_skill" + + def test_name_invalid_chars_ampersand(): - with pytest.raises(ValidationError, match="lowercase kebab-case"): + with pytest.raises( + ValidationError, match="name must be lowercase kebab-case" + ): models.Frontmatter(name="skill&name", description="desc") +def test_name_mixed_delimiters_rejected_by_default(): + with pytest.raises( + ValidationError, match="name must be lowercase kebab-case" + ): + models.Frontmatter(name="my-skill_1", description="desc") + + +def test_name_mixed_delimiters_rejected_with_flag(): + with temporary_feature_override(FeatureName.SNAKE_CASE_SKILL_NAME, True): + with pytest.raises( + ValidationError, match="Mixing hyphens and underscores is not allowed" + ): + models.Frontmatter(name="my-skill_1", description="desc") + + def test_name_valid_passes(): fm = models.Frontmatter(name="my-skill-2", description="desc") assert fm.name == "my-skill-2" From f35c3a66da7c66967d06d0f5f058f9417abf1f8d Mon Sep 17 00:00:00 2001 From: "Xiang (Sean) Zhou" Date: Thu, 19 Mar 2026 13:46:17 -0700 Subject: [PATCH 058/192] fix(tools): support structured datastores in DiscoveryEngineSearchTool DiscoveryEngineSearchTool hardcoded search_result_mode to CHUNKS, which fails with a 400 error for structured datastores (e.g. Jira Cloud connectors) that require DOCUMENTS mode. This broke VertexAiSearchTool with bypass_multi_tools_limit=True for structured data. Add auto-detection: default mode is now None, which tries CHUNKS first and automatically falls back to DOCUMENTS when the API returns the structured-datastore error. Users can also explicitly set the mode via the new SearchResultMode enum to skip auto-detection. Fixes #3406 Co-authored-by: Xiang (Sean) Zhou PiperOrigin-RevId: 886354417 --- src/google/adk/tools/__init__.py | 5 + .../adk/tools/discovery_engine_search_tool.py | 184 ++++++++++++++---- .../test_discovery_engine_search_tool.py | 172 +++++++++++++++- 3 files changed, 323 insertions(+), 38 deletions(-) diff --git a/src/google/adk/tools/__init__.py b/src/google/adk/tools/__init__.py index 28bb4670a0..b444e3a744 100644 --- a/src/google/adk/tools/__init__.py +++ b/src/google/adk/tools/__init__.py @@ -25,6 +25,7 @@ from .apihub_tool.apihub_toolset import APIHubToolset from .base_tool import BaseTool from .discovery_engine_search_tool import DiscoveryEngineSearchTool + from .discovery_engine_search_tool import SearchResultMode from .enterprise_search_tool import enterprise_web_search_tool as enterprise_web_search from .example_tool import ExampleTool from .exit_loop_tool import exit_loop @@ -55,6 +56,10 @@ '.discovery_engine_search_tool', 'DiscoveryEngineSearchTool', ), + 'SearchResultMode': ( + '.discovery_engine_search_tool', + 'SearchResultMode', + ), 'enterprise_web_search': ( '.enterprise_search_tool', 'enterprise_web_search_tool', diff --git a/src/google/adk/tools/discovery_engine_search_tool.py b/src/google/adk/tools/discovery_engine_search_tool.py index 11bc37c7ed..542bc2f2dc 100644 --- a/src/google/adk/tools/discovery_engine_search_tool.py +++ b/src/google/adk/tools/discovery_engine_search_tool.py @@ -14,6 +14,11 @@ from __future__ import annotations +from collections.abc import Mapping +import enum +import json +import logging +import re from typing import Any from typing import Optional @@ -25,6 +30,22 @@ from .function_tool import FunctionTool +logger = logging.getLogger('google_adk.' + __name__) + +_STRUCTURED_STORE_ERROR_PATTERN = re.compile( + r'search_result_mode.*DOCUMENTS', re.IGNORECASE +) + + +class SearchResultMode(enum.Enum): + """Search result mode for discovery engine search.""" + + CHUNKS = 'CHUNKS' + """Results as chunks (default). Works for unstructured data.""" + + DOCUMENTS = 'DOCUMENTS' + """Results as documents. Required for structured datastores.""" + class DiscoveryEngineSearchTool(FunctionTool): """Tool for searching the discovery engine.""" @@ -38,6 +59,8 @@ def __init__( search_engine_id: Optional[str] = None, filter: Optional[str] = None, max_results: Optional[int] = None, + *, + search_result_mode: Optional[SearchResultMode] = None, ): """Initializes the DiscoveryEngineSearchTool. @@ -51,29 +74,34 @@ def __init__( "projects/{project}/locations/{location}/collections/{collection}/engines/{engine}". filter: The filter to be applied to the search request. Default is None. max_results: The maximum number of results to return. Default is None. + search_result_mode: The search result mode. When None (default), + automatically detects the correct mode by trying CHUNKS first + and falling back to DOCUMENTS if the datastore requires it. + Set explicitly to CHUNKS or DOCUMENTS to skip auto-detection. """ super().__init__(self.discovery_engine_search) if (data_store_id is None and search_engine_id is None) or ( data_store_id is not None and search_engine_id is not None ): raise ValueError( - "Either data_store_id or search_engine_id must be specified." + 'Either data_store_id or search_engine_id must be specified.' ) if data_store_specs is not None and search_engine_id is None: raise ValueError( - "search_engine_id must be specified if data_store_specs is specified." + 'search_engine_id must be specified if data_store_specs is specified.' ) self._serving_config = ( - f"{data_store_id or search_engine_id}/servingConfigs/default_config" + f'{data_store_id or search_engine_id}/servingConfigs/default_config' ) self._data_store_specs = data_store_specs self._search_engine_id = search_engine_id self._filter = filter self._max_results = max_results + self._search_result_mode = search_result_mode credentials, _ = google.auth.default() - quota_project_id = getattr(credentials, "quota_project_id", None) + quota_project_id = getattr(credentials, 'quota_project_id', None) options = ( client_options.ClientOptions(quota_project_id=quota_project_id) if quota_project_id @@ -93,19 +121,45 @@ def discovery_engine_search( query: The search query. Returns: - A dictionary containing the status of the request and the list of search - results, which contains the title, url and content. + A dictionary containing the status of the request and the list of + search results, which contains the title, url and content. """ + try: + mode = self._search_result_mode + if mode is not None: + return self._do_search(query, mode) + + # Auto-detect: try CHUNKS first, fall back to DOCUMENTS + # if the datastore requires it. + try: + return self._do_search(query, SearchResultMode.CHUNKS) + except GoogleAPICallError as e: + if _STRUCTURED_STORE_ERROR_PATTERN.search(str(e)): + logger.info( + 'CHUNKS mode failed for structured datastore,' + ' retrying with DOCUMENTS mode.' + ) + self._search_result_mode = SearchResultMode.DOCUMENTS + return self._do_search(query, SearchResultMode.DOCUMENTS) + raise + except GoogleAPICallError as e: + return {'status': 'error', 'error_message': str(e)} + + def _do_search( + self, + query: str, + mode: SearchResultMode, + ) -> dict[str, Any]: + """Executes a search request with the given mode. + + Raises: + GoogleAPICallError: If the search API call fails. + """ + content_search_spec = self._build_content_search_spec(mode) request = discoveryengine.SearchRequest( serving_config=self._serving_config, query=query, - content_search_spec=discoveryengine.SearchRequest.ContentSearchSpec( - search_result_mode=discoveryengine.SearchRequest.ContentSearchSpec.SearchResultMode.CHUNKS, - chunk_spec=discoveryengine.SearchRequest.ContentSearchSpec.ChunkSpec( - num_previous_chunks=0, - num_next_chunks=0, - ), - ), + content_search_spec=content_search_spec, ) if self._data_store_specs: @@ -116,28 +170,90 @@ def discovery_engine_search( request.page_size = self._max_results results = [] - try: - response = self._discovery_engine_client.search(request) - for item in response.results: + response = self._discovery_engine_client.search(request) + for item in response.results: + if mode == SearchResultMode.DOCUMENTS: + doc = item.document + if not doc: + continue + results.append(self._parse_document_result(doc)) + else: chunk = item.chunk if not chunk: continue + results.append(self._parse_chunk_result(chunk)) + return {'status': 'success', 'results': results} - title = "" - uri = "" - doc_metadata = chunk.document_metadata - if doc_metadata: - title = doc_metadata.title - uri = doc_metadata.uri - # Prioritize URI from struct_data if it exists. - if doc_metadata.struct_data and "uri" in doc_metadata.struct_data: - uri = doc_metadata.struct_data["uri"] - - results.append({ - "title": title, - "url": uri, - "content": chunk.content, - }) - except GoogleAPICallError as e: - return {"status": "error", "error_message": str(e)} - return {"status": "success", "results": results} + def _build_content_search_spec( + self, + mode: SearchResultMode, + ) -> discoveryengine.SearchRequest.ContentSearchSpec: + """Builds the ContentSearchSpec based on the search result mode.""" + spec_cls = discoveryengine.SearchRequest.ContentSearchSpec + if mode == SearchResultMode.DOCUMENTS: + return spec_cls( + search_result_mode=spec_cls.SearchResultMode.DOCUMENTS, + ) + return spec_cls( + search_result_mode=spec_cls.SearchResultMode.CHUNKS, + chunk_spec=spec_cls.ChunkSpec( + num_previous_chunks=0, + num_next_chunks=0, + ), + ) + + def _parse_chunk_result(self, chunk: discoveryengine.Chunk) -> dict[str, str]: + """Parses a chunk search result into a dict.""" + title = '' + uri = '' + doc_metadata = chunk.document_metadata + if doc_metadata: + title = doc_metadata.title + uri = doc_metadata.uri + # Prioritize URI from struct_data if it exists. + if doc_metadata.struct_data and 'uri' in doc_metadata.struct_data: + uri = doc_metadata.struct_data['uri'] + return { + 'title': title, + 'url': uri, + 'content': chunk.content, + } + + def _parse_document_result( + self, doc: discoveryengine.Document + ) -> dict[str, str]: + """Parses a document search result into a dict.""" + title = '' + uri = '' + content = '' + + # Structured data: fields are in struct_data. + if doc.struct_data: + data = dict(doc.struct_data) + title = data.pop('title', '') + uri = data.pop('uri', data.pop('link', '')) + content = json.dumps(data) + # Unstructured data: fields are in derived_struct_data. + elif doc.derived_struct_data: + data = dict(doc.derived_struct_data) + title = data.get('title', '') + uri = data.get('link', '') + snippets = data.get('snippets', []) + if snippets: + snippet_texts = [] + for s in snippets: + s_snippet = s.get('snippet') if isinstance(s, Mapping) else None + if s_snippet: + snippet_texts.append(str(s_snippet)) + else: + snippet_texts.append(str(s)) + content = '\n'.join(snippet_texts) + extractive_answers = data.get('extractive_answers', []) + if not content and extractive_answers: + content = '\n'.join(str(a) for a in extractive_answers) + + return { + 'title': title, + 'url': uri, + 'content': content, + } diff --git a/tests/unittests/tools/test_discovery_engine_search_tool.py b/tests/unittests/tools/test_discovery_engine_search_tool.py index 7cba5f1841..e5a17e7f9d 100644 --- a/tests/unittests/tools/test_discovery_engine_search_tool.py +++ b/tests/unittests/tools/test_discovery_engine_search_tool.py @@ -16,6 +16,7 @@ from google.adk.tools import discovery_engine_search_tool from google.adk.tools.discovery_engine_search_tool import DiscoveryEngineSearchTool +from google.adk.tools.discovery_engine_search_tool import SearchResultMode from google.api_core import exceptions from google.cloud import discoveryengine_v1beta as discoveryengine import pytest @@ -128,8 +129,9 @@ def test_discovery_engine_search_success( client_options=mock_client_options.ClientOptions.return_value, ) - @mock.patch( - "google.cloud.discoveryengine_v1beta.SearchServiceClient", + @mock.patch.object( + discoveryengine, + "SearchServiceClient", ) def test_discovery_engine_search_api_error(self, mock_search_client): """Test discovery engine search with API error.""" @@ -143,8 +145,9 @@ def test_discovery_engine_search_api_error(self, mock_search_client): assert result["status"] == "error" assert result["error_message"] == "None API error" - @mock.patch( - "google.cloud.discoveryengine_v1beta.SearchServiceClient", + @mock.patch.object( + discoveryengine, + "SearchServiceClient", ) def test_discovery_engine_search_no_results(self, mock_search_client): """Test discovery engine search with no results.""" @@ -156,3 +159,164 @@ def test_discovery_engine_search_no_results(self, mock_search_client): assert result["status"] == "success" assert not result["results"] + + def test_init_default_search_result_mode(self): + """Test default search result mode is None (auto-detect).""" + tool = DiscoveryEngineSearchTool(data_store_id="test_data_store") + assert tool._search_result_mode is None + + def test_init_with_documents_mode(self): + """Test initialization with DOCUMENTS search result mode.""" + tool = DiscoveryEngineSearchTool( + data_store_id="test_data_store", + search_result_mode=SearchResultMode.DOCUMENTS, + ) + assert tool._search_result_mode == SearchResultMode.DOCUMENTS + + @mock.patch.object( + discoveryengine, + "SearchServiceClient", + ) + def test_discovery_engine_search_documents_structured( + self, mock_search_client + ): + """Test DOCUMENTS mode with structured data.""" + mock_doc = discoveryengine.Document( + name="projects/p/locations/l/doc1", + id="doc1", + struct_data={ + "title": "Jira Issue", + "uri": "https://jira.example.com/123", + "summary": "Bug fix for login", + }, + ) + mock_response = discoveryengine.SearchResponse() + mock_response.results = [ + discoveryengine.SearchResponse.SearchResult(document=mock_doc) + ] + mock_search_client.return_value.search.return_value = mock_response + + tool = DiscoveryEngineSearchTool( + data_store_id="test_data_store", + search_result_mode=SearchResultMode.DOCUMENTS, + ) + result = tool.discovery_engine_search("test query") + + assert result["status"] == "success" + assert len(result["results"]) == 1 + assert result["results"][0]["title"] == "Jira Issue" + assert result["results"][0]["url"] == "https://jira.example.com/123" + assert "Bug fix for login" in result["results"][0]["content"] + + @mock.patch.object( + discoveryengine, + "SearchServiceClient", + ) + def test_discovery_engine_search_documents_unstructured( + self, mock_search_client + ): + """Test DOCUMENTS mode with unstructured data.""" + mock_doc = discoveryengine.Document( + name="projects/p/locations/l/doc2", + id="doc2", + derived_struct_data={ + "title": "Web Page", + "link": "https://example.com", + "snippets": [{"snippet": "Relevant text here"}], + }, + ) + mock_response = discoveryengine.SearchResponse() + mock_response.results = [ + discoveryengine.SearchResponse.SearchResult(document=mock_doc) + ] + mock_search_client.return_value.search.return_value = mock_response + + tool = DiscoveryEngineSearchTool( + data_store_id="test_data_store", + search_result_mode=SearchResultMode.DOCUMENTS, + ) + result = tool.discovery_engine_search("test query") + + assert result["status"] == "success" + assert len(result["results"]) == 1 + assert result["results"][0]["title"] == "Web Page" + assert result["results"][0]["url"] == "https://example.com" + assert "Relevant text here" in result["results"][0]["content"] + + @mock.patch.object( + discoveryengine, + "SearchServiceClient", + ) + def test_discovery_engine_search_documents_no_results( + self, mock_search_client + ): + """Test DOCUMENTS mode with no results.""" + mock_response = discoveryengine.SearchResponse() + mock_search_client.return_value.search.return_value = mock_response + + tool = DiscoveryEngineSearchTool( + data_store_id="test_data_store", + search_result_mode=SearchResultMode.DOCUMENTS, + ) + result = tool.discovery_engine_search("test query") + + assert result["status"] == "success" + assert not result["results"] + + @mock.patch.object( + discoveryengine, + "SearchServiceClient", + ) + def test_auto_detect_falls_back_to_documents(self, mock_search_client): + """Test auto-detect retries with DOCUMENTS on structured store error.""" + structured_error = exceptions.InvalidArgument( + "`content_search_spec.search_result_mode` must be set to" + " SearchRequest.ContentSearchSpec.SearchResultMode.DOCUMENTS" + " when the engine contains structured data store." + ) + mock_doc = discoveryengine.Document( + name="projects/p/locations/l/doc1", + id="doc1", + struct_data={ + "title": "Jira Issue", + "uri": "https://jira.example.com/123", + "summary": "Bug fix", + }, + ) + mock_doc_response = discoveryengine.SearchResponse() + mock_doc_response.results = [ + discoveryengine.SearchResponse.SearchResult(document=mock_doc) + ] + mock_search_client.return_value.search.side_effect = [ + structured_error, + mock_doc_response, + ] + + tool = DiscoveryEngineSearchTool(data_store_id="test_data_store") + result = tool.discovery_engine_search("test query") + + assert result["status"] == "success" + assert len(result["results"]) == 1 + assert result["results"][0]["title"] == "Jira Issue" + assert mock_search_client.return_value.search.call_count == 2 + # Mode should be persisted so subsequent calls skip the retry. + assert tool._search_result_mode == SearchResultMode.DOCUMENTS + + @mock.patch.object( + discoveryengine, + "SearchServiceClient", + ) + def test_auto_detect_does_not_retry_on_unrelated_error( + self, mock_search_client + ): + """Test auto-detect does not retry on unrelated API errors.""" + mock_search_client.return_value.search.side_effect = ( + exceptions.GoogleAPICallError("Permission denied") + ) + + tool = DiscoveryEngineSearchTool(data_store_id="test_data_store") + result = tool.discovery_engine_search("test query") + + assert result["status"] == "error" + assert "Permission denied" in result["error_message"] + assert mock_search_client.return_value.search.call_count == 1 From 58c453688fea921707a07c21d0669174ea1a3b5f Mon Sep 17 00:00:00 2001 From: Divyansh Shukla Date: Thu, 19 Mar 2026 15:18:33 -0700 Subject: [PATCH 059/192] fix: Refactor blocking subprocess call to use asyncio in bash_tool PiperOrigin-RevId: 886400492 --- src/google/adk/tools/bash_tool.py | 29 ++++++++++++++----------- tests/unittests/tools/test_bash_tool.py | 13 ++++++++--- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/google/adk/tools/bash_tool.py b/src/google/adk/tools/bash_tool.py index 38e996430c..f3ba4c2ef4 100644 --- a/src/google/adk/tools/bash_tool.py +++ b/src/google/adk/tools/bash_tool.py @@ -16,10 +16,10 @@ from __future__ import annotations +import asyncio import dataclasses import pathlib import shlex -import subprocess from typing import Any from typing import Optional @@ -132,19 +132,22 @@ async def run_async( elif not tool_context.tool_confirmation.confirmed: return {"error": "This tool call is rejected."} + process = await asyncio.create_subprocess_exec( + *shlex.split(command), + cwd=str(self._workspace), + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + ) try: - result = subprocess.run( - shlex.split(command), - shell=False, - cwd=str(self._workspace), - capture_output=True, - text=True, - timeout=30, - ) + stdout, stderr = await asyncio.wait_for(process.communicate(), timeout=30) return { - "stdout": result.stdout, - "stderr": result.stderr, - "returncode": result.returncode, + "stdout": stdout.decode(), + "stderr": stderr.decode(), + "returncode": process.returncode, } - except subprocess.TimeoutExpired: + except asyncio.TimeoutError: + try: + process.kill() + except ProcessLookupError: + pass return {"error": "Command timed out after 30 seconds."} diff --git a/tests/unittests/tools/test_bash_tool.py b/tests/unittests/tools/test_bash_tool.py index e35c32b6f5..c32a4a5e07 100644 --- a/tests/unittests/tools/test_bash_tool.py +++ b/tests/unittests/tools/test_bash_tool.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import asyncio from unittest import mock from google.adk.tools import bash_tool @@ -201,9 +202,14 @@ async def test_nonzero_returncode(self, workspace, tool_context_confirmed): @pytest.mark.asyncio async def test_timeout(self, workspace, tool_context_confirmed): tool = bash_tool.ExecuteBashTool(workspace=workspace) - with mock.patch( - "google.adk.tools.bash_tool.subprocess.run", - side_effect=__import__("subprocess").TimeoutExpired("cmd", 30), + mock_process = mock.AsyncMock() + with mock.patch.object( + asyncio, + "create_subprocess_exec", + autospec=True, + return_value=mock_process, + ), mock.patch.object( + asyncio, "wait_for", autospec=True, side_effect=asyncio.TimeoutError ): result = await tool.run_async( args={"command": "python scripts/do_thing.py"}, @@ -211,6 +217,7 @@ async def test_timeout(self, workspace, tool_context_confirmed): ) assert "error" in result assert "timed out" in result["error"].lower() + mock_process.kill.assert_called_once() @pytest.mark.asyncio async def test_cwd_is_workspace(self, workspace, tool_context_confirmed): From 0e93faf0813a5f99926d39fb293ed02f9ca76e10 Mon Sep 17 00:00:00 2001 From: Xuan Yang Date: Thu, 19 Mar 2026 16:53:32 -0700 Subject: [PATCH 060/192] chore: fix format Co-authored-by: Xuan Yang PiperOrigin-RevId: 886446298 --- tests/unittests/tools/test_bash_tool.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tests/unittests/tools/test_bash_tool.py b/tests/unittests/tools/test_bash_tool.py index c32a4a5e07..b5e1f63b8e 100644 --- a/tests/unittests/tools/test_bash_tool.py +++ b/tests/unittests/tools/test_bash_tool.py @@ -203,13 +203,16 @@ async def test_nonzero_returncode(self, workspace, tool_context_confirmed): async def test_timeout(self, workspace, tool_context_confirmed): tool = bash_tool.ExecuteBashTool(workspace=workspace) mock_process = mock.AsyncMock() - with mock.patch.object( - asyncio, - "create_subprocess_exec", - autospec=True, - return_value=mock_process, - ), mock.patch.object( - asyncio, "wait_for", autospec=True, side_effect=asyncio.TimeoutError + with ( + mock.patch.object( + asyncio, + "create_subprocess_exec", + autospec=True, + return_value=mock_process, + ), + mock.patch.object( + asyncio, "wait_for", autospec=True, side_effect=asyncio.TimeoutError + ), ): result = await tool.run_async( args={"command": "python scripts/do_thing.py"}, From 1f9f0fe9d349c06f48063b856242c67654786dbc Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Fri, 20 Mar 2026 10:11:01 -0700 Subject: [PATCH 061/192] fix: error when event does not contain long_running_tool_ids PiperOrigin-RevId: 886852929 --- src/google/adk/a2a/converters/long_running_functions.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/google/adk/a2a/converters/long_running_functions.py b/src/google/adk/a2a/converters/long_running_functions.py index 0bbb46daf5..6c620be714 100644 --- a/src/google/adk/a2a/converters/long_running_functions.py +++ b/src/google/adk/a2a/converters/long_running_functions.py @@ -74,7 +74,10 @@ def process_event(self, event: Event) -> Event: for part in event.content.parts: should_remove = False if part.function_call: - if part.function_call.id in event.long_running_tool_ids: + if ( + event.long_running_tool_ids + and part.function_call.id in event.long_running_tool_ids + ): if not event.partial: self._parts.append(part) self._long_running_tool_ids.add(part.function_call.id) From 0f4c8073e5a180a220f88928d67ee8d521486f03 Mon Sep 17 00:00:00 2001 From: "Xiang (Sean) Zhou" Date: Fri, 20 Mar 2026 11:27:16 -0700 Subject: [PATCH 062/192] feat(a2a): add lifespan parameter to to_a2a() Support Starlette lifespan protocol in to_a2a() so users can run async startup/shutdown logic (e.g. initializing DB connections, loading prompt registries) without resorting to module-level globals. The lifespan parameter accepts a standard Starlette async context manager. Internally, a composed lifespan runs the A2A route setup first, then delegates to the user's lifespan if provided. This also replaces the deprecated add_event_handler("startup", ...) pattern with the modern Starlette(lifespan=...) constructor. Closes #4701 Co-authored-by: Xiang (Sean) Zhou PiperOrigin-RevId: 886892363 --- src/google/adk/a2a/utils/agent_to_a2a.py | 41 ++- .../unittests/a2a/utils/test_agent_to_a2a.py | 244 +++++++++++++----- 2 files changed, 212 insertions(+), 73 deletions(-) diff --git a/src/google/adk/a2a/utils/agent_to_a2a.py b/src/google/adk/a2a/utils/agent_to_a2a.py index d6a07080fd..3e8ed461e2 100644 --- a/src/google/adk/a2a/utils/agent_to_a2a.py +++ b/src/google/adk/a2a/utils/agent_to_a2a.py @@ -14,7 +14,10 @@ from __future__ import annotations +from contextlib import asynccontextmanager import logging +from typing import AsyncIterator +from typing import Callable from typing import Optional from typing import Union @@ -82,6 +85,7 @@ def to_a2a( agent_card: Optional[Union[AgentCard, str]] = None, push_config_store: Optional[PushNotificationConfigStore] = None, runner: Optional[Runner] = None, + lifespan: Optional[Callable[[Starlette], AsyncIterator[None]]] = None, ) -> Starlette: """Convert an ADK agent to a A2A Starlette application. @@ -98,6 +102,11 @@ def to_a2a( config RPC methods are supported. runner: Optional pre-built Runner object. If not provided, a default runner will be created using in-memory services. + lifespan: Optional async context manager for Starlette lifespan + events. Use this to run startup/shutdown logic (e.g. initializing + database connections or loading resources). The context manager + receives the Starlette app instance and can set state on + ``app.state``. Returns: A Starlette application that can be run with uvicorn @@ -109,6 +118,15 @@ def to_a2a( # Or with custom agent card: app = to_a2a(agent, agent_card=my_custom_agent_card) + + # Or with lifespan: + @asynccontextmanager + async def lifespan(app): + app.state.db = await init_db() + yield + await app.state.db.close() + + app = to_a2a(agent, lifespan=lifespan) """ # Set up ADK logging to ensure logs are visible when using uvicorn directly adk_logger = logging.getLogger("google_adk") @@ -151,11 +169,8 @@ async def create_runner() -> Runner: rpc_url=rpc_url, ) - # Create a Starlette app that will be configured during startup - app = Starlette() - - # Add startup handler to build the agent card and configure A2A routes - async def setup_a2a(): + # Build the agent card and configure A2A routes + async def setup_a2a(app: Starlette): # Use provided agent card or build one asynchronously if provided_agent_card is not None: final_agent_card = provided_agent_card @@ -173,7 +188,19 @@ async def setup_a2a(): app, ) - # Store the setup function to be called during startup - app.add_event_handler("startup", setup_a2a) + # Compose a lifespan that runs A2A setup and the user's lifespan + @asynccontextmanager + async def _combined_lifespan( + app: Starlette, + ) -> AsyncIterator[None]: + await setup_a2a(app) + if lifespan: + async with lifespan(app): + yield + else: + yield + + # Create a Starlette app with the composed lifespan + app = Starlette(lifespan=_combined_lifespan) return app diff --git a/tests/unittests/a2a/utils/test_agent_to_a2a.py b/tests/unittests/a2a/utils/test_agent_to_a2a.py index 21c96d7ec2..a9e2458ebd 100644 --- a/tests/unittests/a2a/utils/test_agent_to_a2a.py +++ b/tests/unittests/a2a/utils/test_agent_to_a2a.py @@ -86,9 +86,7 @@ def test_to_a2a_default_parameters( mock_card_builder_class.assert_called_once_with( agent=self.mock_agent, rpc_url="http://localhost:8000/" ) - mock_app.add_event_handler.assert_called_once_with( - "startup", mock_app.add_event_handler.call_args[0][1] - ) + mock_starlette_class.assert_called_once_with(lifespan=ANY) @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @@ -122,7 +120,7 @@ def test_to_a2a_with_custom_runner( # Assert assert result == mock_app - mock_starlette_class.assert_called_once() + mock_starlette_class.assert_called_once_with(lifespan=ANY) mock_task_store_class.assert_called_once() mock_agent_executor_class.assert_called_once_with(runner=custom_runner) mock_request_handler_class.assert_called_once_with( @@ -133,9 +131,6 @@ def test_to_a2a_with_custom_runner( mock_card_builder_class.assert_called_once_with( agent=self.mock_agent, rpc_url="http://localhost:8000/" ) - mock_app.add_event_handler.assert_called_once_with( - "startup", mock_app.add_event_handler.call_args[0][1] - ) @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @@ -402,12 +397,10 @@ async def test_create_runner_function_with_agent_without_name( @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") - @patch("google.adk.a2a.utils.agent_to_a2a.Starlette") @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") async def test_setup_a2a_function_builds_agent_card_and_configures_routes( self, mock_a2a_app_class, - mock_starlette_class, mock_card_builder_class, mock_task_store_class, mock_request_handler_class, @@ -415,8 +408,6 @@ async def test_setup_a2a_function_builds_agent_card_and_configures_routes( ): """Test that the setup_a2a function builds agent card and configures A2A routes.""" # Arrange - mock_app = Mock(spec=Starlette) - mock_starlette_class.return_value = mock_app mock_task_store = Mock(spec=InMemoryTaskStore) mock_task_store_class.return_value = mock_task_store mock_agent_executor = Mock(spec=A2aAgentExecutor) @@ -430,16 +421,12 @@ async def test_setup_a2a_function_builds_agent_card_and_configures_routes( mock_a2a_app = Mock(spec=A2AStarletteApplication) mock_a2a_app_class.return_value = mock_a2a_app - # Act - result = to_a2a(self.mock_agent) + # Act - don't mock Starlette so lifespan is wired correctly + app = to_a2a(self.mock_agent) - # Assert - assert result == mock_app - # Get the setup_a2a function that was added as startup handler - startup_handler = mock_app.add_event_handler.call_args[0][1] - - # Call the setup_a2a function - await startup_handler() + # Run the lifespan to trigger setup_a2a + async with app.router.lifespan_context(app): + pass # Verify agent card was built mock_card_builder.build.assert_called_once() @@ -451,18 +438,16 @@ async def test_setup_a2a_function_builds_agent_card_and_configures_routes( ) # Verify routes were added to the main app - mock_a2a_app.add_routes_to_app.assert_called_once_with(mock_app) + mock_a2a_app.add_routes_to_app.assert_called_once_with(app) @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") - @patch("google.adk.a2a.utils.agent_to_a2a.Starlette") @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") async def test_setup_a2a_function_handles_agent_card_build_failure( self, mock_a2a_app_class, - mock_starlette_class, mock_card_builder_class, mock_task_store_class, mock_request_handler_class, @@ -470,8 +455,6 @@ async def test_setup_a2a_function_handles_agent_card_build_failure( ): """Test that setup_a2a function properly handles agent card build failure.""" # Arrange - mock_app = Mock(spec=Starlette) - mock_starlette_class.return_value = mock_app mock_task_store = Mock(spec=InMemoryTaskStore) mock_task_store_class.return_value = mock_task_store mock_agent_executor = Mock(spec=A2aAgentExecutor) @@ -484,17 +467,13 @@ async def test_setup_a2a_function_handles_agent_card_build_failure( mock_a2a_app = Mock(spec=A2AStarletteApplication) mock_a2a_app_class.return_value = mock_a2a_app - # Act - result = to_a2a(self.mock_agent) - - # Assert - assert result == mock_app - # Get the setup_a2a function that was added as startup handler - startup_handler = mock_app.add_event_handler.call_args[0][1] + # Act - don't mock Starlette so lifespan is wired correctly + app = to_a2a(self.mock_agent) - # Call the setup_a2a function and expect it to raise the exception + # Run the lifespan and expect it to raise during setup_a2a with pytest.raises(Exception, match="Build failed"): - await startup_handler() + async with app.router.lifespan_context(app): + pass @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @@ -535,20 +514,19 @@ def test_to_a2a_with_none_agent(self): with pytest.raises(ValueError, match="Agent cannot be None or empty."): to_a2a(None) - def test_to_a2a_with_invalid_agent_type(self): + async def test_to_a2a_with_invalid_agent_type(self): """Test that to_a2a raises error when agent is not a BaseAgent.""" # Arrange invalid_agent = "not an agent" # Act & Assert - # The error occurs during startup when building the agent card + # The error occurs during lifespan startup when building the agent card app = to_a2a(invalid_agent) with pytest.raises( AttributeError, match="'str' object has no attribute 'name'" ): - import asyncio - - asyncio.run(app.router.on_startup[0]()) + async with app.router.lifespan_context(app): + pass @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @@ -764,12 +742,10 @@ def test_to_a2a_with_ip_address_host( @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") - @patch("google.adk.a2a.utils.agent_to_a2a.Starlette") @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") async def test_to_a2a_with_custom_agent_card_object( self, mock_a2a_app_class, - mock_starlette_class, mock_card_builder_class, mock_task_store_class, mock_request_handler_class, @@ -777,8 +753,6 @@ async def test_to_a2a_with_custom_agent_card_object( ): """Test to_a2a with custom AgentCard object.""" # Arrange - mock_app = Mock(spec=Starlette) - mock_starlette_class.return_value = mock_app mock_task_store = Mock(spec=InMemoryTaskStore) mock_task_store_class.return_value = mock_task_store mock_agent_executor = Mock(spec=A2aAgentExecutor) @@ -794,16 +768,12 @@ async def test_to_a2a_with_custom_agent_card_object( custom_agent_card = Mock(spec=AgentCard) custom_agent_card.name = "custom_agent" - # Act - result = to_a2a(self.mock_agent, agent_card=custom_agent_card) - - # Assert - assert result == mock_app - # Get the setup_a2a function that was added as startup handler - startup_handler = mock_app.add_event_handler.call_args[0][1] + # Act - don't mock Starlette so lifespan is wired correctly + app = to_a2a(self.mock_agent, agent_card=custom_agent_card) - # Call the setup_a2a function - await startup_handler() + # Run the lifespan to trigger setup_a2a + async with app.router.lifespan_context(app): + pass # Verify the card builder build method was NOT called since we provided a card mock_card_builder.build.assert_not_called() @@ -815,13 +785,12 @@ async def test_to_a2a_with_custom_agent_card_object( ) # Verify routes were added to the main app - mock_a2a_app.add_routes_to_app.assert_called_once_with(mock_app) + mock_a2a_app.add_routes_to_app.assert_called_once_with(app) @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") - @patch("google.adk.a2a.utils.agent_to_a2a.Starlette") @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") @patch("json.load") @patch("pathlib.Path.open") @@ -832,7 +801,6 @@ async def test_to_a2a_with_agent_card_file_path( mock_open, mock_json_load, mock_a2a_app_class, - mock_starlette_class, mock_card_builder_class, mock_task_store_class, mock_request_handler_class, @@ -840,8 +808,6 @@ async def test_to_a2a_with_agent_card_file_path( ): """Test to_a2a with agent card file path.""" # Arrange - mock_app = Mock(spec=Starlette) - mock_starlette_class.return_value = mock_app mock_task_store = Mock(spec=InMemoryTaskStore) mock_task_store_class.return_value = mock_task_store mock_agent_executor = Mock(spec=A2aAgentExecutor) @@ -877,16 +843,12 @@ async def test_to_a2a_with_agent_card_file_path( } mock_json_load.return_value = agent_card_data - # Act - result = to_a2a(self.mock_agent, agent_card="/path/to/agent_card.json") + # Act - don't mock Starlette so lifespan is wired correctly + app = to_a2a(self.mock_agent, agent_card="/path/to/agent_card.json") - # Assert - assert result == mock_app - # Get the setup_a2a function that was added as startup handler - startup_handler = mock_app.add_event_handler.call_args[0][1] - - # Call the setup_a2a function - await startup_handler() + # Run the lifespan to trigger setup_a2a + async with app.router.lifespan_context(app): + pass # Verify file was opened and JSON was loaded mock_path_class.assert_called_once_with("/path/to/agent_card.json") @@ -939,3 +901,153 @@ def test_to_a2a_with_invalid_agent_card_file_path( # Act & Assert with pytest.raises(ValueError, match="Failed to load agent card from"): to_a2a(self.mock_agent, agent_card="/invalid/path.json") + + @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") + @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") + @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") + @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") + @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") + async def test_to_a2a_with_lifespan( + self, + mock_a2a_app_class, + mock_card_builder_class, + mock_task_store_class, + mock_request_handler_class, + mock_agent_executor_class, + ): + """Test to_a2a with a custom lifespan context manager.""" + from contextlib import asynccontextmanager + + # Arrange + mock_task_store = Mock(spec=InMemoryTaskStore) + mock_task_store_class.return_value = mock_task_store + mock_agent_executor = Mock(spec=A2aAgentExecutor) + mock_agent_executor_class.return_value = mock_agent_executor + mock_request_handler = Mock(spec=DefaultRequestHandler) + mock_request_handler_class.return_value = mock_request_handler + mock_card_builder = Mock(spec=AgentCardBuilder) + mock_card_builder_class.return_value = mock_card_builder + mock_agent_card = Mock(spec=AgentCard) + mock_card_builder.build = AsyncMock(return_value=mock_agent_card) + mock_a2a_app = Mock(spec=A2AStarletteApplication) + mock_a2a_app_class.return_value = mock_a2a_app + + startup_called = False + shutdown_called = False + + @asynccontextmanager + async def custom_lifespan(app): + nonlocal startup_called, shutdown_called + startup_called = True + app.state.test_value = "hello" + yield + shutdown_called = True + + # Act + app = to_a2a(self.mock_agent, lifespan=custom_lifespan) + + # Run the lifespan + async with app.router.lifespan_context(app): + # Verify setup_a2a ran (routes added) + mock_a2a_app.add_routes_to_app.assert_called_once_with(app) + # Verify user lifespan startup ran + assert startup_called + assert app.state.test_value == "hello" + + # Verify user lifespan shutdown ran + assert shutdown_called + + @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") + @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") + @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") + @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") + @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") + async def test_to_a2a_without_lifespan( + self, + mock_a2a_app_class, + mock_card_builder_class, + mock_task_store_class, + mock_request_handler_class, + mock_agent_executor_class, + ): + """Test to_a2a without lifespan still runs setup_a2a.""" + # Arrange + mock_task_store = Mock(spec=InMemoryTaskStore) + mock_task_store_class.return_value = mock_task_store + mock_agent_executor = Mock(spec=A2aAgentExecutor) + mock_agent_executor_class.return_value = mock_agent_executor + mock_request_handler = Mock(spec=DefaultRequestHandler) + mock_request_handler_class.return_value = mock_request_handler + mock_card_builder = Mock(spec=AgentCardBuilder) + mock_card_builder_class.return_value = mock_card_builder + mock_agent_card = Mock(spec=AgentCard) + mock_card_builder.build = AsyncMock(return_value=mock_agent_card) + mock_a2a_app = Mock(spec=A2AStarletteApplication) + mock_a2a_app_class.return_value = mock_a2a_app + + # Act - no lifespan parameter + app = to_a2a(self.mock_agent) + + # Run the lifespan + async with app.router.lifespan_context(app): + # Verify setup_a2a ran (routes added) + mock_a2a_app.add_routes_to_app.assert_called_once_with(app) + + @patch("google.adk.a2a.utils.agent_to_a2a.A2aAgentExecutor") + @patch("google.adk.a2a.utils.agent_to_a2a.DefaultRequestHandler") + @patch("google.adk.a2a.utils.agent_to_a2a.InMemoryTaskStore") + @patch("google.adk.a2a.utils.agent_to_a2a.AgentCardBuilder") + @patch("google.adk.a2a.utils.agent_to_a2a.A2AStarletteApplication") + async def test_to_a2a_lifespan_setup_runs_before_user_lifespan( + self, + mock_a2a_app_class, + mock_card_builder_class, + mock_task_store_class, + mock_request_handler_class, + mock_agent_executor_class, + ): + """Test that A2A setup runs before user lifespan startup.""" + from contextlib import asynccontextmanager + + # Arrange + mock_task_store = Mock(spec=InMemoryTaskStore) + mock_task_store_class.return_value = mock_task_store + mock_agent_executor = Mock(spec=A2aAgentExecutor) + mock_agent_executor_class.return_value = mock_agent_executor + mock_request_handler = Mock(spec=DefaultRequestHandler) + mock_request_handler_class.return_value = mock_request_handler + mock_card_builder = Mock(spec=AgentCardBuilder) + mock_card_builder_class.return_value = mock_card_builder + mock_agent_card = Mock(spec=AgentCard) + mock_card_builder.build = AsyncMock(return_value=mock_agent_card) + mock_a2a_app = Mock(spec=A2AStarletteApplication) + mock_a2a_app_class.return_value = mock_a2a_app + + call_order = [] + + original_add_routes = mock_a2a_app.add_routes_to_app + + def track_add_routes(*args, **kwargs): + call_order.append("setup_a2a") + return original_add_routes(*args, **kwargs) + + mock_a2a_app.add_routes_to_app = track_add_routes + + @asynccontextmanager + async def custom_lifespan(app): + call_order.append("user_startup") + yield + call_order.append("user_shutdown") + + # Act + app = to_a2a(self.mock_agent, lifespan=custom_lifespan) + + async with app.router.lifespan_context(app): + pass + + # Assert - A2A setup runs before user lifespan + assert call_order == [ + "setup_a2a", + "user_startup", + "user_shutdown", + ] From 4b677e73b939f5a13269abd9ba9fe65e4b78d7f6 Mon Sep 17 00:00:00 2001 From: George Weale Date: Fri, 20 Mar 2026 12:40:49 -0700 Subject: [PATCH 063/192] feat: Extract and merge EventActions from A2A metadata This change enables the conversion of ADK EventActions, serialized within A2A object metadata, back into ADK Event objects. It includes logic to parse JSON-encoded metadata values and to merge EventActions from multiple sources within an A2A Task Close #3968 Co-authored-by: George Weale PiperOrigin-RevId: 886927688 --- src/google/adk/a2a/converters/to_adk_event.py | 108 +++++++- tests/unittests/a2a/converters/test_to_adk.py | 233 +++++++++++++++++- 2 files changed, 332 insertions(+), 9 deletions(-) diff --git a/src/google/adk/a2a/converters/to_adk_event.py b/src/google/adk/a2a/converters/to_adk_event.py index 66d7768ec8..26ae95e1b4 100644 --- a/src/google/adk/a2a/converters/to_adk_event.py +++ b/src/google/adk/a2a/converters/to_adk_event.py @@ -15,6 +15,7 @@ from __future__ import annotations from collections.abc import Callable +import json import logging from typing import Any from typing import List @@ -28,9 +29,11 @@ from a2a.types import TaskState from a2a.types import TaskStatusUpdateEvent from google.genai import types as genai_types +from pydantic import ValidationError from ...agents.invocation_context import InvocationContext from ...events.event import Event +from ...events.event_actions import EventActions from ..experimental import a2a_experimental from .part_converter import A2A_DATA_PART_METADATA_IS_LONG_RUNNING_KEY from .part_converter import A2APartToGenAIPartConverter @@ -171,11 +174,15 @@ def _create_event( output_parts: List[genai_types.Part], invocation_context: Optional[InvocationContext], author: Optional[str], + actions: Optional[EventActions] = None, long_running_function_ids: Optional[set[str]] = None, partial: bool = False, ) -> Optional[Event]: """Creates an ADK event from parts and metadata.""" - if not output_parts: + event_actions = actions or EventActions() + if not output_parts and not event_actions.model_dump( + exclude_none=True, exclude_defaults=True + ): return None event = Event( @@ -186,12 +193,17 @@ def _create_event( ), author=author or "a2a agent", branch=invocation_context.branch if invocation_context else None, + actions=event_actions, long_running_tool_ids=( long_running_function_ids if long_running_function_ids else None ), - content=genai_types.Content( - role="model", - parts=output_parts, + content=( + genai_types.Content( + role="model", + parts=output_parts, + ) + if output_parts + else None ), partial=partial, ) @@ -199,6 +211,71 @@ def _create_event( return event +def _parse_adk_metadata_value(value: Any) -> Any: + """Parses ADK metadata values serialized through A2A.""" + if not isinstance(value, str): + return value + + try: + return json.loads(value) + except json.JSONDecodeError: + return value + + +def _extract_event_actions( + metadata: Optional[dict[str, Any]], +) -> EventActions: + """Extracts ADK event actions from A2A metadata.""" + if not metadata: + return EventActions() + + raw_actions = metadata.get(_get_adk_metadata_key("actions")) + if raw_actions is None: + return EventActions() + + parsed_actions = _parse_adk_metadata_value(raw_actions) + if not isinstance(parsed_actions, dict): + logger.warning( + "Ignoring invalid ADK actions metadata of type %s", + type(parsed_actions).__name__, + ) + return EventActions() + + try: + return EventActions.model_validate(parsed_actions) + except ValidationError as error: + logger.warning("Ignoring invalid ADK actions metadata: %s", error) + return EventActions() + + +def _merge_top_level_dicts( + base: dict[str, Any], new_values: dict[str, Any] +) -> dict[str, Any]: + """Merges dictionaries while preserving top-level overwrite semantics.""" + merged = dict(base) + for key, value in new_values.items(): + if ( + key in merged + and isinstance(merged[key], dict) + and isinstance(value, dict) + ): + merged[key] = {**merged[key], **value} + else: + merged[key] = value + return merged + + +def _merge_event_actions( + existing_actions: EventActions, new_actions: EventActions +) -> EventActions: + """Merges action metadata from multiple A2A sources.""" + merged_actions_data = _merge_top_level_dicts( + existing_actions.model_dump(exclude_none=True, by_alias=True), + new_actions.model_dump(exclude_none=True, by_alias=True), + ) + return EventActions.model_validate(merged_actions_data) + + @a2a_experimental def convert_a2a_task_to_event( a2a_task: Task, @@ -226,12 +303,17 @@ def convert_a2a_task_to_event( raise ValueError("A2A task cannot be None") try: + event_actions = EventActions() output_parts = [] long_running_function_ids = set() if a2a_task.artifacts: artifact_parts = [ part for artifact in a2a_task.artifacts for part in artifact.parts ] + for artifact in a2a_task.artifacts: + event_actions = _merge_event_actions( + event_actions, _extract_event_actions(artifact.metadata) + ) output_parts, _ = _convert_a2a_parts_to_adk_parts( artifact_parts, part_converter ) @@ -239,6 +321,10 @@ def convert_a2a_task_to_event( a2a_task.status.message and a2a_task.status.state == TaskState.input_required ): + event_actions = _merge_event_actions( + event_actions, + _extract_event_actions(a2a_task.status.message.metadata), + ) parts, ids = _convert_a2a_parts_to_adk_parts( a2a_task.status.message.parts, part_converter ) @@ -249,6 +335,7 @@ def convert_a2a_task_to_event( output_parts, invocation_context, author, + event_actions, long_running_function_ids, ) @@ -288,7 +375,12 @@ def convert_a2a_message_to_event( output_parts, _ = _convert_a2a_parts_to_adk_parts( a2a_message.parts, part_converter ) - return _create_event(output_parts, invocation_context, author) + return _create_event( + output_parts, + invocation_context, + author, + _extract_event_actions(a2a_message.metadata), + ) except Exception as e: logger.error("Failed to convert A2A message to event: %s", e) @@ -319,7 +411,11 @@ def convert_a2a_status_update_to_event( try: output_parts = [] long_running_function_ids = set() + event_actions = EventActions() if a2a_status_update.status.message: + event_actions = _extract_event_actions( + a2a_status_update.status.message.metadata + ) parts, ids = _convert_a2a_parts_to_adk_parts( a2a_status_update.status.message.parts, part_converter ) @@ -330,6 +426,7 @@ def convert_a2a_status_update_to_event( output_parts, invocation_context, author, + event_actions, long_running_function_ids, ) except Exception as e: @@ -367,6 +464,7 @@ def convert_a2a_artifact_update_to_event( output_parts, invocation_context, author, + _extract_event_actions(a2a_artifact_update.artifact.metadata), partial=not a2a_artifact_update.last_chunk, ) except Exception as e: diff --git a/tests/unittests/a2a/converters/test_to_adk.py b/tests/unittests/a2a/converters/test_to_adk.py index 9065195645..12eaf2a75a 100644 --- a/tests/unittests/a2a/converters/test_to_adk.py +++ b/tests/unittests/a2a/converters/test_to_adk.py @@ -48,7 +48,7 @@ def setup_method(self): def test_convert_a2a_message_to_event_success(self): """Test successful conversion of A2A message to Event.""" a2a_part = Mock(spec=A2APart) - a2a_part.root = Mock() + a2a_part.root = Mock(spec=TextPart) a2a_part.root.metadata = {} message = Message(message_id="msg-1", role="user", parts=[a2a_part]) @@ -73,10 +73,64 @@ def test_convert_a2a_message_to_event_none(self): with pytest.raises(ValueError, match="A2A message cannot be None"): convert_a2a_message_to_event(None) + def test_convert_a2a_message_to_event_restores_actions_from_metadata(self): + """Test A2A message conversion restores ADK actions metadata.""" + a2a_part = Mock(spec=A2APart) + a2a_part.root = Mock(spec=TextPart) + a2a_part.root.metadata = {} + message = Message( + message_id="msg-1", + role="user", + parts=[a2a_part], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"saved_key": "saved-value"} + } + }, + ) + + mock_genai_part = genai_types.Part.from_text(text="hello") + mock_part_converter = Mock(return_value=[mock_genai_part]) + + event = convert_a2a_message_to_event( + message, + author="test-author", + invocation_context=self.mock_context, + part_converter=mock_part_converter, + ) + + assert event.actions.state_delta == {"saved_key": "saved-value"} + assert event.content is not None + assert event.content.parts[0] == mock_genai_part + + def test_convert_a2a_message_to_event_returns_action_only_event(self): + """Test A2A message conversion returns action-only events.""" + message = Message( + message_id="msg-1", + role="user", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"saved_key": "saved-value"} + } + }, + ) + + event = convert_a2a_message_to_event( + message, + author="test-author", + invocation_context=self.mock_context, + part_converter=Mock(), + ) + + assert event is not None + assert event.actions.state_delta == {"saved_key": "saved-value"} + assert event.content is None + def test_convert_a2a_task_to_event_success(self): """Test successful conversion of A2A task to Event.""" a2a_part = Mock(spec=A2APart) - a2a_part.root = Mock() + a2a_part.root = Mock(spec=TextPart) a2a_part.root.metadata = {} task = Task( id="task-1", @@ -107,6 +161,177 @@ def test_convert_a2a_task_to_event_success(self): assert len(event.content.parts) == 1 assert event.content.parts[0] == mock_genai_part + def test_convert_a2a_task_to_event_returns_action_only_event(self): + """Test A2A task conversion returns action-only events.""" + task = Task( + id="task-1", + status=TaskStatus( + state=TaskState.submitted, timestamp="2024-01-01T00:00:00Z" + ), + context_id="context-1", + artifacts=[ + Artifact( + artifact_id="art-1", + artifact_type="message", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"saved_key": "saved-value"} + } + }, + ) + ], + ) + + event = convert_a2a_task_to_event( + task, + author="test-author", + invocation_context=self.mock_context, + part_converter=Mock(), + ) + + assert event is not None + assert event.actions.state_delta == {"saved_key": "saved-value"} + assert event.content is None + + def test_convert_a2a_task_to_event_merges_actions_across_artifacts(self): + """Test task conversion merges actions across artifact metadata.""" + task = Task( + id="task-1", + status=TaskStatus( + state=TaskState.submitted, timestamp="2024-01-01T00:00:00Z" + ), + context_id="context-1", + artifacts=[ + Artifact( + artifact_id="art-1", + artifact_type="message", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"first_key": "first-value"} + } + }, + ), + Artifact( + artifact_id="art-2", + artifact_type="message", + parts=[], + metadata={}, + ), + ], + ) + + event = convert_a2a_task_to_event( + task, + author="test-author", + invocation_context=self.mock_context, + part_converter=Mock(), + ) + + assert event is not None + assert event.actions.state_delta == {"first_key": "first-value"} + assert event.content is None + + def test_convert_a2a_task_to_event_overwrites_nested_state_delta_values(self): + """Test task conversion preserves top-level state overwrite semantics.""" + task = Task( + id="task-1", + status=TaskStatus( + state=TaskState.submitted, timestamp="2024-01-01T00:00:00Z" + ), + context_id="context-1", + artifacts=[ + Artifact( + artifact_id="art-1", + artifact_type="message", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": { + "settings": { + "theme": "light", + "language": "en", + } + } + } + }, + ), + Artifact( + artifact_id="art-2", + artifact_type="message", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"settings": {"theme": "dark"}} + } + }, + ), + ], + ) + + event = convert_a2a_task_to_event( + task, + author="test-author", + invocation_context=self.mock_context, + part_converter=Mock(), + ) + + assert event is not None + assert event.actions.state_delta == {"settings": {"theme": "dark"}} + assert event.content is None + + def test_convert_a2a_task_to_event_merges_status_and_artifact_actions(self): + """Test task conversion merges status and artifact actions.""" + a2a_part = Mock(spec=A2APart) + a2a_part.root = Mock(spec=TextPart) + a2a_part.root.metadata = {} + task = Task( + id="task-1", + status=TaskStatus( + state=TaskState.input_required, + timestamp="2024-01-01T00:00:00Z", + message=Message( + message_id="msg-1", + role="agent", + parts=[a2a_part], + metadata={ + _get_adk_metadata_key("actions"): { + "transferToAgent": "agent-2" + } + }, + ), + ), + context_id="context-1", + artifacts=[ + Artifact( + artifact_id="art-1", + artifact_type="message", + parts=[], + metadata={ + _get_adk_metadata_key("actions"): { + "stateDelta": {"saved_key": "saved-value"} + } + }, + ) + ], + ) + + mock_genai_part = genai_types.Part.from_text(text="need input") + + event = convert_a2a_task_to_event( + task, + author="test-author", + invocation_context=self.mock_context, + part_converter=Mock(return_value=[mock_genai_part]), + ) + + assert event is not None + assert event.actions.state_delta == {"saved_key": "saved-value"} + assert event.actions.transfer_to_agent == "agent-2" + assert event.content is not None + assert event.content.parts == [mock_genai_part] + def test_convert_a2a_task_to_event_none(self): """Test convert_a2a_task_to_event with None.""" with pytest.raises(ValueError, match="A2A task cannot be None"): @@ -115,7 +340,7 @@ def test_convert_a2a_task_to_event_none(self): def test_convert_a2a_status_update_to_event_success(self): """Test successful conversion of A2A status update to Event.""" a2a_part = Mock(spec=A2APart) - a2a_part.root = Mock() + a2a_part.root = Mock(spec=TextPart) a2a_part.root.metadata = { _get_adk_metadata_key(A2A_DATA_PART_METADATA_IS_LONG_RUNNING_KEY): True } @@ -161,7 +386,7 @@ def test_convert_a2a_status_update_to_event_none(self): def test_convert_a2a_artifact_update_to_event_success(self): """Test successful conversion of A2A artifact update to Event.""" a2a_part = Mock(spec=A2APart) - a2a_part.root = Mock() + a2a_part.root = Mock(spec=TextPart) a2a_part.root.metadata = {} update = TaskArtifactUpdateEvent( task_id="task-1", From 4cbc3dcb45b8803f28b1452531158d7d68ec8dc3 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Mon, 23 Mar 2026 08:43:15 -0700 Subject: [PATCH 064/192] test: add integration tests for ADK's A2A client-server interaction PiperOrigin-RevId: 888114589 --- tests/unittests/a2a/integration/__init__.py | 15 + tests/unittests/a2a/integration/client.py | 88 +++ tests/unittests/a2a/integration/server.py | 84 +++ .../a2a/integration/test_client_server.py | 577 ++++++++++++++++++ 4 files changed, 764 insertions(+) create mode 100644 tests/unittests/a2a/integration/__init__.py create mode 100644 tests/unittests/a2a/integration/client.py create mode 100644 tests/unittests/a2a/integration/server.py create mode 100644 tests/unittests/a2a/integration/test_client_server.py diff --git a/tests/unittests/a2a/integration/__init__.py b/tests/unittests/a2a/integration/__init__.py new file mode 100644 index 0000000000..f935b2c7f0 --- /dev/null +++ b/tests/unittests/a2a/integration/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A2A integration tests package.""" diff --git a/tests/unittests/a2a/integration/client.py b/tests/unittests/a2a/integration/client.py new file mode 100644 index 0000000000..11c34c35b9 --- /dev/null +++ b/tests/unittests/a2a/integration/client.py @@ -0,0 +1,88 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A2A Client for integration tests.""" + +from a2a.client.client import ClientConfig as A2AClientConfig +from a2a.client.client_factory import ClientFactory as A2AClientFactory +from a2a.extensions.common import HTTP_EXTENSION_HEADER +from a2a.types import TransportProtocol as A2ATransport +from google.adk.a2a.agent.interceptors.new_integration_extension import _NEW_A2A_ADK_INTEGRATION_EXTENSION +from google.adk.agents.remote_a2a_agent import RemoteA2aAgent +import httpx + +from .server import agent_card + + +def create_client(app, streaming: bool = False) -> RemoteA2aAgent: + """Creates a RemoteA2aAgent connected to the provided FastAPI app. + + Args: + app: The FastAPI application (server) to connect to. + streaming: Whether to enable streaming mode in the client. + + Returns: + A RemoteA2aAgent instance. + """ + + client = httpx.AsyncClient( + transport=httpx.ASGITransport(app=app), base_url="http://test" + ) + + client_config = A2AClientConfig( + httpx_client=client, + streaming=streaming, + polling=False, + supported_transports=[A2ATransport.jsonrpc], + ) + factory = A2AClientFactory(config=client_config) + + # use_legacy=False forces the new implementation + agent = RemoteA2aAgent( + name="remote_agent", + agent_card=agent_card, + a2a_client_factory=factory, + use_legacy=False, + ) + + return agent + + +def create_a2a_client(app, streaming: bool = False): + """Creates a bare A2A Client connected to the provided FastAPI app. + + This is in contrast to create_client, which wraps the a2a_client into a + RemoteA2aAgent for the standard runner framework ecosystem execution. + + Args: + app: The FastAPI application (server) to connect to. + streaming: Whether to enable streaming mode in the client. + + Returns: + An A2A Client instance. + """ + client = httpx.AsyncClient( + transport=httpx.ASGITransport(app=app), + base_url="http://test", + headers={HTTP_EXTENSION_HEADER: _NEW_A2A_ADK_INTEGRATION_EXTENSION}, + ) + + client_config = A2AClientConfig( + httpx_client=client, + streaming=streaming, + polling=False, + supported_transports=[A2ATransport.jsonrpc], + ) + factory = A2AClientFactory(config=client_config) + return factory.create(agent_card) diff --git a/tests/unittests/a2a/integration/server.py b/tests/unittests/a2a/integration/server.py new file mode 100644 index 0000000000..86a0e1d629 --- /dev/null +++ b/tests/unittests/a2a/integration/server.py @@ -0,0 +1,84 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A2A Server for integration tests.""" + +from unittest.mock import Mock + +from a2a.server.apps.jsonrpc.fastapi_app import A2AFastAPIApplication +from a2a.server.request_handlers.default_request_handler import DefaultRequestHandler +from a2a.server.tasks.inmemory_task_store import InMemoryTaskStore +from a2a.types import AgentCapabilities +from a2a.types import AgentCard +from a2a.types import AgentSkill +from google.adk.a2a.executor.a2a_agent_executor import A2aAgentExecutor +from google.adk.agents.base_agent import BaseAgent +from google.adk.runners import Runner +from google.adk.sessions.in_memory_session_service import InMemorySessionService + + +class FakeRunner(Runner): + """A Fake Runner that delegates run_async to a provided function.""" + + def __init__(self, run_async_fn): + agent = Mock(spec=BaseAgent) + agent.name = "FakeAgent" + + session_service = InMemorySessionService() + super().__init__( + app_name="FakeApp", + agent=agent, + session_service=session_service, + ) + self.run_async_fn = run_async_fn + + async def run_async(self, **kwargs): + async for event in self.run_async_fn(**kwargs): + yield event + + +agent_card = AgentCard( + name="remote_agent", + url="http://test", + description="A fun fact generator agent", + capabilities=AgentCapabilities( + streaming=True, + extensions=[{"uri": "https://a2a-adk/a2a-extension/new-integration"}], + ), + version="0.0.1", + default_input_modes=["text/plain"], + default_output_modes=["text/plain"], + skills=[], +) + + +def create_server_app(run_async_fn): + """Creates an A2A FastAPI application with a mocked runner. + + Args: + run_async_fn: A generator function that takes **kwargs and yields Event + objects. + + Returns: + A FastAPI application instance. + """ + runner = FakeRunner(run_async_fn) + executor = A2aAgentExecutor(runner=runner) + task_store = InMemoryTaskStore() + handler = DefaultRequestHandler( + agent_executor=executor, task_store=task_store + ) + + app = A2AFastAPIApplication(agent_card=agent_card, http_handler=handler) + return app.build() diff --git a/tests/unittests/a2a/integration/test_client_server.py b/tests/unittests/a2a/integration/test_client_server.py new file mode 100644 index 0000000000..3318efb84e --- /dev/null +++ b/tests/unittests/a2a/integration/test_client_server.py @@ -0,0 +1,577 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Integration tests for A2A client-server interaction.""" + +from a2a.types import Message as A2AMessage +from a2a.types import Part as A2APart +from a2a.types import Task +from a2a.types import TaskState +from a2a.types import TextPart +from google.adk.agents.remote_a2a_agent import A2A_METADATA_PREFIX +from google.adk.events.event import Event +from google.adk.platform import uuid as platform_uuid +from google.adk.runners import Runner +from google.adk.sessions.in_memory_session_service import InMemorySessionService +from google.genai import types +import pytest + +from .client import create_a2a_client +from .client import create_client +from .server import create_server_app + + +def create_streaming_mock_run_async(received_requests: list): + """Creates a mock_run_async that streams multiple chunks.""" + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + yield Event( + author="FakeAgent", + content=types.Content(parts=[types.Part(text="Hello")]), + partial=True, + ) + yield Event( + author="FakeAgent", + content=types.Content(parts=[types.Part(text=" world")]), + partial=True, + ) + yield Event( + author="FakeAgent", + content=types.Content(parts=[types.Part(text="Hello world")]), + partial=False, + ) + + return mock_run_async + + +def create_non_streaming_mock_run_async(received_requests: list): + """Creates a mock_run_async that returns a single non-streaming event.""" + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + yield Event( + author="FakeAgent", + content=types.Content(parts=[types.Part(text="Hello world")]), + partial=False, + ) + + return mock_run_async + + +@pytest.mark.asyncio +async def test_streaming_adk_to_streaming_a2a(): + """Test streaming of normal text chunks.""" + received_requests = [] + mock_run_async = create_streaming_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=True) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", + agent=agent, + session_service=session_service, + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + texts = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + + assert len(received_requests) == 1 + assert received_requests[0]["session_id"] is not None + + assert texts == ["Hello", " world", "Hello world"] + + +@pytest.mark.asyncio +async def test_streaming_adk_to_non_streaming_a2a(): + """Test ADK streaming into A2A Non-Streaming.""" + received_requests = [] + mock_run_async = create_streaming_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=False) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", agent=agent, session_service=session_service + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + texts = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + + assert len(received_requests) == 1 + assert texts == ["Hello world"] + + +@pytest.mark.asyncio +async def test_non_streaming_adk_to_streaming_a2a(): + """Test ADK Non-Streaming into A2A Streaming.""" + received_requests = [] + mock_run_async = create_non_streaming_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=True) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", agent=agent, session_service=session_service + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + texts = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + + assert len(received_requests) == 1 + assert texts == ["Hello world"] + + +@pytest.mark.asyncio +async def test_non_streaming_adk_to_non_streaming_a2a(): + """Test ADK Non-Streaming into A2A Non-Streaming.""" + received_requests = [] + mock_run_async = create_non_streaming_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=False) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", agent=agent, session_service=session_service + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + texts = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + + assert len(received_requests) == 1 + assert texts == ["Hello world"] + + +def create_streaming_mock_run_async_with_multiple_agents( + received_requests: list, +): + """Creates a mock_run_async that streams multiple chunks.""" + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + yield Event( + author="FakeAgent1", + content=types.Content(parts=[types.Part(text="Hello")]), + partial=True, + ) + yield Event( + author="FakeAgent2", + content=types.Content(parts=[types.Part(text=" Hi")]), + partial=True, + ) + yield Event( + author="FakeAgent1", + content=types.Content(parts=[types.Part(text=" world")]), + partial=True, + ) + yield Event( + author="FakeAgent2", + content=types.Content(parts=[types.Part(text=" human")]), + partial=True, + ) + yield Event( + author="FakeAgent1", + content=types.Content(parts=[types.Part(text="Hello world")]), + partial=False, + ) + yield Event( + author="FakeAgent2", + content=types.Content(parts=[types.Part(text="Hi human")]), + partial=False, + ) + + return mock_run_async + + +@pytest.mark.asyncio +async def test_multiple_agents_streaming_adk_to_streaming_a2a(): + """Test streaming multiple agents chunks into A2A Streaming.""" + received_requests = [] + mock_run_async = create_streaming_mock_run_async_with_multiple_agents( + received_requests + ) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=True) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", agent=agent, session_service=session_service + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + texts = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + + assert len(received_requests) == 1 + assert texts == [ + "Hello", + " Hi", + " world", + " human", + "Hello world", + "Hi human", + ] + + +@pytest.mark.asyncio +async def test_function_calls(): + """Test function call execution from agent.""" + received_requests = [] + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + yield Event( + author="FakeAgent", + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="get_weather", + args={"location": "San Francisco"}, + id="call_1", + ) + ), + types.Part( + function_response=types.FunctionResponse( + name="get_weather", + response={"temperature": "22C"}, + id="call_1", + ) + ), + ], + role="model", + ), + ) + + app = create_server_app(mock_run_async) + agent = create_client(app) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", + agent=agent, + session_service=session_service, + ) + + new_message = types.Content(parts=[types.Part(text="Hi")], role="user") + + func_calls = [] + func_responses = [] + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message + ): + func_calls.extend(event.get_function_calls()) + if event.content and event.content.parts: + for p in event.content.parts: + if p.function_response: + func_responses.append(p.function_response) + + assert len(func_calls) == 1 + assert func_calls[0].name == "get_weather" + assert func_calls[0].args == {"location": "San Francisco"} + + assert len(func_responses) == 1 + assert func_responses[0].name == "get_weather" + assert func_responses[0].response == {"temperature": "22C"} + + +def create_long_running_mock_run_async(received_requests: list): + """Creates a mock_run_async for long running function tests.""" + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + if len(received_requests) == 1: + yield Event( + author="FakeAgent", + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="long_task", args={}, id="call_long" + ) + ) + ], + role="model", + ), + long_running_tool_ids={"call_long"}, + ) + yield Event( + author="FakeAgent", + content=types.Content( + parts=[ + types.Part( + function_response=types.FunctionResponse( + name="long_task", + response={"status": "pending"}, + id="call_long", + ) + ) + ], + role="model", + ), + ) + else: + yield Event( + author="FakeAgent", + content=types.Content( + parts=[types.Part(text="Task completed well")], role="model" + ), + ) + + return mock_run_async + + +@pytest.mark.asyncio +async def test_long_running_function_calls_success(): + """Test long running function calls flow success with user response.""" + received_requests = [] + mock_run_async = create_long_running_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + agent = create_client(app, streaming=True) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", + agent=agent, + session_service=session_service, + ) + + new_message_1 = types.Content(parts=[types.Part(text="Hi")], role="user") + + func_calls_1 = [] + func_responses_1 = [] + task_id_1 = "" + has_long_running_id = False + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message_1 + ): + if event.custom_metadata: + task_id_1 = event.custom_metadata.get( + A2A_METADATA_PREFIX + "task_id", task_id_1 + ) + if ( + event.long_running_tool_ids + and "call_long" in event.long_running_tool_ids + ): + has_long_running_id = True + + func_calls_1.extend(event.get_function_calls()) + if event.content and event.content.parts: + for p in event.content.parts: + if p.function_response: + func_responses_1.append(p.function_response) + + assert has_long_running_id + assert len(func_calls_1) == 1 + assert func_calls_1[0].name == "long_task" + + assert len(func_responses_1) == 1 + assert func_responses_1[0].name == "long_task" + assert func_responses_1[0].response == {"status": "pending"} + + new_message_2 = types.Content( + parts=[ + types.Part( + function_response=types.FunctionResponse( + name="long_task", response={"result": "done"}, id="call_long" + ) + ) + ], + role="user", + ) + + texts = [] + task_id_2 = "" + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message_2 + ): + if event.custom_metadata: + task_id_2 = event.custom_metadata.get( + A2A_METADATA_PREFIX + "task_id", task_id_2 + ) + if event.content and event.content.parts: + for p in event.content.parts: + if p.text: + texts.append(p.text) + + assert task_id_1 == task_id_2 + assert "Task completed well" in texts + + +@pytest.mark.asyncio +async def test_long_running_function_calls_error(): + """Test long running function calls returns error on missing response.""" + received_requests = [] + mock_run_async = create_long_running_mock_run_async(received_requests) + + app = create_server_app(mock_run_async) + a2a_client = create_a2a_client(app, streaming=False) + + request_1 = A2AMessage( + message_id=platform_uuid.new_uuid(), + parts=[A2APart(root=TextPart(text="Hi"))], + role="user", + ) + response_1_events = [] + async for event in a2a_client.send_message(request=request_1): + response_1_events.append(event) + + assert len(response_1_events) == 1 + # Extract task_id from Turn 1 responses + assert response_1_events[0][1] is None + task = response_1_events[0][0] + assert isinstance(task, Task) + assert task.status.state == TaskState.input_required + extracted_task_id = task.id + assert extracted_task_id is not None + + request_2 = A2AMessage( + message_id=platform_uuid.new_uuid(), + parts=[A2APart(root=TextPart(text="Any update?"))], + role="user", + task_id=extracted_task_id, + context_id=task.context_id if hasattr(task, "context_id") else None, + ) + response_2_events = [] + async for event in a2a_client.send_message(request=request_2): + response_2_events.append(event) + + # Verify that we get an error response for the second request due to missing function response + assert len(response_2_events) == 1 + assert response_2_events[0][1] is None + error_response = response_2_events[0][0] + assert isinstance(error_response, Task) + assert error_response.status.message.parts[0].root.text == ( + "It was not provided a function response for the function call." + ) + + +@pytest.mark.asyncio +async def test_user_follow_up(): + """Test multi-turn interaction or follow up with state.""" + received_requests = [] + + async def mock_run_async(**kwargs): + received_requests.append(kwargs) + # Yield response with custom metadata to test passing back + yield Event( + author="FakeAgent", + content=types.Content( + parts=[types.Part(text="Follow up response")], role="model" + ), + custom_metadata={"server_state": "active"}, + ) + + app = create_server_app(mock_run_async) + agent = create_client(app) + + session_service = InMemorySessionService() + await session_service.create_session( + app_name="ClientApp", user_id="test_user", session_id="test_session" + ) + client_runner = Runner( + app_name="ClientApp", + agent=agent, + session_service=session_service, + ) + + # First Turn + new_message_1 = types.Content(parts=[types.Part(text="Turn 1")], role="user") + async for _ in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message_1 + ): + pass + + # Second Turn + new_message_2 = types.Content(parts=[types.Part(text="Turn 2")], role="user") + last_event = None + async for event in client_runner.run_async( + user_id="test_user", session_id="test_session", new_message=new_message_2 + ): + last_event = event + + assert len(received_requests) == 2 + # The second request should carry the same session ID as the first + assert ( + received_requests[1]["session_id"] == received_requests[0]["session_id"] + ) + + assert last_event is not None From 0f351bffa988c24c1250c8f81f20a44e044f28a3 Mon Sep 17 00:00:00 2001 From: George Weale Date: Mon, 23 Mar 2026 10:21:27 -0700 Subject: [PATCH 065/192] chore: Change log message The log message when instantiating DatabaseSessionService is updated from "Falling back to..." to "Using..." for clarity. Close #4890 Co-authored-by: George Weale PiperOrigin-RevId: 888160397 --- src/google/adk/cli/utils/service_factory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/google/adk/cli/utils/service_factory.py b/src/google/adk/cli/utils/service_factory.py index 8098555dfa..f0ffcbe9eb 100644 --- a/src/google/adk/cli/utils/service_factory.py +++ b/src/google/adk/cli/utils/service_factory.py @@ -202,7 +202,7 @@ def create_session_service_from_options( fallback_kwargs = dict(kwargs) fallback_kwargs.pop("agents_dir", None) logger.info( - "Falling back to DatabaseSessionService for URI: %s", + "Using DatabaseSessionService for URI: %s", _redact_uri_for_log(session_service_uri), ) return DatabaseSessionService(db_url=session_service_uri, **fallback_kwargs) From 995cd1cb68e30fd7935ed1d1c8f9fa44007f25d2 Mon Sep 17 00:00:00 2001 From: George Weale Date: Mon, 23 Mar 2026 14:57:57 -0700 Subject: [PATCH 066/192] fix: add protection for arbitrary module imports Close #4947 Co-authored-by: George Weale PiperOrigin-RevId: 888296476 --- src/google/adk/cli/adk_web_server.py | 180 +++++++++++++++++- .../cli/test_adk_web_server_run_live.py | 73 +++++++ tests/unittests/cli/test_fast_api.py | 42 +++- 3 files changed, 292 insertions(+), 3 deletions(-) diff --git a/src/google/adk/cli/adk_web_server.py b/src/google/adk/cli/adk_web_server.py index afedb7387a..927cd7ad03 100644 --- a/src/google/adk/cli/adk_web_server.py +++ b/src/google/adk/cli/adk_web_server.py @@ -20,6 +20,7 @@ import json import logging import os +import re import sys import time import traceback @@ -138,6 +139,158 @@ def _parse_cors_origins( return literal_origins, combined_regex +def _is_origin_allowed( + origin: str, + allowed_literal_origins: list[str], + allowed_origin_regex: Optional[re.Pattern[str]], +) -> bool: + """Check whether the given origin matches the allowed origins.""" + if "*" in allowed_literal_origins: + return True + if origin in allowed_literal_origins: + return True + if allowed_origin_regex is not None: + return allowed_origin_regex.fullmatch(origin) is not None + return False + + +def _normalize_origin_scheme(scheme: str) -> str: + """Normalize request schemes to the browser Origin scheme space.""" + if scheme == "ws": + return "http" + if scheme == "wss": + return "https" + return scheme + + +def _strip_optional_quotes(value: str) -> str: + """Strip a single pair of wrapping quotes from a header value.""" + if len(value) >= 2 and value[0] == '"' and value[-1] == '"': + return value[1:-1] + return value + + +def _get_scope_header( + scope: dict[str, Any], header_name: bytes +) -> Optional[str]: + """Return the first matching header value from an ASGI scope.""" + for candidate_name, candidate_value in scope.get("headers", []): + if candidate_name == header_name: + return candidate_value.decode("latin-1").split(",", 1)[0].strip() + return None + + +def _get_request_origin(scope: dict[str, Any]) -> Optional[str]: + """Compute the effective origin for the current HTTP/WebSocket request.""" + forwarded = _get_scope_header(scope, b"forwarded") + if forwarded is not None: + proto = None + host = None + for element in forwarded.split(",", 1)[0].split(";"): + if "=" not in element: + continue + name, value = element.split("=", 1) + if name.strip().lower() == "proto": + proto = _strip_optional_quotes(value.strip()) + elif name.strip().lower() == "host": + host = _strip_optional_quotes(value.strip()) + if proto is not None and host is not None: + return f"{_normalize_origin_scheme(proto)}://{host}" + + host = _get_scope_header(scope, b"x-forwarded-host") + if host is None: + host = _get_scope_header(scope, b"host") + if host is None: + return None + + proto = _get_scope_header(scope, b"x-forwarded-proto") + if proto is None: + proto = scope.get("scheme", "http") + return f"{_normalize_origin_scheme(proto)}://{host}" + + +def _is_request_origin_allowed( + origin: str, + scope: dict[str, Any], + allowed_literal_origins: list[str], + allowed_origin_regex: Optional[re.Pattern[str]], + has_configured_allowed_origins: bool, +) -> bool: + """Validate an Origin header against explicit config or same-origin.""" + if has_configured_allowed_origins and _is_origin_allowed( + origin, allowed_literal_origins, allowed_origin_regex + ): + return True + + request_origin = _get_request_origin(scope) + if request_origin is None: + return False + return origin == request_origin + + +_SAFE_HTTP_METHODS = frozenset({"GET", "HEAD", "OPTIONS"}) + + +class _OriginCheckMiddleware: + """ASGI middleware that blocks cross-origin state-changing requests.""" + + def __init__( + self, + app: Any, + has_configured_allowed_origins: bool, + allowed_origins: list[str], + allowed_origin_regex: Optional[re.Pattern[str]], + ) -> None: + self._app = app + self._has_configured_allowed_origins = has_configured_allowed_origins + self._allowed_origins = allowed_origins + self._allowed_origin_regex = allowed_origin_regex + + async def __call__( + self, + scope: dict[str, Any], + receive: Any, + send: Any, + ) -> None: + if scope["type"] != "http": + await self._app(scope, receive, send) + return + + method = scope.get("method", "GET") + if method in _SAFE_HTTP_METHODS: + await self._app(scope, receive, send) + return + + origin = _get_scope_header(scope, b"origin") + if origin is None: + await self._app(scope, receive, send) + return + + if _is_request_origin_allowed( + origin, + scope, + self._allowed_origins, + self._allowed_origin_regex, + self._has_configured_allowed_origins, + ): + await self._app(scope, receive, send) + return + + response_body = b"Forbidden: origin not allowed" + await send({ + "type": "http.response.start", + "status": 403, + "headers": [ + (b"content-type", b"text/plain"), + (b"content-length", str(len(response_body)).encode()), + ], + }) + await send({ + "type": "http.response.body", + "body": response_body, + }) + + class ApiServerSpanExporter(export_lib.SpanExporter): def __init__(self, trace_dict): @@ -757,8 +910,12 @@ async def internal_lifespan(app: FastAPI): # Run the FastAPI server. app = FastAPI(lifespan=internal_lifespan) + has_configured_allowed_origins = bool(allow_origins) if allow_origins: literal_origins, combined_regex = _parse_cors_origins(allow_origins) + compiled_origin_regex = ( + re.compile(combined_regex) if combined_regex is not None else None + ) app.add_middleware( CORSMiddleware, allow_origins=literal_origins, @@ -767,6 +924,16 @@ async def internal_lifespan(app: FastAPI): allow_methods=["*"], allow_headers=["*"], ) + else: + literal_origins = [] + compiled_origin_regex = None + + app.add_middleware( + _OriginCheckMiddleware, + has_configured_allowed_origins=has_configured_allowed_origins, + allowed_origins=literal_origins, + allowed_origin_regex=compiled_origin_regex, + ) @app.get("/health") async def health() -> dict[str, str]: @@ -1802,14 +1969,23 @@ async def run_agent_live( enable_affective_dialog: bool | None = Query(default=None), enable_session_resumption: bool | None = Query(default=None), ) -> None: + ws_origin = websocket.headers.get("origin") + if ws_origin is not None and not _is_request_origin_allowed( + ws_origin, + websocket.scope, + literal_origins, + compiled_origin_regex, + has_configured_allowed_origins, + ): + await websocket.close(code=1008, reason="Origin not allowed") + return + await websocket.accept() session = await self.session_service.get_session( app_name=app_name, user_id=user_id, session_id=session_id ) if not session: - # Accept first so that the client is aware of connection establishment, - # then close with a specific code. await websocket.close(code=1002, reason="Session not found") return diff --git a/tests/unittests/cli/test_adk_web_server_run_live.py b/tests/unittests/cli/test_adk_web_server_run_live.py index 1c3c42593c..012af92d56 100644 --- a/tests/unittests/cli/test_adk_web_server_run_live.py +++ b/tests/unittests/cli/test_adk_web_server_run_live.py @@ -22,6 +22,7 @@ from google.adk.events.event import Event from google.adk.sessions.in_memory_session_service import InMemorySessionService import pytest +from starlette.websockets import WebSocketDisconnect class _DummyAgent(BaseAgent): @@ -203,3 +204,75 @@ async def _get_runner_async(_self, _app_name: str): run_config.session_resumption.transparent is expected_session_resumption_transparent ) + + +_WS_BASE_URL = ( + "/run_live" + "?app_name=test_app" + "&user_id=user" + "&session_id=session" + "&modalities=AUDIO" +) + + +def _build_ws_client(): + """Build a TestClient wired to a capturing runner.""" + session_service = InMemorySessionService() + asyncio.run( + session_service.create_session( + app_name="test_app", + user_id="user", + session_id="session", + state={}, + ) + ) + + runner = _CapturingRunner() + adk_web_server = AdkWebServer( + agent_loader=_DummyAgentLoader(), + session_service=session_service, + memory_service=types.SimpleNamespace(), + artifact_service=types.SimpleNamespace(), + credential_service=types.SimpleNamespace(), + eval_sets_manager=types.SimpleNamespace(), + eval_set_results_manager=types.SimpleNamespace(), + agents_dir=".", + ) + + async def _get_runner_async(_self, _app_name: str): + return runner + + adk_web_server.get_runner_async = _get_runner_async.__get__(adk_web_server) # pytype: disable=attribute-error + + fast_api_app = adk_web_server.get_fast_api_app( + setup_observer=lambda _observer, _server: None, + tear_down_observer=lambda _observer, _server: None, + ) + return TestClient(fast_api_app) + + +def test_run_live_rejects_disallowed_origin(): + client = _build_ws_client() + with pytest.raises(WebSocketDisconnect) as exc_info: + with client.websocket_connect( + _WS_BASE_URL, + headers={"origin": "https://evil.com"}, + ) as ws: + ws.receive_text() + assert exc_info.value.code == 1008 + + +def test_run_live_allows_matching_origin(): + client = _build_ws_client() + with client.websocket_connect( + _WS_BASE_URL, + headers={"origin": "http://testserver"}, + ) as ws: + _ = ws.receive_text() + + +def test_run_live_allows_no_origin_header(): + """Non-browser clients (curl, wscat, SDKs) send no Origin header.""" + client = _build_ws_client() + with client.websocket_connect(_WS_BASE_URL) as ws: + _ = ws.receive_text() diff --git a/tests/unittests/cli/test_fast_api.py b/tests/unittests/cli/test_fast_api.py index 0ea28e6683..13b5a670e9 100755 --- a/tests/unittests/cli/test_fast_api.py +++ b/tests/unittests/cli/test_fast_api.py @@ -593,7 +593,7 @@ def builder_test_client( session_service_uri="", artifact_service_uri="", memory_service_uri="", - allow_origins=["*"], + allow_origins=None, a2a=False, host="127.0.0.1", port=8000, @@ -1595,6 +1595,46 @@ def test_builder_final_save_preserves_tools_and_cleans_tmp( assert not tmp_dir.exists() or not any(tmp_dir.iterdir()) +def test_builder_save_rejects_cross_origin_post(builder_test_client, tmp_path): + response = builder_test_client.post( + "/builder/save?tmp=true", + headers={"origin": "https://evil.com"}, + files=[( + "files", + ("app/root_agent.yaml", b"name: app\n", "application/x-yaml"), + )], + ) + + assert response.status_code == 403 + assert response.text == "Forbidden: origin not allowed" + assert not (tmp_path / "app" / "tmp" / "app").exists() + + +def test_builder_save_allows_same_origin_post(builder_test_client, tmp_path): + response = builder_test_client.post( + "/builder/save?tmp=true", + headers={"origin": "http://testserver"}, + files=[( + "files", + ("app/root_agent.yaml", b"name: app\n", "application/x-yaml"), + )], + ) + + assert response.status_code == 200 + assert response.json() is True + assert (tmp_path / "app" / "tmp" / "app" / "root_agent.yaml").is_file() + + +def test_builder_get_allows_cross_origin_get(builder_test_client): + response = builder_test_client.get( + "/builder/app/missing?tmp=true", + headers={"origin": "https://evil.com"}, + ) + + assert response.status_code == 200 + assert response.text == "" + + def test_builder_cancel_deletes_tmp_idempotent(builder_test_client, tmp_path): tmp_agent_root = tmp_path / "app" / "tmp" / "app" tmp_agent_root.mkdir(parents=True, exist_ok=True) From b3fcd8a21fe64063cdd8d07121ee4da3adb44c30 Mon Sep 17 00:00:00 2001 From: Divyansh Shukla Date: Mon, 23 Mar 2026 15:37:55 -0700 Subject: [PATCH 067/192] feat: Add ability to run individual unit tests to unittests.sh PiperOrigin-RevId: 888314229 --- scripts/unittests.sh | 57 ++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/scripts/unittests.sh b/scripts/unittests.sh index ebacf24e45..eb9805f698 100755 --- a/scripts/unittests.sh +++ b/scripts/unittests.sh @@ -16,7 +16,7 @@ # Runs all unit tests for adk codebase. Sets up test environment according to # CONTRIBUTING.md. -# Usage: ./unittests.sh [--version ] +# Usage: ./unittests.sh [--version ] [pytest_args] set -euo pipefail @@ -27,25 +27,33 @@ cd .. # Argument Parsing ALL_VERSIONS=("3.10" "3.11" "3.12" "3.13" "3.14") versions_to_run=() +PYTEST_ARGS=() + +while [[ $# -gt 0 ]]; do + case "$1" in + --version) + if [[ -z "${2:-}" ]]; then + echo "Error: Missing version for --version flag." >&2 + echo "Usage: $0 [--version ] [pytest_args]" >&2 + exit 1 + fi + # Validate version + if ! [[ " ${ALL_VERSIONS[*]} " =~ " $2 " ]]; then + echo "Error: Invalid version '$2'. Supported versions: ${ALL_VERSIONS[*]}" >&2 + exit 1 + fi + versions_to_run=("$2") + shift 2 + ;; + *) + PYTEST_ARGS+=("$1") + shift + ;; + esac +done -if [[ $# -eq 0 ]]; then +if [[ ${#versions_to_run[@]} -eq 0 ]]; then versions_to_run=("${ALL_VERSIONS[@]}") -elif [[ "$1" == "--version" ]]; then - if [[ -z "${2:-}" ]]; then - echo "Error: Missing version for --version flag." >&2 - echo "Usage: $0 --version " >&2 - exit 1 - fi - # Validate version - if ! [[ " ${ALL_VERSIONS[*]} " =~ " $2 " ]]; then - echo "Error: Invalid version '$2'. Supported versions: ${ALL_VERSIONS[*]}" >&2 - exit 1 - fi - versions_to_run=("$2") -else - echo "Error: Unknown argument '$1'." >&2 - echo "Usage: $0 [--version ]" >&2 - exit 1 fi @@ -104,10 +112,19 @@ for version in "${versions_to_run[@]}"; do echo "Setting up test environment in $VENV_DIR..." uv sync --extra test --active --frozen + # Determine if PYTEST_ARGS contains explicit test targets (e.g. file, dir, or node ID) + HAS_TEST_TARGET=false + for arg in "${PYTEST_ARGS[@]:-}"; do + [[ "$arg" == *.py || -d "$arg" || "$arg" == *::* ]] && HAS_TEST_TARGET=true && break + done + echo "Running unit tests..." TEST_EXIT_CODE=0 - pytest ./tests/unittests || TEST_EXIT_CODE=$? - + if [[ "$HAS_TEST_TARGET" == true ]]; then + pytest "${PYTEST_ARGS[@]}" || TEST_EXIT_CODE=$? + else + pytest ./tests/unittests "${PYTEST_ARGS[@]:-}" || TEST_EXIT_CODE=$? + fi # 4. report the unit tests status as is if [[ $TEST_EXIT_CODE -ne 0 ]]; then echo "" From 30b904e596b0bcea8498a9b47d669585a6c481d3 Mon Sep 17 00:00:00 2001 From: Gautier Masse Date: Tue, 24 Mar 2026 10:10:05 -0700 Subject: [PATCH 068/192] fix(tools): support regional Discovery Engine endpoints Merge https://github.com/google/adk-python/pull/4720 Close https://github.com/google/adk-python/issues/4697 Co-authored-by: Xuan Yang COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4720 from kaligautier:fix/global-and-regional-region ed0b18d1e47010643d9ac5d6bd48ad88c922fda3 PiperOrigin-RevId: 888728543 --- .../adk/tools/discovery_engine_search_tool.py | 89 ++++++++- .../test_discovery_engine_search_tool.py | 187 ++++++++++++++++++ 2 files changed, 269 insertions(+), 7 deletions(-) diff --git a/src/google/adk/tools/discovery_engine_search_tool.py b/src/google/adk/tools/discovery_engine_search_tool.py index 542bc2f2dc..54603e6a83 100644 --- a/src/google/adk/tools/discovery_engine_search_tool.py +++ b/src/google/adk/tools/discovery_engine_search_tool.py @@ -36,6 +36,75 @@ r'search_result_mode.*DOCUMENTS', re.IGNORECASE ) +_DEFAULT_ENDPOINT = 'discoveryengine.googleapis.com' +_GLOBAL_LOCATION = 'global' +_LOCATION_PATTERN = re.compile( + r'/locations/([a-z0-9-]+)(?:/|$)', flags=re.IGNORECASE +) +_VALID_LOCATION_PATTERN = re.compile(r'^[a-z0-9-]+$') + + +def _normalize_location(location: str, location_type: str) -> str: + """Normalizes and validates a location value.""" + normalized_location = location.strip().lower() + if not normalized_location: + raise ValueError(f'{location_type} must not be empty if specified.') + if not _VALID_LOCATION_PATTERN.fullmatch(normalized_location): + raise ValueError( + f'{location_type} must contain only letters, digits, and hyphens.' + ) + return normalized_location + + +def _extract_resource_location(resource_id: str) -> Optional[str]: + """Extracts and validates location from a resource id.""" + if '/locations/' not in resource_id.lower(): + return None + + location_match = _LOCATION_PATTERN.search(resource_id) + if not location_match: + raise ValueError('Invalid location in data_store_id or search_engine_id.') + return _normalize_location(location_match.group(1), 'resource location') + + +def _resolve_location(resource_id: str, location: Optional[str]) -> str: + """Resolves the Discovery Engine location to use for the endpoint.""" + inferred_location = _extract_resource_location(resource_id) + + if location is not None: + normalized_location = _normalize_location(location, 'location') + if inferred_location and normalized_location != inferred_location: + raise ValueError( + 'location must match the location in data_store_id or ' + 'search_engine_id.' + ) + return normalized_location + + if inferred_location: + return inferred_location + return _GLOBAL_LOCATION + + +def _build_client_options( + resource_id: str, + quota_project_id: Optional[str], + location: Optional[str], +) -> Optional[client_options.ClientOptions]: + """Builds client options for Discovery Engine requests.""" + client_options_kwargs = {} + resolved_location = _resolve_location(resource_id, location) + + if resolved_location != _GLOBAL_LOCATION: + client_options_kwargs['api_endpoint'] = ( + f'{resolved_location}-{_DEFAULT_ENDPOINT}' + ) + if quota_project_id: + client_options_kwargs['quota_project_id'] = quota_project_id + + if not client_options_kwargs: + return None + return client_options.ClientOptions(**client_options_kwargs) + class SearchResultMode(enum.Enum): """Search result mode for discovery engine search.""" @@ -61,6 +130,7 @@ def __init__( max_results: Optional[int] = None, *, search_result_mode: Optional[SearchResultMode] = None, + location: Optional[str] = None, ): """Initializes the DiscoveryEngineSearchTool. @@ -75,9 +145,12 @@ def __init__( filter: The filter to be applied to the search request. Default is None. max_results: The maximum number of results to return. Default is None. search_result_mode: The search result mode. When None (default), - automatically detects the correct mode by trying CHUNKS first - and falling back to DOCUMENTS if the datastore requires it. - Set explicitly to CHUNKS or DOCUMENTS to skip auto-detection. + automatically detects the correct mode by trying CHUNKS first and + falling back to DOCUMENTS if the datastore requires it. Set explicitly + to CHUNKS or DOCUMENTS to skip auto-detection. + location: Optional endpoint location override. + Examples: "global", "us", "eu". If not specified, location is inferred + from `data_store_id` or `search_engine_id` and defaults to "global". """ super().__init__(self.discovery_engine_search) if (data_store_id is None and search_engine_id is None) or ( @@ -99,13 +172,15 @@ def __init__( self._filter = filter self._max_results = max_results self._search_result_mode = search_result_mode + self._location = location credentials, _ = google.auth.default() quota_project_id = getattr(credentials, 'quota_project_id', None) - options = ( - client_options.ClientOptions(quota_project_id=quota_project_id) - if quota_project_id - else None + resource_id = data_store_id or search_engine_id or '' + options = _build_client_options( + resource_id=resource_id, + quota_project_id=quota_project_id, + location=location, ) self._discovery_engine_client = discoveryengine.SearchServiceClient( credentials=credentials, client_options=options diff --git a/tests/unittests/tools/test_discovery_engine_search_tool.py b/tests/unittests/tools/test_discovery_engine_search_tool.py index e5a17e7f9d..a744be7c39 100644 --- a/tests/unittests/tools/test_discovery_engine_search_tool.py +++ b/tests/unittests/tools/test_discovery_engine_search_tool.py @@ -80,6 +80,193 @@ def test_init_with_data_store_specs_without_search_engine_id_raises_error( data_store_id="test_data_store", data_store_specs=[{"id": "123"}] ) + @pytest.mark.parametrize( + ("tool_kwargs", "expected_endpoint"), + [ + ( + { + "data_store_id": ( + "projects/test/locations/eu/collections/default_collection/" + "dataStores/test_data_store" + ) + }, + "eu-discoveryengine.googleapis.com", + ), + ( + { + "search_engine_id": ( + "projects/test/locations/us/collections/default_collection/" + "engines/test_search_engine" + ) + }, + "us-discoveryengine.googleapis.com", + ), + ( + { + "data_store_id": ( + "projects/test/locations/europe-west1/collections/" + "default_collection/dataStores/test_data_store" + ) + }, + "europe-west1-discoveryengine.googleapis.com", + ), + ], + ) + @mock.patch.object(discovery_engine_search_tool, "client_options") + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_regional_location_uses_regional_endpoint( + self, + mock_search_client, + mock_client_options, + tool_kwargs, + expected_endpoint, + ): + """Test initialization uses the expected regional API endpoint.""" + DiscoveryEngineSearchTool(**tool_kwargs) + + mock_client_options.ClientOptions.assert_called_once_with( + api_endpoint=expected_endpoint + ) + mock_search_client.assert_called_once_with( + credentials="credentials", + client_options=mock_client_options.ClientOptions.return_value, + ) + + @mock.patch.object(discovery_engine_search_tool, "client_options") + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_explicit_location_override_uses_input_location( + self, mock_search_client, mock_client_options + ): + """Test initialization uses explicit location when resource has none.""" + DiscoveryEngineSearchTool( + data_store_id="test_data_store", + location="eu", + ) + + mock_client_options.ClientOptions.assert_called_once_with( + api_endpoint="eu-discoveryengine.googleapis.com" + ) + mock_search_client.assert_called_once_with( + credentials="credentials", + client_options=mock_client_options.ClientOptions.return_value, + ) + + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_mismatched_location_raises_error(self, mock_search_client): + """Test initialization rejects mismatched location overrides.""" + with pytest.raises( + ValueError, + match=( + "location must match the location in data_store_id or " + "search_engine_id." + ), + ): + DiscoveryEngineSearchTool( + data_store_id=( + "projects/test/locations/us/collections/default_collection/" + "dataStores/test_data_store" + ), + location="eu", + ) + + mock_search_client.assert_not_called() + + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_empty_location_raises_error(self, mock_search_client): + """Test initialization rejects an empty location override.""" + with pytest.raises( + ValueError, match="location must not be empty if specified." + ): + DiscoveryEngineSearchTool( + data_store_id=( + "projects/test/locations/us/collections/default_collection/" + "dataStores/test_data_store" + ), + location=" ", + ) + + mock_search_client.assert_not_called() + + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_invalid_override_location_raises_error( + self, mock_search_client + ): + """Test initialization rejects invalid override location characters.""" + with pytest.raises( + ValueError, + match="location must contain only letters, digits, and hyphens.", + ): + DiscoveryEngineSearchTool( + data_store_id="test_data_store", + location="attacker.com#", + ) + + mock_search_client.assert_not_called() + + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_invalid_resource_location_raises_error( + self, mock_search_client + ): + """Test initialization rejects invalid resource location characters.""" + with pytest.raises( + ValueError, + match="Invalid location in data_store_id or search_engine_id.", + ): + DiscoveryEngineSearchTool( + data_store_id=( + "projects/test/locations/attacker.com#/collections/" + "default_collection/dataStores/test_data_store" + ) + ) + + mock_search_client.assert_not_called() + + @mock.patch.object(discovery_engine_search_tool, "client_options") + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_global_location_keeps_default_endpoint( + self, mock_search_client, mock_client_options + ): + """Test initialization keeps default API endpoint for global location.""" + DiscoveryEngineSearchTool( + data_store_id=( + "projects/test/locations/global/collections/default_collection/" + "dataStores/test_data_store" + ) + ) + + mock_client_options.ClientOptions.assert_not_called() + mock_search_client.assert_called_once_with( + credentials="credentials", client_options=None + ) + + @mock.patch.object(discovery_engine_search_tool, "client_options") + @mock.patch.object(discoveryengine, "SearchServiceClient") + def test_init_with_regional_location_and_quota_project_id( + self, mock_search_client, mock_client_options + ): + """Test initialization uses endpoint and quota project id together.""" + mock_credentials = mock.MagicMock() + mock_credentials.quota_project_id = "test-quota-project" + + with mock.patch.object( + auth, "default", return_value=(mock_credentials, "project") + ): + DiscoveryEngineSearchTool( + data_store_id=( + "projects/test/locations/eu/collections/default_collection/" + "dataStores/test_data_store" + ) + ) + + mock_client_options.ClientOptions.assert_called_once_with( + api_endpoint="eu-discoveryengine.googleapis.com", + quota_project_id="test-quota-project", + ) + mock_search_client.assert_called_once_with( + credentials=mock_credentials, + client_options=mock_client_options.ClientOptions.return_value, + ) + @mock.patch.object(discovery_engine_search_tool, "client_options") @mock.patch.object( discoveryengine, From 77f1c41be61eed017b008d7ab311923e30b46643 Mon Sep 17 00:00:00 2001 From: George Weale Date: Tue, 24 Mar 2026 13:10:08 -0700 Subject: [PATCH 069/192] fix: Exclude compromised LiteLLM versions from dependencies pin to 1.82.6 Versions 1.82.7 and 1.82.8 of LiteLLM were affected by a supply chain attack and are now explicitly excluded from the dependency constraints for both project and dev dependencies. Co-authored-by: George Weale PiperOrigin-RevId: 888818704 --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a39d831ce8..ac841bed64 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -126,7 +126,7 @@ test = [ "kubernetes>=29.0.0", # For GkeCodeExecutor "langchain-community>=0.3.17", "langgraph>=0.2.60, <0.4.8", # For LangGraphAgent - "litellm>=1.75.5, <2.0.0", # For LiteLLM tests + "litellm>=1.75.5, <=1.82.6", # For LiteLLM tests. Upper bound pinned: versions 1.82.7+ compromised in supply chain attack. "llama-index-readers-file>=0.4.0", # For retrieval tests "openai>=1.100.2", # For LiteLLM "opentelemetry-instrumentation-google-genai>=0.3b0, <1.0.0", @@ -160,7 +160,7 @@ extensions = [ "kubernetes>=29.0.0", # For GkeCodeExecutor "k8s-agent-sandbox>=0.1.1.post3", # For GkeCodeExecutor sandbox mode "langgraph>=0.2.60, <0.4.8", # For LangGraphAgent - "litellm>=1.75.5, <2.0.0", # For LiteLlm class. Currently has OpenAI limitations. TODO: once LiteLlm fix it + "litellm>=1.75.5, <=1.82.6", # For LiteLlm class. Upper bound pinned: versions 1.82.7+ compromised in supply chain attack. "llama-index-readers-file>=0.4.0", # For retrieval using LlamaIndex. "llama-index-embeddings-google-genai>=0.3.0", # For files retrieval using LlamaIndex. "lxml>=5.3.0", # For load_web_page tool. From 6c24ccc9ec7d0f942e1dd436a823f48ae1a0c695 Mon Sep 17 00:00:00 2001 From: Sasha Sobran Date: Tue, 24 Mar 2026 14:16:10 -0700 Subject: [PATCH 070/192] fix: gate builder endpoints behind web flag Co-authored-by: Sasha Sobran PiperOrigin-RevId: 888850792 --- src/google/adk/cli/fast_api.py | 443 ++++++++++++++------------- tests/unittests/cli/test_fast_api.py | 116 ++++++- 2 files changed, 343 insertions(+), 216 deletions(-) diff --git a/src/google/adk/cli/fast_api.py b/src/google/adk/cli/fast_api.py index 8f78c15f9b..4d666f78d3 100644 --- a/src/google/adk/cli/fast_api.py +++ b/src/google/adk/cli/fast_api.py @@ -266,150 +266,192 @@ def tear_down_observer(observer: Observer, _: AdkWebServer): **extra_fast_api_args, ) - agents_base_path = (Path.cwd() / agents_dir).resolve() - - def _get_app_root(app_name: str) -> Path: - if app_name in ("", ".", ".."): - raise ValueError(f"Invalid app name: {app_name!r}") - if Path(app_name).name != app_name or "\\" in app_name: - raise ValueError(f"Invalid app name: {app_name!r}") - app_root = (agents_base_path / app_name).resolve() - if not app_root.is_relative_to(agents_base_path): - raise ValueError(f"Invalid app name: {app_name!r}") - return app_root - - def _normalize_relative_path(path: str) -> str: - return path.replace("\\", "/").lstrip("/") - - def _has_parent_reference(path: str) -> bool: - return any(part == ".." for part in path.split("/")) - - def _parse_upload_filename(filename: Optional[str]) -> tuple[str, str]: - if not filename: - raise ValueError("Upload filename is missing.") - filename = _normalize_relative_path(filename) - if "/" not in filename: - raise ValueError(f"Invalid upload filename: {filename!r}") - app_name, rel_path = filename.split("/", 1) - if not app_name or not rel_path: - raise ValueError(f"Invalid upload filename: {filename!r}") - if rel_path.startswith("/"): - raise ValueError(f"Absolute upload path rejected: {filename!r}") - if _has_parent_reference(rel_path): - raise ValueError(f"Path traversal rejected: {filename!r}") - return app_name, rel_path - - def _parse_file_path(file_path: str) -> str: - file_path = _normalize_relative_path(file_path) - if not file_path: - raise ValueError("file_path is missing.") - if file_path.startswith("/"): - raise ValueError(f"Absolute file_path rejected: {file_path!r}") - if _has_parent_reference(file_path): - raise ValueError(f"Path traversal rejected: {file_path!r}") - return file_path - - def _resolve_under_dir(root_dir: Path, rel_path: str) -> Path: - file_path = root_dir / rel_path - resolved_root_dir = root_dir.resolve() - resolved_file_path = file_path.resolve() - if not resolved_file_path.is_relative_to(resolved_root_dir): - raise ValueError(f"Path escapes root_dir: {rel_path!r}") - return file_path - - def _get_tmp_agent_root(app_root: Path, app_name: str) -> Path: - tmp_agent_root = app_root / "tmp" / app_name - resolved_tmp_agent_root = tmp_agent_root.resolve() - if not resolved_tmp_agent_root.is_relative_to(app_root): - raise ValueError(f"Invalid tmp path for app: {app_name!r}") - return tmp_agent_root - - def copy_dir_contents(source_dir: Path, dest_dir: Path) -> None: - dest_dir.mkdir(parents=True, exist_ok=True) - for source_path in source_dir.iterdir(): - if source_path.name == "tmp": - continue - - dest_path = dest_dir / source_path.name - if source_path.is_dir(): - if dest_path.exists() and dest_path.is_file(): - dest_path.unlink() - shutil.copytree(source_path, dest_path, dirs_exist_ok=True) - elif source_path.is_file(): - if dest_path.exists() and dest_path.is_dir(): - shutil.rmtree(dest_path) - shutil.copy2(source_path, dest_path) - - def cleanup_tmp(app_name: str) -> bool: - try: - app_root = _get_app_root(app_name) - except ValueError as exc: - logger.exception("Error in cleanup_tmp: %s", exc) - return False - - try: - tmp_agent_root = _get_tmp_agent_root(app_root, app_name) - except ValueError as exc: - logger.exception("Error in cleanup_tmp: %s", exc) - return False - - try: - shutil.rmtree(tmp_agent_root) - except FileNotFoundError: - pass - except OSError as exc: - logger.exception("Error deleting tmp agent root: %s", exc) - return False - - tmp_dir = app_root / "tmp" - resolved_tmp_dir = tmp_dir.resolve() - if not resolved_tmp_dir.is_relative_to(app_root): - logger.error( - "Refusing to delete tmp outside app_root: %s", resolved_tmp_dir - ) - return False + # --- Builder endpoints (agent editor UI) --- + # Only register when the web UI is enabled. In headless / production + # deployments (e.g. `adk deploy cloud_run`) these endpoints are unnecessary + # and expose an attack surface that allows arbitrary file writes under the + # agents directory. + # See https://github.com/google/adk-python/issues/4947 + if web: + agents_base_path = (Path.cwd() / agents_dir).resolve() + + def _get_app_root(app_name: str) -> Path: + if app_name in ("", ".", ".."): + raise ValueError(f"Invalid app name: {app_name!r}") + if Path(app_name).name != app_name or "\\" in app_name: + raise ValueError(f"Invalid app name: {app_name!r}") + app_root = (agents_base_path / app_name).resolve() + if not app_root.is_relative_to(agents_base_path): + raise ValueError(f"Invalid app name: {app_name!r}") + return app_root + + def _normalize_relative_path(path: str) -> str: + return path.replace("\\", "/").lstrip("/") + + def _has_parent_reference(path: str) -> bool: + return any(part == ".." for part in path.split("/")) + + _ALLOWED_UPLOAD_EXTENSIONS = frozenset({".yaml", ".yml"}) + + def _parse_upload_filename(filename: Optional[str]) -> tuple[str, str]: + if not filename: + raise ValueError("Upload filename is missing.") + filename = _normalize_relative_path(filename) + if "/" not in filename: + raise ValueError(f"Invalid upload filename: {filename!r}") + app_name, rel_path = filename.split("/", 1) + if not app_name or not rel_path: + raise ValueError(f"Invalid upload filename: {filename!r}") + if rel_path.startswith("/"): + raise ValueError(f"Absolute upload path rejected: {filename!r}") + if _has_parent_reference(rel_path): + raise ValueError(f"Path traversal rejected: {filename!r}") + ext = os.path.splitext(rel_path)[1].lower() + if ext not in _ALLOWED_UPLOAD_EXTENSIONS: + raise ValueError( + f"File type not allowed: {rel_path!r}" + f" (allowed: {', '.join(sorted(_ALLOWED_UPLOAD_EXTENSIONS))})" + ) + return app_name, rel_path + + def _parse_file_path(file_path: str) -> str: + file_path = _normalize_relative_path(file_path) + if not file_path: + raise ValueError("file_path is missing.") + if file_path.startswith("/"): + raise ValueError(f"Absolute file_path rejected: {file_path!r}") + if _has_parent_reference(file_path): + raise ValueError(f"Path traversal rejected: {file_path!r}") + return file_path + + def _resolve_under_dir(root_dir: Path, rel_path: str) -> Path: + file_path = root_dir / rel_path + resolved_root_dir = root_dir.resolve() + resolved_file_path = file_path.resolve() + if not resolved_file_path.is_relative_to(resolved_root_dir): + raise ValueError(f"Path escapes root_dir: {rel_path!r}") + return file_path + + def _get_tmp_agent_root(app_root: Path, app_name: str) -> Path: + tmp_agent_root = app_root / "tmp" / app_name + resolved_tmp_agent_root = tmp_agent_root.resolve() + if not resolved_tmp_agent_root.is_relative_to(app_root): + raise ValueError(f"Invalid tmp path for app: {app_name!r}") + return tmp_agent_root + + def copy_dir_contents(source_dir: Path, dest_dir: Path) -> None: + dest_dir.mkdir(parents=True, exist_ok=True) + for source_path in source_dir.iterdir(): + if source_path.name == "tmp": + continue - try: - tmp_dir.rmdir() - except OSError: - pass + dest_path = dest_dir / source_path.name + if source_path.is_dir(): + if dest_path.exists() and dest_path.is_file(): + dest_path.unlink() + shutil.copytree(source_path, dest_path, dirs_exist_ok=True) + elif source_path.is_file(): + if dest_path.exists() and dest_path.is_dir(): + shutil.rmtree(dest_path) + shutil.copy2(source_path, dest_path) + + def cleanup_tmp(app_name: str) -> bool: + try: + app_root = _get_app_root(app_name) + except ValueError as exc: + logger.exception("Error in cleanup_tmp: %s", exc) + return False - return True + try: + tmp_agent_root = _get_tmp_agent_root(app_root, app_name) + except ValueError as exc: + logger.exception("Error in cleanup_tmp: %s", exc) + return False - def ensure_tmp_exists(app_name: str) -> bool: - try: - app_root = _get_app_root(app_name) - except ValueError as exc: - logger.exception("Error in ensure_tmp_exists: %s", exc) - return False + try: + shutil.rmtree(tmp_agent_root) + except FileNotFoundError: + pass + except OSError as exc: + logger.exception("Error deleting tmp agent root: %s", exc) + return False - if not app_root.is_dir(): - return False + tmp_dir = app_root / "tmp" + resolved_tmp_dir = tmp_dir.resolve() + if not resolved_tmp_dir.is_relative_to(app_root): + logger.error( + "Refusing to delete tmp outside app_root: %s", resolved_tmp_dir + ) + return False - try: - tmp_agent_root = _get_tmp_agent_root(app_root, app_name) - except ValueError as exc: - logger.exception("Error in ensure_tmp_exists: %s", exc) - return False + try: + tmp_dir.rmdir() + except OSError: + pass - if tmp_agent_root.exists(): return True - try: - tmp_agent_root.mkdir(parents=True, exist_ok=True) - copy_dir_contents(app_root, tmp_agent_root) - except OSError as exc: - logger.exception("Error in ensure_tmp_exists: %s", exc) - return False + def ensure_tmp_exists(app_name: str) -> bool: + try: + app_root = _get_app_root(app_name) + except ValueError as exc: + logger.exception("Error in ensure_tmp_exists: %s", exc) + return False - return True + if not app_root.is_dir(): + return False + + try: + tmp_agent_root = _get_tmp_agent_root(app_root, app_name) + except ValueError as exc: + logger.exception("Error in ensure_tmp_exists: %s", exc) + return False + + if tmp_agent_root.exists(): + return True + + try: + tmp_agent_root.mkdir(parents=True, exist_ok=True) + copy_dir_contents(app_root, tmp_agent_root) + except OSError as exc: + logger.exception("Error in ensure_tmp_exists: %s", exc) + return False + + return True + + @app.post("/builder/save", response_model_exclude_none=True) + async def builder_build( + files: list[UploadFile], tmp: Optional[bool] = False + ) -> bool: + try: + if tmp: + app_names = set() + uploads = [] + for file in files: + app_name, rel_path = _parse_upload_filename(file.filename) + app_names.add(app_name) + uploads.append((rel_path, file)) + + if len(app_names) != 1: + logger.error( + "Exactly one app name is required, found: %s", + sorted(app_names), + ) + return False + + app_name = next(iter(app_names)) + app_root = _get_app_root(app_name) + tmp_agent_root = _get_tmp_agent_root(app_root, app_name) + tmp_agent_root.mkdir(parents=True, exist_ok=True) + + for rel_path, file in uploads: + destination_path = _resolve_under_dir(tmp_agent_root, rel_path) + destination_path.parent.mkdir(parents=True, exist_ok=True) + with destination_path.open("wb") as buffer: + shutil.copyfileobj(file.file, buffer) + + return True - @app.post("/builder/save", response_model_exclude_none=True) - async def builder_build( - files: list[UploadFile], tmp: Optional[bool] = False - ) -> bool: - try: - if tmp: app_names = set() uploads = [] for file in files: @@ -419,108 +461,85 @@ async def builder_build( if len(app_names) != 1: logger.error( - "Exactly one app name is required, found: %s", sorted(app_names) + "Exactly one app name is required, found: %s", + sorted(app_names), ) return False app_name = next(iter(app_names)) app_root = _get_app_root(app_name) + app_root.mkdir(parents=True, exist_ok=True) + tmp_agent_root = _get_tmp_agent_root(app_root, app_name) - tmp_agent_root.mkdir(parents=True, exist_ok=True) + if tmp_agent_root.is_dir(): + copy_dir_contents(tmp_agent_root, app_root) for rel_path, file in uploads: - destination_path = _resolve_under_dir(tmp_agent_root, rel_path) + destination_path = _resolve_under_dir(app_root, rel_path) destination_path.parent.mkdir(parents=True, exist_ok=True) with destination_path.open("wb") as buffer: shutil.copyfileobj(file.file, buffer) - return True - - app_names = set() - uploads = [] - for file in files: - app_name, rel_path = _parse_upload_filename(file.filename) - app_names.add(app_name) - uploads.append((rel_path, file)) - - if len(app_names) != 1: - logger.error( - "Exactly one app name is required, found: %s", sorted(app_names) - ) + return cleanup_tmp(app_name) + except ValueError as exc: + logger.exception("Error in builder_build: %s", exc) + return False + except OSError as exc: + logger.exception("Error in builder_build: %s", exc) return False - app_name = next(iter(app_names)) - app_root = _get_app_root(app_name) - app_root.mkdir(parents=True, exist_ok=True) + @app.post( + "/builder/app/{app_name}/cancel", response_model_exclude_none=True + ) + async def builder_cancel(app_name: str) -> bool: + return cleanup_tmp(app_name) - tmp_agent_root = _get_tmp_agent_root(app_root, app_name) - if tmp_agent_root.is_dir(): - copy_dir_contents(tmp_agent_root, app_root) + @app.get( + "/builder/app/{app_name}", + response_model_exclude_none=True, + response_class=PlainTextResponse, + ) + async def get_agent_builder( + app_name: str, + file_path: Optional[str] = None, + tmp: Optional[bool] = False, + ): + try: + app_root = _get_app_root(app_name) + except ValueError as exc: + logger.exception("Error in get_agent_builder: %s", exc) + return "" - for rel_path, file in uploads: - destination_path = _resolve_under_dir(app_root, rel_path) - destination_path.parent.mkdir(parents=True, exist_ok=True) - with destination_path.open("wb") as buffer: - shutil.copyfileobj(file.file, buffer) + agent_dir = app_root + if tmp: + if not ensure_tmp_exists(app_name): + return "" + agent_dir = app_root / "tmp" / app_name - return cleanup_tmp(app_name) - except ValueError as exc: - logger.exception("Error in builder_build: %s", exc) - return False - except OSError as exc: - logger.exception("Error in builder_build: %s", exc) - return False - - @app.post("/builder/app/{app_name}/cancel", response_model_exclude_none=True) - async def builder_cancel(app_name: str) -> bool: - return cleanup_tmp(app_name) - - @app.get( - "/builder/app/{app_name}", - response_model_exclude_none=True, - response_class=PlainTextResponse, - ) - async def get_agent_builder( - app_name: str, - file_path: Optional[str] = None, - tmp: Optional[bool] = False, - ): - try: - app_root = _get_app_root(app_name) - except ValueError as exc: - logger.exception("Error in get_agent_builder: %s", exc) - return "" - - agent_dir = app_root - if tmp: - if not ensure_tmp_exists(app_name): - return "" - agent_dir = app_root / "tmp" / app_name + if not file_path: + rel_path = "root_agent.yaml" + else: + try: + rel_path = _parse_file_path(file_path) + except ValueError as exc: + logger.exception("Error in get_agent_builder: %s", exc) + return "" - if not file_path: - rel_path = "root_agent.yaml" - else: try: - rel_path = _parse_file_path(file_path) + agent_file_path = _resolve_under_dir(agent_dir, rel_path) except ValueError as exc: logger.exception("Error in get_agent_builder: %s", exc) return "" - try: - agent_file_path = _resolve_under_dir(agent_dir, rel_path) - except ValueError as exc: - logger.exception("Error in get_agent_builder: %s", exc) - return "" - - if not agent_file_path.is_file(): - return "" + if not agent_file_path.is_file(): + return "" - return FileResponse( - path=agent_file_path, - media_type="application/x-yaml", - filename=file_path or f"{app_name}.yaml", - headers={"Cache-Control": "no-store"}, - ) + return FileResponse( + path=agent_file_path, + media_type="application/x-yaml", + filename=file_path or f"{app_name}.yaml", + headers={"Cache-Control": "no-store"}, + ) if a2a: from a2a.server.apps import A2AStarletteApplication diff --git a/tests/unittests/cli/test_fast_api.py b/tests/unittests/cli/test_fast_api.py index 13b5a670e9..e53d5a918c 100755 --- a/tests/unittests/cli/test_fast_api.py +++ b/tests/unittests/cli/test_fast_api.py @@ -1560,16 +1560,18 @@ def test_patch_memory(test_app, create_test_session, mock_memory_service): logger.info("Add session to memory test completed successfully") -def test_builder_final_save_preserves_tools_and_cleans_tmp( +def test_builder_final_save_preserves_files_and_cleans_tmp( builder_test_client, tmp_path ): files = [ - ("files", ("app/__init__.py", b"from . import agent\n", "text/plain")), - ("files", ("app/tools.py", b"def tool():\n return 1\n", "text/plain")), ( "files", ("app/root_agent.yaml", b"name: app\n", "application/x-yaml"), ), + ( + "files", + ("app/sub_agent.yaml", b"name: sub\n", "application/x-yaml"), + ), ] response = builder_test_client.post("/builder/save?tmp=true", files=files) assert response.status_code == 200 @@ -1589,7 +1591,7 @@ def test_builder_final_save_preserves_tools_and_cleans_tmp( assert response.status_code == 200 assert response.json() is True - assert (tmp_path / "app" / "tools.py").is_file() + assert (tmp_path / "app" / "sub_agent.yaml").is_file() assert not (tmp_path / "app" / "tmp" / "app").exists() tmp_dir = tmp_path / "app" / "tmp" assert not tmp_dir.exists() or not any(tmp_dir.iterdir()) @@ -1698,6 +1700,112 @@ def test_builder_save_rejects_traversal(builder_test_client, tmp_path): assert not (tmp_path / "app" / "tmp" / "escape.yaml").exists() +def test_builder_save_rejects_py_files(builder_test_client, tmp_path): + """Uploading .py files via /builder/save is rejected.""" + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + ("app/agent.py", b"import os\nos.system('id')\n", "text/plain"), + )], + ) + assert response.status_code == 200 + assert response.json() is False + assert not (tmp_path / "app" / "tmp" / "app" / "agent.py").exists() + + +def test_builder_save_rejects_non_yaml_extensions( + builder_test_client, tmp_path +): + """Uploading non-YAML files (.json, .txt, .sh, etc.) is rejected.""" + for ext, content in [ + (".py", b"print('hi')"), + (".json", b"{}"), + (".txt", b"hello"), + (".sh", b"#!/bin/bash"), + (".pth", b"import os"), + ]: + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + (f"app/file{ext}", content, "application/octet-stream"), + )], + ) + assert response.status_code == 200, f"Expected 200 for {ext}" + assert response.json() is False, f"Expected False for {ext}" + + +def test_builder_save_allows_yaml_files(builder_test_client, tmp_path): + """Uploading .yaml and .yml files is allowed.""" + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + ("app/root_agent.yaml", b"name: app\n", "application/x-yaml"), + )], + ) + assert response.status_code == 200 + assert response.json() is True + + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + ("app/sub_agent.yml", b"name: sub\n", "application/x-yaml"), + )], + ) + assert response.status_code == 200 + assert response.json() is True + + +def test_builder_endpoints_not_registered_without_web( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + mock_eval_sets_manager, + mock_eval_set_results_manager, +): + """Builder endpoints must not be registered when web=False (e.g. deploy).""" + client = _create_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + mock_eval_sets_manager, + mock_eval_set_results_manager, + web=False, + ) + # /builder/save should return 404/405, not 200 + response = client.post( + "/builder/save", + files=[ + ("files", ("app/agent.yaml", b"name: test\n", "application/x-yaml")) + ], + ) + assert response.status_code in (404, 405) + + # /builder/app/{name}/cancel should also be absent + response = client.post("/builder/app/app/cancel") + assert response.status_code in (404, 405) + + # /builder/app/{name} GET should also be absent + response = client.get("/builder/app/app") + assert response.status_code in (404, 405) + + +def test_builder_endpoints_registered_with_web(builder_test_client): + """Builder endpoints are available when web=True.""" + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[ + ("files", ("app/agent.yaml", b"name: test\n", "application/x-yaml")) + ], + ) + assert response.status_code == 200 + + def test_agent_run_resume_without_message_success( test_app, create_test_session ): From 3153e6d74f401f39e363a36f6fa0664f245013db Mon Sep 17 00:00:00 2001 From: George Weale Date: Tue, 24 Mar 2026 15:10:36 -0700 Subject: [PATCH 071/192] feat: Add index to events table and update dependencies Introduces a new index `idx_events_app_user_session_ts` on the `events` table in both V0 and V1 database schemas. This index covers `app_name`, `user_id`, `session_id`, and `timestamp` (descending) to improve query performance. Modifies `DatabaseSessionService` to automatically create any missing indexes defined in the SQLAlchemy metadata when preparing the database tables. Close #4827 Co-authored-by: George Weale PiperOrigin-RevId: 888877174 --- .../adk/sessions/database_session_service.py | 23 +++++- src/google/adk/sessions/schemas/v0.py | 9 +++ src/google/adk/sessions/schemas/v1.py | 9 +++ .../migration/test_database_schema.py | 81 +++++++++++++++++++ 4 files changed, 120 insertions(+), 2 deletions(-) diff --git a/src/google/adk/sessions/database_session_service.py b/src/google/adk/sessions/database_session_service.py index 1aeb464b7f..ac759b564d 100644 --- a/src/google/adk/sessions/database_session_service.py +++ b/src/google/adk/sessions/database_session_service.py @@ -21,13 +21,16 @@ import logging from typing import Any from typing import AsyncIterator +from typing import Optional from typing import TypeAlias from typing import TypeVar from google.adk.platform import time as platform_time from sqlalchemy import delete from sqlalchemy import event +from sqlalchemy import MetaData from sqlalchemy import select +from sqlalchemy.engine import Connection from sqlalchemy.engine import make_url from sqlalchemy.exc import ArgumentError from sqlalchemy.ext.asyncio import async_sessionmaker @@ -106,6 +109,22 @@ def _set_sqlite_pragma(dbapi_connection, connection_record): cursor.close() +def _ensure_schema_indexes_exist( + connection: Connection, metadata: MetaData +) -> None: + """Ensures indexes declared in metadata exist for existing tables.""" + logger.debug("Ensuring schema indexes exist for metadata tables.") + for table in metadata.sorted_tables: + for index in sorted(table.indexes, key=lambda item: item.name or ""): + index.create(bind=connection, checkfirst=True) + + +def _setup_database_schema(connection: Connection, metadata: MetaData) -> None: + """Ensures tables and indexes declared in metadata exist.""" + metadata.create_all(bind=connection) + _ensure_schema_indexes_exist(connection, metadata) + + def _merge_state( app_state: dict[str, Any], user_state: dict[str, Any], @@ -301,11 +320,11 @@ async def _prepare_tables(self): # Uncomment to recreate DB every time # await conn.run_sync(BaseV1.metadata.drop_all) logger.debug("Using V1 schema tables...") - await conn.run_sync(BaseV1.metadata.create_all) + await conn.run_sync(_setup_database_schema, BaseV1.metadata) else: # await conn.run_sync(BaseV0.metadata.drop_all) logger.debug("Using V0 schema tables...") - await conn.run_sync(BaseV0.metadata.create_all) + await conn.run_sync(_setup_database_schema, BaseV0.metadata) if self._db_schema_version == _schema_check_utils.LATEST_SCHEMA_VERSION: async with self._rollback_on_exception_session() as sql_session: diff --git a/src/google/adk/sessions/schemas/v0.py b/src/google/adk/sessions/schemas/v0.py index 3113c4c441..7679a56e5b 100644 --- a/src/google/adk/sessions/schemas/v0.py +++ b/src/google/adk/sessions/schemas/v0.py @@ -36,8 +36,10 @@ from google.adk.platform import uuid as platform_uuid from google.genai import types from sqlalchemy import Boolean +from sqlalchemy import desc from sqlalchemy import ForeignKeyConstraint from sqlalchemy import func +from sqlalchemy import Index from sqlalchemy import inspect from sqlalchemy import Text from sqlalchemy.dialects import mysql @@ -256,6 +258,13 @@ class StorageEvent(Base): ["sessions.app_name", "sessions.user_id", "sessions.id"], ondelete="CASCADE", ), + Index( + "idx_events_app_user_session_ts", + "app_name", + "user_id", + "session_id", + desc("timestamp"), + ), ) @property diff --git a/src/google/adk/sessions/schemas/v1.py b/src/google/adk/sessions/schemas/v1.py index 3b2c550935..12d8ee9061 100644 --- a/src/google/adk/sessions/schemas/v1.py +++ b/src/google/adk/sessions/schemas/v1.py @@ -28,8 +28,10 @@ from typing import Any from google.adk.platform import uuid as platform_uuid +from sqlalchemy import desc from sqlalchemy import ForeignKeyConstraint from sqlalchemy import func +from sqlalchemy import Index from sqlalchemy import inspect from sqlalchemy.ext.mutable import MutableDict from sqlalchemy.orm import DeclarativeBase @@ -196,6 +198,13 @@ class StorageEvent(Base): ["sessions.app_name", "sessions.user_id", "sessions.id"], ondelete="CASCADE", ), + Index( + "idx_events_app_user_session_ts", + "app_name", + "user_id", + "session_id", + desc("timestamp"), + ), ) @classmethod diff --git a/tests/unittests/sessions/migration/test_database_schema.py b/tests/unittests/sessions/migration/test_database_schema.py index ceb5420b14..5381742097 100644 --- a/tests/unittests/sessions/migration/test_database_schema.py +++ b/tests/unittests/sessions/migration/test_database_schema.py @@ -72,6 +72,16 @@ def get_schema_version(sync_conn): event_col_names = {c['name'] for c in event_cols} assert 'event_data' in event_col_names assert 'actions' not in event_col_names + + event_indexes = await conn.run_sync( + lambda sync_conn: inspect(sync_conn).get_indexes('events') + ) + assert any( + index['name'] == 'idx_events_app_user_session_ts' + and index['column_names'] + == ['app_name', 'user_id', 'session_id', 'timestamp'] + for index in event_indexes + ) await engine.dispose() @@ -168,3 +178,74 @@ async def test_existing_latest_db_uses_latest_schema(tmp_path): assert 'event_data' in event_col_names assert 'actions' not in event_col_names await engine.dispose() + + +@pytest.mark.asyncio +async def test_prepare_tables_recreates_missing_latest_events_index(tmp_path): + db_path = tmp_path / 'missing_latest_index.db' + db_url = f'sqlite+aiosqlite:///{db_path}' + + async with DatabaseSessionService(db_url) as session_service: + await session_service.create_session( + app_name='my_app', user_id='test_user', session_id='s1' + ) + + engine = create_async_engine(db_url) + async with engine.begin() as conn: + await conn.execute(text('DROP INDEX idx_events_app_user_session_ts')) + await engine.dispose() + + async with DatabaseSessionService(db_url) as session_service: + session = await session_service.get_session( + app_name='my_app', user_id='test_user', session_id='s1' + ) + assert session.id == 's1' + + engine = create_async_engine(db_url) + async with engine.connect() as conn: + event_indexes = await conn.run_sync( + lambda sync_conn: inspect(sync_conn).get_indexes('events') + ) + await engine.dispose() + + assert any( + index['name'] == 'idx_events_app_user_session_ts' + and index['column_names'] + == ['app_name', 'user_id', 'session_id', 'timestamp'] + for index in event_indexes + ) + + +@pytest.mark.asyncio +async def test_prepare_tables_recreates_missing_v0_events_index(tmp_path): + db_path = tmp_path / 'missing_v0_index.db' + await create_v0_db(db_path) + db_url = f'sqlite+aiosqlite:///{db_path}' + + engine = create_async_engine(db_url) + async with engine.begin() as conn: + await conn.execute(text('DROP INDEX idx_events_app_user_session_ts')) + await engine.dispose() + + async with DatabaseSessionService(db_url) as session_service: + await session_service.create_session( + app_name='my_app', user_id='test_user', session_id='s1' + ) + session = await session_service.get_session( + app_name='my_app', user_id='test_user', session_id='s1' + ) + assert session.id == 's1' + + engine = create_async_engine(db_url) + async with engine.connect() as conn: + event_indexes = await conn.run_sync( + lambda sync_conn: inspect(sync_conn).get_indexes('events') + ) + await engine.dispose() + + assert any( + index['name'] == 'idx_events_app_user_session_ts' + and index['column_names'] + == ['app_name', 'user_id', 'session_id', 'timestamp'] + for index in event_indexes + ) From c5d809e10eeaadfcbd12874d0976b5259f327adf Mon Sep 17 00:00:00 2001 From: GAUTAM V DATLA <85986314+gautamvarmadatla@users.noreply.github.com> Date: Tue, 24 Mar 2026 16:14:11 -0700 Subject: [PATCH 072/192] fix: populate `required` for Pydantic `BaseModel` parameters in `FunctionTool` Merge https://github.com/google/adk-python/pull/4778 Closes: #4777 Co-authored-by: Xuan Yang COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4778 from gautamvarmadatla:fix/pydantic-basemodel-required-fields 45db622e594885d310d5191a733638476d13964e PiperOrigin-RevId: 888905953 --- .../tools/_function_parameter_parse_util.py | 9 +++ .../tools/test_build_function_declaration.py | 59 +++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/src/google/adk/tools/_function_parameter_parse_util.py b/src/google/adk/tools/_function_parameter_parse_util.py index 1b9559b29c..a8e98980d5 100644 --- a/src/google/adk/tools/_function_parameter_parse_util.py +++ b/src/google/adk/tools/_function_parameter_parse_util.py @@ -399,8 +399,17 @@ def _parse_schema_from_parameter( ), func_name, ) + + required_fields = [ + field_name + for field_name, field_info in param.annotation.model_fields.items() + if field_info.is_required() + ] + if required_fields: + schema.required = required_fields _raise_if_schema_unsupported(variant, schema) return schema + if inspect.isclass(param.annotation) and issubclass( param.annotation, ToolContext ): diff --git a/tests/unittests/tools/test_build_function_declaration.py b/tests/unittests/tools/test_build_function_declaration.py index 1c9bf245f1..608f06cb13 100644 --- a/tests/unittests/tools/test_build_function_declaration.py +++ b/tests/unittests/tools/test_build_function_declaration.py @@ -124,6 +124,65 @@ def simple_function(input: CustomInput) -> str: ) +def test_basemodel_required_fields(): + class SearchRequest(BaseModel): + query: str + max_results: int + filter: str = '' + + def search(request: SearchRequest) -> list: + return [] + + function_decl = _automatic_function_calling_util.build_function_declaration( + func=search + ) + + inner = function_decl.parameters.properties['request'] + assert set(inner.required) == {'query', 'max_results'} + assert 'filter' not in (inner.required or []) + + +def test_basemodel_all_optional_fields_no_required(): + class Config(BaseModel): + timeout: int = 30 + retries: int = 3 + + def run(config: Config) -> str: + return '' + + function_decl = _automatic_function_calling_util.build_function_declaration( + func=run + ) + + inner = function_decl.parameters.properties['config'] + assert not inner.required + + +def test_nested_basemodel_required_fields(): + class Inner(BaseModel): + x: int + y: int = 0 + + class Outer(BaseModel): + inner: Inner + label: str = '' + + def process(data: Outer) -> str: + return '' + + function_decl = _automatic_function_calling_util.build_function_declaration( + func=process + ) + + outer = function_decl.parameters.properties['data'] + assert set(outer.required) == {'inner'} + assert 'label' not in (outer.required or []) + + inner = outer.properties['inner'] + assert set(inner.required) == {'x'} + assert 'y' not in (inner.required or []) + + def test_toolcontext_ignored(): def simple_function(input_str: str, tool_context: ToolContext) -> str: return {'result': input_str} From 2a90fbc1bf4c6d8322f7f6e9fd320c3d91afd2a7 Mon Sep 17 00:00:00 2001 From: "Wei (Jack) Sun" Date: Tue, 24 Mar 2026 17:08:38 -0700 Subject: [PATCH 073/192] chore: merge release v1.27.4 to main Merge https://github.com/google/adk-python/pull/4990 Syncs version bump and CHANGELOG from release v1.27.4 to main. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4990 from google:release/v1.27.4 71982f2476f2a63df419309ac94658d1ff9228e9 PiperOrigin-RevId: 888928449 --- .github/.release-please-manifest.json | 2 +- .github/release-please-config.json | 2 +- CHANGELOG.md | 10 ++++++++++ src/google/adk/version.py | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 42b9d998ba..215f02e088 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.27.2" + ".": "1.27.4" } diff --git a/.github/release-please-config.json b/.github/release-please-config.json index d005c874eb..8c58807069 100644 --- a/.github/release-please-config.json +++ b/.github/release-please-config.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "last-release-sha": "7b94a767337e0d642e808734608f07a70e077c62", + "last-release-sha": "066fcec3e8e669d1c5360e1556afce3f7e068072", "packages": { ".": { "release-type": "python", diff --git a/CHANGELOG.md b/CHANGELOG.md index 852c69cb9d..b0423f8073 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [1.27.4](https://github.com/google/adk-python/compare/v1.27.3...v1.27.4) (2026-03-24) +### Bug Fixes + +* Exclude compromised LiteLLM versions from dependencies pin to 1.82.6 ([fa5e707](https://github.com/google/adk-python/commit/fa5e707c11ad748e7db2f653b526d9bdc4b7d405)) +* gate builder endpoints behind web flag ([44b3f72](https://github.com/google/adk-python/commit/44b3f72d8f4ee09461d0acd8816149e801260b84)) + +## [1.27.3](https://github.com/google/adk-python/compare/v1.27.2...v1.27.3) (2026-03-23) +### Bug Fixes + * add protection for arbitrary module imports ([276adfb](https://github.com/google/adk-python/commit/276adfb7ad552213c0201a3c95efbc9876bf3b66)) + ## [1.27.2](https://github.com/google/adk-python/compare/v1.27.1...v1.27.2) (2026-03-17) ### Bug Fixes * Use valid dataplex OAuth scope for BigQueryToolset ([4010716](https://github.com/google/adk-python/commit/4010716470fc83918dc367c5971342ff551401c8)) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 46ed9b3d36..552556e23b 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "1.27.2" +__version__ = "1.27.4" From f434d2519d8f4dec8a2f7a109ce99caeb6e9ef27 Mon Sep 17 00:00:00 2001 From: Shangjie Chen Date: Wed, 25 Mar 2026 10:48:35 -0700 Subject: [PATCH 074/192] chore: Change Pydantic model config to ignore extra fields in Event Update the `model_config` for `Event` to set `extra='ignore'`. This allows the `Event` model to be initialized with fields not explicitly defined in the model, preventing errors when deserializing data that may contain additional, unneeded fields. This allows the session service to accept 2.0 events. Co-authored-by: Shangjie Chen PiperOrigin-RevId: 889327445 --- src/google/adk/events/event.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/google/adk/events/event.py b/src/google/adk/events/event.py index ddc40f0432..fb3e9093f3 100644 --- a/src/google/adk/events/event.py +++ b/src/google/adk/events/event.py @@ -36,7 +36,7 @@ class Event(LlmResponse): """ model_config = ConfigDict( - extra='forbid', + extra='ignore', ser_json_bytes='base64', val_json_bytes='base64', alias_generator=alias_generators.to_camel, From d78422a4051bba383202f3f13325e65b8be3ccd3 Mon Sep 17 00:00:00 2001 From: George Weale Date: Wed, 25 Mar 2026 14:35:59 -0700 Subject: [PATCH 075/192] fix: Handle concurrent creation of app/user state rows in DatabaseSessionService Introduces a new helper function, `_get_or_create_state`, which uses a nested transaction (SAVEPOINT) to safely attempt creating a state row. If a concurrent transaction has already inserted the row, the inner insert will fail with an IntegrityError, which is caught, and the already-existing row is then fetched Close #4954 Co-authored-by: George Weale PiperOrigin-RevId: 889441684 --- .../adk/sessions/database_session_service.py | 56 ++++++-- .../sessions/test_session_service.py | 131 ++++++++++++++++++ 2 files changed, 172 insertions(+), 15 deletions(-) diff --git a/src/google/adk/sessions/database_session_service.py b/src/google/adk/sessions/database_session_service.py index ac759b564d..d033f1f234 100644 --- a/src/google/adk/sessions/database_session_service.py +++ b/src/google/adk/sessions/database_session_service.py @@ -33,6 +33,7 @@ from sqlalchemy.engine import Connection from sqlalchemy.engine import make_url from sqlalchemy.exc import ArgumentError +from sqlalchemy.exc import IntegrityError from sqlalchemy.ext.asyncio import async_sessionmaker from sqlalchemy.ext.asyncio import AsyncEngine from sqlalchemy.ext.asyncio import AsyncSession as DatabaseSessionFactory @@ -103,6 +104,35 @@ async def _select_required_state( return state_row +async def _get_or_create_state( + *, + sql_session: DatabaseSessionFactory, + state_model: type[_StorageStateT], + primary_key: Any, + defaults: dict[str, Any], +) -> _StorageStateT: + """Returns an existing state row or creates one, handling concurrent inserts. + + Uses a SAVEPOINT so that an IntegrityError from a racing INSERT does not + invalidate the outer transaction. + """ + row = await sql_session.get(state_model, primary_key) + if row is not None: + return row + try: + async with sql_session.begin_nested(): + row = state_model(**defaults) + sql_session.add(row) + return row + except IntegrityError: + # Another concurrent caller inserted the row first. + # The savepoint was rolled back, so re-fetch the winner's row. + row = await sql_session.get(state_model, primary_key) + if row is None: + raise + return row + + def _set_sqlite_pragma(dbapi_connection, connection_record): cursor = dbapi_connection.cursor() cursor.execute("PRAGMA foreign_keys=ON") @@ -401,24 +431,20 @@ async def create_session( raise AlreadyExistsError( f"Session with id {session_id} already exists." ) - # Fetch app and user states from storage - storage_app_state = await sql_session.get( - schema.StorageAppState, (app_name) + # Get or create state rows, handling concurrent insert races. + storage_app_state = await _get_or_create_state( + sql_session=sql_session, + state_model=schema.StorageAppState, + primary_key=app_name, + defaults={"app_name": app_name, "state": {}}, ) - storage_user_state = await sql_session.get( - schema.StorageUserState, (app_name, user_id) + storage_user_state = await _get_or_create_state( + sql_session=sql_session, + state_model=schema.StorageUserState, + primary_key=(app_name, user_id), + defaults={"app_name": app_name, "user_id": user_id, "state": {}}, ) - # Create state tables if not exist - if not storage_app_state: - storage_app_state = schema.StorageAppState(app_name=app_name, state={}) - sql_session.add(storage_app_state) - if not storage_user_state: - storage_user_state = schema.StorageUserState( - app_name=app_name, user_id=user_id, state={} - ) - sql_session.add(storage_user_state) - # Extract state deltas state_deltas = _session_util.extract_state_delta(state) app_state_delta = state_deltas["app"] diff --git a/tests/unittests/sessions/test_session_service.py b/tests/unittests/sessions/test_session_service.py index 8a56600edc..7d6e7cbc33 100644 --- a/tests/unittests/sessions/test_session_service.py +++ b/tests/unittests/sessions/test_session_service.py @@ -1370,6 +1370,137 @@ async def test_prepare_tables_serializes_schema_detection_and_creation(): await service.close() +@pytest.mark.asyncio +async def test_get_or_create_state_returns_existing_row(): + """_get_or_create_state returns an existing row without inserting.""" + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + await service._prepare_tables() + schema = service._get_schema_classes() + + # Pre-create the app_state row. + async with service.database_session_factory() as sql_session: + sql_session.add(schema.StorageAppState(app_name='app1', state={'k': 'v'})) + await sql_session.commit() + + # _get_or_create_state should find and return it. + async with service.database_session_factory() as sql_session: + row = await database_session_service._get_or_create_state( + sql_session=sql_session, + state_model=schema.StorageAppState, + primary_key='app1', + defaults={'app_name': 'app1', 'state': {}}, + ) + assert row.app_name == 'app1' + assert row.state == {'k': 'v'} + finally: + await service.close() + + +@pytest.mark.asyncio +async def test_get_or_create_state_creates_new_row(): + """_get_or_create_state creates a row when none exists.""" + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + await service._prepare_tables() + schema = service._get_schema_classes() + + async with service.database_session_factory() as sql_session: + row = await database_session_service._get_or_create_state( + sql_session=sql_session, + state_model=schema.StorageAppState, + primary_key='new_app', + defaults={'app_name': 'new_app', 'state': {}}, + ) + await sql_session.commit() + assert row.app_name == 'new_app' + assert row.state == {} + + # Verify the row was actually persisted. + async with service.database_session_factory() as sql_session: + persisted = await sql_session.get(schema.StorageAppState, 'new_app') + assert persisted is not None + finally: + await service.close() + + +@pytest.mark.asyncio +async def test_get_or_create_state_handles_race_condition(): + """_get_or_create_state recovers when a concurrent INSERT wins the race. + + Simulates the race from https://github.com/google/adk-python/issues/4954: + the initial SELECT returns None (another caller hasn't committed yet), but + by the time we INSERT, the other caller has committed — so the INSERT fails + with IntegrityError and we fall back to re-fetching. + """ + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + await service._prepare_tables() + schema = service._get_schema_classes() + + # Pre-create the row to guarantee the INSERT will fail. + async with service.database_session_factory() as sql_session: + sql_session.add(schema.StorageAppState(app_name='race_app', state={})) + await sql_session.commit() + + # Patch session.get to return None on the first call (simulating the + # race window), then fall through to the real implementation. + async with service.database_session_factory() as sql_session: + original_get = sql_session.get + call_count = 0 + + async def patched_get(*args, **kwargs): + nonlocal call_count + call_count += 1 + if call_count == 1: + return None # Simulate: row not yet visible + return await original_get(*args, **kwargs) + + sql_session.get = patched_get + + row = await database_session_service._get_or_create_state( + sql_session=sql_session, + state_model=schema.StorageAppState, + primary_key='race_app', + defaults={'app_name': 'race_app', 'state': {}}, + ) + assert row.app_name == 'race_app' + # The function should have called get twice: once before the INSERT + # (patched to return None) and once after the IntegrityError. + assert call_count == 2 + finally: + await service.close() + + +@pytest.mark.asyncio +async def test_create_session_sequential_same_app_name(): + """Sequential create_session calls for the same app_name work correctly. + + The second call reuses the existing app_states row. + """ + service = DatabaseSessionService('sqlite+aiosqlite:///:memory:') + try: + s1 = await service.create_session( + app_name='shared', user_id='u1', session_id='s1' + ) + s2 = await service.create_session( + app_name='shared', user_id='u2', session_id='s2' + ) + assert s1.app_name == 'shared' + assert s2.app_name == 'shared' + + got1 = await service.get_session( + app_name='shared', user_id='u1', session_id='s1' + ) + got2 = await service.get_session( + app_name='shared', user_id='u2', session_id='s2' + ) + assert got1 is not None + assert got2 is not None + finally: + await service.close() + + @pytest.mark.asyncio async def test_prepare_tables_idempotent_after_creation(): """Calling _prepare_tables multiple times is safe and idempotent. From 27cc98db5fbc15de27713a5814d5c68e9c835d0f Mon Sep 17 00:00:00 2001 From: Sasha Sobran Date: Wed, 25 Mar 2026 14:54:39 -0700 Subject: [PATCH 076/192] fix: Update eval extras to Vertex SDK package version with constrained LiteLLM upperbound Co-authored-by: Sasha Sobran PiperOrigin-RevId: 889449878 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ac841bed64..7cd71def92 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -111,7 +111,7 @@ eval = [ # go/keep-sorted start "Jinja2>=3.1.4,<4.0.0", # For eval template rendering "gepa>=0.1.0", - "google-cloud-aiplatform[evaluation]>=1.140.0", + "google-cloud-aiplatform[evaluation]>=1.143.0", "pandas>=2.2.3", "rouge-score>=0.1.2", "tabulate>=0.9.0", From 3e00e955519730503e73155723f27b2bc8d5779b Mon Sep 17 00:00:00 2001 From: Divyansh Shukla Date: Wed, 25 Mar 2026 17:40:08 -0700 Subject: [PATCH 077/192] fix: returns '' instead of empty strings for clearer agent feedback and correct typing PiperOrigin-RevId: 889521009 --- src/google/adk/tools/bash_tool.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/google/adk/tools/bash_tool.py b/src/google/adk/tools/bash_tool.py index f3ba4c2ef4..fc728e8123 100644 --- a/src/google/adk/tools/bash_tool.py +++ b/src/google/adk/tools/bash_tool.py @@ -141,8 +141,12 @@ async def run_async( try: stdout, stderr = await asyncio.wait_for(process.communicate(), timeout=30) return { - "stdout": stdout.decode(), - "stderr": stderr.decode(), + "stdout": ( + stdout.decode() if stdout is not None else "" + ), + "stderr": ( + stderr.decode() if stderr is not None else "" + ), "returncode": process.returncode, } except asyncio.TimeoutError: From 166ff99b9266cd3bb0e86070c58a67d937216297 Mon Sep 17 00:00:00 2001 From: Haiyuan Cao Date: Wed, 25 Mar 2026 23:12:43 -0700 Subject: [PATCH 078/192] feat(bigquery): Migrate 1P BQ Toolset - Migrate `tools/bigquery` to `integrations/bigquery` to match standard ADK layout. - Update unit tests to fully assert integration migration. Co-authored-by: Haiyuan Cao PiperOrigin-RevId: 889634966 --- .../adk/integrations/bigquery/__init__.py | 49 +++++++++++++++++++ .../bigquery/bigquery_credentials.py | 2 +- .../bigquery/bigquery_toolset.py | 0 .../bigquery/client.py | 0 .../bigquery/config.py | 0 .../bigquery/data_insights_tool.py | 0 .../bigquery/metadata_tool.py | 0 .../bigquery/query_tool.py | 2 +- .../bigquery/search_tool.py | 0 src/google/adk/tools/bigquery/__init__.py | 25 +++++++--- .../bigquery/test_bigquery_client.py | 6 +-- .../bigquery/test_bigquery_credentials.py | 2 +- .../test_bigquery_data_insights_tool.py | 2 +- .../bigquery/test_bigquery_metadata_tool.py | 6 +-- .../bigquery/test_bigquery_query_tool.py | 12 ++--- .../bigquery/test_bigquery_search_tool.py | 6 +-- .../bigquery/test_bigquery_tool_config.py | 2 +- .../bigquery/test_bigquery_toolset.py | 6 +-- ...k_data_insights_penguins_highest_mass.yaml | 0 .../tools/data_agent/test_data_agent_tool.py | 7 ++- 20 files changed, 97 insertions(+), 30 deletions(-) create mode 100644 src/google/adk/integrations/bigquery/__init__.py rename src/google/adk/{tools => integrations}/bigquery/bigquery_credentials.py (95%) rename src/google/adk/{tools => integrations}/bigquery/bigquery_toolset.py (100%) rename src/google/adk/{tools => integrations}/bigquery/client.py (100%) rename src/google/adk/{tools => integrations}/bigquery/config.py (100%) rename src/google/adk/{tools => integrations}/bigquery/data_insights_tool.py (100%) rename src/google/adk/{tools => integrations}/bigquery/metadata_tool.py (100%) rename src/google/adk/{tools => integrations}/bigquery/query_tool.py (99%) rename src/google/adk/{tools => integrations}/bigquery/search_tool.py (100%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_client.py (97%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_credentials.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_data_insights_tool.py (99%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_metadata_tool.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_query_tool.py (99%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_search_tool.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_tool_config.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_toolset.py (95%) rename tests/unittests/{tools => integrations}/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml (100%) diff --git a/src/google/adk/integrations/bigquery/__init__.py b/src/google/adk/integrations/bigquery/__init__.py new file mode 100644 index 0000000000..021ed08a50 --- /dev/null +++ b/src/google/adk/integrations/bigquery/__init__.py @@ -0,0 +1,49 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""BigQuery Integration. + +This module provides tools and skills for interacting with BigQuery. +""" + +from __future__ import annotations + +import typing + +if typing.TYPE_CHECKING: + from .bigquery_credentials import BigQueryCredentialsConfig + from .bigquery_skill import get_bigquery_skill + from .bigquery_toolset import BigQueryToolset + +# Map attribute names to relative module paths +_lazy_imports = { + "BigQueryCredentialsConfig": ".bigquery_credentials", + "BigQueryToolset": ".bigquery_toolset", + "get_bigquery_skill": ".bigquery_skill", +} + + +def __getattr__(name: str) -> any: + if name in _lazy_imports: + import importlib + + module_path = _lazy_imports[name] + # __name__ is 'google.adk.integrations.bigquery' + module = importlib.import_module(module_path, __name__) + return getattr(module, name) + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + +def __dir__() -> list[str]: + return list(_lazy_imports.keys()) diff --git a/src/google/adk/tools/bigquery/bigquery_credentials.py b/src/google/adk/integrations/bigquery/bigquery_credentials.py similarity index 95% rename from src/google/adk/tools/bigquery/bigquery_credentials.py rename to src/google/adk/integrations/bigquery/bigquery_credentials.py index c491c52ee6..d002193bd0 100644 --- a/src/google/adk/tools/bigquery/bigquery_credentials.py +++ b/src/google/adk/integrations/bigquery/bigquery_credentials.py @@ -16,7 +16,7 @@ from ...features import experimental from ...features import FeatureName -from .._google_credentials import BaseGoogleCredentialsConfig +from ...tools._google_credentials import BaseGoogleCredentialsConfig BIGQUERY_TOKEN_CACHE_KEY = "bigquery_token_cache" BIGQUERY_SCOPES = [ diff --git a/src/google/adk/tools/bigquery/bigquery_toolset.py b/src/google/adk/integrations/bigquery/bigquery_toolset.py similarity index 100% rename from src/google/adk/tools/bigquery/bigquery_toolset.py rename to src/google/adk/integrations/bigquery/bigquery_toolset.py diff --git a/src/google/adk/tools/bigquery/client.py b/src/google/adk/integrations/bigquery/client.py similarity index 100% rename from src/google/adk/tools/bigquery/client.py rename to src/google/adk/integrations/bigquery/client.py diff --git a/src/google/adk/tools/bigquery/config.py b/src/google/adk/integrations/bigquery/config.py similarity index 100% rename from src/google/adk/tools/bigquery/config.py rename to src/google/adk/integrations/bigquery/config.py diff --git a/src/google/adk/tools/bigquery/data_insights_tool.py b/src/google/adk/integrations/bigquery/data_insights_tool.py similarity index 100% rename from src/google/adk/tools/bigquery/data_insights_tool.py rename to src/google/adk/integrations/bigquery/data_insights_tool.py diff --git a/src/google/adk/tools/bigquery/metadata_tool.py b/src/google/adk/integrations/bigquery/metadata_tool.py similarity index 100% rename from src/google/adk/tools/bigquery/metadata_tool.py rename to src/google/adk/integrations/bigquery/metadata_tool.py diff --git a/src/google/adk/tools/bigquery/query_tool.py b/src/google/adk/integrations/bigquery/query_tool.py similarity index 99% rename from src/google/adk/tools/bigquery/query_tool.py rename to src/google/adk/integrations/bigquery/query_tool.py index d5b1264fa5..1721db6781 100644 --- a/src/google/adk/tools/bigquery/query_tool.py +++ b/src/google/adk/integrations/bigquery/query_tool.py @@ -25,7 +25,7 @@ from google.cloud import bigquery from . import client -from ..tool_context import ToolContext +from ...tools.tool_context import ToolContext from .config import BigQueryToolConfig from .config import WriteMode diff --git a/src/google/adk/tools/bigquery/search_tool.py b/src/google/adk/integrations/bigquery/search_tool.py similarity index 100% rename from src/google/adk/tools/bigquery/search_tool.py rename to src/google/adk/integrations/bigquery/search_tool.py diff --git a/src/google/adk/tools/bigquery/__init__.py b/src/google/adk/tools/bigquery/__init__.py index 54cc19f889..af7075fa02 100644 --- a/src/google/adk/tools/bigquery/__init__.py +++ b/src/google/adk/tools/bigquery/__init__.py @@ -27,10 +27,23 @@ execute_sql can't arbitrarily mutate existing data. """ -from .bigquery_credentials import BigQueryCredentialsConfig -from .bigquery_toolset import BigQueryToolset +import importlib +import sys -__all__ = [ - "BigQueryToolset", - "BigQueryCredentialsConfig", -] +# Redirect this module to integrations/bigquery for backward compatibility. +_TARGET = "google.adk.integrations.bigquery" + +try: + _mod = importlib.import_module(_TARGET) + sys.modules[__name__] = _mod +except ImportError: + # Fallback for static analysis or if import fails during transition + from google.adk.integrations.bigquery import BigQueryCredentialsConfig + from google.adk.integrations.bigquery import BigQueryToolset + from google.adk.integrations.bigquery import get_bigquery_skill + + __all__ = [ + "BigQueryToolset", + "BigQueryCredentialsConfig", + "get_bigquery_skill", + ] diff --git a/tests/unittests/tools/bigquery/test_bigquery_client.py b/tests/unittests/integrations/bigquery/test_bigquery_client.py similarity index 97% rename from tests/unittests/tools/bigquery/test_bigquery_client.py rename to tests/unittests/integrations/bigquery/test_bigquery_client.py index d8d5e726ee..a89fbf872f 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_client.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_client.py @@ -18,9 +18,9 @@ from unittest import mock import google.adk -from google.adk.tools.bigquery.client import DP_USER_AGENT -from google.adk.tools.bigquery.client import get_bigquery_client -from google.adk.tools.bigquery.client import get_dataplex_catalog_client +from google.adk.integrations.bigquery.client import DP_USER_AGENT +from google.adk.integrations.bigquery.client import get_bigquery_client +from google.adk.integrations.bigquery.client import get_dataplex_catalog_client from google.api_core.gapic_v1 import client_info as gapic_client_info import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/tools/bigquery/test_bigquery_credentials.py b/tests/unittests/integrations/bigquery/test_bigquery_credentials.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_credentials.py rename to tests/unittests/integrations/bigquery/test_bigquery_credentials.py index f0c188d0a4..b7072b0ba1 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_credentials.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_credentials.py @@ -14,7 +14,7 @@ from unittest import mock -from google.adk.tools.bigquery import BigQueryCredentialsConfig +from google.adk.integrations.bigquery import BigQueryCredentialsConfig # Mock the Google OAuth and API dependencies import google.auth.credentials import google.oauth2.credentials diff --git a/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py similarity index 99% rename from tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py index b62c68358c..91d0b6937e 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py @@ -15,7 +15,7 @@ import pathlib from unittest import mock -from google.adk.tools.bigquery import data_insights_tool +from google.adk.integrations.bigquery import data_insights_tool import pytest import yaml diff --git a/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py index a0dda5383f..c2db210ff7 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py @@ -17,9 +17,9 @@ import os from unittest import mock -from google.adk.tools.bigquery import client as bq_client_lib -from google.adk.tools.bigquery import metadata_tool -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery import client as bq_client_lib +from google.adk.integrations.bigquery import metadata_tool +from google.adk.integrations.bigquery.config import BigQueryToolConfig import google.auth from google.auth.exceptions import DefaultCredentialsError from google.cloud import bigquery diff --git a/tests/unittests/tools/bigquery/test_bigquery_query_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py similarity index 99% rename from tests/unittests/tools/bigquery/test_bigquery_query_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_query_tool.py index 150cdb7569..3a851014a8 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_query_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py @@ -24,13 +24,13 @@ import dateutil import dateutil.relativedelta +from google.adk.integrations.bigquery import BigQueryCredentialsConfig +from google.adk.integrations.bigquery import BigQueryToolset +from google.adk.integrations.bigquery import client as bq_client_lib +from google.adk.integrations.bigquery import query_tool +from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery.config import WriteMode from google.adk.tools.base_tool import BaseTool -from google.adk.tools.bigquery import BigQueryCredentialsConfig -from google.adk.tools.bigquery import BigQueryToolset -from google.adk.tools.bigquery import client as bq_client_lib -from google.adk.tools.bigquery import query_tool -from google.adk.tools.bigquery.config import BigQueryToolConfig -from google.adk.tools.bigquery.config import WriteMode from google.adk.tools.tool_context import ToolContext import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/tools/bigquery/test_bigquery_search_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_search_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_search_tool.py index 0ccdc9e18e..f2dc21c5fd 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_search_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py @@ -53,8 +53,8 @@ class MockBaseModel: sys.modules["fastapi.openapi.models"] = mock.MagicMock() -from google.adk.tools.bigquery import search_tool -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery import search_tool +from google.adk.integrations.bigquery.config import BigQueryToolConfig from google.api_core import exceptions as api_exceptions from google.auth.credentials import Credentials from google.cloud import dataplex_v1 @@ -107,7 +107,7 @@ def setUp(self): # Patch get_dataplex_catalog_client self.mock_get_dataplex_client = self.enter_context( mock.patch( - "google.adk.tools.bigquery.client.get_dataplex_catalog_client", + "google.adk.integrations.bigquery.client.get_dataplex_catalog_client", autospec=True, ) ) diff --git a/tests/unittests/tools/bigquery/test_bigquery_tool_config.py b/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_tool_config.py rename to tests/unittests/integrations/bigquery/test_bigquery_tool_config.py index 705f3d87b8..052da85953 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_tool_config.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py @@ -17,7 +17,7 @@ import warnings from google.adk.features._feature_registry import _WARNED_FEATURES -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery.config import BigQueryToolConfig import pytest diff --git a/tests/unittests/tools/bigquery/test_bigquery_toolset.py b/tests/unittests/integrations/bigquery/test_bigquery_toolset.py similarity index 95% rename from tests/unittests/tools/bigquery/test_bigquery_toolset.py rename to tests/unittests/integrations/bigquery/test_bigquery_toolset.py index 0eced4b168..a8ff2e649c 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_toolset.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_toolset.py @@ -14,9 +14,9 @@ from __future__ import annotations -from google.adk.tools.bigquery import BigQueryCredentialsConfig -from google.adk.tools.bigquery import BigQueryToolset -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery import BigQueryCredentialsConfig +from google.adk.integrations.bigquery import BigQueryToolset +from google.adk.integrations.bigquery.config import BigQueryToolConfig from google.adk.tools.google_tool import GoogleTool import pytest diff --git a/tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml b/tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml similarity index 100% rename from tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml rename to tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml diff --git a/tests/unittests/tools/data_agent/test_data_agent_tool.py b/tests/unittests/tools/data_agent/test_data_agent_tool.py index 54b3e8d327..33447bde6e 100644 --- a/tests/unittests/tools/data_agent/test_data_agent_tool.py +++ b/tests/unittests/tools/data_agent/test_data_agent_tool.py @@ -153,7 +153,12 @@ def test_ask_data_agent_exception( def test_get_stream_from_file(mock_post, case_file_path): """Runs a full integration test for the _get_stream function using data from a specific file.""" # 1. Construct the full, absolute path to the data file - full_path = pathlib.Path(__file__).parent.parent / "bigquery" / case_file_path + full_path = ( + pathlib.Path(__file__).parent.parent.parent + / "integrations" + / "bigquery" + / case_file_path + ) # 2. Load the test case data from the specified YAML file with open(full_path, "r", encoding="utf-8") as f: From d1121317ef4e1ac559f4ae13855ac1af28eef8f6 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 26 Mar 2026 06:13:00 -0700 Subject: [PATCH 079/192] feat(bigquery): Migrate 1P BQ Toolset - Migrate `tools/bigquery` to `integrations/bigquery` to match standard ADK layout. - Update unit tests to fully assert integration migration. PiperOrigin-RevId: 889796517 --- .../adk/integrations/bigquery/__init__.py | 49 ------------------- src/google/adk/tools/bigquery/__init__.py | 25 +++------- .../bigquery/bigquery_credentials.py | 2 +- .../bigquery/bigquery_toolset.py | 0 .../bigquery/client.py | 0 .../bigquery/config.py | 0 .../bigquery/data_insights_tool.py | 0 .../bigquery/metadata_tool.py | 0 .../bigquery/query_tool.py | 2 +- .../bigquery/search_tool.py | 0 .../bigquery/test_bigquery_client.py | 6 +-- .../bigquery/test_bigquery_credentials.py | 2 +- .../test_bigquery_data_insights_tool.py | 2 +- .../bigquery/test_bigquery_metadata_tool.py | 6 +-- .../bigquery/test_bigquery_query_tool.py | 12 ++--- .../bigquery/test_bigquery_search_tool.py | 6 +-- .../bigquery/test_bigquery_tool_config.py | 2 +- .../bigquery/test_bigquery_toolset.py | 6 +-- ...k_data_insights_penguins_highest_mass.yaml | 0 .../tools/data_agent/test_data_agent_tool.py | 7 +-- 20 files changed, 30 insertions(+), 97 deletions(-) delete mode 100644 src/google/adk/integrations/bigquery/__init__.py rename src/google/adk/{integrations => tools}/bigquery/bigquery_credentials.py (95%) rename src/google/adk/{integrations => tools}/bigquery/bigquery_toolset.py (100%) rename src/google/adk/{integrations => tools}/bigquery/client.py (100%) rename src/google/adk/{integrations => tools}/bigquery/config.py (100%) rename src/google/adk/{integrations => tools}/bigquery/data_insights_tool.py (100%) rename src/google/adk/{integrations => tools}/bigquery/metadata_tool.py (100%) rename src/google/adk/{integrations => tools}/bigquery/query_tool.py (99%) rename src/google/adk/{integrations => tools}/bigquery/search_tool.py (100%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_client.py (97%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_credentials.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_data_insights_tool.py (99%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_metadata_tool.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_query_tool.py (99%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_search_tool.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_tool_config.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_toolset.py (95%) rename tests/unittests/{integrations => tools}/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml (100%) diff --git a/src/google/adk/integrations/bigquery/__init__.py b/src/google/adk/integrations/bigquery/__init__.py deleted file mode 100644 index 021ed08a50..0000000000 --- a/src/google/adk/integrations/bigquery/__init__.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""BigQuery Integration. - -This module provides tools and skills for interacting with BigQuery. -""" - -from __future__ import annotations - -import typing - -if typing.TYPE_CHECKING: - from .bigquery_credentials import BigQueryCredentialsConfig - from .bigquery_skill import get_bigquery_skill - from .bigquery_toolset import BigQueryToolset - -# Map attribute names to relative module paths -_lazy_imports = { - "BigQueryCredentialsConfig": ".bigquery_credentials", - "BigQueryToolset": ".bigquery_toolset", - "get_bigquery_skill": ".bigquery_skill", -} - - -def __getattr__(name: str) -> any: - if name in _lazy_imports: - import importlib - - module_path = _lazy_imports[name] - # __name__ is 'google.adk.integrations.bigquery' - module = importlib.import_module(module_path, __name__) - return getattr(module, name) - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") - - -def __dir__() -> list[str]: - return list(_lazy_imports.keys()) diff --git a/src/google/adk/tools/bigquery/__init__.py b/src/google/adk/tools/bigquery/__init__.py index af7075fa02..54cc19f889 100644 --- a/src/google/adk/tools/bigquery/__init__.py +++ b/src/google/adk/tools/bigquery/__init__.py @@ -27,23 +27,10 @@ execute_sql can't arbitrarily mutate existing data. """ -import importlib -import sys +from .bigquery_credentials import BigQueryCredentialsConfig +from .bigquery_toolset import BigQueryToolset -# Redirect this module to integrations/bigquery for backward compatibility. -_TARGET = "google.adk.integrations.bigquery" - -try: - _mod = importlib.import_module(_TARGET) - sys.modules[__name__] = _mod -except ImportError: - # Fallback for static analysis or if import fails during transition - from google.adk.integrations.bigquery import BigQueryCredentialsConfig - from google.adk.integrations.bigquery import BigQueryToolset - from google.adk.integrations.bigquery import get_bigquery_skill - - __all__ = [ - "BigQueryToolset", - "BigQueryCredentialsConfig", - "get_bigquery_skill", - ] +__all__ = [ + "BigQueryToolset", + "BigQueryCredentialsConfig", +] diff --git a/src/google/adk/integrations/bigquery/bigquery_credentials.py b/src/google/adk/tools/bigquery/bigquery_credentials.py similarity index 95% rename from src/google/adk/integrations/bigquery/bigquery_credentials.py rename to src/google/adk/tools/bigquery/bigquery_credentials.py index d002193bd0..c491c52ee6 100644 --- a/src/google/adk/integrations/bigquery/bigquery_credentials.py +++ b/src/google/adk/tools/bigquery/bigquery_credentials.py @@ -16,7 +16,7 @@ from ...features import experimental from ...features import FeatureName -from ...tools._google_credentials import BaseGoogleCredentialsConfig +from .._google_credentials import BaseGoogleCredentialsConfig BIGQUERY_TOKEN_CACHE_KEY = "bigquery_token_cache" BIGQUERY_SCOPES = [ diff --git a/src/google/adk/integrations/bigquery/bigquery_toolset.py b/src/google/adk/tools/bigquery/bigquery_toolset.py similarity index 100% rename from src/google/adk/integrations/bigquery/bigquery_toolset.py rename to src/google/adk/tools/bigquery/bigquery_toolset.py diff --git a/src/google/adk/integrations/bigquery/client.py b/src/google/adk/tools/bigquery/client.py similarity index 100% rename from src/google/adk/integrations/bigquery/client.py rename to src/google/adk/tools/bigquery/client.py diff --git a/src/google/adk/integrations/bigquery/config.py b/src/google/adk/tools/bigquery/config.py similarity index 100% rename from src/google/adk/integrations/bigquery/config.py rename to src/google/adk/tools/bigquery/config.py diff --git a/src/google/adk/integrations/bigquery/data_insights_tool.py b/src/google/adk/tools/bigquery/data_insights_tool.py similarity index 100% rename from src/google/adk/integrations/bigquery/data_insights_tool.py rename to src/google/adk/tools/bigquery/data_insights_tool.py diff --git a/src/google/adk/integrations/bigquery/metadata_tool.py b/src/google/adk/tools/bigquery/metadata_tool.py similarity index 100% rename from src/google/adk/integrations/bigquery/metadata_tool.py rename to src/google/adk/tools/bigquery/metadata_tool.py diff --git a/src/google/adk/integrations/bigquery/query_tool.py b/src/google/adk/tools/bigquery/query_tool.py similarity index 99% rename from src/google/adk/integrations/bigquery/query_tool.py rename to src/google/adk/tools/bigquery/query_tool.py index 1721db6781..d5b1264fa5 100644 --- a/src/google/adk/integrations/bigquery/query_tool.py +++ b/src/google/adk/tools/bigquery/query_tool.py @@ -25,7 +25,7 @@ from google.cloud import bigquery from . import client -from ...tools.tool_context import ToolContext +from ..tool_context import ToolContext from .config import BigQueryToolConfig from .config import WriteMode diff --git a/src/google/adk/integrations/bigquery/search_tool.py b/src/google/adk/tools/bigquery/search_tool.py similarity index 100% rename from src/google/adk/integrations/bigquery/search_tool.py rename to src/google/adk/tools/bigquery/search_tool.py diff --git a/tests/unittests/integrations/bigquery/test_bigquery_client.py b/tests/unittests/tools/bigquery/test_bigquery_client.py similarity index 97% rename from tests/unittests/integrations/bigquery/test_bigquery_client.py rename to tests/unittests/tools/bigquery/test_bigquery_client.py index a89fbf872f..d8d5e726ee 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_client.py +++ b/tests/unittests/tools/bigquery/test_bigquery_client.py @@ -18,9 +18,9 @@ from unittest import mock import google.adk -from google.adk.integrations.bigquery.client import DP_USER_AGENT -from google.adk.integrations.bigquery.client import get_bigquery_client -from google.adk.integrations.bigquery.client import get_dataplex_catalog_client +from google.adk.tools.bigquery.client import DP_USER_AGENT +from google.adk.tools.bigquery.client import get_bigquery_client +from google.adk.tools.bigquery.client import get_dataplex_catalog_client from google.api_core.gapic_v1 import client_info as gapic_client_info import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/integrations/bigquery/test_bigquery_credentials.py b/tests/unittests/tools/bigquery/test_bigquery_credentials.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_credentials.py rename to tests/unittests/tools/bigquery/test_bigquery_credentials.py index b7072b0ba1..f0c188d0a4 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_credentials.py +++ b/tests/unittests/tools/bigquery/test_bigquery_credentials.py @@ -14,7 +14,7 @@ from unittest import mock -from google.adk.integrations.bigquery import BigQueryCredentialsConfig +from google.adk.tools.bigquery import BigQueryCredentialsConfig # Mock the Google OAuth and API dependencies import google.auth.credentials import google.oauth2.credentials diff --git a/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py b/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py similarity index 99% rename from tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py index 91d0b6937e..b62c68358c 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py @@ -15,7 +15,7 @@ import pathlib from unittest import mock -from google.adk.integrations.bigquery import data_insights_tool +from google.adk.tools.bigquery import data_insights_tool import pytest import yaml diff --git a/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py b/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py index c2db210ff7..a0dda5383f 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py @@ -17,9 +17,9 @@ import os from unittest import mock -from google.adk.integrations.bigquery import client as bq_client_lib -from google.adk.integrations.bigquery import metadata_tool -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery import client as bq_client_lib +from google.adk.tools.bigquery import metadata_tool +from google.adk.tools.bigquery.config import BigQueryToolConfig import google.auth from google.auth.exceptions import DefaultCredentialsError from google.cloud import bigquery diff --git a/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py b/tests/unittests/tools/bigquery/test_bigquery_query_tool.py similarity index 99% rename from tests/unittests/integrations/bigquery/test_bigquery_query_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_query_tool.py index 3a851014a8..150cdb7569 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_query_tool.py @@ -24,13 +24,13 @@ import dateutil import dateutil.relativedelta -from google.adk.integrations.bigquery import BigQueryCredentialsConfig -from google.adk.integrations.bigquery import BigQueryToolset -from google.adk.integrations.bigquery import client as bq_client_lib -from google.adk.integrations.bigquery import query_tool -from google.adk.integrations.bigquery.config import BigQueryToolConfig -from google.adk.integrations.bigquery.config import WriteMode from google.adk.tools.base_tool import BaseTool +from google.adk.tools.bigquery import BigQueryCredentialsConfig +from google.adk.tools.bigquery import BigQueryToolset +from google.adk.tools.bigquery import client as bq_client_lib +from google.adk.tools.bigquery import query_tool +from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery.config import WriteMode from google.adk.tools.tool_context import ToolContext import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py b/tests/unittests/tools/bigquery/test_bigquery_search_tool.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_search_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_search_tool.py index f2dc21c5fd..0ccdc9e18e 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_search_tool.py @@ -53,8 +53,8 @@ class MockBaseModel: sys.modules["fastapi.openapi.models"] = mock.MagicMock() -from google.adk.integrations.bigquery import search_tool -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery import search_tool +from google.adk.tools.bigquery.config import BigQueryToolConfig from google.api_core import exceptions as api_exceptions from google.auth.credentials import Credentials from google.cloud import dataplex_v1 @@ -107,7 +107,7 @@ def setUp(self): # Patch get_dataplex_catalog_client self.mock_get_dataplex_client = self.enter_context( mock.patch( - "google.adk.integrations.bigquery.client.get_dataplex_catalog_client", + "google.adk.tools.bigquery.client.get_dataplex_catalog_client", autospec=True, ) ) diff --git a/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py b/tests/unittests/tools/bigquery/test_bigquery_tool_config.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_tool_config.py rename to tests/unittests/tools/bigquery/test_bigquery_tool_config.py index 052da85953..705f3d87b8 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py +++ b/tests/unittests/tools/bigquery/test_bigquery_tool_config.py @@ -17,7 +17,7 @@ import warnings from google.adk.features._feature_registry import _WARNED_FEATURES -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery.config import BigQueryToolConfig import pytest diff --git a/tests/unittests/integrations/bigquery/test_bigquery_toolset.py b/tests/unittests/tools/bigquery/test_bigquery_toolset.py similarity index 95% rename from tests/unittests/integrations/bigquery/test_bigquery_toolset.py rename to tests/unittests/tools/bigquery/test_bigquery_toolset.py index a8ff2e649c..0eced4b168 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_toolset.py +++ b/tests/unittests/tools/bigquery/test_bigquery_toolset.py @@ -14,9 +14,9 @@ from __future__ import annotations -from google.adk.integrations.bigquery import BigQueryCredentialsConfig -from google.adk.integrations.bigquery import BigQueryToolset -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery import BigQueryCredentialsConfig +from google.adk.tools.bigquery import BigQueryToolset +from google.adk.tools.bigquery.config import BigQueryToolConfig from google.adk.tools.google_tool import GoogleTool import pytest diff --git a/tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml b/tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml similarity index 100% rename from tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml rename to tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml diff --git a/tests/unittests/tools/data_agent/test_data_agent_tool.py b/tests/unittests/tools/data_agent/test_data_agent_tool.py index 33447bde6e..54b3e8d327 100644 --- a/tests/unittests/tools/data_agent/test_data_agent_tool.py +++ b/tests/unittests/tools/data_agent/test_data_agent_tool.py @@ -153,12 +153,7 @@ def test_ask_data_agent_exception( def test_get_stream_from_file(mock_post, case_file_path): """Runs a full integration test for the _get_stream function using data from a specific file.""" # 1. Construct the full, absolute path to the data file - full_path = ( - pathlib.Path(__file__).parent.parent.parent - / "integrations" - / "bigquery" - / case_file_path - ) + full_path = pathlib.Path(__file__).parent.parent / "bigquery" / case_file_path # 2. Load the test case data from the specified YAML file with open(full_path, "r", encoding="utf-8") as f: From 116f75d2c9cd83a70c57b301b021182dd6f158f2 Mon Sep 17 00:00:00 2001 From: Sasha Sobran Date: Thu, 26 Mar 2026 09:37:23 -0700 Subject: [PATCH 080/192] fix: add agent name validation to prevent arbitrary module imports Co-authored-by: Sasha Sobran PiperOrigin-RevId: 889890969 --- src/google/adk/cli/utils/agent_loader.py | 29 ++++++ .../unittests/cli/utils/test_agent_loader.py | 97 +++++++++++-------- 2 files changed, 84 insertions(+), 42 deletions(-) diff --git a/src/google/adk/cli/utils/agent_loader.py b/src/google/adk/cli/utils/agent_loader.py index efd24648dc..72bc4bf535 100644 --- a/src/google/adk/cli/utils/agent_loader.py +++ b/src/google/adk/cli/utils/agent_loader.py @@ -19,6 +19,7 @@ import logging import os from pathlib import Path +import re import sys from typing import Any from typing import Literal @@ -187,8 +188,36 @@ def _load_from_yaml_config( ) + e.args[1:] raise e + _VALID_AGENT_NAME_RE = re.compile(r"^[a-zA-Z0-9_]+$") + + def _validate_agent_name(self, agent_name: str) -> None: + """Validate agent name to prevent arbitrary module imports.""" + # Strip the special agent prefix for validation + if agent_name.startswith("__"): + name_to_check = agent_name[2:] + check_dir = os.path.abspath(SPECIAL_AGENTS_DIR) + else: + name_to_check = agent_name + check_dir = self.agents_dir + + if not self._VALID_AGENT_NAME_RE.match(name_to_check): + raise ValueError( + f"Invalid agent name: {agent_name!r}. Agent names must be valid" + " Python identifiers (letters, digits, and underscores only)." + ) + + # Verify the agent exists on disk before allowing import + agent_path = Path(check_dir) / name_to_check + agent_file = Path(check_dir) / f"{name_to_check}.py" + if not (agent_path.is_dir() or agent_file.is_file()): + raise ValueError( + f"Agent not found: {agent_name!r}. No matching directory or module" + f" exists in '{os.path.join(check_dir, name_to_check)}'." + ) + def _perform_load(self, agent_name: str) -> Union[BaseAgent, App]: """Internal logic to load an agent""" + self._validate_agent_name(agent_name) # Determine the directory to use for loading if agent_name.startswith("__"): # Special agent: use special agents directory diff --git a/tests/unittests/cli/utils/test_agent_loader.py b/tests/unittests/cli/utils/test_agent_loader.py index 0a7f9fc04f..bcf306ad49 100644 --- a/tests/unittests/cli/utils/test_agent_loader.py +++ b/tests/unittests/cli/utils/test_agent_loader.py @@ -299,8 +299,6 @@ def test_error_messages_use_os_sep_consistently(self): loader.load_agent(agent_name) exc_info.match(re.escape(expected_path)) - exc_info.match(re.escape(f"{agent_name}{os.sep}root_agent.yaml")) - exc_info.match(re.escape(f"{os.sep}")) def test_agent_loader_with_mocked_windows_path(self, monkeypatch): """Mock Path() to simulate Windows behavior and catch regressions. @@ -333,19 +331,10 @@ def test_agent_not_found_error(self): with pytest.raises(ValueError) as exc_info: loader.load_agent("nonexistent_agent") - expected_msg_part_1 = "No root_agent found for 'nonexistent_agent'." - expected_msg_part_2 = ( - "Searched in 'nonexistent_agent.agent.root_agent'," - " 'nonexistent_agent.root_agent' and" - " 'nonexistent_agent/root_agent.yaml'." + assert "Agent not found: 'nonexistent_agent'" in str(exc_info.value) + assert os.path.join(agents_dir, "nonexistent_agent") in str( + exc_info.value ) - expected_msg_part_3 = ( - f"Ensure '{agents_dir}/nonexistent_agent' is structured correctly" - ) - - assert expected_msg_part_1 in str(exc_info.value) - assert expected_msg_part_2 in str(exc_info.value) - assert expected_msg_part_3 in str(exc_info.value) def test_agent_without_root_agent_error(self): """Test that appropriate error is raised when agent has no root_agent.""" @@ -567,26 +556,16 @@ def test_yaml_agent_not_found_error(self): """Test that appropriate error is raised when YAML agent is not found.""" with tempfile.TemporaryDirectory() as temp_dir: loader = AgentLoader(temp_dir) - agents_dir = temp_dir # For use in the expected message string + agents_dir = temp_dir # Try to load nonexistent YAML agent with pytest.raises(ValueError) as exc_info: loader.load_agent("nonexistent_yaml_agent") - expected_msg_part_1 = "No root_agent found for 'nonexistent_yaml_agent'." - expected_msg_part_2 = ( - "Searched in 'nonexistent_yaml_agent.agent.root_agent'," - " 'nonexistent_yaml_agent.root_agent' and" - " 'nonexistent_yaml_agent/root_agent.yaml'." + assert "Agent not found: 'nonexistent_yaml_agent'" in str(exc_info.value) + assert os.path.join(agents_dir, "nonexistent_yaml_agent") in str( + exc_info.value ) - expected_msg_part_3 = ( - f"Ensure '{agents_dir}/nonexistent_yaml_agent' is structured" - " correctly" - ) - - assert expected_msg_part_1 in str(exc_info.value) - assert expected_msg_part_2 in str(exc_info.value) - assert expected_msg_part_3 in str(exc_info.value) def test_yaml_agent_invalid_yaml_error(self): """Test that appropriate error is raised when YAML is invalid.""" @@ -778,20 +757,7 @@ def test_special_agent_not_found_error(self): with pytest.raises(ValueError) as exc_info: loader.load_agent("__nonexistent_special") - expected_msg_part_1 = "No root_agent found for '__nonexistent_special'." - expected_msg_part_2 = ( - "Searched in 'nonexistent_special.agent.root_agent'," - " 'nonexistent_special.root_agent' and" - " 'nonexistent_special/root_agent.yaml'." - ) - expected_msg_part_3 = ( - f"Ensure '{special_agents_dir}/nonexistent_special' is structured" - " correctly" - ) - - assert expected_msg_part_1 in str(exc_info.value) - assert expected_msg_part_2 in str(exc_info.value) - assert expected_msg_part_3 in str(exc_info.value) + assert "Agent not found: '__nonexistent_special'" in str(exc_info.value) finally: # Restore original SPECIAL_AGENTS_DIR @@ -1038,3 +1004,50 @@ def __init__(self): assert "random_folder" not in agents assert "data" not in agents assert "tmp" not in agents + + def test_validate_agent_name_rejects_dotted_paths(self): + """Agent names with dots are rejected to prevent arbitrary module imports.""" + with tempfile.TemporaryDirectory() as temp_dir: + loader = AgentLoader(temp_dir) + for name in ["os.path", "sys.modules", "subprocess.call"]: + with pytest.raises(ValueError, match="Invalid agent name"): + loader.load_agent(name) + + def test_validate_agent_name_rejects_relative_imports(self): + """Agent names starting with dots are rejected.""" + with tempfile.TemporaryDirectory() as temp_dir: + loader = AgentLoader(temp_dir) + for name in ["..foo", ".bar", "...baz"]: + with pytest.raises(ValueError, match="Invalid agent name"): + loader.load_agent(name) + + def test_validate_agent_name_rejects_path_separators(self): + """Agent names with slashes or special characters are rejected.""" + with tempfile.TemporaryDirectory() as temp_dir: + loader = AgentLoader(temp_dir) + for name in ["foo/bar", "foo\\bar", "foo-bar", "foo bar"]: + with pytest.raises(ValueError, match="Invalid agent name"): + loader.load_agent(name) + + def test_validate_agent_name_allows_valid_names(self): + """Valid Python identifiers that exist on disk pass validation.""" + with tempfile.TemporaryDirectory() as temp_dir: + temp_path = Path(temp_dir) + for name in ["my_agent", "Agent1", "_private"]: + (temp_path / name).mkdir(exist_ok=True) + loader = AgentLoader(temp_dir) + for name in ["my_agent", "Agent1", "_private"]: + # Should not raise ValueError for name validation; + # may raise other errors because the agent has no root_agent + with pytest.raises(Exception) as exc_info: + loader.load_agent(name) + assert "Invalid agent name" not in str(exc_info.value) + assert "Agent not found" not in str(exc_info.value) + + def test_validate_agent_name_rejects_nonexistent_agent(self): + """Valid identifiers that don't exist on disk are rejected before import.""" + with tempfile.TemporaryDirectory() as temp_dir: + loader = AgentLoader(temp_dir) + # 'subprocess' is a valid identifier but shouldn't be importable as an agent + with pytest.raises(ValueError, match="Agent not found"): + loader.load_agent("subprocess") From 7aa1f5252c15caaf40fde73ac4283fa0a48d8a96 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 26 Mar 2026 09:38:11 -0700 Subject: [PATCH 081/192] feat(bigquery): Migrate 1P BQ Toolset - Migrate `tools/bigquery` to `integrations/bigquery` to match standard ADK layout. - Update unit tests to fully assert integration migration. PiperOrigin-RevId: 889891348 --- .../adk/integrations/bigquery/__init__.py | 49 +++++++++++++++++++ .../bigquery/bigquery_credentials.py | 2 +- .../bigquery/bigquery_toolset.py | 0 .../bigquery/client.py | 0 .../bigquery/config.py | 0 .../bigquery/data_insights_tool.py | 0 .../bigquery/metadata_tool.py | 0 .../bigquery/query_tool.py | 2 +- .../bigquery/search_tool.py | 0 src/google/adk/tools/bigquery/__init__.py | 25 +++++++--- .../bigquery/test_bigquery_client.py | 6 +-- .../bigquery/test_bigquery_credentials.py | 2 +- .../test_bigquery_data_insights_tool.py | 2 +- .../bigquery/test_bigquery_metadata_tool.py | 6 +-- .../bigquery/test_bigquery_query_tool.py | 12 ++--- .../bigquery/test_bigquery_search_tool.py | 6 +-- .../bigquery/test_bigquery_tool_config.py | 2 +- .../bigquery/test_bigquery_toolset.py | 6 +-- ...k_data_insights_penguins_highest_mass.yaml | 0 .../tools/data_agent/test_data_agent_tool.py | 7 ++- 20 files changed, 97 insertions(+), 30 deletions(-) create mode 100644 src/google/adk/integrations/bigquery/__init__.py rename src/google/adk/{tools => integrations}/bigquery/bigquery_credentials.py (95%) rename src/google/adk/{tools => integrations}/bigquery/bigquery_toolset.py (100%) rename src/google/adk/{tools => integrations}/bigquery/client.py (100%) rename src/google/adk/{tools => integrations}/bigquery/config.py (100%) rename src/google/adk/{tools => integrations}/bigquery/data_insights_tool.py (100%) rename src/google/adk/{tools => integrations}/bigquery/metadata_tool.py (100%) rename src/google/adk/{tools => integrations}/bigquery/query_tool.py (99%) rename src/google/adk/{tools => integrations}/bigquery/search_tool.py (100%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_client.py (97%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_credentials.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_data_insights_tool.py (99%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_metadata_tool.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_query_tool.py (99%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_search_tool.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_tool_config.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_toolset.py (95%) rename tests/unittests/{tools => integrations}/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml (100%) diff --git a/src/google/adk/integrations/bigquery/__init__.py b/src/google/adk/integrations/bigquery/__init__.py new file mode 100644 index 0000000000..021ed08a50 --- /dev/null +++ b/src/google/adk/integrations/bigquery/__init__.py @@ -0,0 +1,49 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""BigQuery Integration. + +This module provides tools and skills for interacting with BigQuery. +""" + +from __future__ import annotations + +import typing + +if typing.TYPE_CHECKING: + from .bigquery_credentials import BigQueryCredentialsConfig + from .bigquery_skill import get_bigquery_skill + from .bigquery_toolset import BigQueryToolset + +# Map attribute names to relative module paths +_lazy_imports = { + "BigQueryCredentialsConfig": ".bigquery_credentials", + "BigQueryToolset": ".bigquery_toolset", + "get_bigquery_skill": ".bigquery_skill", +} + + +def __getattr__(name: str) -> any: + if name in _lazy_imports: + import importlib + + module_path = _lazy_imports[name] + # __name__ is 'google.adk.integrations.bigquery' + module = importlib.import_module(module_path, __name__) + return getattr(module, name) + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + +def __dir__() -> list[str]: + return list(_lazy_imports.keys()) diff --git a/src/google/adk/tools/bigquery/bigquery_credentials.py b/src/google/adk/integrations/bigquery/bigquery_credentials.py similarity index 95% rename from src/google/adk/tools/bigquery/bigquery_credentials.py rename to src/google/adk/integrations/bigquery/bigquery_credentials.py index c491c52ee6..d002193bd0 100644 --- a/src/google/adk/tools/bigquery/bigquery_credentials.py +++ b/src/google/adk/integrations/bigquery/bigquery_credentials.py @@ -16,7 +16,7 @@ from ...features import experimental from ...features import FeatureName -from .._google_credentials import BaseGoogleCredentialsConfig +from ...tools._google_credentials import BaseGoogleCredentialsConfig BIGQUERY_TOKEN_CACHE_KEY = "bigquery_token_cache" BIGQUERY_SCOPES = [ diff --git a/src/google/adk/tools/bigquery/bigquery_toolset.py b/src/google/adk/integrations/bigquery/bigquery_toolset.py similarity index 100% rename from src/google/adk/tools/bigquery/bigquery_toolset.py rename to src/google/adk/integrations/bigquery/bigquery_toolset.py diff --git a/src/google/adk/tools/bigquery/client.py b/src/google/adk/integrations/bigquery/client.py similarity index 100% rename from src/google/adk/tools/bigquery/client.py rename to src/google/adk/integrations/bigquery/client.py diff --git a/src/google/adk/tools/bigquery/config.py b/src/google/adk/integrations/bigquery/config.py similarity index 100% rename from src/google/adk/tools/bigquery/config.py rename to src/google/adk/integrations/bigquery/config.py diff --git a/src/google/adk/tools/bigquery/data_insights_tool.py b/src/google/adk/integrations/bigquery/data_insights_tool.py similarity index 100% rename from src/google/adk/tools/bigquery/data_insights_tool.py rename to src/google/adk/integrations/bigquery/data_insights_tool.py diff --git a/src/google/adk/tools/bigquery/metadata_tool.py b/src/google/adk/integrations/bigquery/metadata_tool.py similarity index 100% rename from src/google/adk/tools/bigquery/metadata_tool.py rename to src/google/adk/integrations/bigquery/metadata_tool.py diff --git a/src/google/adk/tools/bigquery/query_tool.py b/src/google/adk/integrations/bigquery/query_tool.py similarity index 99% rename from src/google/adk/tools/bigquery/query_tool.py rename to src/google/adk/integrations/bigquery/query_tool.py index d5b1264fa5..1721db6781 100644 --- a/src/google/adk/tools/bigquery/query_tool.py +++ b/src/google/adk/integrations/bigquery/query_tool.py @@ -25,7 +25,7 @@ from google.cloud import bigquery from . import client -from ..tool_context import ToolContext +from ...tools.tool_context import ToolContext from .config import BigQueryToolConfig from .config import WriteMode diff --git a/src/google/adk/tools/bigquery/search_tool.py b/src/google/adk/integrations/bigquery/search_tool.py similarity index 100% rename from src/google/adk/tools/bigquery/search_tool.py rename to src/google/adk/integrations/bigquery/search_tool.py diff --git a/src/google/adk/tools/bigquery/__init__.py b/src/google/adk/tools/bigquery/__init__.py index 54cc19f889..af7075fa02 100644 --- a/src/google/adk/tools/bigquery/__init__.py +++ b/src/google/adk/tools/bigquery/__init__.py @@ -27,10 +27,23 @@ execute_sql can't arbitrarily mutate existing data. """ -from .bigquery_credentials import BigQueryCredentialsConfig -from .bigquery_toolset import BigQueryToolset +import importlib +import sys -__all__ = [ - "BigQueryToolset", - "BigQueryCredentialsConfig", -] +# Redirect this module to integrations/bigquery for backward compatibility. +_TARGET = "google.adk.integrations.bigquery" + +try: + _mod = importlib.import_module(_TARGET) + sys.modules[__name__] = _mod +except ImportError: + # Fallback for static analysis or if import fails during transition + from google.adk.integrations.bigquery import BigQueryCredentialsConfig + from google.adk.integrations.bigquery import BigQueryToolset + from google.adk.integrations.bigquery import get_bigquery_skill + + __all__ = [ + "BigQueryToolset", + "BigQueryCredentialsConfig", + "get_bigquery_skill", + ] diff --git a/tests/unittests/tools/bigquery/test_bigquery_client.py b/tests/unittests/integrations/bigquery/test_bigquery_client.py similarity index 97% rename from tests/unittests/tools/bigquery/test_bigquery_client.py rename to tests/unittests/integrations/bigquery/test_bigquery_client.py index d8d5e726ee..a89fbf872f 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_client.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_client.py @@ -18,9 +18,9 @@ from unittest import mock import google.adk -from google.adk.tools.bigquery.client import DP_USER_AGENT -from google.adk.tools.bigquery.client import get_bigquery_client -from google.adk.tools.bigquery.client import get_dataplex_catalog_client +from google.adk.integrations.bigquery.client import DP_USER_AGENT +from google.adk.integrations.bigquery.client import get_bigquery_client +from google.adk.integrations.bigquery.client import get_dataplex_catalog_client from google.api_core.gapic_v1 import client_info as gapic_client_info import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/tools/bigquery/test_bigquery_credentials.py b/tests/unittests/integrations/bigquery/test_bigquery_credentials.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_credentials.py rename to tests/unittests/integrations/bigquery/test_bigquery_credentials.py index f0c188d0a4..b7072b0ba1 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_credentials.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_credentials.py @@ -14,7 +14,7 @@ from unittest import mock -from google.adk.tools.bigquery import BigQueryCredentialsConfig +from google.adk.integrations.bigquery import BigQueryCredentialsConfig # Mock the Google OAuth and API dependencies import google.auth.credentials import google.oauth2.credentials diff --git a/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py similarity index 99% rename from tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py index b62c68358c..91d0b6937e 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py @@ -15,7 +15,7 @@ import pathlib from unittest import mock -from google.adk.tools.bigquery import data_insights_tool +from google.adk.integrations.bigquery import data_insights_tool import pytest import yaml diff --git a/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py index a0dda5383f..c2db210ff7 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py @@ -17,9 +17,9 @@ import os from unittest import mock -from google.adk.tools.bigquery import client as bq_client_lib -from google.adk.tools.bigquery import metadata_tool -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery import client as bq_client_lib +from google.adk.integrations.bigquery import metadata_tool +from google.adk.integrations.bigquery.config import BigQueryToolConfig import google.auth from google.auth.exceptions import DefaultCredentialsError from google.cloud import bigquery diff --git a/tests/unittests/tools/bigquery/test_bigquery_query_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py similarity index 99% rename from tests/unittests/tools/bigquery/test_bigquery_query_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_query_tool.py index 150cdb7569..3a851014a8 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_query_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py @@ -24,13 +24,13 @@ import dateutil import dateutil.relativedelta +from google.adk.integrations.bigquery import BigQueryCredentialsConfig +from google.adk.integrations.bigquery import BigQueryToolset +from google.adk.integrations.bigquery import client as bq_client_lib +from google.adk.integrations.bigquery import query_tool +from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery.config import WriteMode from google.adk.tools.base_tool import BaseTool -from google.adk.tools.bigquery import BigQueryCredentialsConfig -from google.adk.tools.bigquery import BigQueryToolset -from google.adk.tools.bigquery import client as bq_client_lib -from google.adk.tools.bigquery import query_tool -from google.adk.tools.bigquery.config import BigQueryToolConfig -from google.adk.tools.bigquery.config import WriteMode from google.adk.tools.tool_context import ToolContext import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/tools/bigquery/test_bigquery_search_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_search_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_search_tool.py index 0ccdc9e18e..f2dc21c5fd 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_search_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py @@ -53,8 +53,8 @@ class MockBaseModel: sys.modules["fastapi.openapi.models"] = mock.MagicMock() -from google.adk.tools.bigquery import search_tool -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery import search_tool +from google.adk.integrations.bigquery.config import BigQueryToolConfig from google.api_core import exceptions as api_exceptions from google.auth.credentials import Credentials from google.cloud import dataplex_v1 @@ -107,7 +107,7 @@ def setUp(self): # Patch get_dataplex_catalog_client self.mock_get_dataplex_client = self.enter_context( mock.patch( - "google.adk.tools.bigquery.client.get_dataplex_catalog_client", + "google.adk.integrations.bigquery.client.get_dataplex_catalog_client", autospec=True, ) ) diff --git a/tests/unittests/tools/bigquery/test_bigquery_tool_config.py b/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_tool_config.py rename to tests/unittests/integrations/bigquery/test_bigquery_tool_config.py index 705f3d87b8..052da85953 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_tool_config.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py @@ -17,7 +17,7 @@ import warnings from google.adk.features._feature_registry import _WARNED_FEATURES -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery.config import BigQueryToolConfig import pytest diff --git a/tests/unittests/tools/bigquery/test_bigquery_toolset.py b/tests/unittests/integrations/bigquery/test_bigquery_toolset.py similarity index 95% rename from tests/unittests/tools/bigquery/test_bigquery_toolset.py rename to tests/unittests/integrations/bigquery/test_bigquery_toolset.py index 0eced4b168..a8ff2e649c 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_toolset.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_toolset.py @@ -14,9 +14,9 @@ from __future__ import annotations -from google.adk.tools.bigquery import BigQueryCredentialsConfig -from google.adk.tools.bigquery import BigQueryToolset -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery import BigQueryCredentialsConfig +from google.adk.integrations.bigquery import BigQueryToolset +from google.adk.integrations.bigquery.config import BigQueryToolConfig from google.adk.tools.google_tool import GoogleTool import pytest diff --git a/tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml b/tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml similarity index 100% rename from tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml rename to tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml diff --git a/tests/unittests/tools/data_agent/test_data_agent_tool.py b/tests/unittests/tools/data_agent/test_data_agent_tool.py index 54b3e8d327..33447bde6e 100644 --- a/tests/unittests/tools/data_agent/test_data_agent_tool.py +++ b/tests/unittests/tools/data_agent/test_data_agent_tool.py @@ -153,7 +153,12 @@ def test_ask_data_agent_exception( def test_get_stream_from_file(mock_post, case_file_path): """Runs a full integration test for the _get_stream function using data from a specific file.""" # 1. Construct the full, absolute path to the data file - full_path = pathlib.Path(__file__).parent.parent / "bigquery" / case_file_path + full_path = ( + pathlib.Path(__file__).parent.parent.parent + / "integrations" + / "bigquery" + / case_file_path + ) # 2. Load the test case data from the specified YAML file with open(full_path, "r", encoding="utf-8") as f: From 96e845ef8cf66b288d937e293a88cdb28b09417c Mon Sep 17 00:00:00 2001 From: Sasha Sobran Date: Thu, 26 Mar 2026 10:15:51 -0700 Subject: [PATCH 082/192] fix: enforce allowed file extensions for GET requests in the builder API Co-authored-by: Sasha Sobran PiperOrigin-RevId: 889912141 --- src/google/adk/cli/fast_api.py | 12 +++++++--- tests/unittests/cli/test_fast_api.py | 34 ++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/google/adk/cli/fast_api.py b/src/google/adk/cli/fast_api.py index 4d666f78d3..0b6f3fb6fe 100644 --- a/src/google/adk/cli/fast_api.py +++ b/src/google/adk/cli/fast_api.py @@ -291,7 +291,7 @@ def _normalize_relative_path(path: str) -> str: def _has_parent_reference(path: str) -> bool: return any(part == ".." for part in path.split("/")) - _ALLOWED_UPLOAD_EXTENSIONS = frozenset({".yaml", ".yml"}) + _ALLOWED_EXTENSIONS = frozenset({".yaml", ".yml"}) def _parse_upload_filename(filename: Optional[str]) -> tuple[str, str]: if not filename: @@ -307,10 +307,10 @@ def _parse_upload_filename(filename: Optional[str]) -> tuple[str, str]: if _has_parent_reference(rel_path): raise ValueError(f"Path traversal rejected: {filename!r}") ext = os.path.splitext(rel_path)[1].lower() - if ext not in _ALLOWED_UPLOAD_EXTENSIONS: + if ext not in _ALLOWED_EXTENSIONS: raise ValueError( f"File type not allowed: {rel_path!r}" - f" (allowed: {', '.join(sorted(_ALLOWED_UPLOAD_EXTENSIONS))})" + f" (allowed: {', '.join(sorted(_ALLOWED_EXTENSIONS))})" ) return app_name, rel_path @@ -322,6 +322,12 @@ def _parse_file_path(file_path: str) -> str: raise ValueError(f"Absolute file_path rejected: {file_path!r}") if _has_parent_reference(file_path): raise ValueError(f"Path traversal rejected: {file_path!r}") + ext = os.path.splitext(file_path)[1].lower() + if ext not in _ALLOWED_EXTENSIONS: + raise ValueError( + f"File type not allowed: {file_path!r}" + f" (allowed: {', '.join(sorted(_ALLOWED_EXTENSIONS))})" + ) return file_path def _resolve_under_dir(root_dir: Path, rel_path: str) -> Path: diff --git a/tests/unittests/cli/test_fast_api.py b/tests/unittests/cli/test_fast_api.py index e53d5a918c..15bc908ddb 100755 --- a/tests/unittests/cli/test_fast_api.py +++ b/tests/unittests/cli/test_fast_api.py @@ -1759,6 +1759,40 @@ def test_builder_save_allows_yaml_files(builder_test_client, tmp_path): assert response.json() is True +def test_builder_get_rejects_non_yaml_file_paths(builder_test_client, tmp_path): + """GET /builder/app/{app_name}?file_path=... rejects non-YAML extensions.""" + app_root = tmp_path / "app" + app_root.mkdir(parents=True, exist_ok=True) + (app_root / ".env").write_text("SECRET=supersecret\n") + (app_root / "agent.py").write_text("root_agent = None\n") + (app_root / "config.json").write_text("{}\n") + + for file_path in [".env", "agent.py", "config.json"]: + response = builder_test_client.get( + f"/builder/app/app?file_path={file_path}" + ) + assert response.status_code == 200, f"Expected 200 for {file_path}" + assert response.text == "", f"Expected empty response for {file_path}" + + +def test_builder_get_allows_yaml_file_paths(builder_test_client, tmp_path): + """GET /builder/app/{app_name}?file_path=... allows YAML extensions.""" + app_root = tmp_path / "app" + app_root.mkdir(parents=True, exist_ok=True) + (app_root / "sub_agent.yaml").write_text("name: sub\n") + (app_root / "tool.yml").write_text("name: tool\n") + + response = builder_test_client.get( + "/builder/app/app?file_path=sub_agent.yaml" + ) + assert response.status_code == 200 + assert response.text == "name: sub\n" + + response = builder_test_client.get("/builder/app/app?file_path=tool.yml") + assert response.status_code == 200 + assert response.text == "name: tool\n" + + def test_builder_endpoints_not_registered_without_web( mock_session_service, mock_artifact_service, From e6a5de50aae83ed3a6f8406dbd99be3a4fdad3e3 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 26 Mar 2026 10:15:57 -0700 Subject: [PATCH 083/192] ADK changes PiperOrigin-RevId: 889912199 --- .../adk/integrations/bigquery/__init__.py | 49 ------------------- src/google/adk/tools/bigquery/__init__.py | 25 +++------- .../bigquery/bigquery_credentials.py | 2 +- .../bigquery/bigquery_toolset.py | 0 .../bigquery/client.py | 0 .../bigquery/config.py | 0 .../bigquery/data_insights_tool.py | 0 .../bigquery/metadata_tool.py | 0 .../bigquery/query_tool.py | 2 +- .../bigquery/search_tool.py | 0 .../bigquery/test_bigquery_client.py | 6 +-- .../bigquery/test_bigquery_credentials.py | 2 +- .../test_bigquery_data_insights_tool.py | 2 +- .../bigquery/test_bigquery_metadata_tool.py | 6 +-- .../bigquery/test_bigquery_query_tool.py | 12 ++--- .../bigquery/test_bigquery_search_tool.py | 6 +-- .../bigquery/test_bigquery_tool_config.py | 2 +- .../bigquery/test_bigquery_toolset.py | 6 +-- ...k_data_insights_penguins_highest_mass.yaml | 0 .../tools/data_agent/test_data_agent_tool.py | 7 +-- 20 files changed, 30 insertions(+), 97 deletions(-) delete mode 100644 src/google/adk/integrations/bigquery/__init__.py rename src/google/adk/{integrations => tools}/bigquery/bigquery_credentials.py (95%) rename src/google/adk/{integrations => tools}/bigquery/bigquery_toolset.py (100%) rename src/google/adk/{integrations => tools}/bigquery/client.py (100%) rename src/google/adk/{integrations => tools}/bigquery/config.py (100%) rename src/google/adk/{integrations => tools}/bigquery/data_insights_tool.py (100%) rename src/google/adk/{integrations => tools}/bigquery/metadata_tool.py (100%) rename src/google/adk/{integrations => tools}/bigquery/query_tool.py (99%) rename src/google/adk/{integrations => tools}/bigquery/search_tool.py (100%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_client.py (97%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_credentials.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_data_insights_tool.py (99%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_metadata_tool.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_query_tool.py (99%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_search_tool.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_tool_config.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_toolset.py (95%) rename tests/unittests/{integrations => tools}/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml (100%) diff --git a/src/google/adk/integrations/bigquery/__init__.py b/src/google/adk/integrations/bigquery/__init__.py deleted file mode 100644 index 021ed08a50..0000000000 --- a/src/google/adk/integrations/bigquery/__init__.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""BigQuery Integration. - -This module provides tools and skills for interacting with BigQuery. -""" - -from __future__ import annotations - -import typing - -if typing.TYPE_CHECKING: - from .bigquery_credentials import BigQueryCredentialsConfig - from .bigquery_skill import get_bigquery_skill - from .bigquery_toolset import BigQueryToolset - -# Map attribute names to relative module paths -_lazy_imports = { - "BigQueryCredentialsConfig": ".bigquery_credentials", - "BigQueryToolset": ".bigquery_toolset", - "get_bigquery_skill": ".bigquery_skill", -} - - -def __getattr__(name: str) -> any: - if name in _lazy_imports: - import importlib - - module_path = _lazy_imports[name] - # __name__ is 'google.adk.integrations.bigquery' - module = importlib.import_module(module_path, __name__) - return getattr(module, name) - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") - - -def __dir__() -> list[str]: - return list(_lazy_imports.keys()) diff --git a/src/google/adk/tools/bigquery/__init__.py b/src/google/adk/tools/bigquery/__init__.py index af7075fa02..54cc19f889 100644 --- a/src/google/adk/tools/bigquery/__init__.py +++ b/src/google/adk/tools/bigquery/__init__.py @@ -27,23 +27,10 @@ execute_sql can't arbitrarily mutate existing data. """ -import importlib -import sys +from .bigquery_credentials import BigQueryCredentialsConfig +from .bigquery_toolset import BigQueryToolset -# Redirect this module to integrations/bigquery for backward compatibility. -_TARGET = "google.adk.integrations.bigquery" - -try: - _mod = importlib.import_module(_TARGET) - sys.modules[__name__] = _mod -except ImportError: - # Fallback for static analysis or if import fails during transition - from google.adk.integrations.bigquery import BigQueryCredentialsConfig - from google.adk.integrations.bigquery import BigQueryToolset - from google.adk.integrations.bigquery import get_bigquery_skill - - __all__ = [ - "BigQueryToolset", - "BigQueryCredentialsConfig", - "get_bigquery_skill", - ] +__all__ = [ + "BigQueryToolset", + "BigQueryCredentialsConfig", +] diff --git a/src/google/adk/integrations/bigquery/bigquery_credentials.py b/src/google/adk/tools/bigquery/bigquery_credentials.py similarity index 95% rename from src/google/adk/integrations/bigquery/bigquery_credentials.py rename to src/google/adk/tools/bigquery/bigquery_credentials.py index d002193bd0..c491c52ee6 100644 --- a/src/google/adk/integrations/bigquery/bigquery_credentials.py +++ b/src/google/adk/tools/bigquery/bigquery_credentials.py @@ -16,7 +16,7 @@ from ...features import experimental from ...features import FeatureName -from ...tools._google_credentials import BaseGoogleCredentialsConfig +from .._google_credentials import BaseGoogleCredentialsConfig BIGQUERY_TOKEN_CACHE_KEY = "bigquery_token_cache" BIGQUERY_SCOPES = [ diff --git a/src/google/adk/integrations/bigquery/bigquery_toolset.py b/src/google/adk/tools/bigquery/bigquery_toolset.py similarity index 100% rename from src/google/adk/integrations/bigquery/bigquery_toolset.py rename to src/google/adk/tools/bigquery/bigquery_toolset.py diff --git a/src/google/adk/integrations/bigquery/client.py b/src/google/adk/tools/bigquery/client.py similarity index 100% rename from src/google/adk/integrations/bigquery/client.py rename to src/google/adk/tools/bigquery/client.py diff --git a/src/google/adk/integrations/bigquery/config.py b/src/google/adk/tools/bigquery/config.py similarity index 100% rename from src/google/adk/integrations/bigquery/config.py rename to src/google/adk/tools/bigquery/config.py diff --git a/src/google/adk/integrations/bigquery/data_insights_tool.py b/src/google/adk/tools/bigquery/data_insights_tool.py similarity index 100% rename from src/google/adk/integrations/bigquery/data_insights_tool.py rename to src/google/adk/tools/bigquery/data_insights_tool.py diff --git a/src/google/adk/integrations/bigquery/metadata_tool.py b/src/google/adk/tools/bigquery/metadata_tool.py similarity index 100% rename from src/google/adk/integrations/bigquery/metadata_tool.py rename to src/google/adk/tools/bigquery/metadata_tool.py diff --git a/src/google/adk/integrations/bigquery/query_tool.py b/src/google/adk/tools/bigquery/query_tool.py similarity index 99% rename from src/google/adk/integrations/bigquery/query_tool.py rename to src/google/adk/tools/bigquery/query_tool.py index 1721db6781..d5b1264fa5 100644 --- a/src/google/adk/integrations/bigquery/query_tool.py +++ b/src/google/adk/tools/bigquery/query_tool.py @@ -25,7 +25,7 @@ from google.cloud import bigquery from . import client -from ...tools.tool_context import ToolContext +from ..tool_context import ToolContext from .config import BigQueryToolConfig from .config import WriteMode diff --git a/src/google/adk/integrations/bigquery/search_tool.py b/src/google/adk/tools/bigquery/search_tool.py similarity index 100% rename from src/google/adk/integrations/bigquery/search_tool.py rename to src/google/adk/tools/bigquery/search_tool.py diff --git a/tests/unittests/integrations/bigquery/test_bigquery_client.py b/tests/unittests/tools/bigquery/test_bigquery_client.py similarity index 97% rename from tests/unittests/integrations/bigquery/test_bigquery_client.py rename to tests/unittests/tools/bigquery/test_bigquery_client.py index a89fbf872f..d8d5e726ee 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_client.py +++ b/tests/unittests/tools/bigquery/test_bigquery_client.py @@ -18,9 +18,9 @@ from unittest import mock import google.adk -from google.adk.integrations.bigquery.client import DP_USER_AGENT -from google.adk.integrations.bigquery.client import get_bigquery_client -from google.adk.integrations.bigquery.client import get_dataplex_catalog_client +from google.adk.tools.bigquery.client import DP_USER_AGENT +from google.adk.tools.bigquery.client import get_bigquery_client +from google.adk.tools.bigquery.client import get_dataplex_catalog_client from google.api_core.gapic_v1 import client_info as gapic_client_info import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/integrations/bigquery/test_bigquery_credentials.py b/tests/unittests/tools/bigquery/test_bigquery_credentials.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_credentials.py rename to tests/unittests/tools/bigquery/test_bigquery_credentials.py index b7072b0ba1..f0c188d0a4 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_credentials.py +++ b/tests/unittests/tools/bigquery/test_bigquery_credentials.py @@ -14,7 +14,7 @@ from unittest import mock -from google.adk.integrations.bigquery import BigQueryCredentialsConfig +from google.adk.tools.bigquery import BigQueryCredentialsConfig # Mock the Google OAuth and API dependencies import google.auth.credentials import google.oauth2.credentials diff --git a/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py b/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py similarity index 99% rename from tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py index 91d0b6937e..b62c68358c 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py @@ -15,7 +15,7 @@ import pathlib from unittest import mock -from google.adk.integrations.bigquery import data_insights_tool +from google.adk.tools.bigquery import data_insights_tool import pytest import yaml diff --git a/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py b/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py index c2db210ff7..a0dda5383f 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py @@ -17,9 +17,9 @@ import os from unittest import mock -from google.adk.integrations.bigquery import client as bq_client_lib -from google.adk.integrations.bigquery import metadata_tool -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery import client as bq_client_lib +from google.adk.tools.bigquery import metadata_tool +from google.adk.tools.bigquery.config import BigQueryToolConfig import google.auth from google.auth.exceptions import DefaultCredentialsError from google.cloud import bigquery diff --git a/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py b/tests/unittests/tools/bigquery/test_bigquery_query_tool.py similarity index 99% rename from tests/unittests/integrations/bigquery/test_bigquery_query_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_query_tool.py index 3a851014a8..150cdb7569 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_query_tool.py @@ -24,13 +24,13 @@ import dateutil import dateutil.relativedelta -from google.adk.integrations.bigquery import BigQueryCredentialsConfig -from google.adk.integrations.bigquery import BigQueryToolset -from google.adk.integrations.bigquery import client as bq_client_lib -from google.adk.integrations.bigquery import query_tool -from google.adk.integrations.bigquery.config import BigQueryToolConfig -from google.adk.integrations.bigquery.config import WriteMode from google.adk.tools.base_tool import BaseTool +from google.adk.tools.bigquery import BigQueryCredentialsConfig +from google.adk.tools.bigquery import BigQueryToolset +from google.adk.tools.bigquery import client as bq_client_lib +from google.adk.tools.bigquery import query_tool +from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery.config import WriteMode from google.adk.tools.tool_context import ToolContext import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py b/tests/unittests/tools/bigquery/test_bigquery_search_tool.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_search_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_search_tool.py index f2dc21c5fd..0ccdc9e18e 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_search_tool.py @@ -53,8 +53,8 @@ class MockBaseModel: sys.modules["fastapi.openapi.models"] = mock.MagicMock() -from google.adk.integrations.bigquery import search_tool -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery import search_tool +from google.adk.tools.bigquery.config import BigQueryToolConfig from google.api_core import exceptions as api_exceptions from google.auth.credentials import Credentials from google.cloud import dataplex_v1 @@ -107,7 +107,7 @@ def setUp(self): # Patch get_dataplex_catalog_client self.mock_get_dataplex_client = self.enter_context( mock.patch( - "google.adk.integrations.bigquery.client.get_dataplex_catalog_client", + "google.adk.tools.bigquery.client.get_dataplex_catalog_client", autospec=True, ) ) diff --git a/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py b/tests/unittests/tools/bigquery/test_bigquery_tool_config.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_tool_config.py rename to tests/unittests/tools/bigquery/test_bigquery_tool_config.py index 052da85953..705f3d87b8 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py +++ b/tests/unittests/tools/bigquery/test_bigquery_tool_config.py @@ -17,7 +17,7 @@ import warnings from google.adk.features._feature_registry import _WARNED_FEATURES -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery.config import BigQueryToolConfig import pytest diff --git a/tests/unittests/integrations/bigquery/test_bigquery_toolset.py b/tests/unittests/tools/bigquery/test_bigquery_toolset.py similarity index 95% rename from tests/unittests/integrations/bigquery/test_bigquery_toolset.py rename to tests/unittests/tools/bigquery/test_bigquery_toolset.py index a8ff2e649c..0eced4b168 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_toolset.py +++ b/tests/unittests/tools/bigquery/test_bigquery_toolset.py @@ -14,9 +14,9 @@ from __future__ import annotations -from google.adk.integrations.bigquery import BigQueryCredentialsConfig -from google.adk.integrations.bigquery import BigQueryToolset -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery import BigQueryCredentialsConfig +from google.adk.tools.bigquery import BigQueryToolset +from google.adk.tools.bigquery.config import BigQueryToolConfig from google.adk.tools.google_tool import GoogleTool import pytest diff --git a/tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml b/tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml similarity index 100% rename from tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml rename to tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml diff --git a/tests/unittests/tools/data_agent/test_data_agent_tool.py b/tests/unittests/tools/data_agent/test_data_agent_tool.py index 33447bde6e..54b3e8d327 100644 --- a/tests/unittests/tools/data_agent/test_data_agent_tool.py +++ b/tests/unittests/tools/data_agent/test_data_agent_tool.py @@ -153,12 +153,7 @@ def test_ask_data_agent_exception( def test_get_stream_from_file(mock_post, case_file_path): """Runs a full integration test for the _get_stream function using data from a specific file.""" # 1. Construct the full, absolute path to the data file - full_path = ( - pathlib.Path(__file__).parent.parent.parent - / "integrations" - / "bigquery" - / case_file_path - ) + full_path = pathlib.Path(__file__).parent.parent / "bigquery" / case_file_path # 2. Load the test case data from the specified YAML file with open(full_path, "r", encoding="utf-8") as f: From 2f90c1ac09638517b08cd96a17d595f0968f0bf6 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 26 Mar 2026 10:56:30 -0700 Subject: [PATCH 084/192] feat: Optional GCP project and credential for GCS access PiperOrigin-RevId: 889935432 --- src/google/adk/skills/_utils.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/google/adk/skills/_utils.py b/src/google/adk/skills/_utils.py index 0fdb553ee3..cab70a8d4b 100644 --- a/src/google/adk/skills/_utils.py +++ b/src/google/adk/skills/_utils.py @@ -20,6 +20,7 @@ import pathlib from typing import Union +from google.auth import credentials as auth from google.cloud import storage from pydantic import ValidationError import yaml @@ -301,6 +302,8 @@ def _list_skills_in_dir( def _list_skills_in_gcs_dir( bucket_name: str, skills_base_path: str = "", + project_id: str | None = None, + credentials: auth.Credentials | None = None, ) -> Dict[str, models.Frontmatter]: """List skills in a GCS directory. @@ -311,7 +314,7 @@ def _list_skills_in_gcs_dir( Returns: Dictionary mapping skill IDs to their frontmatter. """ - client = storage.Client() + client = storage.Client(project=project_id, credentials=credentials) bucket = client.bucket(bucket_name) base_prefix = skills_base_path.strip("/") @@ -350,6 +353,8 @@ def _load_skill_from_gcs_dir( bucket_name: str, skill_id: str, skills_base_path: str = "", + project_id: str | None = None, + credentials: auth.Credentials | None = None, ) -> models.Skill: """Load a complete skill from a GCS directory. @@ -357,6 +362,8 @@ def _load_skill_from_gcs_dir( bucket_name: Name of the GCS bucket. skill_id: The ID of the skill (directory name). skills_base_path: Base directory within the bucket (e.g., 'path/to/skills'). + project_id: Project ID to use for GCS client. + credentials: Credentials to use for GCS client. Returns: Skill object with all components loaded. @@ -366,7 +373,8 @@ def _load_skill_from_gcs_dir( ValueError: If SKILL.md is invalid or the skill name does not match the directory name. """ - client = storage.Client() + + client = storage.Client(project=project_id, credentials=credentials) bucket = client.bucket(bucket_name) base_prefix = skills_base_path.strip("/") From 08be44295de614f30e686113897af7fe9c228751 Mon Sep 17 00:00:00 2001 From: Haiyuan Cao Date: Thu, 26 Mar 2026 11:48:33 -0700 Subject: [PATCH 085/192] feat(bigquery): Migrate 1P BQ Toolset - Migrate `tools/bigquery` to `integrations/bigquery` to match standard ADK layout. - Update unit tests to fully assert integration migration. Co-authored-by: Haiyuan Cao PiperOrigin-RevId: 889963735 --- .../adk/integrations/bigquery/__init__.py | 49 +++++++++++++++++++ .../bigquery/bigquery_credentials.py | 2 +- .../bigquery/bigquery_toolset.py | 0 .../bigquery/client.py | 0 .../bigquery/config.py | 0 .../bigquery/data_insights_tool.py | 0 .../bigquery/metadata_tool.py | 0 .../bigquery/query_tool.py | 2 +- .../bigquery/search_tool.py | 0 src/google/adk/tools/bigquery/__init__.py | 25 +++++++--- .../bigquery/test_bigquery_client.py | 6 +-- .../bigquery/test_bigquery_credentials.py | 2 +- .../test_bigquery_data_insights_tool.py | 2 +- .../bigquery/test_bigquery_metadata_tool.py | 6 +-- .../bigquery/test_bigquery_query_tool.py | 12 ++--- .../bigquery/test_bigquery_search_tool.py | 6 +-- .../bigquery/test_bigquery_tool_config.py | 2 +- .../bigquery/test_bigquery_toolset.py | 6 +-- ...k_data_insights_penguins_highest_mass.yaml | 0 .../tools/data_agent/test_data_agent_tool.py | 7 ++- 20 files changed, 97 insertions(+), 30 deletions(-) create mode 100644 src/google/adk/integrations/bigquery/__init__.py rename src/google/adk/{tools => integrations}/bigquery/bigquery_credentials.py (95%) rename src/google/adk/{tools => integrations}/bigquery/bigquery_toolset.py (100%) rename src/google/adk/{tools => integrations}/bigquery/client.py (100%) rename src/google/adk/{tools => integrations}/bigquery/config.py (100%) rename src/google/adk/{tools => integrations}/bigquery/data_insights_tool.py (100%) rename src/google/adk/{tools => integrations}/bigquery/metadata_tool.py (100%) rename src/google/adk/{tools => integrations}/bigquery/query_tool.py (99%) rename src/google/adk/{tools => integrations}/bigquery/search_tool.py (100%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_client.py (97%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_credentials.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_data_insights_tool.py (99%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_metadata_tool.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_query_tool.py (99%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_search_tool.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_tool_config.py (98%) rename tests/unittests/{tools => integrations}/bigquery/test_bigquery_toolset.py (95%) rename tests/unittests/{tools => integrations}/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml (100%) diff --git a/src/google/adk/integrations/bigquery/__init__.py b/src/google/adk/integrations/bigquery/__init__.py new file mode 100644 index 0000000000..021ed08a50 --- /dev/null +++ b/src/google/adk/integrations/bigquery/__init__.py @@ -0,0 +1,49 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""BigQuery Integration. + +This module provides tools and skills for interacting with BigQuery. +""" + +from __future__ import annotations + +import typing + +if typing.TYPE_CHECKING: + from .bigquery_credentials import BigQueryCredentialsConfig + from .bigquery_skill import get_bigquery_skill + from .bigquery_toolset import BigQueryToolset + +# Map attribute names to relative module paths +_lazy_imports = { + "BigQueryCredentialsConfig": ".bigquery_credentials", + "BigQueryToolset": ".bigquery_toolset", + "get_bigquery_skill": ".bigquery_skill", +} + + +def __getattr__(name: str) -> any: + if name in _lazy_imports: + import importlib + + module_path = _lazy_imports[name] + # __name__ is 'google.adk.integrations.bigquery' + module = importlib.import_module(module_path, __name__) + return getattr(module, name) + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + +def __dir__() -> list[str]: + return list(_lazy_imports.keys()) diff --git a/src/google/adk/tools/bigquery/bigquery_credentials.py b/src/google/adk/integrations/bigquery/bigquery_credentials.py similarity index 95% rename from src/google/adk/tools/bigquery/bigquery_credentials.py rename to src/google/adk/integrations/bigquery/bigquery_credentials.py index c491c52ee6..d002193bd0 100644 --- a/src/google/adk/tools/bigquery/bigquery_credentials.py +++ b/src/google/adk/integrations/bigquery/bigquery_credentials.py @@ -16,7 +16,7 @@ from ...features import experimental from ...features import FeatureName -from .._google_credentials import BaseGoogleCredentialsConfig +from ...tools._google_credentials import BaseGoogleCredentialsConfig BIGQUERY_TOKEN_CACHE_KEY = "bigquery_token_cache" BIGQUERY_SCOPES = [ diff --git a/src/google/adk/tools/bigquery/bigquery_toolset.py b/src/google/adk/integrations/bigquery/bigquery_toolset.py similarity index 100% rename from src/google/adk/tools/bigquery/bigquery_toolset.py rename to src/google/adk/integrations/bigquery/bigquery_toolset.py diff --git a/src/google/adk/tools/bigquery/client.py b/src/google/adk/integrations/bigquery/client.py similarity index 100% rename from src/google/adk/tools/bigquery/client.py rename to src/google/adk/integrations/bigquery/client.py diff --git a/src/google/adk/tools/bigquery/config.py b/src/google/adk/integrations/bigquery/config.py similarity index 100% rename from src/google/adk/tools/bigquery/config.py rename to src/google/adk/integrations/bigquery/config.py diff --git a/src/google/adk/tools/bigquery/data_insights_tool.py b/src/google/adk/integrations/bigquery/data_insights_tool.py similarity index 100% rename from src/google/adk/tools/bigquery/data_insights_tool.py rename to src/google/adk/integrations/bigquery/data_insights_tool.py diff --git a/src/google/adk/tools/bigquery/metadata_tool.py b/src/google/adk/integrations/bigquery/metadata_tool.py similarity index 100% rename from src/google/adk/tools/bigquery/metadata_tool.py rename to src/google/adk/integrations/bigquery/metadata_tool.py diff --git a/src/google/adk/tools/bigquery/query_tool.py b/src/google/adk/integrations/bigquery/query_tool.py similarity index 99% rename from src/google/adk/tools/bigquery/query_tool.py rename to src/google/adk/integrations/bigquery/query_tool.py index d5b1264fa5..1721db6781 100644 --- a/src/google/adk/tools/bigquery/query_tool.py +++ b/src/google/adk/integrations/bigquery/query_tool.py @@ -25,7 +25,7 @@ from google.cloud import bigquery from . import client -from ..tool_context import ToolContext +from ...tools.tool_context import ToolContext from .config import BigQueryToolConfig from .config import WriteMode diff --git a/src/google/adk/tools/bigquery/search_tool.py b/src/google/adk/integrations/bigquery/search_tool.py similarity index 100% rename from src/google/adk/tools/bigquery/search_tool.py rename to src/google/adk/integrations/bigquery/search_tool.py diff --git a/src/google/adk/tools/bigquery/__init__.py b/src/google/adk/tools/bigquery/__init__.py index 54cc19f889..af7075fa02 100644 --- a/src/google/adk/tools/bigquery/__init__.py +++ b/src/google/adk/tools/bigquery/__init__.py @@ -27,10 +27,23 @@ execute_sql can't arbitrarily mutate existing data. """ -from .bigquery_credentials import BigQueryCredentialsConfig -from .bigquery_toolset import BigQueryToolset +import importlib +import sys -__all__ = [ - "BigQueryToolset", - "BigQueryCredentialsConfig", -] +# Redirect this module to integrations/bigquery for backward compatibility. +_TARGET = "google.adk.integrations.bigquery" + +try: + _mod = importlib.import_module(_TARGET) + sys.modules[__name__] = _mod +except ImportError: + # Fallback for static analysis or if import fails during transition + from google.adk.integrations.bigquery import BigQueryCredentialsConfig + from google.adk.integrations.bigquery import BigQueryToolset + from google.adk.integrations.bigquery import get_bigquery_skill + + __all__ = [ + "BigQueryToolset", + "BigQueryCredentialsConfig", + "get_bigquery_skill", + ] diff --git a/tests/unittests/tools/bigquery/test_bigquery_client.py b/tests/unittests/integrations/bigquery/test_bigquery_client.py similarity index 97% rename from tests/unittests/tools/bigquery/test_bigquery_client.py rename to tests/unittests/integrations/bigquery/test_bigquery_client.py index d8d5e726ee..a89fbf872f 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_client.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_client.py @@ -18,9 +18,9 @@ from unittest import mock import google.adk -from google.adk.tools.bigquery.client import DP_USER_AGENT -from google.adk.tools.bigquery.client import get_bigquery_client -from google.adk.tools.bigquery.client import get_dataplex_catalog_client +from google.adk.integrations.bigquery.client import DP_USER_AGENT +from google.adk.integrations.bigquery.client import get_bigquery_client +from google.adk.integrations.bigquery.client import get_dataplex_catalog_client from google.api_core.gapic_v1 import client_info as gapic_client_info import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/tools/bigquery/test_bigquery_credentials.py b/tests/unittests/integrations/bigquery/test_bigquery_credentials.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_credentials.py rename to tests/unittests/integrations/bigquery/test_bigquery_credentials.py index f0c188d0a4..b7072b0ba1 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_credentials.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_credentials.py @@ -14,7 +14,7 @@ from unittest import mock -from google.adk.tools.bigquery import BigQueryCredentialsConfig +from google.adk.integrations.bigquery import BigQueryCredentialsConfig # Mock the Google OAuth and API dependencies import google.auth.credentials import google.oauth2.credentials diff --git a/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py similarity index 99% rename from tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py index b62c68358c..91d0b6937e 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py @@ -15,7 +15,7 @@ import pathlib from unittest import mock -from google.adk.tools.bigquery import data_insights_tool +from google.adk.integrations.bigquery import data_insights_tool import pytest import yaml diff --git a/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py index a0dda5383f..c2db210ff7 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py @@ -17,9 +17,9 @@ import os from unittest import mock -from google.adk.tools.bigquery import client as bq_client_lib -from google.adk.tools.bigquery import metadata_tool -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery import client as bq_client_lib +from google.adk.integrations.bigquery import metadata_tool +from google.adk.integrations.bigquery.config import BigQueryToolConfig import google.auth from google.auth.exceptions import DefaultCredentialsError from google.cloud import bigquery diff --git a/tests/unittests/tools/bigquery/test_bigquery_query_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py similarity index 99% rename from tests/unittests/tools/bigquery/test_bigquery_query_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_query_tool.py index 150cdb7569..3a851014a8 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_query_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py @@ -24,13 +24,13 @@ import dateutil import dateutil.relativedelta +from google.adk.integrations.bigquery import BigQueryCredentialsConfig +from google.adk.integrations.bigquery import BigQueryToolset +from google.adk.integrations.bigquery import client as bq_client_lib +from google.adk.integrations.bigquery import query_tool +from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery.config import WriteMode from google.adk.tools.base_tool import BaseTool -from google.adk.tools.bigquery import BigQueryCredentialsConfig -from google.adk.tools.bigquery import BigQueryToolset -from google.adk.tools.bigquery import client as bq_client_lib -from google.adk.tools.bigquery import query_tool -from google.adk.tools.bigquery.config import BigQueryToolConfig -from google.adk.tools.bigquery.config import WriteMode from google.adk.tools.tool_context import ToolContext import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/tools/bigquery/test_bigquery_search_tool.py b/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_search_tool.py rename to tests/unittests/integrations/bigquery/test_bigquery_search_tool.py index 0ccdc9e18e..f2dc21c5fd 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_search_tool.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py @@ -53,8 +53,8 @@ class MockBaseModel: sys.modules["fastapi.openapi.models"] = mock.MagicMock() -from google.adk.tools.bigquery import search_tool -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery import search_tool +from google.adk.integrations.bigquery.config import BigQueryToolConfig from google.api_core import exceptions as api_exceptions from google.auth.credentials import Credentials from google.cloud import dataplex_v1 @@ -107,7 +107,7 @@ def setUp(self): # Patch get_dataplex_catalog_client self.mock_get_dataplex_client = self.enter_context( mock.patch( - "google.adk.tools.bigquery.client.get_dataplex_catalog_client", + "google.adk.integrations.bigquery.client.get_dataplex_catalog_client", autospec=True, ) ) diff --git a/tests/unittests/tools/bigquery/test_bigquery_tool_config.py b/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py similarity index 98% rename from tests/unittests/tools/bigquery/test_bigquery_tool_config.py rename to tests/unittests/integrations/bigquery/test_bigquery_tool_config.py index 705f3d87b8..052da85953 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_tool_config.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py @@ -17,7 +17,7 @@ import warnings from google.adk.features._feature_registry import _WARNED_FEATURES -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery.config import BigQueryToolConfig import pytest diff --git a/tests/unittests/tools/bigquery/test_bigquery_toolset.py b/tests/unittests/integrations/bigquery/test_bigquery_toolset.py similarity index 95% rename from tests/unittests/tools/bigquery/test_bigquery_toolset.py rename to tests/unittests/integrations/bigquery/test_bigquery_toolset.py index 0eced4b168..a8ff2e649c 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_toolset.py +++ b/tests/unittests/integrations/bigquery/test_bigquery_toolset.py @@ -14,9 +14,9 @@ from __future__ import annotations -from google.adk.tools.bigquery import BigQueryCredentialsConfig -from google.adk.tools.bigquery import BigQueryToolset -from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.integrations.bigquery import BigQueryCredentialsConfig +from google.adk.integrations.bigquery import BigQueryToolset +from google.adk.integrations.bigquery.config import BigQueryToolConfig from google.adk.tools.google_tool import GoogleTool import pytest diff --git a/tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml b/tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml similarity index 100% rename from tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml rename to tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml diff --git a/tests/unittests/tools/data_agent/test_data_agent_tool.py b/tests/unittests/tools/data_agent/test_data_agent_tool.py index 54b3e8d327..33447bde6e 100644 --- a/tests/unittests/tools/data_agent/test_data_agent_tool.py +++ b/tests/unittests/tools/data_agent/test_data_agent_tool.py @@ -153,7 +153,12 @@ def test_ask_data_agent_exception( def test_get_stream_from_file(mock_post, case_file_path): """Runs a full integration test for the _get_stream function using data from a specific file.""" # 1. Construct the full, absolute path to the data file - full_path = pathlib.Path(__file__).parent.parent / "bigquery" / case_file_path + full_path = ( + pathlib.Path(__file__).parent.parent.parent + / "integrations" + / "bigquery" + / case_file_path + ) # 2. Load the test case data from the specified YAML file with open(full_path, "r", encoding="utf-8") as f: From ab9ae0fce7b9da2e8901e2af1a46c30d3bf16f7e Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 26 Mar 2026 12:41:47 -0700 Subject: [PATCH 086/192] ADK changes PiperOrigin-RevId: 889992570 --- .../adk/integrations/bigquery/__init__.py | 49 ------------------- src/google/adk/tools/bigquery/__init__.py | 25 +++------- .../bigquery/bigquery_credentials.py | 2 +- .../bigquery/bigquery_toolset.py | 0 .../bigquery/client.py | 0 .../bigquery/config.py | 0 .../bigquery/data_insights_tool.py | 0 .../bigquery/metadata_tool.py | 0 .../bigquery/query_tool.py | 2 +- .../bigquery/search_tool.py | 0 .../bigquery/test_bigquery_client.py | 6 +-- .../bigquery/test_bigquery_credentials.py | 2 +- .../test_bigquery_data_insights_tool.py | 2 +- .../bigquery/test_bigquery_metadata_tool.py | 6 +-- .../bigquery/test_bigquery_query_tool.py | 12 ++--- .../bigquery/test_bigquery_search_tool.py | 6 +-- .../bigquery/test_bigquery_tool_config.py | 2 +- .../bigquery/test_bigquery_toolset.py | 6 +-- ...k_data_insights_penguins_highest_mass.yaml | 0 .../tools/data_agent/test_data_agent_tool.py | 7 +-- 20 files changed, 30 insertions(+), 97 deletions(-) delete mode 100644 src/google/adk/integrations/bigquery/__init__.py rename src/google/adk/{integrations => tools}/bigquery/bigquery_credentials.py (95%) rename src/google/adk/{integrations => tools}/bigquery/bigquery_toolset.py (100%) rename src/google/adk/{integrations => tools}/bigquery/client.py (100%) rename src/google/adk/{integrations => tools}/bigquery/config.py (100%) rename src/google/adk/{integrations => tools}/bigquery/data_insights_tool.py (100%) rename src/google/adk/{integrations => tools}/bigquery/metadata_tool.py (100%) rename src/google/adk/{integrations => tools}/bigquery/query_tool.py (99%) rename src/google/adk/{integrations => tools}/bigquery/search_tool.py (100%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_client.py (97%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_credentials.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_data_insights_tool.py (99%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_metadata_tool.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_query_tool.py (99%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_search_tool.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_tool_config.py (98%) rename tests/unittests/{integrations => tools}/bigquery/test_bigquery_toolset.py (95%) rename tests/unittests/{integrations => tools}/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml (100%) diff --git a/src/google/adk/integrations/bigquery/__init__.py b/src/google/adk/integrations/bigquery/__init__.py deleted file mode 100644 index 021ed08a50..0000000000 --- a/src/google/adk/integrations/bigquery/__init__.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""BigQuery Integration. - -This module provides tools and skills for interacting with BigQuery. -""" - -from __future__ import annotations - -import typing - -if typing.TYPE_CHECKING: - from .bigquery_credentials import BigQueryCredentialsConfig - from .bigquery_skill import get_bigquery_skill - from .bigquery_toolset import BigQueryToolset - -# Map attribute names to relative module paths -_lazy_imports = { - "BigQueryCredentialsConfig": ".bigquery_credentials", - "BigQueryToolset": ".bigquery_toolset", - "get_bigquery_skill": ".bigquery_skill", -} - - -def __getattr__(name: str) -> any: - if name in _lazy_imports: - import importlib - - module_path = _lazy_imports[name] - # __name__ is 'google.adk.integrations.bigquery' - module = importlib.import_module(module_path, __name__) - return getattr(module, name) - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") - - -def __dir__() -> list[str]: - return list(_lazy_imports.keys()) diff --git a/src/google/adk/tools/bigquery/__init__.py b/src/google/adk/tools/bigquery/__init__.py index af7075fa02..54cc19f889 100644 --- a/src/google/adk/tools/bigquery/__init__.py +++ b/src/google/adk/tools/bigquery/__init__.py @@ -27,23 +27,10 @@ execute_sql can't arbitrarily mutate existing data. """ -import importlib -import sys +from .bigquery_credentials import BigQueryCredentialsConfig +from .bigquery_toolset import BigQueryToolset -# Redirect this module to integrations/bigquery for backward compatibility. -_TARGET = "google.adk.integrations.bigquery" - -try: - _mod = importlib.import_module(_TARGET) - sys.modules[__name__] = _mod -except ImportError: - # Fallback for static analysis or if import fails during transition - from google.adk.integrations.bigquery import BigQueryCredentialsConfig - from google.adk.integrations.bigquery import BigQueryToolset - from google.adk.integrations.bigquery import get_bigquery_skill - - __all__ = [ - "BigQueryToolset", - "BigQueryCredentialsConfig", - "get_bigquery_skill", - ] +__all__ = [ + "BigQueryToolset", + "BigQueryCredentialsConfig", +] diff --git a/src/google/adk/integrations/bigquery/bigquery_credentials.py b/src/google/adk/tools/bigquery/bigquery_credentials.py similarity index 95% rename from src/google/adk/integrations/bigquery/bigquery_credentials.py rename to src/google/adk/tools/bigquery/bigquery_credentials.py index d002193bd0..c491c52ee6 100644 --- a/src/google/adk/integrations/bigquery/bigquery_credentials.py +++ b/src/google/adk/tools/bigquery/bigquery_credentials.py @@ -16,7 +16,7 @@ from ...features import experimental from ...features import FeatureName -from ...tools._google_credentials import BaseGoogleCredentialsConfig +from .._google_credentials import BaseGoogleCredentialsConfig BIGQUERY_TOKEN_CACHE_KEY = "bigquery_token_cache" BIGQUERY_SCOPES = [ diff --git a/src/google/adk/integrations/bigquery/bigquery_toolset.py b/src/google/adk/tools/bigquery/bigquery_toolset.py similarity index 100% rename from src/google/adk/integrations/bigquery/bigquery_toolset.py rename to src/google/adk/tools/bigquery/bigquery_toolset.py diff --git a/src/google/adk/integrations/bigquery/client.py b/src/google/adk/tools/bigquery/client.py similarity index 100% rename from src/google/adk/integrations/bigquery/client.py rename to src/google/adk/tools/bigquery/client.py diff --git a/src/google/adk/integrations/bigquery/config.py b/src/google/adk/tools/bigquery/config.py similarity index 100% rename from src/google/adk/integrations/bigquery/config.py rename to src/google/adk/tools/bigquery/config.py diff --git a/src/google/adk/integrations/bigquery/data_insights_tool.py b/src/google/adk/tools/bigquery/data_insights_tool.py similarity index 100% rename from src/google/adk/integrations/bigquery/data_insights_tool.py rename to src/google/adk/tools/bigquery/data_insights_tool.py diff --git a/src/google/adk/integrations/bigquery/metadata_tool.py b/src/google/adk/tools/bigquery/metadata_tool.py similarity index 100% rename from src/google/adk/integrations/bigquery/metadata_tool.py rename to src/google/adk/tools/bigquery/metadata_tool.py diff --git a/src/google/adk/integrations/bigquery/query_tool.py b/src/google/adk/tools/bigquery/query_tool.py similarity index 99% rename from src/google/adk/integrations/bigquery/query_tool.py rename to src/google/adk/tools/bigquery/query_tool.py index 1721db6781..d5b1264fa5 100644 --- a/src/google/adk/integrations/bigquery/query_tool.py +++ b/src/google/adk/tools/bigquery/query_tool.py @@ -25,7 +25,7 @@ from google.cloud import bigquery from . import client -from ...tools.tool_context import ToolContext +from ..tool_context import ToolContext from .config import BigQueryToolConfig from .config import WriteMode diff --git a/src/google/adk/integrations/bigquery/search_tool.py b/src/google/adk/tools/bigquery/search_tool.py similarity index 100% rename from src/google/adk/integrations/bigquery/search_tool.py rename to src/google/adk/tools/bigquery/search_tool.py diff --git a/tests/unittests/integrations/bigquery/test_bigquery_client.py b/tests/unittests/tools/bigquery/test_bigquery_client.py similarity index 97% rename from tests/unittests/integrations/bigquery/test_bigquery_client.py rename to tests/unittests/tools/bigquery/test_bigquery_client.py index a89fbf872f..d8d5e726ee 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_client.py +++ b/tests/unittests/tools/bigquery/test_bigquery_client.py @@ -18,9 +18,9 @@ from unittest import mock import google.adk -from google.adk.integrations.bigquery.client import DP_USER_AGENT -from google.adk.integrations.bigquery.client import get_bigquery_client -from google.adk.integrations.bigquery.client import get_dataplex_catalog_client +from google.adk.tools.bigquery.client import DP_USER_AGENT +from google.adk.tools.bigquery.client import get_bigquery_client +from google.adk.tools.bigquery.client import get_dataplex_catalog_client from google.api_core.gapic_v1 import client_info as gapic_client_info import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/integrations/bigquery/test_bigquery_credentials.py b/tests/unittests/tools/bigquery/test_bigquery_credentials.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_credentials.py rename to tests/unittests/tools/bigquery/test_bigquery_credentials.py index b7072b0ba1..f0c188d0a4 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_credentials.py +++ b/tests/unittests/tools/bigquery/test_bigquery_credentials.py @@ -14,7 +14,7 @@ from unittest import mock -from google.adk.integrations.bigquery import BigQueryCredentialsConfig +from google.adk.tools.bigquery import BigQueryCredentialsConfig # Mock the Google OAuth and API dependencies import google.auth.credentials import google.oauth2.credentials diff --git a/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py b/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py similarity index 99% rename from tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py index 91d0b6937e..b62c68358c 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_data_insights_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_data_insights_tool.py @@ -15,7 +15,7 @@ import pathlib from unittest import mock -from google.adk.integrations.bigquery import data_insights_tool +from google.adk.tools.bigquery import data_insights_tool import pytest import yaml diff --git a/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py b/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py index c2db210ff7..a0dda5383f 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_metadata_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_metadata_tool.py @@ -17,9 +17,9 @@ import os from unittest import mock -from google.adk.integrations.bigquery import client as bq_client_lib -from google.adk.integrations.bigquery import metadata_tool -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery import client as bq_client_lib +from google.adk.tools.bigquery import metadata_tool +from google.adk.tools.bigquery.config import BigQueryToolConfig import google.auth from google.auth.exceptions import DefaultCredentialsError from google.cloud import bigquery diff --git a/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py b/tests/unittests/tools/bigquery/test_bigquery_query_tool.py similarity index 99% rename from tests/unittests/integrations/bigquery/test_bigquery_query_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_query_tool.py index 3a851014a8..150cdb7569 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_query_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_query_tool.py @@ -24,13 +24,13 @@ import dateutil import dateutil.relativedelta -from google.adk.integrations.bigquery import BigQueryCredentialsConfig -from google.adk.integrations.bigquery import BigQueryToolset -from google.adk.integrations.bigquery import client as bq_client_lib -from google.adk.integrations.bigquery import query_tool -from google.adk.integrations.bigquery.config import BigQueryToolConfig -from google.adk.integrations.bigquery.config import WriteMode from google.adk.tools.base_tool import BaseTool +from google.adk.tools.bigquery import BigQueryCredentialsConfig +from google.adk.tools.bigquery import BigQueryToolset +from google.adk.tools.bigquery import client as bq_client_lib +from google.adk.tools.bigquery import query_tool +from google.adk.tools.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery.config import WriteMode from google.adk.tools.tool_context import ToolContext import google.auth from google.auth.exceptions import DefaultCredentialsError diff --git a/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py b/tests/unittests/tools/bigquery/test_bigquery_search_tool.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_search_tool.py rename to tests/unittests/tools/bigquery/test_bigquery_search_tool.py index f2dc21c5fd..0ccdc9e18e 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_search_tool.py +++ b/tests/unittests/tools/bigquery/test_bigquery_search_tool.py @@ -53,8 +53,8 @@ class MockBaseModel: sys.modules["fastapi.openapi.models"] = mock.MagicMock() -from google.adk.integrations.bigquery import search_tool -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery import search_tool +from google.adk.tools.bigquery.config import BigQueryToolConfig from google.api_core import exceptions as api_exceptions from google.auth.credentials import Credentials from google.cloud import dataplex_v1 @@ -107,7 +107,7 @@ def setUp(self): # Patch get_dataplex_catalog_client self.mock_get_dataplex_client = self.enter_context( mock.patch( - "google.adk.integrations.bigquery.client.get_dataplex_catalog_client", + "google.adk.tools.bigquery.client.get_dataplex_catalog_client", autospec=True, ) ) diff --git a/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py b/tests/unittests/tools/bigquery/test_bigquery_tool_config.py similarity index 98% rename from tests/unittests/integrations/bigquery/test_bigquery_tool_config.py rename to tests/unittests/tools/bigquery/test_bigquery_tool_config.py index 052da85953..705f3d87b8 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_tool_config.py +++ b/tests/unittests/tools/bigquery/test_bigquery_tool_config.py @@ -17,7 +17,7 @@ import warnings from google.adk.features._feature_registry import _WARNED_FEATURES -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery.config import BigQueryToolConfig import pytest diff --git a/tests/unittests/integrations/bigquery/test_bigquery_toolset.py b/tests/unittests/tools/bigquery/test_bigquery_toolset.py similarity index 95% rename from tests/unittests/integrations/bigquery/test_bigquery_toolset.py rename to tests/unittests/tools/bigquery/test_bigquery_toolset.py index a8ff2e649c..0eced4b168 100644 --- a/tests/unittests/integrations/bigquery/test_bigquery_toolset.py +++ b/tests/unittests/tools/bigquery/test_bigquery_toolset.py @@ -14,9 +14,9 @@ from __future__ import annotations -from google.adk.integrations.bigquery import BigQueryCredentialsConfig -from google.adk.integrations.bigquery import BigQueryToolset -from google.adk.integrations.bigquery.config import BigQueryToolConfig +from google.adk.tools.bigquery import BigQueryCredentialsConfig +from google.adk.tools.bigquery import BigQueryToolset +from google.adk.tools.bigquery.config import BigQueryToolConfig from google.adk.tools.google_tool import GoogleTool import pytest diff --git a/tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml b/tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml similarity index 100% rename from tests/unittests/integrations/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml rename to tests/unittests/tools/bigquery/test_data/ask_data_insights_penguins_highest_mass.yaml diff --git a/tests/unittests/tools/data_agent/test_data_agent_tool.py b/tests/unittests/tools/data_agent/test_data_agent_tool.py index 33447bde6e..54b3e8d327 100644 --- a/tests/unittests/tools/data_agent/test_data_agent_tool.py +++ b/tests/unittests/tools/data_agent/test_data_agent_tool.py @@ -153,12 +153,7 @@ def test_ask_data_agent_exception( def test_get_stream_from_file(mock_post, case_file_path): """Runs a full integration test for the _get_stream function using data from a specific file.""" # 1. Construct the full, absolute path to the data file - full_path = ( - pathlib.Path(__file__).parent.parent.parent - / "integrations" - / "bigquery" - / case_file_path - ) + full_path = pathlib.Path(__file__).parent.parent / "bigquery" / case_file_path # 2. Load the test case data from the specified YAML file with open(full_path, "r", encoding="utf-8") as f: From f7359e3fd40eae3b8ef50c7bc88f1075ffb9b7de Mon Sep 17 00:00:00 2001 From: Sasha Sobran Date: Thu, 26 Mar 2026 13:42:57 -0700 Subject: [PATCH 087/192] fix: Default to ClusterIP so GKE deployment isn't publicly exposed by default Co-authored-by: Sasha Sobran PiperOrigin-RevId: 890025323 --- src/google/adk/cli/cli_deploy.py | 15 ++++++++++++++- src/google/adk/cli/cli_tools_click.py | 13 +++++++++++++ tests/unittests/cli/utils/test_cli_deploy.py | 2 +- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/google/adk/cli/cli_deploy.py b/src/google/adk/cli/cli_deploy.py index 9d1cbc0d40..b2072dfd0e 100644 --- a/src/google/adk/cli/cli_deploy.py +++ b/src/google/adk/cli/cli_deploy.py @@ -22,6 +22,7 @@ import sys import traceback from typing import Final +from typing import Literal from typing import Optional import warnings @@ -1170,6 +1171,9 @@ def to_gke( memory_service_uri: Optional[str] = None, use_local_storage: bool = False, a2a: bool = False, + service_type: Literal[ + 'ClusterIP', 'NodePort', 'LoadBalancer' + ] = 'ClusterIP', ): """Deploys an agent to Google Kubernetes Engine(GKE). @@ -1197,6 +1201,7 @@ def to_gke( artifact_service_uri: The URI of the artifact service. memory_service_uri: The URI of the memory service. use_local_storage: Whether to use local .adk storage in the container. + service_type: The Kubernetes Service type (default: ClusterIP). """ click.secho( '\n🚀 Starting ADK Agent Deployment to GKE...', fg='cyan', bold=True @@ -1334,7 +1339,7 @@ def to_gke( metadata: name: {service_name} spec: - type: LoadBalancer + type: {service_type} selector: app: {service_name} ports: @@ -1388,3 +1393,11 @@ def to_gke( click.secho( '\n🎉 Deployment to GKE finished successfully!', fg='cyan', bold=True ) + if service_type == 'ClusterIP': + click.echo( + '\nThe service is only reachable from within the cluster.' + ' To access it locally, run:' + f'\n kubectl port-forward svc/{service_name} {port}:{port}' + '\n\nTo expose the service externally, add a Gateway or' + ' re-deploy with --service_type=LoadBalancer.' + ) diff --git a/src/google/adk/cli/cli_tools_click.py b/src/google/adk/cli/cli_tools_click.py index dcf9415652..b9925724bd 100644 --- a/src/google/adk/cli/cli_tools_click.py +++ b/src/google/adk/cli/cli_tools_click.py @@ -2238,6 +2238,17 @@ def cli_deploy_agent_engine( default="INFO", help="Optional. Set the logging level", ) +@click.option( + "--service_type", + type=click.Choice(["ClusterIP", "LoadBalancer"], case_sensitive=True), + default="ClusterIP", + show_default=True, + help=( + "Optional. The Kubernetes Service type for the deployed agent." + " ClusterIP (default) keeps the service cluster-internal;" + " use LoadBalancer to expose a public IP." + ), +) @click.option( "--temp_folder", type=str, @@ -2281,6 +2292,7 @@ def cli_deploy_gke( otel_to_cloud: bool, with_ui: bool, adk_version: str, + service_type: str, log_level: Optional[str] = None, session_service_uri: Optional[str] = None, artifact_service_uri: Optional[str] = None, @@ -2312,6 +2324,7 @@ def cli_deploy_gke( with_ui=with_ui, log_level=log_level, adk_version=adk_version, + service_type=service_type, session_service_uri=session_service_uri, artifact_service_uri=artifact_service_uri, memory_service_uri=memory_service_uri, diff --git a/tests/unittests/cli/utils/test_cli_deploy.py b/tests/unittests/cli/utils/test_cli_deploy.py index e1829d2f98..22b029a976 100644 --- a/tests/unittests/cli/utils/test_cli_deploy.py +++ b/tests/unittests/cli/utils/test_cli_deploy.py @@ -508,7 +508,7 @@ def mock_subprocess_run(*args, **kwargs): assert "image: gcr.io/gke-proj/gke-svc" in yaml_content assert f"containerPort: 9090" in yaml_content assert f"targetPort: 9090" in yaml_content - assert "type: LoadBalancer" in yaml_content + assert "type: ClusterIP" in yaml_content # 4. Verify cleanup assert str(rmtree_recorder.get_last_call_args()[0]) == str(tmp_path) From 50209549206256abe5d1c5d84ab2b14dfdf80d66 Mon Sep 17 00:00:00 2001 From: George Weale Date: Thu, 26 Mar 2026 15:28:25 -0700 Subject: [PATCH 088/192] fix: Update list_agents to only list directories, not validate agent definitions The list_agents method in AgentLoader no longer attempts to determine the agent language for each directory Co-authored-by: George Weale PiperOrigin-RevId: 890078066 --- src/google/adk/cli/utils/agent_loader.py | 19 +++----- .../unittests/cli/utils/test_agent_loader.py | 45 ------------------- 2 files changed, 7 insertions(+), 57 deletions(-) diff --git a/src/google/adk/cli/utils/agent_loader.py b/src/google/adk/cli/utils/agent_loader.py index 72bc4bf535..a7bbcbc2a6 100644 --- a/src/google/adk/cli/utils/agent_loader.py +++ b/src/google/adk/cli/utils/agent_loader.py @@ -364,18 +364,13 @@ def load_agent(self, agent_name: str) -> Union[BaseAgent, App]: def list_agents(self) -> list[str]: """Lists all agents available in the agent loader (sorted alphabetically).""" base_path = Path.cwd() / self.agents_dir - agent_names = [] - for x in os.listdir(base_path): - if ( - os.path.isdir(os.path.join(base_path, x)) - and not x.startswith(".") - and x != "__pycache__" - ): - try: - self._determine_agent_language(x) - agent_names.append(x) - except ValueError: - continue + agent_names = [ + x + for x in os.listdir(base_path) + if os.path.isdir(os.path.join(base_path, x)) + and not x.startswith(".") + and x != "__pycache__" + ] agent_names.sort() return agent_names diff --git a/tests/unittests/cli/utils/test_agent_loader.py b/tests/unittests/cli/utils/test_agent_loader.py index bcf306ad49..abc5718adb 100644 --- a/tests/unittests/cli/utils/test_agent_loader.py +++ b/tests/unittests/cli/utils/test_agent_loader.py @@ -960,51 +960,6 @@ def __init__(self): assert detailed_list[0]["name"] == agent_name assert not detailed_list[0]["is_computer_use"] - def test_list_agents_excludes_non_agent_directories(self): - """Test that list_agents filters out directories without agent definitions.""" - with tempfile.TemporaryDirectory() as temp_dir: - temp_path = Path(temp_dir) - - valid_package = temp_path / "valid_agent" - valid_package.mkdir() - (valid_package / "__init__.py").write_text(dedent(""" - from google.adk.agents.base_agent import BaseAgent - - class ValidAgent(BaseAgent): - def __init__(self): - super().__init__(name="valid_agent") - - root_agent = ValidAgent() - """)) - - valid_module = temp_path / "module_agent" - valid_module.mkdir() - (valid_module / "agent.py").write_text(dedent(""" - from google.adk.agents.base_agent import BaseAgent - - class ModuleAgent(BaseAgent): - def __init__(self): - super().__init__(name="module_agent") - - root_agent = ModuleAgent() - """)) - - valid_yaml = temp_path / "yaml_agent" - valid_yaml.mkdir() - (valid_yaml / "root_agent.yaml").write_text("name: yaml_agent\n") - - (temp_path / "random_folder").mkdir() - (temp_path / "data").mkdir() - (temp_path / "tmp").mkdir() - - loader = AgentLoader(str(temp_path)) - agents = loader.list_agents() - - assert agents == ["module_agent", "valid_agent", "yaml_agent"] - assert "random_folder" not in agents - assert "data" not in agents - assert "tmp" not in agents - def test_validate_agent_name_rejects_dotted_paths(self): """Agent names with dots are rejected to prevent arbitrary module imports.""" with tempfile.TemporaryDirectory() as temp_dir: From abe4bbeabbcc80de5d91fcff453626a2bc673fb7 Mon Sep 17 00:00:00 2001 From: "Wei (Jack) Sun" Date: Thu, 26 Mar 2026 17:05:43 -0700 Subject: [PATCH 089/192] chore: merge release v1.28.0 to main Merge https://github.com/google/adk-python/pull/5016 Syncs version bump and CHANGELOG from release v1.28.0 to main. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/5016 from google:release/v1.28.0 4e05efb76ca96351f6fd868e09f26fe6d8cf8f9f PiperOrigin-RevId: 890122693 --- .github/.release-please-manifest.json | 2 +- .github/release-please-config.json | 2 +- CHANGELOG.md | 76 +++++++++++++++++++++++++++ src/google/adk/version.py | 2 +- 4 files changed, 79 insertions(+), 3 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 215f02e088..bac4ebcfdc 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.27.4" + ".": "1.28.0" } diff --git a/.github/release-please-config.json b/.github/release-please-config.json index 8c58807069..d9b9605e10 100644 --- a/.github/release-please-config.json +++ b/.github/release-please-config.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "last-release-sha": "066fcec3e8e669d1c5360e1556afce3f7e068072", + "last-release-sha": "50209549206256abe5d1c5d84ab2b14dfdf80d66", "packages": { ".": { "release-type": "python", diff --git a/CHANGELOG.md b/CHANGELOG.md index b0423f8073..8a1fabb0da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,81 @@ # Changelog +## [1.28.0](https://github.com/google/adk-python/compare/v1.27.5...v1.28.0) (2026-03-26) + + +### Features + +* **a2a:** add lifespan parameter to to_a2a() ([0f4c807](https://github.com/google/adk-python/commit/0f4c8073e5a180a220f88928d67ee8d521486f03)), closes [#4701](https://github.com/google/adk-python/issues/4701) +* Add a new extension for the new version of ADK-A2A integration ([6f0dcb3](https://github.com/google/adk-python/commit/6f0dcb3e26dd82fed1a8564c17a47eec03b04617)) +* Add ability to run individual unit tests to unittests.sh ([b3fcd8a](https://github.com/google/adk-python/commit/b3fcd8a21fe64063cdd8d07121ee4da3adb44c30)) +* Add database_role property to SpannerToolSettings and use it in execute_sql to support fine grained access controls ([360e0f7](https://github.com/google/adk-python/commit/360e0f7ebaba7a682f7230c259b474ace7ff6d13)) +* Add index to events table and update dependencies ([3153e6d](https://github.com/google/adk-python/commit/3153e6d74f401f39e363a36f6fa0664f245013db)), closes [#4827](https://github.com/google/adk-python/issues/4827) +* Add MultiTurn Task success metric ([9a75c06](https://github.com/google/adk-python/commit/9a75c06873b79fbd206b3712231c0280fb2f87ca)) +* Add MultiTurn Task trajectory and tool trajectory metrics ([38bfb44](https://github.com/google/adk-python/commit/38bfb4475406d63af3111775950d9c25acf17ed2)) +* Add slack integration to ADK ([6909a16](https://github.com/google/adk-python/commit/6909a167c8d030111bf7118b9d5e78255a299684)) +* Add Spanner Admin Toolset ([28618a8](https://github.com/google/adk-python/commit/28618a8dcbee9c4faeec6653a5d978d0330f39bb)) +* Add SSE streaming support to conformance tests ([c910961](https://github.com/google/adk-python/commit/c910961501ef559814f54c22aca1609fd3227b80)) +* Add support for Anthropic's thinking_blocks format in LiteLLM integration ([fc45fa6](https://github.com/google/adk-python/commit/fc45fa68d75fbf5276bf5951929026285a8bb4af)), closes [#4801](https://github.com/google/adk-python/issues/4801) +* Add support for timeout to UnsafeLocalCodeExecutor ([71d26ef](https://github.com/google/adk-python/commit/71d26ef7b90fe25a5093e4ccdf74b103e64fac67)) +* **auth:** Integrate GCP IAM Connectors (Noop implementation) ([78e5a90](https://github.com/google/adk-python/commit/78e5a908dcb4b1a93e156c6f1b282f59ec6b69d4)) +* **bigquery:** Migrate 1P BQ Toolset ([08be442](https://github.com/google/adk-python/commit/08be44295de614f30e686113897af7fe9c228751)) ([7aa1f52](https://github.com/google/adk-python/commit/7aa1f5252c15caaf40fde73ac4283fa0a48d8a96)) ([d112131](https://github.com/google/adk-python/commit/d1121317ef4e1ac559f4ae13855ac1af28eef8f6)) ([166ff99](https://github.com/google/adk-python/commit/166ff99b9266cd3bb0e86070c58a67d937216297)) +* enable suppressing A2A experimental warnings ([fdc2b43](https://github.com/google/adk-python/commit/fdc2b4355b5a73b8f32d3fa32a092339d963ce67)) +* Enhance AgentEngineSandboxCodeExecutor sample to automatically provision an Agent Engine if neither agent_engine_resource_name nor sandbox_resource_name is provided ([6c34694](https://github.com/google/adk-python/commit/6c34694da64968bc766a7e5e860c0ed9acbc69c2)) +* Extract and merge EventActions from A2A metadata ([4b677e7](https://github.com/google/adk-python/commit/4b677e73b939f5a13269abd9ba9fe65e4b78d7f6)), closes [#3968](https://github.com/google/adk-python/issues/3968) +* **mcp:** add sampling callback support for MCP sessions ([8f82697](https://github.com/google/adk-python/commit/8f826972cc06ef250c1f020e34b9d1cdbd0788c4)) +* Optional GCP project and credential for GCS access ([2f90c1a](https://github.com/google/adk-python/commit/2f90c1ac09638517b08cd96a17d595f0968f0bf6)) +* Support new embedding model in files retrieval ([faafac9](https://github.com/google/adk-python/commit/faafac9bb33b45174f04746055fc655b12d3e7f7)) + + +### Bug Fixes + +* add agent name validation to prevent arbitrary module imports ([116f75d](https://github.com/google/adk-python/commit/116f75d)) +* add protection for arbitrary module imports ([995cd1c](https://github.com/google/adk-python/commit/995cd1c)), closes [#4947](https://github.com/google/adk-python/issues/4947) +* Add read-only session support in DatabaseSessionService ([f6ea58b](https://github.com/google/adk-python/commit/f6ea58b5939b33afad5a2d2f8fb395150120ae07)), closes [#4771](https://github.com/google/adk-python/issues/4771) +* Allow snake case for skill name ([b157276](https://github.com/google/adk-python/commit/b157276cbb3c4f7f7b97e338e9d9df63d9c949cd)) +* **bigquery:** use valid dataplex OAuth scope ([4010716](https://github.com/google/adk-python/commit/4010716470fc83918dc367c5971342ff551401c8)) +* Default to ClusterIP so GKE deployment isn't publicly exposed by default ([f7359e3](https://github.com/google/adk-python/commit/f7359e3fd40eae3b8ef50c7bc88f1075ffb9b7de)) +* **deps:** bump google-genai minimum to >=1.64.0 for gemini-embedding-2-preview ([f8270c8](https://github.com/google/adk-python/commit/f8270c826bc807da99b4126e98ee1c505f4ed7c3)) +* enforce allowed file extensions for GET requests in the builder API ([96e845e](https://github.com/google/adk-python/commit/96e845ef8cf66b288d937e293a88cdb28b09417c)) +* error when event does not contain long_running_tool_ids ([1f9f0fe](https://github.com/google/adk-python/commit/1f9f0fe9d349c06f48063b856242c67654786dbc)) +* Exclude compromised LiteLLM versions from dependencies pin to 1.82.6 ([77f1c41](https://github.com/google/adk-python/commit/77f1c41be61eed017b008d7ab311923e30b46643)) +* Fix IDE hangs by moving test venv and cache to /tmp ([6f6fd95](https://github.com/google/adk-python/commit/6f6fd955f6dab50c98859294328a98f32181dc27)) +* Fix imports for environment simulation files ([dcccfca](https://github.com/google/adk-python/commit/dcccfca1d1dd1b3b9c273278e9f9c883f0148eba)) +* gate builder endpoints behind web flag ([6c24ccc](https://github.com/google/adk-python/commit/6c24ccc9ec7d0f942e1dd436a823f48ae1a0c695)) +* Handle concurrent creation of app/user state rows in DatabaseSessionService ([d78422a](https://github.com/google/adk-python/commit/d78422a4051bba383202f3f13325e65b8be3ccd3)), closes [#4954](https://github.com/google/adk-python/issues/4954) +* **live:** convert response_modalities to Modality enum before assigning to LiveConnectConfig ([47aaf66](https://github.com/google/adk-python/commit/47aaf66efb3e3825f06fd44578d592924fb7542b)), closes [#4869](https://github.com/google/adk-python/issues/4869) +* **models:** handle arbitrary dict responses in part_to_message_block ([c26d359](https://github.com/google/adk-python/commit/c26d35916e1b6cd12a412516381c6fcbf867bcee)) +* **models:** update 429 docs link for Gemini ([a231c72](https://github.com/google/adk-python/commit/a231c729e6526a2035b4630796f3dc8a658bb203)) +* populate `required` for Pydantic `BaseModel` parameters in `FunctionTool` ([c5d809e](https://github.com/google/adk-python/commit/c5d809e10eeaadfcbd12874d0976b5259f327adf)), closes [#4777](https://github.com/google/adk-python/issues/4777) +* Prevent compaction of events with pending function calls ([991c411](https://github.com/google/adk-python/commit/991c4111e31ffe97acc73c2ddf5cacea0955d39f)), closes [#4740](https://github.com/google/adk-python/issues/4740) +* Prevent uv.lock modifications in unittests.sh ([e6476c9](https://github.com/google/adk-python/commit/e6476c9790eaa8f3a6ae8165351f8fe38bf9bd1e)) +* Refactor blocking subprocess call to use asyncio in bash_tool ([58c4536](https://github.com/google/adk-python/commit/58c453688fea921707a07c21d0669174ea1a3b5f)) +* Refactor LiteLlm check to avoid ImportError ([7b94a76](https://github.com/google/adk-python/commit/7b94a767337e0d642e808734608f07a70e077c62)) +* Reject appends to stale sessions in DatabaseSessionService ([b8e7647](https://github.com/google/adk-python/commit/b8e764715cb1cc7c8bc1de9aa94ca5f5271bb627)), closes [#4751](https://github.com/google/adk-python/issues/4751) +* Remove redundant client_id from fetch_token call ([50d6f35](https://github.com/google/adk-python/commit/50d6f35139b56aa5b9fb06ee53b911269c222ffe)), closes [#4782](https://github.com/google/adk-python/issues/4782) +* returns '<No stdout/stderr captured>' instead of empty strings for clearer agent feedback and correct typing ([3e00e95](https://github.com/google/adk-python/commit/3e00e955519730503e73155723f27b2bc8d5779b)) +* Store and retrieve usage_metadata in Vertex AI custom_metadata ([b318eee](https://github.com/google/adk-python/commit/b318eee979b1625d3d23ad98825c88f54016a12f)) +* Support resolving string annotations for `find_context_parameter` ([22fc332](https://github.com/google/adk-python/commit/22fc332c95b7deca95240b33406513bcc95c6e03)) +* **telemetry:** Rolling back change to fix issue affecting LlmAgent creation due to missing version field ([0e18f81](https://github.com/google/adk-python/commit/0e18f81a5cd0d0392ded653b1a63a236449a2685)) +* **tools:** disable default httpx 5s timeout in OpenAPI tool _request ([4c9c01f](https://github.com/google/adk-python/commit/4c9c01fd4b1c716950700fd56a1a8789795cb7b1)), closes [#4431](https://github.com/google/adk-python/issues/4431) +* **tools:** support regional Discovery Engine endpoints ([30b904e](https://github.com/google/adk-python/commit/30b904e596b0bcea8498a9b47d669585a6c481d3)) +* **tools:** support structured datastores in DiscoveryEngineSearchTool ([f35c3a6](https://github.com/google/adk-python/commit/f35c3a66da7c66967d06d0f5f058f9417abf1f8d)), closes [#3406](https://github.com/google/adk-python/issues/3406) +* Update Agent Registry to use the full agent card if available ([031f581](https://github.com/google/adk-python/commit/031f581ac6e0fb06cc1175217a26bdd0c7382da8)) +* Update eval extras to Vertex SDK package version with constrained LiteLLM upperbound ([27cc98d](https://github.com/google/adk-python/commit/27cc98db5fbc15de27713a5814d5c68e9c835d0f)) +* Update import and version for k8s-agent-sandbox ([1ee0623](https://github.com/google/adk-python/commit/1ee062312813e9564fdff693f883f57987e18c6a)), closes [#4883](https://github.com/google/adk-python/issues/4883) +* Update list_agents to only list directories, not validate agent definitions ([5020954](https://github.com/google/adk-python/commit/50209549206256abe5d1c5d84ab2b14dfdf80d66)) + + +### Code Refactoring +* rename agent simulator to environment simulation. Also add tracing into environment simulation ([99a31bf](https://github.com/google/adk-python/commit/99a31bf77ea6fb2c53c313094734611dcb87b1e2)) + + +### Documentation + +* Feat/Issue Monitoring Agent ([780093f](https://github.com/google/adk-python/commit/780093f389bfbffce965c89ca888d49f992219c1)) +* Use a dedicated API key for docs agents ([51c19cb](https://github.com/google/adk-python/commit/51c19cbc13c422dffd764ed0d7c664deed9e58b3)) + + ## [1.27.4](https://github.com/google/adk-python/compare/v1.27.3...v1.27.4) (2026-03-24) ### Bug Fixes diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 552556e23b..a020c76372 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "1.27.4" +__version__ = "1.28.0" From 5f69e19f8285ba828c7491014eda6a348fc11724 Mon Sep 17 00:00:00 2001 From: Xuan Yang Date: Thu, 26 Mar 2026 17:15:31 -0700 Subject: [PATCH 090/192] fix: Enhance ADK release analyzer with resume functionality and better session management Co-authored-by: Xuan Yang PiperOrigin-RevId: 890127075 --- .../analyze-releases-for-adk-docs-updates.yml | 34 +++++- .../adk_release_analyzer/agent.py | 53 ++++++++- .../adk_release_analyzer/main.py | 105 +++++++++++++++--- .../samples/adk_documentation/tools.py | 22 ++-- 4 files changed, 190 insertions(+), 24 deletions(-) diff --git a/.github/workflows/analyze-releases-for-adk-docs-updates.yml b/.github/workflows/analyze-releases-for-adk-docs-updates.yml index 9e0827757b..7932ecad32 100644 --- a/.github/workflows/analyze-releases-for-adk-docs-updates.yml +++ b/.github/workflows/analyze-releases-for-adk-docs-updates.yml @@ -6,6 +6,20 @@ on: types: [published] # Manual trigger for testing and retrying. workflow_dispatch: + inputs: + resume: + description: 'Resume from the last failed/interrupted run' + required: false + type: boolean + default: false + start_tag: + description: 'Older release tag (base), e.g. v1.26.0' + required: false + type: string + end_tag: + description: 'Newer release tag (head), e.g. v1.27.0' + required: false + type: string jobs: analyze-new-release-for-adk-docs-updates: @@ -33,6 +47,13 @@ jobs: python -m pip install --upgrade pip pip install requests google-adk + - name: Restore session DB from cache + if: ${{ github.event.inputs.resume == 'true' }} + uses: actions/cache/restore@v4 + with: + path: contributing/samples/adk_documentation/adk_release_analyzer/sessions.db + key: analyzer-session-db + - name: Run Analyzing Script env: GITHUB_TOKEN: ${{ secrets.ADK_TRIAGE_AGENT }} @@ -44,4 +65,15 @@ jobs: CODE_REPO: 'adk-python' INTERACTIVE: 0 PYTHONPATH: contributing/samples/adk_documentation - run: python -m adk_release_analyzer.main + run: >- + python -m adk_release_analyzer.main + ${{ github.event.inputs.resume == 'true' && '--resume' || '' }} + ${{ github.event.inputs.start_tag && format('--start-tag {0}', github.event.inputs.start_tag) || '' }} + ${{ github.event.inputs.end_tag && format('--end-tag {0}', github.event.inputs.end_tag) || '' }} + + - name: Save session DB to cache + if: always() + uses: actions/cache/save@v4 + with: + path: contributing/samples/adk_documentation/adk_release_analyzer/sessions.db + key: analyzer-session-db diff --git a/contributing/samples/adk_documentation/adk_release_analyzer/agent.py b/contributing/samples/adk_documentation/adk_release_analyzer/agent.py index bac8090163..2a72d2840a 100644 --- a/contributing/samples/adk_documentation/adk_release_analyzer/agent.py +++ b/contributing/samples/adk_documentation/adk_release_analyzer/agent.py @@ -29,6 +29,7 @@ - recommendations: Accumulated recommendations from all groups """ +import copy import os import sys from typing import Any @@ -114,6 +115,7 @@ def get_next_file_group(tool_context: ToolContext) -> dict[str, Any]: current_index = tool_context.state.get("current_group_index", 0) if current_index >= len(file_groups): + print(f"[Progress] All {len(file_groups)} groups processed.") return { "status": "complete", "message": "All file groups have been processed.", @@ -122,7 +124,11 @@ def get_next_file_group(tool_context: ToolContext) -> dict[str, Any]: } current_group = file_groups[current_index] - tool_context.state["current_group_index"] = current_index + 1 + file_paths = [f.get("relative_path", "?") for f in current_group] + print( + f"[Progress] Starting group {current_index + 1}/{len(file_groups)}:" + f" {file_paths}" + ) return { "status": "success", @@ -157,6 +163,16 @@ def save_group_recommendations( all_recommendations = tool_context.state.get("recommendations", []) all_recommendations.extend(recommendations) tool_context.state["recommendations"] = all_recommendations + # Advance index only after recommendations are saved, so interrupted + # groups get retried on resume instead of being skipped. + tool_context.state["current_group_index"] = group_index + 1 + + total_groups = len(tool_context.state.get("file_groups", [])) + print( + f"[Progress] Group {group_index + 1}/{total_groups} done." + f" +{len(recommendations)} recommendations" + f" ({len(all_recommendations)} total)" + ) return { "status": "success", @@ -180,6 +196,11 @@ def get_all_recommendations(tool_context: ToolContext) -> dict[str, Any]: end_tag = tool_context.state.get("end_tag", "unknown") compare_url = tool_context.state.get("compare_url", "") + print( + f"[Summary] Retrieving recommendations: {len(recommendations)} total," + f" release {start_tag} → {end_tag}" + ) + return { "status": "success", "start_tag": start_tag, @@ -226,6 +247,12 @@ def save_release_info( tool_context.state["release_summary"] = release_summary tool_context.state["all_changed_files"] = all_changed_files + total_files = sum(len(group) for group in file_groups) + print( + f"[Planning] Release {start_tag} → {end_tag}:" + f" {total_files} files in {len(file_groups)} groups" + ) + return { "status": "success", "start_tag": start_tag, @@ -404,10 +431,13 @@ def file_analyzer_instruction(readonly_context: ReadonlyContext) -> str: 4. For EACH significant change, call `search_local_git_repo` to find related docs in {LOCAL_REPOS_DIR_PATH}/{DOC_REPO}/docs/ - Search for the feature name, class name, or related keywords + - **ALWAYS** pass `ignored_dirs=["api-reference"]` to skip auto-generated API + reference docs (they are updated automatically by code, not manually) - If no docs found, recommend creating new documentation 5. Call `read_local_git_repo_file_content` to read the relevant doc files and check if they need updating. + - **SKIP** any files under `docs/api-reference/` — these are auto-generated. 6. For each documentation update needed, create a recommendation with: - summary: Brief summary of what needs to change @@ -446,6 +476,7 @@ def file_analyzer_instruction(readonly_context: ReadonlyContext) -> str: "Analyzes a group of changed files and generates recommendations." ), instruction=file_analyzer_instruction, + include_contents="none", tools=[ get_next_file_group, get_release_context, # Get global context to avoid duplicates @@ -554,6 +585,26 @@ def summary_instruction(readonly_context: ReadonlyContext) -> str: ) +# Resume pipeline: skips planner, continues from where loop left off. +# Deep copy agents since ADK agents can only have one parent. +_resume_loop = copy.deepcopy(file_analysis_loop) +_resume_loop.parent_agent = None +_resume_summary = copy.deepcopy(summary_agent) +_resume_summary.parent_agent = None + +resume_pipeline = SequentialAgent( + name="resume_pipeline", + description=( + "Resumes the release analysis pipeline from the file analysis loop," + " skipping the planning phase." + ), + sub_agents=[ + _resume_loop, + _resume_summary, + ], +) + + # ============================================================================= # Root Agent: Entry point that understands user requests # ============================================================================= diff --git a/contributing/samples/adk_documentation/adk_release_analyzer/main.py b/contributing/samples/adk_documentation/adk_release_analyzer/main.py index bfad49e5e0..540433caa3 100644 --- a/contributing/samples/adk_documentation/adk_release_analyzer/main.py +++ b/contributing/samples/adk_documentation/adk_release_analyzer/main.py @@ -12,8 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +import argparse import asyncio import logging +import os import time from adk_documentation.adk_release_analyzer import agent @@ -23,30 +25,105 @@ from adk_documentation.settings import DOC_REPO from adk_documentation.utils import call_agent_async from google.adk.cli.utils import logs -from google.adk.runners import InMemoryRunner +from google.adk.runners import Runner +from google.adk.sessions import DatabaseSessionService APP_NAME = "adk_release_analyzer" USER_ID = "adk_release_analyzer_user" +DB_PATH = os.path.join(os.path.dirname(__file__), "sessions.db") +DB_URL = f"sqlite+aiosqlite:///{DB_PATH}" -logs.setup_adk_logger(level=logging.DEBUG) +logs.setup_adk_logger(level=logging.INFO) async def main(): - runner = InMemoryRunner( - agent=agent.root_agent, - app_name=APP_NAME, + parser = argparse.ArgumentParser(description="ADK Release Analyzer") + parser.add_argument( + "--resume", + action="store_true", + help="Resume from the last session instead of starting fresh.", ) - session = await runner.session_service.create_session( - app_name=APP_NAME, - user_id=USER_ID, + parser.add_argument( + "--start-tag", + type=str, + default=None, + help="The older release tag (base) for comparison, e.g. v1.26.0.", ) - - response = await call_agent_async( - runner, - USER_ID, - session.id, - "Please analyze the most recent two releases of ADK Python!", + parser.add_argument( + "--end-tag", + type=str, + default=None, + help="The newer release tag (head) for comparison, e.g. v1.27.0.", ) + args = parser.parse_args() + + session_service = DatabaseSessionService(db_url=DB_URL) + + if args.resume: + # Find the most recent session to resume + sessions_response = await session_service.list_sessions( + app_name=APP_NAME, user_id=USER_ID + ) + if not sessions_response.sessions: + print("No previous session found. Starting fresh.") + args.resume = False + + if args.resume: + # Resume: use existing session with resume_pipeline (skip planner) + last_session = sessions_response.sessions[-1] + session_id = last_session.id + session = await session_service.get_session( + app_name=APP_NAME, user_id=USER_ID, session_id=session_id + ) + state = session.state + group_index = state.get("current_group_index", 0) + total_groups = len(state.get("file_groups", [])) + num_recs = len(state.get("recommendations", [])) + print(f"Resuming session {session_id}") + print( + f" Progress: group {group_index + 1}/{total_groups}," + f" {num_recs} recommendations so far" + ) + print( + f" Release: {state.get('start_tag', '?')} →" + f" {state.get('end_tag', '?')}" + ) + + runner = Runner( + agent=agent.resume_pipeline, + app_name=APP_NAME, + session_service=session_service, + ) + prompt = "Resume analyzing the remaining file groups." + else: + # Fresh run + runner = Runner( + agent=agent.root_agent, + app_name=APP_NAME, + session_service=session_service, + ) + session = await session_service.create_session( + app_name=APP_NAME, + user_id=USER_ID, + ) + session_id = session.id + if args.start_tag and args.end_tag: + prompt = ( + f"Please analyze ADK Python releases from {args.start_tag} to" + f" {args.end_tag}!" + ) + elif args.end_tag: + prompt = ( + f"Please analyze the ADK Python release {args.end_tag} against its" + " previous release!" + ) + else: + prompt = "Please analyze the most recent two releases of ADK Python!" + + print(f"Session ID: {session_id}") + print("-" * 80) + + response = await call_agent_async(runner, USER_ID, session_id, prompt) print(f"<<<< Agent Final Output: {response}\n") diff --git a/contributing/samples/adk_documentation/tools.py b/contributing/samples/adk_documentation/tools.py index 74703b9585..723148ec30 100644 --- a/contributing/samples/adk_documentation/tools.py +++ b/contributing/samples/adk_documentation/tools.py @@ -183,18 +183,24 @@ def read_local_git_repo_file_content(file_path: str) -> Dict[str, Any]: commit hash. """ print(f"Attempting to read file from path: {file_path}") - dir_path = os.path.dirname(file_path) - head_commit_sha = _find_head_commit_sha(dir_path) + if not os.path.isabs(file_path): + return error_response( + f"file_path must be an absolute path, got: {file_path}" + ) + + try: + dir_path = os.path.dirname(file_path) + head_commit_sha = _find_head_commit_sha(dir_path) + except (FileNotFoundError, subprocess.CalledProcessError): + head_commit_sha = "unknown" try: - # Open and read the file content with open(file_path, "r", encoding="utf-8") as f: content = f.read() - # Add line numbers to the content - lines = content.splitlines() - numbered_lines = [f"{i + 1}: {line}" for i, line in enumerate(lines)] - numbered_content = "\n".join(numbered_lines) + lines = content.splitlines() + numbered_lines = [f"{i + 1}: {line}" for i, line in enumerate(lines)] + numbered_content = "\n".join(numbered_lines) return { "status": "success", @@ -204,7 +210,7 @@ def read_local_git_repo_file_content(file_path: str) -> Dict[str, Any]: } except FileNotFoundError: return error_response(f"Error: File not found at {file_path}") - except IOError as e: + except (IOError, OSError) as e: return error_response(f"An unexpected error occurred: {e}") From 446575fdf55dbaea126d3634a46e3318de2ce3cc Mon Sep 17 00:00:00 2001 From: George Weale Date: Thu, 26 Mar 2026 17:37:45 -0700 Subject: [PATCH 091/192] fix: Update v2 release workflow to be dispatched from v2 branch The workflow now accepts a `release_branch` input, checks out the specified release branch, and updates the version in `src/google/adk/version.py` Co-authored-by: George Weale PiperOrigin-RevId: 890134954 --- .github/workflows/release-v2-publish.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release-v2-publish.yml b/.github/workflows/release-v2-publish.yml index 3ecb8f677d..41edc78d9e 100644 --- a/.github/workflows/release-v2-publish.yml +++ b/.github/workflows/release-v2-publish.yml @@ -1,5 +1,6 @@ # Step 6 (v2): Builds and publishes the v2 package to PyPI from a release/v{version} branch. -# Converts semver pre-release version to PEP 440 format before building. +# Reads version from .release-please-manifest-v2.json, converts to PEP 440, +# updates version.py, then builds and publishes. # Creates a merge-back PR (step 7) to sync release changes to v2. name: "Release v2: Publish to PyPi" @@ -17,15 +18,16 @@ jobs: - name: Validate branch run: | if [[ ! "${GITHUB_REF_NAME}" =~ ^release/v[0-9]+\.[0-9]+\.[0-9]+ ]]; then - echo "Error: Must run from a release/v* branch (e.g., release/v2.0.0-alpha.1)" + echo "Error: Must run from a release/v* branch (e.g., release/v2.0.0-alpha.2)" exit 1 fi - - name: Extract and convert version to PEP 440 + - uses: actions/checkout@v6 + + - name: Extract version from manifest and convert to PEP 440 id: version run: | - VERSION="${GITHUB_REF_NAME}" - VERSION="${VERSION#release/v}" + VERSION=$(jq -r '.["."]' .github/.release-please-manifest-v2.json) echo "semver=$VERSION" >> $GITHUB_OUTPUT echo "Semver version: $VERSION" @@ -38,8 +40,6 @@ jobs: echo "pep440=$PEP440" >> $GITHUB_OUTPUT echo "PEP 440 version: $PEP440" - - uses: actions/checkout@v6 - - name: Install uv uses: astral-sh/setup-uv@v4 with: @@ -50,13 +50,13 @@ jobs: with: python-version: "3.11" - - name: Update pyproject.toml with PEP 440 version + - name: Update version.py with PEP 440 version env: PEP440_VERSION: ${{ steps.version.outputs.pep440 }} run: | - # Update version in pyproject.toml if it differs from PEP 440 - sed -i "s/^version = .*/version = \"${PEP440_VERSION}\"/" pyproject.toml - echo "Updated pyproject.toml version to ${PEP440_VERSION}" + sed -i "s/^__version__ = .*/__version__ = \"${PEP440_VERSION}\"/" src/google/adk/version.py + echo "Updated version.py to ${PEP440_VERSION}" + grep __version__ src/google/adk/version.py - name: Build package run: uv build From fe4181718d104843b974417c59203ed8a7b15255 Mon Sep 17 00:00:00 2001 From: Xuan Yang Date: Thu, 26 Mar 2026 18:05:21 -0700 Subject: [PATCH 092/192] fix: Generate IDs for FunctionCalls when processing streaming LLM responses Close: #4609 Co-authored-by: Xuan Yang PiperOrigin-RevId: 890144644 --- src/google/adk/utils/streaming_utils.py | 13 + tests/unittests/utils/test_streaming_utils.py | 232 ++++++++++++++++++ 2 files changed, 245 insertions(+) diff --git a/src/google/adk/utils/streaming_utils.py b/src/google/adk/utils/streaming_utils.py index 808541f21b..af6957b8fe 100644 --- a/src/google/adk/utils/streaming_utils.py +++ b/src/google/adk/utils/streaming_utils.py @@ -225,6 +225,13 @@ def _process_function_call_part(self, part: types.Part) -> None: if fc.partial_args or fc.will_continue: # Streaming function call arguments + # Generate ID on first chunk if not provided by LLM + if not fc.id and not self._current_fc_id: + # Lazy import to avoid circular dependency + from ..flows.llm_flows.functions import generate_client_function_call_id + + fc.id = generate_client_function_call_id() + # Save thought_signature from the part (first chunk should have it) if part.thought_signature and not self._current_thought_signature: self._current_thought_signature = part.thought_signature @@ -233,6 +240,12 @@ def _process_function_call_part(self, part: types.Part) -> None: # Non-streaming function call (standard format with args) # Skip empty function calls (used as streaming end markers) if fc.name: + # Generate ID if not provided by LLM + if not fc.id: + # Lazy import to avoid circular dependency + from ..flows.llm_flows.functions import generate_client_function_call_id + + fc.id = generate_client_function_call_id() # Flush any buffered text first, then add the FC part self._flush_text_buffer_to_sequence() self._parts_sequence.append(part) diff --git a/tests/unittests/utils/test_streaming_utils.py b/tests/unittests/utils/test_streaming_utils.py index c814ecd5b1..6b68789bf0 100644 --- a/tests/unittests/utils/test_streaming_utils.py +++ b/tests/unittests/utils/test_streaming_utils.py @@ -16,6 +16,7 @@ from google.adk.features._feature_registry import FeatureName from google.adk.features._feature_registry import temporary_feature_override +from google.adk.flows.llm_flows.functions import AF_FUNCTION_CALL_ID_PREFIX from google.adk.utils import streaming_utils from google.genai import types import pytest @@ -304,3 +305,234 @@ async def run_test(): await run_test() else: await run_test() + + +class TestFunctionCallIdGeneration: + """Tests for function call ID generation in streaming mode. + + Regression tests for https://github.com/google/adk-python/issues/4609. + """ + + @pytest.mark.asyncio + async def test_non_streaming_fc_generates_id_when_empty(self): + """Non-streaming function call should get an adk-* ID if LLM didn't provide one.""" + with temporary_feature_override( + FeatureName.PROGRESSIVE_SSE_STREAMING, True + ): + aggregator = streaming_utils.StreamingResponseAggregator() + + response = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="my_tool", + args={"x": 1}, + id=None, # No ID from LLM + ) + ) + ] + ), + finish_reason=types.FinishReason.STOP, + ) + ] + ) + + async for _ in aggregator.process_response(response): + pass + + closed_response = aggregator.close() + assert closed_response is not None + fc = closed_response.content.parts[0].function_call + assert fc.id is not None + assert fc.id.startswith(AF_FUNCTION_CALL_ID_PREFIX) + + @pytest.mark.asyncio + async def test_non_streaming_fc_preserves_llm_assigned_id(self): + """Non-streaming function call should preserve ID if LLM provided one.""" + with temporary_feature_override( + FeatureName.PROGRESSIVE_SSE_STREAMING, True + ): + aggregator = streaming_utils.StreamingResponseAggregator() + + response = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="my_tool", + args={"x": 1}, + id="llm-assigned-id", + ) + ) + ] + ), + finish_reason=types.FinishReason.STOP, + ) + ] + ) + + async for _ in aggregator.process_response(response): + pass + + closed_response = aggregator.close() + assert closed_response is not None + fc = closed_response.content.parts[0].function_call + assert fc.id == "llm-assigned-id" + + @pytest.mark.asyncio + async def test_streaming_fc_generates_consistent_id_across_chunks(self): + """Streaming function call should have the same ID in partial and final responses.""" + with temporary_feature_override( + FeatureName.PROGRESSIVE_SSE_STREAMING, True + ): + aggregator = streaming_utils.StreamingResponseAggregator() + + # First chunk: function call starts + response1 = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="my_tool", + id=None, + partial_args=[ + types.PartialArg( + json_path="$.x", + string_value="hello", + ) + ], + will_continue=True, + ) + ) + ] + ) + ) + ] + ) + + # Second chunk: function call continues + response2 = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name=None, + id=None, + partial_args=[ + types.PartialArg( + json_path="$.x", + string_value=" world", + ) + ], + will_continue=False, # Complete + ) + ) + ] + ), + finish_reason=types.FinishReason.STOP, + ) + ] + ) + + partial_results = [] + async for r in aggregator.process_response(response1): + partial_results.append(r) + async for r in aggregator.process_response(response2): + partial_results.append(r) + + closed_response = aggregator.close() + assert closed_response is not None + final_fc = closed_response.content.parts[0].function_call + assert final_fc.id is not None + assert final_fc.id.startswith(AF_FUNCTION_CALL_ID_PREFIX) + assert final_fc.args == {"x": "hello world"} + + # Verify partial and final events share the same ID + partial_fc = partial_results[0].content.parts[0].function_call + assert ( + partial_fc.id == final_fc.id + ), f"Partial FC ID ({partial_fc.id!r}) != Final FC ID ({final_fc.id!r})" + + @pytest.mark.asyncio + async def test_multiple_streaming_fcs_get_different_ids(self): + """Multiple function calls arriving in separate chunks should get different IDs.""" + with temporary_feature_override( + FeatureName.PROGRESSIVE_SSE_STREAMING, True + ): + aggregator = streaming_utils.StreamingResponseAggregator() + + # First FC + response1 = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="tool_a", + id=None, + partial_args=[ + types.PartialArg( + json_path="$.a", string_value="val_a" + ) + ], + will_continue=False, + ) + ) + ] + ) + ) + ] + ) + + # Second FC + response2 = types.GenerateContentResponse( + candidates=[ + types.Candidate( + content=types.Content( + parts=[ + types.Part( + function_call=types.FunctionCall( + name="tool_b", + id=None, + partial_args=[ + types.PartialArg( + json_path="$.b", string_value="val_b" + ) + ], + will_continue=False, + ) + ) + ] + ), + finish_reason=types.FinishReason.STOP, + ) + ] + ) + + async for _ in aggregator.process_response(response1): + pass + async for _ in aggregator.process_response(response2): + pass + + closed_response = aggregator.close() + assert closed_response is not None + assert len(closed_response.content.parts) == 2 + + fc_a = closed_response.content.parts[0].function_call + fc_b = closed_response.content.parts[1].function_call + + assert fc_a.id is not None + assert fc_b.id is not None + assert fc_a.id.startswith(AF_FUNCTION_CALL_ID_PREFIX) + assert fc_b.id.startswith(AF_FUNCTION_CALL_ID_PREFIX) + assert fc_a.id != fc_b.id # Different IDs for different FCs From 5df03f1f412e3ab55a5a6ceac892ba6b985a8036 Mon Sep 17 00:00:00 2001 From: "Xiang (Sean) Zhou" Date: Fri, 27 Mar 2026 10:05:39 -0700 Subject: [PATCH 093/192] fix(tools): handle toolset errors gracefully in canonical_tools MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When an MCP server (or any toolset) is unavailable or raises an exception during get_tools(), the error previously propagated uncaught through _convert_tool_union_to_tools() and canonical_tools(), crashing the entire agent silently with no log output. This change wraps the toolset.get_tools_with_prefix() call in a try-except that catches exceptions, logs a warning with the toolset class name and error details, and returns an empty tool list. This allows the agent to continue operating with tools from other working toolsets. The fix preserves the existing retry behavior — McpToolset's @retry_on_errors decorator still attempts reconnection before the error reaches this handler. On subsequent agent invocations, get_tools() is called again, naturally retrying the connection. Fixes: #3341 Co-authored-by: Xiang (Sean) Zhou PiperOrigin-RevId: 890512146 --- src/google/adk/agents/llm_agent.py | 10 +++++- .../unittests/agents/test_llm_agent_fields.py | 34 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/google/adk/agents/llm_agent.py b/src/google/adk/agents/llm_agent.py index 0f7cc2b7d9..96e5043f72 100644 --- a/src/google/adk/agents/llm_agent.py +++ b/src/google/adk/agents/llm_agent.py @@ -181,7 +181,15 @@ async def _convert_tool_union_to_tools( return [FunctionTool(func=tool_union)] # At this point, tool_union must be a BaseToolset - return await tool_union.get_tools_with_prefix(ctx) + try: + return await tool_union.get_tools_with_prefix(ctx) + except Exception as e: + logger.warning( + 'Failed to get tools from toolset %s: %s', + type(tool_union).__name__, + e, + ) + return [] class LlmAgent(BaseAgent): diff --git a/tests/unittests/agents/test_llm_agent_fields.py b/tests/unittests/agents/test_llm_agent_fields.py index df543db919..b9e410f17b 100644 --- a/tests/unittests/agents/test_llm_agent_fields.py +++ b/tests/unittests/agents/test_llm_agent_fields.py @@ -472,6 +472,40 @@ def _tool_2(): assert tools[0].name == '_tool_1' assert tools[1].name == '_tool_2' + async def test_canonical_tools_graceful_degradation_on_toolset_error(self): + """Test that canonical_tools returns tools from working toolsets when one fails.""" + from google.adk.tools.base_tool import BaseTool + from google.adk.tools.base_toolset import BaseToolset + + class FailingToolset(BaseToolset): + + async def get_tools(self, readonly_context=None): + raise ConnectionError('MCP server unavailable') + + class WorkingToolset(BaseToolset): + + async def get_tools(self, readonly_context=None): + tool = mock.MagicMock(spec=BaseTool) + tool.name = 'working_tool' + tool._get_declaration = mock.MagicMock(return_value=None) + return [tool] + + def _regular_tool(): + pass + + agent = LlmAgent( + name='test_agent', + model='gemini-pro', + tools=[_regular_tool, FailingToolset(), WorkingToolset()], + ) + ctx = await _create_readonly_context(agent) + tools = await agent.canonical_tools(ctx) + + # Should have the regular tool + working toolset tool, but not crash + assert len(tools) == 2 + assert tools[0].name == '_regular_tool' + assert tools[1].name == 'working_tool' + # Tests for multi-provider model support via string model names @pytest.mark.parametrize( From cdb3ff4e1f155c357f8cf720132d09bbc1446075 Mon Sep 17 00:00:00 2001 From: Vishwa Murugan Date: Fri, 27 Mar 2026 10:42:06 -0700 Subject: [PATCH 094/192] fix: Handle merging lists in deep_merge_dicts The deep_merge_dicts function will now extend lists when merging dictionaries, instead of overwriting them. Co-authored-by: Vishwa Murugan PiperOrigin-RevId: 890531331 --- src/google/adk/flows/llm_flows/functions.py | 6 ++- .../flows/llm_flows/test_functions_simple.py | 41 +++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/google/adk/flows/llm_flows/functions.py b/src/google/adk/flows/llm_flows/functions.py index d2e1d61032..1f85bee3a8 100644 --- a/src/google/adk/flows/llm_flows/functions.py +++ b/src/google/adk/flows/llm_flows/functions.py @@ -1151,10 +1151,12 @@ def __build_response_event( def deep_merge_dicts(d1: dict, d2: dict) -> dict: - """Recursively merges d2 into d1.""" + """Recursively merges d2 into d1, extending lists where keys collide.""" for key, value in d2.items(): if key in d1 and isinstance(d1[key], dict) and isinstance(value, dict): d1[key] = deep_merge_dicts(d1[key], value) + elif key in d1 and isinstance(d1[key], list) and isinstance(value, list): + d1[key].extend(value) else: d1[key] = value return d1 @@ -1195,7 +1197,7 @@ def merge_parallel_function_response_events( author=base_event.author, branch=base_event.branch, content=types.Content(role='user', parts=merged_parts), - actions=merged_actions, # Optionally merge actions if required + actions=merged_actions, # Aggregated from all parallel events ) # Use the base_event as the timestamp diff --git a/tests/unittests/flows/llm_flows/test_functions_simple.py b/tests/unittests/flows/llm_flows/test_functions_simple.py index 7aacb237e5..f63cefeb45 100644 --- a/tests/unittests/flows/llm_flows/test_functions_simple.py +++ b/tests/unittests/flows/llm_flows/test_functions_simple.py @@ -18,6 +18,8 @@ from google.adk.agents.llm_agent import Agent from google.adk.events.event import Event +from google.adk.events.event_actions import EventActions +from google.adk.events.ui_widget import UiWidget from google.adk.flows.llm_flows.functions import find_matching_function_call from google.adk.flows.llm_flows.functions import handle_function_calls_async from google.adk.flows.llm_flows.functions import handle_function_calls_live @@ -1138,6 +1140,45 @@ async def yielding_async() -> dict: ] +def test_merge_parallel_function_response_events_merges_ui_widgets(): + """Test that merge_parallel_function_response_events merges render_ui_widgets.""" + invocation_id = 'base_invocation_123' + + widget1 = UiWidget( + id='widget_1', provider='mcp', payload={'resource_uri': 'ui://widget1'} + ) + widget2 = UiWidget( + id='widget_2', provider='mcp', payload={'resource_uri': 'ui://widget2'} + ) + widget3 = UiWidget( + id='widget_3', provider='mcp', payload={'resource_uri': 'ui://widget3'} + ) + + event1 = Event( + invocation_id=invocation_id, + author='test_agent', + actions=EventActions(render_ui_widgets=[widget1]), + ) + + event2 = Event( + invocation_id='different_invocation_456', + author='different_agent', + actions=EventActions(render_ui_widgets=[widget2, widget3]), + ) + + # Merge the events + merged_event = merge_parallel_function_response_events([event1, event2]) + + # Should contain all ui widgets + assert merged_event.actions.render_ui_widgets is not None + assert len(merged_event.actions.render_ui_widgets) == 3 + + widget_ids = {widget.id for widget in merged_event.actions.render_ui_widgets} + assert 'widget_1' in widget_ids + assert 'widget_2' in widget_ids + assert 'widget_3' in widget_ids + + @pytest.mark.asyncio @pytest.mark.parametrize( 'handle_function_calls', From 4ffe8fb4a6befc9e9d0e838427b7bf4890df4ba3 Mon Sep 17 00:00:00 2001 From: Yeesian Ng Date: Fri, 27 Mar 2026 12:40:42 -0700 Subject: [PATCH 095/192] fix: api client initialization logic to be mutually exclusive between ExpressMode and GCP projects Otherwise we get errors of the form: `Project/location and API key are mutually exclusive in the client initializer` (https://github.com/googleapis/python-genai/blob/1ccad7b70ae1068cb5f3e866ad7ca4d42aa55e1e/google/genai/_api_client.py#L590-L591). Co-authored-by: Yeesian Ng PiperOrigin-RevId: 890588927 --- src/google/adk/memory/vertex_ai_memory_bank_service.py | 8 +++----- src/google/adk/sessions/vertex_ai_session_service.py | 6 +++++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/google/adk/memory/vertex_ai_memory_bank_service.py b/src/google/adk/memory/vertex_ai_memory_bank_service.py index 2218c8742b..90f35d9fc2 100644 --- a/src/google/adk/memory/vertex_ai_memory_bank_service.py +++ b/src/google/adk/memory/vertex_ai_memory_bank_service.py @@ -397,11 +397,9 @@ def _get_api_client(self) -> vertexai.AsyncClient: """ import vertexai - return vertexai.Client( - project=self._project, - location=self._location, - api_key=self._express_mode_api_key, - ).aio + if self._express_mode_api_key: + return vertexai.Client(api_key=self._express_mode_api_key).aio + return vertexai.Client(project=self._project, location=self._location).aio def _should_filter_out_event(content: types.Content) -> bool: diff --git a/src/google/adk/sessions/vertex_ai_session_service.py b/src/google/adk/sessions/vertex_ai_session_service.py index 9e5c9bb2ec..7c2d6d68d5 100644 --- a/src/google/adk/sessions/vertex_ai_session_service.py +++ b/src/google/adk/sessions/vertex_ai_session_service.py @@ -376,11 +376,15 @@ def _get_api_client(self) -> vertexai.AsyncClient: """ import vertexai + if self._express_mode_api_key: + return vertexai.Client( + http_options=self._api_client_http_options_override(), + api_key=self._express_mode_api_key, + ).aio return vertexai.Client( project=self._project, location=self._location, http_options=self._api_client_http_options_override(), - api_key=self._express_mode_api_key, ).aio From 675476088b9f3c0a488ce48f652b7f3f7ea47230 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Fri, 27 Mar 2026 12:55:14 -0700 Subject: [PATCH 096/192] feat: Support AgentRegistry association PiperOrigin-RevId: 890595289 --- .../agent_registry/agent_registry.py | 59 +++++++- src/google/adk/telemetry/tracing.py | 13 ++ .../agent_registry/test_agent_registry.py | 130 ++++++++++++++++++ tests/unittests/telemetry/test_spans.py | 113 ++++++++++++++- 4 files changed, 307 insertions(+), 8 deletions(-) diff --git a/src/google/adk/integrations/agent_registry/agent_registry.py b/src/google/adk/integrations/agent_registry/agent_registry.py index 1cf3d8003c..359d11648d 100644 --- a/src/google/adk/integrations/agent_registry/agent_registry.py +++ b/src/google/adk/integrations/agent_registry/agent_registry.py @@ -37,17 +37,70 @@ from a2a.types import TransportProtocol as A2ATransport from google.adk.agents.readonly_context import ReadonlyContext from google.adk.agents.remote_a2a_agent import RemoteA2aAgent +from google.adk.telemetry.tracing import GCP_MCP_SERVER_DESTINATION_ID +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.mcp_tool.mcp_session_manager import SseConnectionParams +from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams from google.adk.tools.mcp_tool.mcp_toolset import McpToolset import google.auth import google.auth.transport.requests import httpx +from mcp import StdioServerParameters +from typing_extensions import override logger = logging.getLogger("google_adk." + __name__) AGENT_REGISTRY_BASE_URL = "https://agentregistry.googleapis.com/v1alpha" +# An MCPToolset for a single registered MCP server. Adds the special +# gcp.mcp.server.destination.id custom_metadata key on each returned tool. This special key is +# added to execute_tool spans in google.adk.telemetry.tracing +class AgentRegistrySingleMcpToolset(McpToolset): + + def __init__( + self, + *, + destination_resource_id: str | None, + connection_params: ( + StdioServerParameters + | StdioConnectionParams + | SseConnectionParams + | StreamableHTTPConnectionParams + ), + tool_name_prefix: str | None = None, + header_provider: ( + Callable[[ReadonlyContext], Dict[str, str]] | None + ) = None, + ): + super().__init__( + connection_params=connection_params, + tool_name_prefix=tool_name_prefix, + header_provider=header_provider, + ) + self.destination_resource_id = destination_resource_id + + @override + async def get_tools( + self, readonly_context: ReadonlyContext | None = None + ) -> List[BaseTool]: + tools = await super().get_tools(readonly_context) + + # Noop if there is no destination_resource_id + if self.destination_resource_id is None: + return tools + + for tool in tools: + if not tool.custom_metadata: + tool.custom_metadata = {} + + tool.custom_metadata[GCP_MCP_SERVER_DESTINATION_ID] = ( + self.destination_resource_id + ) + return tools + + class _ProtocolType(str, Enum): """Supported agent protocol types.""" @@ -196,6 +249,9 @@ def get_mcp_toolset(self, mcp_server_name: str) -> McpToolset: """Constructs an McpToolset instance from a registered MCP Server.""" server_details = self.get_mcp_server(mcp_server_name) name = self._clean_name(server_details.get("displayName", mcp_server_name)) + mcp_server_id = server_details.get("mcpServerId") + if not isinstance(mcp_server_id, str): + mcp_server_id = None endpoint_uri = self._get_connection_uri( server_details, protocol_binding=A2ATransport.jsonrpc @@ -210,7 +266,8 @@ def get_mcp_toolset(self, mcp_server_name: str) -> McpToolset: connection_params = StreamableHTTPConnectionParams( url=endpoint_uri, headers=self._get_auth_headers() ) - return McpToolset( + return AgentRegistrySingleMcpToolset( + destination_resource_id=mcp_server_id, connection_params=connection_params, tool_name_prefix=name, header_provider=self._header_provider, diff --git a/src/google/adk/telemetry/tracing.py b/src/google/adk/telemetry/tracing.py index 5c05968d31..55c37a6c60 100644 --- a/src/google/adk/telemetry/tracing.py +++ b/src/google/adk/telemetry/tracing.py @@ -83,6 +83,11 @@ USER_CONTENT_ELIDED = '' +# Used to associate a span with a destination resource for AppHub. Tools with +# this key in their BaseTool.custom_metadata will have the mapping added as a +# span attribute +GCP_MCP_SERVER_DESTINATION_ID = 'gcp.mcp.server.destination.id' + # Needed to avoid circular imports if TYPE_CHECKING: from ..agents.base_agent import BaseAgent @@ -190,6 +195,14 @@ def trace_tool_call( else: span.set_attribute(ERROR_TYPE, type(error).__name__) + # Special case for client side association with a remote tool call + if ( + tool.custom_metadata + and GCP_MCP_SERVER_DESTINATION_ID in tool.custom_metadata + ): + destination_id = tool.custom_metadata[GCP_MCP_SERVER_DESTINATION_ID] + span.set_attribute(GCP_MCP_SERVER_DESTINATION_ID, destination_id) + # Setting empty llm request and response (as UI expect these) while not # applicable for tool_response. span.set_attribute('gcp.vertex.agent.llm_request', '{}') diff --git a/tests/unittests/integrations/agent_registry/test_agent_registry.py b/tests/unittests/integrations/agent_registry/test_agent_registry.py index 0e68cc253c..377fceda82 100644 --- a/tests/unittests/integrations/agent_registry/test_agent_registry.py +++ b/tests/unittests/integrations/agent_registry/test_agent_registry.py @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. + +from unittest.mock import AsyncMock from unittest.mock import MagicMock from unittest.mock import patch @@ -19,8 +21,12 @@ from google.adk.agents.remote_a2a_agent import RemoteA2aAgent from google.adk.integrations.agent_registry import _ProtocolType from google.adk.integrations.agent_registry import AgentRegistry +from google.adk.telemetry.tracing import GCP_MCP_SERVER_DESTINATION_ID from google.adk.tools.mcp_tool.mcp_toolset import McpToolset import httpx +from mcp import ClientSession +from mcp.types import ListToolsResult +from mcp.types import Tool import pytest @@ -31,6 +37,130 @@ def registry(self): with patch("google.auth.default", return_value=(MagicMock(), "project-id")): return AgentRegistry(project_id="test-project", location="global") + @pytest.mark.asyncio + @patch("httpx.Client") + @patch( + "google.adk.tools.mcp_tool.mcp_session_manager.MCPSessionManager.create_session", + new_callable=AsyncMock, + ) + async def test_get_mcp_toolset_adds_destination_id( + self, mock_create_session, mock_httpx, registry + ): + """Test that tools from get_mcp_toolset have the destination ID.""" + # Arrange + mcp_server_name = "test-mcp-server" + mock_api_response = MagicMock() + mock_api_response.json.return_value = { + "displayName": "TestPrefix", + "mcpServerId": ( + "urn:mcp:googleapis.com:projects:1234:locations:global:bigquery" + ), + "interfaces": [{ + "url": "https://mcp.com", + "protocolBinding": A2ATransport.jsonrpc, + }], + } + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_api_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + mock_session = AsyncMock(spec=ClientSession) + mock_create_session.return_value = mock_session + + # Mock the tools returned by list_tools + mock_session.list_tools.return_value = ListToolsResult( + tools=[ + Tool( + name="tool1", + description="d1", + inputs={}, + outputs={}, + inputSchema={}, + ), + Tool( + name="tool2", + description="d2", + inputs={}, + outputs={}, + inputSchema={}, + ), + ] + ) + + # Act + toolset = registry.get_mcp_toolset(mcp_server_name) + tools = await toolset.get_tools() + + # Assert + assert isinstance(toolset, McpToolset) + mock_session.list_tools.assert_called_once_with() + assert len(tools) == 2 + for tool in tools: + assert tool.custom_metadata is not None + assert ( + tool.custom_metadata.get(GCP_MCP_SERVER_DESTINATION_ID) + == "urn:mcp:googleapis.com:projects:1234:locations:global:bigquery" + ) + + @pytest.mark.asyncio + @patch("httpx.Client") + @patch( + "google.adk.tools.mcp_tool.mcp_session_manager.MCPSessionManager.create_session", + new_callable=AsyncMock, + ) + async def test_get_mcp_toolset_handles_missing_destination_id( + self, mock_create_session, mock_httpx, registry + ): + """Test get_mcp_toolset when the destination ID is missing.""" + # Arrange + mcp_server_name = "test-mcp-server" + mock_api_response = MagicMock() + mock_api_response.json.return_value = { + "displayName": "TestPrefix", + # "mcpServerId" is intentionally omitted + "interfaces": [{ + "url": "https://mcp.com", + "protocolBinding": A2ATransport.jsonrpc, + }], + } + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_api_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + mock_session = AsyncMock(spec=ClientSession) + mock_create_session.return_value = mock_session + + # Mock the tools returned by list_tools + mock_session.list_tools.return_value = ListToolsResult( + tools=[ + Tool( + name="tool1", + description="d1", + inputs={}, + outputs={}, + inputSchema={}, + ), + ] + ) + + # Act + toolset = registry.get_mcp_toolset(mcp_server_name) + tools = await toolset.get_tools() + + # Assert + assert isinstance(toolset, McpToolset) + mock_session.list_tools.assert_called_once_with() + assert len(tools) == 1 + for tool in tools: + # The custom_metadata shouldn't have been added + assert tool.custom_metadata is None + def test_init_raises_value_error_if_params_missing(self): with pytest.raises( ValueError, match="project_id and location must be provided" diff --git a/tests/unittests/telemetry/test_spans.py b/tests/unittests/telemetry/test_spans.py index c4bd485fba..5b0cfc7a82 100644 --- a/tests/unittests/telemetry/test_spans.py +++ b/tests/unittests/telemetry/test_spans.py @@ -26,6 +26,7 @@ from google.adk.models.llm_response import LlmResponse from google.adk.sessions.in_memory_session_service import InMemorySessionService from google.adk.telemetry.tracing import ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS +from google.adk.telemetry.tracing import GCP_MCP_SERVER_DESTINATION_ID from google.adk.telemetry.tracing import trace_agent_invocation from google.adk.telemetry.tracing import trace_call_llm from google.adk.telemetry.tracing import trace_inference_result @@ -34,6 +35,7 @@ from google.adk.telemetry.tracing import trace_tool_call from google.adk.telemetry.tracing import use_inference_span from google.adk.tools.base_tool import BaseTool +from google.adk.tools.tool_context import ToolContext from google.genai import types from mcp import ClientSession as McpClientSession from mcp import ListToolsResult as McpListToolsResult @@ -70,6 +72,15 @@ def model_dumps_json(self, exclude_none: bool = False) -> str: return '' +# Create a minimal concrete BaseTool for testing +class SimpleTestTool(BaseTool): + + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + return 'SimpleTestTool result' + + @pytest.fixture def mock_span_fixture(): return mock.MagicMock() @@ -77,18 +88,21 @@ def mock_span_fixture(): @pytest.fixture def mock_tool_fixture(): - tool = mock.Mock(spec=BaseTool) - tool.name = 'sample_tool' - tool.description = 'A sample tool for testing.' - return tool + return SimpleTestTool( + name='sample_tool', + description='A sample tool for testing.', + ) @pytest.fixture def mock_event_fixture(): event_mock = mock.create_autospec(Event, instance=True) + event_mock.id = 'test_event_id' event_mock.model_dumps_json.return_value = ( '{"default_event_key": "default_event_value"}' ) + event_mock.content = mock.MagicMock() + event_mock.content.parts = [] return event_mock @@ -377,6 +391,91 @@ async def test_trace_call_llm_with_thought_signature( assert len(parsed['contents']) == 3 +def test_trace_tool_call_with_destination_id( + monkeypatch, mock_span_fixture, mock_tool_fixture, mock_event_fixture +): + """Test trace_tool_call sets destination ID span attribute when present.""" + # Arrange + monkeypatch.setattr( + 'opentelemetry.trace.get_current_span', lambda: mock_span_fixture + ) + + test_dest_id = 'urn:mcp:googleapis.com:project:1234:location:global:bigquery' + tool = mock_tool_fixture + tool.custom_metadata = { + GCP_MCP_SERVER_DESTINATION_ID: test_dest_id, + 'other_meta': 'value', + } + + # Act + trace_tool_call( + tool=tool, + args={}, + function_response_event=mock_event_fixture, + ) + + # Assert + mock_span_fixture.set_attribute.assert_any_call( + GCP_MCP_SERVER_DESTINATION_ID, test_dest_id + ) + + +def test_trace_tool_call_without_destination_id( + monkeypatch, mock_span_fixture, mock_tool_fixture, mock_event_fixture +): + """Test trace_tool_call does not set destination ID span attribute when not present.""" + # Arrange + monkeypatch.setattr( + 'opentelemetry.trace.get_current_span', lambda: mock_span_fixture + ) + + tool = mock_tool_fixture + tool.custom_metadata = { + 'other_meta': 'value', + } + + # Act + trace_tool_call( + tool=tool, + args={}, + function_response_event=mock_event_fixture, + ) + + # Assert + called_with_dest_id = any( + call_args[0][0] == GCP_MCP_SERVER_DESTINATION_ID + for call_args in mock_span_fixture.set_attribute.call_args_list + ) + assert not called_with_dest_id + + +def test_trace_tool_call_with_empty_custom_metadata( + monkeypatch, mock_span_fixture, mock_tool_fixture, mock_event_fixture +): + """Test trace_tool_call handles empty custom_metadata gracefully.""" + # Arrange + monkeypatch.setattr( + 'opentelemetry.trace.get_current_span', lambda: mock_span_fixture + ) + + tool = mock_tool_fixture + tool.custom_metadata = {} + + # Act + trace_tool_call( + tool=tool, + args={}, + function_response_event=mock_event_fixture, + ) + + # Assert + called_with_dest_id = any( + call_args[0][0] == GCP_MCP_SERVER_DESTINATION_ID + for call_args in mock_span_fixture.set_attribute.call_args_list + ) + assert not called_with_dest_id + + def test_trace_tool_call_with_scalar_response( monkeypatch, mock_span_fixture, mock_tool_fixture, mock_event_fixture ): @@ -417,7 +516,7 @@ def test_trace_tool_call_with_scalar_response( mock.call('gen_ai.operation.name', 'execute_tool'), mock.call('gen_ai.tool.name', mock_tool_fixture.name), mock.call('gen_ai.tool.description', mock_tool_fixture.description), - mock.call('gen_ai.tool.type', 'BaseTool'), + mock.call('gen_ai.tool.type', 'SimpleTestTool'), mock.call('gen_ai.tool.call.id', test_tool_call_id), mock.call('gcp.vertex.agent.tool_call_args', json.dumps(test_args)), mock.call('gcp.vertex.agent.event_id', test_event_id), @@ -477,7 +576,7 @@ def test_trace_tool_call_with_dict_response( mock.call('gen_ai.operation.name', 'execute_tool'), mock.call('gen_ai.tool.name', mock_tool_fixture.name), mock.call('gen_ai.tool.description', mock_tool_fixture.description), - mock.call('gen_ai.tool.type', 'BaseTool'), + mock.call('gen_ai.tool.type', 'SimpleTestTool'), mock.call('gen_ai.tool.call.id', test_tool_call_id), mock.call('gcp.vertex.agent.tool_call_args', json.dumps(test_args)), mock.call('gcp.vertex.agent.event_id', test_event_id), @@ -1221,7 +1320,7 @@ def test_trace_tool_call_with_tool_execution_error( mock.call('gen_ai.operation.name', 'execute_tool'), mock.call('gen_ai.tool.name', mock_tool_fixture.name), mock.call('gen_ai.tool.description', mock_tool_fixture.description), - mock.call('gen_ai.tool.type', 'BaseTool'), + mock.call('gen_ai.tool.type', 'SimpleTestTool'), mock.call('error.type', 'INTERNAL_SERVER_ERROR'), mock.call('gcp.vertex.agent.tool_call_args', json.dumps(test_args)), mock.call( From 14869253d072e901d530fd3b7ee8ef67fbe5ddbc Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Fri, 27 Mar 2026 14:20:08 -0700 Subject: [PATCH 097/192] fix: update toolbox-adk and toolbox server versions This PR updates the `toolbox-adk` package version in the `pyproject.toml` and also updates the MCP Toolbox server version to the latest in the docs. PiperOrigin-RevId: 890633573 --- contributing/samples/toolbox_agent/README.md | 2 +- pyproject.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contributing/samples/toolbox_agent/README.md b/contributing/samples/toolbox_agent/README.md index 0e6deac74d..5e499c1b4b 100644 --- a/contributing/samples/toolbox_agent/README.md +++ b/contributing/samples/toolbox_agent/README.md @@ -19,7 +19,7 @@ Run the following command to download and install the MCP Toolbox binary. ```bash export OS="linux/amd64" # one of linux/amd64, darwin/arm64, darwin/amd64, or windows/amd64 -curl -O https://storage.googleapis.com/genai-toolbox/v0.28.0/$OS/toolbox +curl -O https://storage.googleapis.com/genai-toolbox/v0.31.0/$OS/toolbox chmod +x toolbox ``` diff --git a/pyproject.toml b/pyproject.toml index 7cd71def92..2789bcf82a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -165,12 +165,12 @@ extensions = [ "llama-index-embeddings-google-genai>=0.3.0", # For files retrieval using LlamaIndex. "lxml>=5.3.0", # For load_web_page tool. "pypika>=0.50.0", # For crewai->chromadb dependency - "toolbox-adk>=0.7.0, <0.8.0", # For tools.toolbox_toolset.ToolboxToolset + "toolbox-adk>=1.0.0, <2.0.0", # For tools.toolbox_toolset.ToolboxToolset ] otel-gcp = ["opentelemetry-instrumentation-google-genai>=0.6b0, <1.0.0"] -toolbox = ["toolbox-adk>=0.7.0, <0.8.0"] +toolbox = ["toolbox-adk>=1.0.0, <2.0.0"] slack = ["slack-bolt>=1.22.0"] From 9082b9e38eeb3465c399b41633e6441e339c47c3 Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Fri, 27 Mar 2026 15:48:07 -0700 Subject: [PATCH 098/192] feat(environment): Add EnvironmentToolset for file I/O and command execution This change introduces a new EnvironmentToolset within the ADK, providing tools to interact with a BaseEnvironment. The toolset includes Execute, ReadFile, EditFile, WriteFile. System instructions are injected to guide the LLM on workspace usage and file manipulation. Co-authored-by: Liang Wu PiperOrigin-RevId: 890672569 --- src/google/adk/tools/environment/__init__.py | 23 ++ .../adk/tools/environment/_constants.py | 46 +++ .../tools/environment/_environment_toolset.py | 109 ++++++ src/google/adk/tools/environment/_tools.py | 370 ++++++++++++++++++ 4 files changed, 548 insertions(+) create mode 100644 src/google/adk/tools/environment/__init__.py create mode 100644 src/google/adk/tools/environment/_constants.py create mode 100644 src/google/adk/tools/environment/_environment_toolset.py create mode 100644 src/google/adk/tools/environment/_tools.py diff --git a/src/google/adk/tools/environment/__init__.py b/src/google/adk/tools/environment/__init__.py new file mode 100644 index 0000000000..adc6f4e493 --- /dev/null +++ b/src/google/adk/tools/environment/__init__.py @@ -0,0 +1,23 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Environment toolset for command execution and file I/O.""" + +from __future__ import annotations + +from ._environment_toolset import EnvironmentToolset + +__all__ = [ + 'EnvironmentToolset', +] diff --git a/src/google/adk/tools/environment/_constants.py b/src/google/adk/tools/environment/_constants.py new file mode 100644 index 0000000000..1950170e40 --- /dev/null +++ b/src/google/adk/tools/environment/_constants.py @@ -0,0 +1,46 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Constants for the environment toolset.""" + +from __future__ import annotations + +# --------------------------------------------------------------------------- +# Default limits +# --------------------------------------------------------------------------- + +DEFAULT_TIMEOUT = 30 +"""Default execution timeout in seconds.""" + +MAX_OUTPUT_CHARS = 30_000 +"""Maximum characters returned to the LLM per tool call.""" + +# --------------------------------------------------------------------------- +# System instruction templates +# --------------------------------------------------------------------------- + +ENVIRONMENT_INSTRUCTION = """\ +Your environment is at {working_dir}/ + +# Environment Rules + +DO: +- Chain sequential, dependent commands with `&&` in a single `Execute` call +- To read existing files, always use the `ReadFile` tool. Use `EditFile` to modify existing files. + +DON'T: +- Use `Execute` to run cat, head, or tail when `ReadFile` tools can do the job +- Combine `EditFile` or `ReadFile` with `Execute` in the same response (Instead, call the file tool first, then `Execute` in the next turn) +- Use multiple `Execute` calls for dependent commands (they run in parallel) +""" diff --git a/src/google/adk/tools/environment/_environment_toolset.py b/src/google/adk/tools/environment/_environment_toolset.py new file mode 100644 index 0000000000..3ecdf8d15d --- /dev/null +++ b/src/google/adk/tools/environment/_environment_toolset.py @@ -0,0 +1,109 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Environment toolset that provides tools to interact with an environment.""" + +from __future__ import annotations + +import logging +from typing import Any +from typing import Optional +from typing import TYPE_CHECKING + +from typing_extensions import override + +from ...utils.feature_decorator import experimental +from ..base_toolset import BaseToolset +from ._constants import ENVIRONMENT_INSTRUCTION +from ._tools import _EditFileTool +from ._tools import _ExecuteTool +from ._tools import _ReadFileTool +from ._tools import _WriteFileTool + +if TYPE_CHECKING: + from ...agents.readonly_context import ReadonlyContext + from ...environments._base_environment import BaseEnvironment + from ...models.llm_request import LlmRequest + from ..base_tool import BaseTool + from ..tool_context import ToolContext + +logger = logging.getLogger('google_adk.' + __name__) + + +@experimental +class EnvironmentToolset(BaseToolset): + """Toolset providing tools to interact with an environment. + + Tools provided: + - **Execute** -- run shell commands + - **ReadFile** -- read file contents + - **EditFile** -- surgical text replacement + - **WriteFile**q -- create/overwrite files + + The toolset injects an environment-level system instruction on each + LLM call that establishes environment identity and tool selection + rules. + """ + + def __init__( + self, + *, + environment: BaseEnvironment, + **kwargs: Any, + ): + """Create an environment toolset. + + Args: + environment: The environment used to execute commands and + perform file I/O. + **kwargs: Forwarded to ``BaseToolset.__init__``. + """ + super().__init__(**kwargs) + self._environment = environment + self._environment_initialized = False + + @override + async def get_tools( + self, + readonly_context: Optional[ReadonlyContext] = None, + ) -> list[BaseTool]: + if not self._environment_initialized: + await self._environment.initialize() + self._environment_initialized = True + return [ + _ExecuteTool(self._environment), + _ReadFileTool(self._environment), + _EditFileTool(self._environment), + _WriteFileTool(self._environment), + ] + + @override + async def process_llm_request( + self, *, tool_context: ToolContext, llm_request: LlmRequest + ) -> None: + """Inject environment-level system instruction.""" + if not self._environment_initialized: + await self._environment.initialize() + self._environment_initialized = True + working_dir = self._environment.working_dir + instruction = ENVIRONMENT_INSTRUCTION.format( + working_dir=working_dir, + ) + llm_request.append_instructions([instruction]) + + @override + async def close(self) -> None: + if self._environment_initialized: + await self._environment.close() + self._environment_initialized = False diff --git a/src/google/adk/tools/environment/_tools.py b/src/google/adk/tools/environment/_tools.py new file mode 100644 index 0000000000..04d59d1b4c --- /dev/null +++ b/src/google/adk/tools/environment/_tools.py @@ -0,0 +1,370 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools available in the environment toolset.""" + +from __future__ import annotations + +import logging +from typing import Any +from typing import Optional +from typing import TYPE_CHECKING + +from google.genai import types +from typing_extensions import override + +from ...environments._base_environment import BaseEnvironment +from ...environments._base_environment import ExecutionResult +from ...utils.feature_decorator import experimental +from ..base_tool import BaseTool +from ._constants import DEFAULT_TIMEOUT +from ._constants import MAX_OUTPUT_CHARS + +if TYPE_CHECKING: + from ..tool_context import ToolContext + + +logger = logging.getLogger('google_adk.' + __name__) + + +def _truncate(text: str, limit: int = MAX_OUTPUT_CHARS) -> str: + """Truncate text to *limit* characters with a notice.""" + if len(text) <= limit: + return text + return text[:limit] + f'\n... (truncated, {len(text)} total chars)' + + +_EXECUTE_TOOL_DESCRIPTION = """ +Run a shell command in the environment. For running programs, tests, and build +commands ONLY. WARNING: Do NOT use for file reading -- use the ReadFile tool +instead. Shell commands like 'cat, head, tail will produce inferior results. +Good: Execute("python3 script.py"), Execute("pytest"), Execute("find ..."). +Bad: Execute("head ..."), Execute("cat ..."). +""" + + +@experimental +class ExecuteTool(BaseTool): + """Run a shell command in the environment's working directory.""" + + def __init__(self, environment: BaseEnvironment): + super().__init__( + name='Execute', + description=_EXECUTE_TOOL_DESCRIPTION, + ) + self._environment = environment + + @override + def _get_declaration(self) -> Optional[types.FunctionDeclaration]: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters_json_schema={ + 'type': 'object', + 'properties': { + 'command': { + 'type': 'string', + 'description': ( + 'The shell command to execute. Chain dependent commands' + ' with &&.' + ), + }, + }, + 'required': ['command'], + }, + ) + + @override + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + command = args.get('command', '') + if not command: + return {'status': 'error', 'error': '`command` is required.'} + + logger.debug('Execute command: %s', command) + try: + execution_result: ExecutionResult = await self._environment.execute( + command, timeout=DEFAULT_TIMEOUT + ) + logger.debug( + 'Execute result: exit_code=%d, stdout=%r, stderr=%r, timed_out=%r', + execution_result.exit_code, + execution_result.stdout[:200] if execution_result.stdout else '', + execution_result.stderr[:200] if execution_result.stderr else '', + execution_result.timed_out, + ) + except Exception as e: + logger.exception('Execute failed: %s', e) + return {'status': 'error', 'error': str(e)} + + result: dict[str, Any] = {'status': 'ok'} + if execution_result.stdout: + result['stdout'] = _truncate(execution_result.stdout) + if execution_result.stderr: + result['stderr'] = _truncate(execution_result.stderr) + if execution_result.exit_code != 0: + result['status'] = 'error' + result['exit_code'] = execution_result.exit_code + if execution_result.timed_out: + result['status'] = 'error' + result['error'] = f'Command timed out after {DEFAULT_TIMEOUT}s.' + return result + + +@experimental +class ReadFileTool(BaseTool): + """Read a file from the environment.""" + + def __init__(self, environment: BaseEnvironment): + super().__init__( + name='ReadFile', + description=( + 'Read the contents of a file in the environment. ' + 'Returns the file content with line numbers.' + ), + ) + self._environment = environment + + @override + def _get_declaration(self) -> Optional[types.FunctionDeclaration]: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters_json_schema={ + 'type': 'object', + 'properties': { + 'path': { + 'type': 'string', + 'description': ( + 'Path of the file to read within the environment.' + ), + }, + 'start_line': { + 'type': 'integer', + 'description': ( + 'First line to return (1-based, ' + 'inclusive). Defaults to 1.' + ), + }, + 'end_line': { + 'type': 'integer', + 'description': ( + 'Last line to return (1-based, ' + 'inclusive). Defaults to end of file.' + ), + }, + }, + 'required': ['path'], + }, + ) + + @override + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + path = args.get('path', '') + if not path: + return {'status': 'error', 'error': '`path` is required.'} + start_line = args.get('start_line') + end_line = args.get('end_line') + + # Use `sed` to read the file if start_line or end_line are specified. + if (start_line and start_line > 1) or end_line: + start = start_line or 1 + if end_line: + sed_range = f'{start},{end_line}' + else: + sed_range = f'{start},$' + cmd = f"cat -n '{path}' | sed -n '{sed_range}p'" + res = await self._environment.execute(cmd) + if res.exit_code == 0: + return {'status': 'ok', 'content': _truncate(res.stdout)} + + try: + data_bytes = await self._environment.read_file(path) + text = data_bytes.decode('utf-8', errors='replace') + lines = text.splitlines(True) + total = len(lines) + start = max(1, start_line or 1) + end = min(total, end_line or total) + if start > total: + return { + 'status': 'error', + 'error': ( + f'`start_line` {start} exceeds file length ({total} lines).' + ), + 'total_lines': total, + } + if start > end: + return { + 'status': 'error', + 'error': f'`start_line` ({start}) is after `end_line` ({end}).', + 'total_lines': total, + } + selected = lines[start - 1 : end] + numbered = ''.join( + f'{start + i:6d}\t{line}' for i, line in enumerate(selected) + ) + result = {'status': 'ok', 'content': _truncate(numbered)} + if start > 1 or end < total: + result['total_lines'] = total + return result + except FileNotFoundError: + return {'status': 'error', 'error': f'File not found: {path}'} + except Exception as e: + return {'status': 'error', 'error': str(e)} + + +@experimental +class WriteFileTool(BaseTool): + """Create or overwrite a file in the environment.""" + + def __init__(self, environment: BaseEnvironment): + super().__init__( + name='WriteFile', + description=( + 'Create or overwrite a file in the environment. ' + 'Use for new files or full rewrites. For small ' + 'changes to existing files, prefer EditFile.' + ), + ) + self._environment = environment + + @override + def _get_declaration(self) -> Optional[types.FunctionDeclaration]: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters_json_schema={ + 'type': 'object', + 'properties': { + 'path': { + 'type': 'string', + 'description': 'Path to the file within the environment.', + }, + 'content': { + 'type': 'string', + 'description': 'The full file content to write.', + }, + }, + 'required': ['path', 'content'], + }, + ) + + @override + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + path = args.get('path', '') + content = args.get('content', '') + if not path: + return {'status': 'error', 'error': '`path` is required.'} + try: + await self._environment.write_file(path, content) + except Exception as e: + return {'status': 'error', 'error': str(e)} + return {'status': 'ok', 'message': f'Wrote {path}'} + + +@experimental +class EditFileTool(BaseTool): + """Perform a surgical text replacement in an existing file.""" + + def __init__(self, environment: BaseEnvironment): + super().__init__( + name='EditFile', + description=( + 'Replace an exact substring in an existing file ' + 'with new text. The old_string must appear exactly ' + 'once in the file. To create new files, use the WriteFile tool.' + ), + ) + self._environment = environment + + @override + def _get_declaration(self) -> Optional[types.FunctionDeclaration]: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters_json_schema={ + 'type': 'object', + 'properties': { + 'path': { + 'type': 'string', + 'description': ( + 'Path of the file to edit within the environment.' + ), + }, + 'old_string': { + 'type': 'string', + 'description': ( + 'The exact text to find and replace. Must not be empty.' + ), + }, + 'new_string': { + 'type': 'string', + 'description': 'The replacement text.', + }, + }, + 'required': ['path', 'old_string', 'new_string'], + }, + ) + + @override + async def run_async( + self, *, args: dict[str, Any], tool_context: ToolContext + ) -> Any: + path = args.get('path', '') + old_string = args.get('old_string', '') + new_string = args.get('new_string', '') + if not path: + return {'status': 'error', 'error': '`path` is required.'} + + if not old_string: + return { + 'status': 'error', + 'error': ( + '`old_string` cannot be empty. To create a new ' + 'file, use the WriteFile tool.' + ), + } + + try: + data_bytes = await self._environment.read_file(path) + content = data_bytes.decode('utf-8', errors='replace') + except FileNotFoundError: + return {'status': 'error', 'error': f'File not found: {path}'} + + count = content.count(old_string) + if count == 0: + return { + 'status': 'error', + 'error': ( + '`old_string` not found in file. Read the file first ' + 'to verify contents.' + ), + } + if count > 1: + return { + 'status': 'error', + 'error': ( + f'`old_string` appears {count} times. Provide more ' + 'surrounding context to make it unique.' + ), + } + + new_content = content.replace(old_string, new_string, 1) + await self._environment.write_file(path, new_content) + return {'status': 'ok', 'message': f'Edited {path}'} From f97367381e820c75ad16d4ce7ee27c0f9929c81d Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Fri, 27 Mar 2026 16:18:02 -0700 Subject: [PATCH 099/192] feat(environment): Add LocalEnvironment for executing commands and file I/O locally This change introduces the LocalEnvironment class, which allows agents to execute shell commands and perform file operations using asyncio subprocesses on the local machine. It includes support for a working directory and custom environment variables. A sample agent configuration is also added to demonstrate its usage. Co-authored-by: Liang Wu PiperOrigin-RevId: 890685517 --- .../samples/local_environment/README.md | 21 ++++++++++++ .../samples/local_environment/__init__.py | 15 ++++++++ .../samples/local_environment/agent.py | 34 +++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 contributing/samples/local_environment/README.md create mode 100644 contributing/samples/local_environment/__init__.py create mode 100644 contributing/samples/local_environment/agent.py diff --git a/contributing/samples/local_environment/README.md b/contributing/samples/local_environment/README.md new file mode 100644 index 0000000000..f94c55c3e6 --- /dev/null +++ b/contributing/samples/local_environment/README.md @@ -0,0 +1,21 @@ +# Local Environment Sample + +This sample demonstrates how to use the `LocalEnvironment` with the `EnvironmentToolset` to allow an agent to interact with the local filesystem and execute commands. + +## Description + +The agent is configured with the `EnvironmentToolset`, which provides tools for file I/O (reading, writing) and command execution within a local environment. This allows the agent to perform tasks that involve creating files, modifying them, and running local scripts or commands. + +## Sample Usage + +You can interact with the agent by providing prompts that require file operations and command execution. + +### Example Prompt + +> "Write a Python file named `hello.py` to the working directory that prints 'Hello from ADK!'. Then read the file to verify its contents, and finally execute it using a command." + +### Expected Behavior + +1. **Write File**: The agent uses a tool to write `hello.py` with the content `print("Hello from ADK!")`. +2. **Read File**: The agent uses a tool to read `hello.py` and verify the content. +3. **Execute Command**: The agent uses a tool to run `python3 hello.py` and returns the output. diff --git a/contributing/samples/local_environment/__init__.py b/contributing/samples/local_environment/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/local_environment/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/local_environment/agent.py b/contributing/samples/local_environment/agent.py new file mode 100644 index 0000000000..0c33cc00f0 --- /dev/null +++ b/contributing/samples/local_environment/agent.py @@ -0,0 +1,34 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from google.adk import Agent +from google.adk.environment import LocalEnvironment +from google.adk.tools.environment import EnvironmentToolset + +root_agent = Agent( + model="gemini-2.5-pro", + name="local_environment_agent", + description="A simple agent that demonstrates local environment usage.", + instruction=""" + You are a helpful AI assistant that can use the local environment to + execute commands and file I/O. Follow the rules of the environment and the + user's instructions. + """, + tools=[ + EnvironmentToolset( + environment=LocalEnvironment(), + ), + ], +) From 3f3ed0f4734e429124e422a6606ef3789b6ae704 Mon Sep 17 00:00:00 2001 From: Shangjie Chen Date: Fri, 27 Mar 2026 16:39:04 -0700 Subject: [PATCH 100/192] ADK changes Co-authored-by: Shangjie Chen PiperOrigin-RevId: 890694124 --- src/google/adk/environment/__init__.py | 27 +++ .../adk/environment/_base_environment.py | 124 ++++++++++++++ .../adk/environment/_local_environment.py | 160 ++++++++++++++++++ 3 files changed, 311 insertions(+) create mode 100644 src/google/adk/environment/__init__.py create mode 100644 src/google/adk/environment/_base_environment.py create mode 100644 src/google/adk/environment/_local_environment.py diff --git a/src/google/adk/environment/__init__.py b/src/google/adk/environment/__init__.py new file mode 100644 index 0000000000..97232937ec --- /dev/null +++ b/src/google/adk/environment/__init__.py @@ -0,0 +1,27 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Agent environments.""" + +from __future__ import annotations + +from ._base_environment import BaseEnvironment +from ._base_environment import ExecutionResult +from ._local_environment import LocalEnvironment + +__all__ = [ + 'BaseEnvironment', + 'ExecutionResult', + 'LocalEnvironment', +] diff --git a/src/google/adk/environment/_base_environment.py b/src/google/adk/environment/_base_environment.py new file mode 100644 index 0000000000..6b27232471 --- /dev/null +++ b/src/google/adk/environment/_base_environment.py @@ -0,0 +1,124 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Base class for agent environments.""" + +from __future__ import annotations + +from abc import ABC +from abc import abstractmethod +import dataclasses +from pathlib import Path +from typing import Optional + +from ..utils.feature_decorator import experimental + + +@dataclasses.dataclass +class ExecutionResult: + """Result of a command execution.""" + + exit_code: int = 0 + """The exit code of the process.""" + + stdout: str = "" + """Standard output captured from the process.""" + + stderr: str = "" + """Standard error captured from the process.""" + + timed_out: bool = False + """Whether the execution exceeded the timeout.""" + + +@experimental +class BaseEnvironment(ABC): + """Abstract base class for code execution environments. + + An environment provides the ability to execute shell commands, + read files, and write files within a working directory. Concrete + implementations include local subprocess execution, sandboxed + execution, container environments, and cloud-hosted environments. + + Lifecycle: + 1. Construct the environment (``__init__``). + 2. Call ``initialize()`` before first use. + 3. Use ``execute``, ``read_file``, ``write_file``. + 4. Call ``close()`` when done. + """ + + async def initialize(self) -> None: + """Initialize the environment (e.g. create working directory). + + Called before first use. The default implementation is a + no-op. Sub-classes should ensure this method is idempotent. + """ + + async def close(self) -> None: + """Release resources held by the environment. + + Called when the environment is no longer needed. The default + implementation is a no-op. Sub-classes should ensure this method is + idempotent. + """ + + @property + @abstractmethod + def working_dir(self) -> Path: + """The absolute path to the environment's working directory.""" + + @abstractmethod + async def execute( + self, + command: str, + *, + timeout: Optional[float] = None, + ) -> ExecutionResult: + """Execute a shell command in the working directory. + + Args: + command: The shell command string to execute. + timeout: Maximum execution time in seconds. ``None`` means + no limit. + + Returns: + An ``ExecutionResult`` with exit code, stdout, stderr, and + timeout status. + """ + + @abstractmethod + async def read_file(self, path: Path) -> bytes: + """Read a file from the environment filesystem. + + Args: + path: Absolute or working-dir-relative path to the file. + + Returns: + The raw file contents as bytes. + + Raises: + FileNotFoundError: If the file does not exist. + """ + + @abstractmethod + async def write_file(self, path: Path, content: str | bytes) -> None: + """Write content to a file in the environment's filesystem. + + Parent directories are created automatically if they do not + exist. + + Args: + path: Absolute or working-dir-relative path to the file. + content: The string or raw bytes to write. + """ diff --git a/src/google/adk/environment/_local_environment.py b/src/google/adk/environment/_local_environment.py new file mode 100644 index 0000000000..d385219800 --- /dev/null +++ b/src/google/adk/environment/_local_environment.py @@ -0,0 +1,160 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Local subprocess code execution environment.""" + +from __future__ import annotations + +import asyncio +import logging +import os +from pathlib import Path +import shutil +import tempfile +from typing import Optional + +from typing_extensions import override + +from ..utils.feature_decorator import experimental +from .base_environment import BaseEnvironment +from .base_environment import ExecutionResult + +logger = logging.getLogger('google_adk.' + __name__) + + +@experimental +class LocalEnvironment(BaseEnvironment): + """Execute commands via local ``asyncio`` subprocesses. + + When ``working_dir`` is not specified, a temporary directory is + created on ``initialize()`` and removed on ``close()``. + """ + + def __init__( + self, + *, + working_dir: Optional[Path] = None, + env_vars: Optional[dict[str, str]] = None, + ): + """Create a local environment. + + Args: + working_dir: Absolute path to the workspace directory. If + ``None``, a temporary directory is created during + ``initialize()``. + env_vars: Extra environment variables merged into the subprocess + environment. + """ + self._working_dir = working_dir + self._env_vars = env_vars + self._auto_created = False + + @property + @override + def working_dir(self) -> Path: + if self._working_dir is None: + raise RuntimeError('`working_dir` is not set. Call initialize() first.') + return self._working_dir + + @override + async def initialize(self) -> None: + if self._working_dir is None: + self._working_dir = Path(tempfile.mkdtemp(prefix='adk_workspace_')) + self._auto_created = True + logger.debug('Created temporary folder: %s', self._working_dir) + else: + os.makedirs(self._working_dir, exist_ok=True) + + @override + async def close(self) -> None: + if self._auto_created and self._working_dir: + shutil.rmtree(self._working_dir, ignore_errors=True) + logger.debug('Removed temporary workspace: %s', self._working_dir) + self._working_dir = None + + + @override + async def execute( + self, + command: str, + *, + timeout: Optional[float] = None, + ) -> ExecutionResult: + if self._working_dir is None: + raise RuntimeError('`working_dir` is not set. Call initialize() first.') + + proc_env = os.environ.copy() + if self._env_vars: + proc_env.update(self._env_vars) + + proc = await asyncio.create_subprocess_shell( + command, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + cwd=self._working_dir, + env=proc_env, + ) + + timed_out = False + try: + stdout_bytes, stderr_bytes = await asyncio.wait_for( + proc.communicate(), timeout=timeout + ) + except asyncio.TimeoutError: + timed_out = True + proc.kill() + stdout_bytes, stderr_bytes = await proc.communicate() + + return ExecutionResult( + exit_code=proc.returncode or 0, + stdout=stdout_bytes.decode('utf-8', errors='replace'), + stderr=stderr_bytes.decode('utf-8', errors='replace'), + timed_out=timed_out, + ) + + @override + async def read_file(self, path: str) -> bytes: + if self._working_dir is None: + raise RuntimeError('`working_dir` is not set. Call initialize() first.') + + path = self._resolve_path(path) + return await asyncio.to_thread(self._sync_read, path) + + @override + async def write_file(self, path: str, content: str | bytes) -> None: + if self._working_dir is None: + raise RuntimeError('`working_dir` is not set. Call initialize() first.') + + path = self._resolve_path(path) + return await asyncio.to_thread(self._sync_write, path, content) + + + def _resolve_path(self, path: str) -> str: + """Resolve a relative path against the working directory.""" + if os.path.isabs(path): + return path + return os.path.join(self._working_dir, path) + + @staticmethod + def _sync_read(path: str) -> bytes: + with open(path, 'rb') as f: + return f.read() + + @staticmethod + def _sync_write(path: str, content: str | bytes) -> None: + os.makedirs(os.path.dirname(path), exist_ok=True) + mode = 'w' if isinstance(content, str) else 'wb' + kwargs = {'encoding': 'utf-8'} if isinstance(content, str) else {} + with open(path, mode, **kwargs) as f: + f.write(content) From 815ebb441579724e5aa22830b2e6f7c22f94fde6 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 27 Mar 2026 17:19:43 -0700 Subject: [PATCH 101/192] fix: add httpx_client_factory support to SseConnectionParams Merge https://github.com/google/adk-python/pull/4842 ### Link to Issue or Description of Change **1. Link to an existing issue** Closes #4841 **2. Changes** This change aligns SSE transport behavior with Streamable HTTP transport for MCP tools, enabling users to customize the httpx.AsyncClient for SSE-based MCP connections (e.g., proxy, auth, TLS config). - Update `SseConnectionParams` model to include httpx_client_factory parameter (matching StreamableHTTPConnectionParams pattern) - Pass `httpx_client_factory` from `SseConnectionParams` to underlying `sse_client()` call - Add `model_config` to `SseConnectionParams` to allow arbitrary types for the factory function - Update docstrings to document the new `httpx_client_factory attribute` - Add unit test for new senarios ### Testing Plan **Unit Tests:** - [x] I have added or updated unit tests for my change. - `tests/unittests/tools/mcp_tool/test_mcp_session_manager.py` - [x] All unit tests pass locally. - All test cases have passed the test. **Manual End-to-End (E2E) Tests:** 1. Set custom httpx_client_factory parameter for SseConnectionParams ```Python from typing import Any import httpx from google.adk.agents.llm_agent import Agent from google.adk.models import LiteLlm from google.adk.tools.mcp_tool import SseConnectionParams, McpToolset # Cutom httpx client factory for MCP SSE transport def custom_httpx_client_factory( headers: dict[str, str] | None = None, timeout: httpx.Timeout | None = None, auth: httpx.Auth | None = None, ) -> httpx.AsyncClient: # Print message for debugging print(' === Custom httpx_client_factory running! ===') kwargs: dict[str, Any] = { "follow_redirects": True, } if timeout is None: kwargs["timeout"] = httpx.Timeout(30, read=300) else: kwargs["timeout"] = timeout if headers is not None: kwargs["headers"] = headers if auth is not None: kwargs["auth"] = auth return httpx.AsyncClient(**kwargs) connection_params = SseConnectionParams( url='http://127.0.0.1:9000/sse', httpx_client_factory=custom_httpx_client_factory, # Custom httpx client factory ) tool = McpToolset(connection_params=connection_params) root_agent = Agent( model=LiteLlm(model="ollama_chat/qwen3.5:35b-a3b-q4_K_M"), name='root_agent', description='A helpful assistant for user questions.', instruction='Answer user questions to the best of your knowledge', tools=[tool], ) ``` 2. Run the Agent, and display the debug log in console ``` 2026-03-15 23:54:14,304 - INFO - agent_loader.py:130 - Found root_agent in my_agent.agent INFO: 127.0.0.1:55642 - "POST /run_sse HTTP/1.1" 200 OK === Custom httpx_client_factory running! === 2026-03-15 23:54:14,345 - INFO - _client.py:1740 - HTTP Request: GET http://127.0.0.1:9000/sse "HTTP/1.1 200 OK" 2026-03-15 23:54:14,349 - INFO - _client.py:1740 - HTTP Request: POST http://127.0.0.1:9000/messages/?session_id=b5750c6e214048c28110dff11c412ecb "HTTP/1.1 202 Accepted" ``` ### Checklist - [x] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document. - [x] I have performed a self-review of my own code. - [x] I have commented my code, particularly in hard-to-understand areas. - [x] I have added tests that prove my fix is effective or that my feature works. - [x] New and existing unit tests pass locally with my changes. - [x] I have manually tested my changes end-to-end. - [x] Any dependent changes have been merged and published in downstream modules. ### Additional context Co-authored-by: Kathy Wu COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4842 from ushelp:main e3125fb3b0f784df4c000a045257b3f1c2a8c825 PiperOrigin-RevId: 890708694 --- .../adk/tools/mcp_tool/mcp_session_manager.py | 6 +++ .../mcp_tool/test_mcp_session_manager.py | 43 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/src/google/adk/tools/mcp_tool/mcp_session_manager.py b/src/google/adk/tools/mcp_tool/mcp_session_manager.py index e0cd1ebc89..23f14421bd 100644 --- a/src/google/adk/tools/mcp_tool/mcp_session_manager.py +++ b/src/google/adk/tools/mcp_tool/mcp_session_manager.py @@ -99,12 +99,17 @@ class SseConnectionParams(BaseModel): server. sse_read_timeout: Timeout in seconds for reading data from the MCP SSE server. + httpx_client_factory: Factory function to create a custom HTTPX client. If + not provided, a default factory will be used. """ + model_config = ConfigDict(arbitrary_types_allowed=True) + url: str headers: dict[str, Any] | None = None timeout: float = 5.0 sse_read_timeout: float = 60 * 5.0 + httpx_client_factory: CheckableMcpHttpClientFactory = create_mcp_http_client @runtime_checkable @@ -398,6 +403,7 @@ def _create_client(self, merged_headers: Optional[Dict[str, str]] = None): headers=merged_headers, timeout=self._connection_params.timeout, sse_read_timeout=self._connection_params.sse_read_timeout, + httpx_client_factory=self._connection_params.httpx_client_factory, ) elif isinstance(self._connection_params, StreamableHTTPConnectionParams): client = streamablehttp_client( diff --git a/tests/unittests/tools/mcp_tool/test_mcp_session_manager.py b/tests/unittests/tools/mcp_tool/test_mcp_session_manager.py index 327df114a8..9b1a8f6b7a 100644 --- a/tests/unittests/tools/mcp_tool/test_mcp_session_manager.py +++ b/tests/unittests/tools/mcp_tool/test_mcp_session_manager.py @@ -134,6 +134,49 @@ def test_init_with_sse_connection_params(self): assert manager._connection_params == sse_params + @patch("google.adk.tools.mcp_tool.mcp_session_manager.sse_client") + def test_init_with_sse_custom_httpx_factory(self, mock_sse_client): + """Test that sse_client is called with custom httpx_client_factory.""" + custom_httpx_factory = Mock() + + sse_params = SseConnectionParams( + url="https://example.com/mcp", + timeout=10.0, + httpx_client_factory=custom_httpx_factory, + ) + manager = MCPSessionManager(sse_params) + + manager._create_client() + + mock_sse_client.assert_called_once_with( + url="https://example.com/mcp", + headers=None, + timeout=10.0, + sse_read_timeout=300.0, + httpx_client_factory=custom_httpx_factory, + ) + + @patch("google.adk.tools.mcp_tool.mcp_session_manager.sse_client") + def test_init_with_sse_default_httpx_factory(self, mock_sse_client): + """Test that sse_client is called with default httpx_client_factory.""" + sse_params = SseConnectionParams( + url="https://example.com/mcp", + timeout=10.0, + ) + manager = MCPSessionManager(sse_params) + + manager._create_client() + + mock_sse_client.assert_called_once_with( + url="https://example.com/mcp", + headers=None, + timeout=10.0, + sse_read_timeout=300.0, + httpx_client_factory=SseConnectionParams.model_fields[ + "httpx_client_factory" + ].get_default(), + ) + def test_init_with_streamable_http_params(self): """Test initialization with StreamableHTTPConnectionParams.""" http_params = StreamableHTTPConnectionParams( From 4030c0d0167b348cf2e4c941c8610aa6ede28275 Mon Sep 17 00:00:00 2001 From: Haiyuan Cao Date: Fri, 27 Mar 2026 19:47:21 -0700 Subject: [PATCH 102/192] feat(bigquery): Add ADK 1P Skills for ADK BQ Toolset - Add 1P BQ Skills `bigquery-ai-ml`, add mandatory reference routing and reference file for `AI.*` syntax. - Include dedicated reference documents for various BigQuery ML features. - Update unit tests to fully assert skill validations. Co-authored-by: Haiyuan Cao PiperOrigin-RevId: 890749300 --- .../adk/tools/bigquery/bigquery_skill.py | 43 +++++++ .../bigquery/skills/bigquery-ai-ml/SKILL.md | 47 +++++++ .../references/bigquery_ai_classify.md | 92 ++++++++++++++ .../bigquery_ai_detect_anomalies.md | 110 +++++++++++++++++ .../references/bigquery_ai_forecast.md | 106 ++++++++++++++++ .../references/bigquery_ai_generate.md | 116 ++++++++++++++++++ .../references/bigquery_ai_generate_bool.md | 51 ++++++++ .../references/bigquery_ai_generate_double.md | 50 ++++++++ .../references/bigquery_ai_generate_int.md | 50 ++++++++ .../references/bigquery_ai_if.md | 55 +++++++++ .../references/bigquery_ai_score.md | 52 ++++++++ .../references/bigquery_ai_search.md | 76 ++++++++++++ .../references/bigquery_ai_similarity.md | 48 ++++++++ .../tools/bigquery/test_bigquery_skill.py | 116 ++++++++++++++++++ 14 files changed, 1012 insertions(+) create mode 100644 src/google/adk/tools/bigquery/bigquery_skill.py create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/SKILL.md create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_classify.md create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_detect_anomalies.md create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_forecast.md create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate.md create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_bool.md create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_double.md create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_int.md create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_if.md create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_score.md create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_search.md create mode 100644 src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_similarity.md create mode 100644 tests/unittests/tools/bigquery/test_bigquery_skill.py diff --git a/src/google/adk/tools/bigquery/bigquery_skill.py b/src/google/adk/tools/bigquery/bigquery_skill.py new file mode 100644 index 0000000000..bf03764966 --- /dev/null +++ b/src/google/adk/tools/bigquery/bigquery_skill.py @@ -0,0 +1,43 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Pre-packaged BigQuery skill for use with SkillToolset.""" + +from __future__ import annotations + +import pathlib + +from ...skills import load_skill_from_dir +from ...skills import Skill + +_SKILL_DIR = pathlib.Path(__file__).parent / "skills" / "bigquery-ai-ml" + + +def get_bigquery_skill() -> Skill: + """Returns the pre-packaged BigQuery data analysis skill. + + This skill follows the agentskills.io specification and + provides curated instructions for BigQuery data analysis. + Use it with SkillToolset alongside BigQueryToolset: + + from google.adk.tools.bigquery import BigQueryToolset + from google.adk.tools.bigquery.bigquery_skill import get_bigquery_skill + from google.adk.tools.skill_toolset import SkillToolset + + bq_skill = get_bigquery_skill() + toolset = SkillToolset(skills=[bq_skill]) + bigquery_toolset = BigQueryToolset(...) + agent = LlmAgent(tools=[bigquery_toolset, toolset]) + """ + return load_skill_from_dir(_SKILL_DIR) diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/SKILL.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/SKILL.md new file mode 100644 index 0000000000..fceea715da --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/SKILL.md @@ -0,0 +1,47 @@ +--- +name: bigquery-ai-ml +license: Apache-2.0 +metadata: + author: google-adk + version: "1.0" +description: | + Skill for BigQuery AI and Machine Learning queries using standard SQL + and `AI.*` functions (preferred over dedicated tools). + +--- + +# Skill: bigquery-ai-ml + +This skill defines the usage and rules for BigQuery AI/ML functions, +preferring SQL-based Skills over dedicated 1P tools. + +## 1. Skill vs Tool Preference (BigQuery AI/ML) + +Agents should **prefer using the Skill (SQL via `execute_sql()`)** over +dedicated 1P tools for functionalities like Forecasting and Anomaly Detection. + +Use `execute_sql()` with the standard BigQuery `AI.*` functions for these tasks +instead of the corresponding high-level tools. + +## 2. Mandatory Reference Routing + +This skill file does not contain the syntax for these functions. You **MUST** +read the associated reference file before generating SQL. + +**CRITICAL**: DO NOT GUESS filenames. You MUST only use the exact paths +provided below. + +| Function | Required Reference File to Retrieve | +| :--- | :--- | +| **AI.FORECAST** | `references/bigquery_ai_forecast.md` | +| **AI.CLASSIFY** | `references/bigquery_ai_classify.md` | +| **AI.DETECT_ANOMALIES** | `references/bigquery_ai_detect_anomalies.md` | +| **AI.GENERATE** | `references/bigquery_ai_generate.md` | +| **AI.GENERATE_BOOL** | `references/bigquery_ai_generate_bool.md` | +| **AI.GENERATE_DOUBLE**| `references/bigquery_ai_generate_double.md` | +| **AI.GENERATE_INT** | `references/bigquery_ai_generate_int.md` | +| **AI.IF** | `references/bigquery_ai_if.md` | +| **AI.SCORE** | `references/bigquery_ai_score.md` | +| **AI.SIMILARITY** | `references/bigquery_ai_similarity.md` | +| **AI.SEARCH** | `references/bigquery_ai_search.md` | + diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_classify.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_classify.md new file mode 100644 index 0000000000..749e47e2d7 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_classify.md @@ -0,0 +1,92 @@ +# BigQuery AI.Classify + +`AI.CLASSIFY` categorizes unstructured data into a predefined set of labels. + +## Syntax Reference + +```sql +AI.CLASSIFY( + [ input => ] 'INPUT', + [ categories => ] 'CATEGORIES' + [, connection_id => 'CONNECTION_ID' ] + [, endpoint => 'ENDPOINT' ] + [, output_mode => 'OUTPUT_MODE' ] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :------------ | :-------------------- | +| **`input`** | **Required** | String | The text content to | +: : : : classify. : +| **`categories`** | **Required** | Array | A list of target | +: : : : categories/labels. : +: : : : Can be : +: : : : `ARRAY` or : +: : : : `ARRAY>` (label, : +: : : : description). : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model name, e.g., | +: : : : `'gemini-2.5-flash'`. : +| **`output_mode`** | Optional | String | `'single'` (default) | +: : : : or `'multi'`. : +: : : : Determines the output : +: : : : type. : + +### Output Schema + +The output type depends on the `output_mode` argument: + +| Output Mode | output_mode Value | Type | Description | +| :--------------- | :---------------- | :-------------- | :------------------ | +| **Single Label** | `NULL` (Default) | `STRING` | The single category | +: : : : that best fits the : +: : : : input. : +| **Single Label | `'single'` | `ARRAY` | An array containing | +: (Explicit)** : : : exactly one : +: : : : category string. : +| **Multi Label** | `'multi'` | `ARRAY` | An array containing | +: : : : zero or more : +: : : : matching : +: : : : categories. : + +## Examples + +### Classify text into categories + +```sql +SELECT + content, + AI.CLASSIFY( + content, + categories => ['Spam', 'Not Spam', 'Urgent'], + connection_id => 'my-project.us.my-connection' + ) as classification +FROM `dataset.emails`; +``` + +### Classify text into multiple topics + +``` +SELECT + title, + body, + AI.CLASSIFY( + body, + categories => ['tech', 'sport', 'business', 'politics', 'entertainment', 'other'], + output_mode => 'multi') AS categories +FROM + `bigquery-public-data.bbc_news.fulltext` +LIMIT 100; +``` + +### Classify reviews by sentiment + +SELECT AI.CLASSIFY( ('Classify the review by sentiment: ', review), categories +=> [('green', 'The review is positive.'), ('yellow', 'The review is neutral.'), +('red', 'The review is negative.')]) AS ai_review_rating, reviewer_rating AS +human_provided_rating, review, FROM `bigquery-public-data.imdb.reviews` WHERE +title = 'The English Patient' diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_detect_anomalies.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_detect_anomalies.md new file mode 100644 index 0000000000..5fc86a954a --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_detect_anomalies.md @@ -0,0 +1,110 @@ +# BigQuery AI.Detect_Anomalies + +`AI.DETECT_ANOMALIES` uses the pre-trained **TimesFM** model to identify +deviations in time series data without needing to train a custom model. + +## Syntax Reference + +This function compares a target dataset against a historical dataset to identify +anomalies. + +```sql +SELECT * +FROM AI.DETECT_ANOMALIES( + { TABLE `project.dataset.history_table` | (SELECT * FROM history_query) }, + { TABLE `project.dataset.target_table` | (SELECT * FROM target_query) }, + data_col => 'DATA_COL', + timestamp_col => 'TIMESTAMP_COL' + [, model => 'MODEL'] + [, id_cols => ID_COLS] + [, anomaly_prob_threshold => ANOMALY_PROB_THRESHOLD] +) + +``` + +### Input Arguments + +Argument | Requirement | Type | Description +:--------------------------- | :----------- | :------------ | :---------- +**`historical_data`** | **Required** | Table/Query | The source table or subquery containing historical data for training context. +**`target_data`** | **Required** | Table/Query | The source table or subquery containing data to analyze for anomalies. +**`data_col`** | **Required** | String | The numeric column to analyze. +**`timestamp_col`** | **Required** | String | The column containing dates/timestamps. +**`id_cols`** | Optional | Array | Grouping columns for multiple series (e.g., `['store_id']`). +**`anomaly_prob_threshold`** | Optional | Float64 | Threshold for anomaly detection (0 to 1). Defaults to 0.95. +**`model`** | Optional | String | Model version. Defaults to `'TimesFM 2.0'`. + +### Output Schema + +| Column | Type | Description | +| :------------------------------- | :--------- | :--------------------------- | +| **`id_cols`** | (As Input) | Original identifiers for the | +: : : series. : +| **`time_series_timestamp`** | TIMESTAMP | Timestamp for the analyzed | +: : : points. : +| **`time_series_data`** | FLOAT64 | The original data value. | +| **`is_anomaly`** | BOOL | TRUE if the point is | +: : : identified as an anomaly. : +| **`lower_bound`** | FLOAT64 | Lower bound of the expected | +: : : range. : +| **`upper_bound`** | FLOAT64 | Upper bound of the expected | +: : : range. : +| **`anomaly_probability`** | FLOAT64 | Probability that the point | +: : : is an anomaly. : +| **`ai_detect_anomalies_status`** | STRING | Error messages or empty | +: : : string on success. A minimum : +: : : of 3 data points is : +: : : required. : + +## Examples + +### Basic Anomaly Detection + +Detect anomalies in daily bike trips for a specific 2-month window based on +prior history. + +```sql +WITH bike_trips AS ( + SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips + FROM `bigquery-public-data.new_york.citibike_trips` + GROUP BY date +) +SELECT * +FROM AI.DETECT_ANOMALIES( + -- Historical context (Training data equivalent) + (SELECT * FROM bike_trips WHERE date <= DATE('2016-06-30')), + -- Target range (Data to inspect for anomalies) + (SELECT * FROM bike_trips WHERE date BETWEEN '2016-07-01' AND '2016-09-01'), + data_col => 'num_trips', + timestamp_col => 'date' +); + +``` + +### Multivariate Detection (Multiple Series) + +Use `id_cols` to detect anomalies separately for different user types (e.g., +Subscriber vs. Customer) in the same query. + +```sql +WITH bike_trips AS ( + SELECT + EXTRACT(DATE FROM starttime) AS date, usertype, gender, + COUNT(*) AS num_trips + FROM `bigquery-public-data.new_york.citibike_trips` + GROUP BY date, usertype, gender + ) +SELECT * +FROM + AI.DETECT_ANOMALIES( + # Historical data from a query + (SELECT * FROM bike_trips WHERE date <= DATE('2016-06-30')), + # Target data from a query + (SELECT * FROM bike_trips WHERE date BETWEEN '2016-07-01' AND '2016-09-01'), + data_col => 'num_trips', + timestamp_col => 'date', + id_cols => ['usertype', 'gender'], + model => "TimesFM 2.5", + anomaly_prob_threshold => 0.8); + +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_forecast.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_forecast.md new file mode 100644 index 0000000000..a384b2c321 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_forecast.md @@ -0,0 +1,106 @@ +# BigQuery AI.Forecast + +`AI.FORECAST` leverages the pre-trained **TimesFM** foundation model to generate +forecasts without the need to train and manage custom models. + +## Syntax Reference + +```sql +SELECT + * +FROM + AI.FORECAST( + { TABLE `project.dataset.table` | (QUERY_STATEMENT) }, + data_col => 'DATA_COL', + timestamp_col => 'TIMESTAMP_COL' + [, model => 'MODEL'] + [, id_cols => ID_COLS] + [, horizon => HORIZON] + [, confidence_level => CONFIDENCE_LEVEL] + [, output_historical_time_series => OUTPUT_HISTORICAL_TIME_SERIES] + [, context_window => CONTEXT_WINDOW] + ) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :--------------------- | :----------- | :------------ | :---------------- | +| **`input_data`** | **Required** | | The source table | +: : : : or subquery : +: : : : containing : +: : : : historical data. : +| **`data_col`** | **Required** | String | The numeric | +: : : : column to : +: : : : predict. : +| **`timestamp_col`** | **Required** | String | The column | +: : : : containing : +: : : : dates/timestamps. : +| **`id_cols`** | Optional | Array | Grouping columns | +: : : : for multiple : +: : : : series (e.g., : +: : : : `['store_id']`). : +| **`horizon`** | Optional | Int64 | Number of future | +: : : : points to : +: : : : predict. Defaults : +: : : : to 10. The valid : +: : : : input range is : +: : : : [1, 10,000] : +| **`confidence_level`** | Optional | Float64 | Confidence | +: : : : interval (0 to : +: : : : 1). Defaults to : +: : : : 0.95. : +| **`model`** | Optional | String | Model version. | +: : : : Defaults to : +: : : : `'TimesFM 2.0'`. : +| **`context_window`** | Optional | Int64 | The number of | +: : : : historical data : +: : : : points the model : +: : : : uses to forecast. : +: : : : The min value is : +: : : : 64 and the max : +: : : : value is 2048 for : +: : : : `'TimesFM 2.0'`. : +: : : : If not set, the : +: : : : model determines : +: : : : this : +: : : : automatically. : + +### Output Schema + +The schema adjusts based on the `output_historical_time_series` flag. + +Column | Type | Included if output_historical_time_series=FALSE | Included if output_historical_time_series=TRUE | Description +:------------------------------------ | :--------- | :---------------------------------------------- | :--------------------------------------------- | :---------- +**`id_cols`** | (As Input) | Yes | Yes | Original identifiers for the series. +**`forecast_timestamp`** | TIMESTAMP | **Yes** | No | Timestamp for predicted points. +**`forecast_value`** | FLOAT64 | **Yes** | No | The 50% quantile (median) prediction. +**`time_series_timestamp`** | TIMESTAMP | No | **Yes** | Uniform timestamp column for both history and forecast. +**`time_series_data`** | FLOAT64 | No | **Yes** | Merged column: actual values for history, median for forecast. +**`time_series_type`** | STRING | No | **Yes** | Label: `'history'` or `'forecast'`. +**`prediction_interval_lower_bound`** | FLOAT64 | Yes | Yes | Lower bound (NULL for historical rows). +**`prediction_interval_upper_bound`** | FLOAT64 | Yes | Yes | Upper bound (NULL for historical rows). +**`confidence_level`** | FLOAT64 | Yes | Yes | The constant confidence level used. +**`ai_forecast_status`** | STRING | Yes | Yes | Error messages or empty string on success. A minimum of 3 data points is required. + +## Examples + +### Forecasting with History + +```sql +WITH + citibike_trips AS ( + SELECT EXTRACT(DATE FROM starttime) AS date, usertype, COUNT(*) AS num_trips + FROM `bigquery-public-data.new_york.citibike_trips` + GROUP BY date, usertype + ) +SELECT * +FROM + AI.FORECAST( + TABLE citibike_trips, + data_col => 'num_trips', + timestamp_col => 'date', + id_cols => ['usertype'], + horizon => 30, + output_historical_time_series => true); +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate.md new file mode 100644 index 0000000000..3b15e70e40 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate.md @@ -0,0 +1,116 @@ +# BigQuery AI.Generate + +`AI.GENERATE` is a general-purpose function text and content generation. + +## Syntax Reference + +```sql +AI.GENERATE( + [ prompt => ] 'PROMPT', + [, endpoint => 'ENDPOINT'] + [, model_params => 'MODEL_PARAMS'] + [, output_schema => 'OUTPUT_SCHEMA'] + [, connection_id => 'CONNECTION_ID'] + [, request_type => 'REQUEST_TYPE'] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :----- | :-------------------- | +| **`prompt`** | **Required** | String | The prompt text or | +: : : : instruction for the : +: : : : model. : +| **`connection_id`** | Optional | String | The connection ID. | +: : : : Optional if : +: : : : configured via other : +: : : : means or testing. : +| **`endpoint`** | Optional | String | The model name, e.g., | +: : : : `'gemini-2.5-flash'`. : +| **`output_schema`** | Optional | String | Schema definition for | +: : : : structured output, : +: : : : e.g., `'answer BOOL, : +: : : : reason STRING'`. : +| **`request_type`** | Optional | String | `'DEDICATED'` or | +: : : : `'SHARED'`. : +| **`model_params`** | Optional | JSON | JSON object for model | +: : : : parameters (e.g., : +: : : : `temperature`, : +: : : : `max_output_tokens`). : + +### Output Schema + +Returns a `STRUCT` with the following fields: + +| Column Name | Type | Description | +| :------------------ | :------------------- | :----------------------------- | +| **`result`** | `STRING` (or Custom) | The generated content. If | +: : : `output_schema` is used, this : +: : : field is replaced by the : +: : : schema's fields. : +| **`status`** | `STRING` | API response status (empty on | +: : : success). : +| **`full_response`** | `JSON` | The complete raw JSON response | +: : : from the model (including : +: : : safety ratings, usage : +: : : metadata). : + +## Examples + +### Basic Text Generation + +```sql +SELECT + AI.GENERATE( + 'Summarize this article: ' || article_content, + connection_id => 'my-project.us.my-connection', + endpoint => 'gemini-2.5-flash' + ) as summary +FROM `dataset.articles` +LIMIT 5; +``` + +### Structured Output Generation + +```sql +SELECT + AI.GENERATE( + 'Extract the date and amount from this invoice: ' || invoice_text, + output_schema => 'date DATE, amount FLOAT64' + ) as extracted_data +FROM `dataset.invoices`; +``` + +### Process images in a Cloud Storage bucket + +``` +CREATE SCHEMA IF NOT EXISTS bqml_tutorial; + +CREATE OR REPLACE EXTERNAL TABLE bqml_tutorial.product_images + WITH CONNECTION DEFAULT OPTIONS ( + object_metadata = 'SIMPLE', + uris = ['gs://cloud-samples-data/bigquery/tutorials/cymbal-pets/images/*.png']); + +SELECT + uri, + STRING(OBJ.GET_ACCESS_URL(ref,'r').access_urls.read_url) AS signed_url, + AI.GENERATE( + ("What is this: ", OBJ.GET_ACCESS_URL(ref, 'r')), + output_schema => + "image_description STRING, entities_in_the_image ARRAY").* +FROM bqml_tutorial.product_images +WHERE uri LIKE "%aquarium%"; +``` + +### Using Grounding + +``` +SELECT + name, + AI.GENERATE( + ('Please check the weather of ', name, ' for today.'), + model_params => JSON '{"tools": [{"googleSearch": {}}]}' + ) +FROM UNNEST(['Seattle', 'NYC', 'Austin']) AS name; +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_bool.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_bool.md new file mode 100644 index 0000000000..95b6c11460 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_bool.md @@ -0,0 +1,51 @@ +# BigQuery AI.Generate_Bool + +`AI.GENERATE_BOOL` generates a boolean value (`TRUE` or `FALSE`) based on the +prompt. + +## Syntax Reference + +```sql +AI.GENERATE_BOOL( + [ prompt => ] 'PROMPT' + [, connection_id => 'CONNECTION_ID' ] + [, endpoint => 'ENDPOINT' ] + [, model_params => 'MODEL_PARAMS'] + [, request_type => 'REQUEST_TYPE'] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :----- | :--------------------- | +| **`prompt`** | **Required** | String | The prompt text or | +: : : : instruction. : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model endpoint | +: : : : (e.g. : +: : : : `'gemini-2.5-flash'`). : +| **`model_params`** | Optional | JSON | JSON object for model | +: : : : parameters (e.g., : +: : : : `temperature`, : +: : : : `max_output_tokens`). : +| **`request_type`** | Optional | String | `'DEDICATED'` or | +: : : : `'SHARED'`. : + +### Output Schema + +Column Name | Type | Description +:------------------ | :------- | :-------------------------------------- +**`result`** | `BOOL` | The generated boolean value. +**`status`** | `STRING` | API response status (empty on success). +**`full_response`** | `JSON` | The complete raw JSON response. + +## Examples + +```sql +SELECT AI.GENERATE_BOOL( + 'Is this a valid email address? ' || email_address +) as is_valid +FROM `dataset.users`; +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_double.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_double.md new file mode 100644 index 0000000000..6c89f52a6c --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_double.md @@ -0,0 +1,50 @@ +# BigQuery AI.Generate_Double + +`AI.GENERATE_DOUBLE` generates a floating-point number based on the prompt. + +## Syntax Reference + +```sql +AI.GENERATE_DOUBLE( + [ prompt => ] 'PROMPT' + [, connection_id => 'CONNECTION_ID' ] + [, model_params => 'MODEL_PARAMS'] + [, endpoint => 'ENDPOINT' ] + [, request_type => 'REQUEST_TYPE'] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :----- | :--------------------- | +| **`prompt`** | **Required** | String | The prompt text or | +: : : : instruction. : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model endpoint | +: : : : (e.g. : +: : : : `'gemini-2.5-flash'`). : +| **`model_params`** | Optional | JSON | JSON object for model | +: : : : parameters (e.g., : +: : : : `temperature`, : +: : : : `max_output_tokens`). : +| **`request_type`** | Optional | String | `'DEDICATED'` or | +: : : : `'SHARED'`. : + +### Output Schema + +Column Name | Type | Description +:------------------ | :-------- | :-------------------------------------- +**`result`** | `FLOAT64` | The generated floating-point value. +**`status`** | `STRING` | API response status (empty on success). +**`full_response`** | `JSON` | The complete raw JSON response. + +## Examples + +```sql +SELECT AI.GENERATE_DOUBLE( + 'What is the total price mentioned in this text? ' || text_content +) as total_price +FROM `dataset.receipts`; +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_int.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_int.md new file mode 100644 index 0000000000..1a8ead6dc1 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_generate_int.md @@ -0,0 +1,50 @@ +# BigQuery AI.Generate_Int + +`AI.GENERATE_INT` generates an integer value based on the prompt. + +## Syntax Reference + +```sql +AI.GENERATE_INT( + [ prompt => ] 'PROMPT' + [, connection_id => 'CONNECTION_ID' ] + [, endpoint => 'ENDPOINT' ] + [, request_type => 'REQUEST_TYPE'] + [, model_params => 'MODEL_PARAMS'] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :----- | :--------------------- | +| **`prompt`** | **Required** | String | The prompt text or | +: : : : instruction. : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model endpoint | +: : : : (e.g. : +: : : : `'gemini-2.5-flash'`). : +| **`model_params`** | Optional | JSON | JSON object for model | +: : : : parameters (e.g., : +: : : : `temperature`, : +: : : : `max_output_tokens`). : +| **`request_type`** | Optional | String | `'DEDICATED'` or | +: : : : `'SHARED'`. : + +### Output Schema + +Column Name | Type | Description +:------------------ | :------- | :-------------------------------------- +**`result`** | `INT64` | The generated integer value. +**`status`** | `STRING` | API response status (empty on success). +**`full_response`** | `JSON` | The complete raw JSON response. + +## Examples + +```sql +SELECT AI.GENERATE_INT( + 'How many items are in this list? ' || list_content +) as item_count +FROM `dataset.inventory`; +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_if.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_if.md new file mode 100644 index 0000000000..c12d709df1 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_if.md @@ -0,0 +1,55 @@ +# BigQuery AI.If + +`AI.IF` is a semantic boolean function used to evaluate a condition described in +natural language. + +The function can be used to filter and join data based on conditions described +in natural language or multimodal input. The following are common use cases: + +- Sentiment analysis: Find customer reviews with negative sentiment. +- Topic analysis: Identify news articles related to a specific subject. +- Image analysis: Select images that contain a specific item. +- Security: Identify suspicious emails. + +## Syntax Reference + +```sql +AI.IF( + [ prompt => ] 'PROMPT' + [, connection_id => 'CONNECTION_ID' ] + [, endpoint => 'ENDPOINT' ] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :------------ | :--------------------- | +| **`prompt`** | **Required** | String/Struct | The prompt text or a | +: : : : struct/tuple of : +: : : : `(data, instruction)`. : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model endpoint | +: : : : (e.g. : +: : : : `'gemini-2.5-flash'`). : + +### Output Schema + +| Column Name | Type | Description | +| :------------------ | :----- | :---------------------------------------- | +| **(Scalar Result)** | `BOOL` | `TRUE` if the condition is met, `FALSE` | +: : : otherwise. Returns `NULL` on error/safety : +: : : filter. : + +## Examples + +### Filter rows based on semantic meaning + +```sql +SELECT * +FROM `dataset.table` +WHERE AI.IF( + (content_column, 'Is this review positive?') +); +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_score.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_score.md new file mode 100644 index 0000000000..1f7952cf98 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_score.md @@ -0,0 +1,52 @@ +# BigQuery AI.Score + +The `AI.SCORE` function is commonly used with the ORDER BY clause and works well +when you want to rank items. The following are common use cases: + +- Retail: Find the top 5 most negative customer reviews about a product. +- Hiring: Find the top 10 resumes that appear most qualified for a job post. +- Customer success: Find the top 20 best customer support interactions. + +## Syntax Reference + +```sql +AI.SCORE( + [ prompt => ] 'PROMPT' + [, connection_id => 'CONNECTION_ID' ] + [, endpoint => 'ENDPOINT' ] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :------------ | :--------------------- | +| **`prompt`** | **Required** | String/Struct | The prompt text or a | +: : : : struct/tuple of : +: : : : `(data, instruction)`. : +| **`connection_id`** | Optional | String | The connection ID to | +: : : : use for the LLM. : +| **`endpoint`** | Optional | String | The model endpoint | +: : : : (e.g. : +: : : : `'gemini-2.5-flash'`). : + +### Output Schema + +| Column Name | Type | Description | +| :------------------ | :-------- | :----------------------------------------- | +| **(Scalar Result)** | `FLOAT64` | A numerical score representing the degree | +: : : to which the data matches the instruction. : + +## Examples + +### Rank rows by semantic relevance + +```sql +SELECT * +FROM `dataset.table` +ORDER BY AI.SCORE( + (content_column, 'relevance to sports'), + connection_id => 'my-project.us.my-connection' +) DESC +LIMIT 10; +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_search.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_search.md new file mode 100644 index 0000000000..63d4a789cb --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_search.md @@ -0,0 +1,76 @@ +# BigQuery AI.Search + +`AI.SEARCH` is a table-valued function for semantic search on tables that have +autonomous embedding generation enabled. If your table has a vector index on the +embedding column, then AI.SEARCH uses it to optimize the search. + +You can use AI.SEARCH to help with the following tasks: + +- Semantic search: search entities ranked by semantic similarity. +- Recommendation: return entities with attributes similar to a given entity. +- Classification: return the class of entities whose attributes are similar to + the given entity. +- Clustering: cluster entities whose attributes are similar to a given entity. +- Outlier detection: return entities whose attributes are least related to the + given entity. + +## Syntax Reference + +```sql +AI.SEARCH( + { TABLE base_table | base_table_query }, + column_to_search, + query_value + [, top_k => top_k_value ] + [, distance_type => distance_type_value ] + [, options => options_value] +) +``` + +### Input Arguments + +Argument | Requirement | Type | Description +:--------------------- | :----------- | :------------- | :---------- +**`base_table`** | **Required** | Table/Subquery | The table to search for nearest neighbor embeddings. The table must have autonomous embedding generation enabled. +**`column_to_search`** | **Required** | STRING | A STRING literal that contains the name of the string column to search +**`query_value`** | **Required** | STRING | A string literal that represents the search query. +**`top_k`** | Optional | INT64 | A named argument with an INT64 value, specifies the number of nearest neighbors to return. The default is 10. +**`distance_type`** | Optional | STRING | A named argument with a STRING value. distance_type_value specifies the type of metric to use to compute the distance between two vectors. Supported distance types are EUCLIDEAN, COSINE, and DOT_PRODUCT. The default is EUCLIDEAN. +**`options`** | Optional | STRING | A named argument with a JSON-formatted STRING value that specifies the following search options: `fraction_lists_to_search` or `use_brute_force` + +### Output Schema + +Column Name | Type | Description +:------------- | :------ | :---------------------------------------------------- +**`base`** | STRUCT | A struct containing all columns from the input table. +**`distance`** | FLOAT64 | The distance score between the query and the result. + +## Examples + +```sql +# Create a table of products and descriptions with a generated embedding column. +CREATE TABLE mydataset.products ( + name STRING, + description STRING, + description_embedding STRUCT, status STRING> + GENERATED ALWAYS AS (AI.EMBED( + description, + connection_id => 'us.example_connection', + endpoint => 'text-embedding-005' + )) + STORED OPTIONS( asynchronous = TRUE ) +); + +# Insert product descriptions into the table. +# The description_embedding column is automatically updated. +INSERT INTO mydataset.products (name, description) VALUES + ("Lounger chair", "A comfortable chair for relaxing in."), + ("Super slingers", "An exciting board game for the whole family."), + ("Encyclopedia set", "A collection of informational books."); + +SELECT + base.name, + base.description, + distance +FROM AI.SEARCH(TABLE mydataset.products, 'description', "A really fun toy"); +``` diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_similarity.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_similarity.md new file mode 100644 index 0000000000..f1c9be72d0 --- /dev/null +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/references/bigquery_ai_similarity.md @@ -0,0 +1,48 @@ +# BigQuery AI.Similarity + +`AI.SIMILARITY` computes the cosine similarity between two inputs + +## Syntax Reference + +```sql +AI.SIMILARITY( + content1 => 'CONTENT1', + content2 => 'CONTENT2' + endpoint => 'ENDPOINT' + [, model_params => 'MODEL_PARAMS'] + [, connection_id => 'CONNECTION_ID'] +) +``` + +### Input Arguments + +| Argument | Requirement | Type | Description | +| :------------------ | :----------- | :----- | :---------------------------- | +| **`content1`** | **Required** | String | The first text content. | +| **`content2`** | **Required** | String | The second text content to | +: : : : compare against. : +| **`connection_id`** | Optional | String | The connection ID to use for | +: : : : the LLM. : +| **`endpoint`** | Optional | String | The model endpoint (e.g. | +: : : : `'multimodalembedding@001'`). : +| **`model_params`** | Optional | JSON | JSON object for model | +: : : : parameters (e.g., : +: : : : `temperature`, : +: : : : `max_output_tokens`). : + +### Output Schema + +| Column Name | Type | Description | +| :------------------ | :-------- | :---------------------------------- | +| **(Scalar Result)** | `FLOAT64` | A similarity score (e.g., cosine | +: : : similarity). Returns null if error. : + +## Examples + +```sql +SELECT AI.SIMILARITY( + content1 => 'The cat sat on the mat', + content2 => 'A feline is resting on the rug', + endpoint => 'text-embedding-005' +) as similarity_score; +``` diff --git a/tests/unittests/tools/bigquery/test_bigquery_skill.py b/tests/unittests/tools/bigquery/test_bigquery_skill.py new file mode 100644 index 0000000000..0ec7a9bbef --- /dev/null +++ b/tests/unittests/tools/bigquery/test_bigquery_skill.py @@ -0,0 +1,116 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the pre-packaged BigQuery skill.""" + +from __future__ import annotations + +import re + +from google.adk.skills._utils import _validate_skill_dir +from google.adk.tools.bigquery.bigquery_skill import _SKILL_DIR +from google.adk.tools.bigquery.bigquery_skill import get_bigquery_skill +from google.adk.tools.skill_toolset import ListSkillsTool +from google.adk.tools.skill_toolset import LoadSkillResourceTool +from google.adk.tools.skill_toolset import LoadSkillTool +from google.adk.tools.skill_toolset import RunSkillScriptTool +from google.adk.tools.skill_toolset import SkillToolset +import pytest + + +def test_get_bigquery_skill_returns_valid_skill(): + """Verify get_bigquery_skill returns a Skill with expected fields.""" + skill = get_bigquery_skill() + + assert skill.name == "bigquery-ai-ml" + assert skill.description + assert len(skill.description) > 0 + assert skill.instructions + assert len(skill.instructions) > 0 + + +def test_skill_name_matches_spec(): + """Verify skill name is kebab-case and matches directory name.""" + skill = get_bigquery_skill() + + # Name must be kebab-case + assert re.fullmatch(r"[a-z][a-z0-9]*(-[a-z0-9]+)*", skill.name) + + # Name must match the directory name + assert skill.name == _SKILL_DIR.name + + +def test_skill_has_expected_references(): + """Verify all expected reference files are present and non-empty.""" + skill = get_bigquery_skill() + + expected_refs = { + "bigquery_ai_classify.md", + "bigquery_ai_detect_anomalies.md", + "bigquery_ai_forecast.md", + "bigquery_ai_generate.md", + "bigquery_ai_generate_bool.md", + "bigquery_ai_generate_double.md", + "bigquery_ai_generate_int.md", + "bigquery_ai_if.md", + "bigquery_ai_score.md", + "bigquery_ai_search.md", + "bigquery_ai_similarity.md", + } + actual_refs = set(skill.resources.list_references()) + + assert expected_refs == actual_refs + + for ref_name in expected_refs: + content = skill.resources.get_reference(ref_name) + assert content is not None, f"Reference {ref_name} returned None" + assert len(content) > 0, f"Reference {ref_name} is empty" + + +@pytest.mark.asyncio +async def test_skill_works_with_skill_toolset(): + """Verify the skill integrates with SkillToolset and produces 4 tools.""" + skill = get_bigquery_skill() + toolset = SkillToolset(skills=[skill]) + + tools = await toolset.get_tools() + assert len(tools) == 4 + + tool_types = {type(t) for t in tools} + expected_types = { + ListSkillsTool, + LoadSkillTool, + LoadSkillResourceTool, + RunSkillScriptTool, + } + assert tool_types == expected_types + + +def test_skill_passes_validation(): + """Verify the skill directory passes ADK's built-in validator.""" + problems = _validate_skill_dir(_SKILL_DIR) + assert not problems, f"Validation problems: {problems}" + + +def test_skill_frontmatter_has_license(): + """Verify the skill includes a license field.""" + skill = get_bigquery_skill() + assert skill.frontmatter.license == "Apache-2.0" + + +def test_skill_frontmatter_has_metadata(): + """Verify the skill includes author and version metadata.""" + skill = get_bigquery_skill() + assert "author" in skill.frontmatter.metadata + assert "version" in skill.frontmatter.metadata From 0e71985501c00682eff0f0c5328a3d429f2bdc68 Mon Sep 17 00:00:00 2001 From: Vishwa Murugan Date: Sat, 28 Mar 2026 22:27:44 -0700 Subject: [PATCH 103/192] fix: Safer fix for UI widget merging in ADK Revert global list extension in deep_merge_dicts and instead explicitly handle list extension only for render_ui_widgets in merge_parallel_function_response_events. Co-authored-by: Vishwa Murugan PiperOrigin-RevId: 891147765 --- src/google/adk/flows/llm_flows/functions.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/google/adk/flows/llm_flows/functions.py b/src/google/adk/flows/llm_flows/functions.py index 1f85bee3a8..724bcd3f0e 100644 --- a/src/google/adk/flows/llm_flows/functions.py +++ b/src/google/adk/flows/llm_flows/functions.py @@ -1151,12 +1151,10 @@ def __build_response_event( def deep_merge_dicts(d1: dict, d2: dict) -> dict: - """Recursively merges d2 into d1, extending lists where keys collide.""" + """Recursively merges d2 into d1.""" for key, value in d2.items(): if key in d1 and isinstance(d1[key], dict) and isinstance(value, dict): d1[key] = deep_merge_dicts(d1[key], value) - elif key in d1 and isinstance(d1[key], list) and isinstance(value, list): - d1[key].extend(value) else: d1[key] = value return d1 @@ -1181,14 +1179,25 @@ def merge_parallel_function_response_events( # Merge actions from all events merged_actions_data: dict[str, Any] = {} + aggregated_ui_widgets = [] for event in function_response_events: if event.actions: + actions_dict = event.actions.model_dump(exclude_none=True, by_alias=True) + ui_widgets = actions_dict.pop( + 'renderUiWidgets', None + ) or actions_dict.pop('render_ui_widgets', None) + if ui_widgets: + aggregated_ui_widgets.extend(ui_widgets) + # Use `by_alias=True` because it converts the model to a dictionary while respecting field aliases, ensuring that the enum fields are correctly handled without creating a duplicate. merged_actions_data = deep_merge_dicts( merged_actions_data, - event.actions.model_dump(exclude_none=True, by_alias=True), + actions_dict, ) + if aggregated_ui_widgets: + merged_actions_data['renderUiWidgets'] = aggregated_ui_widgets + merged_actions = EventActions.model_validate(merged_actions_data) # Create the new merged event From d689a04f16846c2aa483dd45dcc65e2decdb419c Mon Sep 17 00:00:00 2001 From: Xuan Yang Date: Mon, 30 Mar 2026 11:45:29 -0700 Subject: [PATCH 104/192] feat: Support propagating grounding metadata from AgentTool Close: https://github.com/google/adk-python/issues/4671 Co-authored-by: Xuan Yang PiperOrigin-RevId: 891827874 --- .../__init__.py | 15 ++++ .../agent.py | 74 ++++++++++++++++ .../adk/flows/llm_flows/base_llm_flow.py | 4 +- src/google/adk/tools/agent_tool.py | 10 +++ .../adk/tools/google_search_agent_tool.py | 87 +------------------ .../flows/llm_flows/test_base_llm_flow.py | 5 +- 6 files changed, 104 insertions(+), 91 deletions(-) create mode 100644 contributing/samples/agent_tool_with_grounding_metadata/__init__.py create mode 100644 contributing/samples/agent_tool_with_grounding_metadata/agent.py diff --git a/contributing/samples/agent_tool_with_grounding_metadata/__init__.py b/contributing/samples/agent_tool_with_grounding_metadata/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/agent_tool_with_grounding_metadata/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/agent_tool_with_grounding_metadata/agent.py b/contributing/samples/agent_tool_with_grounding_metadata/agent.py new file mode 100644 index 0000000000..521038d809 --- /dev/null +++ b/contributing/samples/agent_tool_with_grounding_metadata/agent.py @@ -0,0 +1,74 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import random + +from dotenv import load_dotenv +from google.adk import Agent +from google.adk.tools.agent_tool import AgentTool +from google.adk.tools.tool_context import ToolContext +from google.adk.tools.vertex_ai_search_tool import VertexAiSearchTool + +load_dotenv(override=True) + +VERTEXAI_DATASTORE_ID = os.getenv("VERTEXAI_DATASTORE_ID") +if not VERTEXAI_DATASTORE_ID: + raise ValueError("VERTEXAI_DATASTORE_ID environment variable not set") + + +def roll_die(sides: int, tool_context: ToolContext) -> int: + """Roll a die and return the rolled result. + + Args: + sides: The integer number of sides the die has. + + Returns: + An integer of the result of rolling the die. + """ + result = random.randint(1, sides) + if "rolls" not in tool_context.state: + tool_context.state["rolls"] = [] + + tool_context.state["rolls"] = tool_context.state["rolls"] + [result] + return result + + +vertex_ai_search_agent = Agent( + model="gemini-3-flash-preview", + name="vertex_ai_search_agent", + description="An agent for performing Vertex AI search.", + tools=[ + VertexAiSearchTool( + data_store_id=VERTEXAI_DATASTORE_ID, + ) + ], +) + +root_agent = Agent( + model="gemini-3.1-pro-preview", + name="hello_world_agent", + description="A hello world agent with multiple tools.", + instruction=""" + You are a helpful assistant which can help user to roll dice and search for information. + - Use `roll_die` tool to roll dice. + - Use `vertex_ai_search_agent` to search for Google Agent Development Kit (ADK) information in the datastore. + """, + tools=[ + roll_die, + AgentTool( + agent=vertex_ai_search_agent, propagate_grounding_metadata=True + ), + ], +) diff --git a/src/google/adk/flows/llm_flows/base_llm_flow.py b/src/google/adk/flows/llm_flows/base_llm_flow.py index bd0037bdcb..0f2d3600aa 100644 --- a/src/google/adk/flows/llm_flows/base_llm_flow.py +++ b/src/google/adk/flows/llm_flows/base_llm_flow.py @@ -259,7 +259,9 @@ async def _maybe_add_grounding_metadata( tools = await agent.canonical_tools(readonly_context) invocation_context.canonical_tools_cache = tools - if not any(tool.name == 'google_search_agent' for tool in tools): + if not any( + getattr(tool, 'propagate_grounding_metadata', False) for tool in tools + ): return response ground_metadata = invocation_context.session.state.get( 'temp:_adk_grounding_metadata', None diff --git a/src/google/adk/tools/agent_tool.py b/src/google/adk/tools/agent_tool.py index f53c18df51..8a43eb6311 100644 --- a/src/google/adk/tools/agent_tool.py +++ b/src/google/adk/tools/agent_tool.py @@ -113,10 +113,12 @@ def __init__( skip_summarization: bool = False, *, include_plugins: bool = True, + propagate_grounding_metadata: bool = False, ): self.agent = agent self.skip_summarization: bool = skip_summarization self.include_plugins = include_plugins + self.propagate_grounding_metadata = propagate_grounding_metadata super().__init__(name=agent.name, description=agent.description) @@ -247,6 +249,7 @@ async def run_async( ) last_content = None + last_grounding_metadata = None async with Aclosing( runner.run_async( user_id=session.user_id, session_id=session.id, new_message=content @@ -258,6 +261,7 @@ async def run_async( tool_context.state.update(event.actions.state_delta) if event.content: last_content = event.content + last_grounding_metadata = event.grounding_metadata # Clean up runner resources (especially MCP sessions) # to avoid "Attempted to exit cancel scope in a different task" errors @@ -273,6 +277,12 @@ async def run_async( tool_result = validate_schema(output_schema, merged_text) else: tool_result = merged_text + + if self.propagate_grounding_metadata and last_grounding_metadata: + tool_context.state['temp:_adk_grounding_metadata'] = ( + last_grounding_metadata + ) + return tool_result @override diff --git a/src/google/adk/tools/google_search_agent_tool.py b/src/google/adk/tools/google_search_agent_tool.py index 7ed09c7932..f21e915cc6 100644 --- a/src/google/adk/tools/google_search_agent_tool.py +++ b/src/google/adk/tools/google_search_agent_tool.py @@ -14,21 +14,12 @@ from __future__ import annotations -from typing import Any from typing import Union -from google.genai import types -from typing_extensions import override - from ..agents.llm_agent import LlmAgent -from ..memory.in_memory_memory_service import InMemoryMemoryService from ..models.base_llm import BaseLlm -from ..utils._schema_utils import validate_schema -from ..utils.context_utils import Aclosing -from ._forwarding_artifact_service import ForwardingArtifactService from .agent_tool import AgentTool from .google_search_tool import google_search -from .tool_context import ToolContext def create_google_search_agent(model: Union[str, BaseLlm]) -> LlmAgent: @@ -60,80 +51,4 @@ class GoogleSearchAgentTool(AgentTool): def __init__(self, agent: LlmAgent): self.agent = agent - super().__init__(agent=self.agent) - - @override - async def run_async( - self, - *, - args: dict[str, Any], - tool_context: ToolContext, - ) -> Any: - from ..agents.llm_agent import LlmAgent - from ..runners import Runner - from ..sessions.in_memory_session_service import InMemorySessionService - - if isinstance(self.agent, LlmAgent) and self.agent.input_schema: - input_value = self.agent.input_schema.model_validate(args) - content = types.Content( - role='user', - parts=[ - types.Part.from_text( - text=input_value.model_dump_json(exclude_none=True) - ) - ], - ) - else: - content = types.Content( - role='user', - parts=[types.Part.from_text(text=args['request'])], - ) - runner = Runner( - app_name=self.agent.name, - agent=self.agent, - artifact_service=ForwardingArtifactService(tool_context), - session_service=InMemorySessionService(), - memory_service=InMemoryMemoryService(), - credential_service=tool_context._invocation_context.credential_service, - plugins=list(tool_context._invocation_context.plugin_manager.plugins), - ) - - state_dict = { - k: v - for k, v in tool_context.state.to_dict().items() - if not k.startswith('_adk') # Filter out adk internal states - } - session = await runner.session_service.create_session( - app_name=self.agent.name, - user_id=tool_context._invocation_context.user_id, - state=state_dict, - ) - - last_content = None - last_grounding_metadata = None - async with Aclosing( - runner.run_async( - user_id=session.user_id, session_id=session.id, new_message=content - ) - ) as agen: - async for event in agen: - # Forward state delta to parent session. - if event.actions.state_delta: - tool_context.state.update(event.actions.state_delta) - if event.content: - last_content = event.content - last_grounding_metadata = event.grounding_metadata - - if last_content is None or last_content.parts is None: - return '' - merged_text = '\n'.join(p.text for p in last_content.parts if p.text) - if isinstance(self.agent, LlmAgent) and self.agent.output_schema: - tool_result = validate_schema(self.agent.output_schema, merged_text) - else: - tool_result = merged_text - - if last_grounding_metadata: - tool_context.state['temp:_adk_grounding_metadata'] = ( - last_grounding_metadata - ) - return tool_result + super().__init__(agent=self.agent, propagate_grounding_metadata=True) diff --git a/tests/unittests/flows/llm_flows/test_base_llm_flow.py b/tests/unittests/flows/llm_flows/test_base_llm_flow.py index 3dfadbcabf..9578a3f538 100644 --- a/tests/unittests/flows/llm_flows/test_base_llm_flow.py +++ b/tests/unittests/flows/llm_flows/test_base_llm_flow.py @@ -284,7 +284,6 @@ async def test_handle_after_model_callback_grounding_with_no_callbacks( invocation_id=invocation_context.invocation_id, author=agent.name, ) - flow = BaseLlmFlowForTesting() result = await _handle_after_model_callback( invocation_context, llm_response, event @@ -341,7 +340,6 @@ async def test_handle_after_model_callback_grounding_with_callback_override( invocation_id=invocation_context.invocation_id, author=agent.name, ) - flow = BaseLlmFlowForTesting() result = await _handle_after_model_callback( invocation_context, llm_response, event @@ -403,7 +401,6 @@ def __init__(self): invocation_id=invocation_context.invocation_id, author=agent.name, ) - flow = BaseLlmFlowForTesting() result = await _handle_after_model_callback( invocation_context, llm_response, event @@ -430,6 +427,7 @@ class MockGoogleSearchTool(BaseTool): def __init__(self): super().__init__(name='google_search_agent', description='Mock search') + self.propagate_grounding_metadata = True async def call(self, **kwargs): return 'mock result' @@ -459,7 +457,6 @@ async def call(self, **kwargs): invocation_id=invocation_context.invocation_id, author=agent.name, ) - flow = BaseLlmFlowForTesting() # Call _handle_after_model_callback multiple times with the same context result1 = await _handle_after_model_callback( From f8a6bd7fc0ca4b37cac4dc93c725c8973a1c9027 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Mon, 30 Mar 2026 12:20:29 -0700 Subject: [PATCH 105/192] fix: include intermediate subagent final response events in evaluation intermediate data PiperOrigin-RevId: 891846041 --- .../adk/evaluation/evaluation_generator.py | 13 ++++++----- .../evaluation/test_evaluation_generator.py | 22 +++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/google/adk/evaluation/evaluation_generator.py b/src/google/adk/evaluation/evaluation_generator.py index 725bddc11c..f8fb6795aa 100644 --- a/src/google/adk/evaluation/evaluation_generator.py +++ b/src/google/adk/evaluation/evaluation_generator.py @@ -280,6 +280,7 @@ def convert_events_to_eval_invocations( invocations = [] for invocation_id, events in events_by_invocation_id.items(): final_response = None + final_event = None user_content = Content(parts=[]) invocation_timestamp = 0 app_details = None @@ -304,15 +305,17 @@ def convert_events_to_eval_invocations( if event.content and event.content.parts: if event.is_final_response(): final_response = event.content - else: - for p in event.content.parts: - if p.function_call or p.function_response or p.text: - events_to_add.append(event) - break + final_event = event + + for p in event.content.parts: + if p.function_call or p.function_response or p.text: + events_to_add.append(event) + break invocation_events = [ InvocationEvent(author=e.author, content=e.content) for e in events_to_add + if e is not final_event ] invocations.append( Invocation( diff --git a/tests/unittests/evaluation/test_evaluation_generator.py b/tests/unittests/evaluation/test_evaluation_generator.py index 29ac75ffb5..a4aa8691fd 100644 --- a/tests/unittests/evaluation/test_evaluation_generator.py +++ b/tests/unittests/evaluation/test_evaluation_generator.py @@ -204,6 +204,28 @@ def test_multi_agent( assert events[2].author == "sub_agent_1" assert events[3].author == "sub_agent_2" + def test_convert_multi_agent_final_responses( + self, + ): + """Tests that only the last final response is excluded from intermediate data.""" + events = [ + _build_event("user", [types.Part(text="Hello")], "inv1"), + _build_event("agent1", [types.Part(text="First response")], "inv1"), + _build_event("agent2", [types.Part(text="Second response")], "inv1"), + ] + + invocations = EvaluationGenerator.convert_events_to_eval_invocations(events) + + assert len(invocations) == 1 + invocation = invocations[0] + assert invocation.final_response.parts[0].text == "Second response" + + intermediate_events = invocation.intermediate_data.invocation_events + # agent1 is included because it is not the final_event (which is agent2) + assert len(intermediate_events) == 1 + assert intermediate_events[0].author == "agent1" + assert intermediate_events[0].content.parts[0].text == "First response" + class TestGetAppDetailsByInvocationId: """Test cases for EvaluationGenerator._get_app_details_by_invocation_id method.""" From 92cad99724d333760e4ebc6116951d78a9b1cb7a Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Mon, 30 Mar 2026 15:06:12 -0700 Subject: [PATCH 106/192] fix: Cache BaseToolset.get_tools() for calls within the same invocation This reduces latency by avoiding redudant network calls Co-authored-by: Kathy Wu PiperOrigin-RevId: 891931454 --- src/google/adk/tools/base_toolset.py | 14 ++++++ tests/unittests/tools/test_base_toolset.py | 56 +++++++++++++++++++++- 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/google/adk/tools/base_toolset.py b/src/google/adk/tools/base_toolset.py index 53c3b309d8..0fe06e7363 100644 --- a/src/google/adk/tools/base_toolset.py +++ b/src/google/adk/tools/base_toolset.py @@ -80,6 +80,8 @@ def __init__( """ self.tool_filter = tool_filter self.tool_name_prefix = tool_name_prefix + self._cached_invocation_id: Optional[str] = None + self._cached_prefixed_tools: Optional[list[BaseTool]] = None @abstractmethod async def get_tools( @@ -112,9 +114,19 @@ async def get_tools_with_prefix( Returns: list[BaseTool]: A list of tools with prefixed names if tool_name_prefix is provided. """ + invocation_id = readonly_context.invocation_id if readonly_context else None + + if ( + self._cached_prefixed_tools is not None + and self._cached_invocation_id == invocation_id + ): + return self._cached_prefixed_tools + tools = await self.get_tools(readonly_context) if not self.tool_name_prefix: + self._cached_invocation_id = invocation_id + self._cached_prefixed_tools = tools return tools prefix = self.tool_name_prefix @@ -147,6 +159,8 @@ def _get_prefixed_declaration(): tool_copy._get_declaration = _create_prefixed_declaration() prefixed_tools.append(tool_copy) + self._cached_invocation_id = invocation_id + self._cached_prefixed_tools = prefixed_tools return prefixed_tools async def close(self) -> None: diff --git a/tests/unittests/tools/test_base_toolset.py b/tests/unittests/tools/test_base_toolset.py index 7c4ef3cfdd..d41dce63d3 100644 --- a/tests/unittests/tools/test_base_toolset.py +++ b/tests/unittests/tools/test_base_toolset.py @@ -383,6 +383,58 @@ async def test_no_duplicate_prefixing(): original_tools = await toolset.get_tools() assert original_tools[0].name == 'original' - # The prefixed tools should be different instances - assert prefixed_tools_1[0] is not prefixed_tools_2[0] + # The prefixed tools should be the same instance when cached + assert prefixed_tools_1[0] is prefixed_tools_2[0] assert prefixed_tools_1[0] is not original_tools[0] + + +@pytest.mark.asyncio +async def test_get_tools_with_prefix_caching(): + """Test that get_tools_with_prefix caches results within the same invocation.""" + tool1 = _TestingTool(name='tool1', description='Test tool 1') + toolset = _TestingToolset(tools=[tool1], tool_name_prefix='test') + + session_service = InMemorySessionService() + session = await session_service.create_session( + app_name='test_app', user_id='test_user' + ) + agent = SequentialAgent(name='test_agent') + invocation_context1 = InvocationContext( + invocation_id='inv-1', + agent=agent, + session=session, + session_service=session_service, + ) + readonly_context1 = ReadonlyContext(invocation_context1) + + # First call + tools1 = await toolset.get_tools_with_prefix( + readonly_context=readonly_context1 + ) + assert len(tools1) == 1 + assert tools1[0].name == 'test_tool1' + + # Second call with same context/invocation_id + tools2 = await toolset.get_tools_with_prefix( + readonly_context=readonly_context1 + ) + assert len(tools2) == 1 + assert ( + tools2 is tools1 + ) # Should return the exact same list instance (from cache) + + # Third call with different invocation_id + invocation_context2 = InvocationContext( + invocation_id='inv-2', + agent=agent, + session=session, + session_service=session_service, + ) + readonly_context2 = ReadonlyContext(invocation_context2) + + tools3 = await toolset.get_tools_with_prefix( + readonly_context=readonly_context2 + ) + assert len(tools3) == 1 + assert tools3 is not tools1 # Should be a new list instance + assert tools3[0].name == 'test_tool1' From b2daf83db406f8844f9db75abc7fee17362433b3 Mon Sep 17 00:00:00 2001 From: Haiyuan Cao Date: Mon, 30 Mar 2026 15:48:47 -0700 Subject: [PATCH 107/192] fix: sync callbacks with call_llm span Moved `before_model_callback` inside the `call_llm` span. Wrapped both `after_model_callback` and error callbacks with `trace.use_span()` to bind callbacks to the correct overarching span. Added regression tests to verify span ID consistency. Co-authored-by: Haiyuan Cao PiperOrigin-RevId: 891952170 --- .../adk/flows/llm_flows/base_llm_flow.py | 107 +++-- .../test_llm_callback_span_consistency.py | 387 ++++++++++++++++++ 2 files changed, 454 insertions(+), 40 deletions(-) create mode 100644 tests/unittests/flows/llm_flows/test_llm_callback_span_consistency.py diff --git a/src/google/adk/flows/llm_flows/base_llm_flow.py b/src/google/adk/flows/llm_flows/base_llm_flow.py index 0f2d3600aa..3a25799106 100644 --- a/src/google/adk/flows/llm_flows/base_llm_flow.py +++ b/src/google/adk/flows/llm_flows/base_llm_flow.py @@ -24,6 +24,7 @@ from google.adk.platform import time as platform_time from google.genai import types +from opentelemetry import trace from websockets.exceptions import ConnectionClosed from websockets.exceptions import ConnectionClosedOK @@ -259,9 +260,7 @@ async def _maybe_add_grounding_metadata( tools = await agent.canonical_tools(readonly_context) invocation_context.canonical_tools_cache = tools - if not any( - getattr(tool, 'propagate_grounding_metadata', False) for tool in tools - ): + if not any(tool.name == 'google_search_agent' for tool in tools): return response ground_metadata = invocation_context.session.state.get( 'temp:_adk_grounding_metadata', None @@ -308,6 +307,7 @@ async def _run_and_handle_error( invocation_context: InvocationContext, llm_request: LlmRequest, model_response_event: Event, + call_llm_span: Optional[trace.Span] = None, ) -> AsyncGenerator[LlmResponse, None]: """Wraps an LLM response generator with error callback handling. @@ -321,6 +321,9 @@ async def _run_and_handle_error( invocation_context: The invocation context. llm_request: The LLM request. model_response_event: The model response event. + call_llm_span: The call_llm span to rebind error callbacks to. When + provided, on_model_error callbacks run under this span so plugins observe + the same span as before/after model callbacks. Yields: LlmResponse objects from the generator. @@ -382,11 +385,19 @@ async def _run_on_model_error_callbacks( callback_context = CallbackContext( invocation_context, event_actions=model_response_event.actions ) - error_response = await _run_on_model_error_callbacks( - callback_context=callback_context, - llm_request=llm_request, - error=model_error, - ) + if call_llm_span is not None: + with trace.use_span(call_llm_span, end_on_exit=False): + error_response = await _run_on_model_error_callbacks( + callback_context=callback_context, + llm_request=llm_request, + error=model_error, + ) + else: + error_response = await _run_on_model_error_callbacks( + callback_context=callback_context, + llm_request=llm_request, + error=model_error, + ) if error_response is not None: yield error_response else: @@ -1104,28 +1115,30 @@ async def _call_llm_async( llm_request: LlmRequest, model_response_event: Event, ) -> AsyncGenerator[LlmResponse, None]: - # Runs before_model_callback if it exists. - if response := await self._handle_before_model_callback( - invocation_context, llm_request, model_response_event - ): - yield response - return - - llm_request.config = llm_request.config or types.GenerateContentConfig() - llm_request.config.labels = llm_request.config.labels or {} - - # Add agent name as a label to the llm_request. This will help with slicing - # the billing reports on a per-agent basis. - if _ADK_AGENT_NAME_LABEL_KEY not in llm_request.config.labels: - llm_request.config.labels[_ADK_AGENT_NAME_LABEL_KEY] = ( - invocation_context.agent.name - ) - - # Calls the LLM. - llm = self.__get_llm(invocation_context) async def _call_llm_with_tracing() -> AsyncGenerator[LlmResponse, None]: with tracer.start_as_current_span('call_llm') as span: + # Runs before_model_callback inside the call_llm span so + # plugins observe the same span as after/error callbacks. + if response := await self._handle_before_model_callback( + invocation_context, llm_request, model_response_event + ): + yield response + return + + llm_request.config = llm_request.config or types.GenerateContentConfig() + llm_request.config.labels = llm_request.config.labels or {} + + # Add agent name as a label to the llm_request. This will help + # with slicing billing reports on a per-agent basis. + if _ADK_AGENT_NAME_LABEL_KEY not in llm_request.config.labels: + llm_request.config.labels[_ADK_AGENT_NAME_LABEL_KEY] = ( + invocation_context.agent.name + ) + + # Calls the LLM. + llm = self.__get_llm(invocation_context) + if invocation_context.run_config.support_cfc: invocation_context.live_request_queue = LiveRequestQueue() responses_generator = self.run_live(invocation_context) @@ -1135,14 +1148,20 @@ async def _call_llm_with_tracing() -> AsyncGenerator[LlmResponse, None]: invocation_context, llm_request, model_response_event, + call_llm_span=span, ) ) as agen: async for llm_response in agen: - # Runs after_model_callback if it exists. - if altered_llm_response := await self._handle_after_model_callback( - invocation_context, llm_response, model_response_event - ): - llm_response = altered_llm_response + # Rebind to call_llm span for after_model_callback. + with trace.use_span(span, end_on_exit=False): + if altered := ( + await self._handle_after_model_callback( + invocation_context, + llm_response, + model_response_event, + ) + ): + llm_response = altered # only yield partial response in SSE streaming mode if ( invocation_context.run_config.streaming_mode @@ -1153,9 +1172,9 @@ async def _call_llm_with_tracing() -> AsyncGenerator[LlmResponse, None]: if llm_response.turn_complete: invocation_context.live_request_queue.close() else: - # Check if we can make this llm call or not. If the current call - # pushes the counter beyond the max set value, then the execution is - # stopped right here, and exception is thrown. + # Check if we can make this llm call or not. If the current + # call pushes the counter beyond the max set value, then the + # execution is stopped right here, and exception is thrown. invocation_context.increment_llm_call_count() responses_generator = llm.generate_content_async( llm_request, @@ -1168,6 +1187,7 @@ async def _call_llm_with_tracing() -> AsyncGenerator[LlmResponse, None]: invocation_context, llm_request, model_response_event, + call_llm_span=span, ) ) as agen: async for llm_response in agen: @@ -1178,11 +1198,16 @@ async def _call_llm_with_tracing() -> AsyncGenerator[LlmResponse, None]: llm_response, span, ) - # Runs after_model_callback if it exists. - if altered_llm_response := await self._handle_after_model_callback( - invocation_context, llm_response, model_response_event - ): - llm_response = altered_llm_response + # Rebind to call_llm span for after_model_callback. + with trace.use_span(span, end_on_exit=False): + if altered := ( + await self._handle_after_model_callback( + invocation_context, + llm_response, + model_response_event, + ) + ): + llm_response = altered yield llm_response @@ -1237,6 +1262,7 @@ async def _run_and_handle_error( invocation_context: InvocationContext, llm_request: LlmRequest, model_response_event: Event, + call_llm_span: Optional[trace.Span] = None, ) -> AsyncGenerator[LlmResponse, None]: async with Aclosing( _run_and_handle_error( @@ -1244,6 +1270,7 @@ async def _run_and_handle_error( invocation_context, llm_request, model_response_event, + call_llm_span=call_llm_span, ) ) as agen: async for response in agen: diff --git a/tests/unittests/flows/llm_flows/test_llm_callback_span_consistency.py b/tests/unittests/flows/llm_flows/test_llm_callback_span_consistency.py new file mode 100644 index 0000000000..cb7a0e545c --- /dev/null +++ b/tests/unittests/flows/llm_flows/test_llm_callback_span_consistency.py @@ -0,0 +1,387 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests that before/after/error model callbacks all observe the same call_llm span. + +Regression tests for https://github.com/google/adk-python/issues/4851. +""" + +from typing import AsyncGenerator +from typing import Optional + +from google.adk.agents.callback_context import CallbackContext +from google.adk.agents.llm_agent import Agent +from google.adk.agents.run_config import RunConfig +from google.adk.agents.run_config import StreamingMode +from google.adk.events.event import Event +from google.adk.flows.llm_flows.base_llm_flow import BaseLlmFlow +from google.adk.models.llm_request import LlmRequest +from google.adk.models.llm_response import LlmResponse +from google.adk.plugins.base_plugin import BasePlugin +from google.adk.utils.context_utils import Aclosing +from google.genai import types +from google.genai.errors import ClientError +from opentelemetry import trace +from opentelemetry.sdk.trace import TracerProvider +import pytest + +from ... import testing_utils + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +_SPAN_ID_INVALID = 0 + + +class _SpanCapture: + """Stores the span ID and trace ID observed from within a callback.""" + + def __init__(self): + self.span_id: int = _SPAN_ID_INVALID + self.trace_id: int = 0 + + def capture(self): + span = trace.get_current_span() + ctx = span.get_span_context() + if ctx and ctx.span_id != _SPAN_ID_INVALID: + self.span_id = ctx.span_id + self.trace_id = ctx.trace_id + + +class SpanCapturingPlugin(BasePlugin): + """Plugin that records the active span ID in each callback.""" + + def __init__(self): + self.name = 'span_capturing_plugin' + self.before_capture = _SpanCapture() + self.after_capture = _SpanCapture() + self.error_capture = _SpanCapture() + + self._short_circuit_before = False + self._short_circuit_response: Optional[LlmResponse] = None + + async def before_model_callback( + self, + *, + callback_context: CallbackContext, + llm_request: LlmRequest, + ) -> Optional[LlmResponse]: + self.before_capture.capture() + if self._short_circuit_before: + return self._short_circuit_response + return None + + async def after_model_callback( + self, + *, + callback_context: CallbackContext, + llm_response: LlmResponse, + ) -> Optional[LlmResponse]: + self.after_capture.capture() + return None + + async def on_model_error_callback( + self, + *, + callback_context: CallbackContext, + llm_request: LlmRequest, + error: Exception, + ) -> Optional[LlmResponse]: + self.error_capture.capture() + # Return a response so the error doesn't propagate. + return LlmResponse( + content=testing_utils.ModelContent( + [types.Part.from_text(text='error_handled')] + ) + ) + + +# Install a real TracerProvider so spans are recorded (not NoOp). +# This must happen at module level *before* any tracer is obtained, +# because the OTel SDK only allows setting the provider once. +_provider = TracerProvider() +trace.set_tracer_provider(_provider) + + +_MOCK_ERROR = ClientError( + code=500, + response_json={ + 'error': { + 'code': 500, + 'message': 'Model error.', + 'status': 'INTERNAL', + } + }, +) + + +# --------------------------------------------------------------------------- +# Tests: non-CFC success path +# --------------------------------------------------------------------------- + + +def test_before_and_after_callbacks_share_same_span(): + """before_model_callback and after_model_callback see the same span ID.""" + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(responses=['hello']) + agent = Agent(name='root_agent', model=mock_model) + runner = testing_utils.InMemoryRunner(agent, plugins=[plugin]) + + runner.run('test') + + assert ( + plugin.before_capture.span_id != _SPAN_ID_INVALID + ), 'before_model_callback did not observe a valid span' + assert ( + plugin.after_capture.span_id != _SPAN_ID_INVALID + ), 'after_model_callback did not observe a valid span' + assert plugin.before_capture.span_id == plugin.after_capture.span_id, ( + 'before_model_callback and after_model_callback saw different spans:' + f' before={plugin.before_capture.span_id:#x},' + f' after={plugin.after_capture.span_id:#x}' + ) + + +def test_callbacks_same_trace_id(): + """before and after callbacks are in the same trace.""" + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(responses=['hello']) + agent = Agent(name='root_agent', model=mock_model) + runner = testing_utils.InMemoryRunner(agent, plugins=[plugin]) + + runner.run('test') + + assert plugin.before_capture.trace_id != 0 + assert ( + plugin.before_capture.trace_id == plugin.after_capture.trace_id + ), 'before and after callbacks are in different traces' + + +# --------------------------------------------------------------------------- +# Tests: non-CFC error path +# --------------------------------------------------------------------------- + + +def test_before_and_error_callbacks_share_same_span(): + """before_model_callback and on_model_error_callback see the same span.""" + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(error=_MOCK_ERROR, responses=[]) + agent = Agent(name='root_agent', model=mock_model) + runner = testing_utils.InMemoryRunner(agent, plugins=[plugin]) + + runner.run('test') + + assert ( + plugin.before_capture.span_id != _SPAN_ID_INVALID + ), 'before_model_callback did not observe a valid span' + assert ( + plugin.error_capture.span_id != _SPAN_ID_INVALID + ), 'on_model_error_callback did not observe a valid span' + assert plugin.before_capture.span_id == plugin.error_capture.span_id, ( + 'before_model_callback and on_model_error_callback saw different' + f' spans: before={plugin.before_capture.span_id:#x},' + f' error={plugin.error_capture.span_id:#x}' + ) + + +# --------------------------------------------------------------------------- +# Tests: short-circuit path (before_model_callback returns a response) +# --------------------------------------------------------------------------- + + +def test_short_circuit_before_callback_sees_valid_span(): + """When before_model_callback short-circuits, it sees call_llm span.""" + plugin = SpanCapturingPlugin() + plugin._short_circuit_before = True + plugin._short_circuit_response = LlmResponse( + content=testing_utils.ModelContent( + [types.Part.from_text(text='short_circuited')] + ) + ) + mock_model = testing_utils.MockModel.create(responses=['unused']) + agent = Agent(name='root_agent', model=mock_model) + runner = testing_utils.InMemoryRunner(agent, plugins=[plugin]) + + runner.run('test') + + assert ( + plugin.before_capture.span_id != _SPAN_ID_INVALID + ), 'before_model_callback did not observe a valid span on short-circuit' + # after_model_callback should NOT have been called. + assert plugin.after_capture.span_id == _SPAN_ID_INVALID + + +# --------------------------------------------------------------------------- +# Tests: all three callbacks share same span on error path +# --------------------------------------------------------------------------- + + +def test_all_three_callbacks_share_span_on_error(): + """A plugin that implements all three callbacks sees the same span ID. + + When the LLM errors and on_model_error_callback returns a recovery + response, after_model_callback also runs on that response. All three + callbacks must observe the same call_llm span. + """ + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(error=_MOCK_ERROR, responses=[]) + agent = Agent(name='root_agent', model=mock_model) + runner = testing_utils.InMemoryRunner(agent, plugins=[plugin]) + + runner.run('test') + + # All three callbacks should have been called with valid spans. + assert plugin.before_capture.span_id != _SPAN_ID_INVALID + assert plugin.error_capture.span_id != _SPAN_ID_INVALID + assert plugin.after_capture.span_id != _SPAN_ID_INVALID + # And they should all share the same call_llm span. + assert ( + plugin.before_capture.span_id == plugin.error_capture.span_id + ), 'before and error callbacks saw different spans' + assert ( + plugin.before_capture.span_id == plugin.after_capture.span_id + ), 'before and after callbacks saw different spans on error recovery' + + +# --------------------------------------------------------------------------- +# Tests: CFC (Controlled Function Calling) / live path +# --------------------------------------------------------------------------- + + +class _CfcTestFlow(BaseLlmFlow): + """BaseLlmFlow subclass that stubs run_live for CFC testing.""" + + def __init__(self, live_responses: list[LlmResponse]): + self._live_responses = live_responses + + async def run_live( + self, invocation_context + ) -> AsyncGenerator[LlmResponse, None]: + for resp in self._live_responses: + yield resp + + +@pytest.mark.asyncio +async def test_cfc_before_and_after_callbacks_share_same_span(): + """CFC path: before_model_callback and after_model_callback share span.""" + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(responses=['unused']) + agent = Agent(name='root_agent', model=mock_model) + + live_response = LlmResponse( + content=testing_utils.ModelContent( + [types.Part.from_text(text='live_hello')] + ), + turn_complete=True, + ) + flow = _CfcTestFlow(live_responses=[live_response]) + + invocation_context = await testing_utils.create_invocation_context( + agent=agent, + user_content='test', + run_config=RunConfig( + support_cfc=True, + streaming_mode=StreamingMode.SSE, + ), + plugins=[plugin], + ) + model_response_event = Event( + id=Event.new_id(), + invocation_id=invocation_context.invocation_id, + author='root_agent', + ) + + responses = [] + async with Aclosing( + flow._call_llm_async( + invocation_context, + LlmRequest(model='mock'), + model_response_event, + ) + ) as agen: + async for resp in agen: + responses.append(resp) + + assert len(responses) >= 1 + assert ( + plugin.before_capture.span_id != _SPAN_ID_INVALID + ), 'CFC: before_model_callback did not observe a valid span' + assert ( + plugin.after_capture.span_id != _SPAN_ID_INVALID + ), 'CFC: after_model_callback did not observe a valid span' + assert plugin.before_capture.span_id == plugin.after_capture.span_id, ( + 'CFC: before_model_callback and after_model_callback saw different' + f' spans: before={plugin.before_capture.span_id:#x},' + f' after={plugin.after_capture.span_id:#x}' + ) + + +@pytest.mark.asyncio +async def test_cfc_error_callback_shares_span(): + """CFC path: on_model_error_callback shares span with before callback.""" + plugin = SpanCapturingPlugin() + mock_model = testing_utils.MockModel.create(responses=['unused']) + agent = Agent(name='root_agent', model=mock_model) + + # Flow whose run_live raises an error. + class _ErrorCfcFlow(BaseLlmFlow): + + async def run_live(self, invocation_context): + # Make this a proper async generator that raises. + if False: + yield # pragma: no cover — makes this an async generator + raise _MOCK_ERROR + + flow = _ErrorCfcFlow() + + invocation_context = await testing_utils.create_invocation_context( + agent=agent, + user_content='test', + run_config=RunConfig( + support_cfc=True, + streaming_mode=StreamingMode.SSE, + ), + plugins=[plugin], + ) + model_response_event = Event( + id=Event.new_id(), + invocation_id=invocation_context.invocation_id, + author='root_agent', + ) + + responses = [] + async with Aclosing( + flow._call_llm_async( + invocation_context, + LlmRequest(model='mock'), + model_response_event, + ) + ) as agen: + async for resp in agen: + responses.append(resp) + + assert ( + plugin.before_capture.span_id != _SPAN_ID_INVALID + ), 'CFC error: before_model_callback did not observe a valid span' + assert ( + plugin.error_capture.span_id != _SPAN_ID_INVALID + ), 'CFC error: on_model_error_callback did not observe a valid span' + assert ( + plugin.before_capture.span_id == plugin.error_capture.span_id + ), 'CFC error: before and error callbacks saw different spans' + + +if __name__ == '__main__': + pytest.main([__file__]) From add8e8664bd2ae9257c8b37a5e602d0c7aae7625 Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Mon, 30 Mar 2026 16:05:13 -0700 Subject: [PATCH 108/192] fix(environment): fix package references Co-authored-by: Liang Wu PiperOrigin-RevId: 891960308 --- .../adk/environment/_local_environment.py | 4 ++-- .../tools/environment/_environment_toolset.py | 18 +++++++++--------- src/google/adk/tools/environment/_tools.py | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/google/adk/environment/_local_environment.py b/src/google/adk/environment/_local_environment.py index d385219800..1f213f4fb1 100644 --- a/src/google/adk/environment/_local_environment.py +++ b/src/google/adk/environment/_local_environment.py @@ -27,8 +27,8 @@ from typing_extensions import override from ..utils.feature_decorator import experimental -from .base_environment import BaseEnvironment -from .base_environment import ExecutionResult +from ._base_environment import BaseEnvironment +from ._base_environment import ExecutionResult logger = logging.getLogger('google_adk.' + __name__) diff --git a/src/google/adk/tools/environment/_environment_toolset.py b/src/google/adk/tools/environment/_environment_toolset.py index 3ecdf8d15d..42e5b02fb0 100644 --- a/src/google/adk/tools/environment/_environment_toolset.py +++ b/src/google/adk/tools/environment/_environment_toolset.py @@ -26,14 +26,14 @@ from ...utils.feature_decorator import experimental from ..base_toolset import BaseToolset from ._constants import ENVIRONMENT_INSTRUCTION -from ._tools import _EditFileTool -from ._tools import _ExecuteTool -from ._tools import _ReadFileTool -from ._tools import _WriteFileTool +from ._tools import EditFileTool +from ._tools import ExecuteTool +from ._tools import ReadFileTool +from ._tools import WriteFileTool if TYPE_CHECKING: from ...agents.readonly_context import ReadonlyContext - from ...environments._base_environment import BaseEnvironment + from ...environment._base_environment import BaseEnvironment from ...models.llm_request import LlmRequest from ..base_tool import BaseTool from ..tool_context import ToolContext @@ -82,10 +82,10 @@ async def get_tools( await self._environment.initialize() self._environment_initialized = True return [ - _ExecuteTool(self._environment), - _ReadFileTool(self._environment), - _EditFileTool(self._environment), - _WriteFileTool(self._environment), + ExecuteTool(self._environment), + ReadFileTool(self._environment), + EditFileTool(self._environment), + WriteFileTool(self._environment), ] @override diff --git a/src/google/adk/tools/environment/_tools.py b/src/google/adk/tools/environment/_tools.py index 04d59d1b4c..662947de58 100644 --- a/src/google/adk/tools/environment/_tools.py +++ b/src/google/adk/tools/environment/_tools.py @@ -24,8 +24,8 @@ from google.genai import types from typing_extensions import override -from ...environments._base_environment import BaseEnvironment -from ...environments._base_environment import ExecutionResult +from ...environment._base_environment import BaseEnvironment +from ...environment._base_environment import ExecutionResult from ...utils.feature_decorator import experimental from ..base_tool import BaseTool from ._constants import DEFAULT_TIMEOUT From a27ce4771ff271947a0d94762231da842095836e Mon Sep 17 00:00:00 2001 From: Haiyuan Cao Date: Mon, 30 Mar 2026 16:11:36 -0700 Subject: [PATCH 109/192] fix(adk): redact credentials in BigQuery analytics plugin Fixes an issue where the Agent Analytics plugin could log plain-text OAuth credentials and access tokens to BigQuery. Sensitive keys are now redacted. Co-authored-by: Haiyuan Cao PiperOrigin-RevId: 891963630 --- .../bigquery_agent_analytics_plugin.py | 19 +++++++++++ .../test_bigquery_agent_analytics_plugin.py | 33 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/google/adk/plugins/bigquery_agent_analytics_plugin.py b/src/google/adk/plugins/bigquery_agent_analytics_plugin.py index bdca04820d..fddae0ad33 100644 --- a/src/google/adk/plugins/bigquery_agent_analytics_plugin.py +++ b/src/google/adk/plugins/bigquery_agent_analytics_plugin.py @@ -208,11 +208,24 @@ def _get_tool_origin(tool: "BaseTool") -> str: return "UNKNOWN" +_SENSITIVE_KEYS = frozenset({ + "client_secret", + "access_token", + "refresh_token", + "id_token", + "api_key", + "password", +}) + + def _recursive_smart_truncate( obj: Any, max_len: int, seen: Optional[set[int]] = None ) -> tuple[Any, bool]: """Recursively truncates string values within a dict or list. + Redacts sensitive keys corresponding to OAuth tokens and secrets + prior to serialization into BigQuery JSON strings. + Args: obj: The object to truncate. max_len: Maximum length for string values. @@ -251,6 +264,12 @@ def _recursive_smart_truncate( # but explicit loop is fine for clarity given recursive nature. new_dict = {} for k, v in obj.items(): + if isinstance(k, str): + k_lower = k.lower() + if k_lower in _SENSITIVE_KEYS or k_lower.startswith("temp:"): + new_dict[k] = "[REDACTED]" + continue + val, trunc = _recursive_smart_truncate(v, max_len, seen) if trunc: truncated_any = True diff --git a/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py b/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py index a39eb932cd..a8f79b4091 100644 --- a/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py +++ b/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py @@ -384,6 +384,39 @@ class LocalIncident: assert truncated["result"]["kpi_missed"][0]["kpi"] == "latency" +def test_recursive_smart_truncate_redaction(): + """Test that sensitive keys and temp: state keys are redacted.""" + obj = { + "client_secret": "super-secret-123", + "access_token": "ya29.blah", + "refresh_token": "1//0g", + "id_token": "eyJhb", + "api_key": "AIza", + "password": "my-password", + "safe_key": "safe-value", + "temp:auth_state": "some-auth-state", + "nested": { + "CLIENT_SECRET": "nested-secret", + "normal": "value", + }, + } + max_len = 1000 + truncated, is_truncated = ( + bigquery_agent_analytics_plugin._recursive_smart_truncate(obj, max_len) + ) + assert not is_truncated + assert truncated["client_secret"] == "[REDACTED]" + assert truncated["access_token"] == "[REDACTED]" + assert truncated["refresh_token"] == "[REDACTED]" + assert truncated["id_token"] == "[REDACTED]" + assert truncated["api_key"] == "[REDACTED]" + assert truncated["password"] == "[REDACTED]" + assert truncated["safe_key"] == "safe-value" + assert truncated["temp:auth_state"] == "[REDACTED]" + assert truncated["nested"]["CLIENT_SECRET"] == "[REDACTED]" + assert truncated["nested"]["normal"] == "value" + + class TestBigQueryAgentAnalyticsPlugin: """Tests for the BigQueryAgentAnalyticsPlugin.""" From f75de59362e07c0cce0ead723ceea3102081af4d Mon Sep 17 00:00:00 2001 From: Ankur Sharma Date: Tue, 31 Mar 2026 11:34:18 -0700 Subject: [PATCH 110/192] fix: In memory session service to evaluate dictionary keys and value into an isolated snapshot sequence before starting loop _list_sessions_impl intermittently would throw `RuntimeError: dictionary changed size during iteration` Co-authored-by: Ankur Sharma PiperOrigin-RevId: 892454902 --- src/google/adk/sessions/in_memory_session_service.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/google/adk/sessions/in_memory_session_service.py b/src/google/adk/sessions/in_memory_session_service.py index e0f9b49ff3..ec74985146 100644 --- a/src/google/adk/sessions/in_memory_session_service.py +++ b/src/google/adk/sessions/in_memory_session_service.py @@ -242,15 +242,14 @@ def _list_sessions_impl( sessions_without_events = [] if user_id is None: - for user_id in self.sessions[app_name]: - for session_id in self.sessions[app_name][user_id]: - session = self.sessions[app_name][user_id][session_id] + for uid in list(self.sessions[app_name].keys()): + for session in list(self.sessions[app_name][uid].values()): copied_session = copy.deepcopy(session) copied_session.events = [] - copied_session = self._merge_state(app_name, user_id, copied_session) + copied_session = self._merge_state(app_name, uid, copied_session) sessions_without_events.append(copied_session) else: - for session in self.sessions[app_name][user_id].values(): + for session in list(self.sessions[app_name][user_id].values()): copied_session = copy.deepcopy(session) copied_session.events = [] copied_session = self._merge_state(app_name, user_id, copied_session) From 8929907bf56ff82a7c2dcff3cda5ff86d17ddf3c Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 31 Mar 2026 11:54:52 -0700 Subject: [PATCH 111/192] ADK changes PiperOrigin-RevId: 892466615 --- src/google/adk/environment/_local_environment.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/google/adk/environment/_local_environment.py b/src/google/adk/environment/_local_environment.py index 1f213f4fb1..0283b17965 100644 --- a/src/google/adk/environment/_local_environment.py +++ b/src/google/adk/environment/_local_environment.py @@ -83,7 +83,6 @@ async def close(self) -> None: logger.debug('Removed temporary workspace: %s', self._working_dir) self._working_dir = None - @override async def execute( self, @@ -139,7 +138,6 @@ async def write_file(self, path: str, content: str | bytes) -> None: path = self._resolve_path(path) return await asyncio.to_thread(self._sync_write, path, content) - def _resolve_path(self, path: str) -> str: """Resolve a relative path against the working directory.""" if os.path.isabs(path): From 6ee036292e9eefabb032e8ebec3580a2243f3a96 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 31 Mar 2026 13:12:42 -0700 Subject: [PATCH 112/192] feat: Use raw_event field in vertex ai session service for append and list events PiperOrigin-RevId: 892504394 --- .../adk/sessions/vertex_ai_session_service.py | 90 +++------- .../test_vertex_ai_session_service.py | 155 ++++++++++++++++++ 2 files changed, 178 insertions(+), 67 deletions(-) diff --git a/src/google/adk/sessions/vertex_ai_session_service.py b/src/google/adk/sessions/vertex_ai_session_service.py index 7c2d6d68d5..9c9420f791 100644 --- a/src/google/adk/sessions/vertex_ai_session_service.py +++ b/src/google/adk/sessions/vertex_ai_session_service.py @@ -14,6 +14,7 @@ from __future__ import annotations import asyncio +import copy import datetime import json import logging @@ -266,72 +267,11 @@ async def append_event(self, session: Session, event: Event) -> Event: reasoning_engine_id = self._get_reasoning_engine_id(session.app_name) - config = {} - if event.content: - config['content'] = event.content.model_dump( - exclude_none=True, mode='json' - ) - if event.actions: - config['actions'] = { - 'skip_summarization': event.actions.skip_summarization, - 'state_delta': event.actions.state_delta, - 'artifact_delta': event.actions.artifact_delta, - 'transfer_agent': event.actions.transfer_to_agent, - 'escalate': event.actions.escalate, - 'requested_auth_configs': { - k: json.loads(v.model_dump_json(exclude_none=True, by_alias=True)) - for k, v in event.actions.requested_auth_configs.items() - }, - # TODO: add requested_tool_confirmations, agent_state once - # they are available in the API. - # Note: compaction is stored via event_metadata.custom_metadata. - } - if event.error_code: - config['error_code'] = event.error_code - if event.error_message: - config['error_message'] = event.error_message - - metadata_dict = { - 'partial': event.partial, - 'turn_complete': event.turn_complete, - 'interrupted': event.interrupted, - 'branch': event.branch, - 'custom_metadata': event.custom_metadata, - 'long_running_tool_ids': ( - list(event.long_running_tool_ids) - if event.long_running_tool_ids - else None - ), - } - if event.grounding_metadata: - metadata_dict['grounding_metadata'] = event.grounding_metadata.model_dump( - exclude_none=True, mode='json' - ) - # Store compaction data in custom_metadata since the Vertex AI service - # does not yet support the compaction field. - # TODO: Stop writing to custom_metadata once the Vertex AI service - # supports the compaction field natively in EventActions. - if event.actions and event.actions.compaction: - compaction_dict = event.actions.compaction.model_dump( - exclude_none=True, mode='json' - ) - _set_internal_custom_metadata( - metadata_dict, - key=_COMPACTION_CUSTOM_METADATA_KEY, - value=compaction_dict, - ) - # Store usage_metadata in custom_metadata since the Vertex AI service - # does not persist it in EventMetadata. - if event.usage_metadata: - usage_dict = event.usage_metadata.model_dump( - exclude_none=True, mode='json' - ) - _set_internal_custom_metadata( - metadata_dict, - key=_USAGE_METADATA_CUSTOM_METADATA_KEY, - value=usage_dict, - ) - config['event_metadata'] = metadata_dict + raw_event_dict = event.model_dump( + exclude_none=True, + mode='json', + by_alias=True, + ) async with self._get_api_client() as api_client: await api_client.agent_engines.sessions.events.append( @@ -341,7 +281,7 @@ async def append_event(self, session: Session, event: Event) -> Event: timestamp=datetime.datetime.fromtimestamp( event.timestamp, tz=datetime.timezone.utc ), - config=config, + config={'raw_event': raw_event_dict}, ) return event @@ -390,6 +330,22 @@ def _get_api_client(self) -> vertexai.AsyncClient: def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: """Converts an API event object to an Event object.""" + # Read event data from raw_event first before falling back to top level + # fields. + raw_event_dict = getattr( + api_event_obj, 'raw_event', getattr(api_event_obj, 'rawEvent', None) + ) + if raw_event_dict: + event_dict = copy.deepcopy(raw_event_dict) + timestamp_obj = getattr(api_event_obj, 'timestamp', None) + event_dict.update({ + 'id': api_event_obj.name.split('/')[-1], + 'invocation_id': getattr(api_event_obj, 'invocation_id', None), + 'author': getattr(api_event_obj, 'author', None), + 'timestamp': timestamp_obj.timestamp() if timestamp_obj else None, + }) + return Event.model_validate(event_dict) + actions = getattr(api_event_obj, 'actions', None) event_metadata = getattr(api_event_obj, 'event_metadata', None) if event_metadata: diff --git a/tests/unittests/sessions/test_vertex_ai_session_service.py b/tests/unittests/sessions/test_vertex_ai_session_service.py index 20fdbe3c6d..661d6292ac 100644 --- a/tests/unittests/sessions/test_vertex_ai_session_service.py +++ b/tests/unittests/sessions/test_vertex_ai_session_service.py @@ -28,6 +28,7 @@ from google.adk.events.event import Event from google.adk.events.event_actions import EventActions from google.adk.events.event_actions import EventCompaction +from google.adk.models.cache_metadata import CacheMetadata from google.adk.sessions.base_session_service import GetSessionConfig from google.adk.sessions.session import Session from google.adk.sessions.vertex_ai_session_service import VertexAiSessionService @@ -162,6 +163,96 @@ def _generate_mock_events_for_session_5(num_events): MANY_EVENTS_COUNT = 200 MOCK_EVENTS_JSON_5 = _generate_mock_events_for_session_5(MANY_EVENTS_COUNT) +MOCK_EVENT_WITH_OVERRIDE_JSON = [{ + 'name': ( + 'projects/test-project/locations/test-location/' + 'reasoningEngines/123/sessions/override/events/1' + ), + 'invocationId': 'override_invoke', + 'author': 'user_with_override', + 'timestamp': '2024-12-12T12:12:12.123456Z', + 'content': { + 'parts': [ + {'text': 'top_level_content'}, + ], + }, + 'actions': { + 'transferToAgent': 'top_level_agent', + }, + 'eventMetadata': { + 'partial': True, + 'turnComplete': False, + 'interrupted': False, + 'branch': 'top_level_branch', + }, + 'errorCode': '111', + 'errorMessage': 'top_level_error', + 'rawEvent': { + 'invocationId': 'wrong_invocation_id', + 'author': 'wrong_author', + 'content': { + 'parts': [ + {'text': 'raw_event_content'}, + ], + }, + 'actions': { + 'transferToAgent': 'raw_event_agent', + }, + 'partial': False, + 'turnComplete': True, + 'interrupted': True, + 'branch': 'raw_event_branch', + 'errorCode': '222', + 'errorMessage': 'raw_event_error', + }, +}] + +MOCK_EVENT_WITH_OVERRIDE_JSON_2 = [{ + 'name': ( + 'projects/test-project/locations/test-location/' + 'reasoningEngines/123/sessions/override/events/1' + ), + 'invocationId': 'override_invoke', + 'author': 'user_with_override', + 'content': {}, + 'actions': {}, + 'timestamp': '2024-12-12T12:12:12.123456Z', + 'rawEvent': { + 'invocationId': 'wrong_invocation_id', + 'author': 'wrong_author', + 'content': { + 'parts': [ + {'text': 'raw_event_content'}, + ], + }, + 'actions': { + 'skipSummarization': None, + 'stateDelta': {}, + 'artifactDelta': {}, + 'transferToAgent': 'raw_event_agent', + 'escalate': None, + 'requestedAuthConfigs': {}, + }, + 'errorCode': '222', + 'errorMessage': 'raw_event_error', + 'partial': False, + 'turnComplete': True, + 'interrupted': True, + 'branch': 'raw_event_branch', + 'customMetadata': None, + 'longRunningToolIds': None, + }, +}] + +MOCK_SESSION_WITH_OVERRIDE_JSON = { + 'name': ( + 'projects/test-project/locations/test-location/' + 'reasoningEngines/123/sessions/override' + ), + 'update_time': '2024-12-12T12:12:12.123456Z', + 'user_id': 'user_with_override', +} + MOCK_SESSION = Session( app_name='123', user_id='user', @@ -249,6 +340,8 @@ def _convert_to_object(data): 'artifact_delta', 'custom_metadata', 'requested_auth_configs', + 'rawEvent', + 'raw_event', ]: kwargs[key] = value else: @@ -680,6 +773,38 @@ async def test_get_session_keeps_events_newer_than_update_time( ) +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +@pytest.mark.parametrize( + 'mock_event_json', + [MOCK_EVENT_WITH_OVERRIDE_JSON, MOCK_EVENT_WITH_OVERRIDE_JSON_2], +) +async def test_get_session_from_raw_event( + mock_api_client_instance: MockAsyncClient, + mock_event_json, +) -> None: + mock_api_client_instance.session_dict['6'] = MOCK_SESSION_WITH_OVERRIDE_JSON + mock_api_client_instance.event_dict['6'] = ( + copy.deepcopy(mock_event_json), + None, + ) + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', user_id='user_with_override', session_id='6' + ) + assert session is not None + assert len(session.events) == 1 + event = session.events[0] + assert event.content.parts[0].text == 'raw_event_content' + assert event.actions.transfer_to_agent == 'raw_event_agent' + assert not event.partial + assert event.turn_complete + assert event.interrupted + assert event.branch == 'raw_event_branch' + assert event.error_code == '222' + assert event.error_message == 'raw_event_error' + + @pytest.mark.asyncio @pytest.mark.usefixtures('mock_get_api_client') async def test_get_session_with_many_events(mock_api_client_instance): @@ -816,6 +941,36 @@ async def test_append_event(): branch='test_branch', custom_metadata={'custom': 'data'}, long_running_tool_ids={'tool2'}, + input_transcription=genai_types.Transcription( + text='test_input_transcription' + ), + output_transcription=genai_types.Transcription( + text='test_output_transcription' + ), + model_version='test_model_version', + avg_logprobs=0.5, + logprobs_result=genai_types.LogprobsResult( + chosen_candidates=[ + genai_types.LogprobsResultCandidate( + log_probability=0.5, + token='test_token', + token_id=0, + ) + ] + ), + cache_metadata=CacheMetadata( + cache_name='test_cache_name', + fingerprint='test_fingerprint', + contents_count=1, + ), + citation_metadata=genai_types.CitationMetadata( + citations=[ + genai_types.Citation( + uri='http://test.com', + title='test_title', + ) + ] + ), ) await session_service.append_event(session_before_append, event_to_append) From 8082893619bb85d4ee0dc53fd2133d12b9434d07 Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Wed, 1 Apr 2026 16:39:25 -0700 Subject: [PATCH 113/192] feat(live): support live for `gemini-3.1-flash-live-preview` model This change updates the method used for sending text, audio and video data to the model. Closes issue #5018 Co-authored-by: Liang Wu PiperOrigin-RevId: 893174037 --- .../adk/models/gemini_llm_connection.py | 51 ++++++++++++++++--- src/google/adk/utils/model_name_utils.py | 18 +++++++ 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/src/google/adk/models/gemini_llm_connection.py b/src/google/adk/models/gemini_llm_connection.py index da508891d4..4cf28acdfc 100644 --- a/src/google/adk/models/gemini_llm_connection.py +++ b/src/google/adk/models/gemini_llm_connection.py @@ -20,6 +20,7 @@ from google.genai import types +from ..utils import model_name_utils from ..utils.content_utils import filter_audio_parts from ..utils.context_utils import Aclosing from ..utils.variant_utils import GoogleLLMVariant @@ -99,7 +100,6 @@ async def send_content(self, content: types.Content): Args: content: The content to send to the model. """ - assert content.parts if content.parts[0].function_response: # All parts have to be function responses. @@ -112,12 +112,30 @@ async def send_content(self, content: types.Content): ) else: logger.debug('Sending LLM new content %s', content) - await self._gemini_session.send( - input=types.LiveClientContent( - turns=[content], - turn_complete=True, - ) + is_gemini_31 = model_name_utils.is_gemini_3_1_flash_live( + self._model_version ) + is_gemini_api = self._api_backend == GoogleLLMVariant.GEMINI_API + + # As of now, Gemini 3.1 Flash Live is only available in Gemini API, not + # Vertex AI. + if ( + is_gemini_31 + and is_gemini_api + and len(content.parts) == 1 + and content.parts[0].text + ): + logger.debug('Using send_realtime_input for Gemini 3.1 text input') + await self._gemini_session.send_realtime_input( + text=content.parts[0].text + ) + else: + await self._gemini_session.send( + input=types.LiveClientContent( + turns=[content], + turn_complete=True, + ) + ) async def send_realtime(self, input: RealtimeInput): """Sends a chunk of audio or a frame of video to the model in realtime. @@ -128,7 +146,26 @@ async def send_realtime(self, input: RealtimeInput): if isinstance(input, types.Blob): # The blob is binary and is very large. So let's not log it. logger.debug('Sending LLM Blob.') - await self._gemini_session.send_realtime_input(media=input) + is_gemini_31 = model_name_utils.is_gemini_3_1_flash_live( + self._model_version + ) + is_gemini_api = self._api_backend == GoogleLLMVariant.GEMINI_API + + # As of now, Gemini 3.1 Flash Live is only available in Gemini API, not + # Vertex AI. + if is_gemini_31 and is_gemini_api: + if input.mime_type and input.mime_type.startswith('audio/'): + await self._gemini_session.send_realtime_input(audio=input) + elif input.mime_type and input.mime_type.startswith('image/'): + await self._gemini_session.send_realtime_input(video=input) + else: + logger.warning( + 'Blob not sent. Unknown or empty mime type for' + ' send_realtime_input: %s', + input.mime_type, + ) + else: + await self._gemini_session.send_realtime_input(media=input) elif isinstance(input, types.ActivityStart): logger.debug('Sending LLM activity start signal.') diff --git a/src/google/adk/utils/model_name_utils.py b/src/google/adk/utils/model_name_utils.py index 57103fb2c7..86fd79ab64 100644 --- a/src/google/adk/utils/model_name_utils.py +++ b/src/google/adk/utils/model_name_utils.py @@ -125,3 +125,21 @@ def is_gemini_2_or_above(model_string: Optional[str]) -> bool: return False return parsed_version.major >= 2 + + +def is_gemini_3_1_flash_live(model_string: Optional[str]) -> bool: + """Check if the model is a Gemini 3.1 Flash Live model. + + Note: This is a very specific model name for live bidi streaming, so we check + for exact match. + + Args: + model_string: The model name + + Returns: + True if it's a Gemini 3.1 Flash Live model, False otherwise + """ + if not model_string: + return False + + return model_string == 'gemini-3.1-flash-live-preview' From 642d337a9069fae334192d045c9f85922cbcef53 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Wed, 1 Apr 2026 16:42:35 -0700 Subject: [PATCH 114/192] feat: Remove use of raw_event field in vertex ai session service PiperOrigin-RevId: 893175221 --- .../adk/sessions/vertex_ai_session_service.py | 90 +++++++--- .../test_vertex_ai_session_service.py | 155 ------------------ 2 files changed, 67 insertions(+), 178 deletions(-) diff --git a/src/google/adk/sessions/vertex_ai_session_service.py b/src/google/adk/sessions/vertex_ai_session_service.py index 9c9420f791..7c2d6d68d5 100644 --- a/src/google/adk/sessions/vertex_ai_session_service.py +++ b/src/google/adk/sessions/vertex_ai_session_service.py @@ -14,7 +14,6 @@ from __future__ import annotations import asyncio -import copy import datetime import json import logging @@ -267,11 +266,72 @@ async def append_event(self, session: Session, event: Event) -> Event: reasoning_engine_id = self._get_reasoning_engine_id(session.app_name) - raw_event_dict = event.model_dump( - exclude_none=True, - mode='json', - by_alias=True, - ) + config = {} + if event.content: + config['content'] = event.content.model_dump( + exclude_none=True, mode='json' + ) + if event.actions: + config['actions'] = { + 'skip_summarization': event.actions.skip_summarization, + 'state_delta': event.actions.state_delta, + 'artifact_delta': event.actions.artifact_delta, + 'transfer_agent': event.actions.transfer_to_agent, + 'escalate': event.actions.escalate, + 'requested_auth_configs': { + k: json.loads(v.model_dump_json(exclude_none=True, by_alias=True)) + for k, v in event.actions.requested_auth_configs.items() + }, + # TODO: add requested_tool_confirmations, agent_state once + # they are available in the API. + # Note: compaction is stored via event_metadata.custom_metadata. + } + if event.error_code: + config['error_code'] = event.error_code + if event.error_message: + config['error_message'] = event.error_message + + metadata_dict = { + 'partial': event.partial, + 'turn_complete': event.turn_complete, + 'interrupted': event.interrupted, + 'branch': event.branch, + 'custom_metadata': event.custom_metadata, + 'long_running_tool_ids': ( + list(event.long_running_tool_ids) + if event.long_running_tool_ids + else None + ), + } + if event.grounding_metadata: + metadata_dict['grounding_metadata'] = event.grounding_metadata.model_dump( + exclude_none=True, mode='json' + ) + # Store compaction data in custom_metadata since the Vertex AI service + # does not yet support the compaction field. + # TODO: Stop writing to custom_metadata once the Vertex AI service + # supports the compaction field natively in EventActions. + if event.actions and event.actions.compaction: + compaction_dict = event.actions.compaction.model_dump( + exclude_none=True, mode='json' + ) + _set_internal_custom_metadata( + metadata_dict, + key=_COMPACTION_CUSTOM_METADATA_KEY, + value=compaction_dict, + ) + # Store usage_metadata in custom_metadata since the Vertex AI service + # does not persist it in EventMetadata. + if event.usage_metadata: + usage_dict = event.usage_metadata.model_dump( + exclude_none=True, mode='json' + ) + _set_internal_custom_metadata( + metadata_dict, + key=_USAGE_METADATA_CUSTOM_METADATA_KEY, + value=usage_dict, + ) + config['event_metadata'] = metadata_dict async with self._get_api_client() as api_client: await api_client.agent_engines.sessions.events.append( @@ -281,7 +341,7 @@ async def append_event(self, session: Session, event: Event) -> Event: timestamp=datetime.datetime.fromtimestamp( event.timestamp, tz=datetime.timezone.utc ), - config={'raw_event': raw_event_dict}, + config=config, ) return event @@ -330,22 +390,6 @@ def _get_api_client(self) -> vertexai.AsyncClient: def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: """Converts an API event object to an Event object.""" - # Read event data from raw_event first before falling back to top level - # fields. - raw_event_dict = getattr( - api_event_obj, 'raw_event', getattr(api_event_obj, 'rawEvent', None) - ) - if raw_event_dict: - event_dict = copy.deepcopy(raw_event_dict) - timestamp_obj = getattr(api_event_obj, 'timestamp', None) - event_dict.update({ - 'id': api_event_obj.name.split('/')[-1], - 'invocation_id': getattr(api_event_obj, 'invocation_id', None), - 'author': getattr(api_event_obj, 'author', None), - 'timestamp': timestamp_obj.timestamp() if timestamp_obj else None, - }) - return Event.model_validate(event_dict) - actions = getattr(api_event_obj, 'actions', None) event_metadata = getattr(api_event_obj, 'event_metadata', None) if event_metadata: diff --git a/tests/unittests/sessions/test_vertex_ai_session_service.py b/tests/unittests/sessions/test_vertex_ai_session_service.py index 661d6292ac..20fdbe3c6d 100644 --- a/tests/unittests/sessions/test_vertex_ai_session_service.py +++ b/tests/unittests/sessions/test_vertex_ai_session_service.py @@ -28,7 +28,6 @@ from google.adk.events.event import Event from google.adk.events.event_actions import EventActions from google.adk.events.event_actions import EventCompaction -from google.adk.models.cache_metadata import CacheMetadata from google.adk.sessions.base_session_service import GetSessionConfig from google.adk.sessions.session import Session from google.adk.sessions.vertex_ai_session_service import VertexAiSessionService @@ -163,96 +162,6 @@ def _generate_mock_events_for_session_5(num_events): MANY_EVENTS_COUNT = 200 MOCK_EVENTS_JSON_5 = _generate_mock_events_for_session_5(MANY_EVENTS_COUNT) -MOCK_EVENT_WITH_OVERRIDE_JSON = [{ - 'name': ( - 'projects/test-project/locations/test-location/' - 'reasoningEngines/123/sessions/override/events/1' - ), - 'invocationId': 'override_invoke', - 'author': 'user_with_override', - 'timestamp': '2024-12-12T12:12:12.123456Z', - 'content': { - 'parts': [ - {'text': 'top_level_content'}, - ], - }, - 'actions': { - 'transferToAgent': 'top_level_agent', - }, - 'eventMetadata': { - 'partial': True, - 'turnComplete': False, - 'interrupted': False, - 'branch': 'top_level_branch', - }, - 'errorCode': '111', - 'errorMessage': 'top_level_error', - 'rawEvent': { - 'invocationId': 'wrong_invocation_id', - 'author': 'wrong_author', - 'content': { - 'parts': [ - {'text': 'raw_event_content'}, - ], - }, - 'actions': { - 'transferToAgent': 'raw_event_agent', - }, - 'partial': False, - 'turnComplete': True, - 'interrupted': True, - 'branch': 'raw_event_branch', - 'errorCode': '222', - 'errorMessage': 'raw_event_error', - }, -}] - -MOCK_EVENT_WITH_OVERRIDE_JSON_2 = [{ - 'name': ( - 'projects/test-project/locations/test-location/' - 'reasoningEngines/123/sessions/override/events/1' - ), - 'invocationId': 'override_invoke', - 'author': 'user_with_override', - 'content': {}, - 'actions': {}, - 'timestamp': '2024-12-12T12:12:12.123456Z', - 'rawEvent': { - 'invocationId': 'wrong_invocation_id', - 'author': 'wrong_author', - 'content': { - 'parts': [ - {'text': 'raw_event_content'}, - ], - }, - 'actions': { - 'skipSummarization': None, - 'stateDelta': {}, - 'artifactDelta': {}, - 'transferToAgent': 'raw_event_agent', - 'escalate': None, - 'requestedAuthConfigs': {}, - }, - 'errorCode': '222', - 'errorMessage': 'raw_event_error', - 'partial': False, - 'turnComplete': True, - 'interrupted': True, - 'branch': 'raw_event_branch', - 'customMetadata': None, - 'longRunningToolIds': None, - }, -}] - -MOCK_SESSION_WITH_OVERRIDE_JSON = { - 'name': ( - 'projects/test-project/locations/test-location/' - 'reasoningEngines/123/sessions/override' - ), - 'update_time': '2024-12-12T12:12:12.123456Z', - 'user_id': 'user_with_override', -} - MOCK_SESSION = Session( app_name='123', user_id='user', @@ -340,8 +249,6 @@ def _convert_to_object(data): 'artifact_delta', 'custom_metadata', 'requested_auth_configs', - 'rawEvent', - 'raw_event', ]: kwargs[key] = value else: @@ -773,38 +680,6 @@ async def test_get_session_keeps_events_newer_than_update_time( ) -@pytest.mark.asyncio -@pytest.mark.usefixtures('mock_get_api_client') -@pytest.mark.parametrize( - 'mock_event_json', - [MOCK_EVENT_WITH_OVERRIDE_JSON, MOCK_EVENT_WITH_OVERRIDE_JSON_2], -) -async def test_get_session_from_raw_event( - mock_api_client_instance: MockAsyncClient, - mock_event_json, -) -> None: - mock_api_client_instance.session_dict['6'] = MOCK_SESSION_WITH_OVERRIDE_JSON - mock_api_client_instance.event_dict['6'] = ( - copy.deepcopy(mock_event_json), - None, - ) - session_service = mock_vertex_ai_session_service() - session = await session_service.get_session( - app_name='123', user_id='user_with_override', session_id='6' - ) - assert session is not None - assert len(session.events) == 1 - event = session.events[0] - assert event.content.parts[0].text == 'raw_event_content' - assert event.actions.transfer_to_agent == 'raw_event_agent' - assert not event.partial - assert event.turn_complete - assert event.interrupted - assert event.branch == 'raw_event_branch' - assert event.error_code == '222' - assert event.error_message == 'raw_event_error' - - @pytest.mark.asyncio @pytest.mark.usefixtures('mock_get_api_client') async def test_get_session_with_many_events(mock_api_client_instance): @@ -941,36 +816,6 @@ async def test_append_event(): branch='test_branch', custom_metadata={'custom': 'data'}, long_running_tool_ids={'tool2'}, - input_transcription=genai_types.Transcription( - text='test_input_transcription' - ), - output_transcription=genai_types.Transcription( - text='test_output_transcription' - ), - model_version='test_model_version', - avg_logprobs=0.5, - logprobs_result=genai_types.LogprobsResult( - chosen_candidates=[ - genai_types.LogprobsResultCandidate( - log_probability=0.5, - token='test_token', - token_id=0, - ) - ] - ), - cache_metadata=CacheMetadata( - cache_name='test_cache_name', - fingerprint='test_fingerprint', - contents_count=1, - ), - citation_metadata=genai_types.CitationMetadata( - citations=[ - genai_types.Citation( - uri='http://test.com', - title='test_title', - ) - ] - ), ) await session_service.append_event(session_before_append, event_to_append) From 7fa13edacda3dee1b56edb5bdc634712b3c5218b Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Wed, 1 Apr 2026 17:45:19 -0700 Subject: [PATCH 115/192] fix(live): Buffer tool calls and emit them together upon turn completion The `receive` method now accumulates function calls from multiple `LiveServerMessage` instances. These accumulated tool calls are yielded as a single `LlmResponse` containing all function call parts only when a turn_complete message is received. Without the change, the tool_1's response is sent to the model as soon as it's generated, triggering a second call for tool_2. Upon receiving two consecutive tool_2's responses, the model utters the same message twice. Fixes issue #4902 Co-authored-by: Liang Wu PiperOrigin-RevId: 893197482 --- .../README.md | 38 +++++ .../__init__.py | 15 ++ .../agent.py | 36 +++++ .../adk/models/gemini_llm_connection.py | 23 ++- .../models/test_gemini_llm_connection.py | 133 ++++++++++++++++-- 5 files changed, 227 insertions(+), 18 deletions(-) create mode 100644 contributing/samples/live_bidi_streaming_parallel_tools_agent/README.md create mode 100644 contributing/samples/live_bidi_streaming_parallel_tools_agent/__init__.py create mode 100644 contributing/samples/live_bidi_streaming_parallel_tools_agent/agent.py diff --git a/contributing/samples/live_bidi_streaming_parallel_tools_agent/README.md b/contributing/samples/live_bidi_streaming_parallel_tools_agent/README.md new file mode 100644 index 0000000000..cc96819c38 --- /dev/null +++ b/contributing/samples/live_bidi_streaming_parallel_tools_agent/README.md @@ -0,0 +1,38 @@ +# Simple Live (Bidi-Streaming) Agent with Parallel Tools +This project provides a basic example of a live, [bidirectional streaming](https://google.github.io/adk-docs/streaming/) agent that demonstrates parallel tool execution. + +## Getting Started + +Follow these steps to get the agent up and running: + +1. **Start the ADK Web Server** + Open your terminal, navigate to the root directory that contains the + `live_bidi_streaming_parallel_tools_agent` folder, and execute the following + command: + ```bash + adk web + ``` + +2. **Access the ADK Web UI** + Once the server is running, open your web browser and navigate to the URL + provided in the terminal (it will typically be `http://localhost:8000`). + +3. **Select the Agent** + In the top-left corner of the ADK Web UI, use the dropdown menu to select + this agent (`live_bidi_streaming_parallel_tools_agent`). + +4. **Start Streaming** + Click on the **Audio** icon located near the chat input + box to begin the streaming session. + +5. **Interact with the Agent** + You can now begin talking to the agent, and it will respond in real-time. + Try asking it to perform multiple actions at once, for example: "Turn on the + lights and the TV at the same time." The agent will be able to invoke both + `turn_on_lights` and `turn_on_tv` tools in parallel. + +## Usage Notes + +* You only need to click the **Audio** button once to initiate the + stream. The current version does not support stopping and restarting the stream + by clicking the button again during a session. diff --git a/contributing/samples/live_bidi_streaming_parallel_tools_agent/__init__.py b/contributing/samples/live_bidi_streaming_parallel_tools_agent/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/live_bidi_streaming_parallel_tools_agent/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/live_bidi_streaming_parallel_tools_agent/agent.py b/contributing/samples/live_bidi_streaming_parallel_tools_agent/agent.py new file mode 100644 index 0000000000..519c31a61b --- /dev/null +++ b/contributing/samples/live_bidi_streaming_parallel_tools_agent/agent.py @@ -0,0 +1,36 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from google.adk.agents.llm_agent import Agent + + +def turn_on_lights(): + """Turn on the lights.""" + print("turn_on_lights") + return {"status": "OK"} + + +def turn_on_tv(): + """Turn on the tv.""" + print("turn_on_tv") + return {"status": "OK"} + + +root_agent = Agent( + model="gemini-live-2.5-flash-native-audio", + name="Home_helper", + instruction="Be polite and answer all user's questions.", + tools=[turn_on_lights, turn_on_tv], +) diff --git a/src/google/adk/models/gemini_llm_connection.py b/src/google/adk/models/gemini_llm_connection.py index 4cf28acdfc..7fc39748ec 100644 --- a/src/google/adk/models/gemini_llm_connection.py +++ b/src/google/adk/models/gemini_llm_connection.py @@ -203,6 +203,7 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: """ text = '' + tool_call_parts = [] async with Aclosing(self._gemini_session.receive()) as agen: # TODO(b/440101573): Reuse StreamingResponseAggregator to accumulate # partial content and emit responses as needed. @@ -332,6 +333,13 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: if text: yield self.__build_full_text_response(text) text = '' + if tool_call_parts: + logger.debug('Returning aggregated tool_call_parts') + yield LlmResponse( + content=types.Content(role='model', parts=tool_call_parts), + model_version=self._model_version, + ) + tool_call_parts = [] yield LlmResponse( turn_complete=True, interrupted=message.server_content.interrupted, @@ -353,17 +361,14 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: model_version=self._model_version, ) if message.tool_call: + logger.debug('Received tool call: %s', message.tool_call) if text: yield self.__build_full_text_response(text) text = '' - parts = [ + tool_call_parts.extend([ types.Part(function_call=function_call) for function_call in message.tool_call.function_calls - ] - yield LlmResponse( - content=types.Content(role='model', parts=parts), - model_version=self._model_version, - ) + ]) if message.session_resumption_update: logger.debug('Received session resumption message: %s', message) yield ( @@ -372,6 +377,12 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: model_version=self._model_version, ) ) + if tool_call_parts: + logger.debug('Exited loop with pending tool_call_parts') + yield LlmResponse( + content=types.Content(role='model', parts=tool_call_parts), + model_version=self._model_version, + ) async def close(self): """Closes the llm server connection.""" diff --git a/tests/unittests/models/test_gemini_llm_connection.py b/tests/unittests/models/test_gemini_llm_connection.py index 7b580c6fc0..09bd537d8e 100644 --- a/tests/unittests/models/test_gemini_llm_connection.py +++ b/tests/unittests/models/test_gemini_llm_connection.py @@ -933,33 +933,142 @@ async def test_receive_tool_call_and_grounding_metadata_with_native_audio( mock_metadata_msg.tool_call = None mock_metadata_msg.session_resumption_update = None + # 3. Message with turn_complete + mock_turn_complete_content = mock.create_autospec( + types.LiveServerContent, instance=True + ) + mock_turn_complete_content.model_turn = None + mock_turn_complete_content.grounding_metadata = None + mock_turn_complete_content.turn_complete = True + mock_turn_complete_content.interrupted = False + mock_turn_complete_content.input_transcription = None + mock_turn_complete_content.output_transcription = None + + mock_turn_complete_msg = mock.create_autospec( + types.LiveServerMessage, instance=True + ) + mock_turn_complete_msg.usage_metadata = None + mock_turn_complete_msg.server_content = mock_turn_complete_content + mock_turn_complete_msg.tool_call = None + mock_turn_complete_msg.session_resumption_update = None + async def mock_receive_generator(): yield mock_tool_call_msg yield mock_metadata_msg + yield mock_turn_complete_msg receive_mock = mock.Mock(return_value=mock_receive_generator()) mock_gemini_session.receive = receive_mock responses = [resp async for resp in connection.receive()] - assert len(responses) == 2 + assert len(responses) == 3 - # First response: the tool call + # First response: the audio content and grounding metadata + assert responses[0].grounding_metadata == grounding_metadata + assert responses[0].content == mock_content assert responses[0].content is not None assert responses[0].content.parts is not None - assert responses[0].content.parts[0].function_call is not None + assert responses[0].content.parts[0].inline_data == audio_blob + + # Second response: the tool call, buffered until turn_complete + assert responses[1].content is not None + assert responses[1].content.parts is not None + assert responses[1].content.parts[0].function_call is not None assert ( - responses[0].content.parts[0].function_call.name + responses[1].content.parts[0].function_call.name == 'enterprise_web_search' ) - assert responses[0].content.parts[0].function_call.args == { + assert responses[1].content.parts[0].function_call.args == { 'query': 'Google stock price today' } - assert responses[0].grounding_metadata is None + assert responses[1].grounding_metadata is None - # Second response: the audio content and grounding metadata - assert responses[1].grounding_metadata == grounding_metadata - assert responses[1].content == mock_content - assert responses[1].content is not None - assert responses[1].content.parts is not None - assert responses[1].content.parts[0].inline_data == audio_blob + # Third response: the turn_complete + assert responses[2].turn_complete is True + + +@pytest.mark.asyncio +async def test_receive_multiple_tool_calls_buffered_until_turn_complete( + gemini_connection, mock_gemini_session +): + """Test receive buffers multiple tool call messages until turn complete.""" + # First tool call message + mock_tool_call_msg1 = mock.create_autospec( + types.LiveServerMessage, instance=True + ) + mock_tool_call_msg1.usage_metadata = None + mock_tool_call_msg1.server_content = None + mock_tool_call_msg1.session_resumption_update = None + + function_call1 = types.FunctionCall( + name='tool_1', + args={'arg': 'value1'}, + ) + mock_tool_call1 = mock.create_autospec( + types.LiveServerToolCall, instance=True + ) + mock_tool_call1.function_calls = [function_call1] + mock_tool_call_msg1.tool_call = mock_tool_call1 + + # Second tool call message + mock_tool_call_msg2 = mock.create_autospec( + types.LiveServerMessage, instance=True + ) + mock_tool_call_msg2.usage_metadata = None + mock_tool_call_msg2.server_content = None + mock_tool_call_msg2.session_resumption_update = None + + function_call2 = types.FunctionCall( + name='tool_2', + args={'arg': 'value2'}, + ) + mock_tool_call2 = mock.create_autospec( + types.LiveServerToolCall, instance=True + ) + mock_tool_call2.function_calls = [function_call2] + mock_tool_call_msg2.tool_call = mock_tool_call2 + + # Turn complete message + mock_turn_complete_content = mock.create_autospec( + types.LiveServerContent, instance=True + ) + mock_turn_complete_content.model_turn = None + mock_turn_complete_content.grounding_metadata = None + mock_turn_complete_content.turn_complete = True + mock_turn_complete_content.interrupted = False + mock_turn_complete_content.input_transcription = None + mock_turn_complete_content.output_transcription = None + + mock_turn_complete_msg = mock.create_autospec( + types.LiveServerMessage, instance=True + ) + mock_turn_complete_msg.usage_metadata = None + mock_turn_complete_msg.server_content = mock_turn_complete_content + mock_turn_complete_msg.tool_call = None + mock_turn_complete_msg.session_resumption_update = None + + async def mock_receive_generator(): + yield mock_tool_call_msg1 + yield mock_tool_call_msg2 + yield mock_turn_complete_msg + + receive_mock = mock.Mock(return_value=mock_receive_generator()) + mock_gemini_session.receive = receive_mock + + responses = [resp async for resp in gemini_connection.receive()] + + # Expected: One LlmResponse with both tool calls, then one with turn_complete + assert len(responses) == 2 + + # First response: single LlmResponse carrying both function calls + assert responses[0].content is not None + parts = responses[0].content.parts + assert len(parts) == 2 + assert parts[0].function_call.name == 'tool_1' + assert parts[0].function_call.args == {'arg': 'value1'} + assert parts[1].function_call.name == 'tool_2' + assert parts[1].function_call.args == {'arg': 'value2'} + + # Second response: turn_complete True + assert responses[1].turn_complete is True From 110452375c6ccaa16e4ade7d7fe3438d185d4355 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Wed, 1 Apr 2026 19:04:44 -0700 Subject: [PATCH 116/192] refactor: Move SecretManagerClient to google.adk.integrations.secret_manager package Reasons for moving `SecretManagerClient`: 1. **Logical Grouping**: `SecretManagerClient` represents an integration with Google Cloud Secret Manager. Placing it in the `integrations` package is more intuitive and organized than keeping it within a specific tool's client directory. 2. **Increased Reusability**: As a common utility in `google.adk.integrations`, it is now easily discoverable and accessible for any other agent or tool in the ADK that needs to interact with Google Cloud Secret Manager. 3. **Better Abstraction**: It provides a clean, simplified interface for secret retrieval from Google Cloud Secret Manager. Future enhancements will be consolidated in the same package. 4. **Cleaner Tooling**: The `apihub_tool` can now focus purely on the API Hub logic while delegating secret management to this dedicated package. For what its worth, `SecretManagerClient` is not used by the `apihub_tool` at the moment. PiperOrigin-RevId: 893221472 --- .../integrations/secret_manager/__init__.py | 19 +++ .../secret_manager/secret_client.py | 121 ++++++++++++++++++ .../apihub_tool/clients/secret_client.py | 117 ++--------------- .../integrations/secret_manager/__init__.py | 13 ++ .../secret_manager}/test_secret_client.py | 10 +- .../clients/test_secret_client_deprecated.py | 33 +++++ 6 files changed, 204 insertions(+), 109 deletions(-) create mode 100644 src/google/adk/integrations/secret_manager/__init__.py create mode 100644 src/google/adk/integrations/secret_manager/secret_client.py create mode 100644 tests/unittests/integrations/secret_manager/__init__.py rename tests/unittests/{tools/apihub_tool/clients => integrations/secret_manager}/test_secret_client.py (93%) create mode 100644 tests/unittests/tools/apihub_tool/clients/test_secret_client_deprecated.py diff --git a/src/google/adk/integrations/secret_manager/__init__.py b/src/google/adk/integrations/secret_manager/__init__.py new file mode 100644 index 0000000000..9c1dbd53bd --- /dev/null +++ b/src/google/adk/integrations/secret_manager/__init__.py @@ -0,0 +1,19 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .secret_client import SecretManagerClient + +__all__ = [ + 'SecretManagerClient', +] diff --git a/src/google/adk/integrations/secret_manager/secret_client.py b/src/google/adk/integrations/secret_manager/secret_client.py new file mode 100644 index 0000000000..7f76ff3712 --- /dev/null +++ b/src/google/adk/integrations/secret_manager/secret_client.py @@ -0,0 +1,121 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import json +from typing import cast +from typing import Optional + +import google.auth +from google.auth import default as default_service_credential +import google.auth.transport.requests +from google.cloud import secretmanager +from google.oauth2 import service_account + + +class SecretManagerClient: + """A client for interacting with Google Cloud Secret Manager. + + This class provides a simplified interface for retrieving secrets from + Secret Manager, handling authentication using either a service account + JSON keyfile (passed as a string) or a preexisting authorization token. + + Attributes: + _credentials: Google Cloud credentials object (ServiceAccountCredentials + or Credentials). + _client: Secret Manager client instance. + """ + + def __init__( + self, + service_account_json: Optional[str] = None, + auth_token: Optional[str] = None, + ): + """Initializes the SecretManagerClient. + + Args: + service_account_json: The content of a service account JSON keyfile (as + a string), not the file path. Must be valid JSON. + auth_token: An existing Google Cloud authorization token. + + Raises: + ValueError: If neither `service_account_json` nor `auth_token` is + provided, + or if both are provided. Also raised if the service_account_json + is not valid JSON. + google.auth.exceptions.GoogleAuthError: If authentication fails. + """ + if service_account_json: + try: + credentials = service_account.Credentials.from_service_account_info( + json.loads(service_account_json) + ) + except json.JSONDecodeError as e: + raise ValueError(f"Invalid service account JSON: {e}") from e + elif auth_token: + credentials = google.auth.credentials.Credentials( + token=auth_token, + refresh_token=None, + token_uri=None, + client_id=None, + client_secret=None, + ) + request = google.auth.transport.requests.Request() + credentials.refresh(request) + else: + try: + credentials, _ = default_service_credential( + scopes=["https://www.googleapis.com/auth/cloud-platform"] + ) + except Exception as e: + raise ValueError( + "'service_account_json' or 'auth_token' are both missing, and" + f" error occurred while trying to use default credentials: {e}" + ) from e + + if not credentials: + raise ValueError( + "Must provide either 'service_account_json' or 'auth_token', not both" + " or neither." + ) + + self._credentials = credentials + self._client = secretmanager.SecretManagerServiceClient( + credentials=self._credentials + ) + + def get_secret(self, resource_name: str) -> str: + """Retrieves a secret from Google Cloud Secret Manager. + + Args: + resource_name: The full resource name of the secret, in the format + "projects/*/secrets/*/versions/*". Usually you want the "latest" + version, e.g., + "projects/my-project/secrets/my-secret/versions/latest". + + Returns: + The secret payload as a string. + + Raises: + google.api_core.exceptions.GoogleAPIError: If the Secret Manager API + returns an error (e.g., secret not found, permission denied). + Exception: For other unexpected errors. + """ + try: + response = self._client.access_secret_version(name=resource_name) + return cast(str, response.payload.data.decode("UTF-8")) + except Exception as e: + raise e # Re-raise the exception to allow for handling by the caller + # Consider logging the exception here before re-raising. diff --git a/src/google/adk/tools/apihub_tool/clients/secret_client.py b/src/google/adk/tools/apihub_tool/clients/secret_client.py index 2d83fe7cb5..a7d0079e16 100644 --- a/src/google/adk/tools/apihub_tool/clients/secret_client.py +++ b/src/google/adk/tools/apihub_tool/clients/secret_client.py @@ -14,107 +14,16 @@ from __future__ import annotations -import json -from typing import Optional - -import google.auth -from google.auth import default as default_service_credential -import google.auth.transport.requests -from google.cloud import secretmanager -from google.oauth2 import service_account - - -class SecretManagerClient: - """A client for interacting with Google Cloud Secret Manager. - - This class provides a simplified interface for retrieving secrets from - Secret Manager, handling authentication using either a service account - JSON keyfile (passed as a string) or a preexisting authorization token. - - Attributes: - _credentials: Google Cloud credentials object (ServiceAccountCredentials - or Credentials). - _client: Secret Manager client instance. - """ - - def __init__( - self, - service_account_json: Optional[str] = None, - auth_token: Optional[str] = None, - ): - """Initializes the SecretManagerClient. - - Args: - service_account_json: The content of a service account JSON keyfile (as - a string), not the file path. Must be valid JSON. - auth_token: An existing Google Cloud authorization token. - - Raises: - ValueError: If neither `service_account_json` nor `auth_token` is - provided, - or if both are provided. Also raised if the service_account_json - is not valid JSON. - google.auth.exceptions.GoogleAuthError: If authentication fails. - """ - if service_account_json: - try: - credentials = service_account.Credentials.from_service_account_info( - json.loads(service_account_json) - ) - except json.JSONDecodeError as e: - raise ValueError(f"Invalid service account JSON: {e}") from e - elif auth_token: - credentials = google.auth.credentials.Credentials( - token=auth_token, - refresh_token=None, - token_uri=None, - client_id=None, - client_secret=None, - ) - request = google.auth.transport.requests.Request() - credentials.refresh(request) - else: - try: - credentials, _ = default_service_credential( - scopes=["https://www.googleapis.com/auth/cloud-platform"] - ) - except Exception as e: - raise ValueError( - "'service_account_json' or 'auth_token' are both missing, and" - f" error occurred while trying to use default credentials: {e}" - ) from e - - if not credentials: - raise ValueError( - "Must provide either 'service_account_json' or 'auth_token', not both" - " or neither." - ) - - self._credentials = credentials - self._client = secretmanager.SecretManagerServiceClient( - credentials=self._credentials - ) - - def get_secret(self, resource_name: str) -> str: - """Retrieves a secret from Google Cloud Secret Manager. - - Args: - resource_name: The full resource name of the secret, in the format - "projects/*/secrets/*/versions/*". Usually you want the "latest" - version, e.g., - "projects/my-project/secrets/my-secret/versions/latest". - - Returns: - The secret payload as a string. - - Raises: - google.api_core.exceptions.GoogleAPIError: If the Secret Manager API - returns an error (e.g., secret not found, permission denied). - Exception: For other unexpected errors. - """ - try: - response = self._client.access_secret_version(name=resource_name) - return response.payload.data.decode("UTF-8") - except Exception as e: - raise e # Re-raise the exception to allow for handling by the caller - # Consider logging the exception here before re-raising. +import warnings + +try: + from google.adk.integrations.secret_manager.secret_client import SecretManagerClient + + warnings.warn( + "SecretManagerClient has been moved to" + " google.adk.integrations.secret_manager. Please update your imports.", + DeprecationWarning, + stacklevel=2, + ) +except ImportError: + pass diff --git a/tests/unittests/integrations/secret_manager/__init__.py b/tests/unittests/integrations/secret_manager/__init__.py new file mode 100644 index 0000000000..58d482ea38 --- /dev/null +++ b/tests/unittests/integrations/secret_manager/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unittests/tools/apihub_tool/clients/test_secret_client.py b/tests/unittests/integrations/secret_manager/test_secret_client.py similarity index 93% rename from tests/unittests/tools/apihub_tool/clients/test_secret_client.py rename to tests/unittests/integrations/secret_manager/test_secret_client.py index 4f18a6c8f9..1f11a22c0e 100644 --- a/tests/unittests/tools/apihub_tool/clients/test_secret_client.py +++ b/tests/unittests/integrations/secret_manager/test_secret_client.py @@ -18,7 +18,7 @@ from unittest.mock import MagicMock from unittest.mock import patch -from google.adk.tools.apihub_tool.clients.secret_client import SecretManagerClient +from google.adk.integrations.secret_manager.secret_client import SecretManagerClient import pytest import google @@ -29,7 +29,7 @@ class TestSecretManagerClient: @patch("google.cloud.secretmanager.SecretManagerServiceClient") @patch( - "google.adk.tools.apihub_tool.clients.secret_client.default_service_credential" + "google.adk.integrations.secret_manager.secret_client.default_service_credential" ) def test_init_with_default_credentials( self, mock_default_service_credential, mock_secret_manager_client @@ -112,7 +112,7 @@ def test_init_with_auth_token(self, mock_secret_manager_client): assert client._client == mock_secret_manager_client.return_value @patch( - "google.adk.tools.apihub_tool.clients.secret_client.default_service_credential" + "google.adk.integrations.secret_manager.secret_client.default_service_credential" ) def test_init_with_default_credentials_error( self, mock_default_service_credential @@ -136,7 +136,7 @@ def test_init_with_invalid_service_account_json(self): @patch("google.cloud.secretmanager.SecretManagerServiceClient") @patch( - "google.adk.tools.apihub_tool.clients.secret_client.default_service_credential" + "google.adk.integrations.secret_manager.secret_client.default_service_credential" ) def test_get_secret( self, mock_default_service_credential, mock_secret_manager_client @@ -170,7 +170,7 @@ def test_get_secret( @patch("google.cloud.secretmanager.SecretManagerServiceClient") @patch( - "google.adk.tools.apihub_tool.clients.secret_client.default_service_credential" + "google.adk.integrations.secret_manager.secret_client.default_service_credential" ) def test_get_secret_error( self, mock_default_service_credential, mock_secret_manager_client diff --git a/tests/unittests/tools/apihub_tool/clients/test_secret_client_deprecated.py b/tests/unittests/tools/apihub_tool/clients/test_secret_client_deprecated.py new file mode 100644 index 0000000000..cc933624b7 --- /dev/null +++ b/tests/unittests/tools/apihub_tool/clients/test_secret_client_deprecated.py @@ -0,0 +1,33 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys +import warnings + +from google.adk.integrations.secret_manager import secret_client +import pytest + + +def test_secret_client_module_deprecation(): + """Verifies that importing from clients.secret_client triggers a warning.""" + module_to_test = "google.adk.tools.apihub_tool.clients.secret_client" + if module_to_test in sys.modules: + sys.modules.pop(module_to_test) + + with pytest.warns( + DeprecationWarning, match="google.adk.integrations.secret_manager" + ): + from google.adk.tools.apihub_tool.clients.secret_client import SecretManagerClient as deprecated_secret_client + + assert deprecated_secret_client is secret_client.SecretManagerClient From b3e99628ee1b87b61badf56e67f8ddee15e6fe54 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Wed, 1 Apr 2026 22:31:18 -0700 Subject: [PATCH 117/192] feat(auth): Support additional HTTP headers in MCP tools PiperOrigin-RevId: 893287579 --- src/google/adk/tools/mcp_tool/mcp_tool.py | 3 ++ src/google/adk/tools/mcp_tool/mcp_toolset.py | 4 ++ .../unittests/tools/mcp_tool/test_mcp_tool.py | 39 +++++++++++++++++++ .../tools/mcp_tool/test_mcp_toolset.py | 28 +++++++++++++ 4 files changed, 74 insertions(+) diff --git a/src/google/adk/tools/mcp_tool/mcp_tool.py b/src/google/adk/tools/mcp_tool/mcp_tool.py index 9a2fd5fcfd..04ed799b17 100644 --- a/src/google/adk/tools/mcp_tool/mcp_tool.py +++ b/src/google/adk/tools/mcp_tool/mcp_tool.py @@ -479,6 +479,9 @@ async def _get_headers( f" {credential.http.credentials.token}" ) } + if credential.http.additional_headers: + headers = headers or {} + headers.update(credential.http.additional_headers) elif credential.api_key: if ( not self._credentials_manager diff --git a/src/google/adk/tools/mcp_tool/mcp_toolset.py b/src/google/adk/tools/mcp_tool/mcp_toolset.py index db6bd9051e..39fe81ef33 100644 --- a/src/google/adk/tools/mcp_tool/mcp_toolset.py +++ b/src/google/adk/tools/mcp_tool/mcp_toolset.py @@ -240,6 +240,10 @@ def _get_auth_headers(self) -> Optional[Dict[str, str]]: f"{credential.http.scheme} {credential.http.credentials.token}" ) } + + if credential.http.additional_headers: + headers = headers or {} + headers.update(credential.http.additional_headers) elif credential.api_key: # For API key, use the auth scheme to determine header name if self._auth_config.auth_scheme: diff --git a/tests/unittests/tools/mcp_tool/test_mcp_tool.py b/tests/unittests/tools/mcp_tool/test_mcp_tool.py index d6e39b94f3..7795fda0f4 100644 --- a/tests/unittests/tools/mcp_tool/test_mcp_tool.py +++ b/tests/unittests/tools/mcp_tool/test_mcp_tool.py @@ -14,6 +14,7 @@ import inspect from unittest.mock import AsyncMock +from unittest.mock import create_autospec from unittest.mock import Mock from unittest.mock import patch @@ -415,6 +416,44 @@ async def test_get_headers_http_basic(self): expected_encoded = base64.b64encode(b"user:pass").decode() assert headers == {"Authorization": f"Basic {expected_encoded}"} + @pytest.mark.asyncio + @pytest.mark.parametrize( + "token, expected_headers", + [ + ( + "some-token", + { + "Authorization": "some-scheme some-token", + "X-Custom-Header": "custom-value", + }, + ), + ( + None, + {"X-Custom-Header": "custom-value"}, + ), + ], + ) + async def test_get_headers_http_adds_additional_headers( + self, token, expected_headers + ): + tool = MCPTool( + mcp_tool=self.mock_mcp_tool, + mcp_session_manager=self.mock_session_manager, + ) + http_auth = HttpAuth( + scheme="some-scheme", + credentials=HttpCredentials(token=token), + additional_headers={"X-Custom-Header": "custom-value"}, + ) + credential = AuthCredential( + auth_type=AuthCredentialTypes.HTTP, http=http_auth + ) + + tool_context = create_autospec(ToolContext, instance=True) + headers = await tool._get_headers(tool_context, credential) + + assert headers == expected_headers + @pytest.mark.asyncio async def test_get_headers_api_key_with_valid_header_scheme(self): """Test header generation for API Key credentials with header-based auth scheme.""" diff --git a/tests/unittests/tools/mcp_tool/test_mcp_toolset.py b/tests/unittests/tools/mcp_tool/test_mcp_toolset.py index 8179a1c9e1..ddb2347478 100644 --- a/tests/unittests/tools/mcp_tool/test_mcp_toolset.py +++ b/tests/unittests/tools/mcp_tool/test_mcp_toolset.py @@ -23,8 +23,13 @@ from unittest.mock import Mock from unittest.mock import patch +from fastapi.openapi.models import OAuth2 from google.adk.agents.readonly_context import ReadonlyContext from google.adk.auth.auth_credential import AuthCredential +from google.adk.auth.auth_credential import AuthCredentialTypes +from google.adk.auth.auth_credential import HttpAuth +from google.adk.auth.auth_credential import HttpCredentials +from google.adk.auth.auth_tool import AuthConfig from google.adk.tools.load_mcp_resource_tool import LoadMcpResourceTool from google.adk.tools.mcp_tool.mcp_session_manager import MCPSessionManager from google.adk.tools.mcp_tool.mcp_session_manager import SseConnectionParams @@ -646,3 +651,26 @@ async def mock_sampling_handler(messages, params=None, context=None): assert called["value"] is True assert result["role"] == "assistant" assert result["content"]["text"] == "sampling response" + + @pytest.mark.asyncio + async def test_get_auth_headers_includes_additional_headers(self): + credential = AuthCredential( + auth_type=AuthCredentialTypes.HTTP, + http=HttpAuth( + scheme="bearer", + credentials=HttpCredentials(token="token"), + additional_headers={"X-API-Key": "secret"}, + ), + ) + auth_config = AuthConfig( + auth_scheme=OAuth2(flows={}), + raw_auth_credential=credential, + ) + auth_config.exchanged_auth_credential = credential + toolset = McpToolset(connection_params=self.mock_stdio_params) + toolset._auth_config = auth_config + + headers = toolset._get_auth_headers() + + assert headers["Authorization"] == "Bearer token" + assert headers["X-API-Key"] == "secret" From 9fec503061846b9903c18921f7848b358a041331 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 2 Apr 2026 06:24:16 -0700 Subject: [PATCH 118/192] feat(auth): Pass consent_nonce to Agent Frontend Propagate consent_nonce received from Agent Identity Credentials service during 3-legged OAuth flows into the AuthCredential OAuth2 object. This will be sent to the Agent Frontend via the adk_request_credential FunctionCall. PiperOrigin-RevId: 893474363 --- src/google/adk/auth/auth_credential.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/google/adk/auth/auth_credential.py b/src/google/adk/auth/auth_credential.py index 6160edcc02..a71ae317f5 100644 --- a/src/google/adk/auth/auth_credential.py +++ b/src/google/adk/auth/auth_credential.py @@ -73,6 +73,10 @@ class OAuth2Auth(BaseModelWithConfig): # tool or adk can generate the auth_uri with the state info thus client # can verify the state auth_uri: Optional[str] = None + # A unique value generated at the start of the OAuth flow to bind the user's + # session to the authorization request. This value is typically stored with + # user session and passed to backend for validation. + nonce: Optional[str] = None state: Optional[str] = None # tool or adk can decide the redirect_uri if they don't want client to decide redirect_uri: Optional[str] = None From dcee2902729e178b41086c4039a3828917bbb9f3 Mon Sep 17 00:00:00 2001 From: Sasha Sobran Date: Thu, 2 Apr 2026 08:22:25 -0700 Subject: [PATCH 119/192] fix: Disallow args on /builder and Add warning about Web UI usage to CLI help Co-authored-by: Sasha Sobran PiperOrigin-RevId: 893521804 --- src/google/adk/cli/cli_tools_click.py | 6 +- src/google/adk/cli/fast_api.py | 95 +++++++++++++++++---------- tests/unittests/cli/test_fast_api.py | 47 +++++++++++-- 3 files changed, 105 insertions(+), 43 deletions(-) diff --git a/src/google/adk/cli/cli_tools_click.py b/src/google/adk/cli/cli_tools_click.py index b9925724bd..171a63b425 100644 --- a/src/google/adk/cli/cli_tools_click.py +++ b/src/google/adk/cli/cli_tools_click.py @@ -1713,7 +1713,8 @@ def cli_api_server( default=False, help=( "Optional. Deploy ADK Web UI if set. (default: deploy ADK API server" - " only)" + " only). WARNING: The web UI is for development and testing only — do" + " not use in production." ), ) @click.option( @@ -2229,7 +2230,8 @@ def cli_deploy_agent_engine( default=False, help=( "Optional. Deploy ADK Web UI if set. (default: deploy ADK API server" - " only)" + " only). WARNING: The web UI is for development and testing only — do" + " not use in production." ), ) @click.option( diff --git a/src/google/adk/cli/fast_api.py b/src/google/adk/cli/fast_api.py index 0b6f3fb6fe..4b207b4b7d 100644 --- a/src/google/adk/cli/fast_api.py +++ b/src/google/adk/cli/fast_api.py @@ -27,6 +27,7 @@ import click from fastapi import FastAPI +from fastapi import HTTPException from fastapi import UploadFile from fastapi.responses import FileResponse from fastapi.responses import PlainTextResponse @@ -293,6 +294,39 @@ def _has_parent_reference(path: str) -> bool: _ALLOWED_EXTENSIONS = frozenset({".yaml", ".yml"}) + # --- YAML content security --- + # The `args` key in agent YAML configs (CodeConfig.args, ToolConfig.args) + # allows callers to pass arbitrary arguments to Python constructors and + # functions, which is an RCE vector when exposed through the builder UI. + # Block any upload that contains an `args` key anywhere in the document. + _BLOCKED_YAML_KEYS = frozenset({"args"}) + + def _check_yaml_for_blocked_keys(content: bytes, filename: str) -> None: + """Raise if the YAML document contains any blocked keys.""" + import yaml + + try: + docs = list(yaml.safe_load_all(content)) + except yaml.YAMLError as exc: + raise ValueError(f"Invalid YAML in {filename!r}: {exc}") from exc + + def _walk(node: Any) -> None: + if isinstance(node, dict): + for key, value in node.items(): + if key in _BLOCKED_YAML_KEYS: + raise ValueError( + f"Blocked key {key!r} found in {filename!r}. " + f"The '{key}' field is not allowed in builder uploads " + "because it can execute arbitrary code." + ) + _walk(value) + elif isinstance(node, list): + for item in node: + _walk(item) + + for doc in docs: + _walk(doc) + def _parse_upload_filename(filename: Optional[str]) -> tuple[str, str]: if not filename: raise ValueError("Upload filename is missing.") @@ -430,40 +464,14 @@ async def builder_build( files: list[UploadFile], tmp: Optional[bool] = False ) -> bool: try: - if tmp: - app_names = set() - uploads = [] - for file in files: - app_name, rel_path = _parse_upload_filename(file.filename) - app_names.add(app_name) - uploads.append((rel_path, file)) - - if len(app_names) != 1: - logger.error( - "Exactly one app name is required, found: %s", - sorted(app_names), - ) - return False - - app_name = next(iter(app_names)) - app_root = _get_app_root(app_name) - tmp_agent_root = _get_tmp_agent_root(app_root, app_name) - tmp_agent_root.mkdir(parents=True, exist_ok=True) - - for rel_path, file in uploads: - destination_path = _resolve_under_dir(tmp_agent_root, rel_path) - destination_path.parent.mkdir(parents=True, exist_ok=True) - with destination_path.open("wb") as buffer: - shutil.copyfileobj(file.file, buffer) - - return True - - app_names = set() - uploads = [] + # Phase 1: parse filenames and read content into memory. + app_names: set[str] = set() + uploads: list[tuple[str, bytes]] = [] for file in files: app_name, rel_path = _parse_upload_filename(file.filename) app_names.add(app_name) - uploads.append((rel_path, file)) + content = await file.read() + uploads.append((rel_path, content)) if len(app_names) != 1: logger.error( @@ -473,6 +481,24 @@ async def builder_build( return False app_name = next(iter(app_names)) + + # Phase 2: validate every file *before* writing anything to disk. + for rel_path, content in uploads: + _check_yaml_for_blocked_keys(content, f"{app_name}/{rel_path}") + + # Phase 3: write validated files to disk. + if tmp: + app_root = _get_app_root(app_name) + tmp_agent_root = _get_tmp_agent_root(app_root, app_name) + tmp_agent_root.mkdir(parents=True, exist_ok=True) + + for rel_path, content in uploads: + destination_path = _resolve_under_dir(tmp_agent_root, rel_path) + destination_path.parent.mkdir(parents=True, exist_ok=True) + destination_path.write_bytes(content) + + return True + app_root = _get_app_root(app_name) app_root.mkdir(parents=True, exist_ok=True) @@ -480,16 +506,15 @@ async def builder_build( if tmp_agent_root.is_dir(): copy_dir_contents(tmp_agent_root, app_root) - for rel_path, file in uploads: + for rel_path, content in uploads: destination_path = _resolve_under_dir(app_root, rel_path) destination_path.parent.mkdir(parents=True, exist_ok=True) - with destination_path.open("wb") as buffer: - shutil.copyfileobj(file.file, buffer) + destination_path.write_bytes(content) return cleanup_tmp(app_name) except ValueError as exc: logger.exception("Error in builder_build: %s", exc) - return False + raise HTTPException(status_code=400, detail=str(exc)) except OSError as exc: logger.exception("Error in builder_build: %s", exc) return False diff --git a/tests/unittests/cli/test_fast_api.py b/tests/unittests/cli/test_fast_api.py index 15bc908ddb..95affeeb3e 100755 --- a/tests/unittests/cli/test_fast_api.py +++ b/tests/unittests/cli/test_fast_api.py @@ -1694,8 +1694,7 @@ def test_builder_save_rejects_traversal(builder_test_client, tmp_path): ("app/../escape.yaml", b"nope\n", "application/x-yaml"), )], ) - assert response.status_code == 200 - assert response.json() is False + assert response.status_code == 400 assert not (tmp_path / "escape.yaml").exists() assert not (tmp_path / "app" / "tmp" / "escape.yaml").exists() @@ -1709,8 +1708,7 @@ def test_builder_save_rejects_py_files(builder_test_client, tmp_path): ("app/agent.py", b"import os\nos.system('id')\n", "text/plain"), )], ) - assert response.status_code == 200 - assert response.json() is False + assert response.status_code == 400 assert not (tmp_path / "app" / "tmp" / "app" / "agent.py").exists() @@ -1732,8 +1730,7 @@ def test_builder_save_rejects_non_yaml_extensions( (f"app/file{ext}", content, "application/octet-stream"), )], ) - assert response.status_code == 200, f"Expected 200 for {ext}" - assert response.json() is False, f"Expected False for {ext}" + assert response.status_code == 400, f"Expected 400 for {ext}" def test_builder_save_allows_yaml_files(builder_test_client, tmp_path): @@ -1759,6 +1756,44 @@ def test_builder_save_allows_yaml_files(builder_test_client, tmp_path): assert response.json() is True +def test_builder_save_rejects_args_key(builder_test_client, tmp_path): + """Uploading YAML with an `args` key is rejected (RCE prevention).""" + yaml_with_args = b"""\ +name: my_tool +args: + key: value +""" + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + ("app/root_agent.yaml", yaml_with_args, "application/x-yaml"), + )], + ) + assert response.status_code == 400 + assert "args" in response.json()["detail"] + assert not (tmp_path / "app" / "tmp" / "app" / "root_agent.yaml").exists() + + +def test_builder_save_rejects_nested_args_key(builder_test_client, tmp_path): + """Uploading YAML with a nested `args` key is rejected.""" + yaml_with_nested_args = b"""\ +tools: + - name: some_tool + args: + param: value +""" + response = builder_test_client.post( + "/builder/save?tmp=true", + files=[( + "files", + ("app/root_agent.yaml", yaml_with_nested_args, "application/x-yaml"), + )], + ) + assert response.status_code == 400 + assert "args" in response.json()["detail"] + + def test_builder_get_rejects_non_yaml_file_paths(builder_test_client, tmp_path): """GET /builder/app/{app_name}?file_path=... rejects non-YAML extensions.""" app_root = tmp_path / "app" From eb4674b49f017f3947506c55be4075b1ea0369d6 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Thu, 2 Apr 2026 10:40:34 -0700 Subject: [PATCH 120/192] feat: Add support for model endpoints in Agent Registry Co-authored-by: Kathy Wu PiperOrigin-RevId: 893585328 --- .../samples/agent_registry_agent/agent.py | 21 +++++- .../agent_registry/agent_registry.py | 74 ++++++++++++++++++- src/google/adk/models/anthropic_llm.py | 40 ++++++++-- src/google/adk/models/google_llm.py | 30 ++++++-- .../agent_registry/test_agent_registry.py | 69 +++++++++++++++++ tests/unittests/models/test_anthropic_llm.py | 35 +++++++++ tests/unittests/models/test_google_llm.py | 26 +++++++ 7 files changed, 277 insertions(+), 18 deletions(-) diff --git a/contributing/samples/agent_registry_agent/agent.py b/contributing/samples/agent_registry_agent/agent.py index 38036deabf..e969a639d1 100644 --- a/contributing/samples/agent_registry_agent/agent.py +++ b/contributing/samples/agent_registry_agent/agent.py @@ -18,6 +18,7 @@ from google.adk.agents.llm_agent import LlmAgent from google.adk.integrations.agent_registry import AgentRegistry +from google.adk.models.google_llm import Gemini # Project and location can be set via environment variables: # GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION @@ -27,6 +28,8 @@ # Initialize Agent Registry client registry = AgentRegistry(project_id=project_id, location=location) +# List agents, MCP servers, and endpoints resource names from the registry. +# They can be used to initialize the agent, toolset, and model below. print(f"Listing agents in {project_id}/{location}...") agents = registry.list_agents() for agent in agents.get("agents", []): @@ -37,6 +40,11 @@ for server in mcp_servers.get("mcpServers", []): print(f"- MCP Server: {server.get('displayName')} ({server.get('name')})") +print(f"\nListing endpoints in {project_id}/{location}...") +endpoints = registry.list_endpoints() +for endpoint in endpoints.get("endpoints", []): + print(f"- Endpoint: {endpoint.get('displayName')} ({endpoint.get('name')})") + # Example of using a specific agent or MCP server from the registry: # (Note: These names should be full resource names as returned by list methods) @@ -52,8 +60,19 @@ f"projects/{project_id}/locations/{location}/mcpServers/MCP_SERVER_NAME" ) +# 3. Getting a specific model endpoint configuration +# This returns a string like: +# "projects/adk12345/locations/us-central1/publishers/google/models/gemini-2.5-flash" +# TODO: Replace ENDPOINT_NAME with your endpoint name +model_name = registry.get_model_name( + f"projects/{project_id}/locations/{location}/endpoints/ENDPOINT_NAME" +) + +# Initialize the model using the resolved model name from registry. +gemini_model = Gemini(model=model_name) + root_agent = LlmAgent( - model="gemini-2.5-flash", + model=gemini_model, name="discovery_agent", instruction=( "You have access to tools and sub-agents discovered via Registry." diff --git a/src/google/adk/integrations/agent_registry/agent_registry.py b/src/google/adk/integrations/agent_registry/agent_registry.py index 359d11648d..98c217e912 100644 --- a/src/google/adk/integrations/agent_registry/agent_registry.py +++ b/src/google/adk/integrations/agent_registry/agent_registry.py @@ -24,8 +24,10 @@ from typing import Callable from typing import Dict from typing import List +from typing import Mapping from typing import Optional from typing import Sequence +from typing import TypedDict from typing import Union from urllib.parse import parse_qs from urllib.parse import urlparse @@ -109,6 +111,26 @@ class _ProtocolType(str, Enum): CUSTOM = "CUSTOM" +class Interface(TypedDict, total=False): + """Details for a single connection interface.""" + + url: str + protocolBinding: str + + +class Endpoint(TypedDict, total=False): + """Full metadata for a registered Endpoint.""" + + name: str + endpointId: str + displayName: str + description: str + interfaces: List[Interface] + createTime: str + updateTime: str + attributes: Dict[str, Any] + + class AgentRegistry: """Client for interacting with the Google Cloud Agent Registry service. @@ -194,7 +216,7 @@ def _make_request( def _get_connection_uri( self, - resource_details: Dict[str, Any], + resource_details: Mapping[str, Any], protocol_type: Optional[_ProtocolType] = None, protocol_binding: Optional[A2ATransport] = None, ) -> Optional[str]: @@ -273,6 +295,56 @@ def get_mcp_toolset(self, mcp_server_name: str) -> McpToolset: header_provider=self._header_provider, ) + # --- Endpoint Methods --- + + def list_endpoints( + self, + filter_str: Optional[str] = None, + page_size: Optional[int] = None, + page_token: Optional[str] = None, + ) -> Dict[str, Any]: + """Fetches a list of Endpoints.""" + params = {} + if filter_str: + params["filter"] = filter_str + if page_size: + params["pageSize"] = str(page_size) + if page_token: + params["pageToken"] = page_token + return self._make_request("endpoints", params=params) + + def get_endpoint(self, name: str) -> Endpoint: + """Retrieves details of a specific Endpoint.""" + return self._make_request(name) # type: ignore + + def get_model_name(self, endpoint_name: str) -> str: + """Retrieves and parses an endpoint into a model resource name. + + Args: + endpoint_name: The full resource name of the endpoint. + + Returns: + The resolved model resource name string (e.g. + projects/.../locations/.../publishers/google/models/...). + """ + endpoint_details = self.get_endpoint(endpoint_name) + uri = self._get_connection_uri(endpoint_details) + if not uri: + raise ValueError( + f"Connection URI not found for endpoint: {endpoint_name}" + ) + + uri = re.sub(r":\w+$", "", uri) + + if uri.startswith("projects/"): + return uri + + match = re.search(r"(projects/.+)", uri) + if match: + return match.group(1) + + return uri + # --- Agent Methods --- def list_agents( diff --git a/src/google/adk/models/anthropic_llm.py b/src/google/adk/models/anthropic_llm.py index f8d7d17895..a14c767f23 100644 --- a/src/google/adk/models/anthropic_llm.py +++ b/src/google/adk/models/anthropic_llm.py @@ -23,6 +23,7 @@ import json import logging import os +import re from typing import Any from typing import AsyncGenerator from typing import Iterable @@ -364,10 +365,23 @@ class AnthropicLlm(BaseLlm): def supported_models(cls) -> list[str]: return [r"claude-3-.*", r"claude-.*-4.*"] + def _resolve_model_name(self, model: Optional[str]) -> str: + if not model: + return self.model + if model.startswith("projects/"): + match = re.search( + r"projects/[^/]+/locations/[^/]+/(?:publishers/anthropic/models|endpoints)/([^/:]+)", + model, + ) + if match: + return match.group(1) + return model + @override async def generate_content_async( self, llm_request: LlmRequest, stream: bool = False ) -> AsyncGenerator[LlmResponse, None]: + model_to_use = self._resolve_model_name(llm_request.model) messages = [ content_to_message_param(content) for content in llm_request.contents or [] @@ -390,7 +404,7 @@ async def generate_content_async( if not stream: message = await self._anthropic_client.messages.create( - model=llm_request.model, + model=model_to_use, system=llm_request.config.system_instruction, messages=messages, tools=tools, @@ -416,8 +430,9 @@ async def _generate_content_streaming( Yields partial LlmResponse objects as content arrives, followed by a final aggregated LlmResponse with all content. """ + model_to_use = self._resolve_model_name(llm_request.model) raw_stream = await self._anthropic_client.messages.create( - model=llm_request.model, + model=model_to_use, system=llm_request.config.system_instruction, messages=messages, tools=tools, @@ -511,17 +526,26 @@ class Claude(AnthropicLlm): @cached_property @override def _anthropic_client(self) -> AsyncAnthropicVertex: - if ( - "GOOGLE_CLOUD_PROJECT" not in os.environ - or "GOOGLE_CLOUD_LOCATION" not in os.environ - ): + project_id = os.environ.get("GOOGLE_CLOUD_PROJECT") + location = os.environ.get("GOOGLE_CLOUD_LOCATION") + + if self.model.startswith("projects/"): + match = re.search( + r"projects/([^/]+)/locations/([^/]+)/", + self.model, + ) + if match: + project_id = match.group(1) + location = match.group(2) + + if not project_id or not location: raise ValueError( "GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION must be set for using" " Anthropic on Vertex." ) return AsyncAnthropicVertex( - project_id=os.environ["GOOGLE_CLOUD_PROJECT"], - region=os.environ["GOOGLE_CLOUD_LOCATION"], + project_id=project_id, + region=location, default_headers=get_tracking_headers(), ) diff --git a/src/google/adk/models/google_llm.py b/src/google/adk/models/google_llm.py index 609de3d3d3..0114d73a82 100644 --- a/src/google/adk/models/google_llm.py +++ b/src/google/adk/models/google_llm.py @@ -304,13 +304,19 @@ def api_client(self) -> Client: """ from google.genai import Client - return Client( - http_options=types.HttpOptions( + base_url = self.base_url + + kwargs: dict[str, Any] = { + 'http_options': types.HttpOptions( headers=self._tracking_headers(), retry_options=self.retry_options, - base_url=self.base_url, + base_url=base_url, ) - ) + } + if self.model.startswith('projects/'): + kwargs['vertexai'] = True + + return Client(**kwargs) @cached_property def _api_backend(self) -> GoogleLLMVariant: @@ -336,11 +342,19 @@ def _live_api_version(self) -> str: def _live_api_client(self) -> Client: from google.genai import Client - return Client( - http_options=types.HttpOptions( - headers=self._tracking_headers(), api_version=self._live_api_version + base_url = self.base_url + + kwargs: dict[str, Any] = { + 'http_options': types.HttpOptions( + headers=self._tracking_headers(), + api_version=self._live_api_version, + base_url=base_url, ) - ) + } + if self.model.startswith('projects/'): + kwargs['vertexai'] = True + + return Client(**kwargs) @contextlib.asynccontextmanager async def connect(self, llm_request: LlmRequest) -> BaseLlmConnection: diff --git a/tests/unittests/integrations/agent_registry/test_agent_registry.py b/tests/unittests/integrations/agent_registry/test_agent_registry.py index 377fceda82..2d09b5f41e 100644 --- a/tests/unittests/integrations/agent_registry/test_agent_registry.py +++ b/tests/unittests/integrations/agent_registry/test_agent_registry.py @@ -272,6 +272,37 @@ def test_get_mcp_server(self, mock_httpx, registry): server = registry.get_mcp_server("test-mcp") assert server == {"name": "test-mcp"} + @patch("httpx.Client") + def test_list_endpoints(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = {"endpoints": []} + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + # Mock auth refresh + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + endpoints = registry.list_endpoints() + assert endpoints == {"endpoints": []} + + @patch("httpx.Client") + def test_get_endpoint(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = {"name": "test-endpoint"} + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + server = registry.get_endpoint("test-endpoint") + assert server == {"name": "test-endpoint"} + @patch("httpx.Client") def test_get_mcp_toolset(self, mock_httpx, registry): mock_response = MagicMock() @@ -420,3 +451,41 @@ def test_make_request_raises_generic_exception(self, mock_httpx, registry): with pytest.raises(RuntimeError, match="API request failed: Generic error"): registry._make_request("test-path") + + @patch.object(AgentRegistry, "get_endpoint") + def test_get_model_name_starts_with_projects( + self, mock_get_endpoint, registry + ): + mock_get_endpoint.return_value = { + "interfaces": [{"url": "projects/p1/locations/l1/models/m1"}] + } + model_name = registry.get_model_name("test-endpoint") + assert model_name == "projects/p1/locations/l1/models/m1" + + @patch.object(AgentRegistry, "get_endpoint") + def test_get_model_name_contains_projects(self, mock_get_endpoint, registry): + mock_get_endpoint.return_value = { + "interfaces": [{ + "url": ( + "https://vertexai.googleapis.com/v1/projects/p1/locations/l1/models/m1" + ) + }] + } + model_name = registry.get_model_name("test-endpoint") + assert model_name == "projects/p1/locations/l1/models/m1" + + @patch.object(AgentRegistry, "get_endpoint") + def test_get_model_name_strips_suffix(self, mock_get_endpoint, registry): + mock_get_endpoint.return_value = { + "interfaces": [{"url": "projects/p1/locations/l1/models/m1:predict"}] + } + model_name = registry.get_model_name("test-endpoint") + assert model_name == "projects/p1/locations/l1/models/m1" + + @patch.object(AgentRegistry, "get_endpoint") + def test_get_model_name_raises_value_error_if_no_uri( + self, mock_get_endpoint, registry + ): + mock_get_endpoint.return_value = {} + with pytest.raises(ValueError, match="Connection URI not found"): + registry.get_model_name("test-endpoint") diff --git a/tests/unittests/models/test_anthropic_llm.py b/tests/unittests/models/test_anthropic_llm.py index f5b0d2c019..2b510c426b 100644 --- a/tests/unittests/models/test_anthropic_llm.py +++ b/tests/unittests/models/test_anthropic_llm.py @@ -97,6 +97,41 @@ def llm_request(): ) +def test_claude_anthropic_client_creation(): + # Test with environment variables + with mock.patch.dict( + os.environ, + { + "GOOGLE_CLOUD_PROJECT": "env-project", + "GOOGLE_CLOUD_LOCATION": "env-location", + }, + ): + model = Claude(model="claude-3-5-sonnet-v2@20241022") + with mock.patch( + "google.adk.models.anthropic_llm.AsyncAnthropicVertex", autospec=True + ) as mock_client_class: + _ = model._anthropic_client + mock_client_class.assert_called_once() + _, kwargs = mock_client_class.call_args + assert kwargs["project_id"] == "env-project" + assert kwargs["region"] == "env-location" + + +def test_claude_anthropic_client_creation_with_full_resource_name(): + # Test with full resource name in model string + model = Claude( + model="projects/test-project/locations/test-location/publishers/anthropic/models/claude-3-5-sonnet-v2@20241022" + ) + with mock.patch( + "google.adk.models.anthropic_llm.AsyncAnthropicVertex", autospec=True + ) as mock_client_class: + _ = model._anthropic_client + mock_client_class.assert_called_once() + _, kwargs = mock_client_class.call_args + assert kwargs["project_id"] == "test-project" + assert kwargs["region"] == "test-location" + + def test_supported_models(): models = Claude.supported_models() assert len(models) == 2 diff --git a/tests/unittests/models/test_google_llm.py b/tests/unittests/models/test_google_llm.py index 70aa01b69d..5ab56bf42b 100644 --- a/tests/unittests/models/test_google_llm.py +++ b/tests/unittests/models/test_google_llm.py @@ -155,6 +155,32 @@ def test_supported_models(): ) +def test_gemini_api_client_creation_with_projects_prefix(): + model = Gemini( + model="projects/test-project/locations/test-location/publishers/google/models/gemini-1.5-pro" + ) + with mock.patch("google.genai.Client", autospec=True) as mock_client: + _ = model.api_client + mock_client.assert_called_once() + _, kwargs = mock_client.call_args + assert kwargs["vertexai"] is True + assert "project" not in kwargs + assert "location" not in kwargs + + +def test_gemini_live_api_client_creation_with_projects_prefix(): + model = Gemini( + model="projects/test-project/locations/test-location/publishers/google/models/gemini-1.5-pro" + ) + with mock.patch("google.genai.Client", autospec=True) as mock_client: + _ = model._live_api_client + assert mock_client.call_count == 2 + + # Second call is for _live_api_client + _, kwargs = mock_client.call_args_list[1] + assert kwargs["vertexai"] is True + + def test_client_version_header(): model = Gemini(model="gemini-1.5-flash") client = model.api_client From 6f29775f4bf7172b1378b17856534f95b9d4eeb6 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Thu, 2 Apr 2026 10:49:35 -0700 Subject: [PATCH 121/192] fix: Fix RemoteA2AAgent deepcopy errors RemoteA2Agent's new _config attribute in v1.27.0 was not working with deepcopy() because it had Callable fields, causing agent engine deployment issues. This adds a custom deepcopy attribute that handles Callables by copying them by reference. Co-authored-by: Kathy Wu PiperOrigin-RevId: 893590078 --- src/google/adk/a2a/agent/config.py | 14 ++++++++++ .../unittests/agents/test_remote_a2a_agent.py | 27 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/google/adk/a2a/agent/config.py b/src/google/adk/a2a/agent/config.py index 9898436253..a9e1149558 100644 --- a/src/google/adk/a2a/agent/config.py +++ b/src/google/adk/a2a/agent/config.py @@ -16,6 +16,7 @@ from __future__ import annotations +import copy from typing import Any from typing import Awaitable from typing import Callable @@ -108,3 +109,16 @@ class A2aRemoteAgentConfig(BaseModel): ) request_interceptors: Optional[list[RequestInterceptor]] = None + + def __deepcopy__(self, memo): + cls = self.__class__ + copied_values = {} + for k, v in self.__dict__.items(): + if not k.startswith('_'): + if callable(v): + copied_values[k] = v + else: + copied_values[k] = copy.deepcopy(v, memo) + result = cls.model_construct(**copied_values) + memo[id(self)] = result + return result diff --git a/tests/unittests/agents/test_remote_a2a_agent.py b/tests/unittests/agents/test_remote_a2a_agent.py index 0f1ce896a3..5c0cf61f33 100644 --- a/tests/unittests/agents/test_remote_a2a_agent.py +++ b/tests/unittests/agents/test_remote_a2a_agent.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import copy import json from pathlib import Path import tempfile @@ -36,6 +37,7 @@ from a2a.types import TextPart from google.adk.a2a.agent import ParametersConfig from google.adk.a2a.agent import RequestInterceptor +from google.adk.a2a.agent.config import A2aRemoteAgentConfig from google.adk.a2a.agent.utils import execute_after_request_interceptors from google.adk.a2a.agent.utils import execute_before_request_interceptors from google.adk.agents.invocation_context import InvocationContext @@ -2866,3 +2868,28 @@ async def test_execute_after_request_interceptors_no_after_request( ) assert result is event + + +class TestRemoteA2aAgentDeepcopy: + """Test deepcopy functionality for RemoteA2aAgent and its config.""" + + def test_deepcopy_config(self): + """Test that A2aRemoteAgentConfig can be deepcopied with interceptors.""" + config = A2aRemoteAgentConfig() + mock_interceptor = Mock() + config.request_interceptors = [mock_interceptor] + + copied_config = copy.deepcopy(config) + assert copied_config is not None + + # Verify that functions are shared (by reference) + assert copied_config.a2a_message_converter is config.a2a_message_converter + + # Verify that request_interceptors list was copied + assert copied_config.request_interceptors is not None + assert len(copied_config.request_interceptors) == 1 + # Standard objects inside lists should be deepcopied (new instances) + assert ( + copied_config.request_interceptors[0] + is not config.request_interceptors[0] + ) From aaa03ac30841b2e12e3ddf4bb02fbcbf08ae13e8 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 2 Apr 2026 10:50:57 -0700 Subject: [PATCH 122/192] refactor: Remove the session events dependency from A2aAgentExecutor PiperOrigin-RevId: 893590774 --- .../a2a/executor/a2a_agent_executor_impl.py | 3 +++ .../adk/sessions/base_session_service.py | 11 +++++++++- .../adk/sessions/in_memory_session_service.py | 11 ++++++---- .../adk/sessions/sqlite_session_service.py | 7 +++++-- .../adk/sessions/vertex_ai_session_service.py | 20 ++++++++++++------- .../executor/test_a2a_agent_executor_impl.py | 2 ++ 6 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/google/adk/a2a/executor/a2a_agent_executor_impl.py b/src/google/adk/a2a/executor/a2a_agent_executor_impl.py index 19b6ec8731..21ec967caf 100644 --- a/src/google/adk/a2a/executor/a2a_agent_executor_impl.py +++ b/src/google/adk/a2a/executor/a2a_agent_executor_impl.py @@ -38,6 +38,7 @@ from typing_extensions import override from ...runners import Runner +from ...sessions import base_session_service from ...utils.context_utils import Aclosing from ..agent.interceptors.new_integration_extension import _NEW_A2A_ADK_INTEGRATION_EXTENSION from ..converters.from_adk_event import create_error_status_event @@ -287,6 +288,8 @@ async def _resolve_session( app_name=runner.app_name, user_id=user_id, session_id=session_id, + # Checking existence doesn't require event history. + config=base_session_service.GetSessionConfig(num_recent_events=0), ) if session is None: session = await runner.session_service.create_session( diff --git a/src/google/adk/sessions/base_session_service.py b/src/google/adk/sessions/base_session_service.py index eb22a83bb9..af94bb9eeb 100644 --- a/src/google/adk/sessions/base_session_service.py +++ b/src/google/adk/sessions/base_session_service.py @@ -27,7 +27,16 @@ class GetSessionConfig(BaseModel): - """The configuration of getting a session.""" + """The configuration of getting a session. + + Attributes: + num_recent_events: The limit of recent events to get for the session. + Optional: if None, the filter is not applied; if greater than 0, returns + at most given number of recent events; if 0, no events are returned. + after_timestamp: The earliest timestamp of events to get for the session. + Optional: if None, the filter is not applied; otherwise, returns events + with timestamp >= the given time. + """ num_recent_events: Optional[int] = None after_timestamp: Optional[float] = None diff --git a/src/google/adk/sessions/in_memory_session_service.py b/src/google/adk/sessions/in_memory_session_service.py index ec74985146..8b7544535f 100644 --- a/src/google/adk/sessions/in_memory_session_service.py +++ b/src/google/adk/sessions/in_memory_session_service.py @@ -178,10 +178,13 @@ def _get_session_impl( copied_session = copy.deepcopy(session) if config: - if config.num_recent_events: - copied_session.events = copied_session.events[ - -config.num_recent_events : - ] + if config.num_recent_events is not None: + if config.num_recent_events == 0: + copied_session.events = [] + else: + copied_session.events = copied_session.events[ + -config.num_recent_events : + ] if config.after_timestamp: i = len(copied_session.events) - 1 while i >= 0: diff --git a/src/google/adk/sessions/sqlite_session_service.py b/src/google/adk/sessions/sqlite_session_service.py index 3ad84e9d1a..427bc3e73e 100644 --- a/src/google/adk/sessions/sqlite_session_service.py +++ b/src/google/adk/sessions/sqlite_session_service.py @@ -261,11 +261,14 @@ async def get_session( query_parts.append("ORDER BY timestamp DESC") - if config and config.num_recent_events: + if config and config.num_recent_events is not None: query_parts.append("LIMIT ?") params.append(config.num_recent_events) - event_rows = await db.execute_fetchall(" ".join(query_parts), params) + if config and config.num_recent_events == 0: + event_rows = [] + else: + event_rows = await db.execute_fetchall(" ".join(query_parts), params) storage_events_data = [row["event_data"] for row in event_rows] # Fetch states from storage diff --git a/src/google/adk/sessions/vertex_ai_session_service.py b/src/google/adk/sessions/vertex_ai_session_service.py index 7c2d6d68d5..cc77c2e3a7 100644 --- a/src/google/adk/sessions/vertex_ai_session_service.py +++ b/src/google/adk/sessions/vertex_ai_session_service.py @@ -172,13 +172,19 @@ async def get_session( } try: - get_session_response, events_iterator = await asyncio.gather( - api_client.agent_engines.sessions.get(name=session_resource_name), - api_client.agent_engines.sessions.events.list( - name=session_resource_name, - **list_events_kwargs, - ), - ) + if config and config.num_recent_events == 0: + get_session_response = await api_client.agent_engines.sessions.get( + name=session_resource_name + ) + events_iterator = [] + else: + get_session_response, events_iterator = await asyncio.gather( + api_client.agent_engines.sessions.get(name=session_resource_name), + api_client.agent_engines.sessions.events.list( + name=session_resource_name, + **list_events_kwargs, + ), + ) except ClientError as e: if e.code == 404: logger.debug( diff --git a/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py b/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py index f10d56e564..940b79a0b9 100644 --- a/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py +++ b/tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py @@ -36,6 +36,7 @@ from google.adk.events.event_actions import EventActions from google.adk.runners import RunConfig from google.adk.runners import Runner +from google.adk.sessions.base_session_service import GetSessionConfig from google.genai.types import Content import pytest @@ -659,6 +660,7 @@ async def test_resolve_session_creates_new_session(self): app_name=self.mock_runner.app_name, user_id="test-user", session_id="old-session-id", + config=GetSessionConfig(num_recent_events=0, after_timestamp=None), ) self.mock_runner.session_service.create_session.assert_called_once_with( app_name=self.mock_runner.app_name, From 4d7b9515b654bf6f571e5dfbc53464405f0fe5d0 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Thu, 2 Apr 2026 11:03:28 -0700 Subject: [PATCH 123/192] chore: Consolidate weather_skill and weather-skill in sample agent We changed skills to use kebab case and created weather-skill, but forgot to get rid of weather_skill in the sample Co-authored-by: Kathy Wu PiperOrigin-RevId: 893597141 --- contributing/samples/skills_agent/agent.py | 8 ++++---- .../samples/skills_agent/skills/weather-skill/SKILL.md | 6 +++++- .../samples/skills_agent/skills/weather_skill/SKILL.md | 10 ---------- 3 files changed, 9 insertions(+), 15 deletions(-) delete mode 100644 contributing/samples/skills_agent/skills/weather_skill/SKILL.md diff --git a/contributing/samples/skills_agent/agent.py b/contributing/samples/skills_agent/agent.py index 6d5355db23..a42fa2583e 100644 --- a/contributing/samples/skills_agent/agent.py +++ b/contributing/samples/skills_agent/agent.py @@ -54,9 +54,9 @@ async def run_async(self, *, args: dict, tool_context) -> str: return f"The timezone for {args['location']} is UTC+00:00." -def get_current_humidity(location: str) -> str: - """Returns the current humidity for a given location.""" - return f"The humidity in {location} is 45%." +def get_wind_speed(location: str) -> str: + """Returns the current wind speed for a given location.""" + return f"The wind speed in {location} is 10 mph." greeting_skill = models.Skill( @@ -87,7 +87,7 @@ def get_current_humidity(location: str) -> str: # be used in production environments. my_skill_toolset = SkillToolset( skills=[greeting_skill, weather_skill], - additional_tools=[GetTimezoneTool(), get_current_humidity], + additional_tools=[GetTimezoneTool(), get_wind_speed], code_executor=UnsafeLocalCodeExecutor(), ) diff --git a/contributing/samples/skills_agent/skills/weather-skill/SKILL.md b/contributing/samples/skills_agent/skills/weather-skill/SKILL.md index 6893ef671e..0323c18bfb 100644 --- a/contributing/samples/skills_agent/skills/weather-skill/SKILL.md +++ b/contributing/samples/skills_agent/skills/weather-skill/SKILL.md @@ -1,8 +1,12 @@ --- name: weather-skill description: A skill that provides weather information based on reference data. +metadata: + adk_additional_tools: + - get_wind_speed --- Step 1: Check 'references/weather_info.md' for the current weather. Step 2: If humidity is requested, use run 'scripts/get_humidity.py' with the `location` argument. -Step 3: Provide the update to the user. +Step 3: If wind speed is requested, use the `get_wind_speed` tool. +Step 4: Provide the update to the user. diff --git a/contributing/samples/skills_agent/skills/weather_skill/SKILL.md b/contributing/samples/skills_agent/skills/weather_skill/SKILL.md deleted file mode 100644 index ea79220a38..0000000000 --- a/contributing/samples/skills_agent/skills/weather_skill/SKILL.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: weather-skill -description: A skill that provides weather information based on reference data. -metadata: - adk_additional_tools: - - get_current_humidity ---- - -Step 1: Check 'references/weather_info.md' for the current weather. -Step 2: Provide the weather update to the user. From 16a1a185ab77a904fd01712779fa1bc6417dc628 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 2 Apr 2026 11:20:08 -0700 Subject: [PATCH 124/192] feat: Option to use shallow-copy for session in InMemorySessionService PiperOrigin-RevId: 893606046 --- src/google/adk/features/_feature_registry.py | 4 +++ .../adk/sessions/in_memory_session_service.py | 32 ++++++++++++++++--- .../sessions/test_session_service.py | 14 ++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/google/adk/features/_feature_registry.py b/src/google/adk/features/_feature_registry.py index 4ae26a98ab..04367fedae 100644 --- a/src/google/adk/features/_feature_registry.py +++ b/src/google/adk/features/_feature_registry.py @@ -53,6 +53,7 @@ class FeatureName(str, Enum): TOOL_CONFIRMATION = "TOOL_CONFIRMATION" PLUGGABLE_AUTH = "PLUGGABLE_AUTH" SNAKE_CASE_SKILL_NAME = "SNAKE_CASE_SKILL_NAME" + IN_MEMORY_SESSION_SERVICE_LIGHT_COPY = "IN_MEMORY_SESSION_SERVICE_LIGHT_COPY" class FeatureStage(Enum): @@ -166,6 +167,9 @@ class FeatureConfig: FeatureName.SNAKE_CASE_SKILL_NAME: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=False ), + FeatureName.IN_MEMORY_SESSION_SERVICE_LIGHT_COPY: FeatureConfig( + FeatureStage.WIP, default_on=False + ), } # Track which experimental features have already warned (warn only once) diff --git a/src/google/adk/sessions/in_memory_session_service.py b/src/google/adk/sessions/in_memory_session_service.py index 8b7544535f..1bef516086 100644 --- a/src/google/adk/sessions/in_memory_session_service.py +++ b/src/google/adk/sessions/in_memory_session_service.py @@ -25,6 +25,8 @@ from . import _session_util from ..errors.already_exists_error import AlreadyExistsError from ..events.event import Event +from ..features import FeatureName +from ..features import is_feature_enabled from .base_session_service import BaseSessionService from .base_session_service import GetSessionConfig from .base_session_service import ListSessionsResponse @@ -34,6 +36,28 @@ logger = logging.getLogger('google_adk.' + __name__) +def _light_copy(session: Session) -> Session: + """Returns a light copy of the session. + + Main difference between this and true shallow-copy is that container fields + (e.g., events and state) are also shallow-copied. What this means is appending + to events/state of the copied session won't affect the original while avoiding + the potentially expensive cost of a full/recursive deep-copy of all events and + state. + """ + copied_session = session.model_copy(deep=False) + copied_session.events = copy.copy(session.events) + copied_session.state = copy.copy(session.state) + return copied_session + + +def _copy_session(session: Session) -> Session: + if is_feature_enabled(FeatureName.IN_MEMORY_SESSION_SERVICE_LIGHT_COPY): + return _light_copy(session) + else: + return copy.deepcopy(session) + + class InMemorySessionService(BaseSessionService): """An in-memory implementation of the session service. @@ -124,7 +148,7 @@ def _create_session_impl( self.sessions[app_name][user_id] = {} self.sessions[app_name][user_id][session_id] = session - copied_session = copy.deepcopy(session) + copied_session = _copy_session(session) return self._merge_state(app_name, user_id, copied_session) @override @@ -175,7 +199,7 @@ def _get_session_impl( return None session = self.sessions[app_name][user_id].get(session_id) - copied_session = copy.deepcopy(session) + copied_session = _copy_session(session) if config: if config.num_recent_events is not None: @@ -247,13 +271,13 @@ def _list_sessions_impl( if user_id is None: for uid in list(self.sessions[app_name].keys()): for session in list(self.sessions[app_name][uid].values()): - copied_session = copy.deepcopy(session) + copied_session = _copy_session(session) copied_session.events = [] copied_session = self._merge_state(app_name, uid, copied_session) sessions_without_events.append(copied_session) else: for session in list(self.sessions[app_name][user_id].values()): - copied_session = copy.deepcopy(session) + copied_session = _copy_session(session) copied_session.events = [] copied_session = self._merge_state(app_name, user_id, copied_session) sessions_without_events.append(copied_session) diff --git a/tests/unittests/sessions/test_session_service.py b/tests/unittests/sessions/test_session_service.py index 7d6e7cbc33..2d7d89f15f 100644 --- a/tests/unittests/sessions/test_session_service.py +++ b/tests/unittests/sessions/test_session_service.py @@ -23,6 +23,8 @@ from google.adk.errors.already_exists_error import AlreadyExistsError from google.adk.events.event import Event from google.adk.events.event_actions import EventActions +from google.adk.features import FeatureName +from google.adk.features import override_feature_enabled from google.adk.sessions import database_session_service from google.adk.sessions.base_session_service import GetSessionConfig from google.adk.sessions.database_session_service import DatabaseSessionService @@ -35,6 +37,7 @@ class SessionServiceType(enum.Enum): IN_MEMORY = 'IN_MEMORY' + IN_MEMORY_WITH_LIGHT_COPY_ENABLED = 'IN_MEMORY_WITH_LIGHT_COPY_ENABLED' DATABASE = 'DATABASE' SQLITE = 'SQLITE' @@ -48,22 +51,33 @@ def get_session_service( return DatabaseSessionService('sqlite+aiosqlite:///:memory:') if service_type == SessionServiceType.SQLITE: return SqliteSessionService(str(tmp_path / 'sqlite.db')) + if service_type == SessionServiceType.IN_MEMORY_WITH_LIGHT_COPY_ENABLED: + return InMemorySessionService() return InMemorySessionService() @pytest.fixture( params=[ SessionServiceType.IN_MEMORY, + SessionServiceType.IN_MEMORY_WITH_LIGHT_COPY_ENABLED, SessionServiceType.DATABASE, SessionServiceType.SQLITE, ] ) async def session_service(request, tmp_path): """Provides a session service and closes database backends on teardown.""" + if request.param == SessionServiceType.IN_MEMORY_WITH_LIGHT_COPY_ENABLED: + override_feature_enabled( + FeatureName.IN_MEMORY_SESSION_SERVICE_LIGHT_COPY, True + ) service = get_session_service(request.param, tmp_path) yield service if isinstance(service, DatabaseSessionService): await service.close() + if request.param == SessionServiceType.IN_MEMORY_WITH_LIGHT_COPY_ENABLED: + override_feature_enabled( + FeatureName.IN_MEMORY_SESSION_SERVICE_LIGHT_COPY, False + ) def test_database_session_service_enables_pool_pre_ping_by_default(): From 064f0d278e55e1e9fd6db1b6ccf3d1cb95cba47b Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Thu, 2 Apr 2026 13:21:36 -0700 Subject: [PATCH 125/192] fix: Disable tool caching for skill toolset Skill toolset's tools can change dynamically within a single invocation (when a skill is loaded) Co-authored-by: Kathy Wu PiperOrigin-RevId: 893666326 --- src/google/adk/tools/base_toolset.py | 4 +++- src/google/adk/tools/skill_toolset.py | 1 + tests/unittests/tools/test_base_toolset.py | 10 ++++++++++ tests/unittests/tools/test_skill_toolset.py | 7 ++++--- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/google/adk/tools/base_toolset.py b/src/google/adk/tools/base_toolset.py index 0fe06e7363..25f0d6a2a2 100644 --- a/src/google/adk/tools/base_toolset.py +++ b/src/google/adk/tools/base_toolset.py @@ -82,6 +82,7 @@ def __init__( self.tool_name_prefix = tool_name_prefix self._cached_invocation_id: Optional[str] = None self._cached_prefixed_tools: Optional[list[BaseTool]] = None + self._use_invocation_cache = True @abstractmethod async def get_tools( @@ -117,7 +118,8 @@ async def get_tools_with_prefix( invocation_id = readonly_context.invocation_id if readonly_context else None if ( - self._cached_prefixed_tools is not None + self._use_invocation_cache + and self._cached_prefixed_tools is not None and self._cached_invocation_id == invocation_id ): return self._cached_prefixed_tools diff --git a/src/google/adk/tools/skill_toolset.py b/src/google/adk/tools/skill_toolset.py index 3ea1f2bfe4..c74f29549b 100644 --- a/src/google/adk/tools/skill_toolset.py +++ b/src/google/adk/tools/skill_toolset.py @@ -700,6 +700,7 @@ def __init__( self._skills = {skill.name: skill for skill in skills} self._code_executor = code_executor self._script_timeout = script_timeout + self._use_invocation_cache = False self._provided_tools_by_name = {} self._provided_toolsets = [] diff --git a/tests/unittests/tools/test_base_toolset.py b/tests/unittests/tools/test_base_toolset.py index d41dce63d3..cdb7808db7 100644 --- a/tests/unittests/tools/test_base_toolset.py +++ b/tests/unittests/tools/test_base_toolset.py @@ -438,3 +438,13 @@ async def test_get_tools_with_prefix_caching(): assert len(tools3) == 1 assert tools3 is not tools1 # Should be a new list instance assert tools3[0].name == 'test_tool1' + + # Test disabling caching + toolset._use_invocation_cache = False + tools4 = await toolset.get_tools_with_prefix( + readonly_context=readonly_context2 + ) + tools5 = await toolset.get_tools_with_prefix( + readonly_context=readonly_context2 + ) + assert tools4 is not tools5 diff --git a/tests/unittests/tools/test_skill_toolset.py b/tests/unittests/tools/test_skill_toolset.py index 3e8ca66377..09efff4d9a 100644 --- a/tests/unittests/tools/test_skill_toolset.py +++ b/tests/unittests/tools/test_skill_toolset.py @@ -1340,8 +1340,8 @@ def my_func(): ctx = _make_tool_context_with_agent() # Initial tools (only core) - tools = await toolset.get_tools(readonly_context=ctx) - assert len(tools) == 4 + tools1 = await toolset.get_tools_with_prefix(readonly_context=ctx) + assert len(tools1) == 4 # Activate skills load_tool = skill_toolset.LoadSkillTool(toolset) @@ -1349,7 +1349,8 @@ def my_func(): await load_tool.run_async(args={"name": "skill2"}, tool_context=ctx) # Dynamic tools should now be resolved - tools = await toolset.get_tools(readonly_context=ctx) + tools = await toolset.get_tools_with_prefix(readonly_context=ctx) + assert tools is not tools1 tool_names = {t.name for t in tools} # Core tools From 203d7b7dfb35877bece06bfa27477d84c3760456 Mon Sep 17 00:00:00 2001 From: Yifan Wang Date: Thu, 2 Apr 2026 15:22:02 -0700 Subject: [PATCH 126/192] chore: Add a new endpoint to fetch the base agent graph in DOT format Co-authored-by: Yifan Wang PiperOrigin-RevId: 893730378 --- src/google/adk/cli/adk_web_server.py | 31 ++++++++++++++++++++++++++++ src/google/adk/cli/agent_graph.py | 7 +++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/google/adk/cli/adk_web_server.py b/src/google/adk/cli/adk_web_server.py index 927cd7ad03..e4c837f899 100644 --- a/src/google/adk/cli/adk_web_server.py +++ b/src/google/adk/cli/adk_web_server.py @@ -1906,6 +1906,37 @@ async def event_generator(): media_type="text/event-stream", ) + @app.get( + "/dev/{app_name}/graph", + response_model_exclude_none=True, + tags=[TAG_DEBUG], + ) + async def get_app_graph_dot( + app_name: str, dark_mode: bool = False + ) -> GetEventGraphResult | dict: + """Returns the base agent graph in DOT format without any highlights. + + This endpoint allows the frontend to fetch the graph structure once + and compute highlights client-side for better performance. + + Args: + app_name: The name of the agent/app + dark_mode: Whether to use dark theme background color + """ + agent_or_app = self.agent_loader.load_agent(app_name) + root_agent = self._get_root_agent(agent_or_app) + + # Get graph with NO highlights (empty list) and specified theme + dot_graph = await agent_graph.get_agent_graph( + root_agent, [], dark_mode=dark_mode + ) + + if dot_graph and isinstance(dot_graph, graphviz.Digraph): + return GetEventGraphResult(dot_src=dot_graph.source) + else: + return {} + + # TODO: This endpoint can be removed once we update adk web to stop consuming it @app.get( "/apps/{app_name}/users/{user_id}/sessions/{session_id}/events/{event_id}/graph", response_model_exclude_none=True, diff --git a/src/google/adk/cli/agent_graph.py b/src/google/adk/cli/agent_graph.py index ffb7114522..84166c39d9 100644 --- a/src/google/adk/cli/agent_graph.py +++ b/src/google/adk/cli/agent_graph.py @@ -282,9 +282,12 @@ def draw_edge(from_name, to_name): draw_edge(agent.name, get_node_name(tool)) -async def get_agent_graph(root_agent, highlights_pairs, image=False): +async def get_agent_graph( + root_agent, highlights_pairs, image=False, dark_mode=True +): + bg_color = '#333537' if dark_mode else '#ffffff' graph = graphviz.Digraph( - graph_attr={'rankdir': 'LR', 'bgcolor': '#333537'}, strict=True + graph_attr={'rankdir': 'LR', 'bgcolor': bg_color}, strict=True ) await build_graph(graph, root_agent, highlights_pairs) if image: From 33d48472cfaa1ff10836a0b5629e5f37c41797ed Mon Sep 17 00:00:00 2001 From: "Wei (Jack) Sun" Date: Thu, 2 Apr 2026 15:31:17 -0700 Subject: [PATCH 127/192] chore: merge release v1.28.1 to main (#5122) Co-authored-by: Jacksunwei <1281348+Jacksunwei@users.noreply.github.com> Co-authored-by: Liang Wu Co-authored-by: Sasha Sobran Co-authored-by: Ankur Sharma --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 13 +++++++++++++ src/google/adk/version.py | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index bac4ebcfdc..b0daa7d753 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.28.0" + ".": "1.28.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a1fabb0da..34048e1e98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [1.28.1](https://github.com/google/adk-python/compare/v1.28.0...v1.28.1) (2026-04-02) + + +### Features + +* **live:** support live for `gemini-3.1-flash-live-preview` model ([ee69661](https://github.com/google/adk-python/commit/ee69661a616056fa89e0ec2188aaa59bd714d8c9)) + + +### Bug Fixes + +* Disallow args on /builder and Add warning about Web UI usage to CLI help ([f037f68](https://github.com/google/adk-python/commit/f037f68d67ae1bd16b00df0c7523fb67cbd1e911)) +* **live:** Buffer tool calls and emit them together upon turn completion ([081adbd](https://github.com/google/adk-python/commit/081adbdfa41490e4868b028a1cdabceb811a7505)) + ## [1.28.0](https://github.com/google/adk-python/compare/v1.27.5...v1.28.0) (2026-03-26) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index a020c76372..ed58e782e7 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "1.28.0" +__version__ = "1.28.1" From f641b1a219b041659e6d429c47974bc9e5cfe1af Mon Sep 17 00:00:00 2001 From: Divyansh Shukla Date: Thu, 2 Apr 2026 15:43:39 -0700 Subject: [PATCH 128/192] feat: Implement robust process group management and timeouts in BashTool Refactors BashTool to use start_new_session=True and os.killpg for proper process isolation and cleanup on timeouts or errors. PiperOrigin-RevId: 893740978 --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 13 ---- src/google/adk/tools/bash_tool.py | 81 ++++++++++++++++++++----- src/google/adk/version.py | 2 +- tests/unittests/tools/test_bash_tool.py | 6 +- 5 files changed, 73 insertions(+), 31 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index b0daa7d753..bac4ebcfdc 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.28.1" + ".": "1.28.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 34048e1e98..8a1fabb0da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,18 +1,5 @@ # Changelog -## [1.28.1](https://github.com/google/adk-python/compare/v1.28.0...v1.28.1) (2026-04-02) - - -### Features - -* **live:** support live for `gemini-3.1-flash-live-preview` model ([ee69661](https://github.com/google/adk-python/commit/ee69661a616056fa89e0ec2188aaa59bd714d8c9)) - - -### Bug Fixes - -* Disallow args on /builder and Add warning about Web UI usage to CLI help ([f037f68](https://github.com/google/adk-python/commit/f037f68d67ae1bd16b00df0c7523fb67cbd1e911)) -* **live:** Buffer tool calls and emit them together upon turn completion ([081adbd](https://github.com/google/adk-python/commit/081adbdfa41490e4868b028a1cdabceb811a7505)) - ## [1.28.0](https://github.com/google/adk-python/compare/v1.27.5...v1.28.0) (2026-03-26) diff --git a/src/google/adk/tools/bash_tool.py b/src/google/adk/tools/bash_tool.py index fc728e8123..b6c85b5149 100644 --- a/src/google/adk/tools/bash_tool.py +++ b/src/google/adk/tools/bash_tool.py @@ -18,8 +18,11 @@ import asyncio import dataclasses +import logging +import os import pathlib import shlex +import signal from typing import Any from typing import Optional @@ -132,26 +135,74 @@ async def run_async( elif not tool_context.tool_confirmation.confirmed: return {"error": "This tool call is rejected."} - process = await asyncio.create_subprocess_exec( - *shlex.split(command), - cwd=str(self._workspace), - stdout=asyncio.subprocess.PIPE, - stderr=asyncio.subprocess.PIPE, - ) + stdout = None + stderr = None try: - stdout, stderr = await asyncio.wait_for(process.communicate(), timeout=30) + process = await asyncio.create_subprocess_exec( + *shlex.split(command), + cwd=str(self._workspace), + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + start_new_session=True, + ) + + try: + stdout, stderr = await asyncio.wait_for( + process.communicate(), timeout=30 + ) + except asyncio.TimeoutError: + try: + os.killpg(process.pid, signal.SIGKILL) + except ProcessLookupError: + pass + stdout, stderr = await process.communicate() + return { + "error": "Command timed out after 30 seconds.", + "stdout": ( + stdout.decode(errors="replace") + if stdout + else "" + ), + "stderr": ( + stderr.decode(errors="replace") + if stderr + else "" + ), + "returncode": process.returncode, + } + finally: + try: + if process.pid: + os.killpg(process.pid, signal.SIGKILL) + except ProcessLookupError: + pass + return { "stdout": ( - stdout.decode() if stdout is not None else "" + stdout.decode(errors="replace") + if stdout + else "" ), "stderr": ( - stderr.decode() if stderr is not None else "" + stderr.decode(errors="replace") + if stderr + else "" ), "returncode": process.returncode, } - except asyncio.TimeoutError: - try: - process.kill() - except ProcessLookupError: - pass - return {"error": "Command timed out after 30 seconds."} + except Exception as e: # pylint: disable=broad-except + logger = logging.getLogger("google_adk." + __name__) + logger.exception("ExecuteBashTool execution failed") + + stdout_res = ( + stdout.decode(errors="replace") if stdout else "" + ) + stderr_res = ( + stderr.decode(errors="replace") if stderr else "" + ) + + return { + "error": f"Execution failed: {str(e)}", + "stdout": stdout_res, + "stderr": stderr_res, + } diff --git a/src/google/adk/version.py b/src/google/adk/version.py index ed58e782e7..a020c76372 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "1.28.1" +__version__ = "1.28.0" diff --git a/tests/unittests/tools/test_bash_tool.py b/tests/unittests/tools/test_bash_tool.py index b5e1f63b8e..2aebd321cd 100644 --- a/tests/unittests/tools/test_bash_tool.py +++ b/tests/unittests/tools/test_bash_tool.py @@ -13,6 +13,7 @@ # limitations under the License. import asyncio +import signal from unittest import mock from google.adk.tools import bash_tool @@ -203,6 +204,8 @@ async def test_nonzero_returncode(self, workspace, tool_context_confirmed): async def test_timeout(self, workspace, tool_context_confirmed): tool = bash_tool.ExecuteBashTool(workspace=workspace) mock_process = mock.AsyncMock() + mock_process.pid = 12345 + mock_process.communicate.return_value = (b"", b"") with ( mock.patch.object( asyncio, @@ -213,14 +216,15 @@ async def test_timeout(self, workspace, tool_context_confirmed): mock.patch.object( asyncio, "wait_for", autospec=True, side_effect=asyncio.TimeoutError ), + mock.patch("os.killpg") as mock_killpg, ): result = await tool.run_async( args={"command": "python scripts/do_thing.py"}, tool_context=tool_context_confirmed, ) + mock_killpg.assert_called_with(12345, signal.SIGKILL) assert "error" in result assert "timed out" in result["error"].lower() - mock_process.kill.assert_called_once() @pytest.mark.asyncio async def test_cwd_is_workspace(self, workspace, tool_context_confirmed): From 7913a3b76432caf16953ea7b2a2cf4872baad417 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Fri, 3 Apr 2026 11:43:05 -0700 Subject: [PATCH 129/192] feat: Add auth scheme/credential support to MCP toolsets in Agent Registry This is also so that we can add Agent Identity support when it's ready. Co-authored-by: Kathy Wu PiperOrigin-RevId: 894180206 --- .../agent_registry/agent_registry.py | 53 +++++++++++-------- .../agent_registry/test_agent_registry.py | 36 +++++++++++++ 2 files changed, 68 insertions(+), 21 deletions(-) diff --git a/src/google/adk/integrations/agent_registry/agent_registry.py b/src/google/adk/integrations/agent_registry/agent_registry.py index 98c217e912..ea7d0020a2 100644 --- a/src/google/adk/integrations/agent_registry/agent_registry.py +++ b/src/google/adk/integrations/agent_registry/agent_registry.py @@ -25,10 +25,8 @@ from typing import Dict from typing import List from typing import Mapping -from typing import Optional from typing import Sequence from typing import TypedDict -from typing import Union from urllib.parse import parse_qs from urllib.parse import urlparse @@ -39,6 +37,8 @@ from a2a.types import TransportProtocol as A2ATransport from google.adk.agents.readonly_context import ReadonlyContext from google.adk.agents.remote_a2a_agent import RemoteA2aAgent +from google.adk.auth.auth_credential import AuthCredential +from google.adk.auth.auth_schemes import AuthScheme from google.adk.telemetry.tracing import GCP_MCP_SERVER_DESTINATION_ID from google.adk.tools.base_tool import BaseTool from google.adk.tools.mcp_tool.mcp_session_manager import SseConnectionParams @@ -75,11 +75,15 @@ def __init__( header_provider: ( Callable[[ReadonlyContext], Dict[str, str]] | None ) = None, + auth_scheme: AuthScheme | None = None, + auth_credential: AuthCredential | None = None, ): super().__init__( connection_params=connection_params, tool_name_prefix=tool_name_prefix, header_provider=header_provider, + auth_scheme=auth_scheme, + auth_credential=auth_credential, ) self.destination_resource_id = destination_resource_id @@ -143,11 +147,11 @@ class AgentRegistry: def __init__( self, - project_id: Optional[str] = None, - location: Optional[str] = None, - header_provider: Optional[ - Callable[[ReadonlyContext], Dict[str, str]] - ] = None, + project_id: str | None = None, + location: str | None = None, + header_provider: ( + Callable[[ReadonlyContext], Dict[str, str]] | None + ) = None, ): """Initializes the AgentRegistry client. @@ -190,7 +194,7 @@ def _get_auth_headers(self) -> Dict[str, str]: ) from e def _make_request( - self, path: str, params: Optional[Dict[str, Any]] = None + self, path: str, params: Dict[str, Any] | None = None ) -> Dict[str, Any]: """Helper function to make GET requests to the Agent Registry API.""" if path.startswith("projects/"): @@ -217,9 +221,9 @@ def _make_request( def _get_connection_uri( self, resource_details: Mapping[str, Any], - protocol_type: Optional[_ProtocolType] = None, - protocol_binding: Optional[A2ATransport] = None, - ) -> Optional[str]: + protocol_type: _ProtocolType | None = None, + protocol_binding: A2ATransport | None = None, + ) -> str | None: """Extracts the first matching URI based on type and binding filters.""" protocols = list(resource_details.get("protocols", [])) if "interfaces" in resource_details: @@ -249,9 +253,9 @@ def _clean_name(self, name: str) -> str: def list_mcp_servers( self, - filter_str: Optional[str] = None, - page_size: Optional[int] = None, - page_token: Optional[str] = None, + filter_str: str | None = None, + page_size: int | None = None, + page_token: str | None = None, ) -> Dict[str, Any]: """Fetches a list of MCP Servers.""" params = {} @@ -267,7 +271,12 @@ def get_mcp_server(self, name: str) -> Dict[str, Any]: """Retrieves details of a specific MCP Server.""" return self._make_request(name) - def get_mcp_toolset(self, mcp_server_name: str) -> McpToolset: + def get_mcp_toolset( + self, + mcp_server_name: str, + auth_scheme: AuthScheme | None = None, + auth_credential: AuthCredential | None = None, + ) -> McpToolset: """Constructs an McpToolset instance from a registered MCP Server.""" server_details = self.get_mcp_server(mcp_server_name) name = self._clean_name(server_details.get("displayName", mcp_server_name)) @@ -293,15 +302,17 @@ def get_mcp_toolset(self, mcp_server_name: str) -> McpToolset: connection_params=connection_params, tool_name_prefix=name, header_provider=self._header_provider, + auth_scheme=auth_scheme, + auth_credential=auth_credential, ) # --- Endpoint Methods --- def list_endpoints( self, - filter_str: Optional[str] = None, - page_size: Optional[int] = None, - page_token: Optional[str] = None, + filter_str: str | None = None, + page_size: int | None = None, + page_token: str | None = None, ) -> Dict[str, Any]: """Fetches a list of Endpoints.""" params = {} @@ -349,9 +360,9 @@ def get_model_name(self, endpoint_name: str) -> str: def list_agents( self, - filter_str: Optional[str] = None, - page_size: Optional[int] = None, - page_token: Optional[str] = None, + filter_str: str | None = None, + page_size: int | None = None, + page_token: str | None = None, ) -> Dict[str, Any]: """Fetches a list of registered A2A Agents.""" params = {} diff --git a/tests/unittests/integrations/agent_registry/test_agent_registry.py b/tests/unittests/integrations/agent_registry/test_agent_registry.py index 2d09b5f41e..197f89df79 100644 --- a/tests/unittests/integrations/agent_registry/test_agent_registry.py +++ b/tests/unittests/integrations/agent_registry/test_agent_registry.py @@ -18,7 +18,10 @@ from unittest.mock import patch from a2a.types import TransportProtocol as A2ATransport +from fastapi.openapi.models import OAuth2 from google.adk.agents.remote_a2a_agent import RemoteA2aAgent +from google.adk.auth.auth_credential import AuthCredential +from google.adk.auth.auth_credential import OAuth2Auth from google.adk.integrations.agent_registry import _ProtocolType from google.adk.integrations.agent_registry import AgentRegistry from google.adk.telemetry.tracing import GCP_MCP_SERVER_DESTINATION_ID @@ -325,6 +328,39 @@ def test_get_mcp_toolset(self, mock_httpx, registry): assert isinstance(toolset, McpToolset) assert toolset.tool_name_prefix == "TestPrefix" + @patch("httpx.Client") + def test_get_mcp_toolset_with_auth(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = { + "displayName": "TestPrefix", + "interfaces": [{ + "url": "https://mcp.com", + "protocolBinding": A2ATransport.jsonrpc, + }], + } + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + auth_scheme = OAuth2(flows={}) + auth_credential = AuthCredential( + auth_type="oauth2", + oauth2=OAuth2Auth(client_id="test_id", client_secret="test_secret"), + ) + + toolset = registry.get_mcp_toolset( + "test-mcp", auth_scheme=auth_scheme, auth_credential=auth_credential + ) + assert isinstance(toolset, McpToolset) + auth_config = toolset.get_auth_config() + assert auth_config is not None + assert auth_config.auth_scheme == auth_scheme + assert auth_config.raw_auth_credential == auth_credential + @patch("httpx.Client") def test_get_remote_a2a_agent(self, mock_httpx, registry): mock_response = MagicMock() From 898c4e5f78b60c4c4732c7cd19ff2da9a64964a1 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Fri, 3 Apr 2026 12:00:56 -0700 Subject: [PATCH 130/192] fix: empty events_iterator assignment PiperOrigin-RevId: 894188179 --- .../adk/sessions/vertex_ai_session_service.py | 7 ++++--- .../sessions/test_vertex_ai_session_service.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/google/adk/sessions/vertex_ai_session_service.py b/src/google/adk/sessions/vertex_ai_session_service.py index cc77c2e3a7..7ded1fc205 100644 --- a/src/google/adk/sessions/vertex_ai_session_service.py +++ b/src/google/adk/sessions/vertex_ai_session_service.py @@ -176,7 +176,7 @@ async def get_session( get_session_response = await api_client.agent_engines.sessions.get( name=session_resource_name ) - events_iterator = [] + events_iterator = None else: get_session_response, events_iterator = await asyncio.gather( api_client.agent_engines.sessions.get(name=session_resource_name), @@ -210,8 +210,9 @@ async def get_session( # to discard events written milliseconds after the session resource was # updated. Clock skew between those writes can otherwise drop tool_result # events and permanently break the replayed conversation. - async for event in events_iterator: - session.events.append(_from_api_event(event)) + if events_iterator is not None: + async for event in events_iterator: + session.events.append(_from_api_event(event)) if config: # Filter events based on num_recent_events. diff --git a/tests/unittests/sessions/test_vertex_ai_session_service.py b/tests/unittests/sessions/test_vertex_ai_session_service.py index 20fdbe3c6d..8f2b44c68f 100644 --- a/tests/unittests/sessions/test_vertex_ai_session_service.py +++ b/tests/unittests/sessions/test_vertex_ai_session_service.py @@ -696,6 +696,20 @@ async def test_get_session_with_many_events(mock_api_client_instance): assert len(session.events) == MANY_EVENTS_COUNT +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +async def test_get_session_with_num_recent_events_zero(): + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', + user_id='user', + session_id='2', + config=GetSessionConfig(num_recent_events=0), + ) + assert session is not None + assert len(session.events) == 0 + + @pytest.mark.asyncio @pytest.mark.usefixtures('mock_get_api_client') async def test_list_sessions(): From 8850916e1908ace19a058102f0392eee08349d60 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Fri, 3 Apr 2026 15:04:32 -0700 Subject: [PATCH 131/192] feat: Add Easy GCP support to ADK CLI Co-authored-by: Kathy Wu PiperOrigin-RevId: 894266946 --- src/google/adk/cli/cli_create.py | 121 ++++++++++++- src/google/adk/cli/utils/gcp_utils.py | 173 +++++++++++++++++++ tests/unittests/cli/utils/test_cli_create.py | 138 +++++++++++++++ tests/unittests/cli/utils/test_gcp_utils.py | 159 +++++++++++++++++ 4 files changed, 586 insertions(+), 5 deletions(-) create mode 100644 src/google/adk/cli/utils/gcp_utils.py create mode 100644 tests/unittests/cli/utils/test_gcp_utils.py diff --git a/src/google/adk/cli/cli_create.py b/src/google/adk/cli/cli_create.py index a1be9a0273..c5bf7c3819 100644 --- a/src/google/adk/cli/cli_create.py +++ b/src/google/adk/cli/cli_create.py @@ -22,6 +22,7 @@ import click from ..apps.app import validate_app_name +from .utils import gcp_utils _INIT_PY_TEMPLATE = """\ from . import agent @@ -61,11 +62,26 @@ https://google.github.io/adk-docs/agents/models """ +_EXPRESS_TOS_MSG = """ +Google Cloud Express Mode Terms of Service: https://cloud.google.com/terms/google-cloud-express +By continuing, you agree to the Terms of Service for Vertex AI Express Mode. +Would you like to proceed? (yes/no) +""" + +_NOT_ELIGIBLE_MSG = """ +You are not eligible for Express Mode. +Please follow these instructions to set up a full Google Cloud project: +https://google.github.io/adk-docs/get-started/quickstart/#gemini---google-cloud-vertex-ai +""" + _SUCCESS_MSG_CODE = """ Agent created in {agent_folder}: - .env - __init__.py - agent.py + +⚠️ WARNING: Secrets (like GOOGLE_API_KEY) are stored in .env. +Please ensure .env is added to your .gitignore to avoid committing secrets to version control. """ _SUCCESS_MSG_CONFIG = """ @@ -73,6 +89,9 @@ - .env - __init__.py - root_agent.yaml + +⚠️ WARNING: Secrets (like GOOGLE_API_KEY) are stored in .env. +Please ensure .env is added to your .gitignore to avoid committing secrets to version control. """ @@ -187,10 +206,10 @@ def _generate_files( with open(dotenv_file_path, "w", encoding="utf-8") as f: lines = [] - if google_api_key: - lines.append("GOOGLE_GENAI_USE_VERTEXAI=0") - elif google_cloud_project and google_cloud_region: + if google_cloud_project and google_cloud_region: lines.append("GOOGLE_GENAI_USE_VERTEXAI=1") + elif google_api_key: + lines.append("GOOGLE_GENAI_USE_VERTEXAI=0") if google_api_key: lines.append(f"GOOGLE_API_KEY={google_api_key}") if google_cloud_project: @@ -247,8 +266,8 @@ def _prompt_to_choose_backend( A tuple of (google_api_key, google_cloud_project, google_cloud_region). """ backend_choice = click.prompt( - "1. Google AI\n2. Vertex AI\nChoose a backend", - type=click.Choice(["1", "2"]), + "1. Google AI\n2. Vertex AI\n3. Login with Google\nChoose a backend", + type=click.Choice(["1", "2", "3"]), ) if backend_choice == "1": google_api_key = _prompt_for_google_api_key(google_api_key) @@ -256,9 +275,101 @@ def _prompt_to_choose_backend( click.secho(_GOOGLE_CLOUD_SETUP_MSG, fg="green") google_cloud_project = _prompt_for_google_cloud(google_cloud_project) google_cloud_region = _prompt_for_google_cloud_region(google_cloud_region) + elif backend_choice == "3": + google_api_key, google_cloud_project, google_cloud_region = ( + _handle_login_with_google() + ) return google_api_key, google_cloud_project, google_cloud_region +def _handle_login_with_google() -> ( + Tuple[Optional[str], Optional[str], Optional[str]] +): + """Handles the "Login with Google" flow.""" + if not gcp_utils.check_adc(): + click.secho( + "No Application Default Credentials found. " + "Opening browser for login...", + fg="yellow", + ) + try: + gcp_utils.login_adc() + except RuntimeError as e: + click.secho(str(e), fg="red") + raise click.Abort() + + # Check for existing Express project + express_project = gcp_utils.retrieve_express_project() + if express_project: + api_key = express_project.get("api_key") + project_id = express_project.get("project_id") + region = express_project.get("region", "us-central1") + if project_id: + click.secho(f"Using existing Express project: {project_id}", fg="green") + return api_key, project_id, region + + # Check for existing full GCP projects + projects = gcp_utils.list_gcp_projects(limit=20) + if projects: + click.secho("Recently created Google Cloud projects found:", fg="green") + click.echo("0. Enter project ID manually") + for i, (p_id, p_name) in enumerate(projects, 1): + click.echo(f"{i}. {p_name} ({p_id})") + + project_index = click.prompt( + "Select a project", + type=click.IntRange(0, len(projects)), + ) + if project_index == 0: + selected_project_id = _prompt_for_google_cloud(None) + else: + selected_project_id = projects[project_index - 1][0] + region = _prompt_for_google_cloud_region(None) + return None, selected_project_id, region + else: + if click.confirm( + "No projects found automatically. Would you like to enter one" + " manually?", + default=False, + ): + selected_project_id = _prompt_for_google_cloud(None) + region = _prompt_for_google_cloud_region(None) + return None, selected_project_id, region + + # Check Express eligibility + if gcp_utils.check_express_eligibility(): + click.secho(_EXPRESS_TOS_MSG, fg="yellow") + if click.confirm("Do you accept the Terms of Service?", default=False): + selected_region = click.prompt( + """\ +Choose a region for Express Mode: +1. us-central1 +2. europe-west1 +3. asia-southeast1 +Choose region""", + type=click.Choice(["1", "2", "3"]), + default="1", + ) + region_map = { + "1": "us-central1", + "2": "europe-west1", + "3": "asia-southeast1", + } + region = region_map[selected_region] + express_info = gcp_utils.sign_up_express(location=region) + api_key = express_info.get("api_key") + project_id = express_info.get("project_id") + region = express_info.get("region", region) + click.secho( + f"Express Mode project created: {project_id}", + fg="green", + ) + return api_key, project_id, region + + click.secho(_NOT_ELIGIBLE_MSG, fg="red") + raise click.Abort() + + def _prompt_to_choose_type() -> str: """Prompts user to choose type of agent to create.""" type_choice = click.prompt( diff --git a/src/google/adk/cli/utils/gcp_utils.py b/src/google/adk/cli/utils/gcp_utils.py new file mode 100644 index 0000000000..ac186a2f91 --- /dev/null +++ b/src/google/adk/cli/utils/gcp_utils.py @@ -0,0 +1,173 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Utilities for GCP authentication and Vertex AI Express Mode.""" + +from __future__ import annotations + +import subprocess +from typing import Any +from typing import Dict +from typing import List +from typing import Optional +from typing import Tuple + +import google.auth +import google.auth.exceptions +from google.auth.transport.requests import AuthorizedSession +from google.auth.transport.requests import Request +from google.cloud import resourcemanager_v3 +import requests + +_VERTEX_AI_ENDPOINT = "https://{location}-aiplatform.googleapis.com/v1beta1" + + +def check_adc() -> bool: + """Checks if Application Default Credentials exist.""" + try: + google.auth.default() + return True + except google.auth.exceptions.DefaultCredentialsError: + return False + + +def login_adc() -> None: + """Prompts user to login via gcloud ADC.""" + try: + subprocess.run( + ["gcloud", "auth", "application-default", "login"], check=True + ) + except (subprocess.CalledProcessError, FileNotFoundError): + raise RuntimeError( + "gcloud is not installed or failed to run. " + "Please install gcloud to login to Application Default Credentials." + ) + + +def get_access_token() -> str: + """Gets the ADC access token.""" + try: + credentials, _ = google.auth.default() + if not credentials.valid: + credentials.refresh(Request()) + return credentials.token or "" + except google.auth.exceptions.DefaultCredentialsError: + raise RuntimeError("Application Default Credentials not found.") + + +def _call_vertex_express_api( + method: str, + action: str, + location: str = "us-central1", + data: Optional[Dict[str, Any]] = None, + params: Optional[Dict[str, Any]] = None, +) -> Dict[str, Any]: + """Calls a Vertex AI Express API.""" + credentials, _ = google.auth.default() + session = AuthorizedSession(credentials) + url = f"{_VERTEX_AI_ENDPOINT.format(location=location)}/vertexExpress{action}" + headers = { + "Content-Type": "application/json", + } + + if method == "GET": + response = session.get(url, headers=headers, params=params) + elif method == "POST": + response = session.post(url, headers=headers, json=data, params=params) + else: + raise ValueError(f"Unsupported method: {method}") + + response.raise_for_status() + return response.json() + + +def retrieve_express_project( + location: str = "us-central1", +) -> Optional[Dict[str, Any]]: + """Retrieves existing Express project info.""" + try: + response = _call_vertex_express_api( + "GET", + ":retrieveExpressProject", + location=location, + params={"get_default_api_key": True}, + ) + project = response.get("expressProject") + if not project: + return None + + return { + "project_id": project.get("projectId"), + "api_key": project.get("defaultApiKey"), + "region": project.get("region", location), + } + except requests.exceptions.HTTPError as e: + if e.response.status_code == 404: + return None + raise + + +def check_express_eligibility( + location: str = "us-central1", +) -> bool: + """Checks if user is eligible for Express Mode.""" + try: + result = _call_vertex_express_api( + "GET", "/Eligibility:check", location=location + ) + return result.get("eligibility") == "IN_SCOPE" + except (requests.exceptions.HTTPError, KeyError) as e: + return False + + +def sign_up_express( + location: str = "us-central1", +) -> Dict[str, Any]: + """Signs up for Express Mode.""" + project = _call_vertex_express_api( + "POST", + ":signUp", + location=location, + data={"region": location, "tos_accepted": True}, + ) + return { + "project_id": project.get("projectId"), + "api_key": project.get("defaultApiKey"), + "region": project.get("region", location), + } + + +def list_gcp_projects(limit: int = 20) -> List[Tuple[str, str]]: + """Lists GCP projects available to the user. + + Args: + limit: The maximum number of projects to return. + + Returns: + A list of (project_id, name) tuples. + """ + try: + client = resourcemanager_v3.ProjectsClient() + search_results = client.search_projects() + + projects = [] + for project in search_results: + if len(projects) >= limit: + break + projects.append( + (project.project_id, project.display_name or project.project_id) + ) + return projects + except Exception: + return [] diff --git a/tests/unittests/cli/utils/test_cli_create.py b/tests/unittests/cli/utils/test_cli_create.py index 0d76ab8a54..520245b3fc 100644 --- a/tests/unittests/cli/utils/test_cli_create.py +++ b/tests/unittests/cli/utils/test_cli_create.py @@ -26,6 +26,7 @@ import click import google.adk.cli.cli_create as cli_create +from google.adk.cli.utils import gcp_utils import pytest @@ -87,6 +88,23 @@ def test_generate_files_with_gcp(agent_folder: Path) -> None: assert "GOOGLE_GENAI_USE_VERTEXAI=1" in env_content +def test_generate_files_with_express_mode(agent_folder: Path) -> None: + """Files should be created with Vertex AI backend when both project and API key are present (Express Mode).""" + cli_create._generate_files( + str(agent_folder), + google_api_key="express-api-key", + google_cloud_project="express-project-id", + google_cloud_region="us-central1", + model="gemini-2.0-flash-001", + type="code", + ) + + env_content = (agent_folder / ".env").read_text() + assert "GOOGLE_GENAI_USE_VERTEXAI=1" in env_content + assert "GOOGLE_API_KEY=express-api-key" in env_content + assert "GOOGLE_CLOUD_PROJECT=express-project-id" in env_content + + def test_generate_files_overwrite(agent_folder: Path) -> None: """Existing files should be overwritten when generating again.""" agent_folder.mkdir(parents=True, exist_ok=True) @@ -284,6 +302,87 @@ def test_prompt_to_choose_backend_vertex( assert region == "region" +def test_prompt_to_choose_backend_login( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Choosing Login with Google returns (api_key, project, region) from handler.""" + monkeypatch.setattr(click, "prompt", lambda *a, **k: "3") + monkeypatch.setattr( + cli_create, + "_handle_login_with_google", + lambda: ("api-key", "proj", "region"), + ) + + api_key, proj, region = cli_create._prompt_to_choose_backend(None, None, None) + assert api_key == "api-key" + assert proj == "proj" + assert region == "region" + + +def test_handle_login_with_google_existing_express( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Handler should return existing Express project if found.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr( + gcp_utils, + "retrieve_express_project", + lambda: {"api_key": "key", "project_id": "proj", "region": "us-central1"}, + ) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key == "key" + assert proj == "proj" + assert region == "us-central1" + + +def test_handle_login_with_google_select_gcp_project( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Handler should prompt for project selection if no Express project found.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr( + gcp_utils, "list_gcp_projects", lambda limit: [("p1", "Project 1")] + ) + monkeypatch.setattr(click, "prompt", lambda *a, **k: 1) + monkeypatch.setattr( + cli_create, "_prompt_for_google_cloud_region", lambda _v: "us-east1" + ) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key is None + assert proj == "p1" + assert region == "us-east1" + + +def test_handle_login_with_google_express_signup( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Handler should sign up for Express if eligible and user accepts TOS.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr(gcp_utils, "list_gcp_projects", lambda limit: []) + monkeypatch.setattr(gcp_utils, "check_express_eligibility", lambda: True) + confirms = iter([False, True]) + monkeypatch.setattr(click, "confirm", lambda *a, **k: next(confirms)) + monkeypatch.setattr(click, "prompt", lambda *a, **k: "1") + monkeypatch.setattr( + gcp_utils, + "sign_up_express", + lambda location="us-central1": { + "api_key": "new-key", + "project_id": "new-proj", + "region": location, + }, + ) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key == "new-key" + assert proj == "new-proj" + assert region == "us-central1" + + # prompt_str def test_prompt_str_non_empty(monkeypatch: pytest.MonkeyPatch) -> None: """_prompt_str should retry until a non-blank string is provided.""" @@ -317,3 +416,42 @@ def test_get_gcp_region_from_gcloud_fail( ), ) assert cli_create._get_gcp_region_from_gcloud() == "" + + +def test_handle_login_with_google_manual_project( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Handler should allow manual project ID entry when '0' is selected.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr( + gcp_utils, "list_gcp_projects", lambda limit: [("p1", "Project 1")] + ) + # First prompt is for project selection (0), second is for manual ID entry, + # third is for region selection. + prompts = iter([0, "manual-proj", "us-east1"]) + monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key is None + assert proj == "manual-proj" + assert region == "us-east1" + + +def test_handle_login_with_google_empty_projects_manual_entry( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """Handler should allow manual entry if no projects are found and user accepts.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr(gcp_utils, "list_gcp_projects", lambda limit: []) + + # User says Yes to "enter manually", then provides project ID and region + prompts = iter(["manual-proj", "us-east1"]) + monkeypatch.setattr(click, "confirm", lambda *a, **k: True) + monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key is None + assert proj == "manual-proj" + assert region == "us-east1" diff --git a/tests/unittests/cli/utils/test_gcp_utils.py b/tests/unittests/cli/utils/test_gcp_utils.py new file mode 100644 index 0000000000..962359eb4b --- /dev/null +++ b/tests/unittests/cli/utils/test_gcp_utils.py @@ -0,0 +1,159 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for gcp_utils.""" + +import unittest +from unittest import mock + +from google.adk.cli.utils import gcp_utils +import google.auth +import google.auth.exceptions +import requests + + +class TestGcpUtils(unittest.TestCase): + + @mock.patch("google.auth.default") + def test_check_adc_success(self, mock_auth_default): + mock_auth_default.return_value = (mock.Mock(), "test-project") + self.assertTrue(gcp_utils.check_adc()) + + @mock.patch("google.auth.default") + def test_check_adc_failure(self, mock_auth_default): + mock_auth_default.side_effect = ( + google.auth.exceptions.DefaultCredentialsError() + ) + self.assertFalse(gcp_utils.check_adc()) + + @mock.patch("google.auth.default") + def test_get_access_token(self, mock_auth_default): + mock_creds = mock.Mock() + mock_creds.token = "test-token" + mock_creds.valid = True + mock_auth_default.return_value = (mock_creds, "test-project") + self.assertEqual(gcp_utils.get_access_token(), "test-token") + + @mock.patch("google.adk.cli.utils.gcp_utils.AuthorizedSession") + @mock.patch("google.auth.default") + def test_retrieve_express_project_success( + self, mock_auth_default, mock_session_cls + ): + mock_auth_default.return_value = (mock.Mock(), "test-project-id") + + mock_session = mock.Mock() + mock_session_cls.return_value = mock_session + mock_response = mock.Mock() + mock_response.json.return_value = { + "expressProject": { + "projectId": "test-project", + "defaultApiKey": "test-api-key", + "region": "us-central1", + } + } + mock_session.get.return_value = mock_response + + result = gcp_utils.retrieve_express_project() + self.assertEqual(result["project_id"], "test-project") + self.assertEqual(result["api_key"], "test-api-key") + self.assertEqual(result["region"], "us-central1") + mock_session.get.assert_called_once() + args, kwargs = mock_session.get.call_args + self.assertEqual( + args[0], + "https://us-central1-aiplatform.googleapis.com/v1beta1/vertexExpress:retrieveExpressProject", + ) + self.assertEqual(kwargs["params"], {"get_default_api_key": True}) + + @mock.patch("google.adk.cli.utils.gcp_utils.AuthorizedSession") + @mock.patch("google.auth.default") + def test_retrieve_express_project_not_found( + self, mock_auth_default, mock_session_cls + ): + mock_auth_default.return_value = (mock.Mock(), "test-project-id") + + mock_session = mock.Mock() + mock_session_cls.return_value = mock_session + mock_response = mock.Mock() + mock_response.status_code = 404 + mock_response.raise_for_status.side_effect = requests.exceptions.HTTPError( + response=mock_response + ) + mock_session.get.return_value = mock_response + + result = gcp_utils.retrieve_express_project() + self.assertIsNone(result) + + @mock.patch("google.adk.cli.utils.gcp_utils.AuthorizedSession") + @mock.patch("google.auth.default") + def test_check_express_eligibility(self, mock_auth_default, mock_session_cls): + mock_auth_default.return_value = (mock.Mock(), "test-project-id") + + mock_session = mock.Mock() + mock_session_cls.return_value = mock_session + mock_response = mock.Mock() + mock_response.json.return_value = {"eligibility": "IN_SCOPE"} + mock_session.get.return_value = mock_response + + self.assertTrue(gcp_utils.check_express_eligibility()) + + @mock.patch("google.adk.cli.utils.gcp_utils.AuthorizedSession") + @mock.patch("google.auth.default") + def test_sign_up_express(self, mock_auth_default, mock_session_cls): + mock_auth_default.return_value = (mock.Mock(), "test-project-id") + + mock_session = mock.Mock() + mock_session_cls.return_value = mock_session + mock_response = mock.Mock() + mock_response.json.return_value = { + "projectId": "new-project", + "defaultApiKey": "new-api-key", + "region": "us-central1", + } + mock_session.post.return_value = mock_response + + result = gcp_utils.sign_up_express() + self.assertEqual(result["project_id"], "new-project") + self.assertEqual(result["api_key"], "new-api-key") + args, _ = mock_session.post.call_args + self.assertEqual( + args[0], + "https://us-central1-aiplatform.googleapis.com/v1beta1/vertexExpress:signUp", + ) + + @mock.patch( + "google.adk.cli.utils.gcp_utils.resourcemanager_v3.ProjectsClient" + ) + def test_list_gcp_projects(self, mock_client_cls): + mock_client = mock.Mock() + mock_client_cls.return_value = mock_client + + mock_project1 = mock.Mock() + mock_project1.project_id = "p1" + mock_project1.display_name = "Project 1" + + mock_project2 = mock.Mock() + mock_project2.project_id = "p2" + mock_project2.display_name = None + + mock_client.search_projects.return_value = [mock_project1, mock_project2] + + projects = gcp_utils.list_gcp_projects() + self.assertEqual(len(projects), 2) + self.assertEqual(projects[0], ("p1", "Project 1")) + self.assertEqual(projects[1], ("p2", "p2")) + + +if __name__ == "__main__": + unittest.main() From e1913a6b411aec9e8774ca92ea39531b085c43f0 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Fri, 3 Apr 2026 15:45:41 -0700 Subject: [PATCH 132/192] feat: Add custom session id functionality to vertex ai session service PiperOrigin-RevId: 894285971 --- .../adk/sessions/vertex_ai_session_service.py | 9 ++---- .../test_vertex_ai_session_service.py | 32 +++++++++++++------ 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/google/adk/sessions/vertex_ai_session_service.py b/src/google/adk/sessions/vertex_ai_session_service.py index 7ded1fc205..8025821975 100644 --- a/src/google/adk/sessions/vertex_ai_session_service.py +++ b/src/google/adk/sessions/vertex_ai_session_service.py @@ -115,16 +115,11 @@ async def create_session( Returns: The created session. """ - - if session_id: - raise ValueError( - 'User-provided Session id is not supported for' - ' VertexAISessionService.' - ) - reasoning_engine_id = self._get_reasoning_engine_id(app_name) config = {'session_state': state} if state else {} + if session_id: + config['session_id'] = session_id config.update(kwargs) async with self._get_api_client() as api_client: api_response = await api_client.agent_engines.sessions.create( diff --git a/tests/unittests/sessions/test_vertex_ai_session_service.py b/tests/unittests/sessions/test_vertex_ai_session_service.py index 8f2b44c68f..1156cad916 100644 --- a/tests/unittests/sessions/test_vertex_ai_session_service.py +++ b/tests/unittests/sessions/test_vertex_ai_session_service.py @@ -324,7 +324,10 @@ async def _create_session( self, name: str, user_id: str, config: dict[str, Any] ): self.last_create_session_config = config - new_session_id = '4' + if 'session_id' in config: + new_session_id = config['session_id'] + else: + new_session_id = '4' self.session_dict[new_session_id] = { 'name': ( 'projects/test-project/locations/test-location/' @@ -343,7 +346,7 @@ async def _create_session( + '/operations/111' ), 'done': True, - 'response': self.session_dict['4'], + 'response': self.session_dict[new_session_id], }) async def _list_events(self, name: str, **kwargs): @@ -769,15 +772,26 @@ async def test_create_session(): @pytest.mark.asyncio @pytest.mark.usefixtures('mock_get_api_client') -async def test_create_session_with_custom_session_id(): +@pytest.mark.parametrize('session_id', ['1', 'abc123']) +async def test_create_session_with_custom_session_id( + mock_api_client_instance: MockAsyncClient, session_id: str +): session_service = mock_vertex_ai_session_service() - with pytest.raises(ValueError) as excinfo: - await session_service.create_session( - app_name='123', user_id='user', session_id='1' - ) - assert str(excinfo.value) == ( - 'User-provided Session id is not supported for VertexAISessionService.' + mock_api_client_instance.event_dict[session_id] = ( + [], + None, + ) + + session = await session_service.create_session( + app_name='123', user_id='user', session_id=session_id + ) + assert session.id == session_id + assert session.app_name == '123' + assert session.user_id == 'user' + assert session.last_update_time is not None + assert session == await session_service.get_session( + app_name='123', user_id='user', session_id=session_id ) From 435f7c7a9fdf8b1214f4439c6d953b6426d90da1 Mon Sep 17 00:00:00 2001 From: Haiyuan Cao Date: Fri, 3 Apr 2026 17:50:43 -0700 Subject: [PATCH 133/192] feat: Add Description column to SKILL.md and update terminology Adds a **Description** column to the function routing table in `SKILL.md` so the LLM can select the correct reference file without extra `load_skill_resource` calls - Replaces internal "1P" terminology with "BigQuery tools" for clarity Co-authored-by: Haiyuan Cao PiperOrigin-RevId: 894329869 --- .../bigquery/skills/bigquery-ai-ml/SKILL.md | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/SKILL.md b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/SKILL.md index fceea715da..b1c0742ad6 100644 --- a/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/SKILL.md +++ b/src/google/adk/tools/bigquery/skills/bigquery-ai-ml/SKILL.md @@ -13,12 +13,13 @@ description: | # Skill: bigquery-ai-ml This skill defines the usage and rules for BigQuery AI/ML functions, -preferring SQL-based Skills over dedicated 1P tools. +preferring SQL-based Skills over dedicated BigQuery tools. ## 1. Skill vs Tool Preference (BigQuery AI/ML) Agents should **prefer using the Skill (SQL via `execute_sql()`)** over -dedicated 1P tools for functionalities like Forecasting and Anomaly Detection. +dedicated BigQuery tools for functionalities like Forecasting and Anomaly +Detection. Use `execute_sql()` with the standard BigQuery `AI.*` functions for these tasks instead of the corresponding high-level tools. @@ -31,17 +32,16 @@ read the associated reference file before generating SQL. **CRITICAL**: DO NOT GUESS filenames. You MUST only use the exact paths provided below. -| Function | Required Reference File to Retrieve | -| :--- | :--- | -| **AI.FORECAST** | `references/bigquery_ai_forecast.md` | -| **AI.CLASSIFY** | `references/bigquery_ai_classify.md` | -| **AI.DETECT_ANOMALIES** | `references/bigquery_ai_detect_anomalies.md` | -| **AI.GENERATE** | `references/bigquery_ai_generate.md` | -| **AI.GENERATE_BOOL** | `references/bigquery_ai_generate_bool.md` | -| **AI.GENERATE_DOUBLE**| `references/bigquery_ai_generate_double.md` | -| **AI.GENERATE_INT** | `references/bigquery_ai_generate_int.md` | -| **AI.IF** | `references/bigquery_ai_if.md` | -| **AI.SCORE** | `references/bigquery_ai_score.md` | -| **AI.SIMILARITY** | `references/bigquery_ai_similarity.md` | -| **AI.SEARCH** | `references/bigquery_ai_search.md` | - +| Function | Description | Required Reference File to Retrieve | +| :--- | :--- | :--- | +| **AI.FORECAST** | Time-series forecasting via the pre-trained TimesFM model | `references/bigquery_ai_forecast.md` | +| **AI.CLASSIFY** | Categorize unstructured data into predefined labels | `references/bigquery_ai_classify.md` | +| **AI.DETECT_ANOMALIES** | Identify deviations in time-series data via the pre-trained TimesFM model | `references/bigquery_ai_detect_anomalies.md` | +| **AI.GENERATE** | General-purpose text and content generation | `references/bigquery_ai_generate.md` | +| **AI.GENERATE_BOOL** | Generate a boolean value (TRUE/FALSE) based on a prompt | `references/bigquery_ai_generate_bool.md` | +| **AI.GENERATE_DOUBLE** | Generate a floating-point number based on a prompt | `references/bigquery_ai_generate_double.md` | +| **AI.GENERATE_INT** | Generate an integer value based on a prompt | `references/bigquery_ai_generate_int.md` | +| **AI.IF** | Evaluate a natural-language boolean condition | `references/bigquery_ai_if.md` | +| **AI.SCORE** | Rank items by semantic relevance (use with ORDER BY) | `references/bigquery_ai_score.md` | +| **AI.SIMILARITY** | Compute cosine similarity between two inputs | `references/bigquery_ai_similarity.md` | +| **AI.SEARCH** | Semantic search on tables with autonomous embedding generation | `references/bigquery_ai_search.md` | From 37973daff47d3c67e928a240acd188d4e318f52b Mon Sep 17 00:00:00 2001 From: Haiyuan Cao Date: Fri, 3 Apr 2026 17:58:37 -0700 Subject: [PATCH 134/192] feat: Add configurable view_prefix to BigQueryLoggerConfig Adds a configurable `view_prefix` field to `BigQueryLoggerConfig` (default `"v"`) so that multiple plugin instances sharing a dataset can use distinct prefixes to avoid overwriting each other's auto-created analytics views - Validates that `view_prefix` is non-empty at init time - Wires `view_prefix` into `_create_analytics_views` in place of the hardcoded `"v_"` prefix Co-authored-by: Haiyuan Cao PiperOrigin-RevId: 894331973 --- .../bigquery_agent_analytics_plugin.py | 21 ++++- .../test_bigquery_agent_analytics_plugin.py | 79 ++++++++++++++++++- 2 files changed, 96 insertions(+), 4 deletions(-) diff --git a/src/google/adk/plugins/bigquery_agent_analytics_plugin.py b/src/google/adk/plugins/bigquery_agent_analytics_plugin.py index fddae0ad33..290da493ab 100644 --- a/src/google/adk/plugins/bigquery_agent_analytics_plugin.py +++ b/src/google/adk/plugins/bigquery_agent_analytics_plugin.py @@ -499,6 +499,16 @@ class BigQueryLoggerConfig: shutdown_timeout: Max time to wait for shutdown. queue_max_size: Max size of the in-memory queue. content_formatter: Optional custom formatter for content. + gcs_bucket_name: GCS bucket for offloading large content. + connection_id: BigQuery connection ID for ObjectRef columns. + log_session_metadata: Whether to log session metadata. + custom_tags: Static custom tags to attach to every event. + auto_schema_upgrade: Whether to auto-add new columns on schema evolution. + create_views: Whether to auto-create per-event-type views. + view_prefix: Prefix for auto-created view names. Default ``"v"`` produces + views like ``v_llm_request``. Set a distinct prefix per table when + multiple plugin instances share one dataset to avoid view-name + collisions. """ enabled: bool = True @@ -538,6 +548,12 @@ class BigQueryLoggerConfig: # Automatically create per-event-type BigQuery views that unnest # JSON columns into typed, queryable columns. create_views: bool = True + # Prefix for auto-created per-event-type view names. + # Default "v" produces views like ``v_llm_request``. Set a distinct + # prefix per table when multiple plugin instances share one dataset + # to avoid view-name collisions (e.g. ``"v_staging"`` → + # ``v_staging_llm_request``). + view_prefix: str = "v" # ============================================================================== @@ -1878,6 +1894,9 @@ def __init__( else: logger.warning(f"Unknown configuration parameter: {key}") + if not self.config.view_prefix: + raise ValueError("view_prefix must be a non-empty string.") + self.table_id = table_id or self.config.table_id self.location = location @@ -2314,7 +2333,7 @@ def _create_analytics_views(self) -> None: Errors are logged but never raised. """ for event_type, extra_cols in _EVENT_VIEW_DEFS.items(): - view_name = "v_" + event_type.lower() + view_name = self.config.view_prefix + "_" + event_type.lower() columns = ",\n ".join(list(_VIEW_COMMON_COLUMNS) + extra_cols) sql = _VIEW_SQL_TEMPLATE.format( project=self.project_id, diff --git a/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py b/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py index a8f79b4091..48749efc06 100644 --- a/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py +++ b/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py @@ -5087,18 +5087,19 @@ def test_reset_logs_fork_warning(self): class TestAnalyticsViews: """Tests for auto-created per-event-type BigQuery views.""" - def _make_plugin(self, create_views=True): + def _make_plugin(self, create_views=True, view_prefix="v", table_id=TABLE_ID): config = bigquery_agent_analytics_plugin.BigQueryLoggerConfig( create_views=create_views, + view_prefix=view_prefix, ) plugin = bigquery_agent_analytics_plugin.BigQueryAgentAnalyticsPlugin( project_id=PROJECT_ID, dataset_id=DATASET_ID, - table_id=TABLE_ID, + table_id=table_id, config=config, ) plugin.client = mock.MagicMock() - plugin.full_table_id = f"{PROJECT_ID}.{DATASET_ID}.{TABLE_ID}" + plugin.full_table_id = f"{PROJECT_ID}.{DATASET_ID}.{table_id}" plugin._schema = bigquery_agent_analytics_plugin._get_events_schema() return plugin @@ -5184,6 +5185,7 @@ def test_config_create_views_default_true(self): """Config create_views defaults to True.""" config = bigquery_agent_analytics_plugin.BigQueryLoggerConfig() assert config.create_views is True + assert config.view_prefix == "v" @pytest.mark.asyncio async def test_create_analytics_views_ensures_started( @@ -5242,6 +5244,77 @@ async def test_create_analytics_views_raises_on_startup_failure( assert exc_info.value.__cause__ is not None assert "client boom" in str(exc_info.value.__cause__) + def test_custom_view_prefix(self): + """Custom view_prefix namespaces view names.""" + plugin = self._make_plugin(view_prefix="v_staging") + plugin.client.get_table.side_effect = cloud_exceptions.NotFound("not found") + mock_query_job = mock.MagicMock() + plugin.client.query.return_value = mock_query_job + + plugin._ensure_schema_exists() + + calls = plugin.client.query.call_args_list + all_sql = " ".join(c[0][0] for c in calls) + # All views should use the custom prefix + for event_type in bigquery_agent_analytics_plugin._EVENT_VIEW_DEFS: + expected_name = "v_staging_" + event_type.lower() + assert expected_name in all_sql, f"View {expected_name} not found in SQL" + # Default prefix should NOT appear + assert ".v_llm_request" not in all_sql + + def test_default_view_prefix_preserves_names(self): + """Default view_prefix='v' produces the same names as before.""" + plugin = self._make_plugin() # default view_prefix="v" + plugin.client.get_table.side_effect = cloud_exceptions.NotFound("not found") + mock_query_job = mock.MagicMock() + plugin.client.query.return_value = mock_query_job + + plugin._ensure_schema_exists() + + calls = plugin.client.query.call_args_list + all_sql = " ".join(c[0][0] for c in calls) + for event_type in bigquery_agent_analytics_plugin._EVENT_VIEW_DEFS: + view_name = "v_" + event_type.lower() + assert view_name in all_sql + + def test_distinct_tables_and_prefixes_no_collision(self): + """Two plugins targeting different tables produce disjoint views.""" + plugin_a = self._make_plugin( + table_id="agent_events_prod", view_prefix="v_prod" + ) + plugin_b = self._make_plugin( + table_id="agent_events_staging", view_prefix="v_staging" + ) + + for plugin in (plugin_a, plugin_b): + plugin.client.get_table.side_effect = cloud_exceptions.NotFound( + "not found" + ) + mock_query_job = mock.MagicMock() + plugin.client.query.return_value = mock_query_job + plugin._ensure_schema_exists() + + sql_a = " ".join(c[0][0] for c in plugin_a.client.query.call_args_list) + sql_b = " ".join(c[0][0] for c in plugin_b.client.query.call_args_list) + + # View names use their own prefix + assert "v_prod_llm_request" in sql_a + assert "v_staging_llm_request" in sql_b + # No cross-contamination + assert "v_staging_" not in sql_a + assert "v_prod_" not in sql_b + + # FROM clauses point at the correct table + assert "agent_events_prod" in sql_a + assert "agent_events_staging" not in sql_a + assert "agent_events_staging" in sql_b + assert "agent_events_prod" not in sql_b + + def test_empty_view_prefix_raises(self): + """Empty view_prefix is rejected at init.""" + with pytest.raises(ValueError, match="view_prefix"): + self._make_plugin(view_prefix="") + # ============================================================================== # Trace-ID Continuity Tests (Issue #4645) From 1b0584241f6418fd5fe9bd05fa666d03c310b8ae Mon Sep 17 00:00:00 2001 From: Divyansh Shukla Date: Fri, 3 Apr 2026 18:20:30 -0700 Subject: [PATCH 135/192] feat: add configurable resource limits for subprocesses in BashTool PiperOrigin-RevId: 894338571 --- src/google/adk/tools/bash_tool.py | 48 +++++++++++++++++++++---- tests/unittests/tools/test_bash_tool.py | 32 +++++++++++++++++ 2 files changed, 74 insertions(+), 6 deletions(-) diff --git a/src/google/adk/tools/bash_tool.py b/src/google/adk/tools/bash_tool.py index b6c85b5149..2adc8299f7 100644 --- a/src/google/adk/tools/bash_tool.py +++ b/src/google/adk/tools/bash_tool.py @@ -21,6 +21,7 @@ import logging import os import pathlib +import resource import shlex import signal from typing import Any @@ -32,16 +33,25 @@ from .base_tool import BaseTool from .tool_context import ToolContext +logger = logging.getLogger("google_adk." + __name__) + @dataclasses.dataclass(frozen=True) class BashToolPolicy: - """Configuration for allowed bash commands based on prefix matching. + """Configuration for allowed bash commands and resource limits. Set allowed_command_prefixes to ("*",) to allow all commands (default), or explicitly list allowed prefixes. + + Values for max_memory_bytes, max_file_size_bytes, and max_child_processes + will be enforced upon the spawned subprocess. """ allowed_command_prefixes: tuple[str, ...] = ("*",) + timeout_seconds: Optional[int] = 30 + max_memory_bytes: Optional[int] = None + max_file_size_bytes: Optional[int] = None + max_child_processes: Optional[int] = None def _validate_command(command: str, policy: BashToolPolicy) -> Optional[str]: @@ -61,6 +71,29 @@ def _validate_command(command: str, policy: BashToolPolicy) -> Optional[str]: return f"Command blocked. Permitted prefixes are: {allowed}" +def _set_resource_limits(policy: BashToolPolicy) -> None: + """Sets resource limits for the subprocess based on the provided policy.""" + try: + resource.setrlimit(resource.RLIMIT_CORE, (0, 0)) + if policy.max_memory_bytes: + resource.setrlimit( + resource.RLIMIT_AS, + (policy.max_memory_bytes, policy.max_memory_bytes), + ) + if policy.max_file_size_bytes: + resource.setrlimit( + resource.RLIMIT_FSIZE, + (policy.max_file_size_bytes, policy.max_file_size_bytes), + ) + if policy.max_child_processes: + resource.setrlimit( + resource.RLIMIT_NPROC, + (policy.max_child_processes, policy.max_child_processes), + ) + except (ValueError, OSError) as e: + logger.warning("Failed to set resource limits: %s", e) + + @features.experimental(features.FeatureName.SKILL_TOOLSET) class ExecuteBashTool(BaseTool): """Tool to execute a validated bash command within a workspace directory.""" @@ -144,20 +177,25 @@ async def run_async( stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, start_new_session=True, + preexec_fn=lambda: _set_resource_limits(self._policy), ) try: stdout, stderr = await asyncio.wait_for( - process.communicate(), timeout=30 + process.communicate(), timeout=self._policy.timeout_seconds ) except asyncio.TimeoutError: try: - os.killpg(process.pid, signal.SIGKILL) + if process.pid: + os.killpg(process.pid, signal.SIGKILL) except ProcessLookupError: pass stdout, stderr = await process.communicate() return { - "error": "Command timed out after 30 seconds.", + "error": ( + f"Command timed out after {self._policy.timeout_seconds}" + " seconds." + ), "stdout": ( stdout.decode(errors="replace") if stdout @@ -176,7 +214,6 @@ async def run_async( os.killpg(process.pid, signal.SIGKILL) except ProcessLookupError: pass - return { "stdout": ( stdout.decode(errors="replace") @@ -191,7 +228,6 @@ async def run_async( "returncode": process.returncode, } except Exception as e: # pylint: disable=broad-except - logger = logging.getLogger("google_adk." + __name__) logger.exception("ExecuteBashTool execution failed") stdout_res = ( diff --git a/tests/unittests/tools/test_bash_tool.py b/tests/unittests/tools/test_bash_tool.py index 2aebd321cd..f0f4851990 100644 --- a/tests/unittests/tools/test_bash_tool.py +++ b/tests/unittests/tools/test_bash_tool.py @@ -13,6 +13,7 @@ # limitations under the License. import asyncio +import resource import signal from unittest import mock @@ -241,3 +242,34 @@ async def test_no_command(self, workspace, tool_context_confirmed): result = await tool.run_async(args={}, tool_context=tool_context_confirmed) assert "error" in result assert "required" in result["error"].lower() + + @pytest.mark.asyncio + async def test_resource_limits_set(self, workspace, tool_context_confirmed): + policy = bash_tool.BashToolPolicy( + max_memory_bytes=100 * 1024 * 1024, + max_file_size_bytes=50 * 1024 * 1024, + max_child_processes=10, + ) + tool = bash_tool.ExecuteBashTool(workspace=workspace, policy=policy) + mock_process = mock.AsyncMock() + mock_process.communicate.return_value = (b"", b"") + mock_exec = mock.AsyncMock(return_value=mock_process) + + with mock.patch("asyncio.create_subprocess_exec", mock_exec): + await tool.run_async( + args={"command": "ls"}, + tool_context=tool_context_confirmed, + ) + assert "preexec_fn" in mock_exec.call_args.kwargs + preexec_fn = mock_exec.call_args.kwargs["preexec_fn"] + + mock_setrlimit = mock.create_autospec(resource.setrlimit, instance=True) + with mock.patch("resource.setrlimit", mock_setrlimit): + preexec_fn() + mock_setrlimit.assert_any_call(resource.RLIMIT_CORE, (0, 0)) + mock_setrlimit.assert_any_call( + resource.RLIMIT_AS, (100 * 1024 * 1024, 100 * 1024 * 1024) + ) + mock_setrlimit.assert_any_call( + resource.RLIMIT_FSIZE, (50 * 1024 * 1024, 50 * 1024 * 1024) + ) From 19ac679aeacc045ed78cb9fd48bb295440843288 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Fri, 3 Apr 2026 19:33:31 -0700 Subject: [PATCH 136/192] feat: Add regional endpoint support to `SecretManagerClient` The `SecretManagerClient` now accepts a `location` parameter to connect to a regional Secret Manager endpoint. PiperOrigin-RevId: 894356924 --- .../secret_manager/secret_client.py | 12 ++++++- .../secret_manager/test_secret_client.py | 33 +++++++++++++++++-- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/google/adk/integrations/secret_manager/secret_client.py b/src/google/adk/integrations/secret_manager/secret_client.py index 7f76ff3712..7d9610ab7f 100644 --- a/src/google/adk/integrations/secret_manager/secret_client.py +++ b/src/google/adk/integrations/secret_manager/secret_client.py @@ -42,6 +42,7 @@ def __init__( self, service_account_json: Optional[str] = None, auth_token: Optional[str] = None, + location: Optional[str] = None, ): """Initializes the SecretManagerClient. @@ -49,6 +50,8 @@ def __init__( service_account_json: The content of a service account JSON keyfile (as a string), not the file path. Must be valid JSON. auth_token: An existing Google Cloud authorization token. + location: The Google Cloud location (region) to use for the Secret + Manager service. If not provided, the global endpoint is used. Raises: ValueError: If neither `service_account_json` nor `auth_token` is @@ -92,8 +95,15 @@ def __init__( ) self._credentials = credentials + + client_options = None + if location: + client_options = { + "api_endpoint": f"secretmanager.{location}.rep.googleapis.com" + } + self._client = secretmanager.SecretManagerServiceClient( - credentials=self._credentials + credentials=self._credentials, client_options=client_options ) def get_secret(self, resource_name: str) -> str: diff --git a/tests/unittests/integrations/secret_manager/test_secret_client.py b/tests/unittests/integrations/secret_manager/test_secret_client.py index 1f11a22c0e..f2482cb35b 100644 --- a/tests/unittests/integrations/secret_manager/test_secret_client.py +++ b/tests/unittests/integrations/secret_manager/test_secret_client.py @@ -50,7 +50,7 @@ def test_init_with_default_credentials( scopes=["https://www.googleapis.com/auth/cloud-platform"] ) mock_secret_manager_client.assert_called_once_with( - credentials=mock_credentials + credentials=mock_credentials, client_options=None ) assert client._credentials == mock_credentials assert client._client == mock_secret_manager_client.return_value @@ -80,7 +80,7 @@ def test_init_with_service_account_json( json.loads(service_account_json) ) mock_secret_manager_client.assert_called_once_with( - credentials=mock_credentials + credentials=mock_credentials, client_options=None ) assert client._credentials == mock_credentials assert client._client == mock_secret_manager_client.return_value @@ -106,11 +106,38 @@ def test_init_with_auth_token(self, mock_secret_manager_client): # Verify mock_credentials.refresh.assert_called_once() mock_secret_manager_client.assert_called_once_with( - credentials=mock_credentials + credentials=mock_credentials, client_options=None ) assert client._credentials == mock_credentials assert client._client == mock_secret_manager_client.return_value + @patch("google.cloud.secretmanager.SecretManagerServiceClient") + @patch( + "google.adk.integrations.secret_manager.secret_client.default_service_credential" + ) + def test_init_with_location( + self, mock_default_service_credential, mock_secret_manager_client + ): + """Test initialization with a specific location.""" + # Setup + mock_credentials = MagicMock() + mock_default_service_credential.return_value = ( + mock_credentials, + "test-project", + ) + location = "us-central1" + + # Execute + SecretManagerClient(location=location) + + # Verify + mock_secret_manager_client.assert_called_once_with( + credentials=mock_credentials, + client_options={ + "api_endpoint": f"secretmanager.{location}.rep.googleapis.com" + }, + ) + @patch( "google.adk.integrations.secret_manager.secret_client.default_service_credential" ) From 1445ad5069841e446328e0856553f69a6699f0f4 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Sat, 4 Apr 2026 02:02:12 -0700 Subject: [PATCH 137/192] feat: refresh credentials if token is missing in the common code and samples PiperOrigin-RevId: 894473156 --- contributing/samples/bigquery/agent.py | 7 ++++ contributing/samples/data_agent/agent.py | 4 ++ src/google/adk/tools/_google_credentials.py | 7 ++++ .../test_base_google_credentials_manager.py | 40 ++++++++++++++++--- 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/contributing/samples/bigquery/agent.py b/contributing/samples/bigquery/agent.py index 5ff34c7cee..7e2031030c 100644 --- a/contributing/samples/bigquery/agent.py +++ b/contributing/samples/bigquery/agent.py @@ -21,6 +21,7 @@ from google.adk.tools.bigquery.config import BigQueryToolConfig from google.adk.tools.bigquery.config import WriteMode import google.auth +import google.auth.transport.requests # Define the desired credential type. # By default use Application Default Credentials (ADC) from the local @@ -57,6 +58,8 @@ # service account key file # https://cloud.google.com/iam/docs/service-account-creds#user-managed-keys creds, _ = google.auth.load_credentials_from_file("service_account_key.json") + if not creds.valid: + creds.refresh(google.auth.transport.requests.Request()) credentials_config = BigQueryCredentialsConfig(credentials=creds) elif CREDENTIALS_TYPE == AuthCredentialTypes.HTTP: # Initialize the tools to use the externally provided access token. One such @@ -73,6 +76,10 @@ # Initialize the tools to use the application default credentials. # https://cloud.google.com/docs/authentication/provide-credentials-adc application_default_credentials, _ = google.auth.default() + if not application_default_credentials.valid: + application_default_credentials.refresh( + google.auth.transport.requests.Request() + ) credentials_config = BigQueryCredentialsConfig( credentials=application_default_credentials ) diff --git a/contributing/samples/data_agent/agent.py b/contributing/samples/data_agent/agent.py index 634a476286..b9bcd9cdfc 100644 --- a/contributing/samples/data_agent/agent.py +++ b/contributing/samples/data_agent/agent.py @@ -51,6 +51,10 @@ # Initialize the tools to use the application default credentials. # https://cloud.google.com/docs/authentication/provide-credentials-adc application_default_credentials, _ = google.auth.default() + if not application_default_credentials.valid: + application_default_credentials.refresh( + google.auth.transport.requests.Request() + ) credentials_config = DataAgentCredentialsConfig( credentials=application_default_credentials ) diff --git a/src/google/adk/tools/_google_credentials.py b/src/google/adk/tools/_google_credentials.py index 8eb92d9c53..6d03e64995 100644 --- a/src/google/adk/tools/_google_credentials.py +++ b/src/google/adk/tools/_google_credentials.py @@ -191,6 +191,13 @@ async def get_valid_credentials( # If non-oauth credentials are provided then use them as is. This helps # in flows such as service account keys if creds and not isinstance(creds, google.oauth2.credentials.Credentials): + if not creds.valid: + try: + creds.refresh(Request()) + except Exception: # pylint: disable=broad-except + # If refresh fails, we still return the creds as they might work + # for some libraries that handle refresh internally. + pass return creds # Check if we have valid credentials diff --git a/tests/unittests/tools/test_base_google_credentials_manager.py b/tests/unittests/tools/test_base_google_credentials_manager.py index 628a48a4c1..0d680ec484 100644 --- a/tests/unittests/tools/test_base_google_credentials_manager.py +++ b/tests/unittests/tools/test_base_google_credentials_manager.py @@ -105,15 +105,16 @@ async def test_get_valid_credentials_with_valid_existing_creds( ], ) @pytest.mark.asyncio + @patch.object(_google_credentials, "Request", autospec=True) async def test_get_valid_credentials_with_existing_non_oauth_creds( - self, manager, mock_tool_context, valid + self, mock_request_class, manager, mock_tool_context, valid ): - """Test that existing non-oauth credentials are returned immediately. + """Test that existing non-oauth credentials handle refresh logic correctly. - When credentials are of non-oauth type, no refresh or OAuth flow - is triggered irrespective of whether or not it is valid. + When credentials are of non-oauth type, a refresh is triggered if they + are invalid. No OAuth flow is ever triggered. """ - # Create mock credentials that are already valid + # Create mock credentials with the specified validity mock_creds = create_autospec(AuthCredentials, instance=True) mock_creds.valid = valid manager.credentials_config.credentials = mock_creds @@ -121,10 +122,39 @@ async def test_get_valid_credentials_with_existing_non_oauth_creds( result = await manager.get_valid_credentials(mock_tool_context) assert result == mock_creds + # Verify refresh behavior + if valid: + mock_creds.refresh.assert_not_called() + else: + mock_creds.refresh.assert_called_once_with( + mock_request_class.return_value + ) + # Verify no OAuth flow was triggered mock_tool_context.get_auth_response.assert_not_called() mock_tool_context.request_credential.assert_not_called() + @pytest.mark.asyncio + @patch.object(_google_credentials, "Request", autospec=True) + async def test_get_valid_credentials_with_non_oauth_refresh_failure( + self, mock_request_class, manager, mock_tool_context + ): + """Test that non-oauth refresh failures are caught gracefully. + + Even if refresh fails, we should still return the credentials as they + might work for some downstream libraries. + """ + mock_creds = create_autospec(AuthCredentials, instance=True) + mock_creds.valid = False + mock_creds.refresh.side_effect = Exception("Refresh failed") + manager.credentials_config.credentials = mock_creds + + result = await manager.get_valid_credentials(mock_tool_context) + + # Credentials should still be returned + assert result == mock_creds + mock_creds.refresh.assert_called_once_with(mock_request_class.return_value) + @pytest.mark.asyncio async def test_get_credentials_from_cache_when_none_in_manager( self, manager, mock_tool_context From 9da9dee140a3c8971d2dc267eab7d8d17a22a089 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Mon, 6 Apr 2026 10:03:45 -0700 Subject: [PATCH 138/192] feat: Use raw_event to store event data in vertex ai session service PiperOrigin-RevId: 895379069 --- .../adk/sessions/vertex_ai_session_service.py | 69 +++++++- .../test_vertex_ai_session_service.py | 156 ++++++++++++++++++ 2 files changed, 216 insertions(+), 9 deletions(-) diff --git a/src/google/adk/sessions/vertex_ai_session_service.py b/src/google/adk/sessions/vertex_ai_session_service.py index 8025821975..c653456a25 100644 --- a/src/google/adk/sessions/vertex_ai_session_service.py +++ b/src/google/adk/sessions/vertex_ai_session_service.py @@ -14,6 +14,7 @@ from __future__ import annotations import asyncio +import copy import datetime import json import logging @@ -25,6 +26,7 @@ from google.genai import types from google.genai.errors import ClientError +import pydantic from typing_extensions import override if TYPE_CHECKING: @@ -334,17 +336,41 @@ async def append_event(self, session: Session, event: Event) -> Event: value=usage_dict, ) config['event_metadata'] = metadata_dict + config['raw_event'] = event.model_dump( + exclude_none=True, + mode='json', + by_alias=True, + ) + # Retry without raw_event if client side validation fails for older SDK + # versions. async with self._get_api_client() as api_client: - await api_client.agent_engines.sessions.events.append( - name=f'reasoningEngines/{reasoning_engine_id}/sessions/{session.id}', - author=event.author, - invocation_id=event.invocation_id, - timestamp=datetime.datetime.fromtimestamp( - event.timestamp, tz=datetime.timezone.utc - ), - config=config, - ) + try: + await api_client.agent_engines.sessions.events.append( + name=( + f'reasoningEngines/{reasoning_engine_id}/sessions/{session.id}' + ), + author=event.author, + invocation_id=event.invocation_id, + timestamp=datetime.datetime.fromtimestamp( + event.timestamp, tz=datetime.timezone.utc + ), + config=config, + ) + except pydantic.ValidationError: + if 'raw_event' in config: + del config['raw_event'] + await api_client.agent_engines.sessions.events.append( + name=( + f'reasoningEngines/{reasoning_engine_id}/sessions/{session.id}' + ), + author=event.author, + invocation_id=event.invocation_id, + timestamp=datetime.datetime.fromtimestamp( + event.timestamp, tz=datetime.timezone.utc + ), + config=config, + ) return event def _get_reasoning_engine_id(self, app_name: str): @@ -390,8 +416,33 @@ def _get_api_client(self) -> vertexai.AsyncClient: ).aio +def _get_raw_event(api_event_obj: Any) -> dict[str, Any] | None: + """Extracts raw_event dict from SessionEvent object safely.""" + try: + return api_event_obj.raw_event + except AttributeError: + try: + return api_event_obj.rawEvent + except AttributeError: + return None + + def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: """Converts an API event object to an Event object.""" + # Read event data from raw_event first before falling back to top level + # fields. + raw_event_dict = _get_raw_event(api_event_obj) + if raw_event_dict: + event_dict = copy.deepcopy(raw_event_dict) + timestamp_obj = getattr(api_event_obj, 'timestamp', None) + event_dict.update({ + 'id': api_event_obj.name.split('/')[-1], + 'invocation_id': getattr(api_event_obj, 'invocation_id', None), + 'author': getattr(api_event_obj, 'author', None), + 'timestamp': timestamp_obj.timestamp() if timestamp_obj else None, + }) + return Event.model_validate(event_dict) + actions = getattr(api_event_obj, 'actions', None) event_metadata = getattr(api_event_obj, 'event_metadata', None) if event_metadata: diff --git a/tests/unittests/sessions/test_vertex_ai_session_service.py b/tests/unittests/sessions/test_vertex_ai_session_service.py index 1156cad916..80a7c9c537 100644 --- a/tests/unittests/sessions/test_vertex_ai_session_service.py +++ b/tests/unittests/sessions/test_vertex_ai_session_service.py @@ -28,6 +28,7 @@ from google.adk.events.event import Event from google.adk.events.event_actions import EventActions from google.adk.events.event_actions import EventCompaction +from google.adk.models.cache_metadata import CacheMetadata from google.adk.sessions.base_session_service import GetSessionConfig from google.adk.sessions.session import Session from google.adk.sessions.vertex_ai_session_service import VertexAiSessionService @@ -91,6 +92,7 @@ 'branch': '', 'long_running_tool_ids': ['tool1'], }, + 'raw_event': {}, }, ] MOCK_EVENT_JSON_2 = [ @@ -162,6 +164,96 @@ def _generate_mock_events_for_session_5(num_events): MANY_EVENTS_COUNT = 200 MOCK_EVENTS_JSON_5 = _generate_mock_events_for_session_5(MANY_EVENTS_COUNT) +MOCK_EVENT_WITH_OVERRIDE_JSON = [{ + 'name': ( + 'projects/test-project/locations/test-location/' + 'reasoningEngines/123/sessions/override/events/1' + ), + 'invocationId': 'override_invoke', + 'author': 'user_with_override', + 'timestamp': '2024-12-12T12:12:12.123456Z', + 'content': { + 'parts': [ + {'text': 'top_level_content'}, + ], + }, + 'actions': { + 'transferToAgent': 'top_level_agent', + }, + 'eventMetadata': { + 'partial': True, + 'turnComplete': False, + 'interrupted': False, + 'branch': 'top_level_branch', + }, + 'errorCode': '111', + 'errorMessage': 'top_level_error', + 'rawEvent': { + 'invocationId': 'wrong_invocation_id', + 'author': 'wrong_author', + 'content': { + 'parts': [ + {'text': 'raw_event_content'}, + ], + }, + 'actions': { + 'transferToAgent': 'raw_event_agent', + }, + 'partial': False, + 'turnComplete': True, + 'interrupted': True, + 'branch': 'raw_event_branch', + 'errorCode': '222', + 'errorMessage': 'raw_event_error', + }, +}] + +MOCK_EVENT_WITH_OVERRIDE_JSON_2 = [{ + 'name': ( + 'projects/test-project/locations/test-location/' + 'reasoningEngines/123/sessions/override/events/1' + ), + 'invocationId': 'override_invoke', + 'author': 'user_with_override', + 'content': {}, + 'actions': {}, + 'timestamp': '2024-12-12T12:12:12.123456Z', + 'rawEvent': { + 'invocationId': 'wrong_invocation_id', + 'author': 'wrong_author', + 'content': { + 'parts': [ + {'text': 'raw_event_content'}, + ], + }, + 'actions': { + 'skipSummarization': None, + 'stateDelta': {}, + 'artifactDelta': {}, + 'transferToAgent': 'raw_event_agent', + 'escalate': None, + 'requestedAuthConfigs': {}, + }, + 'errorCode': '222', + 'errorMessage': 'raw_event_error', + 'partial': False, + 'turnComplete': True, + 'interrupted': True, + 'branch': 'raw_event_branch', + 'customMetadata': None, + 'longRunningToolIds': None, + }, +}] + +MOCK_SESSION_WITH_OVERRIDE_JSON = { + 'name': ( + 'projects/test-project/locations/test-location/' + 'reasoningEngines/123/sessions/override' + ), + 'update_time': '2024-12-12T12:12:12.123456Z', + 'user_id': 'user_with_override', +} + MOCK_SESSION = Session( app_name='123', user_id='user', @@ -249,6 +341,8 @@ def _convert_to_object(data): 'artifact_delta', 'custom_metadata', 'requested_auth_configs', + 'rawEvent', + 'raw_event', ]: kwargs[key] = value else: @@ -683,6 +777,38 @@ async def test_get_session_keeps_events_newer_than_update_time( ) +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +@pytest.mark.parametrize( + 'mock_event_json', + [MOCK_EVENT_WITH_OVERRIDE_JSON, MOCK_EVENT_WITH_OVERRIDE_JSON_2], +) +async def test_get_session_from_raw_event( + mock_api_client_instance: MockAsyncClient, + mock_event_json, +) -> None: + mock_api_client_instance.session_dict['6'] = MOCK_SESSION_WITH_OVERRIDE_JSON + mock_api_client_instance.event_dict['6'] = ( + copy.deepcopy(mock_event_json), + None, + ) + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', user_id='user_with_override', session_id='6' + ) + assert session is not None + assert len(session.events) == 1 + event = session.events[0] + assert event.content.parts[0].text == 'raw_event_content' + assert event.actions.transfer_to_agent == 'raw_event_agent' + assert not event.partial + assert event.turn_complete + assert event.interrupted + assert event.branch == 'raw_event_branch' + assert event.error_code == '222' + assert event.error_message == 'raw_event_error' + + @pytest.mark.asyncio @pytest.mark.usefixtures('mock_get_api_client') async def test_get_session_with_many_events(mock_api_client_instance): @@ -844,6 +970,36 @@ async def test_append_event(): branch='test_branch', custom_metadata={'custom': 'data'}, long_running_tool_ids={'tool2'}, + input_transcription=genai_types.Transcription( + text='test_input_transcription' + ), + output_transcription=genai_types.Transcription( + text='test_output_transcription' + ), + model_version='test_model_version', + avg_logprobs=0.5, + logprobs_result=genai_types.LogprobsResult( + chosen_candidates=[ + genai_types.LogprobsResultCandidate( + log_probability=0.5, + token='test_token', + token_id=0, + ) + ] + ), + cache_metadata=CacheMetadata( + cache_name='test_cache_name', + fingerprint='test_fingerprint', + contents_count=1, + ), + citation_metadata=genai_types.CitationMetadata( + citations=[ + genai_types.Citation( + uri='http://test.com', + title='test_title', + ) + ] + ), ) await session_service.append_event(session_before_append, event_to_append) From 7dd9359fa1c419f82db84b844195e1b77d8070e7 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Mon, 6 Apr 2026 12:23:18 -0700 Subject: [PATCH 139/192] fix: Add A2ATransport.http_json to the default supported transports list remote_a2a_agent is only including A2ATransport.jsonrpc on the default supported list, but it should also include http_json since it is a common transport (default used by agent engine) Co-authored-by: Kathy Wu PiperOrigin-RevId: 895444831 --- src/google/adk/agents/remote_a2a_agent.py | 2 +- tests/unittests/agents/test_remote_a2a_agent.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/google/adk/agents/remote_a2a_agent.py b/src/google/adk/agents/remote_a2a_agent.py index 6072a5ddcb..cbfbd61290 100644 --- a/src/google/adk/agents/remote_a2a_agent.py +++ b/src/google/adk/agents/remote_a2a_agent.py @@ -233,7 +233,7 @@ async def _ensure_httpx_client(self) -> httpx.AsyncClient: httpx_client=self._httpx_client, streaming=False, polling=False, - supported_transports=[A2ATransport.jsonrpc], + supported_transports=[A2ATransport.jsonrpc, A2ATransport.http_json], ) self._a2a_client_factory = A2AClientFactory(config=client_config) return self._httpx_client diff --git a/tests/unittests/agents/test_remote_a2a_agent.py b/tests/unittests/agents/test_remote_a2a_agent.py index 5c0cf61f33..4707f33799 100644 --- a/tests/unittests/agents/test_remote_a2a_agent.py +++ b/tests/unittests/agents/test_remote_a2a_agent.py @@ -35,6 +35,7 @@ from a2a.types import TaskStatus as A2ATaskStatus from a2a.types import TaskStatusUpdateEvent from a2a.types import TextPart +from a2a.types import TransportProtocol as A2ATransport from google.adk.a2a.agent import ParametersConfig from google.adk.a2a.agent import RequestInterceptor from google.adk.a2a.agent.config import A2aRemoteAgentConfig @@ -198,6 +199,10 @@ async def test_ensure_httpx_client_creates_new_client(self): assert client is not None assert agent._httpx_client == client assert agent._httpx_client_needs_cleanup is True + assert agent._a2a_client_factory._config.supported_transports == [ + A2ATransport.jsonrpc, + A2ATransport.http_json, + ] @pytest.mark.asyncio async def test_ensure_httpx_client_reuses_existing_client(self): From da438fafd8a9dfa7cd3cb4c95b558046ac3905bb Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Mon, 6 Apr 2026 13:23:21 -0700 Subject: [PATCH 140/192] feat: Add /apps/{app_name}/app-info endpoint to ADK CLI web server This endpoint provides detailed **static** information about an application's agents, including their description, instructions, tools, and sub-agents, specifically for LlmAgent instances. Co-authored-by: Liang Wu PiperOrigin-RevId: 895470828 --- src/google/adk/cli/adk_web_server.py | 25 ++++ src/google/adk/utils/agent_info.py | 77 +++++++++++ tests/unittests/cli/test_fast_api.py | 193 +++++++++++++++++++++++++++ 3 files changed, 295 insertions(+) create mode 100644 src/google/adk/utils/agent_info.py diff --git a/src/google/adk/cli/adk_web_server.py b/src/google/adk/cli/adk_web_server.py index e4c837f899..9700be714c 100644 --- a/src/google/adk/cli/adk_web_server.py +++ b/src/google/adk/cli/adk_web_server.py @@ -60,6 +60,8 @@ from ..agents.base_agent import BaseAgent from ..agents.live_request_queue import LiveRequest from ..agents.live_request_queue import LiveRequestQueue +from ..agents.llm_agent import LlmAgent +from ..agents.llm_agent import ToolUnion from ..agents.run_config import RunConfig from ..agents.run_config import StreamingMode from ..apps.app import App @@ -90,7 +92,10 @@ from ..runners import Runner from ..sessions.base_session_service import BaseSessionService from ..sessions.session import Session +from ..utils.agent_info import AgentInfo +from ..utils.agent_info import get_agents_dict from ..utils.context_utils import Aclosing +from ..utils.feature_decorator import experimental from ..version import __version__ from .cli_eval import EVAL_SESSION_ID_PREFIX from .utils import cleanup @@ -489,6 +494,7 @@ class AppInfo(common.BaseModel): description: str language: Literal["yaml", "python"] is_computer_use: bool = False + agents: Optional[dict[str, AgentInfo]] = None class ListAppsResponse(common.BaseModel): @@ -960,6 +966,25 @@ async def list_apps( return ListAppsResponse(apps=[AppInfo(**app) for app in apps_info]) return self.agent_loader.list_agents() + @experimental + @app.get("/apps/{app_name}/app-info", response_model_exclude_none=True) + async def get_adk_app_info(app_name: str) -> AppInfo: + """Returns the detailed info for a given ADK app.""" + agent_or_app = self.agent_loader.load_agent(app_name) + root_agent = self._get_root_agent(agent_or_app) + if isinstance(root_agent, LlmAgent): + return AppInfo( + name=app_name, + root_agent_name=root_agent.name, + description=root_agent.description, + language="python", + agents=get_agents_dict(root_agent), + ) + else: + raise HTTPException( + status_code=400, detail="Root agent is not an LlmAgent" + ) + @app.get("/debug/trace/{event_id}", tags=[TAG_DEBUG]) async def get_trace_dict(event_id: str) -> Any: event_dict = trace_dict.get(event_id, None) diff --git a/src/google/adk/utils/agent_info.py b/src/google/adk/utils/agent_info.py new file mode 100644 index 0000000000..957b5808bf --- /dev/null +++ b/src/google/adk/utils/agent_info.py @@ -0,0 +1,77 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Any + +from google.genai import types +import pydantic + +from ..agents.llm_agent import LlmAgent +from ..agents.llm_agent import ToolUnion +from ..tools.base_tool import BaseTool +from ..tools.base_toolset import BaseToolset +from ..tools.function_tool import FunctionTool + + +class AgentInfo(pydantic.BaseModel): + name: str + description: str + instruction: str + tools: list[types.Tool] + sub_agents: list[str] + + +def get_tools_info(tools: list[ToolUnion]) -> list[Any]: + """Returns the info for a given list of tools.""" + final_tools = [] + for tool in tools: + if isinstance(tool, BaseTool): + final_tools.append(tool) + elif isinstance(tool, BaseToolset): + final_tools.extend(tool.get_tools()) + else: + final_tools.append(FunctionTool(tool)) + return [ + types.Tool(function_declarations=[tool._get_declaration()]) + for tool in final_tools + if tool._get_declaration() + ] + + +def get_agents_dict(agent: LlmAgent) -> dict[str, AgentInfo]: + """Returns a dict with info for the agent and its sub-agents.""" + agents_dict = {} + + def _traverse(current_agent: LlmAgent): + if current_agent.name in agents_dict: + return + + sub_agent_names = [] + for sub_agent in current_agent.sub_agents: + if isinstance(sub_agent, LlmAgent): + _traverse(sub_agent) + sub_agent_names.append(sub_agent.name) + + agents_dict[current_agent.name] = AgentInfo( + name=current_agent.name, + description=current_agent.description, + instruction=current_agent.instruction, + tools=get_tools_info(current_agent.tools), + sub_agents=sub_agent_names, + ) + + _traverse(agent) + return agents_dict diff --git a/tests/unittests/cli/test_fast_api.py b/tests/unittests/cli/test_fast_api.py index 95affeeb3e..347f4bcc7b 100755 --- a/tests/unittests/cli/test_fast_api.py +++ b/tests/unittests/cli/test_fast_api.py @@ -26,6 +26,7 @@ from fastapi.testclient import TestClient from google.adk.agents.base_agent import BaseAgent +from google.adk.agents.llm_agent import LlmAgent from google.adk.agents.run_config import RunConfig from google.adk.apps.app import App from google.adk.artifacts.base_artifact_service import ArtifactVersion @@ -801,6 +802,198 @@ def test_list_apps_detailed(test_app): logger.info(f"Listed apps: {data}") +def test_get_adk_app_info_llm_agent(test_app, mock_agent_loader): + """Test retrieving app info when root agent is an LlmAgent.""" + agent = LlmAgent( + name="test_llm_agent", description="test description", model="test_model" + ) + with patch.object(mock_agent_loader, "load_agent", return_value=agent): + response = test_app.get("/apps/test_app/app-info") + assert response.status_code == 200 + data = response.json() + assert data["name"] == "test_app" + assert data["rootAgentName"] == "test_llm_agent" + assert data["description"] == "test description" + assert data["language"] == "python" + assert "agents" in data + assert "test_llm_agent" in data["agents"] + + +def test_get_adk_app_info_llm_agent_with_subagents(test_app, mock_agent_loader): + """Test retrieving app info when root agent is an LlmAgent with sub_agents and tools.""" + + def sub_tool1(a: int) -> str: + """Sub tool 1.""" + return str(a) + + def sub_tool2(b: str) -> str: + """Sub tool 2.""" + return b + + sub_agent1 = LlmAgent( + name="sub_agent1", + description="sub description 1", + model="test_model", + tools=[sub_tool1], + ) + sub_agent2 = LlmAgent( + name="sub_agent2", + description="sub description 2", + model="test_model", + tools=[sub_tool2], + ) + agent = LlmAgent( + name="test_llm_agent", + description="test description", + model="test_model", + sub_agents=[sub_agent1, sub_agent2], + ) + with patch.object(mock_agent_loader, "load_agent", return_value=agent): + response = test_app.get("/apps/test_app/app-info") + assert response.status_code == 200 + data = response.json() + assert data["rootAgentName"] == "test_llm_agent" + assert "test_llm_agent" in data["agents"] + assert "sub_agent1" in data["agents"] + assert "sub_agent2" in data["agents"] + + # Verify tools for sub_agent1 + agent1_info = data["agents"]["sub_agent1"] + assert "tools" in agent1_info + assert len(agent1_info["tools"]) == 1 + tool1 = agent1_info["tools"][0] + field_name1 = ( + "functionDeclarations" + if "functionDeclarations" in tool1 + else "function_declarations" + ) + assert field_name1 in tool1 + assert tool1[field_name1][0]["name"] == "sub_tool1" + + # Verify tools for sub_agent2 + agent2_info = data["agents"]["sub_agent2"] + assert "tools" in agent2_info + assert len(agent2_info["tools"]) == 1 + tool2 = agent2_info["tools"][0] + field_name2 = ( + "functionDeclarations" + if "functionDeclarations" in tool2 + else "function_declarations" + ) + assert field_name2 in tool2 + assert tool2[field_name2][0]["name"] == "sub_tool2" + + +def test_get_adk_app_info_triple_nested_agents_with_tools( + test_app, mock_agent_loader +): + """Test retrieving app info when there are triple nested agents with tools.""" + + def tool1(a: int) -> str: + """Tool 1.""" + return str(a) + + def tool2(b: str) -> str: + """Tool 2.""" + return b + + def tool3(c: float) -> str: + """Tool 3.""" + return str(c) + + # Level 3 (deepest) + agent3 = LlmAgent( + name="agent3", + description="Level 3 agent", + model="test_model", + tools=[tool3], + ) + + # Level 2 + agent2 = LlmAgent( + name="agent2", + description="Level 2 agent", + model="test_model", + tools=[tool2], + sub_agents=[agent3], + ) + + # Level 1 (root) + root_agent = LlmAgent( + name="root_agent", + description="Level 1 agent", + model="test_model", + tools=[tool1], + sub_agents=[agent2], + ) + + with patch.object(mock_agent_loader, "load_agent", return_value=root_agent): + response = test_app.get("/apps/test_app/app-info") + assert response.status_code == 200 + data = response.json() + assert data["rootAgentName"] == "root_agent" + assert "root_agent" in data["agents"] + assert "agent2" in data["agents"] + assert "agent3" in data["agents"] + + # Verify each has its tools + for agent_name, exp_tool_name in [ + ("root_agent", "tool1"), + ("agent2", "tool2"), + ("agent3", "tool3"), + ]: + ai = data["agents"][agent_name] + assert len(ai["tools"]) == 1 + tool = ai["tools"][0] + field_name = ( + "functionDeclarations" + if "functionDeclarations" in tool + else "function_declarations" + ) + assert tool[field_name][0]["name"] == exp_tool_name + + +def test_get_adk_app_info_llm_agent_with_function_tool( + test_app, mock_agent_loader +): + """Test retrieving app info when root agent has tools.""" + + def my_tool(a: int, b: str) -> str: + """A dummy tool function.""" + return f"{a} {b}" + + agent = LlmAgent( + name="test_llm_agent", + description="test description", + model="test_model", + tools=[my_tool], + ) + with patch.object(mock_agent_loader, "load_agent", return_value=agent): + response = test_app.get("/apps/test_app/app-info") + assert response.status_code == 200 + data = response.json() + assert data["rootAgentName"] == "test_llm_agent" + assert "test_llm_agent" in data["agents"] + agent_info = data["agents"]["test_llm_agent"] + assert "tools" in agent_info + assert len(agent_info["tools"]) == 1 + + # Verify tool serialization + tool = agent_info["tools"][0] + func_decls = tool["functionDeclarations"] + assert len(func_decls) == 1 + assert func_decls[0]["name"] == "my_tool" + + +def test_get_adk_app_info_non_llm_agent(test_app, mock_agent_loader): + """Test retrieving app info when root agent is not an LlmAgent raises 400.""" + agent = DummyAgent("dummy_agent") + with patch.object(mock_agent_loader, "load_agent", return_value=agent): + response = test_app.get("/apps/test_app/app-info") + assert response.status_code == 400 + assert "Root agent is not an LlmAgent" in response.json()["detail"] + + def test_create_session_with_id(test_app, test_session_info): """Test creating a session with a specific ID.""" new_session_id = "new_session_id" From 5cf2ca3fc0d8036e61e5239846c73cc8552a5334 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Mon, 6 Apr 2026 14:57:16 -0700 Subject: [PATCH 141/192] chore: Update ADK CLI Express mode ToS to align with the Express mode ToS Co-authored-by: Kathy Wu PiperOrigin-RevId: 895514895 --- src/google/adk/cli/cli_create.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/google/adk/cli/cli_create.py b/src/google/adk/cli/cli_create.py index c5bf7c3819..b33a54cc5e 100644 --- a/src/google/adk/cli/cli_create.py +++ b/src/google/adk/cli/cli_create.py @@ -64,7 +64,10 @@ _EXPRESS_TOS_MSG = """ Google Cloud Express Mode Terms of Service: https://cloud.google.com/terms/google-cloud-express -By continuing, you agree to the Terms of Service for Vertex AI Express Mode. +By using this application, you agree to the Google Cloud Express Mode terms of service and any +applicable services and APIs. You also agree to only use this application for your trade, +business, craft, or profession. + Would you like to proceed? (yes/no) """ From e51b649b762262df925ceb5b7f97022f756bbacd Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Mon, 6 Apr 2026 15:05:23 -0700 Subject: [PATCH 142/192] chore: Improve event content handling and minor prompt adjustments Co-authored-by: Liang Wu PiperOrigin-RevId: 895518689 --- contributing/samples/hello_world/main.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/contributing/samples/hello_world/main.py b/contributing/samples/hello_world/main.py index 0ffde91341..20305e5acc 100755 --- a/contributing/samples/hello_world/main.py +++ b/contributing/samples/hello_world/main.py @@ -48,8 +48,15 @@ async def run_prompt(session: Session, new_message: str): session_id=session.id, new_message=content, ): - if event.content.parts and event.content.parts[0].text: - print(f'** {event.author}: {event.content.parts[0].text}') + if event.content.parts: + for part in event.content.parts: + if part.text: + print(f'** {event.author}: {part.text}') + if part.function_call: + print( + f'** {event.author} calls tool: {part.function_call.name} with' + f' args {part.function_call.args}' + ) async def run_prompt_bytes(session: Session, new_message: str): content = types.Content( @@ -74,6 +81,7 @@ async def check_rolls_in_state(rolls_size: int): session = await runner.session_service.get_session( app_name=app_name, user_id=user_id_1, session_id=session_11.id ) + print('** session.state:', session.state) assert len(session.state['rolls']) == rolls_size for roll in session.state['rolls']: assert roll > 0 and roll <= 100 @@ -82,9 +90,9 @@ async def check_rolls_in_state(rolls_size: int): print('Start time:', start_time) print('------------------------------------') await run_prompt(session_11, 'Hi') - await run_prompt(session_11, 'Roll a die with 100 sides') + await run_prompt(session_11, 'Roll a dice with 100 sides') await check_rolls_in_state(1) - await run_prompt(session_11, 'Roll a die again with 100 sides.') + await run_prompt(session_11, 'Roll a dice again with 100 sides.') await check_rolls_in_state(2) await run_prompt(session_11, 'What numbers did I got?') await run_prompt_bytes(session_11, 'Hi bytes') From 2b49163b399135f0d96b73a99eb4ace764ce87db Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Mon, 6 Apr 2026 15:42:41 -0700 Subject: [PATCH 143/192] feat: Support short options and positional arguments in RunSkillScriptTool - Updates `parameters_json_schema` to accept `short_options` (object) and `positional_args` (array). - Updates `_SkillScriptCodeExecutor._build_wrapper_code` to materialize these options for both Python and Shell scripts. - Appends `--` before positional arguments to remove ambiguity in CLI parsing. - Adds comprehensive unit tests. PiperOrigin-RevId: 895536577 --- src/google/adk/tools/skill_toolset.py | 65 +++++++++-- tests/unittests/tools/test_skill_toolset.py | 115 ++++++++++++++++++++ 2 files changed, 173 insertions(+), 7 deletions(-) diff --git a/src/google/adk/tools/skill_toolset.py b/src/google/adk/tools/skill_toolset.py index c74f29549b..514cfee52f 100644 --- a/src/google/adk/tools/skill_toolset.py +++ b/src/google/adk/tools/skill_toolset.py @@ -510,8 +510,15 @@ def _build_wrapper_code( if ext == "py": argv_list = [script_path] - for k, v in script_args.items(): + for k, v in script_args.get("args", {}).items(): argv_list.extend([f"--{k}", str(v)]) + for k, v in script_args.get("short_options", {}).items(): + argv_list.extend([f"-{k}", str(v)]) + positional_args = script_args.get("positional_args", []) + if positional_args: + argv_list.append("--") + for v in positional_args: + argv_list.append(str(v)) code_lines.extend([ f" sys.argv = {argv_list!r}", " try:", @@ -522,8 +529,15 @@ def _build_wrapper_code( ]) elif ext in ("sh", "bash"): arr = ["bash", script_path] - for k, v in script_args.items(): + for k, v in script_args.get("args", {}).items(): arr.extend([f"--{k}", str(v)]) + for k, v in script_args.get("short_options", {}).items(): + arr.extend([f"-{k}", str(v)]) + positional_args = script_args.get("positional_args", []) + if positional_args: + arr.append("--") + for v in positional_args: + arr.append(str(v)) timeout = self._script_timeout code_lines.extend([ " try:", @@ -590,8 +604,23 @@ def _get_declaration(self) -> types.FunctionDeclaration | None: "args": { "type": "object", "description": ( - "Optional arguments to pass to the script as key-value" - " pairs." + "Optional arguments to pass as long options (e.g.," + " {'n': 5} becomes --n 5)." + ), + }, + "short_options": { + "type": "object", + "description": ( + "Optional SHORT options to pass (e.g., {'n': 5}" + " becomes -n 5)." + ), + }, + "positional_args": { + "type": "array", + "items": {"type": "string"}, + "description": ( + "Optional list of positional arguments in exact order" + " (e.g., ['input.txt', 'output.txt'])." ), }, }, @@ -604,16 +633,38 @@ async def run_async( ) -> Any: skill_name = args.get("skill_name") script_path = args.get("script_path") - script_args = args.get("args", {}) - if not isinstance(script_args, dict): + script_args = { + "args": args.get("args", {}), + "short_options": args.get("short_options", {}), + "positional_args": args.get("positional_args", []), + } + if not isinstance(script_args["args"], dict): return { "error": ( "'args' must be a JSON object (key-value pairs)," - f" got {type(script_args).__name__}." + f" got {type(script_args['args']).__name__}." ), "error_code": "INVALID_ARGS_TYPE", } + if not isinstance(script_args["short_options"], dict): + return { + "error": ( + "'short_options' must be a JSON object (key-value pairs)," + f" got {type(script_args['short_options']).__name__}." + ), + "error_code": "INVALID_SHORT_OPTIONS_TYPE", + } + + if not isinstance(script_args["positional_args"], list): + return { + "error": ( + "'positional_args' must be a JSON array (list)," + f" got {type(script_args['positional_args']).__name__}." + ), + "error_code": "INVALID_POSITIONAL_ARGS_TYPE", + } + if not skill_name: return { "error": "Skill name is required.", diff --git a/tests/unittests/tools/test_skill_toolset.py b/tests/unittests/tools/test_skill_toolset.py index 09efff4d9a..51d6d88743 100644 --- a/tests/unittests/tools/test_skill_toolset.py +++ b/tests/unittests/tools/test_skill_toolset.py @@ -653,6 +653,61 @@ async def test_execute_script_with_input_args_shell(mock_skill1): assert "['bash', 'scripts/setup.sh', '--force', 'True']" in code_input.code +@pytest.mark.asyncio +async def test_execute_script_with_short_options_and_positional_args_python( + mock_skill1, +): + executor = _make_mock_executor(stdout="done\n") + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "script_path": "run.py", + "args": {"verbose": True}, + "short_options": {"n": "5"}, + "positional_args": ["input.txt"], + }, + tool_context=ctx, + ) + assert result["status"] == "success" + + call_args = executor.execute_code.call_args + code_input = call_args[0][1] + assert ( + "['scripts/run.py', '--verbose', 'True', '-n', '5', '--', 'input.txt']" + in code_input.code + ) + + +@pytest.mark.asyncio +async def test_execute_script_with_short_options_and_positional_args_shell( + mock_skill1, +): + executor = _make_mock_executor(stdout="done\n") + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "script_path": "setup.sh", + "short_options": {"n": "5"}, + "positional_args": ["input.txt"], + }, + tool_context=ctx, + ) + assert result["status"] == "success" + + call_args = executor.execute_code.call_args + code_input = call_args[0][1] + assert ( + "['bash', 'scripts/setup.sh', '-n', '5', '--', 'input.txt']" + in code_input.code + ) + + @pytest.mark.asyncio async def test_execute_script_scripts_prefix_stripping(mock_skill1): executor = _make_mock_executor(stdout="setup\n") @@ -1244,6 +1299,66 @@ async def test_execute_script_invalid_args_type(mock_skill1, bad_args): executor.execute_code.assert_not_called() +@pytest.mark.parametrize( + "bad_short_options", + [ + "not a dict", + 42, + True, + ["list"], + ], +) +@pytest.mark.asyncio +async def test_execute_script_invalid_short_options_type( + mock_skill1, bad_short_options +): + """Non-dict short_options should return INVALID_SHORT_OPTIONS_TYPE, not crash.""" + executor = _make_mock_executor() + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "script_path": "run.py", + "short_options": bad_short_options, + }, + tool_context=ctx, + ) + assert result["error_code"] == "INVALID_SHORT_OPTIONS_TYPE" + executor.execute_code.assert_not_called() + + +@pytest.mark.parametrize( + "bad_positional_args", + [ + "not a list", + 42, + True, + {"dict": 1}, + ], +) +@pytest.mark.asyncio +async def test_execute_script_invalid_positional_args_type( + mock_skill1, bad_positional_args +): + """Non-list positional_args should return INVALID_POSITIONAL_ARGS_TYPE, not crash.""" + executor = _make_mock_executor() + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "script_path": "run.py", + "positional_args": bad_positional_args, + }, + tool_context=ctx, + ) + assert result["error_code"] == "INVALID_POSITIONAL_ARGS_TYPE" + executor.execute_code.assert_not_called() + + # ── Finding 4: binary file content is handled in wrapper ── From bbad9ec64ce1617bc45148de97e6246752845b98 Mon Sep 17 00:00:00 2001 From: rei-arifi Date: Mon, 6 Apr 2026 16:14:33 -0700 Subject: [PATCH 144/192] fix(cli): fail Agent Engine deploy when config file path is invalid Merge https://github.com/google/adk-python/pull/5128 ### Link to Issue or Description of Change **1. Link to an existing issue (if applicable):** - Closes: #5127 **Problem:** When `--agent_engine_config_file` is set to a path that does not exist, `to_agent_engine` previously behaved like no config file was provided. **Solution:** This change raises `click.ClickException` with a message that includes the resolved path. ### Testing plan - [x] `uv run python -m pytest tests/unittests/cli/utils/test_cli_deploy.py -v` - [x] Manual test `adk deploy agent_engine ... --agent_engine_config_file /nonexistent.json` and confirm a clear error before remote deploy. The same command with correct filename relative to parent directory of the agent does not fail. **Unit Tests:** - [x] I have added or updated unit tests for my change. - [x] All unit tests pass locally. ``` uv run python -m pytest tests/unittests/cli/utils/test_cli_deploy.py -v =========================================================================================================================== test session starts =========================================================================================================================== platform darwin -- Python 3.11.13, pytest-9.0.2, pluggy-1.6.0 -- /Users/rei/Repos/adk-python/.venv/bin/python3 cachedir: .pytest_cache rootdir: /Users/rei/Repos/adk-python configfile: pyproject.toml plugins: mock-3.15.1, xdist-3.8.0, asyncio-1.3.0, langsmith-0.7.25, anyio-4.13.0 asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function collected 31 items tests/unittests/cli/utils/test_cli_deploy.py::test_resolve_project_with_option PASSED [ 3%] tests/unittests/cli/utils/test_cli_deploy.py::test_resolve_project_from_gcloud PASSED [ 6%] tests/unittests/cli/utils/test_cli_deploy.py::test_resolve_project_from_gcloud_fails PASSED [ 9%] tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.3.0-sqlite://s-gs://a-rag://m-None---session_service_uri=sqlite://s --artifact_service_uri=gs://a --memory_service_uri=rag://m] PASSED [ 12%] tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.2.5-sqlite://s-gs://a-rag://m-None---session_db_url=sqlite://s --artifact_storage_uri=gs://a] PASSED [ 16%] tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[0.5.0-sqlite://s-gs://a-rag://m-None---session_db_url=sqlite://s] PASSED [ 19%] tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.3.0-sqlite://s-None-None-None---session_service_uri=sqlite://s] PASSED [ 22%] tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.3.0-None-gs://a-rag://m-None---artifact_service_uri=gs://a --memory_service_uri=rag://m] PASSED [ 25%] tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.2.0-None-gs://a-None-None---artifact_storage_uri=gs://a] PASSED [ 29%] tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.21.0-None-None-None-False---no_use_local_storage] PASSED [ 32%] tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.21.0-None-None-None-True---use_local_storage] PASSED [ 35%] tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.21.0-sqlite://s-gs://a-None-False---session_service_uri=sqlite://s --artifact_service_uri=gs://a] PASSED [ 38%] tests/unittests/cli/utils/test_cli_deploy.py::test_agent_engine_app_template_compiles_with_windows_paths PASSED [ 41%] tests/unittests/cli/utils/test_cli_deploy.py::test_to_agent_engine_happy_path[True] PASSED [ 45%] tests/unittests/cli/utils/test_cli_deploy.py::test_to_agent_engine_happy_path[False] PASSED [ 48%] tests/unittests/cli/utils/test_cli_deploy.py::test_to_agent_engine_raises_when_explicit_config_file_missing PASSED [ 51%] tests/unittests/cli/utils/test_cli_deploy.py::test_to_agent_engine_skips_agent_import_validation_by_default PASSED [ 54%] tests/unittests/cli/utils/test_cli_deploy.py::test_to_agent_engine_validates_agent_import_when_enabled PASSED [ 58%] tests/unittests/cli/utils/test_cli_deploy.py::test_to_gke_happy_path[True] PASSED [ 61%] tests/unittests/cli/utils/test_cli_deploy.py::test_to_gke_happy_path[False] PASSED [ 64%] tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_skips_config_agents PASSED [ 67%] tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_raises_on_missing_agent_module PASSED [ 70%] tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_raises_on_missing_export PASSED [ 74%] tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_success_with_root_agent_export PASSED [ 77%] tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_success_with_app_export PASSED [ 80%] tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_success_with_relative_imports PASSED [ 83%] tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_raises_on_import_error PASSED [ 87%] tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_raises_on_basellm_import_error PASSED [ 90%] tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_raises_on_syntax_error PASSED [ 93%] tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_cleans_up_sys_modules PASSED [ 96%] tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_restores_sys_path PASSED [100%] =========================================================================================================================== 31 passed in 2.48s ============================================================================================================================ ``` **Manual End-to-End (E2E) Tests:** 1. Install adk cli from this PR 2. Run `adk deploy agent_engine ... --agent_engine_config_file /nonexistent.json # Failure expected` 3. Run `adk deploy agent_engine ... --agent_engine_config_file agent/config.json # Deployment proceeds if file path is correct` ### Checklist - [x] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document. - [x] I have performed a self-review of my own code. - [n/a] I have commented my code, particularly in hard-to-understand areas. - [x] I have added tests that prove my fix is effective or that my feature works. - [x] New and existing unit tests pass locally with my changes. - [x] I have manually tested my changes end-to-end. - [n/a] Any dependent changes have been merged and published in downstream modules. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/5128 from rei-arifi:fix/agent-engine-config-file-missing 0c2f9f7b2f7f2e681f7d814637204a113047d95a PiperOrigin-RevId: 895550691 --- src/google/adk/cli/cli_deploy.py | 7 +++++ tests/unittests/cli/utils/test_cli_deploy.py | 28 ++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/google/adk/cli/cli_deploy.py b/src/google/adk/cli/cli_deploy.py index b2072dfd0e..e4839be747 100644 --- a/src/google/adk/cli/cli_deploy.py +++ b/src/google/adk/cli/cli_deploy.py @@ -949,6 +949,13 @@ def to_agent_engine( click.echo('Resolving files and dependencies...') agent_config = {} + if agent_engine_config_file and not os.path.exists( + agent_engine_config_file + ): + raise click.ClickException( + 'Agent engine config file not found: ' + f'{parent_folder}/{agent_engine_config_file}' + ) if not agent_engine_config_file: # Attempt to read the agent engine config from .agent_engine_config.json in the dir (if any). agent_engine_config_file = os.path.join( diff --git a/tests/unittests/cli/utils/test_cli_deploy.py b/tests/unittests/cli/utils/test_cli_deploy.py index 22b029a976..ed1aa8cc60 100644 --- a/tests/unittests/cli/utils/test_cli_deploy.py +++ b/tests/unittests/cli/utils/test_cli_deploy.py @@ -306,6 +306,34 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: assert str(rmtree_recorder.get_last_call_args()[0]) == str(tmp_dir) +def test_to_agent_engine_raises_when_explicit_config_file_missing( + monkeypatch: pytest.MonkeyPatch, + agent_dir: Callable[[bool, bool], Path], + tmp_path: Path, +) -> None: + """It should fail with a clear error when --agent_engine_config_file is missing.""" + monkeypatch.setattr(shutil, "rmtree", lambda *a, **k: None) + src_dir = agent_dir(False, False) + missing_config = tmp_path / "no_such_agent_engine_config.json" + expected_abs = str(missing_config.resolve()) + + with pytest.raises(click.ClickException) as exc_info: + cli_deploy.to_agent_engine( + agent_folder=str(src_dir), + temp_folder="tmp", + adk_app="my_adk_app", + trace_to_cloud=True, + project="my-gcp-project", + region="us-central1", + display_name="My Test Agent", + description="A test agent.", + agent_engine_config_file=str(missing_config), + ) + + assert "Agent engine config file not found" in str(exc_info.value) + assert expected_abs in str(exc_info.value) + + def test_to_agent_engine_skips_agent_import_validation_by_default( monkeypatch: pytest.MonkeyPatch, agent_dir: Callable[[bool, bool], Path], From a22091058dd2ea6e1e0655b5946ce6ed7e72d25e Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 7 Apr 2026 08:04:14 -0700 Subject: [PATCH 145/192] feat(auth): Add public api to register custom auth provider with credential manager PiperOrigin-RevId: 895904372 --- src/google/adk/auth/auth_provider_registry.py | 9 +- src/google/adk/auth/auth_schemes.py | 17 +- src/google/adk/auth/auth_tool.py | 5 +- src/google/adk/auth/base_auth_provider.py | 13 ++ src/google/adk/auth/credential_manager.py | 60 +++++- tests/unittests/auth/test_auth_config.py | 14 ++ .../auth/test_auth_provider_registry.py | 17 +- .../unittests/auth/test_credential_manager.py | 182 ++++++++++++++++-- 8 files changed, 286 insertions(+), 31 deletions(-) diff --git a/src/google/adk/auth/auth_provider_registry.py b/src/google/adk/auth/auth_provider_registry.py index db6997ae04..624b95f762 100644 --- a/src/google/adk/auth/auth_provider_registry.py +++ b/src/google/adk/auth/auth_provider_registry.py @@ -42,13 +42,18 @@ def register( """ self._providers[auth_scheme_type] = provider_instance - def get_provider(self, auth_scheme: AuthScheme) -> BaseAuthProvider | None: + def get_provider( + self, auth_scheme: AuthScheme | type[AuthScheme] + ) -> BaseAuthProvider | None: """Get the provider instance for an auth scheme. Args: - auth_scheme: The auth scheme to get provider for. + auth_scheme: The auth scheme or the auth scheme type to get the provider + for. Returns: The provider instance if registered, None otherwise. """ + if isinstance(auth_scheme, type): + return self._providers.get(auth_scheme) return self._providers.get(type(auth_scheme)) diff --git a/src/google/adk/auth/auth_schemes.py b/src/google/adk/auth/auth_schemes.py index 78347eaf36..3d6364ff66 100644 --- a/src/google/adk/auth/auth_schemes.py +++ b/src/google/adk/auth/auth_schemes.py @@ -27,6 +27,7 @@ from pydantic import Field from ..utils.feature_decorator import experimental +from .auth_credential import BaseModelWithConfig class OpenIdConnectWithConfig(SecurityBase): @@ -42,8 +43,20 @@ class OpenIdConnectWithConfig(SecurityBase): scopes: Optional[List[str]] = None -# AuthSchemes contains SecuritySchemes from OpenAPI 3.0 and an extra flattened OpenIdConnectWithConfig. -AuthScheme = Union[SecurityScheme, OpenIdConnectWithConfig] +class CustomAuthScheme(BaseModelWithConfig): + """A flexible model for custom authentication schemes. + + The subclasses must define a `default` for the `type_` field, if using OAuth2 + user consent flow, to ensure correct rehydration. + """ + + type_: str = Field(alias="type") + + +# AuthSchemes contains SecuritySchemes from OpenAPI 3.0, an extra flattened +# OpenIdConnectWithConfig, and supports external schemes that subclasses +# CustomAuthScheme +AuthScheme = Union[SecurityScheme, OpenIdConnectWithConfig, CustomAuthScheme] class OAuthGrantType(str, Enum): diff --git a/src/google/adk/auth/auth_tool.py b/src/google/adk/auth/auth_tool.py index cc8a244e71..820540ef12 100644 --- a/src/google/adk/auth/auth_tool.py +++ b/src/google/adk/auth/auth_tool.py @@ -106,8 +106,11 @@ def get_credential_key(self): if auth_scheme.model_extra: auth_scheme = auth_scheme.model_copy(deep=True) auth_scheme.model_extra.clear() + + type_ = auth_scheme.type_ + type_name = type_.name if type_ and hasattr(type_, "name") else str(type_) scheme_name = ( - f"{auth_scheme.type_.name}_{_stable_model_digest(auth_scheme)}" + f"{type_name}_{_stable_model_digest(auth_scheme)}" if auth_scheme else "" ) diff --git a/src/google/adk/auth/base_auth_provider.py b/src/google/adk/auth/base_auth_provider.py index 902f35aa25..ab34e3b485 100644 --- a/src/google/adk/auth/base_auth_provider.py +++ b/src/google/adk/auth/base_auth_provider.py @@ -16,6 +16,10 @@ from abc import ABC from abc import abstractmethod +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from .auth_schemes import AuthScheme from ..agents.callback_context import CallbackContext from ..features import experimental @@ -28,6 +32,15 @@ class BaseAuthProvider(ABC): """Abstract base class for custom authentication providers.""" + @property + def supported_auth_schemes(self) -> tuple[type[AuthScheme], ...]: + """The AuthScheme types supported by this provider. + + Subclasses can override this to return a tuple of scheme types, enabling + 1-parameter registration. + """ + return () + @abstractmethod async def get_auth_credential( self, auth_config: AuthConfig, context: CallbackContext diff --git a/src/google/adk/auth/credential_manager.py b/src/google/adk/auth/credential_manager.py index 08d1184d4d..46d8057cd9 100644 --- a/src/google/adk/auth/credential_manager.py +++ b/src/google/adk/auth/credential_manager.py @@ -14,7 +14,9 @@ from __future__ import annotations +from collections.abc import Sequence import logging +import threading from typing import Optional from fastapi.openapi.models import OAuth2 @@ -25,10 +27,13 @@ from .auth_credential import AuthCredential from .auth_credential import AuthCredentialTypes from .auth_provider_registry import AuthProviderRegistry +from .auth_schemes import AuthScheme from .auth_schemes import AuthSchemeType +from .auth_schemes import CustomAuthScheme from .auth_schemes import ExtendedOAuth2 from .auth_schemes import OpenIdConnectWithConfig from .auth_tool import AuthConfig +from .base_auth_provider import BaseAuthProvider from .exchanger.base_credential_exchanger import BaseCredentialExchanger from .exchanger.base_credential_exchanger import ExchangeResult from .exchanger.credential_exchanger_registry import CredentialExchangerRegistry @@ -38,6 +43,25 @@ logger = logging.getLogger("google_adk." + __name__) +def _rehydrate_custom_scheme( + scheme: CustomAuthScheme, supported_schemes: Sequence[type[AuthScheme]] +) -> CustomAuthScheme: + """Rehydrate a CustomAuthScheme into one of the given supported_schemes.""" + incoming_type = scheme.type_ + for scheme_class in supported_schemes: + type_field = scheme_class.model_fields.get("type_") + # Custom AuthScheme classes must define a `default` for their `type_` field + # to be rehydrated correctly. + if type_field and type_field.default == incoming_type: + data = scheme.model_dump(by_alias=True) + if scheme.model_extra: + data.update(scheme.model_extra) + return scheme_class.model_validate(data) + raise ValueError( + f"Cannot rehydrate: no registered scheme matches type '{incoming_type}'" + ) + + @experimental class CredentialManager: """Manages authentication credentials through a structured workflow. @@ -77,12 +101,32 @@ class CredentialManager: ``` """ + _auth_provider_registry = AuthProviderRegistry() + _registry_lock = threading.Lock() + + @classmethod + def register_auth_provider(cls, provider: BaseAuthProvider) -> None: + """Public API for developers to register custom auth providers.""" + with cls._registry_lock: + for scheme_type in provider.supported_auth_schemes: + existing_provider = cls._auth_provider_registry.get_provider( + scheme_type + ) + if existing_provider is not None: + if existing_provider is not provider: + logger.warning( + "An auth provider is already registered for scheme %s. " + "Ignoring the new provider.", + scheme_type, + ) + continue + cls._auth_provider_registry.register(scheme_type, provider) + def __init__( self, auth_config: AuthConfig, ): self._auth_config = auth_config - self._auth_provider_registry = AuthProviderRegistry() self._exchanger_registry = CredentialExchangerRegistry() self._refresher_registry = CredentialRefresherRegistry() self._discovery_manager = OAuth2DiscoveryManager() @@ -139,6 +183,20 @@ async def get_auth_credential( ) -> Optional[AuthCredential]: """Load and prepare authentication credential through a structured workflow.""" + # Pydantic may have deserialized an unknown scheme into a generic + # CustomAuthScheme. If so, rehydrate it first into a specific subclass. + # Note: Custom authentication scheme classes must have been imported into + # the Python runtime before get_auth_credential is called for their + # subclasses to be registered. This is fine as developer will anyway import + # them while registering the auth providers. + # Note: `__subclasses__()` only returns immediate subclasses, if there is a + # subclass of a subclass of CustomAuthScheme then it will not be returned. + # pylint: disable=unidiomatic-typecheck Needs exact class matching. + if type(self._auth_config.auth_scheme) is CustomAuthScheme: + self._auth_config.auth_scheme = _rehydrate_custom_scheme( + self._auth_config.auth_scheme, + CustomAuthScheme.__subclasses__(), + ) # First, check if a registered auth provider is available before attempting # to retrieve tokens natively. provider = self._auth_provider_registry.get_provider( diff --git a/tests/unittests/auth/test_auth_config.py b/tests/unittests/auth/test_auth_config.py index ba87954bdc..ab5f6b584c 100644 --- a/tests/unittests/auth/test_auth_config.py +++ b/tests/unittests/auth/test_auth_config.py @@ -23,6 +23,7 @@ from google.adk.auth.auth_credential import AuthCredential from google.adk.auth.auth_credential import AuthCredentialTypes from google.adk.auth.auth_credential import OAuth2Auth +from google.adk.auth.auth_schemes import CustomAuthScheme from google.adk.auth.auth_tool import AuthConfig import pytest @@ -162,3 +163,16 @@ def _run_with_seed(seed: str) -> str: ).strip() assert _run_with_seed("0") == _run_with_seed("1") + + +def test_credential_key_with_custom_auth_scheme(): + """Test generating a credential key when the auth scheme is a CustomAuthScheme (type_ is a string).""" + custom_scheme = CustomAuthScheme.model_validate({"type": "mock_custom_type"}) + + custom_config = AuthConfig( + auth_scheme=custom_scheme, + ) + + key = custom_config.credential_key + assert key.startswith("adk_mock_custom_type_") + assert len(key) > len("adk_mock_custom_type_") diff --git a/tests/unittests/auth/test_auth_provider_registry.py b/tests/unittests/auth/test_auth_provider_registry.py index ca7b567e4c..7ccdc5ce81 100644 --- a/tests/unittests/auth/test_auth_provider_registry.py +++ b/tests/unittests/auth/test_auth_provider_registry.py @@ -15,16 +15,17 @@ """Unit tests for the AuthProviderRegistry.""" from google.adk.auth.auth_provider_registry import AuthProviderRegistry +from google.adk.auth.auth_schemes import CustomAuthScheme from google.adk.auth.base_auth_provider import BaseAuthProvider -from pydantic import BaseModel +from pydantic import Field -class SchemeA(BaseModel): - pass +class SchemeA(CustomAuthScheme): + type_: str = Field(default="scheme_a") -class SchemeB(BaseModel): - pass +class SchemeB(CustomAuthScheme): + type_: str = Field(default="scheme_b") class TestAuthProviderRegistry: @@ -42,10 +43,15 @@ def test_register_and_get_provider(self, mocker): assert registry.get_provider(SchemeA()) is provider_a assert registry.get_provider(SchemeB()) is provider_b + # Test getting by scheme type + assert registry.get_provider(SchemeA) is provider_a + assert registry.get_provider(SchemeB) is provider_b + def test_get_unregistered_provider_returns_none(self): """Test that get_provider returns None for unregistered scheme types.""" registry = AuthProviderRegistry() assert registry.get_provider(SchemeA()) is None + assert registry.get_provider(SchemeA) is None def test_register_duplicate_type_overwrites_existing(self, mocker): """Test that registering a provider for an existing type overwrites the previous one.""" @@ -57,3 +63,4 @@ def test_register_duplicate_type_overwrites_existing(self, mocker): registry.register(SchemeA, provider_2) assert registry.get_provider(SchemeA()) is provider_2 + assert registry.get_provider(SchemeA) is provider_2 diff --git a/tests/unittests/auth/test_credential_manager.py b/tests/unittests/auth/test_credential_manager.py index 0cb999e5d9..559c76138b 100644 --- a/tests/unittests/auth/test_credential_manager.py +++ b/tests/unittests/auth/test_credential_manager.py @@ -21,6 +21,7 @@ from fastapi.openapi.models import OAuthFlowAuthorizationCode from fastapi.openapi.models import OAuthFlowImplicit from fastapi.openapi.models import OAuthFlows +from fastapi.openapi.models import SecurityBase from google.adk.agents.callback_context import CallbackContext from google.adk.agents.invocation_context import InvocationContext from google.adk.agents.llm_agent import Agent @@ -31,22 +32,72 @@ from google.adk.auth.auth_credential import ServiceAccountCredential from google.adk.auth.auth_schemes import AuthScheme from google.adk.auth.auth_schemes import AuthSchemeType +from google.adk.auth.auth_schemes import CustomAuthScheme from google.adk.auth.auth_schemes import ExtendedOAuth2 from google.adk.auth.auth_tool import AuthConfig from google.adk.auth.base_auth_provider import BaseAuthProvider +from google.adk.auth.credential_manager import _rehydrate_custom_scheme from google.adk.auth.credential_manager import CredentialManager from google.adk.auth.credential_manager import ServiceAccountCredentialExchanger from google.adk.auth.oauth2_discovery import AuthorizationServerMetadata from google.adk.sessions.in_memory_session_service import InMemorySessionService from google.adk.tools.tool_context import ToolContext +from pydantic import Field import pytest from .. import testing_utils +class DummyAuthScheme(SecurityBase): + """A custom auth scheme for testing pluggable auth providers.""" + + type_: str = "dummy_auth_scheme" + + class TestCredentialManager: """Test suite for CredentialManager.""" + @pytest.fixture(autouse=True) + def _clear_registry(self): + """Clear the global auth provider registry before each test.""" + CredentialManager._auth_provider_registry._providers.clear() + + def test_register_auth_provider(self, mocker): + """Test register_auth_provider class method.""" + provider = mocker.Mock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) + + CredentialManager.register_auth_provider(provider) + + assert ( + CredentialManager._auth_provider_registry._providers[DummyAuthScheme] + == provider + ) + + @patch("google.adk.auth.credential_manager.logger") + def test_register_auth_provider_collision(self, mock_logger, mocker): + """Test register_auth_provider logs warning on scheme collision, but ignores exact duplicates.""" + provider1 = mocker.Mock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) + CredentialManager.register_auth_provider(provider1) + + # Identical provider does not warn + CredentialManager.register_auth_provider(provider1) + mock_logger.warning.assert_not_called() + + provider2 = mocker.Mock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) + + CredentialManager.register_auth_provider(provider2) + mock_logger.warning.assert_called_once() + assert ( + CredentialManager._auth_provider_registry._providers[DummyAuthScheme] + == provider1 + ) + def test_init(self): """Test CredentialManager initialization.""" auth_config = Mock(spec=AuthConfig) @@ -65,20 +116,58 @@ async def test_request_credential(self): tool_context.request_credential.assert_called_once_with(auth_config) + @pytest.mark.asyncio + async def test_get_auth_credential_rehydrates_custom_scheme(self, mocker): + """Test that get_auth_credential rehydrates generic CustomAuthScheme.""" + + class SpecificCustomScheme(CustomAuthScheme): + type_: str = "specific_custom_scheme" + + # Create a generic CustomAuthScheme instance that models SpecificCustomScheme data + mock_scheme_data = {"type": "specific_custom_scheme"} + raw_custom_scheme = CustomAuthScheme.model_validate(mock_scheme_data) + + # Verify it's exactly the base class currently + assert type(raw_custom_scheme) is CustomAuthScheme + + auth_config = mocker.Mock(spec=AuthConfig) + auth_config.auth_scheme = raw_custom_scheme + + mock_context = mocker.Mock(spec=CallbackContext) + + manager = CredentialManager(auth_config) + + # Supply a mock provider so we bypass the complex native token loading logic downstream + mock_provider = mocker.AsyncMock(spec=BaseAuthProvider) + mock_provider.get_auth_credential.return_value = AuthCredential( + auth_type=AuthCredentialTypes.API_KEY, api_key="dummy" + ) + mocker.patch.object( + manager._auth_provider_registry, + "get_provider", + return_value=mock_provider, + ) + + await manager.get_auth_credential(mock_context) + + # Verify the auth_scheme mutated to the specific subclass + assert isinstance(manager._auth_config.auth_scheme, SpecificCustomScheme) + assert manager._auth_config.auth_scheme.type_ == "specific_custom_scheme" + @pytest.mark.asyncio async def test_get_auth_credential_uses_registered_provider(self, mocker): """Test get_auth_credential uses registered provider if available.""" credential = AuthCredential( auth_type=AuthCredentialTypes.API_KEY, api_key="test-key" ) - provider = mocker.AsyncMock(spec=BaseAuthProvider) + provider = mocker.AsyncMock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) provider.get_auth_credential.return_value = credential manager = CredentialManager( - mocker.Mock(spec=AuthConfig, auth_scheme="scheme") - ) - mocker.patch.object( - manager._auth_provider_registry, "get_provider", return_value=provider + mocker.Mock(spec=AuthConfig, auth_scheme=DummyAuthScheme()) ) + CredentialManager.register_auth_provider(provider) mock_context = mocker.Mock(spec=CallbackContext) received_credential = await manager.get_auth_credential(mock_context) @@ -105,7 +194,9 @@ async def test_get_auth_credential_fallback_when_no_provider(self, mocker): # Setup registry to return None (no provider found) mocker.patch.object( - manager._auth_provider_registry, "get_provider", return_value=None + CredentialManager._auth_provider_registry, + "get_provider", + return_value=None, ) result = await manager.get_auth_credential(mocker.Mock()) @@ -121,22 +212,19 @@ async def test_get_auth_credential_raises_error_when_provider_returns_none( auth_type=AuthCredentialTypes.API_KEY, api_key="fallback-key" ) - auth_scheme = mocker.Mock(spec=AuthScheme) - auth_scheme.type_ = AuthSchemeType.apiKey + provider = mocker.AsyncMock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) + provider.get_auth_credential.return_value = None auth_config = mocker.Mock(spec=AuthConfig) - auth_config.auth_scheme = auth_scheme + auth_config.auth_scheme = DummyAuthScheme() auth_config.raw_auth_credential = api_key_cred auth_config.exchanged_auth_credential = None manager = CredentialManager(auth_config) + CredentialManager.register_auth_provider(provider) - # Setup provider to return None - provider = mocker.AsyncMock(spec=BaseAuthProvider) - provider.get_auth_credential.return_value = None - mocker.patch.object( - manager._auth_provider_registry, "get_provider", return_value=provider - ) mock_context = mocker.Mock(spec=CallbackContext) with pytest.raises( @@ -152,15 +240,15 @@ async def test_get_auth_credential_triggers_user_consent_when_provider_returns_a credential = mocker.Mock(spec=AuthCredential) credential.oauth2 = mocker.Mock(auth_uri="http://auth", access_token=None) - provider = mocker.AsyncMock(spec=BaseAuthProvider) + provider = mocker.AsyncMock( + spec=BaseAuthProvider, supported_auth_schemes=(DummyAuthScheme,) + ) provider.get_auth_credential.return_value = credential manager = CredentialManager( - mocker.Mock(spec=AuthConfig, auth_scheme="scheme") - ) - mocker.patch.object( - manager._auth_provider_registry, "get_provider", return_value=provider + mocker.Mock(spec=AuthConfig, auth_scheme=DummyAuthScheme()) ) + CredentialManager.register_auth_provider(provider) mock_context = mocker.Mock(spec=CallbackContext) assert await manager.get_auth_credential(mock_context) is None @@ -980,3 +1068,57 @@ def http_bearer_credential(): auth_type=AuthCredentialTypes.HTTP, http=Mock(), ) + + +class TestRehydrateCustomScheme: + """Unit tests for the module-level _rehydrate_custom_scheme function.""" + + def test_rehydrate_custom_scheme_success(self): + mock_scheme_data = {"type": "dummy_auth_scheme"} + custom_scheme = CustomAuthScheme.model_validate(mock_scheme_data) + + rehydrated = _rehydrate_custom_scheme( + scheme=custom_scheme, supported_schemes=[DummyAuthScheme] + ) + + assert isinstance(rehydrated, DummyAuthScheme) + assert rehydrated.type_ == "dummy_auth_scheme" + + def test_rehydrate_custom_scheme_with_model_extra(self): + """Test that model_extras are preserved during rehydration.""" + + class DummyAuthSchemeWithExtra(CustomAuthScheme): + type_: str = Field(default="dummy_with_extra") + some_extra_field: str | None = None + + mock_scheme_data = { + "type": "dummy_with_extra", + "some_extra_field": "extra_value", + } + # Because CustomAuthScheme doesn't know about `some_extra_field`, it goes' + # into model_extra + custom_scheme = CustomAuthScheme.model_validate(mock_scheme_data) + assert custom_scheme.model_extra == {"some_extra_field": "extra_value"} + + rehydrated = _rehydrate_custom_scheme( + scheme=custom_scheme, supported_schemes=[DummyAuthSchemeWithExtra] + ) + + assert isinstance(rehydrated, DummyAuthSchemeWithExtra) + assert rehydrated.type_ == "dummy_with_extra" + assert rehydrated.some_extra_field == "extra_value" + + def test_rehydrate_custom_scheme_failure(self): + mock_scheme_data = {"type": "unknown_scheme"} + custom_scheme = CustomAuthScheme.model_validate(mock_scheme_data) + + with pytest.raises( + ValueError, + match=( + "Cannot rehydrate: no registered scheme matches type" + " 'unknown_scheme'" + ), + ): + _rehydrate_custom_scheme( + scheme=custom_scheme, supported_schemes=[DummyAuthScheme] + ) From 9199189e5767ed72c419064fe5999510a74c235d Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 7 Apr 2026 09:43:16 -0700 Subject: [PATCH 146/192] feat(eval): Add ADK CLI for eval_set generation PiperOrigin-RevId: 895946363 --- src/google/adk/cli/cli_tools_click.py | 123 ++++++++++++++ .../_vertex_ai_scenario_generation_facade.py | 108 ++++++++++++ .../adk/evaluation/conversation_scenarios.py | 30 ++++ .../test_generate_eval_cases_cli.py | 72 ++++++++ ...st_vertex_ai_scenario_generation_facade.py | 155 ++++++++++++++++++ 5 files changed, 488 insertions(+) create mode 100644 src/google/adk/evaluation/_vertex_ai_scenario_generation_facade.py create mode 100644 tests/integration/test_generate_eval_cases_cli.py create mode 100644 tests/unittests/evaluation/test_vertex_ai_scenario_generation_facade.py diff --git a/src/google/adk/cli/cli_tools_click.py b/src/google/adk/cli/cli_tools_click.py index 171a63b425..fff30f2a14 100644 --- a/src/google/adk/cli/cli_tools_click.py +++ b/src/google/adk/cli/cli_tools_click.py @@ -1064,6 +1064,7 @@ def cli_optimize( from .cli_eval import _collect_eval_results from .cli_eval import _collect_inferences from .cli_eval import get_root_agent + except ModuleNotFoundError as mnf: raise click.ClickException(MISSING_EVAL_DEPENDENCIES_MESSAGE) from mnf @@ -1199,6 +1200,7 @@ def cli_add_eval_case( from ..evaluation.eval_case import EvalCase from ..evaluation.eval_case import SessionInput from .cli_eval import get_eval_sets_manager + except ModuleNotFoundError as mnf: raise click.ClickException(MISSING_EVAL_DEPENDENCIES_MESSAGE) from mnf @@ -1247,6 +1249,127 @@ def cli_add_eval_case( raise click.ClickException(f"Failed to add eval case(s): {e}") from e +@eval_set.command("generate_eval_cases", cls=HelpfulCommand) +@click.argument( + "agent_module_file_path", + type=click.Path( + exists=True, dir_okay=True, file_okay=False, resolve_path=True + ), +) +@click.argument("eval_set_id", type=str, required=True) +@click.option( + "--user_simulation_config_file", + type=click.Path( + exists=True, dir_okay=False, file_okay=True, resolve_path=True + ), + help=( + "A path to file containing JSON serialized " + "UserScenarioGenerationConfig dict." + ), + required=True, +) +@eval_options() +def cli_generate_eval_cases( + agent_module_file_path: str, + eval_set_id: str, + user_simulation_config_file: str, + eval_storage_uri: Optional[str] = None, + log_level: str = "INFO", +): + """Generates eval cases dynamically and adds them to the given eval set. + + Uses Vertex AI Eval SDK to generate conversation scenarios based on an + Agent's info and definitions. It will automatically create the empty eval_set + if it has not been created in advance. + + Args: + agent_module_file_path: The path to the agent module file. + eval_set_id: The id of the eval set to generate cases for. + user_simulation_config_file: The path to the user simulation config file. + eval_storage_uri: The eval storage uri. + log_level: The log level. + """ + logs.setup_adk_logger(getattr(logging, log_level.upper())) + try: + from ..evaluation._vertex_ai_scenario_generation_facade import ScenarioGenerator + from ..evaluation.conversation_scenarios import ConversationGenerationConfig + from ..evaluation.eval_case import EvalCase + from ..evaluation.eval_case import SessionInput + from .cli_eval import get_eval_sets_manager + from .cli_eval import get_root_agent + from .utils.state import create_empty_state + + except ModuleNotFoundError as mnf: + raise click.ClickException(MISSING_EVAL_DEPENDENCIES_MESSAGE) from mnf + + app_name = os.path.basename(agent_module_file_path) + agents_dir = os.path.dirname(agent_module_file_path) + + try: + eval_sets_manager = get_eval_sets_manager(eval_storage_uri, agents_dir) + root_agent = get_root_agent(agent_module_file_path) + + # Try to create if it doesn't already exist. + if ( + eval_sets_manager.get_eval_set( + app_name=app_name, eval_set_id=eval_set_id + ) + is None + ): + eval_sets_manager.create_eval_set( + app_name=app_name, eval_set_id=eval_set_id + ) + click.echo(f"Eval set '{eval_set_id}' created for app '{app_name}'.") + else: + click.echo(f"Eval set '{eval_set_id}' already exists.") + + with open(user_simulation_config_file, "r") as f: + config = ConversationGenerationConfig.model_validate_json(f.read()) + + generator = ScenarioGenerator() + click.echo("Generating scenarios utilizing Vertex AI Eval SDK...") + scenarios = generator.generate_scenarios(root_agent, config) + + # TODO(pthodoroff): Expose initial session state when simulation library + # supports it. + initial_session_state = create_empty_state(root_agent) + + session_input = SessionInput( + app_name=app_name, user_id="test_user_id", state=initial_session_state + ) + + for scenario in scenarios: + scenario_str = json.dumps(scenario.model_dump(), sort_keys=True) + eval_id = hashlib.sha256(scenario_str.encode("utf-8")).hexdigest()[:8] + eval_case = EvalCase( + eval_id=eval_id, + conversation_scenario=scenario, + session_input=session_input, + creation_timestamp=datetime.now().timestamp(), + ) + + if ( + eval_sets_manager.get_eval_case( + app_name=app_name, eval_set_id=eval_set_id, eval_case_id=eval_id + ) + is None + ): + eval_sets_manager.add_eval_case( + app_name=app_name, eval_set_id=eval_set_id, eval_case=eval_case + ) + click.echo( + f"Eval case '{eval_case.eval_id}' added to eval set" + f" '{eval_set_id}'." + ) + else: + click.echo( + f"Eval case '{eval_case.eval_id}' already exists in eval set" + f" '{eval_set_id}', skipped adding." + ) + except Exception as e: + raise click.ClickException(f"Failed to generate eval case(s): {e}") from e + + def web_options(): """Decorator to add web UI options to click commands.""" diff --git a/src/google/adk/evaluation/_vertex_ai_scenario_generation_facade.py b/src/google/adk/evaluation/_vertex_ai_scenario_generation_facade.py new file mode 100644 index 0000000000..18426e4226 --- /dev/null +++ b/src/google/adk/evaluation/_vertex_ai_scenario_generation_facade.py @@ -0,0 +1,108 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Vertex AI Scenario Generation Facade.""" + +from __future__ import annotations + +import logging +import os + +from . import conversation_scenarios +from ..agents import base_agent +from ..dependencies.vertexai import vertexai + +types = vertexai.types + + +logger = logging.getLogger("google_adk." + __name__) + +_ERROR_MESSAGE_SUFFIX = """ +You should specify both project id and location. This metric uses Vertex Gen AI +Eval SDK, and it requires google cloud credentials. + +If using an .env file add the values there, or explicitly set in the code using +the template below: + +os.environ['GOOGLE_CLOUD_LOCATION'] = +os.environ['GOOGLE_CLOUD_PROJECT'] = +""" + + +class ScenarioGenerator: + """Facade for generating eval scenarios using Vertex Gen AI Eval SDK. + + Using this class requires a GCP project. Please set GOOGLE_CLOUD_PROJECT and + GOOGLE_CLOUD_LOCATION in your .env file. + """ + + def __init__(self): + project_id = os.environ.get("GOOGLE_CLOUD_PROJECT") + location = os.environ.get("GOOGLE_CLOUD_LOCATION") + api_key = os.environ.get("GOOGLE_API_KEY") + + if api_key: + self._client = vertexai.Client(api_key=api_key) + elif project_id or location: + if not project_id: + raise ValueError("Missing project id." + _ERROR_MESSAGE_SUFFIX) + if not location: + raise ValueError("Missing location." + _ERROR_MESSAGE_SUFFIX) + self._client = vertexai.Client(project=project_id, location=location) + else: + raise ValueError( + "Either API Key or Google cloud Project id and location should be" + " specified." + ) + + def generate_scenarios( + self, + agent: base_agent.BaseAgent, + config: conversation_scenarios.ConversationGenerationConfig, + ) -> list[conversation_scenarios.ConversationScenario]: + """Generates conversation scenarios for the specified agent. + + Args: + agent: The root agent representing the system under test. + config: The configuration for ConversationGenerationConfig. + + Returns: + A list of ADK ConversationScenario objects. + """ + agent_info = types.evals.AgentInfo.load_from_agent(agent=agent) + + vertex_config = types.evals.UserScenarioGenerationConfig( + count=config.count, + generation_instruction=config.generation_instruction, + environment_context=config.environment_context, + model_name=config.model_name, + ) + + eval_dataset = self._client.evals.generate_conversation_scenarios( + agent_info=agent_info, + config=vertex_config, + ) + + scenarios = [] + for eval_case in eval_dataset.eval_cases: + if not eval_case.user_scenario: + continue + scenarios.append( + conversation_scenarios.ConversationScenario( + starting_prompt=eval_case.user_scenario.starting_prompt, + conversation_plan=eval_case.user_scenario.conversation_plan, + ) + ) + + return scenarios diff --git a/src/google/adk/evaluation/conversation_scenarios.py b/src/google/adk/evaluation/conversation_scenarios.py index dc2d09b783..ec29804867 100644 --- a/src/google/adk/evaluation/conversation_scenarios.py +++ b/src/google/adk/evaluation/conversation_scenarios.py @@ -75,3 +75,33 @@ class ConversationScenarios(EvalBaseModel): scenarios: list[ConversationScenario] = Field( default_factory=list, description="""A list of ConversationScenario.""" ) + + +class ConversationGenerationConfig(EvalBaseModel): + """Configuration for generating conversation scenarios.""" + + count: int = Field( + description="The number of conversation scenarios to generate." + ) + generation_instruction: Optional[str] = Field( + default=None, + description=( + "Optional natural language goal to guide the EvalSet generation." + ), + ) + environment_context: Optional[str] = Field( + default=None, + description=( + "Context describing the backend data or state accessible to the" + " agent's tools. This acts as the 'ground truth' for the simulation," + " ensuring generated queries reference data that actually exists" + " (e.g., a list of available models so the generator knows what the" + " 'get_model_available' tool will return)." + ), + ) + model_name: str = Field( + description=( + "The name of the Gemini model to use for generating the scenarios" + " (e.g., 'gemini-2.5-flash')." + ) + ) diff --git a/tests/integration/test_generate_eval_cases_cli.py b/tests/integration/test_generate_eval_cases_cli.py new file mode 100644 index 0000000000..b02c035446 --- /dev/null +++ b/tests/integration/test_generate_eval_cases_cli.py @@ -0,0 +1,72 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for generate_eval_cases CLI command.""" + +import json +import os +import pathlib + +from click.testing import CliRunner +# We must mock or import the command safely for pytest +from google.adk.cli.cli_tools_click import cli_generate_eval_cases +import pytest + + +def test_cli_generate_eval_cases_integration(tmp_path): + """E2E Test for the Vertex AI Scenario Generation Facade via the CLI.""" + # This requires identical project setup to Kokoro's e2e_test_gcp_ubuntu_docker + if not os.environ.get("GOOGLE_CLOUD_PROJECT"): + pytest.skip( + "GOOGLE_CLOUD_PROJECT is not set. Skipping generation CLI integration" + " test." + ) + + # 1. Provide a UserSimulationConfig proxy + config_file = tmp_path / "user_sim_config.json" + config_data = { + "generation_instruction": ( + "Generate a test conversation scenario where the user asks a simple" + " question." + ), + "count": 1, + "model_name": "gemini-2.5-flash", + } + with open(config_file, "w") as f: + json.dump(config_data, f) + + eval_set_id = "cli_gen_test_eval_set" + + # 2. Invoke the command via click's testing runner + runner = CliRunner() + result = runner.invoke( + cli_generate_eval_cases, + [ + str( + pathlib.Path(__file__).parent + / "fixture" + / "home_automation_agent" + ), + eval_set_id, + f"--user_simulation_config_file={config_file}", + "--log_level=DEBUG", + ], + ) + + # 3. Assert correct output + assert ( + result.exit_code == 0 + ), f"Command failed: {result.exception}\nOutput: {result.output}" + assert "Generating scenarios utilizing Vertex AI Eval SDK..." in result.output + assert "added to eval set" in result.output diff --git a/tests/unittests/evaluation/test_vertex_ai_scenario_generation_facade.py b/tests/unittests/evaluation/test_vertex_ai_scenario_generation_facade.py new file mode 100644 index 0000000000..b28e205851 --- /dev/null +++ b/tests/unittests/evaluation/test_vertex_ai_scenario_generation_facade.py @@ -0,0 +1,155 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for the Vertex AI Scenario Generation Facade.""" + +from __future__ import annotations + +import os + +from google.adk.agents.base_agent import BaseAgent +from google.adk.dependencies.vertexai import vertexai +from google.adk.evaluation._vertex_ai_scenario_generation_facade import ScenarioGenerator +from google.adk.evaluation.conversation_scenarios import ConversationGenerationConfig +import pytest + +vertexai_types = vertexai.types + + +class TestScenarioGenerator: + """Unit tests for ScenarioGenerator.""" + + def test_constructor_with_api_key(self, mocker): + mocker.patch.dict( + os.environ, {"GOOGLE_API_KEY": "test_api_key"}, clear=True + ) + mock_client_cls = mocker.patch( + "google.adk.dependencies.vertexai.vertexai.Client" + ) + ScenarioGenerator() + + mock_client_cls.assert_called_once_with(api_key="test_api_key") + + def test_constructor_with_project_and_location(self, mocker): + """Test constructor with project and location in env.""" + mocker.patch.dict( + os.environ, + { + "GOOGLE_CLOUD_PROJECT": "test_project", + "GOOGLE_CLOUD_LOCATION": "test_location", + }, + clear=True, + ) + mock_client_cls = mocker.patch( + "google.adk.dependencies.vertexai.vertexai.Client" + ) + ScenarioGenerator() + + mock_client_cls.assert_called_once_with( + project="test_project", location="test_location" + ) + + def test_constructor_with_project_only_raises_error(self, mocker): + mocker.patch.dict( + os.environ, {"GOOGLE_CLOUD_PROJECT": "test_project"}, clear=True + ) + mocker.patch("google.adk.dependencies.vertexai.vertexai.Client") + + with pytest.raises(ValueError, match="Missing location."): + ScenarioGenerator() + + def test_constructor_with_location_only_raises_error(self, mocker): + mocker.patch.dict( + os.environ, {"GOOGLE_CLOUD_LOCATION": "test_location"}, clear=True + ) + mocker.patch("google.adk.dependencies.vertexai.vertexai.Client") + + with pytest.raises(ValueError, match="Missing project id."): + ScenarioGenerator() + + def test_constructor_with_no_env_vars_raises_error(self, mocker): + mocker.patch.dict(os.environ, {}, clear=True) + mocker.patch("google.adk.dependencies.vertexai.vertexai.Client") + + with pytest.raises( + ValueError, + match=( + "Either API Key or Google cloud Project id and location should be" + " specified." + ), + ): + ScenarioGenerator() + + def test_generate_scenarios(self, mocker): + """Test scenario generation with mocked components.""" + mocker.patch.dict( + os.environ, {"GOOGLE_API_KEY": "test_api_key"}, clear=True + ) + mock_client_cls = mocker.patch( + "google.adk.dependencies.vertexai.vertexai.Client" + ) + mock_client = mock_client_cls.return_value + + # I need to mock AgentInfo.load_from_agent(agent=agent) + mock_agent_info_cls = mocker.patch( + "google.adk.dependencies.vertexai.vertexai.types.evals.AgentInfo" + ) + mock_agent_info_cls.load_from_agent.return_value = "mock_agent_info" + + mock_generate = mocker.patch.object( + mock_client.evals, "generate_conversation_scenarios" + ) + + mock_eval_cases = [ + mocker.Mock( + user_scenario=mocker.Mock( + starting_prompt="Hello", conversation_plan="Say hello" + ) + ), + mocker.Mock(user_scenario=None), # testing handling of None + mocker.Mock( + user_scenario=mocker.Mock( + starting_prompt="Bye", conversation_plan="Say bye" + ) + ), + ] + mock_generate.return_value = mocker.Mock(eval_cases=mock_eval_cases) + + generator = ScenarioGenerator() + + mock_agent = mocker.Mock(spec=BaseAgent) + config = ConversationGenerationConfig( + count=2, + generation_instruction="Test generation", + model_name="gemini-2.5-flash", + ) + + scenarios = generator.generate_scenarios(mock_agent, config) + + assert len(scenarios) == 2 + assert scenarios[0].starting_prompt == "Hello" + assert scenarios[0].conversation_plan == "Say hello" + assert scenarios[1].starting_prompt == "Bye" + assert scenarios[1].conversation_plan == "Say bye" + + mock_agent_info_cls.load_from_agent.assert_called_once_with( + agent=mock_agent + ) + + mock_generate.assert_called_once() + _, kwargs = mock_generate.call_args + assert kwargs["agent_info"] == "mock_agent_info" + passed_config = kwargs["config"] + assert passed_config.count == 2 + assert passed_config.generation_instruction == "Test generation" From 114deefdfd224c071865e3249d9354e6eab51573 Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Tue, 7 Apr 2026 11:05:01 -0700 Subject: [PATCH 147/192] test: prevent test_resource_limits_set from hanging in GitHub Actions Set mock_process.pid to None in the resource limits test. Without this, the `finally` block in `run_async` attempts to call `os.killpg` with a fallback `Mock` object (which evaluates to True). In some environments like GitHub Actions, this can inadvertently kill the test runner's process group rather than raising a TypeException, causing the CI job to hang indefinitely. Co-authored-by: Liang Wu PiperOrigin-RevId: 895992429 --- tests/unittests/tools/test_bash_tool.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unittests/tools/test_bash_tool.py b/tests/unittests/tools/test_bash_tool.py index f0f4851990..d2e1e9c0e3 100644 --- a/tests/unittests/tools/test_bash_tool.py +++ b/tests/unittests/tools/test_bash_tool.py @@ -252,6 +252,7 @@ async def test_resource_limits_set(self, workspace, tool_context_confirmed): ) tool = bash_tool.ExecuteBashTool(workspace=workspace, policy=policy) mock_process = mock.AsyncMock() + mock_process.pid = None # Ensure finally block doesn't try to kill it mock_process.communicate.return_value = (b"", b"") mock_exec = mock.AsyncMock(return_value=mock_process) From 6a1c90bd9d6a5837f8c491697fdf93e1d9dbf16e Mon Sep 17 00:00:00 2001 From: llalitkumarrr Date: Tue, 7 Apr 2026 13:33:03 -0700 Subject: [PATCH 148/192] docs: Auto-Assignment GitHub Action for Issues Merge https://github.com/google/adk-python/pull/4966 Co-authored-by: Xuan Yang COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4966 from llalitkumarrr:main ff7a8465ae923b3990de2483c16f374f8193302b PiperOrigin-RevId: 896062781 --- .github/workflows/triage.yml | 3 +- .../samples/adk_triaging_agent/agent.py | 61 +++++++++---------- .../samples/adk_triaging_agent/main.py | 2 +- 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml index ff1afaac98..7ff668c589 100644 --- a/.github/workflows/triage.yml +++ b/.github/workflows/triage.yml @@ -17,8 +17,7 @@ jobs: if: >- github.repository == 'google/adk-python' && ( github.event_name == 'schedule' || - github.event.action == 'opened' || - github.event.label.name == 'planned' + github.event.action == 'opened' ) permissions: issues: write diff --git a/contributing/samples/adk_triaging_agent/agent.py b/contributing/samples/adk_triaging_agent/agent.py index 4ea3facc03..cec5805f57 100644 --- a/contributing/samples/adk_triaging_agent/agent.py +++ b/contributing/samples/adk_triaging_agent/agent.py @@ -42,6 +42,14 @@ "workflow": "DeanChensj", } + +LABEL_TO_GTECH = [ + "klateefa", + "llalitkumarrr", + "surajksharma07", + "sanketpatil06", +] + LABEL_GUIDELINES = """ Label rubric and disambiguation rules: - "documentation": Tutorials, README content, reference docs, or samples. @@ -121,15 +129,13 @@ def list_untriaged_issues(issue_count: int) -> dict[str, Any]: existing_component_labels = issue_labels & component_labels has_component = bool(existing_component_labels) - has_planned = "planned" in issue_labels # Determine what actions are needed needs_component_label = not has_component - needs_owner = has_planned and not assignees + needs_owner = not assignees # Include issue if it needs any action if needs_component_label or needs_owner: - issue["has_planned_label"] = has_planned issue["has_component_label"] = has_component issue["existing_component_label"] = ( list(existing_component_labels)[0] @@ -146,7 +152,6 @@ def list_untriaged_issues(issue_count: int) -> dict[str, Any]: def add_label_to_issue(issue_number: int, label: str) -> dict[str, Any]: """Add the specified component label to the given issue number. - Args: issue_number: issue number of the GitHub issue. label: label to assign @@ -177,37 +182,30 @@ def add_label_to_issue(issue_number: int, label: str) -> dict[str, Any]: } -def add_owner_to_issue(issue_number: int, label: str) -> dict[str, Any]: - """Assign an owner to the issue based on the component label. +def assign_gtech_owner_to_issue(issue_number: int) -> dict[str, Any]: + """Assign an owner from the GTech team to the given issue number. - This should only be called for issues that have the 'planned' label. + This is go to option irrespective of component label or planned label, + as long as the issue needs an owner. + + All unassigned issues will be considered for GTech ownership. Unassigned + issues will seperated in two categories: issues with type "Bug" and issues + with type "Feature". Then bug issues and feature issues will be equally + assigned to the Gtech members in such a way that every day all members get + equal number of bug and feature issues. Args: issue_number: issue number of the GitHub issue. - label: component label that determines the owner to assign Returns: The status of this request, with the assigned owner when successful. """ - print( - f"Attempting to assign owner for label '{label}' to issue #{issue_number}" - ) - if label not in LABEL_TO_OWNER: - return error_response( - f"Error: Label '{label}' is not a valid component label." - ) - - owner = LABEL_TO_OWNER.get(label, None) - if not owner: - return { - "status": "warning", - "message": f"Label '{label}' does not have an owner. Will not assign.", - } - + print(f"Attempting to assign GTech owner to issue #{issue_number}") + gtech_assignee = LABEL_TO_GTECH[issue_number % len(LABEL_TO_GTECH)] assignee_url = ( f"{GITHUB_BASE_URL}/repos/{OWNER}/{REPO}/issues/{issue_number}/assignees" ) - assignee_payload = {"assignees": [owner]} + assignee_payload = {"assignees": [gtech_assignee]} try: response = post_request(assignee_url, assignee_payload) @@ -217,7 +215,7 @@ def add_owner_to_issue(issue_number: int, label: str) -> dict[str, Any]: return { "status": "success", "message": response, - "assigned_owner": owner, + "assigned_owner": gtech_assignee, } @@ -259,7 +257,7 @@ def change_issue_type(issue_number: int, issue_type: str) -> dict[str, Any]: Each issue will have flags indicating what actions are needed: - `needs_component_label`: true if the issue needs a component label - - `needs_owner`: true if the issue needs an owner assigned (has 'planned' label but no assignee) + - `needs_owner`: true if the issue needs an owner assigned For each issue, perform ONLY the required actions based on the flags: @@ -271,8 +269,8 @@ def change_issue_type(issue_number: int, issue_type: str) -> dict[str, Any]: - Otherwise → do not change the issue type 2. **If `needs_owner` is true**: - - Use `add_owner_to_issue` to assign an owner based on the component label - - Note: If the issue already has a component label (`has_component_label: true`), use that existing label to determine the owner + - Use `assign_gtech_owner_to_issue` to assign an owner. + Do NOT add a component label if `needs_component_label` is false. Do NOT assign an owner if `needs_owner` is false. @@ -282,19 +280,18 @@ def change_issue_type(issue_number: int, issue_type: str) -> dict[str, Any]: placeholders (never output text like "[fill in later]"). - Justify the chosen label with a short explanation referencing the issue details. - - Mention the assigned owner only when you actually assign one (i.e., when - the issue has the 'planned' label). + - Mention the assigned owner only when you actually assign one. - If no label is applied, clearly state why. Present the following in an easy to read format highlighting issue number and your label. - the issue summary in a few sentence - your label recommendation and justification - - the owner of the label if you assign the issue to an owner (only for planned issues) + - the owner, if you assign the issue to an owner """, tools=[ list_untriaged_issues, add_label_to_issue, - add_owner_to_issue, + assign_gtech_owner_to_issue, change_issue_type, ], ) diff --git a/contributing/samples/adk_triaging_agent/main.py b/contributing/samples/adk_triaging_agent/main.py index 2d65cfd67d..fcdac832ac 100644 --- a/contributing/samples/adk_triaging_agent/main.py +++ b/contributing/samples/adk_triaging_agent/main.py @@ -57,7 +57,7 @@ async def fetch_specific_issue_details(issue_number: int): # Determine what actions are needed needs_component_label = not has_component - needs_owner = has_planned and not has_assignee + needs_owner = not has_assignee if needs_component_label or needs_owner: print( From 83393ab839d5733568699195683408fccbd1cb6e Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 7 Apr 2026 13:34:32 -0700 Subject: [PATCH 149/192] feat: Propagate context to thread pools PiperOrigin-RevId: 896063584 --- src/google/adk/flows/llm_flows/functions.py | 10 +++- .../gepa_root_agent_prompt_optimizer.py | 4 +- .../llm_flows/test_functions_thread_pool.py | 49 +++++++++++++++++++ 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/google/adk/flows/llm_flows/functions.py b/src/google/adk/flows/llm_flows/functions.py index 724bcd3f0e..eda8474c01 100644 --- a/src/google/adk/flows/llm_flows/functions.py +++ b/src/google/adk/flows/llm_flows/functions.py @@ -20,6 +20,7 @@ import base64 import binascii from concurrent.futures import ThreadPoolExecutor +import contextvars import copy import functools import inspect @@ -140,6 +141,7 @@ async def _call_tool_in_thread_pool( """ from ...tools.function_tool import FunctionTool + ctx = contextvars.copy_context() loop = asyncio.get_running_loop() executor = _get_tool_thread_pool(max_workers) @@ -160,7 +162,9 @@ def run_sync_tool(): # For other sync tool types, we can't easily run them in thread pool return None - result = await loop.run_in_executor(executor, run_sync_tool) + result = await loop.run_in_executor( + executor, lambda: ctx.run(run_sync_tool) + ) if result is not None: return result else: @@ -171,7 +175,9 @@ def run_async_tool_in_new_loop(): # Create a new event loop for this thread return asyncio.run(tool.run_async(args=args, tool_context=tool_context)) - return await loop.run_in_executor(executor, run_async_tool_in_new_loop) + return await loop.run_in_executor( + executor, lambda: ctx.run(run_async_tool_in_new_loop) + ) # Fall back to normal async execution for non-FunctionTool sync tools return await tool.run_async(args=args, tool_context=tool_context) diff --git a/src/google/adk/optimization/gepa_root_agent_prompt_optimizer.py b/src/google/adk/optimization/gepa_root_agent_prompt_optimizer.py index 8f0c7373ba..e9b82cdd50 100644 --- a/src/google/adk/optimization/gepa_root_agent_prompt_optimizer.py +++ b/src/google/adk/optimization/gepa_root_agent_prompt_optimizer.py @@ -15,6 +15,7 @@ from __future__ import annotations import asyncio +import contextvars import logging from typing import Any from typing import Optional @@ -298,7 +299,8 @@ def run_gepa(): _logger.info("Running the GEPA optimizer...") - gepa_results = await loop.run_in_executor(None, run_gepa) + ctx = contextvars.copy_context() + gepa_results = await loop.run_in_executor(None, lambda: ctx.run(run_gepa)) _logger.info("GEPA optimization finished. Preparing final results...") diff --git a/tests/unittests/flows/llm_flows/test_functions_thread_pool.py b/tests/unittests/flows/llm_flows/test_functions_thread_pool.py index d3d3b00a18..e134a555c1 100644 --- a/tests/unittests/flows/llm_flows/test_functions_thread_pool.py +++ b/tests/unittests/flows/llm_flows/test_functions_thread_pool.py @@ -15,6 +15,7 @@ """Tests for thread pool execution of tools in Live API mode.""" import asyncio +import contextvars import threading import time @@ -349,6 +350,54 @@ def sync_func() -> dict: pool = _get_tool_thread_pool(max_workers=12) assert pool is not None + @pytest.mark.asyncio + async def test_contextvars_propagation_sync_tool(self): + """Test that contextvars propagate to sync tools in thread pool.""" + test_var = contextvars.ContextVar('test_var', default='default') + test_var.set('main_thread_value') + + def sync_func() -> dict[str, str]: + return {'value': test_var.get()} + + tool = FunctionTool(sync_func) + model = testing_utils.MockModel.create(responses=[]) + agent = Agent(name='test_agent', model=model, tools=[tool]) + invocation_context = await testing_utils.create_invocation_context( + agent=agent, user_content='' + ) + tool_context = ToolContext( + invocation_context=invocation_context, + function_call_id='test_id', + ) + + result = await _call_tool_in_thread_pool(tool, {}, tool_context) + + assert result == {'value': 'main_thread_value'} + + @pytest.mark.asyncio + async def test_contextvars_propagation_async_tool(self): + """Test that contextvars propagate to async tools in thread pool.""" + test_var = contextvars.ContextVar('test_var', default='default') + test_var.set('main_thread_value') + + async def async_func() -> dict[str, str]: + return {'value': test_var.get()} + + tool = FunctionTool(async_func) + model = testing_utils.MockModel.create(responses=[]) + agent = Agent(name='test_agent', model=model, tools=[tool]) + invocation_context = await testing_utils.create_invocation_context( + agent=agent, user_content='' + ) + tool_context = ToolContext( + invocation_context=invocation_context, + function_call_id='test_id', + ) + + result = await _call_tool_in_thread_pool(tool, {}, tool_context) + + assert result == {'value': 'main_thread_value'} + class TestToolThreadPoolConfig: """Tests for the tool_thread_pool_config in RunConfig.""" From 3a374ce0aae73c138cd51d754220d0d7a64677b3 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Tue, 7 Apr 2026 13:40:08 -0700 Subject: [PATCH 150/192] fix: Small fixes for express mode Remove extra "would you like to proceed" from ToS message since it is asked later. For checking express eligibility, if the API response is "ELIGIBLE" then it is also considered eligible. Co-authored-by: Kathy Wu PiperOrigin-RevId: 896066249 --- src/google/adk/cli/cli_create.py | 6 ++---- src/google/adk/cli/utils/gcp_utils.py | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/google/adk/cli/cli_create.py b/src/google/adk/cli/cli_create.py index b33a54cc5e..f5a5810d01 100644 --- a/src/google/adk/cli/cli_create.py +++ b/src/google/adk/cli/cli_create.py @@ -65,10 +65,8 @@ _EXPRESS_TOS_MSG = """ Google Cloud Express Mode Terms of Service: https://cloud.google.com/terms/google-cloud-express By using this application, you agree to the Google Cloud Express Mode terms of service and any -applicable services and APIs. You also agree to only use this application for your trade, -business, craft, or profession. - -Would you like to proceed? (yes/no) +applicable services and APIs: https://console.cloud.google.com/terms. You also agree to only use +this application for your trade, business, craft, or profession. """ _NOT_ELIGIBLE_MSG = """ diff --git a/src/google/adk/cli/utils/gcp_utils.py b/src/google/adk/cli/utils/gcp_utils.py index ac186a2f91..70f603e4e9 100644 --- a/src/google/adk/cli/utils/gcp_utils.py +++ b/src/google/adk/cli/utils/gcp_utils.py @@ -126,7 +126,7 @@ def check_express_eligibility( result = _call_vertex_express_api( "GET", "/Eligibility:check", location=location ) - return result.get("eligibility") == "IN_SCOPE" + return result.get("eligibility") in ("ELIGIBLE", "IN_SCOPE") except (requests.exceptions.HTTPError, KeyError) as e: return False From 0f3850f56c857dfb86c7ad8de372bcc7fe495968 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Tue, 7 Apr 2026 13:46:08 -0700 Subject: [PATCH 151/192] fix: Fixes for initializing RemoteA2aAgent - passing in preferred transport, protocol version, and auth headers Co-authored-by: Kathy Wu PiperOrigin-RevId: 896068855 --- .../agent_registry/agent_registry.py | 39 ++++-- .../agent_registry/test_agent_registry.py | 125 +++++++++++++++--- 2 files changed, 140 insertions(+), 24 deletions(-) diff --git a/src/google/adk/integrations/agent_registry/agent_registry.py b/src/google/adk/integrations/agent_registry/agent_registry.py index ea7d0020a2..7edb9a2143 100644 --- a/src/google/adk/integrations/agent_registry/agent_registry.py +++ b/src/google/adk/integrations/agent_registry/agent_registry.py @@ -16,6 +16,7 @@ from __future__ import annotations +from collections.abc import Generator from enum import Enum import logging import os @@ -55,6 +56,12 @@ AGENT_REGISTRY_BASE_URL = "https://agentregistry.googleapis.com/v1alpha" +_TRANSPORT_MAPPING = { + "HTTP_JSON": A2ATransport.http_json, + "JSONRPC": A2ATransport.jsonrpc, + "GRPC": A2ATransport.grpc, +} + # An MCPToolset for a single registered MCP server. Adds the special # gcp.mcp.server.destination.id custom_metadata key on each returned tool. This special key is @@ -232,13 +239,15 @@ def _get_connection_uri( for p in protocols: if protocol_type and p.get("type") != protocol_type: continue + protocol_version = p.get("protocolVersion") for i in p.get("interfaces", []): - if protocol_binding and i.get("protocolBinding") != protocol_binding: + mapped_binding = _TRANSPORT_MAPPING.get(i.get("protocolBinding")) + if protocol_binding and mapped_binding != protocol_binding: continue if url := i.get("url"): - return url + return url, protocol_version, mapped_binding - return None + return None, None, None def _clean_name(self, name: str) -> str: """Cleans a string to be a valid Python identifier for agent names.""" @@ -284,11 +293,13 @@ def get_mcp_toolset( if not isinstance(mcp_server_id, str): mcp_server_id = None - endpoint_uri = self._get_connection_uri( + endpoint_uri, _, _ = self._get_connection_uri( server_details, protocol_binding=A2ATransport.jsonrpc - ) or self._get_connection_uri( - server_details, protocol_binding=A2ATransport.http_json ) + if not endpoint_uri: + endpoint_uri, _, _ = self._get_connection_uri( + server_details, protocol_binding=A2ATransport.http_json + ) if not endpoint_uri: raise ValueError( f"MCP Server endpoint URI not found for: {mcp_server_name}" @@ -339,7 +350,7 @@ def get_model_name(self, endpoint_name: str) -> str: projects/.../locations/.../publishers/google/models/...). """ endpoint_details = self.get_endpoint(endpoint_name) - uri = self._get_connection_uri(endpoint_details) + uri, _, _ = self._get_connection_uri(endpoint_details) if not uri: raise ValueError( f"Connection URI not found for endpoint: {endpoint_name}" @@ -378,7 +389,12 @@ def get_agent_info(self, name: str) -> Dict[str, Any]: """Retrieves detailed metadata of a specific A2A Agent.""" return self._make_request(name) - def get_remote_a2a_agent(self, agent_name: str) -> RemoteA2aAgent: + def get_remote_a2a_agent( + self, + agent_name: str, + *, + httpx_client: httpx.AsyncClient | None = None, + ) -> RemoteA2aAgent: """Creates a RemoteA2aAgent instance for a registered A2A Agent.""" agent_info = self.get_agent_info(agent_name) @@ -389,17 +405,19 @@ def get_remote_a2a_agent(self, agent_name: str) -> RemoteA2aAgent: agent_card = AgentCard(**card_content) # Clean the name to be a valid identifier name = self._clean_name(agent_card.name) + return RemoteA2aAgent( name=name, agent_card=agent_card, description=agent_card.description, + httpx_client=httpx_client, ) name = self._clean_name(agent_info.get("displayName", agent_name)) description = agent_info.get("description", "") version = agent_info.get("version", "") - url = self._get_connection_uri( + url, protocol_version, protocol_binding = self._get_connection_uri( agent_info, protocol_type=_ProtocolType.A2A_AGENT ) if not url: @@ -421,6 +439,8 @@ def get_remote_a2a_agent(self, agent_name: str) -> RemoteA2aAgent: name=name, description=description, version=version, + preferredTransport=protocol_binding or A2ATransport.http_json, + protocolVersion=protocol_version or "0.3.0", url=url, skills=skills, capabilities=AgentCapabilities(streaming=False, polling=False), @@ -432,4 +452,5 @@ def get_remote_a2a_agent(self, agent_name: str) -> RemoteA2aAgent: name=name, agent_card=agent_card, description=description, + httpx_client=httpx_client, ) diff --git a/tests/unittests/integrations/agent_registry/test_agent_registry.py b/tests/unittests/integrations/agent_registry/test_agent_registry.py index 197f89df79..58d993d1cc 100644 --- a/tests/unittests/integrations/agent_registry/test_agent_registry.py +++ b/tests/unittests/integrations/agent_registry/test_agent_registry.py @@ -60,7 +60,7 @@ async def test_get_mcp_toolset_adds_destination_id( ), "interfaces": [{ "url": "https://mcp.com", - "protocolBinding": A2ATransport.jsonrpc, + "protocolBinding": "JSONRPC", }], } mock_httpx.return_value.__enter__.return_value.get.return_value = ( @@ -126,7 +126,7 @@ async def test_get_mcp_toolset_handles_missing_destination_id( # "mcpServerId" is intentionally omitted "interfaces": [{ "url": "https://mcp.com", - "protocolBinding": A2ATransport.jsonrpc, + "protocolBinding": "JSONRPC", }], } mock_httpx.return_value.__enter__.return_value.get.return_value = ( @@ -176,10 +176,12 @@ def test_get_connection_uri_mcp_interfaces_top_level(self, registry): {"url": "https://mcp-v1main.com", "protocolBinding": "JSONRPC"} ] } - uri = registry._get_connection_uri( + uri, version, binding = registry._get_connection_uri( resource_details, protocol_binding=A2ATransport.jsonrpc ) assert uri == "https://mcp-v1main.com" + assert version is None + assert binding == "JSONRPC" def test_get_connection_uri_agent_nested_protocols(self, registry): resource_details = { @@ -187,14 +189,16 @@ def test_get_connection_uri_agent_nested_protocols(self, registry): "type": _ProtocolType.A2A_AGENT, "interfaces": [{ "url": "https://my-agent.com", - "protocolBinding": A2ATransport.jsonrpc, + "protocolBinding": "JSONRPC", }], }] } - uri = registry._get_connection_uri( + uri, version, binding = registry._get_connection_uri( resource_details, protocol_type=_ProtocolType.A2A_AGENT ) assert uri == "https://my-agent.com" + assert version is None + assert binding == A2ATransport.jsonrpc def test_get_connection_uri_filtering(self, registry): resource_details = { @@ -207,42 +211,52 @@ def test_get_connection_uri_filtering(self, registry): "type": _ProtocolType.A2A_AGENT, "interfaces": [{ "url": "https://my-agent.com", - "protocolBinding": A2ATransport.http_json, + "protocolBinding": "HTTP_JSON", }], }, ] } # Filter by type - uri = registry._get_connection_uri( + uri, version, binding = registry._get_connection_uri( resource_details, protocol_type=_ProtocolType.A2A_AGENT ) assert uri == "https://my-agent.com" + assert version is None + assert binding == A2ATransport.http_json # Filter by binding - uri = registry._get_connection_uri( + uri, version, binding = registry._get_connection_uri( resource_details, protocol_binding=A2ATransport.http_json ) assert uri == "https://my-agent.com" + assert version is None + assert binding == A2ATransport.http_json # No match - uri = registry._get_connection_uri( + uri, version, binding = registry._get_connection_uri( resource_details, protocol_type=_ProtocolType.A2A_AGENT, protocol_binding=A2ATransport.jsonrpc, ) assert uri is None + assert version is None + assert binding is None def test_get_connection_uri_returns_none_if_no_interfaces(self, registry): resource_details = {} - uri = registry._get_connection_uri(resource_details) + uri, version, binding = registry._get_connection_uri(resource_details) assert uri is None + assert version is None + assert binding is None def test_get_connection_uri_returns_none_if_no_url_in_interfaces( self, registry ): resource_details = {"interfaces": [{"protocolBinding": "HTTP"}]} - uri = registry._get_connection_uri(resource_details) + uri, version, binding = registry._get_connection_uri(resource_details) assert uri is None + assert version is None + assert binding is None @patch("httpx.Client") def test_list_agents(self, mock_httpx, registry): @@ -313,7 +327,7 @@ def test_get_mcp_toolset(self, mock_httpx, registry): "displayName": "TestPrefix", "interfaces": [{ "url": "https://mcp.com", - "protocolBinding": A2ATransport.jsonrpc, + "protocolBinding": "JSONRPC", }], } mock_response.raise_for_status = MagicMock() @@ -335,7 +349,7 @@ def test_get_mcp_toolset_with_auth(self, mock_httpx, registry): "displayName": "TestPrefix", "interfaces": [{ "url": "https://mcp.com", - "protocolBinding": A2ATransport.jsonrpc, + "protocolBinding": "JSONRPC", }], } mock_response.raise_for_status = MagicMock() @@ -370,9 +384,10 @@ def test_get_remote_a2a_agent(self, mock_httpx, registry): "version": "1.0", "protocols": [{ "type": _ProtocolType.A2A_AGENT, + "protocolVersion": "0.4.0", "interfaces": [{ "url": "https://my-agent.com", - "protocolBinding": A2ATransport.jsonrpc, + "protocolBinding": "HTTP_JSON", }], }], "skills": [{"id": "s1", "name": "Skill 1", "description": "Desc 1"}], @@ -393,6 +408,35 @@ def test_get_remote_a2a_agent(self, mock_httpx, registry): assert agent._agent_card.version == "1.0" assert len(agent._agent_card.skills) == 1 assert agent._agent_card.skills[0].name == "Skill 1" + assert agent._agent_card.preferred_transport == A2ATransport.http_json + assert agent._agent_card.protocol_version == "0.4.0" + + @patch("httpx.Client") + def test_get_remote_a2a_agent_defaults(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = { + "displayName": "TestAgent", + "description": "Test Desc", + "version": "1.0", + "protocols": [{ + "type": _ProtocolType.A2A_AGENT, + "interfaces": [{ + "url": "https://my-agent.com", + }], + }], + } + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + agent = registry.get_remote_a2a_agent("test-agent") + assert isinstance(agent, RemoteA2aAgent) + assert agent._agent_card.preferred_transport == A2ATransport.http_json + assert agent._agent_card.protocol_version == "0.3.0" @patch("httpx.Client") def test_get_remote_a2a_agent_with_card(self, mock_httpx, registry): @@ -436,6 +480,57 @@ def test_get_remote_a2a_agent_with_card(self, mock_httpx, registry): assert len(agent._agent_card.skills) == 1 assert agent._agent_card.skills[0].name == "S1" + @patch("httpx.Client") + def test_get_remote_a2a_agent_with_httpx_client(self, mock_httpx, registry): + mock_response = MagicMock() + mock_response.json.return_value = { + "displayName": "TestAgent", + "description": "Test Desc", + "version": "1.0", + "protocols": [{ + "type": _ProtocolType.A2A_AGENT, + "interfaces": [{ + "url": "https://my-agent.com", + }], + }], + } + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + custom_client = httpx.AsyncClient() + agent = registry.get_remote_a2a_agent( + "test-agent", httpx_client=custom_client + ) + assert agent._httpx_client is custom_client + + @patch("httpx.Client") + def test_get_remote_a2a_agent_configures_transports( + self, mock_httpx, registry + ): + mock_response = MagicMock() + mock_response.json.return_value = { + "displayName": "TestAgent", + "protocols": [{ + "type": _ProtocolType.A2A_AGENT, + "interfaces": [{ + "url": "https://my-agent.com", + "protocolBinding": A2ATransport.jsonrpc, + }], + }], + } + mock_response.raise_for_status = MagicMock() + mock_httpx.return_value.__enter__.return_value.get.return_value = ( + mock_response + ) + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + agent = registry.get_remote_a2a_agent("test-agent") + assert agent._agent_card.preferred_transport == A2ATransport.jsonrpc + def test_get_auth_headers(self, registry): registry._credentials.token = "fake-token" registry._credentials.refresh = MagicMock() @@ -472,7 +567,7 @@ def test_make_request_raises_request_error(self, mock_httpx, registry): registry._credentials.refresh = MagicMock() with pytest.raises( - RuntimeError, match="API request failed \(network error\)" + RuntimeError, match=r"API request failed \(network error\)" ): registry._make_request("test-path") From 62daf4f61b14aee7bca9d8dec479bfd940bbb955 Mon Sep 17 00:00:00 2001 From: George Weale Date: Tue, 7 Apr 2026 14:03:27 -0700 Subject: [PATCH 152/192] fix: truncate error_message in v0 schema to prevent VARCHAR overflow Close #4993 Co-authored-by: George Weale PiperOrigin-RevId: 896076625 --- src/google/adk/sessions/schemas/v0.py | 31 +++++++- .../sessions/test_v0_storage_event.py | 77 +++++++++++++++++++ 2 files changed, 107 insertions(+), 1 deletion(-) diff --git a/src/google/adk/sessions/schemas/v0.py b/src/google/adk/sessions/schemas/v0.py index 7679a56e5b..e4a4368c6d 100644 --- a/src/google/adk/sessions/schemas/v0.py +++ b/src/google/adk/sessions/schemas/v0.py @@ -29,6 +29,7 @@ from datetime import datetime from datetime import timezone import json +import logging import pickle from typing import Any from typing import Optional @@ -61,6 +62,32 @@ from .shared import DynamicJSON from .shared import PreciseTimestamp +logger = logging.getLogger("google_adk." + __name__) + +_TRUNCATION_SUFFIX = "...[truncated]" + + +def _truncate_str(value: Optional[str], max_length: int) -> Optional[str]: + """Truncates a string to fit within *max_length* characters. + + Old databases may still carry ``VARCHAR(N)`` columns that were never + ALTERed after ADK upgraded the schema definition to ``TEXT``. Truncating + before the INSERT prevents a ``StringDataRightTruncationError`` crash. + """ + if value is not None and len(value) > max_length: + truncated = value[: max_length - len(_TRUNCATION_SUFFIX)] + ( + _TRUNCATION_SUFFIX + ) + logger.warning( + "Truncated value from %d to %d characters to fit database" + " column constraint. Run the appropriate ALTER TABLE command" + " or migrate to the v1 schema to store full-length values.", + len(value), + max_length, + ) + return truncated + return value + class DynamicPickleType(TypeDecorator): """Represents a type that can be pickled.""" @@ -298,7 +325,9 @@ def from_event(cls, session: Session, event: Event) -> StorageEvent: partial=event.partial, turn_complete=event.turn_complete, error_code=event.error_code, - error_message=event.error_message, + error_message=_truncate_str( + event.error_message, DEFAULT_MAX_VARCHAR_LENGTH + ), interrupted=event.interrupted, ) if event.content: diff --git a/tests/unittests/sessions/test_v0_storage_event.py b/tests/unittests/sessions/test_v0_storage_event.py index cc82272506..3f542af8b4 100644 --- a/tests/unittests/sessions/test_v0_storage_event.py +++ b/tests/unittests/sessions/test_v0_storage_event.py @@ -15,9 +15,13 @@ from datetime import datetime from datetime import timezone +from google.adk.events.event import Event from google.adk.events.event_actions import EventActions from google.adk.events.event_actions import EventCompaction +from google.adk.sessions.schemas.shared import DEFAULT_MAX_VARCHAR_LENGTH +from google.adk.sessions.schemas.v0 import _truncate_str from google.adk.sessions.schemas.v0 import StorageEvent +from google.adk.sessions.session import Session from google.genai import types @@ -48,3 +52,76 @@ def test_storage_event_v0_to_event_rehydrates_compaction_model(): assert isinstance(event.actions.compaction, EventCompaction) assert event.actions.compaction.start_timestamp == 1.0 assert event.actions.compaction.end_timestamp == 2.0 + + +def test_truncate_str_returns_none_for_none(): + assert _truncate_str(None, 256) is None + + +def test_truncate_str_returns_short_string_unchanged(): + short = "short message" + assert _truncate_str(short, 256) == short + + +def test_truncate_str_returns_exact_length_string_unchanged(): + exact = "a" * DEFAULT_MAX_VARCHAR_LENGTH + assert _truncate_str(exact, DEFAULT_MAX_VARCHAR_LENGTH) == exact + + +def test_truncate_str_truncates_long_string(): + long_msg = "x" * 1000 + result = _truncate_str(long_msg, DEFAULT_MAX_VARCHAR_LENGTH) + assert result is not None + assert len(result) == DEFAULT_MAX_VARCHAR_LENGTH + assert result.endswith("...[truncated]") + + +def test_from_event_truncates_long_error_message(): + long_error = "Malformed function call: " + "a" * 1000 + session = Session( + app_name="app", + user_id="user", + id="session_id", + state={}, + events=[], + last_update_time=0.0, + ) + event = Event( + id="event_id", + invocation_id="inv_id", + author="agent", + timestamp=1.0, + error_code="MALFORMED_FUNCTION_CALL", + error_message=long_error, + ) + + storage_event = StorageEvent.from_event(session, event) + + assert storage_event.error_message is not None + assert len(storage_event.error_message) == DEFAULT_MAX_VARCHAR_LENGTH + assert storage_event.error_message.endswith("...[truncated]") + assert storage_event.error_code == "MALFORMED_FUNCTION_CALL" + + +def test_from_event_preserves_short_error_message(): + short_error = "Something went wrong" + session = Session( + app_name="app", + user_id="user", + id="session_id", + state={}, + events=[], + last_update_time=0.0, + ) + event = Event( + id="event_id", + invocation_id="inv_id", + author="agent", + timestamp=1.0, + error_code="SOME_ERROR", + error_message=short_error, + ) + + storage_event = StorageEvent.from_event(session, event) + + assert storage_event.error_message == short_error From a60baca3ddfe2541159b32d67b738a836d2395e7 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 7 Apr 2026 15:35:15 -0700 Subject: [PATCH 153/192] docs: Update the MCP Toolbox docsite with the new URL We recently overhauled our MCP Toolbox documentation and moved it to a new domain. This PR propagates that URL change here. PiperOrigin-RevId: 896118946 --- contributing/samples/toolbox_agent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/samples/toolbox_agent/README.md b/contributing/samples/toolbox_agent/README.md index 5e499c1b4b..cef75bb3ee 100644 --- a/contributing/samples/toolbox_agent/README.md +++ b/contributing/samples/toolbox_agent/README.md @@ -1,6 +1,6 @@ # Toolbox Agent -This agent utilizes [MCP toolbox for database](https://googleapis.github.io/genai-toolbox/getting-started/introduction/) to assist end users based on information stored in a database. +This agent utilizes [MCP toolbox for database](https://mcp-toolbox.dev) to assist end users based on information stored in a database. Follow the steps below to run this agent. From e2d970ff9428a76ea21db6ec951ddf7af3a986ad Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 7 Apr 2026 16:06:11 -0700 Subject: [PATCH 154/192] feat: add ADK trigger endpoints to ADK Web Server PiperOrigin-RevId: 896133436 --- src/google/adk/cli/adk_web_server.py | 9 + src/google/adk/cli/cli_deploy.py | 11 +- src/google/adk/cli/cli_tools_click.py | 49 + src/google/adk/cli/fast_api.py | 10 +- src/google/adk/cli/trigger_routes.py | 578 ++++++++++ tests/remote/triggers/README.md | 67 ++ tests/remote/triggers/conftest.py | 169 +++ tests/remote/triggers/terraform/cloud_run.tf | 35 + tests/remote/triggers/terraform/eventarc.tf | 120 ++ tests/remote/triggers/terraform/iam.tf | 80 ++ tests/remote/triggers/terraform/main.tf | 64 ++ tests/remote/triggers/terraform/outputs.tf | 56 + tests/remote/triggers/terraform/pubsub.tf | 54 + tests/remote/triggers/terraform/variables.tf | 42 + tests/remote/triggers/test_agent/Dockerfile | 24 + tests/remote/triggers/test_agent/__init__.py | 13 + tests/remote/triggers/test_agent/agent.py | 86 ++ .../remote/triggers/test_trigger_eventarc.py | 125 ++ tests/remote/triggers/test_trigger_pubsub.py | 166 +++ tests/unittests/cli/test_trigger_routes.py | 1011 +++++++++++++++++ 20 files changed, 2766 insertions(+), 3 deletions(-) create mode 100644 src/google/adk/cli/trigger_routes.py create mode 100644 tests/remote/triggers/README.md create mode 100644 tests/remote/triggers/conftest.py create mode 100644 tests/remote/triggers/terraform/cloud_run.tf create mode 100644 tests/remote/triggers/terraform/eventarc.tf create mode 100644 tests/remote/triggers/terraform/iam.tf create mode 100644 tests/remote/triggers/terraform/main.tf create mode 100644 tests/remote/triggers/terraform/outputs.tf create mode 100644 tests/remote/triggers/terraform/pubsub.tf create mode 100644 tests/remote/triggers/terraform/variables.tf create mode 100644 tests/remote/triggers/test_agent/Dockerfile create mode 100644 tests/remote/triggers/test_agent/__init__.py create mode 100644 tests/remote/triggers/test_agent/agent.py create mode 100644 tests/remote/triggers/test_trigger_eventarc.py create mode 100644 tests/remote/triggers/test_trigger_pubsub.py create mode 100644 tests/unittests/cli/test_trigger_routes.py diff --git a/src/google/adk/cli/adk_web_server.py b/src/google/adk/cli/adk_web_server.py index 9700be714c..1ea68ecbef 100644 --- a/src/google/adk/cli/adk_web_server.py +++ b/src/google/adk/cli/adk_web_server.py @@ -657,6 +657,7 @@ def __init__( logo_image_url: Optional[str] = None, url_prefix: Optional[str] = None, auto_create_session: bool = False, + trigger_sources: Optional[list[str]] = None, ): self.agent_loader = agent_loader self.session_service = session_service @@ -675,6 +676,7 @@ def __init__( self.runner_dict = {} self.url_prefix = url_prefix self.auto_create_session = auto_create_session + self.trigger_sources = trigger_sources async def get_runner_async(self, app_name: str) -> Runner: """Returns the cached runner for the given app.""" @@ -2114,6 +2116,13 @@ async def process_messages(): for task in pending: task.cancel() + # Register /trigger/* endpoints when enabled. + if self.trigger_sources: + from .trigger_routes import TriggerRouter + + trigger_router = TriggerRouter(self, trigger_sources=self.trigger_sources) + trigger_router.register(app) + if web_assets_dir: import mimetypes diff --git a/src/google/adk/cli/cli_deploy.py b/src/google/adk/cli/cli_deploy.py index e4839be747..e0c7f9b28c 100644 --- a/src/google/adk/cli/cli_deploy.py +++ b/src/google/adk/cli/cli_deploy.py @@ -99,7 +99,7 @@ def _ensure_agent_engine_dependency(requirements_txt_path: str) -> None: EXPOSE {port} -CMD adk {command} --port={port} {host_option} {service_option} {trace_to_cloud_option} {otel_to_cloud_option} {allow_origins_option} {a2a_option} "/app/agents" +CMD adk {command} --port={port} {host_option} {service_option} {trace_to_cloud_option} {otel_to_cloud_option} {allow_origins_option} {a2a_option} {trigger_sources_option} "/app/agents" """ _AGENT_ENGINE_APP_TEMPLATE: Final[str] = """ @@ -645,6 +645,7 @@ def to_cloud_run( memory_service_uri: Optional[str] = None, use_local_storage: bool = False, a2a: bool = False, + trigger_sources: Optional[str] = None, extra_gcloud_args: Optional[tuple[str, ...]] = None, ): """Deploys an agent to Google Cloud Run. @@ -715,6 +716,9 @@ def to_cloud_run( f'--allow_origins={",".join(allow_origins)}' if allow_origins else '' ) a2a_option = '--a2a' if a2a else '' + trigger_sources_option = ( + f'--trigger_sources={trigger_sources}' if trigger_sources else '' + ) dockerfile_content = _DOCKERFILE_TEMPLATE.format( gcp_project_id=project, gcp_region=region, @@ -735,6 +739,7 @@ def to_cloud_run( adk_version=adk_version, host_option=host_option, a2a_option=a2a_option, + trigger_sources_option=trigger_sources_option, ) dockerfile_path = os.path.join(temp_folder, 'Dockerfile') os.makedirs(temp_folder, exist_ok=True) @@ -1178,6 +1183,7 @@ def to_gke( memory_service_uri: Optional[str] = None, use_local_storage: bool = False, a2a: bool = False, + trigger_sources: Optional[str] = None, service_type: Literal[ 'ClusterIP', 'NodePort', 'LoadBalancer' ] = 'ClusterIP', @@ -1275,6 +1281,9 @@ def to_gke( adk_version=adk_version, host_option=host_option, a2a_option='--a2a' if a2a else '', + trigger_sources_option=( + f'--trigger_sources={trigger_sources}' if trigger_sources else '' + ), ) dockerfile_path = os.path.join(temp_folder, 'Dockerfile') os.makedirs(temp_folder, exist_ok=True) diff --git a/src/google/adk/cli/cli_tools_click.py b/src/google/adk/cli/cli_tools_click.py index fff30f2a14..07ccc15892 100644 --- a/src/google/adk/cli/cli_tools_click.py +++ b/src/google/adk/cli/cli_tools_click.py @@ -1452,6 +1452,7 @@ def fast_api_common_options(): """Decorator to add common fast api options to click commands.""" def decorator(func): + @click.option( "--host", type=str, @@ -1556,6 +1557,17 @@ def decorator(func): ), default=None, ) + # Parsed into list[str] by the wrapper below (server commands need a list). + @click.option( + "--trigger_sources", + type=str, + help=( + "Optional. Comma-separated list of trigger sources to enable" + " (e.g., 'pubsub,eventarc'). Registers /apps/{app_name}/trigger/*" + " endpoints for batch and event-driven agent invocations." + ), + default=None, + ) @functools.wraps(func) @click.pass_context def wrapper(ctx, *args, **kwargs): @@ -1567,6 +1579,13 @@ def wrapper(ctx, *args, **kwargs): ): kwargs["log_level"] = "DEBUG" + # Parse comma-separated trigger_sources into a list. + trigger_sources = kwargs.get("trigger_sources") + if trigger_sources is not None: + kwargs["trigger_sources"] = [ + s.strip() for s in trigger_sources.split(",") if s.strip() + ] + return func(*args, **kwargs) return wrapper @@ -1609,6 +1628,7 @@ def cli_web( extra_plugins: Optional[list[str]] = None, logo_text: Optional[str] = None, logo_image_url: Optional[str] = None, + trigger_sources: Optional[list[str]] = None, ): """Starts a FastAPI server with Web UI for agents. @@ -1665,6 +1685,7 @@ async def _lifespan(app: FastAPI): extra_plugins=extra_plugins, logo_text=logo_text, logo_image_url=logo_image_url, + trigger_sources=trigger_sources, ) config = uvicorn.Config( app, @@ -1720,6 +1741,7 @@ def cli_api_server( reload_agents: bool = False, extra_plugins: Optional[list[str]] = None, auto_create_session: bool = False, + trigger_sources: Optional[list[str]] = None, ): """Starts a FastAPI server for agents. @@ -1753,6 +1775,7 @@ def cli_api_server( reload_agents=reload_agents, extra_plugins=extra_plugins, auto_create_session=auto_create_session, + trigger_sources=trigger_sources, ), host=host, port=port, @@ -1887,6 +1910,17 @@ def cli_api_server( default=False, help="Optional. Whether to enable A2A endpoint.", ) +# Kept as raw str (not parsed to list) — interpolated directly into Dockerfile CMD. +@click.option( + "--trigger_sources", + type=str, + help=( + "Optional. Comma-separated list of trigger sources to enable" + " (e.g., 'pubsub,eventarc'). Registers /trigger/* endpoints" + " for batch and event-driven agent invocations." + ), + default=None, +) @click.option( "--allow_origins", help=( @@ -1923,6 +1957,7 @@ def cli_deploy_cloud_run( session_db_url: Optional[str] = None, # Deprecated artifact_storage_uri: Optional[str] = None, # Deprecated a2a: bool = False, + trigger_sources: Optional[str] = None, ): """Deploys an agent to Cloud Run. @@ -2000,6 +2035,7 @@ def cli_deploy_cloud_run( memory_service_uri=memory_service_uri, use_local_storage=use_local_storage, a2a=a2a, + trigger_sources=trigger_sources, extra_gcloud_args=tuple(gcloud_args), ) except Exception as e: @@ -2397,6 +2433,17 @@ def cli_deploy_agent_engine( " version in the dev environment)" ), ) +# Kept as raw str (not parsed to list) — interpolated directly into Dockerfile CMD. +@click.option( + "--trigger_sources", + type=str, + help=( + "Optional. Comma-separated list of trigger sources to enable" + " (e.g., 'pubsub,eventarc'). Registers /trigger/* endpoints" + " for batch and event-driven agent invocations." + ), + default=None, +) @adk_services_options(default_use_local_storage=False) @click.argument( "agent", @@ -2423,6 +2470,7 @@ def cli_deploy_gke( artifact_service_uri: Optional[str] = None, memory_service_uri: Optional[str] = None, use_local_storage: bool = False, + trigger_sources: Optional[str] = None, ): """Deploys an agent to GKE. @@ -2454,6 +2502,7 @@ def cli_deploy_gke( artifact_service_uri=artifact_service_uri, memory_service_uri=memory_service_uri, use_local_storage=use_local_storage, + trigger_sources=trigger_sources, ) except Exception as e: click.secho(f"Deploy failed: {e}", fg="red", err=True) diff --git a/src/google/adk/cli/fast_api.py b/src/google/adk/cli/fast_api.py index 4b207b4b7d..199791f7da 100644 --- a/src/google/adk/cli/fast_api.py +++ b/src/google/adk/cli/fast_api.py @@ -22,6 +22,7 @@ import shutil import sys from typing import Any +from typing import Literal from typing import Mapping from typing import Optional @@ -95,6 +96,7 @@ def get_fast_api_app( logo_text: Optional[str] = None, logo_image_url: Optional[str] = None, auto_create_session: bool = False, + trigger_sources: Optional[list[Literal["pubsub", "eventarc"]]] = None, ) -> FastAPI: """Constructs and returns a FastAPI application for serving ADK agents. @@ -136,8 +138,11 @@ def get_fast_api_app( extra_plugins: List of extra plugin names to load. logo_text: Text to display in the web UI logo area. logo_image_url: URL for an image to display in the web UI logo area. - auto_create_session: Whether to automatically create a session when - not found. + auto_create_session: Whether to automatically create a session when not + found. + trigger_sources: List of trigger sources to enable (e.g. ["pubsub", + "eventarc"]). When set, registers /trigger/* endpoints for batch and + event-driven agent invocations. None disables all trigger endpoints. Returns: The configured FastAPI application instance. @@ -206,6 +211,7 @@ def get_fast_api_app( logo_image_url=logo_image_url, url_prefix=url_prefix, auto_create_session=auto_create_session, + trigger_sources=trigger_sources, ) # Callbacks & other optional args for when constructing the FastAPI instance diff --git a/src/google/adk/cli/trigger_routes.py b/src/google/adk/cli/trigger_routes.py new file mode 100644 index 0000000000..ee82c5cee2 --- /dev/null +++ b/src/google/adk/cli/trigger_routes.py @@ -0,0 +1,578 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Trigger endpoints for batch and event-driven agent invocations. + +Provides /trigger/pubsub and /trigger/eventarc endpoints +that enable ADK agents to process Pub/Sub push messages and Eventarc events +without requiring +pre-created sessions. + +Features include: + - Semaphore-based concurrency control to stay within LLM model quota + - Automatic retry with exponential backoff on 429 / RESOURCE_EXHAUSTED + - Transient error detection to signal upstream services to retry +""" + +from __future__ import annotations + +import asyncio +import base64 +import json +import logging +import os +import random +from typing import Any +from typing import Literal +from typing import Optional +from typing import TYPE_CHECKING +import uuid + +from fastapi import FastAPI +from fastapi import HTTPException +from fastapi import Request +from google.genai import types +from pydantic import BaseModel +from pydantic import Field + +from ..events.event import Event +from ..utils.context_utils import Aclosing + +if TYPE_CHECKING: + from .adk_web_server import AdkWebServer + +logger = logging.getLogger("google_adk." + __name__) + +TAG_TRIGGERS = "Triggers" + +# --------------------------------------------------------------------------- +# Concurrency & retry defaults +# --------------------------------------------------------------------------- + +DEFAULT_MAX_CONCURRENT = int(os.environ.get("ADK_TRIGGER_MAX_CONCURRENT", "10")) +"""Maximum concurrent agent invocations across all trigger requests.""" + +DEFAULT_MAX_RETRIES = int(os.environ.get("ADK_TRIGGER_MAX_RETRIES", "3")) +"""Maximum retry attempts for transient (429) errors per row.""" + +DEFAULT_RETRY_BASE_DELAY = float( + os.environ.get("ADK_TRIGGER_RETRY_BASE_DELAY", "1.0") +) +"""Base delay in seconds for exponential backoff.""" + +DEFAULT_RETRY_MAX_DELAY = float( + os.environ.get("ADK_TRIGGER_RETRY_MAX_DELAY", "30.0") +) +"""Maximum delay in seconds for exponential backoff.""" + + +# --------------------------------------------------------------------------- +# Transient error detection +# --------------------------------------------------------------------------- + + +class TransientError(Exception): + """A transient or retryable error (e.g., a 429 status code).""" + + +def _is_transient_error(error: Exception) -> bool: + """Check if an exception represents a transient rate-limit error. + + Checks both the exception type (for google-api-core exceptions) and + the error message string as a fallback for wrapped or generic errors. + """ + # Check google.api_core exception types when available. + try: + from google.api_core import exceptions as api_exceptions + + if isinstance(error, api_exceptions.ResourceExhausted): + return True + if isinstance(error, api_exceptions.TooManyRequests): + return True + except ImportError: + pass + + err_msg = str(error).lower() + return ( + "429" in err_msg + or "resource_exhausted" in err_msg + or "rate limit" in err_msg + or "quota" in err_msg + ) + + +# --------------------------------------------------------------------------- +# Request / Response Models +# --------------------------------------------------------------------------- + + +class PubSubMessage(BaseModel): + """Inner message payload from a Pub/Sub push subscription.""" + + data: Optional[str] = Field( + default=None, description="Base64-encoded message data." + ) + attributes: Optional[dict[str, str]] = Field( + default=None, description="Message attributes." + ) + messageId: Optional[str] = Field( + default=None, description="Pub/Sub message ID." + ) + publishTime: Optional[str] = Field( + default=None, description="Publish timestamp." + ) + + +class PubSubTriggerRequest(BaseModel): + """Pub/Sub push subscription request format. + + See: https://cloud.google.com/pubsub/docs/push#receive_push + """ + + message: PubSubMessage + subscription: Optional[str] = Field( + default=None, + description="Full subscription name (e.g. projects/p/subscriptions/s).", + ) + + +class EventarcTriggerRequest(BaseModel): + """Eventarc / CloudEvents request format. + + Eventarc delivers events as CloudEvents over HTTP in two modes: + + 1. **Structured content mode** (JSON body): All CloudEvents attributes + and the event data are in the JSON body. Used by direct HTTP callers. + 2. **Binary content mode** (Eventarc default): CloudEvents attributes are + sent as ``ce-*`` HTTP headers, and the body contains only the event + data — typically a Pub/Sub message wrapper for Pub/Sub-sourced events: + ``{"message": {"data": "", ...}, "subscription": "..."}``. + + See: https://cloud.google.com/eventarc/docs/cloudevents + """ + + # In structured mode, ``data`` is always present. + # In binary mode, the entire body is the data (often a Pub/Sub wrapper). + data: Optional[dict[str, Any]] = Field( + default=None, description="Event payload data (structured mode)." + ) + source: Optional[str] = Field( + default=None, description="CloudEvents source attribute." + ) + type: Optional[str] = Field( + default=None, description="CloudEvents type attribute." + ) + id: Optional[str] = Field( + default=None, description="CloudEvents id attribute." + ) + time: Optional[str] = Field( + default=None, description="CloudEvents time attribute." + ) + specversion: Optional[str] = Field( + default=None, description="CloudEvents specversion attribute." + ) + + # Binary mode: Pub/Sub message wrapper fields. + message: Optional[PubSubMessage] = Field( + default=None, + description=( + "Pub/Sub message wrapper (binary content mode from Eventarc)." + ), + ) + subscription: Optional[str] = Field( + default=None, + description=( + "Pub/Sub subscription name (binary content mode from Eventarc)." + ), + ) + + model_config = {"extra": "allow"} + + +class TriggerResponse(BaseModel): + """Standard response for Pub/Sub and Eventarc triggers.""" + + status: Literal["success", "error"] = Field( + description="Processing status: 'success' or error." + ) + + +# --------------------------------------------------------------------------- +# Trigger Router +# --------------------------------------------------------------------------- + + +class TriggerRouter: + """A router that registers /trigger/* routes on a FastAPI application. + + Each trigger endpoint auto-creates an ephemeral session, runs the agent, + and returns the result in the format expected by the calling service. + + Features include: + - Semaphore limits concurrent agent calls (default: 10) + - Transient errors (429 / RESOURCE_EXHAUSTED) are retried with + exponential backoff + jitter + """ + + DEFAULT_TRIGGER_SOURCES = [] + """Trigger sources registered when ``trigger_sources`` is not specified. + By default, no triggers are registered to require explicit opt-in via CLI. + """ + VALID_TRIGGER_SOURCES = ["pubsub", "eventarc"] + """All trigger sources supported by this router.""" + + def __init__( + self, + adk_web_server: "AdkWebServer", + *, + trigger_sources: Optional[list[str]] = None, + max_concurrent: int = DEFAULT_MAX_CONCURRENT, + max_retries: int = DEFAULT_MAX_RETRIES, + retry_base_delay: float = DEFAULT_RETRY_BASE_DELAY, + retry_max_delay: float = DEFAULT_RETRY_MAX_DELAY, + ): + self._server = adk_web_server + resolved_sources = ( + trigger_sources + if trigger_sources is not None + else self.DEFAULT_TRIGGER_SOURCES + ) + unknown = set(resolved_sources) - set(self.VALID_TRIGGER_SOURCES) + if unknown: + logger.warning( + "Unknown trigger source(s) ignored: %s. Valid sources: %s", + ", ".join(sorted(unknown)), + ", ".join(self.VALID_TRIGGER_SOURCES), + ) + self._trigger_sources = [ + s for s in resolved_sources if s in self.VALID_TRIGGER_SOURCES + ] + self._semaphore = asyncio.Semaphore(max_concurrent) + self._max_retries = max_retries + self._retry_base_delay = retry_base_delay + self._retry_max_delay = retry_max_delay + + async def _run_agent( + self, + *, + app_name: str, + user_id: str, + message_text: str, + session_id: str, + ) -> list[Event]: + """Run the agent with an auto-created ephemeral session. + + Acquires the concurrency semaphore before execution to prevent + overwhelming the LLM model quota. + + Args: + app_name: The target application / agent name. + user_id: Identifier for observability (derived from trigger metadata). + message_text: The text input to send to the agent. + session_id: The session ID to use. + + Returns: + List of events produced by the agent invocation. + """ + async with self._semaphore: + + runner = await self._server.get_runner_async(app_name) + + session = await self._server.session_service.get_session( + app_name=app_name, + user_id=user_id, + session_id=session_id, + ) + if not session: + session = await self._server.session_service.create_session( + app_name=app_name, + user_id=user_id, + session_id=session_id, + ) + + new_message = types.Content( + role="user", + parts=[types.Part(text=message_text)], + ) + + events: list[Event] = [] + async with Aclosing( + runner.run_async( + user_id=user_id, + session_id=session.id, + new_message=new_message, + ) + ) as agen: + async for event in agen: + events.append(event) + + return events + + async def _run_agent_with_retry( + self, + *, + app_name: str, + user_id: str, + message_text: str, + ) -> list[Event]: + """Run the agent with retry on transient errors. + + Uses exponential backoff with jitter to handle 429 rate-limit errors. + After max_retries exhausted, raises TransientError to signal the + upstream service (Pub/Sub, Eventarc) to retry at a higher level. + + Args: + app_name: The target application / agent name. + user_id: Identifier for observability. + message_text: The text input to send to the agent. + + Returns: + List of events produced by the agent invocation. + + Raises: + TransientError: When retries are exhausted on a transient error. + Exception: For non-transient errors, re-raised immediately. + """ + last_error: Optional[Exception] = None + session_id = str(uuid.uuid4()) + + for attempt in range(self._max_retries + 1): + try: + return await self._run_agent( + app_name=app_name, + user_id=user_id, + message_text=message_text, + session_id=session_id, + ) + except Exception as e: + if not _is_transient_error(e): + raise + + last_error = e + if attempt < self._max_retries: + # Exponential backoff with jitter + delay = min( + self._retry_base_delay * (2**attempt), + self._retry_max_delay, + ) + jitter = random.uniform(0, delay * 0.5) + total_delay = delay + jitter + logger.warning( + "Transient error (attempt %d/%d), retrying in %.1fs: %s", + attempt + 1, + self._max_retries + 1, + total_delay, + e, + ) + await asyncio.sleep(total_delay) + else: + logger.exception( + "Transient error persisted after %d attempts: %s", + self._max_retries + 1, + e, + ) + + raise TransientError( + f"Rate limit exceeded after {self._max_retries + 1} attempts:" + f" {last_error}" + ) + + def register(self, app: FastAPI) -> None: + """Register /trigger/* routes on the FastAPI app. + + Only endpoints whose source name appears in ``self._trigger_sources`` + are registered. + """ + + if "pubsub" in self._trigger_sources: + + @app.post( + "/apps/{app_name}/trigger/pubsub", + response_model=TriggerResponse, + tags=[TAG_TRIGGERS], + summary="Pub/Sub push subscription trigger", + description=( + "Processes a message from a Pub/Sub push subscription." + " Returns 200 on success; errors trigger Pub/Sub retry." + " Includes automatic retry with backoff on 429 errors." + ), + ) + async def trigger_pubsub( + app_name: str, req: PubSubTriggerRequest, request: Request + ) -> TriggerResponse: + user_id = req.subscription or "pubsub-caller" + + decoded_data = None + data_payload = None + if req.message.data: + try: + decoded_data = base64.b64decode(req.message.data).decode("utf-8") + try: + data_payload = json.loads(decoded_data) + except json.JSONDecodeError: + data_payload = decoded_data + except Exception as e: + logger.exception("Failed to decode Pub/Sub message data") + raise HTTPException( + status_code=400, + detail=f"Invalid base64 message data: {e}", + ) from e + + message_text = json.dumps( + {"data": data_payload, "attributes": req.message.attributes or {}} + ) + + logger.info( + "Pub/Sub trigger: subscription=%s, messageId=%s", + req.subscription, + req.message.messageId, + ) + + try: + await self._run_agent_with_retry( + app_name=app_name, + user_id=user_id, + message_text=message_text, + ) + except TransientError as te: + logger.exception("Pub/Sub: transient error after retries: %s", te) + raise HTTPException( + status_code=500, + detail=f"Rate limit exceeded (429). Retryable. {te}", + ) from te + except Exception as e: + logger.exception("Error processing Pub/Sub message: %s", e) + raise HTTPException( + status_code=500, + detail=f"Agent processing failed: {e}", + ) from e + + return TriggerResponse(status="success") + + if "eventarc" in self._trigger_sources: + + @app.post( + "/apps/{app_name}/trigger/eventarc", + response_model=TriggerResponse, + tags=[TAG_TRIGGERS], + summary="Eventarc / CloudEvents trigger", + description=( + "Processes a CloudEvent delivered by Eventarc." + " Returns 200 on success; errors trigger Eventarc retry." + " Includes automatic retry with backoff on 429 errors." + ), + ) + async def trigger_eventarc( + app_name: str, req: EventarcTriggerRequest, request: Request + ) -> TriggerResponse: + + user_id = ( + req.source or request.headers.get("ce-source") or "eventarc-caller" + ) + + logger.info( + "Eventarc trigger: source=%s, type=%s, id=%s", + user_id, + req.type or request.headers.get("ce-type"), + req.id or request.headers.get("ce-id"), + ) + + # Extract message text — support both structured and binary modes. + if req.message: + # Binary content mode (Eventarc default): body is a Pub/Sub + # message wrapper with base64-encoded data. + data_payload = None + if req.message.data: + try: + decoded_data = base64.b64decode(req.message.data).decode("utf-8") + try: + data_payload = json.loads(decoded_data) + except json.JSONDecodeError: + data_payload = decoded_data + except Exception: + data_payload = req.message.data + + message_text = json.dumps( + {"data": data_payload, "attributes": req.message.attributes or {}} + ) + elif req.data is not None: + # Structured content mode: ``data`` dict in body. + if ( + isinstance(req.data, dict) + and "message" in req.data + and isinstance(req.data["message"], dict) + and "data" in req.data["message"] + ): + try: + decoded_data = base64.b64decode( + req.data["message"]["data"] + ).decode("utf-8") + try: + data_payload = json.loads(decoded_data) + except json.JSONDecodeError: + data_payload = decoded_data + except Exception: + data_payload = req.data["message"]["data"] + + message_text = json.dumps({ + "data": data_payload, + "attributes": req.data["message"].get("attributes") or {}, + }) + else: + # Direct CloudEvent + message_text = json.dumps({ + "data": req.data, + "attributes": { + "ce-id": req.id or request.headers.get("ce-id"), + "ce-type": req.type or request.headers.get("ce-type"), + "ce-source": req.source or request.headers.get("ce-source"), + "ce-specversion": ( + req.specversion or request.headers.get("ce-specversion") + ), + }, + }) + else: + # Fallback: serialize whatever we got. + message_text = json.dumps({ + "data": req.model_dump(exclude_unset=True), + "attributes": { + "ce-id": req.id or request.headers.get("ce-id"), + "ce-type": req.type or request.headers.get("ce-type"), + "ce-source": req.source or request.headers.get("ce-source"), + "ce-specversion": ( + req.specversion or request.headers.get("ce-specversion") + ), + }, + }) + + try: + await self._run_agent_with_retry( + app_name=app_name, + user_id=user_id, + message_text=message_text, + ) + except TransientError as te: + logger.exception("Eventarc: transient error after retries: %s", te) + raise HTTPException( + status_code=500, + detail=f"Rate limit exceeded (429). Retryable. {te}", + ) from te + except Exception as e: + logger.exception("Error processing Eventarc event: %s", e) + raise HTTPException( + status_code=500, + detail=f"Agent processing failed: {e}", + ) from e + + return TriggerResponse(status="success") diff --git a/tests/remote/triggers/README.md b/tests/remote/triggers/README.md new file mode 100644 index 0000000000..29501731ca --- /dev/null +++ b/tests/remote/triggers/README.md @@ -0,0 +1,67 @@ +# Remote Integration Tests for `/apps/{app_name}/trigger/*` Endpoints + +End-to-end tests that verify Pub/Sub push, and +Eventarc triggers against a real ADK agent deployed to Cloud Run. + +## Workflow (Decoupled & Robust) + +This workflow is split into three independent phases. For Google-internal instructions, see [README_INTERNAL.md](README_INTERNAL.md). + +### Phase 1: Deploy Agent + +Build the ADK package and deploy the echo agent to Cloud Run. This ensures that +the service and its identity exist before any infrastructure wiring occurs. + +```bash +export GCP_PROJECT_ID=your-project-id +export SUFFIX=ea786 # Pick a unique suffix +export SERVICE_NAME=adk-trigger-test-$SUFFIX + +# 1. Build local ADK wheel +uv build --wheel --out-dir tests/remote/triggers/test_agent/wheels/ + +# 2. Deploy Agent +gcloud run deploy $SERVICE_NAME \ + --source=tests/remote/triggers/test_agent \ + --project="$GCP_PROJECT_ID" \ + --region="us-central1" \ + --port=8080 \ + --quiet +``` + +### Phase 2: Wire Infrastructure (Terraform) + +Run Terraform to create the supporting infrastructure (IAM roles, Pub/Sub +topics). + +```bash +cd tests/remote/triggers/terraform +terraform init +terraform apply \ + -var=project_id=$GCP_PROJECT_ID \ + -var=service_name=$SERVICE_NAME \ + -var=suffix=$SUFFIX +``` + +### Phase 3: Run Tests (Pytest) + +```bash +# Run Tests from the project root +export GCP_PROJECT_ID=your-project-id +export SUFFIX=ea786 +pytest tests/remote/triggers/ -v -s +``` + +## Cleanup + +```bash +# 1. Destroy infrastructure +cd tests/remote/triggers/terraform +terraform destroy \ + -var=project_id=$GCP_PROJECT_ID \ + -var=service_name=$SERVICE_NAME \ + -var=suffix=$SUFFIX + +# 2. Delete Cloud Run service +gcloud run services delete $SERVICE_NAME --project=$GCP_PROJECT_ID --region=us-central1 --quiet +``` diff --git a/tests/remote/triggers/conftest.py b/tests/remote/triggers/conftest.py new file mode 100644 index 0000000000..1623ee1952 --- /dev/null +++ b/tests/remote/triggers/conftest.py @@ -0,0 +1,169 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Shared pytest fixtures for remote trigger integration tests. + +Exposes GCP resource references by reading current Terraform state. + +Environment variables: + GCP_PROJECT_ID : GCP project. + GCP_REGION : GCP region (default: ``us-central1``). + ADK_TERRAFORM_BIN : Path to terraform binary (default: ``terraform``). + ADK_TERRAFORM_CWD : Directory to run terraform from (default: + ``tests/remote/terraform``). + ADK_TERRAFORM_ARGS: Extra arguments for terraform commands. +""" + +from __future__ import annotations + +import json +import os +import shlex +import subprocess +import time + +import pytest +import requests + +TERRAFORM_DIR = os.path.join(os.path.dirname(__file__), "terraform") + + +def _get_project_id() -> str | None: + """Return GCP project ID from env or gcloud config.""" + project = os.environ.get("GCP_PROJECT_ID") + if project: + return project + try: + result = subprocess.run( + ["gcloud", "config", "get-value", "project"], + capture_output=True, + text=True, + check=False, + ) + return result.stdout.strip() or None + except FileNotFoundError: + return None + + +def _get_identity_token(audience: str) -> str | None: + """Fetch an identity token for the given audience via gcloud.""" + try: + result = subprocess.run( + [ + "gcloud", + "auth", + "print-identity-token", + f"--audiences={audience}", + ], + capture_output=True, + text=True, + check=True, + ) + return result.stdout.strip() + except (FileNotFoundError, subprocess.CalledProcessError): + return None + + +# --------------------------------------------------------------------------- +# Infrastructure Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture(scope="session") +def terraform_outputs(): + """Read Terraform outputs from the current state.""" + project = _get_project_id() + if not project: + pytest.skip( + "GCP_PROJECT_ID not set and no gcloud default project configured" + ) + + tf_bin = os.environ.get("ADK_TERRAFORM_BIN", "terraform") + tf_cwd = os.environ.get("ADK_TERRAFORM_CWD", TERRAFORM_DIR) + tf_args = shlex.split(os.environ.get("ADK_TERRAFORM_ARGS", "")) + + try: + # Build the command using provided overrides + cmd = [tf_bin] + tf_args + ["output", "-json"] + result = subprocess.run( + cmd, + cwd=tf_cwd, + capture_output=True, + text=True, + check=True, + ) + raw = json.loads(result.stdout) + return {k: v["value"] for k, v in raw.items()} + except ( + subprocess.CalledProcessError, + FileNotFoundError, + json.JSONDecodeError, + ) as e: + pytest.fail( + "Failed to read Terraform outputs. Ensure 'terraform apply' has been" + f" run successfully.\nCommand: {' '.join(cmd)}\nCWD:" + f" {tf_cwd}\nError: {e}" + ) + + +@pytest.fixture(scope="session") +def cloud_run_url(terraform_outputs) -> str: + """Base URL of the deployed Cloud Run service.""" + return terraform_outputs["cloud_run_url"] + + +@pytest.fixture(scope="session") +def pubsub_topic(terraform_outputs) -> str: + """Fully qualified Pub/Sub topic name.""" + return terraform_outputs["pubsub_topic"] + + +@pytest.fixture(scope="session") +def pubsub_topic_short(terraform_outputs) -> str: + """Short Pub/Sub topic name.""" + return terraform_outputs["pubsub_topic_short"] + + +@pytest.fixture(scope="session") +def eventarc_topic(terraform_outputs) -> str: + """Fully qualified Eventarc source topic name.""" + return terraform_outputs["eventarc_topic"] + + +@pytest.fixture(scope="session") +def eventarc_topic_short(terraform_outputs) -> str: + """Short Eventarc source topic name.""" + return terraform_outputs["eventarc_topic_short"] + + +@pytest.fixture(scope="session") +def project_id(terraform_outputs) -> str: + """GCP project ID.""" + return terraform_outputs["project_id"] + + +@pytest.fixture(scope="session") +def auth_headers(cloud_run_url) -> dict[str, str]: + """Authorization headers for direct HTTP calls to Cloud Run.""" + try: + resp = requests.get(cloud_run_url, timeout=10) + if resp.status_code != 403: + return {} + except requests.RequestException: + pass + + token = _get_identity_token(cloud_run_url) + if token: + return {"Authorization": f"Bearer {token}"} + return {} diff --git a/tests/remote/triggers/terraform/cloud_run.tf b/tests/remote/triggers/terraform/cloud_run.tf new file mode 100644 index 0000000000..8580cad44d --- /dev/null +++ b/tests/remote/triggers/terraform/cloud_run.tf @@ -0,0 +1,35 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# --------------------------------------------------------------------------- +# ADK Agent for trigger testing. +# +# This configuration references a Cloud Run service that has been deployed +# manually (e.g. via `gcloud run deploy`) before running Terraform. +# --------------------------------------------------------------------------- + +locals { + service_name = var.service_name != null ? var.service_name : "${local.name_prefix}-${local.suffix}" +} + +# Read the service back as a data source so other resources can reference +# its URL and attributes. +data "google_cloud_run_v2_service" "trigger_agent" { + name = local.service_name + location = var.region + project = var.project_id +} + +# No longer using resource "google_cloud_run_v2_service" to avoid +# deployment conflicts with local tools. diff --git a/tests/remote/triggers/terraform/eventarc.tf b/tests/remote/triggers/terraform/eventarc.tf new file mode 100644 index 0000000000..d8d586d7b7 --- /dev/null +++ b/tests/remote/triggers/terraform/eventarc.tf @@ -0,0 +1,120 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# --------------------------------------------------------------------------- +# Eventarc: separate Pub/Sub topic as event source → Cloud Run /trigger/eventarc +# --------------------------------------------------------------------------- + +# A dedicated topic that acts as the Eventarc event source. +# Publishing to this topic triggers the Eventarc → Cloud Run pipeline. +resource "google_pubsub_topic" "eventarc_source" { + name = "${local.name_prefix}-eventarc-${local.suffix}" + project = var.project_id + + depends_on = [google_project_service.apis] +} + +resource "google_eventarc_trigger" "trigger_test" { + name = "${local.name_prefix}-${local.suffix}" + location = var.region + project = var.project_id + + matching_criteria { + attribute = "type" + value = "google.cloud.pubsub.topic.v1.messagePublished" + } + + transport { + pubsub { + topic = google_pubsub_topic.eventarc_source.id + } + } + + destination { + cloud_run_service { + service = data.google_cloud_run_v2_service.trigger_agent.name + path = "/apps/trigger_echo_agent/trigger/eventarc" + region = var.region + } + } + + service_account = google_service_account.eventarc_invoker.email + + depends_on = [ + google_project_iam_member.eventarc_event_receiver, + google_project_service.apis, + ] +} + +# --------------------------------------------------------------------------- +# GCS Trigger Test +# --------------------------------------------------------------------------- + +resource "random_id" "bucket_suffix" { + byte_length = 4 +} + +resource "google_storage_bucket" "trigger_test_bucket" { + name = "${local.name_prefix}-bucket-${local.suffix}-${random_id.bucket_suffix.hex}" + location = var.region + project = var.project_id + force_destroy = true + + uniform_bucket_level_access = true + + depends_on = [google_project_service.apis] +} + +data "google_storage_project_service_account" "gcs_account" { + project = var.project_id +} + +resource "google_project_iam_member" "gcs_pubsub_publisher" { + project = var.project_id + role = "roles/pubsub.publisher" + member = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}" + + depends_on = [data.google_storage_project_service_account.gcs_account] +} + +resource "google_eventarc_trigger" "gcs_trigger" { + name = "${local.name_prefix}-gcs-${local.suffix}" + location = var.region + project = var.project_id + + matching_criteria { + attribute = "type" + value = "google.cloud.storage.object.v1.finalized" + } + matching_criteria { + attribute = "bucket" + value = google_storage_bucket.trigger_test_bucket.name + } + + destination { + cloud_run_service { + service = data.google_cloud_run_v2_service.trigger_agent.name + path = "/apps/trigger_echo_agent/trigger/eventarc" + region = var.region + } + } + + service_account = google_service_account.eventarc_invoker.email + + depends_on = [ + google_project_iam_member.eventarc_event_receiver, + google_project_iam_member.gcs_pubsub_publisher, + google_project_service.apis, + ] +} diff --git a/tests/remote/triggers/terraform/iam.tf b/tests/remote/triggers/terraform/iam.tf new file mode 100644 index 0000000000..cc0a5f0c3e --- /dev/null +++ b/tests/remote/triggers/terraform/iam.tf @@ -0,0 +1,80 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# --------------------------------------------------------------------------- +# IAM bindings and Service Accounts for Cloud Run invokers. +# --------------------------------------------------------------------------- + +# Service account for the Cloud Run agent itself. +resource "google_service_account" "cloud_run" { + account_id = "${local.name_prefix}-run-${local.suffix}" + display_name = "ADK Trigger Test - Cloud Run Agent" + project = var.project_id +} + +# Service account for Pub/Sub to invoke Cloud Run. +resource "google_service_account" "pubsub_invoker" { + account_id = "${local.name_prefix}-ps-${local.suffix}" + display_name = "ADK Trigger Test - Pub/Sub Invoker" + project = var.project_id +} + +# Service account for Eventarc to invoke Cloud Run. +resource "google_service_account" "eventarc_invoker" { + account_id = "${local.name_prefix}-ea-${local.suffix}" + display_name = "ADK Trigger Test - Eventarc Invoker" + project = var.project_id +} + +resource "google_cloud_run_v2_service_iam_member" "pubsub_invoker" { + name = data.google_cloud_run_v2_service.trigger_agent.name + location = var.region + project = var.project_id + role = "roles/run.invoker" + member = "serviceAccount:${google_service_account.pubsub_invoker.email}" +} + +resource "google_cloud_run_v2_service_iam_member" "eventarc_invoker" { + name = data.google_cloud_run_v2_service.trigger_agent.name + location = var.region + project = var.project_id + role = "roles/run.invoker" + member = "serviceAccount:${google_service_account.eventarc_invoker.email}" +} + + +# Eventarc requires the receiver role on the invoker service account. +resource "google_project_iam_member" "eventarc_event_receiver" { + project = var.project_id + role = "roles/eventarc.eventReceiver" + member = "serviceAccount:${google_service_account.eventarc_invoker.email}" +} + +data "google_project" "project" { + project_id = var.project_id +} + +# Grant the Pub/Sub service agent permission to create OIDC tokens for the pubsub_invoker SA +resource "google_service_account_iam_member" "pubsub_token_creator" { + service_account_id = google_service_account.pubsub_invoker.name + role = "roles/iam.serviceAccountTokenCreator" + member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" +} + +# Grant the Pub/Sub service agent permission to create OIDC tokens for the eventarc_invoker SA +resource "google_service_account_iam_member" "eventarc_token_creator" { + service_account_id = google_service_account.eventarc_invoker.name + role = "roles/iam.serviceAccountTokenCreator" + member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" +} diff --git a/tests/remote/triggers/terraform/main.tf b/tests/remote/triggers/terraform/main.tf new file mode 100644 index 0000000000..b084386ef6 --- /dev/null +++ b/tests/remote/triggers/terraform/main.tf @@ -0,0 +1,64 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +terraform { + required_version = ">= 1.0.0" + + required_providers { + google = { + source = "hashicorp/google" + version = ">= 5.0.0" + } + random = { + source = "hashicorp/random" + version = ">= 3.0.0" + } + } +} + +provider "google" { + project = var.project_id + region = var.region + + default_labels = { + goog-terraform-provisioned = "true" + } +} + +# Random suffix to avoid resource name collisions across parallel test runs. +resource "random_id" "suffix" { + byte_length = 4 +} + +locals { + suffix = var.suffix != null ? var.suffix : random_id.suffix.hex + name_prefix = "adk-trigger-test" + + required_apis = [ + "run.googleapis.com", + "pubsub.googleapis.com", + "cloudbuild.googleapis.com", + "eventarc.googleapis.com", + "logging.googleapis.com", + ] +} + +resource "google_project_service" "apis" { + for_each = toset(local.required_apis) + + project = var.project_id + service = each.value + + disable_on_destroy = false +} diff --git a/tests/remote/triggers/terraform/outputs.tf b/tests/remote/triggers/terraform/outputs.tf new file mode 100644 index 0000000000..01606d5530 --- /dev/null +++ b/tests/remote/triggers/terraform/outputs.tf @@ -0,0 +1,56 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +output "cloud_run_url" { + description = "Base URL of the deployed Cloud Run trigger-echo-agent service." + value = data.google_cloud_run_v2_service.trigger_agent.uri +} + +output "pubsub_topic" { + description = "Fully qualified Pub/Sub topic name for direct-push tests." + value = google_pubsub_topic.trigger_test.id +} + +output "pubsub_topic_short" { + description = "Short Pub/Sub topic name." + value = google_pubsub_topic.trigger_test.name +} + +output "eventarc_topic" { + description = "Fully qualified Pub/Sub topic name that fires the Eventarc trigger." + value = google_pubsub_topic.eventarc_source.id +} + +output "eventarc_topic_short" { + description = "Short Eventarc source topic name." + value = google_pubsub_topic.eventarc_source.name +} + + + + +output "project_id" { + description = "GCP project ID used for test resources." + value = var.project_id +} + +output "region" { + description = "GCP region used for test resources." + value = var.region +} + +output "suffix" { + description = "The random suffix used for resource naming." + value = local.suffix +} diff --git a/tests/remote/triggers/terraform/pubsub.tf b/tests/remote/triggers/terraform/pubsub.tf new file mode 100644 index 0000000000..d3cc3b5e59 --- /dev/null +++ b/tests/remote/triggers/terraform/pubsub.tf @@ -0,0 +1,54 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# --------------------------------------------------------------------------- +# Pub/Sub topic + push subscription pointing to /trigger/pubsub +# --------------------------------------------------------------------------- + +resource "google_pubsub_topic" "trigger_test" { + name = "${local.name_prefix}-${local.suffix}" + project = var.project_id + + depends_on = [google_project_service.apis] +} + +resource "google_pubsub_subscription" "trigger_push" { + name = "${local.name_prefix}-push-${local.suffix}" + project = var.project_id + topic = google_pubsub_topic.trigger_test.id + + push_config { + push_endpoint = "${data.google_cloud_run_v2_service.trigger_agent.uri}/apps/trigger_echo_agent/trigger/pubsub" + + oidc_token { + service_account_email = google_service_account.pubsub_invoker.email + audience = data.google_cloud_run_v2_service.trigger_agent.uri + } + } + + # Short ack deadline for faster test feedback. + ack_deadline_seconds = 30 + + # Retry policy for failed pushes. + retry_policy { + minimum_backoff = "10s" + maximum_backoff = "60s" + } + + # Let the subscription persist until Terraform destroys it. + # (default retention of 604800s is fine for tests) + expiration_policy { + ttl = "" + } +} diff --git a/tests/remote/triggers/terraform/variables.tf b/tests/remote/triggers/terraform/variables.tf new file mode 100644 index 0000000000..951ee84a18 --- /dev/null +++ b/tests/remote/triggers/terraform/variables.tf @@ -0,0 +1,42 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +variable "project_id" { + description = "GCP project ID for test resources." + type = string +} + +variable "region" { + description = "GCP region for Cloud Run and related resources." + type = string + default = "us-central1" +} + +variable "simulate_429_count" { + description = "Number of 429 errors the echo agent simulates before succeeding (0 = disabled)." + type = number + default = 0 +} + +variable "service_name" { + description = "Optional name of a pre-deployed Cloud Run service. If provided, Terraform will use it instead of generating a name from the suffix." + type = string + default = null +} + +variable "suffix" { + description = "Optional suffix for resource naming. If not provided, a random one will be generated." + type = string + default = null +} diff --git a/tests/remote/triggers/test_agent/Dockerfile b/tests/remote/triggers/test_agent/Dockerfile new file mode 100644 index 0000000000..2dd5028fce --- /dev/null +++ b/tests/remote/triggers/test_agent/Dockerfile @@ -0,0 +1,24 @@ +FROM python:3.11-slim + +WORKDIR /app + +# Install the local ADK wheel (built from the repo under test). +# Install the .whl file directly so pip uses it instead of PyPI. +# Dependencies are resolved from PyPI automatically. +COPY wheels/ /tmp/wheels/ +SHELL ["/bin/bash", "-c"] +RUN pip install --no-cache-dir /tmp/wheels/google_adk-*.whl \ + && rm -rf /tmp/wheels + +# Copy the agent into the expected adk layout: +# /app/agents/trigger_echo_agent/__init__.py +# /app/agents/trigger_echo_agent/agent.py +COPY __init__.py agents/trigger_echo_agent/__init__.py +COPY agent.py agents/trigger_echo_agent/agent.py + +ENV PORT=8080 +ENV HOST=0.0.0.0 + +EXPOSE 8080 + +CMD ["adk", "api_server", "--host=0.0.0.0", "--port=8080", "--trigger_sources=pubsub,eventarc", "/app/agents"] diff --git a/tests/remote/triggers/test_agent/__init__.py b/tests/remote/triggers/test_agent/__init__.py new file mode 100644 index 0000000000..58d482ea38 --- /dev/null +++ b/tests/remote/triggers/test_agent/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/remote/triggers/test_agent/agent.py b/tests/remote/triggers/test_agent/agent.py new file mode 100644 index 0000000000..c855889ae1 --- /dev/null +++ b/tests/remote/triggers/test_agent/agent.py @@ -0,0 +1,86 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Echo agent for remote trigger integration tests. + +Uses a before_model_callback to echo user input without calling the LLM, +making tests fast, deterministic, and free of LLM model quota usage. + +Supports optional 429 simulation via the SIMULATE_429_COUNT environment +variable: when set to N > 0, the first N invocations per session will raise +a RuntimeError containing "429 RESOURCE_EXHAUSTED" before succeeding. +""" + +import os + +from google.adk.agents.callback_context import CallbackContext +from google.adk.agents.llm_agent import Agent +from google.adk.models.llm_request import LlmRequest +from google.adk.models.llm_response import LlmResponse +from google.genai import types + +# Track 429 simulation state across invocations within a process. +# Keyed by session_id to allow per-session failure counts. +_429_counter: dict[str, int] = {} + + +def before_model_callback( + callback_context: CallbackContext, + llm_request: LlmRequest, +) -> LlmResponse: + """Echo user input back without calling the LLM. + + If SIMULATE_429_COUNT is set, raises a transient error for the first N + invocations (per session) to exercise the retry-with-backoff logic in + the trigger endpoints. + """ + fail_count = int(os.environ.get("SIMULATE_429_COUNT", "0")) + session = callback_context.session + session_id = session.id if session else "default" + + if fail_count > 0: + current = _429_counter.get(session_id, 0) + if current < fail_count: + _429_counter[session_id] = current + 1 + raise RuntimeError("429 RESOURCE_EXHAUSTED: simulated quota exceeded") + + # Extract the most recent user message from the session events. + user_text = "" + if session and session.events: + for event in reversed(session.events): + if event.content and event.content.role == "user" and event.content.parts: + user_text = event.content.parts[0].text or "" + break + + # Fall back to the current LLM request contents if no session event found. + if not user_text and llm_request.contents: + for content in reversed(llm_request.contents): + if content.role == "user" and content.parts: + user_text = content.parts[0].text or "" + break + + return LlmResponse( + content=types.Content( + role="model", + parts=[types.Part(text=f"ECHO: {user_text}")], + ), + ) + + +root_agent = Agent( + model="gemini-2.0-flash-001", + name="trigger_echo_agent", + instruction="Echo agent for trigger testing.", + before_model_callback=before_model_callback, +) diff --git a/tests/remote/triggers/test_trigger_eventarc.py b/tests/remote/triggers/test_trigger_eventarc.py new file mode 100644 index 0000000000..bb4c215ee7 --- /dev/null +++ b/tests/remote/triggers/test_trigger_eventarc.py @@ -0,0 +1,125 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Remote integration tests for the /apps/trigger_echo_agent/trigger/eventarc endpoint. + +Tests cover: + + /apps/trigger_echo_agent/trigger/eventarc on Cloud Run. + 2. Full pipeline tests — publish to the Eventarc source topic and + verify the request reached Cloud Run via Cloud Logging. + +Prerequisites: + - GCP project with Eventarc, Pub/Sub, Cloud Run, and Cloud Logging + APIs enabled. + - ``gcloud`` CLI authenticated. + - Terraform >= 1.5 installed. + +Run: + GCP_PROJECT_ID=my-project pytest tests/remote/test_trigger_eventarc.py -v -s +""" + +from __future__ import annotations + +import datetime +import json +import time +import uuid + +from google.cloud import logging as cloud_logging +from google.cloud import pubsub_v1 +import pytest +import requests + +# --------------------------------------------------------------------------- +# Full Eventarc pipeline tests +# --------------------------------------------------------------------------- + + +class TestEventarcPipeline: + """Test the full Pub/Sub → Eventarc → Cloud Run pipeline. + + Verification is done by checking Cloud Run request logs for successful + POST requests to /apps/trigger_echo_agent/trigger/eventarc. + """ + + @pytest.fixture(autouse=True) + def _setup(self, eventarc_topic, project_id): + self.publisher = pubsub_v1.PublisherClient() + self.topic_path = eventarc_topic + self.project_id = project_id + self.logging_client = cloud_logging.Client(project=project_id) + + def _publish_event(self, data: str, wait_seconds: int = 45) -> None: + """Publish a message to the Eventarc source topic and wait.""" + future = self.publisher.publish( + self.topic_path, + data.encode("utf-8"), + ) + future.result(timeout=30) + time.sleep(wait_seconds) + + def _count_successful_requests( + self, + path: str, + since: datetime.datetime, + ) -> int: + """Count successful HTTP requests to the given path in Cloud Run logs.""" + timestamp = since.strftime("%Y-%m-%dT%H:%M:%SZ") + filter_str = ( + 'resource.type="cloud_run_revision" ' + f'httpRequest.requestUrl:"{path}" ' + "httpRequest.status=200 " + f'timestamp>="{timestamp}"' + ) + entries = list( + self.logging_client.list_entries( + filter_=filter_str, + page_size=50, + ) + ) + return len(entries) + + def test_eventarc_pubsub_trigger(self): + """Publish to Eventarc source topic and verify Cloud Run processes it.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + self._publish_event(json.dumps({"test": "eventarc-pipeline"})) + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/eventarc", start_time + ) + assert count >= 1, ( + "Expected at least 1 successful request to" + f" /apps/trigger_echo_agent/trigger/eventarc, found {count}" + ) + + def test_eventarc_multiple_events(self): + """Publish multiple events and verify they are processed.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + for i in range(3): + future = self.publisher.publish( + self.topic_path, + json.dumps({"seq": i}).encode("utf-8"), + ) + future.result(timeout=30) + + # Eventarc delivery + log ingestion can be slow; wait longer. + time.sleep(90) + + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/eventarc", start_time + ) + assert count >= 1, ( + "Expected at least 1 successful request to" + f" /apps/trigger_echo_agent/trigger/eventarc, found {count}" + ) diff --git a/tests/remote/triggers/test_trigger_pubsub.py b/tests/remote/triggers/test_trigger_pubsub.py new file mode 100644 index 0000000000..2168e4976d --- /dev/null +++ b/tests/remote/triggers/test_trigger_pubsub.py @@ -0,0 +1,166 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Remote integration tests for the /apps/trigger_echo_agent/trigger/pubsub endpoint. + +Tests cover: + + 2. Full pipeline tests — publish to a Pub/Sub topic with a push + subscription pointing at the Cloud Run service, then verify via + Cloud Logging that the requests reached the service. + +Prerequisites: + - GCP project with Pub/Sub, Cloud Run, and Cloud Logging APIs enabled. + - ``gcloud`` CLI authenticated. + - Terraform >= 1.5 installed. + +Run: + GCP_PROJECT_ID=my-project pytest tests/remote/test_trigger_pubsub.py -v -s +""" + +from __future__ import annotations + +import base64 +import datetime +import json +import time + +from google.cloud import logging as cloud_logging +from google.cloud import pubsub_v1 +import pytest +import requests + +# --------------------------------------------------------------------------- +# Full Pub/Sub pipeline tests +# --------------------------------------------------------------------------- + + +class TestPubSubPipeline: + """Test the full Pub/Sub → push subscription → Cloud Run pipeline. + + Verification is done by checking Cloud Run request logs for successful + POST requests to /apps/trigger_echo_agent/trigger/pubsub. We look for + httpRequest entries with + status 200 that arrived after we published. + """ + + @pytest.fixture(autouse=True) + def _setup(self, pubsub_topic, project_id, cloud_run_url): + self.publisher = pubsub_v1.PublisherClient() + self.topic_path = pubsub_topic + self.project_id = project_id + self.cloud_run_url = cloud_run_url + self.logging_client = cloud_logging.Client(project=project_id) + + def _publish_and_wait( + self, + data: str, + attributes: dict[str, str] | None = None, + wait_seconds: int = 30, + ) -> None: + """Publish a message and wait for it to be delivered.""" + future = self.publisher.publish( + self.topic_path, + data.encode("utf-8"), + **(attributes or {}), + ) + future.result(timeout=30) + time.sleep(wait_seconds) + + def _count_successful_requests( + self, + path: str, + since: datetime.datetime, + ) -> int: + """Count successful HTTP requests to the given path in Cloud Run logs.""" + timestamp = since.strftime("%Y-%m-%dT%H:%M:%SZ") + filter_str = ( + 'resource.type="cloud_run_revision" ' + f'httpRequest.requestUrl:"{path}" ' + "httpRequest.status=200 " + f'timestamp>="{timestamp}"' + ) + entries = list( + self.logging_client.list_entries( + filter_=filter_str, + page_size=200, + ) + ) + return len(entries) + + def test_publish_text_message(self): + """Publish a text message and verify it reaches Cloud Run.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + self._publish_and_wait("hello-pipeline-test") + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/pubsub", start_time + ) + assert count >= 1, ( + "Expected at least 1 successful request to" + f" /apps/trigger_echo_agent/trigger/pubsub, found {count}" + ) + + def test_publish_json_message(self): + """Publish a JSON message and verify processing.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + data = json.dumps({"type": "json", "value": 42}) + self._publish_and_wait(data) + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/pubsub", start_time + ) + assert count >= 1, ( + "Expected at least 1 successful request to" + f" /apps/trigger_echo_agent/trigger/pubsub, found {count}" + ) + + def test_publish_with_attributes(self): + """Publish a message with attributes and verify processing.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + self._publish_and_wait( + "attr-pipeline-test", + attributes={"test_attr": "pytest"}, + ) + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/pubsub", start_time + ) + assert count >= 1, ( + "Expected at least 1 successful request to" + f" /apps/trigger_echo_agent/trigger/pubsub, found {count}" + ) + + def test_high_volume(self): + """Publish 20 messages and verify they are processed.""" + start_time = datetime.datetime.now(datetime.timezone.utc) + n = 20 + futures = [] + for i in range(n): + future = self.publisher.publish( + self.topic_path, + f"volume-test-{i}".encode("utf-8"), + ) + futures.append(future) + + for f in futures: + f.result(timeout=30) + + # Wait for push delivery. + time.sleep(15) + + count = self._count_successful_requests( + "/apps/trigger_echo_agent/trigger/pubsub", start_time + ) + # Allow some tolerance — at least 80% should arrive. + assert ( + count >= n * 0.8 + ), f"Expected at least {int(n * 0.8)} successful requests, found {count}" diff --git a/tests/unittests/cli/test_trigger_routes.py b/tests/unittests/cli/test_trigger_routes.py new file mode 100644 index 0000000000..edec8cb675 --- /dev/null +++ b/tests/unittests/cli/test_trigger_routes.py @@ -0,0 +1,1011 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Integration tests for /trigger/* endpoints. + +Tests exercise the full FastAPI request → TriggerRouter → Runner pipeline +using the same TestClient pattern as test_fast_api.py, with a mocked Runner +that returns deterministic events. +""" + +import asyncio +import base64 +import json +import signal +from typing import Optional +from unittest.mock import AsyncMock +from unittest.mock import MagicMock +from unittest.mock import patch + +from fastapi.testclient import TestClient +from google.adk.agents.base_agent import BaseAgent +from google.adk.agents.run_config import RunConfig +from google.adk.cli import fast_api as fast_api_module +from google.adk.cli.fast_api import get_fast_api_app +from google.adk.cli.trigger_routes import _is_transient_error +from google.adk.cli.trigger_routes import TransientError +from google.adk.cli.trigger_routes import TriggerRouter +from google.adk.events.event import Event +from google.adk.runners import Runner +from google.adk.sessions.in_memory_session_service import InMemorySessionService +from google.genai import types +import pytest + +# --------------------------------------------------------------------------- +# Dummy agent & mocked runner (same pattern as test_fast_api.py) +# --------------------------------------------------------------------------- + + +class DummyAgent(BaseAgent): + + def __init__(self, name): + super().__init__(name=name) + self.sub_agents = [] + + +root_agent = DummyAgent(name="trigger_test_agent") + + +def _model_event(text: str = "Agent reply") -> Event: + return Event( + author="trigger_test_agent", + invocation_id="inv-trigger", + content=types.Content( + role="model", + parts=[types.Part(text=text)], + ), + ) + + +async def dummy_run_async( + self, + user_id, + session_id, + new_message, + state_delta=None, + run_config: Optional[RunConfig] = None, + invocation_id: Optional[str] = None, +): + """Mocked Runner.run_async that echoes input text back.""" + # Extract the input text to echo it back — proves the pipeline works e2e + input_text = "" + if new_message and new_message.parts: + input_text = new_message.parts[0].text or "" + + yield _model_event(f"Processed: {input_text}") + await asyncio.sleep(0) + + +async def dummy_run_async_error( + self, + user_id, + session_id, + new_message, + state_delta=None, + run_config: Optional[RunConfig] = None, + invocation_id: Optional[str] = None, +): + """Mocked Runner.run_async that raises an exception.""" + raise RuntimeError("Agent crashed") + yield # make it an async generator # noqa: E305 + + +def _make_rate_limit_runner(fail_count: int): + """Create a runner that fails with 429 `fail_count` times, then succeeds.""" + call_count = {"value": 0} + + async def dummy_run_async_rate_limit( + self, + user_id, + session_id, + new_message, + state_delta=None, + run_config: Optional[RunConfig] = None, + invocation_id: Optional[str] = None, + ): + call_count["value"] += 1 + if call_count["value"] <= fail_count: + raise RuntimeError("429 Resource has been exhausted") + input_text = "" + if new_message and new_message.parts: + input_text = new_message.parts[0].text or "" + yield _model_event(f"Processed: {input_text}") + await asyncio.sleep(0) + + return dummy_run_async_rate_limit + + +async def dummy_run_async_always_429( + self, + user_id, + session_id, + new_message, + state_delta=None, + run_config: Optional[RunConfig] = None, + invocation_id: Optional[str] = None, +): + """Mocked Runner.run_async that always raises a 429 error.""" + raise RuntimeError("RESOURCE_EXHAUSTED: 429 quota exceeded") + yield # noqa: E305 + + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + + +@pytest.fixture(autouse=True) +def patch_runner(monkeypatch): + monkeypatch.setattr(Runner, "run_async", dummy_run_async) + + +@pytest.fixture +def mock_agent_loader(): + + class MockAgentLoader: + + def __init__(self, agents_dir: str): + pass + + def load_agent(self, app_name): + return root_agent + + def list_agents(self): + return ["test_app"] + + def list_agents_detailed(self): + return [{ + "name": "test_app", + "root_agent_name": "trigger_test_agent", + "description": "Test agent for triggers", + "language": "python", + "is_computer_use": False, + }] + + return MockAgentLoader(".") + + +@pytest.fixture +def mock_session_service(): + return InMemorySessionService() + + +@pytest.fixture +def mock_artifact_service(): + service = AsyncMock() + service.list_artifact_keys = AsyncMock(return_value=[]) + return service + + +@pytest.fixture +def mock_memory_service(): + return AsyncMock() + + +def _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources: Optional[list[str]] = None, +) -> TestClient: + """Build a TestClient with the given trigger setting.""" + with ( + patch.object(signal, "signal", autospec=True, return_value=None), + patch.object( + fast_api_module, + "create_session_service_from_options", + autospec=True, + return_value=mock_session_service, + ), + patch.object( + fast_api_module, + "create_artifact_service_from_options", + autospec=True, + return_value=mock_artifact_service, + ), + patch.object( + fast_api_module, + "create_memory_service_from_options", + autospec=True, + return_value=mock_memory_service, + ), + patch.object( + fast_api_module, + "AgentLoader", + autospec=True, + return_value=mock_agent_loader, + ), + patch.object( + fast_api_module, + "LocalEvalSetsManager", + autospec=True, + return_value=AsyncMock(), + ), + patch.object( + fast_api_module, + "LocalEvalSetResultsManager", + autospec=True, + return_value=AsyncMock(), + ), + ): + app = get_fast_api_app( + agents_dir=".", + web=False, + session_service_uri="", + artifact_service_uri="", + memory_service_uri="", + allow_origins=["*"], + trigger_sources=trigger_sources, + ) + return TestClient(app) + + +@pytest.fixture +def client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, +): + """TestClient with all triggers enabled.""" + return _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=["pubsub", "eventarc"], + ) + + +@pytest.fixture +def client_no_triggers( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, +): + """TestClient with triggers disabled (default).""" + return _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=None, + ) + + +# =================================================================== +# /apps/test_app/trigger/pubsub — Pub/Sub Push Subscription +# =================================================================== + + +class TestTriggerPubSub: + """Integration tests for the Pub/Sub push subscription trigger.""" + + def test_success(self, client, monkeypatch): + """Valid Pub/Sub message is processed and returns success.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + message_data = base64.b64encode(b"Hello from Pub/Sub").decode("utf-8") + payload = { + "message": { + "data": message_data, + "messageId": "msg-001", + }, + "subscription": "projects/my-project/subscriptions/my-sub", + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 200 + data = resp.json() + assert data["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == "Hello from Pub/Sub" + assert parsed_msg["attributes"] == {} + + def test_message_with_attributes(self, client, monkeypatch): + """Pub/Sub message with attributes (no data) is processed.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "message": { + "attributes": {"key": "value", "action": "process"}, + "messageId": "msg-002", + }, + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] is None + assert parsed_msg["attributes"] == {"key": "value", "action": "process"} + + def test_json_payload_in_data(self, client, monkeypatch): + """JSON-encoded data in Pub/Sub message is decoded properly.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + inner_json = json.dumps({"order_id": 42, "amount": 99.99}) + message_data = base64.b64encode(inner_json.encode("utf-8")).decode("utf-8") + payload = { + "message": { + "data": message_data, + "messageId": "msg-003", + }, + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == {"order_id": 42, "amount": 99.99} + assert parsed_msg["attributes"] == {} + + def test_invalid_base64_returns_400(self, client): + """Invalid base64 data returns 400.""" + payload = { + "message": { + "data": "!!!not-valid-base64!!!", + "messageId": "msg-bad", + }, + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 400 + assert "base64" in resp.json()["detail"].lower() + + def test_agent_error_returns_500(self, client, monkeypatch): + """Agent failure returns 500, allowing Pub/Sub to retry.""" + monkeypatch.setattr(Runner, "run_async", dummy_run_async_error) + + message_data = base64.b64encode(b"trigger error").decode("utf-8") + payload = { + "message": {"data": message_data}, + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 500 + assert "Agent processing failed" in resp.json()["detail"] + + def test_with_subscription_metadata(self, client): + """Subscription field is used for user_id derivation.""" + message_data = base64.b64encode(b"test").decode("utf-8") + payload = { + "message": {"data": message_data}, + "subscription": "projects/p/subscriptions/orders-sub", + } + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 200 + + def test_unknown_app_fails_early( + self, client, mock_agent_loader, mock_session_service + ): + """Unknown app fails early and does NOT create a session.""" + + def load_agent_raising(app_name): + if app_name == "unknown_app": + raise Exception("App not found") + return root_agent + + mock_agent_loader.load_agent = load_agent_raising + + message_data = base64.b64encode(b"test").decode("utf-8") + payload = { + "message": {"data": message_data}, + } + resp = client.post("/apps/unknown_app/trigger/pubsub", json=payload) + + assert resp.status_code == 500 + assert "unknown_app" not in mock_session_service.sessions + + +# =================================================================== +# /apps/test_app/trigger/eventarc — Eventarc / CloudEvents +# =================================================================== + + +class TestTriggerEventarc: + """Integration tests for the Eventarc / CloudEvents trigger.""" + + def test_success(self, client, monkeypatch): + """Valid CloudEvent payload is processed and returns success.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "data": { + "bucket": "my-bucket", + "name": "path/to/file.pdf", + "contentType": "application/pdf", + }, + "source": "storage.googleapis.com", + "type": "google.cloud.storage.object.v1.finalized", + "id": "evt-001", + "specversion": "1.0", + } + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == payload["data"] + assert parsed_msg["attributes"]["ce-id"] == "evt-001" + assert ( + parsed_msg["attributes"]["ce-type"] + == "google.cloud.storage.object.v1.finalized" + ) + + def test_source_derived_from_body(self, client): + """Source from body is used for user_id.""" + payload = { + "data": {"key": "value"}, + "source": "my-custom-source", + } + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 200 + + def test_source_from_ce_header(self, client): + """ce-source header is used when body source is absent.""" + payload = { + "data": {"key": "value"}, + } + resp = client.post( + "/apps/test_app/trigger/eventarc", + json=payload, + headers={"ce-source": "header-source"}, + ) + assert resp.status_code == 200 + + def test_complex_event_data(self, client, monkeypatch): + """Complex nested event data is serialized as JSON for the agent.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "data": { + "resource": { + "name": "projects/p/topics/t", + "labels": {"env": "prod"}, + }, + "insertId": "abc123", + "timestamp": "2026-01-01T00:00:00Z", + }, + } + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == payload["data"] + + def test_agent_error_returns_500(self, client, monkeypatch): + """Agent failure returns 500, allowing Eventarc to retry.""" + monkeypatch.setattr(Runner, "run_async", dummy_run_async_error) + + payload = { + "data": {"trigger": "error"}, + } + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 500 + assert "Agent processing failed" in resp.json()["detail"] + + def test_minimal_payload(self, client, monkeypatch): + """Minimal payload with just data field works.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = {"data": {}} + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + assert resp.status_code == 200 + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == {} + + def test_structured_mode_pubsub_wrapper(self, client, monkeypatch): + """Eventarc structured mode with Pub/Sub envelope is base64-decoded.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + inner_message = "Hello from structured Eventarc" + encoded_message = base64.b64encode(inner_message.encode("utf-8")).decode( + "utf-8" + ) + payload = { + "data": { + "message": { + "data": encoded_message, + } + }, + "source": "my-source", + } + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == "Hello from structured Eventarc" + assert parsed_msg["attributes"] == {} + + def test_binary_content_mode_pubsub_wrapper(self, client, monkeypatch): + """Binary content mode: Pub/Sub message wrapper in body, CE attrs in headers.""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "message": { + "data": base64.b64encode(b"hello from eventarc").decode(), + "messageId": "evt-msg-001", + }, + "subscription": "projects/p/subscriptions/eventarc-sub", + } + resp = client.post( + "/apps/test_app/trigger/eventarc", + json=payload, + headers={ + "ce-source": "//pubsub.googleapis.com/projects/p/topics/t", + "ce-type": "google.cloud.pubsub.topic.v1.messagePublished", + "ce-id": "binary-test-1", + "ce-specversion": "1.0", + }, + ) + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] == "hello from eventarc" + assert parsed_msg["attributes"] == {} + + def test_binary_content_mode_attributes_only(self, client, monkeypatch): + """Binary content mode with attributes only (no data).""" + captured_messages = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_messages.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "message": { + "attributes": {"key": "value"}, + "messageId": "evt-msg-002", + }, + } + resp = client.post( + "/apps/test_app/trigger/eventarc", + json=payload, + headers={"ce-source": "//pubsub.googleapis.com/test"}, + ) + assert resp.status_code == 200 + assert resp.json()["status"] == "success" + + assert len(captured_messages) == 1 + parsed_msg = json.loads(captured_messages[0]) + assert parsed_msg["data"] is None + assert parsed_msg["attributes"] == {"key": "value"} + + def test_binary_content_mode_arbitrary_payload(self, client, monkeypatch): + """Binary content mode with arbitrary JSON payload (not Pub/Sub).""" + captured_message = [] + + async def dummy_run_async_capture( + self, user_id, session_id, new_message, **kwargs + ): + captured_message.append(new_message.parts[0].text) + yield _model_event("Success") + await asyncio.sleep(0) + + monkeypatch.setattr(Runner, "run_async", dummy_run_async_capture) + + payload = { + "bucket": "my-bucket", + "name": "file.txt", + "contentType": "application/json", + } + resp = client.post( + "/apps/test_app/trigger/eventarc", + json=payload, + headers={ + "ce-source": ( + "//storage.googleapis.com/projects/_/buckets/my-bucket" + ), + "ce-type": "google.cloud.storage.object.v1.finalized", + "ce-id": "12345", + "ce-specversion": "1.0", + }, + ) + assert resp.status_code == 200 + assert len(captured_message) == 1 + received_data = json.loads(captured_message[0]) + assert received_data["data"]["bucket"] == "my-bucket" + assert received_data["data"]["name"] == "file.txt" + assert received_data["attributes"]["ce-id"] == "12345" + + +# =================================================================== +# Triggers disabled (default behavior) +# =================================================================== + + +class TestTriggersDisabled: + """Verify trigger endpoints return 404 when not enabled.""" + + def test_pubsub_returns_404(self, client_no_triggers): + resp = client_no_triggers.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"x").decode()}}, + ) + assert resp.status_code == 404 + + def test_eventarc_returns_404(self, client_no_triggers): + resp = client_no_triggers.post( + "/apps/test_app/trigger/eventarc", json={"data": {}} + ) + assert resp.status_code == 404 + + +# =================================================================== +# Transient error detection +# =================================================================== + + +class TestTransientErrorDetection: + """Unit tests for the _is_transient_error helper.""" + + def test_429_in_message(self): + assert _is_transient_error(RuntimeError("HTTP 429 Too Many Requests")) + + def test_resource_exhausted(self): + assert _is_transient_error(RuntimeError("RESOURCE_EXHAUSTED")) + + def test_rate_limit(self): + assert _is_transient_error(RuntimeError("rate limit exceeded")) + + def test_quota(self): + assert _is_transient_error(RuntimeError("quota exceeded for project")) + + def test_non_transient(self): + assert not _is_transient_error(RuntimeError("Agent crashed")) + + def test_permission_denied(self): + assert not _is_transient_error(RuntimeError("PERMISSION_DENIED")) + + +# =================================================================== +# Retry with exponential backoff +# =================================================================== + + +class TestRetryLogic: + """Integration tests for retry with exponential backoff on 429 errors.""" + + def test_pubsub_retry_exhausted_returns_500(self, client, monkeypatch): + """Pub/Sub trigger returns 500 when retries are exhausted.""" + monkeypatch.setattr(Runner, "run_async", dummy_run_async_always_429) + + with patch( + "google.adk.cli.trigger_routes.asyncio.sleep", new_callable=AsyncMock + ): + message_data = base64.b64encode(b"429 test").decode("utf-8") + payload = {"message": {"data": message_data}} + resp = client.post("/apps/test_app/trigger/pubsub", json=payload) + + assert resp.status_code == 500 + assert "Rate limit" in resp.json()["detail"] + + def test_eventarc_retry_exhausted_returns_500(self, client, monkeypatch): + """Eventarc trigger returns 500 when retries are exhausted.""" + monkeypatch.setattr(Runner, "run_async", dummy_run_async_always_429) + + with patch( + "google.adk.cli.trigger_routes.asyncio.sleep", new_callable=AsyncMock + ): + payload = {"data": {"test": "429"}} + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 500 + assert "Rate limit" in resp.json()["detail"] + + def test_non_transient_error_not_retried(self, client, monkeypatch): + """Non-429 errors are NOT retried — they fail immediately.""" + call_count = 0 + + async def counting_error_runner( + self, user_id, session_id, new_message, **kwargs + ): + nonlocal call_count + call_count += 1 + raise RuntimeError("PERMISSION_DENIED: no access") + yield # noqa: E305 + + monkeypatch.setattr(Runner, "run_async", counting_error_runner) + + with patch( + "google.adk.cli.trigger_routes.asyncio.sleep", new_callable=AsyncMock + ): + payload = {"data": {"test": True}} + resp = client.post("/apps/test_app/trigger/eventarc", json=payload) + + assert resp.status_code == 500 + # Non-transient errors should NOT be retried — only 1 call + assert call_count == 1 + + +# =================================================================== +# Semaphore / concurrency control +# =================================================================== + + +class TestConcurrencyControl: + """Tests for semaphore-based concurrency limiting.""" + + def test_concurrent_pubsub_and_eventarc(self, client): + """Multiple trigger types can be called without semaphore starvation.""" + # Pub/Sub + ps_resp = client.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"ps").decode()}}, + ) + assert ps_resp.status_code == 200 + + # Eventarc + ea_resp = client.post( + "/apps/test_app/trigger/eventarc", + json={"data": {"key": "value"}}, + ) + assert ea_resp.status_code == 200 + + +# =================================================================== +# Selective trigger registration +# =================================================================== + + +class TestSelectiveRegistration: + """Tests that only requested trigger sources are registered.""" + + def test_only_pubsub( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + """When trigger_sources=['pubsub'], only Pub/Sub is available.""" + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=["pubsub"], + ) + # Pub/Sub should work + ps_resp = client.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"test").decode()}}, + ) + assert ps_resp.status_code == 200 + + # Eventarc should NOT be available + ea_resp = client.post("/apps/test_app/trigger/eventarc", json={"data": {}}) + assert ea_resp.status_code == 404 + + def test_only_eventarc( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + """When trigger_sources=['eventarc'], only Eventarc is available.""" + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=["eventarc"], + ) + # Eventarc should work + ea_resp = client.post( + "/apps/test_app/trigger/eventarc", json={"data": {"k": "v"}} + ) + assert ea_resp.status_code == 200 + + # Pub/Sub should NOT be available + ps_resp = client.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"x").decode()}}, + ) + assert ps_resp.status_code == 404 + + +class TestUnknownTriggerSources: + """Verify unknown trigger sources are filtered and warned about.""" + + def test_unknown_source_ignored( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + """Unknown source is silently dropped; valid sources still work.""" + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=["unknown_source", "pubsub"], + ) + # "pubsub" should still be registered + ps_resp = client.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"test").decode()}}, + ) + assert ps_resp.status_code == 200 + + # "unknown_source" should NOT be registered + unknown_resp = client.post( + "/apps/test_app/trigger/unknown_source", json={"calls": [["test"]]} + ) + assert unknown_resp.status_code == 404 + + def test_all_unknown_sources_results_in_no_endpoints( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + """All invalid sources means no trigger endpoints registered.""" + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=["foo", "bar"], + ) + unknown_resp = client.post( + "/apps/test_app/trigger/unknown_source", json={"calls": [["test"]]} + ) + assert unknown_resp.status_code == 404 + + +class TestTriggersDisabled: + """Verify trigger endpoints return 404 when not enabled.""" + + def test_pubsub_returns_404( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=[], + ) + resp = client.post( + "/apps/test_app/trigger/pubsub", + json={"message": {"data": base64.b64encode(b"x").decode()}}, + ) + assert resp.status_code == 404 + + def test_eventarc_returns_404( + self, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + ): + client = _make_test_client( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + trigger_sources=[], + ) + resp = client.post("/apps/test_app/trigger/eventarc", json={"data": {}}) + assert resp.status_code == 404 From ccac461b2ab6291ecd09577ca0553833eaff71b9 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 7 Apr 2026 16:48:18 -0700 Subject: [PATCH 155/192] docs(adk): clean up remote triggers README to remove internal references PiperOrigin-RevId: 896153946 --- tests/remote/triggers/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/remote/triggers/README.md b/tests/remote/triggers/README.md index 29501731ca..23c03ad5c6 100644 --- a/tests/remote/triggers/README.md +++ b/tests/remote/triggers/README.md @@ -3,9 +3,9 @@ End-to-end tests that verify Pub/Sub push, and Eventarc triggers against a real ADK agent deployed to Cloud Run. -## Workflow (Decoupled & Robust) +## Workflow -This workflow is split into three independent phases. For Google-internal instructions, see [README_INTERNAL.md](README_INTERNAL.md). +This workflow is split into three independent phases. ### Phase 1: Deploy Agent From 23bd95bcf23367a8df3342ca4bb9d17f0b3b0d8f Mon Sep 17 00:00:00 2001 From: Divyansh Shukla Date: Tue, 7 Apr 2026 18:36:37 -0700 Subject: [PATCH 156/192] feat: Add blacklist for shell metacharacters in BashTool PiperOrigin-RevId: 896191354 --- src/google/adk/tools/bash_tool.py | 5 +++++ tests/unittests/tools/test_bash_tool.py | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/google/adk/tools/bash_tool.py b/src/google/adk/tools/bash_tool.py index 2adc8299f7..89de3bf34f 100644 --- a/src/google/adk/tools/bash_tool.py +++ b/src/google/adk/tools/bash_tool.py @@ -48,6 +48,7 @@ class BashToolPolicy: """ allowed_command_prefixes: tuple[str, ...] = ("*",) + blocked_operators: tuple[str, ...] = () timeout_seconds: Optional[int] = 30 max_memory_bytes: Optional[int] = None max_file_size_bytes: Optional[int] = None @@ -60,6 +61,10 @@ def _validate_command(command: str, policy: BashToolPolicy) -> Optional[str]: if not stripped: return "Command is required." + for op in policy.blocked_operators: + if op in command: + return f"Command contains blocked operator: {op}" + if "*" in policy.allowed_command_prefixes: return None diff --git a/tests/unittests/tools/test_bash_tool.py b/tests/unittests/tools/test_bash_tool.py index d2e1e9c0e3..772db385a6 100644 --- a/tests/unittests/tools/test_bash_tool.py +++ b/tests/unittests/tools/test_bash_tool.py @@ -98,6 +98,8 @@ def test_default_policy_allows_everything(self): assert bash_tool._validate_command("rm -rf /", policy) is None assert bash_tool._validate_command("cat /etc/passwd", policy) is None assert bash_tool._validate_command("sudo curl", policy) is None + assert bash_tool._validate_command("echo hello | grep h", policy) is None + assert bash_tool._validate_command("ls ; rm -rf /", policy) is None def test_restricted_policy_allows_prefixes(self): policy = bash_tool.BashToolPolicy(allowed_command_prefixes=("ls", "cat")) @@ -112,6 +114,20 @@ def test_restricted_policy_blocks_others(self): "tree", policy ) + def test_blocked_operators_validation(self): + policy = bash_tool.BashToolPolicy( + allowed_command_prefixes=("*",), + blocked_operators=("|", ";", "$(", "`", "&&", "||"), + ) + assert ( + bash_tool._validate_command("echo hello | grep h", policy) + == "Command contains blocked operator: |" + ) + assert ( + bash_tool._validate_command("ls ; rm -rf /", policy) + == "Command contains blocked operator: ;" + ) + class TestExecuteBashTool: From 9e73ab846672065f1fbe1c2642419e8a008efd43 Mon Sep 17 00:00:00 2001 From: Yixiao Song Date: Wed, 8 Apr 2026 11:17:55 -0700 Subject: [PATCH 157/192] feat(skill): Standardize skill tools and make script arguments flexible Standardize Parameter Names: - Use `skill_name` instead of `name`. - Use `file_path` instead of `script_path`. - Updated `_DEFAULT_SKILL_SYSTEM_INSTRUCTION` system prompt to use `skill_name=""`. Flexible Arguments for RunSkillScriptTool: - Updated schema to allow args to be either a JSON object or a list of strings (`anyOf`). - Updated `RunSkillScriptTool.run_async` and `_SkillScriptCodeExecutor.execute_script_async` to accept both dict and list types for arguments. - Modified `_SkillScriptCodeExecutor._build_wrapper_code` to pass list arguments directly as command-line arguments for python and bash scripts. Improved Error Messages: - Updated error messages across skills tools to specify the parameter name (e.g., "Argument 'skill_name' is required."). - Collected all validation error messages. Type Safety: - Fixed a TypeError in run_skill_script(). PiperOrigin-RevId: 896602439 --- src/google/adk/tools/skill_toolset.py | 342 +++++++++++-------- tests/unittests/models/test_anthropic_llm.py | 2 +- tests/unittests/tools/BUILD | 20 ++ tests/unittests/tools/test_skill_toolset.py | 254 ++++++++------ 4 files changed, 374 insertions(+), 244 deletions(-) create mode 100644 tests/unittests/tools/BUILD diff --git a/src/google/adk/tools/skill_toolset.py b/src/google/adk/tools/skill_toolset.py index 514cfee52f..a7a2c683ca 100644 --- a/src/google/adk/tools/skill_toolset.py +++ b/src/google/adk/tools/skill_toolset.py @@ -57,21 +57,34 @@ " conversation history for you to analyze." ) -_DEFAULT_SKILL_SYSTEM_INSTRUCTION = """You can use specialized 'skills' to help you with complex tasks. You MUST use the skill tools to interact with these skills. - -Skills are folders of instructions and resources that extend your capabilities for specialized tasks. Each skill folder contains: -- **SKILL.md** (required): The main instruction file with skill metadata and detailed markdown instructions. -- **references/** (Optional): Additional documentation or examples for skill usage. -- **assets/** (Optional): Templates, scripts or other resources used by the skill. -- **scripts/** (Optional): Executable scripts that can be run via bash. - -This is very important: - -1. If a skill seems relevant to the current user query, you MUST use the `load_skill` tool with `name=""` to read its full instructions before proceeding. -2. Once you have read the instructions, follow them exactly as documented before replying to the user. For example, If the instruction lists multiple steps, please make sure you complete all of them in order. -3. The `load_skill_resource` tool is for viewing files within a skill's directory (e.g., `references/*`, `assets/*`, `scripts/*`). Do NOT use other tools to access these files. -4. Use `run_skill_script` to run scripts from a skill's `scripts/` directory. Use `load_skill_resource` to view script content first if needed. -""" +_DEFAULT_SKILL_SYSTEM_INSTRUCTION = ( + "You can use specialized 'skills' to help you with complex tasks. " + "You MUST use the skill tools to interact with these skills.\n\n" + "Skills are folders of instructions and resources that extend your " + "capabilities for specialized tasks. Each skill folder contains:\n" + "- **SKILL.md** (required): The main instruction file with skill " + "metadata and detailed markdown instructions.\n" + "- **references/** (Optional): Additional documentation or examples for " + "skill usage.\n" + "- **assets/** (Optional): Templates, scripts or other resources used by " + "the skill.\n" + "- **scripts/** (Optional): Executable scripts that can be run via " + "bash.\n\n" + "This is very important:\n\n" + "1. If a skill seems relevant to the current user query, you MUST use " + 'the `load_skill` tool with `skill_name=""` to read ' + "its full instructions before proceeding.\n" + "2. Once you have read the instructions, follow them exactly as " + "documented before replying to the user. For example, If the " + "instruction lists multiple steps, please make sure you complete all " + "of them in order.\n" + "3. The `load_skill_resource` tool is for viewing files within a " + "skill's directory (e.g., `references/*`, `assets/*`, `scripts/*`). " + "Do NOT use other tools to access these files.\n" + "4. Use `run_skill_script` to run scripts from a skill's `scripts/` " + "directory. Use `load_skill_resource` to view script content first if " + "needed.\n" +) @experimental(FeatureName.SKILL_TOOLSET) @@ -122,23 +135,23 @@ def _get_declaration(self) -> types.FunctionDeclaration | None: parameters_json_schema={ "type": "object", "properties": { - "name": { + "skill_name": { "type": "string", "description": "The name of the skill to load.", }, }, - "required": ["name"], + "required": ["skill_name"], }, ) async def run_async( self, *, args: dict[str, Any], tool_context: ToolContext ) -> Any: - skill_name = args.get("name") + skill_name = args.get("skill_name") if not skill_name: return { - "error": "Skill name is required.", - "error_code": "MISSING_SKILL_NAME", + "error": "Argument 'skill_name' is required.", + "error_code": "INVALID_ARGUMENTS", } skill = self._toolset._get_skill(skill_name) @@ -189,7 +202,7 @@ def _get_declaration(self) -> types.FunctionDeclaration | None: "type": "string", "description": "The name of the skill.", }, - "path": { + "file_path": { "type": "string", "description": ( "The relative path to the resource (e.g.," @@ -198,7 +211,7 @@ def _get_declaration(self) -> types.FunctionDeclaration | None: ), }, }, - "required": ["skill_name", "path"], + "required": ["skill_name", "file_path"], }, ) @@ -206,17 +219,18 @@ async def run_async( self, *, args: dict[str, Any], tool_context: ToolContext ) -> Any: skill_name = args.get("skill_name") - resource_path = args.get("path") + file_path = args.get("file_path") + errors = [] if not skill_name: + errors.append("Argument 'skill_name' is required.") + if not file_path: + errors.append("Argument 'file_path' is required.") + + if errors: return { - "error": "Skill name is required.", - "error_code": "MISSING_SKILL_NAME", - } - if not resource_path: - return { - "error": "Resource path is required.", - "error_code": "MISSING_RESOURCE_PATH", + "error": "\n".join(errors), + "error_code": "INVALID_ARGUMENTS", } skill = self._toolset._get_skill(skill_name) @@ -227,14 +241,14 @@ async def run_async( } content = None - if resource_path.startswith("references/"): - ref_name = resource_path[len("references/") :] + if file_path.startswith("references/"): + ref_name = file_path[len("references/") :] content = skill.resources.get_reference(ref_name) - elif resource_path.startswith("assets/"): - asset_name = resource_path[len("assets/") :] + elif file_path.startswith("assets/"): + asset_name = file_path[len("assets/") :] content = skill.resources.get_asset(asset_name) - elif resource_path.startswith("scripts/"): - script_name = resource_path[len("scripts/") :] + elif file_path.startswith("scripts/"): + script_name = file_path[len("scripts/") :] script = skill.resources.get_script(script_name) if script is not None: content = script.src @@ -248,22 +262,20 @@ async def run_async( if content is None: return { - "error": ( - f"Resource '{resource_path}' not found in skill '{skill_name}'." - ), + "error": f"Resource '{file_path}' not found in skill '{skill_name}'.", "error_code": "RESOURCE_NOT_FOUND", } if isinstance(content, bytes): return { "skill_name": skill_name, - "path": resource_path, + "file_path": file_path, "status": _BINARY_FILE_DETECTED_MSG, } return { "skill_name": skill_name, - "path": resource_path, + "file_path": file_path, "content": content, } @@ -289,8 +301,8 @@ async def process_llm_request( continue skill_name = response.get("skill_name") - resource_path = response.get("path") - if not skill_name or not resource_path: + file_path = response.get("file_path") + if not skill_name or not file_path: continue skill = self._toolset._get_skill(skill_name) @@ -299,18 +311,18 @@ async def process_llm_request( # Find the binary content content = None - if resource_path.startswith("references/"): - ref_name = resource_path[len("references/") :] + if file_path.startswith("references/"): + ref_name = file_path[len("references/") :] content = skill.resources.get_reference(ref_name) - elif resource_path.startswith("assets/"): - asset_name = resource_path[len("assets/") :] + elif file_path.startswith("assets/"): + asset_name = file_path[len("assets/") :] content = skill.resources.get_asset(asset_name) if not isinstance(content, bytes): continue # Determine mime type based on extension - mime_type, _ = mimetypes.guess_type(resource_path) + mime_type, _ = mimetypes.guess_type(file_path) if not mime_type: mime_type = "application/octet-stream" @@ -320,7 +332,7 @@ async def process_llm_request( role="user", parts=[ types.Part.from_text( - text=f"The content of binary file '{resource_path}' is:" + text=f"The content of binary file '{file_path}' is:" ), types.Part( inline_data=types.Blob( @@ -347,14 +359,32 @@ async def execute_script_async( self, invocation_context: Any, skill: models.Skill, - script_path: str, - script_args: dict[str, Any], + file_path: str, + script_args: dict[str, Any] | list[str] | None, + short_options: dict[str, Any] | None = None, + positional_args: list[str] | None = None, ) -> dict[str, Any]: - """Prepares and executes the script using the base executor.""" - code = self._build_wrapper_code(skill, script_path, script_args) + """Prepares and executes the script using the base executor. + + Args: + invocation_context: The context for execution. + skill: The skill containing the script. + file_path: Relative path to the script file (e.g., 'scripts/myscript.py' + or 'myscript.py'). + script_args: Optional arguments to pass to the script. Can be a dict of + long options or a list of strings. + short_options: Optional short options (single hyphen) as key-value pairs. + positional_args: Optional positional arguments. + + Returns: + A dictionary containing execution results (stdout, stderr, status). + """ + code = self._build_wrapper_code( + skill, file_path, script_args, short_options, positional_args + ) if code is None: - if "." in script_path: - ext_msg = f"'.{script_path.rsplit('.', 1)[-1]}'" + if "." in file_path: + ext_msg = f"'.{file_path.rsplit('.', 1)[-1]}'" else: ext_msg = "(no extension)" return { @@ -379,9 +409,10 @@ async def execute_script_async( # Shell scripts serialize both streams as JSON # through stdout; parse the envelope if present. rc = 0 - is_shell = "." in script_path and script_path.rsplit(".", 1)[ - -1 - ].lower() in ("sh", "bash") + is_shell = "." in file_path and file_path.rsplit(".", 1)[-1].lower() in ( + "sh", + "bash", + ) if is_shell and stdout: try: parsed = json.loads(stdout) @@ -404,7 +435,7 @@ async def execute_script_async( return { "skill_name": skill.name, - "script_path": script_path, + "file_path": file_path, "stdout": stdout, "stderr": stderr, "status": status, @@ -413,14 +444,14 @@ async def execute_script_async( if e.code in (None, 0): return { "skill_name": skill.name, - "script_path": script_path, + "file_path": file_path, "stdout": "", "stderr": "", "status": "success", } return { "error": ( - f"Failed to execute script '{script_path}':" + f"Failed to execute script '{file_path}':" f" exited with code {e.code}" ), "error_code": "EXECUTION_ERROR", @@ -428,7 +459,7 @@ async def execute_script_async( except Exception as e: # pylint: disable=broad-exception-caught logger.exception( "Error executing script '%s' from skill '%s'", - script_path, + file_path, skill.name, ) short_msg = str(e) @@ -437,7 +468,7 @@ async def execute_script_async( return { "error": ( "Failed to execute script" - f" '{script_path}':\n{type(e).__name__}:" + f" '{file_path}':\n{type(e).__name__}:" f" {short_msg}" ), "error_code": "EXECUTION_ERROR", @@ -446,16 +477,18 @@ async def execute_script_async( def _build_wrapper_code( self, skill: models.Skill, - script_path: str, - script_args: dict[str, Any], + file_path: str, + script_args: dict[str, Any] | list[str] | None, + short_options: dict[str, Any] | None = None, + positional_args: list[str] | None = None, ) -> str | None: """Builds a self-extracting Python script.""" ext = "" - if "." in script_path: - ext = script_path.rsplit(".", 1)[-1].lower() + if "." in file_path: + ext = file_path.rsplit(".", 1)[-1].lower() - if not script_path.startswith("scripts/"): - script_path = f"scripts/{script_path}" + if not file_path.startswith("scripts/"): + file_path = f"scripts/{file_path}" files_dict = {} for ref_name in skill.resources.list_references(): @@ -509,35 +542,46 @@ def _build_wrapper_code( ] if ext == "py": - argv_list = [script_path] - for k, v in script_args.get("args", {}).items(): - argv_list.extend([f"--{k}", str(v)]) - for k, v in script_args.get("short_options", {}).items(): - argv_list.extend([f"-{k}", str(v)]) - positional_args = script_args.get("positional_args", []) - if positional_args: - argv_list.append("--") - for v in positional_args: - argv_list.append(str(v)) + argv_list = [file_path] + if isinstance(script_args, list): + argv_list.extend(str(v) for v in script_args) + else: + if isinstance(script_args, dict): + for k, v in script_args.items(): + argv_list.extend([f"--{k}", str(v)]) + + if short_options: + for k, v in short_options.items(): + argv_list.extend([f"-{k}", str(v)]) + + if positional_args: + argv_list.append("--") + argv_list.extend(str(v) for v in positional_args) + code_lines.extend([ f" sys.argv = {argv_list!r}", " try:", - f" runpy.run_path({script_path!r}, run_name='__main__')", + f" runpy.run_path({file_path!r}, run_name='__main__')", " except SystemExit as e:", " if e.code is not None and e.code != 0:", " raise e", ]) elif ext in ("sh", "bash"): - arr = ["bash", script_path] - for k, v in script_args.get("args", {}).items(): - arr.extend([f"--{k}", str(v)]) - for k, v in script_args.get("short_options", {}).items(): - arr.extend([f"-{k}", str(v)]) - positional_args = script_args.get("positional_args", []) - if positional_args: - arr.append("--") - for v in positional_args: - arr.append(str(v)) + arr = ["bash", file_path] + if isinstance(script_args, list): + arr.extend(str(v) for v in script_args) + else: + if isinstance(script_args, dict): + for k, v in script_args.items(): + arr.extend([f"--{k}", str(v)]) + + if short_options: + for k, v in short_options.items(): + arr.extend([f"-{k}", str(v)]) + + if positional_args: + arr.append("--") + arr.extend(positional_args) timeout = self._script_timeout code_lines.extend([ " try:", @@ -594,7 +638,7 @@ def _get_declaration(self) -> types.FunctionDeclaration | None: "type": "string", "description": "The name of the skill.", }, - "script_path": { + "file_path": { "type": "string", "description": ( "The relative path to the script (e.g.," @@ -602,78 +646,83 @@ def _get_declaration(self) -> types.FunctionDeclaration | None: ), }, "args": { - "type": "object", + "anyOf": [ + {"type": "object"}, + {"type": "array", "items": {"type": "string"}}, + ], "description": ( - "Optional arguments to pass as long options (e.g.," - " {'n': 5} becomes --n 5)." + "Optional arguments to pass to the script as key-value" + " pairs (long options) or as a list of strings. If" + " specified as a list, it is treated as the complete" + " list of arguments, and 'short_options' and" + " 'positional_args' must not be provided." ), }, "short_options": { "type": "object", "description": ( - "Optional SHORT options to pass (e.g., {'n': 5}" - " becomes -n 5)." + "Optional short options (single hyphen) to pass to the" + " script as key-value pairs. Must not be provided if" + " 'args' is a list." ), }, "positional_args": { "type": "array", "items": {"type": "string"}, "description": ( - "Optional list of positional arguments in exact order" - " (e.g., ['input.txt', 'output.txt'])." + "Optional positional arguments to pass to the script." + " Must not be provided if 'args' is a list." ), }, }, - "required": ["skill_name", "script_path"], + "required": ["skill_name", "file_path"], }, ) async def run_async( self, *, args: dict[str, Any], tool_context: ToolContext ) -> Any: + # Standardized arguments: skill_name and file_path. skill_name = args.get("skill_name") - script_path = args.get("script_path") - script_args = { - "args": args.get("args", {}), - "short_options": args.get("short_options", {}), - "positional_args": args.get("positional_args", []), - } - if not isinstance(script_args["args"], dict): - return { - "error": ( - "'args' must be a JSON object (key-value pairs)," - f" got {type(script_args['args']).__name__}." - ), - "error_code": "INVALID_ARGS_TYPE", - } + file_path = args.get("file_path") + script_args = args.get("args") + short_options = args.get("short_options") + positional_args = args.get("positional_args") - if not isinstance(script_args["short_options"], dict): - return { - "error": ( - "'short_options' must be a JSON object (key-value pairs)," - f" got {type(script_args['short_options']).__name__}." - ), - "error_code": "INVALID_SHORT_OPTIONS_TYPE", - } + errors = [] + if not skill_name: + errors.append("Argument 'skill_name' is required.") + if not file_path: + errors.append("Argument 'file_path' is required.") + + if script_args is not None and not isinstance(script_args, (dict, list)): + errors.append( + "'args' must be a JSON object (dict) or a list of strings," + f" got {type(script_args).__name__}." + ) - if not isinstance(script_args["positional_args"], list): - return { - "error": ( - "'positional_args' must be a JSON array (list)," - f" got {type(script_args['positional_args']).__name__}." - ), - "error_code": "INVALID_POSITIONAL_ARGS_TYPE", - } + if short_options is not None and not isinstance(short_options, dict): + errors.append( + "'short_options' must be a JSON object (dict)," + f" got {type(short_options).__name__}." + ) - if not skill_name: - return { - "error": "Skill name is required.", - "error_code": "MISSING_SKILL_NAME", - } - if not script_path: + if positional_args is not None and not isinstance(positional_args, list): + errors.append( + "'positional_args' must be a list of strings," + f" got {type(positional_args).__name__}." + ) + + if isinstance(script_args, list) and (short_options or positional_args): + errors.append( + "Cannot specify 'short_options' or 'positional_args' when 'args' is" + " a list." + ) + + if errors: return { - "error": "Script path is required.", - "error_code": "MISSING_SCRIPT_PATH", + "error": "\n".join(errors), + "error_code": "INVALID_ARGUMENTS", } skill = self._toolset._get_skill(skill_name) @@ -684,14 +733,14 @@ async def run_async( } script = None - if script_path.startswith("scripts/"): - script = skill.resources.get_script(script_path[len("scripts/") :]) + if file_path.startswith("scripts/"): + script = skill.resources.get_script(file_path[len("scripts/") :]) else: - script = skill.resources.get_script(script_path) + script = skill.resources.get_script(file_path) if script is None: return { - "error": f"Script '{script_path}' not found in skill '{skill_name}'.", + "error": f"Script '{file_path}' not found in skill '{skill_name}'.", "error_code": "SCRIPT_NOT_FOUND", } @@ -714,7 +763,12 @@ async def run_async( code_executor, self._toolset._script_timeout # pylint: disable=protected-access ) return await script_executor.execute_script_async( - tool_context._invocation_context, skill, script_path, script_args # pylint: disable=protected-access + tool_context._invocation_context, # pylint: disable=protected-access + skill, + file_path, + script_args, + short_options, + positional_args, # pylint: disable=protected-access ) @@ -835,9 +889,9 @@ async def _resolve_additional_tools_from_state( return resolved_tools - def _get_skill(self, name: str) -> models.Skill | None: + def _get_skill(self, skill_name: str) -> models.Skill | None: """Retrieves a skill by name.""" - return self._skills.get(name) + return self._skills.get(skill_name) def _list_skills(self) -> list[models.Skill]: """Lists all available skills.""" diff --git a/tests/unittests/models/test_anthropic_llm.py b/tests/unittests/models/test_anthropic_llm.py index 2b510c426b..fb44d5c8e7 100644 --- a/tests/unittests/models/test_anthropic_llm.py +++ b/tests/unittests/models/test_anthropic_llm.py @@ -1050,7 +1050,7 @@ def test_part_to_message_block_run_skill_script_response(): name="run_skill_script", response={ "skill_name": "my_skill", - "script_path": "scripts/setup.py", + "file_path": "scripts/setup.py", "stdout": "Done.", "stderr": "", "status": "success", diff --git a/tests/unittests/tools/BUILD b/tests/unittests/tools/BUILD new file mode 100644 index 0000000000..e8e32e294a --- /dev/null +++ b/tests/unittests/tools/BUILD @@ -0,0 +1,20 @@ +load("//third_party/py/pytest:pytest_defs.bzl", "pytest_test") + +package( + default_applicable_licenses = ["//third_party/py/google/adk:package_license"], + default_visibility = ["//visibility:private"], +) + +pytest_test( + name = "test_skill_toolset", + srcs = ["test_skill_toolset.py"], + args = [ + "-p", + "pytest_asyncio.plugin", + ], + deps = [ + "//third_party/py/google/adk", + "//third_party/py/google/genai", + "//third_party/py/pytest_asyncio", + ], +) diff --git a/tests/unittests/tools/test_skill_toolset.py b/tests/unittests/tools/test_skill_toolset.py index 51d6d88743..c3268b559d 100644 --- a/tests/unittests/tools/test_skill_toolset.py +++ b/tests/unittests/tools/test_skill_toolset.py @@ -13,11 +13,13 @@ # limitations under the License. import logging +import sys from unittest import mock from google.adk.agents.readonly_context import ReadonlyContext from google.adk.code_executors.base_code_executor import BaseCodeExecutor from google.adk.code_executors.code_execution_utils import CodeExecutionResult +from google.adk.code_executors.unsafe_local_code_executor import UnsafeLocalCodeExecutor from google.adk.models import llm_request as llm_request_model from google.adk.skills import models from google.adk.tools import skill_toolset @@ -26,8 +28,8 @@ import pytest -@pytest.fixture -def mock_skill1_frontmatter(): +@pytest.fixture(name="mock_skill1_frontmatter") +def _mock_skill1_frontmatter(): """Fixture for skill1 frontmatter.""" frontmatter = mock.create_autospec(models.Frontmatter, instance=True) frontmatter.name = "skill1" @@ -40,8 +42,8 @@ def mock_skill1_frontmatter(): return frontmatter -@pytest.fixture -def mock_skill1(mock_skill1_frontmatter): +@pytest.fixture(name="mock_skill1") +def _mock_skill1(mock_skill1_frontmatter): """Fixture for skill1.""" skill = mock.create_autospec(models.Skill, instance=True) skill.name = "skill1" @@ -95,8 +97,8 @@ def get_script(name): return skill -@pytest.fixture -def mock_skill2_frontmatter(): +@pytest.fixture(name="mock_skill2_frontmatter") +def _mock_skill2_frontmatter(): """Fixture for skill2 frontmatter.""" frontmatter = mock.create_autospec(models.Frontmatter, instance=True) frontmatter.name = "skill2" @@ -109,8 +111,8 @@ def mock_skill2_frontmatter(): return frontmatter -@pytest.fixture -def mock_skill2(mock_skill2_frontmatter): +@pytest.fixture(name="mock_skill2") +def _mock_skill2(mock_skill2_frontmatter): """Fixture for skill2.""" skill = mock.create_autospec(models.Skill, instance=True) skill.name = "skill2" @@ -201,7 +203,7 @@ async def test_list_skills_tool( "args, expected_result", [ ( - {"name": "skill1"}, + {"skill_name": "skill1"}, { "skill_name": "skill1", "instructions": "instructions for skill1", @@ -212,7 +214,7 @@ async def test_list_skills_tool( }, ), ( - {"name": "nonexistent"}, + {"skill_name": "nonexistent"}, { "error": "Skill 'nonexistent' not found.", "error_code": "SKILL_NOT_FOUND", @@ -221,8 +223,8 @@ async def test_list_skills_tool( ( {}, { - "error": "Skill name is required.", - "error_code": "MISSING_SKILL_NAME", + "error": "Argument 'skill_name' is required.", + "error_code": "INVALID_ARGUMENTS", }, ), ], @@ -241,26 +243,26 @@ async def test_load_skill_run_async( "args, expected_result", [ ( - {"skill_name": "skill1", "path": "references/ref1.md"}, + {"skill_name": "skill1", "file_path": "references/ref1.md"}, { "skill_name": "skill1", - "path": "references/ref1.md", + "file_path": "references/ref1.md", "content": "ref content 1", }, ), ( - {"skill_name": "skill1", "path": "assets/asset1.txt"}, + {"skill_name": "skill1", "file_path": "assets/asset1.txt"}, { "skill_name": "skill1", - "path": "assets/asset1.txt", + "file_path": "assets/asset1.txt", "content": "asset content 1", }, ), ( - {"skill_name": "skill1", "path": "references/doc.pdf"}, + {"skill_name": "skill1", "file_path": "references/doc.pdf"}, { "skill_name": "skill1", - "path": "references/doc.pdf", + "file_path": "references/doc.pdf", "status": ( "Binary file detected. The content has been injected into" " the conversation history for you to analyze." @@ -268,10 +270,10 @@ async def test_load_skill_run_async( }, ), ( - {"skill_name": "skill1", "path": "assets/image.png"}, + {"skill_name": "skill1", "file_path": "assets/image.png"}, { "skill_name": "skill1", - "path": "assets/image.png", + "file_path": "assets/image.png", "status": ( "Binary file detected. The content has been injected into" " the conversation history for you to analyze." @@ -279,22 +281,22 @@ async def test_load_skill_run_async( }, ), ( - {"skill_name": "skill1", "path": "scripts/setup.sh"}, + {"skill_name": "skill1", "file_path": "scripts/setup.sh"}, { "skill_name": "skill1", - "path": "scripts/setup.sh", + "file_path": "scripts/setup.sh", "content": "echo setup", }, ), ( - {"skill_name": "nonexistent", "path": "references/ref1.md"}, + {"skill_name": "nonexistent", "file_path": "references/ref1.md"}, { "error": "Skill 'nonexistent' not found.", "error_code": "SKILL_NOT_FOUND", }, ), ( - {"skill_name": "skill1", "path": "references/other.md"}, + {"skill_name": "skill1", "file_path": "references/other.md"}, { "error": ( "Resource 'references/other.md' not found in skill" @@ -304,7 +306,7 @@ async def test_load_skill_run_async( }, ), ( - {"skill_name": "skill1", "path": "invalid/path.txt"}, + {"skill_name": "skill1", "file_path": "invalid/path.txt"}, { "error": ( "Path must start with 'references/', 'assets/'," @@ -314,17 +316,17 @@ async def test_load_skill_run_async( }, ), ( - {"path": "references/ref1.md"}, + {"file_path": "references/ref1.md"}, { - "error": "Skill name is required.", - "error_code": "MISSING_SKILL_NAME", + "error": "Argument 'skill_name' is required.", + "error_code": "INVALID_ARGUMENTS", }, ), ( {"skill_name": "skill1"}, { - "error": "Resource path is required.", - "error_code": "MISSING_RESOURCE_PATH", + "error": "Argument 'file_path' is required.", + "error_code": "INVALID_ARGUMENTS", }, ), ], @@ -362,7 +364,7 @@ async def test_load_resource_process_llm_request_binary( name=tool.name, response={ "skill_name": "skill1", - "path": resource_path, + "file_path": resource_path, "status": ( "Binary file detected. The content has been injected into the" " conversation history for you to analyze." @@ -429,7 +431,7 @@ async def test_scripts_resource_not_found(mock_skill1, tool_context_instance): toolset = skill_toolset.SkillToolset([mock_skill1]) tool = skill_toolset.LoadSkillResourceTool(toolset) result = await tool.run_async( - args={"skill_name": "skill1", "path": "scripts/nonexistent.sh"}, + args={"skill_name": "skill1", "file_path": "scripts/nonexistent.sh"}, tool_context=tool_context_instance, ) assert result["error_code"] == "RESOURCE_NOT_FOUND" @@ -464,20 +466,20 @@ def _make_mock_executor(stdout="", stderr=""): "args, expected_error_code", [ ( - {"script_path": "setup.sh"}, - "MISSING_SKILL_NAME", + {"file_path": "setup.sh"}, + "INVALID_ARGUMENTS", ), ( {"skill_name": "skill1"}, - "MISSING_SCRIPT_PATH", + "INVALID_ARGUMENTS", ), ( - {"skill_name": "", "script_path": "setup.sh"}, - "MISSING_SKILL_NAME", + {"skill_name": "", "file_path": "setup.sh"}, + "INVALID_ARGUMENTS", ), ( - {"skill_name": "skill1", "script_path": ""}, - "MISSING_SCRIPT_PATH", + {"skill_name": "skill1", "file_path": ""}, + "INVALID_ARGUMENTS", ), ], ) @@ -499,7 +501,7 @@ async def test_execute_script_skill_not_found(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "nonexistent", "script_path": "setup.sh"}, + args={"skill_name": "nonexistent", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["error_code"] == "SKILL_NOT_FOUND" @@ -512,7 +514,7 @@ async def test_execute_script_script_not_found(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "nonexistent.py"}, + args={"skill_name": "skill1", "file_path": "nonexistent.py"}, tool_context=ctx, ) assert result["error_code"] == "SCRIPT_NOT_FOUND" @@ -526,7 +528,7 @@ async def test_execute_script_no_code_executor(mock_skill1): agent = mock.MagicMock(spec=[]) ctx = _make_tool_context_with_agent(agent=agent) result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["error_code"] == "NO_CODE_EXECUTOR" @@ -541,7 +543,7 @@ async def test_execute_script_agent_code_executor_none(mock_skill1): agent.code_executor = None ctx = _make_tool_context_with_agent(agent=agent) result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["error_code"] == "NO_CODE_EXECUTOR" @@ -554,7 +556,7 @@ async def test_execute_script_unsupported_type(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "build.rb"}, + args={"skill_name": "skill1", "file_path": "build.rb"}, tool_context=ctx, ) assert result["error_code"] == "UNSUPPORTED_SCRIPT_TYPE" @@ -567,14 +569,14 @@ async def test_execute_script_python_success(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["status"] == "success" assert result["stdout"] == "hello\n" assert result["stderr"] == "" assert result["skill_name"] == "skill1" - assert result["script_path"] == "run.py" + assert result["file_path"] == "run.py" # Verify the code passed to executor runs the python scripts call_args = executor.execute_code.call_args @@ -594,7 +596,7 @@ async def test_execute_script_shell_success(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "success" @@ -617,7 +619,7 @@ async def test_execute_script_with_input_args_python(mock_skill1): result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "run.py", + "file_path": "run.py", "args": {"verbose": True, "count": "3"}, }, tool_context=ctx, @@ -641,7 +643,7 @@ async def test_execute_script_with_input_args_shell(mock_skill1): result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "setup.sh", + "file_path": "setup.sh", "args": {"force": True}, }, tool_context=ctx, @@ -654,9 +656,10 @@ async def test_execute_script_with_input_args_shell(mock_skill1): @pytest.mark.asyncio -async def test_execute_script_with_short_options_and_positional_args_python( +async def test_execute_script_with_list_args_python( mock_skill1, ): + """Verifies that python scripts can be executed with list arguments.""" executor = _make_mock_executor(stdout="done\n") toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) tool = skill_toolset.RunSkillScriptTool(toolset) @@ -664,10 +667,8 @@ async def test_execute_script_with_short_options_and_positional_args_python( result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "run.py", - "args": {"verbose": True}, - "short_options": {"n": "5"}, - "positional_args": ["input.txt"], + "file_path": "run.py", + "args": ["--verbose", "True", "-n", "5", "input.txt"], }, tool_context=ctx, ) @@ -676,15 +677,16 @@ async def test_execute_script_with_short_options_and_positional_args_python( call_args = executor.execute_code.call_args code_input = call_args[0][1] assert ( - "['scripts/run.py', '--verbose', 'True', '-n', '5', '--', 'input.txt']" + "['scripts/run.py', '--verbose', 'True', '-n', '5', 'input.txt']" in code_input.code ) @pytest.mark.asyncio -async def test_execute_script_with_short_options_and_positional_args_shell( +async def test_execute_script_with_list_args_shell( mock_skill1, ): + """Verifies that shell scripts can be executed with list arguments.""" executor = _make_mock_executor(stdout="done\n") toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) tool = skill_toolset.RunSkillScriptTool(toolset) @@ -692,9 +694,8 @@ async def test_execute_script_with_short_options_and_positional_args_shell( result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "setup.sh", - "short_options": {"n": "5"}, - "positional_args": ["input.txt"], + "file_path": "setup.sh", + "args": ["-n", "5", "input.txt"], }, tool_context=ctx, ) @@ -703,8 +704,57 @@ async def test_execute_script_with_short_options_and_positional_args_shell( call_args = executor.execute_code.call_args code_input = call_args[0][1] assert ( - "['bash', 'scripts/setup.sh', '-n', '5', '--', 'input.txt']" - in code_input.code + "['bash', 'scripts/setup.sh', '-n', '5', 'input.txt']" in code_input.code + ) + + +@pytest.mark.asyncio +async def test_execute_script_with_list_args_rejects_others_python( + mock_skill1, # pylint: disable=redefined-outer-name +): + """Verifies that short_options and positional_args are rejected when args is a list for Python scripts.""" + executor = _make_mock_executor(stdout="done\n") + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "file_path": "run.py", + "args": ["arg1", "arg2"], + "short_options": {"v": True}, + "positional_args": ["pos1"], + }, + tool_context=ctx, + ) + assert result["error_code"] == "INVALID_ARGUMENTS" + assert ( + "Cannot specify 'short_options' or 'positional_args'" in result["error"] + ) + + +@pytest.mark.asyncio +async def test_execute_script_with_list_args_rejects_others_shell( + mock_skill1, # pylint: disable=redefined-outer-name +): + """Verifies that short_options and positional_args are rejected when args is a list for shell scripts.""" + executor = _make_mock_executor(stdout="done\n") + toolset = skill_toolset.SkillToolset([mock_skill1], code_executor=executor) + tool = skill_toolset.RunSkillScriptTool(toolset) + ctx = _make_tool_context_with_agent() + result = await tool.run_async( + args={ + "skill_name": "skill1", + "file_path": "setup.sh", + "args": ["arg1", "arg2"], + "short_options": {"v": True}, + "positional_args": ["pos1"], + }, + tool_context=ctx, + ) + assert result["error_code"] == "INVALID_ARGUMENTS" + assert ( + "Cannot specify 'short_options' or 'positional_args'" in result["error"] ) @@ -717,12 +767,12 @@ async def test_execute_script_scripts_prefix_stripping(mock_skill1): result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "scripts/setup.sh", + "file_path": "scripts/setup.sh", }, tool_context=ctx, ) assert result["status"] == "success" - assert result["script_path"] == "scripts/setup.sh" + assert result["file_path"] == "scripts/setup.sh" @pytest.mark.asyncio @@ -738,7 +788,7 @@ async def test_execute_script_toolset_executor_priority(mock_skill1): agent.code_executor = agent_executor ctx = _make_tool_context_with_agent(agent=agent) result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["stdout"] == "from toolset\n" @@ -756,7 +806,7 @@ async def test_execute_script_agent_executor_fallback(mock_skill1): agent.code_executor = agent_executor ctx = _make_tool_context_with_agent(agent=agent) result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["stdout"] == "from agent\n" @@ -771,7 +821,7 @@ async def test_execute_script_execution_error(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["error_code"] == "EXECUTION_ERROR" @@ -787,7 +837,7 @@ async def test_execute_script_stderr_only_sets_error_status(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["status"] == "error" @@ -802,7 +852,7 @@ async def test_execute_script_stderr_with_stdout_sets_warning(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["status"] == "warning" @@ -819,7 +869,7 @@ async def test_execute_script_execution_error_truncated(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["error_code"] == "EXECUTION_ERROR" @@ -837,7 +887,7 @@ async def test_execute_script_system_exit_caught(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["error_code"] == "EXECUTION_ERROR" @@ -854,7 +904,7 @@ async def test_execute_script_system_exit_zero_is_success(mock_skill1): ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["status"] == "success" @@ -869,7 +919,7 @@ async def test_execute_script_system_exit_none_is_success(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) assert result["status"] == "success" @@ -885,7 +935,7 @@ async def test_execute_script_shell_includes_timeout(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "success" @@ -912,7 +962,7 @@ def get_script_extended(name): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "noext"}, + args={"skill_name": "skill1", "file_path": "noext"}, tool_context=ctx, ) assert result["error_code"] == "UNSUPPORTED_SCRIPT_TYPE" @@ -958,9 +1008,11 @@ def get_script(name): def _make_real_executor_toolset(skills, **kwargs): """Creates a SkillToolset with a real UnsafeLocalCodeExecutor.""" - from google.adk.code_executors.unsafe_local_code_executor import UnsafeLocalCodeExecutor - executor = UnsafeLocalCodeExecutor() + if sys.executable is None: + sys.executable = "/usr/bin/python3" + + executor = UnsafeLocalCodeExecutor(timeout_seconds=10) return skill_toolset.SkillToolset(skills, code_executor=executor, **kwargs) @@ -975,10 +1027,11 @@ async def test_integration_python_stdout(): result = await tool.run_async( args={ "skill_name": "test_skill", - "script_path": "hello.py", + "file_path": "hello.py", }, tool_context=ctx, ) + assert "status" in result, f"Result missing status: {result}" assert result["status"] == "success" assert result["stdout"] == "hello world\n" assert result["stderr"] == "" @@ -995,10 +1048,11 @@ async def test_integration_python_sys_exit_zero(): result = await tool.run_async( args={ "skill_name": "test_skill", - "script_path": "exit_zero.py", + "file_path": "exit_zero.py", }, tool_context=ctx, ) + assert "status" in result, f"Result missing status: {result}" assert result["status"] == "success" @@ -1013,10 +1067,11 @@ async def test_integration_shell_stdout_and_stderr(): result = await tool.run_async( args={ "skill_name": "test_skill", - "script_path": "both.sh", + "file_path": "both.sh", }, tool_context=ctx, ) + assert "status" in result, f"Result missing status: {result}" assert result["status"] == "warning" assert "output" in result["stdout"] assert "warning" in result["stderr"] @@ -1033,10 +1088,11 @@ async def test_integration_shell_stderr_only(): result = await tool.run_async( args={ "skill_name": "test_skill", - "script_path": "err.sh", + "file_path": "err.sh", }, tool_context=ctx, ) + assert "status" in result, f"Result missing status: {result}" assert result["status"] == "error" assert "failure" in result["stderr"] @@ -1060,7 +1116,7 @@ async def test_shell_json_envelope_parsed(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "success" @@ -1084,7 +1140,7 @@ async def test_shell_json_envelope_nonzero_returncode(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "error" @@ -1107,7 +1163,7 @@ async def test_shell_json_envelope_with_stderr(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "warning" @@ -1131,7 +1187,7 @@ async def test_shell_json_envelope_timeout(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "error" @@ -1147,7 +1203,7 @@ async def test_shell_non_json_stdout_passthrough(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() result = await tool.run_async( - args={"skill_name": "skill1", "script_path": "setup.sh"}, + args={"skill_name": "skill1", "file_path": "setup.sh"}, tool_context=ctx, ) assert result["status"] == "success" @@ -1165,7 +1221,7 @@ async def test_execute_script_input_files_packaged(mock_skill1): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() await tool.run_async( - args={"skill_name": "skill1", "script_path": "run.py"}, + args={"skill_name": "skill1", "file_path": "run.py"}, tool_context=ctx, ) @@ -1201,10 +1257,11 @@ async def test_integration_shell_nonzero_exit(): result = await tool.run_async( args={ "skill_name": "test_skill", - "script_path": "fail.sh", + "file_path": "fail.sh", }, tool_context=ctx, ) + assert "status" in result, f"Result missing status: {result}" assert result["status"] == "error" assert "42" in result["stderr"] @@ -1257,7 +1314,7 @@ async def test_execute_script_empty_files_mounted(): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() await tool.run_async( - args={"skill_name": "skill_empty", "script_path": "run.py"}, + args={"skill_name": "skill_empty", "file_path": "run.py"}, tool_context=ctx, ) @@ -1276,7 +1333,6 @@ async def test_execute_script_empty_files_mounted(): "bad_args", [ "not a dict", - ["a", "list"], 42, True, ], @@ -1290,12 +1346,12 @@ async def test_execute_script_invalid_args_type(mock_skill1, bad_args): result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "run.py", + "file_path": "run.py", "args": bad_args, }, tool_context=ctx, ) - assert result["error_code"] == "INVALID_ARGS_TYPE" + assert result["error_code"] == "INVALID_ARGUMENTS" executor.execute_code.assert_not_called() @@ -1320,12 +1376,12 @@ async def test_execute_script_invalid_short_options_type( result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "run.py", + "file_path": "run.py", "short_options": bad_short_options, }, tool_context=ctx, ) - assert result["error_code"] == "INVALID_SHORT_OPTIONS_TYPE" + assert result["error_code"] == "INVALID_ARGUMENTS" executor.execute_code.assert_not_called() @@ -1350,12 +1406,12 @@ async def test_execute_script_invalid_positional_args_type( result = await tool.run_async( args={ "skill_name": "skill1", - "script_path": "run.py", + "file_path": "run.py", "positional_args": bad_positional_args, }, tool_context=ctx, ) - assert result["error_code"] == "INVALID_POSITIONAL_ARGS_TYPE" + assert result["error_code"] == "INVALID_ARGUMENTS" executor.execute_code.assert_not_called() @@ -1393,7 +1449,7 @@ async def test_execute_script_binary_content_packaged(): tool = skill_toolset.RunSkillScriptTool(toolset) ctx = _make_tool_context_with_agent() await tool.run_async( - args={"skill_name": "skill_bin", "script_path": "run.py"}, + args={"skill_name": "skill_bin", "file_path": "run.py"}, tool_context=ctx, ) @@ -1460,8 +1516,8 @@ def my_func(): # Activate skills load_tool = skill_toolset.LoadSkillTool(toolset) - await load_tool.run_async(args={"name": "skill1"}, tool_context=ctx) - await load_tool.run_async(args={"name": "skill2"}, tool_context=ctx) + await load_tool.run_async(args={"skill_name": "skill1"}, tool_context=ctx) + await load_tool.run_async(args={"skill_name": "skill2"}, tool_context=ctx) # Dynamic tools should now be resolved tools = await toolset.get_tools_with_prefix(readonly_context=ctx) @@ -1505,7 +1561,7 @@ async def test_skill_toolset_resolution_error_handling(mock_skill1, caplog): # Activate skill load_tool = skill_toolset.LoadSkillTool(toolset) - await load_tool.run_async(args={"name": "skill1"}, tool_context=ctx) + await load_tool.run_async(args={"skill_name": "skill1"}, tool_context=ctx) with caplog.at_level(logging.WARNING): tools = await toolset.get_tools(readonly_context=ctx) From 20748894cdaa5a95d0c4ccb0daf87a34496639dd Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Wed, 8 Apr 2026 11:33:28 -0700 Subject: [PATCH 158/192] feat: Support loading agents from Visual Builder with BigQuery-powered logging PiperOrigin-RevId: 896612027 --- src/google/adk/agents/config_agent_utils.py | 2 +- src/google/adk/cli/adk_web_server.py | 56 +++- .../bigquery_agent_analytics_plugin.py | 23 +- src/google/adk/tools/bigquery/client.py | 13 + src/google/adk/utils/_telemetry_context.py | 25 ++ tests/unittests/cli/test_fast_api.py | 261 +++++++++++++++++- .../test_bigquery_agent_analytics_plugin.py | 116 +++++++- .../tools/bigquery/test_bigquery_client.py | 28 ++ 8 files changed, 509 insertions(+), 15 deletions(-) create mode 100644 src/google/adk/utils/_telemetry_context.py diff --git a/src/google/adk/agents/config_agent_utils.py b/src/google/adk/agents/config_agent_utils.py index 2c1c9bd9c8..b38e3fb3a6 100644 --- a/src/google/adk/agents/config_agent_utils.py +++ b/src/google/adk/agents/config_agent_utils.py @@ -36,7 +36,7 @@ def from_config(config_path: str) -> BaseAgent: """Build agent from a configfile path. Args: - config: the path to a YAML config file. + config_path: the path to a YAML config file. Returns: The created agent instance. diff --git a/src/google/adk/cli/adk_web_server.py b/src/google/adk/cli/adk_web_server.py index 1ea68ecbef..64133bd3c6 100644 --- a/src/google/adk/cli/adk_web_server.py +++ b/src/google/adk/cli/adk_web_server.py @@ -55,6 +55,7 @@ from typing_extensions import deprecated from typing_extensions import override from watchdog.observers import Observer +import yaml from . import agent_graph from ..agents.base_agent import BaseAgent @@ -89,6 +90,7 @@ from ..events.event import Event from ..memory.base_memory_service import BaseMemoryService from ..plugins.base_plugin import BasePlugin +from ..plugins.bigquery_agent_analytics_plugin import BigQueryAgentAnalyticsPlugin from ..runners import Runner from ..sessions.base_session_service import BaseSessionService from ..sessions.session import Session @@ -697,17 +699,55 @@ async def get_runner_async(self, app_name: str) -> Runner: # Instantiate extra plugins if configured extra_plugins_instances = self._instantiate_extra_plugins() + plugins_yaml_path = os.path.join(self.agents_dir, app_name, "plugins.yaml") + bq_analytics_config = None + if os.path.exists(plugins_yaml_path): + with open(plugins_yaml_path, "r", encoding="utf-8") as f: + plugins_config = yaml.safe_load(f) + if plugins_config and isinstance(plugins_config, dict): + bq_analytics_config = plugins_config.get("bigquery_agent_analytics") + + # Determine if the agent was loaded from YAML based on the agent loader info + is_visual_builder = False + detailed_agents = self.agent_loader.list_agents_detailed() + for agent_info in detailed_agents: + if agent_info.get("name") == app_name: + if agent_info.get("language") == "yaml": + is_visual_builder = True + break + if isinstance(agent_or_app, BaseAgent): + plugins = extra_plugins_instances + + # Handle BigQuery Analytics Plugin injection + if bq_analytics_config and all([ + bq_analytics_config.get("project_id"), + bq_analytics_config.get("dataset_id"), + bq_analytics_config.get("dataset_location"), + ]): + plugins.append( + BigQueryAgentAnalyticsPlugin( + project_id=bq_analytics_config.get("project_id"), + dataset_id=bq_analytics_config.get("dataset_id"), + table_id=bq_analytics_config.get("table_id"), + location=bq_analytics_config.get("dataset_location"), + ) + ) + agentic_app = App( name=app_name, root_agent=agent_or_app, - plugins=extra_plugins_instances, + plugins=plugins, ) else: # Combine existing plugins with extra plugins agent_or_app.plugins = agent_or_app.plugins + extra_plugins_instances agentic_app = agent_or_app + # If the root agent was loaded from YAML, we treat it as being from Visual Builder + if is_visual_builder: + object.__setattr__(agentic_app, "_is_visual_builder_app", True) + runner = self._create_runner(agentic_app) self.runner_dict[app_name] = runner return runner @@ -1840,9 +1880,20 @@ async def patch_memory( raise HTTPException(status_code=404, detail="Session not found") await self.memory_service.add_session_to_memory(session) + def _set_telemetry_context_if_needed(runner: Runner): + """Helper to set contextvars for the current request task.""" + app = getattr(runner, "app", None) + from ..utils._telemetry_context import _is_visual_builder + + if app and getattr(app, "_is_visual_builder_app", False): + _is_visual_builder.set(True) + else: + _is_visual_builder.set(False) + @app.post("/run", response_model_exclude_none=True) async def run_agent(req: RunAgentRequest) -> list[Event]: runner = await self.get_runner_async(req.app_name) + _set_telemetry_context_if_needed(runner) try: async with Aclosing( runner.run_async( @@ -1864,6 +1915,7 @@ async def run_agent(req: RunAgentRequest) -> list[Event]: async def run_agent_sse(req: RunAgentRequest) -> StreamingResponse: stream_mode = StreamingMode.SSE if req.streaming else StreamingMode.NONE runner = await self.get_runner_async(req.app_name) + _set_telemetry_context_if_needed(runner) # Validate session existence before starting the stream. # We check directly here instead of eagerly advancing the @@ -2039,6 +2091,8 @@ async def run_agent_live( return await websocket.accept() + runner_for_context = await self.get_runner_async(app_name) + _set_telemetry_context_if_needed(runner_for_context) session = await self.session_service.get_session( app_name=app_name, user_id=user_id, session_id=session_id diff --git a/src/google/adk/plugins/bigquery_agent_analytics_plugin.py b/src/google/adk/plugins/bigquery_agent_analytics_plugin.py index 290da493ab..9bbe6d7b23 100644 --- a/src/google/adk/plugins/bigquery_agent_analytics_plugin.py +++ b/src/google/adk/plugins/bigquery_agent_analytics_plugin.py @@ -67,6 +67,7 @@ from ..models.llm_response import LlmResponse from ..tools.base_tool import BaseTool from ..tools.tool_context import ToolContext +from ..utils._telemetry_context import _is_visual_builder from ..version import __version__ from .base_plugin import BasePlugin @@ -922,6 +923,9 @@ def __init__( self.flush_interval = flush_interval self.retry_config = retry_config self.shutdown_timeout = shutdown_timeout + + self._visual_builder = _is_visual_builder.get() + self._queue: asyncio.Queue[dict[str, Any]] = asyncio.Queue( maxsize=queue_max_size ) @@ -1092,9 +1096,15 @@ async def _write_rows_with_retry(self, rows: list[dict[str, Any]]) -> None: serialized_schema = self.arrow_schema.serialize().to_pybytes() serialized_batch = arrow_batch.serialize().to_pybytes() + trace_id_prefix = ( + "google-adk-bq-logger-visual-builder" + if self._visual_builder + else "google-adk-bq-logger" + ) + req = bq_storage_types.AppendRowsRequest( write_stream=self.write_stream, - trace_id=f"google-adk-bq-logger/{__version__}", + trace_id=f"{trace_id_prefix}/{__version__}", ) req.arrow_rows.writer_schema.serialized_schema = serialized_schema req.arrow_rows.rows.serialized_record_batch = serialized_batch @@ -1900,6 +1910,8 @@ def __init__( self.table_id = table_id or self.config.table_id self.location = location + self._visual_builder = _is_visual_builder.get() + self._started = False self._startup_error: Optional[Exception] = None self._is_shutting_down = False @@ -2030,9 +2042,12 @@ def get_credentials(): if quota_project_id else None ) - client_info = gapic_client_info.ClientInfo( - user_agent=f"google-adk-bq-logger/{__version__}" - ) + + user_agents = [f"google-adk-bq-logger/{__version__}"] + if self._visual_builder: + user_agents.append(f"google-adk-visual-builder/{__version__}") + + client_info = gapic_client_info.ClientInfo(user_agent=" ".join(user_agents)) write_client = BigQueryWriteAsyncClient( credentials=creds, diff --git a/src/google/adk/tools/bigquery/client.py b/src/google/adk/tools/bigquery/client.py index 2cb4e67c37..526a181420 100644 --- a/src/google/adk/tools/bigquery/client.py +++ b/src/google/adk/tools/bigquery/client.py @@ -14,6 +14,7 @@ from __future__ import annotations +import os from typing import List from typing import Optional from typing import Union @@ -25,12 +26,16 @@ from google.cloud import dataplex_v1 from ... import version +from ...utils._telemetry_context import _is_visual_builder USER_AGENT_BASE = f"google-adk/{version.__version__}" BQ_USER_AGENT = f"adk-bigquery-tool {USER_AGENT_BASE}" DP_USER_AGENT = f"adk-dataplex-tool {USER_AGENT_BASE}" USER_AGENT = BQ_USER_AGENT +# Internal identifier for Visual Builder usage tracking. +_VISUAL_BUILDER_UA = "google-adk-visual-builder" + def get_bigquery_client( *, @@ -52,6 +57,10 @@ def get_bigquery_client( """ user_agents = [BQ_USER_AGENT] + + if _is_visual_builder.get(): + user_agents.append(_VISUAL_BUILDER_UA) + if user_agent: if isinstance(user_agent, str): user_agents.append(user_agent) @@ -88,6 +97,10 @@ def get_dataplex_catalog_client( """ user_agents = [DP_USER_AGENT] + + if _is_visual_builder.get(): + user_agents.append(_VISUAL_BUILDER_UA) + if user_agent: if isinstance(user_agent, str): user_agents.append(user_agent) diff --git a/src/google/adk/utils/_telemetry_context.py b/src/google/adk/utils/_telemetry_context.py new file mode 100644 index 0000000000..1d2b033cf9 --- /dev/null +++ b/src/google/adk/utils/_telemetry_context.py @@ -0,0 +1,25 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Context variables for internal telemetry use.""" + +from __future__ import annotations + +import contextvars + +# Internal context variable for Visual Builder usage tracking. +# True if the current execution is within a Visual Builder context. +_is_visual_builder: contextvars.ContextVar[bool] = contextvars.ContextVar( + "_is_visual_builder", default=False +) diff --git a/tests/unittests/cli/test_fast_api.py b/tests/unittests/cli/test_fast_api.py index 347f4bcc7b..740220994a 100755 --- a/tests/unittests/cli/test_fast_api.py +++ b/tests/unittests/cli/test_fast_api.py @@ -40,6 +40,7 @@ from google.adk.evaluation.in_memory_eval_sets_manager import InMemoryEvalSetsManager from google.adk.events.event import Event from google.adk.events.event_actions import EventActions +from google.adk.plugins.bigquery_agent_analytics_plugin import BigQueryAgentAnalyticsPlugin from google.adk.runners import Runner from google.adk.sessions.in_memory_session_service import InMemorySessionService from google.adk.sessions.session import Session @@ -187,19 +188,39 @@ def __init__(self, agents_dir: str): pass def load_agent(self, app_name): + if app_name == "yaml_app" or app_name == "bq_app": + agent = DummyAgent(name="yaml_agent") + agent._config = MagicMock(logging=None) + return agent return root_agent def list_agents(self): - return ["test_app"] + return ["test_app", "yaml_app", "bq_app"] def list_agents_detailed(self): - return [{ - "name": "test_app", - "root_agent_name": "test_agent", - "description": "A test agent for unit testing", - "language": "python", - "is_computer_use": False, - }] + return [ + { + "name": "test_app", + "root_agent_name": "test_agent", + "description": "A test agent for unit testing", + "language": "python", + "is_computer_use": False, + }, + { + "name": "yaml_app", + "root_agent_name": "yaml_agent", + "description": "A yaml agent for unit testing", + "language": "yaml", + "is_computer_use": False, + }, + { + "name": "bq_app", + "root_agent_name": "yaml_agent", + "description": "A bq agent for unit testing", + "language": "yaml", + "is_computer_use": False, + }, + ] return MockAgentLoader(".") @@ -518,6 +539,103 @@ def _create_test_client( return TestClient(app) +def test_agent_with_bigquery_analytics_plugin( + tmp_path, + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + mock_eval_sets_manager, + mock_eval_set_results_manager, +): + """Verify that plugins.yaml is correctly read to attach BigQueryAgentAnalyticsPlugin.""" + app_name = "bq_app" + app_dir = tmp_path / app_name + app_dir.mkdir(parents=True) + + plugins_yaml_content = """\ +bigquery_agent_analytics: + project_id: test-project + dataset_id: test-dataset + table_id: test-table + dataset_location: US +""" + (app_dir / "plugins.yaml").write_text(plugins_yaml_content) + + with ( + patch.object(signal, "signal", autospec=True, return_value=None), + patch.object( + fast_api_module, + "create_session_service_from_options", + autospec=True, + return_value=mock_session_service, + ), + patch.object( + fast_api_module, + "create_artifact_service_from_options", + autospec=True, + return_value=mock_artifact_service, + ), + patch.object( + fast_api_module, + "create_memory_service_from_options", + autospec=True, + return_value=mock_memory_service, + ), + patch.object( + fast_api_module, + "AgentLoader", + autospec=True, + return_value=mock_agent_loader, + ), + patch.object( + fast_api_module, + "LocalEvalSetsManager", + autospec=True, + return_value=mock_eval_sets_manager, + ), + patch.object( + fast_api_module, + "LocalEvalSetResultsManager", + autospec=True, + return_value=mock_eval_set_results_manager, + ), + ): + from google.adk.cli.adk_web_server import AdkWebServer + + adk_web_server = AdkWebServer( + agent_loader=mock_agent_loader, + session_service=mock_session_service, + memory_service=mock_memory_service, + artifact_service=mock_artifact_service, + credential_service=MagicMock(), + eval_sets_manager=mock_eval_sets_manager, + eval_set_results_manager=mock_eval_set_results_manager, + agents_dir=str(tmp_path), + ) + + runner = asyncio.run(adk_web_server.get_runner_async(app_name)) + + # Assert that the plugin was attached + assert any( + isinstance(p, BigQueryAgentAnalyticsPlugin) for p in runner.app.plugins + ) + + # Check the configuration of the plugin + bq_plugin = next( + p + for p in runner.app.plugins + if isinstance(p, BigQueryAgentAnalyticsPlugin) + ) + assert bq_plugin.project_id == "test-project" + assert bq_plugin.dataset_id == "test-dataset" + assert bq_plugin.table_id == "test-table" + assert bq_plugin.location == "US" + + # Assert that the internal visual builder flag is set on the app + assert getattr(runner.app, "_is_visual_builder_app", False) is True + + @pytest.fixture def test_app( mock_session_service, @@ -2178,5 +2296,132 @@ async def run_async_session_not_found(self, **kwargs): assert "Session not found" in response.json()["detail"] +@pytest.mark.asyncio +async def test_independent_telemetry_context( + mock_session_service, + mock_artifact_service, + mock_memory_service, + mock_agent_loader, + mock_eval_sets_manager, + mock_eval_set_results_manager, + monkeypatch, +): + """Test that two agents have independent is_visual_builder context variables.""" + from google.adk.utils._telemetry_context import _is_visual_builder + import httpx + + # We use httpx.AsyncClient to send concurrent requests to the FastAPI app. + # This proves that is_visual_builder doesn't leak across concurrent requests. + captured_visual_builder_values = {} + + async def run_async_capture( + self, + *, + user_id: str, + session_id: str, + invocation_id: Optional[str] = None, + new_message: Optional[types.Content] = None, + state_delta: Optional[dict[str, Any]] = None, + run_config: Optional[RunConfig] = None, + ): + # Capture the value of is_visual_builder inside the request context + captured_visual_builder_values[self.app.name] = _is_visual_builder.get() + + # Sleep to ensure both requests overlap in time + await asyncio.sleep(0.1) + + # Read again to ensure it wasn't overwritten by the other concurrent request + captured_visual_builder_values[self.app.name + "_after_sleep"] = ( + _is_visual_builder.get() + ) + + yield _event_1() + + monkeypatch.setattr(Runner, "run_async", run_async_capture) + + with ( + patch.object(signal, "signal", autospec=True, return_value=None), + patch.object( + fast_api_module, + "create_session_service_from_options", + autospec=True, + return_value=mock_session_service, + ), + patch.object( + fast_api_module, + "create_artifact_service_from_options", + autospec=True, + return_value=mock_artifact_service, + ), + patch.object( + fast_api_module, + "create_memory_service_from_options", + autospec=True, + return_value=mock_memory_service, + ), + patch.object( + fast_api_module, + "AgentLoader", + autospec=True, + return_value=mock_agent_loader, + ), + patch.object( + fast_api_module, + "LocalEvalSetsManager", + autospec=True, + return_value=mock_eval_sets_manager, + ), + patch.object( + fast_api_module, + "LocalEvalSetResultsManager", + autospec=True, + return_value=mock_eval_set_results_manager, + ), + ): + app = get_fast_api_app( + agents_dir=".", + web=True, + session_service_uri="", + artifact_service_uri="", + memory_service_uri="", + allow_origins=["*"], + a2a=False, + host="127.0.0.1", + port=8000, + ) + + transport = httpx.ASGITransport(app=app) + async with httpx.AsyncClient( + transport=transport, base_url="http://test" + ) as client: + # Send concurrent requests + req1 = client.post( + "/run", + json={ + "app_name": "test_app", + "user_id": "test_user", + "session_id": "test_session", + "new_message": {"role": "user", "parts": [{"text": "Hello"}]}, + }, + ) + req2 = client.post( + "/run", + json={ + "app_name": "yaml_app", + "user_id": "test_user", + "session_id": "test_session", + "new_message": {"role": "user", "parts": [{"text": "Hello"}]}, + }, + ) + + await asyncio.gather(req1, req2) + + assert captured_visual_builder_values.get("test_app") == False + assert captured_visual_builder_values.get("test_app_after_sleep") == False + + assert captured_visual_builder_values.get("yaml_app") == True + assert captured_visual_builder_values.get("yaml_app_after_sleep") == True + + if __name__ == "__main__": pytest.main(["-xvs", __file__]) diff --git a/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py b/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py index 48749efc06..4dd986386f 100644 --- a/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py +++ b/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py @@ -33,6 +33,7 @@ from google.adk.sessions import session as session_lib from google.adk.tools import base_tool as base_tool_lib from google.adk.tools import tool_context as tool_context_lib +from google.adk.utils._telemetry_context import _is_visual_builder from google.adk.version import __version__ import google.auth from google.auth import exceptions as auth_exceptions @@ -279,7 +280,8 @@ async def _get_captured_event_dict_async(mock_write_client, expected_schema): assert len(requests) == 1 request = requests[0] assert request.write_stream == DEFAULT_STREAM_NAME - assert request.trace_id == f"google-adk-bq-logger/{__version__}" + assert request.trace_id.startswith("google-adk-bq-logger") + assert request.trace_id.endswith(f"/{__version__}") # Parse the Arrow batch back to a dict for verification try: reader = pa.ipc.open_stream(request.arrow_rows.rows.serialized_record_batch) @@ -2246,6 +2248,118 @@ async def test_otel_integration_real_provider(self, callback_context): assert format(finished_spans[0].context.span_id, "016x") == span_id assert format(finished_spans[0].context.trace_id, "032x") == trace_id + @pytest.mark.asyncio + async def test_keyword_identifiers_emission_default( + self, + mock_auth_default, + mock_bq_client, + callback_context, + ): + """Verify the default keyword flow for User-Agent and Trace-ID.""" + keyword = "google-adk-bq-logger" + mock_write_client = mock.AsyncMock() + + # 1. Verify User-Agent contains default keyword. + with mock.patch( + "google.adk.plugins.bigquery_agent_analytics_plugin.BigQueryWriteAsyncClient", + autospec=True, + ) as mock_write_cls: + mock_write_cls.return_value = mock_write_client + async with managed_plugin(PROJECT_ID, DATASET_ID) as plugin: + await plugin._ensure_started() + + _, kwargs = mock_write_cls.call_args + client_info = kwargs.get("client_info") + assert f"{keyword}/{__version__}" in client_info.user_agent + + # 2. Verify Trace ID contains default keyword. + with mock.patch( + "google.adk.plugins.bigquery_agent_analytics_plugin.BigQueryWriteAsyncClient", + autospec=True, + ) as mock_write_cls: + mock_write_cls.return_value = mock_write_client + async with managed_plugin(PROJECT_ID, DATASET_ID) as plugin: + await plugin._ensure_started() + mock_write_client.append_rows.reset_mock() + + llm_request = llm_request_lib.LlmRequest( + model="gemini-pro", + contents=[types.Content(parts=[types.Part(text="Hi")])], + ) + await plugin.before_model_callback( + callback_context=callback_context, llm_request=llm_request + ) + await plugin.flush() + + call_args = mock_write_client.append_rows.call_args + requests_iter = call_args.args[0] + requests = [] + async for req in requests_iter: + requests.append(req) + + assert requests[0].trace_id.startswith(keyword) + assert requests[0].trace_id.endswith(f"/{__version__}") + + @pytest.mark.asyncio + async def test_visual_builder_identifiers_flow( + self, + mock_auth_default, + mock_bq_client, + callback_context, + dummy_arrow_schema, + ): + """Verify visual-builder keyword flow via contextvars.""" + keyword = "google-adk-visual-builder" + mock_write_client = mock.AsyncMock() + + # Simulate setting the internal flag via contextvars + token = _is_visual_builder.set(True) + try: + # 1. Verify Client User-Agent + with mock.patch( + "google.adk.plugins.bigquery_agent_analytics_plugin.BigQueryWriteAsyncClient", + autospec=True, + ) as mock_write_cls: + mock_write_cls.return_value = mock_write_client + async with managed_plugin(PROJECT_ID, DATASET_ID) as plugin: + await plugin._ensure_started() + + _, kwargs = mock_write_cls.call_args + client_info = kwargs.get("client_info") + assert keyword in client_info.user_agent + + # 2. Verify Request Trace ID + with mock.patch( + "google.adk.plugins.bigquery_agent_analytics_plugin.BigQueryWriteAsyncClient", + autospec=True, + ) as mock_write_cls: + mock_write_cls.return_value = mock_write_client + async with managed_plugin(PROJECT_ID, DATASET_ID) as plugin: + await plugin._ensure_started() + mock_write_client.append_rows.reset_mock() + + llm_request = llm_request_lib.LlmRequest( + model="gemini-pro", + contents=[types.Content(parts=[types.Part(text="Hi")])], + ) + await plugin.before_model_callback( + callback_context=callback_context, llm_request=llm_request + ) + await plugin.flush() + + call_args = mock_write_client.append_rows.call_args + requests_iter = call_args.args[0] + requests = [] + async for req in requests_iter: + requests.append(req) + + assert requests[0].trace_id.startswith( + "google-adk-bq-logger-visual-builder" + ) + assert requests[0].trace_id.endswith(f"/{__version__}") + finally: + _is_visual_builder.reset(token) + @pytest.mark.asyncio async def test_flush_mechanism( self, diff --git a/tests/unittests/tools/bigquery/test_bigquery_client.py b/tests/unittests/tools/bigquery/test_bigquery_client.py index d8d5e726ee..8720bf3dbe 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_client.py +++ b/tests/unittests/tools/bigquery/test_bigquery_client.py @@ -21,6 +21,7 @@ from google.adk.tools.bigquery.client import DP_USER_AGENT from google.adk.tools.bigquery.client import get_bigquery_client from google.adk.tools.bigquery.client import get_dataplex_catalog_client +from google.adk.utils._telemetry_context import _is_visual_builder from google.api_core.gapic_v1 import client_info as gapic_client_info import google.auth from google.auth.exceptions import DefaultCredentialsError @@ -193,6 +194,33 @@ def test_bigquery_client_user_agent_custom_list(): assert expected_user_agents.issubset(actual_user_agents) +def test_bigquery_client_user_agent_visual_builder(): + """Test BigQuery client user agent when visual builder flag is set.""" + token = _is_visual_builder.set(True) + try: + with mock.patch.object( + bigquery_client, "Connection", autospec=True + ) as mock_connection: + # Trigger the BigQuery client creation + get_bigquery_client( + project="test-gcp-project", + credentials=mock.create_autospec(Credentials, instance=True), + ) + + # Verify that the tracking user agent was set + client_info_arg = mock_connection.call_args[1].get("client_info") + assert client_info_arg is not None + expected_user_agents = { + "adk-bigquery-tool", + f"google-adk/{google.adk.__version__}", + "google-adk-visual-builder", + } + actual_user_agents = set(client_info_arg.user_agent.split()) + assert expected_user_agents.issubset(actual_user_agents) + finally: + _is_visual_builder.reset(token) + + def test_bigquery_client_location_custom(): """Test BigQuery client custom location.""" # Trigger the BigQuery client creation From 6fd0f85191dea17b7c6b033473bd39764250265b Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Wed, 8 Apr 2026 13:19:44 -0700 Subject: [PATCH 159/192] fix: move BigQueryAgentAnalyticsPlugin import inside get_runner_async PiperOrigin-RevId: 896665913 --- src/google/adk/cli/adk_web_server.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/google/adk/cli/adk_web_server.py b/src/google/adk/cli/adk_web_server.py index 64133bd3c6..2833dfd466 100644 --- a/src/google/adk/cli/adk_web_server.py +++ b/src/google/adk/cli/adk_web_server.py @@ -90,7 +90,6 @@ from ..events.event import Event from ..memory.base_memory_service import BaseMemoryService from ..plugins.base_plugin import BasePlugin -from ..plugins.bigquery_agent_analytics_plugin import BigQueryAgentAnalyticsPlugin from ..runners import Runner from ..sessions.base_session_service import BaseSessionService from ..sessions.session import Session @@ -725,6 +724,8 @@ async def get_runner_async(self, app_name: str) -> Runner: bq_analytics_config.get("dataset_id"), bq_analytics_config.get("dataset_location"), ]): + from ..plugins.bigquery_agent_analytics_plugin import BigQueryAgentAnalyticsPlugin + plugins.append( BigQueryAgentAnalyticsPlugin( project_id=bq_analytics_config.get("project_id"), From 6b1600fbf53bcf634c5fe4793f02921bc0b75125 Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Wed, 8 Apr 2026 14:03:52 -0700 Subject: [PATCH 160/192] fix(live): Handle live session resumption and GoAway signal * Skip sending conversation history when a live session is being resumed using a handle. * Catch ConnectionClosed and APIError exceptions during live sessions and attempt to reconnect if a session resumption handle is available. * Handle the server's "go_away" signal by proactively closing the connection to trigger a reconnection with the latest session handle. * Propagate the "go_away" signal from the Gemini connection to the LlmResponse. * Add unit tests for reconnection on ConnectionClosed, APIError, skipping history on resumption, and handling the go_away signal. Closes #4996 Co-authored-by: Liang Wu PiperOrigin-RevId: 896687925 --- .../adk/flows/llm_flows/base_llm_flow.py | 136 +++--- .../adk/models/gemini_llm_connection.py | 7 + src/google/adk/models/llm_response.py | 3 + .../flows/llm_flows/test_base_llm_flow.py | 409 ++++++++++++++++++ .../models/test_gemini_llm_connection.py | 48 ++ 5 files changed, 553 insertions(+), 50 deletions(-) diff --git a/src/google/adk/flows/llm_flows/base_llm_flow.py b/src/google/adk/flows/llm_flows/base_llm_flow.py index 3a25799106..76c7b8e160 100644 --- a/src/google/adk/flows/llm_flows/base_llm_flow.py +++ b/src/google/adk/flows/llm_flows/base_llm_flow.py @@ -70,6 +70,8 @@ DEFAULT_TRANSFER_AGENT_DELAY = 1.0 DEFAULT_TASK_COMPLETION_DELAY = 1.0 +DEFAULT_MAX_RECONNECT_ATTEMPTS = 5 + # Statistics configuration DEFAULT_ENABLE_CACHE_STATISTICS = False @@ -471,6 +473,8 @@ async def run_live( invocation_context: InvocationContext, ) -> AsyncGenerator[Event, None]: """Runs the flow using live api.""" + from google.genai import errors + llm_request = LlmRequest() event_id = Event.new_id() @@ -513,7 +517,12 @@ async def run_live( invocation_context.agent.name, ) async with llm.connect(llm_request) as llm_connection: - if llm_request.contents: + # Skip sending history if we are resuming a session. The server + # already has the state associated with the resumption handle. + if ( + llm_request.contents + and not invocation_context.live_session_resumption_handle + ): # Sends the conversation history to the model. with tracer.start_as_current_span('send_data'): # Combine regular contents with audio/transcription from session @@ -537,6 +546,8 @@ async def run_live( ) ) as agen: async for event in agen: + # Reset attempt counter on successful communication. + attempt = 1 # Empty event means the queue is closed. if not event: break @@ -606,10 +617,32 @@ async def run_live( except asyncio.CancelledError: pass except (ConnectionClosed, ConnectionClosedOK) as e: - # when the session timeout, it will just close and not throw exception. - # so this is for bad cases + # If we have a session resumption handle, we attempt to reconnect. + # This handle is updated dynamically during the session. + if invocation_context.live_session_resumption_handle: + if attempt > DEFAULT_MAX_RECONNECT_ATTEMPTS: + logger.error('Max reconnection attempts reached (%s).', e) + raise + logger.info( + 'Connection closed (%s), reconnecting with session handle.', e + ) + continue logger.error('Connection closed: %s.', e) raise + except errors.APIError as e: + # Error code 1000 and 1006 indicates a recoverable connection drop. + # In that case, we attempt to reconnect with session handle if available. + if e.code in [1000, 1006]: + if invocation_context.live_session_resumption_handle: + if attempt > DEFAULT_MAX_RECONNECT_ATTEMPTS: + logger.error('Max reconnection attempts reached (%s).', e) + raise + logger.info( + 'Connection lost (%s), reconnecting with session handle.', e + ) + continue + logger.error('APIError in live flow: %s', e) + raise except Exception as e: logger.error( 'An unexpected error occurred in live flow: %s', e, exc_info=True @@ -705,57 +738,60 @@ def get_author_for_event(llm_response): else: return invocation_context.agent.name - try: - while True: - async with Aclosing(llm_connection.receive()) as agen: - async for llm_response in agen: - if llm_response.live_session_resumption_update: - logger.info( - 'Update session resumption handle:' - f' {llm_response.live_session_resumption_update}.' - ) - invocation_context.live_session_resumption_handle = ( - llm_response.live_session_resumption_update.new_handle - ) - model_response_event = Event( - id=Event.new_id(), - invocation_id=invocation_context.invocation_id, - author=get_author_for_event(llm_response), + while True: + async with Aclosing(llm_connection.receive()) as agen: + async for llm_response in agen: + if llm_response.live_session_resumption_update: + logger.info( + 'Update session resumption handle:' + f' {llm_response.live_session_resumption_update}.' + ) + invocation_context.live_session_resumption_handle = ( + llm_response.live_session_resumption_update.new_handle ) + if llm_response.go_away: + logger.info(f'Received go away signal: {llm_response.go_away}') + # The server signals that it will close the connection soon. + # We proactively raise ConnectionClosed to trigger the reconnection + # logic in run_live, which will use the latest session handle. + raise ConnectionClosed(None, None) + model_response_event = Event( + id=Event.new_id(), + invocation_id=invocation_context.invocation_id, + author=get_author_for_event(llm_response), + ) - async with Aclosing( - self._postprocess_live( - invocation_context, - llm_request, - llm_response, - model_response_event, - ) - ) as agen: - async for event in agen: - # Cache output audio chunks from model responses - # TODO: support video data - if ( - invocation_context.run_config.save_live_blob - and event.content - and event.content.parts - and event.content.parts[0].inline_data - and event.content.parts[0].inline_data.mime_type.startswith( - 'audio/' - ) - ): - audio_blob = types.Blob( - data=event.content.parts[0].inline_data.data, - mime_type=event.content.parts[0].inline_data.mime_type, - ) - self.audio_cache_manager.cache_audio( - invocation_context, audio_blob, cache_type='output' + async with Aclosing( + self._postprocess_live( + invocation_context, + llm_request, + llm_response, + model_response_event, + ) + ) as agen: + async for event in agen: + # Cache output audio chunks from model responses + # TODO: support video data + if ( + invocation_context.run_config.save_live_blob + and event.content + and event.content.parts + and event.content.parts[0].inline_data + and event.content.parts[0].inline_data.mime_type.startswith( + 'audio/' ) + ): + audio_blob = types.Blob( + data=event.content.parts[0].inline_data.data, + mime_type=event.content.parts[0].inline_data.mime_type, + ) + self.audio_cache_manager.cache_audio( + invocation_context, audio_blob, cache_type='output' + ) - yield event - # Give opportunity for other tasks to run. - await asyncio.sleep(0) - except ConnectionClosedOK: - pass + yield event + # Give opportunity for other tasks to run. + await asyncio.sleep(0) async def run_async( self, invocation_context: InvocationContext diff --git a/src/google/adk/models/gemini_llm_connection.py b/src/google/adk/models/gemini_llm_connection.py index 7fc39748ec..8f491dc88b 100644 --- a/src/google/adk/models/gemini_llm_connection.py +++ b/src/google/adk/models/gemini_llm_connection.py @@ -377,6 +377,13 @@ async def receive(self) -> AsyncGenerator[LlmResponse, None]: model_version=self._model_version, ) ) + if message.go_away: + logger.debug('Received GoAway message: %s', message.go_away) + yield LlmResponse( + go_away=message.go_away, + model_version=self._model_version, + ) + if tool_call_parts: logger.debug('Exited loop with pending tool_call_parts') yield LlmResponse( diff --git a/src/google/adk/models/llm_response.py b/src/google/adk/models/llm_response.py index 754e5abcfb..92a687bae3 100644 --- a/src/google/adk/models/llm_response.py +++ b/src/google/adk/models/llm_response.py @@ -110,6 +110,9 @@ class LlmResponse(BaseModel): ] = None """The session resumption update of the LlmResponse""" + go_away: Optional[types.LiveServerGoAway] = None + """The GoAway signal from the Live model.""" + input_transcription: Optional[types.Transcription] = None """Audio transcription of user input.""" diff --git a/tests/unittests/flows/llm_flows/test_base_llm_flow.py b/tests/unittests/flows/llm_flows/test_base_llm_flow.py index 9578a3f538..bdcaa9af5a 100644 --- a/tests/unittests/flows/llm_flows/test_base_llm_flow.py +++ b/tests/unittests/flows/llm_flows/test_base_llm_flow.py @@ -484,3 +484,412 @@ async def call(self, **kwargs): assert result1.grounding_metadata == {'foo': 'bar'} assert result2.grounding_metadata == {'foo': 'bar'} assert result3.grounding_metadata == {'foo': 'bar'} + + +@pytest.mark.asyncio +async def test_run_live_reconnects_on_connection_closed(): + """Test that run_live reconnects when ConnectionClosed occurs.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + from websockets.exceptions import ConnectionClosed + + real_model = Gemini() + mock_connection = mock.AsyncMock() + + async def mock_receive(): + # Simulate receiving a session resumption handle from the server. + yield LlmResponse( + live_session_resumption_update=types.LiveServerSessionResumptionUpdate( + new_handle='test_handle' + ) + ) + # Simulate connection dropping, triggering reconnection logic. + raise ConnectionClosed(None, None) + + mock_connection.receive = mock.Mock(side_effect=mock_receive) + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + mock_connection_2 = mock.AsyncMock() + + # We need a way to break the infinite loop in run_live for testing. + class NonRetryableError(Exception): + pass + + async def mock_receive_2(): + yield LlmResponse( + content=types.Content(parts=[types.Part.from_text(text='hi')]) + ) + # Raise non-retryable exception to exit the loop and finish test. + raise NonRetryableError('stop') + + mock_connection_2.receive = mock.Mock(side_effect=mock_receive_2) + + mock_aenter = mock.AsyncMock() + # First connection attempt uses mock_connection (drops), second uses mock_connection_2 (stops test). + mock_aenter.side_effect = [mock_connection, mock_connection_2] + + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__ = mock_aenter + + events = [] + try: + async for event in flow.run_live(invocation_context): + events.append(event) + except NonRetryableError: + pass + + # Verify that we attempted to connect twice (initial + reconnect). + assert mock_connect.call_count == 2 + assert invocation_context.live_session_resumption_handle == 'test_handle' + + +@pytest.mark.asyncio +async def test_run_live_reconnects_on_api_error(): + """Test that run_live reconnects when APIError occurs.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + from google.genai.errors import APIError + + real_model = Gemini() + mock_connection = mock.AsyncMock() + + async def mock_receive(): + # Simulate receiving a session resumption handle from the server. + yield LlmResponse( + live_session_resumption_update=types.LiveServerSessionResumptionUpdate( + new_handle='test_handle' + ) + ) + # Simulate an API error occurring, triggering reconnection logic. + raise APIError(1000, {}) + + mock_connection.receive = mock.Mock(side_effect=mock_receive) + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + mock_connection_2 = mock.AsyncMock() + + # We need a way to break the infinite loop in run_live for testing. + class NonRetryableError(Exception): + pass + + async def mock_receive_2(): + yield LlmResponse( + content=types.Content(parts=[types.Part.from_text(text='hi')]) + ) + # Raise non-retryable exception to exit the loop and finish test. + raise NonRetryableError('stop') + + mock_connection_2.receive = mock.Mock(side_effect=mock_receive_2) + + mock_aenter = mock.AsyncMock() + # First connection attempt uses mock_connection (fails with APIError), second uses mock_connection_2 (stops test). + mock_aenter.side_effect = [mock_connection, mock_connection_2] + + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__ = mock_aenter + + events = [] + try: + async for event in flow.run_live(invocation_context): + events.append(event) + except NonRetryableError: + pass + + # Verify that we attempted to connect twice (initial + reconnect). + assert mock_connect.call_count == 2 + assert invocation_context.live_session_resumption_handle == 'test_handle' + + +@pytest.mark.asyncio +async def test_run_live_skips_send_history_on_resumption(): + """Test that run_live skips send_history when resuming a session.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + + real_model = Gemini() + mock_connection = mock.AsyncMock() + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + # Set resumption handle to simulate a resumed session. + invocation_context.live_session_resumption_handle = 'test_handle' + invocation_context.live_request_queue = LiveRequestQueue() + + flow = BaseLlmFlowForTesting() + + async def mock_preprocess(ctx, req): + req.contents = [types.Content(parts=[types.Part.from_text(text='history')])] + if False: + yield + + with mock.patch.object( + flow, '_preprocess_async', side_effect=mock_preprocess + ): + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + + # We need a way to break the infinite loop in run_live for testing. + class StopError(Exception): + pass + + async def mock_receive(): + yield LlmResponse( + content=types.Content(parts=[types.Part.from_text(text='hi')]) + ) + # Raise StopError to exit the loop and finish test. + raise StopError('stop') + + mock_connection.receive = mock.Mock(side_effect=mock_receive) + + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__.return_value = mock_connection + + try: + async for _ in flow.run_live(invocation_context): + pass + except StopError: + pass + + # Verify that send_history was not called because we resumed. + mock_connection.send_history.assert_not_called() + + +@pytest.mark.asyncio +async def test_live_session_resumption_go_away(): + """Test that go_away triggers reconnection.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + + real_model = Gemini() + mock_connection = mock.AsyncMock() + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + invocation_context.live_session_resumption_handle = 'old_handle' + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + mock_connection_2 = mock.AsyncMock() + + # We need a way to break the infinite loop in run_live for testing. + class StopError(Exception): + pass + + async def mock_receive_1(): + # Simulate receiving a go_away signal from the server. + yield LlmResponse(go_away=types.LiveServerGoAway()) + + async def mock_receive_2(): + yield LlmResponse( + content=types.Content(parts=[types.Part.from_text(text='hi')]) + ) + # Raise StopError to exit the loop and finish test. + raise StopError('stop') + + mock_connection.receive = mock.Mock(side_effect=mock_receive_1) + mock_connection_2.receive = mock.Mock(side_effect=mock_receive_2) + + mock_aenter = mock.AsyncMock() + # First connection attempt uses mock_connection (receives go_away), second uses mock_connection_2 (stops test). + mock_aenter.side_effect = [mock_connection, mock_connection_2] + + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__ = mock_aenter + + try: + async for _ in flow.run_live(invocation_context): + pass + except StopError: + pass + + # Verify that we attempted to connect twice (initial + reconnect after go_away). + assert mock_connect.call_count == 2 + + +@pytest.mark.asyncio +async def test_run_live_no_reconnect_without_handle(): + """Test that run_live does not reconnect when handle is missing.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + from websockets.exceptions import ConnectionClosed + + real_model = Gemini() + mock_connection = mock.AsyncMock() + + async def mock_receive(): + # Simulate connection drop without any handle update. + if False: + yield + raise ConnectionClosed(None, None) + + mock_connection.receive = mock.Mock(side_effect=mock_receive) + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + # Ensure no handle is set + invocation_context.live_session_resumption_handle = None + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__.return_value = mock_connection + + with pytest.raises(ConnectionClosed): + async for _ in flow.run_live(invocation_context): + pass + + # Verify that we only attempted to connect once. + assert mock_connect.call_count == 1 + + +@pytest.mark.asyncio +async def test_run_live_reconnect_limit(): + """Test that run_live stops reconnecting after 5 attempts.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + from websockets.exceptions import ConnectionClosed + + real_model = Gemini() + + connection_cnt = 0 + + async def mock_connect_impl(*args, **kwargs): + nonlocal connection_cnt + connection_cnt += 1 + conn = mock.AsyncMock() + + async def mock_receive(): + if connection_cnt == 1: + # Yield handle only on the first connection. + yield LlmResponse( + live_session_resumption_update=types.LiveServerSessionResumptionUpdate( + new_handle='test_handle' + ), + turn_complete=True, + ) + # All subsequent receives (and all receives on later connections) fail. + raise ConnectionClosed(None, None) + + conn.receive = mock.Mock(side_effect=mock_receive) + return conn + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + # Mock the async context manager + mock_connect.return_value.__aenter__.side_effect = mock_connect_impl + + with pytest.raises(ConnectionClosed): + async for _ in flow.run_live(invocation_context): + pass + + from google.adk.flows.llm_flows.base_llm_flow import DEFAULT_MAX_RECONNECT_ATTEMPTS + + # 1 initial attempt + DEFAULT_MAX_RECONNECT_ATTEMPTS retries + assert mock_connect.call_count == DEFAULT_MAX_RECONNECT_ATTEMPTS + 1 + + +@pytest.mark.asyncio +async def test_run_live_reconnect_reset_attempt(): + """Test that attempt counter is reset on successful communication.""" + from google.adk.agents.live_request_queue import LiveRequestQueue + from google.adk.flows.llm_flows.base_llm_flow import DEFAULT_MAX_RECONNECT_ATTEMPTS + from websockets.exceptions import ConnectionClosed + + real_model = Gemini() + + connection_cnt = 0 + + async def mock_connect_impl(*args, **kwargs): + nonlocal connection_cnt + connection_cnt += 1 + conn = mock.AsyncMock() + + async def mock_receive(): + if connection_cnt <= 2: + # Yield handle on the first two connections. + yield LlmResponse( + live_session_resumption_update=types.LiveServerSessionResumptionUpdate( + new_handle='test_handle' + ), + turn_complete=True, + ) + # All subsequent receives fail. + raise ConnectionClosed(None, None) + + conn.receive = mock.Mock(side_effect=mock_receive) + return conn + + agent = Agent(name='test_agent', model=real_model) + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + invocation_context.live_request_queue = LiveRequestQueue() + + flow = BaseLlmFlowForTesting() + + with mock.patch.object( + flow, '_send_to_model', new_callable=AsyncMock + ) as mock_send: + with mock.patch( + 'google.adk.models.google_llm.Gemini.connect' + ) as mock_connect: + mock_connect.return_value.__aenter__.side_effect = mock_connect_impl + + with pytest.raises(ConnectionClosed): + async for _ in flow.run_live(invocation_context): + pass + + # We expect 2 successful attempts + DEFAULT_MAX_RECONNECT_ATTEMPTS failed attempts + # Total calls = 2 + 5 = 7 + assert mock_connect.call_count == DEFAULT_MAX_RECONNECT_ATTEMPTS + 2 diff --git a/tests/unittests/models/test_gemini_llm_connection.py b/tests/unittests/models/test_gemini_llm_connection.py index 09bd537d8e..0bed24831e 100644 --- a/tests/unittests/models/test_gemini_llm_connection.py +++ b/tests/unittests/models/test_gemini_llm_connection.py @@ -145,6 +145,7 @@ async def test_receive_transcript_finished( msg.tool_call = None msg.usage_metadata = None msg.session_resumption_update = None + msg.go_away = None msg.server_content.model_turn = None msg.server_content.interrupted = False msg.server_content.turn_complete = False @@ -210,6 +211,7 @@ async def test_receive_usage_metadata_and_server_content( mock_message.server_content = mock_server_content mock_message.tool_call = None mock_message.session_resumption_update = None + mock_message.go_away = None async def mock_receive_generator(): yield mock_message @@ -266,6 +268,7 @@ async def test_receive_transcript_finished_on_interrupt( message1.server_content.grounding_metadata = None message1.tool_call = None message1.session_resumption_update = None + message1.go_away = None message2 = mock.Mock() message2.usage_metadata = None @@ -281,6 +284,7 @@ async def test_receive_transcript_finished_on_interrupt( message2.server_content.grounding_metadata = None message2.tool_call = None message2.session_resumption_update = None + message2.go_away = None message3 = mock.Mock() message3.usage_metadata = None @@ -294,6 +298,7 @@ async def test_receive_transcript_finished_on_interrupt( message3.server_content.grounding_metadata = None message3.tool_call = None message3.session_resumption_update = None + message3.go_away = None async def mock_receive_generator(): yield message1 @@ -343,6 +348,7 @@ async def test_receive_transcript_finished_on_generation_complete( message1.server_content.grounding_metadata = None message1.tool_call = None message1.session_resumption_update = None + message1.go_away = None message2 = mock.Mock() message2.usage_metadata = None @@ -358,6 +364,7 @@ async def test_receive_transcript_finished_on_generation_complete( message2.server_content.grounding_metadata = None message2.tool_call = None message2.session_resumption_update = None + message2.go_away = None message3 = mock.Mock() message3.usage_metadata = None @@ -371,6 +378,7 @@ async def test_receive_transcript_finished_on_generation_complete( message3.server_content.grounding_metadata = None message3.tool_call = None message3.session_resumption_update = None + message3.go_away = None async def mock_receive_generator(): yield message1 @@ -419,6 +427,7 @@ async def test_receive_transcript_finished_on_turn_complete( message1.server_content.grounding_metadata = None message1.tool_call = None message1.session_resumption_update = None + message1.go_away = None message2 = mock.Mock() message2.usage_metadata = None @@ -434,6 +443,7 @@ async def test_receive_transcript_finished_on_turn_complete( message2.server_content.grounding_metadata = None message2.tool_call = None message2.session_resumption_update = None + message2.go_away = None message3 = mock.Mock() message3.usage_metadata = None @@ -447,6 +457,7 @@ async def test_receive_transcript_finished_on_turn_complete( message3.server_content.grounding_metadata = None message3.tool_call = None message3.session_resumption_update = None + message3.go_away = None async def mock_receive_generator(): yield message1 @@ -494,6 +505,7 @@ async def test_receive_handles_input_transcription_fragments( message1.server_content.grounding_metadata = None message1.tool_call = None message1.session_resumption_update = None + message1.go_away = None message2 = mock.Mock() message2.usage_metadata = None @@ -509,6 +521,7 @@ async def test_receive_handles_input_transcription_fragments( message2.server_content.grounding_metadata = None message2.tool_call = None message2.session_resumption_update = None + message2.go_away = None message3 = mock.Mock() message3.usage_metadata = None @@ -524,6 +537,7 @@ async def test_receive_handles_input_transcription_fragments( message3.server_content.grounding_metadata = None message3.tool_call = None message3.session_resumption_update = None + message3.go_away = None async def mock_receive_generator(): yield message1 @@ -566,6 +580,7 @@ async def test_receive_handles_output_transcription_fragments( message1.server_content.grounding_metadata = None message1.tool_call = None message1.session_resumption_update = None + message1.go_away = None message2 = mock.Mock() message2.usage_metadata = None @@ -581,6 +596,7 @@ async def test_receive_handles_output_transcription_fragments( message2.server_content.grounding_metadata = None message2.tool_call = None message2.session_resumption_update = None + message2.go_away = None message3 = mock.Mock() message3.usage_metadata = None @@ -596,6 +612,7 @@ async def test_receive_handles_output_transcription_fragments( message3.server_content.grounding_metadata = None message3.tool_call = None message3.session_resumption_update = None + message3.go_away = None async def mock_receive_generator(): yield message1 @@ -819,6 +836,7 @@ async def test_receive_grounding_metadata_standalone( mock_message.server_content = mock_server_content mock_message.tool_call = None mock_message.session_resumption_update = None + mock_message.go_away = None async def mock_receive_generator(): yield mock_message @@ -862,6 +880,7 @@ async def test_receive_grounding_metadata_with_content( mock_message.server_content = mock_server_content mock_message.tool_call = None mock_message.session_resumption_update = None + mock_message.go_away = None async def mock_receive_generator(): yield mock_message @@ -894,6 +913,7 @@ async def test_receive_tool_call_and_grounding_metadata_with_native_audio( mock_tool_call_msg.usage_metadata = None mock_tool_call_msg.server_content = None mock_tool_call_msg.session_resumption_update = None + mock_tool_call_msg.go_away = None function_call = types.FunctionCall( name='enterprise_web_search', @@ -932,6 +952,7 @@ async def test_receive_tool_call_and_grounding_metadata_with_native_audio( mock_metadata_msg.server_content = mock_server_content mock_metadata_msg.tool_call = None mock_metadata_msg.session_resumption_update = None + mock_metadata_msg.go_away = None # 3. Message with turn_complete mock_turn_complete_content = mock.create_autospec( @@ -951,6 +972,7 @@ async def test_receive_tool_call_and_grounding_metadata_with_native_audio( mock_turn_complete_msg.server_content = mock_turn_complete_content mock_turn_complete_msg.tool_call = None mock_turn_complete_msg.session_resumption_update = None + mock_turn_complete_msg.go_away = None async def mock_receive_generator(): yield mock_tool_call_msg @@ -1000,6 +1022,7 @@ async def test_receive_multiple_tool_calls_buffered_until_turn_complete( mock_tool_call_msg1.usage_metadata = None mock_tool_call_msg1.server_content = None mock_tool_call_msg1.session_resumption_update = None + mock_tool_call_msg1.go_away = None function_call1 = types.FunctionCall( name='tool_1', @@ -1018,6 +1041,7 @@ async def test_receive_multiple_tool_calls_buffered_until_turn_complete( mock_tool_call_msg2.usage_metadata = None mock_tool_call_msg2.server_content = None mock_tool_call_msg2.session_resumption_update = None + mock_tool_call_msg2.go_away = None function_call2 = types.FunctionCall( name='tool_2', @@ -1047,6 +1071,7 @@ async def test_receive_multiple_tool_calls_buffered_until_turn_complete( mock_turn_complete_msg.server_content = mock_turn_complete_content mock_turn_complete_msg.tool_call = None mock_turn_complete_msg.session_resumption_update = None + mock_turn_complete_msg.go_away = None async def mock_receive_generator(): yield mock_tool_call_msg1 @@ -1072,3 +1097,26 @@ async def mock_receive_generator(): # Second response: turn_complete True assert responses[1].turn_complete is True + + +@pytest.mark.asyncio +async def test_receive_go_away(gemini_connection, mock_gemini_session): + """Test receive yields go_away message.""" + mock_go_away = types.LiveServerGoAway(timeLeft='10s') + mock_msg = mock.MagicMock() + mock_msg.usage_metadata = None + mock_msg.server_content = None + mock_msg.tool_call = None + mock_msg.session_resumption_update = None + mock_msg.go_away = mock_go_away + + async def mock_receive_generator(): + yield mock_msg + + receive_mock = mock.Mock(return_value=mock_receive_generator()) + mock_gemini_session.receive = receive_mock + + responses = [resp async for resp in gemini_connection.receive()] + + assert len(responses) == 1 + assert responses[0].go_away == mock_go_away From d62558cc2d7d6c0372e43c9f009c8c7a6863ff0a Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Wed, 8 Apr 2026 16:25:31 -0700 Subject: [PATCH 161/192] fix: Custom pickling in McpToolset to exclude unpicklable objects like errlog Co-authored-by: Kathy Wu PiperOrigin-RevId: 896761013 --- src/google/adk/tools/mcp_tool/mcp_toolset.py | 15 ++++++++++++++- .../unittests/tools/mcp_tool/test_mcp_toolset.py | 11 ++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/google/adk/tools/mcp_tool/mcp_toolset.py b/src/google/adk/tools/mcp_tool/mcp_toolset.py index 39fe81ef33..a412cf2a4e 100644 --- a/src/google/adk/tools/mcp_tool/mcp_toolset.py +++ b/src/google/adk/tools/mcp_tool/mcp_toolset.py @@ -48,7 +48,6 @@ from ..load_mcp_resource_tool import LoadMcpResourceTool from ..tool_configs import BaseToolConfig from ..tool_configs import ToolArgsConfig -from ..tool_context import ToolContext from .mcp_session_manager import MCPSessionManager from .mcp_session_manager import retry_on_errors from .mcp_session_manager import SseConnectionParams @@ -448,6 +447,20 @@ def from_config( use_mcp_resources=mcp_toolset_config.use_mcp_resources, ) + def __getstate__(self): + """Custom pickling to exclude non-picklable runtime objects.""" + state = self.__dict__.copy() + # Remove unpicklable file-like objects + state.pop("_errlog", None) + return state + + def __setstate__(self, state): + """Custom unpickling to restore state.""" + self.__dict__.update(state) + # Default to sys.stderr if _errlog was removed during pickling + if not hasattr(self, "_errlog") or self._errlog is None: + self._errlog = sys.stderr + class MCPToolset(McpToolset): """Deprecated name, use `McpToolset` instead.""" diff --git a/tests/unittests/tools/mcp_tool/test_mcp_toolset.py b/tests/unittests/tools/mcp_tool/test_mcp_toolset.py index ddb2347478..ae5c37473e 100644 --- a/tests/unittests/tools/mcp_tool/test_mcp_toolset.py +++ b/tests/unittests/tools/mcp_tool/test_mcp_toolset.py @@ -15,13 +15,11 @@ import asyncio import base64 from io import StringIO -import json +import pickle import sys -import unittest from unittest.mock import AsyncMock from unittest.mock import MagicMock from unittest.mock import Mock -from unittest.mock import patch from fastapi.openapi.models import OAuth2 from google.adk.agents.readonly_context import ReadonlyContext @@ -674,3 +672,10 @@ async def test_get_auth_headers_includes_additional_headers(self): assert headers["Authorization"] == "Bearer token" assert headers["X-API-Key"] == "secret" + + def test_pickle_mcp_toolset(self): + toolset = McpToolset(connection_params=self.mock_stdio_params) + pickled = pickle.dumps(toolset) + unpickled = pickle.loads(pickled) + assert unpickled._connection_params == self.mock_stdio_params + assert unpickled._errlog == sys.stderr From 0fedb3b5eb2074999d8ccdb839e054ea80da486f Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Wed, 8 Apr 2026 17:08:00 -0700 Subject: [PATCH 162/192] fix: Change express mode user flow so it's more clear that an express mode project is being created Also adds link to express mode so the user knows that it is Co-authored-by: Kathy Wu PiperOrigin-RevId: 896778982 --- src/google/adk/cli/cli_create.py | 87 ++++++++++-------- tests/unittests/cli/utils/test_cli_create.py | 94 +++++++++++--------- 2 files changed, 100 insertions(+), 81 deletions(-) diff --git a/src/google/adk/cli/cli_create.py b/src/google/adk/cli/cli_create.py index f5a5810d01..a563d6adf3 100644 --- a/src/google/adk/cli/cli_create.py +++ b/src/google/adk/cli/cli_create.py @@ -327,48 +327,61 @@ def _handle_login_with_google() -> ( selected_project_id = projects[project_index - 1][0] region = _prompt_for_google_cloud_region(None) return None, selected_project_id, region - else: - if click.confirm( - "No projects found automatically. Would you like to enter one" - " manually?", - default=False, - ): - selected_project_id = _prompt_for_google_cloud(None) - region = _prompt_for_google_cloud_region(None) - return None, selected_project_id, region - - # Check Express eligibility - if gcp_utils.check_express_eligibility(): - click.secho(_EXPRESS_TOS_MSG, fg="yellow") - if click.confirm("Do you accept the Terms of Service?", default=False): - selected_region = click.prompt( - """\ + + click.secho( + "A Google Cloud project is required to continue. You can enter an" + " existing project ID or create an Express Mode project. Learn more:" + " https://cloud.google.com/resources/cloud-express-faqs", + fg="green", + ) + action = click.prompt( + "1. Enter an existing Google Cloud project ID\n" + "2. Create a new project (Express Mode)\n" + "3. Abandon\n" + "Choose an action", + type=click.Choice(["1", "2", "3"]), + ) + + if action == "3": + raise click.Abort() + + if action == "1": + google_cloud_project = _prompt_for_google_cloud(None) + google_cloud_region = _prompt_for_google_cloud_region(None) + return None, google_cloud_project, google_cloud_region + + elif action == "2": + if gcp_utils.check_express_eligibility(): + click.secho(_EXPRESS_TOS_MSG, fg="yellow") + if click.confirm("Do you accept the Terms of Service?", default=False): + selected_region = click.prompt( + """\ Choose a region for Express Mode: 1. us-central1 2. europe-west1 3. asia-southeast1 Choose region""", - type=click.Choice(["1", "2", "3"]), - default="1", - ) - region_map = { - "1": "us-central1", - "2": "europe-west1", - "3": "asia-southeast1", - } - region = region_map[selected_region] - express_info = gcp_utils.sign_up_express(location=region) - api_key = express_info.get("api_key") - project_id = express_info.get("project_id") - region = express_info.get("region", region) - click.secho( - f"Express Mode project created: {project_id}", - fg="green", - ) - return api_key, project_id, region - - click.secho(_NOT_ELIGIBLE_MSG, fg="red") - raise click.Abort() + type=click.Choice(["1", "2", "3"]), + default="1", + ) + region_map = { + "1": "us-central1", + "2": "europe-west1", + "3": "asia-southeast1", + } + region = region_map[selected_region] + express_info = gcp_utils.sign_up_express(location=region) + api_key = express_info.get("api_key") + project_id = express_info.get("project_id") + region = express_info.get("region", region) + click.secho( + f"Express Mode project created: {project_id}", + fg="green", + ) + return api_key, project_id, region + + click.secho(_NOT_ELIGIBLE_MSG, fg="red") + raise click.Abort() def _prompt_to_choose_type() -> str: diff --git a/tests/unittests/cli/utils/test_cli_create.py b/tests/unittests/cli/utils/test_cli_create.py index 520245b3fc..892e5229a7 100644 --- a/tests/unittests/cli/utils/test_cli_create.py +++ b/tests/unittests/cli/utils/test_cli_create.py @@ -356,17 +356,51 @@ def test_handle_login_with_google_select_gcp_project( assert region == "us-east1" -def test_handle_login_with_google_express_signup( +def test_handle_login_with_google_manual_project( monkeypatch: pytest.MonkeyPatch, ) -> None: - """Handler should sign up for Express if eligible and user accepts TOS.""" + """Handler should allow manual project ID entry when '0' is selected.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr( + gcp_utils, "list_gcp_projects", lambda limit: [("p1", "Project 1")] + ) + prompts = iter([0, "manual-proj", "us-east1"]) + monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key is None + assert proj == "manual-proj" + assert region == "us-east1" + + +def test_handle_login_with_google_option_1( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """User selects 1, enters project ID and region.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr(gcp_utils, "list_gcp_projects", lambda limit: []) + prompts = iter(["1", "test-proj", "us-east1"]) + monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key is None + assert proj == "test-proj" + assert region == "us-east1" + + +def test_handle_login_with_google_option_2( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """User selects 2, goes through express sign up.""" monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) monkeypatch.setattr(gcp_utils, "list_gcp_projects", lambda limit: []) monkeypatch.setattr(gcp_utils, "check_express_eligibility", lambda: True) - confirms = iter([False, True]) - monkeypatch.setattr(click, "confirm", lambda *a, **k: next(confirms)) - monkeypatch.setattr(click, "prompt", lambda *a, **k: "1") + monkeypatch.setattr(click, "confirm", lambda *a, **k: True) + prompts = iter(["2", "1"]) + monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) monkeypatch.setattr( gcp_utils, "sign_up_express", @@ -383,6 +417,17 @@ def test_handle_login_with_google_express_signup( assert region == "us-central1" +def test_handle_login_with_google_option_3( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """User selects 3, aborts.""" + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr(gcp_utils, "list_gcp_projects", lambda limit: []) + monkeypatch.setattr(click, "prompt", lambda *a, **k: "3") + with pytest.raises(click.Abort): + cli_create._handle_login_with_google() + + # prompt_str def test_prompt_str_non_empty(monkeypatch: pytest.MonkeyPatch) -> None: """_prompt_str should retry until a non-blank string is provided.""" @@ -416,42 +461,3 @@ def test_get_gcp_region_from_gcloud_fail( ), ) assert cli_create._get_gcp_region_from_gcloud() == "" - - -def test_handle_login_with_google_manual_project( - monkeypatch: pytest.MonkeyPatch, -) -> None: - """Handler should allow manual project ID entry when '0' is selected.""" - monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) - monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) - monkeypatch.setattr( - gcp_utils, "list_gcp_projects", lambda limit: [("p1", "Project 1")] - ) - # First prompt is for project selection (0), second is for manual ID entry, - # third is for region selection. - prompts = iter([0, "manual-proj", "us-east1"]) - monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) - - api_key, proj, region = cli_create._handle_login_with_google() - assert api_key is None - assert proj == "manual-proj" - assert region == "us-east1" - - -def test_handle_login_with_google_empty_projects_manual_entry( - monkeypatch: pytest.MonkeyPatch, -) -> None: - """Handler should allow manual entry if no projects are found and user accepts.""" - monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) - monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) - monkeypatch.setattr(gcp_utils, "list_gcp_projects", lambda limit: []) - - # User says Yes to "enter manually", then provides project ID and region - prompts = iter(["manual-proj", "us-east1"]) - monkeypatch.setattr(click, "confirm", lambda *a, **k: True) - monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) - - api_key, proj, region = cli_create._handle_login_with_google() - assert api_key is None - assert proj == "manual-proj" - assert region == "us-east1" From b0715d77a2a433bb2ed07a2475cc4d1f2d662b6c Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Wed, 8 Apr 2026 19:30:50 -0700 Subject: [PATCH 163/192] feat: Add Parameter Manager integration to ADK Parameter Manager is a feature of Secret Manager that provides centralized storage and management for workload parameters. It supports various formats (plain text, YAML, JSON) and can reference Secret Manager secrets. The ADK integration will provide a simplified interface for agents to retrieve rendered parameter values, supporting both global and regional endpoints. PiperOrigin-RevId: 896823376 --- pyproject.toml | 2 + .../parameter_manager/__init__.py | 19 ++ .../parameter_manager/parameter_client.py | 138 +++++++++++ .../parameter_manager/__init__.py | 13 + .../test_parameter_client.py | 222 ++++++++++++++++++ 5 files changed, 394 insertions(+) create mode 100644 src/google/adk/integrations/parameter_manager/__init__.py create mode 100644 src/google/adk/integrations/parameter_manager/parameter_client.py create mode 100644 tests/unittests/integrations/parameter_manager/__init__.py create mode 100644 tests/unittests/integrations/parameter_manager/test_parameter_client.py diff --git a/pyproject.toml b/pyproject.toml index 2789bcf82a..3a2a587b5d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -123,6 +123,7 @@ test = [ "a2a-sdk>=0.3.0,<0.4.0", "anthropic>=0.43.0", # For anthropic model tests "crewai[tools];python_version>='3.11' and python_version<'3.12'", # For CrewaiTool tests; chromadb/pypika fail on 3.12+ + "google-cloud-parametermanager>=0.4.0, <1.0.0", "kubernetes>=29.0.0", # For GkeCodeExecutor "langchain-community>=0.3.17", "langgraph>=0.2.60, <0.4.8", # For LangGraphAgent @@ -157,6 +158,7 @@ extensions = [ "beautifulsoup4>=3.2.2", # For load_web_page tool. "crewai[tools];python_version>='3.11' and python_version<'3.12'", # For CrewaiTool; chromadb/pypika fail on 3.12+ "docker>=7.0.0", # For ContainerCodeExecutor + "google-cloud-parametermanager>=0.4.0, <1.0.0", "kubernetes>=29.0.0", # For GkeCodeExecutor "k8s-agent-sandbox>=0.1.1.post3", # For GkeCodeExecutor sandbox mode "langgraph>=0.2.60, <0.4.8", # For LangGraphAgent diff --git a/src/google/adk/integrations/parameter_manager/__init__.py b/src/google/adk/integrations/parameter_manager/__init__.py new file mode 100644 index 0000000000..87ac216afb --- /dev/null +++ b/src/google/adk/integrations/parameter_manager/__init__.py @@ -0,0 +1,19 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .parameter_client import ParameterManagerClient + +__all__ = [ + 'ParameterManagerClient', +] diff --git a/src/google/adk/integrations/parameter_manager/parameter_client.py b/src/google/adk/integrations/parameter_manager/parameter_client.py new file mode 100644 index 0000000000..85b1355277 --- /dev/null +++ b/src/google/adk/integrations/parameter_manager/parameter_client.py @@ -0,0 +1,138 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import json +from typing import cast +from typing import Optional + +import google.auth +from google.auth import default as default_service_credential +import google.auth.transport.requests +from google.cloud import parametermanager_v1 +from google.oauth2 import service_account + + +class ParameterManagerClient: + """A client for interacting with Google Cloud Parameter Manager. + + This class provides a simplified interface for retrieving parameters from + Parameter Manager, handling authentication using either a service account + JSON keyfile (passed as a string), a preexisting authorization token, or + default credentials. + + Attributes: + _credentials: Google Cloud credentials object (ServiceAccountCredentials + or Credentials). + _client: Parameter Manager client instance. + """ + + def __init__( + self, + service_account_json: Optional[str] = None, + auth_token: Optional[str] = None, + location: Optional[str] = None, + ): + """Initializes the ParameterManagerClient. + + If neither `service_account_json` nor `auth_token` is provided, default + credentials are used. + + Args: + service_account_json: The content of a service account JSON keyfile (as + a string), not the file path. Must be valid JSON. + auth_token: An existing Google Cloud authorization token. + location: The Google Cloud location (region) to use for the Parameter + Manager service. If not provided, the global endpoint is used. + + Raises: + ValueError: If both 'service_account_json' and 'auth_token' are + provided. Also raised if the 'service_account_json' is not valid JSON. + google.auth.exceptions.GoogleAuthError: If authentication fails. + """ + if service_account_json and auth_token: + raise ValueError( + "Must provide either 'service_account_json' or 'auth_token', not" + " both." + ) + + if service_account_json: + try: + credentials = service_account.Credentials.from_service_account_info( + json.loads(service_account_json) + ) + except json.JSONDecodeError as e: + raise ValueError(f"Invalid service account JSON: {e}") from e + elif auth_token: + credentials = google.auth.credentials.Credentials( + token=auth_token, + refresh_token=None, + token_uri=None, + client_id=None, + client_secret=None, + ) + request = google.auth.transport.requests.Request() + credentials.refresh(request) + else: + try: + credentials, _ = default_service_credential( + scopes=["https://www.googleapis.com/auth/cloud-platform"] + ) + except Exception as e: + raise ValueError( + "'service_account_json' or 'auth_token' are both missing, and" + " error occurred while trying to use default credentials: {e}" + ) from e + + if not credentials: + raise ValueError( + "Failed to obtain credentials. Provide either 'service_account_json'" + " or 'auth_token', not both. If neither is provided, default" + " credentials are used." + ) + + self._credentials = credentials + + client_options = None + if location: + client_options = { + "api_endpoint": f"parametermanager.{location}.rep.googleapis.com" + } + + self._client = parametermanager_v1.ParameterManagerClient( + credentials=self._credentials, client_options=client_options + ) + + def get_parameter(self, resource_name: str) -> str: + """Retrieves a rendered parameter value from Google Cloud Parameter Manager. + + Args: + resource_name: The full resource name of the parameter version, in the + format "projects/*/locations/*/parameters/*/versions/*". Usually you + want the "latest" version, e.g., + "projects/my-project/locations/global/parameters/my-param/versions/latest". + + Returns: + The rendered parameter value as a string. + + Raises: + google.api_core.exceptions.GoogleAPIError: If the Parameter Manager API + returns an error (e.g., parameter not found, permission denied). + """ + request = parametermanager_v1.RenderParameterVersionRequest( + name=resource_name + ) + response = self._client.render_parameter_version(request=request) + return cast(str, response.rendered_payload.decode("UTF-8")) diff --git a/tests/unittests/integrations/parameter_manager/__init__.py b/tests/unittests/integrations/parameter_manager/__init__.py new file mode 100644 index 0000000000..58d482ea38 --- /dev/null +++ b/tests/unittests/integrations/parameter_manager/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unittests/integrations/parameter_manager/test_parameter_client.py b/tests/unittests/integrations/parameter_manager/test_parameter_client.py new file mode 100644 index 0000000000..a35df06f0d --- /dev/null +++ b/tests/unittests/integrations/parameter_manager/test_parameter_client.py @@ -0,0 +1,222 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unit tests for the ParameterManagerClient.""" + +import json +from unittest.mock import MagicMock +from unittest.mock import patch + +from google.adk.integrations.parameter_manager.parameter_client import ParameterManagerClient +import pytest + + +class TestParameterManagerClient: + """Tests for the ParameterManagerClient class.""" + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + @patch( + "google.adk.integrations.parameter_manager.parameter_client.default_service_credential" + ) + def test_init_with_default_credentials( + self, mock_default_service_credential, mock_pm_client_class + ): + """Test initialization with default credentials.""" + # Setup + mock_credentials = MagicMock() + mock_default_service_credential.return_value = ( + mock_credentials, + "test-project", + ) + + # Execute + client = ParameterManagerClient() + + # Verify + mock_default_service_credential.assert_called_once_with( + scopes=["https://www.googleapis.com/auth/cloud-platform"] + ) + mock_pm_client_class.assert_called_once_with( + credentials=mock_credentials, client_options=None + ) + assert client._credentials == mock_credentials + assert client._client == mock_pm_client_class.return_value + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + @patch("google.oauth2.service_account.Credentials.from_service_account_info") + def test_init_with_service_account_json( + self, mock_from_service_account_info, mock_pm_client_class + ): + """Test initialization with service account JSON.""" + # Setup + mock_credentials = MagicMock() + mock_from_service_account_info.return_value = mock_credentials + service_account_json = json.dumps({ + "type": "service_account", + "project_id": "test-project", + "private_key_id": "key-id", + "private_key": "private-key", + "client_email": "test@example.com", + }) + + # Execute + client = ParameterManagerClient(service_account_json=service_account_json) + + # Verify + mock_from_service_account_info.assert_called_once_with( + json.loads(service_account_json) + ) + mock_pm_client_class.assert_called_once_with( + credentials=mock_credentials, client_options=None + ) + assert client._credentials == mock_credentials + assert client._client == mock_pm_client_class.return_value + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + def test_init_with_auth_token(self, mock_pm_client_class): + """Test initialization with auth token.""" + # Setup + auth_token = "test-token" + mock_credentials = MagicMock() + + with ( + patch("google.auth.credentials.Credentials") as mock_credentials_class, + patch("google.auth.transport.requests.Request") as mock_request, + ): + mock_credentials_class.return_value = mock_credentials + + # Execute + client = ParameterManagerClient(auth_token=auth_token) + + # Verify + mock_credentials.refresh.assert_called_once() + mock_pm_client_class.assert_called_once_with( + credentials=mock_credentials, client_options=None + ) + assert client._credentials == mock_credentials + assert client._client == mock_pm_client_class.return_value + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + @patch( + "google.adk.integrations.parameter_manager.parameter_client.default_service_credential" + ) + def test_init_with_location( + self, mock_default_service_credential, mock_pm_client_class + ): + """Test initialization with a specific location.""" + # Setup + mock_credentials = MagicMock() + mock_default_service_credential.return_value = ( + mock_credentials, + "test-project", + ) + location = "us-central1" + + # Execute + ParameterManagerClient(location=location) + + # Verify + mock_pm_client_class.assert_called_once_with( + credentials=mock_credentials, + client_options={ + "api_endpoint": f"parametermanager.{location}.rep.googleapis.com" + }, + ) + + @patch( + "google.adk.integrations.parameter_manager.parameter_client.default_service_credential" + ) + def test_init_with_default_credentials_error( + self, mock_default_service_credential + ): + """Test initialization with default credentials that fails.""" + # Setup + mock_default_service_credential.side_effect = Exception("Auth error") + + # Execute and verify + with pytest.raises( + ValueError, + match="error occurred while trying to use default credentials", + ): + ParameterManagerClient() + + def test_init_with_invalid_service_account_json(self): + """Test initialization with invalid service account JSON.""" + # Execute and verify + with pytest.raises(ValueError, match="Invalid service account JSON"): + ParameterManagerClient(service_account_json="invalid-json") + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + @patch( + "google.adk.integrations.parameter_manager.parameter_client.default_service_credential" + ) + def test_get_parameter( + self, mock_default_service_credential, mock_pm_client_class + ): + """Test getting a parameter.""" + # Setup + mock_credentials = MagicMock() + mock_default_service_credential.return_value = ( + mock_credentials, + "test-project", + ) + + mock_client = MagicMock() + mock_pm_client_class.return_value = mock_client + mock_response = MagicMock() + mock_response.rendered_payload.decode.return_value = "parameter-value" + mock_client.render_parameter_version.return_value = mock_response + + # Execute + client = ParameterManagerClient() + result = client.get_parameter( + "projects/test-project/locations/global/parameters/test-param/versions/latest" + ) + + # Verify + assert result == "parameter-value" + mock_response.rendered_payload.decode.assert_called_once_with("UTF-8") + # Verify render_parameter_version was called with correct request object + call_kwargs = mock_client.render_parameter_version.call_args.kwargs + assert ( + call_kwargs["request"].name + == "projects/test-project/locations/global/parameters/test-param/versions/latest" + ) + mock_response.rendered_payload.decode.assert_called_once_with("UTF-8") + + @patch("google.cloud.parametermanager_v1.ParameterManagerClient") + @patch( + "google.adk.integrations.parameter_manager.parameter_client.default_service_credential" + ) + def test_get_parameter_error( + self, mock_default_service_credential, mock_pm_client_class + ): + """Test getting a parameter that fails.""" + # Setup + mock_credentials = MagicMock() + mock_default_service_credential.return_value = ( + mock_credentials, + "test-project", + ) + + mock_client = MagicMock() + mock_pm_client_class.return_value = mock_client + mock_client.render_parameter_version.side_effect = Exception("API error") + + # Execute and verify + client = ParameterManagerClient() + with pytest.raises(Exception, match="API error"): + client.get_parameter( + "projects/test-project/locations/global/parameters/test-param/versions/latest" + ) From dcc485b23e3509e2e386636d841033b91c9a401c Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 9 Apr 2026 00:31:36 -0700 Subject: [PATCH 164/192] feat: emit a `TaskStatusUpdateEvent` for ADK events with no output parts but with event.actions PiperOrigin-RevId: 896929519 --- .../adk/a2a/converters/from_adk_event.py | 22 ++++++++++++++++++- .../a2a/integration/test_client_server.py | 11 ++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/google/adk/a2a/converters/from_adk_event.py b/src/google/adk/a2a/converters/from_adk_event.py index 05bf16d167..d64c1940fa 100644 --- a/src/google/adk/a2a/converters/from_adk_event.py +++ b/src/google/adk/a2a/converters/from_adk_event.py @@ -218,6 +218,23 @@ def convert_event_to_a2a_events( ), ) ) + elif _serialize_value(event.actions) is not None: + a2a_events.append( + TaskStatusUpdateEvent( + task_id=task_id, + context_id=context_id, + status=TaskStatus( + state=TaskState.working, + message=Message( + message_id=str(uuid.uuid4()), + role=Role.agent, + parts=[], + ), + timestamp=datetime.now(timezone.utc).isoformat(), + ), + final=False, + ) + ) a2a_events = _add_event_metadata(event, a2a_events) return a2a_events @@ -280,7 +297,10 @@ def _add_event_metadata( metadata[_get_adk_metadata_key(field_name)] = value for a2a_event in a2a_events: - if isinstance(a2a_event, TaskStatusUpdateEvent): + if ( + isinstance(a2a_event, TaskStatusUpdateEvent) + and a2a_event.status.message + ): a2a_event.status.message.metadata = metadata.copy() elif isinstance(a2a_event, TaskArtifactUpdateEvent): a2a_event.artifact.metadata = metadata.copy() diff --git a/tests/unittests/a2a/integration/test_client_server.py b/tests/unittests/a2a/integration/test_client_server.py index 3318efb84e..55fd4b6b4c 100644 --- a/tests/unittests/a2a/integration/test_client_server.py +++ b/tests/unittests/a2a/integration/test_client_server.py @@ -21,6 +21,7 @@ from a2a.types import TextPart from google.adk.agents.remote_a2a_agent import A2A_METADATA_PREFIX from google.adk.events.event import Event +from google.adk.events.event_actions import EventActions from google.adk.platform import uuid as platform_uuid from google.adk.runners import Runner from google.adk.sessions.in_memory_session_service import InMemorySessionService @@ -47,6 +48,11 @@ async def mock_run_async(**kwargs): content=types.Content(parts=[types.Part(text=" world")]), partial=True, ) + yield Event( + author="FakeAgent", + partial=True, + actions=EventActions(artifact_delta={"file1": 1}), + ) yield Event( author="FakeAgent", content=types.Content(parts=[types.Part(text="Hello world")]), @@ -92,6 +98,7 @@ async def test_streaming_adk_to_streaming_a2a(): new_message = types.Content(parts=[types.Part(text="Hi")], role="user") texts = [] + actions = [] async for event in client_runner.run_async( user_id="test_user", session_id="test_session", new_message=new_message ): @@ -99,11 +106,15 @@ async def test_streaming_adk_to_streaming_a2a(): for p in event.content.parts: if p.text: texts.append(p.text) + if event.actions and event.actions.artifact_delta: + actions.append(event.actions) assert len(received_requests) == 1 assert received_requests[0]["session_id"] is not None assert texts == ["Hello", " world", "Hello world"] + assert len(actions) == 1 + assert actions[0].artifact_delta == {"file1": 1} @pytest.mark.asyncio From e63d991be84e373fd31be29d4b6b0e32fdbde557 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 9 Apr 2026 09:05:18 -0700 Subject: [PATCH 165/192] feat: allow users to include artifacts from artifact_service in A2A events using provided interceptor PiperOrigin-RevId: 897143688 --- .../adk/a2a/executor/a2a_agent_executor.py | 10 +-- .../a2a/executor/a2a_agent_executor_impl.py | 8 +- src/google/adk/a2a/executor/config.py | 2 +- .../adk/a2a/executor/interceptors/__init__.py | 19 +++++ .../include_artifacts_in_a2a_event.py | 73 +++++++++++++++++++ src/google/adk/a2a/executor/utils.py | 22 ++++-- tests/unittests/a2a/integration/server.py | 17 ++++- .../a2a/integration/test_client_server.py | 50 +++++++++++++ 8 files changed, 181 insertions(+), 20 deletions(-) create mode 100644 src/google/adk/a2a/executor/interceptors/__init__.py create mode 100644 src/google/adk/a2a/executor/interceptors/include_artifacts_in_a2a_event.py diff --git a/src/google/adk/a2a/executor/a2a_agent_executor.py b/src/google/adk/a2a/executor/a2a_agent_executor.py index 9288bb4828..a9b55f526e 100644 --- a/src/google/adk/a2a/executor/a2a_agent_executor.py +++ b/src/google/adk/a2a/executor/a2a_agent_executor.py @@ -260,17 +260,15 @@ async def _handle_request( context.context_id, self._config.gen_ai_part_converter, ): - a2a_event = await execute_after_event_interceptors( + a2a_events = await execute_after_event_interceptors( a2a_event, executor_context, adk_event, self._config.execute_interceptors, ) - if a2a_event is None: - continue - - task_result_aggregator.process_event(a2a_event) - await event_queue.enqueue_event(a2a_event) + for e in a2a_events: + task_result_aggregator.process_event(e) + await event_queue.enqueue_event(e) # publish the task result event - this is final if ( diff --git a/src/google/adk/a2a/executor/a2a_agent_executor_impl.py b/src/google/adk/a2a/executor/a2a_agent_executor_impl.py index 21ec967caf..320af124df 100644 --- a/src/google/adk/a2a/executor/a2a_agent_executor_impl.py +++ b/src/google/adk/a2a/executor/a2a_agent_executor_impl.py @@ -49,6 +49,7 @@ from ..experimental import a2a_experimental from .config import A2aAgentExecutorConfig from .executor_context import ExecutorContext +from .interceptors.include_artifacts_in_a2a_event import include_artifacts_in_a2a_event_interceptor from .utils import execute_after_agent_interceptors from .utils import execute_after_event_interceptors from .utils import execute_before_agent_interceptors @@ -221,15 +222,14 @@ async def _handle_request( self._config.gen_ai_part_converter, ): a2a_event.metadata = self._get_invocation_metadata(executor_context) - a2a_event = await execute_after_event_interceptors( + a2a_events = await execute_after_event_interceptors( a2a_event, executor_context, adk_event, self._config.execute_interceptors, ) - if not a2a_event: - continue - await event_queue.enqueue_event(a2a_event) + for e in a2a_events: + await event_queue.enqueue_event(e) if error_event: final_event = error_event diff --git a/src/google/adk/a2a/executor/config.py b/src/google/adk/a2a/executor/config.py index c083affdf3..0bb639f329 100644 --- a/src/google/adk/a2a/executor/config.py +++ b/src/google/adk/a2a/executor/config.py @@ -57,7 +57,7 @@ class ExecuteInterceptor: after_event: Optional[ Callable[ [ExecutorContext, A2AEvent, Event], - Awaitable[Union[A2AEvent, None]], + Awaitable[Union[A2AEvent, list[A2AEvent], None]], ] ] = None """Hook executed after an ADK event is converted to an A2A event. diff --git a/src/google/adk/a2a/executor/interceptors/__init__.py b/src/google/adk/a2a/executor/interceptors/__init__.py new file mode 100644 index 0000000000..5aa247608a --- /dev/null +++ b/src/google/adk/a2a/executor/interceptors/__init__.py @@ -0,0 +1,19 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .include_artifacts_in_a2a_event import include_artifacts_in_a2a_event_interceptor + +__all__ = [ + "include_artifacts_in_a2a_event_interceptor", +] diff --git a/src/google/adk/a2a/executor/interceptors/include_artifacts_in_a2a_event.py b/src/google/adk/a2a/executor/interceptors/include_artifacts_in_a2a_event.py new file mode 100644 index 0000000000..ce2dfd35b9 --- /dev/null +++ b/src/google/adk/a2a/executor/interceptors/include_artifacts_in_a2a_event.py @@ -0,0 +1,73 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from __future__ import annotations + +from typing import Union + +from a2a.server.events import Event as A2AEvent +from a2a.types import Artifact +from a2a.types import TaskArtifactUpdateEvent +from a2a.types import TaskStatusUpdateEvent +from google.adk.a2a.executor.config import ExecuteInterceptor +from google.adk.a2a.executor.config import ExecutorContext + +from ....events.event import Event +from ...converters.part_converter import convert_genai_part_to_a2a_part + + +async def _after_agent( + ctx: ExecutorContext, a2a_event: A2AEvent, adk_event: Event +) -> Union[A2AEvent, list[A2AEvent]]: + """After agent interceptor that includes artifacts in A2A events.""" + if isinstance(a2a_event, (TaskStatusUpdateEvent, TaskArtifactUpdateEvent)): + artifact_service = ctx.runner.artifact_service + if artifact_service and adk_event.actions.artifact_delta: + new_events = [] + for filename, version in adk_event.actions.artifact_delta.items(): + genai_part = await artifact_service.load_artifact( + app_name=ctx.app_name, + user_id=ctx.user_id, + session_id=ctx.session_id, + filename=filename, + version=version, + ) + if genai_part: + a2a_part = convert_genai_part_to_a2a_part(genai_part) + if a2a_part: + a2a_artifact = Artifact( + artifact_id=f"{filename}_{version}", + name=filename, + parts=[a2a_part], + ) + new_event = TaskArtifactUpdateEvent( + task_id=a2a_event.task_id, + context_id=a2a_event.context_id, + artifact=a2a_artifact, + metadata=a2a_event.metadata, + append=False, + last_chunk=True, + ) + new_events.append(new_event) + + adk_event.actions.artifact_delta = {} + + if new_events: + return [a2a_event] + new_events + + return a2a_event + + +include_artifacts_in_a2a_event_interceptor = ExecuteInterceptor( + after_event=_after_agent +) diff --git a/src/google/adk/a2a/executor/utils.py b/src/google/adk/a2a/executor/utils.py index d01066ea57..166c8ff743 100644 --- a/src/google/adk/a2a/executor/utils.py +++ b/src/google/adk/a2a/executor/utils.py @@ -41,16 +41,24 @@ async def execute_after_event_interceptors( executor_context: ExecutorContext, adk_event: Event, execute_interceptors: Optional[list[ExecuteInterceptor]], -) -> Optional[A2AEvent]: +) -> list[A2AEvent]: + events = [a2a_event] if execute_interceptors: for interceptor in execute_interceptors: if interceptor.after_event: - a2a_event = await interceptor.after_event( - executor_context, a2a_event, adk_event - ) - if a2a_event is None: - return None - return a2a_event + next_events = [] + for e in events: + res = await interceptor.after_event(executor_context, e, adk_event) + if res is None: + continue + if isinstance(res, list): + next_events.extend(res) + else: + next_events.append(res) + events = next_events + if not events: + return [] + return events async def execute_after_agent_interceptors( diff --git a/tests/unittests/a2a/integration/server.py b/tests/unittests/a2a/integration/server.py index 86a0e1d629..c965a71091 100644 --- a/tests/unittests/a2a/integration/server.py +++ b/tests/unittests/a2a/integration/server.py @@ -14,6 +14,7 @@ """A2A Server for integration tests.""" +from unittest.mock import AsyncMock from unittest.mock import Mock from a2a.server.apps.jsonrpc.fastapi_app import A2AFastAPIApplication @@ -23,9 +24,12 @@ from a2a.types import AgentCard from a2a.types import AgentSkill from google.adk.a2a.executor.a2a_agent_executor import A2aAgentExecutor +from google.adk.a2a.executor.config import A2aAgentExecutorConfig +from google.adk.a2a.executor.interceptors.include_artifacts_in_a2a_event import include_artifacts_in_a2a_event_interceptor from google.adk.agents.base_agent import BaseAgent from google.adk.runners import Runner from google.adk.sessions.in_memory_session_service import InMemorySessionService +from google.genai import types class FakeRunner(Runner): @@ -43,6 +47,12 @@ def __init__(self, run_async_fn): ) self.run_async_fn = run_async_fn + mock_artifact_service = Mock() + mock_artifact_service.load_artifact = AsyncMock( + return_value=types.Part(text="artifact content") + ) + self.artifact_service = mock_artifact_service + async def run_async(self, **kwargs): async for event in self.run_async_fn(**kwargs): yield event @@ -63,18 +73,21 @@ async def run_async(self, **kwargs): ) -def create_server_app(run_async_fn): +def create_server_app( + run_async_fn=None, config: A2aAgentExecutorConfig | None = None +): """Creates an A2A FastAPI application with a mocked runner. Args: run_async_fn: A generator function that takes **kwargs and yields Event objects. + include_artifacts: Whether to include artifacts in A2A events. Returns: A FastAPI application instance. """ runner = FakeRunner(run_async_fn) - executor = A2aAgentExecutor(runner=runner) + executor = A2aAgentExecutor(runner=runner, config=config) task_store = InMemoryTaskStore() handler = DefaultRequestHandler( agent_executor=executor, task_store=task_store diff --git a/tests/unittests/a2a/integration/test_client_server.py b/tests/unittests/a2a/integration/test_client_server.py index 55fd4b6b4c..bd1d72f617 100644 --- a/tests/unittests/a2a/integration/test_client_server.py +++ b/tests/unittests/a2a/integration/test_client_server.py @@ -19,6 +19,8 @@ from a2a.types import Task from a2a.types import TaskState from a2a.types import TextPart +from google.adk.a2a.executor.config import A2aAgentExecutorConfig +from google.adk.a2a.executor.interceptors.include_artifacts_in_a2a_event import include_artifacts_in_a2a_event_interceptor from google.adk.agents.remote_a2a_agent import A2A_METADATA_PREFIX from google.adk.events.event import Event from google.adk.events.event_actions import EventActions @@ -586,3 +588,51 @@ async def mock_run_async(**kwargs): ) assert last_event is not None + + +@pytest.mark.asyncio +async def test_include_artifacts_in_a2a_event(): + """Test that artifacts are included in A2A events when the interceptor is enabled.""" + + async def mock_run_async(**kwargs): + yield Event( + actions=EventActions(artifact_delta={"artifact1": 1, "artifact2": 1}), + author="agent", + content=types.Content( + parts=[types.Part(text="Here are the artifacts")] + ), + ) + + config = A2aAgentExecutorConfig( + execute_interceptors=[include_artifacts_in_a2a_event_interceptor] + ) + built_app = create_server_app(mock_run_async, config=config) + + a2a_client = create_a2a_client(built_app, streaming=False) + + request = A2AMessage( + message_id="test_message_id", + parts=[A2APart(root=TextPart(text="Hi"))], + role="user", + ) + + events = [] + async for event in a2a_client.send_message(request=request): + events.append(event) + + assert len(events) == 1 + + task = events[0][0] + assert isinstance(task, Task) + assert task.artifacts is not None + assert len(task.artifacts) == 3 + + assert task.artifacts[0].parts[0].root.text == "Here are the artifacts" + + assert task.artifacts[1].artifact_id == "artifact1_1" + assert task.artifacts[1].name == "artifact1" + assert task.artifacts[1].parts[0].root.text == "artifact content" + + assert task.artifacts[2].artifact_id == "artifact2_1" + assert task.artifacts[2].name == "artifact2" + assert task.artifacts[2].parts[0].root.text == "artifact content" From cb4dd42eff2df6d20c5e53211718ecb023f127fc Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 9 Apr 2026 10:22:15 -0700 Subject: [PATCH 166/192] fix: avoid load all agents in adk web server PiperOrigin-RevId: 897179529 --- src/google/adk/cli/adk_web_server.py | 14 +++++--------- tests/unittests/cli/test_fast_api.py | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/google/adk/cli/adk_web_server.py b/src/google/adk/cli/adk_web_server.py index 2833dfd466..86a2cf2495 100644 --- a/src/google/adk/cli/adk_web_server.py +++ b/src/google/adk/cli/adk_web_server.py @@ -706,14 +706,10 @@ async def get_runner_async(self, app_name: str) -> Runner: if plugins_config and isinstance(plugins_config, dict): bq_analytics_config = plugins_config.get("bigquery_agent_analytics") - # Determine if the agent was loaded from YAML based on the agent loader info - is_visual_builder = False - detailed_agents = self.agent_loader.list_agents_detailed() - for agent_info in detailed_agents: - if agent_info.get("name") == app_name: - if agent_info.get("language") == "yaml": - is_visual_builder = True - break + # All YAML agents are treated as visual builder agents. + is_visual_builder_agent = os.path.exists( + os.path.join(self.agents_dir, app_name, "root_agent.yaml") + ) if isinstance(agent_or_app, BaseAgent): plugins = extra_plugins_instances @@ -746,7 +742,7 @@ async def get_runner_async(self, app_name: str) -> Runner: agentic_app = agent_or_app # If the root agent was loaded from YAML, we treat it as being from Visual Builder - if is_visual_builder: + if is_visual_builder_agent: object.__setattr__(agentic_app, "_is_visual_builder_app", True) runner = self._create_runner(agentic_app) diff --git a/tests/unittests/cli/test_fast_api.py b/tests/unittests/cli/test_fast_api.py index 740220994a..3e63f31222 100755 --- a/tests/unittests/cli/test_fast_api.py +++ b/tests/unittests/cli/test_fast_api.py @@ -15,6 +15,7 @@ import asyncio import json import logging +import os from pathlib import Path import signal import tempfile @@ -600,6 +601,13 @@ def test_agent_with_bigquery_analytics_plugin( autospec=True, return_value=mock_eval_set_results_manager, ), + patch.object( + os.path, + "exists", + autospec=True, + side_effect=lambda p: p.endswith("plugins.yaml") + or p.endswith("root_agent.yaml"), + ), ): from google.adk.cli.adk_web_server import AdkWebServer @@ -2377,6 +2385,13 @@ async def run_async_capture( autospec=True, return_value=mock_eval_set_results_manager, ), + patch.object( + os.path, + "exists", + autospec=True, + side_effect=lambda p: "yaml_app" in p + and p.endswith("root_agent.yaml"), + ), ): app = get_fast_api_app( agents_dir=".", From 2cbb52306910fac994fe1d29bdfcfacb258703b4 Mon Sep 17 00:00:00 2001 From: "Wei (Jack) Sun" Date: Thu, 9 Apr 2026 11:58:12 -0700 Subject: [PATCH 167/192] feat(samples): add sample for skill activation via environment tools Merge https://github.com/google/adk-python/pull/5218 ### Link to Issue or Description of Change **1. Link to an existing issue (if applicable):** (None, this is a new sample) **2. Or, if no issue exists, describe the change:** **Problem:** There was no sample demonstrating how to use `LocalEnvironment` with `EnvironmentToolset` for manual skill activation (discovering and loading skills by reading files) instead of using the pre-configured `SkillToolset`. **Solution:** Created a new sample `local_environment_skill` that demonstrates this pattern: - Agent is instructed to find skills in `skills/` folder using the `find` command. - Agent loads skills by reading `SKILL.md` using the `ReadFile` tool. - Added a weather skill sample and reference data to demonstrate usage. ### Testing Plan **Unit Tests:** *(This is a sample/demonstration, so no new unit tests were added for the framework itself.)* **Manual End-to-End (E2E) Tests:** 1. Ran `adk web contributing/samples`. 2. Interacted with the agent in the Web UI. 3. Prompt: "Can you check the weather in Sunnyvale?" 4. Verified that the agent successfully used `find` to locate the skill, read `SKILL.md`, read `weather_info.md`, and answered correctly. ### Checklist - [x] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document. - [x] I have performed a self-review of my own code. - [x] I have commented my code, particularly in hard-to-understand areas. - [x] I have manually tested my changes end-to-end. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/5218 from google:samples/local_env_skill 39404309e8b9237a279ecd6ed14bb87eb84098f0 PiperOrigin-RevId: 897229752 --- .../samples/local_environment_skill/README.md | 24 +++++ .../local_environment_skill/__init__.py | 15 +++ .../samples/local_environment_skill/agent.py | 95 +++++++++++++++++++ .../skills/weather-skill/SKILL.md | 12 +++ .../weather-skill/references/weather_info.md | 11 +++ .../weather-skill/scripts/get_humidity.py | 29 ++++++ 6 files changed, 186 insertions(+) create mode 100644 contributing/samples/local_environment_skill/README.md create mode 100644 contributing/samples/local_environment_skill/__init__.py create mode 100644 contributing/samples/local_environment_skill/agent.py create mode 100644 contributing/samples/local_environment_skill/skills/weather-skill/SKILL.md create mode 100644 contributing/samples/local_environment_skill/skills/weather-skill/references/weather_info.md create mode 100644 contributing/samples/local_environment_skill/skills/weather-skill/scripts/get_humidity.py diff --git a/contributing/samples/local_environment_skill/README.md b/contributing/samples/local_environment_skill/README.md new file mode 100644 index 0000000000..22ba2fa016 --- /dev/null +++ b/contributing/samples/local_environment_skill/README.md @@ -0,0 +1,24 @@ +# Local Environment Skill Sample + +This sample demonstrates how to use the `LocalEnvironment` with the `EnvironmentToolset` to allow an agent to manually discover and load skills from the environment, rather than using the pre-configured `SkillToolset`. + +## Description + +The agent is configured with the `EnvironmentToolset` and is initialized with a `LocalEnvironment` pointing to the agent's directory. +Instead of having skills pre-loaded, the agent uses system instructions that guide it to search for skills in the `skills/` folder and load them by reading their `SKILL.md` files using the `ReadFile` tool. + +This demonstrates a "manual skill loading" pattern where the agent can acquire new capabilities dynamically by reading instructions from the environment. + +## Sample Usage + +You can interact with the agent by providing prompts that require a specific skill (like weather). + +### Example Prompt + +> "Can you check the weather in Sunnyvale?" + +### Expected Behavior + +1. **Find Skill**: The agent uses the `Execute` tool to search for all available skills by running `find skills -name SKILL.md`. +2. **Load Skill**: The agent identifies the relevant skill and uses the `ReadFile` tool to read its `SKILL.md` file. +3. **Execute Skill**: The agent follows the instructions in the skill file (e.g., reading references or running scripts) to answer the user's request. diff --git a/contributing/samples/local_environment_skill/__init__.py b/contributing/samples/local_environment_skill/__init__.py new file mode 100644 index 0000000000..4015e47d6e --- /dev/null +++ b/contributing/samples/local_environment_skill/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/local_environment_skill/agent.py b/contributing/samples/local_environment_skill/agent.py new file mode 100644 index 0000000000..aa07cc6a1e --- /dev/null +++ b/contributing/samples/local_environment_skill/agent.py @@ -0,0 +1,95 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import pathlib + +from google.adk import Agent +from google.adk.environment import LocalEnvironment +from google.adk.tools.base_tool import BaseTool +from google.adk.tools.environment import EnvironmentToolset +from google.genai import types + + +class GetTimezoneTool(BaseTool): + """A tool to get the timezone for a given location.""" + + def __init__(self): + super().__init__( + name="get_timezone", + description="Returns the timezone for a given location.", + ) + + def _get_declaration(self) -> types.FunctionDeclaration | None: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters_json_schema={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The location to get the timezone for.", + }, + }, + "required": ["location"], + }, + ) + + async def run_async(self, *, args: dict, tool_context) -> str: + return f"The timezone for {args['location']} is UTC+00:00." + + +def get_wind_speed(location: str) -> str: + """Returns the current wind speed for a given location.""" + return f"The wind speed in {location} is 10 mph." + + +BASE_INSTRUCTION = ( + "You are a helpful AI assistant that can use the local environment to" + " execute commands and file I/O." +) + +SKILL_USAGE_INSTRUCTION = """\ +[SKILLS ACCESS] +You have access to specialized skills stored in the environment's `skills/` folder. +Each skill is a folder containing a `SKILL.md` file with instructions. + +[MANDATORY PROCEDURE] +Before declaring that you cannot perform a task or answer a question (especially for domain-specific queries like weather), you MUST: +1. Use the `Execute` tool to search for all available skills by running: `find skills -name SKILL.md` +2. Review the list of found skills to see if any are relevant to the user's request. +3. If a relevant skill is found, use the `ReadFile` tool to read its `SKILL.md` file. +4. Follow the instructions in that file to complete the request. + *CRITICAL NOTE ON PATHS:* All file and script paths mentioned inside a `SKILL.md` file (e.g., `references/...` or `scripts/...`) are RELATIVE to that specific skill's folder. You MUST resolve them by prepending the skill's folder path (e.g., if the skill is at `skills/weather-skill/`, you must read `skills/weather-skill/references/weather_info.md`). + +Failure to check the `skills/` directory before stating you cannot help is unacceptable.\ +""" + + +root_agent = Agent( + model="gemini-2.5-pro", + name="local_environment_skill_agent", + description=( + "An agent that uses local environment tools to load and use skills." + ), + instruction=f"{BASE_INSTRUCTION}\n\n{SKILL_USAGE_INSTRUCTION}", + tools=[ + EnvironmentToolset( + environment=LocalEnvironment( + working_dir=pathlib.Path(__file__).parent + ), + ), + GetTimezoneTool(), + get_wind_speed, + ], +) diff --git a/contributing/samples/local_environment_skill/skills/weather-skill/SKILL.md b/contributing/samples/local_environment_skill/skills/weather-skill/SKILL.md new file mode 100644 index 0000000000..0323c18bfb --- /dev/null +++ b/contributing/samples/local_environment_skill/skills/weather-skill/SKILL.md @@ -0,0 +1,12 @@ +--- +name: weather-skill +description: A skill that provides weather information based on reference data. +metadata: + adk_additional_tools: + - get_wind_speed +--- + +Step 1: Check 'references/weather_info.md' for the current weather. +Step 2: If humidity is requested, use run 'scripts/get_humidity.py' with the `location` argument. +Step 3: If wind speed is requested, use the `get_wind_speed` tool. +Step 4: Provide the update to the user. diff --git a/contributing/samples/local_environment_skill/skills/weather-skill/references/weather_info.md b/contributing/samples/local_environment_skill/skills/weather-skill/references/weather_info.md new file mode 100644 index 0000000000..dc163470bc --- /dev/null +++ b/contributing/samples/local_environment_skill/skills/weather-skill/references/weather_info.md @@ -0,0 +1,11 @@ +# Weather Information + +- **Location:** San Francisco, CA +- **Condition:** Sunny ☀️ +- **Temperature:** 72°F (22°C) +- **Forecast:** Clear skies all day. + +- **Location:** Sunnyvale, CA +- **Condition:** Sunny ☀️ +- **Temperature:** 75°F (24°C) +- **Forecast:** Warm and sunny. diff --git a/contributing/samples/local_environment_skill/skills/weather-skill/scripts/get_humidity.py b/contributing/samples/local_environment_skill/skills/weather-skill/scripts/get_humidity.py new file mode 100644 index 0000000000..a2e1dc4701 --- /dev/null +++ b/contributing/samples/local_environment_skill/skills/weather-skill/scripts/get_humidity.py @@ -0,0 +1,29 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse + + +def get_humidity(location: str) -> str: + """Fetch live humidity for a given location. (Simulated)""" + print(f"Fetching live humidity for {location}...") + return "45% (Simulated)" + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--location", type=str, default="Mountain View") + args = parser.parse_args() + + print(get_humidity(args.location)) From e3567a65196bb453cdac4a5ae42f7f079476d748 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Thu, 9 Apr 2026 11:59:04 -0700 Subject: [PATCH 168/192] fix: Fix credential leakage vulnerability in Agent Registry Passing in ADC auth headers to non-google MCP toolsets is a vulnerability. To fix, only pass in the headers to Google MCP toolsets. Co-authored-by: Kathy Wu PiperOrigin-RevId: 897230159 --- .../agent_registry/agent_registry.py | 19 ++++++++++++----- .../agent_registry/test_agent_registry.py | 21 +++++++++++++++++-- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/google/adk/integrations/agent_registry/agent_registry.py b/src/google/adk/integrations/agent_registry/agent_registry.py index 7edb9a2143..9ff71cd9d5 100644 --- a/src/google/adk/integrations/agent_registry/agent_registry.py +++ b/src/google/adk/integrations/agent_registry/agent_registry.py @@ -19,19 +19,15 @@ from collections.abc import Generator from enum import Enum import logging -import os import re from typing import Any from typing import Callable from typing import Dict from typing import List from typing import Mapping -from typing import Sequence from typing import TypedDict -from urllib.parse import parse_qs from urllib.parse import urlparse -from a2a.client.client_factory import minimal_agent_card from a2a.types import AgentCapabilities from a2a.types import AgentCard from a2a.types import AgentSkill @@ -142,6 +138,17 @@ class Endpoint(TypedDict, total=False): attributes: Dict[str, Any] +def _is_google_api(url: str) -> bool: + """Checks if the given URL points to a Google API endpoint.""" + parsed_url = urlparse(url) + if not parsed_url.hostname: + return False + return ( + parsed_url.hostname == "googleapis.com" + or parsed_url.hostname.endswith(".googleapis.com") + ) + + class AgentRegistry: """Client for interacting with the Google Cloud Agent Registry service. @@ -305,8 +312,10 @@ def get_mcp_toolset( f"MCP Server endpoint URI not found for: {mcp_server_name}" ) + headers = self._get_auth_headers() if _is_google_api(endpoint_uri) else None connection_params = StreamableHTTPConnectionParams( - url=endpoint_uri, headers=self._get_auth_headers() + url=endpoint_uri, + headers=headers, ) return AgentRegistrySingleMcpToolset( destination_resource_id=mcp_server_id, diff --git a/tests/unittests/integrations/agent_registry/test_agent_registry.py b/tests/unittests/integrations/agent_registry/test_agent_registry.py index 58d993d1cc..1a454131ef 100644 --- a/tests/unittests/integrations/agent_registry/test_agent_registry.py +++ b/tests/unittests/integrations/agent_registry/test_agent_registry.py @@ -320,13 +320,23 @@ def test_get_endpoint(self, mock_httpx, registry): server = registry.get_endpoint("test-endpoint") assert server == {"name": "test-endpoint"} + @pytest.mark.parametrize( + "url, expected_auth", + [ + ("https://mcp.com", False), + ("https://mcp.googleapis.com/v1", True), + ("https://example.com/googleapis/v1", False), + ], + ) @patch("httpx.Client") - def test_get_mcp_toolset(self, mock_httpx, registry): + def test_get_mcp_toolset_auth_headers( + self, mock_httpx, registry, url, expected_auth + ): mock_response = MagicMock() mock_response.json.return_value = { "displayName": "TestPrefix", "interfaces": [{ - "url": "https://mcp.com", + "url": url, "protocolBinding": "JSONRPC", }], } @@ -341,6 +351,13 @@ def test_get_mcp_toolset(self, mock_httpx, registry): toolset = registry.get_mcp_toolset("test-mcp") assert isinstance(toolset, McpToolset) assert toolset.tool_name_prefix == "TestPrefix" + if expected_auth: + assert toolset._connection_params.headers is not None + assert ( + toolset._connection_params.headers["Authorization"] == "Bearer token" + ) + else: + assert toolset._connection_params.headers is None @patch("httpx.Client") def test_get_mcp_toolset_with_auth(self, mock_httpx, registry): From 2626ad7c69fb64a88372225d5583085fc08b1fcd Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Thu, 9 Apr 2026 14:59:18 -0700 Subject: [PATCH 169/192] feat(live): expose live_session_resumption_update as Event in BaseLlmFlow This enables cross-connection session resumption for Gemini Live API sessions, allowing applications to capture the resumption handle and reuse it upon reconnection. - Add `live_session_resumption_update` to the skip check condition to ensure it's not discarded when content is empty. - Yield the event after the skip check, similar to transcription events. - Add unit test in `test_base_llm_flow.py` to verify the behavior. Closes #4357 Co-authored-by: Liang Wu PiperOrigin-RevId: 897318123 --- .../adk/flows/llm_flows/base_llm_flow.py | 10 ++++++ .../flows/llm_flows/test_base_llm_flow.py | 32 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/google/adk/flows/llm_flows/base_llm_flow.py b/src/google/adk/flows/llm_flows/base_llm_flow.py index 76c7b8e160..4c253014a9 100644 --- a/src/google/adk/flows/llm_flows/base_llm_flow.py +++ b/src/google/adk/flows/llm_flows/base_llm_flow.py @@ -755,6 +755,7 @@ def get_author_for_event(llm_response): # We proactively raise ConnectionClosed to trigger the reconnection # logic in run_live, which will use the latest session handle. raise ConnectionClosed(None, None) + model_response_event = Event( id=Event.new_id(), invocation_id=invocation_context.invocation_id, @@ -1020,9 +1021,18 @@ async def _postprocess_live( and not llm_response.input_transcription and not llm_response.output_transcription and not llm_response.usage_metadata + and not llm_response.live_session_resumption_update ): return + # Handle session resumption updates for cross-connection resumption + if llm_response.live_session_resumption_update: + model_response_event.live_session_resumption_update = ( + llm_response.live_session_resumption_update + ) + yield model_response_event + return + # Handle transcription events ONCE per llm_response, outside the event loop if llm_response.input_transcription: model_response_event.input_transcription = ( diff --git a/tests/unittests/flows/llm_flows/test_base_llm_flow.py b/tests/unittests/flows/llm_flows/test_base_llm_flow.py index bdcaa9af5a..793ebb83cd 100644 --- a/tests/unittests/flows/llm_flows/test_base_llm_flow.py +++ b/tests/unittests/flows/llm_flows/test_base_llm_flow.py @@ -893,3 +893,35 @@ async def mock_receive(): # We expect 2 successful attempts + DEFAULT_MAX_RECONNECT_ATTEMPTS failed attempts # Total calls = 2 + 5 = 7 assert mock_connect.call_count == DEFAULT_MAX_RECONNECT_ATTEMPTS + 2 + + +@pytest.mark.asyncio +async def test_postprocess_live_session_resumption_update(): + """Test that _postprocess_live yields live_session_resumption_update.""" + agent = Agent(name='test_agent') + invocation_context = await testing_utils.create_invocation_context( + agent=agent + ) + flow = BaseLlmFlowForTesting() + + llm_request = LlmRequest() + llm_response = LlmResponse( + live_session_resumption_update=types.LiveServerSessionResumptionUpdate( + new_handle='test_handle' + ) + ) + model_response_event = Event( + id=Event.new_id(), + invocation_id=invocation_context.invocation_id, + author=agent.name, + ) + + events = [] + async for event in flow._postprocess_live( + invocation_context, llm_request, llm_response, model_response_event + ): + events.append(event) + + assert len(events) == 1 + assert events[0].live_session_resumption_update is not None + assert events[0].live_session_resumption_update.new_handle == 'test_handle' From 5fab983c08c39103a1690fb73278d339478c532c Mon Sep 17 00:00:00 2001 From: "Wei (Jack) Sun" Date: Thu, 9 Apr 2026 15:11:01 -0700 Subject: [PATCH 170/192] chore: merge release v1.29.0 to main Merge https://github.com/google/adk-python/pull/5232 Syncs version bump and CHANGELOG from release v1.29.0 to main. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/5232 from google:release/v1.29.0 32e319930a46ec2aa8a27d769e027a14779301ff PiperOrigin-RevId: 897324259 --- .github/.release-please-manifest.json | 2 +- .github/release-please-config.json | 2 +- CHANGELOG.md | 75 +++++++++++++++++++++++++++ src/google/adk/version.py | 2 +- 4 files changed, 78 insertions(+), 3 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index bac4ebcfdc..6103afc2b2 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.28.0" + ".": "1.29.0" } diff --git a/.github/release-please-config.json b/.github/release-please-config.json index d9b9605e10..14f5b01af1 100644 --- a/.github/release-please-config.json +++ b/.github/release-please-config.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "last-release-sha": "50209549206256abe5d1c5d84ab2b14dfdf80d66", + "last-release-sha": "6b1600fbf53bcf634c5fe4793f02921bc0b75125", "packages": { ".": { "release-type": "python", diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a1fabb0da..81b9211bbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,80 @@ # Changelog +## [1.29.0](https://github.com/google/adk-python/compare/v1.28.0...v1.29.0) (2026-04-09) + + +### Features + +* Add auth scheme/credential support to MCP toolsets in Agent Registry ([7913a3b](https://github.com/google/adk-python/commit/7913a3b76432caf16953ea7b2a2cf4872baad417)) +* add ability to block shell metacharacters in BashTool ([23bd95b](https://github.com/google/adk-python/commit/23bd95bcf23367a8df3342ca4bb9d17f0b3b0d8f)) +* add configurable resource limits for subprocesses in BashTool ([1b05842](https://github.com/google/adk-python/commit/1b0584241f6418fd5fe9bd05fa666d03c310b8ae)) +* Add configurable view_prefix to BigQueryLoggerConfig ([37973da](https://github.com/google/adk-python/commit/37973daff47d3c67e928a240acd188d4e318f52b)) +* Add custom session id functionality to vertex ai session service ([e1913a6](https://github.com/google/adk-python/commit/e1913a6b411aec9e8774ca92ea39531b085c43f0)) +* Add Description column to SKILL.md and update terminology ([435f7c7](https://github.com/google/adk-python/commit/435f7c7a9fdf8b1214f4439c6d953b6426d90da1)) +* Add Easy GCP support to ADK CLI ([8850916](https://github.com/google/adk-python/commit/8850916e1908ace19a058102f0392eee08349d60)) +* Add regional endpoint support to `SecretManagerClient` ([19ac679](https://github.com/google/adk-python/commit/19ac679aeacc045ed78cb9fd48bb295440843288)) +* Add support for model endpoints in Agent Registry ([eb4674b](https://github.com/google/adk-python/commit/eb4674b49f017f3947506c55be4075b1ea0369d6)) +* **auth:** Add public api to register custom auth provider with credential manager ([a220910](https://github.com/google/adk-python/commit/a22091058dd2ea6e1e0655b5946ce6ed7e72d25e)) +* **auth:** Pass consent_nonce to Agent Frontend ([9fec503](https://github.com/google/adk-python/commit/9fec503061846b9903c18921f7848b358a041331)) +* **auth:** Support additional HTTP headers in MCP tools ([b3e9962](https://github.com/google/adk-python/commit/b3e99628ee1b87b61badf56e67f8ddee15e6fe54)) +* **bigquery:** Add ADK 1P Skills for ADK BQ Toolset ([4030c0d](https://github.com/google/adk-python/commit/4030c0d0167b348cf2e4c941c8610aa6ede28275)) +* **environment:** Add EnvironmentToolset for file I/O and command execution ([9082b9e](https://github.com/google/adk-python/commit/9082b9e38eeb3465c399b41633e6441e339c47c3)) +* **environment:** Add LocalEnvironment for executing commands and file I/O locally ([f973673](https://github.com/google/adk-python/commit/f97367381e820c75ad16d4ce7ee27c0f9929c81d)) +* Implement robust process group management and timeouts in BashTool ([f641b1a](https://github.com/google/adk-python/commit/f641b1a219b041659e6d429c47974bc9e5cfe1af)) +* **live:** Added in 1.28.1, support live for `gemini-3.1-flash-live-preview` model ([8082893](https://github.com/google/adk-python/commit/8082893619bb85d4ee0dc53fd2133d12b9434d07)) +* Option to use shallow-copy for session in InMemorySessionService ([16a1a18](https://github.com/google/adk-python/commit/16a1a185ab77a904fd01712779fa1bc6417dc628)) +* Propagate context to thread pools ([83393ab](https://github.com/google/adk-python/commit/83393ab839d5733568699195683408fccbd1cb6e)) +* refresh credentials if token is missing in the common code and samples ([1445ad5](https://github.com/google/adk-python/commit/1445ad5069841e446328e0856553f69a6699f0f4)) +* Remove use of raw_event field in vertex ai session service ([642d337](https://github.com/google/adk-python/commit/642d337a9069fae334192d045c9f85922cbcef53)) +* **skill:** Standardize skill tools and make script arguments flexible ([9e73ab8](https://github.com/google/adk-python/commit/9e73ab846672065f1fbe1c2642419e8a008efd43)) +* Support AgentRegistry association ([6754760](https://github.com/google/adk-python/commit/675476088b9f3c0a488ce48f652b7f3f7ea47230)) +* Support loading agents from Visual Builder with BigQuery-powered logging ([2074889](https://github.com/google/adk-python/commit/20748894cdaa5a95d0c4ccb0daf87a34496639dd)) +* Support propagating grounding metadata from AgentTool ([d689a04](https://github.com/google/adk-python/commit/d689a04f16846c2aa483dd45dcc65e2decdb419c)) +* Support short options and positional arguments in RunSkillScriptTool ([2b49163](https://github.com/google/adk-python/commit/2b49163b399135f0d96b73a99eb4ace764ce87db)) +* Use raw_event field in vertex ai session service for append and list events ([6ee0362](https://github.com/google/adk-python/commit/6ee036292e9eefabb032e8ebec3580a2243f3a96)) +* Use raw_event to store event data in vertex ai session service ([9da9dee](https://github.com/google/adk-python/commit/9da9dee140a3c8971d2dc267eab7d8d17a22a089)) + + +### Bug Fixes + +* Add A2ATransport.http_json to the default supported transports list ([7dd9359](https://github.com/google/adk-python/commit/7dd9359fa1c419f82db84b844195e1b77d8070e7)) +* add httpx_client_factory support to SseConnectionParams ([815ebb4](https://github.com/google/adk-python/commit/815ebb441579724e5aa22830b2e6f7c22f94fde6)) +* **adk:** redact credentials in BigQuery analytics plugin ([a27ce47](https://github.com/google/adk-python/commit/a27ce4771ff271947a0d94762231da842095836e)) +* api client initialization logic to be mutually exclusive between ExpressMode and GCP projects ([4ffe8fb](https://github.com/google/adk-python/commit/4ffe8fb4a6befc9e9d0e838427b7bf4890df4ba3)) +* avoid load all agents in adk web server ([ede8a56](https://github.com/google/adk-python/commit/ede8a56a3cd18311ce82e761f0f3da6228fbc0d6)) +* Cache BaseToolset.get_tools() for calls within the same invocation ([92cad99](https://github.com/google/adk-python/commit/92cad99724d333760e4ebc6116951d78a9b1cb7a)) +* **cli:** fail Agent Engine deploy when config file path is invalid ([bbad9ec](https://github.com/google/adk-python/commit/bbad9ec64ce1617bc45148de97e6246752845b98)) +* Disable tool caching for skill toolset ([064f0d2](https://github.com/google/adk-python/commit/064f0d278e55e1e9fd6db1b6ccf3d1cb95cba47b)) +* Disallow args on /builder and Add warning about Web UI usage to CLI help ([dcee290](https://github.com/google/adk-python/commit/dcee2902729e178b41086c4039a3828917bbb9f3)) +* empty events_iterator assignment ([898c4e5](https://github.com/google/adk-python/commit/898c4e5f78b60c4c4732c7cd19ff2da9a64964a1)) +* **environment:** fix package references ([add8e86](https://github.com/google/adk-python/commit/add8e8664bd2ae9257c8b37a5e602d0c7aae7625)) +* Fix RemoteA2AAgent deepcopy errors ([6f29775](https://github.com/google/adk-python/commit/6f29775f4bf7172b1378b17856534f95b9d4eeb6)) +* Fixes for initializing RemoteA2aAgent - passing in preferred transport, protocol version, and auth headers ([0f3850f](https://github.com/google/adk-python/commit/0f3850f56c857dfb86c7ad8de372bcc7fe495968)) +* Generate IDs for FunctionCalls when processing streaming LLM responses ([fe41817](https://github.com/google/adk-python/commit/fe4181718d104843b974417c59203ed8a7b15255)), closes [#4609](https://github.com/google/adk-python/issues/4609) +* Handle merging lists in deep_merge_dicts ([cdb3ff4](https://github.com/google/adk-python/commit/cdb3ff4e1f155c357f8cf720132d09bbc1446075)) +* In memory session service to evaluate dictionary keys and value into an isolated snapshot sequence before starting loop ([f75de59](https://github.com/google/adk-python/commit/f75de59362e07c0cce0ead723ceea3102081af4d)) +* include intermediate subagent final response events in evaluation intermediate data ([f8a6bd7](https://github.com/google/adk-python/commit/f8a6bd7fc0ca4b37cac4dc93c725c8973a1c9027)) +* **live:** Handle live session resumption and GoAway signal ([6b1600f](https://github.com/google/adk-python/commit/6b1600fbf53bcf634c5fe4793f02921bc0b75125)), closes [#4996](https://github.com/google/adk-python/issues/4996) +* move BigQueryAgentAnalyticsPlugin import inside get_runner_async ([6fd0f85](https://github.com/google/adk-python/commit/6fd0f85191dea17b7c6b033473bd39764250265b)) +* Safer fix for UI widget merging in ADK ([0e71985](https://github.com/google/adk-python/commit/0e71985501c00682eff0f0c5328a3d429f2bdc68)) +* Small fixes for express mode ([3a374ce](https://github.com/google/adk-python/commit/3a374ce0aae73c138cd51d754220d0d7a64677b3)) +* sync callbacks with call_llm span ([b2daf83](https://github.com/google/adk-python/commit/b2daf83db406f8844f9db75abc7fee17362433b3)) +* **tools:** handle toolset errors gracefully in canonical_tools ([5df03f1](https://github.com/google/adk-python/commit/5df03f1f412e3ab55a5a6ceac892ba6b985a8036)), closes [#3341](https://github.com/google/adk-python/issues/3341) +* truncate error_message in v0 schema to prevent VARCHAR overflow ([62daf4f](https://github.com/google/adk-python/commit/62daf4f61b14aee7bca9d8dec479bfd940bbb955)), closes [#4993](https://github.com/google/adk-python/issues/4993) +* update toolbox-adk and toolbox server versions ([1486925](https://github.com/google/adk-python/commit/14869253d072e901d530fd3b7ee8ef67fbe5ddbc)) + + +### Code Refactoring + +* Move SecretManagerClient to google.adk.integrations.secret_manager package ([1104523](https://github.com/google/adk-python/commit/110452375c6ccaa16e4ade7d7fe3438d185d4355)) +* Remove the session events dependency from A2aAgentExecutor ([aaa03ac](https://github.com/google/adk-python/commit/aaa03ac30841b2e12e3ddf4bb02fbcbf08ae13e8)) + + +### Documentation + +* **adk:** clean up remote triggers README to remove internal references ([ccac461](https://github.com/google/adk-python/commit/ccac461b2ab6291ecd09577ca0553833eaff71b9)) +* Update the MCP Toolbox docsite with the new URL ([a60baca](https://github.com/google/adk-python/commit/a60baca3ddfe2541159b32d67b738a836d2395e7)) + ## [1.28.0](https://github.com/google/adk-python/compare/v1.27.5...v1.28.0) (2026-03-26) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index a020c76372..1782a41abc 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "1.28.0" +__version__ = "1.29.0" From 9a1930407a4eff67093ea9f14292f1931631a661 Mon Sep 17 00:00:00 2001 From: George Weale Date: Thu, 9 Apr 2026 15:32:51 -0700 Subject: [PATCH 171/192] fix: preserve interaction ids for interactions SSE tool calls Close #5169 Co-authored-by: George Weale PiperOrigin-RevId: 897334695 --- src/google/adk/models/interactions_utils.py | 36 +++- .../models/test_interactions_utils.py | 203 ++++++++++++++++++ 2 files changed, 236 insertions(+), 3 deletions(-) diff --git a/src/google/adk/models/interactions_utils.py b/src/google/adk/models/interactions_utils.py index add8da0c54..be1c2a6ab2 100644 --- a/src/google/adk/models/interactions_utils.py +++ b/src/google/adk/models/interactions_utils.py @@ -56,6 +56,36 @@ _NEW_LINE = '\n' +def _extract_stream_interaction_id( + event: 'InteractionSSEEvent', +) -> Optional[str]: + """Extract the interaction ID from an Interactions SSE event. + + Different SSE lifecycle events expose the interaction ID on different + attributes. We normalize them here so streamed ADK responses consistently + carry the chain identifier needed for follow-up tool calls. Older + google-genai builds may also yield a legacy ``interaction`` event with a + top-level ``id``. + """ + from google.genai._interactions.types.interaction_complete_event import InteractionCompleteEvent + from google.genai._interactions.types.interaction_start_event import InteractionStartEvent + from google.genai._interactions.types.interaction_status_update import InteractionStatusUpdate + + if isinstance(event, InteractionStatusUpdate): + return event.interaction_id + + if isinstance(event, (InteractionStartEvent, InteractionCompleteEvent)): + return event.interaction.id + + try: + if event.event_type == 'interaction': + return event.id + except AttributeError: + pass + + return None + + def convert_part_to_interaction_content(part: types.Part) -> Optional[dict]: """Convert a types.Part to an interaction content dict. @@ -1013,9 +1043,9 @@ async def generate_content_via_interactions( # Log the streaming event logger.debug(build_interactions_event_log(event)) - # Extract interaction ID from event if available - if hasattr(event, 'id') and event.id: - current_interaction_id = event.id + interaction_id = _extract_stream_interaction_id(event) + if interaction_id: + current_interaction_id = interaction_id llm_response = convert_interaction_event_to_llm_response( event, aggregated_parts, current_interaction_id ) diff --git a/tests/unittests/models/test_interactions_utils.py b/tests/unittests/models/test_interactions_utils.py index 93dced0f21..3a6b964ac1 100644 --- a/tests/unittests/models/test_interactions_utils.py +++ b/tests/unittests/models/test_interactions_utils.py @@ -14,13 +14,183 @@ """Tests for interactions_utils.py conversion functions.""" +import asyncio import base64 +from collections.abc import Callable +from datetime import datetime +from datetime import timezone import json +from types import SimpleNamespace from unittest.mock import MagicMock from google.adk.models import interactions_utils from google.adk.models.llm_request import LlmRequest from google.genai import types +from google.genai._interactions.types.interaction import Interaction +from google.genai._interactions.types.interaction_complete_event import InteractionCompleteEvent +from google.genai._interactions.types.interaction_start_event import InteractionStartEvent +from google.genai._interactions.types.interaction_status_update import InteractionStatusUpdate +import pytest + + +class _MockAsyncIterator: + """Simple async iterator for streaming interaction events.""" + + def __init__(self, sequence: list[object]): + self._iterator = iter(sequence) + + def __aiter__(self): + return self + + async def __anext__(self): + try: + return next(self._iterator) + except StopIteration as exc: + raise StopAsyncIteration from exc + + +class _FakeInteractions: + """Minimal fake interactions resource for streaming tests.""" + + def __init__(self, events: list[object]): + self._events = events + + async def create(self, **_kwargs): + return _MockAsyncIterator(self._events) + + +class _FakeAio: + """Namespace matching the expected api_client.aio shape.""" + + def __init__(self, events: list[object]): + self.interactions = _FakeInteractions(events) + + +class _FakeApiClient: + """Minimal fake API client for generate_content_via_interactions tests.""" + + def __init__(self, events: list[object]): + self.aio = _FakeAio(events) + + +def _build_function_call_delta_event( + *, function_id: str, name: str, arguments: dict[str, object] +) -> SimpleNamespace: + """Build a version-agnostic content.delta event for a function call.""" + return SimpleNamespace( + event_type='content.delta', + delta=SimpleNamespace( + type='function_call', + id=function_id, + name=name, + arguments=arguments, + ), + ) + + +def _build_llm_request() -> LlmRequest: + """Build a minimal request for interactions streaming tests.""" + return LlmRequest( + model='gemini-2.5-flash', + contents=[ + types.Content( + role='user', + parts=[types.Part(text='Weather in Tokyo?')], + ) + ], + config=types.GenerateContentConfig(), + ) + + +def _build_lifecycle_streamed_events() -> list[object]: + """Build streamed events with lifecycle updates carrying the ID.""" + now = datetime.now(timezone.utc) + return [ + InteractionStartEvent( + event_type='interaction.start', + interaction=Interaction( + id='interaction_123', + created=now, + updated=now, + status='in_progress', + ), + ), + _build_function_call_delta_event( + function_id='call_1', + name='get_weather', + arguments={'city': 'Tokyo'}, + ), + InteractionStatusUpdate( + event_type='interaction.status_update', + interaction_id='interaction_123', + status='requires_action', + ), + ] + + +def _build_complete_streamed_events() -> list[object]: + """Build streamed events with the ID on an interaction.complete event.""" + now = datetime.now(timezone.utc) + return [ + _build_function_call_delta_event( + function_id='call_1', + name='get_weather', + arguments={'city': 'Tokyo'}, + ), + InteractionCompleteEvent( + event_type='interaction.complete', + interaction=Interaction( + id='interaction_complete_123', + created=now, + updated=now, + status='requires_action', + ), + ), + ] + + +def _build_legacy_streamed_events() -> list[object]: + """Build streamed events with the ID on the legacy interaction event.""" + return [ + _build_function_call_delta_event( + function_id='call_1', + name='get_weather', + arguments={'city': 'Tokyo'}, + ), + SimpleNamespace( + event_type='interaction', + id='interaction_legacy_123', + status='requires_action', + error=None, + outputs=None, + usage=None, + ), + ] + + +async def _collect_function_call_interaction_ids( + streamed_events: list[object], +) -> list[str | None]: + """Collect non-partial function call interaction IDs from streamed events.""" + responses = [ + response + async for response in ( + interactions_utils.generate_content_via_interactions( + api_client=_FakeApiClient(streamed_events), + llm_request=_build_llm_request(), + stream=True, + ) + ) + ] + + return [ + response.interaction_id + for response in responses + if response.partial is not True + and response.content is not None + and response.content.parts + and response.content.parts[0].function_call is not None + ] class TestConvertPartToInteractionContent: @@ -955,3 +1125,36 @@ def test_unknown_event_type_returns_none(self): assert result is None assert not aggregated_parts + + +@pytest.mark.parametrize( + ('streamed_events_factory', 'expected_ids'), + [ + pytest.param( + _build_lifecycle_streamed_events, + ['interaction_123', 'interaction_123'], + id='lifecycle-events', + ), + pytest.param( + _build_complete_streamed_events, + ['interaction_complete_123'], + id='complete-event', + ), + pytest.param( + _build_legacy_streamed_events, + ['interaction_legacy_123'], + id='legacy-event', + ), + ], +) +def test_generate_content_via_interactions_stream_extracts_interaction_id( + streamed_events_factory: Callable[[], list[object]], + expected_ids: list[str], +): + """Streamed interaction IDs should be preserved across event variants.""" + streamed_events = streamed_events_factory() + + assert ( + asyncio.run(_collect_function_call_interaction_ids(streamed_events)) + == expected_ids + ) From 9d4ecbe9fd1141693e4682cbfe4d542cc62b76ac Mon Sep 17 00:00:00 2001 From: George Weale Date: Thu, 9 Apr 2026 17:26:41 -0700 Subject: [PATCH 172/192] feat: Add support for Gemma 4 models in ADK This change updates the Gemma LLM integration to support Gemma 4 models by broadening the model regex from `gemma-3.*` to `gemma-.*` Close #5156 Co-authored-by: George Weale PiperOrigin-RevId: 897385272 --- src/google/adk/models/gemma_llm.py | 6 +++--- tests/unittests/models/test_gemma_llm.py | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/google/adk/models/gemma_llm.py b/src/google/adk/models/gemma_llm.py index f333bab241..7822d38beb 100644 --- a/src/google/adk/models/gemma_llm.py +++ b/src/google/adk/models/gemma_llm.py @@ -163,8 +163,8 @@ class GemmaFunctionCallModel(BaseModel): class Gemma(GemmaFunctionCallingMixin, Gemini): """Integration for Gemma models exposed via the Gemini API. - Only Gemma 3 models are supported at this time. For agentic use cases, - use of gemma-3-27b-it and gemma-3-12b-it are strongly recommended. + For agentic use cases, use of gemma-3-27b-it, gemma-3-12b-it, and + gemma-4-31b-it are strongly recommended. For full documentation, see: https://ai.google.dev/gemma/docs/core/ @@ -205,7 +205,7 @@ def supported_models(cls) -> list[str]: """ return [ - r'gemma-3.*', + r'gemma-.*', ] @cached_property diff --git a/tests/unittests/models/test_gemma_llm.py b/tests/unittests/models/test_gemma_llm.py index 07b4b092d3..d822777c64 100644 --- a/tests/unittests/models/test_gemma_llm.py +++ b/tests/unittests/models/test_gemma_llm.py @@ -87,6 +87,16 @@ def llm_request_with_tools(): ) +def test_supported_models_matches_gemma4(): + """Gemma 4 model strings must resolve to the Gemma class via the registry.""" + assert models.LLMRegistry.resolve("gemma-4-31b-it") is Gemma + + +def test_supported_models_matches_gemma3(): + """Gemma 3 model strings must continue to resolve to the Gemma class.""" + assert models.LLMRegistry.resolve("gemma-3-27b-it") is Gemma + + @pytest.mark.asyncio async def test_not_gemma_model(): llm = Gemma() From e7d81604126cbdb4d9ee4624e1d1410b06585750 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Fri, 10 Apr 2026 11:03:19 -0700 Subject: [PATCH 173/192] fix: Add "gcloud config unset project" command to express mode flow If the user created an express mode project but has a different gcloud project set, we should help them unset it so that they doesn't run into permissions errors / the express mode one gets used. Co-authored-by: Kathy Wu PiperOrigin-RevId: 897783336 --- src/google/adk/cli/cli_create.py | 21 +++++++++ tests/unittests/cli/utils/test_cli_create.py | 46 ++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/src/google/adk/cli/cli_create.py b/src/google/adk/cli/cli_create.py index a563d6adf3..e3dc3a1d30 100644 --- a/src/google/adk/cli/cli_create.py +++ b/src/google/adk/cli/cli_create.py @@ -378,6 +378,27 @@ def _handle_login_with_google() -> ( f"Express Mode project created: {project_id}", fg="green", ) + current_proj = _get_gcp_project_from_gcloud() + if current_proj and current_proj != project_id: + click.secho( + "Warning: Your default gcloud project is set to" + f" '{current_proj}'. This might conflict with or override your" + f" Express Mode project '{project_id}'. We recommend" + " unsetting it.", + fg="yellow", + ) + if click.confirm("Run 'gcloud config unset project'?", default=True): + try: + subprocess.run( + ["gcloud", "config", "unset", "project"], + check=True, + capture_output=True, + ) + click.secho("Unset default gcloud project.", fg="green") + except Exception: + click.secho( + "Failed to unset project. Please do it manually.", fg="red" + ) return api_key, project_id, region click.secho(_NOT_ELIGIBLE_MSG, fg="red") diff --git a/tests/unittests/cli/utils/test_cli_create.py b/tests/unittests/cli/utils/test_cli_create.py index 892e5229a7..708a6a210d 100644 --- a/tests/unittests/cli/utils/test_cli_create.py +++ b/tests/unittests/cli/utils/test_cli_create.py @@ -417,6 +417,52 @@ def test_handle_login_with_google_option_2( assert region == "us-central1" +def test_handle_login_with_google_option_2_unset_project( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """User selects 2, goes through express sign up, and unsets existing gcloud project.""" + monkeypatch.setattr(gcp_utils, "check_adc", lambda: True) + monkeypatch.setattr(gcp_utils, "retrieve_express_project", lambda: None) + monkeypatch.setattr(gcp_utils, "list_gcp_projects", lambda limit: []) + monkeypatch.setattr(gcp_utils, "check_express_eligibility", lambda: True) + + confirms = iter([True, True]) + monkeypatch.setattr(click, "confirm", lambda *a, **k: next(confirms)) + + prompts = iter(["2", "1"]) + monkeypatch.setattr(click, "prompt", lambda *a, **k: next(prompts)) + + monkeypatch.setattr( + gcp_utils, + "sign_up_express", + lambda location="us-central1": { + "api_key": "new-key", + "project_id": "new-proj", + "region": location, + }, + ) + + monkeypatch.setattr( + cli_create, "_get_gcp_project_from_gcloud", lambda: "old-proj" + ) + + called = {} + + def fake_run(cmd, **kwargs): + if cmd == ["gcloud", "config", "unset", "project"]: + called["unset"] = True + return subprocess.CompletedProcess(args=cmd, returncode=0) + raise ValueError(f"Unexpected command: {cmd}") + + monkeypatch.setattr(subprocess, "run", fake_run) + + api_key, proj, region = cli_create._handle_login_with_google() + assert api_key == "new-key" + assert proj == "new-proj" + assert region == "us-central1" + assert called.get("unset") is True + + def test_handle_login_with_google_option_3( monkeypatch: pytest.MonkeyPatch, ) -> None: From abcf14c166baf4f8cc6e919b1eb4c063bf3a92af Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Fri, 10 Apr 2026 13:40:51 -0700 Subject: [PATCH 174/192] feat: Promote BigQuery tools to Stable In preparation to launching GA of the BigQuery agentic tools in ADK, this change marks BIG_QUERY_TOOLSET and BIG_QUERY_TOOL_CONFIG as stable features. The experimental decorators and warnings associated with these features have been removed. PiperOrigin-RevId: 897865928 --- src/google/adk/features/_feature_registry.py | 4 ++-- src/google/adk/tools/bigquery/__init__.py | 2 +- src/google/adk/tools/bigquery/bigquery_credentials.py | 4 +--- src/google/adk/tools/bigquery/bigquery_toolset.py | 2 -- src/google/adk/tools/bigquery/config.py | 2 -- .../unittests/tools/bigquery/test_bigquery_tool_config.py | 8 -------- 6 files changed, 4 insertions(+), 18 deletions(-) diff --git a/src/google/adk/features/_feature_registry.py b/src/google/adk/features/_feature_registry.py index 04367fedae..5c3ba7f6e3 100644 --- a/src/google/adk/features/_feature_registry.py +++ b/src/google/adk/features/_feature_registry.py @@ -99,10 +99,10 @@ class FeatureConfig: FeatureStage.EXPERIMENTAL, default_on=True ), FeatureName.BIG_QUERY_TOOLSET: FeatureConfig( - FeatureStage.EXPERIMENTAL, default_on=True + FeatureStage.STABLE, default_on=True ), FeatureName.BIG_QUERY_TOOL_CONFIG: FeatureConfig( - FeatureStage.EXPERIMENTAL, default_on=True + FeatureStage.STABLE, default_on=True ), FeatureName.BIGTABLE_TOOL_SETTINGS: FeatureConfig( FeatureStage.EXPERIMENTAL, default_on=True diff --git a/src/google/adk/tools/bigquery/__init__.py b/src/google/adk/tools/bigquery/__init__.py index 54cc19f889..0c4f910df9 100644 --- a/src/google/adk/tools/bigquery/__init__.py +++ b/src/google/adk/tools/bigquery/__init__.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""BigQuery Tools (Experimental). +"""BigQuery Tools. BigQuery Tools under this module are hand crafted and customized while the tools under google.adk.tools.google_api_tool are auto generated based on API diff --git a/src/google/adk/tools/bigquery/bigquery_credentials.py b/src/google/adk/tools/bigquery/bigquery_credentials.py index c491c52ee6..768b001a87 100644 --- a/src/google/adk/tools/bigquery/bigquery_credentials.py +++ b/src/google/adk/tools/bigquery/bigquery_credentials.py @@ -14,7 +14,6 @@ from __future__ import annotations -from ...features import experimental from ...features import FeatureName from .._google_credentials import BaseGoogleCredentialsConfig @@ -26,9 +25,8 @@ BIGQUERY_DEFAULT_SCOPE = ["https://www.googleapis.com/auth/bigquery"] -@experimental(FeatureName.GOOGLE_CREDENTIALS_CONFIG) class BigQueryCredentialsConfig(BaseGoogleCredentialsConfig): - """BigQuery Credentials Configuration for Google API tools (Experimental). + """BigQuery Credentials Configuration for Google API tools. Please do not use this in production, as it may be deprecated later. """ diff --git a/src/google/adk/tools/bigquery/bigquery_toolset.py b/src/google/adk/tools/bigquery/bigquery_toolset.py index dba5f8ee1a..37a5070996 100644 --- a/src/google/adk/tools/bigquery/bigquery_toolset.py +++ b/src/google/adk/tools/bigquery/bigquery_toolset.py @@ -25,7 +25,6 @@ from . import metadata_tool from . import query_tool from . import search_tool -from ...features import experimental from ...features import FeatureName from ...tools.base_tool import BaseTool from ...tools.base_toolset import BaseToolset @@ -35,7 +34,6 @@ from .config import BigQueryToolConfig -@experimental(FeatureName.BIG_QUERY_TOOLSET) class BigQueryToolset(BaseToolset): """BigQuery Toolset contains tools for interacting with BigQuery data and metadata.""" diff --git a/src/google/adk/tools/bigquery/config.py b/src/google/adk/tools/bigquery/config.py index 15dea8a5d0..e2c56ab1e3 100644 --- a/src/google/adk/tools/bigquery/config.py +++ b/src/google/adk/tools/bigquery/config.py @@ -21,7 +21,6 @@ from pydantic import ConfigDict from pydantic import field_validator -from ...features import experimental from ...features import FeatureName @@ -48,7 +47,6 @@ class WriteMode(Enum): """All write operations are allowed.""" -@experimental(FeatureName.BIG_QUERY_TOOL_CONFIG) class BigQueryToolConfig(BaseModel): """Configuration for BigQuery tools.""" diff --git a/tests/unittests/tools/bigquery/test_bigquery_tool_config.py b/tests/unittests/tools/bigquery/test_bigquery_tool_config.py index 705f3d87b8..60a41eb440 100644 --- a/tests/unittests/tools/bigquery/test_bigquery_tool_config.py +++ b/tests/unittests/tools/bigquery/test_bigquery_tool_config.py @@ -27,14 +27,6 @@ def reset_warned_features(): _WARNED_FEATURES.clear() -def test_bigquery_tool_config_experimental_warning(): - """Test BigQueryToolConfig experimental warning.""" - with warnings.catch_warnings(record=True) as w: - BigQueryToolConfig() - assert len(w) == 1 - assert "BIG_QUERY_TOOL_CONFIG is enabled." in str(w[0].message) - - def test_bigquery_tool_config_invalid_property(): """Test BigQueryToolConfig raises exception when setting invalid property.""" with pytest.raises( From 0acee3175a5010aaa9d38388be0379fe2a564503 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Sun, 12 Apr 2026 22:50:56 -0700 Subject: [PATCH 175/192] chore: Update dependencies and release configuration for the Agent Identity feature PiperOrigin-RevId: 898786239 --- pyproject.toml | 5 + .../adk/integrations/agent_identity/README.md | 35 ++ .../integrations/agent_identity/__init__.py | 21 + .../agent_identity/gcp_auth_provider.py | 284 ++++++++++++ .../gcp_auth_provider_scheme.py | 48 ++ .../integrations/agent_identity/README.md | 26 ++ .../agent_identity/test_2lo_flow.py | 202 ++++++++ .../agent_identity/test_3lo_flow.py | 304 ++++++++++++ .../agent_identity/test_gcp_auth_provider.py | 434 ++++++++++++++++++ 9 files changed, 1359 insertions(+) create mode 100644 src/google/adk/integrations/agent_identity/README.md create mode 100644 src/google/adk/integrations/agent_identity/__init__.py create mode 100644 src/google/adk/integrations/agent_identity/gcp_auth_provider.py create mode 100644 src/google/adk/integrations/agent_identity/gcp_auth_provider_scheme.py create mode 100644 tests/integration/integrations/agent_identity/README.md create mode 100644 tests/integration/integrations/agent_identity/test_2lo_flow.py create mode 100644 tests/integration/integrations/agent_identity/test_3lo_flow.py create mode 100644 tests/unittests/integrations/agent_identity/test_gcp_auth_provider.py diff --git a/pyproject.toml b/pyproject.toml index 3a2a587b5d..15e6054c9f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -123,6 +123,7 @@ test = [ "a2a-sdk>=0.3.0,<0.4.0", "anthropic>=0.43.0", # For anthropic model tests "crewai[tools];python_version>='3.11' and python_version<'3.12'", # For CrewaiTool tests; chromadb/pypika fail on 3.12+ + "google-cloud-iamconnectorcredentials>=0.1.0, <0.2.0", "google-cloud-parametermanager>=0.4.0, <1.0.0", "kubernetes>=29.0.0", # For GkeCodeExecutor "langchain-community>=0.3.17", @@ -176,6 +177,10 @@ toolbox = ["toolbox-adk>=1.0.0, <2.0.0"] slack = ["slack-bolt>=1.22.0"] +agent-identity = [ + "google-cloud-iamconnectorcredentials>=0.1.0, <0.2.0", +] + [tool.pyink] # Format py files following Google style-guide line-length = 80 diff --git a/src/google/adk/integrations/agent_identity/README.md b/src/google/adk/integrations/agent_identity/README.md new file mode 100644 index 0000000000..26c8fe7fe9 --- /dev/null +++ b/src/google/adk/integrations/agent_identity/README.md @@ -0,0 +1,35 @@ +# GCP IAM Connector Auth + +Manages the complete lifecycle of an access token using the Google Cloud +Platform Agent Identity Credentials service. + +## Usage + +1. **Install Dependencies:** + ```bash + pip install "google-adk[agent-identity]" + ``` + +2. **Register the provider:** + Register the `GcpAuthProvider` with the `CredentialManager`. This is to be + done one time. + + ``` py + # user_agent_app.py + from google.adk.auth.credential_manager import CredentialManager + from google.adk.integrations.agent_identity import GcpAuthProvider + + CredentialManager.register_auth_provider(GcpAuthProvider()) + ``` + +3. **Configure the Auth provider:** + Specify the Agent Identity provider configuration using the + `GcpAuthProviderScheme`. + ``` py + # user_agent_app.py + from google.adk.integrations.agent_identity import GcpAuthProviderScheme + + # Configures Toolset + auth_scheme = GcpAuthProviderScheme(name="my-jira-auth_provider") + mcp_toolset_jira = McpToolset(..., auth_scheme=auth_scheme) + ``` diff --git a/src/google/adk/integrations/agent_identity/__init__.py b/src/google/adk/integrations/agent_identity/__init__.py new file mode 100644 index 0000000000..1025735236 --- /dev/null +++ b/src/google/adk/integrations/agent_identity/__init__.py @@ -0,0 +1,21 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .gcp_auth_provider import GcpAuthProvider +from .gcp_auth_provider_scheme import GcpAuthProviderScheme + +__all__ = [ + "GcpAuthProvider", + "GcpAuthProviderScheme", +] diff --git a/src/google/adk/integrations/agent_identity/gcp_auth_provider.py b/src/google/adk/integrations/agent_identity/gcp_auth_provider.py new file mode 100644 index 0000000000..1a1aaec8f8 --- /dev/null +++ b/src/google/adk/integrations/agent_identity/gcp_auth_provider.py @@ -0,0 +1,284 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +import logging +import os +import time + +from google.adk.agents.callback_context import CallbackContext +from google.adk.auth.auth_credential import AuthCredential +from google.adk.auth.auth_credential import AuthCredentialTypes +from google.adk.auth.auth_credential import HttpAuth +from google.adk.auth.auth_credential import HttpCredentials +from google.adk.auth.auth_credential import OAuth2Auth +from google.adk.auth.auth_tool import AuthConfig +from google.adk.auth.base_auth_provider import BaseAuthProvider +from google.adk.flows.llm_flows.functions import REQUEST_EUC_FUNCTION_CALL_NAME +from google.api_core.client_options import ClientOptions +from google.cloud.iamconnectorcredentials_v1alpha import IAMConnectorCredentialsServiceClient as Client +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsMetadata +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsRequest +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsResponse +from google.longrunning.operations_pb2 import Operation +from typing_extensions import override + +from .gcp_auth_provider_scheme import GcpAuthProviderScheme + +# Notes on the current Agent Identity Credentials service implementation: +# 1. The service does not yet support LROs, so even though the +# retrieve_credentials method returns an Operation object, the methods like +# operation.done() and operation.result() will not work yet. +# 2. For API key flows, the returned Operation contains the credentials. +# 3. For 2-legged OAuth flows, the returned Operation contains pending status, +# client needs to retry the request until response with credentials is +# returned or timeout occurs. +# 4. For 3-legged OAuth flows, the returned Operation contains consent pending +# status along with the authorization URI. + +# TODO: Catch specific exceptions instead of generic ones. + +logger = logging.getLogger("google_adk." + __name__) + +NON_INTERACTIVE_TOKEN_POLL_INTERVAL_SEC: float = 1.0 +NON_INTERACTIVE_TOKEN_POLL_TIMEOUT_SEC: float = 10.0 + + +def _construct_auth_credential( + response: RetrieveCredentialsResponse, +) -> AuthCredential: + """Constructs a simplified HTTP auth credential from the header-token tuple returned by the upstream service.""" + if not response.header or not response.token: + raise ValueError( + "Received either empty header or token from Agent Identity Credentials" + " service." + ) + + header_name, _, header_value = response.header.partition(":") + if ( + header_name.strip().lower() == "authorization" + and header_value.strip().lower().startswith("bearer") + ): + return AuthCredential( + auth_type=AuthCredentialTypes.HTTP, + http=HttpAuth( + scheme="bearer", + credentials=HttpCredentials(token=response.token), + ), + ) + + # Handle custom header. + return AuthCredential( + auth_type=AuthCredentialTypes.HTTP, + http=HttpAuth( + # For custom headers, scheme and credentials fields are not used. + scheme="", + credentials=HttpCredentials(), + additional_headers={ + response.header: response.token, + "X-GOOG-API-KEY": response.token, + }, + ), + ) + + +class GcpAuthProvider(BaseAuthProvider): + """An auth provider that uses the Agent Identity Credentials service to generate access tokens.""" + + _client: Client | None = None + + def __init__(self, client: Client | None = None): + self._client = client + + @property + @override + def supported_auth_schemes(self) -> tuple[type[GcpAuthProviderScheme], ...]: + return (GcpAuthProviderScheme,) + + def _get_client(self) -> Client: + """Lazy loads the client to avoid unnecessary setup on startup.""" + if self._client is None: + client_options = None + if host := os.environ.get("IAM_CONNECTOR_CREDENTIALS_TARGET_HOST"): + client_options = ClientOptions(api_endpoint=host) + self._client = Client(client_options=client_options, transport="rest") + return self._client + + async def _retrieve_credentials( + self, + user_id: str, + auth_scheme: GcpAuthProviderScheme, + ) -> Operation: + request = RetrieveCredentialsRequest( + connector=auth_scheme.name, + user_id=user_id, + scopes=auth_scheme.scopes, + continue_uri=auth_scheme.continue_uri or "", + force_refresh=False, + ) + # TODO: Use async client once available. Temporarily using threading to + # prevent blocking the event loop. + operation = await asyncio.to_thread( + self._get_client().retrieve_credentials, request + ) + return operation.operation + + def _unpack_operation( + self, operation: Operation + ) -> tuple[ + RetrieveCredentialsResponse | None, RetrieveCredentialsMetadata | None + ]: + """Deserializes the response and metadata from the operation.""" + response = None + metadata = None + if operation.response: + response = RetrieveCredentialsResponse.deserialize( + operation.response.value + ) + if operation.metadata: + metadata = RetrieveCredentialsMetadata.deserialize( + operation.metadata.value + ) + return response, metadata + + async def _poll_credentials( + self, user_id: str, auth_scheme: GcpAuthProviderScheme, timeout: float + ) -> Operation: + end_time = time.time() + timeout + while time.time() < end_time: + operation = await self._retrieve_credentials(user_id, auth_scheme) + if operation.done: + return operation + await asyncio.sleep(NON_INTERACTIVE_TOKEN_POLL_INTERVAL_SEC) + raise TimeoutError("Timeout waiting for credentials.") + + @staticmethod + def _is_consent_completed(context: CallbackContext) -> bool: + """Checks if the user consent flow is completed for the current function call.""" + if not context.function_call_id: + return False + + if not context.session: + return False + + events = context.session.events + target_tool_call_id = context.function_call_id + + # Find all relevant function calls and responses + euc_calls = {} + euc_responses = {} + + for event in events: + for call in event.get_function_calls(): + if call.name == REQUEST_EUC_FUNCTION_CALL_NAME: + euc_calls[call.id] = call + for response in event.get_function_responses(): + if response.name == REQUEST_EUC_FUNCTION_CALL_NAME: + euc_responses[response.id] = response + + # Check for a response that matches a call for the current tool invocation + for call_id, _ in euc_responses.items(): + if call_id in euc_calls: + call = euc_calls[call_id] + if ( + call.args + and call.args.get("function_call_id") == target_tool_call_id + ): + return True + return False + + @override + async def get_auth_credential( + self, + auth_config: AuthConfig, + context: CallbackContext | None = None, + ) -> AuthCredential: + """Retrieves credentials using the Agent Identity Credentials service. + + Args: + auth_config: The authentication configuration. + context: Optional context for the callback. + + Returns: + An AuthCredential instance. + + Raises: + ValueError: If auth_scheme is not a GcpAuthProviderScheme. + RuntimeError: If credential retrieval or polling fails. + """ + + auth_scheme = auth_config.auth_scheme + if not isinstance(auth_scheme, GcpAuthProviderScheme): + raise ValueError( + f"Expected GcpAuthProviderScheme, got {type(auth_scheme)}" + ) + + if context is None or context.user_id is None: + raise ValueError( + "GcpAuthProvider requires a context with a valid user_id." + ) + + user_id = context.user_id + + try: + operation = await self._retrieve_credentials(user_id, auth_scheme) + except Exception as e: + raise RuntimeError( + f"Failed to retrieve credential for user '{user_id}' on connector" + f" '{auth_scheme.name}'." + ) from e + + response, metadata = self._unpack_operation(operation) + + if operation.HasField("error"): + raise RuntimeError(f"Operation failed: {operation.error.message}") + + if operation.done: + logger.debug("Auth credential obtained immediately.") + return _construct_auth_credential(response) + + if metadata and metadata.consent_pending: + # Get 2-legged OAuth token. Allow enough time for token exchange. + try: + operation = await self._poll_credentials( + user_id, + auth_scheme, + timeout=NON_INTERACTIVE_TOKEN_POLL_TIMEOUT_SEC, + ) + if operation.HasField("error"): + raise RuntimeError(f"Operation failed: {operation.error.message}") + if operation.done: + logger.debug("Auth credential obtained after polling.") + response, _ = self._unpack_operation(operation) + return _construct_auth_credential(response) + except Exception as e: + raise RuntimeError( + f"Failed to retrieve credential for user '{user_id}' on connector" + f" '{auth_scheme.name}'." + ) from e + + if metadata is not None and metadata.uri_consent_required: + if self._is_consent_completed(context): + raise RuntimeError("Failed to retrieve consent based credential.") + + # Return AuthCredential with only auth_uri to trigger user consent flow. + return AuthCredential( + auth_type=AuthCredentialTypes.OAUTH2, + oauth2=OAuth2Auth( + auth_uri=metadata.uri_consent_required.authorization_uri, + nonce=metadata.uri_consent_required.consent_nonce, + ), + ) diff --git a/src/google/adk/integrations/agent_identity/gcp_auth_provider_scheme.py b/src/google/adk/integrations/agent_identity/gcp_auth_provider_scheme.py new file mode 100644 index 0000000000..e5ac769cca --- /dev/null +++ b/src/google/adk/integrations/agent_identity/gcp_auth_provider_scheme.py @@ -0,0 +1,48 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import List +from typing import Literal +from typing import Optional + +from google.adk.auth.auth_schemes import CustomAuthScheme +from pydantic import Field + + +class GcpAuthProviderScheme(CustomAuthScheme): + """The Agent Identity authentication scheme for Google Cloud Platform. + + Attributes: + name: The name of the GCP Auth Provider resource to use. + scopes: Optional. A list of OAuth2 scopes to request. + continue_uri: Optional. A type of redirect URI. It is distinct from the + standard OAuth2 redirect URI. Its purpose is to reauthenticate the user to + prevent phishing attacks and to finalize the managed OAuth flow. The + standard, Google-hosted OAuth2 redirect URI will redirect the user to this + continue URI. The agent will include this URI in every 3-legged OAuth + request sent to the upstream Agent Identity Credential service. Developers + must ensure this URI is hosted (e.g. on GCP, a third-party cloud, + on-prem), preferably alongside the agent client's web server. + TODO: Add public documentation link for more information once available. + type_: The type of the security scheme, always "gcpAuthProviderScheme". + """ + + type_: Literal["gcpAuthProviderScheme"] = Field( + default="gcpAuthProviderScheme", alias="type" + ) + name: str + scopes: Optional[List[str]] = None + continue_uri: Optional[str] = None diff --git a/tests/integration/integrations/agent_identity/README.md b/tests/integration/integrations/agent_identity/README.md new file mode 100644 index 0000000000..a732b8717b --- /dev/null +++ b/tests/integration/integrations/agent_identity/README.md @@ -0,0 +1,26 @@ +# Integration tests for GCP Agent Identity Credentials service + +Verifies OAuth flows using GCP Agent Identity Credentials service. + +## Setup + +To set up your environment for the first time, run the `uv` setup script: +```bash +cd open_source_workspace +./uv_setup.sh +``` + +Then, activate the virtual environment: +```bash +source .venv/bin/activate +``` + +Then, install test specific packages +```bash +pip install google-cloud-iamconnectorcredentials +``` + +## Run Tests +```bash +pytest -s tests/integration/integrations/agent_identity +``` diff --git a/tests/integration/integrations/agent_identity/test_2lo_flow.py b/tests/integration/integrations/agent_identity/test_2lo_flow.py new file mode 100644 index 0000000000..7af790fef2 --- /dev/null +++ b/tests/integration/integrations/agent_identity/test_2lo_flow.py @@ -0,0 +1,202 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""E2E Integration Test for GCP Agent Identity Auth Provider two-legged OAuth Flow.""" + +import dataclasses +from typing import Any +from unittest import mock + +import pytest + +pytest.importorskip( + "google.cloud.iamconnectorcredentials_v1alpha", + reason="Requires google-cloud-iamconnectorcredentials", +) + +from google.adk import Agent +from google.adk import Runner +from google.adk.auth.auth_tool import AuthConfig +from google.adk.auth.credential_manager import CredentialManager +from google.adk.integrations.agent_identity import gcp_auth_provider +from google.adk.integrations.agent_identity import GcpAuthProvider +from google.adk.integrations.agent_identity import GcpAuthProviderScheme +from google.adk.sessions.in_memory_session_service import InMemorySessionService +from google.adk.tools.base_authenticated_tool import BaseAuthenticatedTool +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsRequest +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsResponse +from google.genai import types + +from tests.unittests import testing_utils + +DUMMY_TOKEN = "fake-gcp-2lo-token-123" +TEST_CONNECTOR_2LO = ( + "projects/test-project/locations/global/connectors/test-connector" +) + + +class DummyTool(BaseAuthenticatedTool): + + def __init__(self, auth_config: AuthConfig) -> None: + super().__init__( + name="dummy_tool", + description="Dummy tool for testing 2LO.", + auth_config=auth_config, + ) + + def _get_declaration(self) -> types.FunctionDeclaration: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters=types.Schema( + type="OBJECT", + properties={}, + ), + ) + + async def _run_async_impl( + self, *, args: dict[str, Any] | None, tool_context: Any, credential: Any + ) -> Any: + # Return the token to prove the provider gave the expected credential + if credential.http and credential.http.credentials: + return credential.http.credentials.token + if credential.oauth2 and credential.oauth2.access_token: + return credential.oauth2.access_token + return None + + +# Mocked execution; pin to a single LLM backend to avoid duplicate runs. +@pytest.mark.parametrize("llm_backend", ["GOOGLE_AI"], indirect=True) +@dataclasses.dataclass +class _DummyOperation: + done: bool = True + error: Any = None + metadata: Any = None + response: Any = dataclasses.field(init=False) + operation: Any = dataclasses.field(init=False) + + def __post_init__(self) -> None: + self.response = mock.Mock() + mock_credential = RetrieveCredentialsResponse( + header="Authorization: Bearer", token=DUMMY_TOKEN + ) + self.response.value = RetrieveCredentialsResponse.serialize(mock_credential) + self.operation = self + + def HasField(self, field_name: str) -> bool: + return getattr(self, field_name, None) is not None + + +@pytest.mark.asyncio +async def test_gcp_agent_identity_2lo_gets_token() -> None: + """Test the end-to-end flow fetching 2LO OAuth token from GCP Agent Identity credentials service.""" + + # Clear registry to isolate tests + CredentialManager._auth_provider_registry._providers.clear() + + # 1. Setup mocked GCP Client to return the fake Bearer token + with mock.patch.object( + gcp_auth_provider, + "Client", + autospec=True, + ) as mock_client_cls: + + mock_operation = _DummyOperation() + + mock_client_cls.return_value.retrieve_credentials.return_value = ( + mock_operation + ) + + # 2. Configure Auth and DummyTool + auth_scheme = GcpAuthProviderScheme( + name=TEST_CONNECTOR_2LO, + scopes=["test-scope"], + ) + auth_config = AuthConfig(auth_scheme=auth_scheme) + dummy_tool = DummyTool(auth_config=auth_config) + + # 3. Setup LLM, Agent, and Runner + # We mock the LLM to just issue the tool call to 'dummy_tool' + mock_model = testing_utils.MockModel.create( + responses=[ + types.Part.from_function_call(name="dummy_tool", args={}), + "Tool executed successfully.", + ] + ) + + agent = Agent( + name="test_agent", + model=mock_model, + instruction="You are an agent. Use the dummy_tool when needed.", + tools=[dummy_tool], + ) + + runner = Runner( + app_name="test_mcp_2lo_app", + agent=agent, + session_service=InMemorySessionService(), + auto_create_session=True, + ) + + # 4. Register Auth Provider + CredentialManager.register_auth_provider(GcpAuthProvider()) + + # 5. Execute Flow + event_list = [] + async for event in runner.run_async( + user_id="test_user", + session_id="test_session1", + new_message=types.UserContent( + parts=[types.Part(text="Get me the token.")] + ), + ): + event_list.append(event) + + # 6. Assertions + + # Assert GCP Agent Identity client was invoked for credentials + expected_request = RetrieveCredentialsRequest( + connector=TEST_CONNECTOR_2LO, + user_id="test_user", + scopes=["test-scope"], + continue_uri="", + force_refresh=False, + ) + mock_client_cls.return_value.retrieve_credentials.assert_called_once_with( + expected_request + ) + + # 3 Events: Model FunctionCall -> Tool FunctionResponse -> Final LLM Text + assert len(event_list) == 3 + last_event = event_list[-1] + assert last_event.content.parts[0].text == "Tool executed successfully." + + # Validate that the mock model received the query and the tool callback + requests = mock_model.requests + # 2 Events: User Input -> Tool FunctionResponse + assert len(requests) == 2 + + # Extract the function response from the prompt payload sent to the LLM + last_request = requests[-1] + function_response = next( + ( + p.function_response + for p in last_request.contents[-1].parts + if p.function_response + ), + None, + ) + + assert function_response.name == "dummy_tool" + assert DUMMY_TOKEN in str(function_response.response) diff --git a/tests/integration/integrations/agent_identity/test_3lo_flow.py b/tests/integration/integrations/agent_identity/test_3lo_flow.py new file mode 100644 index 0000000000..2bf89e7ea6 --- /dev/null +++ b/tests/integration/integrations/agent_identity/test_3lo_flow.py @@ -0,0 +1,304 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""E2E Integration Test for 3LO flow using GCP Agent Identity service.""" + +import dataclasses +from typing import Any +from unittest import mock + +import pytest + +pytest.importorskip( + "google.cloud.iamconnectorcredentials_v1alpha", + reason="Requires google-cloud-iamconnectorcredentials", +) + +from google.adk import Agent +from google.adk import Runner +from google.adk.auth.auth_tool import AuthConfig +from google.adk.auth.credential_manager import CredentialManager +from google.adk.integrations.agent_identity import gcp_auth_provider +from google.adk.integrations.agent_identity import GcpAuthProvider +from google.adk.integrations.agent_identity import GcpAuthProviderScheme +from google.adk.sessions.in_memory_session_service import InMemorySessionService +from google.adk.tools.base_authenticated_tool import BaseAuthenticatedTool +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsMetadata +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsRequest +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsResponse +from google.genai import types + +from tests.unittests import testing_utils + +DUMMY_TOKEN = "mock-token-3legged" +TEST_CONNECTOR_3LO = ( + "projects/my-project/locations/some-location/connectors/test-connector-3lo" +) + + +class DummyTool(BaseAuthenticatedTool): + + def __init__(self, auth_config: AuthConfig) -> None: + super().__init__( + name="dummy_tool", + description="Dummy tool for testing 3LO.", + auth_config=auth_config, + ) + + def _get_declaration(self) -> types.FunctionDeclaration: + return types.FunctionDeclaration( + name=self.name, + description=self.description, + parameters=types.Schema( + type="OBJECT", + properties={}, + ), + ) + + async def _run_async_impl( + self, *, args: dict[str, Any] | None, tool_context: Any, credential: Any + ) -> Any: + # Extract and return the token to prove the provider gave us the expected credential + if credential.http and credential.http.credentials: + return credential.http.credentials.token + if credential.oauth2 and credential.oauth2.access_token: + return credential.oauth2.access_token + + return None + + +@dataclasses.dataclass +class _MockOperation: + done: bool + response_obj: Any = None + metadata_obj: Any = None + error: Any = None + metadata: Any = dataclasses.field(init=False, default=None) + response: Any = dataclasses.field(init=False, default=None) + operation: Any = dataclasses.field(init=False) + + def __post_init__(self) -> None: + if self.metadata_obj: + self.metadata = mock.Mock() + self.metadata.value = RetrieveCredentialsMetadata.serialize( + self.metadata_obj + ) + if self.response_obj: + self.response = mock.Mock() + self.response.value = RetrieveCredentialsResponse.serialize( + self.response_obj + ) + self.operation = self + + def HasField(self, field_name: str) -> bool: + return getattr(self, field_name, None) is not None + + +class MockGcpClient: + """Lightweight in-memory mock for Agent Identity Credentials service 3LO Consent Flow.""" + + def __init__(self) -> None: + self.finalized_connectors = set() + + def retrieve_credentials( + self, + request: RetrieveCredentialsRequest | dict[str, Any] | None = None, + **kwargs: Any, + ) -> _MockOperation: + connector = ( + request.get("connector") + if isinstance(request, dict) + else getattr(request, "connector", None) + ) + + if connector in self.finalized_connectors: + mock_credential = RetrieveCredentialsResponse( + token=DUMMY_TOKEN, header="Authorization: Bearer" + ) + return _MockOperation(done=True, response_obj=mock_credential) + + # Otherwise, return Consent Required + # Auto-finalize for the next call to simulate user approval flow + self.finalized_connectors.add(connector) + + mock_metadata = RetrieveCredentialsMetadata( + uri_consent_required=RetrieveCredentialsMetadata.UriConsentRequired( + authorization_uri="http://mock-auth-uri", + consent_nonce="mock-consent-nonce", + ) + ) + return _MockOperation(done=False, metadata_obj=mock_metadata) + + +# Mocked execution; pin to a single LLM backend to avoid duplicate runs. +@pytest.mark.parametrize("llm_backend", ["GOOGLE_AI"], indirect=True) +@pytest.mark.asyncio +async def test_gcp_agent_identity_3lo_user_consent_flow() -> None: + # Clear registry to isolate tests + CredentialManager._auth_provider_registry._providers.clear() + + # 1. Setup mocked GCP Client to simulate stateful 3LO process + mock_gcp_client = MockGcpClient() + + with mock.patch.object( + gcp_auth_provider, + "Client", + autospec=True, + ) as mock_client_cls: + mock_client_cls.return_value.retrieve_credentials.side_effect = ( + mock_gcp_client.retrieve_credentials + ) + + # 2. Configure Auth and DummyTool + auth_scheme = GcpAuthProviderScheme( + name=TEST_CONNECTOR_3LO, + scopes=["test-scope"], + continue_uri="https://example.com/continue", + ) + auth_config = AuthConfig(auth_scheme=auth_scheme) + dummy_tool = DummyTool(auth_config=auth_config) + + # 3. Setup LLM, Agent, and Runner + # We mock the LLM to just issue the tool call to 'dummy_tool' + mock_model = testing_utils.MockModel.create( + responses=[ + types.Part.from_function_call(name="dummy_tool", args={}), + "I am waiting for your authorization.", + "Tool executed successfully.", + ] + ) + + agent = Agent( + name="test_agent", + model=mock_model, + instruction="You are an agent. Use the dummy_tool when needed.", + tools=[dummy_tool], + ) + + runner = Runner( + app_name="test_mcp_3lo_app", + agent=agent, + session_service=InMemorySessionService(), + auto_create_session=True, + ) + + # 4. Register Auth Provider + CredentialManager.register_auth_provider(GcpAuthProvider()) + + # 5. Execute Flow + session = await runner.session_service.create_session( + app_name="test_mcp_3lo_app", user_id="test_user" + ) + + event_list = [] + + # Step 5a: User sends message, Agent requests credential + async for event in runner.run_async( + user_id="test_user", + session_id=session.id, + new_message=types.UserContent( + parts=[types.Part(text="Get me the token.")] + ), + ): + event_list.append(event) + + def _find_auth_request_event(events): + for event in events: + for part in event.content.parts: + if ( + part.function_call + and part.function_call.name == "adk_request_credential" + ): + return event + return None + + auth_request_event = _find_auth_request_event(event_list) + + assert ( + auth_request_event + ), "Expected adk_request_credential tool call not found." + + # Step 5b: Simulate User Consent + call_part = next( + p for p in auth_request_event.content.parts if p.function_call + ) + request_auth_config = call_part.function_call.args.get("authConfig", {}) + + assert ( + request_auth_config.get("exchangedAuthCredential", {}) + .get("oauth2", {}) + .get("nonce") + == "mock-consent-nonce" + ) + + # Step 5c: User acknowledges credential request + response_part = types.Part.from_function_response( + name="adk_request_credential", response=request_auth_config + ) + response_part.function_response.id = call_part.function_call.id + + final_response_parts = [] + async for event in runner.run_async( + user_id="test_user", + session_id=session.id, + new_message=types.UserContent(parts=[response_part]), + ): + event_list.append(event) + if event.content: + for part in event.content.parts: + if part.text: + final_response_parts.append(part.text) + + final_response_text = "".join(final_response_parts) + + # 6. Assertions + + # Assert GCP Agent Identity client was invoked for credentials twice + # (Initial Request + Post-Consent call) + assert mock_client_cls.return_value.retrieve_credentials.call_count == 2 + expected_request = RetrieveCredentialsRequest( + connector=TEST_CONNECTOR_3LO, + user_id="test_user", + scopes=["test-scope"], + continue_uri="https://example.com/continue", + force_refresh=False, + ) + mock_client_cls.return_value.retrieve_credentials.assert_called_with( + expected_request + ) + + assert "Tool executed successfully." in final_response_text + + # Validate requests received by the mock model + requests = mock_model.requests + # Events: + # 1. User Input (Get me the token.) + # 2. LLM (I am waiting for your authorization.) + # 3. LLM (Tool executed successfully.) + assert len(requests) == 3 + + # Extract the function response from the prompt payload sent to the LLM + last_request = requests[-1] + function_response = next( + ( + p.function_response + for p in last_request.contents[-1].parts + if p.function_response + ), + None, + ) + + assert function_response is not None + assert function_response.name == "dummy_tool" + assert DUMMY_TOKEN in str(function_response.response) diff --git a/tests/unittests/integrations/agent_identity/test_gcp_auth_provider.py b/tests/unittests/integrations/agent_identity/test_gcp_auth_provider.py new file mode 100644 index 0000000000..f638d0088a --- /dev/null +++ b/tests/unittests/integrations/agent_identity/test_gcp_auth_provider.py @@ -0,0 +1,434 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from unittest.mock import Mock +from unittest.mock import patch + +import pytest + +pytest.importorskip( + "google.cloud.iamconnectorcredentials_v1alpha", + reason="Requires google-cloud-iamconnectorcredentials", +) + +from google.adk.agents.callback_context import CallbackContext +from google.adk.auth.auth_credential import AuthCredentialTypes +from google.adk.auth.auth_tool import AuthConfig +from google.adk.flows.llm_flows.functions import REQUEST_EUC_FUNCTION_CALL_NAME +from google.adk.integrations.agent_identity import gcp_auth_provider +from google.adk.integrations.agent_identity import GcpAuthProvider +from google.adk.integrations.agent_identity import GcpAuthProviderScheme +from google.adk.sessions.session import Session +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsMetadata +from google.cloud.iamconnectorcredentials_v1alpha import RetrieveCredentialsResponse +from google.longrunning.operations_pb2 import Operation +from google.protobuf.any_pb2 import Any +from google.rpc.status_pb2 import Status + + +@pytest.fixture +def mock_client(): + return Mock(spec=gcp_auth_provider.Client) + + +@pytest.fixture +def provider(mock_client): + return GcpAuthProvider(client=mock_client) + + +@pytest.fixture +def auth_config(): + scheme = GcpAuthProviderScheme( + name="projects/test-project/locations/global/connectors/test-connector", + scopes=["test-scope"], + continue_uri="https://example.com/continue", + ) + return Mock(spec=AuthConfig, auth_scheme=scheme) + + +@pytest.fixture +def mock_operation(mocker, mock_client): + op = Operation(done=True) + + class DummyCall: + + def __init__(self, operation): + self.operation = operation + + mock_client.retrieve_credentials.return_value = DummyCall(op) + return op + + +@pytest.fixture +def context(): + context = Mock(spec=CallbackContext) + context.user_id = "user" + context.function_call_id = "call_123" + session = Mock(spec=Session) + session.events = [] + context.session = session + + return context + + +@patch.dict(gcp_auth_provider.os.environ, clear=True) +@patch.object(gcp_auth_provider, "Client") +def test_get_client_uses_rest_transport(mock_client_class): + provider = GcpAuthProvider() + provider._get_client() + + mock_client_class.assert_called_once() + _, kwargs = mock_client_class.call_args + assert kwargs.get("transport") == "rest" + + +@patch.dict( + gcp_auth_provider.os.environ, + {"IAM_CONNECTOR_CREDENTIALS_TARGET_HOST": "some-host"}, +) +@patch.object(gcp_auth_provider, "Client") +@patch.object(gcp_auth_provider, "ClientOptions") +def test_get_client_with_env_var(mock_client_options_class, mock_client_class): + provider = GcpAuthProvider() + client = provider._get_client() + + assert client == mock_client_class.return_value + mock_client_options_class.assert_called_once_with(api_endpoint="some-host") + mock_client_class.assert_called_once_with( + client_options=mock_client_options_class.return_value, transport="rest" + ) + + +# ============================================================================== +# Non-interactive auth flows (API key and 2-legged OAuth) +# ============================================================================== + + +async def test_get_auth_credential_raises_error_for_invalid_auth_scheme( + provider, context +): + """Test get_auth_credential raises ValueError for invalid auth scheme.""" + invalid_auth_config = Mock(spec=AuthConfig) + invalid_auth_config.auth_scheme = Mock() # Not GcpAuthProviderScheme + + with pytest.raises(ValueError, match="Expected GcpAuthProviderScheme, got"): + await provider.get_auth_credential(invalid_auth_config, context) + + +async def test_get_auth_credential_raises_error_if_context_is_missing( + provider, auth_config +): + """Test get_auth_credential raises ValueError if context is missing.""" + with pytest.raises( + ValueError, + match="GcpAuthProvider requires a context with a valid user_id", + ): + await provider.get_auth_credential(auth_config, context=None) + + +async def test_get_auth_credential_raises_error_if_user_id_is_missing( + provider, auth_config +): + """Test get_auth_credential raises ValueError if user_id is missing.""" + context = Mock(spec=CallbackContext) + context.user_id = None + with pytest.raises( + ValueError, + match="GcpAuthProvider requires a context with a valid user_id", + ): + await provider.get_auth_credential(auth_config, context=context) + + +async def test_get_auth_credential_returns_credential_if_available_immediately( + mock_client, + mock_operation, + auth_config, + context, + provider, +): + """Test get_auth_credential returns credential if available immediately.""" + mock_credential = RetrieveCredentialsResponse( + header="Authorization: Bearer", token="test-token" + ) + mock_operation.response.value = RetrieveCredentialsResponse.serialize( + mock_credential + ) + + auth_credential = await provider.get_auth_credential(auth_config, context) + + assert auth_credential.auth_type == AuthCredentialTypes.HTTP + assert auth_credential.http.scheme == "bearer" + assert auth_credential.http.credentials.token == "test-token" + mock_client.retrieve_credentials.assert_called_once() + + +async def test_get_auth_credential_raises_error_if_upstream_returns_empty_header( + mock_operation, + auth_config, + context, + provider, +): + """Test get_auth_credential raises RuntimeError for empty header.""" + mock_credential = RetrieveCredentialsResponse(header="", token="test-token") + mock_operation.response.value = RetrieveCredentialsResponse.serialize( + mock_credential + ) + + with pytest.raises( + ValueError, + match=( + "Received either empty header or token from Agent Identity" + " Credentials service." + ), + ): + await provider.get_auth_credential(auth_config, context) + + +async def test_get_auth_credential_raises_error_if_upstream_returns_empty_token( + mock_operation, + auth_config, + context, + provider, +): + """Test get_auth_credential raises RuntimeError for empty token.""" + mock_credential = RetrieveCredentialsResponse( + header="Authorization: Bearer", token="" + ) + mock_operation.response.value = RetrieveCredentialsResponse.serialize( + mock_credential + ) + + with pytest.raises( + ValueError, + match=( + "Received either empty header or token from Agent Identity" + " Credentials service." + ), + ): + await provider.get_auth_credential(auth_config, context) + + +async def test_get_auth_credential_returns_credential_if_upstream_returns_custom_header( + mock_operation, + auth_config, + context, + provider, +): + """Test get_auth_credential returns valid credential for custom header and sets X-GOOG-API-KEY header.""" + mock_credential = RetrieveCredentialsResponse( + header="some-x-api-key", token="test-token" + ) + mock_operation.response.value = RetrieveCredentialsResponse.serialize( + mock_credential + ) + + auth_credential = await provider.get_auth_credential(auth_config, context) + + assert auth_credential.auth_type == AuthCredentialTypes.HTTP + assert not auth_credential.http.scheme + assert auth_credential.http.credentials.token is None + assert auth_credential.http.additional_headers == { + "some-x-api-key": "test-token", + "X-GOOG-API-KEY": "test-token", + } + + +async def test_get_auth_credential_raises_error_if_upstream_operation_errors( + mock_operation, auth_config, context, provider +): + """Test get_auth_credential raises RuntimeError for failed operations.""" + mock_operation.error.message = "OAuth server error" + mock_operation.done = False + + with pytest.raises( + RuntimeError, match="Operation failed: OAuth server error" + ): + await provider.get_auth_credential(auth_config, context) + + +async def test_get_auth_credential_raises_error_if_upstream_call_fails( + mock_client, auth_config, context, provider +): + """Test get_auth_credential raises RuntimeError for failed calls.""" + mock_client.retrieve_credentials.side_effect = Exception( + "API Quota Exhausted" + ) + + with pytest.raises( + RuntimeError, + match="Failed to retrieve credential for user 'user' on connector", + ) as exc_info: + await provider.get_auth_credential(auth_config, context) + + # Assert that the original Exception is the chained cause! + assert str(exc_info.value.__cause__) == "API Quota Exhausted" + + +@patch.object(gcp_auth_provider.time, "time") +async def test_get_auth_credential_raises_error_if_polling_times_out( + mock_time, + mock_operation, + auth_config, + context, + provider, +): + """Test get_auth_credential raises RuntimeError if polling times out.""" + + # Force the operation into the polling loop state + meta_pb = RetrieveCredentialsMetadata.pb()() + meta_pb.consent_pending.SetInParent() + meta = RetrieveCredentialsMetadata.deserialize(meta_pb.SerializeToString()) + mock_operation.metadata.value = RetrieveCredentialsMetadata.serialize(meta) + + # First call sets start_time=0.0, second call checks time > timeout + # (20.0 > 10.0) + mock_time.side_effect = [0.0, 20.0] + + mock_metadata = Mock(spec=RetrieveCredentialsMetadata) + mock_metadata.consent_pending = True + mock_metadata.uri_consent_required = False + mock_operation.done = True + mock_operation.ClearField("error") + mock_client = Mock(spec=gcp_auth_provider.Client) + mock_client.retrieve_credentials.side_effect = Exception( + "Timeout waiting for credentials." + ) + provider._client = mock_client + + with pytest.raises( + RuntimeError, + match="Failed to retrieve credential for user 'user' on connector", + ) as exc_info: + await provider.get_auth_credential(auth_config, context) + + assert "Timeout waiting for credentials." in str(exc_info.value.__cause__) + + +# ============================================================================== +# Interactive Auth Flows (3-legged OAuth for User Consents) +# ============================================================================== + + +async def test_get_auth_credential_initiates_user_consent( + mock_operation, auth_config, context, provider +): + # Explicitly set the mock behavior for this test + expected_uri = "https://example.com/auth" + expected_nonce = "sample-nonce-123" + meta = RetrieveCredentialsMetadata({ + "uri_consent_required": { + "authorization_uri": expected_uri, + "consent_nonce": expected_nonce, + } + }) + mock_operation.metadata.value = RetrieveCredentialsMetadata.serialize(meta) + mock_operation.done = False + # Assert that there is no prior user consent completion event + assert not context.session.events + + credential = await provider.get_auth_credential(auth_config, context) + + assert credential is not None + assert credential.auth_type == AuthCredentialTypes.OAUTH2 + assert credential.oauth2.auth_uri == expected_uri + assert credential.oauth2.nonce == expected_nonce + + +async def test_get_auth_credential_returns_fresh_auth_uri_for_repeated_requests( + mock_client, mock_operation, auth_config, context, provider +): + """Test that repeated calls fetch fresh auth URIs if consent is still pending.""" + # Arrange: Explicit initial URI + initial_uri = "https://example.com/auth" + initial_nonce = "initial-nonce-123" + meta1 = RetrieveCredentialsMetadata({ + "uri_consent_required": { + "authorization_uri": initial_uri, + "consent_nonce": initial_nonce, + } + }) + mock_operation.metadata.value = RetrieveCredentialsMetadata.serialize(meta1) + mock_operation.done = False + + credential1 = await provider.get_auth_credential(auth_config, context) + assert credential1.oauth2.auth_uri == initial_uri + assert credential1.oauth2.nonce == initial_nonce + + # Arrange: Explicit new URI for the second call + fresh_auth_uri = "https://example.com/auth_new" + fresh_nonce = "fresh-nonce-456" + meta2 = RetrieveCredentialsMetadata({ + "uri_consent_required": { + "authorization_uri": fresh_auth_uri, + "consent_nonce": fresh_nonce, + } + }) + mock_operation.metadata.value = RetrieveCredentialsMetadata.serialize(meta2) + + credential2 = await provider.get_auth_credential(auth_config, context) + + assert mock_client.retrieve_credentials.call_count == 2 + assert credential2.oauth2.auth_uri == fresh_auth_uri + assert credential2.oauth2.nonce == fresh_nonce + + +async def test_get_auth_credential_returns_token_if_consent_was_completed( + mock_operation, auth_config, context, provider +): + # Setup mock credential for successful credential retrieval + mock_credential = RetrieveCredentialsResponse( + header="Authorization: Bearer", token="test-token" + ) + mock_operation.response.value = RetrieveCredentialsResponse.serialize( + mock_credential + ) + + # Create mock events + # 1. FunctionCall event for adk_request_credential + function_call = Mock() + function_call.id = "auth-req-1" + function_call.name = REQUEST_EUC_FUNCTION_CALL_NAME + function_call.args = {"function_call_id": "call-123"} + + event1 = Mock() + event1.get_function_calls.return_value = [function_call] + event1.get_function_responses.return_value = [] + + # 2. FunctionResponse event for adk_request_credential + function_response = Mock() + function_response.id = "auth-req-1" + function_response.name = REQUEST_EUC_FUNCTION_CALL_NAME + + event2 = Mock() + event2.get_function_calls.return_value = [] + event2.get_function_responses.return_value = [function_response] + + # Setup tool context and event history (order of events matters) + context.session.events = [event1, event2] + context.function_call_id = "call-123" + + # Also set uri_consent_required to True-ish so it enters the check block + meta = RetrieveCredentialsMetadata( + uri_consent_required=RetrieveCredentialsMetadata.UriConsentRequired() + ) + mock_operation.metadata.value = RetrieveCredentialsMetadata.serialize(meta) + + # Execute + auth_credential = await provider.get_auth_credential(auth_config, context) + + # Verify + assert auth_credential is not None + assert auth_credential.auth_type == AuthCredentialTypes.HTTP + assert auth_credential.http.scheme == "bearer" + assert auth_credential.http.credentials.token == "test-token" From 547766a47779915a8a47745237a46882a02dae9a Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Mon, 13 Apr 2026 11:15:51 -0700 Subject: [PATCH 176/192] fix: Include a link to the deployed agent After an agent gets deployed to agent engine, include a link to try out the agent. Co-authored-by: Kathy Wu PiperOrigin-RevId: 899093067 --- src/google/adk/cli/cli_deploy.py | 20 ++++++++++++++++++++ tests/unittests/cli/utils/test_cli_deploy.py | 14 ++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/google/adk/cli/cli_deploy.py b/src/google/adk/cli/cli_deploy.py index e0c7f9b28c..ca06b1704f 100644 --- a/src/google/adk/cli/cli_deploy.py +++ b/src/google/adk/cli/cli_deploy.py @@ -808,6 +808,24 @@ def to_cloud_run( shutil.rmtree(temp_folder) +def _print_agent_engine_url(resource_name: str) -> None: + """Prints the Google Cloud Console URL for the deployed agent.""" + parts = resource_name.split('/') + if len(parts) >= 6 and parts[0] == 'projects' and parts[2] == 'locations': + project_id = parts[1] + region = parts[3] + engine_id = parts[5] + + url = ( + 'https://console.cloud.google.com/agent-platform/runtimes' + f'/locations/{region}/agent-engines/{engine_id}/playground' + f'?project={project_id}' + ) + click.secho( + f'\n🎉 View your deployed agent here:\n{url}\n', fg='cyan', bold=True + ) + + def to_agent_engine( *, agent_folder: str, @@ -1150,11 +1168,13 @@ def to_agent_engine( f'✅ Created agent engine: {agent_engine.api_resource.name}', fg='green', ) + _print_agent_engine_url(agent_engine.api_resource.name) else: if project and region and not agent_engine_id.startswith('projects/'): agent_engine_id = f'projects/{project}/locations/{region}/reasoningEngines/{agent_engine_id}' client.agent_engines.update(name=agent_engine_id, config=agent_config) click.secho(f'✅ Updated agent engine: {agent_engine_id}', fg='green') + _print_agent_engine_url(agent_engine_id) finally: click.echo(f'Cleaning up the temp folder: {temp_folder}') shutil.rmtree(agent_src_path) diff --git a/tests/unittests/cli/utils/test_cli_deploy.py b/tests/unittests/cli/utils/test_cli_deploy.py index ed1aa8cc60..cf89863939 100644 --- a/tests/unittests/cli/utils/test_cli_deploy.py +++ b/tests/unittests/cli/utils/test_cli_deploy.py @@ -240,6 +240,20 @@ def test_agent_engine_app_template_compiles_with_windows_paths() -> None: compile(rendered, "", "exec") +def test_print_agent_engine_url() -> None: + """It should print the correct URL for a fully-qualified resource name.""" + with mock.patch("click.secho") as mocked_secho: + cli_deploy._print_agent_engine_url( + "projects/my-project/locations/us-central1/reasoningEngines/123456" + ) + mocked_secho.assert_called_once() + call_args = mocked_secho.call_args[0][0] + assert "my-project" in call_args + assert "us-central1" in call_args + assert "123456" in call_args + assert "playground" in call_args + + @pytest.mark.parametrize("include_requirements", [True, False]) def test_to_agent_engine_happy_path( monkeypatch: pytest.MonkeyPatch, From f2c68eb1536f1c0018c2cf7ee3f4417ca442080c Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Mon, 13 Apr 2026 11:38:40 -0700 Subject: [PATCH 177/192] feat: Add Auth Provider support to agent registry Co-authored-by: Kathy Wu PiperOrigin-RevId: 899104727 --- .../agent_registry/agent_registry.py | 36 ++++++++++++++- .../agent_registry/test_agent_registry.py | 45 +++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) diff --git a/src/google/adk/integrations/agent_registry/agent_registry.py b/src/google/adk/integrations/agent_registry/agent_registry.py index 9ff71cd9d5..62b0b53d03 100644 --- a/src/google/adk/integrations/agent_registry/agent_registry.py +++ b/src/google/adk/integrations/agent_registry/agent_registry.py @@ -36,6 +36,7 @@ from google.adk.agents.remote_a2a_agent import RemoteA2aAgent from google.adk.auth.auth_credential import AuthCredential from google.adk.auth.auth_schemes import AuthScheme +from google.adk.integrations.agent_identity.gcp_auth_provider_scheme import GcpAuthProviderScheme from google.adk.telemetry.tracing import GCP_MCP_SERVER_DESTINATION_ID from google.adk.tools.base_tool import BaseTool from google.adk.tools.mcp_tool.mcp_session_manager import SseConnectionParams @@ -292,8 +293,24 @@ def get_mcp_toolset( mcp_server_name: str, auth_scheme: AuthScheme | None = None, auth_credential: AuthCredential | None = None, + *, + continue_uri: str | None = None, ) -> McpToolset: - """Constructs an McpToolset instance from a registered MCP Server.""" + """Constructs an McpToolset from a registered MCP Server. + + If `auth_scheme` is omitted, it is automatically resolved from the server's + IAM bindings via `GcpAuthProviderScheme`. + + Args: + mcp_server_name: Resource name of the MCP Server. + auth_scheme: Optional auth scheme. Resolved via bindings if omitted. + auth_credential: Optional auth credential. + continue_uri: Optional continue URI to override what is in the auth + provider. + + Returns: + An McpToolset for the MCP server. + """ server_details = self.get_mcp_server(mcp_server_name) name = self._clean_name(server_details.get("displayName", mcp_server_name)) mcp_server_id = server_details.get("mcpServerId") @@ -313,6 +330,23 @@ def get_mcp_toolset( ) headers = self._get_auth_headers() if _is_google_api(endpoint_uri) else None + if mcp_server_id and not auth_scheme: + try: + bindings_data = self._make_request("bindings") + for b in bindings_data.get("bindings", []): + target_id = b.get("target", {}).get("identifier", "") + if target_id.endswith(mcp_server_id): + auth_provider = b.get("authProviderBinding", {}).get("authProvider") + if auth_provider: + auth_scheme = GcpAuthProviderScheme( + name=auth_provider, continue_uri=continue_uri + ) + break + except Exception as e: + logger.warning( + f"Failed to fetch bindings for MCP Server {mcp_server_name}: {e}" + ) + connection_params = StreamableHTTPConnectionParams( url=endpoint_uri, headers=headers, diff --git a/tests/unittests/integrations/agent_registry/test_agent_registry.py b/tests/unittests/integrations/agent_registry/test_agent_registry.py index 1a454131ef..dd1678d780 100644 --- a/tests/unittests/integrations/agent_registry/test_agent_registry.py +++ b/tests/unittests/integrations/agent_registry/test_agent_registry.py @@ -637,3 +637,48 @@ def test_get_model_name_raises_value_error_if_no_uri( mock_get_endpoint.return_value = {} with pytest.raises(ValueError, match="Connection URI not found"): registry.get_model_name("test-endpoint") + + @patch.object(AgentRegistry, "_make_request") + def test_get_mcp_toolset_with_binding(self, mock_make_request, registry): + def side_effect(*args, **kwargs): + if args[0] == "test-mcp": + return { + "displayName": "TestPrefix", + "mcpServerId": "server-456", + "interfaces": [{ + "url": "https://mcp.com", + "protocolBinding": "JSONRPC", + }], + } + if args[0] == "bindings": + return { + "bindings": [{ + "target": { + "identifier": ( + "urn:mcp:projects-123:projects:123:locations:l:mcpServers:server-456" + ) + }, + "authProviderBinding": { + "authProvider": ( + "projects/123/locations/l/authProviders/ap-789" + ) + }, + }] + } + return {} + + mock_make_request.side_effect = side_effect + + registry._credentials.token = "token" + registry._credentials.refresh = MagicMock() + + toolset = registry.get_mcp_toolset( + "test-mcp", continue_uri="https://override.com/continue" + ) + assert isinstance(toolset, McpToolset) + assert toolset._auth_scheme is not None + assert ( + toolset._auth_scheme.name + == "projects/123/locations/l/authProviders/ap-789" + ) + assert toolset._auth_scheme.continue_uri == "https://override.com/continue" From cbcb5e6002b5bae89de5309caf7b9bb02d563cfc Mon Sep 17 00:00:00 2001 From: George Weale Date: Mon, 13 Apr 2026 11:46:08 -0700 Subject: [PATCH 178/192] fix: validate user_id and session_id against path traversal Closes #5110 Co-authored-by: George Weale PiperOrigin-RevId: 899108631 --- .../adk/artifacts/file_artifact_service.py | 27 ++++++++ .../artifacts/test_artifact_service.py | 63 +++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/src/google/adk/artifacts/file_artifact_service.py b/src/google/adk/artifacts/file_artifact_service.py index b0078e27ce..9c3870b6e3 100644 --- a/src/google/adk/artifacts/file_artifact_service.py +++ b/src/google/adk/artifacts/file_artifact_service.py @@ -138,6 +138,31 @@ def _is_user_scoped(session_id: Optional[str], filename: str) -> bool: return session_id is None or _file_has_user_namespace(filename) +def _validate_path_segment(value: str, field_name: str) -> None: + """Rejects values that could alter the constructed filesystem path. + + Args: + value: The caller-supplied identifier (e.g. user_id or session_id). + field_name: Human-readable name used in the error message. + + Raises: + InputValidationError: If the value contains path separators, traversal + segments, or null bytes. + """ + if not value: + raise InputValidationError(f"{field_name} must not be empty.") + if "\x00" in value: + raise InputValidationError(f"{field_name} must not contain null bytes.") + if "/" in value or "\\" in value: + raise InputValidationError( + f"{field_name} {value!r} must not contain path separators." + ) + if value in (".", "..") or ".." in value.split("/"): + raise InputValidationError( + f"{field_name} {value!r} must not contain traversal segments." + ) + + def _user_artifacts_dir(base_root: Path) -> Path: """Returns the path that stores user-scoped artifacts.""" return base_root / "artifacts" @@ -145,6 +170,7 @@ def _user_artifacts_dir(base_root: Path) -> Path: def _session_artifacts_dir(base_root: Path, session_id: str) -> Path: """Returns the path that stores session-scoped artifacts.""" + _validate_path_segment(session_id, "session_id") return base_root / "sessions" / session_id / "artifacts" @@ -220,6 +246,7 @@ def __init__(self, root_dir: Path | str): def _base_root(self, user_id: str, /) -> Path: """Returns the artifacts root directory for a user.""" + _validate_path_segment(user_id, "user_id") return self.root_dir / "users" / user_id def _scope_root( diff --git a/tests/unittests/artifacts/test_artifact_service.py b/tests/unittests/artifacts/test_artifact_service.py index 25294d4909..8b82397097 100644 --- a/tests/unittests/artifacts/test_artifact_service.py +++ b/tests/unittests/artifacts/test_artifact_service.py @@ -744,6 +744,69 @@ async def test_file_save_artifact_rejects_out_of_scope_paths( ) +@pytest.mark.asyncio +@pytest.mark.parametrize( + "user_id", + [ + "../escape", + "../../etc", + "foo/../../bar", + "valid/../..", + "..", + ".", + "has/slash", + "back\\slash", + "null\x00byte", + "", + ], +) +async def test_file_save_artifact_rejects_traversal_in_user_id( + tmp_path, user_id +): + """FileArtifactService rejects user_id values that escape root_dir.""" + artifact_service = FileArtifactService(root_dir=tmp_path / "artifacts") + part = types.Part(text="content") + with pytest.raises(InputValidationError): + await artifact_service.save_artifact( + app_name="myapp", + user_id=user_id, + session_id="sess123", + filename="safe.txt", + artifact=part, + ) + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "session_id", + [ + "../escape", + "../../tmp", + "foo/../../bar", + "..", + ".", + "has/slash", + "back\\slash", + "null\x00byte", + "", + ], +) +async def test_file_save_artifact_rejects_traversal_in_session_id( + tmp_path, session_id +): + """FileArtifactService rejects session_id values that escape root_dir.""" + artifact_service = FileArtifactService(root_dir=tmp_path / "artifacts") + part = types.Part(text="content") + with pytest.raises(InputValidationError): + await artifact_service.save_artifact( + app_name="myapp", + user_id="user123", + session_id=session_id, + filename="safe.txt", + artifact=part, + ) + + @pytest.mark.asyncio async def test_file_save_artifact_rejects_absolute_path_within_scope(tmp_path): """Absolute filenames are rejected even when they point inside the scope.""" From a64a8e46480753439b91b9cfd41fd190b4dad493 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Mon, 13 Apr 2026 14:48:30 -0700 Subject: [PATCH 179/192] feat: Live avatar support in ADK Testing plan: Added new unit tests - `test_avatar_config_initialization` - `test_avatar_config_with_name` - `test_receive_video_content` - `test_streaming_with_avatar_config` PiperOrigin-RevId: 899193911 --- pyproject.toml | 2 +- src/google/adk/agents/run_config.py | 3 + src/google/adk/flows/llm_flows/basic.py | 3 + .../adk/models/gemini_llm_connection.py | 17 +--- src/google/adk/utils/model_name_utils.py | 6 +- tests/unittests/agents/test_run_config.py | 33 +++++++ .../models/test_gemini_llm_connection.py | 40 +++++++++ .../streaming/test_live_streaming_configs.py | 87 +++++++++++++++++++ 8 files changed, 170 insertions(+), 21 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 15e6054c9f..4cbdb4c246 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,7 +44,7 @@ dependencies = [ "google-cloud-spanner>=3.56.0, <4.0.0", # For Spanner database "google-cloud-speech>=2.30.0, <3.0.0", # For Audio Transcription "google-cloud-storage>=2.18.0, <4.0.0", # For GCS Artifact service - "google-genai>=1.64.0, <2.0.0", # Google GenAI SDK + "google-genai>=1.72.0, <2.0.0", # Google GenAI SDK "graphviz>=0.20.2, <1.0.0", # Graphviz for graph rendering "httpx>=0.27.0, <1.0.0", # HTTP client library "jsonschema>=4.23.0, <5.0.0", # Agent Builder config validation diff --git a/src/google/adk/agents/run_config.py b/src/google/adk/agents/run_config.py index 4790172966..e059cd957d 100644 --- a/src/google/adk/agents/run_config.py +++ b/src/google/adk/agents/run_config.py @@ -198,6 +198,9 @@ class RunConfig(BaseModel): response_modalities: Optional[list[str]] = None """The output modalities. If not set, it's default to AUDIO.""" + avatar_config: Optional[types.AvatarConfig] = None + """Avatar configuration for the live agent.""" + save_input_blobs_as_artifacts: bool = Field( default=False, deprecated=True, diff --git a/src/google/adk/flows/llm_flows/basic.py b/src/google/adk/flows/llm_flows/basic.py index 8751f9b3a2..8e9bfa514c 100644 --- a/src/google/adk/flows/llm_flows/basic.py +++ b/src/google/adk/flows/llm_flows/basic.py @@ -90,6 +90,9 @@ def _build_basic_request( llm_request.live_connect_config.context_window_compression = ( invocation_context.run_config.context_window_compression ) + llm_request.live_connect_config.avatar_config = ( + invocation_context.run_config.avatar_config + ) class _BasicLlmRequestProcessor(BaseLlmRequestProcessor): diff --git a/src/google/adk/models/gemini_llm_connection.py b/src/google/adk/models/gemini_llm_connection.py index 8f491dc88b..5cd1976f41 100644 --- a/src/google/adk/models/gemini_llm_connection.py +++ b/src/google/adk/models/gemini_llm_connection.py @@ -115,16 +115,7 @@ async def send_content(self, content: types.Content): is_gemini_31 = model_name_utils.is_gemini_3_1_flash_live( self._model_version ) - is_gemini_api = self._api_backend == GoogleLLMVariant.GEMINI_API - - # As of now, Gemini 3.1 Flash Live is only available in Gemini API, not - # Vertex AI. - if ( - is_gemini_31 - and is_gemini_api - and len(content.parts) == 1 - and content.parts[0].text - ): + if is_gemini_31 and len(content.parts) == 1 and content.parts[0].text: logger.debug('Using send_realtime_input for Gemini 3.1 text input') await self._gemini_session.send_realtime_input( text=content.parts[0].text @@ -149,11 +140,7 @@ async def send_realtime(self, input: RealtimeInput): is_gemini_31 = model_name_utils.is_gemini_3_1_flash_live( self._model_version ) - is_gemini_api = self._api_backend == GoogleLLMVariant.GEMINI_API - - # As of now, Gemini 3.1 Flash Live is only available in Gemini API, not - # Vertex AI. - if is_gemini_31 and is_gemini_api: + if is_gemini_31: if input.mime_type and input.mime_type.startswith('audio/'): await self._gemini_session.send_realtime_input(audio=input) elif input.mime_type and input.mime_type.startswith('image/'): diff --git a/src/google/adk/utils/model_name_utils.py b/src/google/adk/utils/model_name_utils.py index 86fd79ab64..1090493a4d 100644 --- a/src/google/adk/utils/model_name_utils.py +++ b/src/google/adk/utils/model_name_utils.py @@ -130,9 +130,6 @@ def is_gemini_2_or_above(model_string: Optional[str]) -> bool: def is_gemini_3_1_flash_live(model_string: Optional[str]) -> bool: """Check if the model is a Gemini 3.1 Flash Live model. - Note: This is a very specific model name for live bidi streaming, so we check - for exact match. - Args: model_string: The model name @@ -141,5 +138,4 @@ def is_gemini_3_1_flash_live(model_string: Optional[str]) -> bool: """ if not model_string: return False - - return model_string == 'gemini-3.1-flash-live-preview' + return model_string.startswith('gemini-3.1-flash-live') diff --git a/tests/unittests/agents/test_run_config.py b/tests/unittests/agents/test_run_config.py index c34e9b66b6..cbb82af019 100644 --- a/tests/unittests/agents/test_run_config.py +++ b/tests/unittests/agents/test_run_config.py @@ -17,6 +17,7 @@ from unittest.mock import patch from google.adk.agents.run_config import RunConfig +from google.genai import types import pytest @@ -64,3 +65,35 @@ def test_audio_transcription_configs_are_not_shared_between_instances(): assert ( config1.input_audio_transcription is not config2.input_audio_transcription ) + + +def test_avatar_config_initialization(): + custom_avatar = types.CustomizedAvatar( + image_mime_type="image/jpeg", image_data=b"image_bytes" + ) + avatar_config = types.AvatarConfig( + audio_bitrate_bps=128000, + video_bitrate_bps=1000000, + customized_avatar=custom_avatar, + ) + run_config = RunConfig(avatar_config=avatar_config) + + assert run_config.avatar_config == avatar_config + assert run_config.avatar_config.customized_avatar == custom_avatar + assert ( + run_config.avatar_config.customized_avatar.image_mime_type == "image/jpeg" + ) + assert run_config.avatar_config.customized_avatar.image_data == b"image_bytes" + + +def test_avatar_config_with_name(): + avatar_config = types.AvatarConfig( + audio_bitrate_bps=128000, + video_bitrate_bps=1000000, + avatar_name="test_avatar", + ) + run_config = RunConfig(avatar_config=avatar_config) + + assert run_config.avatar_config == avatar_config + assert run_config.avatar_config.avatar_name == "test_avatar" + assert run_config.avatar_config.customized_avatar is None diff --git a/tests/unittests/models/test_gemini_llm_connection.py b/tests/unittests/models/test_gemini_llm_connection.py index 0bed24831e..2d2870a066 100644 --- a/tests/unittests/models/test_gemini_llm_connection.py +++ b/tests/unittests/models/test_gemini_llm_connection.py @@ -1120,3 +1120,43 @@ async def mock_receive_generator(): assert len(responses) == 1 assert responses[0].go_away == mock_go_away + + +@pytest.mark.asyncio +async def test_receive_video_content(gemini_connection, mock_gemini_session): + """Test receive with video content.""" + mock_content = types.Content( + role='model', + parts=[ + types.Part( + inline_data=types.Blob(data=b'video_data', mime_type='video/mp4') + ) + ], + ) + mock_server_content = mock.Mock() + mock_server_content.model_turn = mock_content + mock_server_content.interrupted = False + mock_server_content.input_transcription = None + mock_server_content.output_transcription = None + mock_server_content.turn_complete = False + mock_server_content.grounding_metadata = None + + mock_message = mock.AsyncMock() + mock_message.usage_metadata = None + mock_message.server_content = mock_server_content + mock_message.tool_call = None + mock_message.session_resumption_update = None + mock_message.go_away = None + + async def mock_receive_generator(): + yield mock_message + + receive_mock = mock.Mock(return_value=mock_receive_generator()) + mock_gemini_session.receive = receive_mock + + responses = [resp async for resp in gemini_connection.receive()] + + assert responses + content_response = next((r for r in responses if r.content), None) + assert content_response is not None + assert content_response.content == mock_content diff --git a/tests/unittests/streaming/test_live_streaming_configs.py b/tests/unittests/streaming/test_live_streaming_configs.py index c9cff4ea97..679d3964b9 100644 --- a/tests/unittests/streaming/test_live_streaming_configs.py +++ b/tests/unittests/streaming/test_live_streaming_configs.py @@ -642,3 +642,90 @@ def test_streaming_with_context_window_compression_config(): llm_request_sent_to_mock.live_connect_config.context_window_compression.sliding_window.target_tokens == 500 ) + + +def test_streaming_with_avatar_config(): + """Test avatar_config propagation and video content through run_live. + + Verifies: + 1. avatar_config from RunConfig is propagated to live_connect_config. + 2. Video inline_data from the model flows through events correctly. + """ + # Mock model returns video content followed by turn_complete. + video_response = LlmResponse( + content=types.Content( + role='model', + parts=[ + types.Part( + inline_data=types.Blob( + data=b'video_data', mime_type='video/mp4' + ) + ) + ], + ), + ) + turn_complete_response = LlmResponse( + turn_complete=True, + ) + + mock_model = testing_utils.MockModel.create( + [video_response, turn_complete_response] + ) + + root_agent = Agent( + name='root_agent', + model=mock_model, + tools=[], + ) + + runner = testing_utils.InMemoryRunner( + root_agent=root_agent, response_modalities=['VIDEO'] + ) + + run_config = RunConfig( + response_modalities=['VIDEO'], + avatar_config=types.AvatarConfig(avatar_name='Kai'), + ) + + live_request_queue = LiveRequestQueue() + live_request_queue.send_realtime( + blob=types.Blob(data=b'\x00\xFF', mime_type='audio/pcm') + ) + res_events = runner.run_live(live_request_queue, run_config) + + assert res_events is not None, 'Expected a list of events, got None.' + assert ( + len(res_events) > 0 + ), 'Expected at least one response, but got an empty list.' + assert len(mock_model.requests) == 1 + + # 1. Verify avatar_config was propagated to the live_connect_config. + llm_request_sent_to_mock = mock_model.requests[0] + assert llm_request_sent_to_mock.live_connect_config is not None + assert llm_request_sent_to_mock.live_connect_config.avatar_config is not None + assert ( + llm_request_sent_to_mock.live_connect_config.avatar_config.avatar_name + == 'Kai' + ) + + # 2. Verify video content flows through events. + video_events = [ + e + for e in res_events + if e.content + and e.content.parts + and any( + p.inline_data + and p.inline_data.mime_type + and p.inline_data.mime_type.startswith('video/') + for p in e.content.parts + ) + ] + assert video_events, 'Expected at least one event with video inline_data.' + + video_event = video_events[0] + assert video_event.content.role == 'model' + video_part = video_event.content.parts[0] + assert video_part.inline_data is not None + assert video_part.inline_data.data == b'video_data' + assert video_part.inline_data.mime_type == 'video/mp4' From 80a7ecf4b31e4c6de4a1425b03422f384c1a032d Mon Sep 17 00:00:00 2001 From: Shangjie Chen Date: Mon, 13 Apr 2026 14:50:56 -0700 Subject: [PATCH 180/192] chore(session): refine raw_event storage with safety fixes and fallback test - Remove outdated TODOs regarding requested_tool_confirmations and native compaction support - Add a warning log when falling back to legacy storage - Avoid overwriting valid timestamps from `raw_event` with `None` if the API returns `None` - Provide a fallback timestamp (current time) to prevent Pydantic validation errors when the API returns no timestamp Co-authored-by: Shangjie Chen PiperOrigin-RevId: 899195056 --- .../adk/sessions/vertex_ai_session_service.py | 54 ++++++++++--------- .../test_vertex_ai_session_service.py | 53 ++++++++++++++++++ 2 files changed, 81 insertions(+), 26 deletions(-) diff --git a/src/google/adk/sessions/vertex_ai_session_service.py b/src/google/adk/sessions/vertex_ai_session_service.py index c653456a25..d06816f132 100644 --- a/src/google/adk/sessions/vertex_ai_session_service.py +++ b/src/google/adk/sessions/vertex_ai_session_service.py @@ -270,6 +270,7 @@ async def append_event(self, session: Session, event: Event) -> Event: reasoning_engine_id = self._get_reasoning_engine_id(session.app_name) + # Build config (Monolithic approach) config = {} if event.content: config['content'] = event.content.model_dump( @@ -286,9 +287,6 @@ async def append_event(self, session: Session, event: Event) -> Event: k: json.loads(v.model_dump_json(exclude_none=True, by_alias=True)) for k, v in event.actions.requested_auth_configs.items() }, - # TODO: add requested_tool_confirmations, agent_state once - # they are available in the API. - # Note: compaction is stored via event_metadata.custom_metadata. } if event.error_code: config['error_code'] = event.error_code @@ -311,10 +309,8 @@ async def append_event(self, session: Session, event: Event) -> Event: metadata_dict['grounding_metadata'] = event.grounding_metadata.model_dump( exclude_none=True, mode='json' ) - # Store compaction data in custom_metadata since the Vertex AI service - # does not yet support the compaction field. - # TODO: Stop writing to custom_metadata once the Vertex AI service - # supports the compaction field natively in EventActions. + + # ALWAYS write to custom_metadata if event.actions and event.actions.compaction: compaction_dict = event.actions.compaction.model_dump( exclude_none=True, mode='json' @@ -324,8 +320,6 @@ async def append_event(self, session: Session, event: Event) -> Event: key=_COMPACTION_CUSTOM_METADATA_KEY, value=compaction_dict, ) - # Store usage_metadata in custom_metadata since the Vertex AI service - # does not persist it in EventMetadata. if event.usage_metadata: usage_dict = event.usage_metadata.model_dump( exclude_none=True, mode='json' @@ -335,7 +329,12 @@ async def append_event(self, session: Session, event: Event) -> Event: key=_USAGE_METADATA_CUSTOM_METADATA_KEY, value=usage_dict, ) + config['event_metadata'] = metadata_dict + + # Persist the full event state using raw_event. If the client-side SDK + # does not support this field, it will raise a ValidationError, and we + # will fall back to legacy field-based storage. config['raw_event'] = event.model_dump( exclude_none=True, mode='json', @@ -345,7 +344,8 @@ async def append_event(self, session: Session, event: Event) -> Event: # Retry without raw_event if client side validation fails for older SDK # versions. async with self._get_api_client() as api_client: - try: + + async def _do_append(cfg: dict[str, Any]): await api_client.agent_engines.sessions.events.append( name=( f'reasoningEngines/{reasoning_engine_id}/sessions/{session.id}' @@ -355,22 +355,16 @@ async def append_event(self, session: Session, event: Event) -> Event: timestamp=datetime.datetime.fromtimestamp( event.timestamp, tz=datetime.timezone.utc ), - config=config, + config=cfg, ) + + try: + await _do_append(config) except pydantic.ValidationError: + logger.warning('Vertex SDK does not support raw_event, falling back.') if 'raw_event' in config: del config['raw_event'] - await api_client.agent_engines.sessions.events.append( - name=( - f'reasoningEngines/{reasoning_engine_id}/sessions/{session.id}' - ), - author=event.author, - invocation_id=event.invocation_id, - timestamp=datetime.datetime.fromtimestamp( - event.timestamp, tz=datetime.timezone.utc - ), - config=config, - ) + await _do_append(config) return event def _get_reasoning_engine_id(self, app_name: str): @@ -429,8 +423,8 @@ def _get_raw_event(api_event_obj: Any) -> dict[str, Any] | None: def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: """Converts an API event object to an Event object.""" - # Read event data from raw_event first before falling back to top level - # fields. + # Prioritize reading from raw_event to restore full state. Fall back to + # top-level fields for older data that lacks raw_event. raw_event_dict = _get_raw_event(api_event_obj) if raw_event_dict: event_dict = copy.deepcopy(raw_event_dict) @@ -439,8 +433,9 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: 'id': api_event_obj.name.split('/')[-1], 'invocation_id': getattr(api_event_obj, 'invocation_id', None), 'author': getattr(api_event_obj, 'author', None), - 'timestamp': timestamp_obj.timestamp() if timestamp_obj else None, }) + if timestamp_obj: + event_dict['timestamp'] = timestamp_obj.timestamp() return Event.model_validate(event_dict) actions = getattr(api_event_obj, 'actions', None) @@ -514,6 +509,13 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: usage_metadata_data ) + timestamp_obj = getattr(api_event_obj, 'timestamp', None) + timestamp = ( + timestamp_obj.timestamp() + if timestamp_obj + else datetime.datetime.now(datetime.timezone.utc).timestamp() + ) + return Event( id=api_event_obj.name.split('/')[-1], invocation_id=api_event_obj.invocation_id, @@ -522,7 +524,7 @@ def _from_api_event(api_event_obj: vertexai.types.SessionEvent) -> Event: content=_session_util.decode_model( getattr(api_event_obj, 'content', None), types.Content ), - timestamp=api_event_obj.timestamp.timestamp(), + timestamp=timestamp, error_code=getattr(api_event_obj, 'error_code', None), error_message=getattr(api_event_obj, 'error_message', None), partial=partial, diff --git a/tests/unittests/sessions/test_vertex_ai_session_service.py b/tests/unittests/sessions/test_vertex_ai_session_service.py index 80a7c9c537..d5e12f6038 100644 --- a/tests/unittests/sessions/test_vertex_ai_session_service.py +++ b/tests/unittests/sessions/test_vertex_ai_session_service.py @@ -35,6 +35,7 @@ from google.api_core import exceptions as api_core_exceptions from google.genai import types as genai_types from google.genai.errors import ClientError +import pydantic import pytest MOCK_SESSION_JSON_1 = { @@ -1223,3 +1224,55 @@ async def test_append_event_with_usage_metadata_and_compaction(): assert appended_event.custom_metadata == {'extra': 'info'} assert '_compaction' not in (appended_event.custom_metadata or {}) assert '_usage_metadata' not in (appended_event.custom_metadata or {}) + + +@pytest.mark.asyncio +@pytest.mark.usefixtures('mock_get_api_client') +async def test_append_event_fallback_for_older_sdk(mock_api_client_instance): + """Tests that append_event falls back to custom_metadata when SDK fails on raw_event.""" + session_service = mock_vertex_ai_session_service() + session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + assert session is not None + + compaction = EventCompaction( + start_timestamp=1000.0, + end_timestamp=2000.0, + compacted_content=genai_types.Content( + parts=[genai_types.Part(text='compacted summary')] + ), + ) + event_to_append = Event( + invocation_id='fallback_invocation', + author='model', + timestamp=1734005534.0, + actions=EventActions(compaction=compaction), + ) + + mock_client = mock_api_client_instance + + async def side_effect(name, author, invocation_id, timestamp, config): + if 'raw_event' in config: + # Trigger a real ValidationError since Pydantic V2 doesn't allow easy + # instantiation + class DummyModel(pydantic.BaseModel): + a: int + + DummyModel(a='not an int') + return await mock_client._append_event( + name, author, invocation_id, timestamp, config + ) + + mock_client.agent_engines.sessions.events.append.side_effect = side_effect + + await session_service.append_event(session, event_to_append) + + # Verify that it was written and restored correctly via custom_metadata + retrieved_session = await session_service.get_session( + app_name='123', user_id='user', session_id='1' + ) + appended_event = retrieved_session.events[-1] + + assert appended_event.actions.compaction is not None + assert appended_event.actions.compaction.start_timestamp == 1000.0 From 9b9faa4ba21d566252e4c25bd55ab9db2658051e Mon Sep 17 00:00:00 2001 From: Giulio Leone Date: Mon, 13 Apr 2026 16:41:34 -0700 Subject: [PATCH 181/192] fix: populate required fields in FunctionDeclaration json_schema fallback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge https://github.com/google/adk-python/pull/5000 Fixes #4798 — `required` fields lost in `FunctionDeclaration` when the `parameters_json_schema` fallback path is used. Co-authored-by: Xuan Yang COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/5000 from giulio-leone:fix/required-fields-json-schema-fallback e9783d74f88c2d3a4b0818ab71b9bc8659f5037e PiperOrigin-RevId: 899243799 --- .../tools/_automatic_function_calling_util.py | 10 +++++ .../tools/test_from_function_with_options.py | 42 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/google/adk/tools/_automatic_function_calling_util.py b/src/google/adk/tools/_automatic_function_calling_util.py index 392e256b33..aef4424a49 100644 --- a/src/google/adk/tools/_automatic_function_calling_util.py +++ b/src/google/adk/tools/_automatic_function_calling_util.py @@ -368,6 +368,11 @@ def from_function_with_options( parameters_json_schema[name] = types.Schema.model_validate( json_schema_dict ) + if param.default is not inspect.Parameter.empty: + if param.default is not None: + parameters_json_schema[name].default = param.default + else: + parameters_json_schema[name].nullable = True except Exception as e: _function_parameter_parse_util._raise_for_unsupported_param( param, func.__name__, e @@ -392,6 +397,11 @@ def from_function_with_options( type='OBJECT', properties=parameters_json_schema, ) + declaration.parameters.required = ( + _function_parameter_parse_util._get_required_fields( + declaration.parameters + ) + ) if variant == GoogleLLMVariant.GEMINI_API: return declaration diff --git a/tests/unittests/tools/test_from_function_with_options.py b/tests/unittests/tools/test_from_function_with_options.py index a3f68ee11c..537094da39 100644 --- a/tests/unittests/tools/test_from_function_with_options.py +++ b/tests/unittests/tools/test_from_function_with_options.py @@ -319,3 +319,45 @@ async def test_function(param: str) -> AsyncGenerator[Dict[str, str], None]: # VERTEX_AI should extract yield type (Dict[str, str]) from AsyncGenerator assert declaration.response is not None assert declaration.response.type == types.Type.OBJECT + + +def test_required_fields_set_in_json_schema_fallback(): + """Test that required fields are populated when the json_schema fallback path is used. + + When a parameter has a complex union type (e.g. list[str] | None) that + _parse_schema_from_parameter can't handle, from_function_with_options falls + back to the parameters_json_schema branch. This test verifies that the + required fields are correctly populated in that fallback branch. + """ + + def complex_tool( + query: str, + mode: str = 'default', + tags: list[str] | None = None, + ) -> str: + """A tool where one param has a complex union type.""" + return query + + declaration = _automatic_function_calling_util.from_function_with_options( + complex_tool, GoogleLLMVariant.GEMINI_API + ) + + assert declaration.name == 'complex_tool' + assert declaration.parameters == types.Schema( + type=types.Type.OBJECT, + required=['query'], + properties={ + 'query': types.Schema(type=types.Type.STRING), + 'mode': types.Schema(type=types.Type.STRING, default='default'), + 'tags': types.Schema( + any_of=[ + types.Schema( + items=types.Schema(type=types.Type.STRING), + type=types.Type.ARRAY, + ), + types.Schema(type=types.Type.NULL), + ], + nullable=True, + ), + }, + ) From 5195ba753a16e600b065c79cfcd30d1638d5d2c9 Mon Sep 17 00:00:00 2001 From: "Wei (Jack) Sun" Date: Mon, 13 Apr 2026 16:45:42 -0700 Subject: [PATCH 182/192] chore: merge release v1.30.0 to main Merge https://github.com/google/adk-python/pull/5313 Syncs version bump and CHANGELOG from release v1.30.0 to main. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/5313 from google:release/v1.30.0 008ca58099d858ca9fb1d03e5082595d69970983 PiperOrigin-RevId: 899245408 --- .github/.release-please-manifest.json | 2 +- .github/release-please-config.json | 2 +- CHANGELOG.md | 27 +++++++++++++++++++++++++++ src/google/adk/version.py | 2 +- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 6103afc2b2..bacdd304e4 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.29.0" + ".": "1.30.0" } diff --git a/.github/release-please-config.json b/.github/release-please-config.json index 14f5b01af1..b8b693afc9 100644 --- a/.github/release-please-config.json +++ b/.github/release-please-config.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "last-release-sha": "6b1600fbf53bcf634c5fe4793f02921bc0b75125", + "last-release-sha": "80a7ecf4b31e4c6de4a1425b03422f384c1a032d", "packages": { ".": { "release-type": "python", diff --git a/CHANGELOG.md b/CHANGELOG.md index 81b9211bbc..d955ad7ff5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # Changelog +## [1.30.0](https://github.com/google/adk-python/compare/v1.29.0...v1.30.0) (2026-04-13) + + +### Features + +* Add Auth Provider support to agent registry ([f2c68eb](https://github.com/google/adk-python/commit/f2c68eb1536f1c0018c2cf7ee3f4417ca442080c)) +* Add Parameter Manager integration to ADK ([b0715d7](https://github.com/google/adk-python/commit/b0715d77a2a433bb2ed07a2475cc4d1f2d662b6c)) +* Add support for Gemma 4 models in ADK ([9d4ecbe](https://github.com/google/adk-python/commit/9d4ecbe9fd1141693e4682cbfe4d542cc62b76ac)), closes [#5156](https://github.com/google/adk-python/issues/5156) +* allow users to include artifacts from artifact_service in A2A events using provided interceptor ([e63d991](https://github.com/google/adk-python/commit/e63d991be84e373fd31be29d4b6b0e32fdbde557)) +* emit a `TaskStatusUpdateEvent` for ADK events with no output parts but with event.actions ([dcc485b](https://github.com/google/adk-python/commit/dcc485b23e3509e2e386636d841033b91c9a401c)) +* Live avatar support in ADK ([a64a8e4](https://github.com/google/adk-python/commit/a64a8e46480753439b91b9cfd41fd190b4dad493)) +* **live:** expose live_session_resumption_update as Event in BaseLlmFlow ([2626ad7](https://github.com/google/adk-python/commit/2626ad7c69fb64a88372225d5583085fc08b1fcd)), closes [#4357](https://github.com/google/adk-python/issues/4357) +* Promote BigQuery tools to Stable ([abcf14c](https://github.com/google/adk-python/commit/abcf14c166baf4f8cc6e919b1eb4c063bf3a92af)) +* **samples:** add sample for skill activation via environment tools ([2cbb523](https://github.com/google/adk-python/commit/2cbb52306910fac994fe1d29bdfcfacb258703b4)) + + +### Bug Fixes + +* Add "gcloud config unset project" command to express mode flow ([e7d8160](https://github.com/google/adk-python/commit/e7d81604126cbdb4d9ee4624e1d1410b06585750)) +* avoid load all agents in adk web server ([cb4dd42](https://github.com/google/adk-python/commit/cb4dd42eff2df6d20c5e53211718ecb023f127fc)) +* Change express mode user flow so it's more clear that an express mode project is being created ([0fedb3b](https://github.com/google/adk-python/commit/0fedb3b5eb2074999d8ccdb839e054ea80da486f)) +* Custom pickling in McpToolset to exclude unpicklable objects like errlog ([d62558c](https://github.com/google/adk-python/commit/d62558cc2d7d6c0372e43c9f009c8c7a6863ff0a)) +* Fix credential leakage vulnerability in Agent Registry ([e3567a6](https://github.com/google/adk-python/commit/e3567a65196bb453cdac4a5ae42f7f079476d748)) +* Include a link to the deployed agent ([547766a](https://github.com/google/adk-python/commit/547766a47779915a8a47745237a46882a02dae9a)) +* preserve interaction ids for interactions SSE tool calls ([9a19304](https://github.com/google/adk-python/commit/9a1930407a4eff67093ea9f14292f1931631a661)), closes [#5169](https://github.com/google/adk-python/issues/5169) +* validate user_id and session_id against path traversal ([cbcb5e6](https://github.com/google/adk-python/commit/cbcb5e6002b5bae89de5309caf7b9bb02d563cfc)), closes [#5110](https://github.com/google/adk-python/issues/5110) + ## [1.29.0](https://github.com/google/adk-python/compare/v1.28.0...v1.29.0) (2026-04-09) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 1782a41abc..d392c99b2c 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "1.29.0" +__version__ = "1.30.0" From 1a9df8f77410a08a85d04744f199d25f20d55ebd Mon Sep 17 00:00:00 2001 From: Scott Mansfield Date: Mon, 13 Apr 2026 20:50:03 -0700 Subject: [PATCH 183/192] feat: Firestore support END_PUBLIC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge https://github.com/google/adk-python/pull/5088 Adding support for Firestore for both session and memory storage. This started by copying the Firestore support from the Java ADK into the Python ADK and also takes inspiration from @anmolg1997's PR https://github.com/google/adk-python-community/pull/104. It does things differently from both. Firestore contains a hierarchical set of data for sessions: ``` Hierarchy for sessions: adk-session ↳ ↳ users ↳ ↳ sessions ↳ ↳ events ↳ Hierarchy for shared App/User state configurations: app_states ↳ user_states ↳ ↳ users ↳ Hierarchy for memory: memories ↳ ``` The firestore memory service creates a top-level collection that hold indexed memories when sessions are added. ### Link to Issue or Description of Change This is from an existing customer request for firestore support. ### Testing Plan **Unit Tests:** - [x] I have added or updated unit tests for my change. - [x] All unit tests pass locally. ``` $ pytest tests/unittests/integrations/firestore/ ===================================== test session starts ====================================== platform darwin -- Python 3.11.14, pytest-9.0.2, pluggy-1.6.0 rootdir: /Users/scottmansfield/projects/adk-python configfile: pyproject.toml plugins: mock-3.15.1, xdist-3.8.0, langsmith-0.7.23, asyncio-1.3.0, anyio-4.13.0 asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function collected 29 items tests/unittests/integrations/firestore/test_firestore_memory_service.py ............. [ 44%] tests/unittests/integrations/firestore/test_firestore_session_service.py ................ [100%] ======================================= warnings summary ======================================= src/google/adk/features/_feature_decorator.py:72 /Users/scottmansfield/projects/adk-python/src/google/adk/features/_feature_decorator.py:72: UserWarning: [EXPERIMENTAL] feature FeatureName.PLUGGABLE_AUTH is enabled. check_feature_enabled() -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ================================ 29 passed, 1 warning in 1.44s ================================= ``` **Manual End-to-End (E2E) Tests:** I created a demo app locally to test the session and memory storage with a real firebase instance. It successfully records sessions and memories, verified by manually checking the cloud console. Memory did require an index, which will be created by the user the first time the memory session is used. Firestore has a specific deep link that it will create to give the exact index needed. After that, memory worked fine. ### Checklist - [x] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document. - [x] I have performed a self-review of my own code. - [x] I have commented my code, particularly in hard-to-understand areas. - [x] I have added tests that prove my fix is effective or that my feature works. - [x] New and existing unit tests pass locally with my changes. - [x] I have manually tested my changes end-to-end. - [x] Any dependent changes have been merged and published in downstream modules. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/5088 from ScottMansfield:feat/firestore 99efca50e1d5a932fac7b722ebe7e9b4e0eb1ae9 PiperOrigin-RevId: 899328760 --- pyproject.toml | 9 +- src/google/adk/errors/already_exists_error.py | 2 +- .../adk/integrations/firestore/__init__.py | 17 + .../adk/integrations/firestore/_stop_words.py | 151 ++++ .../firestore/firestore_memory_service.py | 195 +++++ .../firestore/firestore_session_service.py | 586 ++++++++++++++ .../test_firestore_memory_service.py | 388 +++++++++ .../test_firestore_session_service.py | 757 ++++++++++++++++++ 8 files changed, 2098 insertions(+), 7 deletions(-) create mode 100644 src/google/adk/integrations/firestore/__init__.py create mode 100644 src/google/adk/integrations/firestore/_stop_words.py create mode 100644 src/google/adk/integrations/firestore/firestore_memory_service.py create mode 100644 src/google/adk/integrations/firestore/firestore_session_service.py create mode 100644 tests/unittests/integrations/firestore/test_firestore_memory_service.py create mode 100644 tests/unittests/integrations/firestore/test_firestore_session_service.py diff --git a/pyproject.toml b/pyproject.toml index 4cbdb4c246..ba87a0c93a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,7 +44,7 @@ dependencies = [ "google-cloud-spanner>=3.56.0, <4.0.0", # For Spanner database "google-cloud-speech>=2.30.0, <3.0.0", # For Audio Transcription "google-cloud-storage>=2.18.0, <4.0.0", # For GCS Artifact service - "google-genai>=1.72.0, <2.0.0", # Google GenAI SDK + "google-genai>=1.64.0, <2.0.0", # Google GenAI SDK "graphviz>=0.20.2, <1.0.0", # Graphviz for graph rendering "httpx>=0.27.0, <1.0.0", # HTTP client library "jsonschema>=4.23.0, <5.0.0", # Agent Builder config validation @@ -123,7 +123,7 @@ test = [ "a2a-sdk>=0.3.0,<0.4.0", "anthropic>=0.43.0", # For anthropic model tests "crewai[tools];python_version>='3.11' and python_version<'3.12'", # For CrewaiTool tests; chromadb/pypika fail on 3.12+ - "google-cloud-iamconnectorcredentials>=0.1.0, <0.2.0", + "google-cloud-firestore>=2.11.0", "google-cloud-parametermanager>=0.4.0, <1.0.0", "kubernetes>=29.0.0", # For GkeCodeExecutor "langchain-community>=0.3.17", @@ -159,6 +159,7 @@ extensions = [ "beautifulsoup4>=3.2.2", # For load_web_page tool. "crewai[tools];python_version>='3.11' and python_version<'3.12'", # For CrewaiTool; chromadb/pypika fail on 3.12+ "docker>=7.0.0", # For ContainerCodeExecutor + "google-cloud-firestore>=2.11.0", # For Firestore services "google-cloud-parametermanager>=0.4.0, <1.0.0", "kubernetes>=29.0.0", # For GkeCodeExecutor "k8s-agent-sandbox>=0.1.1.post3", # For GkeCodeExecutor sandbox mode @@ -177,10 +178,6 @@ toolbox = ["toolbox-adk>=1.0.0, <2.0.0"] slack = ["slack-bolt>=1.22.0"] -agent-identity = [ - "google-cloud-iamconnectorcredentials>=0.1.0, <0.2.0", -] - [tool.pyink] # Format py files following Google style-guide line-length = 80 diff --git a/src/google/adk/errors/already_exists_error.py b/src/google/adk/errors/already_exists_error.py index 8bd14f9ad6..bf8d357a81 100644 --- a/src/google/adk/errors/already_exists_error.py +++ b/src/google/adk/errors/already_exists_error.py @@ -18,7 +18,7 @@ class AlreadyExistsError(Exception): """Represents an error that occurs when an entity already exists.""" - def __init__(self, message="The resource already exists."): + def __init__(self, message: str = "The resource already exists."): """Initializes the AlreadyExistsError exception. Args: diff --git a/src/google/adk/integrations/firestore/__init__.py b/src/google/adk/integrations/firestore/__init__.py new file mode 100644 index 0000000000..7c76d28c93 --- /dev/null +++ b/src/google/adk/integrations/firestore/__init__.py @@ -0,0 +1,17 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +"""Firestore integrations for ADK.""" diff --git a/src/google/adk/integrations/firestore/_stop_words.py b/src/google/adk/integrations/firestore/_stop_words.py new file mode 100644 index 0000000000..b72cc5b6cc --- /dev/null +++ b/src/google/adk/integrations/firestore/_stop_words.py @@ -0,0 +1,151 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +DEFAULT_STOP_WORDS = { + "a", + "about", + "above", + "after", + "again", + "against", + "all", + "am", + "an", + "and", + "any", + "are", + "as", + "at", + "be", + "because", + "been", + "before", + "being", + "below", + "between", + "both", + "but", + "by", + "can", + "could", + "did", + "do", + "does", + "doing", + "don", + "down", + "during", + "each", + "else", + "few", + "for", + "from", + "further", + "had", + "has", + "have", + "having", + "he", + "her", + "here", + "hers", + "herself", + "him", + "himself", + "his", + "how", + "i", + "if", + "in", + "into", + "is", + "it", + "its", + "itself", + "just", + "may", + "me", + "might", + "more", + "most", + "must", + "my", + "myself", + "no", + "nor", + "not", + "now", + "of", + "off", + "on", + "once", + "only", + "or", + "other", + "our", + "ours", + "ourselves", + "out", + "over", + "own", + "s", + "same", + "shall", + "she", + "should", + "so", + "some", + "such", + "t", + "than", + "that", + "the", + "their", + "theirs", + "them", + "themselves", + "then", + "there", + "these", + "they", + "this", + "those", + "through", + "to", + "too", + "under", + "until", + "up", + "very", + "was", + "we", + "were", + "what", + "when", + "where", + "which", + "who", + "whom", + "why", + "will", + "with", + "would", + "you", + "your", + "yours", + "yourself", + "yourselves", +} diff --git a/src/google/adk/integrations/firestore/firestore_memory_service.py b/src/google/adk/integrations/firestore/firestore_memory_service.py new file mode 100644 index 0000000000..1d711c35cd --- /dev/null +++ b/src/google/adk/integrations/firestore/firestore_memory_service.py @@ -0,0 +1,195 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +import logging +import os +import re +from typing import Any +from typing import Optional +from typing import TYPE_CHECKING + +from google.cloud.firestore_v1.base_query import FieldFilter +from typing_extensions import override + +from ...events.event import Event +from ...memory import _utils +from ...memory.base_memory_service import BaseMemoryService +from ...memory.base_memory_service import SearchMemoryResponse +from ...memory.memory_entry import MemoryEntry +from ._stop_words import DEFAULT_STOP_WORDS + +if TYPE_CHECKING: + from google.cloud import firestore + + from ...sessions.session import Session + +logger = logging.getLogger("google_adk." + __name__) + +DEFAULT_EVENTS_COLLECTION = "events" +DEFAULT_MEMORIES_COLLECTION = "memories" + + +class FirestoreMemoryService(BaseMemoryService): # type: ignore[misc] + """Memory service that uses Google Cloud Firestore as the backend. + + It uses the existing session data to create memories in a top-level memory collection. + """ + + def __init__( + self, + client: Optional[firestore.AsyncClient] = None, + events_collection: Optional[str] = None, + stop_words: Optional[set[str]] = None, + memories_collection: Optional[str] = None, + ): + """Initializes the Firestore memory service. + + Args: + client: An optional Firestore AsyncClient. If not provided, a new one + will be created. + events_collection: The name of the events collection or collection group. + Defaults to 'events'. + stop_words: A set of words to ignore when extracting keywords. Defaults to + a standard English stop words list. + memories_collection: The name of the memories collection. Defaults to + 'memories'. + """ + if client is None: + from google.cloud import firestore + + self.client = firestore.AsyncClient() + else: + self.client = client + self.events_collection = events_collection or DEFAULT_EVENTS_COLLECTION + self.memories_collection = ( + memories_collection or DEFAULT_MEMORIES_COLLECTION + ) + self.stop_words = ( + stop_words if stop_words is not None else DEFAULT_STOP_WORDS + ) + + @override + async def add_session_to_memory(self, session: Session) -> None: + """Extracts keywords from session events and stores them in the memories collection.""" + batch = self.client.batch() + count = 0 + + for event in session.events: + if not event.content or not event.content.parts: + continue + + text = " ".join([part.text for part in event.content.parts if part.text]) + if not text: + continue + + keywords = self._extract_keywords(text) + if not keywords: + continue + + doc_ref = self.client.collection(self.memories_collection).document() + batch.set( + doc_ref, + { + "appName": session.app_name, + "userId": session.user_id, + "keywords": list(keywords), + "author": event.author, + "content": event.content.model_dump( + exclude_none=True, mode="json" + ), + "timestamp": event.timestamp, + }, + ) + count += 1 + if count >= 500: + await batch.commit() + batch = self.client.batch() + count = 0 + + if count > 0: + await batch.commit() + + def _extract_keywords(self, text: str) -> set[str]: + """Extracts keywords from text, ignoring stop words.""" + words = re.findall(r"[A-Za-z]+", text.lower()) + return {word for word in words if word not in self.stop_words} + + async def _search_by_keyword( + self, app_name: str, user_id: str, keyword: str + ) -> list[MemoryEntry]: + """Searches for events matching a single keyword.""" + query = ( + self.client.collection(self.memories_collection) + .where(filter=FieldFilter("appName", "==", app_name)) + .where(filter=FieldFilter("userId", "==", user_id)) + .where(filter=FieldFilter("keywords", "array_contains", keyword)) + ) + + docs = await query.get() + entries = [] + for doc in docs: + data = doc.to_dict() + if data and "content" in data: + try: + from google.genai import types + + content = types.Content.model_validate(data["content"]) + entries.append( + MemoryEntry( + content=content, + author=data.get("author", ""), + timestamp=_utils.format_timestamp(data.get("timestamp", 0.0)), + ) + ) + except Exception as e: + logger.warning(f"Failed to parse memory entry: {e}") + + return entries + + @override + async def search_memory( + self, *, app_name: str, user_id: str, query: str + ) -> SearchMemoryResponse: + """Searches memory for events matching the query.""" + keywords = self._extract_keywords(query) + if not keywords: + return SearchMemoryResponse() + + tasks = [ + self._search_by_keyword(app_name, user_id, keyword) + for keyword in keywords + ] + results = await asyncio.gather(*tasks, return_exceptions=True) + + seen = set() + memories = [] + for result_list in results: + if isinstance(result_list, BaseException): + logger.warning(f"Memory keyword search partial failure: {result_list}") + continue + for entry in result_list: + content_text = "" + if entry.content and entry.content.parts: + content_text = " ".join( + [part.text for part in entry.content.parts if part.text] + ) + key = (entry.author, content_text, entry.timestamp) + if key not in seen: + seen.add(key) + memories.append(entry) + + return SearchMemoryResponse(memories=memories) diff --git a/src/google/adk/integrations/firestore/firestore_session_service.py b/src/google/adk/integrations/firestore/firestore_session_service.py new file mode 100644 index 0000000000..83b97c33c2 --- /dev/null +++ b/src/google/adk/integrations/firestore/firestore_session_service.py @@ -0,0 +1,586 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import asyncio +from contextlib import asynccontextmanager +from datetime import datetime +from datetime import timezone +import logging +import os +from typing import Any +from typing import AsyncIterator +from typing import cast +from typing import Optional +from typing import TYPE_CHECKING + +_SessionLockKey = tuple[str, str, str] + +if TYPE_CHECKING: + from google.cloud import firestore + +from pydantic import BaseModel + +from ...events.event import Event +from ...sessions import _session_util +from ...sessions.base_session_service import BaseSessionService +from ...sessions.base_session_service import GetSessionConfig +from ...sessions.base_session_service import ListSessionsResponse +from ...sessions.session import Session +from ...sessions.state import State + +logger = logging.getLogger("google_adk." + __name__) + +DEFAULT_ROOT_COLLECTION = "adk-session" +DEFAULT_SESSIONS_COLLECTION = "sessions" +DEFAULT_EVENTS_COLLECTION = "events" +DEFAULT_APP_STATE_COLLECTION = "app_states" +DEFAULT_USER_STATE_COLLECTION = "user_states" + + +class FirestoreSessionService(BaseSessionService): # type: ignore[misc] + """Session service that uses Google Cloud Firestore as the backend. + + Hierarchy for sessions: + adk-session + ↳ + ↳ users + ↳ + ↳ sessions + ↳ + ↳ events + ↳ + + Hierarchy for shared App/User state configurations: + app_states + ↳ + + user_states + ↳ + ↳ users + ↳ + """ + + def __init__( + self, + client: Optional[firestore.AsyncClient] = None, + root_collection: Optional[str] = None, + ): + """Initializes the Firestore session service. + + Args: + client: An optional Firestore AsyncClient. If not provided, a new one + will be created. + root_collection: The root collection name. Defaults to 'adk-session' or + the value of ADK_FIRESTORE_ROOT_COLLECTION env var. + """ + try: + from google.cloud import firestore + except ImportError as e: + raise ImportError( + "FirestoreSessionService requires google-cloud-firestore. " + "Install it with: pip install google-cloud-firestore" + ) from e + + self.client = client or firestore.AsyncClient() + self.root_collection = ( + root_collection + or os.environ.get("ADK_FIRESTORE_ROOT_COLLECTION") + or DEFAULT_ROOT_COLLECTION + ) + self.sessions_collection = DEFAULT_SESSIONS_COLLECTION + + # Per-session locks used to serialize append_event calls in this process. + self._session_locks: dict[_SessionLockKey, asyncio.Lock] = {} + self._session_lock_ref_count: dict[_SessionLockKey, int] = {} + self._session_locks_guard = asyncio.Lock() + self.events_collection = DEFAULT_EVENTS_COLLECTION + self.app_state_collection = DEFAULT_APP_STATE_COLLECTION + self.user_state_collection = DEFAULT_USER_STATE_COLLECTION + + @asynccontextmanager + async def _with_session_lock( + self, *, app_name: str, user_id: str, session_id: str + ) -> AsyncIterator[None]: + """Serializes event appends for the same session within this process.""" + lock_key = (app_name, user_id, session_id) + async with self._session_locks_guard: + lock = self._session_locks.get(lock_key, asyncio.Lock()) + self._session_locks[lock_key] = lock + self._session_lock_ref_count[lock_key] = ( + self._session_lock_ref_count.get(lock_key, 0) + 1 + ) + + try: + async with lock: + yield + finally: + async with self._session_locks_guard: + remaining = self._session_lock_ref_count.get(lock_key, 0) - 1 + if remaining <= 0 and not lock.locked(): + self._session_lock_ref_count.pop(lock_key, None) + self._session_locks.pop(lock_key, None) + else: + self._session_lock_ref_count[lock_key] = remaining + + @staticmethod + def _merge_state( + app_state: dict[str, Any], + user_state: dict[str, Any], + session_state: dict[str, Any], + ) -> dict[str, Any]: + """Merge app, user, and session states into a single state dictionary.""" + import copy + + merged_state = copy.deepcopy(session_state) + for key, value in app_state.items(): + merged_state[State.APP_PREFIX + key] = value + for key, value in user_state.items(): + merged_state[State.USER_PREFIX + key] = value + return merged_state + + def _get_sessions_ref( + self, app_name: str, user_id: str + ) -> firestore.AsyncCollectionReference: + return ( + self.client.collection(self.root_collection) + .document(app_name) + .collection("users") + .document(user_id) + .collection(self.sessions_collection) + ) + + async def create_session( + self, + *, + app_name: str, + user_id: str, + state: Optional[dict[str, Any]] = None, + session_id: Optional[str] = None, + ) -> Session: + """Creates a new session in Firestore.""" + from google.cloud import firestore + + if not session_id: + from ...platform import uuid as platform_uuid + + session_id = platform_uuid.new_uuid() + + initial_state = state or {} + now = firestore.SERVER_TIMESTAMP + + session_ref = self._get_sessions_ref(app_name, user_id).document(session_id) + + # Extract state deltas + state_deltas = _session_util.extract_state_delta(initial_state) + app_state_delta = state_deltas["app"] + user_state_delta = state_deltas["user"] + session_state = state_deltas["session"] + + app_ref = self.client.collection(self.app_state_collection).document( + app_name + ) + user_ref = ( + self.client.collection(self.user_state_collection) + .document(app_name) + .collection("users") + .document(user_id) + ) + + session_data = { + "id": session_id, + "appName": app_name, + "userId": user_id, + "state": session_state, + "createTime": now, + "updateTime": now, + "revision": 1, + } + + @firestore.async_transactional # type: ignore[untyped-decorator] + async def _create_txn(transaction: firestore.AsyncTransaction) -> None: + # 1. Reads + snap = await session_ref.get(transaction=transaction) + if snap.exists: + from ...errors.already_exists_error import AlreadyExistsError + + raise AlreadyExistsError(f"Session {session_id} already exists.") + + app_snap = ( + await app_ref.get(transaction=transaction) + if app_state_delta + else None + ) + user_snap = ( + await user_ref.get(transaction=transaction) + if user_state_delta + else None + ) + + # 2. Writes + if app_state_delta: + current_app = ( + app_snap.to_dict() if (app_snap and app_snap.exists) else {} + ) + current_app.update(app_state_delta) + transaction.set(app_ref, current_app, merge=True) + + if user_state_delta: + current_user = ( + user_snap.to_dict() if (user_snap and user_snap.exists) else {} + ) + current_user.update(user_state_delta) + transaction.set(user_ref, current_user, merge=True) + + transaction.set(session_ref, session_data) + + transaction_obj = self.client.transaction() + await _create_txn(transaction_obj) + + storage_app_doc = await app_ref.get() + storage_app_state = ( + storage_app_doc.to_dict() if storage_app_doc.exists else {} + ) + storage_user_doc = await user_ref.get() + storage_user_state = ( + storage_user_doc.to_dict() if storage_user_doc.exists else {} + ) + + merged_state = self._merge_state( + storage_app_state, storage_user_state, session_state + ) + + local_now = datetime.now(timezone.utc).timestamp() + + session = Session( + id=session_id, + app_name=app_name, + user_id=user_id, + state=merged_state, + events=[], + last_update_time=local_now, + ) + session._storage_update_marker = "1" + return session + + async def get_session( + self, + *, + app_name: str, + user_id: str, + session_id: str, + config: Optional[GetSessionConfig] = None, + ) -> Optional[Session]: + """Gets a session from Firestore.""" + session_ref = self._get_sessions_ref(app_name, user_id).document(session_id) + doc = await session_ref.get() + + if not doc.exists: + return None + + data = doc.to_dict() + if not data: + return None + + # Fetch events + events_ref = session_ref.collection(self.events_collection) + query = events_ref.order_by("timestamp") + + if config: + if config.after_timestamp: + after_dt = datetime.fromtimestamp(config.after_timestamp) + query = query.where("timestamp", ">=", after_dt) + if config.num_recent_events: + query = query.limit_to_last(config.num_recent_events) + + events_docs = await query.get() + events = [] + for event_doc in events_docs: + event_data = event_doc.to_dict() + if event_data and "event_data" in event_data: + ed = event_data["event_data"] + events.append(Event.model_validate(ed)) + + # Let's continue getting session. + session_state = data.get("state", {}) + + # Fetch shared state + app_ref = self.client.collection(self.app_state_collection).document( + app_name + ) + user_ref = ( + self.client.collection(self.user_state_collection) + .document(app_name) + .collection("users") + .document(user_id) + ) + app_doc = await app_ref.get() + app_state = app_doc.to_dict() if app_doc.exists else {} + user_doc = await user_ref.get() + user_state = user_doc.to_dict() if user_doc.exists else {} + + merged_state = self._merge_state(app_state, user_state, session_state) + + # Convert timestamp + update_time = data.get("updateTime") + last_update_time = 0.0 + if update_time: + if isinstance(update_time, datetime): + last_update_time = update_time.timestamp() + else: + try: + last_update_time = float(update_time) + except (ValueError, TypeError): + pass + + current_revision = data.get("revision", 0) + session = Session( + id=session_id, + app_name=app_name, + user_id=user_id, + state=merged_state, + events=events, + last_update_time=last_update_time, + ) + session._storage_update_marker = ( + str(current_revision) if current_revision > 0 else None + ) + return session + + async def list_sessions( + self, *, app_name: str, user_id: Optional[str] = None + ) -> ListSessionsResponse: + """Lists sessions from Firestore.""" + if user_id: + query = self._get_sessions_ref(app_name, user_id).where( + "appName", "==", app_name + ) + docs = await query.get() + else: + query = self.client.collection_group(self.sessions_collection).where( + "appName", "==", app_name + ) + docs = await query.get() + + # Fetch shared state once + app_ref = self.client.collection(self.app_state_collection).document( + app_name + ) + app_doc = await app_ref.get() + app_state = app_doc.to_dict() if app_doc.exists else {} + + user_states_map = {} + if user_id: + user_ref = ( + self.client.collection(self.user_state_collection) + .document(app_name) + .collection("users") + .document(user_id) + ) + user_doc = await user_ref.get() + if user_doc.exists: + user_states_map[user_id] = user_doc.to_dict() + else: + users_ref = ( + self.client.collection(self.user_state_collection) + .document(app_name) + .collection("users") + ) + users_docs = await users_ref.get() + for u_doc in users_docs: + user_states_map[u_doc.id] = u_doc.to_dict() + + sessions = [] + for doc in docs: + data = doc.to_dict() + if data: + u_id = data["userId"] + s_state = data.get("state", {}) + u_state = user_states_map.get(u_id, {}) + merged = self._merge_state(app_state, u_state, s_state) + + sessions.append( + Session( + id=data["id"], + app_name=data["appName"], + user_id=data["userId"], + state=merged, + events=[], + last_update_time=0.0, + ) + ) + + return ListSessionsResponse(sessions=sessions) + + async def delete_session( + self, *, app_name: str, user_id: str, session_id: str + ) -> None: + """Deletes a session and its events from Firestore.""" + from google.cloud import firestore + + session_ref = self._get_sessions_ref(app_name, user_id).document(session_id) + + @firestore.async_transactional # type: ignore[untyped-decorator] + async def _mark_deleting_txn( + transaction: firestore.AsyncTransaction, + ) -> None: + snap = await session_ref.get(transaction=transaction) + if snap.exists: + transaction.update(session_ref, {"status": "DELETING"}) + + try: + transaction_obj = self.client.transaction() + await _mark_deleting_txn(transaction_obj) + except Exception: + pass + + events_ref = session_ref.collection(self.events_collection) + + batch = self.client.batch() + count = 0 + async for event_doc in events_ref.stream(): + batch.delete(event_doc.reference) + count += 1 + if count >= 500: + await batch.commit() + batch = self.client.batch() + count = 0 + if count > 0: + await batch.commit() + + await session_ref.delete() + + async def append_event(self, session: Session, event: Event) -> Event: + """Appends an event to a session in Firestore.""" + from google.cloud import firestore + + if event.partial: + return event + + self._apply_temp_state(session, event) + event = self._trim_temp_delta_state(event) + + session_ref = self._get_sessions_ref( + session.app_name, session.user_id + ).document(session.id) + + state_delta = ( + event.actions.state_delta + if event.actions and event.actions.state_delta + else {} + ) + state_deltas = _session_util.extract_state_delta(state_delta) + app_updates = state_deltas["app"] + user_updates = state_deltas["user"] + session_updates = state_deltas["session"] + + app_ref = self.client.collection(self.app_state_collection).document( + session.app_name + ) + user_ref = ( + self.client.collection(self.user_state_collection) + .document(session.app_name) + .collection("users") + .document(session.user_id) + ) + + async with self._with_session_lock( + app_name=session.app_name, + user_id=session.user_id, + session_id=session.id, + ): + + @firestore.async_transactional # type: ignore[untyped-decorator] + async def _append_txn(transaction: firestore.AsyncTransaction) -> int: + # 1. Reads + session_snap = await session_ref.get(transaction=transaction) + if not session_snap.exists: + raise ValueError(f"Session {session.id} not found.") + + session_doc = session_snap.to_dict() or {} + if session_doc.get("status") == "DELETING": + raise ValueError(f"Session {session.id} is currently being deleted.") + + current_revision = session_doc.get("revision", 0) + + if session._storage_update_marker is not None: + if session._storage_update_marker != str(current_revision): + raise ValueError( + "The session has been modified in storage since it was loaded. " + "Please reload the session before appending more events." + ) + + app_snap = ( + await app_ref.get(transaction=transaction) if app_updates else None + ) + user_snap = ( + await user_ref.get(transaction=transaction) + if user_updates + else None + ) + + # 2. Writes + if app_updates and app_snap is not None: + current_app = app_snap.to_dict() if app_snap.exists else {} + current_app.update(app_updates) + transaction.set(app_ref, current_app, merge=True) + + if user_updates and user_snap is not None: + current_user = user_snap.to_dict() if user_snap.exists else {} + current_user.update(user_updates) + transaction.set(user_ref, current_user, merge=True) + + for k, v in session_updates.items(): + session.state[k] = v + + new_revision = current_revision + 1 + session_only_state = { + k: v + for k, v in session.state.items() + if not k.startswith(State.APP_PREFIX) + and not k.startswith(State.USER_PREFIX) + } + transaction.update( + session_ref, + { + "state": session_only_state, + "updateTime": firestore.SERVER_TIMESTAMP, + "revision": new_revision, + }, + ) + + event_id = event.id + event_ref = session_ref.collection(self.events_collection).document( + event_id + ) + event_data = event.model_dump(exclude_none=True, mode="json") + transaction.set( + event_ref, + { + "event_data": event_data, + "timestamp": firestore.SERVER_TIMESTAMP, + "appName": session.app_name, + "userId": session.user_id, + }, + ) + + return cast(int, new_revision) + + transaction_obj = self.client.transaction() + new_revision_count = await _append_txn(transaction_obj) + session._storage_update_marker = str(new_revision_count) + + await super().append_event(session, event) + return event diff --git a/tests/unittests/integrations/firestore/test_firestore_memory_service.py b/tests/unittests/integrations/firestore/test_firestore_memory_service.py new file mode 100644 index 0000000000..afa7f75cac --- /dev/null +++ b/tests/unittests/integrations/firestore/test_firestore_memory_service.py @@ -0,0 +1,388 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from unittest import mock + +from google.adk.events.event import Event +from google.adk.integrations.firestore.firestore_memory_service import FirestoreMemoryService +from google.cloud.firestore_v1.base_query import FieldFilter +from google.genai import types +import pytest + + +@pytest.fixture +def mock_firestore_client(): + client = mock.MagicMock() + collection_ref = mock.MagicMock() + client.collection.return_value = collection_ref + + collection_ref.where.return_value = collection_ref + + doc_snapshot = mock.MagicMock() + doc_snapshot.to_dict.return_value = {} + + collection_ref.get = mock.AsyncMock(return_value=[doc_snapshot]) + + return client + + +def test_extract_keywords(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + text = "The quick brown fox jumps over the lazy dog." + keywords = service._extract_keywords(text) + + assert "the" not in keywords + assert "over" not in keywords + assert "quick" in keywords + assert "brown" in keywords + assert "fox" in keywords + assert "jumps" in keywords + assert "lazy" in keywords + assert "dog" in keywords + + +@pytest.mark.asyncio +async def test_search_memory_empty_query(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + response = await service.search_memory( + app_name="test_app", user_id="test_user", query="" + ) + assert not response.memories + mock_firestore_client.collection.assert_not_called() + + +@pytest.mark.asyncio +async def test_search_memory_with_results(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + query = "quick fox" + + doc_snapshot = mock_firestore_client.collection.return_value.where.return_value.where.return_value.where.return_value.get.return_value[ + 0 + ] + + content = types.Content(parts=[types.Part.from_text(text="quick fox jumps")]) + + doc_snapshot.to_dict.return_value = { + "appName": app_name, + "userId": user_id, + "author": "user", + "content": content.model_dump(exclude_none=True, mode="json"), + "timestamp": 1234567890.0, + } + + response = await service.search_memory( + app_name=app_name, user_id=user_id, query=query + ) + + assert response.memories + assert len(response.memories) == 1 + assert response.memories[0].author == "user" + + mock_firestore_client.collection.assert_called_with("memories") + collection_ref = mock_firestore_client.collection.return_value + + assert collection_ref.where.call_count == 6 + calls = collection_ref.where.call_args_list + + app_name_calls = 0 + user_id_calls = 0 + keyword_calls = 0 + + for call in calls: + kwargs = call.kwargs + filt = kwargs.get("filter") + if filt: + if ( + filt.field_path == "appName" + and filt.op_string == "==" + and filt.value == app_name + ): + app_name_calls += 1 + elif ( + filt.field_path == "userId" + and filt.op_string == "==" + and filt.value == user_id + ): + user_id_calls += 1 + elif filt.field_path == "keywords" and filt.op_string == "array_contains": + + if filt.value in ["quick", "fox"]: + keyword_calls += 1 + + assert app_name_calls == 2 + assert user_id_calls == 2 + assert keyword_calls == 2 + + +@pytest.mark.asyncio +async def test_search_memory_deduplication(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + query = "quick fox" + + content = types.Content(parts=[types.Part.from_text(text="quick fox jumps")]) + + doc_snapshot1 = mock.MagicMock() + doc_snapshot1.to_dict.return_value = { + "appName": app_name, + "userId": user_id, + "author": "user", + "content": content.model_dump(exclude_none=True, mode="json"), + "timestamp": 1234567890.0, + } + + doc_snapshot2 = mock.MagicMock() + doc_snapshot2.to_dict.return_value = { + "appName": app_name, + "userId": user_id, + "author": "user", + "content": content.model_dump(exclude_none=True, mode="json"), + "timestamp": 1234567890.0, + } + + get_mock = mock.AsyncMock(side_effect=[[doc_snapshot1], [doc_snapshot2]]) + + mock_firestore_client.collection.return_value.where.return_value.where.return_value.where.return_value.get = ( + get_mock + ) + + response = await service.search_memory( + app_name=app_name, user_id=user_id, query=query + ) + + assert response.memories + assert len(response.memories) == 1 + assert response.memories[0].author == "user" + + +@pytest.mark.asyncio +async def test_search_memory_parsing_error(mock_firestore_client, caplog): + service = FirestoreMemoryService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + query = "quick" + + doc_snapshot = mock_firestore_client.collection.return_value.where.return_value.where.return_value.where.return_value.get.return_value[ + 0 + ] + doc_snapshot.to_dict.return_value = {"content": "invalid_data"} + + response = await service.search_memory( + app_name=app_name, user_id=user_id, query=query + ) + + assert not response.memories + assert "Failed to parse memory entry" in caplog.text + + +@pytest.mark.asyncio +async def test_search_memory_only_stop_words(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + response = await service.search_memory( + app_name="test_app", user_id="test_user", query="the and or" + ) + assert not response.memories + mock_firestore_client.collection.assert_not_called() + + +@pytest.mark.asyncio +async def test_search_memory_partial_failures(mock_firestore_client, caplog): + service = FirestoreMemoryService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + query = "fox quick" + + coll_ref = ( + mock_firestore_client.collection.return_value.where.return_value.where.return_value.where.return_value + ) + + doc_snapshot = mock.MagicMock() + doc_snapshot.to_dict.return_value = { + "content": {"parts": [{"text": "quick response"}]}, + "author": "user", + "timestamp": 1234567890.0, + } + + call_count = 0 + + async def mock_get(): + nonlocal call_count + call_count += 1 + if call_count == 1: + raise ValueError("Mock generic network failure standalone") + return [doc_snapshot] + + coll_ref.get = mock.AsyncMock(side_effect=mock_get) + + response = await service.search_memory( + app_name=app_name, user_id=user_id, query=query + ) + + assert len(response.memories) == 1 + assert response.memories[0].author == "user" + assert "Memory keyword search partial failure" in caplog.text + + +def test_init_default_client(): + with mock.patch("google.cloud.firestore.AsyncClient") as mock_client_class: + mock_instance = mock.MagicMock() + mock_client_class.return_value = mock_instance + + service = FirestoreMemoryService() + + mock_client_class.assert_called_once() + assert service.client == mock_instance + + +@pytest.mark.asyncio +async def test_add_session_to_memory(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + content = types.Content(parts=[types.Part.from_text(text="quick brown fox")]) + event = Event( + invocation_id="test_inv", + author="user", + content=content, + timestamp=1234567890.0, + ) + session.events.append(event) + + batch = mock.MagicMock() + mock_firestore_client.batch.return_value = batch + batch.commit = mock.AsyncMock() + + doc_ref = mock.MagicMock() + mock_firestore_client.collection.return_value.document.return_value = doc_ref + + await service.add_session_to_memory(session) + + mock_firestore_client.batch.assert_called_once() + mock_firestore_client.collection.assert_called_with("memories") + batch.set.assert_called_once() + batch.commit.assert_called_once() + + args, kwargs = batch.set.call_args + assert args[0] == doc_ref + data = args[1] + assert data["appName"] == "test_app" + assert data["userId"] == "test_user" + assert "quick" in data["keywords"] + assert data["author"] == "user" + assert data["timestamp"] == 1234567890.0 + + +@pytest.mark.asyncio +async def test_add_session_to_memory_no_events(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + batch = mock.MagicMock() + mock_firestore_client.batch.return_value = batch + + await service.add_session_to_memory(session) + + mock_firestore_client.batch.assert_called_once() + batch.set.assert_not_called() + batch.commit.assert_not_called() + + +@pytest.mark.asyncio +async def test_add_session_to_memory_no_keywords(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + content = types.Content(parts=[types.Part.from_text(text="the and or")]) + event = Event(invocation_id="test_inv", author="user", content=content) + session.events.append(event) + + batch = mock.MagicMock() + mock_firestore_client.batch.return_value = batch + + await service.add_session_to_memory(session) + + mock_firestore_client.batch.assert_called_once() + batch.set.assert_not_called() + batch.commit.assert_not_called() + + +@pytest.mark.asyncio +async def test_add_session_to_memory_commit_error(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + content = types.Content(parts=[types.Part.from_text(text="quick brown fox")]) + event = Event(invocation_id="test_inv", author="user", content=content) + session.events.append(event) + + batch = mock.MagicMock() + mock_firestore_client.batch.return_value = batch + batch.commit = mock.AsyncMock( + side_effect=Exception("Firestore commit failed") + ) + + with pytest.raises(Exception, match="Firestore commit failed"): + await service.add_session_to_memory(session) + + +@pytest.mark.asyncio +async def test_add_session_to_memory_exceeds_batch_limit(mock_firestore_client): + service = FirestoreMemoryService(client=mock_firestore_client) + + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + for i in range(501): + content = types.Content( + parts=[types.Part.from_text(text=f"event keyword {i}")] + ) + event = Event( + invocation_id=f"test_inv_{i}", + author="user", + content=content, + timestamp=1234567890.0 + i, + ) + session.events.append(event) + + batch1 = mock.MagicMock() + batch2 = mock.MagicMock() + batch1.commit = mock.AsyncMock() + batch2.commit = mock.AsyncMock() + mock_firestore_client.batch.side_effect = [batch1, batch2] + + await service.add_session_to_memory(session) + + assert mock_firestore_client.batch.call_count == 2 + assert batch1.set.call_count == 500 + batch1.commit.assert_called_once() + assert batch2.set.call_count == 1 + batch2.commit.assert_called_once() diff --git a/tests/unittests/integrations/firestore/test_firestore_session_service.py b/tests/unittests/integrations/firestore/test_firestore_session_service.py new file mode 100644 index 0000000000..1445bfe0ef --- /dev/null +++ b/tests/unittests/integrations/firestore/test_firestore_session_service.py @@ -0,0 +1,757 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from unittest import mock + +from google.adk.events.event import Event +from google.adk.integrations.firestore.firestore_session_service import FirestoreSessionService +import pytest + + +@pytest.fixture +def mock_firestore_client(): + client = mock.MagicMock() + collection_ref = mock.MagicMock() + doc_ref = mock.MagicMock() + subcollection_ref = mock.MagicMock() + subdoc_ref = mock.MagicMock() + sessions_coll_ref = mock.MagicMock() + sessions_doc_ref = mock.MagicMock() + + client.collection.return_value = collection_ref + collection_ref.document.return_value = doc_ref + doc_ref.collection.return_value = subcollection_ref + subcollection_ref.document.return_value = subdoc_ref + subdoc_ref.collection.return_value = sessions_coll_ref + sessions_coll_ref.document.return_value = sessions_doc_ref + + doc_snapshot = mock.MagicMock() + doc_snapshot.exists = False + doc_snapshot.to_dict.return_value = {} + + subdoc_ref.get = mock.AsyncMock(return_value=doc_snapshot) + sessions_doc_ref.get = mock.AsyncMock(return_value=doc_snapshot) + doc_ref.get = mock.AsyncMock(return_value=doc_snapshot) + + sessions_doc_ref.set = mock.AsyncMock() + sessions_doc_ref.delete = mock.AsyncMock() + + events_collection_ref = mock.MagicMock() + sessions_doc_ref.collection.return_value = events_collection_ref + events_collection_ref.order_by.return_value = events_collection_ref + events_collection_ref.where.return_value = events_collection_ref + events_collection_ref.limit_to_last.return_value = events_collection_ref + events_collection_ref.get = mock.AsyncMock(return_value=[]) + + sessions_coll_ref.get = mock.AsyncMock(return_value=[]) + sessions_coll_ref.where.return_value = sessions_coll_ref + + client.collection_group.return_value = collection_ref + + batch = mock.MagicMock() + client.batch.return_value = batch + batch.commit = mock.AsyncMock() + + return client + + +def test_init_missing_dependency(): + import builtins + + original_import = builtins.__import__ + + def mock_import(name, globals=None, locals=None, fromlist=(), level=0): + if name == "google.cloud" and "firestore" in fromlist: + raise ImportError("Mocked import error") + return original_import(name, globals, locals, fromlist, level) + + with mock.patch("builtins.__import__", side_effect=mock_import): + with pytest.raises(ImportError, match="requires google-cloud-firestore"): + FirestoreSessionService() + + +@pytest.mark.asyncio +async def test_create_session(mock_firestore_client): + + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + + with mock.patch("google.cloud.firestore.async_transactional", lambda x: x): + session = await service.create_session(app_name=app_name, user_id=user_id) + + assert session.app_name == app_name + assert session.user_id == user_id + assert session.id + + mock_firestore_client.collection.assert_any_call("adk-session") + mock_firestore_client.collection.assert_any_call("app_states") + mock_firestore_client.collection.assert_any_call("user_states") + + root_coll = mock_firestore_client.collection.return_value + app_ref = root_coll.document.return_value + users_coll = app_ref.collection.return_value + user_ref = users_coll.document.return_value + sessions_ref = user_ref.collection.return_value + session_doc_ref = sessions_ref.document.return_value + + from google.cloud import firestore + + transaction = mock_firestore_client.transaction.return_value + transaction.set.assert_called_once() + args, kwargs = transaction.set.call_args + assert args[0] == session_doc_ref + assert args[1]["id"] == session.id + assert args[1]["appName"] == app_name + assert args[1]["userId"] == user_id + assert args[1]["state"] == {} + assert args[1]["createTime"] == firestore.SERVER_TIMESTAMP + assert args[1]["updateTime"] == firestore.SERVER_TIMESTAMP + + +@pytest.mark.asyncio +async def test_get_session_not_found(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + session = await service.get_session( + app_name=app_name, user_id=user_id, session_id=session_id + ) + + assert session is None + + mock_firestore_client.collection.assert_called_with("adk-session") + root_coll = mock_firestore_client.collection.return_value + root_coll.document.assert_called_with(app_name) + app_ref = root_coll.document.return_value + app_ref.collection.assert_called_with("users") + users_coll = app_ref.collection.return_value + users_coll.document.assert_called_with(user_id) + user_ref = users_coll.document.return_value + user_ref.collection.assert_called_with("sessions") + sessions_ref = user_ref.collection.return_value + sessions_ref.document.assert_called_with(session_id) + + +@pytest.mark.asyncio +async def test_get_session_found(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + root_coll = mock_firestore_client.collection.return_value + app_ref = root_coll.document.return_value + users_coll = app_ref.collection.return_value + user_ref = users_coll.document.return_value + sessions_ref = user_ref.collection.return_value + sessions_doc_ref = sessions_ref.document.return_value + + session_snap = mock.MagicMock() + session_snap.exists = True + session_snap.to_dict.return_value = { + "id": session_id, + "appName": app_name, + "userId": user_id, + "state": {"key": "value"}, + "updateTime": 1234567890.0, + } + sessions_doc_ref.get.return_value = session_snap + + # Decouple app and user documents so they do not duplicate values + app_state_coll = mock_firestore_client.collection.return_value + app_doc_ref = app_state_coll.document.return_value + app_snap = mock.MagicMock() + app_snap.exists = False + app_snap.to_dict.return_value = {} + app_doc_ref.get.return_value = app_snap + + user_state_coll = mock_firestore_client.collection.return_value + user_doc_ref = user_state_coll.document.return_value + user_snap = mock.MagicMock() + user_snap.exists = False + user_snap.to_dict.return_value = {} + user_doc_ref.get.return_value = user_snap + + events_collection_ref = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value + ) + event_doc = mock.MagicMock() + event_doc.to_dict.return_value = { + "event_data": {"invocation_id": "test_inv", "author": "user"} + } + events_collection_ref.get = mock.AsyncMock(return_value=[event_doc]) + + session = await service.get_session( + app_name=app_name, user_id=user_id, session_id=session_id + ) + + assert session is not None + assert session.id == session_id + assert session.state == {"key": "value"} + assert len(session.events) == 1 + assert session.events[0].invocation_id == "test_inv" + + +@pytest.mark.asyncio +async def test_delete_session(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + events_ref = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value + ) + event_doc = mock.AsyncMock() + + async def to_async_iter(iterable): + for item in iterable: + yield item + + events_ref.stream.return_value = to_async_iter([event_doc]) + + await service.delete_session( + app_name=app_name, user_id=user_id, session_id=session_id + ) + + events_ref.stream.assert_called_once() + mock_firestore_client.batch.assert_called_once() + batch = mock_firestore_client.batch.return_value + batch.delete.assert_called_once_with(event_doc.reference) + batch.commit.assert_called_once() + + session_doc_ref = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value.document.return_value + ) + session_doc_ref.delete.assert_called_once() + + +@pytest.mark.asyncio +async def test_append_event(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name=app_name, user_id=user_id) + event = Event(invocation_id="test_inv", author="user") + + session_doc_snapshot = mock.MagicMock() + session_doc_snapshot.exists = True + session_doc_snapshot.to_dict.return_value = {"revision": 0} + + root_coll = mock_firestore_client.collection.return_value + app_ref = root_coll.document.return_value + users_coll = app_ref.collection.return_value + user_ref = users_coll.document.return_value + sessions_ref = user_ref.collection.return_value + session_doc_ref = sessions_ref.document.return_value + session_doc_ref.get = mock.AsyncMock(return_value=session_doc_snapshot) + + with mock.patch("google.cloud.firestore.async_transactional", lambda x: x): + await service.append_event(session, event) + + from google.cloud import firestore + + transaction = mock_firestore_client.transaction.return_value + transaction.set.assert_called() # Invoked for events appends + transaction.update.assert_called_once() # Invoked for session revisions + + args, kwargs = transaction.update.call_args + assert args[1]["revision"] == 1 + assert args[1]["updateTime"] == firestore.SERVER_TIMESTAMP + + +@pytest.mark.asyncio +async def test_append_event_with_state_delta(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name=app_name, user_id=user_id) + + event = mock.MagicMock() + event.partial = False + event.id = "test_event_id" + event.actions.state_delta = { + "_app_my_key": "app_val", + "_user_my_key": "user_val", + "session_key": "session_val", + } + event.model_dump.return_value = {"id": "test_event_id", "author": "user"} + + service._update_app_state_transactional = mock.AsyncMock() + service._update_user_state_transactional = mock.AsyncMock() + + session_doc_snapshot = mock.MagicMock() + session_doc_snapshot.exists = True + session_doc_snapshot.to_dict.return_value = {"revision": 0} + + root_coll = mock_firestore_client.collection.return_value + app_ref = root_coll.document.return_value + users_coll = app_ref.collection.return_value + user_ref = users_coll.document.return_value + sessions_ref = user_ref.collection.return_value + session_doc_ref = sessions_ref.document.return_value + session_doc_ref.get = mock.AsyncMock(return_value=session_doc_snapshot) + + with mock.patch("google.cloud.firestore.async_transactional", lambda x: x): + await service.append_event(session, event) + + transaction = mock_firestore_client.transaction.return_value + transaction.set.assert_called() + + assert session.state["session_key"] == "session_val" + + from google.cloud import firestore + + transaction.update.assert_called_once() + args, kwargs = transaction.update.call_args + # In modular Firestore configurations alignments, updating variables mock assertions core setups + assert args[1]["state"] == session.state + assert args[1]["updateTime"] == firestore.SERVER_TIMESTAMP + + +@pytest.mark.asyncio +async def test_append_event_with_temp_state(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + from google.adk.events.event import Event + from google.adk.events.event import EventActions + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name=app_name, user_id=user_id) + + event = Event( + invocation_id="test_inv", + author="user", + actions=EventActions( + state_delta={"temp:k1": "v1", "session_key": "session_val"} + ), + ) + + session_doc_snapshot = mock.MagicMock() + session_doc_snapshot.exists = True + session_doc_snapshot.to_dict.return_value = {"revision": 0} + + root_coll = mock_firestore_client.collection.return_value + app_ref = root_coll.document.return_value + users_coll = app_ref.collection.return_value + user_ref = users_coll.document.return_value + sessions_ref = user_ref.collection.return_value + session_doc_ref = sessions_ref.document.return_value + session_doc_ref.get = mock.AsyncMock(return_value=session_doc_snapshot) + + with mock.patch("google.cloud.firestore.async_transactional", lambda x: x): + await service.append_event(session, event) + + # 1. Verify it was applied in-memory + assert session.state["temp:k1"] == "v1" + assert session.state["session_key"] == "session_val" + + # 2. Verify it was trimmed before Firestore save + transaction = mock_firestore_client.transaction.return_value + transaction.set.assert_called() + + # Filter calls for the one that actually sets the event data + event_set_calls = [ + call + for call in transaction.set.call_args_list + if len(call[0]) > 1 + and isinstance(call[0][1], dict) + and "event_data" in call[0][1] + ] + assert len(event_set_calls) == 1 + event_data = event_set_calls[0][0][1]["event_data"] + + # Temporary keys should be deleted from delta before snapshot + assert "temp:k1" not in event_data["actions"]["state_delta"] + assert event_data["actions"]["state_delta"]["session_key"] == "session_val" + + +@pytest.mark.asyncio +async def test_list_sessions_with_user_id(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + + session_doc = mock.MagicMock() + session_doc.to_dict.return_value = { + "id": "session1", + "appName": app_name, + "userId": user_id, + "state": {"session_key": "session_val"}, + } + + app_state_coll = mock.MagicMock() + user_state_coll = mock.MagicMock() + sessions_coll = mock.MagicMock() + + def collection_side_effect(name): + if name == service.app_state_collection: + return app_state_coll + elif name == service.user_state_collection: + return user_state_coll + elif name == service.root_collection: + return sessions_coll + return mock.MagicMock() + + mock_firestore_client.collection.side_effect = collection_side_effect + + app_doc = mock.MagicMock() + app_doc.exists = True + app_doc.to_dict.return_value = {"app_key": "app_val"} + app_doc_ref = mock.MagicMock() + app_state_coll.document.return_value = app_doc_ref + app_doc_ref.get = mock.AsyncMock(return_value=app_doc) + + user_doc = mock.MagicMock() + user_doc.exists = True + user_doc.to_dict.return_value = {"user_key": "user_val"} + user_app_doc = mock.MagicMock() + user_state_coll.document.return_value = user_app_doc + users_coll = mock.MagicMock() + user_app_doc.collection.return_value = users_coll + user_doc_ref = mock.MagicMock() + users_coll.document.return_value = user_doc_ref + user_doc_ref.get = mock.AsyncMock(return_value=user_doc) + + app_doc_in_root = mock.MagicMock() + sessions_coll.document.return_value = app_doc_in_root + users_coll = mock.MagicMock() + app_doc_in_root.collection.return_value = users_coll + user_doc_in_users = mock.MagicMock() + users_coll.document.return_value = user_doc_in_users + sessions_subcoll = mock.MagicMock() + user_doc_in_users.collection.return_value = sessions_subcoll + sessions_query = mock.MagicMock() + sessions_subcoll.where.return_value = sessions_query + sessions_query.get = mock.AsyncMock(return_value=[session_doc]) + + response = await service.list_sessions(app_name=app_name, user_id=user_id) + + assert len(response.sessions) == 1 + session = response.sessions[0] + assert session.id == "session1" + assert session.state["session_key"] == "session_val" + assert session.state["app:app_key"] == "app_val" + assert session.state["user:user_key"] == "user_val" + + +@pytest.mark.asyncio +async def test_list_sessions_without_user_id(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + + session_doc = mock.MagicMock() + session_doc.to_dict.return_value = { + "id": "session1", + "appName": app_name, + "userId": "user1", + "state": {"session_key": "session_val"}, + } + + mock_firestore_client.collection_group.return_value.where.return_value.get = ( + mock.AsyncMock(return_value=[session_doc]) + ) + + app_state_coll = mock.MagicMock() + user_state_coll = mock.MagicMock() + + def collection_side_effect(name): + if name == service.app_state_collection: + return app_state_coll + elif name == service.user_state_collection: + return user_state_coll + return mock.MagicMock() + + mock_firestore_client.collection.side_effect = collection_side_effect + + app_doc = mock.MagicMock() + app_doc.exists = True + app_doc.to_dict.return_value = {"app_key": "app_val"} + app_doc_ref = mock.MagicMock() + app_state_coll.document.return_value = app_doc_ref + app_doc_ref.get = mock.AsyncMock(return_value=app_doc) + + user_doc = mock.MagicMock() + user_doc.id = "user1" + user_doc.to_dict.return_value = {"user_key": "user_val"} + user_app_doc = mock.MagicMock() + user_state_coll.document.return_value = user_app_doc + users_coll = mock.MagicMock() + user_app_doc.collection.return_value = users_coll + users_coll.get = mock.AsyncMock(return_value=[user_doc]) + + response = await service.list_sessions(app_name=app_name) + + assert len(response.sessions) == 1 + session = response.sessions[0] + assert session.id == "session1" + assert session.state["app:app_key"] == "app_val" + assert session.state["user:user_key"] == "user_val" + + mock_firestore_client.collection_group.assert_called_once_with("sessions") + mock_firestore_client.collection_group.return_value.where.assert_called_once_with( + "appName", "==", app_name + ) + + +@pytest.mark.asyncio +async def test_list_sessions_filters_other_apps(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + + session_doc = mock.MagicMock() + session_doc.to_dict.return_value = { + "id": "session1", + "appName": app_name, + "userId": "user1", + "state": {"session_key": "session_val"}, + } + + mock_firestore_client.collection_group.return_value.where.return_value.get = ( + mock.AsyncMock(return_value=[session_doc]) + ) + + app_state_coll = mock.MagicMock() + user_state_coll = mock.MagicMock() + + def collection_side_effect(name): + if name == service.app_state_collection: + return app_state_coll + elif name == service.user_state_collection: + return user_state_coll + return mock.MagicMock() + + mock_firestore_client.collection.side_effect = collection_side_effect + + app_doc = mock.MagicMock() + app_doc.exists = True + app_doc.to_dict.return_value = {"app_key": "app_val"} + app_doc_ref = mock.MagicMock() + app_state_coll.document.return_value = app_doc_ref + app_doc_ref.get = mock.AsyncMock(return_value=app_doc) + + user_doc = mock.MagicMock() + user_doc.id = "user1" + user_doc.to_dict.return_value = {"user_key": "user_val"} + user_app_doc = mock.MagicMock() + user_state_coll.document.return_value = user_app_doc + users_coll = mock.MagicMock() + user_app_doc.collection.return_value = users_coll + users_coll.get = mock.AsyncMock(return_value=[user_doc]) + + response = await service.list_sessions(app_name=app_name) + + assert len(response.sessions) == 1 + assert response.sessions[0].id == "session1" + assert response.sessions[0].app_name == app_name + + mock_firestore_client.collection_group.assert_called_once_with("sessions") + mock_firestore_client.collection_group.return_value.where.assert_called_once_with( + "appName", "==", app_name + ) + + +@pytest.mark.asyncio +async def test_create_session_already_exists(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + + doc_snapshot = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.get.return_value + ) + doc_snapshot.exists = True + + from google.adk.errors.already_exists_error import AlreadyExistsError + + with mock.patch("google.cloud.firestore.async_transactional", lambda x: x): + with pytest.raises(AlreadyExistsError): + await service.create_session( + app_name=app_name, user_id=user_id, session_id="existing_id" + ) + + +@pytest.mark.asyncio +async def test_get_session_with_config(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + doc_snapshot = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.get.return_value + ) + doc_snapshot.exists = True + doc_snapshot.to_dict.return_value = { + "id": session_id, + "appName": app_name, + "userId": user_id, + } + + events_collection_ref = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value + ) + + from google.adk.sessions.base_session_service import GetSessionConfig + + config = GetSessionConfig(after_timestamp=1234567890.0, num_recent_events=5) + + await service.get_session( + app_name=app_name, user_id=user_id, session_id=session_id, config=config + ) + + events_collection_ref.where.assert_called_once() + events_collection_ref.limit_to_last.assert_called_once_with(5) + + +@pytest.mark.asyncio +async def test_delete_session_batching(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + events_ref = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value.document.return_value.collection.return_value + ) + + dummy_docs = [mock.MagicMock() for _ in range(501)] + + async def to_async_iter(iterable): + for item in iterable: + yield item + + events_ref.stream.return_value = to_async_iter(dummy_docs) + + batch = mock_firestore_client.batch.return_value + + await service.delete_session( + app_name=app_name, user_id=user_id, session_id=session_id + ) + + assert batch.commit.call_count == 2 + assert batch.delete.call_count == 501 + + +@pytest.mark.asyncio +async def test_append_event_partial(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + from google.adk.sessions.session import Session + + session = Session(id="test_session", app_name="test_app", user_id="test_user") + + event = Event(invocation_id="test_inv", author="user", partial=True) + + result = await service.append_event(session, event) + + assert result == event + mock_firestore_client.batch.assert_not_called() + + +@pytest.mark.asyncio +@pytest.mark.asyncio +async def test_get_session_empty_data(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + session_id = "test_session" + + doc_snapshot = ( + mock_firestore_client.collection.return_value.document.return_value.collection.return_value.document.return_value.get.return_value + ) + doc_snapshot.exists = True + doc_snapshot.to_dict.return_value = {} + + session = await service.get_session( + app_name=app_name, user_id=user_id, session_id=session_id + ) + + assert session is None + + +@pytest.mark.asyncio +async def test_list_sessions_missing_states(mock_firestore_client): + service = FirestoreSessionService(client=mock_firestore_client) + app_name = "test_app" + user_id = "test_user" + + session_doc = mock.MagicMock() + session_doc.to_dict.return_value = { + "id": "session1", + "appName": app_name, + "userId": user_id, + "state": {"session_key": "session_val"}, + } + + app_state_coll = mock.MagicMock() + user_state_coll = mock.MagicMock() + sessions_coll = mock.MagicMock() + + def collection_side_effect(name): + if name == service.app_state_collection: + return app_state_coll + elif name == service.user_state_collection: + return user_state_coll + elif name == service.root_collection: + return sessions_coll + return mock.MagicMock() + + mock_firestore_client.collection.side_effect = collection_side_effect + + app_doc = mock.MagicMock() + app_doc.exists = False + app_doc_ref = mock.MagicMock() + app_state_coll.document.return_value = app_doc_ref + app_doc_ref.get = mock.AsyncMock(return_value=app_doc) + + user_doc = mock.MagicMock() + user_doc.exists = False + user_app_doc = mock.MagicMock() + user_state_coll.document.return_value = user_app_doc + users_coll = mock.MagicMock() + user_app_doc.collection.return_value = users_coll + user_doc_ref = mock.MagicMock() + users_coll.document.return_value = user_doc_ref + user_doc_ref.get = mock.AsyncMock(return_value=user_doc) + + app_doc_in_root = mock.MagicMock() + sessions_coll.document.return_value = app_doc_in_root + users_coll = mock.MagicMock() + app_doc_in_root.collection.return_value = users_coll + user_doc_in_users = mock.MagicMock() + users_coll.document.return_value = user_doc_in_users + sessions_subcoll = mock.MagicMock() + user_doc_in_users.collection.return_value = sessions_subcoll + sessions_query = mock.MagicMock() + sessions_subcoll.where.return_value = sessions_query + sessions_query.get = mock.AsyncMock(return_value=[session_doc]) + + response = await service.list_sessions(app_name=app_name, user_id=user_id) + + assert len(response.sessions) == 1 + session = response.sessions[0] + assert session.id == "session1" + assert session.state["session_key"] == "session_val" + assert "_app_app_key" not in session.state + assert "_user_user_key" not in session.state From 8bc57283f3c584a5a6d6d774a316fe63342ed481 Mon Sep 17 00:00:00 2001 From: Sasha Sobran Date: Tue, 14 Apr 2026 09:27:34 -0700 Subject: [PATCH 184/192] fix: upgrade google-genai lower bound Co-authored-by: Sasha Sobran PiperOrigin-RevId: 899626720 --- pyproject.toml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ba87a0c93a..5b405e80c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,7 +44,7 @@ dependencies = [ "google-cloud-spanner>=3.56.0, <4.0.0", # For Spanner database "google-cloud-speech>=2.30.0, <3.0.0", # For Audio Transcription "google-cloud-storage>=2.18.0, <4.0.0", # For GCS Artifact service - "google-genai>=1.64.0, <2.0.0", # Google GenAI SDK + "google-genai>=1.72.0, <2.0.0", # Google GenAI SDK "graphviz>=0.20.2, <1.0.0", # Graphviz for graph rendering "httpx>=0.27.0, <1.0.0", # HTTP client library "jsonschema>=4.23.0, <5.0.0", # Agent Builder config validation @@ -123,7 +123,8 @@ test = [ "a2a-sdk>=0.3.0,<0.4.0", "anthropic>=0.43.0", # For anthropic model tests "crewai[tools];python_version>='3.11' and python_version<'3.12'", # For CrewaiTool tests; chromadb/pypika fail on 3.12+ - "google-cloud-firestore>=2.11.0", + "google-cloud-firestore>=2.11.0, <3.0.0", + "google-cloud-iamconnectorcredentials>=0.1.0, <0.2.0", "google-cloud-parametermanager>=0.4.0, <1.0.0", "kubernetes>=29.0.0", # For GkeCodeExecutor "langchain-community>=0.3.17", @@ -159,7 +160,7 @@ extensions = [ "beautifulsoup4>=3.2.2", # For load_web_page tool. "crewai[tools];python_version>='3.11' and python_version<'3.12'", # For CrewaiTool; chromadb/pypika fail on 3.12+ "docker>=7.0.0", # For ContainerCodeExecutor - "google-cloud-firestore>=2.11.0", # For Firestore services + "google-cloud-firestore>=2.11.0, <3.0.0", # For Firestore services "google-cloud-parametermanager>=0.4.0, <1.0.0", "kubernetes>=29.0.0", # For GkeCodeExecutor "k8s-agent-sandbox>=0.1.1.post3", # For GkeCodeExecutor sandbox mode @@ -178,6 +179,10 @@ toolbox = ["toolbox-adk>=1.0.0, <2.0.0"] slack = ["slack-bolt>=1.22.0"] +agent-identity = [ + "google-cloud-iamconnectorcredentials>=0.1.0, <0.2.0", +] + [tool.pyink] # Format py files following Google style-guide line-length = 80 From 70c5fc83a62d1e81d20986223f5c275b086f9822 Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Tue, 14 Apr 2026 15:17:22 -0700 Subject: [PATCH 185/192] refactor(live): Use `send_tool_response` for function responses The Gemini session now has a dedicated `send_tool_response` method, which is used instead of wrapping function responses in a `LiveClientToolResponse` and calling `send`. `send` is deprecated. Co-authored-by: Liang Wu PiperOrigin-RevId: 899796634 --- src/google/adk/models/gemini_llm_connection.py | 6 ++---- tests/unittests/models/test_gemini_llm_connection.py | 8 ++++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/google/adk/models/gemini_llm_connection.py b/src/google/adk/models/gemini_llm_connection.py index 5cd1976f41..8d8ed5d6dc 100644 --- a/src/google/adk/models/gemini_llm_connection.py +++ b/src/google/adk/models/gemini_llm_connection.py @@ -105,10 +105,8 @@ async def send_content(self, content: types.Content): # All parts have to be function responses. function_responses = [part.function_response for part in content.parts] logger.debug('Sending LLM function response: %s', function_responses) - await self._gemini_session.send( - input=types.LiveClientToolResponse( - function_responses=function_responses - ), + await self._gemini_session.send_tool_response( + function_responses=function_responses ) else: logger.debug('Sending LLM new content %s', content) diff --git a/tests/unittests/models/test_gemini_llm_connection.py b/tests/unittests/models/test_gemini_llm_connection.py index 2d2870a066..6f409a5565 100644 --- a/tests/unittests/models/test_gemini_llm_connection.py +++ b/tests/unittests/models/test_gemini_llm_connection.py @@ -118,10 +118,10 @@ async def test_send_content_function_response( await gemini_connection.send_content(content) - mock_gemini_session.send.assert_called_once() - call_args = mock_gemini_session.send.call_args[1] - assert 'input' in call_args - assert call_args['input'].function_responses == [function_response] + mock_gemini_session.send_tool_response.assert_called_once() + call_args = mock_gemini_session.send_tool_response.call_args[1] + assert 'function_responses' in call_args + assert call_args['function_responses'] == [function_response] @pytest.mark.asyncio From 494c360b2a82af5130f153ff615f84e4c2604a73 Mon Sep 17 00:00:00 2001 From: Kathy Wu Date: Tue, 14 Apr 2026 15:55:00 -0700 Subject: [PATCH 186/192] fix: Bump minimum mcp version from 1.23.0 to 1.24.0 We added sampling_capabilities to mcp client session, but it did not exist in mcp versions prior to 1.24.0. Fixes https://github.com/google/adk-python/issues/5058. Co-authored-by: Kathy Wu PiperOrigin-RevId: 899814337 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5b405e80c8..24c39e5767 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ dependencies = [ "graphviz>=0.20.2, <1.0.0", # Graphviz for graph rendering "httpx>=0.27.0, <1.0.0", # HTTP client library "jsonschema>=4.23.0, <5.0.0", # Agent Builder config validation - "mcp>=1.23.0, <2.0.0", # For MCP Toolset + "mcp>=1.24.0, <2.0.0", # For MCP Toolset "opentelemetry-api>=1.36.0, <1.39.0", # OpenTelemetry - keep below 1.39.0 due to current agent_engines exporter constraints. "opentelemetry-exporter-gcp-logging>=1.9.0a0, <2.0.0", "opentelemetry-exporter-gcp-monitoring>=1.9.0a0, <2.0.0", From a4c938775764794f42e00a89e3cb33da5119c38b Mon Sep 17 00:00:00 2001 From: Ahmad Ragab Date: Tue, 14 Apr 2026 19:05:39 -0400 Subject: [PATCH 187/192] fix: make `_EvalMetricResultWithInvocation.expected_invocation` `Optional` for conversation_scenario support (#5215) Co-authored-by: Ankur --- src/google/adk/evaluation/agent_evaluator.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/google/adk/evaluation/agent_evaluator.py b/src/google/adk/evaluation/agent_evaluator.py index c0fc736340..8306f1b75b 100644 --- a/src/google/adk/evaluation/agent_evaluator.py +++ b/src/google/adk/evaluation/agent_evaluator.py @@ -90,7 +90,7 @@ class _EvalMetricResultWithInvocation(BaseModel): """ actual_invocation: Invocation - expected_invocation: Invocation + expected_invocation: Optional[Invocation] = None eval_metric_result: EvalMetricResult @@ -438,15 +438,21 @@ def _print_details( "threshold": threshold, "prompt": AgentEvaluator._convert_content_to_text( per_invocation_result.expected_invocation.user_content + if per_invocation_result.expected_invocation + else per_invocation_result.actual_invocation.user_content ), "expected_response": AgentEvaluator._convert_content_to_text( per_invocation_result.expected_invocation.final_response + if per_invocation_result.expected_invocation + else None ), "actual_response": AgentEvaluator._convert_content_to_text( per_invocation_result.actual_invocation.final_response ), "expected_tool_calls": AgentEvaluator._convert_tool_calls_to_text( per_invocation_result.expected_invocation.intermediate_data + if per_invocation_result.expected_invocation + else None ), "actual_tool_calls": AgentEvaluator._convert_tool_calls_to_text( per_invocation_result.actual_invocation.intermediate_data From 67dc2ebfd42f175f2dd6ea58df51a03c575062c6 Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Tue, 14 Apr 2026 16:23:00 -0700 Subject: [PATCH 188/192] refactor(live): Use `send_client_content` to send conversation history The `send` method was deprecated. Co-authored-by: Liang Wu PiperOrigin-RevId: 899826160 --- src/google/adk/evaluation/agent_evaluator.py | 8 +----- .../adk/models/gemini_llm_connection.py | 8 ++---- .../models/test_gemini_llm_connection.py | 28 +++++++++---------- 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/src/google/adk/evaluation/agent_evaluator.py b/src/google/adk/evaluation/agent_evaluator.py index 8306f1b75b..c0fc736340 100644 --- a/src/google/adk/evaluation/agent_evaluator.py +++ b/src/google/adk/evaluation/agent_evaluator.py @@ -90,7 +90,7 @@ class _EvalMetricResultWithInvocation(BaseModel): """ actual_invocation: Invocation - expected_invocation: Optional[Invocation] = None + expected_invocation: Invocation eval_metric_result: EvalMetricResult @@ -438,21 +438,15 @@ def _print_details( "threshold": threshold, "prompt": AgentEvaluator._convert_content_to_text( per_invocation_result.expected_invocation.user_content - if per_invocation_result.expected_invocation - else per_invocation_result.actual_invocation.user_content ), "expected_response": AgentEvaluator._convert_content_to_text( per_invocation_result.expected_invocation.final_response - if per_invocation_result.expected_invocation - else None ), "actual_response": AgentEvaluator._convert_content_to_text( per_invocation_result.actual_invocation.final_response ), "expected_tool_calls": AgentEvaluator._convert_tool_calls_to_text( per_invocation_result.expected_invocation.intermediate_data - if per_invocation_result.expected_invocation - else None ), "actual_tool_calls": AgentEvaluator._convert_tool_calls_to_text( per_invocation_result.actual_invocation.intermediate_data diff --git a/src/google/adk/models/gemini_llm_connection.py b/src/google/adk/models/gemini_llm_connection.py index 8d8ed5d6dc..fd576fed02 100644 --- a/src/google/adk/models/gemini_llm_connection.py +++ b/src/google/adk/models/gemini_llm_connection.py @@ -81,11 +81,9 @@ async def send_history(self, history: list[types.Content]): if contents: logger.debug('Sending history to live connection: %s', contents) - await self._gemini_session.send( - input=types.LiveClientContent( - turns=contents, - turn_complete=contents[-1].role == 'user', - ), + await self._gemini_session.send_client_content( + turns=contents, + turn_complete=contents[-1].role == 'user', ) else: logger.info('no content is sent') diff --git a/tests/unittests/models/test_gemini_llm_connection.py b/tests/unittests/models/test_gemini_llm_connection.py index 6f409a5565..1673815280 100644 --- a/tests/unittests/models/test_gemini_llm_connection.py +++ b/tests/unittests/models/test_gemini_llm_connection.py @@ -81,11 +81,11 @@ async def test_send_history(gemini_connection, mock_gemini_session): await gemini_connection.send_history(history) - mock_gemini_session.send.assert_called_once() - call_args = mock_gemini_session.send.call_args[1] - assert 'input' in call_args - assert call_args['input'].turns == history - assert call_args['input'].turn_complete is False # Last message is from model + mock_gemini_session.send_client_content.assert_called_once() + call_args = mock_gemini_session.send_client_content.call_args[1] + assert 'turns' in call_args + assert call_args['turns'] == history + assert call_args['turn_complete'] is False # Last message is from model @pytest.mark.asyncio @@ -668,9 +668,9 @@ async def test_send_history_filters_audio(mock_gemini_session, audio_part): await connection.send_history(history) - mock_gemini_session.send.assert_called_once() - call_args = mock_gemini_session.send.call_args[1] - sent_contents = call_args['input'].turns + mock_gemini_session.send_client_content.assert_called_once() + call_args = mock_gemini_session.send_client_content.call_args[1] + sent_contents = call_args['turns'] # Only the model response should be sent (user audio filtered out) assert len(sent_contents) == 1 assert sent_contents[0].role == 'model' @@ -696,9 +696,9 @@ async def test_send_history_keeps_image_data(mock_gemini_session): await connection.send_history(history) - mock_gemini_session.send.assert_called_once() - call_args = mock_gemini_session.send.call_args[1] - sent_contents = call_args['input'].turns + mock_gemini_session.send_client_content.assert_called_once() + call_args = mock_gemini_session.send_client_content.call_args[1] + sent_contents = call_args['turns'] # Both contents should be sent (image is not filtered) assert len(sent_contents) == 2 assert sent_contents[0].parts[0].inline_data == image_blob @@ -728,9 +728,9 @@ async def test_send_history_mixed_content_filters_only_audio( await connection.send_history(history) - mock_gemini_session.send.assert_called_once() - call_args = mock_gemini_session.send.call_args[1] - sent_contents = call_args['input'].turns + mock_gemini_session.send_client_content.assert_called_once() + call_args = mock_gemini_session.send_client_content.call_args[1] + sent_contents = call_args['turns'] # Content should be sent but only with the text part assert len(sent_contents) == 1 assert len(sent_contents[0].parts) == 1 From 454188de5de0ef44adb7716230eacddcb060dab2 Mon Sep 17 00:00:00 2001 From: George Weale Date: Tue, 14 Apr 2026 17:12:56 -0700 Subject: [PATCH 189/192] fix: execute on_event_callback before append_event to persist plugin modifications Previously, on_event_callback ran after append_event, so plugin modifications (e.g. custom_metadata) were only visible in the yielded stream but never persisted to the session store. This moves the callback before persistence, matching the documented contract in base_plugin.py. Fixes #3990 Co-authored-by: George Weale PiperOrigin-RevId: 899845848 --- src/google/adk/plugins/base_plugin.py | 6 +- src/google/adk/runners.py | 59 +++++++++++++----- tests/unittests/test_runners.py | 89 +++++++++++++++++++++++++++ 3 files changed, 136 insertions(+), 18 deletions(-) diff --git a/src/google/adk/plugins/base_plugin.py b/src/google/adk/plugins/base_plugin.py index 3639f61aa2..54bfab2ed2 100644 --- a/src/google/adk/plugins/base_plugin.py +++ b/src/google/adk/plugins/base_plugin.py @@ -155,10 +155,10 @@ async def before_run_callback( async def on_event_callback( self, *, invocation_context: InvocationContext, event: Event ) -> Optional[Event]: - """Callback executed after an event is yielded from runner. + """Callback executed when the runner produces an event. - This is the ideal place to make modification to the event before the event - is handled by the underlying agent app. + This is the ideal place to modify the event before it is persisted to the + session service and yielded to the caller. Args: invocation_context: The context for the entire invocation. diff --git a/src/google/adk/runners.py b/src/google/adk/runners.py index 8e352794a4..3a8e49c3f2 100644 --- a/src/google/adk/runners.py +++ b/src/google/adk/runners.py @@ -791,6 +791,34 @@ def _should_append_event(self, event: Event, is_live_call: bool) -> bool: return False return True + def _get_output_event( + self, + *, + original_event: Event, + modified_event: Event | None, + run_config: RunConfig | None, + ) -> Event: + """Returns the event that should be persisted and yielded. + + Plugins may return a replacement event that only overrides a subset of + fields. Merge those changes onto the original event so the streamed event + and the persisted event stay aligned without losing the original event + identity. + """ + if modified_event is None: + return original_event + + _apply_run_config_custom_metadata(modified_event, run_config) + update = {} + for field_name in modified_event.model_fields_set: + if field_name in {'id', 'invocation_id', 'timestamp'}: + continue + update[field_name] = modified_event.__dict__[field_name] + output_event = original_event.model_copy(update=update) + if not output_event.author: + output_event.author = original_event.author + return output_event + async def _exec_with_plugin( self, invocation_context: InvocationContext, @@ -854,13 +882,24 @@ async def _exec_with_plugin( _apply_run_config_custom_metadata( event, invocation_context.run_config ) + # Step 3: Run the on_event callbacks before persisting so callback + # changes are stored in the session and match the streamed event. + modified_event = await plugin_manager.run_on_event_callback( + invocation_context=invocation_context, event=event + ) + output_event = self._get_output_event( + original_event=event, + modified_event=modified_event, + run_config=invocation_context.run_config, + ) + if is_live_call: if event.partial and _is_transcription(event): is_transcribing = True if is_transcribing and _is_tool_call_or_response(event): # only buffer function call and function response event which is # non-partial - buffered_events.append(event) + buffered_events.append(output_event) continue # Note for live/bidi: for audio response, it's considered as # non-partial event(event.partial=None) @@ -881,7 +920,7 @@ async def _exec_with_plugin( ) if self._should_append_event(event, is_live_call): await self.session_service.append_event( - session=session, event=event + session=session, event=output_event ) for buffered_event in buffered_events: @@ -897,25 +936,15 @@ async def _exec_with_plugin( if self._should_append_event(event, is_live_call): logger.debug('Appending non-buffered event: %s', event) await self.session_service.append_event( - session=session, event=event + session=session, event=output_event ) else: if event.partial is not True: await self.session_service.append_event( - session=session, event=event + session=session, event=output_event ) - # Step 3: Run the on_event callbacks to optionally modify the event. - modified_event = await plugin_manager.run_on_event_callback( - invocation_context=invocation_context, event=event - ) - if modified_event: - _apply_run_config_custom_metadata( - modified_event, invocation_context.run_config - ) - yield modified_event - else: - yield event + yield output_event # Step 4: Run the after_run callbacks to perform global cleanup tasks or # finalizing logs and metrics data. diff --git a/tests/unittests/test_runners.py b/tests/unittests/test_runners.py index b0d5bfb20a..e3bcaeb2a4 100644 --- a/tests/unittests/test_runners.py +++ b/tests/unittests/test_runners.py @@ -139,6 +139,7 @@ class MockPlugin(BasePlugin): "Modified user message ON_USER_CALLBACK_MSG from MockPlugin" ) ON_EVENT_CALLBACK_MSG = "Modified event ON_EVENT_CALLBACK_MSG from MockPlugin" + ON_EVENT_CALLBACK_METADATA = {"plugin_key": "plugin_value"} def __init__(self): super().__init__(name="mock_plugin") @@ -184,6 +185,7 @@ async def on_event_callback( ], role=event.content.role, ), + custom_metadata=self.ON_EVENT_CALLBACK_METADATA, ) @@ -359,6 +361,60 @@ async def test_run_live_auto_create_session(): assert session is not None +@pytest.mark.asyncio +async def test_run_live_persists_event_callback_modifications(): + """run_live should persist the same event it streams after callback changes.""" + session_service = InMemorySessionService() + artifact_service = InMemoryArtifactService() + plugin = MockPlugin() + plugin.enable_event_callback = True + runner = Runner( + app_name="live_app", + agent=MockLiveAgent("live_agent"), + session_service=session_service, + artifact_service=artifact_service, + plugins=[plugin], + ) + await session_service.create_session( + app_name="live_app", user_id="user", session_id="live_session" + ) + + from google.adk.agents.live_request_queue import LiveRequestQueue + + live_queue = LiveRequestQueue() + agen = runner.run_live( + user_id="user", + session_id="live_session", + live_request_queue=live_queue, + ) + + streamed_event = await agen.__anext__() + await agen.aclose() + + session = await session_service.get_session( + app_name="live_app", user_id="user", session_id="live_session" + ) + persisted_event = session.events[0] + + assert streamed_event.author == "live_agent" + assert streamed_event.invocation_id + assert streamed_event.content.parts[0].text == ( + MockPlugin.ON_EVENT_CALLBACK_MSG + ) + assert streamed_event.custom_metadata == MockPlugin.ON_EVENT_CALLBACK_METADATA + + assert persisted_event.id == streamed_event.id + assert persisted_event.timestamp == streamed_event.timestamp + assert persisted_event.author == streamed_event.author + assert persisted_event.invocation_id == streamed_event.invocation_id + assert persisted_event.content.parts[0].text == ( + MockPlugin.ON_EVENT_CALLBACK_MSG + ) + assert ( + persisted_event.custom_metadata == MockPlugin.ON_EVENT_CALLBACK_METADATA + ) + + @pytest.mark.asyncio async def test_runner_allows_nested_agent_directories(tmp_path, monkeypatch): project_root = tmp_path / "workspace" @@ -747,6 +803,39 @@ async def test_runner_modifies_event_after_execution(self): assert modified_event_message == MockPlugin.ON_EVENT_CALLBACK_MSG + @pytest.mark.asyncio + async def test_runner_persists_event_callback_modifications(self): + """Event callback output should be persisted, not only streamed.""" + self.plugin.enable_event_callback = True + + events = await self.run_test() + streamed_event = events[0] + + session = await self.session_service.get_session( + app_name=TEST_APP_ID, user_id=TEST_USER_ID, session_id=TEST_SESSION_ID + ) + persisted_event = session.events[1] + + assert streamed_event.author == "test_agent" + assert streamed_event.invocation_id + assert streamed_event.content.parts[0].text == ( + MockPlugin.ON_EVENT_CALLBACK_MSG + ) + assert ( + streamed_event.custom_metadata == MockPlugin.ON_EVENT_CALLBACK_METADATA + ) + + assert persisted_event.id == streamed_event.id + assert persisted_event.timestamp == streamed_event.timestamp + assert persisted_event.author == streamed_event.author + assert persisted_event.invocation_id == streamed_event.invocation_id + assert persisted_event.content.parts[0].text == ( + MockPlugin.ON_EVENT_CALLBACK_MSG + ) + assert ( + persisted_event.custom_metadata == MockPlugin.ON_EVENT_CALLBACK_METADATA + ) + @pytest.mark.asyncio async def test_runner_close_calls_plugin_close(self): """Test that runner.close() calls plugin manager close.""" From d337ddfc3e999ad3d4013bd9ea1b8b2afd3c67ab Mon Sep 17 00:00:00 2001 From: Liang Wu Date: Tue, 14 Apr 2026 22:23:46 -0700 Subject: [PATCH 190/192] chore: Update Live sample agents' models Co-authored-by: Liang Wu PiperOrigin-RevId: 899943556 --- .../live_bidi_streaming_multi_agent/agent.py | 28 ++++++++----------- .../agent.py | 5 +++- .../live_bidi_streaming_single_agent/agent.py | 9 +++--- .../live_bidi_streaming_tools_agent/agent.py | 9 +++--- .../live_tool_callbacks_agent/agent.py | 7 +++-- 5 files changed, 28 insertions(+), 30 deletions(-) diff --git a/contributing/samples/live_bidi_streaming_multi_agent/agent.py b/contributing/samples/live_bidi_streaming_multi_agent/agent.py index 312c043491..5c0dd5037a 100644 --- a/contributing/samples/live_bidi_streaming_multi_agent/agent.py +++ b/contributing/samples/live_bidi_streaming_multi_agent/agent.py @@ -30,11 +30,10 @@ def roll_die(sides: int) -> int: roll_agent = Agent( name="roll_agent", model=Gemini( - # see https://docs.cloud.google.com/vertex-ai/generative-ai/docs/migrate - # for vertex model names - model="gemini-live-2.5-flash-native-audio", # vertex - # see https://ai.google.dev/gemini-api/docs/models for AIS model names - # model='gemini-2.5-flash-native-audio-latest', # for AI studio + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API speech_config=types.SpeechConfig( voice_config=types.VoiceConfig( prebuilt_voice_config=types.PrebuiltVoiceConfig( @@ -85,11 +84,10 @@ def check_prime(nums: list[int]) -> str: prime_agent = Agent( name="prime_agent", model=Gemini( - # see https://docs.cloud.google.com/vertex-ai/generative-ai/docs/migrate - # for vertex model names - model="gemini-live-2.5-flash-native-audio", # vertex - # see https://ai.google.dev/gemini-api/docs/models for AIS model names - # model='gemini-2.5-flash-native-audio-latest', # for AI studio + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API speech_config=types.SpeechConfig( voice_config=types.VoiceConfig( prebuilt_voice_config=types.PrebuiltVoiceConfig( @@ -128,13 +126,11 @@ def get_current_weather(location: str): root_agent = Agent( - # find supported models here: https://google.github.io/adk-docs/get-started/streaming/quickstart-streaming/ model=Gemini( - # see https://docs.cloud.google.com/vertex-ai/generative-ai/docs/migrate - # for vertex model names - model="gemini-live-2.5-flash-native-audio", # vertex - # see https://ai.google.dev/gemini-api/docs/models for AIS model names - # model='gemini-2.5-flash-native-audio-latest', # for AI studio + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API speech_config=types.SpeechConfig( voice_config=types.VoiceConfig( prebuilt_voice_config=types.PrebuiltVoiceConfig( diff --git a/contributing/samples/live_bidi_streaming_parallel_tools_agent/agent.py b/contributing/samples/live_bidi_streaming_parallel_tools_agent/agent.py index 519c31a61b..46c7cfba09 100644 --- a/contributing/samples/live_bidi_streaming_parallel_tools_agent/agent.py +++ b/contributing/samples/live_bidi_streaming_parallel_tools_agent/agent.py @@ -29,7 +29,10 @@ def turn_on_tv(): root_agent = Agent( - model="gemini-live-2.5-flash-native-audio", + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API name="Home_helper", instruction="Be polite and answer all user's questions.", tools=[turn_on_lights, turn_on_tv], diff --git a/contributing/samples/live_bidi_streaming_single_agent/agent.py b/contributing/samples/live_bidi_streaming_single_agent/agent.py index f20c948641..447affa105 100755 --- a/contributing/samples/live_bidi_streaming_single_agent/agent.py +++ b/contributing/samples/live_bidi_streaming_single_agent/agent.py @@ -65,11 +65,10 @@ async def check_prime(nums: list[int]) -> str: root_agent = Agent( - # see https://docs.cloud.google.com/vertex-ai/generative-ai/docs/migrate - # for vertex model names - model='gemini-live-2.5-flash-native-audio', # vertex - # see https://ai.google.dev/gemini-api/docs/models for AIS model names - # model='gemini-2.5-flash-native-audio-latest', # for AI studio + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model='gemini-live-2.5-flash-native-audio', # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API name='roll_dice_agent', description=( 'hello world agent that can roll a dice of 6 sides and check prime' diff --git a/contributing/samples/live_bidi_streaming_tools_agent/agent.py b/contributing/samples/live_bidi_streaming_tools_agent/agent.py index 57e2279e10..543870f949 100644 --- a/contributing/samples/live_bidi_streaming_tools_agent/agent.py +++ b/contributing/samples/live_bidi_streaming_tools_agent/agent.py @@ -124,11 +124,10 @@ def stop_streaming(function_name: str): root_agent = Agent( - # see https://docs.cloud.google.com/vertex-ai/generative-ai/docs/migrate - # for vertex model names - model="gemini-live-2.5-flash-native-audio", # vertex - # see https://ai.google.dev/gemini-api/docs/models for AIS model names - # model='gemini-2.5-flash-native-audio-latest', # for AI studio + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API name="video_streaming_agent", instruction=""" You are a monitoring agent. You can do video monitoring and stock price monitoring diff --git a/contributing/samples/live_tool_callbacks_agent/agent.py b/contributing/samples/live_tool_callbacks_agent/agent.py index a140ac5a15..11a220138e 100644 --- a/contributing/samples/live_tool_callbacks_agent/agent.py +++ b/contributing/samples/live_tool_callbacks_agent/agent.py @@ -217,9 +217,10 @@ async def after_tool_async_callback( # Create the agent with tool callbacks root_agent = Agent( - # find supported models here: https://google.github.io/adk-docs/get-started/streaming/quickstart-streaming/ - model="gemini-2.0-flash-live-preview-04-09", # for Vertex project - # model="gemini-live-2.5-flash-preview", # for AI studio key + # Find supported models in Vertex here: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/live-api + model="gemini-live-2.5-flash-native-audio", # Vertex + # Find supported models in Gemini API here: https://ai.google.dev/gemini-api/docs/models + # model='gemini-2.5-flash-native-audio-preview-12-2025', # Gemini API name="tool_callbacks_agent", description=( "Live streaming agent that demonstrates tool callbacks functionality. " From 47fa7b743c37e3aa8302e78be552876c2784e6ff Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Wed, 15 Apr 2026 09:33:36 -0700 Subject: [PATCH 191/192] docs: update MCP Toolbox branding, binary version, and asset references ## Overview This PR updates internal tutorials and demonstration guidance following the renaming of the database connectivity tools (`genai-toolbox` -> `mcp-toolbox`) and aligns resource downloads with the newly scoped artifact destinations. ## Changes * Removed references to legacy `googleapis.github.io/genai-toolbox` pages. * Updated download commands to pull binaries directly from the rebranded bucket. * Bumped the embedded curl instruction default payload target to the newly stable `v1.1.0` release tier. PiperOrigin-RevId: 900207615 --- contributing/samples/toolbox_agent/README.md | 4 ++-- llms-full.txt | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/contributing/samples/toolbox_agent/README.md b/contributing/samples/toolbox_agent/README.md index cef75bb3ee..50ad72f27b 100644 --- a/contributing/samples/toolbox_agent/README.md +++ b/contributing/samples/toolbox_agent/README.md @@ -15,11 +15,11 @@ Before starting, ensure you have Python installed on your system. Run the following command to download and install the MCP Toolbox binary. > [!NOTE] -> You can find the latest version on the [Releases page](https://github.com/googleapis/genai-toolbox/releases) and update the version in the URL below. +> You can find the latest version on the [Releases page](https://github.com/googleapis/mcp-toolbox/releases) and update the version in the URL below. ```bash export OS="linux/amd64" # one of linux/amd64, darwin/arm64, darwin/amd64, or windows/amd64 -curl -O https://storage.googleapis.com/genai-toolbox/v0.31.0/$OS/toolbox +curl -O https://storage.googleapis.com/mcp-toolbox-for-databases/v1.1.0/$OS/toolbox chmod +x toolbox ``` diff --git a/llms-full.txt b/llms-full.txt index 1ea50993fc..11cfb9b309 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -9378,7 +9378,7 @@ and design patterns that help you use ADK together with MCP servers, including: ## MCP Toolbox for Databases -[MCP Toolbox for Databases](https://github.com/googleapis/genai-toolbox) is an +[MCP Toolbox for Databases](https://github.com/googleapis/mcp-toolbox) is an open source MCP server that helps you build Gen AI tools so that your agents can access data in your database. Google’s Agent Development Kit (ADK) has built in support for The MCP Toolbox for Databases. @@ -15733,7 +15733,7 @@ workflow as a tool for your agent or create a new one. ## Toolbox Tools for Databases -[MCP Toolbox for Databases](https://github.com/googleapis/genai-toolbox) is an +[MCP Toolbox for Databases](https://github.com/googleapis/mcp-toolbox) is an open source MCP server for databases. It was designed with enterprise-grade and production-quality in mind. It enables you to develop tools easier, faster, and more securely by handling the complexities such as connection pooling, @@ -15741,10 +15741,10 @@ authentication, and more. Google’s Agent Development Kit (ADK) has built in support for Toolbox. For more information on -[getting started](https://googleapis.github.io/genai-toolbox/getting-started) or -[configuring](https://googleapis.github.io/genai-toolbox/getting-started/configure/) +[getting started](https://mcp-toolbox.dev/documentation/introduction/#getting-started) or +[configuring](https://mcp-toolbox.dev/documentation/configuration/) Toolbox, see the -[documentation](https://googleapis.github.io/genai-toolbox/getting-started/introduction/). +[documentation](https://mcp-toolbox.dev/documentation/introduction/). ![GenAI Toolbox](../assets/mcp_db_toolbox.png) @@ -15754,8 +15754,8 @@ Toolbox is an open source server that you deploy and manage yourself. For more instructions on deploying and configuring, see the official Toolbox documentation: -* [Installing the Server](https://googleapis.github.io/genai-toolbox/getting-started/introduction/#installing-the-server) -* [Configuring Toolbox](https://googleapis.github.io/genai-toolbox/getting-started/configure/) +* [Installing the Server](https://mcp-toolbox.dev/documentation/introduction/#getting-started) +* [Configuring Toolbox](https://mcp-toolbox.dev/documentation/configuration/) ### Install client SDK @@ -15794,9 +15794,9 @@ root_agent = Agent( Toolbox has a variety of features to make developing Gen AI tools for databases. For more information, read more about the following features: -* [Authenticated Parameters](https://googleapis.github.io/genai-toolbox/resources/tools/#authenticated-parameters): bind tool inputs to values from OIDC tokens automatically, making it easy to run sensitive queries without potentially leaking data -* [Authorized Invocations:](https://googleapis.github.io/genai-toolbox/resources/tools/#authorized-invocations) restrict access to use a tool based on the users Auth token -* [OpenTelemetry](https://googleapis.github.io/genai-toolbox/how-to/export_telemetry/): get metrics and tracing from Toolbox with OpenTelemetry +* [Authenticated Parameters](https://mcp-toolbox.dev/documentation/connect-to/toolbox-sdks/python-sdk/core/#parameter-binding): bind tool inputs to values from OIDC tokens automatically, making it easy to run sensitive queries without potentially leaking data +* [Authorized Invocations:](https://mcp-toolbox.dev/documentation/connect-to/toolbox-sdks/python-sdk/core/#client-to-server-authentication) restrict access to use a tool based on the users Auth token +* [OpenTelemetry](https://mcp-toolbox.dev/documentation/connect-to/toolbox-sdks/python-sdk/core/#opentelemetry): get metrics and tracing from Toolbox with OpenTelemetry # Tools From 9ca8c384324e07e945146359f21010b438eb1bc6 Mon Sep 17 00:00:00 2001 From: Haiyuan Cao Date: Wed, 15 Apr 2026 10:10:07 -0700 Subject: [PATCH 192/192] fix: Resolve BigQuery plugin issues with A2A transfers, spans, and metadata Fixes #5073, #5310, and #5311 with three targeted updates to the `BigQueryAgentAnalyticsPlugin` (no changes to ADK core): - Classifies `TransferToAgentTool` transfers to `RemoteA2aAgent` as `TRANSFER_A2A` instead of the generic `TRANSFER_AGENT` by resolving the target agent at the call level. - Ensures a self-consistent BigQuery span tree by preferring the plugin's internal span stack over ambient OTel spans, resolving dangling `parent_span_id` references. - Surfaces remote A2A interaction metadata (`a2a:request`, `a2a:response`, etc.) in BigQuery by detecting them in custom metadata and logging new `A2A_INTERACTION` events. Co-authored-by: Haiyuan Cao PiperOrigin-RevId: 900224778 --- .../bigquery_agent_analytics_plugin.py | 226 ++++++-- .../test_bigquery_agent_analytics_plugin.py | 515 +++++++++++++++++- 2 files changed, 655 insertions(+), 86 deletions(-) diff --git a/src/google/adk/plugins/bigquery_agent_analytics_plugin.py b/src/google/adk/plugins/bigquery_agent_analytics_plugin.py index 9bbe6d7b23..8c9a7e188d 100644 --- a/src/google/adk/plugins/bigquery_agent_analytics_plugin.py +++ b/src/google/adk/plugins/bigquery_agent_analytics_plugin.py @@ -168,16 +168,57 @@ def _format_content( return " | ".join(parts), truncated -def _get_tool_origin(tool: "BaseTool") -> str: +def _find_transfer_target(agent, agent_name: str): + """Find a transfer target agent by name in the accessible agent tree. + + Searches the current agent's sub-agents, parent, and peer agents + to locate the transfer target. + + Args: + agent: The current agent executing the transfer. + agent_name: The name of the transfer target to find. + + Returns: + The matching agent object, or None if not found. + """ + for sub in getattr(agent, "sub_agents", []): + if sub.name == agent_name: + return sub + parent = getattr(agent, "parent_agent", None) + if parent is not None and parent.name == agent_name: + return parent + if parent is not None: + for peer in getattr(parent, "sub_agents", []): + if peer.name == agent_name and peer.name != agent.name: + return peer + return None + + +def _get_tool_origin( + tool: "BaseTool", + tool_args: Optional[dict[str, Any]] = None, + tool_context: Optional["ToolContext"] = None, +) -> str: """Returns the provenance category of a tool. Uses lazy imports to avoid circular dependencies. + For ``TransferToAgentTool`` the classification is **call-level**: when + *tool_args* and *tool_context* are supplied the selected + ``agent_name`` is resolved against the agent tree so that transfers + to a ``RemoteA2aAgent`` are labelled ``TRANSFER_A2A`` rather than + the generic ``TRANSFER_AGENT``. + Args: tool: The tool instance. + tool_args: Optional tool arguments, used for call-level classification of + TransferToAgentTool. + tool_context: Optional tool context, used to access the agent tree for + TransferToAgentTool classification. Returns: - One of LOCAL, MCP, A2A, SUB_AGENT, TRANSFER_AGENT, or UNKNOWN. + One of LOCAL, MCP, A2A, SUB_AGENT, TRANSFER_AGENT, + TRANSFER_A2A, or UNKNOWN. """ # Import lazily to avoid circular dependencies. # pylint: disable=g-import-not-at-top @@ -199,6 +240,15 @@ def _get_tool_origin(tool: "BaseTool") -> str: if McpTool is not None and isinstance(tool, McpTool): return "MCP" if isinstance(tool, TransferToAgentTool): + if RemoteA2aAgent is not None and tool_args and tool_context: + agent_name = tool_args.get("agent_name") + if agent_name: + target = _find_transfer_target( + tool_context._invocation_context.agent, + agent_name, + ) + if target is not None and isinstance(target, RemoteA2aAgent): + return "TRANSFER_A2A" return "TRANSFER_AGENT" if isinstance(tool, AgentTool): if RemoteA2aAgent is not None and isinstance(tool.agent, RemoteA2aAgent): @@ -1825,6 +1875,25 @@ def _get_events_schema() -> list[bigquery.SchemaField]: "JSON_VALUE(content, '$.tool') AS tool_name", "JSON_QUERY(content, '$.args') AS tool_args", ], + "A2A_INTERACTION": [ + "content AS response_content", + ( + "JSON_VALUE(attributes," + " '$.a2a_metadata.\"a2a:task_id\"') AS a2a_task_id" + ), + ( + "JSON_VALUE(attributes," + " '$.a2a_metadata.\"a2a:context_id\"') AS a2a_context_id" + ), + ( + "JSON_QUERY(attributes," + " '$.a2a_metadata.\"a2a:request\"') AS a2a_request" + ), + ( + "JSON_QUERY(attributes," + " '$.a2a_metadata.\"a2a:response\"') AS a2a_response" + ), + ], } _VIEW_SQL_TEMPLATE = """\ @@ -2552,17 +2621,34 @@ def _resolve_ids( ) -> tuple[Optional[str], Optional[str], Optional[str]]: """Resolves trace_id, span_id, and parent_span_id for a log row. + Resolution rules: + + * **trace_id** — ambient OTel trace wins (the plugin stack already + shares the ambient trace when initialised from an ambient span, + so in practice they agree). + * **span_id / parent_span_id** — the plugin's internal span stack + (``TraceManager``) is the preferred source. Ambient OTel spans + are only used as a fallback when the plugin stack has no span. + This ensures every ``parent_span_id`` in BigQuery references a + ``span_id`` that is also logged to BigQuery, producing a + self-consistent execution tree. + * **Explicit overrides** (``EventData``) always win last — they + are set by post-pop callbacks that have already captured the + correct plugin-stack values before the pop. + Priority order (highest first): - 1. Explicit ``EventData`` overrides (needed for post-pop callbacks). - 2. Ambient OTel span (the framework's ``start_as_current_span``). - When present this aligns BQ rows with Cloud Trace / o11y. - 3. Plugin's internal span stack (``TraceManager``). + 1. Explicit ``EventData`` overrides. + 2. Plugin's internal span stack (``TraceManager``) for + ``span_id`` / ``parent_span_id``. + 3. Ambient OTel span — always used for ``trace_id``; used for + ``span_id`` / ``parent_span_id`` only when the plugin stack + has no span. 4. ``invocation_id`` fallback for trace_id. Returns: (trace_id, span_id, parent_span_id) """ - # --- Layer 3: plugin stack baseline --- + # --- Plugin stack: span_id / parent_span_id baseline --- trace_id = TraceManager.get_trace_id(callback_context) plugin_span_id, plugin_parent_span_id = ( TraceManager.get_current_span_and_parent() @@ -2570,21 +2656,24 @@ def _resolve_ids( span_id = plugin_span_id parent_span_id = plugin_parent_span_id - # --- Layer 2: ambient OTel span --- + # --- Ambient OTel: trace_id always; span fallback only --- ambient = trace.get_current_span() ambient_ctx = ambient.get_span_context() if ambient_ctx.is_valid: trace_id = format(ambient_ctx.trace_id, "032x") - span_id = format(ambient_ctx.span_id, "016x") - # Reset parent — stale plugin-stack parent must not leak through - # when the ambient span is a root (no parent). - parent_span_id = None - # SDK spans expose .parent; non-recording spans do not. - parent_ctx = getattr(ambient, "parent", None) - if parent_ctx is not None and parent_ctx.span_id: - parent_span_id = format(parent_ctx.span_id, "016x") - - # --- Layer 1: explicit EventData overrides --- + # Only use ambient span IDs when the plugin stack has no span. + # Framework-internal spans (execute_tool, call_llm, etc.) are + # never written to BQ, so deriving parent_span_id from them + # creates phantom references. The plugin stack guarantees + # that both span_id and parent_span_id reference BQ rows. + if span_id is None: + span_id = format(ambient_ctx.span_id, "016x") + parent_span_id = None + parent_ctx = getattr(ambient, "parent", None) + if parent_ctx is not None and parent_ctx.span_id: + parent_span_id = format(parent_ctx.span_id, "016x") + + # --- Explicit EventData overrides (post-pop callbacks) --- if event_data.trace_id_override is not None: trace_id = event_data.trace_id_override if event_data.span_id_override is not None: @@ -2813,13 +2902,18 @@ async def on_event_callback( invocation_context: InvocationContext, event: "Event", ) -> None: - """Logs state changes and HITL events from the event stream. + """Logs state changes, HITL events, and A2A interactions. - Checks each event for a non-empty state_delta and logs it as a STATE_DELTA event. - Detects synthetic ``adk_request_*`` function calls (HITL pause events) and their corresponding function responses (HITL completions) and emits dedicated HITL event types. + - Detects events carrying A2A interaction metadata + (``a2a:request`` / ``a2a:response`` in ``custom_metadata``) + and logs them as ``A2A_INTERACTION`` events so the remote + agent's response and cross-reference IDs (``a2a:task_id``, + ``a2a:context_id``) are visible in BigQuery. The HITL detection must happen here (not in tool callbacks) because ``adk_request_credential``, ``adk_request_confirmation``, and @@ -2883,6 +2977,45 @@ async def on_event_callback( is_truncated=is_truncated, ) + # --- A2A interaction logging --- + # RemoteA2aAgent attaches cross-reference metadata to events: + # a2a:task_id, a2a:context_id — correlation keys + # a2a:request, a2a:response — full interaction payload + # Log an A2A_INTERACTION event when meaningful payload is present + # so the supervisor's BQ trace contains the remote agent's + # response and cross-reference IDs for JOINs. + meta = getattr(event, "custom_metadata", None) + if meta and ( + meta.get("a2a:request") is not None + or meta.get("a2a:response") is not None + ): + a2a_keys = {k: v for k, v in meta.items() if k.startswith("a2a:")} + a2a_truncated, is_truncated = _recursive_smart_truncate( + a2a_keys, self.config.max_content_length + ) + # Use the a2a:response as the event content when available, + # so the remote agent's answer is visible in the content + # column. + response_payload = a2a_keys.get("a2a:response") + content_dict = None + content_truncated = False + if response_payload is not None: + content_dict, content_truncated = _recursive_smart_truncate( + response_payload, + self.config.max_content_length, + ) + await self._log_event( + "A2A_INTERACTION", + callback_ctx, + raw_content=content_dict, + is_truncated=is_truncated or content_truncated, + event_data=EventData( + extra_attributes={ + "a2a_metadata": a2a_truncated, + }, + ), + ) + return None async def on_state_change_callback( @@ -2940,19 +3073,14 @@ async def after_run_callback( span_id, duration = TraceManager.pop_span() parent_span_id = TraceManager.get_current_span_id() - # Only override span IDs when no ambient OTel span exists. - # When ambient exists, _resolve_ids Layer 2 uses the framework's - # span IDs, keeping STARTING/COMPLETED pairs consistent. - has_ambient = trace.get_current_span().get_span_context().is_valid - await self._log_event( "INVOCATION_COMPLETED", callback_ctx, event_data=EventData( trace_id_override=trace_id, latency_ms=duration, - span_id_override=None if has_ambient else span_id, - parent_span_id_override=None if has_ambient else parent_span_id, + span_id_override=span_id, + parent_span_id_override=parent_span_id, ), ) finally: @@ -2995,18 +3123,13 @@ async def after_agent_callback( span_id, duration = TraceManager.pop_span() parent_span_id, _ = TraceManager.get_current_span_and_parent() - # Only override span IDs when no ambient OTel span exists. - # When ambient exists, _resolve_ids Layer 2 uses the framework's - # span IDs, keeping STARTING/COMPLETED pairs consistent. - has_ambient = trace.get_current_span().get_span_context().is_valid - await self._log_event( "AGENT_COMPLETED", callback_context, event_data=EventData( latency_ms=duration, - span_id_override=None if has_ambient else span_id, - parent_span_id_override=None if has_ambient else parent_span_id, + span_id_override=span_id, + parent_span_id_override=parent_span_id, ), ) @@ -3156,12 +3279,6 @@ async def after_model_callback( # Otherwise log_event will fetch current stack (which is parent). span_id = popped_span_id or span_id - # Only override span IDs when no ambient OTel span exists. - # When ambient exists, _resolve_ids Layer 2 uses the framework's - # span IDs, keeping LLM_REQUEST/LLM_RESPONSE pairs consistent. - has_ambient = trace.get_current_span().get_span_context().is_valid - use_override = is_popped and not has_ambient - await self._log_event( "LLM_RESPONSE", callback_context, @@ -3172,8 +3289,8 @@ async def after_model_callback( time_to_first_token_ms=tfft, model_version=llm_response.model_version, usage_metadata=llm_response.usage_metadata, - span_id_override=span_id if use_override else None, - parent_span_id_override=parent_span_id if use_override else None, + span_id_override=span_id if is_popped else None, + parent_span_id_override=(parent_span_id if is_popped else None), ), ) @@ -3195,9 +3312,6 @@ async def on_model_error_callback( span_id, duration = TraceManager.pop_span() parent_span_id, _ = TraceManager.get_current_span_and_parent() - # Only override span IDs when no ambient OTel span exists. - has_ambient = trace.get_current_span().get_span_context().is_valid - await self._log_event( "LLM_ERROR", callback_context, @@ -3205,8 +3319,8 @@ async def on_model_error_callback( status="ERROR", error_message=str(error), latency_ms=duration, - span_id_override=None if has_ambient else span_id, - parent_span_id_override=None if has_ambient else parent_span_id, + span_id_override=span_id, + parent_span_id_override=parent_span_id, ), ) @@ -3228,7 +3342,7 @@ async def before_tool_callback( args_truncated, is_truncated = _recursive_smart_truncate( tool_args, self.config.max_content_length ) - tool_origin = _get_tool_origin(tool) + tool_origin = _get_tool_origin(tool, tool_args, tool_context) content_dict = { "tool": tool.name, "args": args_truncated, @@ -3262,7 +3376,7 @@ async def after_tool_callback( resp_truncated, is_truncated = _recursive_smart_truncate( result, self.config.max_content_length ) - tool_origin = _get_tool_origin(tool) + tool_origin = _get_tool_origin(tool, tool_args, tool_context) content_dict = { "tool": tool.name, "result": resp_truncated, @@ -3271,13 +3385,10 @@ async def after_tool_callback( span_id, duration = TraceManager.pop_span() parent_span_id, _ = TraceManager.get_current_span_and_parent() - # Only override span IDs when no ambient OTel span exists. - has_ambient = trace.get_current_span().get_span_context().is_valid - event_data = EventData( latency_ms=duration, - span_id_override=None if has_ambient else span_id, - parent_span_id_override=None if has_ambient else parent_span_id, + span_id_override=span_id, + parent_span_id_override=parent_span_id, ) await self._log_event( "TOOL_COMPLETED", @@ -3307,7 +3418,7 @@ async def on_tool_error_callback( args_truncated, is_truncated = _recursive_smart_truncate( tool_args, self.config.max_content_length ) - tool_origin = _get_tool_origin(tool) + tool_origin = _get_tool_origin(tool, tool_args, tool_context) content_dict = { "tool": tool.name, "args": args_truncated, @@ -3316,9 +3427,6 @@ async def on_tool_error_callback( span_id, duration = TraceManager.pop_span() parent_span_id, _ = TraceManager.get_current_span_and_parent() - # Only override span IDs when no ambient OTel span exists. - has_ambient = trace.get_current_span().get_span_context().is_valid - await self._log_event( "TOOL_ERROR", tool_context, @@ -3328,7 +3436,7 @@ async def on_tool_error_callback( status="ERROR", error_message=str(error), latency_ms=duration, - span_id_override=None if has_ambient else span_id, - parent_span_id_override=None if has_ambient else parent_span_id, + span_id_override=span_id, + parent_span_id_override=parent_span_id, ), ) diff --git a/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py b/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py index 4dd986386f..46efbe6d62 100644 --- a/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py +++ b/tests/unittests/plugins/test_bigquery_agent_analytics_plugin.py @@ -3259,8 +3259,49 @@ def test_none_override_keeps_default(self, callback_context): assert span_id == "span-1" assert parent_id == "parent-1" - def test_ambient_otel_span_takes_priority(self, callback_context): - """When an ambient OTel span is valid, its IDs take priority.""" + def test_ambient_provides_trace_id_only_when_stack_present( + self, callback_context + ): + """Plugin stack owns span_id/parent; ambient only provides trace_id.""" + from opentelemetry.sdk.trace import TracerProvider as SdkProvider + from opentelemetry.sdk.trace.export import SimpleSpanProcessor + from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter + + provider = SdkProvider() + provider.add_span_processor(SimpleSpanProcessor(InMemorySpanExporter())) + real_tracer = provider.get_tracer("test") + + ed = bigquery_agent_analytics_plugin.EventData() + + with real_tracer.start_as_current_span("invocation") as parent_span: + with real_tracer.start_as_current_span("agent") as agent_span: + ambient_ctx = agent_span.get_span_context() + expected_trace = format(ambient_ctx.trace_id, "032x") + + # Plugin stack has spans — these should win for span/parent. + with ( + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_current_span_and_parent", + return_value=("plugin-span", "plugin-parent"), + ), + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_trace_id", + return_value="plugin-trace", + ), + ): + trace_id, span_id, parent_id = self._resolve(ed, callback_context) + + # trace_id comes from ambient OTel. + assert trace_id == expected_trace + # span_id and parent_span_id come from plugin stack. + assert span_id == "plugin-span" + assert parent_id == "plugin-parent" + provider.shutdown() + + def test_ambient_fallback_when_no_plugin_stack(self, callback_context): + """Ambient OTel provides span_id/parent when plugin stack is empty.""" from opentelemetry.sdk.trace import TracerProvider as SdkProvider from opentelemetry.sdk.trace.export import SimpleSpanProcessor from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter @@ -3278,7 +3319,20 @@ def test_ambient_otel_span_takes_priority(self, callback_context): expected_span = format(ambient_ctx.span_id, "016x") expected_parent = format(parent_span.get_span_context().span_id, "016x") - trace_id, span_id, parent_id = self._resolve(ed, callback_context) + # Plugin stack returns None — ambient is the fallback. + with ( + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_current_span_and_parent", + return_value=(None, None), + ), + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_trace_id", + return_value=None, + ), + ): + trace_id, span_id, parent_id = self._resolve(ed, callback_context) assert trace_id == expected_trace assert span_id == expected_span @@ -3309,8 +3363,8 @@ def test_override_beats_ambient(self, callback_context): assert parent_id == "forced-parent" provider.shutdown() - def test_ambient_root_span_no_self_parent(self, callback_context): - """Ambient root span (no parent) must not produce self-parent.""" + def test_plugin_stack_wins_over_ambient_root_span(self, callback_context): + """Plugin stack span is used even when ambient root span exists.""" from opentelemetry.sdk.trace import TracerProvider as SdkProvider from opentelemetry.sdk.trace.export import SimpleSpanProcessor from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter @@ -3319,7 +3373,7 @@ def test_ambient_root_span_no_self_parent(self, callback_context): provider.add_span_processor(SimpleSpanProcessor(InMemorySpanExporter())) real_tracer = provider.get_tracer("test") - # Seed the plugin stack with a span so there's a stale parent. + # Seed the plugin stack with a span. bigquery_agent_analytics_plugin._span_records_ctx.set(None) with mock.patch.object( bigquery_agent_analytics_plugin, "tracer", real_tracer @@ -3328,29 +3382,68 @@ def test_ambient_root_span_no_self_parent(self, callback_context): callback_context, "plugin-child" ) + # Capture the plugin span_id that was pushed. + plugin_span_id, _ = ( + bigquery_agent_analytics_plugin.TraceManager.get_current_span_and_parent() + ) + ed = bigquery_agent_analytics_plugin.EventData() # Single root ambient span — no parent. with real_tracer.start_as_current_span("root_invocation") as root: trace_id, span_id, parent_id = self._resolve(ed, callback_context) - root_span_id = format(root.get_span_context().span_id, "016x") + ambient_trace = format(root.get_span_context().trace_id, "032x") - # span_id should be the ambient root's span_id - assert span_id == root_span_id - # parent must be None — not the stale plugin parent, not self + # trace_id comes from ambient. + assert trace_id == ambient_trace + # span_id comes from plugin stack, not ambient. + assert span_id == plugin_span_id + # parent is None — only one span in plugin stack. assert parent_id is None - assert span_id != parent_id # Cleanup bigquery_agent_analytics_plugin.TraceManager.pop_span() provider.shutdown() - def test_ambient_span_used_for_completed_event(self, callback_context): - """Completed event with overrides should use ambient when present. + def test_ambient_root_fallback_no_self_parent(self, callback_context): + """Ambient root span fallback must not produce self-parent.""" + from opentelemetry.sdk.trace import TracerProvider as SdkProvider + from opentelemetry.sdk.trace.export import SimpleSpanProcessor + from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter + + provider = SdkProvider() + provider.add_span_processor(SimpleSpanProcessor(InMemorySpanExporter())) + real_tracer = provider.get_tracer("test") + + ed = bigquery_agent_analytics_plugin.EventData() + + # Plugin stack empty — ambient provides the fallback. + with ( + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_current_span_and_parent", + return_value=(None, None), + ), + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_trace_id", + return_value=None, + ), + ): + with real_tracer.start_as_current_span("root") as root: + trace_id, span_id, parent_id = self._resolve(ed, callback_context) + root_span_id = format(root.get_span_context().span_id, "016x") + + assert span_id == root_span_id + assert parent_id is None + provider.shutdown() + + def test_plugin_stack_pairs_starting_completed(self, callback_context): + """STARTING/COMPLETED pairing uses plugin stack, not ambient. - When an ambient OTel span is valid, passing None overrides lets - _resolve_ids Layer 2 pick the ambient span — matching the - STARTING event's span_id. + Post-pop callbacks now always pass explicit overrides from the + plugin stack. The plugin stack span_id is used for both events + regardless of ambient OTel state. """ from opentelemetry.sdk.trace import TracerProvider as SdkProvider from opentelemetry.sdk.trace.export import SimpleSpanProcessor @@ -3360,23 +3453,33 @@ def test_ambient_span_used_for_completed_event(self, callback_context): provider.add_span_processor(SimpleSpanProcessor(InMemorySpanExporter())) real_tracer = provider.get_tracer("test") - with real_tracer.start_as_current_span("invoke_agent") as agent_span: - expected_span = format(agent_span.get_span_context().span_id, "016x") - - # Simulate STARTING: no overrides → ambient Layer 2 wins. - ed_starting = bigquery_agent_analytics_plugin.EventData() - _, span_starting, _ = self._resolve(ed_starting, callback_context) + with real_tracer.start_as_current_span("invoke_agent"): + # Simulate STARTING: plugin stack provides span_id. + with ( + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_current_span_and_parent", + return_value=("plugin-agent", "plugin-inv"), + ), + mock.patch.object( + bigquery_agent_analytics_plugin.TraceManager, + "get_trace_id", + return_value="plugin-trace", + ), + ): + ed_starting = bigquery_agent_analytics_plugin.EventData() + _, span_starting, _ = self._resolve(ed_starting, callback_context) - # Simulate COMPLETED: None overrides (ambient check passed). + # Simulate COMPLETED: explicit override from popped span. ed_completed = bigquery_agent_analytics_plugin.EventData( - span_id_override=None, - parent_span_id_override=None, + span_id_override="plugin-agent", + parent_span_id_override="plugin-inv", latency_ms=42, ) _, span_completed, _ = self._resolve(ed_completed, callback_context) - assert span_starting == expected_span - assert span_completed == expected_span + assert span_starting == "plugin-agent" + assert span_completed == "plugin-agent" assert span_starting == span_completed provider.shutdown() @@ -4486,6 +4589,228 @@ def test_transfer_tool_returns_transfer_agent(self): result = bigquery_agent_analytics_plugin._get_tool_origin(tool) assert result == "TRANSFER_AGENT" + def test_transfer_tool_without_args_returns_transfer_agent(self): + """TransferToAgentTool without tool_args falls back to TRANSFER_AGENT.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + tool = TransferToAgentTool(agent_names=["remote_a2a"]) + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, tool_args=None, tool_context=None + ) + assert result == "TRANSFER_AGENT" + + def test_transfer_to_remote_a2a_sub_agent_returns_transfer_a2a(self): + """Transfer to a RemoteA2aAgent sub-agent is classified TRANSFER_A2A.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + try: + from google.adk.agents.remote_a2a_agent import RemoteA2aAgent + except ImportError: + pytest.skip("A2A agent not available") + + remote_agent = mock.MagicMock(spec=RemoteA2aAgent) + remote_agent.name = "remote_a2a" + + current_agent = mock.MagicMock() + current_agent.name = "root" + current_agent.sub_agents = [remote_agent] + current_agent.parent_agent = None + + inv_ctx = mock.MagicMock() + inv_ctx.agent = current_agent + tool_context = mock.MagicMock() + tool_context._invocation_context = inv_ctx + + tool = TransferToAgentTool(agent_names=["remote_a2a"]) + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, + tool_args={"agent_name": "remote_a2a"}, + tool_context=tool_context, + ) + assert result == "TRANSFER_A2A" + + def test_transfer_to_local_sub_agent_returns_transfer_agent(self): + """Transfer to a local sub-agent is still classified TRANSFER_AGENT.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + local_agent = mock.MagicMock() + local_agent.name = "local_sub" + + current_agent = mock.MagicMock() + current_agent.name = "root" + current_agent.sub_agents = [local_agent] + current_agent.parent_agent = None + + inv_ctx = mock.MagicMock() + inv_ctx.agent = current_agent + tool_context = mock.MagicMock() + tool_context._invocation_context = inv_ctx + + tool = TransferToAgentTool(agent_names=["local_sub"]) + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, + tool_args={"agent_name": "local_sub"}, + tool_context=tool_context, + ) + assert result == "TRANSFER_AGENT" + + def test_transfer_to_a2a_peer_returns_transfer_a2a(self): + """Transfer to a RemoteA2aAgent peer is classified TRANSFER_A2A.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + try: + from google.adk.agents.remote_a2a_agent import RemoteA2aAgent + except ImportError: + pytest.skip("A2A agent not available") + + remote_peer = mock.MagicMock(spec=RemoteA2aAgent) + remote_peer.name = "remote_peer" + + current_agent = mock.MagicMock() + current_agent.name = "child" + current_agent.sub_agents = [] + + parent_agent = mock.MagicMock() + parent_agent.name = "parent" + parent_agent.sub_agents = [current_agent, remote_peer] + current_agent.parent_agent = parent_agent + + inv_ctx = mock.MagicMock() + inv_ctx.agent = current_agent + tool_context = mock.MagicMock() + tool_context._invocation_context = inv_ctx + + tool = TransferToAgentTool( + agent_names=["remote_peer"], + ) + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, + tool_args={"agent_name": "remote_peer"}, + tool_context=tool_context, + ) + assert result == "TRANSFER_A2A" + + def test_transfer_mixed_targets_classifies_per_call(self): + """A single TransferToAgentTool with mixed targets classifies per call.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + try: + from google.adk.agents.remote_a2a_agent import RemoteA2aAgent + except ImportError: + pytest.skip("A2A agent not available") + + remote_agent = mock.MagicMock(spec=RemoteA2aAgent) + remote_agent.name = "remote_a2a" + local_agent = mock.MagicMock() + local_agent.name = "local_sub" + + current_agent = mock.MagicMock() + current_agent.name = "root" + current_agent.sub_agents = [remote_agent, local_agent] + current_agent.parent_agent = None + + inv_ctx = mock.MagicMock() + inv_ctx.agent = current_agent + tool_context = mock.MagicMock() + tool_context._invocation_context = inv_ctx + + tool = TransferToAgentTool( + agent_names=["remote_a2a", "local_sub"], + ) + + # Transfer to remote target → TRANSFER_A2A + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, + tool_args={"agent_name": "remote_a2a"}, + tool_context=tool_context, + ) + assert result == "TRANSFER_A2A" + + # Transfer to local target → TRANSFER_AGENT + result = bigquery_agent_analytics_plugin._get_tool_origin( + tool, + tool_args={"agent_name": "local_sub"}, + tool_context=tool_context, + ) + assert result == "TRANSFER_AGENT" + + @pytest.mark.asyncio + async def test_tool_error_callback_classifies_a2a_transfer( + self, + mock_auth_default, + mock_bq_client, + mock_write_client, + mock_to_arrow_schema, + dummy_arrow_schema, + mock_asyncio_to_thread, + ): + """on_tool_error_callback produces TRANSFER_A2A for RemoteA2aAgent.""" + from google.adk.tools.transfer_to_agent_tool import TransferToAgentTool + + try: + from google.adk.agents.remote_a2a_agent import RemoteA2aAgent + except ImportError: + pytest.skip("A2A agent not available") + + remote_agent = mock.MagicMock(spec=RemoteA2aAgent) + remote_agent.name = "remote_a2a" + + mock_agent = mock.MagicMock(spec=base_agent.BaseAgent) + mock_agent.name = "root" + mock_agent.instruction = "" + mock_agent.sub_agents = [remote_agent] + mock_agent.parent_agent = None + + mock_s = mock.create_autospec( + session_lib.Session, instance=True, spec_set=True + ) + type(mock_s).id = mock.PropertyMock(return_value="sess-1") + type(mock_s).user_id = mock.PropertyMock(return_value="user-1") + type(mock_s).app_name = mock.PropertyMock(return_value="test_app") + type(mock_s).state = mock.PropertyMock(return_value={}) + + inv_ctx = InvocationContext( + agent=mock_agent, + session=mock_s, + invocation_id="inv-err", + session_service=mock.create_autospec( + base_session_service_lib.BaseSessionService, + instance=True, + spec_set=True, + ), + plugin_manager=mock.create_autospec( + plugin_manager_lib.PluginManager, + instance=True, + spec_set=True, + ), + ) + tool_ctx = tool_context_lib.ToolContext(invocation_context=inv_ctx) + tool = TransferToAgentTool(agent_names=["remote_a2a"]) + + async with managed_plugin( + PROJECT_ID, DATASET_ID, table_id=TABLE_ID + ) as plugin: + await plugin._ensure_started() + mock_write_client.append_rows.reset_mock() + + bigquery_agent_analytics_plugin.TraceManager.push_span(tool_ctx, "tool") + await plugin.on_tool_error_callback( + tool=tool, + tool_args={"agent_name": "remote_a2a"}, + tool_context=tool_ctx, + error=RuntimeError("connection refused"), + ) + await asyncio.sleep(0.01) + + rows = await _get_captured_rows_async( + mock_write_client, dummy_arrow_schema + ) + + assert len(rows) == 1 + assert rows[0]["event_type"] == "TOOL_ERROR" + content = json.loads(rows[0]["content"]) + assert content["tool_origin"] == "TRANSFER_A2A" + def test_mcp_tool_returns_mcp(self): try: from google.adk.tools.mcp_tool.mcp_tool import McpTool @@ -6672,3 +6997,139 @@ def _fake_run_coroutine_threadsafe(coro, loop): mock_rcts.assert_called() call_args = mock_rcts.call_args assert call_args[0][1] is other_loop + + +# ============================================================== +# TEST CLASS: A2A_INTERACTION event logging via on_event_callback +# ============================================================== +class TestA2AInteractionLogging: + """Tests for A2A interaction event emission via on_event_callback. + + When a RemoteA2aAgent processes a response, it attaches A2A + metadata (``a2a:task_id``, ``a2a:context_id``, ``a2a:request``, + ``a2a:response``) to the event's ``custom_metadata``. The + plugin's ``on_event_callback`` should detect events carrying + ``a2a:request`` or ``a2a:response`` and log an + ``A2A_INTERACTION`` event so the remote agent's response and + cross-reference IDs are visible in BigQuery. + """ + + @pytest.mark.asyncio + async def test_a2a_interaction_logged_for_response_metadata( + self, + bq_plugin_inst, + mock_write_client, + invocation_context, + dummy_arrow_schema, + ): + """Event with a2a:response in custom_metadata emits A2A_INTERACTION.""" + a2a_meta = { + "a2a:task_id": "task-abc", + "a2a:context_id": "ctx-123", + "a2a:response": {"status": "completed", "text": "result"}, + } + event = event_lib.Event( + author="remote_agent", + custom_metadata=a2a_meta, + ) + + bigquery_agent_analytics_plugin.TraceManager.push_span(invocation_context) + result = await bq_plugin_inst.on_event_callback( + invocation_context=invocation_context, event=event + ) + assert result is None + + await asyncio.sleep(0.05) + rows = await _get_captured_rows_async(mock_write_client, dummy_arrow_schema) + event_types = [r["event_type"] for r in rows] + assert "A2A_INTERACTION" in event_types + + a2a_row = next(r for r in rows if r["event_type"] == "A2A_INTERACTION") + attributes = json.loads(a2a_row["attributes"]) + assert "a2a_metadata" in attributes + assert attributes["a2a_metadata"]["a2a:task_id"] == "task-abc" + assert attributes["a2a_metadata"]["a2a:context_id"] == "ctx-123" + + # Content should contain the a2a:response payload. + content = json.loads(a2a_row["content"]) + assert content["status"] == "completed" + + @pytest.mark.asyncio + async def test_a2a_interaction_logged_for_request_metadata( + self, + bq_plugin_inst, + mock_write_client, + invocation_context, + dummy_arrow_schema, + ): + """Event with a2a:request (no a2a:response) emits A2A_INTERACTION.""" + a2a_meta = { + "a2a:task_id": "task-xyz", + "a2a:request": {"message": "hello"}, + } + event = event_lib.Event( + author="remote_agent", + custom_metadata=a2a_meta, + ) + + bigquery_agent_analytics_plugin.TraceManager.push_span(invocation_context) + result = await bq_plugin_inst.on_event_callback( + invocation_context=invocation_context, event=event + ) + assert result is None + + await asyncio.sleep(0.05) + rows = await _get_captured_rows_async(mock_write_client, dummy_arrow_schema) + event_types = [r["event_type"] for r in rows] + assert "A2A_INTERACTION" in event_types + + a2a_row = next(r for r in rows if r["event_type"] == "A2A_INTERACTION") + attributes = json.loads(a2a_row["attributes"]) + assert attributes["a2a_metadata"]["a2a:request"] == {"message": "hello"} + # No a2a:response → content should be None. + assert a2a_row["content"] is None + + @pytest.mark.asyncio + async def test_no_a2a_interaction_for_irrelevant_metadata( + self, + bq_plugin_inst, + mock_write_client, + invocation_context, + ): + """Events with only a2a:task_id (no request/response) are skipped.""" + a2a_meta = { + "a2a:task_id": "task-only", + "a2a:context_id": "ctx-only", + } + event = event_lib.Event( + author="remote_agent", + custom_metadata=a2a_meta, + ) + + result = await bq_plugin_inst.on_event_callback( + invocation_context=invocation_context, event=event + ) + assert result is None + + await asyncio.sleep(0.05) + # No events logged — a2a:task_id alone is not a meaningful + # interaction payload. + assert mock_write_client.append_rows.call_count == 0 + + @pytest.mark.asyncio + async def test_no_a2a_interaction_for_no_metadata( + self, + bq_plugin_inst, + mock_write_client, + invocation_context, + ): + """Events without custom_metadata produce no A2A_INTERACTION.""" + event = event_lib.Event(author="regular_agent") + + result = await bq_plugin_inst.on_event_callback( + invocation_context=invocation_context, event=event + ) + assert result is None + + await asyncio.sleep(0.05) + assert mock_write_client.append_rows.call_count == 0